Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oxMMU-0006Vm-4k for pgsql-hackers@arkaria.postgresql.org; Tue, 22 Nov 2022 06:02:27 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1oxMMS-0008SM-3N for pgsql-hackers@arkaria.postgresql.org; Tue, 22 Nov 2022 06:02:24 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oxMMP-0008Mw-QU for pgsql-hackers@lists.postgresql.org; Tue, 22 Nov 2022 06:02:23 +0000 Received: from smtp-fw-80007.amazon.com ([99.78.197.218]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oxMMJ-00058X-Lb for pgsql-hackers@postgresql.org; Tue, 22 Nov 2022 06:02:20 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amazon.com; i=@amazon.com; q=dns/txt; s=amazon201209; t=1669096935; x=1700632935; h=from:to:cc:date:message-id:references:in-reply-to: mime-version:subject; bh=94RkVHWbFiZRThU9+vLVFBgLbazPDTIT7prLcJuGVeQ=; b=Yytn04ZfltxGGxHVt5pJm1bNlK31qOd7iiQuu4DznBtjms1hS8bvzbR0 sxVSv7uzruwGXHRp4UbBU5FkJEiX59eNRVbUwToT74N4yACD5VUIsuR74 V2Jh3dw1znpwrIjhweByuvCNEcBDMKLtoBojdUI8CWsTrkALqWOjCTHtF A=; X-Amazon-filename: slru_to_buffer_cache_with_page_headers_v2.patch X-IronPort-AV: E=Sophos;i="5.96,183,1665446400"; d="scan'208,223";a="153420298" Subject: Re: SLRUs in the main buffer pool - Page Header definitions Thread-Topic: SLRUs in the main buffer pool - Page Header definitions Received: from pdx4-co-svc-p1-lb2-vlan3.amazon.com (HELO email-inbound-relay-pdx-2c-m6i4x-f7c754c9.us-west-2.amazon.com) ([10.25.36.214]) by smtp-border-fw-80007.pdx80.corp.amazon.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 Nov 2022 06:02:13 +0000 Received: from EX13MTAUWB002.ant.amazon.com (pdx1-ws-svc-p6-lb9-vlan3.pdx.amazon.com [10.236.137.198]) by email-inbound-relay-pdx-2c-m6i4x-f7c754c9.us-west-2.amazon.com (Postfix) with ESMTPS id 13D8D41848; Tue, 22 Nov 2022 06:02:13 +0000 (UTC) Received: from EX19D005UWA001.ant.amazon.com (10.13.138.233) by EX13MTAUWB002.ant.amazon.com (10.43.161.202) with Microsoft SMTP Server (TLS) id 15.0.1497.42; Tue, 22 Nov 2022 06:02:12 +0000 Received: from EX19D035UEA003.ant.amazon.com (10.252.134.113) by EX19D005UWA001.ant.amazon.com (10.13.138.233) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.20; Tue, 22 Nov 2022 06:02:11 +0000 Received: from EX19D035UEA003.ant.amazon.com ([fe80::b768:c926:7fea:2016]) by EX19D035UEA003.ant.amazon.com ([fe80::b768:c926:7fea:2016%3]) with mapi id 15.02.1118.020; Tue, 22 Nov 2022 06:02:11 +0000 From: "Bagga, Rishu" To: Heikki Linnakangas , Thomas Munro , pgsql-hackers CC: pgsql-hackers , "Debnath, Shawn" , Ian Lawrence Barwick , Thomas Munro Thread-Index: AQHYhnvxezKTgPNs7k2tXj3iuMBOO630OQiAgDqHS4CAHByDAA== Date: Tue, 22 Nov 2022 06:02:10 +0000 Message-ID: References: <7C4D53F1-A156-4ABC-9B89-B2C253D5FF74@amazon.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: x-originating-ip: [10.111.234.33] Content-Type: multipart/mixed; boundary="_002_A45DC000C7F543C19E9E57FB18E2FD0Damazoncom_" MIME-Version: 1.0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_002_A45DC000C7F543C19E9E57FB18E2FD0Damazoncom_ Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 SGkgSGVpa2tpIGFuZCBUaG9tYXMsDQoNCg0KSeKAmXZlIHJld29ya2VkIHlvdXIgcGF0Y2hlcyBm b3IgbW92aW5nIFNMUlVzIHRvIHRoZSBidWZmZXIgY2FjaGUgdG8gYWRkIHBhZ2UgaGVhZGVycyB0 byB0aGUgU0xSVXMuIEFkZGl0aW9uYWxseSwgSeKAmXZlIHJlYmFzZWQgdGhpcyBwYXRjaCBvbiB0 b3Agb2YgdGhlIGxhdGVzdCBjb21taXQuDQoNCg0KQ2hhbmdlcyBpbiB0aGlzIHBhdGNoIGluY2x1 ZGU6DQoNCjEuIHBhZ2UgaGVhZGVycyBvbiBTTFJVIHBhZ2VzDQoyLiBwZ191cGdyYWRlIHN1cHBv cnQgdG8gYWRkIHBhZ2UgaGVhZGVycyB0byBleGlzdGluZyBvbi1kaXNrIFNMUlUgcGFnZXMNCjMu IGEgbmV3IFJlYWRCdWZmZXIgbW9kZSBSQk1fVFJJTSBmb3IgVHJpbUNMT0cgYW5kIFRyaW1NdWx0 aVhhY3QNCjQuIFJlbW92aW5nIGNvbmNlcHQgb2YgRXh0ZXJuYWwgTFNOcyBpbnRyb2R1Y2VkIGlu IEhlaWtraeKAmXMgcGF0Y2gsIGFzIHBhZ2UgaGVhZGVycyBjYW4gbm93IHN0b3JlIExTTnMgbm9y bWFsbHkgZm9yIFNMUlVzLsKswqzCrMKswqwNCjUuIEFkZHJlc3NlZCBTZXJpYWwgU0xSVSBhc3Nl cnRzIGluIHByZXZpb3VzIHBhdGNoDQoNCldlIHN0aWxsIG5lZWQgdG8gZml4IGFzc2VydHMgdHJp Z2dlcmVkIGZyb20gbWVtb3J5IGFsbG9jYXRpb24gaW4gdGhlIGNyaXRpY2FsIHNlY3Rpb24gaW4g TXVucm/igJlzIHBhdGNoIGluIFJlY29yZE5ld011bHRpWGFjdC4gDQoNCkN1cnJlbnRseSwgaW4g R2V0TmV3TXVsdGlYYWN0IHdlIGVudGVyIHRoZSBjcml0aWNhbCBzZWN0aW9uLCBhbmQgZW5kIG9u bHkgYWZ0ZXIgd2UgZmluaXNoIG91ciB3cml0ZSwgYWZ0ZXIgZG9pbmcgUmVjb3JkTmV3TXVsdGlY YWN0IGluIE11bHRpWGFjdElkQ3JlYXRlRnJvbU1lbWJlcnMuIE5vdyB0aGF0IHdl4oCZcmUgbWFr aW5nIFJlYWRCdWZmZXIgY2FsbHMgaW4gUmVjb3JkTmV3TXVsdGlYYWN0LCB3ZSBhbGxvY2F0ZSBt ZW1vcnkgaW4gdGhlIGNyaXRpY2FsIHNlY3Rpb24sIGJ1dCB0aGlzIGlzbuKAmXQgYWxsb3dlZC4N Cg0KRm9yIG5vdywgdG8gYXZvaWQgdHJpZ2dlcmluZyBhc3NlcnRzLCBJIG1vdmVkIHRoZSBlbmQg b2YgdGhlIGNyaXRpY2FsIHNlY3Rpb24gYmVmb3JlIGRvaW5nIFJlYWRCdWZmZXIgY2FsbHMsIGJ1 dCB0aGlzIGNvdWxkIGNhdXNlIHBvdGVudGlhbCBkYXRhIGNvcnJ1cHRpb24gZm9yIG11bHRpeGFj dHMgaW4gdGhlIGNhc2UgUmVhZEJ1ZmZlciBmYWlscy4gDQoNCkEgcG90ZW50aWFsIGZpeCBmb3Ig dGhpcyBpc3N1ZSBpcyB0byBob2xkIG9uIHRvIE11bHRpWGFjdEdlbkxvY2sgdW50aWwgd2Ugc3Vj Y2Vzc2Z1bGx5IHJlYWQgYW5kIHdyaXRlIHRvIHRoZSBidWZmZXIsIHRvIGVuc3VyZSBubyBidXQg dGhpcyB3b3VsZCBjYXVzZSBSZWFkQnVmZmVyIHRvIGJlY29tZSBhIGJvdHRsZW5lY2sgYXMgbm8g b3RoZXIgYmFja2VuZHMgY291bGQgYWNjZXNzIHRoZSBNdWx0aVhhY3Qgc3RhdGUgZGF0YS4NCg0K V2Ugc2hvdWxkIGZpZ3VyZSBvdXQgYSB3YXkgdG8gYWxsb3cgUmVhZEJ1ZmZlciBjYWxscyBpbiBj cml0aWNhbCBzZWN0aW9ucyBzcGVjaWZpY2FsbHkgZm9yIG11bHRpeGFjdHMsIGFzIHRoZSBjdXJy ZW50IGJlaGF2aW9yIGlzIHRvIHBhbmljIHdoZW4gbXVsdGl4YWN0IGRhdGEgd3JpdGUgb3BlcmF0 aW9ucyBmYWlsLiANCg0KSSB3b3VsZCBhcHByZWNpYXRlIHlvdXIgdGhvdWdodHMgb24gaG93IHdl IGNvdWxkIHByb2NlZWQgaGVyZS4NCg0KDQpQLlMsIElhbiwgdGhhbmtzIGZvciByZW1pbmRpbmcg bWUgdG8gcmViYXNlIHRoZSBwYXRjaCENCg0KU2luY2VyZWx5LA0KDQpSaXNodSBCYWdnYSwgDQoN CkFtYXpvbiBXZWIgU2VydmljZXMgKEFXUykNCg0K --_002_A45DC000C7F543C19E9E57FB18E2FD0Damazoncom_ Content-Type: application/octet-stream; name="slru_to_buffer_cache_with_page_headers_v2.patch" Content-Description: slru_to_buffer_cache_with_page_headers_v2.patch Content-Disposition: attachment; filename="slru_to_buffer_cache_with_page_headers_v2.patch"; size=389229; creation-date="Tue, 22 Nov 2022 06:02:10 GMT"; modification-date="Tue, 22 Nov 2022 06:02:10 GMT" Content-ID: <174F8538B661AA499BF3123338714AC6@amazon.com> Content-Transfer-Encoding: base64 RnJvbSA4NzVhODVmM2JiN2QxNzY4MzFkZjRlMTM4OGZjYTI4YTgyN2M4NmFhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaXNodSBCYWdnYSA8YmFncmlzaHVAYW1hem9uLmNvbT4KRGF0 ZTogVGh1LCAxNSBTZXAgMjAyMiAwMDo1NToyNSArMDAwMApTdWJqZWN0OiBbUEFUQ0ggMDEvMTVd IGhlaWtraSBwYXRjaCAwNy8yNSBhcHBsaWVkIG9uIFJFTCAxNSBhdCBjb21taXQKIDJmYjYxNTRm Y2Q3NjliMmQ0ZWExMjI2Nzg4ZTBlYzJmYzM1MjJjYgoKLS0tCiBjb250cmliL2FtY2hlY2svdmVy aWZ5X25idHJlZS5jICAgICAgICAgICAgIHwgICAgMiArLQogY29udHJpYi9ibG9vbS9ibGluc2Vy dC5jICAgICAgICAgICAgICAgICAgICB8ICAgIDYgKy0KIGNvbnRyaWIvcGdfcHJld2FybS9hdXRv cHJld2FybS5jICAgICAgICAgICAgfCAgICAyICstCiBjb250cmliL3BnX3ByZXdhcm0vcGdfcHJl d2FybS5jICAgICAgICAgICAgIHwgICAgNCArLQogY29udHJpYi9wZ192aXNpYmlsaXR5L3BnX3Zp c2liaWxpdHkuYyAgICAgICB8ICAgIDUgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3Ri dWlsZC5jICAgICAgICAgfCAgIDExICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNocGFn ZS5jICAgICAgICAgIHwgICAgMiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hh bmRsZXIuYyAgICB8ICAgMzIgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3Jld3JpdGVoZWFw LmMgICAgICAgfCAgICA2ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92aXNpYmlsaXR5bWFw LmMgICAgIHwgICA0MSArLQogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYyAgICAg ICAgICB8ICAgIDYgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c29ydC5jICAgICAg ICAgfCAgICA4ICstCiBzcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ2luc2VydC5jICAgICAg IHwgICAxNyArLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW0uYyAgICAgICAgICB8 ICAgIDQgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL2Nsb2cuYyAgICAgICAgICAgfCAg MTk5ICstLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vY29tbWl0X3RzLmMgICAgICB8ICAx NTYgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5jICAgICAgfCAgMzU3 ICsrLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9zbHJ1LmMgICAgICAgICAgIHwgMTQ4 OCArKy0tLS0tLS0tLS0tLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9zdWJ0cmFu cy5jICAgICAgIHwgIDEwOCArLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGFjdC5jICAg ICAgICAgICB8ICAgIDIgKwogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jICAgICAg ICAgICB8ICAgMTUgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dwcmVmZXRjaGVy LmMgfCAgIDI4ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ndXRpbHMuYyAgICAg IHwgICAxNyArLQogc3JjL2JhY2tlbmQvY2F0YWxvZy9jYXRhbG9nLmMgICAgICAgICAgICAgICB8 ICAgNTMgKy0KIHNyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYyAgICAgICAgICAgICAgICAgfCAg ICA0ICstCiBzcmMvYmFja2VuZC9jYXRhbG9nL3N0b3JhZ2UuYyAgICAgICAgICAgICAgIHwgIDIw NSArKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2FzeW5jLmMgICAgICAgICAgICAgICAgfCAgIDY3 ICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9kYmNvbW1hbmRzLmMgICAgICAgICAgIHwgICAgOCAr LQogc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2UuYyAgICAgICAgICAgICB8ICAgIDggKy0K IHNyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jICAgICAgICAgICAgfCAgIDE5ICstCiBz cmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZfaW5pdC5jICAgICAgIHwgICAxNyArLQogc3Jj L2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMgICAgICAgICB8ICAzODkgKystLS0KIHNy Yy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2xvY2FsYnVmLmMgICAgICAgfCAgIDI1ICstCiBzcmMv YmFja2VuZC9zdG9yYWdlL2ZyZWVzcGFjZS9mcmVlc3BhY2UuYyAgIHwgICA0MSArLQogc3JjL2Jh Y2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jICAgICAgICAgICAgICB8ICAgIDQgLQogc3JjL2JhY2tl bmQvc3RvcmFnZS9sbWdyL3ByZWRpY2F0ZS5jICAgICAgICB8ICAgNjIgKy0KIHNyYy9iYWNrZW5k L3N0b3JhZ2Uvc21nci9tZC5jICAgICAgICAgICAgICAgfCAgMzY2ICsrLS0tCiBzcmMvYmFja2Vu ZC9zdG9yYWdlL3NtZ3Ivc21nci5jICAgICAgICAgICAgIHwgIDM5OSArKystLQogc3JjL2JhY2tl bmQvc3RvcmFnZS9zeW5jL3N5bmMuYyAgICAgICAgICAgICB8ICAgMjAgKy0KIHNyYy9iYWNrZW5k L3V0aWxzL2NhY2hlL2ludmFsLmMgICAgICAgICAgICAgfCAgIDE3ICstCiBzcmMvYmFja2VuZC91 dGlscy9jYWNoZS9yZWxjYWNoZS5jICAgICAgICAgIHwgICAyNyArLQogc3JjL2JhY2tlbmQvdXRp bHMvbW1nci9tY3h0LmMgICAgICAgICAgICAgICB8ICAgMTMgKy0KIHNyYy9jb21tb24vcmVscGF0 aC5jICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDMxICstCiBzcmMvaW5jbHVkZS9hY2Nlc3Mv Y2xvZy5oICAgICAgICAgICAgICAgICAgIHwgICAgNiAtCiBzcmMvaW5jbHVkZS9hY2Nlc3MvY29t bWl0X3RzLmggICAgICAgICAgICAgIHwgICAgMyAtCiBzcmMvaW5jbHVkZS9hY2Nlc3MvbXVsdGl4 YWN0LmggICAgICAgICAgICAgIHwgICAgMyAtCiBzcmMvaW5jbHVkZS9hY2Nlc3Mvc2xydS5oICAg ICAgICAgICAgICAgICAgIHwgIDE4MCArLS0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9zbHJ1bGlzdC5o ICAgICAgICAgICAgICAgfCAgIDMwICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy9zdWJ0cmFucy5oICAg ICAgICAgICAgICAgfCAgICAzIC0KIHNyYy9pbmNsdWRlL2NhdGFsb2cvc3RvcmFnZS5oICAgICAg ICAgICAgICAgfCAgIDExICstCiBzcmMvaW5jbHVkZS9jb21tb24vcmVscGF0aC5oICAgICAgICAg ICAgICAgIHwgICAxNSArLQogc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZfaW50ZXJuYWxzLmggICAg ICAgICB8ICAgMTEgKy0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmggICAgICAgICAgICAg ICAgfCAgIDMzICstCiBzcmMvaW5jbHVkZS9zdG9yYWdlL21kLmggICAgICAgICAgICAgICAgICAg IHwgICAyOCArLQogc3JjL2luY2x1ZGUvc3RvcmFnZS9yZWxmaWxlbG9jYXRvci5oICAgICAgICB8 ICAgMjkgKy0KIHNyYy9pbmNsdWRlL3N0b3JhZ2Uvc21nci5oICAgICAgICAgICAgICAgICAgfCAg IDk5ICstCiBzcmMvaW5jbHVkZS91dGlscy9pbnZhbC5oICAgICAgICAgICAgICAgICAgIHwgICAg MiArLQogc3JjL2luY2x1ZGUvdXRpbHMvcmVsLmggICAgICAgICAgICAgICAgICAgICB8ICAgMzMg Ky0KIDU4IGZpbGVzIGNoYW5nZWQsIDE2MDAgaW5zZXJ0aW9ucygrKSwgMzE3NyBkZWxldGlvbnMo LSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVkZS9hY2Nlc3Mvc2xydWxpc3QuaAoKZGlm ZiAtLWdpdCBhL2NvbnRyaWIvYW1jaGVjay92ZXJpZnlfbmJ0cmVlLmMgYi9jb250cmliL2FtY2hl Y2svdmVyaWZ5X25idHJlZS5jCmluZGV4IDkwMjFkMTU2ZWI3Li4yNzIyZjEyMTIxOSAxMDA2NDQK LS0tIGEvY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9uYnRyZWUuYworKysgYi9jb250cmliL2FtY2hl Y2svdmVyaWZ5X25idHJlZS5jCkBAIC0zMjQsNyArMzI0LDcgQEAgYnRfaW5kZXhfY2hlY2tfaW50 ZXJuYWwoT2lkIGluZHJlbGlkLCBib29sIHBhcmVudGNoZWNrLCBib29sIGhlYXBhbGxpbmRleGVk LAogCQlib29sCQloZWFwa2V5c3BhY2UsCiAJCQkJCWFsbGVxdWFsaW1hZ2U7CiAKLQkJaWYgKCFz bWdyZXhpc3RzKFJlbGF0aW9uR2V0U21ncihpbmRyZWwpLCBNQUlOX0ZPUktOVU0pKQorCQlpZiAo IXNtZ3JleGlzdHMoUmVsYXRpb25HZXRTbWdyKGluZHJlbCwgTUFJTl9GT1JLTlVNKSkpCiAJCQll cmVwb3J0KEVSUk9SLAogCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOREVYX0NPUlJVUFRFRCksCiAJ CQkJCSBlcnJtc2coImluZGV4IFwiJXNcIiBsYWNrcyBhIG1haW4gcmVsYXRpb24gZm9yayIsCmRp ZmYgLS1naXQgYS9jb250cmliL2Jsb29tL2JsaW5zZXJ0LmMgYi9jb250cmliL2Jsb29tL2JsaW5z ZXJ0LmMKaW5kZXggZGQyNmQ2YWMyOWEuLmQwNjhhMjQzZThmIDEwMDY0NAotLS0gYS9jb250cmli L2Jsb29tL2JsaW5zZXJ0LmMKKysrIGIvY29udHJpYi9ibG9vbS9ibGluc2VydC5jCkBAIC0xNzcs OSArMTc3LDkgQEAgYmxidWlsZGVtcHR5KFJlbGF0aW9uIGluZGV4KQogCSAqIHRoaXMgZXZlbiB3 aGVuIHdhbF9sZXZlbD1taW5pbWFsLgogCSAqLwogCVBhZ2VTZXRDaGVja3N1bUlucGxhY2UobWV0 YXBhZ2UsIEJMT09NX01FVEFQQUdFX0JMS05PKTsKLQlzbWdyd3JpdGUoUmVsYXRpb25HZXRTbWdy KGluZGV4KSwgSU5JVF9GT1JLTlVNLCBCTE9PTV9NRVRBUEFHRV9CTEtOTywKKwlzbWdyd3JpdGUo UmVsYXRpb25HZXRTbWdyKGluZGV4LCBJTklUX0ZPUktOVU0pLCBCTE9PTV9NRVRBUEFHRV9CTEtO TywKIAkJCSAgKGNoYXIgKikgbWV0YXBhZ2UsIHRydWUpOwotCWxvZ19uZXdwYWdlKCYoUmVsYXRp b25HZXRTbWdyKGluZGV4KSktPnNtZ3JfcmxvY2F0b3IubG9jYXRvciwgSU5JVF9GT1JLTlVNLAor CWxvZ19uZXdwYWdlKCZpbmRleC0+cmRfbG9jYXRvciwgSU5JVF9GT1JLTlVNLAogCQkJCUJMT09N X01FVEFQQUdFX0JMS05PLCBtZXRhcGFnZSwgdHJ1ZSk7CiAKIAkvKgpAQCAtMTg3LDcgKzE4Nyw3 IEBAIGJsYnVpbGRlbXB0eShSZWxhdGlvbiBpbmRleCkKIAkgKiB3cml0ZSBkaWQgbm90IGdvIHRo cm91Z2ggc2hhcmVkX2J1ZmZlcnMgYW5kIHRoZXJlZm9yZSBhIGNvbmN1cnJlbnQKIAkgKiBjaGVj a3BvaW50IG1heSBoYXZlIG1vdmVkIHRoZSByZWRvIHBvaW50ZXIgcGFzdCBvdXIgeGxvZyByZWNv cmQuCiAJICovCi0Jc21ncmltbWVkc3luYyhSZWxhdGlvbkdldFNtZ3IoaW5kZXgpLCBJTklUX0ZP UktOVU0pOworCXNtZ3JpbW1lZHN5bmMoUmVsYXRpb25HZXRTbWdyKGluZGV4LCBJTklUX0ZPUktO VU0pKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcHJld2FybS9hdXRvcHJld2Fy bS5jIGIvY29udHJpYi9wZ19wcmV3YXJtL2F1dG9wcmV3YXJtLmMKaW5kZXggZDAyYTZhMWJhMDQu LmRlMDdiYzU5M2M3IDEwMDY0NAotLS0gYS9jb250cmliL3BnX3ByZXdhcm0vYXV0b3ByZXdhcm0u YworKysgYi9jb250cmliL3BnX3ByZXdhcm0vYXV0b3ByZXdhcm0uYwpAQCAtNTM1LDcgKzUzNSw3 IEBAIGF1dG9wcmV3YXJtX2RhdGFiYXNlX21haW4oRGF0dW0gbWFpbl9hcmcpCiAJCQkgKi8KIAkJ CWlmIChibGstPmZvcmtudW0gPiBJbnZhbGlkRm9ya051bWJlciAmJgogCQkJCWJsay0+Zm9ya251 bSA8PSBNQVhfRk9SS05VTSAmJgotCQkJCXNtZ3JleGlzdHMoUmVsYXRpb25HZXRTbWdyKHJlbCks IGJsay0+Zm9ya251bSkpCisJCQkJc21ncmV4aXN0cyhSZWxhdGlvbkdldFNtZ3IocmVsLCBibGst PmZvcmtudW0pKSkKIAkJCQluYmxvY2tzID0gUmVsYXRpb25HZXROdW1iZXJPZkJsb2Nrc0luRm9y ayhyZWwsIGJsay0+Zm9ya251bSk7CiAJCQllbHNlCiAJCQkJbmJsb2NrcyA9IDA7CmRpZmYgLS1n aXQgYS9jb250cmliL3BnX3ByZXdhcm0vcGdfcHJld2FybS5jIGIvY29udHJpYi9wZ19wcmV3YXJt L3BnX3ByZXdhcm0uYwppbmRleCBjYWZmNWM0YTgwZi4uMWU1NzQ4MWVmOTIgMTAwNjQ0Ci0tLSBh L2NvbnRyaWIvcGdfcHJld2FybS9wZ19wcmV3YXJtLmMKKysrIGIvY29udHJpYi9wZ19wcmV3YXJt L3BnX3ByZXdhcm0uYwpAQCAtMTA5LDcgKzEwOSw3IEBAIHBnX3ByZXdhcm0oUEdfRlVOQ1RJT05f QVJHUykKIAkJYWNsY2hlY2tfZXJyb3IoYWNscmVzdWx0LCBnZXRfcmVsa2luZF9vYmp0eXBlKHJl bC0+cmRfcmVsLT5yZWxraW5kKSwgZ2V0X3JlbF9uYW1lKHJlbE9pZCkpOwogCiAJLyogQ2hlY2sg dGhhdCB0aGUgZm9yayBleGlzdHMuICovCi0JaWYgKCFzbWdyZXhpc3RzKFJlbGF0aW9uR2V0U21n cihyZWwpLCBmb3JrTnVtYmVyKSkKKwlpZiAoIXNtZ3JleGlzdHMoUmVsYXRpb25HZXRTbWdyKHJl bCwgZm9ya051bWJlcikpKQogCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVf SU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAogCQkJCSBlcnJtc2coImZvcmsgXCIlc1wiIGRvZXMg bm90IGV4aXN0IGZvciB0aGlzIHJlbGF0aW9uIiwKQEAgLTE3Nyw3ICsxNzcsNyBAQCBwZ19wcmV3 YXJtKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCWZvciAoYmxvY2sgPSBmaXJzdF9ibG9jazsgYmxvY2sg PD0gbGFzdF9ibG9jazsgKytibG9jaykKIAkJewogCQkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsK LQkJCXNtZ3JyZWFkKFJlbGF0aW9uR2V0U21ncihyZWwpLCBmb3JrTnVtYmVyLCBibG9jaywgYmxv Y2tidWZmZXIuZGF0YSk7CisJCQlzbWdycmVhZChSZWxhdGlvbkdldFNtZ3IocmVsLCBmb3JrTnVt YmVyKSwgYmxvY2ssIGJsb2NrYnVmZmVyLmRhdGEpOwogCQkJKytibG9ja3NfZG9uZTsKIAkJfQog CX0KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfdmlzaWJpbGl0eS9wZ192aXNpYmlsaXR5LmMgYi9j b250cmliL3BnX3Zpc2liaWxpdHkvcGdfdmlzaWJpbGl0eS5jCmluZGV4IGE5NWY3M2VjNzk2Li4z OGNiNTZjOWJjZSAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ192aXNpYmlsaXR5L3BnX3Zpc2liaWxp dHkuYworKysgYi9jb250cmliL3BnX3Zpc2liaWxpdHkvcGdfdmlzaWJpbGl0eS5jCkBAIC0zODgs MTMgKzM4OCwxNCBAQCBwZ190cnVuY2F0ZV92aXNpYmlsaXR5X21hcChQR19GVU5DVElPTl9BUkdT KQogCWNoZWNrX3JlbGF0aW9uX3JlbGtpbmQocmVsKTsKIAogCS8qIEZvcmNpYmx5IHJlc2V0IGNh Y2hlZCBmaWxlIHNpemUgKi8KLQlSZWxhdGlvbkdldFNtZ3IocmVsKS0+c21ncl9jYWNoZWRfbmJs b2Nrc1tWSVNJQklMSVRZTUFQX0ZPUktOVU1dID0gSW52YWxpZEJsb2NrTnVtYmVyOworCVJlbGF0 aW9uR2V0U21ncihyZWwsIFZJU0lCSUxJVFlNQVBfRk9SS05VTSktPnNtZ3JfY2FjaGVkX25ibG9j a3MgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CiAKIAlibG9jayA9IHZpc2liaWxpdHltYXBfcHJlcGFy ZV90cnVuY2F0ZShyZWwsIDApOwogCWlmIChCbG9ja051bWJlcklzVmFsaWQoYmxvY2spKQogCXsK IAkJZm9yayA9IFZJU0lCSUxJVFlNQVBfRk9SS05VTTsKLQkJc21ncnRydW5jYXRlKFJlbGF0aW9u R2V0U21ncihyZWwpLCAmZm9yaywgMSwgJmJsb2NrKTsKKwkJRHJvcFJlbGF0aW9uQnVmZmVycyhy ZWwtPnJkX2xvY2F0b3IsIHJlbC0+cmRfYmFja2VuZCwgJmZvcmssIDEsICZibG9jayk7CisJCXNt Z3J0cnVuY2F0ZV9tdWx0aShyZWwtPnJkX2xvY2F0b3IsIHJlbC0+cmRfYmFja2VuZCwgJmZvcmss IDEsICZibG9jayk7CiAJfQogCiAJaWYgKFJlbGF0aW9uTmVlZHNXQUwocmVsKSkKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3RidWlsZC5jIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL2dpc3QvZ2lzdGJ1aWxkLmMKaW5kZXggZmIwZjQ2NjcwOGMuLmE3ODUyNzc2OWU2IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0YnVpbGQuYworKysgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvZ2lzdC9naXN0YnVpbGQuYwpAQCAtNDE2LDcgKzQxNiw3IEBAIGdpc3RfaW5k ZXhzb3J0YnVpbGQoR0lTVEJ1aWxkU3RhdGUgKnN0YXRlKQogCSAqIHJlcGxhY2VkIHdpdGggdGhl IHJlYWwgcm9vdCBwYWdlIGF0IHRoZSBlbmQuCiAJICovCiAJcGFnZSA9IHBhbGxvYzAoQkxDS1Na KTsKLQlzbWdyZXh0ZW5kKFJlbGF0aW9uR2V0U21ncihzdGF0ZS0+aW5kZXhyZWwpLCBNQUlOX0ZP UktOVU0sIEdJU1RfUk9PVF9CTEtOTywKKwlzbWdyZXh0ZW5kKFJlbGF0aW9uR2V0U21ncihzdGF0 ZS0+aW5kZXhyZWwsIE1BSU5fRk9SS05VTSksIEdJU1RfUk9PVF9CTEtOTywKIAkJCSAgIHBhZ2Us IHRydWUpOwogCXN0YXRlLT5wYWdlc19hbGxvY2F0ZWQrKzsKIAlzdGF0ZS0+cGFnZXNfd3JpdHRl bisrOwpAQCAtNDYwLDcgKzQ2MCw3IEBAIGdpc3RfaW5kZXhzb3J0YnVpbGQoR0lTVEJ1aWxkU3Rh dGUgKnN0YXRlKQogCS8qIFdyaXRlIG91dCB0aGUgcm9vdCAqLwogCVBhZ2VTZXRMU04obGV2ZWxz dGF0ZS0+cGFnZXNbMF0sIEdpc3RCdWlsZExTTik7CiAJUGFnZVNldENoZWNrc3VtSW5wbGFjZShs ZXZlbHN0YXRlLT5wYWdlc1swXSwgR0lTVF9ST09UX0JMS05PKTsKLQlzbWdyd3JpdGUoUmVsYXRp b25HZXRTbWdyKHN0YXRlLT5pbmRleHJlbCksIE1BSU5fRk9SS05VTSwgR0lTVF9ST09UX0JMS05P LAorCXNtZ3J3cml0ZShSZWxhdGlvbkdldFNtZ3Ioc3RhdGUtPmluZGV4cmVsLCBNQUlOX0ZPUktO VU0pLCBHSVNUX1JPT1RfQkxLTk8sCiAJCQkgIGxldmVsc3RhdGUtPnBhZ2VzWzBdLCB0cnVlKTsK IAlpZiAoUmVsYXRpb25OZWVkc1dBTChzdGF0ZS0+aW5kZXhyZWwpKQogCQlsb2dfbmV3cGFnZSgm c3RhdGUtPmluZGV4cmVsLT5yZF9sb2NhdG9yLCBNQUlOX0ZPUktOVU0sIEdJU1RfUk9PVF9CTEtO TywKQEAgLTQ3OSw3ICs0NzksNyBAQCBnaXN0X2luZGV4c29ydGJ1aWxkKEdJU1RCdWlsZFN0YXRl ICpzdGF0ZSkKIAkgKiBzdGlsbCBub3QgYmUgb24gZGlzayB3aGVuIHRoZSBjcmFzaCBvY2N1cnMu CiAJICovCiAJaWYgKFJlbGF0aW9uTmVlZHNXQUwoc3RhdGUtPmluZGV4cmVsKSkKLQkJc21ncmlt bWVkc3luYyhSZWxhdGlvbkdldFNtZ3Ioc3RhdGUtPmluZGV4cmVsKSwgTUFJTl9GT1JLTlVNKTsK KwkJc21ncmltbWVkc3luYyhSZWxhdGlvbkdldFNtZ3Ioc3RhdGUtPmluZGV4cmVsLCBNQUlOX0ZP UktOVU0pKTsKIH0KIAogLyoKQEAgLTY1Nyw3ICs2NTcsNyBAQCBnaXN0X2luZGV4c29ydGJ1aWxk X2ZsdXNoX3JlYWR5X3BhZ2VzKEdJU1RCdWlsZFN0YXRlICpzdGF0ZSkKIAogCQlQYWdlU2V0TFNO KHBhZ2UsIEdpc3RCdWlsZExTTik7CiAJCVBhZ2VTZXRDaGVja3N1bUlucGxhY2UocGFnZSwgYmxr bm8pOwotCQlzbWdyZXh0ZW5kKFJlbGF0aW9uR2V0U21ncihzdGF0ZS0+aW5kZXhyZWwpLCBNQUlO X0ZPUktOVU0sIGJsa25vLCBwYWdlLAorCQlzbWdyZXh0ZW5kKFJlbGF0aW9uR2V0U21ncihzdGF0 ZS0+aW5kZXhyZWwsIE1BSU5fRk9SS05VTSksIGJsa25vLCBwYWdlLAogCQkJCSAgIHRydWUpOwog CiAJCXN0YXRlLT5wYWdlc193cml0dGVuKys7CkBAIC05NDMsOCArOTQzLDcgQEAgZ2lzdEJ1aWxk Q2FsbGJhY2soUmVsYXRpb24gaW5kZXgsCiAJICovCiAJaWYgKChidWlsZHN0YXRlLT5idWlsZE1v ZGUgPT0gR0lTVF9CVUZGRVJJTkdfQVVUTyAmJgogCQkgYnVpbGRzdGF0ZS0+aW5kdHVwbGVzICUg QlVGRkVSSU5HX01PREVfU1dJVENIX0NIRUNLX1NURVAgPT0gMCAmJgotCQkgZWZmZWN0aXZlX2Nh Y2hlX3NpemUgPCBzbWdybmJsb2NrcyhSZWxhdGlvbkdldFNtZ3IoaW5kZXgpLAotCQkJCQkJCQkJ CQlNQUlOX0ZPUktOVU0pKSB8fAorCQkgZWZmZWN0aXZlX2NhY2hlX3NpemUgPCBzbWdybmJsb2Nr cyhSZWxhdGlvbkdldFNtZ3IoaW5kZXgsIE1BSU5fRk9SS05VTSkpKSB8fAogCQkoYnVpbGRzdGF0 ZS0+YnVpbGRNb2RlID09IEdJU1RfQlVGRkVSSU5HX1NUQVRTICYmCiAJCSBidWlsZHN0YXRlLT5p bmR0dXBsZXMgPj0gQlVGRkVSSU5HX01PREVfVFVQTEVfU0laRV9TVEFUU19UQVJHRVQpKQogCXsK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hwYWdlLmMgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvaGFzaC9oYXNocGFnZS5jCmluZGV4IDU1YjI5MjlhZDUxLi40YWE4N2Q0NzVk NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHBhZ2UuYworKysgYi9z cmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNocGFnZS5jCkBAIC0xMDMwLDcgKzEwMzAsNyBAQCBf aGFzaF9hbGxvY19idWNrZXRzKFJlbGF0aW9uIHJlbCwgQmxvY2tOdW1iZXIgZmlyc3RibG9jaywg dWludDMyIG5ibG9ja3MpCiAJCQkJCXRydWUpOwogCiAJUGFnZVNldENoZWNrc3VtSW5wbGFjZShw YWdlLCBsYXN0YmxvY2spOwotCXNtZ3JleHRlbmQoUmVsYXRpb25HZXRTbWdyKHJlbCksIE1BSU5f Rk9SS05VTSwgbGFzdGJsb2NrLCB6ZXJvYnVmLmRhdGEsCisJc21ncmV4dGVuZChSZWxhdGlvbkdl dFNtZ3IocmVsLCBNQUlOX0ZPUktOVU0pLCBsYXN0YmxvY2ssIHplcm9idWYuZGF0YSwKIAkJCSAg IGZhbHNlKTsKIAogCXJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNz L2hlYXAvaGVhcGFtX2hhbmRsZXIuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9o YW5kbGVyLmMKaW5kZXggYWIxYmNmMzUyMmQuLjA2MDFkNDczNWZiIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCisrKyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKQEAgLTU3Miw3ICs1NzIsNyBAQCBoZWFwYW1fcmVs YXRpb25fc2V0X25ld19maWxlbG9jYXRvcihSZWxhdGlvbiByZWwsCiAJCQkJCQkJCQlUcmFuc2Fj dGlvbklkICpmcmVlemVYaWQsCiAJCQkJCQkJCQlNdWx0aVhhY3RJZCAqbWlubXVsdGkpCiB7Ci0J U01nclJlbGF0aW9uIHNyZWw7CisJU01nckZpbGVIYW5kbGUgc2ZpbGU7CiAKIAkvKgogCSAqIElu aXRpYWxpemUgdG8gdGhlIG1pbmltdW0gWElEIHRoYXQgY291bGQgcHV0IHR1cGxlcyBpbiB0aGUg dGFibGUuIFdlCkBAIC01OTEsNyArNTkxLDcgQEAgaGVhcGFtX3JlbGF0aW9uX3NldF9uZXdfZmls ZWxvY2F0b3IoUmVsYXRpb24gcmVsLAogCSAqLwogCSptaW5tdWx0aSA9IEdldE9sZGVzdE11bHRp WGFjdElkKCk7CiAKLQlzcmVsID0gUmVsYXRpb25DcmVhdGVTdG9yYWdlKCpuZXdybG9jYXRvciwg cGVyc2lzdGVuY2UsIHRydWUpOworCXNmaWxlID0gUmVsYXRpb25DcmVhdGVTdG9yYWdlKCpuZXdy bG9jYXRvciwgcGVyc2lzdGVuY2UsIHRydWUpOwogCiAJLyoKIAkgKiBJZiByZXF1aXJlZCwgc2V0 IHVwIGFuIGluaXQgZm9yayBmb3IgYW4gdW5sb2dnZWQgdGFibGUgc28gdGhhdCBpdCBjYW4KQEAg LTYwNCwxNSArNjA0LDE4IEBAIGhlYXBhbV9yZWxhdGlvbl9zZXRfbmV3X2ZpbGVsb2NhdG9yKFJl bGF0aW9uIHJlbCwKIAkgKi8KIAlpZiAocGVyc2lzdGVuY2UgPT0gUkVMUEVSU0lTVEVOQ0VfVU5M T0dHRUQpCiAJeworCQlTTWdyRmlsZUhhbmRsZSBzZmlsZV9pbml0OworCiAJCUFzc2VydChyZWwt PnJkX3JlbC0+cmVsa2luZCA9PSBSRUxLSU5EX1JFTEFUSU9OIHx8CiAJCQkgICByZWwtPnJkX3Jl bC0+cmVsa2luZCA9PSBSRUxLSU5EX01BVFZJRVcgfHwKIAkJCSAgIHJlbC0+cmRfcmVsLT5yZWxr aW5kID09IFJFTEtJTkRfVE9BU1RWQUxVRSk7Ci0JCXNtZ3JjcmVhdGUoc3JlbCwgSU5JVF9GT1JL TlVNLCBmYWxzZSk7CisJCXNmaWxlX2luaXQgPSBzbWdyb3BlbigqbmV3cmxvY2F0b3IsIEludmFs aWRCYWNrZW5kSWQsIElOSVRfRk9SS05VTSk7CisJCXNtZ3JjcmVhdGUoc2ZpbGVfaW5pdCwgZmFs c2UpOwogCQlsb2dfc21ncmNyZWF0ZShuZXdybG9jYXRvciwgSU5JVF9GT1JLTlVNKTsKLQkJc21n cmltbWVkc3luYyhzcmVsLCBJTklUX0ZPUktOVU0pOworCQlzbWdyaW1tZWRzeW5jKHNmaWxlKTsK IAl9CiAKLQlzbWdyY2xvc2Uoc3JlbCk7CisJc21ncmNsb3NlKHNmaWxlKTsKIH0KIAogc3RhdGlj IHZvaWQKQEAgLTYyNCw5ICs2MjcsNyBAQCBoZWFwYW1fcmVsYXRpb25fbm9udHJhbnNhY3Rpb25h bF90cnVuY2F0ZShSZWxhdGlvbiByZWwpCiBzdGF0aWMgdm9pZAogaGVhcGFtX3JlbGF0aW9uX2Nv cHlfZGF0YShSZWxhdGlvbiByZWwsIGNvbnN0IFJlbEZpbGVMb2NhdG9yICpuZXdybG9jYXRvcikK IHsKLQlTTWdyUmVsYXRpb24gZHN0cmVsOwotCi0JZHN0cmVsID0gc21ncm9wZW4oKm5ld3Jsb2Nh dG9yLCByZWwtPnJkX2JhY2tlbmQpOworCVNNZ3JGaWxlSGFuZGxlIGRzdG1haW47CiAKIAkvKgog CSAqIFNpbmNlIHdlIGNvcHkgdGhlIGZpbGUgZGlyZWN0bHkgd2l0aG91dCBsb29raW5nIGF0IHRo ZSBzaGFyZWQgYnVmZmVycywKQEAgLTY0NiwxNiArNjQ3LDIxIEBAIGhlYXBhbV9yZWxhdGlvbl9j b3B5X2RhdGEoUmVsYXRpb24gcmVsLCBjb25zdCBSZWxGaWxlTG9jYXRvciAqbmV3cmxvY2F0b3Ip CiAJUmVsYXRpb25DcmVhdGVTdG9yYWdlKCpuZXdybG9jYXRvciwgcmVsLT5yZF9yZWwtPnJlbHBl cnNpc3RlbmNlLCB0cnVlKTsKIAogCS8qIGNvcHkgbWFpbiBmb3JrICovCi0JUmVsYXRpb25Db3B5 U3RvcmFnZShSZWxhdGlvbkdldFNtZ3IocmVsKSwgZHN0cmVsLCBNQUlOX0ZPUktOVU0sCisJZHN0 bWFpbiA9IHNtZ3JvcGVuKCpuZXdybG9jYXRvciwgcmVsLT5yZF9iYWNrZW5kLCBNQUlOX0ZPUktO VU0pOworCVJlbGF0aW9uQ29weVN0b3JhZ2UoUmVsYXRpb25HZXRTbWdyKHJlbCwgTUFJTl9GT1JL TlVNKSwgZHN0bWFpbiwKIAkJCQkJCXJlbC0+cmRfcmVsLT5yZWxwZXJzaXN0ZW5jZSk7CiAKIAkv KiBjb3B5IHRob3NlIGV4dHJhIGZvcmtzIHRoYXQgZXhpc3QgKi8KIAlmb3IgKEZvcmtOdW1iZXIg Zm9ya051bSA9IE1BSU5fRk9SS05VTSArIDE7CiAJCSBmb3JrTnVtIDw9IE1BWF9GT1JLTlVNOyBm b3JrTnVtKyspCiAJewotCQlpZiAoc21ncmV4aXN0cyhSZWxhdGlvbkdldFNtZ3IocmVsKSwgZm9y a051bSkpCisJCVNNZ3JGaWxlSGFuZGxlIHNyY19mb3JrID0gUmVsYXRpb25HZXRTbWdyKHJlbCwg Zm9ya051bSk7CisKKwkJaWYgKHNtZ3JleGlzdHMoc3JjX2ZvcmspKQogCQl7Ci0JCQlzbWdyY3Jl YXRlKGRzdHJlbCwgZm9ya051bSwgZmFsc2UpOworCQkJU01nckZpbGVIYW5kbGUgZHN0X2Zvcmsg PSBzbWdyb3BlbigqbmV3cmxvY2F0b3IsIHJlbC0+cmRfYmFja2VuZCwgZm9ya051bSk7CisKKwkJ CXNtZ3JjcmVhdGUoZHN0X2ZvcmssIGZhbHNlKTsKIAogCQkJLyoKIAkJCSAqIFdBTCBsb2cgY3Jl YXRpb24gaWYgdGhlIHJlbGF0aW9uIGlzIHBlcnNpc3RlbnQsIG9yIHRoaXMgaXMgdGhlCkBAIC02 NjUsNyArNjcxLDcgQEAgaGVhcGFtX3JlbGF0aW9uX2NvcHlfZGF0YShSZWxhdGlvbiByZWwsIGNv bnN0IFJlbEZpbGVMb2NhdG9yICpuZXdybG9jYXRvcikKIAkJCQkocmVsLT5yZF9yZWwtPnJlbHBl cnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1VOTE9HR0VEICYmCiAJCQkJIGZvcmtOdW0gPT0g SU5JVF9GT1JLTlVNKSkKIAkJCQlsb2dfc21ncmNyZWF0ZShuZXdybG9jYXRvciwgZm9ya051bSk7 Ci0JCQlSZWxhdGlvbkNvcHlTdG9yYWdlKFJlbGF0aW9uR2V0U21ncihyZWwpLCBkc3RyZWwsIGZv cmtOdW0sCisJCQlSZWxhdGlvbkNvcHlTdG9yYWdlKFJlbGF0aW9uR2V0U21ncihyZWwsIGZvcmtO dW0pLCBkc3RfZm9yaywKIAkJCQkJCQkJcmVsLT5yZF9yZWwtPnJlbHBlcnNpc3RlbmNlKTsKIAkJ fQogCX0KQEAgLTY3Myw3ICs2NzksNyBAQCBoZWFwYW1fcmVsYXRpb25fY29weV9kYXRhKFJlbGF0 aW9uIHJlbCwgY29uc3QgUmVsRmlsZUxvY2F0b3IgKm5ld3Jsb2NhdG9yKQogCiAJLyogZHJvcCBv bGQgcmVsYXRpb24sIGFuZCBjbG9zZSBuZXcgb25lICovCiAJUmVsYXRpb25Ecm9wU3RvcmFnZShy ZWwpOwotCXNtZ3JjbG9zZShkc3RyZWwpOworCXNtZ3JjbG9zZShkc3RtYWluKTsKIH0KIAogc3Rh dGljIHZvaWQKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3Jld3JpdGVoZWFw LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9yZXdyaXRlaGVhcC5jCmluZGV4IDJmZTllNDhl NTAwLi4wZWVlZjIwNWEwNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvcmV3 cml0ZWhlYXAuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9yZXdyaXRlaGVhcC5jCkBA IC0zMjUsNyArMzI1LDcgQEAgZW5kX2hlYXBfcmV3cml0ZShSZXdyaXRlU3RhdGUgc3RhdGUpCiAK IAkJUGFnZVNldENoZWNrc3VtSW5wbGFjZShzdGF0ZS0+cnNfYnVmZmVyLCBzdGF0ZS0+cnNfYmxv Y2tubyk7CiAKLQkJc21ncmV4dGVuZChSZWxhdGlvbkdldFNtZ3Ioc3RhdGUtPnJzX25ld19yZWwp LCBNQUlOX0ZPUktOVU0sCisJCXNtZ3JleHRlbmQoUmVsYXRpb25HZXRTbWdyKHN0YXRlLT5yc19u ZXdfcmVsLCBNQUlOX0ZPUktOVU0pLAogCQkJCSAgIHN0YXRlLT5yc19ibG9ja25vLCAoY2hhciAq KSBzdGF0ZS0+cnNfYnVmZmVyLCB0cnVlKTsKIAl9CiAKQEAgLTMzNyw3ICszMzcsNyBAQCBlbmRf aGVhcF9yZXdyaXRlKFJld3JpdGVTdGF0ZSBzdGF0ZSkKIAkgKiB3cm90ZSBiZWZvcmUgdGhlIGNo ZWNrcG9pbnQuCiAJICovCiAJaWYgKFJlbGF0aW9uTmVlZHNXQUwoc3RhdGUtPnJzX25ld19yZWwp KQotCQlzbWdyaW1tZWRzeW5jKFJlbGF0aW9uR2V0U21ncihzdGF0ZS0+cnNfbmV3X3JlbCksIE1B SU5fRk9SS05VTSk7CisJCXNtZ3JpbW1lZHN5bmMoUmVsYXRpb25HZXRTbWdyKHN0YXRlLT5yc19u ZXdfcmVsLCBNQUlOX0ZPUktOVU0pKTsKIAogCWxvZ2ljYWxfZW5kX2hlYXBfcmV3cml0ZShzdGF0 ZSk7CiAKQEAgLTY5MSw3ICs2OTEsNyBAQCByYXdfaGVhcF9pbnNlcnQoUmV3cml0ZVN0YXRlIHN0 YXRlLCBIZWFwVHVwbGUgdHVwKQogCQkJICovCiAJCQlQYWdlU2V0Q2hlY2tzdW1JbnBsYWNlKHBh Z2UsIHN0YXRlLT5yc19ibG9ja25vKTsKIAotCQkJc21ncmV4dGVuZChSZWxhdGlvbkdldFNtZ3Io c3RhdGUtPnJzX25ld19yZWwpLCBNQUlOX0ZPUktOVU0sCisJCQlzbWdyZXh0ZW5kKFJlbGF0aW9u R2V0U21ncihzdGF0ZS0+cnNfbmV3X3JlbCwgTUFJTl9GT1JLTlVNKSwKIAkJCQkJICAgc3RhdGUt PnJzX2Jsb2Nrbm8sIChjaGFyICopIHBhZ2UsIHRydWUpOwogCiAJCQlzdGF0ZS0+cnNfYmxvY2tu bysrOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmlzaWJpbGl0eW1hcC5j IGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmlzaWJpbGl0eW1hcC5jCmluZGV4IDRlZDcwMjc1 ZTIyLi5mNDg0MTZkMWUwNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmlz aWJpbGl0eW1hcC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3Zpc2liaWxpdHltYXAu YwpAQCAtNDY1LDcgKzQ2NSw3IEBAIHZpc2liaWxpdHltYXBfcHJlcGFyZV90cnVuY2F0ZShSZWxh dGlvbiByZWwsIEJsb2NrTnVtYmVyIG5oZWFwYmxvY2tzKQogCSAqIElmIG5vIHZpc2liaWxpdHkg bWFwIGhhcyBiZWVuIGNyZWF0ZWQgeWV0IGZvciB0aGlzIHJlbGF0aW9uLCB0aGVyZSdzCiAJICog bm90aGluZyB0byB0cnVuY2F0ZS4KIAkgKi8KLQlpZiAoIXNtZ3JleGlzdHMoUmVsYXRpb25HZXRT bWdyKHJlbCksIFZJU0lCSUxJVFlNQVBfRk9SS05VTSkpCisJaWYgKCFzbWdyZXhpc3RzKFJlbGF0 aW9uR2V0U21ncihyZWwsIFZJU0lCSUxJVFlNQVBfRk9SS05VTSkpKQogCQlyZXR1cm4gSW52YWxp ZEJsb2NrTnVtYmVyOwogCiAJLyoKQEAgLTUzMiw3ICs1MzIsNyBAQCB2aXNpYmlsaXR5bWFwX3By ZXBhcmVfdHJ1bmNhdGUoUmVsYXRpb24gcmVsLCBCbG9ja051bWJlciBuaGVhcGJsb2NrcykKIAll bHNlCiAJCW5ld25ibG9ja3MgPSB0cnVuY0Jsb2NrOwogCi0JaWYgKHNtZ3JuYmxvY2tzKFJlbGF0 aW9uR2V0U21ncihyZWwpLCBWSVNJQklMSVRZTUFQX0ZPUktOVU0pIDw9IG5ld25ibG9ja3MpCisJ aWYgKHNtZ3JuYmxvY2tzKFJlbGF0aW9uR2V0U21ncihyZWwsIFZJU0lCSUxJVFlNQVBfRk9SS05V TSkpIDw9IG5ld25ibG9ja3MpCiAJewogCQkvKiBub3RoaW5nIHRvIGRvLCB0aGUgZmlsZSB3YXMg YWxyZWFkeSBzbWFsbGVyIHRoYW4gcmVxdWVzdGVkIHNpemUgKi8KIAkJcmV0dXJuIEludmFsaWRC bG9ja051bWJlcjsKQEAgLTU1MSwyOSArNTUxLDI5IEBAIHN0YXRpYyBCdWZmZXIKIHZtX3JlYWRi dWYoUmVsYXRpb24gcmVsLCBCbG9ja051bWJlciBibGtubywgYm9vbCBleHRlbmQpCiB7CiAJQnVm ZmVyCQlidWY7Ci0JU01nclJlbGF0aW9uIHJlbG47CisJU01nckZpbGVIYW5kbGUgdm1fc2ZpbGU7 CiAKIAkvKgogCSAqIENhdXRpb246IHJlLXVzaW5nIHRoaXMgc21nciBwb2ludGVyIGNvdWxkIGZh aWwgaWYgdGhlIHJlbGNhY2hlIGVudHJ5CiAJICogZ2V0cyBjbG9zZWQuICBJdCdzIHNhZmUgYXMg bG9uZyBhcyB3ZSBvbmx5IGRvIHNtZ3ItbGV2ZWwgb3BlcmF0aW9ucwogCSAqIGJldHdlZW4gaGVy ZSBhbmQgdGhlIGxhc3QgdXNlIG9mIHRoZSBwb2ludGVyLgogCSAqLwotCXJlbG4gPSBSZWxhdGlv bkdldFNtZ3IocmVsKTsKKwl2bV9zZmlsZSA9IFJlbGF0aW9uR2V0U21ncihyZWwsIFZJU0lCSUxJ VFlNQVBfRk9SS05VTSk7CiAKIAkvKgogCSAqIElmIHdlIGhhdmVuJ3QgY2FjaGVkIHRoZSBzaXpl IG9mIHRoZSB2aXNpYmlsaXR5IG1hcCBmb3JrIHlldCwgY2hlY2sgaXQKIAkgKiBmaXJzdC4KIAkg Ki8KLQlpZiAocmVsbi0+c21ncl9jYWNoZWRfbmJsb2Nrc1tWSVNJQklMSVRZTUFQX0ZPUktOVU1d ID09IEludmFsaWRCbG9ja051bWJlcikKKwlpZiAodm1fc2ZpbGUtPnNtZ3JfY2FjaGVkX25ibG9j a3MgPT0gSW52YWxpZEJsb2NrTnVtYmVyKQogCXsKLQkJaWYgKHNtZ3JleGlzdHMocmVsbiwgVklT SUJJTElUWU1BUF9GT1JLTlVNKSkKLQkJCXNtZ3JuYmxvY2tzKHJlbG4sIFZJU0lCSUxJVFlNQVBf Rk9SS05VTSk7CisJCWlmIChzbWdyZXhpc3RzKHZtX3NmaWxlKSkKKwkJCXNtZ3JuYmxvY2tzKHZt X3NmaWxlKTsKIAkJZWxzZQotCQkJcmVsbi0+c21ncl9jYWNoZWRfbmJsb2Nrc1tWSVNJQklMSVRZ TUFQX0ZPUktOVU1dID0gMDsKKwkJCXZtX3NmaWxlLT5zbWdyX2NhY2hlZF9uYmxvY2tzID0gMDsK IAl9CiAKIAkvKiBIYW5kbGUgcmVxdWVzdHMgYmV5b25kIEVPRiAqLwotCWlmIChibGtubyA+PSBy ZWxuLT5zbWdyX2NhY2hlZF9uYmxvY2tzW1ZJU0lCSUxJVFlNQVBfRk9SS05VTV0pCisJaWYgKGJs a25vID49IHZtX3NmaWxlLT5zbWdyX2NhY2hlZF9uYmxvY2tzKQogCXsKIAkJaWYgKGV4dGVuZCkK IAkJCXZtX2V4dGVuZChyZWwsIGJsa25vICsgMSk7CkBAIC02MDAsOCArNjAwLDcgQEAgdm1fcmVh ZGJ1ZihSZWxhdGlvbiByZWwsIEJsb2NrTnVtYmVyIGJsa25vLCBib29sIGV4dGVuZCkKIAkgKiBs b25nIGFzIGl0IGRvZXNuJ3QgZGVwZW5kIG9uIHRoZSBwYWdlIGhlYWRlciBoYXZpbmcgY29ycmVj dCBjb250ZW50cy4KIAkgKiBDdXJyZW50IHVzYWdlIGlzIHNhZmUgYmVjYXVzZSBQYWdlR2V0Q29u dGVudHMoKSBkb2VzIG5vdCByZXF1aXJlIHRoYXQuCiAJICovCi0JYnVmID0gUmVhZEJ1ZmZlckV4 dGVuZGVkKHJlbCwgVklTSUJJTElUWU1BUF9GT1JLTlVNLCBibGtubywKLQkJCQkJCQkgUkJNX1pF Uk9fT05fRVJST1IsIE5VTEwpOworCWJ1ZiA9IFJlYWRCdWZmZXJFeHRlbmRlZChyZWwsIFZJU0lC SUxJVFlNQVBfRk9SS05VTSwgYmxrbm8sIFJCTV9aRVJPX09OX0VSUk9SLCBOVUxMKTsKIAlpZiAo UGFnZUlzTmV3KEJ1ZmZlckdldFBhZ2UoYnVmKSkpCiAJewogCQlMb2NrQnVmZmVyKGJ1ZiwgQlVG RkVSX0xPQ0tfRVhDTFVTSVZFKTsKQEAgLTYyMSw3ICs2MjAsNyBAQCB2bV9leHRlbmQoUmVsYXRp b24gcmVsLCBCbG9ja051bWJlciB2bV9uYmxvY2tzKQogewogCUJsb2NrTnVtYmVyIHZtX25ibG9j a3Nfbm93OwogCVBHQWxpZ25lZEJsb2NrIHBnOwotCVNNZ3JSZWxhdGlvbiByZWxuOworCVNNZ3JG aWxlSGFuZGxlIHZtX3NmaWxlOwogCiAJUGFnZUluaXQoKFBhZ2UpIHBnLmRhdGEsIEJMQ0tTWiwg MCk7CiAKQEAgLTY0MiwyNyArNjQxLDI3IEBAIHZtX2V4dGVuZChSZWxhdGlvbiByZWwsIEJsb2Nr TnVtYmVyIHZtX25ibG9ja3MpCiAJICogZ2V0cyBjbG9zZWQuICBJdCdzIHNhZmUgYXMgbG9uZyBh cyB3ZSBvbmx5IGRvIHNtZ3ItbGV2ZWwgb3BlcmF0aW9ucwogCSAqIGJldHdlZW4gaGVyZSBhbmQg dGhlIGxhc3QgdXNlIG9mIHRoZSBwb2ludGVyLgogCSAqLwotCXJlbG4gPSBSZWxhdGlvbkdldFNt Z3IocmVsKTsKKwl2bV9zZmlsZSA9IFJlbGF0aW9uR2V0U21ncihyZWwsIFZJU0lCSUxJVFlNQVBf Rk9SS05VTSk7CiAKIAkvKgogCSAqIENyZWF0ZSB0aGUgZmlsZSBmaXJzdCBpZiBpdCBkb2Vzbid0 IGV4aXN0LiAgSWYgc21ncl92bV9uYmxvY2tzIGlzCiAJICogcG9zaXRpdmUgdGhlbiBpdCBtdXN0 IGV4aXN0LCBubyBuZWVkIGZvciBhbiBzbWdyZXhpc3RzIGNhbGwuCiAJICovCi0JaWYgKChyZWxu LT5zbWdyX2NhY2hlZF9uYmxvY2tzW1ZJU0lCSUxJVFlNQVBfRk9SS05VTV0gPT0gMCB8fAotCQkg cmVsbi0+c21ncl9jYWNoZWRfbmJsb2Nrc1tWSVNJQklMSVRZTUFQX0ZPUktOVU1dID09IEludmFs aWRCbG9ja051bWJlcikgJiYKLQkJIXNtZ3JleGlzdHMocmVsbiwgVklTSUJJTElUWU1BUF9GT1JL TlVNKSkKLQkJc21ncmNyZWF0ZShyZWxuLCBWSVNJQklMSVRZTUFQX0ZPUktOVU0sIGZhbHNlKTsK KwlpZiAoKHZtX3NmaWxlLT5zbWdyX2NhY2hlZF9uYmxvY2tzID09IDAgfHwKKwkJIHZtX3NmaWxl LT5zbWdyX2NhY2hlZF9uYmxvY2tzID09IEludmFsaWRCbG9ja051bWJlcikgJiYKKwkJIXNtZ3Jl eGlzdHModm1fc2ZpbGUpKQorCQlzbWdyY3JlYXRlKHZtX3NmaWxlLCBmYWxzZSk7CiAKIAkvKiBJ bnZhbGlkYXRlIGNhY2hlIHNvIHRoYXQgc21ncm5ibG9ja3MoKSBhc2tzIHRoZSBrZXJuZWwuICov Ci0JcmVsbi0+c21ncl9jYWNoZWRfbmJsb2Nrc1tWSVNJQklMSVRZTUFQX0ZPUktOVU1dID0gSW52 YWxpZEJsb2NrTnVtYmVyOwotCXZtX25ibG9ja3Nfbm93ID0gc21ncm5ibG9ja3MocmVsbiwgVklT SUJJTElUWU1BUF9GT1JLTlVNKTsKKwl2bV9zZmlsZS0+c21ncl9jYWNoZWRfbmJsb2NrcyA9IElu dmFsaWRCbG9ja051bWJlcjsKKwl2bV9uYmxvY2tzX25vdyA9IHNtZ3JuYmxvY2tzKHZtX3NmaWxl KTsKIAogCS8qIE5vdyBleHRlbmQgdGhlIGZpbGUgKi8KIAl3aGlsZSAodm1fbmJsb2Nrc19ub3cg PCB2bV9uYmxvY2tzKQogCXsKIAkJUGFnZVNldENoZWNrc3VtSW5wbGFjZSgoUGFnZSkgcGcuZGF0 YSwgdm1fbmJsb2Nrc19ub3cpOwogCi0JCXNtZ3JleHRlbmQocmVsbiwgVklTSUJJTElUWU1BUF9G T1JLTlVNLCB2bV9uYmxvY2tzX25vdywgcGcuZGF0YSwgZmFsc2UpOworCQlzbWdyZXh0ZW5kKHZt X3NmaWxlLCB2bV9uYmxvY2tzX25vdywgcGcuZGF0YSwgZmFsc2UpOwogCQl2bV9uYmxvY2tzX25v dysrOwogCX0KIApAQCAtNjczLDcgKzY3Miw3IEBAIHZtX2V4dGVuZChSZWxhdGlvbiByZWwsIEJs b2NrTnVtYmVyIHZtX25ibG9ja3MpCiAJICogdG8ga2VlcCBjaGVja2luZyBmb3IgY3JlYXRpb24g b3IgZXh0ZW5zaW9uIG9mIHRoZSBmaWxlLCB3aGljaCBoYXBwZW5zCiAJICogaW5mcmVxdWVudGx5 LgogCSAqLwotCUNhY2hlSW52YWxpZGF0ZVNtZ3IocmVsbi0+c21ncl9ybG9jYXRvcik7CisJQ2Fj aGVJbnZhbGlkYXRlU21ncihyZWwtPnJkX2xvY2F0b3IsIHJlbC0+cmRfYmFja2VuZCk7CiAKIAlV bmxvY2tSZWxhdGlvbkZvckV4dGVuc2lvbihyZWwsIEV4Y2x1c2l2ZUxvY2spOwogfQpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9uYnRyZWUvbmJ0cmVlLmMKaW5kZXggYjUyZWNhOGYzOGIuLjY0NDQzMWE3ZTNjIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jCisrKyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMKQEAgLTE2NCw5ICsxNjQsOSBAQCBidGJ1aWxkZW1w dHkoUmVsYXRpb24gaW5kZXgpCiAJICogdGhpcyBldmVuIHdoZW4gd2FsX2xldmVsPW1pbmltYWwu CiAJICovCiAJUGFnZVNldENoZWNrc3VtSW5wbGFjZShtZXRhcGFnZSwgQlRSRUVfTUVUQVBBR0Up OwotCXNtZ3J3cml0ZShSZWxhdGlvbkdldFNtZ3IoaW5kZXgpLCBJTklUX0ZPUktOVU0sIEJUUkVF X01FVEFQQUdFLAorCXNtZ3J3cml0ZShSZWxhdGlvbkdldFNtZ3IoaW5kZXgsIElOSVRfRk9SS05V TSksIEJUUkVFX01FVEFQQUdFLAogCQkJICAoY2hhciAqKSBtZXRhcGFnZSwgdHJ1ZSk7Ci0JbG9n X25ld3BhZ2UoJlJlbGF0aW9uR2V0U21ncihpbmRleCktPnNtZ3JfcmxvY2F0b3IubG9jYXRvciwg SU5JVF9GT1JLTlVNLAorCWxvZ19uZXdwYWdlKCZpbmRleC0+cmRfbG9jYXRvciwgSU5JVF9GT1JL TlVNLAogCQkJCUJUUkVFX01FVEFQQUdFLCBtZXRhcGFnZSwgdHJ1ZSk7CiAKIAkvKgpAQCAtMTc0 LDcgKzE3NCw3IEBAIGJ0YnVpbGRlbXB0eShSZWxhdGlvbiBpbmRleCkKIAkgKiB3cml0ZSBkaWQg bm90IGdvIHRocm91Z2ggc2hhcmVkX2J1ZmZlcnMgYW5kIHRoZXJlZm9yZSBhIGNvbmN1cnJlbnQK IAkgKiBjaGVja3BvaW50IG1heSBoYXZlIG1vdmVkIHRoZSByZWRvIHBvaW50ZXIgcGFzdCBvdXIg eGxvZyByZWNvcmQuCiAJICovCi0Jc21ncmltbWVkc3luYyhSZWxhdGlvbkdldFNtZ3IoaW5kZXgp LCBJTklUX0ZPUktOVU0pOworCXNtZ3JpbW1lZHN5bmMoUmVsYXRpb25HZXRTbWdyKGluZGV4LCBJ TklUX0ZPUktOVU0pKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9u YnRyZWUvbmJ0c29ydC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzb3J0LmMKaW5k ZXggNTAxZTAxMWNlMWUuLjg3YmI5ZjUyYjRkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nl c3MvbmJ0cmVlL25idHNvcnQuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNv cnQuYwpAQCAtNjYyLDcgKzY2Miw3IEBAIF9idF9ibHdyaXRlcGFnZShCVFdyaXRlU3RhdGUgKndz dGF0ZSwgUGFnZSBwYWdlLCBCbG9ja051bWJlciBibGtubykKIAkJaWYgKCF3c3RhdGUtPmJ0d3Nf emVyb3BhZ2UpCiAJCQl3c3RhdGUtPmJ0d3NfemVyb3BhZ2UgPSAoUGFnZSkgcGFsbG9jMChCTENL U1opOwogCQkvKiBkb24ndCBzZXQgY2hlY2tzdW0gZm9yIGFsbC16ZXJvIHBhZ2UgKi8KLQkJc21n cmV4dGVuZChSZWxhdGlvbkdldFNtZ3Iod3N0YXRlLT5pbmRleCksIE1BSU5fRk9SS05VTSwKKwkJ c21ncmV4dGVuZChSZWxhdGlvbkdldFNtZ3Iod3N0YXRlLT5pbmRleCwgTUFJTl9GT1JLTlVNKSwK IAkJCQkgICB3c3RhdGUtPmJ0d3NfcGFnZXNfd3JpdHRlbisrLAogCQkJCSAgIChjaGFyICopIHdz dGF0ZS0+YnR3c196ZXJvcGFnZSwKIAkJCQkgICB0cnVlKTsKQEAgLTY3NywxNCArNjc3LDE0IEBA IF9idF9ibHdyaXRlcGFnZShCVFdyaXRlU3RhdGUgKndzdGF0ZSwgUGFnZSBwYWdlLCBCbG9ja051 bWJlciBibGtubykKIAlpZiAoYmxrbm8gPT0gd3N0YXRlLT5idHdzX3BhZ2VzX3dyaXR0ZW4pCiAJ ewogCQkvKiBleHRlbmRpbmcgdGhlIGZpbGUuLi4gKi8KLQkJc21ncmV4dGVuZChSZWxhdGlvbkdl dFNtZ3Iod3N0YXRlLT5pbmRleCksIE1BSU5fRk9SS05VTSwgYmxrbm8sCisJCXNtZ3JleHRlbmQo UmVsYXRpb25HZXRTbWdyKHdzdGF0ZS0+aW5kZXgsIE1BSU5fRk9SS05VTSksIGJsa25vLAogCQkJ CSAgIChjaGFyICopIHBhZ2UsIHRydWUpOwogCQl3c3RhdGUtPmJ0d3NfcGFnZXNfd3JpdHRlbisr OwogCX0KIAllbHNlCiAJewogCQkvKiBvdmVyd3JpdGluZyBhIGJsb2NrIHdlIHplcm8tZmlsbGVk IGJlZm9yZSAqLwotCQlzbWdyd3JpdGUoUmVsYXRpb25HZXRTbWdyKHdzdGF0ZS0+aW5kZXgpLCBN QUlOX0ZPUktOVU0sIGJsa25vLAorCQlzbWdyd3JpdGUoUmVsYXRpb25HZXRTbWdyKHdzdGF0ZS0+ aW5kZXgsIE1BSU5fRk9SS05VTSksIGJsa25vLAogCQkJCSAgKGNoYXIgKikgcGFnZSwgdHJ1ZSk7 CiAJfQogCkBAIC0xNDMxLDcgKzE0MzEsNyBAQCBfYnRfbG9hZChCVFdyaXRlU3RhdGUgKndzdGF0 ZSwgQlRTcG9vbCAqYnRzcG9vbCwgQlRTcG9vbCAqYnRzcG9vbDIpCiAJICogc3RpbGwgbm90IGJl IG9uIGRpc2sgd2hlbiB0aGUgY3Jhc2ggb2NjdXJzLgogCSAqLwogCWlmICh3c3RhdGUtPmJ0d3Nf dXNlX3dhbCkKLQkJc21ncmltbWVkc3luYyhSZWxhdGlvbkdldFNtZ3Iod3N0YXRlLT5pbmRleCks IE1BSU5fRk9SS05VTSk7CisJCXNtZ3JpbW1lZHN5bmMoUmVsYXRpb25HZXRTbWdyKHdzdGF0ZS0+ aW5kZXgsIE1BSU5fRk9SS05VTSkpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv YWNjZXNzL3NwZ2lzdC9zcGdpbnNlcnQuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3Bn aW5zZXJ0LmMKaW5kZXggYzY4MjFiNTk1MjQuLjc1ZWIwOTU0M2Q5IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ2luc2VydC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9zcGdpc3Qvc3BnaW5zZXJ0LmMKQEAgLTE1NSw4ICsxNTUsMTEgQEAgc3BnYnVpbGQoUmVsYXRp b24gaGVhcCwgUmVsYXRpb24gaW5kZXgsIEluZGV4SW5mbyAqaW5kZXhJbmZvKQogdm9pZAogc3Bn YnVpbGRlbXB0eShSZWxhdGlvbiBpbmRleCkKIHsKKwlTTWdyRmlsZUhhbmRsZSBzZmlsZTsKIAlQ YWdlCQlwYWdlOwogCisJc2ZpbGUgPSBSZWxhdGlvbkdldFNtZ3IoaW5kZXgsIElOSVRfRk9SS05V TSk7CisKIAkvKiBDb25zdHJ1Y3QgbWV0YXBhZ2UuICovCiAJcGFnZSA9IChQYWdlKSBwYWxsb2Mo QkxDS1NaKTsKIAlTcEdpc3RJbml0TWV0YXBhZ2UocGFnZSk7CkBAIC0xNjksMjcgKzE3MiwyNyBA QCBzcGdidWlsZGVtcHR5KFJlbGF0aW9uIGluZGV4KQogCSAqIHJlcGxheWVkLgogCSAqLwogCVBh Z2VTZXRDaGVja3N1bUlucGxhY2UocGFnZSwgU1BHSVNUX01FVEFQQUdFX0JMS05PKTsKLQlzbWdy d3JpdGUoUmVsYXRpb25HZXRTbWdyKGluZGV4KSwgSU5JVF9GT1JLTlVNLCBTUEdJU1RfTUVUQVBB R0VfQkxLTk8sCisJc21ncndyaXRlKHNmaWxlLCBTUEdJU1RfTUVUQVBBR0VfQkxLTk8sCiAJCQkg IChjaGFyICopIHBhZ2UsIHRydWUpOwotCWxvZ19uZXdwYWdlKCYoUmVsYXRpb25HZXRTbWdyKGlu ZGV4KSktPnNtZ3JfcmxvY2F0b3IubG9jYXRvciwgSU5JVF9GT1JLTlVNLAorCWxvZ19uZXdwYWdl KCZpbmRleC0+cmRfbG9jYXRvciwgSU5JVF9GT1JLTlVNLAogCQkJCVNQR0lTVF9NRVRBUEFHRV9C TEtOTywgcGFnZSwgdHJ1ZSk7CiAKIAkvKiBMaWtld2lzZSBmb3IgdGhlIHJvb3QgcGFnZS4gKi8K IAlTcEdpc3RJbml0UGFnZShwYWdlLCBTUEdJU1RfTEVBRik7CiAKIAlQYWdlU2V0Q2hlY2tzdW1J bnBsYWNlKHBhZ2UsIFNQR0lTVF9ST09UX0JMS05PKTsKLQlzbWdyd3JpdGUoUmVsYXRpb25HZXRT bWdyKGluZGV4KSwgSU5JVF9GT1JLTlVNLCBTUEdJU1RfUk9PVF9CTEtOTywKKwlzbWdyd3JpdGUo c2ZpbGUsIFNQR0lTVF9ST09UX0JMS05PLAogCQkJICAoY2hhciAqKSBwYWdlLCB0cnVlKTsKLQls b2dfbmV3cGFnZSgmKFJlbGF0aW9uR2V0U21ncihpbmRleCkpLT5zbWdyX3Jsb2NhdG9yLmxvY2F0 b3IsIElOSVRfRk9SS05VTSwKKwlsb2dfbmV3cGFnZSgmaW5kZXgtPnJkX2xvY2F0b3IsIElOSVRf Rk9SS05VTSwKIAkJCQlTUEdJU1RfUk9PVF9CTEtOTywgcGFnZSwgdHJ1ZSk7CiAKIAkvKiBMaWtl d2lzZSBmb3IgdGhlIG51bGwtdHVwbGVzIHJvb3QgcGFnZS4gKi8KIAlTcEdpc3RJbml0UGFnZShw YWdlLCBTUEdJU1RfTEVBRiB8IFNQR0lTVF9OVUxMUyk7CiAKIAlQYWdlU2V0Q2hlY2tzdW1JbnBs YWNlKHBhZ2UsIFNQR0lTVF9OVUxMX0JMS05PKTsKLQlzbWdyd3JpdGUoUmVsYXRpb25HZXRTbWdy KGluZGV4KSwgSU5JVF9GT1JLTlVNLCBTUEdJU1RfTlVMTF9CTEtOTywKKwlzbWdyd3JpdGUoc2Zp bGUsIFNQR0lTVF9OVUxMX0JMS05PLAogCQkJICAoY2hhciAqKSBwYWdlLCB0cnVlKTsKLQlsb2df bmV3cGFnZSgmKFJlbGF0aW9uR2V0U21ncihpbmRleCkpLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3Is IElOSVRfRk9SS05VTSwKKwlsb2dfbmV3cGFnZSgmaW5kZXgtPnJkX2xvY2F0b3IsIElOSVRfRk9S S05VTSwKIAkJCQlTUEdJU1RfTlVMTF9CTEtOTywgcGFnZSwgdHJ1ZSk7CiAKIAkvKgpAQCAtMTk3 LDcgKzIwMCw3IEBAIHNwZ2J1aWxkZW1wdHkoUmVsYXRpb24gaW5kZXgpCiAJICogd3JpdGVzIGRp ZCBub3QgZ28gdGhyb3VnaCBzaGFyZWQgYnVmZmVycyBhbmQgdGhlcmVmb3JlIGEgY29uY3VycmVu dAogCSAqIGNoZWNrcG9pbnQgbWF5IGhhdmUgbW92ZWQgdGhlIHJlZG8gcG9pbnRlciBwYXN0IG91 ciB4bG9nIHJlY29yZC4KIAkgKi8KLQlzbWdyaW1tZWRzeW5jKFJlbGF0aW9uR2V0U21ncihpbmRl eCksIElOSVRfRk9SS05VTSk7CisJc21ncmltbWVkc3luYyhzZmlsZSk7CiB9CiAKIC8qCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5jIGIvc3JjL2JhY2tlbmQv YWNjZXNzL3RhYmxlL3RhYmxlYW0uYwppbmRleCAwOTRiMjRjN2M5Yy4uNWJjMmMzNzI2ZjEgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtLmMKKysrIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW0uYwpAQCAtNjMxLDEwICs2MzEsMTAgQEAgdGFibGVf YmxvY2tfcmVsYXRpb25fc2l6ZShSZWxhdGlvbiByZWwsIEZvcmtOdW1iZXIgZm9ya051bWJlcikK IAlpZiAoZm9ya051bWJlciA9PSBJbnZhbGlkRm9ya051bWJlcikKIAl7CiAJCWZvciAoaW50IGkg PSAwOyBpIDwgTUFYX0ZPUktOVU07IGkrKykKLQkJCW5ibG9ja3MgKz0gc21ncm5ibG9ja3MoUmVs YXRpb25HZXRTbWdyKHJlbCksIGkpOworCQkJbmJsb2NrcyArPSBzbWdybmJsb2NrcyhSZWxhdGlv bkdldFNtZ3IocmVsLCBpKSk7CiAJfQogCWVsc2UKLQkJbmJsb2NrcyA9IHNtZ3JuYmxvY2tzKFJl bGF0aW9uR2V0U21ncihyZWwpLCBmb3JrTnVtYmVyKTsKKwkJbmJsb2NrcyA9IHNtZ3JuYmxvY2tz KFJlbGF0aW9uR2V0U21ncihyZWwsIGZvcmtOdW1iZXIpKTsKIAogCXJldHVybiBuYmxvY2tzICog QkxDS1NaOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vY2xvZy5j IGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vY2xvZy5jCmluZGV4IDc3ZDk4OTRkYWIzLi4x ODExZjZiY2Y5MyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vY2xvZy5j CisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL2Nsb2cuYwpAQCAtNDEsNiArNDEsOCBA QAogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBnX3RyYWNlLmgiCiAjaW5jbHVk ZSAicGdzdGF0LmgiCisjaW5jbHVkZSAic3RvcmFnZS9idWZtZ3IuaCIKKyNpbmNsdWRlICJzdG9y YWdlL2J1Zl9pbnRlcm5hbHMuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIKICNpbmNsdWRl ICJzdG9yYWdlL3N5bmMuaCIKIApAQCAtODEsMTUgKzgzLDggQEAKICAqLwogI2RlZmluZSBUSFJF U0hPTERfU1VCVFJBTlNfQ0xPR19PUFQJNQogCi0vKgotICogTGluayB0byBzaGFyZWQtbWVtb3J5 IGRhdGEgc3RydWN0dXJlcyBmb3IgQ0xPRyBjb250cm9sCi0gKi8KLXN0YXRpYyBTbHJ1Q3RsRGF0 YSBYYWN0Q3RsRGF0YTsKLQotI2RlZmluZSBYYWN0Q3RsICgmWGFjdEN0bERhdGEpCi0KIAotc3Rh dGljIGludAlaZXJvQ0xPR1BhZ2UoaW50IHBhZ2VubywgYm9vbCB3cml0ZVhsb2cpOworc3RhdGlj IEJ1ZmZlciBaZXJvQ0xPR1BhZ2UoaW50IHBhZ2VubywgYm9vbCB3cml0ZVhsb2cpOwogc3RhdGlj IGJvb2wgQ0xPR1BhZ2VQcmVjZWRlcyhpbnQgcGFnZTEsIGludCBwYWdlMik7CiBzdGF0aWMgdm9p ZCBXcml0ZVplcm9QYWdlWGxvZ1JlYyhpbnQgcGFnZW5vKTsKIHN0YXRpYyB2b2lkIFdyaXRlVHJ1 bmNhdGVYbG9nUmVjKGludCBwYWdlbm8sIFRyYW5zYWN0aW9uSWQgb2xkZXN0WGFjdCwKQEAgLTk5 LDcgKzk0LDcgQEAgc3RhdGljIHZvaWQgVHJhbnNhY3Rpb25JZFNldFBhZ2VTdGF0dXMoVHJhbnNh Y3Rpb25JZCB4aWQsIGludCBuc3VieGlkcywKIAkJCQkJCQkJCSAgIFhMb2dSZWNQdHIgbHNuLCBp bnQgcGFnZW5vLAogCQkJCQkJCQkJICAgYm9vbCBhbGxfeGFjdF9zYW1lX3BhZ2UpOwogc3RhdGlj IHZvaWQgVHJhbnNhY3Rpb25JZFNldFN0YXR1c0JpdChUcmFuc2FjdGlvbklkIHhpZCwgWGlkU3Rh dHVzIHN0YXR1cywKLQkJCQkJCQkJCSAgWExvZ1JlY1B0ciBsc24sIGludCBzbG90bm8pOworCQkJ CQkJCQkJICBYTG9nUmVjUHRyIGxzbiwgQnVmZmVyIGJ1ZmZlcik7CiBzdGF0aWMgdm9pZCBzZXRf c3RhdHVzX2J5X3BhZ2VzKGludCBuc3VieGlkcywgVHJhbnNhY3Rpb25JZCAqc3VieGlkcywKIAkJ CQkJCQkJWGlkU3RhdHVzIHN0YXR1cywgWExvZ1JlY1B0ciBsc24pOwogc3RhdGljIGJvb2wgVHJh bnNhY3Rpb25Hcm91cFVwZGF0ZVhpZFN0YXR1cyhUcmFuc2FjdGlvbklkIHhpZCwKQEAgLTMzOSwx MyArMzM0LDEyIEBAIFRyYW5zYWN0aW9uSWRTZXRQYWdlU3RhdHVzSW50ZXJuYWwoVHJhbnNhY3Rp b25JZCB4aWQsIGludCBuc3VieGlkcywKIAkJCQkJCQkJICAgVHJhbnNhY3Rpb25JZCAqc3VieGlk cywgWGlkU3RhdHVzIHN0YXR1cywKIAkJCQkJCQkJICAgWExvZ1JlY1B0ciBsc24sIGludCBwYWdl bm8pCiB7Ci0JaW50CQkJc2xvdG5vOworCUJ1ZmZlcgkJYnVmZmVyOwogCWludAkJCWk7CiAKIAlB c3NlcnQoc3RhdHVzID09IFRSQU5TQUNUSU9OX1NUQVRVU19DT01NSVRURUQgfHwKIAkJICAgc3Rh dHVzID09IFRSQU5TQUNUSU9OX1NUQVRVU19BQk9SVEVEIHx8CiAJCSAgIChzdGF0dXMgPT0gVFJB TlNBQ1RJT05fU1RBVFVTX1NVQl9DT01NSVRURUQgJiYgIVRyYW5zYWN0aW9uSWRJc1ZhbGlkKHhp ZCkpKTsKLQlBc3NlcnQoTFdMb2NrSGVsZEJ5TWVJbk1vZGUoWGFjdFNMUlVMb2NrLCBMV19FWENM VVNJVkUpKTsKIAogCS8qCiAJICogSWYgd2UncmUgZG9pbmcgYW4gYXN5bmMgY29tbWl0IChpZSwg bHNuIGlzIHZhbGlkKSwgdGhlbiB3ZSBtdXN0IHdhaXQKQEAgLTM1Niw3ICszNTAsOCBAQCBUcmFu c2FjdGlvbklkU2V0UGFnZVN0YXR1c0ludGVybmFsKFRyYW5zYWN0aW9uSWQgeGlkLCBpbnQgbnN1 YnhpZHMsCiAJICogd3JpdGUtYnVzeSwgc2luY2Ugd2UgZG9uJ3QgY2FyZSBpZiB0aGUgdXBkYXRl IHJlYWNoZXMgZGlzayBzb29uZXIgdGhhbgogCSAqIHdlIHRoaW5rLgogCSAqLwotCXNsb3RubyA9 IFNpbXBsZUxydVJlYWRQYWdlKFhhY3RDdGwsIHBhZ2VubywgWExvZ1JlY1B0cklzSW52YWxpZChs c24pLCB4aWQpOworCWJ1ZmZlciA9IFJlYWRTbHJ1QnVmZmVyKFNMUlVfQ0xPR19JRCwgcGFnZW5v KTsKKwlMb2NrQnVmZmVyKGJ1ZmZlciwgQlVGRkVSX0xPQ0tfRVhDTFVTSVZFKTsKIAogCS8qCiAJ ICogU2V0IHRoZSBtYWluIHRyYW5zYWN0aW9uIGlkLCBpZiBhbnkuCkBAIC0zNzQsMjUgKzM2OSwy NiBAQCBUcmFuc2FjdGlvbklkU2V0UGFnZVN0YXR1c0ludGVybmFsKFRyYW5zYWN0aW9uSWQgeGlk LCBpbnQgbnN1YnhpZHMsCiAJCXsKIAkJCWZvciAoaSA9IDA7IGkgPCBuc3VieGlkczsgaSsrKQog CQkJewotCQkJCUFzc2VydChYYWN0Q3RsLT5zaGFyZWQtPnBhZ2VfbnVtYmVyW3Nsb3Rub10gPT0g VHJhbnNhY3Rpb25JZFRvUGFnZShzdWJ4aWRzW2ldKSk7CisJCQkJQXNzZXJ0KHBhZ2VubyA9PSBU cmFuc2FjdGlvbklkVG9QYWdlKHN1YnhpZHNbaV0pKTsKIAkJCQlUcmFuc2FjdGlvbklkU2V0U3Rh dHVzQml0KHN1YnhpZHNbaV0sCiAJCQkJCQkJCQkJICBUUkFOU0FDVElPTl9TVEFUVVNfU1VCX0NP TU1JVFRFRCwKLQkJCQkJCQkJCQkgIGxzbiwgc2xvdG5vKTsKKwkJCQkJCQkJCQkgIGxzbiwgYnVm ZmVyKTsKIAkJCX0KIAkJfQogCiAJCS8qIC4uLiB0aGVuIHRoZSBtYWluIHRyYW5zYWN0aW9uICov Ci0JCVRyYW5zYWN0aW9uSWRTZXRTdGF0dXNCaXQoeGlkLCBzdGF0dXMsIGxzbiwgc2xvdG5vKTsK KwkJVHJhbnNhY3Rpb25JZFNldFN0YXR1c0JpdCh4aWQsIHN0YXR1cywgbHNuLCBidWZmZXIpOwog CX0KIAogCS8qIFNldCB0aGUgc3VidHJhbnNhY3Rpb25zICovCiAJZm9yIChpID0gMDsgaSA8IG5z dWJ4aWRzOyBpKyspCiAJewotCQlBc3NlcnQoWGFjdEN0bC0+c2hhcmVkLT5wYWdlX251bWJlcltz bG90bm9dID09IFRyYW5zYWN0aW9uSWRUb1BhZ2Uoc3VieGlkc1tpXSkpOwotCQlUcmFuc2FjdGlv bklkU2V0U3RhdHVzQml0KHN1YnhpZHNbaV0sIHN0YXR1cywgbHNuLCBzbG90bm8pOworCQlBc3Nl cnQocGFnZW5vID09IFRyYW5zYWN0aW9uSWRUb1BhZ2Uoc3VieGlkc1tpXSkpOworCQlUcmFuc2Fj dGlvbklkU2V0U3RhdHVzQml0KHN1YnhpZHNbaV0sIHN0YXR1cywgbHNuLCBidWZmZXIpOwogCX0K IAotCVhhY3RDdGwtPnNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90bm9dID0gdHJ1ZTsKKwlNYXJrQnVm ZmVyRGlydHkoYnVmZmVyKTsKKwlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CiB9CiAKIC8q CkBAIC01NjYsNyArNTYyLDcgQEAgVHJhbnNhY3Rpb25Hcm91cFVwZGF0ZVhpZFN0YXR1cyhUcmFu c2FjdGlvbklkIHhpZCwgWGlkU3RhdHVzIHN0YXR1cywKICAqIE11c3QgYmUgY2FsbGVkIHdpdGgg WGFjdFNMUlVMb2NrIGhlbGQKICAqLwogc3RhdGljIHZvaWQKLVRyYW5zYWN0aW9uSWRTZXRTdGF0 dXNCaXQoVHJhbnNhY3Rpb25JZCB4aWQsIFhpZFN0YXR1cyBzdGF0dXMsIFhMb2dSZWNQdHIgbHNu LCBpbnQgc2xvdG5vKQorVHJhbnNhY3Rpb25JZFNldFN0YXR1c0JpdChUcmFuc2FjdGlvbklkIHhp ZCwgWGlkU3RhdHVzIHN0YXR1cywgWExvZ1JlY1B0ciBsc24sIEJ1ZmZlciBidWZmZXIpCiB7CiAJ aW50CQkJYnl0ZW5vID0gVHJhbnNhY3Rpb25JZFRvQnl0ZSh4aWQpOwogCWludAkJCWJzaGlmdCA9 IFRyYW5zYWN0aW9uSWRUb0JJbmRleCh4aWQpICogQ0xPR19CSVRTX1BFUl9YQUNUOwpAQCAtNTc0 LDcgKzU3MCwxMCBAQCBUcmFuc2FjdGlvbklkU2V0U3RhdHVzQml0KFRyYW5zYWN0aW9uSWQgeGlk LCBYaWRTdGF0dXMgc3RhdHVzLCBYTG9nUmVjUHRyIGxzbiwgaQogCWNoYXIJCWJ5dGV2YWw7CiAJ Y2hhcgkJY3VydmFsOwogCi0JYnl0ZXB0ciA9IFhhY3RDdGwtPnNoYXJlZC0+cGFnZV9idWZmZXJb c2xvdG5vXSArIGJ5dGVubzsKKwlBc3NlcnQoTFdMb2NrSGVsZEJ5TWVJbk1vZGUoQnVmZmVyRGVz Y3JpcHRvckdldENvbnRlbnRMb2NrKEdldEJ1ZmZlckRlc2NyaXB0b3IoYnVmZmVyIC0gMSkpLAor CQkJCQkJCQlMV19FWENMVVNJVkUpKTsKKworCWJ5dGVwdHIgPSBCdWZmZXJHZXRQYWdlKGJ1ZmZl cikgKyBieXRlbm87CiAJY3VydmFsID0gKCpieXRlcHRyID4+IGJzaGlmdCkgJiBDTE9HX1hBQ1Rf QklUTUFTSzsKIAogCS8qCkBAIC02MDMsNyArNjAyLDcgQEAgVHJhbnNhY3Rpb25JZFNldFN0YXR1 c0JpdChUcmFuc2FjdGlvbklkIHhpZCwgWGlkU3RhdHVzIHN0YXR1cywgWExvZ1JlY1B0ciBsc24s IGkKIAkqYnl0ZXB0ciA9IGJ5dGV2YWw7CiAKIAkvKgotCSAqIFVwZGF0ZSB0aGUgZ3JvdXAgTFNO IGlmIHRoZSB0cmFuc2FjdGlvbiBjb21wbGV0aW9uIExTTiBpcyBoaWdoZXIuCisJICogVXBkYXRl IHRoZSBidWZmZXIgTFNOIGlmIHRoZSB0cmFuc2FjdGlvbiBjb21wbGV0aW9uIExTTiBpcyBoaWdo ZXIuCiAJICoKIAkgKiBOb3RlOiBsc24gd2lsbCBiZSBpbnZhbGlkIHdoZW4gc3VwcGxpZWQgZHVy aW5nIEluUmVjb3ZlcnkgcHJvY2Vzc2luZywKIAkgKiBzbyB3ZSBkb24ndCBuZWVkIHRvIGRvIGFu eXRoaW5nIHNwZWNpYWwgdG8gYXZvaWQgTFNOIHVwZGF0ZXMgZHVyaW5nCkBAIC02MTIsMTAgKzYx MSw4IEBAIFRyYW5zYWN0aW9uSWRTZXRTdGF0dXNCaXQoVHJhbnNhY3Rpb25JZCB4aWQsIFhpZFN0 YXR1cyBzdGF0dXMsIFhMb2dSZWNQdHIgbHNuLCBpCiAJICovCiAJaWYgKCFYTG9nUmVjUHRySXNJ bnZhbGlkKGxzbikpCiAJewotCQlpbnQJCQlsc25pbmRleCA9IEdldExTTkluZGV4KHNsb3Rubywg eGlkKTsKLQotCQlpZiAoWGFjdEN0bC0+c2hhcmVkLT5ncm91cF9sc25bbHNuaW5kZXhdIDwgbHNu KQotCQkJWGFjdEN0bC0+c2hhcmVkLT5ncm91cF9sc25bbHNuaW5kZXhdID0gbHNuOworCQlpZiAo QnVmZmVyR2V0RXh0ZXJuYWxMU04oR2V0QnVmZmVyRGVzY3JpcHRvcihidWZmZXIpKSA8IGxzbikK KwkJCUJ1ZmZlclNldEV4dGVybmFsTFNOKEdldEJ1ZmZlckRlc2NyaXB0b3IoYnVmZmVyKSwgbHNu KTsKIAl9CiB9CiAKQEAgLTY0MCw2NyArNjM3LDIyIEBAIFRyYW5zYWN0aW9uSWRHZXRTdGF0dXMo VHJhbnNhY3Rpb25JZCB4aWQsIFhMb2dSZWNQdHIgKmxzbikKIAlpbnQJCQlwYWdlbm8gPSBUcmFu c2FjdGlvbklkVG9QYWdlKHhpZCk7CiAJaW50CQkJYnl0ZW5vID0gVHJhbnNhY3Rpb25JZFRvQnl0 ZSh4aWQpOwogCWludAkJCWJzaGlmdCA9IFRyYW5zYWN0aW9uSWRUb0JJbmRleCh4aWQpICogQ0xP R19CSVRTX1BFUl9YQUNUOwotCWludAkJCXNsb3RubzsKLQlpbnQJCQlsc25pbmRleDsKIAljaGFy CSAgICpieXRlcHRyOwogCVhpZFN0YXR1cwlzdGF0dXM7CisJQnVmZmVyCQlidWZmZXI7CiAKLQkv KiBsb2NrIGlzIGFjcXVpcmVkIGJ5IFNpbXBsZUxydVJlYWRQYWdlX1JlYWRPbmx5ICovCi0KLQlz bG90bm8gPSBTaW1wbGVMcnVSZWFkUGFnZV9SZWFkT25seShYYWN0Q3RsLCBwYWdlbm8sIHhpZCk7 Ci0JYnl0ZXB0ciA9IFhhY3RDdGwtPnNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXSArIGJ5dGVu bzsKKwlidWZmZXIgPSBSZWFkU2xydUJ1ZmZlcihTTFJVX0NMT0dfSUQsIHBhZ2Vubyk7CisJYnl0 ZXB0ciA9IEJ1ZmZlckdldFBhZ2UoYnVmZmVyKSArIGJ5dGVubzsKIAogCXN0YXR1cyA9ICgqYnl0 ZXB0ciA+PiBic2hpZnQpICYgQ0xPR19YQUNUX0JJVE1BU0s7CiAKLQlsc25pbmRleCA9IEdldExT TkluZGV4KHNsb3RubywgeGlkKTsKLQkqbHNuID0gWGFjdEN0bC0+c2hhcmVkLT5ncm91cF9sc25b bHNuaW5kZXhdOworCSpsc24gPSBCdWZmZXJHZXRFeHRlcm5hbExTTihHZXRCdWZmZXJEZXNjcmlw dG9yKGJ1ZmZlcikpOwogCi0JTFdMb2NrUmVsZWFzZShYYWN0U0xSVUxvY2spOworCVJlbGVhc2VC dWZmZXIoYnVmZmVyKTsKIAogCXJldHVybiBzdGF0dXM7CiB9CiAKLS8qCi0gKiBOdW1iZXIgb2Yg c2hhcmVkIENMT0cgYnVmZmVycy4KLSAqCi0gKiBPbiBsYXJnZXIgbXVsdGktcHJvY2Vzc29yIHN5 c3RlbXMsIGl0IGlzIHBvc3NpYmxlIHRvIGhhdmUgbWFueSBDTE9HIHBhZ2UKLSAqIHJlcXVlc3Rz IGluIGZsaWdodCBhdCBvbmUgdGltZSB3aGljaCBjb3VsZCBsZWFkIHRvIGRpc2sgYWNjZXNzIGZv ciBDTE9HCi0gKiBwYWdlIGlmIHRoZSByZXF1aXJlZCBwYWdlIGlzIG5vdCBmb3VuZCBpbiBtZW1v cnkuICBUZXN0aW5nIHJldmVhbGVkIHRoYXQgd2UKLSAqIGNhbiBnZXQgdGhlIGJlc3QgcGVyZm9y bWFuY2UgYnkgaGF2aW5nIDEyOCBDTE9HIGJ1ZmZlcnMsIG1vcmUgdGhhbiB0aGF0IGl0Ci0gKiBk b2Vzbid0IGltcHJvdmUgcGVyZm9ybWFuY2UuCi0gKgotICogVW5jb25kaXRpb25hbGx5IGtlZXBp bmcgdGhlIG51bWJlciBvZiBDTE9HIGJ1ZmZlcnMgdG8gMTI4IGRpZCBub3Qgc2VlbSBsaWtlCi0g KiBhIGdvb2QgaWRlYSwgYmVjYXVzZSBpdCB3b3VsZCBpbmNyZWFzZSB0aGUgbWluaW11bSBhbW91 bnQgb2Ygc2hhcmVkIG1lbW9yeQotICogcmVxdWlyZWQgdG8gc3RhcnQsIHdoaWNoIGNvdWxkIGJl IGEgcHJvYmxlbSBmb3IgcGVvcGxlIHJ1bm5pbmcgdmVyeSBzbWFsbAotICogY29uZmlndXJhdGlv bnMuICBUaGUgZm9sbG93aW5nIGZvcm11bGEgc2VlbXMgdG8gcmVwcmVzZW50IGEgcmVhc29uYWJs ZQotICogY29tcHJvbWlzZTogcGVvcGxlIHdpdGggdmVyeSBsb3cgdmFsdWVzIGZvciBzaGFyZWRf YnVmZmVycyB3aWxsIGdldCBmZXdlcgotICogQ0xPRyBidWZmZXJzIGFzIHdlbGwsIGFuZCBldmVy eW9uZSBlbHNlIHdpbGwgZ2V0IDEyOC4KLSAqLwotU2l6ZQotQ0xPR1NobWVtQnVmZmVycyh2b2lk KQotewotCXJldHVybiBNaW4oMTI4LCBNYXgoNCwgTkJ1ZmZlcnMgLyA1MTIpKTsKLX0KLQotLyoK LSAqIEluaXRpYWxpemF0aW9uIG9mIHNoYXJlZCBtZW1vcnkgZm9yIENMT0cKLSAqLwotU2l6ZQot Q0xPR1NobWVtU2l6ZSh2b2lkKQotewotCXJldHVybiBTaW1wbGVMcnVTaG1lbVNpemUoQ0xPR1No bWVtQnVmZmVycygpLCBDTE9HX0xTTlNfUEVSX1BBR0UpOwotfQotCi12b2lkCi1DTE9HU2htZW1J bml0KHZvaWQpCi17Ci0JWGFjdEN0bC0+UGFnZVByZWNlZGVzID0gQ0xPR1BhZ2VQcmVjZWRlczsK LQlTaW1wbGVMcnVJbml0KFhhY3RDdGwsICJYYWN0IiwgQ0xPR1NobWVtQnVmZmVycygpLCBDTE9H X0xTTlNfUEVSX1BBR0UsCi0JCQkJICBYYWN0U0xSVUxvY2ssICJwZ194YWN0IiwgTFdUUkFOQ0hF X1hBQ1RfQlVGRkVSLAotCQkJCSAgU1lOQ19IQU5ETEVSX0NMT0cpOwotCVNscnVQYWdlUHJlY2Vk ZXNVbml0VGVzdHMoWGFjdEN0bCwgQ0xPR19YQUNUU19QRVJfUEFHRSk7Ci19Ci0KIC8qCiAgKiBU aGlzIGZ1bmMgbXVzdCBiZSBjYWxsZWQgT05DRSBvbiBzeXN0ZW0gaW5zdGFsbC4gIEl0IGNyZWF0 ZXMKICAqIHRoZSBpbml0aWFsIENMT0cgc2VnbWVudC4gIChUaGUgQ0xPRyBkaXJlY3RvcnkgaXMg YXNzdW1lZCB0bwpAQCAtNzEwLDE4ICs2NjIsMTUgQEAgQ0xPR1NobWVtSW5pdCh2b2lkKQogdm9p ZAogQm9vdFN0cmFwQ0xPRyh2b2lkKQogewotCWludAkJCXNsb3RubzsKLQotCUxXTG9ja0FjcXVp cmUoWGFjdFNMUlVMb2NrLCBMV19FWENMVVNJVkUpOworCUJ1ZmZlcgkJYnVmZmVyOwogCiAJLyog Q3JlYXRlIGFuZCB6ZXJvIHRoZSBmaXJzdCBwYWdlIG9mIHRoZSBjb21taXQgbG9nICovCi0Jc2xv dG5vID0gWmVyb0NMT0dQYWdlKDAsIGZhbHNlKTsKKwlidWZmZXIgPSBaZXJvQ0xPR1BhZ2UoMCwg ZmFsc2UpOwogCiAJLyogTWFrZSBzdXJlIGl0J3Mgd3JpdHRlbiBvdXQgKi8KLQlTaW1wbGVMcnVX cml0ZVBhZ2UoWGFjdEN0bCwgc2xvdG5vKTsKLQlBc3NlcnQoIVhhY3RDdGwtPnNoYXJlZC0+cGFn ZV9kaXJ0eVtzbG90bm9dKTsKKwlGbHVzaE9uZUJ1ZmZlcihidWZmZXIpOwogCi0JTFdMb2NrUmVs ZWFzZShYYWN0U0xSVUxvY2spOworCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsKIH0KIAog LyoKQEAgLTczMywxNyArNjgyLDE4IEBAIEJvb3RTdHJhcENMT0codm9pZCkKICAqCiAgKiBDb250 cm9sIGxvY2sgbXVzdCBiZSBoZWxkIGF0IGVudHJ5LCBhbmQgd2lsbCBiZSBoZWxkIGF0IGV4aXQu CiAgKi8KLXN0YXRpYyBpbnQKK3N0YXRpYyBCdWZmZXIKIFplcm9DTE9HUGFnZShpbnQgcGFnZW5v LCBib29sIHdyaXRlWGxvZykKIHsKLQlpbnQJCQlzbG90bm87CisJQnVmZmVyCQlidWZmZXI7CiAK LQlzbG90bm8gPSBTaW1wbGVMcnVaZXJvUGFnZShYYWN0Q3RsLCBwYWdlbm8pOworCWJ1ZmZlciA9 IFplcm9TbHJ1QnVmZmVyKFNMUlVfQ0xPR19JRCwgcGFnZW5vKTsKKwlNYXJrQnVmZmVyRGlydHko YnVmZmVyKTsKIAogCWlmICh3cml0ZVhsb2cpCiAJCVdyaXRlWmVyb1BhZ2VYbG9nUmVjKHBhZ2Vu byk7CiAKLQlyZXR1cm4gc2xvdG5vOworCXJldHVybiBidWZmZXI7CiB9CiAKIC8qCkBAIC03NTMs MTcgKzcwMyw2IEBAIFplcm9DTE9HUGFnZShpbnQgcGFnZW5vLCBib29sIHdyaXRlWGxvZykKIHZv aWQKIFN0YXJ0dXBDTE9HKHZvaWQpCiB7Ci0JVHJhbnNhY3Rpb25JZCB4aWQgPSBYaWRGcm9tRnVs bFRyYW5zYWN0aW9uSWQoU2htZW1WYXJpYWJsZUNhY2hlLT5uZXh0WGlkKTsKLQlpbnQJCQlwYWdl bm8gPSBUcmFuc2FjdGlvbklkVG9QYWdlKHhpZCk7Ci0KLQlMV0xvY2tBY3F1aXJlKFhhY3RTTFJV TG9jaywgTFdfRVhDTFVTSVZFKTsKLQotCS8qCi0JICogSW5pdGlhbGl6ZSBvdXIgaWRlYSBvZiB0 aGUgbGF0ZXN0IHBhZ2UgbnVtYmVyLgotCSAqLwotCVhhY3RDdGwtPnNoYXJlZC0+bGF0ZXN0X3Bh Z2VfbnVtYmVyID0gcGFnZW5vOwotCi0JTFdMb2NrUmVsZWFzZShYYWN0U0xSVUxvY2spOwogfQog CiAvKgpAQCAtNzc1LDggKzcxNCw2IEBAIFRyaW1DTE9HKHZvaWQpCiAJVHJhbnNhY3Rpb25JZCB4 aWQgPSBYaWRGcm9tRnVsbFRyYW5zYWN0aW9uSWQoU2htZW1WYXJpYWJsZUNhY2hlLT5uZXh0WGlk KTsKIAlpbnQJCQlwYWdlbm8gPSBUcmFuc2FjdGlvbklkVG9QYWdlKHhpZCk7CiAKLQlMV0xvY2tB Y3F1aXJlKFhhY3RTTFJVTG9jaywgTFdfRVhDTFVTSVZFKTsKLQogCS8qCiAJICogWmVybyBvdXQg dGhlIHJlbWFpbmRlciBvZiB0aGUgY3VycmVudCBjbG9nIHBhZ2UuICBVbmRlciBub3JtYWwKIAkg KiBjaXJjdW1zdGFuY2VzIGl0IHNob3VsZCBiZSB6ZXJvZXMgYWxyZWFkeSwgYnV0IGl0IHNlZW1z IGF0IGxlYXN0CkBAIC03OTMsNDAgKzczMCwyNCBAQCBUcmltQ0xPRyh2b2lkKQogCXsKIAkJaW50 CQkJYnl0ZW5vID0gVHJhbnNhY3Rpb25JZFRvQnl0ZSh4aWQpOwogCQlpbnQJCQlic2hpZnQgPSBU cmFuc2FjdGlvbklkVG9CSW5kZXgoeGlkKSAqIENMT0dfQklUU19QRVJfWEFDVDsKLQkJaW50CQkJ c2xvdG5vOwogCQljaGFyCSAgICpieXRlcHRyOworCQlCdWZmZXIJCWJ1ZmZlcjsKIAotCQlzbG90 bm8gPSBTaW1wbGVMcnVSZWFkUGFnZShYYWN0Q3RsLCBwYWdlbm8sIGZhbHNlLCB4aWQpOwotCQli eXRlcHRyID0gWGFjdEN0bC0+c2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90bm9dICsgYnl0ZW5vOwor CQlidWZmZXIgPSBSZWFkU2xydUJ1ZmZlcihTTFJVX0NMT0dfSUQsIHBhZ2Vubyk7CisJCUxvY2tC dWZmZXIoYnVmZmVyLCBCVUZGRVJfTE9DS19FWENMVVNJVkUpOworCQlieXRlcHRyID0gQnVmZmVy R2V0UGFnZShidWZmZXIpICsgYnl0ZW5vOwogCiAJCS8qIFplcm8gc28tZmFyLXVudXNlZCBwb3Np dGlvbnMgaW4gdGhlIGN1cnJlbnQgYnl0ZSAqLwogCQkqYnl0ZXB0ciAmPSAoMSA8PCBic2hpZnQp IC0gMTsKIAkJLyogWmVybyB0aGUgcmVzdCBvZiB0aGUgcGFnZSAqLwogCQlNZW1TZXQoYnl0ZXB0 ciArIDEsIDAsIEJMQ0tTWiAtIGJ5dGVubyAtIDEpOwogCi0JCVhhY3RDdGwtPnNoYXJlZC0+cGFn ZV9kaXJ0eVtzbG90bm9dID0gdHJ1ZTsKLQl9CisJCU1hcmtCdWZmZXJEaXJ0eShidWZmZXIpOwog Ci0JTFdMb2NrUmVsZWFzZShYYWN0U0xSVUxvY2spOwotfQotCi0vKgotICogUGVyZm9ybSBhIGNo ZWNrcG9pbnQgLS0tIGVpdGhlciBkdXJpbmcgc2h1dGRvd24sIG9yIG9uLXRoZS1mbHkKLSAqLwot dm9pZAotQ2hlY2tQb2ludENMT0codm9pZCkKLXsKLQkvKgotCSAqIFdyaXRlIGRpcnR5IENMT0cg cGFnZXMgdG8gZGlzay4gIFRoaXMgbWF5IHJlc3VsdCBpbiBzeW5jIHJlcXVlc3RzCi0JICogcXVl dWVkIGZvciBsYXRlciBoYW5kbGluZyBieSBQcm9jZXNzU3luY1JlcXVlc3RzKCksIGFzIHBhcnQg b2YgdGhlCi0JICogY2hlY2twb2ludC4KLQkgKi8KLQlUUkFDRV9QT1NUR1JFU1FMX0NMT0dfQ0hF Q0tQT0lOVF9TVEFSVCh0cnVlKTsKLQlTaW1wbGVMcnVXcml0ZUFsbChYYWN0Q3RsLCB0cnVlKTsK LQlUUkFDRV9QT1NUR1JFU1FMX0NMT0dfQ0hFQ0tQT0lOVF9ET05FKHRydWUpOworCQlVbmxvY2tS ZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CisJfQogfQogCi0KIC8qCiAgKiBNYWtlIHN1cmUgdGhhdCBD TE9HIGhhcyByb29tIGZvciBhIG5ld2x5LWFsbG9jYXRlZCBYSUQuCiAgKgpAQCAtODUwLDEyICs3 NzEsOCBAQCBFeHRlbmRDTE9HKFRyYW5zYWN0aW9uSWQgbmV3ZXN0WGFjdCkKIAogCXBhZ2VubyA9 IFRyYW5zYWN0aW9uSWRUb1BhZ2UobmV3ZXN0WGFjdCk7CiAKLQlMV0xvY2tBY3F1aXJlKFhhY3RT TFJVTG9jaywgTFdfRVhDTFVTSVZFKTsKLQogCS8qIFplcm8gdGhlIHBhZ2UgYW5kIG1ha2UgYW4g WExPRyBlbnRyeSBhYm91dCBpdCAqLwotCVplcm9DTE9HUGFnZShwYWdlbm8sIHRydWUpOwotCi0J TFdMb2NrUmVsZWFzZShYYWN0U0xSVUxvY2spOworCVVubG9ja1JlbGVhc2VCdWZmZXIoWmVyb0NM T0dQYWdlKHBhZ2VubywgdHJ1ZSkpOwogfQogCiAKQEAgLTg4Niw3ICs4MDMsOCBAQCBUcnVuY2F0 ZUNMT0coVHJhbnNhY3Rpb25JZCBvbGRlc3RYYWN0LCBPaWQgb2xkZXN0eGlkX2RhdG9pZCkKIAlj dXRvZmZQYWdlID0gVHJhbnNhY3Rpb25JZFRvUGFnZShvbGRlc3RYYWN0KTsKIAogCS8qIENoZWNr IHRvIHNlZSBpZiB0aGVyZSdzIGFueSBmaWxlcyB0aGF0IGNvdWxkIGJlIHJlbW92ZWQgKi8KLQlp ZiAoIVNscnVTY2FuRGlyZWN0b3J5KFhhY3RDdGwsIFNscnVTY2FuRGlyQ2JSZXBvcnRQcmVzZW5j ZSwgJmN1dG9mZlBhZ2UpKQorCWlmICghU2xydVNjYW5EaXJlY3RvcnkoU0xSVV9DTE9HX0lELCBD TE9HUGFnZVByZWNlZGVzLAorCQkJCQkJICAgU2xydVNjYW5EaXJDYlJlcG9ydFByZXNlbmNlLCAm Y3V0b2ZmUGFnZSkpCiAJCXJldHVybjsJCQkJCS8qIG5vdGhpbmcgdG8gcmVtb3ZlICovCiAKIAkv KgpAQCAtOTA3LDcgKzgyNSw3IEBAIFRydW5jYXRlQ0xPRyhUcmFuc2FjdGlvbklkIG9sZGVzdFhh Y3QsIE9pZCBvbGRlc3R4aWRfZGF0b2lkKQogCVdyaXRlVHJ1bmNhdGVYbG9nUmVjKGN1dG9mZlBh Z2UsIG9sZGVzdFhhY3QsIG9sZGVzdHhpZF9kYXRvaWQpOwogCiAJLyogTm93IHdlIGNhbiByZW1v dmUgdGhlIG9sZCBDTE9HIHNlZ21lbnQocykgKi8KLQlTaW1wbGVMcnVUcnVuY2F0ZShYYWN0Q3Rs LCBjdXRvZmZQYWdlKTsKKwlTaW1wbGVMcnVUcnVuY2F0ZShTTFJVX0NMT0dfSUQsIENMT0dQYWdl UHJlY2VkZXMsIGN1dG9mZlBhZ2UpOwogfQogCiAKQEAgLTk5MiwxNyArOTEwLDEzIEBAIGNsb2df cmVkbyhYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKIAlpZiAoaW5mbyA9PSBDTE9HX1pFUk9QQUdF KQogCXsKIAkJaW50CQkJcGFnZW5vOwotCQlpbnQJCQlzbG90bm87CisJCUJ1ZmZlcgkJYnVmZmVy OwogCiAJCW1lbWNweSgmcGFnZW5vLCBYTG9nUmVjR2V0RGF0YShyZWNvcmQpLCBzaXplb2YoaW50 KSk7CiAKLQkJTFdMb2NrQWNxdWlyZShYYWN0U0xSVUxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0KLQkJ c2xvdG5vID0gWmVyb0NMT0dQYWdlKHBhZ2VubywgZmFsc2UpOwotCQlTaW1wbGVMcnVXcml0ZVBh Z2UoWGFjdEN0bCwgc2xvdG5vKTsKLQkJQXNzZXJ0KCFYYWN0Q3RsLT5zaGFyZWQtPnBhZ2VfZGly dHlbc2xvdG5vXSk7Ci0KLQkJTFdMb2NrUmVsZWFzZShYYWN0U0xSVUxvY2spOworCQlidWZmZXIg PSBaZXJvQ0xPR1BhZ2UocGFnZW5vLCBmYWxzZSk7CisJCUZsdXNoT25lQnVmZmVyKGJ1ZmZlcik7 CisJCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsKIAl9CiAJZWxzZSBpZiAoaW5mbyA9PSBD TE9HX1RSVU5DQVRFKQogCXsKQEAgLTEwMTIsMTcgKzkyNiw4IEBAIGNsb2dfcmVkbyhYTG9nUmVh ZGVyU3RhdGUgKnJlY29yZCkKIAogCQlBZHZhbmNlT2xkZXN0Q2xvZ1hpZCh4bHJlYy5vbGRlc3RY YWN0KTsKIAotCQlTaW1wbGVMcnVUcnVuY2F0ZShYYWN0Q3RsLCB4bHJlYy5wYWdlbm8pOworCQlT aW1wbGVMcnVUcnVuY2F0ZShTTFJVX0NMT0dfSUQsIENMT0dQYWdlUHJlY2VkZXMsIHhscmVjLnBh Z2Vubyk7CiAJfQogCWVsc2UKIAkJZWxvZyhQQU5JQywgImNsb2dfcmVkbzogdW5rbm93biBvcCBj b2RlICV1IiwgaW5mbyk7CiB9Ci0KLS8qCi0gKiBFbnRyeXBvaW50IGZvciBzeW5jLmMgdG8gc3lu YyBjbG9nIGZpbGVzLgotICovCi1pbnQKLWNsb2dzeW5jZmlsZXRhZyhjb25zdCBGaWxlVGFnICpm dGFnLCBjaGFyICpwYXRoKQotewotCXJldHVybiBTbHJ1U3luY0ZpbGVUYWcoWGFjdEN0bCwgZnRh ZywgcGF0aCk7Ci19CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9jb21t aXRfdHMuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL2NvbW1pdF90cy5jCmluZGV4IDlh YTQ2NzVjYjc5Li40YTFkOTk1OWIxYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3Ry YW5zYW0vY29tbWl0X3RzLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vY29tbWl0 X3RzLmMKQEAgLTcwLDEzICs3MCw2IEBAIHR5cGVkZWYgc3RydWN0IENvbW1pdFRpbWVzdGFtcEVu dHJ5CiAjZGVmaW5lIFRyYW5zYWN0aW9uSWRUb0NUc0VudHJ5KHhpZCkJXAogCSgoeGlkKSAlIChU cmFuc2FjdGlvbklkKSBDT01NSVRfVFNfWEFDVFNfUEVSX1BBR0UpCiAKLS8qCi0gKiBMaW5rIHRv IHNoYXJlZC1tZW1vcnkgZGF0YSBzdHJ1Y3R1cmVzIGZvciBDb21taXRUcyBjb250cm9sCi0gKi8K LXN0YXRpYyBTbHJ1Q3RsRGF0YSBDb21taXRUc0N0bERhdGE7Ci0KLSNkZWZpbmUgQ29tbWl0VHND dGwgKCZDb21taXRUc0N0bERhdGEpCi0KIC8qCiAgKiBXZSBrZWVwIGEgY2FjaGUgb2YgdGhlIGxh c3QgdmFsdWUgc2V0IGluIHNoYXJlZCBtZW1vcnkuCiAgKgpAQCAtMTA3LDcgKzEwMCw3IEBAIHN0 YXRpYyB2b2lkIFNldFhpZENvbW1pdFRzSW5QYWdlKFRyYW5zYWN0aW9uSWQgeGlkLCBpbnQgbnN1 YnhpZHMsCiBzdGF0aWMgdm9pZCBUcmFuc2FjdGlvbklkU2V0Q29tbWl0VHMoVHJhbnNhY3Rpb25J ZCB4aWQsIFRpbWVzdGFtcFR6IHRzLAogCQkJCQkJCQkJIFJlcE9yaWdpbklkIG5vZGVpZCwgaW50 IHNsb3Rubyk7CiBzdGF0aWMgdm9pZCBlcnJvcl9jb21taXRfdHNfZGlzYWJsZWQodm9pZCk7Ci1z dGF0aWMgaW50CVplcm9Db21taXRUc1BhZ2UoaW50IHBhZ2VubywgYm9vbCB3cml0ZVhsb2cpOwor c3RhdGljIEJ1ZmZlciBaZXJvQ29tbWl0VHNQYWdlKGludCBwYWdlbm8sIGJvb2wgd3JpdGVYbG9n KTsKIHN0YXRpYyBib29sIENvbW1pdFRzUGFnZVByZWNlZGVzKGludCBwYWdlMSwgaW50IHBhZ2Uy KTsKIHN0YXRpYyB2b2lkIEFjdGl2YXRlQ29tbWl0VHModm9pZCk7CiBzdGF0aWMgdm9pZCBEZWFj dGl2YXRlQ29tbWl0VHModm9pZCk7CkBAIC0yMTYsMzAgKzIwOSwyNyBAQCBTZXRYaWRDb21taXRU c0luUGFnZShUcmFuc2FjdGlvbklkIHhpZCwgaW50IG5zdWJ4aWRzLAogCQkJCQkgVHJhbnNhY3Rp b25JZCAqc3VieGlkcywgVGltZXN0YW1wVHogdHMsCiAJCQkJCSBSZXBPcmlnaW5JZCBub2RlaWQs IGludCBwYWdlbm8pCiB7Ci0JaW50CQkJc2xvdG5vOwogCWludAkJCWk7CisJQnVmZmVyCQlidWZm ZXI7CiAKLQlMV0xvY2tBY3F1aXJlKENvbW1pdFRzU0xSVUxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0K LQlzbG90bm8gPSBTaW1wbGVMcnVSZWFkUGFnZShDb21taXRUc0N0bCwgcGFnZW5vLCB0cnVlLCB4 aWQpOworCWJ1ZmZlciA9IFJlYWRTbHJ1QnVmZmVyKFNMUlVfQ09NTUlUX1RTX0lELCBwYWdlbm8p OworCUxvY2tCdWZmZXIoYnVmZmVyLCBCVUZGRVJfTE9DS19FWENMVVNJVkUpOwogCi0JVHJhbnNh Y3Rpb25JZFNldENvbW1pdFRzKHhpZCwgdHMsIG5vZGVpZCwgc2xvdG5vKTsKKwlUcmFuc2FjdGlv bklkU2V0Q29tbWl0VHMoeGlkLCB0cywgbm9kZWlkLCBidWZmZXIpOwogCWZvciAoaSA9IDA7IGkg PCBuc3VieGlkczsgaSsrKQotCQlUcmFuc2FjdGlvbklkU2V0Q29tbWl0VHMoc3VieGlkc1tpXSwg dHMsIG5vZGVpZCwgc2xvdG5vKTsKKwkJVHJhbnNhY3Rpb25JZFNldENvbW1pdFRzKHN1YnhpZHNb aV0sIHRzLCBub2RlaWQsIGJ1ZmZlcik7CiAKLQlDb21taXRUc0N0bC0+c2hhcmVkLT5wYWdlX2Rp cnR5W3Nsb3Rub10gPSB0cnVlOworCU1hcmtCdWZmZXJEaXJ0eShidWZmZXIpOwogCi0JTFdMb2Nr UmVsZWFzZShDb21taXRUc1NMUlVMb2NrKTsKKwlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7 CiB9CiAKIC8qCiAgKiBTZXRzIHRoZSBjb21taXQgdGltZXN0YW1wIG9mIGEgc2luZ2xlIHRyYW5z YWN0aW9uLgotICoKLSAqIE11c3QgYmUgY2FsbGVkIHdpdGggQ29tbWl0VHNTTFJVTG9jayBoZWxk CiAgKi8KIHN0YXRpYyB2b2lkCiBUcmFuc2FjdGlvbklkU2V0Q29tbWl0VHMoVHJhbnNhY3Rpb25J ZCB4aWQsIFRpbWVzdGFtcFR6IHRzLAotCQkJCQkJIFJlcE9yaWdpbklkIG5vZGVpZCwgaW50IHNs b3RubykKKwkJCQkJCSBSZXBPcmlnaW5JZCBub2RlaWQsIEJ1ZmZlciBidWZmZXIpCiB7CiAJaW50 CQkJZW50cnlubyA9IFRyYW5zYWN0aW9uSWRUb0NUc0VudHJ5KHhpZCk7CiAJQ29tbWl0VGltZXN0 YW1wRW50cnkgZW50cnk7CkBAIC0yNDksOCArMjM5LDcgQEAgVHJhbnNhY3Rpb25JZFNldENvbW1p dFRzKFRyYW5zYWN0aW9uSWQgeGlkLCBUaW1lc3RhbXBUeiB0cywKIAllbnRyeS50aW1lID0gdHM7 CiAJZW50cnkubm9kZWlkID0gbm9kZWlkOwogCi0JbWVtY3B5KENvbW1pdFRzQ3RsLT5zaGFyZWQt PnBhZ2VfYnVmZmVyW3Nsb3Rub10gKwotCQkgICBTaXplT2ZDb21taXRUaW1lc3RhbXBFbnRyeSAq IGVudHJ5bm8sCisJbWVtY3B5KEJ1ZmZlckdldFBhZ2UoYnVmZmVyKSArIFNpemVPZkNvbW1pdFRp bWVzdGFtcEVudHJ5ICogZW50cnlubywKIAkJICAgJmVudHJ5LCBTaXplT2ZDb21taXRUaW1lc3Rh bXBFbnRyeSk7CiB9CiAKQEAgLTI2OCwxMCArMjU3LDEwIEBAIFRyYW5zYWN0aW9uSWRHZXRDb21t aXRUc0RhdGEoVHJhbnNhY3Rpb25JZCB4aWQsIFRpbWVzdGFtcFR6ICp0cywKIHsKIAlpbnQJCQlw YWdlbm8gPSBUcmFuc2FjdGlvbklkVG9DVHNQYWdlKHhpZCk7CiAJaW50CQkJZW50cnlubyA9IFRy YW5zYWN0aW9uSWRUb0NUc0VudHJ5KHhpZCk7Ci0JaW50CQkJc2xvdG5vOwogCUNvbW1pdFRpbWVz dGFtcEVudHJ5IGVudHJ5OwogCVRyYW5zYWN0aW9uSWQgb2xkZXN0Q29tbWl0VHNYaWQ7CiAJVHJh bnNhY3Rpb25JZCBuZXdlc3RDb21taXRUc1hpZDsKKwlCdWZmZXIJCWJ1ZmZlcjsKIAogCWlmICgh VHJhbnNhY3Rpb25JZElzVmFsaWQoeGlkKSkKIAkJZXJlcG9ydChFUlJPUiwKQEAgLTMyNSwxMCAr MzE0LDExIEBAIFRyYW5zYWN0aW9uSWRHZXRDb21taXRUc0RhdGEoVHJhbnNhY3Rpb25JZCB4aWQs IFRpbWVzdGFtcFR6ICp0cywKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAotCS8qIGxvY2sgaXMgYWNx dWlyZWQgYnkgU2ltcGxlTHJ1UmVhZFBhZ2VfUmVhZE9ubHkgKi8KLQlzbG90bm8gPSBTaW1wbGVM cnVSZWFkUGFnZV9SZWFkT25seShDb21taXRUc0N0bCwgcGFnZW5vLCB4aWQpOworCWJ1ZmZlciA9 IFJlYWRTbHJ1QnVmZmVyKFNMUlVfQ09NTUlUX1RTX0lELCBwYWdlbm8pOworCUxvY2tCdWZmZXIo YnVmZmVyLCBCVUZGRVJfTE9DS19TSEFSRSk7CisKIAltZW1jcHkoJmVudHJ5LAotCQkgICBDb21t aXRUc0N0bC0+c2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90bm9dICsKKwkJICAgQnVmZmVyR2V0UGFn ZShidWZmZXIpICsKIAkJICAgU2l6ZU9mQ29tbWl0VGltZXN0YW1wRW50cnkgKiBlbnRyeW5vLAog CQkgICBTaXplT2ZDb21taXRUaW1lc3RhbXBFbnRyeSk7CiAKQEAgLTMzNiw3ICszMjYsNyBAQCBU cmFuc2FjdGlvbklkR2V0Q29tbWl0VHNEYXRhKFRyYW5zYWN0aW9uSWQgeGlkLCBUaW1lc3RhbXBU eiAqdHMsCiAJaWYgKG5vZGVpZCkKIAkJKm5vZGVpZCA9IGVudHJ5Lm5vZGVpZDsKIAotCUxXTG9j a1JlbGVhc2UoQ29tbWl0VHNTTFJVTG9jayk7CisJVW5sb2NrUmVsZWFzZUJ1ZmZlcihidWZmZXIp OwogCXJldHVybiAqdHMgIT0gMDsKIH0KIApAQCAtNTA1LDI3ICs0OTUsMTMgQEAgcGdfeGFjdF9j b21taXRfdGltZXN0YW1wX29yaWdpbihQR19GVU5DVElPTl9BUkdTKQogCVBHX1JFVFVSTl9EQVRV TShIZWFwVHVwbGVHZXREYXR1bShodHVwKSk7CiB9CiAKLS8qCi0gKiBOdW1iZXIgb2Ygc2hhcmVk IENvbW1pdFRTIGJ1ZmZlcnMuCi0gKgotICogV2UgdXNlIGEgdmVyeSBzaW1pbGFyIGxvZ2ljIGFz IGZvciB0aGUgbnVtYmVyIG9mIENMT0cgYnVmZmVycyAoZXhjZXB0IHdlCi0gKiBzY2FsZSB1cCB0 d2ljZSBhcyBmYXN0IHdpdGggc2hhcmVkIGJ1ZmZlcnMsIGFuZCB0aGUgbWF4aW11bSBpcyB0d2lj ZSBhcwotICogaGlnaCk7IHNlZSBjb21tZW50cyBpbiBDTE9HU2htZW1CdWZmZXJzLgotICovCi1T aXplCi1Db21taXRUc1NobWVtQnVmZmVycyh2b2lkKQotewotCXJldHVybiBNaW4oMjU2LCBNYXgo NCwgTkJ1ZmZlcnMgLyAyNTYpKTsKLX0KLQogLyoKICAqIFNoYXJlZCBtZW1vcnkgc2l6aW5nIGZv ciBDb21taXRUcwogICovCiBTaXplCiBDb21taXRUc1NobWVtU2l6ZSh2b2lkKQogewotCXJldHVy biBTaW1wbGVMcnVTaG1lbVNpemUoQ29tbWl0VHNTaG1lbUJ1ZmZlcnMoKSwgMCkgKwotCQlzaXpl b2YoQ29tbWl0VGltZXN0YW1wU2hhcmVkKTsKKwlyZXR1cm4gc2l6ZW9mKENvbW1pdFRpbWVzdGFt cFNoYXJlZCk7CiB9CiAKIC8qCkBAIC01MzcsMTIgKzUxMyw3IEBAIENvbW1pdFRzU2htZW1Jbml0 KHZvaWQpCiB7CiAJYm9vbAkJZm91bmQ7CiAKLQlDb21taXRUc0N0bC0+UGFnZVByZWNlZGVzID0g Q29tbWl0VHNQYWdlUHJlY2VkZXM7Ci0JU2ltcGxlTHJ1SW5pdChDb21taXRUc0N0bCwgIkNvbW1p dFRzIiwgQ29tbWl0VHNTaG1lbUJ1ZmZlcnMoKSwgMCwKLQkJCQkgIENvbW1pdFRzU0xSVUxvY2ss ICJwZ19jb21taXRfdHMiLAotCQkJCSAgTFdUUkFOQ0hFX0NPTU1JVFRTX0JVRkZFUiwKLQkJCQkg IFNZTkNfSEFORExFUl9DT01NSVRfVFMpOwotCVNscnVQYWdlUHJlY2VkZXNVbml0VGVzdHMoQ29t bWl0VHNDdGwsIENPTU1JVF9UU19YQUNUU19QRVJfUEFHRSk7CisJU2xydVBhZ2VQcmVjZWRlc1Vu aXRUZXN0cyhDb21taXRUc1BhZ2VQcmVjZWRlcywgQ09NTUlUX1RTX1hBQ1RTX1BFUl9QQUdFKTsK IAogCWNvbW1pdFRzU2hhcmVkID0gU2htZW1Jbml0U3RydWN0KCJDb21taXRUcyBzaGFyZWQiLAog CQkJCQkJCQkJIHNpemVvZihDb21taXRUaW1lc3RhbXBTaGFyZWQpLApAQCAtNTg2LDE3ICs1NTcs MTggQEAgQm9vdFN0cmFwQ29tbWl0VHModm9pZCkKICAqCiAgKiBDb250cm9sIGxvY2sgbXVzdCBi ZSBoZWxkIGF0IGVudHJ5LCBhbmQgd2lsbCBiZSBoZWxkIGF0IGV4aXQuCiAgKi8KLXN0YXRpYyBp bnQKK3N0YXRpYyBCdWZmZXIKIFplcm9Db21taXRUc1BhZ2UoaW50IHBhZ2VubywgYm9vbCB3cml0 ZVhsb2cpCiB7Ci0JaW50CQkJc2xvdG5vOworCUJ1ZmZlcgkJYnVmZmVyOwogCi0Jc2xvdG5vID0g U2ltcGxlTHJ1WmVyb1BhZ2UoQ29tbWl0VHNDdGwsIHBhZ2Vubyk7CisJYnVmZmVyID0gWmVyb1Ns cnVCdWZmZXIoU0xSVV9DT01NSVRfVFNfSUQsIHBhZ2Vubyk7CisJTWFya0J1ZmZlckRpcnR5KGJ1 ZmZlcik7CiAKIAlpZiAod3JpdGVYbG9nKQogCQlXcml0ZVplcm9QYWdlWGxvZ1JlYyhwYWdlbm8p OwogCi0JcmV0dXJuIHNsb3RubzsKKwlyZXR1cm4gYnVmZmVyOwogfQogCiAvKgpAQCAtNjk0LDEz ICs2NjYsNiBAQCBBY3RpdmF0ZUNvbW1pdFRzKHZvaWQpCiAJeGlkID0gWGlkRnJvbUZ1bGxUcmFu c2FjdGlvbklkKFNobWVtVmFyaWFibGVDYWNoZS0+bmV4dFhpZCk7CiAJcGFnZW5vID0gVHJhbnNh Y3Rpb25JZFRvQ1RzUGFnZSh4aWQpOwogCi0JLyoKLQkgKiBSZS1Jbml0aWFsaXplIG91ciBpZGVh IG9mIHRoZSBsYXRlc3QgcGFnZSBudW1iZXIuCi0JICovCi0JTFdMb2NrQWNxdWlyZShDb21taXRU c1NMUlVMb2NrLCBMV19FWENMVVNJVkUpOwotCUNvbW1pdFRzQ3RsLT5zaGFyZWQtPmxhdGVzdF9w YWdlX251bWJlciA9IHBhZ2VubzsKLQlMV0xvY2tSZWxlYXNlKENvbW1pdFRzU0xSVUxvY2spOwot CiAJLyoKIAkgKiBJZiBDb21taXRUcyBpcyBlbmFibGVkLCBidXQgaXQgd2Fzbid0IGluIHRoZSBw cmV2aW91cyBzZXJ2ZXIgcnVuLCB3ZQogCSAqIG5lZWQgdG8gc2V0IHRoZSBvbGRlc3QgYW5kIG5l d2VzdCB2YWx1ZXMgdG8gdGhlIG5leHQgWGlkOyB0aGF0IHdheSwgd2UKQEAgLTcyMywxNSArNjg4 LDE0IEBAIEFjdGl2YXRlQ29tbWl0VHModm9pZCkKIAlMV0xvY2tSZWxlYXNlKENvbW1pdFRzTG9j ayk7CiAKIAkvKiBDcmVhdGUgdGhlIGN1cnJlbnQgc2VnbWVudCBmaWxlLCBpZiBuZWNlc3Nhcnkg Ki8KLQlpZiAoIVNpbXBsZUxydURvZXNQaHlzaWNhbFBhZ2VFeGlzdChDb21taXRUc0N0bCwgcGFn ZW5vKSkKKwlpZiAoIVNpbXBsZUxydURvZXNQaHlzaWNhbFBhZ2VFeGlzdChTTFJVX0NPTU1JVF9U U19JRCwgcGFnZW5vKSkKIAl7Ci0JCWludAkJCXNsb3RubzsKKwkJQnVmZmVyCQlidWZmZXI7CiAK LQkJTFdMb2NrQWNxdWlyZShDb21taXRUc1NMUlVMb2NrLCBMV19FWENMVVNJVkUpOwotCQlzbG90 bm8gPSBaZXJvQ29tbWl0VHNQYWdlKHBhZ2VubywgZmFsc2UpOwotCQlTaW1wbGVMcnVXcml0ZVBh Z2UoQ29tbWl0VHNDdGwsIHNsb3Rubyk7Ci0JCUFzc2VydCghQ29tbWl0VHNDdGwtPnNoYXJlZC0+ cGFnZV9kaXJ0eVtzbG90bm9dKTsKLQkJTFdMb2NrUmVsZWFzZShDb21taXRUc1NMUlVMb2NrKTsK KwkJYnVmZmVyID0gWmVyb1NscnVCdWZmZXIoU0xSVV9DT01NSVRfVFNfSUQsIHBhZ2Vubyk7CisJ CU1hcmtCdWZmZXJEaXJ0eShidWZmZXIpOworCQlGbHVzaE9uZUJ1ZmZlcihidWZmZXIpOworCQlV bmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CiAJfQogCiAJLyogQ2hhbmdlIHRoZSBhY3RpdmF0 aW9uIHN0YXR1cyBpbiBzaGFyZWQgbWVtb3J5LiAqLwpAQCAtNzgwLDIzICs3NDQsOSBAQCBEZWFj dGl2YXRlQ29tbWl0VHModm9pZCkKIAkgKiBiZSBvdmVyd3JpdHRlbiBhbnl3YXkgd2hlbiB3ZSB3 cmFwIGFyb3VuZCwgYnV0IGl0IHNlZW1zIGJldHRlciB0byBiZQogCSAqIHRpZHkuKQogCSAqLwot CUxXTG9ja0FjcXVpcmUoQ29tbWl0VHNTTFJVTG9jaywgTFdfRVhDTFVTSVZFKTsKLQkodm9pZCkg U2xydVNjYW5EaXJlY3RvcnkoQ29tbWl0VHNDdGwsIFNscnVTY2FuRGlyQ2JEZWxldGVBbGwsIE5V TEwpOwotCUxXTG9ja1JlbGVhc2UoQ29tbWl0VHNTTFJVTG9jayk7Ci19Ci0KLS8qCi0gKiBQZXJm b3JtIGEgY2hlY2twb2ludCAtLS0gZWl0aGVyIGR1cmluZyBzaHV0ZG93biwgb3Igb24tdGhlLWZs eQotICovCi12b2lkCi1DaGVja1BvaW50Q29tbWl0VHModm9pZCkKLXsKLQkvKgotCSAqIFdyaXRl IGRpcnR5IENvbW1pdFRzIHBhZ2VzIHRvIGRpc2suICBUaGlzIG1heSByZXN1bHQgaW4gc3luYyBy ZXF1ZXN0cwotCSAqIHF1ZXVlZCBmb3IgbGF0ZXIgaGFuZGxpbmcgYnkgUHJvY2Vzc1N5bmNSZXF1 ZXN0cygpLCBhcyBwYXJ0IG9mIHRoZQotCSAqIGNoZWNrcG9pbnQuCi0JICovCi0JU2ltcGxlTHJ1 V3JpdGVBbGwoQ29tbWl0VHNDdGwsIHRydWUpOworCSh2b2lkKSBTbHJ1U2NhbkRpcmVjdG9yeShT TFJVX0NPTU1JVF9UU19JRCwKKwkJCQkJCQkgQ29tbWl0VHNQYWdlUHJlY2VkZXMsCisJCQkJCQkJ IFNscnVTY2FuRGlyQ2JEZWxldGVBbGwsIE5VTEwpOwogfQogCiAvKgpAQCAtODM0LDEyICs3ODQs OCBAQCBFeHRlbmRDb21taXRUcyhUcmFuc2FjdGlvbklkIG5ld2VzdFhhY3QpCiAKIAlwYWdlbm8g PSBUcmFuc2FjdGlvbklkVG9DVHNQYWdlKG5ld2VzdFhhY3QpOwogCi0JTFdMb2NrQWNxdWlyZShD b21taXRUc1NMUlVMb2NrLCBMV19FWENMVVNJVkUpOwotCiAJLyogWmVybyB0aGUgcGFnZSBhbmQg bWFrZSBhbiBYTE9HIGVudHJ5IGFib3V0IGl0ICovCi0JWmVyb0NvbW1pdFRzUGFnZShwYWdlbm8s ICFJblJlY292ZXJ5KTsKLQotCUxXTG9ja1JlbGVhc2UoQ29tbWl0VHNTTFJVTG9jayk7CisJVW5s b2NrUmVsZWFzZUJ1ZmZlcihaZXJvQ29tbWl0VHNQYWdlKHBhZ2VubywgIUluUmVjb3ZlcnkpKTsK IH0KIAogLyoKQEAgLTg2MCw3ICs4MDYsOSBAQCBUcnVuY2F0ZUNvbW1pdFRzKFRyYW5zYWN0aW9u SWQgb2xkZXN0WGFjdCkKIAljdXRvZmZQYWdlID0gVHJhbnNhY3Rpb25JZFRvQ1RzUGFnZShvbGRl c3RYYWN0KTsKIAogCS8qIENoZWNrIHRvIHNlZSBpZiB0aGVyZSdzIGFueSBmaWxlcyB0aGF0IGNv dWxkIGJlIHJlbW92ZWQgKi8KLQlpZiAoIVNscnVTY2FuRGlyZWN0b3J5KENvbW1pdFRzQ3RsLCBT bHJ1U2NhbkRpckNiUmVwb3J0UHJlc2VuY2UsCisJaWYgKCFTbHJ1U2NhbkRpcmVjdG9yeShTTFJV X0NPTU1JVF9UU19JRCwKKwkJCQkJCSAgIENvbW1pdFRzUGFnZVByZWNlZGVzLAorCQkJCQkJICAg U2xydVNjYW5EaXJDYlJlcG9ydFByZXNlbmNlLAogCQkJCQkJICAgJmN1dG9mZlBhZ2UpKQogCQly ZXR1cm47CQkJCQkvKiBub3RoaW5nIHRvIHJlbW92ZSAqLwogCkBAIC04NjgsNyArODE2LDcgQEAg VHJ1bmNhdGVDb21taXRUcyhUcmFuc2FjdGlvbklkIG9sZGVzdFhhY3QpCiAJV3JpdGVUcnVuY2F0 ZVhsb2dSZWMoY3V0b2ZmUGFnZSwgb2xkZXN0WGFjdCk7CiAKIAkvKiBOb3cgd2UgY2FuIHJlbW92 ZSB0aGUgb2xkIENvbW1pdFRzIHNlZ21lbnQocykgKi8KLQlTaW1wbGVMcnVUcnVuY2F0ZShDb21t aXRUc0N0bCwgY3V0b2ZmUGFnZSk7CisJU2ltcGxlTHJ1VHJ1bmNhdGUoU0xSVV9DT01NSVRfVFNf SUQsIENvbW1pdFRzUGFnZVByZWNlZGVzLCBjdXRvZmZQYWdlKTsKIH0KIAogLyoKQEAgLTk5Miwx NyArOTQwLDE0IEBAIGNvbW1pdF90c19yZWRvKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogCWlm IChpbmZvID09IENPTU1JVF9UU19aRVJPUEFHRSkKIAl7CiAJCWludAkJCXBhZ2VubzsKLQkJaW50 CQkJc2xvdG5vOworCQlCdWZmZXIJCWJ1ZmZlcjsKIAogCQltZW1jcHkoJnBhZ2VubywgWExvZ1Jl Y0dldERhdGEocmVjb3JkKSwgc2l6ZW9mKGludCkpOwogCi0JCUxXTG9ja0FjcXVpcmUoQ29tbWl0 VHNTTFJVTG9jaywgTFdfRVhDTFVTSVZFKTsKLQotCQlzbG90bm8gPSBaZXJvQ29tbWl0VHNQYWdl KHBhZ2VubywgZmFsc2UpOwotCQlTaW1wbGVMcnVXcml0ZVBhZ2UoQ29tbWl0VHNDdGwsIHNsb3Ru byk7Ci0JCUFzc2VydCghQ29tbWl0VHNDdGwtPnNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90bm9dKTsK LQotCQlMV0xvY2tSZWxlYXNlKENvbW1pdFRzU0xSVUxvY2spOworCQlidWZmZXIgPSBaZXJvU2xy dUJ1ZmZlcihTTFJVX0NPTU1JVF9UU19JRCwgcGFnZW5vKTsKKwkJTWFya0J1ZmZlckRpcnR5KGJ1 ZmZlcik7CisJCUZsdXNoT25lQnVmZmVyKGJ1ZmZlcik7CisJCVVubG9ja1JlbGVhc2VCdWZmZXIo YnVmZmVyKTsKIAl9CiAJZWxzZSBpZiAoaW5mbyA9PSBDT01NSVRfVFNfVFJVTkNBVEUpCiAJewpA QCAtMTAxMCwyMyArOTU1LDggQEAgY29tbWl0X3RzX3JlZG8oWExvZ1JlYWRlclN0YXRlICpyZWNv cmQpCiAKIAkJQWR2YW5jZU9sZGVzdENvbW1pdFRzWGlkKHRydW5jLT5vbGRlc3RYaWQpOwogCi0J CS8qCi0JCSAqIER1cmluZyBYTE9HIHJlcGxheSwgbGF0ZXN0X3BhZ2VfbnVtYmVyIGlzbid0IHNl dCB1cCB5ZXQ7IGluc2VydCBhCi0JCSAqIHN1aXRhYmxlIHZhbHVlIHRvIGJ5cGFzcyB0aGUgc2Fu aXR5IHRlc3QgaW4gU2ltcGxlTHJ1VHJ1bmNhdGUuCi0JCSAqLwotCQlDb21taXRUc0N0bC0+c2hh cmVkLT5sYXRlc3RfcGFnZV9udW1iZXIgPSB0cnVuYy0+cGFnZW5vOwotCi0JCVNpbXBsZUxydVRy dW5jYXRlKENvbW1pdFRzQ3RsLCB0cnVuYy0+cGFnZW5vKTsKKwkJU2ltcGxlTHJ1VHJ1bmNhdGUo U0xSVV9DT01NSVRfVFNfSUQsIENvbW1pdFRzUGFnZVByZWNlZGVzLCB0cnVuYy0+cGFnZW5vKTsK IAl9CiAJZWxzZQogCQllbG9nKFBBTklDLCAiY29tbWl0X3RzX3JlZG86IHVua25vd24gb3AgY29k ZSAldSIsIGluZm8pOwogfQotCi0vKgotICogRW50cnlwb2ludCBmb3Igc3luYy5jIHRvIHN5bmMg Y29tbWl0X3RzIGZpbGVzLgotICovCi1pbnQKLWNvbW1pdHRzc3luY2ZpbGV0YWcoY29uc3QgRmls ZVRhZyAqZnRhZywgY2hhciAqcGF0aCkKLXsKLQlyZXR1cm4gU2xydVN5bmNGaWxlVGFnKENvbW1p dFRzQ3RsLCBmdGFnLCBwYXRoKTsKLX0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90 cmFuc2FtL211bHRpeGFjdC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4YWN0 LmMKaW5kZXggMjA0YWE5NTA0NTYuLmVkYTM1OWFiZmY4IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3QuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJh bnNhbS9tdWx0aXhhY3QuYwpAQCAtMTgxLDE1ICsxODEsNiBAQAogI2RlZmluZSBQcmV2aW91c011 bHRpWGFjdElkKHhpZCkgXAogCSgoeGlkKSA9PSBGaXJzdE11bHRpWGFjdElkID8gTWF4TXVsdGlY YWN0SWQgOiAoeGlkKSAtIDEpCiAKLS8qCi0gKiBMaW5rcyB0byBzaGFyZWQtbWVtb3J5IGRhdGEg c3RydWN0dXJlcyBmb3IgTXVsdGlYYWN0IGNvbnRyb2wKLSAqLwotc3RhdGljIFNscnVDdGxEYXRh IE11bHRpWGFjdE9mZnNldEN0bERhdGE7Ci1zdGF0aWMgU2xydUN0bERhdGEgTXVsdGlYYWN0TWVt YmVyQ3RsRGF0YTsKLQotI2RlZmluZSBNdWx0aVhhY3RPZmZzZXRDdGwJKCZNdWx0aVhhY3RPZmZz ZXRDdGxEYXRhKQotI2RlZmluZSBNdWx0aVhhY3RNZW1iZXJDdGwJKCZNdWx0aVhhY3RNZW1iZXJD dGxEYXRhKQotCiAvKgogICogTXVsdGlYYWN0IHN0YXRlIHNoYXJlZCBhY3Jvc3MgYWxsIGJhY2tl bmRzLiAgQWxsIHRoaXMgc3RhdGUgaXMgcHJvdGVjdGVkCiAgKiBieSBNdWx0aVhhY3RHZW5Mb2Nr LiAgKFdlIGFsc28gdXNlIE11bHRpWGFjdE9mZnNldFNMUlVMb2NrIGFuZApAQCAtMzUyLDEwICsz NDMsOSBAQCBzdGF0aWMgdm9pZCBtWGFjdENhY2hlUHV0KE11bHRpWGFjdElkIG11bHRpLCBpbnQg bm1lbWJlcnMsCiBzdGF0aWMgY2hhciAqbXhzdGF0dXNfdG9fc3RyaW5nKE11bHRpWGFjdFN0YXR1 cyBzdGF0dXMpOwogCiAvKiBtYW5hZ2VtZW50IG9mIFNMUlUgaW5mcmFzdHJ1Y3R1cmUgKi8KLXN0 YXRpYyBpbnQJWmVyb011bHRpWGFjdE9mZnNldFBhZ2UoaW50IHBhZ2VubywgYm9vbCB3cml0ZVhs b2cpOwotc3RhdGljIGludAlaZXJvTXVsdGlYYWN0TWVtYmVyUGFnZShpbnQgcGFnZW5vLCBib29s IHdyaXRlWGxvZyk7CitzdGF0aWMgQnVmZmVyIFplcm9NdWx0aVhhY3RPZmZzZXRQYWdlKGludCBw YWdlbm8sIGJvb2wgd3JpdGVYbG9nKTsKK3N0YXRpYyBCdWZmZXIgWmVyb011bHRpWGFjdE1lbWJl clBhZ2UoaW50IHBhZ2VubywgYm9vbCB3cml0ZVhsb2cpOwogc3RhdGljIGJvb2wgTXVsdGlYYWN0 T2Zmc2V0UGFnZVByZWNlZGVzKGludCBwYWdlMSwgaW50IHBhZ2UyKTsKLXN0YXRpYyBib29sIE11 bHRpWGFjdE1lbWJlclBhZ2VQcmVjZWRlcyhpbnQgcGFnZTEsIGludCBwYWdlMik7CiBzdGF0aWMg Ym9vbCBNdWx0aVhhY3RPZmZzZXRQcmVjZWRlcyhNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0MSwKIAkJ CQkJCQkJCU11bHRpWGFjdE9mZnNldCBvZmZzZXQyKTsKIHN0YXRpYyB2b2lkIEV4dGVuZE11bHRp WGFjdE9mZnNldChNdWx0aVhhY3RJZCBtdWx0aSk7CkBAIC04NjQsMzQgKzg1NCwyNSBAQCBSZWNv cmROZXdNdWx0aVhhY3QoTXVsdGlYYWN0SWQgbXVsdGksIE11bHRpWGFjdE9mZnNldCBvZmZzZXQs CiAJaW50CQkJcGFnZW5vOwogCWludAkJCXByZXZfcGFnZW5vOwogCWludAkJCWVudHJ5bm87Ci0J aW50CQkJc2xvdG5vOwogCU11bHRpWGFjdE9mZnNldCAqb2ZmcHRyOwogCWludAkJCWk7Ci0KLQlM V0xvY2tBY3F1aXJlKE11bHRpWGFjdE9mZnNldFNMUlVMb2NrLCBMV19FWENMVVNJVkUpOworCUJ1 ZmZlcgkJYnVmZmVyOwogCiAJcGFnZW5vID0gTXVsdGlYYWN0SWRUb09mZnNldFBhZ2UobXVsdGkp OwogCWVudHJ5bm8gPSBNdWx0aVhhY3RJZFRvT2Zmc2V0RW50cnkobXVsdGkpOwogCi0JLyoKLQkg KiBOb3RlOiB3ZSBwYXNzIHRoZSBNdWx0aVhhY3RJZCB0byBTaW1wbGVMcnVSZWFkUGFnZSBhcyB0 aGUgInRyYW5zYWN0aW9uIgotCSAqIHRvIGNvbXBsYWluIGFib3V0IGlmIHRoZXJlJ3MgYW55IEkv TyBlcnJvci4gIFRoaXMgaXMga2luZGEgYm9ndXMsIGJ1dAotCSAqIHNpbmNlIHRoZSBlcnJvcnMg d2lsbCBhbHdheXMgZ2l2ZSB0aGUgZnVsbCBwYXRobmFtZSwgaXQgc2hvdWxkIGJlIGNsZWFyCi0J ICogZW5vdWdoIHRoYXQgYSBNdWx0aVhhY3RJZCBpcyByZWFsbHkgaW52b2x2ZWQuICBQZXJoYXBz IHNvbWVkYXkgd2UnbGwKLQkgKiB0YWtlIHRoZSB0cm91YmxlIHRvIGdlbmVyYWxpemUgdGhlIHNs cnUuYyBlcnJvciByZXBvcnRpbmcgY29kZS4KLQkgKi8KLQlzbG90bm8gPSBTaW1wbGVMcnVSZWFk UGFnZShNdWx0aVhhY3RPZmZzZXRDdGwsIHBhZ2VubywgdHJ1ZSwgbXVsdGkpOwotCW9mZnB0ciA9 IChNdWx0aVhhY3RPZmZzZXQgKikgTXVsdGlYYWN0T2Zmc2V0Q3RsLT5zaGFyZWQtPnBhZ2VfYnVm ZmVyW3Nsb3Rub107CisJLyogWFhYIHNldCB1cCBlcnJvciBjb250ZXh0PyAqLworCWJ1ZmZlciA9 IFJlYWRTbHJ1QnVmZmVyKFNMUlVfTVVMVElYQUNUX09GRlNFVF9JRCwgcGFnZW5vKTsKKwlMb2Nr QnVmZmVyKGJ1ZmZlciwgQlVGRkVSX0xPQ0tfRVhDTFVTSVZFKTsKKwlvZmZwdHIgPSAoTXVsdGlY YWN0T2Zmc2V0ICopIEJ1ZmZlckdldFBhZ2UoYnVmZmVyKTsKIAlvZmZwdHIgKz0gZW50cnlubzsK IAogCSpvZmZwdHIgPSBvZmZzZXQ7CiAKLQlNdWx0aVhhY3RPZmZzZXRDdGwtPnNoYXJlZC0+cGFn ZV9kaXJ0eVtzbG90bm9dID0gdHJ1ZTsKLQotCS8qIEV4Y2hhbmdlIG91ciBsb2NrICovCi0JTFdM b2NrUmVsZWFzZShNdWx0aVhhY3RPZmZzZXRTTFJVTG9jayk7CisJTWFya0J1ZmZlckRpcnR5KGJ1 ZmZlcik7CiAKLQlMV0xvY2tBY3F1aXJlKE11bHRpWGFjdE1lbWJlclNMUlVMb2NrLCBMV19FWENM VVNJVkUpOworCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsKKwlidWZmZXIgPSBJbnZhbGlk QnVmZmVyOwogCiAJcHJldl9wYWdlbm8gPSAtMTsKIApAQCAtOTEzLDI3ICs4OTQsMjggQEAgUmVj b3JkTmV3TXVsdGlYYWN0KE11bHRpWGFjdElkIG11bHRpLCBNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0 LAogCiAJCWlmIChwYWdlbm8gIT0gcHJldl9wYWdlbm8pCiAJCXsKLQkJCXNsb3RubyA9IFNpbXBs ZUxydVJlYWRQYWdlKE11bHRpWGFjdE1lbWJlckN0bCwgcGFnZW5vLCB0cnVlLCBtdWx0aSk7CisJ CQlpZiAoQnVmZmVySXNWYWxpZChidWZmZXIpKQorCQkJCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVm ZmVyKTsKKwkJCWJ1ZmZlciA9IFJlYWRTbHJ1QnVmZmVyKFNMUlVfTVVMVElYQUNUX01FTUJFUl9J RCwgcGFnZW5vKTsKKwkJCUxvY2tCdWZmZXIoYnVmZmVyLCBCVUZGRVJfTE9DS19FWENMVVNJVkUp OwogCQkJcHJldl9wYWdlbm8gPSBwYWdlbm87CiAJCX0KIAotCQltZW1iZXJwdHIgPSAoVHJhbnNh Y3Rpb25JZCAqKQotCQkJKE11bHRpWGFjdE1lbWJlckN0bC0+c2hhcmVkLT5wYWdlX2J1ZmZlcltz bG90bm9dICsgbWVtYmVyb2ZmKTsKKwkJbWVtYmVycHRyID0gKFRyYW5zYWN0aW9uSWQgKikgKEJ1 ZmZlckdldFBhZ2UoYnVmZmVyKSArIG1lbWJlcm9mZik7CiAKIAkJKm1lbWJlcnB0ciA9IG1lbWJl cnNbaV0ueGlkOwogCi0JCWZsYWdzcHRyID0gKHVpbnQzMiAqKQotCQkJKE11bHRpWGFjdE1lbWJl ckN0bC0+c2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90bm9dICsgZmxhZ3NvZmYpOworCQlmbGFnc3B0 ciA9ICh1aW50MzIgKikgKEJ1ZmZlckdldFBhZ2UoYnVmZmVyKSArIGZsYWdzb2ZmKTsKIAogCQlm bGFnc3ZhbCA9ICpmbGFnc3B0cjsKIAkJZmxhZ3N2YWwgJj0gfigoKDEgPDwgTVhBQ1RfTUVNQkVS X0JJVFNfUEVSX1hBQ1QpIC0gMSkgPDwgYnNoaWZ0KTsKIAkJZmxhZ3N2YWwgfD0gKG1lbWJlcnNb aV0uc3RhdHVzIDw8IGJzaGlmdCk7CiAJCSpmbGFnc3B0ciA9IGZsYWdzdmFsOwogCi0JCU11bHRp WGFjdE1lbWJlckN0bC0+c2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Rub10gPSB0cnVlOworCQlNYXJr QnVmZmVyRGlydHkoYnVmZmVyKTsKIAl9CiAKLQlMV0xvY2tSZWxlYXNlKE11bHRpWGFjdE1lbWJl clNMUlVMb2NrKTsKKwlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CiB9CiAKIC8qCkBAIC0x MjI1LDcgKzEyMDcsNiBAQCBHZXRNdWx0aVhhY3RJZE1lbWJlcnMoTXVsdGlYYWN0SWQgbXVsdGks IE11bHRpWGFjdE1lbWJlciAqKm1lbWJlcnMsCiAJaW50CQkJcGFnZW5vOwogCWludAkJCXByZXZf cGFnZW5vOwogCWludAkJCWVudHJ5bm87Ci0JaW50CQkJc2xvdG5vOwogCU11bHRpWGFjdE9mZnNl dCAqb2ZmcHRyOwogCU11bHRpWGFjdE9mZnNldCBvZmZzZXQ7CiAJaW50CQkJbGVuZ3RoOwpAQCAt MTIzNiw2ICsxMjE3LDcgQEAgR2V0TXVsdGlYYWN0SWRNZW1iZXJzKE11bHRpWGFjdElkIG11bHRp LCBNdWx0aVhhY3RNZW1iZXIgKiptZW1iZXJzLAogCU11bHRpWGFjdElkIHRtcE1YYWN0OwogCU11 bHRpWGFjdE9mZnNldCBuZXh0T2Zmc2V0OwogCU11bHRpWGFjdE1lbWJlciAqcHRyOworCUJ1ZmZl cgkJYnVmZmVyOwogCiAJZGVidWdfZWxvZzMoREVCVUcyLCAiR2V0TWVtYmVyczogYXNrZWQgZm9y ICV1IiwgbXVsdGkpOwogCkBAIC0xMzM5LDEzICsxMzIxLDEyIEBAIEdldE11bHRpWGFjdElkTWVt YmVycyhNdWx0aVhhY3RJZCBtdWx0aSwgTXVsdGlYYWN0TWVtYmVyICoqbWVtYmVycywKIAkgKiB0 aW1lIG9uIGV2ZXJ5IG11bHRpeGFjdCBjcmVhdGlvbi4KIAkgKi8KIHJldHJ5OgotCUxXTG9ja0Fj cXVpcmUoTXVsdGlYYWN0T2Zmc2V0U0xSVUxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0KIAlwYWdlbm8g PSBNdWx0aVhhY3RJZFRvT2Zmc2V0UGFnZShtdWx0aSk7CiAJZW50cnlubyA9IE11bHRpWGFjdElk VG9PZmZzZXRFbnRyeShtdWx0aSk7CiAKLQlzbG90bm8gPSBTaW1wbGVMcnVSZWFkUGFnZShNdWx0 aVhhY3RPZmZzZXRDdGwsIHBhZ2VubywgdHJ1ZSwgbXVsdGkpOwotCW9mZnB0ciA9IChNdWx0aVhh Y3RPZmZzZXQgKikgTXVsdGlYYWN0T2Zmc2V0Q3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Ru b107CisJYnVmZmVyID0gUmVhZFNscnVCdWZmZXIoU0xSVV9NVUxUSVhBQ1RfT0ZGU0VUX0lELCBw YWdlbm8pOworCUxvY2tCdWZmZXIoYnVmZmVyLCBCVUZGRVJfTE9DS19TSEFSRSk7CisJb2ZmcHRy ID0gKE11bHRpWGFjdE9mZnNldCAqKSBCdWZmZXJHZXRQYWdlKGJ1ZmZlcik7CiAJb2ZmcHRyICs9 IGVudHJ5bm87CiAJb2Zmc2V0ID0gKm9mZnB0cjsKIApAQCAtMTM3NiwxNiArMTM1NywyMCBAQCBy ZXRyeToKIAkJZW50cnlubyA9IE11bHRpWGFjdElkVG9PZmZzZXRFbnRyeSh0bXBNWGFjdCk7CiAK IAkJaWYgKHBhZ2VubyAhPSBwcmV2X3BhZ2VubykKLQkJCXNsb3RubyA9IFNpbXBsZUxydVJlYWRQ YWdlKE11bHRpWGFjdE9mZnNldEN0bCwgcGFnZW5vLCB0cnVlLCB0bXBNWGFjdCk7CisJCXsKKwkJ CVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsKKwkJCWJ1ZmZlciA9IFJlYWRTbHJ1QnVmZmVy KFNMUlVfTVVMVElYQUNUX09GRlNFVF9JRCwgcGFnZW5vKTsKKwkJCUxvY2tCdWZmZXIoYnVmZmVy LCBCVUZGRVJfTE9DS19TSEFSRSk7CisJCX0KIAotCQlvZmZwdHIgPSAoTXVsdGlYYWN0T2Zmc2V0 ICopIE11bHRpWGFjdE9mZnNldEN0bC0+c2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90bm9dOworCQlv ZmZwdHIgPSAoTXVsdGlYYWN0T2Zmc2V0ICopIEJ1ZmZlckdldFBhZ2UoYnVmZmVyKTsKIAkJb2Zm cHRyICs9IGVudHJ5bm87CiAJCW5leHRNWE9mZnNldCA9ICpvZmZwdHI7CiAKIAkJaWYgKG5leHRN WE9mZnNldCA9PSAwKQogCQl7CiAJCQkvKiBDb3JuZXIgY2FzZSAyOiBuZXh0IG11bHRpeGFjdCBp cyBzdGlsbCBiZWluZyBmaWxsZWQgaW4gKi8KLQkJCUxXTG9ja1JlbGVhc2UoTXVsdGlYYWN0T2Zm c2V0U0xSVUxvY2spOworCQkJVW5sb2NrUmVsZWFzZUJ1ZmZlcihidWZmZXIpOwogCQkJQ0hFQ0tf Rk9SX0lOVEVSUlVQVFMoKTsKIAkJCXBnX3VzbGVlcCgxMDAwTCk7CiAJCQlnb3RvIHJldHJ5OwpA QCAtMTM5MywxNCArMTM3OCwxMSBAQCByZXRyeToKIAogCQlsZW5ndGggPSBuZXh0TVhPZmZzZXQg LSBvZmZzZXQ7CiAJfQotCi0JTFdMb2NrUmVsZWFzZShNdWx0aVhhY3RPZmZzZXRTTFJVTG9jayk7 CisJVW5sb2NrUmVsZWFzZUJ1ZmZlcihidWZmZXIpOworCWJ1ZmZlciA9IEludmFsaWRCdWZmZXI7 CiAKIAlwdHIgPSAoTXVsdGlYYWN0TWVtYmVyICopIHBhbGxvYyhsZW5ndGggKiBzaXplb2YoTXVs dGlYYWN0TWVtYmVyKSk7CiAKLQkvKiBOb3cgZ2V0IHRoZSBtZW1iZXJzIHRoZW1zZWx2ZXMuICov Ci0JTFdMb2NrQWNxdWlyZShNdWx0aVhhY3RNZW1iZXJTTFJVTG9jaywgTFdfRVhDTFVTSVZFKTsK LQogCXRydWVsZW5ndGggPSAwOwogCXByZXZfcGFnZW5vID0gLTE7CiAJZm9yIChpID0gMDsgaSA8 IGxlbmd0aDsgaSsrLCBvZmZzZXQrKykKQEAgLTE0MTYsMTIgKzEzOTgsMTQgQEAgcmV0cnk6CiAK IAkJaWYgKHBhZ2VubyAhPSBwcmV2X3BhZ2VubykKIAkJewotCQkJc2xvdG5vID0gU2ltcGxlTHJ1 UmVhZFBhZ2UoTXVsdGlYYWN0TWVtYmVyQ3RsLCBwYWdlbm8sIHRydWUsIG11bHRpKTsKKwkJCWlm IChCdWZmZXJJc1ZhbGlkKGJ1ZmZlcikpCisJCQkJVW5sb2NrUmVsZWFzZUJ1ZmZlcihidWZmZXIp OworCQkJYnVmZmVyID0gUmVhZFNscnVCdWZmZXIoU0xSVV9NVUxUSVhBQ1RfTUVNQkVSX0lELCBw YWdlbm8pOworCQkJTG9ja0J1ZmZlcihidWZmZXIsIEJVRkZFUl9MT0NLX1NIQVJFKTsKIAkJCXBy ZXZfcGFnZW5vID0gcGFnZW5vOwogCQl9CiAKLQkJeGFjdHB0ciA9IChUcmFuc2FjdGlvbklkICop Ci0JCQkoTXVsdGlYYWN0TWVtYmVyQ3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub10gKyBt ZW1iZXJvZmYpOworCQl4YWN0cHRyID0gKFRyYW5zYWN0aW9uSWQgKikgKEJ1ZmZlckdldFBhZ2Uo YnVmZmVyKSArIG1lbWJlcm9mZik7CiAKIAkJaWYgKCFUcmFuc2FjdGlvbklkSXNWYWxpZCgqeGFj dHB0cikpCiAJCXsKQEAgLTE0MzIsMTQgKzE0MTYsMTMgQEAgcmV0cnk6CiAKIAkJZmxhZ3NvZmYg PSBNWE9mZnNldFRvRmxhZ3NPZmZzZXQob2Zmc2V0KTsKIAkJYnNoaWZ0ID0gTVhPZmZzZXRUb0Zs YWdzQml0U2hpZnQob2Zmc2V0KTsKLQkJZmxhZ3NwdHIgPSAodWludDMyICopIChNdWx0aVhhY3RN ZW1iZXJDdGwtPnNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXSArIGZsYWdzb2ZmKTsKKwkJZmxh Z3NwdHIgPSAodWludDMyICopIChCdWZmZXJHZXRQYWdlKGJ1ZmZlcikgKyBmbGFnc29mZik7CiAK IAkJcHRyW3RydWVsZW5ndGhdLnhpZCA9ICp4YWN0cHRyOwogCQlwdHJbdHJ1ZWxlbmd0aF0uc3Rh dHVzID0gKCpmbGFnc3B0ciA+PiBic2hpZnQpICYgTVhBQ1RfTUVNQkVSX1hBQ1RfQklUTUFTSzsK IAkJdHJ1ZWxlbmd0aCsrOwogCX0KLQotCUxXTG9ja1JlbGVhc2UoTXVsdGlYYWN0TWVtYmVyU0xS VUxvY2spOworCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsKIAogCS8qIEEgbXVsdGl4aWQg d2l0aCB6ZXJvIG1lbWJlcnMgc2hvdWxkIG5vdCBoYXBwZW4gKi8KIAlBc3NlcnQodHJ1ZWxlbmd0 aCA+IDApOwpAQCAtMTgzMSw4ICsxODE0LDYgQEAgTXVsdGlYYWN0U2htZW1TaXplKHZvaWQpCiAJ CQkgbXVsX3NpemUoc2l6ZW9mKE11bHRpWGFjdElkKSAqIDIsIE1heE9sZGVzdFNsb3QpKQogCiAJ c2l6ZSA9IFNIQVJFRF9NVUxUSVhBQ1RfU1RBVEVfU0laRTsKLQlzaXplID0gYWRkX3NpemUoc2l6 ZSwgU2ltcGxlTHJ1U2htZW1TaXplKE5VTV9NVUxUSVhBQ1RPRkZTRVRfQlVGRkVSUywgMCkpOwot CXNpemUgPSBhZGRfc2l6ZShzaXplLCBTaW1wbGVMcnVTaG1lbVNpemUoTlVNX01VTFRJWEFDVE1F TUJFUl9CVUZGRVJTLCAwKSk7CiAKIAlyZXR1cm4gc2l6ZTsKIH0KQEAgLTE4NDQsMjIgKzE4MjUs NiBAQCBNdWx0aVhhY3RTaG1lbUluaXQodm9pZCkKIAogCWRlYnVnX2Vsb2cyKERFQlVHMiwgIlNo YXJlZCBNZW1vcnkgSW5pdCBmb3IgTXVsdGlYYWN0Iik7CiAKLQlNdWx0aVhhY3RPZmZzZXRDdGwt PlBhZ2VQcmVjZWRlcyA9IE11bHRpWGFjdE9mZnNldFBhZ2VQcmVjZWRlczsKLQlNdWx0aVhhY3RN ZW1iZXJDdGwtPlBhZ2VQcmVjZWRlcyA9IE11bHRpWGFjdE1lbWJlclBhZ2VQcmVjZWRlczsKLQot CVNpbXBsZUxydUluaXQoTXVsdGlYYWN0T2Zmc2V0Q3RsLAotCQkJCSAgIk11bHRpWGFjdE9mZnNl dCIsIE5VTV9NVUxUSVhBQ1RPRkZTRVRfQlVGRkVSUywgMCwKLQkJCQkgIE11bHRpWGFjdE9mZnNl dFNMUlVMb2NrLCAicGdfbXVsdGl4YWN0L29mZnNldHMiLAotCQkJCSAgTFdUUkFOQ0hFX01VTFRJ WEFDVE9GRlNFVF9CVUZGRVIsCi0JCQkJICBTWU5DX0hBTkRMRVJfTVVMVElYQUNUX09GRlNFVCk7 Ci0JU2xydVBhZ2VQcmVjZWRlc1VuaXRUZXN0cyhNdWx0aVhhY3RPZmZzZXRDdGwsIE1VTFRJWEFD VF9PRkZTRVRTX1BFUl9QQUdFKTsKLQlTaW1wbGVMcnVJbml0KE11bHRpWGFjdE1lbWJlckN0bCwK LQkJCQkgICJNdWx0aVhhY3RNZW1iZXIiLCBOVU1fTVVMVElYQUNUTUVNQkVSX0JVRkZFUlMsIDAs Ci0JCQkJICBNdWx0aVhhY3RNZW1iZXJTTFJVTG9jaywgInBnX211bHRpeGFjdC9tZW1iZXJzIiwK LQkJCQkgIExXVFJBTkNIRV9NVUxUSVhBQ1RNRU1CRVJfQlVGRkVSLAotCQkJCSAgU1lOQ19IQU5E TEVSX01VTFRJWEFDVF9NRU1CRVIpOwotCS8qIGRvZXNuJ3QgY2FsbCBTaW1wbGVMcnVUcnVuY2F0 ZSgpIG9yIG1lZXQgY3JpdGVyaWEgZm9yIHVuaXQgdGVzdHMgKi8KLQogCS8qIEluaXRpYWxpemUg b3VyIHNoYXJlZCBzdGF0ZSBzdHJ1Y3QgKi8KIAlNdWx0aVhhY3RTdGF0ZSA9IFNobWVtSW5pdFN0 cnVjdCgiU2hhcmVkIE11bHRpWGFjdCBTdGF0ZSIsCiAJCQkJCQkJCQkgU0hBUkVEX01VTFRJWEFD VF9TVEFURV9TSVpFLApAQCAtMTg5MCwyOSArMTg1NSwxNyBAQCBNdWx0aVhhY3RTaG1lbUluaXQo dm9pZCkKIHZvaWQKIEJvb3RTdHJhcE11bHRpWGFjdCh2b2lkKQogewotCWludAkJCXNsb3RubzsK LQotCUxXTG9ja0FjcXVpcmUoTXVsdGlYYWN0T2Zmc2V0U0xSVUxvY2ssIExXX0VYQ0xVU0lWRSk7 CisJQnVmZmVyCQlidWZmZXI7CiAKIAkvKiBDcmVhdGUgYW5kIHplcm8gdGhlIGZpcnN0IHBhZ2Ug b2YgdGhlIG9mZnNldHMgbG9nICovCi0Jc2xvdG5vID0gWmVyb011bHRpWGFjdE9mZnNldFBhZ2Uo MCwgZmFsc2UpOwotCi0JLyogTWFrZSBzdXJlIGl0J3Mgd3JpdHRlbiBvdXQgKi8KLQlTaW1wbGVM cnVXcml0ZVBhZ2UoTXVsdGlYYWN0T2Zmc2V0Q3RsLCBzbG90bm8pOwotCUFzc2VydCghTXVsdGlY YWN0T2Zmc2V0Q3RsLT5zaGFyZWQtPnBhZ2VfZGlydHlbc2xvdG5vXSk7Ci0KLQlMV0xvY2tSZWxl YXNlKE11bHRpWGFjdE9mZnNldFNMUlVMb2NrKTsKLQotCUxXTG9ja0FjcXVpcmUoTXVsdGlYYWN0 TWVtYmVyU0xSVUxvY2ssIExXX0VYQ0xVU0lWRSk7CisJYnVmZmVyID0gWmVyb011bHRpWGFjdE9m ZnNldFBhZ2UoMCwgZmFsc2UpOworCUZsdXNoT25lQnVmZmVyKGJ1ZmZlcik7CisJVW5sb2NrUmVs ZWFzZUJ1ZmZlcihidWZmZXIpOwogCiAJLyogQ3JlYXRlIGFuZCB6ZXJvIHRoZSBmaXJzdCBwYWdl IG9mIHRoZSBtZW1iZXJzIGxvZyAqLwotCXNsb3RubyA9IFplcm9NdWx0aVhhY3RNZW1iZXJQYWdl KDAsIGZhbHNlKTsKLQotCS8qIE1ha2Ugc3VyZSBpdCdzIHdyaXR0ZW4gb3V0ICovCi0JU2ltcGxl THJ1V3JpdGVQYWdlKE11bHRpWGFjdE1lbWJlckN0bCwgc2xvdG5vKTsKLQlBc3NlcnQoIU11bHRp WGFjdE1lbWJlckN0bC0+c2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Rub10pOwotCi0JTFdMb2NrUmVs ZWFzZShNdWx0aVhhY3RNZW1iZXJTTFJVTG9jayk7CisJYnVmZmVyID0gWmVyb011bHRpWGFjdE1l bWJlclBhZ2UoMCwgZmFsc2UpOworCUZsdXNoT25lQnVmZmVyKGJ1ZmZlcik7CisJVW5sb2NrUmVs ZWFzZUJ1ZmZlcihidWZmZXIpOwogfQogCiAvKgpAQCAtMTkyNCwzMyArMTg3NywzNSBAQCBCb290 U3RyYXBNdWx0aVhhY3Qodm9pZCkKICAqCiAgKiBDb250cm9sIGxvY2sgbXVzdCBiZSBoZWxkIGF0 IGVudHJ5LCBhbmQgd2lsbCBiZSBoZWxkIGF0IGV4aXQuCiAgKi8KLXN0YXRpYyBpbnQKK3N0YXRp YyBCdWZmZXIKIFplcm9NdWx0aVhhY3RPZmZzZXRQYWdlKGludCBwYWdlbm8sIGJvb2wgd3JpdGVY bG9nKQogewotCWludAkJCXNsb3RubzsKKwlCdWZmZXIJCWJ1ZmZlcjsKIAotCXNsb3RubyA9IFNp bXBsZUxydVplcm9QYWdlKE11bHRpWGFjdE9mZnNldEN0bCwgcGFnZW5vKTsKKwlidWZmZXIgPSBa ZXJvU2xydUJ1ZmZlcihTTFJVX01VTFRJWEFDVF9PRkZTRVRfSUQsIHBhZ2Vubyk7CisJTWFya0J1 ZmZlckRpcnR5KGJ1ZmZlcik7CiAKIAlpZiAod3JpdGVYbG9nKQogCQlXcml0ZU1aZXJvUGFnZVhs b2dSZWMocGFnZW5vLCBYTE9HX01VTFRJWEFDVF9aRVJPX09GRl9QQUdFKTsKIAotCXJldHVybiBz bG90bm87CisJcmV0dXJuIGJ1ZmZlcjsKIH0KIAogLyoKICAqIERpdHRvLCBmb3IgTXVsdGlYYWN0 TWVtYmVyCiAgKi8KLXN0YXRpYyBpbnQKK3N0YXRpYyBCdWZmZXIKIFplcm9NdWx0aVhhY3RNZW1i ZXJQYWdlKGludCBwYWdlbm8sIGJvb2wgd3JpdGVYbG9nKQogewotCWludAkJCXNsb3RubzsKKwlC dWZmZXIJCWJ1ZmZlcjsKIAotCXNsb3RubyA9IFNpbXBsZUxydVplcm9QYWdlKE11bHRpWGFjdE1l bWJlckN0bCwgcGFnZW5vKTsKKwlidWZmZXIgPSBaZXJvU2xydUJ1ZmZlcihTTFJVX01VTFRJWEFD VF9NRU1CRVJfSUQsIHBhZ2Vubyk7CisJTWFya0J1ZmZlckRpcnR5KGJ1ZmZlcik7CiAKIAlpZiAo d3JpdGVYbG9nKQogCQlXcml0ZU1aZXJvUGFnZVhsb2dSZWMocGFnZW5vLCBYTE9HX01VTFRJWEFD VF9aRVJPX01FTV9QQUdFKTsKIAotCXJldHVybiBzbG90bm87CisJcmV0dXJuIGJ1ZmZlcjsKIH0K IAogLyoKQEAgLTE5NzUsMjIgKzE5MzAsMTQgQEAgTWF5YmVFeHRlbmRPZmZzZXRTbHJ1KHZvaWQp CiAKIAlwYWdlbm8gPSBNdWx0aVhhY3RJZFRvT2Zmc2V0UGFnZShNdWx0aVhhY3RTdGF0ZS0+bmV4 dE1YYWN0KTsKIAotCUxXTG9ja0FjcXVpcmUoTXVsdGlYYWN0T2Zmc2V0U0xSVUxvY2ssIExXX0VY Q0xVU0lWRSk7Ci0KLQlpZiAoIVNpbXBsZUxydURvZXNQaHlzaWNhbFBhZ2VFeGlzdChNdWx0aVhh Y3RPZmZzZXRDdGwsIHBhZ2VubykpCisJaWYgKCFTaW1wbGVMcnVEb2VzUGh5c2ljYWxQYWdlRXhp c3QoU0xSVV9NVUxUSVhBQ1RfT0ZGU0VUX0lELCBwYWdlbm8pKQogCXsKLQkJaW50CQkJc2xvdG5v OworCQlCdWZmZXIJCQlidWZmZXI7CiAKLQkJLyoKLQkJICogRm9ydHVuYXRlbHkgZm9yIHVzLCBT aW1wbGVMcnVXcml0ZVBhZ2UgaXMgYWxyZWFkeSBwcmVwYXJlZCB0byBkZWFsCi0JCSAqIHdpdGgg Y3JlYXRpbmcgYSBuZXcgc2VnbWVudCBmaWxlIGV2ZW4gaWYgdGhlIHBhZ2Ugd2UncmUgd3JpdGlu ZyBpcwotCQkgKiBub3QgdGhlIGZpcnN0IGluIGl0LCBzbyB0aGlzIGlzIGVub3VnaC4KLQkJICov Ci0JCXNsb3RubyA9IFplcm9NdWx0aVhhY3RPZmZzZXRQYWdlKHBhZ2VubywgZmFsc2UpOwotCQlT aW1wbGVMcnVXcml0ZVBhZ2UoTXVsdGlYYWN0T2Zmc2V0Q3RsLCBzbG90bm8pOworCQlidWZmZXIg PSBaZXJvTXVsdGlYYWN0T2Zmc2V0UGFnZShwYWdlbm8sIGZhbHNlKTsKKwkJRmx1c2hPbmVCdWZm ZXIoYnVmZmVyKTsKKwkJVW5sb2NrUmVsZWFzZUJ1ZmZlcihidWZmZXIpOwogCX0KLQotCUxXTG9j a1JlbGVhc2UoTXVsdGlYYWN0T2Zmc2V0U0xSVUxvY2spOwogfQogCiAvKgpAQCAtMjAwNCwyMSAr MTk1MSw2IEBAIE1heWJlRXh0ZW5kT2Zmc2V0U2xydSh2b2lkKQogdm9pZAogU3RhcnR1cE11bHRp WGFjdCh2b2lkKQogewotCU11bHRpWGFjdElkIG11bHRpID0gTXVsdGlYYWN0U3RhdGUtPm5leHRN WGFjdDsKLQlNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0ID0gTXVsdGlYYWN0U3RhdGUtPm5leHRPZmZz ZXQ7Ci0JaW50CQkJcGFnZW5vOwotCi0JLyoKLQkgKiBJbml0aWFsaXplIG9mZnNldCdzIGlkZWEg b2YgdGhlIGxhdGVzdCBwYWdlIG51bWJlci4KLQkgKi8KLQlwYWdlbm8gPSBNdWx0aVhhY3RJZFRv T2Zmc2V0UGFnZShtdWx0aSk7Ci0JTXVsdGlYYWN0T2Zmc2V0Q3RsLT5zaGFyZWQtPmxhdGVzdF9w YWdlX251bWJlciA9IHBhZ2VubzsKLQotCS8qCi0JICogSW5pdGlhbGl6ZSBtZW1iZXIncyBpZGVh IG9mIHRoZSBsYXRlc3QgcGFnZSBudW1iZXIuCi0JICovCi0JcGFnZW5vID0gTVhPZmZzZXRUb01l bWJlclBhZ2Uob2Zmc2V0KTsKLQlNdWx0aVhhY3RNZW1iZXJDdGwtPnNoYXJlZC0+bGF0ZXN0X3Bh Z2VfbnVtYmVyID0gcGFnZW5vOwogfQogCiAvKgpAQCAtMjA0MiwxNCArMTk3NCw3IEBAIFRyaW1N dWx0aVhhY3Qodm9pZCkKIAlvbGRlc3RNWGFjdERCID0gTXVsdGlYYWN0U3RhdGUtPm9sZGVzdE11 bHRpWGFjdERCOwogCUxXTG9ja1JlbGVhc2UoTXVsdGlYYWN0R2VuTG9jayk7CiAKLQkvKiBDbGVh biB1cCBvZmZzZXRzIHN0YXRlICovCi0JTFdMb2NrQWNxdWlyZShNdWx0aVhhY3RPZmZzZXRTTFJV TG9jaywgTFdfRVhDTFVTSVZFKTsKLQotCS8qCi0JICogKFJlLSlJbml0aWFsaXplIG91ciBpZGVh IG9mIHRoZSBsYXRlc3QgcGFnZSBudW1iZXIgZm9yIG9mZnNldHMuCi0JICovCi0JcGFnZW5vID0g TXVsdGlYYWN0SWRUb09mZnNldFBhZ2UobmV4dE1YYWN0KTsKLQlNdWx0aVhhY3RPZmZzZXRDdGwt PnNoYXJlZC0+bGF0ZXN0X3BhZ2VfbnVtYmVyID0gcGFnZW5vOworCXBhZ2VubyA9IE1YT2Zmc2V0 VG9NZW1iZXJQYWdlKG9mZnNldCk7CiAKIAkvKgogCSAqIFplcm8gb3V0IHRoZSByZW1haW5kZXIg b2YgdGhlIGN1cnJlbnQgb2Zmc2V0cyBwYWdlLiAgU2VlIG5vdGVzIGluCkBAIC0yMDYyLDI5ICsx OTg3LDIwIEBAIFRyaW1NdWx0aVhhY3Qodm9pZCkKIAllbnRyeW5vID0gTXVsdGlYYWN0SWRUb09m ZnNldEVudHJ5KG5leHRNWGFjdCk7CiAJaWYgKGVudHJ5bm8gIT0gMCkKIAl7Ci0JCWludAkJCXNs b3RubzsKIAkJTXVsdGlYYWN0T2Zmc2V0ICpvZmZwdHI7CisJCUJ1ZmZlcgkJYnVmZmVyOwogCi0J CXNsb3RubyA9IFNpbXBsZUxydVJlYWRQYWdlKE11bHRpWGFjdE9mZnNldEN0bCwgcGFnZW5vLCB0 cnVlLCBuZXh0TVhhY3QpOwotCQlvZmZwdHIgPSAoTXVsdGlYYWN0T2Zmc2V0ICopIE11bHRpWGFj dE9mZnNldEN0bC0+c2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90bm9dOworCQlidWZmZXIgPSBSZWFk U2xydUJ1ZmZlcihTTFJVX01VTFRJWEFDVF9PRkZTRVRfSUQsIHBhZ2Vubyk7CisJCUxvY2tCdWZm ZXIoYnVmZmVyLCBCVUZGRVJfTE9DS19FWENMVVNJVkUpOworCQlvZmZwdHIgPSAoTXVsdGlYYWN0 T2Zmc2V0ICopIEJ1ZmZlckdldFBhZ2UoYnVmZmVyKTsKIAkJb2ZmcHRyICs9IGVudHJ5bm87CiAK IAkJTWVtU2V0KG9mZnB0ciwgMCwgQkxDS1NaIC0gKGVudHJ5bm8gKiBzaXplb2YoTXVsdGlYYWN0 T2Zmc2V0KSkpOwogCi0JCU11bHRpWGFjdE9mZnNldEN0bC0+c2hhcmVkLT5wYWdlX2RpcnR5W3Ns b3Rub10gPSB0cnVlOworCQlNYXJrQnVmZmVyRGlydHkoYnVmZmVyKTsKKwkJVW5sb2NrUmVsZWFz ZUJ1ZmZlcihidWZmZXIpOwogCX0KIAotCUxXTG9ja1JlbGVhc2UoTXVsdGlYYWN0T2Zmc2V0U0xS VUxvY2spOwotCi0JLyogQW5kIHRoZSBzYW1lIGZvciBtZW1iZXJzICovCi0JTFdMb2NrQWNxdWly ZShNdWx0aVhhY3RNZW1iZXJTTFJVTG9jaywgTFdfRVhDTFVTSVZFKTsKLQotCS8qCi0JICogKFJl LSlJbml0aWFsaXplIG91ciBpZGVhIG9mIHRoZSBsYXRlc3QgcGFnZSBudW1iZXIgZm9yIG1lbWJl cnMuCi0JICovCi0JcGFnZW5vID0gTVhPZmZzZXRUb01lbWJlclBhZ2Uob2Zmc2V0KTsKLQlNdWx0 aVhhY3RNZW1iZXJDdGwtPnNoYXJlZC0+bGF0ZXN0X3BhZ2VfbnVtYmVyID0gcGFnZW5vOwotCiAJ LyoKIAkgKiBaZXJvIG91dCB0aGUgcmVtYWluZGVyIG9mIHRoZSBjdXJyZW50IG1lbWJlcnMgcGFn ZS4gIFNlZSBub3RlcyBpbgogCSAqIFRyaW1DTE9HKCkgZm9yIG1vdGl2YXRpb24uCkBAIC0yMDky LDE0ICsyMDA4LDE0IEBAIFRyaW1NdWx0aVhhY3Qodm9pZCkKIAlmbGFnc29mZiA9IE1YT2Zmc2V0 VG9GbGFnc09mZnNldChvZmZzZXQpOwogCWlmIChmbGFnc29mZiAhPSAwKQogCXsKLQkJaW50CQkJ c2xvdG5vOwogCQlUcmFuc2FjdGlvbklkICp4aWRwdHI7CiAJCWludAkJCW1lbWJlcm9mZjsKKwkJ QnVmZmVyCQlidWZmZXI7CiAKIAkJbWVtYmVyb2ZmID0gTVhPZmZzZXRUb01lbWJlck9mZnNldChv ZmZzZXQpOwotCQlzbG90bm8gPSBTaW1wbGVMcnVSZWFkUGFnZShNdWx0aVhhY3RNZW1iZXJDdGws IHBhZ2VubywgdHJ1ZSwgb2Zmc2V0KTsKLQkJeGlkcHRyID0gKFRyYW5zYWN0aW9uSWQgKikKLQkJ CShNdWx0aVhhY3RNZW1iZXJDdGwtPnNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXSArIG1lbWJl cm9mZik7CisJCWJ1ZmZlciA9IFJlYWRTbHJ1QnVmZmVyKFNMUlVfTVVMVElYQUNUX01FTUJFUl9J RCwgcGFnZW5vKTsKKwkJTG9ja0J1ZmZlcihidWZmZXIsIEJVRkZFUl9MT0NLX0VYQ0xVU0lWRSk7 CisJCXhpZHB0ciA9IChUcmFuc2FjdGlvbklkICopIChCdWZmZXJHZXRQYWdlKGJ1ZmZlcikgKyBt ZW1iZXJvZmYpOwogCiAJCU1lbVNldCh4aWRwdHIsIDAsIEJMQ0tTWiAtIG1lbWJlcm9mZik7CiAK QEAgLTIxMDksMTEgKzIwMjUsMTAgQEAgVHJpbU11bHRpWGFjdCh2b2lkKQogCQkgKiB3cml0aW5n LgogCQkgKi8KIAotCQlNdWx0aVhhY3RNZW1iZXJDdGwtPnNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90 bm9dID0gdHJ1ZTsKKwkJTWFya0J1ZmZlckRpcnR5KGJ1ZmZlcik7CisJCVVubG9ja1JlbGVhc2VC dWZmZXIoYnVmZmVyKTsKIAl9CiAKLQlMV0xvY2tSZWxlYXNlKE11bHRpWGFjdE1lbWJlclNMUlVM b2NrKTsKLQogCS8qIHNpZ25hbCB0aGF0IHdlJ3JlIG9mZmljaWFsbHkgdXAgKi8KIAlMV0xvY2tB Y3F1aXJlKE11bHRpWGFjdEdlbkxvY2ssIExXX0VYQ0xVU0lWRSk7CiAJTXVsdGlYYWN0U3RhdGUt PmZpbmlzaGVkU3RhcnR1cCA9IHRydWU7CkBAIC0yMTQ1LDI1ICsyMDYwLDYgQEAgTXVsdGlYYWN0 R2V0Q2hlY2twdE11bHRpKGJvb2wgaXNfc2h1dGRvd24sCiAJCQkJKm5leHRNdWx0aSwgKm5leHRN dWx0aU9mZnNldCwgKm9sZGVzdE11bHRpLCAqb2xkZXN0TXVsdGlEQik7CiB9CiAKLS8qCi0gKiBQ ZXJmb3JtIGEgY2hlY2twb2ludCAtLS0gZWl0aGVyIGR1cmluZyBzaHV0ZG93biwgb3Igb24tdGhl LWZseQotICovCi12b2lkCi1DaGVja1BvaW50TXVsdGlYYWN0KHZvaWQpCi17Ci0JVFJBQ0VfUE9T VEdSRVNRTF9NVUxUSVhBQ1RfQ0hFQ0tQT0lOVF9TVEFSVCh0cnVlKTsKLQotCS8qCi0JICogV3Jp dGUgZGlydHkgTXVsdGlYYWN0IHBhZ2VzIHRvIGRpc2suICBUaGlzIG1heSByZXN1bHQgaW4gc3lu YyByZXF1ZXN0cwotCSAqIHF1ZXVlZCBmb3IgbGF0ZXIgaGFuZGxpbmcgYnkgUHJvY2Vzc1N5bmNS ZXF1ZXN0cygpLCBhcyBwYXJ0IG9mIHRoZQotCSAqIGNoZWNrcG9pbnQuCi0JICovCi0JU2ltcGxl THJ1V3JpdGVBbGwoTXVsdGlYYWN0T2Zmc2V0Q3RsLCB0cnVlKTsKLQlTaW1wbGVMcnVXcml0ZUFs bChNdWx0aVhhY3RNZW1iZXJDdGwsIHRydWUpOwotCi0JVFJBQ0VfUE9TVEdSRVNRTF9NVUxUSVhB Q1RfQ0hFQ0tQT0lOVF9ET05FKHRydWUpOwotfQotCiAvKgogICogU2V0IHRoZSBuZXh0LXRvLWJl LWFzc2lnbmVkIE11bHRpWGFjdElkIGFuZCBvZmZzZXQKICAqCkBAIC0yNDEyLDEyICsyMzA4LDgg QEAgRXh0ZW5kTXVsdGlYYWN0T2Zmc2V0KE11bHRpWGFjdElkIG11bHRpKQogCiAJcGFnZW5vID0g TXVsdGlYYWN0SWRUb09mZnNldFBhZ2UobXVsdGkpOwogCi0JTFdMb2NrQWNxdWlyZShNdWx0aVhh Y3RPZmZzZXRTTFJVTG9jaywgTFdfRVhDTFVTSVZFKTsKLQogCS8qIFplcm8gdGhlIHBhZ2UgYW5k IG1ha2UgYW4gWExPRyBlbnRyeSBhYm91dCBpdCAqLwotCVplcm9NdWx0aVhhY3RPZmZzZXRQYWdl KHBhZ2VubywgdHJ1ZSk7Ci0KLQlMV0xvY2tSZWxlYXNlKE11bHRpWGFjdE9mZnNldFNMUlVMb2Nr KTsKKwlVbmxvY2tSZWxlYXNlQnVmZmVyKFplcm9NdWx0aVhhY3RPZmZzZXRQYWdlKHBhZ2Vubywg dHJ1ZSkpOwogfQogCiAvKgpAQCAtMjQ1MywxMiArMjM0NSw4IEBAIEV4dGVuZE11bHRpWGFjdE1l bWJlcihNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0LCBpbnQgbm1lbWJlcnMpCiAKIAkJCXBhZ2VubyA9 IE1YT2Zmc2V0VG9NZW1iZXJQYWdlKG9mZnNldCk7CiAKLQkJCUxXTG9ja0FjcXVpcmUoTXVsdGlY YWN0TWVtYmVyU0xSVUxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0KIAkJCS8qIFplcm8gdGhlIHBhZ2Ug YW5kIG1ha2UgYW4gWExPRyBlbnRyeSBhYm91dCBpdCAqLwotCQkJWmVyb011bHRpWGFjdE1lbWJl clBhZ2UocGFnZW5vLCB0cnVlKTsKLQotCQkJTFdMb2NrUmVsZWFzZShNdWx0aVhhY3RNZW1iZXJT TFJVTG9jayk7CisJCQlVbmxvY2tSZWxlYXNlQnVmZmVyKFplcm9NdWx0aVhhY3RNZW1iZXJQYWdl KHBhZ2VubywgdHJ1ZSkpOwogCQl9CiAKIAkJLyoKQEAgLTI3MzMsOCArMjYyMSw4IEBAIGZpbmRf bXVsdGl4YWN0X3N0YXJ0KE11bHRpWGFjdElkIG11bHRpLCBNdWx0aVhhY3RPZmZzZXQgKnJlc3Vs dCkKIAlNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0OwogCWludAkJCXBhZ2VubzsKIAlpbnQJCQllbnRy eW5vOwotCWludAkJCXNsb3RubzsKIAlNdWx0aVhhY3RPZmZzZXQgKm9mZnB0cjsKKwlCdWZmZXIJ CWJ1ZmZlcjsKIAogCUFzc2VydChNdWx0aVhhY3RTdGF0ZS0+ZmluaXNoZWRTdGFydHVwKTsKIApA QCAtMjc0MiwyMCArMjYzMCwxOSBAQCBmaW5kX211bHRpeGFjdF9zdGFydChNdWx0aVhhY3RJZCBt dWx0aSwgTXVsdGlYYWN0T2Zmc2V0ICpyZXN1bHQpCiAJZW50cnlubyA9IE11bHRpWGFjdElkVG9P ZmZzZXRFbnRyeShtdWx0aSk7CiAKIAkvKgotCSAqIFdyaXRlIG91dCBkaXJ0eSBkYXRhLCBzbyBQ aHlzaWNhbFBhZ2VFeGlzdHMgY2FuIHdvcmsgY29ycmVjdGx5LgorCSAqIENvcGUgd2l0aCBtaXNz aW5nL2JvZ3VzIG9sZGVzdCBNdWx0aVhhY3QgaW4gaW5jb25zaXN0ZW50IHN0YXRlcyAoc2VlCisJ ICogY29tbWl0IDA2OGNmYWRmOSkuCiAJICovCi0JU2ltcGxlTHJ1V3JpdGVBbGwoTXVsdGlYYWN0 T2Zmc2V0Q3RsLCB0cnVlKTsKLQlTaW1wbGVMcnVXcml0ZUFsbChNdWx0aVhhY3RNZW1iZXJDdGws IHRydWUpOwotCi0JaWYgKCFTaW1wbGVMcnVEb2VzUGh5c2ljYWxQYWdlRXhpc3QoTXVsdGlYYWN0 T2Zmc2V0Q3RsLCBwYWdlbm8pKQorCWlmICghUHJvYmVTbHJ1QnVmZmVyKFNMUlVfTVVMVElYQUNU X09GRlNFVF9JRCwgcGFnZW5vKSAmJgorCQkhU2ltcGxlTHJ1RG9lc1BoeXNpY2FsUGFnZUV4aXN0 KFNMUlVfTVVMVElYQUNUX09GRlNFVF9JRCwgcGFnZW5vKSkKIAkJcmV0dXJuIGZhbHNlOwogCi0J LyogbG9jayBpcyBhY3F1aXJlZCBieSBTaW1wbGVMcnVSZWFkUGFnZV9SZWFkT25seSAqLwotCXNs b3RubyA9IFNpbXBsZUxydVJlYWRQYWdlX1JlYWRPbmx5KE11bHRpWGFjdE9mZnNldEN0bCwgcGFn ZW5vLCBtdWx0aSk7Ci0Jb2ZmcHRyID0gKE11bHRpWGFjdE9mZnNldCAqKSBNdWx0aVhhY3RPZmZz ZXRDdGwtPnNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXTsKKwlidWZmZXIgPSBSZWFkU2xydUJ1 ZmZlcihTTFJVX01VTFRJWEFDVF9PRkZTRVRfSUQsIHBhZ2Vubyk7CisJTG9ja0J1ZmZlcihidWZm ZXIsIEJVRkZFUl9MT0NLX1NIQVJFKTsKKwlvZmZwdHIgPSAoTXVsdGlYYWN0T2Zmc2V0ICopIEJ1 ZmZlckdldFBhZ2UoYnVmZmVyKTsKIAlvZmZwdHIgKz0gZW50cnlubzsKIAlvZmZzZXQgPSAqb2Zm cHRyOwotCUxXTG9ja1JlbGVhc2UoTXVsdGlYYWN0T2Zmc2V0U0xSVUxvY2spOworCVVubG9ja1Jl bGVhc2VCdWZmZXIoYnVmZmVyKTsKIAogCSpyZXN1bHQgPSBvZmZzZXQ7CiAJcmV0dXJuIHRydWU7 CkBAIC0yODYyLDEyICsyNzQ5LDEzIEBAIHR5cGVkZWYgc3RydWN0IG14dHJ1bmNpbmZvCiAgKgkJ VGhpcyBjYWxsYmFjayBkZXRlcm1pbmVzIHRoZSBlYXJsaWVzdCBleGlzdGluZyBwYWdlIG51bWJl ci4KICAqLwogc3RhdGljIGJvb2wKLVNscnVTY2FuRGlyQ2JGaW5kRWFybGllc3QoU2xydUN0bCBj dGwsIGNoYXIgKmZpbGVuYW1lLCBpbnQgc2VncGFnZSwgdm9pZCAqZGF0YSkKK1NscnVTY2FuRGly Q2JGaW5kRWFybGllc3QoaW50IHNscnVfaWQsIFNscnVQYWdlUHJlY2VkZXNGdW5jdGlvbiBQYWdl UHJlY2VkZXMsCisJCQkJCQkgIGNoYXIgKmZpbGVuYW1lLCBpbnQgc2VncGFnZSwgdm9pZCAqZGF0 YSkKIHsKIAlteHRydW5jaW5mbyAqdHJ1bmMgPSAobXh0cnVuY2luZm8gKikgZGF0YTsKIAogCWlm ICh0cnVuYy0+ZWFybGllc3RFeGlzdGluZ1BhZ2UgPT0gLTEgfHwKLQkJY3RsLT5QYWdlUHJlY2Vk ZXMoc2VncGFnZSwgdHJ1bmMtPmVhcmxpZXN0RXhpc3RpbmdQYWdlKSkKKwkJUGFnZVByZWNlZGVz KHNlZ3BhZ2UsIHRydW5jLT5lYXJsaWVzdEV4aXN0aW5nUGFnZSkpCiAJewogCQl0cnVuYy0+ZWFy bGllc3RFeGlzdGluZ1BhZ2UgPSBzZWdwYWdlOwogCX0KQEAgLTI4OTksNyArMjc4Nyw3IEBAIFBl cmZvcm1NZW1iZXJzVHJ1bmNhdGlvbihNdWx0aVhhY3RPZmZzZXQgb2xkZXN0T2Zmc2V0LCBNdWx0 aVhhY3RPZmZzZXQgbmV3T2xkZXN0CiAJd2hpbGUgKHNlZ21lbnQgIT0gZW5kc2VnbWVudCkKIAl7 CiAJCWVsb2coREVCVUcyLCAidHJ1bmNhdGluZyBtdWx0aXhhY3QgbWVtYmVycyBzZWdtZW50ICV4 Iiwgc2VnbWVudCk7Ci0JCVNscnVEZWxldGVTZWdtZW50KE11bHRpWGFjdE1lbWJlckN0bCwgc2Vn bWVudCk7CisJCVNscnVEZWxldGVTZWdtZW50KFNMUlVfTVVMVElYQUNUX01FTUJFUl9JRCwgc2Vn bWVudCk7CiAKIAkJLyogbW92ZSB0byBuZXh0IHNlZ21lbnQsIGhhbmRsaW5nIHdyYXBhcm91bmQg Y29ycmVjdGx5ICovCiAJCWlmIChzZWdtZW50ID09IG1heHNlZ21lbnQpCkBAIC0yOTIyLDcgKzI4 MTAsOCBAQCBQZXJmb3JtT2Zmc2V0c1RydW5jYXRpb24oTXVsdGlYYWN0SWQgb2xkZXN0TXVsdGks IE11bHRpWGFjdElkIG5ld09sZGVzdE11bHRpKQogCSAqIGRpZG4ndCBzdWJ0cmFjdCBvbmUsIHdl J2QgdHJpZ2dlciBTaW1wbGVMcnVUcnVuY2F0ZSdzIHdyYXBhcm91bmQKIAkgKiBkZXRlY3Rpb24u CiAJICovCi0JU2ltcGxlTHJ1VHJ1bmNhdGUoTXVsdGlYYWN0T2Zmc2V0Q3RsLAorCVNpbXBsZUxy dVRydW5jYXRlKFNMUlVfTVVMVElYQUNUX09GRlNFVF9JRCwKKwkJCQkJICBNdWx0aVhhY3RPZmZz ZXRQYWdlUHJlY2VkZXMsCiAJCQkJCSAgTXVsdGlYYWN0SWRUb09mZnNldFBhZ2UoUHJldmlvdXNN dWx0aVhhY3RJZChuZXdPbGRlc3RNdWx0aSkpKTsKIH0KIApAQCAtMjk5Niw3ICsyODg1LDkgQEAg VHJ1bmNhdGVNdWx0aVhhY3QoTXVsdGlYYWN0SWQgbmV3T2xkZXN0TXVsdGksIE9pZCBuZXdPbGRl c3RNdWx0aURCKQogCSAqIGJlZW4gdHJ1bmNhdGVkIGF3YXksIGFuZCB3ZSBjcmFzaGVkIGJlZm9y ZSB1cGRhdGluZyBvbGRlc3RNdWx0aS4KIAkgKi8KIAl0cnVuYy5lYXJsaWVzdEV4aXN0aW5nUGFn ZSA9IC0xOwotCVNscnVTY2FuRGlyZWN0b3J5KE11bHRpWGFjdE9mZnNldEN0bCwgU2xydVNjYW5E aXJDYkZpbmRFYXJsaWVzdCwgJnRydW5jKTsKKwlTbHJ1U2NhbkRpcmVjdG9yeShTTFJVX01VTFRJ WEFDVF9PRkZTRVRfSUQsCisJCQkJCSAgTXVsdGlYYWN0T2Zmc2V0UGFnZVByZWNlZGVzLAorCQkJ CQkgIFNscnVTY2FuRGlyQ2JGaW5kRWFybGllc3QsICZ0cnVuYyk7CiAJZWFybGllc3QgPSB0cnVu Yy5lYXJsaWVzdEV4aXN0aW5nUGFnZSAqIE1VTFRJWEFDVF9PRkZTRVRTX1BFUl9QQUdFOwogCWlm IChlYXJsaWVzdCA8IEZpcnN0TXVsdGlYYWN0SWQpCiAJCWVhcmxpZXN0ID0gRmlyc3RNdWx0aVhh Y3RJZDsKQEAgLTMxMjgsMjQgKzMwMTksNiBAQCBNdWx0aVhhY3RPZmZzZXRQYWdlUHJlY2VkZXMo aW50IHBhZ2UxLCBpbnQgcGFnZTIpCiAJCQkJCQkJCW11bHRpMiArIE1VTFRJWEFDVF9PRkZTRVRT X1BFUl9QQUdFIC0gMSkpOwogfQogCi0vKgotICogRGVjaWRlIHdoZXRoZXIgYSBNdWx0aVhhY3RN ZW1iZXIgcGFnZSBudW1iZXIgaXMgIm9sZGVyIiBmb3IgdHJ1bmNhdGlvbgotICogcHVycG9zZXMu ICBUaGVyZSBpcyBubyAiaW52YWxpZCBvZmZzZXQgbnVtYmVyIiBzbyB1c2UgdGhlIG51bWJlcnMg dmVyYmF0aW0uCi0gKi8KLXN0YXRpYyBib29sCi1NdWx0aVhhY3RNZW1iZXJQYWdlUHJlY2VkZXMo aW50IHBhZ2UxLCBpbnQgcGFnZTIpCi17Ci0JTXVsdGlYYWN0T2Zmc2V0IG9mZnNldDE7Ci0JTXVs dGlYYWN0T2Zmc2V0IG9mZnNldDI7Ci0KLQlvZmZzZXQxID0gKChNdWx0aVhhY3RPZmZzZXQpIHBh Z2UxKSAqIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9QQUdFOwotCW9mZnNldDIgPSAoKE11bHRpWGFj dE9mZnNldCkgcGFnZTIpICogTVVMVElYQUNUX01FTUJFUlNfUEVSX1BBR0U7Ci0KLQlyZXR1cm4g KE11bHRpWGFjdE9mZnNldFByZWNlZGVzKG9mZnNldDEsIG9mZnNldDIpICYmCi0JCQlNdWx0aVhh Y3RPZmZzZXRQcmVjZWRlcyhvZmZzZXQxLAotCQkJCQkJCQkJb2Zmc2V0MiArIE1VTFRJWEFDVF9N RU1CRVJTX1BFUl9QQUdFIC0gMSkpOwotfQotCiAvKgogICogRGVjaWRlIHdoaWNoIG9mIHR3byBN dWx0aVhhY3RJZHMgaXMgZWFybGllci4KICAqCkBAIC0zMjQwLDMyICszMTEzLDE4IEBAIG11bHRp eGFjdF9yZWRvKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogCWlmIChpbmZvID09IFhMT0dfTVVM VElYQUNUX1pFUk9fT0ZGX1BBR0UpCiAJewogCQlpbnQJCQlwYWdlbm87Ci0JCWludAkJCXNsb3Ru bzsKIAogCQltZW1jcHkoJnBhZ2VubywgWExvZ1JlY0dldERhdGEocmVjb3JkKSwgc2l6ZW9mKGlu dCkpOwogCi0JCUxXTG9ja0FjcXVpcmUoTXVsdGlYYWN0T2Zmc2V0U0xSVUxvY2ssIExXX0VYQ0xV U0lWRSk7Ci0KLQkJc2xvdG5vID0gWmVyb011bHRpWGFjdE9mZnNldFBhZ2UocGFnZW5vLCBmYWxz ZSk7Ci0JCVNpbXBsZUxydVdyaXRlUGFnZShNdWx0aVhhY3RPZmZzZXRDdGwsIHNsb3Rubyk7Ci0J CUFzc2VydCghTXVsdGlYYWN0T2Zmc2V0Q3RsLT5zaGFyZWQtPnBhZ2VfZGlydHlbc2xvdG5vXSk7 Ci0KLQkJTFdMb2NrUmVsZWFzZShNdWx0aVhhY3RPZmZzZXRTTFJVTG9jayk7CisJCVVubG9ja1Jl bGVhc2VCdWZmZXIoWmVyb011bHRpWGFjdE9mZnNldFBhZ2UocGFnZW5vLCBmYWxzZSkpOwogCX0K IAllbHNlIGlmIChpbmZvID09IFhMT0dfTVVMVElYQUNUX1pFUk9fTUVNX1BBR0UpCiAJewogCQlp bnQJCQlwYWdlbm87Ci0JCWludAkJCXNsb3RubzsKIAogCQltZW1jcHkoJnBhZ2VubywgWExvZ1Jl Y0dldERhdGEocmVjb3JkKSwgc2l6ZW9mKGludCkpOwogCi0JCUxXTG9ja0FjcXVpcmUoTXVsdGlY YWN0TWVtYmVyU0xSVUxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0KLQkJc2xvdG5vID0gWmVyb011bHRp WGFjdE1lbWJlclBhZ2UocGFnZW5vLCBmYWxzZSk7Ci0JCVNpbXBsZUxydVdyaXRlUGFnZShNdWx0 aVhhY3RNZW1iZXJDdGwsIHNsb3Rubyk7Ci0JCUFzc2VydCghTXVsdGlYYWN0TWVtYmVyQ3RsLT5z aGFyZWQtPnBhZ2VfZGlydHlbc2xvdG5vXSk7Ci0KLQkJTFdMb2NrUmVsZWFzZShNdWx0aVhhY3RN ZW1iZXJTTFJVTG9jayk7CisJCVVubG9ja1JlbGVhc2VCdWZmZXIoWmVyb011bHRpWGFjdE1lbWJl clBhZ2UocGFnZW5vLCBmYWxzZSkpOwogCX0KIAllbHNlIGlmIChpbmZvID09IFhMT0dfTVVMVElY QUNUX0NSRUFURV9JRCkKIAl7CkBAIC0zMjk5LDcgKzMxNTgsNiBAQCBtdWx0aXhhY3RfcmVkbyhY TG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKIAllbHNlIGlmIChpbmZvID09IFhMT0dfTVVMVElYQUNU X1RSVU5DQVRFX0lEKQogCXsKIAkJeGxfbXVsdGl4YWN0X3RydW5jYXRlIHhscmVjOwotCQlpbnQJ CQlwYWdlbm87CiAKIAkJbWVtY3B5KCZ4bHJlYywgWExvZ1JlY0dldERhdGEocmVjb3JkKSwKIAkJ CSAgIFNpemVPZk11bHRpWGFjdFRydW5jYXRlKTsKQEAgLTMzMjUsMTMgKzMxODMsNiBAQCBtdWx0 aXhhY3RfcmVkbyhYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKIAogCQlQZXJmb3JtTWVtYmVyc1Ry dW5jYXRpb24oeGxyZWMuc3RhcnRUcnVuY01lbWIsIHhscmVjLmVuZFRydW5jTWVtYik7CiAKLQkJ LyoKLQkJICogRHVyaW5nIFhMT0cgcmVwbGF5LCBsYXRlc3RfcGFnZV9udW1iZXIgaXNuJ3QgbmVj ZXNzYXJpbHkgc2V0IHVwCi0JCSAqIHlldDsgaW5zZXJ0IGEgc3VpdGFibGUgdmFsdWUgdG8gYnlw YXNzIHRoZSBzYW5pdHkgdGVzdCBpbgotCQkgKiBTaW1wbGVMcnVUcnVuY2F0ZS4KLQkJICovCi0J CXBhZ2VubyA9IE11bHRpWGFjdElkVG9PZmZzZXRQYWdlKHhscmVjLmVuZFRydW5jT2ZmKTsKLQkJ TXVsdGlYYWN0T2Zmc2V0Q3RsLT5zaGFyZWQtPmxhdGVzdF9wYWdlX251bWJlciA9IHBhZ2VubzsK IAkJUGVyZm9ybU9mZnNldHNUcnVuY2F0aW9uKHhscmVjLnN0YXJ0VHJ1bmNPZmYsIHhscmVjLmVu ZFRydW5jT2ZmKTsKIAogCQlMV0xvY2tSZWxlYXNlKE11bHRpWGFjdFRydW5jYXRpb25Mb2NrKTsK QEAgLTM0MDQsMjEgKzMyNTUsMyBAQCBwZ19nZXRfbXVsdGl4YWN0X21lbWJlcnMoUEdfRlVOQ1RJ T05fQVJHUykKIAogCVNSRl9SRVRVUk5fRE9ORShmdW5jY3h0KTsKIH0KLQotLyoKLSAqIEVudHJ5 cG9pbnQgZm9yIHN5bmMuYyB0byBzeW5jIG9mZnNldHMgZmlsZXMuCi0gKi8KLWludAotbXVsdGl4 YWN0b2Zmc2V0c3N5bmNmaWxldGFnKGNvbnN0IEZpbGVUYWcgKmZ0YWcsIGNoYXIgKnBhdGgpCi17 Ci0JcmV0dXJuIFNscnVTeW5jRmlsZVRhZyhNdWx0aVhhY3RPZmZzZXRDdGwsIGZ0YWcsIHBhdGgp OwotfQotCi0vKgotICogRW50cnlwb2ludCBmb3Igc3luYy5jIHRvIHN5bmMgbWVtYmVycyBmaWxl cy4KLSAqLwotaW50Ci1tdWx0aXhhY3RtZW1iZXJzc3luY2ZpbGV0YWcoY29uc3QgRmlsZVRhZyAq ZnRhZywgY2hhciAqcGF0aCkKLXsKLQlyZXR1cm4gU2xydVN5bmNGaWxlVGFnKE11bHRpWGFjdE1l bWJlckN0bCwgZnRhZywgcGF0aCk7Ci19CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mv dHJhbnNhbS9zbHJ1LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9zbHJ1LmMKaW5kZXgg NmZlZGE4N2Y1NzQuLjg4OTA1MDNiN2NmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mv dHJhbnNhbS9zbHJ1LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vc2xydS5jCkBA IC0xLDQxICsxLDkgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoKICAqIHNscnUuYwotICoJCVNp bXBsZSBMUlUgYnVmZmVyaW5nIGZvciB0cmFuc2FjdGlvbiBzdGF0dXMgbG9nZmlsZXMKKyAqCQlT aW1wbGUgYnVmZmVyaW5nIGZvciB0cmFuc2FjdGlvbiBzdGF0dXMgbG9nZmlsZXMKICAqCi0gKiBX ZSB1c2UgYSBzaW1wbGUgbGVhc3QtcmVjZW50bHktdXNlZCBzY2hlbWUgdG8gbWFuYWdlIGEgcG9v bCBvZiBwYWdlCi0gKiBidWZmZXJzLiAgVW5kZXIgb3JkaW5hcnkgY2lyY3Vtc3RhbmNlcyB3ZSBl eHBlY3QgdGhhdCB3cml0ZQotICogdHJhZmZpYyB3aWxsIG9jY3VyIG1vc3RseSB0byB0aGUgbGF0 ZXN0IHBhZ2UgKGFuZCB0byB0aGUganVzdC1wcmlvcgotICogcGFnZSwgc29vbiBhZnRlciBhIHBh Z2UgdHJhbnNpdGlvbikuICBSZWFkIHRyYWZmaWMgd2lsbCBwcm9iYWJseSB0b3VjaAotICogYSBs YXJnZXIgc3BhbiBvZiBwYWdlcywgYnV0IGluIGFueSBjYXNlIGEgZmFpcmx5IHNtYWxsIG51bWJl ciBvZiBwYWdlCi0gKiBidWZmZXJzIHNob3VsZCBiZSBzdWZmaWNpZW50LiAgU28sIHdlIGp1c3Qg c2VhcmNoIHRoZSBidWZmZXJzIHVzaW5nIHBsYWluCi0gKiBsaW5lYXIgc2VhcmNoOyB0aGVyZSdz IG5vIG5lZWQgZm9yIGEgaGFzaHRhYmxlIG9yIGFueXRoaW5nIGZhbmN5LgotICogVGhlIG1hbmFn ZW1lbnQgYWxnb3JpdGhtIGlzIHN0cmFpZ2h0IExSVSBleGNlcHQgdGhhdCB3ZSB3aWxsIG5ldmVy IHN3YXAKLSAqIG91dCB0aGUgbGF0ZXN0IHBhZ2UgKHNpbmNlIHdlIGtub3cgaXQncyBnb2luZyB0 byBiZSBoaXQgYWdhaW4gZXZlbnR1YWxseSkuCi0gKgotICogV2UgdXNlIGEgY29udHJvbCBMV0xv Y2sgdG8gcHJvdGVjdCB0aGUgc2hhcmVkIGRhdGEgc3RydWN0dXJlcywgcGx1cwotICogcGVyLWJ1 ZmZlciBMV0xvY2tzIHRoYXQgc3luY2hyb25pemUgSS9PIGZvciBlYWNoIGJ1ZmZlci4gIFRoZSBj b250cm9sIGxvY2sKLSAqIG11c3QgYmUgaGVsZCB0byBleGFtaW5lIG9yIG1vZGlmeSBhbnkgc2hh cmVkIHN0YXRlLiAgQSBwcm9jZXNzIHRoYXQgaXMKLSAqIHJlYWRpbmcgaW4gb3Igd3JpdGluZyBv dXQgYSBwYWdlIGJ1ZmZlciBkb2VzIG5vdCBob2xkIHRoZSBjb250cm9sIGxvY2ssCi0gKiBvbmx5 IHRoZSBwZXItYnVmZmVyIGxvY2sgZm9yIHRoZSBidWZmZXIgaXQgaXMgd29ya2luZyBvbi4KLSAq Ci0gKiAiSG9sZGluZyB0aGUgY29udHJvbCBsb2NrIiBtZWFucyBleGNsdXNpdmUgbG9jayBpbiBh bGwgY2FzZXMgZXhjZXB0IGZvcgotICogU2ltcGxlTHJ1UmVhZFBhZ2VfUmVhZE9ubHkoKTsgc2Vl IGNvbW1lbnRzIGZvciBTbHJ1UmVjZW50bHlVc2VkKCkgZm9yCi0gKiB0aGUgaW1wbGljYXRpb25z IG9mIHRoYXQuCi0gKgotICogV2hlbiBpbml0aWF0aW5nIEkvTyBvbiBhIGJ1ZmZlciwgd2UgYWNx dWlyZSB0aGUgcGVyLWJ1ZmZlciBsb2NrIGV4Y2x1c2l2ZWx5Ci0gKiBiZWZvcmUgcmVsZWFzaW5n IHRoZSBjb250cm9sIGxvY2suICBUaGUgcGVyLWJ1ZmZlciBsb2NrIGlzIHJlbGVhc2VkIGFmdGVy Ci0gKiBjb21wbGV0aW5nIHRoZSBJL08sIHJlLWFjcXVpcmluZyB0aGUgY29udHJvbCBsb2NrLCBh bmQgdXBkYXRpbmcgdGhlIHNoYXJlZAotICogc3RhdGUuICAoRGVhZGxvY2sgaXMgbm90IHBvc3Np YmxlIGhlcmUsIGJlY2F1c2Ugd2UgbmV2ZXIgdHJ5IHRvIGluaXRpYXRlCi0gKiBJL08gd2hlbiBz b21lb25lIGVsc2UgaXMgYWxyZWFkeSBkb2luZyBJL08gb24gdGhlIHNhbWUgYnVmZmVyLikKLSAq IFRvIHdhaXQgZm9yIEkvTyB0byBjb21wbGV0ZSwgcmVsZWFzZSB0aGUgY29udHJvbCBsb2NrLCBh Y3F1aXJlIHRoZQotICogcGVyLWJ1ZmZlciBsb2NrIGluIHNoYXJlZCBtb2RlLCBpbW1lZGlhdGVs eSByZWxlYXNlIHRoZSBwZXItYnVmZmVyIGxvY2ssCi0gKiByZWFjcXVpcmUgdGhlIGNvbnRyb2wg bG9jaywgYW5kIHRoZW4gcmVjaGVjayBzdGF0ZSAoc2luY2UgYXJiaXRyYXJ5IHRoaW5ncwotICog Y291bGQgaGF2ZSBoYXBwZW5lZCB3aGlsZSB3ZSBkaWRuJ3QgaGF2ZSB0aGUgbG9jaykuCi0gKgot ICogQXMgd2l0aCB0aGUgcmVndWxhciBidWZmZXIgbWFuYWdlciwgaXQgaXMgcG9zc2libGUgZm9y IGFub3RoZXIgcHJvY2VzcwotICogdG8gcmUtZGlydHkgYSBwYWdlIHRoYXQgaXMgY3VycmVudGx5 IGJlaW5nIHdyaXR0ZW4gb3V0LiAgVGhpcyBpcyBoYW5kbGVkCi0gKiBieSByZS1zZXR0aW5nIHRo ZSBwYWdlJ3MgcGFnZV9kaXJ0eSBmbGFnLgorICogWFhYIHdyaXRlIG1lCiAgKgogICoKICAqIFBv cnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9w bWVudCBHcm91cApAQCAtNjAsNTYyICsyOCwzNCBAQAogI2luY2x1ZGUgInN0b3JhZ2UvZmQuaCIK ICNpbmNsdWRlICJzdG9yYWdlL3NobWVtLmgiCiAKLSNkZWZpbmUgU2xydUZpbGVOYW1lKGN0bCwg cGF0aCwgc2VnKSBcCi0Jc25wcmludGYocGF0aCwgTUFYUEdQQVRILCAiJXMvJTA0WCIsIChjdGwp LT5EaXIsIHNlZykKLQogLyoKLSAqIER1cmluZyBTaW1wbGVMcnVXcml0ZUFsbCgpLCB3ZSB3aWxs IHVzdWFsbHkgbm90IG5lZWQgdG8gd3JpdGUgbW9yZSB0aGFuIG9uZQotICogb3IgdHdvIHBoeXNp Y2FsIGZpbGVzLCBidXQgd2UgbWF5IG5lZWQgdG8gd3JpdGUgc2V2ZXJhbCBwYWdlcyBwZXIgZmls ZS4gIFdlCi0gKiBjYW4gY29uc29saWRhdGUgdGhlIEkvTyByZXF1ZXN0cyBieSBsZWF2aW5nIGZp bGVzIG9wZW4gdW50aWwgY29udHJvbCByZXR1cm5zCi0gKiB0byBTaW1wbGVMcnVXcml0ZUFsbCgp LiAgVGhpcyBkYXRhIHN0cnVjdHVyZSByZW1lbWJlcnMgd2hpY2ggZmlsZXMgYXJlIG9wZW4uCisg KiBTTFJVIElEIHRvIHBhdGggbWFwcGluZwogICovCi0jZGVmaW5lIE1BWF9XUklURUFMTF9CVUZG RVJTCTE2CisjZGVmaW5lIFBHX1NMUlUoc3ltbmFtZSxuYW1lLHBhdGgsc3luY2hyb25pemUpIFwK KwlwYXRoLAogCi10eXBlZGVmIHN0cnVjdCBTbHJ1V3JpdGVBbGxEYXRhCitzdGF0aWMgY2hhciAq c2xydV9kaXJzW10gPQogewotCWludAkJCW51bV9maWxlczsJCS8qICMgZmlsZXMgYWN0dWFsbHkg b3BlbiAqLwotCWludAkJCWZkW01BWF9XUklURUFMTF9CVUZGRVJTXTsJLyogdGhlaXIgRkQncyAq LwotCWludAkJCXNlZ25vW01BWF9XUklURUFMTF9CVUZGRVJTXTsJLyogdGhlaXIgbG9nIHNlZyNz ICovCi19IFNscnVXcml0ZUFsbERhdGE7Ci0KLXR5cGVkZWYgc3RydWN0IFNscnVXcml0ZUFsbERh dGEgKlNscnVXcml0ZUFsbDsKKyNpbmNsdWRlICJhY2Nlc3Mvc2xydWxpc3QuaCIKK307CiAKIC8q Ci0gKiBQb3B1bGF0ZSBhIGZpbGUgdGFnIGRlc2NyaWJpbmcgYSBzZWdtZW50IGZpbGUuICBXZSBv bmx5IHVzZSB0aGUgc2VnbWVudAotICogbnVtYmVyLCBzaW5jZSB3ZSBjYW4gZGVyaXZlIGV2ZXJ5 dGhpbmcgZWxzZSB3ZSBuZWVkIGJ5IGhhdmluZyBzZXBhcmF0ZQotICogc3luYyBoYW5kbGVyIGZ1 bmN0aW9ucyBmb3IgY2xvZywgbXVsdGl4YWN0IGV0Yy4KKyAqIFdlJ2xsIG1haW50YWluIGEgbGl0 dGxlIGNhY2hlIG9mIHJlY2VudGx5IHNlZW4gYnVmZmVycywgdG8gdHJ5IHRvIGF2b2lkIHRoZQor ICogYnVmZmVyIG1hcHBpbmcgdGFibGUgb24gcmVwZWF0IGFjY2VzcyAoaWUgdGhlIGJ1c3kgZW5k IG9mIHRoZSBDTE9HKS4gIE9uZQorICogZW50cnkgcGVyIFNMUlUuCiAgKi8KLSNkZWZpbmUgSU5J VF9TTFJVRklMRVRBRyhhLHh4X2hhbmRsZXIseHhfc2Vnbm8pIFwKLSggXAotCW1lbXNldCgmKGEp LCAwLCBzaXplb2YoRmlsZVRhZykpLCBcCi0JKGEpLmhhbmRsZXIgPSAoeHhfaGFuZGxlciksIFwK LQkoYSkuc2Vnbm8gPSAoeHhfc2Vnbm8pIFwKLSkKLQotLyoKLSAqIE1hY3JvIHRvIG1hcmsgYSBi dWZmZXIgc2xvdCAibW9zdCByZWNlbnRseSB1c2VkIi4gIE5vdGUgbXVsdGlwbGUgZXZhbHVhdGlv bgotICogb2YgYXJndW1lbnRzIQotICoKLSAqIFRoZSByZWFzb24gZm9yIHRoZSBpZi10ZXN0IGlz IHRoYXQgdGhlcmUgYXJlIG9mdGVuIG1hbnkgY29uc2VjdXRpdmUKLSAqIGFjY2Vzc2VzIHRvIHRo ZSBzYW1lIHBhZ2UgKHBhcnRpY3VsYXJseSB0aGUgbGF0ZXN0IHBhZ2UpLiAgQnkgc3VwcHJlc3Np bmcKLSAqIHVzZWxlc3MgaW5jcmVtZW50cyBvZiBjdXJfbHJ1X2NvdW50LCB3ZSByZWR1Y2UgdGhl IHByb2JhYmlsaXR5IHRoYXQgb2xkCi0gKiBwYWdlcycgY291bnRzIHdpbGwgIndyYXAgYXJvdW5k IiBhbmQgbWFrZSB0aGVtIGFwcGVhciByZWNlbnRseSB1c2VkLgotICoKLSAqIFdlIGFsbG93IHRo aXMgY29kZSB0byBiZSBleGVjdXRlZCBjb25jdXJyZW50bHkgYnkgbXVsdGlwbGUgcHJvY2Vzc2Vz IHdpdGhpbgotICogU2ltcGxlTHJ1UmVhZFBhZ2VfUmVhZE9ubHkoKS4gIEFzIGxvbmcgYXMgaW50 IHJlYWRzIGFuZCB3cml0ZXMgYXJlIGF0b21pYywKLSAqIHRoaXMgc2hvdWxkIG5vdCBjYXVzZSBh bnkgY29tcGxldGVseS1ib2d1cyB2YWx1ZXMgdG8gZW50ZXIgdGhlIGNvbXB1dGF0aW9uLgotICog SG93ZXZlciwgaXQgaXMgcG9zc2libGUgZm9yIGVpdGhlciBjdXJfbHJ1X2NvdW50IG9yIGluZGl2 aWR1YWwKLSAqIHBhZ2VfbHJ1X2NvdW50IGVudHJpZXMgdG8gYmUgInJlc2V0IiB0byBsb3dlciB2 YWx1ZXMgdGhhbiB0aGV5IHNob3VsZCBoYXZlLAotICogaW4gY2FzZSBhIHByb2Nlc3MgaXMgZGVs YXllZCB3aGlsZSBpdCBleGVjdXRlcyB0aGlzIG1hY3JvLiAgV2l0aCBjYXJlIGluCi0gKiBTbHJ1 U2VsZWN0TFJVUGFnZSgpLCB0aGlzIGRvZXMgbGl0dGxlIGhhcm0sIGFuZCBpbiBhbnkgY2FzZSB0 aGUgYWJzb2x1dGUKLSAqIHdvcnN0IHBvc3NpYmxlIGNvbnNlcXVlbmNlIGlzIGEgbm9ub3B0aW1h bCBjaG9pY2Ugb2YgcGFnZSB0byBldmljdC4gIFRoZQotICogZ2FpbiBmcm9tIGFsbG93aW5nIGNv bmN1cnJlbnQgcmVhZHMgb2YgU0xSVSBwYWdlcyBzZWVtcyB3b3J0aCBpdC4KLSAqLwotI2RlZmlu ZSBTbHJ1UmVjZW50bHlVc2VkKHNoYXJlZCwgc2xvdG5vKQlcCi0JZG8geyBcCi0JCWludAkJbmV3 X2xydV9jb3VudCA9IChzaGFyZWQpLT5jdXJfbHJ1X2NvdW50OyBcCi0JCWlmIChuZXdfbHJ1X2Nv dW50ICE9IChzaGFyZWQpLT5wYWdlX2xydV9jb3VudFtzbG90bm9dKSB7IFwKLQkJCShzaGFyZWQp LT5jdXJfbHJ1X2NvdW50ID0gKytuZXdfbHJ1X2NvdW50OyBcCi0JCQkoc2hhcmVkKS0+cGFnZV9s cnVfY291bnRbc2xvdG5vXSA9IG5ld19scnVfY291bnQ7IFwKLQkJfSBcCi0JfSB3aGlsZSAoMCkK LQotLyogU2F2ZWQgaW5mbyBmb3IgU2xydVJlcG9ydElPRXJyb3IgKi8KLXR5cGVkZWYgZW51bQot ewotCVNMUlVfT1BFTl9GQUlMRUQsCi0JU0xSVV9TRUVLX0ZBSUxFRCwKLQlTTFJVX1JFQURfRkFJ TEVELAotCVNMUlVfV1JJVEVfRkFJTEVELAotCVNMUlVfRlNZTkNfRkFJTEVELAotCVNMUlVfQ0xP U0VfRkFJTEVECi19IFNscnVFcnJvckNhdXNlOworc3RydWN0IFNscnVSZWNlbnRCdWZmZXIgewor CWludAkJCXBhZ2VubzsKKwlCdWZmZXIJCXJlY2VudF9idWZmZXI7Cit9OwogCi1zdGF0aWMgU2xy dUVycm9yQ2F1c2Ugc2xydV9lcnJjYXVzZTsKLXN0YXRpYyBpbnQJc2xydV9lcnJubzsKK3N0YXRp YyBzdHJ1Y3QgU2xydVJlY2VudEJ1ZmZlciBzbHJ1X3JlY2VudF9idWZmZXJzW1NMUlVfTkVYVF9J RF07CiAKLQotc3RhdGljIHZvaWQgU2ltcGxlTHJ1WmVyb0xTTnMoU2xydUN0bCBjdGwsIGludCBz bG90bm8pOwotc3RhdGljIHZvaWQgU2ltcGxlTHJ1V2FpdElPKFNscnVDdGwgY3RsLCBpbnQgc2xv dG5vKTsKLXN0YXRpYyB2b2lkIFNscnVJbnRlcm5hbFdyaXRlUGFnZShTbHJ1Q3RsIGN0bCwgaW50 IHNsb3RubywgU2xydVdyaXRlQWxsIGZkYXRhKTsKLXN0YXRpYyBib29sIFNscnVQaHlzaWNhbFJl YWRQYWdlKFNscnVDdGwgY3RsLCBpbnQgcGFnZW5vLCBpbnQgc2xvdG5vKTsKLXN0YXRpYyBib29s IFNscnVQaHlzaWNhbFdyaXRlUGFnZShTbHJ1Q3RsIGN0bCwgaW50IHBhZ2VubywgaW50IHNsb3Ru bywKLQkJCQkJCQkJICBTbHJ1V3JpdGVBbGwgZmRhdGEpOwotc3RhdGljIHZvaWQgU2xydVJlcG9y dElPRXJyb3IoU2xydUN0bCBjdGwsIGludCBwYWdlbm8sIFRyYW5zYWN0aW9uSWQgeGlkKTsKLXN0 YXRpYyBpbnQJU2xydVNlbGVjdExSVVBhZ2UoU2xydUN0bCBjdGwsIGludCBwYWdlbm8pOwotCi1z dGF0aWMgYm9vbCBTbHJ1U2NhbkRpckNiRGVsZXRlQ3V0b2ZmKFNscnVDdGwgY3RsLCBjaGFyICpm aWxlbmFtZSwKK3N0YXRpYyBib29sIFNscnVTY2FuRGlyQ2JEZWxldGVDdXRvZmYoaW50IHNscnVf aWQsCisJCQkJCQkJCQkgIFNscnVQYWdlUHJlY2VkZXNGdW5jdGlvbiBQYWdlUHJlY2VkZXMsCisJ CQkJCQkJCQkgIGNoYXIgKmZpbGVuYW1lLAogCQkJCQkJCQkJICBpbnQgc2VncGFnZSwgdm9pZCAq ZGF0YSk7Ci1zdGF0aWMgdm9pZCBTbHJ1SW50ZXJuYWxEZWxldGVTZWdtZW50KFNscnVDdGwgY3Rs LCBpbnQgc2Vnbm8pOwotCi0vKgotICogSW5pdGlhbGl6YXRpb24gb2Ygc2hhcmVkIG1lbW9yeQot ICovCi0KLVNpemUKLVNpbXBsZUxydVNobWVtU2l6ZShpbnQgbnNsb3RzLCBpbnQgbmxzbnMpCi17 Ci0JU2l6ZQkJc3o7Ci0KLQkvKiB3ZSBhc3N1bWUgbnNsb3RzIGlzbid0IHNvIGxhcmdlIGFzIHRv IHJpc2sgb3ZlcmZsb3cgKi8KLQlzeiA9IE1BWEFMSUdOKHNpemVvZihTbHJ1U2hhcmVkRGF0YSkp OwotCXN6ICs9IE1BWEFMSUdOKG5zbG90cyAqIHNpemVvZihjaGFyICopKTsJLyogcGFnZV9idWZm ZXJbXSAqLwotCXN6ICs9IE1BWEFMSUdOKG5zbG90cyAqIHNpemVvZihTbHJ1UGFnZVN0YXR1cykp OwkvKiBwYWdlX3N0YXR1c1tdICovCi0Jc3ogKz0gTUFYQUxJR04obnNsb3RzICogc2l6ZW9mKGJv b2wpKTsJLyogcGFnZV9kaXJ0eVtdICovCi0Jc3ogKz0gTUFYQUxJR04obnNsb3RzICogc2l6ZW9m KGludCkpOwkvKiBwYWdlX251bWJlcltdICovCi0Jc3ogKz0gTUFYQUxJR04obnNsb3RzICogc2l6 ZW9mKGludCkpOwkvKiBwYWdlX2xydV9jb3VudFtdICovCi0Jc3ogKz0gTUFYQUxJR04obnNsb3Rz ICogc2l6ZW9mKExXTG9ja1BhZGRlZCkpOwkvKiBidWZmZXJfbG9ja3NbXSAqLwotCi0JaWYgKG5s c25zID4gMCkKLQkJc3ogKz0gTUFYQUxJR04obnNsb3RzICogbmxzbnMgKiBzaXplb2YoWExvZ1Jl Y1B0cikpOwkvKiBncm91cF9sc25bXSAqLwotCi0JcmV0dXJuIEJVRkZFUkFMSUdOKHN6KSArIEJM Q0tTWiAqIG5zbG90czsKLX0KLQotLyoKLSAqIEluaXRpYWxpemUsIG9yIGF0dGFjaCB0bywgYSBz aW1wbGUgTFJVIGNhY2hlIGluIHNoYXJlZCBtZW1vcnkuCi0gKgotICogY3RsOiBhZGRyZXNzIG9m IGxvY2FsICh1bnNoYXJlZCkgY29udHJvbCBzdHJ1Y3R1cmUuCi0gKiBuYW1lOiBuYW1lIG9mIFNM UlUuICAoVGhpcyBpcyB1c2VyLXZpc2libGUsIHBpY2sgd2l0aCBjYXJlISkKLSAqIG5zbG90czog bnVtYmVyIG9mIHBhZ2Ugc2xvdHMgdG8gdXNlLgotICogbmxzbnM6IG51bWJlciBvZiBMU04gZ3Jv dXBzIHBlciBwYWdlIChzZXQgdG8gemVybyBpZiBub3QgcmVsZXZhbnQpLgotICogY3RsbG9jazog TFdMb2NrIHRvIHVzZSB0byBjb250cm9sIGFjY2VzcyB0byB0aGUgc2hhcmVkIGNvbnRyb2wgc3Ry dWN0dXJlLgotICogc3ViZGlyOiBQR0RBVEEtcmVsYXRpdmUgc3ViZGlyZWN0b3J5IHRoYXQgd2ls bCBjb250YWluIHRoZSBmaWxlcy4KLSAqIHRyYW5jaGVfaWQ6IExXTG9jayB0cmFuY2hlIElEIHRv IHVzZSBmb3IgdGhlIFNMUlUncyBwZXItYnVmZmVyIExXTG9ja3MuCi0gKiBzeW5jX2hhbmRsZXI6 IHdoaWNoIHNldCBvZiBmdW5jdGlvbnMgdG8gdXNlIHRvIGhhbmRsZSBzeW5jIHJlcXVlc3RzCi0g Ki8KLXZvaWQKLVNpbXBsZUxydUluaXQoU2xydUN0bCBjdGwsIGNvbnN0IGNoYXIgKm5hbWUsIGlu dCBuc2xvdHMsIGludCBubHNucywKLQkJCSAgTFdMb2NrICpjdGxsb2NrLCBjb25zdCBjaGFyICpz dWJkaXIsIGludCB0cmFuY2hlX2lkLAotCQkJICBTeW5jUmVxdWVzdEhhbmRsZXIgc3luY19oYW5k bGVyKQotewotCVNscnVTaGFyZWQJc2hhcmVkOwotCWJvb2wJCWZvdW5kOwotCi0Jc2hhcmVkID0g KFNscnVTaGFyZWQpIFNobWVtSW5pdFN0cnVjdChuYW1lLAotCQkJCQkJCQkJCSAgU2ltcGxlTHJ1 U2htZW1TaXplKG5zbG90cywgbmxzbnMpLAotCQkJCQkJCQkJCSAgJmZvdW5kKTsKLQotCWlmICgh SXNVbmRlclBvc3RtYXN0ZXIpCi0JewotCQkvKiBJbml0aWFsaXplIGxvY2tzIGFuZCBzaGFyZWQg bWVtb3J5IGFyZWEgKi8KLQkJY2hhcgkgICAqcHRyOwotCQlTaXplCQlvZmZzZXQ7Ci0JCWludAkJ CXNsb3RubzsKLQotCQlBc3NlcnQoIWZvdW5kKTsKLQotCQltZW1zZXQoc2hhcmVkLCAwLCBzaXpl b2YoU2xydVNoYXJlZERhdGEpKTsKLQotCQlzaGFyZWQtPkNvbnRyb2xMb2NrID0gY3RsbG9jazsK LQotCQlzaGFyZWQtPm51bV9zbG90cyA9IG5zbG90czsKLQkJc2hhcmVkLT5sc25fZ3JvdXBzX3Bl cl9wYWdlID0gbmxzbnM7Ci0KLQkJc2hhcmVkLT5jdXJfbHJ1X2NvdW50ID0gMDsKLQotCQkvKiBz aGFyZWQtPmxhdGVzdF9wYWdlX251bWJlciB3aWxsIGJlIHNldCBsYXRlciAqLwotCi0JCXNoYXJl ZC0+c2xydV9zdGF0c19pZHggPSBwZ3N0YXRfZ2V0X3NscnVfaW5kZXgobmFtZSk7Ci0KLQkJcHRy ID0gKGNoYXIgKikgc2hhcmVkOwotCQlvZmZzZXQgPSBNQVhBTElHTihzaXplb2YoU2xydVNoYXJl ZERhdGEpKTsKLQkJc2hhcmVkLT5wYWdlX2J1ZmZlciA9IChjaGFyICoqKSAocHRyICsgb2Zmc2V0 KTsKLQkJb2Zmc2V0ICs9IE1BWEFMSUdOKG5zbG90cyAqIHNpemVvZihjaGFyICopKTsKLQkJc2hh cmVkLT5wYWdlX3N0YXR1cyA9IChTbHJ1UGFnZVN0YXR1cyAqKSAocHRyICsgb2Zmc2V0KTsKLQkJ b2Zmc2V0ICs9IE1BWEFMSUdOKG5zbG90cyAqIHNpemVvZihTbHJ1UGFnZVN0YXR1cykpOwotCQlz aGFyZWQtPnBhZ2VfZGlydHkgPSAoYm9vbCAqKSAocHRyICsgb2Zmc2V0KTsKLQkJb2Zmc2V0ICs9 IE1BWEFMSUdOKG5zbG90cyAqIHNpemVvZihib29sKSk7Ci0JCXNoYXJlZC0+cGFnZV9udW1iZXIg PSAoaW50ICopIChwdHIgKyBvZmZzZXQpOwotCQlvZmZzZXQgKz0gTUFYQUxJR04obnNsb3RzICog c2l6ZW9mKGludCkpOwotCQlzaGFyZWQtPnBhZ2VfbHJ1X2NvdW50ID0gKGludCAqKSAocHRyICsg b2Zmc2V0KTsKLQkJb2Zmc2V0ICs9IE1BWEFMSUdOKG5zbG90cyAqIHNpemVvZihpbnQpKTsKLQot CQkvKiBJbml0aWFsaXplIExXTG9ja3MgKi8KLQkJc2hhcmVkLT5idWZmZXJfbG9ja3MgPSAoTFdM b2NrUGFkZGVkICopIChwdHIgKyBvZmZzZXQpOwotCQlvZmZzZXQgKz0gTUFYQUxJR04obnNsb3Rz ICogc2l6ZW9mKExXTG9ja1BhZGRlZCkpOwotCi0JCWlmIChubHNucyA+IDApCi0JCXsKLQkJCXNo YXJlZC0+Z3JvdXBfbHNuID0gKFhMb2dSZWNQdHIgKikgKHB0ciArIG9mZnNldCk7Ci0JCQlvZmZz ZXQgKz0gTUFYQUxJR04obnNsb3RzICogbmxzbnMgKiBzaXplb2YoWExvZ1JlY1B0cikpOwotCQl9 Ci0KLQkJcHRyICs9IEJVRkZFUkFMSUdOKG9mZnNldCk7Ci0JCWZvciAoc2xvdG5vID0gMDsgc2xv dG5vIDwgbnNsb3RzOyBzbG90bm8rKykKLQkJewotCQkJTFdMb2NrSW5pdGlhbGl6ZSgmc2hhcmVk LT5idWZmZXJfbG9ja3Nbc2xvdG5vXS5sb2NrLAotCQkJCQkJCSB0cmFuY2hlX2lkKTsKLQotCQkJ c2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90bm9dID0gcHRyOwotCQkJc2hhcmVkLT5wYWdlX3N0YXR1 c1tzbG90bm9dID0gU0xSVV9QQUdFX0VNUFRZOwotCQkJc2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Ru b10gPSBmYWxzZTsKLQkJCXNoYXJlZC0+cGFnZV9scnVfY291bnRbc2xvdG5vXSA9IDA7Ci0JCQlw dHIgKz0gQkxDS1NaOwotCQl9Ci0KLQkJLyogU2hvdWxkIGZpdCB0byBlc3RpbWF0ZWQgc2htZW0g c2l6ZSAqLwotCQlBc3NlcnQocHRyIC0gKGNoYXIgKikgc2hhcmVkIDw9IFNpbXBsZUxydVNobWVt U2l6ZShuc2xvdHMsIG5sc25zKSk7Ci0JfQotCWVsc2UKLQkJQXNzZXJ0KGZvdW5kKTsKLQotCS8q Ci0JICogSW5pdGlhbGl6ZSB0aGUgdW5zaGFyZWQgY29udHJvbCBzdHJ1Y3QsIGluY2x1ZGluZyBk aXJlY3RvcnkgcGF0aC4gV2UKLQkgKiBhc3N1bWUgY2FsbGVyIHNldCBQYWdlUHJlY2VkZXMuCi0J ICovCi0JY3RsLT5zaGFyZWQgPSBzaGFyZWQ7Ci0JY3RsLT5zeW5jX2hhbmRsZXIgPSBzeW5jX2hh bmRsZXI7Ci0Jc3RybGNweShjdGwtPkRpciwgc3ViZGlyLCBzaXplb2YoY3RsLT5EaXIpKTsKLX0K LQotLyoKLSAqIEluaXRpYWxpemUgKG9yIHJlaW5pdGlhbGl6ZSkgYSBwYWdlIHRvIHplcm9lcy4K LSAqCi0gKiBUaGUgcGFnZSBpcyBub3QgYWN0dWFsbHkgd3JpdHRlbiwganVzdCBzZXQgdXAgaW4g c2hhcmVkIG1lbW9yeS4KLSAqIFRoZSBzbG90IG51bWJlciBvZiB0aGUgbmV3IHBhZ2UgaXMgcmV0 dXJuZWQuCi0gKgotICogQ29udHJvbCBsb2NrIG11c3QgYmUgaGVsZCBhdCBlbnRyeSwgYW5kIHdp bGwgYmUgaGVsZCBhdCBleGl0LgotICovCi1pbnQKLVNpbXBsZUxydVplcm9QYWdlKFNscnVDdGwg Y3RsLCBpbnQgcGFnZW5vKQotewotCVNscnVTaGFyZWQJc2hhcmVkID0gY3RsLT5zaGFyZWQ7Ci0J aW50CQkJc2xvdG5vOwotCi0JLyogRmluZCBhIHN1aXRhYmxlIGJ1ZmZlciBzbG90IGZvciB0aGUg cGFnZSAqLwotCXNsb3RubyA9IFNscnVTZWxlY3RMUlVQYWdlKGN0bCwgcGFnZW5vKTsKLQlBc3Nl cnQoc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dID09IFNMUlVfUEFHRV9FTVBUWSB8fAotCQkg ICAoc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dID09IFNMUlVfUEFHRV9WQUxJRCAmJgotCQkJ IXNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90bm9dKSB8fAotCQkgICBzaGFyZWQtPnBhZ2VfbnVtYmVy W3Nsb3Rub10gPT0gcGFnZW5vKTsKLQotCS8qIE1hcmsgdGhlIHNsb3QgYXMgY29udGFpbmluZyB0 aGlzIHBhZ2UgKi8KLQlzaGFyZWQtPnBhZ2VfbnVtYmVyW3Nsb3Rub10gPSBwYWdlbm87Ci0Jc2hh cmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dID0gU0xSVV9QQUdFX1ZBTElEOwotCXNoYXJlZC0+cGFn ZV9kaXJ0eVtzbG90bm9dID0gdHJ1ZTsKLQlTbHJ1UmVjZW50bHlVc2VkKHNoYXJlZCwgc2xvdG5v KTsKLQotCS8qIFNldCB0aGUgYnVmZmVyIHRvIHplcm9lcyAqLwotCU1lbVNldChzaGFyZWQtPnBh Z2VfYnVmZmVyW3Nsb3Rub10sIDAsIEJMQ0tTWik7Ci0KLQkvKiBTZXQgdGhlIExTTnMgZm9yIHRo aXMgbmV3IHBhZ2UgdG8gemVybyAqLwotCVNpbXBsZUxydVplcm9MU05zKGN0bCwgc2xvdG5vKTsK LQotCS8qIEFzc3VtZSB0aGlzIHBhZ2UgaXMgbm93IHRoZSBsYXRlc3QgYWN0aXZlIHBhZ2UgKi8K LQlzaGFyZWQtPmxhdGVzdF9wYWdlX251bWJlciA9IHBhZ2VubzsKLQotCS8qIHVwZGF0ZSB0aGUg c3RhdHMgY291bnRlciBvZiB6ZXJvZWQgcGFnZXMgKi8KLQlwZ3N0YXRfY291bnRfc2xydV9wYWdl X3plcm9lZChzaGFyZWQtPnNscnVfc3RhdHNfaWR4KTsKLQotCXJldHVybiBzbG90bm87Ci19Ci0K LS8qCi0gKiBaZXJvIGFsbCB0aGUgTFNOcyB3ZSBzdG9yZSBmb3IgdGhpcyBzbHJ1IHBhZ2UuCi0g KgotICogVGhpcyBzaG91bGQgYmUgY2FsbGVkIGVhY2ggdGltZSB3ZSBjcmVhdGUgYSBuZXcgcGFn ZSwgYW5kIGVhY2ggdGltZSB3ZSByZWFkCi0gKiBpbiBhIHBhZ2UgZnJvbSBkaXNrIGludG8gYW4g ZXhpc3RpbmcgYnVmZmVyLiAgKFN1Y2ggYW4gb2xkIHBhZ2UgY2Fubm90Ci0gKiBoYXZlIGFueSBp bnRlcmVzdGluZyBMU05zLCBzaW5jZSB3ZSdkIGhhdmUgZmx1c2hlZCB0aGVtIGJlZm9yZSB3cml0 aW5nCi0gKiB0aGUgcGFnZSBpbiB0aGUgZmlyc3QgcGxhY2UuKQotICoKLSAqIFRoaXMgYXNzdW1l cyB0aGF0IEludmFsaWRYTG9nUmVjUHRyIGlzIGJpdHdpc2UtYWxsLTAuCi0gKi8KLXN0YXRpYyB2 b2lkCi1TaW1wbGVMcnVaZXJvTFNOcyhTbHJ1Q3RsIGN0bCwgaW50IHNsb3RubykKLXsKLQlTbHJ1 U2hhcmVkCXNoYXJlZCA9IGN0bC0+c2hhcmVkOwotCi0JaWYgKHNoYXJlZC0+bHNuX2dyb3Vwc19w ZXJfcGFnZSA+IDApCi0JCU1lbVNldCgmc2hhcmVkLT5ncm91cF9sc25bc2xvdG5vICogc2hhcmVk LT5sc25fZ3JvdXBzX3Blcl9wYWdlXSwgMCwKLQkJCSAgIHNoYXJlZC0+bHNuX2dyb3Vwc19wZXJf cGFnZSAqIHNpemVvZihYTG9nUmVjUHRyKSk7Ci19Ci0KLS8qCi0gKiBXYWl0IGZvciBhbnkgYWN0 aXZlIEkvTyBvbiBhIHBhZ2Ugc2xvdCB0byBmaW5pc2guICAoVGhpcyBkb2VzIG5vdAotICogZ3Vh cmFudGVlIHRoYXQgbmV3IEkvTyBoYXNuJ3QgYmVlbiBzdGFydGVkIGJlZm9yZSB3ZSByZXR1cm4s IHRob3VnaC4KLSAqIEluIGZhY3QgdGhlIHNsb3QgbWlnaHQgbm90IGV2ZW4gY29udGFpbiB0aGUg c2FtZSBwYWdlIGFueW1vcmUuKQotICoKLSAqIENvbnRyb2wgbG9jayBtdXN0IGJlIGhlbGQgYXQg ZW50cnksIGFuZCB3aWxsIGJlIGhlbGQgYXQgZXhpdC4KLSAqLwotc3RhdGljIHZvaWQKLVNpbXBs ZUxydVdhaXRJTyhTbHJ1Q3RsIGN0bCwgaW50IHNsb3RubykKLXsKLQlTbHJ1U2hhcmVkCXNoYXJl ZCA9IGN0bC0+c2hhcmVkOwotCi0JLyogU2VlIG5vdGVzIGF0IHRvcCBvZiBmaWxlICovCi0JTFdM b2NrUmVsZWFzZShzaGFyZWQtPkNvbnRyb2xMb2NrKTsKLQlMV0xvY2tBY3F1aXJlKCZzaGFyZWQt PmJ1ZmZlcl9sb2Nrc1tzbG90bm9dLmxvY2ssIExXX1NIQVJFRCk7Ci0JTFdMb2NrUmVsZWFzZSgm c2hhcmVkLT5idWZmZXJfbG9ja3Nbc2xvdG5vXS5sb2NrKTsKLQlMV0xvY2tBY3F1aXJlKHNoYXJl ZC0+Q29udHJvbExvY2ssIExXX0VYQ0xVU0lWRSk7Ci0KLQkvKgotCSAqIElmIHRoZSBzbG90IGlz IHN0aWxsIGluIGFuIGlvLWluLXByb2dyZXNzIHN0YXRlLCB0aGVuIGVpdGhlciBzb21lb25lCi0J ICogYWxyZWFkeSBzdGFydGVkIGEgbmV3IEkvTyBvbiB0aGUgc2xvdCwgb3IgYSBwcmV2aW91cyBJ L08gZmFpbGVkIGFuZAotCSAqIG5lZ2xlY3RlZCB0byByZXNldCB0aGUgcGFnZSBzdGF0ZS4gIFRo YXQgc2hvdWxkbid0IGhhcHBlbiwgcmVhbGx5LCBidXQKLQkgKiBpdCBzZWVtcyB3b3J0aCBhIGZl dyBleHRyYSBjeWNsZXMgdG8gY2hlY2sgYW5kIHJlY292ZXIgZnJvbSBpdC4gV2UgY2FuCi0JICog Y2hlYXBseSB0ZXN0IGZvciBmYWlsdXJlIGJ5IHNlZWluZyBpZiB0aGUgYnVmZmVyIGxvY2sgaXMg c3RpbGwgaGVsZCAod2UKLQkgKiBhc3N1bWUgdGhhdCB0cmFuc2FjdGlvbiBhYm9ydCB3b3VsZCBy ZWxlYXNlIHRoZSBsb2NrKS4KLQkgKi8KLQlpZiAoc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9d ID09IFNMUlVfUEFHRV9SRUFEX0lOX1BST0dSRVNTIHx8Ci0JCXNoYXJlZC0+cGFnZV9zdGF0dXNb c2xvdG5vXSA9PSBTTFJVX1BBR0VfV1JJVEVfSU5fUFJPR1JFU1MpCi0JewotCQlpZiAoTFdMb2Nr Q29uZGl0aW9uYWxBY3F1aXJlKCZzaGFyZWQtPmJ1ZmZlcl9sb2Nrc1tzbG90bm9dLmxvY2ssIExX X1NIQVJFRCkpCi0JCXsKLQkJCS8qIGluZGVlZCwgdGhlIEkvTyBtdXN0IGhhdmUgZmFpbGVkICov Ci0JCQlpZiAoc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dID09IFNMUlVfUEFHRV9SRUFEX0lO X1BST0dSRVNTKQotCQkJCXNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSA9IFNMUlVfUEFHRV9F TVBUWTsKLQkJCWVsc2UJCQkJLyogd3JpdGVfaW5fcHJvZ3Jlc3MgKi8KLQkJCXsKLQkJCQlzaGFy ZWQtPnBhZ2Vfc3RhdHVzW3Nsb3Rub10gPSBTTFJVX1BBR0VfVkFMSUQ7Ci0JCQkJc2hhcmVkLT5w YWdlX2RpcnR5W3Nsb3Rub10gPSB0cnVlOwotCQkJfQotCQkJTFdMb2NrUmVsZWFzZSgmc2hhcmVk LT5idWZmZXJfbG9ja3Nbc2xvdG5vXS5sb2NrKTsKLQkJfQotCX0KLX0KLQotLyoKLSAqIEZpbmQg YSBwYWdlIGluIGEgc2hhcmVkIGJ1ZmZlciwgcmVhZGluZyBpdCBpbiBpZiBuZWNlc3NhcnkuCi0g KiBUaGUgcGFnZSBudW1iZXIgbXVzdCBjb3JyZXNwb25kIHRvIGFuIGFscmVhZHktaW5pdGlhbGl6 ZWQgcGFnZS4KLSAqCi0gKiBJZiB3cml0ZV9vayBpcyB0cnVlIHRoZW4gaXQgaXMgT0sgdG8gcmV0 dXJuIGEgcGFnZSB0aGF0IGlzIGluCi0gKiBXUklURV9JTl9QUk9HUkVTUyBzdGF0ZTsgaXQgaXMg dGhlIGNhbGxlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGJlIHN1cmUKLSAqIHRoYXQgbW9kaWZpY2F0 aW9uIG9mIHRoZSBwYWdlIGlzIHNhZmUuICBJZiB3cml0ZV9vayBpcyBmYWxzZSB0aGVuIHdlCi0g KiB3aWxsIG5vdCByZXR1cm4gdGhlIHBhZ2UgdW50aWwgaXQgaXMgbm90IHVuZGVyZ29pbmcgYWN0 aXZlIEkvTy4KLSAqCi0gKiBUaGUgcGFzc2VkLWluIHhpZCBpcyB1c2VkIG9ubHkgZm9yIGVycm9y IHJlcG9ydGluZywgYW5kIG1heSBiZQotICogSW52YWxpZFRyYW5zYWN0aW9uSWQgaWYgbm8gc3Bl Y2lmaWMgeGlkIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgYWN0aW9uLgotICoKLSAqIFJldHVybiB2 YWx1ZSBpcyB0aGUgc2hhcmVkLWJ1ZmZlciBzbG90IG51bWJlciBub3cgaG9sZGluZyB0aGUgcGFn ZS4KLSAqIFRoZSBidWZmZXIncyBMUlUgYWNjZXNzIGluZm8gaXMgdXBkYXRlZC4KLSAqCi0gKiBD b250cm9sIGxvY2sgbXVzdCBiZSBoZWxkIGF0IGVudHJ5LCBhbmQgd2lsbCBiZSBoZWxkIGF0IGV4 aXQuCi0gKi8KLWludAotU2ltcGxlTHJ1UmVhZFBhZ2UoU2xydUN0bCBjdGwsIGludCBwYWdlbm8s IGJvb2wgd3JpdGVfb2ssCi0JCQkJICBUcmFuc2FjdGlvbklkIHhpZCkKLXsKLQlTbHJ1U2hhcmVk CXNoYXJlZCA9IGN0bC0+c2hhcmVkOwotCi0JLyogT3V0ZXIgbG9vcCBoYW5kbGVzIHJlc3RhcnQg aWYgd2UgbXVzdCB3YWl0IGZvciBzb21lb25lIGVsc2UncyBJL08gKi8KLQlmb3IgKDs7KQotCXsK LQkJaW50CQkJc2xvdG5vOwotCQlib29sCQlvazsKLQotCQkvKiBTZWUgaWYgcGFnZSBhbHJlYWR5 IGlzIGluIG1lbW9yeTsgaWYgbm90LCBwaWNrIHZpY3RpbSBzbG90ICovCi0JCXNsb3RubyA9IFNs cnVTZWxlY3RMUlVQYWdlKGN0bCwgcGFnZW5vKTsKLQotCQkvKiBEaWQgd2UgZmluZCB0aGUgcGFn ZSBpbiBtZW1vcnk/ICovCi0JCWlmIChzaGFyZWQtPnBhZ2VfbnVtYmVyW3Nsb3Rub10gPT0gcGFn ZW5vICYmCi0JCQlzaGFyZWQtPnBhZ2Vfc3RhdHVzW3Nsb3Rub10gIT0gU0xSVV9QQUdFX0VNUFRZ KQotCQl7Ci0JCQkvKgotCQkJICogSWYgcGFnZSBpcyBzdGlsbCBiZWluZyByZWFkIGluLCB3ZSBt dXN0IHdhaXQgZm9yIEkvTy4gIExpa2V3aXNlCi0JCQkgKiBpZiB0aGUgcGFnZSBpcyBiZWluZyB3 cml0dGVuIGFuZCB0aGUgY2FsbGVyIHNhaWQgdGhhdCdzIG5vdCBPSy4KLQkJCSAqLwotCQkJaWYg KHNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSA9PSBTTFJVX1BBR0VfUkVBRF9JTl9QUk9HUkVT UyB8fAotCQkJCShzaGFyZWQtPnBhZ2Vfc3RhdHVzW3Nsb3Rub10gPT0gU0xSVV9QQUdFX1dSSVRF X0lOX1BST0dSRVNTICYmCi0JCQkJICF3cml0ZV9vaykpCi0JCQl7Ci0JCQkJU2ltcGxlTHJ1V2Fp dElPKGN0bCwgc2xvdG5vKTsKLQkJCQkvKiBOb3cgd2UgbXVzdCByZWNoZWNrIHN0YXRlIGZyb20g dGhlIHRvcCAqLwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJLyogT3RoZXJ3aXNlLCBpdCdzIHJl YWR5IHRvIHVzZSAqLwotCQkJU2xydVJlY2VudGx5VXNlZChzaGFyZWQsIHNsb3Rubyk7Ci0KLQkJ CS8qIHVwZGF0ZSB0aGUgc3RhdHMgY291bnRlciBvZiBwYWdlcyBmb3VuZCBpbiB0aGUgU0xSVSAq LwotCQkJcGdzdGF0X2NvdW50X3NscnVfcGFnZV9oaXQoc2hhcmVkLT5zbHJ1X3N0YXRzX2lkeCk7 Ci0KLQkJCXJldHVybiBzbG90bm87Ci0JCX0KLQotCQkvKiBXZSBmb3VuZCBubyBtYXRjaDsgYXNz ZXJ0IHdlIHNlbGVjdGVkIGEgZnJlZWFibGUgc2xvdCAqLwotCQlBc3NlcnQoc2hhcmVkLT5wYWdl X3N0YXR1c1tzbG90bm9dID09IFNMUlVfUEFHRV9FTVBUWSB8fAotCQkJICAgKHNoYXJlZC0+cGFn ZV9zdGF0dXNbc2xvdG5vXSA9PSBTTFJVX1BBR0VfVkFMSUQgJiYKLQkJCQkhc2hhcmVkLT5wYWdl X2RpcnR5W3Nsb3Rub10pKTsKLQotCQkvKiBNYXJrIHRoZSBzbG90IHJlYWQtYnVzeSAqLwotCQlz aGFyZWQtPnBhZ2VfbnVtYmVyW3Nsb3Rub10gPSBwYWdlbm87Ci0JCXNoYXJlZC0+cGFnZV9zdGF0 dXNbc2xvdG5vXSA9IFNMUlVfUEFHRV9SRUFEX0lOX1BST0dSRVNTOwotCQlzaGFyZWQtPnBhZ2Vf ZGlydHlbc2xvdG5vXSA9IGZhbHNlOwotCi0JCS8qIEFjcXVpcmUgcGVyLWJ1ZmZlciBsb2NrIChj YW5ub3QgZGVhZGxvY2ssIHNlZSBub3RlcyBhdCB0b3ApICovCi0JCUxXTG9ja0FjcXVpcmUoJnNo YXJlZC0+YnVmZmVyX2xvY2tzW3Nsb3Rub10ubG9jaywgTFdfRVhDTFVTSVZFKTsKLQotCQkvKiBS ZWxlYXNlIGNvbnRyb2wgbG9jayB3aGlsZSBkb2luZyBJL08gKi8KLQkJTFdMb2NrUmVsZWFzZShz aGFyZWQtPkNvbnRyb2xMb2NrKTsKLQotCQkvKiBEbyB0aGUgcmVhZCAqLwotCQlvayA9IFNscnVQ aHlzaWNhbFJlYWRQYWdlKGN0bCwgcGFnZW5vLCBzbG90bm8pOwotCi0JCS8qIFNldCB0aGUgTFNO cyBmb3IgdGhpcyBuZXdseSByZWFkLWluIHBhZ2UgdG8gemVybyAqLwotCQlTaW1wbGVMcnVaZXJv TFNOcyhjdGwsIHNsb3Rubyk7Ci0KLQkJLyogUmUtYWNxdWlyZSBjb250cm9sIGxvY2sgYW5kIHVw ZGF0ZSBwYWdlIHN0YXRlICovCi0JCUxXTG9ja0FjcXVpcmUoc2hhcmVkLT5Db250cm9sTG9jaywg TFdfRVhDTFVTSVZFKTsKLQotCQlBc3NlcnQoc2hhcmVkLT5wYWdlX251bWJlcltzbG90bm9dID09 IHBhZ2VubyAmJgotCQkJICAgc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dID09IFNMUlVfUEFH RV9SRUFEX0lOX1BST0dSRVNTICYmCi0JCQkgICAhc2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Rub10p OwotCi0JCXNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSA9IG9rID8gU0xSVV9QQUdFX1ZBTElE IDogU0xSVV9QQUdFX0VNUFRZOwotCi0JCUxXTG9ja1JlbGVhc2UoJnNoYXJlZC0+YnVmZmVyX2xv Y2tzW3Nsb3Rub10ubG9jayk7Ci0KLQkJLyogTm93IGl0J3Mgb2theSB0byBlcmVwb3J0IGlmIHdl IGZhaWxlZCAqLwotCQlpZiAoIW9rKQotCQkJU2xydVJlcG9ydElPRXJyb3IoY3RsLCBwYWdlbm8s IHhpZCk7Ci0KLQkJU2xydVJlY2VudGx5VXNlZChzaGFyZWQsIHNsb3Rubyk7Ci0KLQkJLyogdXBk YXRlIHRoZSBzdGF0cyBjb3VudGVyIG9mIHBhZ2VzIG5vdCBmb3VuZCBpbiBTTFJVICovCi0JCXBn c3RhdF9jb3VudF9zbHJ1X3BhZ2VfcmVhZChzaGFyZWQtPnNscnVfc3RhdHNfaWR4KTsKLQotCQly ZXR1cm4gc2xvdG5vOwotCX0KLX0KLQotLyoKLSAqIEZpbmQgYSBwYWdlIGluIGEgc2hhcmVkIGJ1 ZmZlciwgcmVhZGluZyBpdCBpbiBpZiBuZWNlc3NhcnkuCi0gKiBUaGUgcGFnZSBudW1iZXIgbXVz dCBjb3JyZXNwb25kIHRvIGFuIGFscmVhZHktaW5pdGlhbGl6ZWQgcGFnZS4KLSAqIFRoZSBjYWxs ZXIgbXVzdCBpbnRlbmQgb25seSByZWFkLW9ubHkgYWNjZXNzIHRvIHRoZSBwYWdlLgotICoKLSAq IFRoZSBwYXNzZWQtaW4geGlkIGlzIHVzZWQgb25seSBmb3IgZXJyb3IgcmVwb3J0aW5nLCBhbmQg bWF5IGJlCi0gKiBJbnZhbGlkVHJhbnNhY3Rpb25JZCBpZiBubyBzcGVjaWZpYyB4aWQgaXMgYXNz b2NpYXRlZCB3aXRoIHRoZSBhY3Rpb24uCi0gKgotICogUmV0dXJuIHZhbHVlIGlzIHRoZSBzaGFy ZWQtYnVmZmVyIHNsb3QgbnVtYmVyIG5vdyBob2xkaW5nIHRoZSBwYWdlLgotICogVGhlIGJ1ZmZl cidzIExSVSBhY2Nlc3MgaW5mbyBpcyB1cGRhdGVkLgotICoKLSAqIENvbnRyb2wgbG9jayBtdXN0 IE5PVCBiZSBoZWxkIGF0IGVudHJ5LCBidXQgd2lsbCBiZSBoZWxkIGF0IGV4aXQuCi0gKiBJdCBp cyB1bnNwZWNpZmllZCB3aGV0aGVyIHRoZSBsb2NrIHdpbGwgYmUgc2hhcmVkIG9yIGV4Y2x1c2l2 ZS4KLSAqLwotaW50Ci1TaW1wbGVMcnVSZWFkUGFnZV9SZWFkT25seShTbHJ1Q3RsIGN0bCwgaW50 IHBhZ2VubywgVHJhbnNhY3Rpb25JZCB4aWQpCi17Ci0JU2xydVNoYXJlZAlzaGFyZWQgPSBjdGwt PnNoYXJlZDsKLQlpbnQJCQlzbG90bm87Ci0KLQkvKiBUcnkgdG8gZmluZCB0aGUgcGFnZSB3aGls ZSBob2xkaW5nIG9ubHkgc2hhcmVkIGxvY2sgKi8KLQlMV0xvY2tBY3F1aXJlKHNoYXJlZC0+Q29u dHJvbExvY2ssIExXX1NIQVJFRCk7Ci0KLQkvKiBTZWUgaWYgcGFnZSBpcyBhbHJlYWR5IGluIGEg YnVmZmVyICovCi0JZm9yIChzbG90bm8gPSAwOyBzbG90bm8gPCBzaGFyZWQtPm51bV9zbG90czsg c2xvdG5vKyspCi0JewotCQlpZiAoc2hhcmVkLT5wYWdlX251bWJlcltzbG90bm9dID09IHBhZ2Vu byAmJgotCQkJc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dICE9IFNMUlVfUEFHRV9FTVBUWSAm JgotCQkJc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dICE9IFNMUlVfUEFHRV9SRUFEX0lOX1BS T0dSRVNTKQotCQl7Ci0JCQkvKiBTZWUgY29tbWVudHMgZm9yIFNscnVSZWNlbnRseVVzZWQgbWFj cm8gKi8KLQkJCVNscnVSZWNlbnRseVVzZWQoc2hhcmVkLCBzbG90bm8pOwotCi0JCQkvKiB1cGRh dGUgdGhlIHN0YXRzIGNvdW50ZXIgb2YgcGFnZXMgZm91bmQgaW4gdGhlIFNMUlUgKi8KLQkJCXBn c3RhdF9jb3VudF9zbHJ1X3BhZ2VfaGl0KHNoYXJlZC0+c2xydV9zdGF0c19pZHgpOwotCi0JCQly ZXR1cm4gc2xvdG5vOwotCQl9Ci0JfQotCi0JLyogTm8gbHVjaywgc28gc3dpdGNoIHRvIG5vcm1h bCBleGNsdXNpdmUgbG9jayBhbmQgZG8gcmVndWxhciByZWFkICovCi0JTFdMb2NrUmVsZWFzZShz aGFyZWQtPkNvbnRyb2xMb2NrKTsKLQlMV0xvY2tBY3F1aXJlKHNoYXJlZC0+Q29udHJvbExvY2ss IExXX0VYQ0xVU0lWRSk7Ci0KLQlyZXR1cm4gU2ltcGxlTHJ1UmVhZFBhZ2UoY3RsLCBwYWdlbm8s IHRydWUsIHhpZCk7Ci19Ci0KLS8qCi0gKiBXcml0ZSBhIHBhZ2UgZnJvbSBhIHNoYXJlZCBidWZm ZXIsIGlmIG5lY2Vzc2FyeS4KLSAqIERvZXMgbm90aGluZyBpZiB0aGUgc3BlY2lmaWVkIHNsb3Qg aXMgbm90IGRpcnR5LgotICoKLSAqIE5PVEU6IG9ubHkgb25lIHdyaXRlIGF0dGVtcHQgaXMgbWFk ZSBoZXJlLiAgSGVuY2UsIGl0IGlzIHBvc3NpYmxlIHRoYXQKLSAqIHRoZSBwYWdlIGlzIHN0aWxs IGRpcnR5IGF0IGV4aXQgKGlmIHNvbWVvbmUgZWxzZSByZS1kaXJ0aWVkIGl0IGR1cmluZwotICog dGhlIHdyaXRlKS4gIEhvd2V2ZXIsIHdlICpkbyogYXR0ZW1wdCBhIGZyZXNoIHdyaXRlIGV2ZW4g aWYgdGhlIHBhZ2UKLSAqIGlzIGFscmVhZHkgYmVpbmcgd3JpdHRlbjsgdGhpcyBpcyBmb3IgY2hl Y2twb2ludHMuCi0gKgotICogQ29udHJvbCBsb2NrIG11c3QgYmUgaGVsZCBhdCBlbnRyeSwgYW5k IHdpbGwgYmUgaGVsZCBhdCBleGl0LgotICovCi1zdGF0aWMgdm9pZAotU2xydUludGVybmFsV3Jp dGVQYWdlKFNscnVDdGwgY3RsLCBpbnQgc2xvdG5vLCBTbHJ1V3JpdGVBbGwgZmRhdGEpCi17Ci0J U2xydVNoYXJlZAlzaGFyZWQgPSBjdGwtPnNoYXJlZDsKLQlpbnQJCQlwYWdlbm8gPSBzaGFyZWQt PnBhZ2VfbnVtYmVyW3Nsb3Rub107Ci0JYm9vbAkJb2s7Ci0KLQkvKiBJZiBhIHdyaXRlIGlzIGlu IHByb2dyZXNzLCB3YWl0IGZvciBpdCB0byBmaW5pc2ggKi8KLQl3aGlsZSAoc2hhcmVkLT5wYWdl X3N0YXR1c1tzbG90bm9dID09IFNMUlVfUEFHRV9XUklURV9JTl9QUk9HUkVTUyAmJgotCQkgICBz aGFyZWQtPnBhZ2VfbnVtYmVyW3Nsb3Rub10gPT0gcGFnZW5vKQotCXsKLQkJU2ltcGxlTHJ1V2Fp dElPKGN0bCwgc2xvdG5vKTsKLQl9Ci0KLQkvKgotCSAqIERvIG5vdGhpbmcgaWYgcGFnZSBpcyBu b3QgZGlydHksIG9yIGlmIGJ1ZmZlciBubyBsb25nZXIgY29udGFpbnMgdGhlCi0JICogc2FtZSBw YWdlIHdlIHdlcmUgY2FsbGVkIGZvci4KLQkgKi8KLQlpZiAoIXNoYXJlZC0+cGFnZV9kaXJ0eVtz bG90bm9dIHx8Ci0JCXNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSAhPSBTTFJVX1BBR0VfVkFM SUQgfHwKLQkJc2hhcmVkLT5wYWdlX251bWJlcltzbG90bm9dICE9IHBhZ2VubykKLQkJcmV0dXJu OwotCi0JLyoKLQkgKiBNYXJrIHRoZSBzbG90IHdyaXRlLWJ1c3ksIGFuZCBjbGVhciB0aGUgZGly dHliaXQuICBBZnRlciB0aGlzIHBvaW50LCBhCi0JICogdHJhbnNhY3Rpb24gc3RhdHVzIHVwZGF0 ZSBvbiB0aGlzIHBhZ2Ugd2lsbCBtYXJrIGl0IGRpcnR5IGFnYWluLgotCSAqLwotCXNoYXJlZC0+ cGFnZV9zdGF0dXNbc2xvdG5vXSA9IFNMUlVfUEFHRV9XUklURV9JTl9QUk9HUkVTUzsKLQlzaGFy ZWQtPnBhZ2VfZGlydHlbc2xvdG5vXSA9IGZhbHNlOwotCi0JLyogQWNxdWlyZSBwZXItYnVmZmVy IGxvY2sgKGNhbm5vdCBkZWFkbG9jaywgc2VlIG5vdGVzIGF0IHRvcCkgKi8KLQlMV0xvY2tBY3F1 aXJlKCZzaGFyZWQtPmJ1ZmZlcl9sb2Nrc1tzbG90bm9dLmxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0K LQkvKiBSZWxlYXNlIGNvbnRyb2wgbG9jayB3aGlsZSBkb2luZyBJL08gKi8KLQlMV0xvY2tSZWxl YXNlKHNoYXJlZC0+Q29udHJvbExvY2spOwotCi0JLyogRG8gdGhlIHdyaXRlICovCi0Jb2sgPSBT bHJ1UGh5c2ljYWxXcml0ZVBhZ2UoY3RsLCBwYWdlbm8sIHNsb3RubywgZmRhdGEpOwotCi0JLyog SWYgd2UgZmFpbGVkLCBhbmQgd2UncmUgaW4gYSBmbHVzaCwgYmV0dGVyIGNsb3NlIHRoZSBmaWxl cyAqLwotCWlmICghb2sgJiYgZmRhdGEpCi0JewotCQlpbnQJCQlpOwotCi0JCWZvciAoaSA9IDA7 IGkgPCBmZGF0YS0+bnVtX2ZpbGVzOyBpKyspCi0JCQlDbG9zZVRyYW5zaWVudEZpbGUoZmRhdGEt PmZkW2ldKTsKLQl9Ci0KLQkvKiBSZS1hY3F1aXJlIGNvbnRyb2wgbG9jayBhbmQgdXBkYXRlIHBh Z2Ugc3RhdGUgKi8KLQlMV0xvY2tBY3F1aXJlKHNoYXJlZC0+Q29udHJvbExvY2ssIExXX0VYQ0xV U0lWRSk7Ci0KLQlBc3NlcnQoc2hhcmVkLT5wYWdlX251bWJlcltzbG90bm9dID09IHBhZ2VubyAm JgotCQkgICBzaGFyZWQtPnBhZ2Vfc3RhdHVzW3Nsb3Rub10gPT0gU0xSVV9QQUdFX1dSSVRFX0lO X1BST0dSRVNTKTsKLQotCS8qIElmIHdlIGZhaWxlZCB0byB3cml0ZSwgbWFyayB0aGUgcGFnZSBk aXJ0eSBhZ2FpbiAqLwotCWlmICghb2spCi0JCXNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90bm9dID0g dHJ1ZTsKLQotCXNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSA9IFNMUlVfUEFHRV9WQUxJRDsK LQotCUxXTG9ja1JlbGVhc2UoJnNoYXJlZC0+YnVmZmVyX2xvY2tzW3Nsb3Rub10ubG9jayk7Ci0K LQkvKiBOb3cgaXQncyBva2F5IHRvIGVyZXBvcnQgaWYgd2UgZmFpbGVkICovCi0JaWYgKCFvaykK LQkJU2xydVJlcG9ydElPRXJyb3IoY3RsLCBwYWdlbm8sIEludmFsaWRUcmFuc2FjdGlvbklkKTsK LQotCS8qIElmIHBhcnQgb2YgYSBjaGVja3BvaW50LCBjb3VudCB0aGlzIGFzIGEgYnVmZmVyIHdy aXR0ZW4uICovCi0JaWYgKGZkYXRhKQotCQlDaGVja3BvaW50U3RhdHMuY2twdF9idWZzX3dyaXR0 ZW4rKzsKLX0KLQotLyoKLSAqIFdyYXBwZXIgb2YgU2xydUludGVybmFsV3JpdGVQYWdlLCBmb3Ig ZXh0ZXJuYWwgY2FsbGVycy4KLSAqIGZkYXRhIGlzIGFsd2F5cyBwYXNzZWQgYSBOVUxMIGhlcmUu Ci0gKi8KLXZvaWQKLVNpbXBsZUxydVdyaXRlUGFnZShTbHJ1Q3RsIGN0bCwgaW50IHNsb3RubykK LXsKLQlTbHJ1SW50ZXJuYWxXcml0ZVBhZ2UoY3RsLCBzbG90bm8sIE5VTEwpOwotfQorc3RhdGlj IHZvaWQgU2xydUludGVybmFsRGVsZXRlU2VnbWVudChpbnQgc2xydV9pZCwgaW50IHNlZ25vKTsK IAogLyoKICAqIFJldHVybiB3aGV0aGVyIHRoZSBnaXZlbiBwYWdlIGV4aXN0cyBvbiBkaXNrLgpA QCAtNjI0LDU5MiArNjQsMjQgQEAgU2ltcGxlTHJ1V3JpdGVQYWdlKFNscnVDdGwgY3RsLCBpbnQg c2xvdG5vKQogICogbGFyZ2UgZW5vdWdoIHRvIGNvbnRhaW4gdGhlIGdpdmVuIHBhZ2UuCiAgKi8K IGJvb2wKLVNpbXBsZUxydURvZXNQaHlzaWNhbFBhZ2VFeGlzdChTbHJ1Q3RsIGN0bCwgaW50IHBh Z2VubykKLXsKLQlpbnQJCQlzZWdubyA9IHBhZ2VubyAvIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQ7 Ci0JaW50CQkJcnBhZ2VubyA9IHBhZ2VubyAlIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQ7Ci0JaW50 CQkJb2Zmc2V0ID0gcnBhZ2VubyAqIEJMQ0tTWjsKLQljaGFyCQlwYXRoW01BWFBHUEFUSF07Ci0J aW50CQkJZmQ7Ci0JYm9vbAkJcmVzdWx0OwotCW9mZl90CQllbmRwb3M7Ci0KLQkvKiB1cGRhdGUg dGhlIHN0YXRzIGNvdW50ZXIgb2YgY2hlY2tlZCBwYWdlcyAqLwotCXBnc3RhdF9jb3VudF9zbHJ1 X3BhZ2VfZXhpc3RzKGN0bC0+c2hhcmVkLT5zbHJ1X3N0YXRzX2lkeCk7Ci0KLQlTbHJ1RmlsZU5h bWUoY3RsLCBwYXRoLCBzZWdubyk7Ci0KLQlmZCA9IE9wZW5UcmFuc2llbnRGaWxlKHBhdGgsIE9f UkRPTkxZIHwgUEdfQklOQVJZKTsKLQlpZiAoZmQgPCAwKQotCXsKLQkJLyogZXhwZWN0ZWQ6IGZp bGUgZG9lc24ndCBleGlzdCAqLwotCQlpZiAoZXJybm8gPT0gRU5PRU5UKQotCQkJcmV0dXJuIGZh bHNlOwotCi0JCS8qIHJlcG9ydCBlcnJvciBub3JtYWxseSAqLwotCQlzbHJ1X2VycmNhdXNlID0g U0xSVV9PUEVOX0ZBSUxFRDsKLQkJc2xydV9lcnJubyA9IGVycm5vOwotCQlTbHJ1UmVwb3J0SU9F cnJvcihjdGwsIHBhZ2VubywgMCk7Ci0JfQotCi0JaWYgKChlbmRwb3MgPSBsc2VlayhmZCwgMCwg U0VFS19FTkQpKSA8IDApCi0JewotCQlzbHJ1X2VycmNhdXNlID0gU0xSVV9TRUVLX0ZBSUxFRDsK LQkJc2xydV9lcnJubyA9IGVycm5vOwotCQlTbHJ1UmVwb3J0SU9FcnJvcihjdGwsIHBhZ2Vubywg MCk7Ci0JfQotCi0JcmVzdWx0ID0gZW5kcG9zID49IChvZmZfdCkgKG9mZnNldCArIEJMQ0tTWik7 Ci0KLQlpZiAoQ2xvc2VUcmFuc2llbnRGaWxlKGZkKSAhPSAwKQotCXsKLQkJc2xydV9lcnJjYXVz ZSA9IFNMUlVfQ0xPU0VfRkFJTEVEOwotCQlzbHJ1X2Vycm5vID0gZXJybm87Ci0JCXJldHVybiBm YWxzZTsKLQl9Ci0KLQlyZXR1cm4gcmVzdWx0OwotfQotCi0vKgotICogUGh5c2ljYWwgcmVhZCBv ZiBhIChwcmV2aW91c2x5IGV4aXN0aW5nKSBwYWdlIGludG8gYSBidWZmZXIgc2xvdAotICoKLSAq IE9uIGZhaWx1cmUsIHdlIGNhbm5vdCBqdXN0IGVyZXBvcnQoRVJST1IpIHNpbmNlIGNhbGxlciBo YXMgcHV0IHN0YXRlIGluCi0gKiBzaGFyZWQgbWVtb3J5IHRoYXQgbXVzdCBiZSB1bmRvbmUuICBT bywgd2UgcmV0dXJuIGZhbHNlIGFuZCBzYXZlIGVub3VnaAotICogaW5mbyBpbiBzdGF0aWMgdmFy aWFibGVzIHRvIGxldCBTbHJ1UmVwb3J0SU9FcnJvciBtYWtlIHRoZSByZXBvcnQuCi0gKgotICog Rm9yIG5vdywgYXNzdW1lIGl0J3Mgbm90IHdvcnRoIGtlZXBpbmcgYSBmaWxlIHBvaW50ZXIgb3Bl biBhY3Jvc3MKLSAqIHJlYWQvd3JpdGUgb3BlcmF0aW9ucy4gIFdlIGNvdWxkIGNhY2hlIG9uZSB2 aXJ0dWFsIGZpbGUgcG9pbnRlciAuLi4KLSAqLwotc3RhdGljIGJvb2wKLVNscnVQaHlzaWNhbFJl YWRQYWdlKFNscnVDdGwgY3RsLCBpbnQgcGFnZW5vLCBpbnQgc2xvdG5vKQotewotCVNscnVTaGFy ZWQJc2hhcmVkID0gY3RsLT5zaGFyZWQ7Ci0JaW50CQkJc2Vnbm8gPSBwYWdlbm8gLyBTTFJVX1BB R0VTX1BFUl9TRUdNRU5UOwotCWludAkJCXJwYWdlbm8gPSBwYWdlbm8gJSBTTFJVX1BBR0VTX1BF Ul9TRUdNRU5UOwotCW9mZl90CQlvZmZzZXQgPSBycGFnZW5vICogQkxDS1NaOwotCWNoYXIJCXBh dGhbTUFYUEdQQVRIXTsKLQlpbnQJCQlmZDsKLQotCVNscnVGaWxlTmFtZShjdGwsIHBhdGgsIHNl Z25vKTsKLQotCS8qCi0JICogSW4gYSBjcmFzaC1hbmQtcmVzdGFydCBzaXR1YXRpb24sIGl0J3Mg cG9zc2libGUgZm9yIHVzIHRvIHJlY2VpdmUKLQkgKiBjb21tYW5kcyB0byBzZXQgdGhlIGNvbW1p dCBzdGF0dXMgb2YgdHJhbnNhY3Rpb25zIHdob3NlIGJpdHMgYXJlIGluCi0JICogYWxyZWFkeS10 cnVuY2F0ZWQgc2VnbWVudHMgb2YgdGhlIGNvbW1pdCBsb2cgKHNlZSBub3RlcyBpbgotCSAqIFNs cnVQaHlzaWNhbFdyaXRlUGFnZSkuICBIZW5jZSwgaWYgd2UgYXJlIEluUmVjb3ZlcnksIGFsbG93 IHRoZSBjYXNlCi0JICogd2hlcmUgdGhlIGZpbGUgZG9lc24ndCBleGlzdCwgYW5kIHJldHVybiB6 ZXJvZXMgaW5zdGVhZC4KLQkgKi8KLQlmZCA9IE9wZW5UcmFuc2llbnRGaWxlKHBhdGgsIE9fUkRP TkxZIHwgUEdfQklOQVJZKTsKLQlpZiAoZmQgPCAwKQotCXsKLQkJaWYgKGVycm5vICE9IEVOT0VO VCB8fCAhSW5SZWNvdmVyeSkKLQkJewotCQkJc2xydV9lcnJjYXVzZSA9IFNMUlVfT1BFTl9GQUlM RUQ7Ci0JCQlzbHJ1X2Vycm5vID0gZXJybm87Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQotCQll cmVwb3J0KExPRywKLQkJCQkoZXJybXNnKCJmaWxlIFwiJXNcIiBkb2Vzbid0IGV4aXN0LCByZWFk aW5nIGFzIHplcm9lcyIsCi0JCQkJCQlwYXRoKSkpOwotCQlNZW1TZXQoc2hhcmVkLT5wYWdlX2J1 ZmZlcltzbG90bm9dLCAwLCBCTENLU1opOwotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQllcnJubyA9 IDA7Ci0JcGdzdGF0X3JlcG9ydF93YWl0X3N0YXJ0KFdBSVRfRVZFTlRfU0xSVV9SRUFEKTsKLQlp ZiAocGdfcHJlYWQoZmQsIHNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXSwgQkxDS1NaLCBvZmZz ZXQpICE9IEJMQ0tTWikKLQl7Ci0JCXBnc3RhdF9yZXBvcnRfd2FpdF9lbmQoKTsKLQkJc2xydV9l cnJjYXVzZSA9IFNMUlVfUkVBRF9GQUlMRUQ7Ci0JCXNscnVfZXJybm8gPSBlcnJubzsKLQkJQ2xv c2VUcmFuc2llbnRGaWxlKGZkKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQlwZ3N0YXRfcmVwb3J0 X3dhaXRfZW5kKCk7Ci0KLQlpZiAoQ2xvc2VUcmFuc2llbnRGaWxlKGZkKSAhPSAwKQotCXsKLQkJ c2xydV9lcnJjYXVzZSA9IFNMUlVfQ0xPU0VfRkFJTEVEOwotCQlzbHJ1X2Vycm5vID0gZXJybm87 Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotLyoKLSAqIFBoeXNp Y2FsIHdyaXRlIG9mIGEgcGFnZSBmcm9tIGEgYnVmZmVyIHNsb3QKLSAqCi0gKiBPbiBmYWlsdXJl LCB3ZSBjYW5ub3QganVzdCBlcmVwb3J0KEVSUk9SKSBzaW5jZSBjYWxsZXIgaGFzIHB1dCBzdGF0 ZSBpbgotICogc2hhcmVkIG1lbW9yeSB0aGF0IG11c3QgYmUgdW5kb25lLiAgU28sIHdlIHJldHVy biBmYWxzZSBhbmQgc2F2ZSBlbm91Z2gKLSAqIGluZm8gaW4gc3RhdGljIHZhcmlhYmxlcyB0byBs ZXQgU2xydVJlcG9ydElPRXJyb3IgbWFrZSB0aGUgcmVwb3J0LgotICoKLSAqIEZvciBub3csIGFz c3VtZSBpdCdzIG5vdCB3b3J0aCBrZWVwaW5nIGEgZmlsZSBwb2ludGVyIG9wZW4gYWNyb3NzCi0g KiBpbmRlcGVuZGVudCByZWFkL3dyaXRlIG9wZXJhdGlvbnMuICBXZSBkbyBiYXRjaCBvcGVyYXRp b25zIGR1cmluZwotICogU2ltcGxlTHJ1V3JpdGVBbGwsIHRob3VnaC4KLSAqCi0gKiBmZGF0YSBp cyBOVUxMIGZvciBhIHN0YW5kYWxvbmUgd3JpdGUsIHBvaW50ZXIgdG8gb3Blbi1maWxlIGluZm8g ZHVyaW5nCi0gKiBTaW1wbGVMcnVXcml0ZUFsbC4KLSAqLwotc3RhdGljIGJvb2wKLVNscnVQaHlz aWNhbFdyaXRlUGFnZShTbHJ1Q3RsIGN0bCwgaW50IHBhZ2VubywgaW50IHNsb3RubywgU2xydVdy aXRlQWxsIGZkYXRhKQorU2ltcGxlTHJ1RG9lc1BoeXNpY2FsUGFnZUV4aXN0KGludCBzbHJ1X2lk LCBpbnQgcGFnZW5vKQogewotCVNscnVTaGFyZWQJc2hhcmVkID0gY3RsLT5zaGFyZWQ7CiAJaW50 CQkJc2Vnbm8gPSBwYWdlbm8gLyBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UOwogCWludAkJCXJwYWdl bm8gPSBwYWdlbm8gJSBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UOwogCW9mZl90CQlvZmZzZXQgPSBy cGFnZW5vICogQkxDS1NaOwotCWNoYXIJCXBhdGhbTUFYUEdQQVRIXTsKLQlpbnQJCQlmZCA9IC0x OwotCi0JLyogdXBkYXRlIHRoZSBzdGF0cyBjb3VudGVyIG9mIHdyaXR0ZW4gcGFnZXMgKi8KLQlw Z3N0YXRfY291bnRfc2xydV9wYWdlX3dyaXR0ZW4oc2hhcmVkLT5zbHJ1X3N0YXRzX2lkeCk7Ci0K LQkvKgotCSAqIEhvbm9yIHRoZSB3cml0ZS1XQUwtYmVmb3JlLWRhdGEgcnVsZSwgaWYgYXBwcm9w cmlhdGUsIHNvIHRoYXQgd2UgZG8gbm90Ci0JICogd3JpdGUgb3V0IGRhdGEgYmVmb3JlIGFzc29j aWF0ZWQgV0FMIHJlY29yZHMuICBUaGlzIGlzIHRoZSBzYW1lIGFjdGlvbgotCSAqIHBlcmZvcm1l ZCBkdXJpbmcgRmx1c2hCdWZmZXIoKSBpbiB0aGUgbWFpbiBidWZmZXIgbWFuYWdlci4KLQkgKi8K LQlpZiAoc2hhcmVkLT5ncm91cF9sc24gIT0gTlVMTCkKLQl7Ci0JCS8qCi0JCSAqIFdlIG11c3Qg ZGV0ZXJtaW5lIHRoZSBsYXJnZXN0IGFzeW5jLWNvbW1pdCBMU04gZm9yIHRoZSBwYWdlLiBUaGlz Ci0JCSAqIGlzIGEgYml0IHRlZGlvdXMsIGJ1dCBzaW5jZSB0aGlzIGVudGlyZSBmdW5jdGlvbiBp cyBhIHNsb3cgcGF0aAotCQkgKiBhbnl3YXksIGl0IHNlZW1zIGJldHRlciB0byBkbyB0aGlzIGhl cmUgdGhhbiB0byBtYWludGFpbiBhIHBlci1wYWdlCi0JCSAqIExTTiB2YXJpYWJsZSAod2hpY2gn ZCBuZWVkIGFuIGV4dHJhIGNvbXBhcmlzb24gaW4gdGhlCi0JCSAqIHRyYW5zYWN0aW9uLWNvbW1p dCBwYXRoKS4KLQkJICovCi0JCVhMb2dSZWNQdHIJbWF4X2xzbjsKLQkJaW50CQkJbHNuaW5kZXgs Ci0JCQkJCWxzbm9mZjsKLQotCQlsc25pbmRleCA9IHNsb3RubyAqIHNoYXJlZC0+bHNuX2dyb3Vw c19wZXJfcGFnZTsKLQkJbWF4X2xzbiA9IHNoYXJlZC0+Z3JvdXBfbHNuW2xzbmluZGV4KytdOwot CQlmb3IgKGxzbm9mZiA9IDE7IGxzbm9mZiA8IHNoYXJlZC0+bHNuX2dyb3Vwc19wZXJfcGFnZTsg bHNub2ZmKyspCi0JCXsKLQkJCVhMb2dSZWNQdHIJdGhpc19sc24gPSBzaGFyZWQtPmdyb3VwX2xz bltsc25pbmRleCsrXTsKLQotCQkJaWYgKG1heF9sc24gPCB0aGlzX2xzbikKLQkJCQltYXhfbHNu ID0gdGhpc19sc247Ci0JCX0KLQotCQlpZiAoIVhMb2dSZWNQdHJJc0ludmFsaWQobWF4X2xzbikp Ci0JCXsKLQkJCS8qCi0JCQkgKiBBcyBub3RlZCBhYm92ZSwgZWxvZyhFUlJPUikgaXMgbm90IGFj Y2VwdGFibGUgaGVyZSwgc28gaWYKLQkJCSAqIFhMb2dGbHVzaCB3ZXJlIHRvIGZhaWwsIHdlIG11 c3QgUEFOSUMuICBUaGlzIGlzbid0IG11Y2ggb2YgYQotCQkJICogcmVzdHJpY3Rpb24gYmVjYXVz ZSBYTG9nRmx1c2ggaXMganVzdCBhYm91dCBhbGwgY3JpdGljYWwKLQkJCSAqIHNlY3Rpb24gYW55 d2F5LCBidXQgbGV0J3MgbWFrZSBzdXJlLgotCQkJICovCi0JCQlTVEFSVF9DUklUX1NFQ1RJT04o KTsKLQkJCVhMb2dGbHVzaChtYXhfbHNuKTsKLQkJCUVORF9DUklUX1NFQ1RJT04oKTsKLQkJfQot CX0KLQotCS8qCi0JICogRHVyaW5nIGEgV3JpdGVBbGwsIHdlIG1heSBhbHJlYWR5IGhhdmUgdGhl IGRlc2lyZWQgZmlsZSBvcGVuLgotCSAqLwotCWlmIChmZGF0YSkKLQl7Ci0JCWludAkJCWk7Ci0K LQkJZm9yIChpID0gMDsgaSA8IGZkYXRhLT5udW1fZmlsZXM7IGkrKykKLQkJewotCQkJaWYgKGZk YXRhLT5zZWdub1tpXSA9PSBzZWdubykKLQkJCXsKLQkJCQlmZCA9IGZkYXRhLT5mZFtpXTsKLQkJ CQlicmVhazsKLQkJCX0KLQkJfQotCX0KLQotCWlmIChmZCA8IDApCi0JewotCQkvKgotCQkgKiBJ ZiB0aGUgZmlsZSBkb2Vzbid0IGFscmVhZHkgZXhpc3QsIHdlIHNob3VsZCBjcmVhdGUgaXQuICBJ dCBpcwotCQkgKiBwb3NzaWJsZSBmb3IgdGhpcyB0byBuZWVkIHRvIGhhcHBlbiB3aGVuIHdyaXRp bmcgYSBwYWdlIHRoYXQncyBub3QKLQkJICogZmlyc3QgaW4gaXRzIHNlZ21lbnQ7IHdlIGFzc3Vt ZSB0aGUgT1MgY2FuIGNvcGUgd2l0aCB0aGF0LiAoTm90ZToKLQkJICogaXQgbWlnaHQgc2VlbSB0 aGF0IGl0J2QgYmUgb2theSB0byBjcmVhdGUgZmlsZXMgb25seSB3aGVuCi0JCSAqIFNpbXBsZUxy dVplcm9QYWdlIGlzIGNhbGxlZCBmb3IgdGhlIGZpcnN0IHBhZ2Ugb2YgYSBzZWdtZW50LgotCQkg KiBIb3dldmVyLCBpZiBhZnRlciBhIGNyYXNoIGFuZCByZXN0YXJ0IHRoZSBSRURPIGxvZ2ljIGVs ZWN0cyB0bwotCQkgKiByZXBsYXkgdGhlIGxvZyBmcm9tIGEgY2hlY2twb2ludCBiZWZvcmUgdGhl IGxhdGVzdCBvbmUsIHRoZW4gaXQncwotCQkgKiBwb3NzaWJsZSB0aGF0IHdlIHdpbGwgZ2V0IGNv bW1hbmRzIHRvIHNldCB0cmFuc2FjdGlvbiBzdGF0dXMgb2YKLQkJICogdHJhbnNhY3Rpb25zIHRo YXQgaGF2ZSBhbHJlYWR5IGJlZW4gdHJ1bmNhdGVkIGZyb20gdGhlIGNvbW1pdCBsb2cuCi0JCSAq IEVhc2llc3Qgd2F5IHRvIGRlYWwgd2l0aCB0aGF0IGlzIHRvIGFjY2VwdCByZWZlcmVuY2VzIHRv Ci0JCSAqIG5vbmV4aXN0ZW50IGZpbGVzIGhlcmUgYW5kIGluIFNscnVQaHlzaWNhbFJlYWRQYWdl LikKLQkJICoKLQkJICogTm90ZTogaXQgaXMgcG9zc2libGUgZm9yIG1vcmUgdGhhbiBvbmUgYmFj a2VuZCB0byBiZSBleGVjdXRpbmcgdGhpcwotCQkgKiBjb2RlIHNpbXVsdGFuZW91c2x5IGZvciBk aWZmZXJlbnQgcGFnZXMgb2YgdGhlIHNhbWUgZmlsZS4gSGVuY2UsCi0JCSAqIGRvbid0IHVzZSBP X0VYQ0wgb3IgT19UUlVOQyBvciBhbnl0aGluZyBsaWtlIHRoYXQuCi0JCSAqLwotCQlTbHJ1Rmls ZU5hbWUoY3RsLCBwYXRoLCBzZWdubyk7Ci0JCWZkID0gT3BlblRyYW5zaWVudEZpbGUocGF0aCwg T19SRFdSIHwgT19DUkVBVCB8IFBHX0JJTkFSWSk7Ci0JCWlmIChmZCA8IDApCi0JCXsKLQkJCXNs cnVfZXJyY2F1c2UgPSBTTFJVX09QRU5fRkFJTEVEOwotCQkJc2xydV9lcnJubyA9IGVycm5vOwot CQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0KLQkJaWYgKGZkYXRhKQotCQl7Ci0JCQlpZiAoZmRhdGEt Pm51bV9maWxlcyA8IE1BWF9XUklURUFMTF9CVUZGRVJTKQotCQkJewotCQkJCWZkYXRhLT5mZFtm ZGF0YS0+bnVtX2ZpbGVzXSA9IGZkOwotCQkJCWZkYXRhLT5zZWdub1tmZGF0YS0+bnVtX2ZpbGVz XSA9IHNlZ25vOwotCQkJCWZkYXRhLT5udW1fZmlsZXMrKzsKLQkJCX0KLQkJCWVsc2UKLQkJCXsK LQkJCQkvKgotCQkJCSAqIEluIHRoZSB1bmxpa2VseSBldmVudCB0aGF0IHdlIGV4Y2VlZCBNQVhf RkxVU0hfQlVGRkVSUywKLQkJCQkgKiBmYWxsIGJhY2sgdG8gdHJlYXRpbmcgaXQgYXMgYSBzdGFu ZGFsb25lIHdyaXRlLgotCQkJCSAqLwotCQkJCWZkYXRhID0gTlVMTDsKLQkJCX0KLQkJfQotCX0K LQotCWVycm5vID0gMDsKLQlwZ3N0YXRfcmVwb3J0X3dhaXRfc3RhcnQoV0FJVF9FVkVOVF9TTFJV X1dSSVRFKTsKLQlpZiAocGdfcHdyaXRlKGZkLCBzaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub10s IEJMQ0tTWiwgb2Zmc2V0KSAhPSBCTENLU1opCi0JewotCQlwZ3N0YXRfcmVwb3J0X3dhaXRfZW5k KCk7Ci0JCS8qIGlmIHdyaXRlIGRpZG4ndCBzZXQgZXJybm8sIGFzc3VtZSBwcm9ibGVtIGlzIG5v IGRpc2sgc3BhY2UgKi8KLQkJaWYgKGVycm5vID09IDApCi0JCQllcnJubyA9IEVOT1NQQzsKLQkJ c2xydV9lcnJjYXVzZSA9IFNMUlVfV1JJVEVfRkFJTEVEOwotCQlzbHJ1X2Vycm5vID0gZXJybm87 Ci0JCWlmICghZmRhdGEpCi0JCQlDbG9zZVRyYW5zaWVudEZpbGUoZmQpOwotCQlyZXR1cm4gZmFs c2U7Ci0JfQotCXBnc3RhdF9yZXBvcnRfd2FpdF9lbmQoKTsKLQotCS8qIFF1ZXVlIHVwIGEgc3lu YyByZXF1ZXN0IGZvciB0aGUgY2hlY2twb2ludGVyLiAqLwotCWlmIChjdGwtPnN5bmNfaGFuZGxl ciAhPSBTWU5DX0hBTkRMRVJfTk9ORSkKLQl7Ci0JCUZpbGVUYWcJCXRhZzsKLQotCQlJTklUX1NM UlVGSUxFVEFHKHRhZywgY3RsLT5zeW5jX2hhbmRsZXIsIHNlZ25vKTsKLQkJaWYgKCFSZWdpc3Rl clN5bmNSZXF1ZXN0KCZ0YWcsIFNZTkNfUkVRVUVTVCwgZmFsc2UpKQotCQl7Ci0JCQkvKiBObyBz cGFjZSB0byBlbnF1ZXVlIHN5bmMgcmVxdWVzdC4gIERvIGl0IHN5bmNocm9ub3VzbHkuICovCi0J CQlwZ3N0YXRfcmVwb3J0X3dhaXRfc3RhcnQoV0FJVF9FVkVOVF9TTFJVX1NZTkMpOwotCQkJaWYg KHBnX2ZzeW5jKGZkKSAhPSAwKQotCQkJewotCQkJCXBnc3RhdF9yZXBvcnRfd2FpdF9lbmQoKTsK LQkJCQlzbHJ1X2VycmNhdXNlID0gU0xSVV9GU1lOQ19GQUlMRUQ7Ci0JCQkJc2xydV9lcnJubyA9 IGVycm5vOwotCQkJCUNsb3NlVHJhbnNpZW50RmlsZShmZCk7Ci0JCQkJcmV0dXJuIGZhbHNlOwot CQkJfQotCQkJcGdzdGF0X3JlcG9ydF93YWl0X2VuZCgpOwotCQl9Ci0JfQotCi0JLyogQ2xvc2Ug ZmlsZSwgdW5sZXNzIHBhcnQgb2YgZmx1c2ggcmVxdWVzdC4gKi8KLQlpZiAoIWZkYXRhKQotCXsK LQkJaWYgKENsb3NlVHJhbnNpZW50RmlsZShmZCkgIT0gMCkKLQkJewotCQkJc2xydV9lcnJjYXVz ZSA9IFNMUlVfQ0xPU0VfRkFJTEVEOwotCQkJc2xydV9lcnJubyA9IGVycm5vOwotCQkJcmV0dXJu IGZhbHNlOwotCQl9Ci0JfQotCi0JcmV0dXJuIHRydWU7Ci19Ci0KLS8qCi0gKiBJc3N1ZSB0aGUg ZXJyb3IgbWVzc2FnZSBhZnRlciBmYWlsdXJlIG9mIFNscnVQaHlzaWNhbFJlYWRQYWdlIG9yCi0g KiBTbHJ1UGh5c2ljYWxXcml0ZVBhZ2UuICBDYWxsIHRoaXMgYWZ0ZXIgY2xlYW5pbmcgdXAgc2hh cmVkLW1lbW9yeSBzdGF0ZS4KLSAqLwotc3RhdGljIHZvaWQKLVNscnVSZXBvcnRJT0Vycm9yKFNs cnVDdGwgY3RsLCBpbnQgcGFnZW5vLCBUcmFuc2FjdGlvbklkIHhpZCkKLXsKLQlpbnQJCQlzZWdu byA9IHBhZ2VubyAvIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQ7Ci0JaW50CQkJcnBhZ2VubyA9IHBh Z2VubyAlIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQ7Ci0JaW50CQkJb2Zmc2V0ID0gcnBhZ2VubyAq IEJMQ0tTWjsKLQljaGFyCQlwYXRoW01BWFBHUEFUSF07Ci0KLQlTbHJ1RmlsZU5hbWUoY3RsLCBw YXRoLCBzZWdubyk7Ci0JZXJybm8gPSBzbHJ1X2Vycm5vOwotCXN3aXRjaCAoc2xydV9lcnJjYXVz ZSkKLQl7Ci0JCWNhc2UgU0xSVV9PUEVOX0ZBSUxFRDoKLQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJ CShlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAotCQkJCQkgZXJybXNnKCJjb3VsZCBub3QgYWNj ZXNzIHN0YXR1cyBvZiB0cmFuc2FjdGlvbiAldSIsIHhpZCksCi0JCQkJCSBlcnJkZXRhaWwoIkNv dWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiOiAlbS4iLCBwYXRoKSkpOwotCQkJYnJlYWs7Ci0JCWNh c2UgU0xSVV9TRUVLX0ZBSUxFRDoKLQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCShlcnJjb2RlX2Zv cl9maWxlX2FjY2VzcygpLAotCQkJCQkgZXJybXNnKCJjb3VsZCBub3QgYWNjZXNzIHN0YXR1cyBv ZiB0cmFuc2FjdGlvbiAldSIsIHhpZCksCi0JCQkJCSBlcnJkZXRhaWwoIkNvdWxkIG5vdCBzZWVr IGluIGZpbGUgXCIlc1wiIHRvIG9mZnNldCAlZDogJW0uIiwKLQkJCQkJCQkgICBwYXRoLCBvZmZz ZXQpKSk7Ci0JCQlicmVhazsKLQkJY2FzZSBTTFJVX1JFQURfRkFJTEVEOgotCQkJaWYgKGVycm5v KQotCQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwK LQkJCQkJCSBlcnJtc2coImNvdWxkIG5vdCBhY2Nlc3Mgc3RhdHVzIG9mIHRyYW5zYWN0aW9uICV1 IiwgeGlkKSwKLQkJCQkJCSBlcnJkZXRhaWwoIkNvdWxkIG5vdCByZWFkIGZyb20gZmlsZSBcIiVz XCIgYXQgb2Zmc2V0ICVkOiAlbS4iLAotCQkJCQkJCQkgICBwYXRoLCBvZmZzZXQpKSk7Ci0JCQll bHNlCi0JCQkJZXJlcG9ydChFUlJPUiwKLQkJCQkJCShlcnJtc2coImNvdWxkIG5vdCBhY2Nlc3Mg c3RhdHVzIG9mIHRyYW5zYWN0aW9uICV1IiwgeGlkKSwKLQkJCQkJCSBlcnJkZXRhaWwoIkNvdWxk IG5vdCByZWFkIGZyb20gZmlsZSBcIiVzXCIgYXQgb2Zmc2V0ICVkOiByZWFkIHRvbyBmZXcgYnl0 ZXMuIiwgcGF0aCwgb2Zmc2V0KSkpOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0xSVV9XUklURV9GQUlM RUQ6Ci0JCQlpZiAoZXJybm8pCi0JCQkJZXJlcG9ydChFUlJPUiwKLQkJCQkJCShlcnJjb2RlX2Zv cl9maWxlX2FjY2VzcygpLAotCQkJCQkJIGVycm1zZygiY291bGQgbm90IGFjY2VzcyBzdGF0dXMg b2YgdHJhbnNhY3Rpb24gJXUiLCB4aWQpLAotCQkJCQkJIGVycmRldGFpbCgiQ291bGQgbm90IHdy aXRlIHRvIGZpbGUgXCIlc1wiIGF0IG9mZnNldCAlZDogJW0uIiwKLQkJCQkJCQkJICAgcGF0aCwg b2Zmc2V0KSkpOwotCQkJZWxzZQotCQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCQkoZXJybXNnKCJj b3VsZCBub3QgYWNjZXNzIHN0YXR1cyBvZiB0cmFuc2FjdGlvbiAldSIsIHhpZCksCi0JCQkJCQkg ZXJyZGV0YWlsKCJDb3VsZCBub3Qgd3JpdGUgdG8gZmlsZSBcIiVzXCIgYXQgb2Zmc2V0ICVkOiB3 cm90ZSB0b28gZmV3IGJ5dGVzLiIsCi0JCQkJCQkJCSAgIHBhdGgsIG9mZnNldCkpKTsKLQkJCWJy ZWFrOwotCQljYXNlIFNMUlVfRlNZTkNfRkFJTEVEOgotCQkJZXJlcG9ydChkYXRhX3N5bmNfZWxl dmVsKEVSUk9SKSwKLQkJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCi0JCQkJCSBlcnJt c2coImNvdWxkIG5vdCBhY2Nlc3Mgc3RhdHVzIG9mIHRyYW5zYWN0aW9uICV1IiwgeGlkKSwKLQkJ CQkJIGVycmRldGFpbCgiQ291bGQgbm90IGZzeW5jIGZpbGUgXCIlc1wiOiAlbS4iLAotCQkJCQkJ CSAgIHBhdGgpKSk7Ci0JCQlicmVhazsKLQkJY2FzZSBTTFJVX0NMT1NFX0ZBSUxFRDoKLQkJCWVy ZXBvcnQoRVJST1IsCi0JCQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAotCQkJCQkgZXJy bXNnKCJjb3VsZCBub3QgYWNjZXNzIHN0YXR1cyBvZiB0cmFuc2FjdGlvbiAldSIsIHhpZCksCi0J CQkJCSBlcnJkZXRhaWwoIkNvdWxkIG5vdCBjbG9zZSBmaWxlIFwiJXNcIjogJW0uIiwKLQkJCQkJ CQkgICBwYXRoKSkpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQkvKiBjYW4ndCBnZXQgaGVy ZSwgd2UgdHJ1c3QgKi8KLQkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgU2ltcGxlTHJ1IGVy cm9yIGNhdXNlOiAlZCIsCi0JCQkJIChpbnQpIHNscnVfZXJyY2F1c2UpOwotCQkJYnJlYWs7Ci0J fQotfQotCi0vKgotICogU2VsZWN0IHRoZSBzbG90IHRvIHJlLXVzZSB3aGVuIHdlIG5lZWQgYSBm cmVlIHNsb3QuCi0gKgotICogVGhlIHRhcmdldCBwYWdlIG51bWJlciBpcyBwYXNzZWQgYmVjYXVz ZSB3ZSBuZWVkIHRvIGNvbnNpZGVyIHRoZQotICogcG9zc2liaWxpdHkgdGhhdCBzb21lIG90aGVy IHByb2Nlc3MgcmVhZHMgaW4gdGhlIHRhcmdldCBwYWdlIHdoaWxlCi0gKiB3ZSBhcmUgZG9pbmcg SS9PIHRvIGZyZWUgYSBzbG90LiAgSGVuY2UsIGNoZWNrIG9yIHJlY2hlY2sgdG8gc2VlIGlmCi0g KiBhbnkgc2xvdCBhbHJlYWR5IGhvbGRzIHRoZSB0YXJnZXQgcGFnZSwgYW5kIHJldHVybiB0aGF0 IHNsb3QgaWYgc28uCi0gKiBUaHVzLCB0aGUgcmV0dXJuZWQgc2xvdCBpcyAqZWl0aGVyKiBhIHNs b3QgYWxyZWFkeSBob2xkaW5nIHRoZSBwYWdlbm8KLSAqIChjb3VsZCBiZSBhbnkgc3RhdGUgZXhj ZXB0IEVNUFRZKSwgKm9yKiBhIGZyZWVhYmxlIHNsb3QgKHN0YXRlIEVNUFRZCi0gKiBvciBDTEVB TikuCi0gKgotICogQ29udHJvbCBsb2NrIG11c3QgYmUgaGVsZCBhdCBlbnRyeSwgYW5kIHdpbGwg YmUgaGVsZCBhdCBleGl0LgotICovCi1zdGF0aWMgaW50Ci1TbHJ1U2VsZWN0TFJVUGFnZShTbHJ1 Q3RsIGN0bCwgaW50IHBhZ2VubykKLXsKLQlTbHJ1U2hhcmVkCXNoYXJlZCA9IGN0bC0+c2hhcmVk OwotCi0JLyogT3V0ZXIgbG9vcCBoYW5kbGVzIHJlc3RhcnQgYWZ0ZXIgSS9PICovCi0JZm9yICg7 OykKLQl7Ci0JCWludAkJCXNsb3RubzsKLQkJaW50CQkJY3VyX2NvdW50OwotCQlpbnQJCQliZXN0 dmFsaWRzbG90ID0gMDsJLyoga2VlcCBjb21waWxlciBxdWlldCAqLwotCQlpbnQJCQliZXN0X3Zh bGlkX2RlbHRhID0gLTE7Ci0JCWludAkJCWJlc3RfdmFsaWRfcGFnZV9udW1iZXIgPSAwOyAvKiBr ZWVwIGNvbXBpbGVyIHF1aWV0ICovCi0JCWludAkJCWJlc3RpbnZhbGlkc2xvdCA9IDA7CS8qIGtl ZXAgY29tcGlsZXIgcXVpZXQgKi8KLQkJaW50CQkJYmVzdF9pbnZhbGlkX2RlbHRhID0gLTE7Ci0J CWludAkJCWJlc3RfaW52YWxpZF9wYWdlX251bWJlciA9IDA7CS8qIGtlZXAgY29tcGlsZXIgcXVp ZXQgKi8KLQotCQkvKiBTZWUgaWYgcGFnZSBhbHJlYWR5IGhhcyBhIGJ1ZmZlciBhc3NpZ25lZCAq LwotCQlmb3IgKHNsb3RubyA9IDA7IHNsb3RubyA8IHNoYXJlZC0+bnVtX3Nsb3RzOyBzbG90bm8r KykKLQkJewotCQkJaWYgKHNoYXJlZC0+cGFnZV9udW1iZXJbc2xvdG5vXSA9PSBwYWdlbm8gJiYK LQkJCQlzaGFyZWQtPnBhZ2Vfc3RhdHVzW3Nsb3Rub10gIT0gU0xSVV9QQUdFX0VNUFRZKQotCQkJ CXJldHVybiBzbG90bm87Ci0JCX0KLQotCQkvKgotCQkgKiBJZiB3ZSBmaW5kIGFueSBFTVBUWSBz bG90LCBqdXN0IHNlbGVjdCB0aGF0IG9uZS4gRWxzZSBjaG9vc2UgYQotCQkgKiB2aWN0aW0gcGFn ZSB0byByZXBsYWNlLiAgV2Ugbm9ybWFsbHkgdGFrZSB0aGUgbGVhc3QgcmVjZW50bHkgdXNlZAot CQkgKiB2YWxpZCBwYWdlLCBidXQgd2Ugd2lsbCBuZXZlciB0YWtlIHRoZSBzbG90IGNvbnRhaW5p bmcKLQkJICogbGF0ZXN0X3BhZ2VfbnVtYmVyLCBldmVuIGlmIGl0IGFwcGVhcnMgbGVhc3QgcmVj ZW50bHkgdXNlZC4gIFdlCi0JCSAqIHdpbGwgc2VsZWN0IGEgc2xvdCB0aGF0IGlzIGFscmVhZHkg SS9PIGJ1c3kgb25seSBpZiB0aGVyZSBpcyBubwotCQkgKiBvdGhlciBjaG9pY2U6IGEgcmVhZC1i dXN5IHNsb3Qgd2lsbCBub3QgYmUgbGVhc3QgcmVjZW50bHkgdXNlZCBvbmNlCi0JCSAqIHRoZSBy ZWFkIGZpbmlzaGVzLCBhbmQgd2FpdGluZyBmb3IgYW4gSS9PIG9uIGEgd3JpdGUtYnVzeSBzbG90 IGlzCi0JCSAqIGluZmVyaW9yIHRvIGp1c3QgcGlja2luZyBzb21lIG90aGVyIHNsb3QuICBUZXN0 aW5nIHNob3dzIHRoZSBzbG90Ci0JCSAqIHdlIHBpY2sgaW5zdGVhZCB3aWxsIG9mdGVuIGJlIGNs ZWFuLCBhbGxvd2luZyB1cyB0byBiZWdpbiBhIHJlYWQgYXQKLQkJICogb25jZS4KLQkJICoKLQkJ ICogTm9ybWFsbHkgdGhlIHBhZ2VfbHJ1X2NvdW50IHZhbHVlcyB3aWxsIGFsbCBiZSBkaWZmZXJl bnQgYW5kIHNvCi0JCSAqIHRoZXJlIHdpbGwgYmUgYSB3ZWxsLWRlZmluZWQgTFJVIHBhZ2UuICBC dXQgc2luY2Ugd2UgYWxsb3cKLQkJICogY29uY3VycmVudCBleGVjdXRpb24gb2YgU2xydVJlY2Vu dGx5VXNlZCgpIHdpdGhpbgotCQkgKiBTaW1wbGVMcnVSZWFkUGFnZV9SZWFkT25seSgpLCBpdCBp cyBwb3NzaWJsZSB0aGF0IG11bHRpcGxlIHBhZ2VzCi0JCSAqIGFjcXVpcmUgdGhlIHNhbWUgbHJ1 X2NvdW50IHZhbHVlcy4gIEluIHRoYXQgY2FzZSB3ZSBicmVhayB0aWVzIGJ5Ci0JCSAqIGNob29z aW5nIHRoZSBmdXJ0aGVzdC1iYWNrIHBhZ2UuCi0JCSAqCi0JCSAqIE5vdGljZSB0aGF0IHRoaXMg bmV4dCBsaW5lIGZvcmNpYmx5IGFkdmFuY2VzIGN1cl9scnVfY291bnQgdG8gYQotCQkgKiB2YWx1 ZSB0aGF0IGlzIGNlcnRhaW5seSBiZXlvbmQgYW55IHZhbHVlIHRoYXQgd2lsbCBiZSBpbiB0aGUK LQkJICogcGFnZV9scnVfY291bnQgYXJyYXkgYWZ0ZXIgdGhlIGxvb3AgZmluaXNoZXMuICBUaGlz IGVuc3VyZXMgdGhhdAotCQkgKiB0aGUgbmV4dCBleGVjdXRpb24gb2YgU2xydVJlY2VudGx5VXNl ZCB3aWxsIG1hcmsgdGhlIHBhZ2UgbmV3bHkKLQkJICogdXNlZCwgZXZlbiBpZiBpdCdzIGZvciBh IHBhZ2UgdGhhdCBoYXMgdGhlIGN1cnJlbnQgY291bnRlciB2YWx1ZS4KLQkJICogVGhhdCBnZXRz IHVzIGJhY2sgb24gdGhlIHBhdGggdG8gaGF2aW5nIGdvb2QgZGF0YSB3aGVuIHRoZXJlIGFyZQot CQkgKiBtdWx0aXBsZSBwYWdlcyB3aXRoIHRoZSBzYW1lIGxydV9jb3VudC4KLQkJICovCi0JCWN1 cl9jb3VudCA9IChzaGFyZWQtPmN1cl9scnVfY291bnQpKys7Ci0JCWZvciAoc2xvdG5vID0gMDsg c2xvdG5vIDwgc2hhcmVkLT5udW1fc2xvdHM7IHNsb3RubysrKQotCQl7Ci0JCQlpbnQJCQl0aGlz X2RlbHRhOwotCQkJaW50CQkJdGhpc19wYWdlX251bWJlcjsKLQotCQkJaWYgKHNoYXJlZC0+cGFn ZV9zdGF0dXNbc2xvdG5vXSA9PSBTTFJVX1BBR0VfRU1QVFkpCi0JCQkJcmV0dXJuIHNsb3RubzsK LQkJCXRoaXNfZGVsdGEgPSBjdXJfY291bnQgLSBzaGFyZWQtPnBhZ2VfbHJ1X2NvdW50W3Nsb3Ru b107Ci0JCQlpZiAodGhpc19kZWx0YSA8IDApCi0JCQl7Ci0JCQkJLyoKLQkJCQkgKiBDbGVhbiB1 cCBpbiBjYXNlIHNoYXJlZCB1cGRhdGVzIGhhdmUgY2F1c2VkIGN1cl9jb3VudAotCQkJCSAqIGlu Y3JlbWVudHMgdG8gZ2V0ICJsb3N0Ii4gIFdlIGJhY2sgb2ZmIHRoZSBwYWdlIGNvdW50cywKLQkJ CQkgKiByYXRoZXIgdGhhbiB0cnlpbmcgdG8gaW5jcmVhc2UgY3VyX2NvdW50LCB0byBhdm9pZCBh bnkKLQkJCQkgKiBxdWVzdGlvbiBvZiBpbmZpbml0ZSBsb29wcyBvciBmYWlsdXJlIGluIHRoZSBw cmVzZW5jZSBvZgotCQkJCSAqIHdyYXBwZWQtYXJvdW5kIGNvdW50cy4KLQkJCQkgKi8KLQkJCQlz aGFyZWQtPnBhZ2VfbHJ1X2NvdW50W3Nsb3Rub10gPSBjdXJfY291bnQ7Ci0JCQkJdGhpc19kZWx0 YSA9IDA7Ci0JCQl9Ci0JCQl0aGlzX3BhZ2VfbnVtYmVyID0gc2hhcmVkLT5wYWdlX251bWJlcltz bG90bm9dOwotCQkJaWYgKHRoaXNfcGFnZV9udW1iZXIgPT0gc2hhcmVkLT5sYXRlc3RfcGFnZV9u dW1iZXIpCi0JCQkJY29udGludWU7Ci0JCQlpZiAoc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9d ID09IFNMUlVfUEFHRV9WQUxJRCkKLQkJCXsKLQkJCQlpZiAodGhpc19kZWx0YSA+IGJlc3RfdmFs aWRfZGVsdGEgfHwKLQkJCQkJKHRoaXNfZGVsdGEgPT0gYmVzdF92YWxpZF9kZWx0YSAmJgotCQkJ CQkgY3RsLT5QYWdlUHJlY2VkZXModGhpc19wYWdlX251bWJlciwKLQkJCQkJCQkJCSAgIGJlc3Rf dmFsaWRfcGFnZV9udW1iZXIpKSkKLQkJCQl7Ci0JCQkJCWJlc3R2YWxpZHNsb3QgPSBzbG90bm87 Ci0JCQkJCWJlc3RfdmFsaWRfZGVsdGEgPSB0aGlzX2RlbHRhOwotCQkJCQliZXN0X3ZhbGlkX3Bh Z2VfbnVtYmVyID0gdGhpc19wYWdlX251bWJlcjsKLQkJCQl9Ci0JCQl9Ci0JCQllbHNlCi0JCQl7 Ci0JCQkJaWYgKHRoaXNfZGVsdGEgPiBiZXN0X2ludmFsaWRfZGVsdGEgfHwKLQkJCQkJKHRoaXNf ZGVsdGEgPT0gYmVzdF9pbnZhbGlkX2RlbHRhICYmCi0JCQkJCSBjdGwtPlBhZ2VQcmVjZWRlcyh0 aGlzX3BhZ2VfbnVtYmVyLAotCQkJCQkJCQkJICAgYmVzdF9pbnZhbGlkX3BhZ2VfbnVtYmVyKSkp Ci0JCQkJewotCQkJCQliZXN0aW52YWxpZHNsb3QgPSBzbG90bm87Ci0JCQkJCWJlc3RfaW52YWxp ZF9kZWx0YSA9IHRoaXNfZGVsdGE7Ci0JCQkJCWJlc3RfaW52YWxpZF9wYWdlX251bWJlciA9IHRo aXNfcGFnZV9udW1iZXI7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJLyoKLQkJICogSWYgYWxsIHBh Z2VzIChleGNlcHQgcG9zc2libHkgdGhlIGxhdGVzdCBvbmUpIGFyZSBJL08gYnVzeSwgd2UnbGwK LQkJICogaGF2ZSB0byB3YWl0IGZvciBhbiBJL08gdG8gY29tcGxldGUgYW5kIHRoZW4gcmV0cnku ICBJbiB0aGF0Ci0JCSAqIHVuaGFwcHkgY2FzZSwgd2UgY2hvb3NlIHRvIHdhaXQgZm9yIHRoZSBJ L08gb24gdGhlIGxlYXN0IHJlY2VudGx5Ci0JCSAqIHVzZWQgc2xvdCwgb24gdGhlIGFzc3VtcHRp b24gdGhhdCBpdCB3YXMgbGlrZWx5IGluaXRpYXRlZCBmaXJzdCBvZgotCQkgKiBhbGwgdGhlIEkv T3MgaW4gcHJvZ3Jlc3MgYW5kIG1heSB0aGVyZWZvcmUgZmluaXNoIGZpcnN0LgotCQkgKi8KLQkJ aWYgKGJlc3RfdmFsaWRfZGVsdGEgPCAwKQotCQl7Ci0JCQlTaW1wbGVMcnVXYWl0SU8oY3RsLCBi ZXN0aW52YWxpZHNsb3QpOwotCQkJY29udGludWU7Ci0JCX0KLQotCQkvKgotCQkgKiBJZiB0aGUg c2VsZWN0ZWQgcGFnZSBpcyBjbGVhbiwgd2UncmUgc2V0LgotCQkgKi8KLQkJaWYgKCFzaGFyZWQt PnBhZ2VfZGlydHlbYmVzdHZhbGlkc2xvdF0pCi0JCQlyZXR1cm4gYmVzdHZhbGlkc2xvdDsKLQot CQkvKgotCQkgKiBXcml0ZSB0aGUgcGFnZS4KLQkJICovCi0JCVNscnVJbnRlcm5hbFdyaXRlUGFn ZShjdGwsIGJlc3R2YWxpZHNsb3QsIE5VTEwpOwotCi0JCS8qCi0JCSAqIE5vdyBsb29wIGJhY2sg YW5kIHRyeSBhZ2Fpbi4gIFRoaXMgaXMgdGhlIGVhc2llc3Qgd2F5IG9mIGRlYWxpbmcKLQkJICog d2l0aCBjb3JuZXIgY2FzZXMgc3VjaCBhcyB0aGUgdmljdGltIHBhZ2UgYmVpbmcgcmUtZGlydGll ZCB3aGlsZSB3ZQotCQkgKiB3cm90ZSBpdC4KLQkJICovCi0JfQotfQotCi0vKgotICogV3JpdGUg ZGlydHkgcGFnZXMgdG8gZGlzayBkdXJpbmcgY2hlY2twb2ludCBvciBkYXRhYmFzZSBzaHV0ZG93 bi4gIEZsdXNoaW5nCi0gKiBpcyBkZWZlcnJlZCB1bnRpbCB0aGUgbmV4dCBjYWxsIHRvIFByb2Nl c3NTeW5jUmVxdWVzdHMoKSwgdGhvdWdoIHdlIGRvIGZzeW5jCi0gKiB0aGUgY29udGFpbmluZyBk aXJlY3RvcnkgaGVyZSB0byBtYWtlIHN1cmUgdGhhdCBuZXdseSBjcmVhdGVkIGRpcmVjdG9yeQot ICogZW50cmllcyBhcmUgb24gZGlzay4KLSAqLwotdm9pZAotU2ltcGxlTHJ1V3JpdGVBbGwoU2xy dUN0bCBjdGwsIGJvb2wgYWxsb3dfcmVkaXJ0aWVkKQotewotCVNscnVTaGFyZWQJc2hhcmVkID0g Y3RsLT5zaGFyZWQ7Ci0JU2xydVdyaXRlQWxsRGF0YSBmZGF0YTsKLQlpbnQJCQlzbG90bm87Ci0J aW50CQkJcGFnZW5vID0gMDsKLQlpbnQJCQlpOwotCWJvb2wJCW9rOwotCi0JLyogdXBkYXRlIHRo ZSBzdGF0cyBjb3VudGVyIG9mIGZsdXNoZXMgKi8KLQlwZ3N0YXRfY291bnRfc2xydV9mbHVzaChz aGFyZWQtPnNscnVfc3RhdHNfaWR4KTsKLQotCS8qCi0JICogRmluZCBhbmQgd3JpdGUgZGlydHkg cGFnZXMKLQkgKi8KLQlmZGF0YS5udW1fZmlsZXMgPSAwOwotCi0JTFdMb2NrQWNxdWlyZShzaGFy ZWQtPkNvbnRyb2xMb2NrLCBMV19FWENMVVNJVkUpOwotCi0JZm9yIChzbG90bm8gPSAwOyBzbG90 bm8gPCBzaGFyZWQtPm51bV9zbG90czsgc2xvdG5vKyspCi0JewotCQlTbHJ1SW50ZXJuYWxXcml0 ZVBhZ2UoY3RsLCBzbG90bm8sICZmZGF0YSk7Ci0KLQkJLyoKLQkJICogSW4gc29tZSBwbGFjZXMg KGUuZy4gY2hlY2twb2ludHMpLCB3ZSBjYW5ub3QgYXNzZXJ0IHRoYXQgdGhlIHNsb3QKLQkJICog aXMgY2xlYW4gbm93LCBzaW5jZSBhbm90aGVyIHByb2Nlc3MgbWlnaHQgaGF2ZSByZS1kaXJ0aWVk IGl0Ci0JCSAqIGFscmVhZHkuICBUaGF0J3Mgb2theS4KLQkJICovCi0JCUFzc2VydChhbGxvd19y ZWRpcnRpZWQgfHwKLQkJCSAgIHNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSA9PSBTTFJVX1BB R0VfRU1QVFkgfHwKLQkJCSAgIChzaGFyZWQtPnBhZ2Vfc3RhdHVzW3Nsb3Rub10gPT0gU0xSVV9Q QUdFX1ZBTElEICYmCi0JCQkJIXNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90bm9dKSk7Ci0JfQorCW9m Zl90CQlzaXplOworCVJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yID0gU2xydVJlbEZpbGVMb2NhdG9y KHNscnVfaWQsIHNlZ25vKTsKKwlTTWdyRmlsZUhhbmRsZSBzZmlsZSA9IHNtZ3JvcGVuKHJsb2Nh dG9yLCBJbnZhbGlkQmFja2VuZElkLCBNQUlOX0ZPUktOVU0pOwogCi0JTFdMb2NrUmVsZWFzZShz aGFyZWQtPkNvbnRyb2xMb2NrKTsKKwkvKiB1cGRhdGUgdGhlIHN0YXRzIGNvdW50ZXIgb2YgY2hl Y2tlZCBwYWdlcyAqLworCXBnc3RhdF9jb3VudF9zbHJ1X3BhZ2VfZXhpc3RzKHNscnVfaWQpOwog Ci0JLyoKLQkgKiBOb3cgY2xvc2UgYW55IGZpbGVzIHRoYXQgd2VyZSBvcGVuCi0JICovCi0Jb2sg PSB0cnVlOwotCWZvciAoaSA9IDA7IGkgPCBmZGF0YS5udW1fZmlsZXM7IGkrKykKLQl7Ci0JCWlm IChDbG9zZVRyYW5zaWVudEZpbGUoZmRhdGEuZmRbaV0pICE9IDApCi0JCXsKLQkJCXNscnVfZXJy Y2F1c2UgPSBTTFJVX0NMT1NFX0ZBSUxFRDsKLQkJCXNscnVfZXJybm8gPSBlcnJubzsKLQkJCXBh Z2VubyA9IGZkYXRhLnNlZ25vW2ldICogU0xSVV9QQUdFU19QRVJfU0VHTUVOVDsKLQkJCW9rID0g ZmFsc2U7Ci0JCX0KLQl9Ci0JaWYgKCFvaykKLQkJU2xydVJlcG9ydElPRXJyb3IoY3RsLCBwYWdl bm8sIEludmFsaWRUcmFuc2FjdGlvbklkKTsKKwlpZiAoc21ncmV4aXN0cyhzZmlsZSkpCisJCXNp emUgPSBzbWdybmJsb2NrcyhzZmlsZSk7CisJZWxzZQorCQlzaXplID0gMDsKIAotCS8qIEVuc3Vy ZSB0aGF0IGRpcmVjdG9yeSBlbnRyaWVzIGZvciBuZXcgZmlsZXMgYXJlIG9uIGRpc2suICovCi0J aWYgKGN0bC0+c3luY19oYW5kbGVyICE9IFNZTkNfSEFORExFUl9OT05FKQotCQlmc3luY19mbmFt ZShjdGwtPkRpciwgdHJ1ZSk7CisJcmV0dXJuIHNpemUgPj0gb2Zmc2V0ICsgQkxDS1NaOwogfQog CiAvKgpAQCAtMTIyNCw3NSArOTYsMTQgQEAgU2ltcGxlTHJ1V3JpdGVBbGwoU2xydUN0bCBjdGws IGJvb2wgYWxsb3dfcmVkaXJ0aWVkKQogICogYWZ0ZXIgaXQgaGFzIGFjY3J1ZWQgZnJlc2hseS13 cml0dGVuIGRhdGEuCiAgKi8KIHZvaWQKLVNpbXBsZUxydVRydW5jYXRlKFNscnVDdGwgY3RsLCBp bnQgY3V0b2ZmUGFnZSkKK1NpbXBsZUxydVRydW5jYXRlKGludCBzbHJ1X2lkLCBTbHJ1UGFnZVBy ZWNlZGVzRnVuY3Rpb24gUGFnZVByZWNlZGVzLCBpbnQgY3V0b2ZmUGFnZSkKIHsKLQlTbHJ1U2hh cmVkCXNoYXJlZCA9IGN0bC0+c2hhcmVkOwotCWludAkJCXNsb3RubzsKLQogCS8qIHVwZGF0ZSB0 aGUgc3RhdHMgY291bnRlciBvZiB0cnVuY2F0ZXMgKi8KLQlwZ3N0YXRfY291bnRfc2xydV90cnVu Y2F0ZShzaGFyZWQtPnNscnVfc3RhdHNfaWR4KTsKLQotCS8qCi0JICogU2NhbiBzaGFyZWQgbWVt b3J5IGFuZCByZW1vdmUgYW55IHBhZ2VzIHByZWNlZGluZyB0aGUgY3V0b2ZmIHBhZ2UsIHRvCi0J ICogZW5zdXJlIHdlIHdvbid0IHJld3JpdGUgdGhlbSBsYXRlci4gIChTaW5jZSB0aGlzIGlzIG5v cm1hbGx5IGNhbGxlZCBpbgotCSAqIG9yIGp1c3QgYWZ0ZXIgYSBjaGVja3BvaW50LCBhbnkgZGly dHkgcGFnZXMgc2hvdWxkIGhhdmUgYmVlbiBmbHVzaGVkCi0JICogYWxyZWFkeSAuLi4gd2UncmUg anVzdCBiZWluZyBleHRyYSBjYXJlZnVsIGhlcmUuKQotCSAqLwotCUxXTG9ja0FjcXVpcmUoc2hh cmVkLT5Db250cm9sTG9jaywgTFdfRVhDTFVTSVZFKTsKLQotcmVzdGFydDoKLQotCS8qCi0JICog V2hpbGUgd2UgYXJlIGhvbGRpbmcgdGhlIGxvY2ssIG1ha2UgYW4gaW1wb3J0YW50IHNhZmV0eSBj aGVjazogdGhlCi0JICogY3VycmVudCBlbmRwb2ludCBwYWdlIG11c3Qgbm90IGJlIGVsaWdpYmxl IGZvciByZW1vdmFsLgotCSAqLwotCWlmIChjdGwtPlBhZ2VQcmVjZWRlcyhzaGFyZWQtPmxhdGVz dF9wYWdlX251bWJlciwgY3V0b2ZmUGFnZSkpCi0JewotCQlMV0xvY2tSZWxlYXNlKHNoYXJlZC0+ Q29udHJvbExvY2spOwotCQllcmVwb3J0KExPRywKLQkJCQkoZXJybXNnKCJjb3VsZCBub3QgdHJ1 bmNhdGUgZGlyZWN0b3J5IFwiJXNcIjogYXBwYXJlbnQgd3JhcGFyb3VuZCIsCi0JCQkJCQljdGwt PkRpcikpKTsKLQkJcmV0dXJuOwotCX0KLQotCWZvciAoc2xvdG5vID0gMDsgc2xvdG5vIDwgc2hh cmVkLT5udW1fc2xvdHM7IHNsb3RubysrKQotCXsKLQkJaWYgKHNoYXJlZC0+cGFnZV9zdGF0dXNb c2xvdG5vXSA9PSBTTFJVX1BBR0VfRU1QVFkpCi0JCQljb250aW51ZTsKLQkJaWYgKCFjdGwtPlBh Z2VQcmVjZWRlcyhzaGFyZWQtPnBhZ2VfbnVtYmVyW3Nsb3Rub10sIGN1dG9mZlBhZ2UpKQotCQkJ Y29udGludWU7Ci0KLQkJLyoKLQkJICogSWYgcGFnZSBpcyBjbGVhbiwganVzdCBjaGFuZ2Ugc3Rh dGUgdG8gRU1QVFkgKGV4cGVjdGVkIGNhc2UpLgotCQkgKi8KLQkJaWYgKHNoYXJlZC0+cGFnZV9z dGF0dXNbc2xvdG5vXSA9PSBTTFJVX1BBR0VfVkFMSUQgJiYKLQkJCSFzaGFyZWQtPnBhZ2VfZGly dHlbc2xvdG5vXSkKLQkJewotCQkJc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dID0gU0xSVV9Q QUdFX0VNUFRZOwotCQkJY29udGludWU7Ci0JCX0KLQotCQkvKgotCQkgKiBIbW0sIHdlIGhhdmUg KG9yIG1heSBoYXZlKSBJL08gb3BlcmF0aW9ucyBhY3Rpbmcgb24gdGhlIHBhZ2UsIHNvCi0JCSAq IHdlJ3ZlIGdvdCB0byB3YWl0IGZvciB0aGVtIHRvIGZpbmlzaCBhbmQgdGhlbiBzdGFydCBhZ2Fp bi4gVGhpcyBpcwotCQkgKiB0aGUgc2FtZSBsb2dpYyBhcyBpbiBTbHJ1U2VsZWN0TFJVUGFnZS4g IChYWFggaWYgcGFnZSBpcyBkaXJ0eSwKLQkJICogd291bGRuJ3QgaXQgYmUgT0sgdG8ganVzdCBk aXNjYXJkIGl0IHdpdGhvdXQgd3JpdGluZyBpdD8KLQkJICogU2xydU1heURlbGV0ZVNlZ21lbnQo KSB1c2VzIGEgc3RyaWN0ZXIgcXVhbGlmaWNhdGlvbiwgc28gd2UgbWlnaHQKLQkJICogbm90IGRl bGV0ZSB0aGlzIHBhZ2UgaW4gdGhlIGVuZDsgZXZlbiBpZiB3ZSBkb24ndCBkZWxldGUgaXQsIHdl Ci0JCSAqIHdvbid0IGhhdmUgY2F1c2UgdG8gcmVhZCBpdHMgZGF0YSBhZ2Fpbi4gIEZvciBub3cs IGtlZXAgdGhlIGxvZ2ljCi0JCSAqIHRoZSBzYW1lIGFzIGl0IHdhcy4pCi0JCSAqLwotCQlpZiAo c2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dID09IFNMUlVfUEFHRV9WQUxJRCkKLQkJCVNscnVJ bnRlcm5hbFdyaXRlUGFnZShjdGwsIHNsb3RubywgTlVMTCk7Ci0JCWVsc2UKLQkJCVNpbXBsZUxy dVdhaXRJTyhjdGwsIHNsb3Rubyk7Ci0JCWdvdG8gcmVzdGFydDsKLQl9Ci0KLQlMV0xvY2tSZWxl YXNlKHNoYXJlZC0+Q29udHJvbExvY2spOworCXBnc3RhdF9jb3VudF9zbHJ1X3RydW5jYXRlKHNs cnVfaWQpOwogCiAJLyogTm93IHdlIGNhbiByZW1vdmUgdGhlIG9sZCBzZWdtZW50KHMpICovCi0J KHZvaWQpIFNscnVTY2FuRGlyZWN0b3J5KGN0bCwgU2xydVNjYW5EaXJDYkRlbGV0ZUN1dG9mZiwg JmN1dG9mZlBhZ2UpOworCSh2b2lkKSBTbHJ1U2NhbkRpcmVjdG9yeShzbHJ1X2lkLCBQYWdlUHJl Y2VkZXMsIFNscnVTY2FuRGlyQ2JEZWxldGVDdXRvZmYsCisJCQkJCQkJICZjdXRvZmZQYWdlKTsK IH0KIAogLyoKQEAgLTEzMDIsNzcgKzExMywyMiBAQCByZXN0YXJ0OgogICogdGhleSBlaXRoZXIg Y2FuJ3QgeWV0IGNvbnRhaW4gYW55dGhpbmcsIG9yIGhhdmUgYWxyZWFkeSBiZWVuIGNsZWFuZWQg b3V0LgogICovCiBzdGF0aWMgdm9pZAotU2xydUludGVybmFsRGVsZXRlU2VnbWVudChTbHJ1Q3Rs IGN0bCwgaW50IHNlZ25vKQorU2xydUludGVybmFsRGVsZXRlU2VnbWVudChpbnQgc2xydV9pZCwg aW50IHNlZ25vKQogewotCWNoYXIJCXBhdGhbTUFYUEdQQVRIXTsKLQotCS8qIEZvcmdldCBhbnkg ZnN5bmMgcmVxdWVzdHMgcXVldWVkIGZvciB0aGlzIHNlZ21lbnQuICovCi0JaWYgKGN0bC0+c3lu Y19oYW5kbGVyICE9IFNZTkNfSEFORExFUl9OT05FKQotCXsKLQkJRmlsZVRhZwkJdGFnOwotCi0J CUlOSVRfU0xSVUZJTEVUQUcodGFnLCBjdGwtPnN5bmNfaGFuZGxlciwgc2Vnbm8pOwotCQlSZWdp c3RlclN5bmNSZXF1ZXN0KCZ0YWcsIFNZTkNfRk9SR0VUX1JFUVVFU1QsIHRydWUpOwotCX0KKwlS ZWxGaWxlTG9jYXRvciBybG9jYXRvciA9IFNscnVSZWxGaWxlTG9jYXRvcihzbHJ1X2lkLCBzZWdu byk7CisJU01nckZpbGVIYW5kbGUgc2ZpbGUgPSBzbWdyb3BlbihybG9jYXRvciwgSW52YWxpZEJh Y2tlbmRJZCwgTUFJTl9GT1JLTlVNKTsKIAogCS8qIFVubGluayB0aGUgZmlsZS4gKi8KLQlTbHJ1 RmlsZU5hbWUoY3RsLCBwYXRoLCBzZWdubyk7Ci0JZXJlcG9ydChERUJVRzIsIChlcnJtc2dfaW50 ZXJuYWwoInJlbW92aW5nIGZpbGUgXCIlc1wiIiwgcGF0aCkpKTsKLQl1bmxpbmsocGF0aCk7CisJ c21ncnVubGluayhzZmlsZSwgZmFsc2UpOwogfQogCiAvKgogICogRGVsZXRlIGFuIGluZGl2aWR1 YWwgU0xSVSBzZWdtZW50LCBpZGVudGlmaWVkIGJ5IHRoZSBzZWdtZW50IG51bWJlci4KICAqLwog dm9pZAotU2xydURlbGV0ZVNlZ21lbnQoU2xydUN0bCBjdGwsIGludCBzZWdubykKK1NscnVEZWxl dGVTZWdtZW50KGludCBzbHJ1X2lkLCBpbnQgc2Vnbm8pCiB7Ci0JU2xydVNoYXJlZAlzaGFyZWQg PSBjdGwtPnNoYXJlZDsKLQlpbnQJCQlzbG90bm87Ci0JYm9vbAkJZGlkX3dyaXRlOwotCi0JLyog Q2xlYW4gb3V0IGFueSBwb3NzaWJseSBleGlzdGluZyByZWZlcmVuY2VzIHRvIHRoZSBzZWdtZW50 LiAqLwotCUxXTG9ja0FjcXVpcmUoc2hhcmVkLT5Db250cm9sTG9jaywgTFdfRVhDTFVTSVZFKTsK LXJlc3RhcnQ6Ci0JZGlkX3dyaXRlID0gZmFsc2U7Ci0JZm9yIChzbG90bm8gPSAwOyBzbG90bm8g PCBzaGFyZWQtPm51bV9zbG90czsgc2xvdG5vKyspCi0JewotCQlpbnQJCQlwYWdlc2Vnbm8gPSBz aGFyZWQtPnBhZ2VfbnVtYmVyW3Nsb3Rub10gLyBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UOwotCi0J CWlmIChzaGFyZWQtPnBhZ2Vfc3RhdHVzW3Nsb3Rub10gPT0gU0xSVV9QQUdFX0VNUFRZKQotCQkJ Y29udGludWU7Ci0KLQkJLyogbm90IHRoZSBzZWdtZW50IHdlJ3JlIGxvb2tpbmcgZm9yICovCi0J CWlmIChwYWdlc2Vnbm8gIT0gc2Vnbm8pCi0JCQljb250aW51ZTsKLQotCQkvKiBJZiBwYWdlIGlz IGNsZWFuLCBqdXN0IGNoYW5nZSBzdGF0ZSB0byBFTVBUWSAoZXhwZWN0ZWQgY2FzZSkuICovCi0J CWlmIChzaGFyZWQtPnBhZ2Vfc3RhdHVzW3Nsb3Rub10gPT0gU0xSVV9QQUdFX1ZBTElEICYmCi0J CQkhc2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Rub10pCi0JCXsKLQkJCXNoYXJlZC0+cGFnZV9zdGF0 dXNbc2xvdG5vXSA9IFNMUlVfUEFHRV9FTVBUWTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJLyog U2FtZSBsb2dpYyBhcyBTaW1wbGVMcnVUcnVuY2F0ZSgpICovCi0JCWlmIChzaGFyZWQtPnBhZ2Vf c3RhdHVzW3Nsb3Rub10gPT0gU0xSVV9QQUdFX1ZBTElEKQotCQkJU2xydUludGVybmFsV3JpdGVQ YWdlKGN0bCwgc2xvdG5vLCBOVUxMKTsKLQkJZWxzZQotCQkJU2ltcGxlTHJ1V2FpdElPKGN0bCwg c2xvdG5vKTsKLQotCQlkaWRfd3JpdGUgPSB0cnVlOwotCX0KLQotCS8qCi0JICogQmUgZXh0cmEg Y2FyZWZ1bCBhbmQgcmUtY2hlY2suIFRoZSBJTyBmdW5jdGlvbnMgcmVsZWFzZSB0aGUgY29udHJv bAotCSAqIGxvY2ssIHNvIG5ldyBwYWdlcyBjb3VsZCBoYXZlIGJlZW4gcmVhZCBpbi4KLQkgKi8K LQlpZiAoZGlkX3dyaXRlKQotCQlnb3RvIHJlc3RhcnQ7Ci0KLQlTbHJ1SW50ZXJuYWxEZWxldGVT ZWdtZW50KGN0bCwgc2Vnbm8pOwotCi0JTFdMb2NrUmVsZWFzZShzaGFyZWQtPkNvbnRyb2xMb2Nr KTsKKwlTbHJ1SW50ZXJuYWxEZWxldGVTZWdtZW50KHNscnVfaWQsIHNlZ25vKTsKIH0KIAogLyoK QEAgLTEzODksMTkgKzE0NSwyMSBAQCByZXN0YXJ0OgogICogZmlyc3Q+PWN1dG9mZiAmJiBsYXN0 Pj1jdXRvZmY6IG5vOyBldmVyeSBwYWdlIG9mIHRoaXMgc2VnbWVudCBpcyB0b28geW91bmcKICAq Lwogc3RhdGljIGJvb2wKLVNscnVNYXlEZWxldGVTZWdtZW50KFNscnVDdGwgY3RsLCBpbnQgc2Vn cGFnZSwgaW50IGN1dG9mZlBhZ2UpCitTbHJ1TWF5RGVsZXRlU2VnbWVudChTbHJ1UGFnZVByZWNl ZGVzRnVuY3Rpb24gUGFnZVByZWNlZGVzLAorCQkJCQkgaW50IHNlZ3BhZ2UsIGludCBjdXRvZmZQ YWdlKQogewogCWludAkJCXNlZ19sYXN0X3BhZ2UgPSBzZWdwYWdlICsgU0xSVV9QQUdFU19QRVJf U0VHTUVOVCAtIDE7CiAKIAlBc3NlcnQoc2VncGFnZSAlIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQg PT0gMCk7CiAKLQlyZXR1cm4gKGN0bC0+UGFnZVByZWNlZGVzKHNlZ3BhZ2UsIGN1dG9mZlBhZ2Up ICYmCi0JCQljdGwtPlBhZ2VQcmVjZWRlcyhzZWdfbGFzdF9wYWdlLCBjdXRvZmZQYWdlKSk7CisJ cmV0dXJuIChQYWdlUHJlY2VkZXMoc2VncGFnZSwgY3V0b2ZmUGFnZSkgJiYKKwkJCVBhZ2VQcmVj ZWRlcyhzZWdfbGFzdF9wYWdlLCBjdXRvZmZQYWdlKSk7CiB9CiAKICNpZmRlZiBVU0VfQVNTRVJU X0NIRUNLSU5HCiBzdGF0aWMgdm9pZAotU2xydVBhZ2VQcmVjZWRlc1Rlc3RPZmZzZXQoU2xydUN0 bCBjdGwsIGludCBwZXJfcGFnZSwgdWludDMyIG9mZnNldCkKK1NscnVQYWdlUHJlY2VkZXNUZXN0 T2Zmc2V0KFNscnVQYWdlUHJlY2VkZXNGdW5jdGlvbiBQYWdlUHJlY2VkZXMsCisJCQkJCQkgICBp bnQgcGVyX3BhZ2UsIHVpbnQzMiBvZmZzZXQpCiB7CiAJVHJhbnNhY3Rpb25JZCBsaHMsCiAJCQkJ cmhzOwpAQCAtMTQyNiwxOSArMTg0LDE5IEBAIFNscnVQYWdlUHJlY2VkZXNUZXN0T2Zmc2V0KFNs cnVDdGwgY3RsLCBpbnQgcGVyX3BhZ2UsIHVpbnQzMiBvZmZzZXQpCiAJQXNzZXJ0KCFUcmFuc2Fj dGlvbklkUHJlY2VkZXMocmhzLCBsaHMgKyAxKSk7CiAJQXNzZXJ0KCFUcmFuc2FjdGlvbklkRm9s bG93c09yRXF1YWxzKGxocywgcmhzKSk7CiAJQXNzZXJ0KCFUcmFuc2FjdGlvbklkRm9sbG93c09y RXF1YWxzKHJocywgbGhzKSk7Ci0JQXNzZXJ0KCFjdGwtPlBhZ2VQcmVjZWRlcyhsaHMgLyBwZXJf cGFnZSwgbGhzIC8gcGVyX3BhZ2UpKTsKLQlBc3NlcnQoIWN0bC0+UGFnZVByZWNlZGVzKGxocyAv IHBlcl9wYWdlLCByaHMgLyBwZXJfcGFnZSkpOwotCUFzc2VydCghY3RsLT5QYWdlUHJlY2VkZXMo cmhzIC8gcGVyX3BhZ2UsIGxocyAvIHBlcl9wYWdlKSk7Ci0JQXNzZXJ0KCFjdGwtPlBhZ2VQcmVj ZWRlcygobGhzIC0gcGVyX3BhZ2UpIC8gcGVyX3BhZ2UsIHJocyAvIHBlcl9wYWdlKSk7Ci0JQXNz ZXJ0KGN0bC0+UGFnZVByZWNlZGVzKHJocyAvIHBlcl9wYWdlLCAobGhzIC0gMyAqIHBlcl9wYWdl KSAvIHBlcl9wYWdlKSk7Ci0JQXNzZXJ0KGN0bC0+UGFnZVByZWNlZGVzKHJocyAvIHBlcl9wYWdl LCAobGhzIC0gMiAqIHBlcl9wYWdlKSAvIHBlcl9wYWdlKSk7Ci0JQXNzZXJ0KGN0bC0+UGFnZVBy ZWNlZGVzKHJocyAvIHBlcl9wYWdlLCAobGhzIC0gMSAqIHBlcl9wYWdlKSAvIHBlcl9wYWdlKQor CUFzc2VydCghUGFnZVByZWNlZGVzKGxocyAvIHBlcl9wYWdlLCBsaHMgLyBwZXJfcGFnZSkpOwor CUFzc2VydCghUGFnZVByZWNlZGVzKGxocyAvIHBlcl9wYWdlLCByaHMgLyBwZXJfcGFnZSkpOwor CUFzc2VydCghUGFnZVByZWNlZGVzKHJocyAvIHBlcl9wYWdlLCBsaHMgLyBwZXJfcGFnZSkpOwor CUFzc2VydCghUGFnZVByZWNlZGVzKChsaHMgLSBwZXJfcGFnZSkgLyBwZXJfcGFnZSwgcmhzIC8g cGVyX3BhZ2UpKTsKKwlBc3NlcnQoUGFnZVByZWNlZGVzKHJocyAvIHBlcl9wYWdlLCAobGhzIC0g MyAqIHBlcl9wYWdlKSAvIHBlcl9wYWdlKSk7CisJQXNzZXJ0KFBhZ2VQcmVjZWRlcyhyaHMgLyBw ZXJfcGFnZSwgKGxocyAtIDIgKiBwZXJfcGFnZSkgLyBwZXJfcGFnZSkpOworCUFzc2VydChQYWdl UHJlY2VkZXMocmhzIC8gcGVyX3BhZ2UsIChsaHMgLSAxICogcGVyX3BhZ2UpIC8gcGVyX3BhZ2Up CiAJCSAgIHx8ICgxVSA8PCAzMSkgJSBwZXJfcGFnZSAhPSAwKTsJLyogU2VlIENvbW1pdFRzUGFn ZVByZWNlZGVzKCkgKi8KLQlBc3NlcnQoY3RsLT5QYWdlUHJlY2VkZXMoKGxocyArIDEgKiBwZXJf cGFnZSkgLyBwZXJfcGFnZSwgcmhzIC8gcGVyX3BhZ2UpCisJQXNzZXJ0KFBhZ2VQcmVjZWRlcygo bGhzICsgMSAqIHBlcl9wYWdlKSAvIHBlcl9wYWdlLCByaHMgLyBwZXJfcGFnZSkKIAkJICAgfHwg KDFVIDw8IDMxKSAlIHBlcl9wYWdlICE9IDApOwotCUFzc2VydChjdGwtPlBhZ2VQcmVjZWRlcygo bGhzICsgMiAqIHBlcl9wYWdlKSAvIHBlcl9wYWdlLCByaHMgLyBwZXJfcGFnZSkpOwotCUFzc2Vy dChjdGwtPlBhZ2VQcmVjZWRlcygobGhzICsgMyAqIHBlcl9wYWdlKSAvIHBlcl9wYWdlLCByaHMg LyBwZXJfcGFnZSkpOwotCUFzc2VydCghY3RsLT5QYWdlUHJlY2VkZXMocmhzIC8gcGVyX3BhZ2Us IChsaHMgKyBwZXJfcGFnZSkgLyBwZXJfcGFnZSkpOworCUFzc2VydChQYWdlUHJlY2VkZXMoKGxo cyArIDIgKiBwZXJfcGFnZSkgLyBwZXJfcGFnZSwgcmhzIC8gcGVyX3BhZ2UpKTsKKwlBc3NlcnQo UGFnZVByZWNlZGVzKChsaHMgKyAzICogcGVyX3BhZ2UpIC8gcGVyX3BhZ2UsIHJocyAvIHBlcl9w YWdlKSk7CisJQXNzZXJ0KCFQYWdlUHJlY2VkZXMocmhzIC8gcGVyX3BhZ2UsIChsaHMgKyBwZXJf cGFnZSkgLyBwZXJfcGFnZSkpOwogCiAJLyoKIAkgKiBHZXROZXdUcmFuc2FjdGlvbklkKCkgaGFz IGFzc2lnbmVkIHRoZSBsYXN0IFhJRCBpdCBjYW4gc2FmZWx5IHVzZSwgYW5kCkBAIC0xNDUxLDcg KzIwOSw3IEBAIFNscnVQYWdlUHJlY2VkZXNUZXN0T2Zmc2V0KFNscnVDdGwgY3RsLCBpbnQgcGVy X3BhZ2UsIHVpbnQzMiBvZmZzZXQpCiAJb2xkZXN0WGFjdCA9IG5ld2VzdFhhY3QgKyAxOwogCW9s ZGVzdFhhY3QgLT0gMVUgPDwgMzE7CiAJb2xkZXN0UGFnZSA9IG9sZGVzdFhhY3QgLyBwZXJfcGFn ZTsKLQlBc3NlcnQoIVNscnVNYXlEZWxldGVTZWdtZW50KGN0bCwKKwlBc3NlcnQoIVNscnVNYXlE ZWxldGVTZWdtZW50KFBhZ2VQcmVjZWRlcywKIAkJCQkJCQkJIChuZXdlc3RQYWdlIC0KIAkJCQkJ CQkJICBuZXdlc3RQYWdlICUgU0xSVV9QQUdFU19QRVJfU0VHTUVOVCksCiAJCQkJCQkJCSBvbGRl c3RQYWdlKSk7CkBAIC0xNDY3LDcgKzIyNSw3IEBAIFNscnVQYWdlUHJlY2VkZXNUZXN0T2Zmc2V0 KFNscnVDdGwgY3RsLCBpbnQgcGVyX3BhZ2UsIHVpbnQzMiBvZmZzZXQpCiAJb2xkZXN0WGFjdCA9 IG5ld2VzdFhhY3QgKyAxOwogCW9sZGVzdFhhY3QgLT0gMVUgPDwgMzE7CiAJb2xkZXN0UGFnZSA9 IG9sZGVzdFhhY3QgLyBwZXJfcGFnZTsKLQlBc3NlcnQoIVNscnVNYXlEZWxldGVTZWdtZW50KGN0 bCwKKwlBc3NlcnQoIVNscnVNYXlEZWxldGVTZWdtZW50KFBhZ2VQcmVjZWRlcywKIAkJCQkJCQkJ IChuZXdlc3RQYWdlIC0KIAkJCQkJCQkJICBuZXdlc3RQYWdlICUgU0xSVV9QQUdFU19QRVJfU0VH TUVOVCksCiAJCQkJCQkJCSBvbGRlc3RQYWdlKSk7CkBAIC0xNDgzLDEyICsyNDEsMTIgQEAgU2xy dVBhZ2VQcmVjZWRlc1Rlc3RPZmZzZXQoU2xydUN0bCBjdGwsIGludCBwZXJfcGFnZSwgdWludDMy IG9mZnNldCkKICAqIGRvIG5vdCBhcHBseSB0byB0aGVtLikKICAqLwogdm9pZAotU2xydVBhZ2VQ cmVjZWRlc1VuaXRUZXN0cyhTbHJ1Q3RsIGN0bCwgaW50IHBlcl9wYWdlKQorU2xydVBhZ2VQcmVj ZWRlc1VuaXRUZXN0cyhTbHJ1UGFnZVByZWNlZGVzRnVuY3Rpb24gUGFnZVByZWNlZGVzLCBpbnQg cGVyX3BhZ2UpCiB7CiAJLyogVGVzdCBmaXJzdCwgbWlkZGxlIGFuZCBsYXN0IGVudHJpZXMgb2Yg YSBwYWdlLiAqLwotCVNscnVQYWdlUHJlY2VkZXNUZXN0T2Zmc2V0KGN0bCwgcGVyX3BhZ2UsIDAp OwotCVNscnVQYWdlUHJlY2VkZXNUZXN0T2Zmc2V0KGN0bCwgcGVyX3BhZ2UsIHBlcl9wYWdlIC8g Mik7Ci0JU2xydVBhZ2VQcmVjZWRlc1Rlc3RPZmZzZXQoY3RsLCBwZXJfcGFnZSwgcGVyX3BhZ2Ug LSAxKTsKKwlTbHJ1UGFnZVByZWNlZGVzVGVzdE9mZnNldChQYWdlUHJlY2VkZXMsIHBlcl9wYWdl LCAwKTsKKwlTbHJ1UGFnZVByZWNlZGVzVGVzdE9mZnNldChQYWdlUHJlY2VkZXMsIHBlcl9wYWdl LCBwZXJfcGFnZSAvIDIpOworCVNscnVQYWdlUHJlY2VkZXNUZXN0T2Zmc2V0KFBhZ2VQcmVjZWRl cywgcGVyX3BhZ2UsIHBlcl9wYWdlIC0gMSk7CiB9CiAjZW5kaWYKIApAQCAtMTQ5OCwxMSArMjU2 LDEyIEBAIFNscnVQYWdlUHJlY2VkZXNVbml0VGVzdHMoU2xydUN0bCBjdGwsIGludCBwZXJfcGFn ZSkKICAqCQlvbmUgY29udGFpbmluZyB0aGUgcGFnZSBwYXNzZWQgYXMgImRhdGEiLgogICovCiBi b29sCi1TbHJ1U2NhbkRpckNiUmVwb3J0UHJlc2VuY2UoU2xydUN0bCBjdGwsIGNoYXIgKmZpbGVu YW1lLCBpbnQgc2VncGFnZSwgdm9pZCAqZGF0YSkKK1NscnVTY2FuRGlyQ2JSZXBvcnRQcmVzZW5j ZShpbnQgc2xydV9pZCwgU2xydVBhZ2VQcmVjZWRlc0Z1bmN0aW9uIFBhZ2VQcmVjZWRlcywKKwkJ CQkJCQljaGFyICpmaWxlbmFtZSwgaW50IHNlZ3BhZ2UsIHZvaWQgKmRhdGEpCiB7CiAJaW50CQkJ Y3V0b2ZmUGFnZSA9ICooaW50ICopIGRhdGE7CiAKLQlpZiAoU2xydU1heURlbGV0ZVNlZ21lbnQo Y3RsLCBzZWdwYWdlLCBjdXRvZmZQYWdlKSkKKwlpZiAoU2xydU1heURlbGV0ZVNlZ21lbnQoUGFn ZVByZWNlZGVzLCBzZWdwYWdlLCBjdXRvZmZQYWdlKSkKIAkJcmV0dXJuIHRydWU7CQkJLyogZm91 bmQgb25lOyBkb24ndCBpdGVyYXRlIGFueSBtb3JlICovCiAKIAlyZXR1cm4gZmFsc2U7CQkJCS8q IGtlZXAgZ29pbmcgKi8KQEAgLTE1MTMsMTIgKzI3MiwxNSBAQCBTbHJ1U2NhbkRpckNiUmVwb3J0 UHJlc2VuY2UoU2xydUN0bCBjdGwsIGNoYXIgKmZpbGVuYW1lLCBpbnQgc2VncGFnZSwgdm9pZCAq ZGF0YQogICoJCVRoaXMgY2FsbGJhY2sgZGVsZXRlcyBzZWdtZW50cyBwcmlvciB0byB0aGUgb25l IHBhc3NlZCBpbiBhcyAiZGF0YSIuCiAgKi8KIHN0YXRpYyBib29sCi1TbHJ1U2NhbkRpckNiRGVs ZXRlQ3V0b2ZmKFNscnVDdGwgY3RsLCBjaGFyICpmaWxlbmFtZSwgaW50IHNlZ3BhZ2UsIHZvaWQg KmRhdGEpCitTbHJ1U2NhbkRpckNiRGVsZXRlQ3V0b2ZmKGludCBzbHJ1X2lkLCBTbHJ1UGFnZVBy ZWNlZGVzRnVuY3Rpb24gUGFnZVByZWNlZGVzLAorCQkJCQkJICBjaGFyICpmaWxlbmFtZSwgaW50 IHNlZ3BhZ2UsIHZvaWQgKmRhdGEpCiB7CiAJaW50CQkJY3V0b2ZmUGFnZSA9ICooaW50ICopIGRh dGE7CiAKLQlpZiAoU2xydU1heURlbGV0ZVNlZ21lbnQoY3RsLCBzZWdwYWdlLCBjdXRvZmZQYWdl KSkKLQkJU2xydUludGVybmFsRGVsZXRlU2VnbWVudChjdGwsIHNlZ3BhZ2UgLyBTTFJVX1BBR0VT X1BFUl9TRUdNRU5UKTsKKwlpZiAoU2xydU1heURlbGV0ZVNlZ21lbnQoUGFnZVByZWNlZGVzLCBz ZWdwYWdlLCBjdXRvZmZQYWdlKSkKKwl7CisJCVNscnVEZWxldGVTZWdtZW50KHNscnVfaWQsIHNl Z3BhZ2UgLyBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UKTsKKwl9CiAKIAlyZXR1cm4gZmFsc2U7CQkJ CS8qIGtlZXAgZ29pbmcgKi8KIH0KQEAgLTE1MjgsOSArMjkwLDEwIEBAIFNscnVTY2FuRGlyQ2JE ZWxldGVDdXRvZmYoU2xydUN0bCBjdGwsIGNoYXIgKmZpbGVuYW1lLCBpbnQgc2VncGFnZSwgdm9p ZCAqZGF0YSkKICAqCQlUaGlzIGNhbGxiYWNrIGRlbGV0ZXMgYWxsIHNlZ21lbnRzLgogICovCiBi b29sCi1TbHJ1U2NhbkRpckNiRGVsZXRlQWxsKFNscnVDdGwgY3RsLCBjaGFyICpmaWxlbmFtZSwg aW50IHNlZ3BhZ2UsIHZvaWQgKmRhdGEpCitTbHJ1U2NhbkRpckNiRGVsZXRlQWxsKGludCBzbHJ1 X2lkLCBTbHJ1UGFnZVByZWNlZGVzRnVuY3Rpb24gUGFnZVByZWNlZGVzLAorCQkJCQkgICBjaGFy ICpmaWxlbmFtZSwgaW50IHNlZ3BhZ2UsIHZvaWQgKmRhdGEpCiB7Ci0JU2xydUludGVybmFsRGVs ZXRlU2VnbWVudChjdGwsIHNlZ3BhZ2UgLyBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UKTsKKwlTbHJ1 SW50ZXJuYWxEZWxldGVTZWdtZW50KHNscnVfaWQsIHNlZ3BhZ2UgLyBTTFJVX1BBR0VTX1BFUl9T RUdNRU5UKTsKIAogCXJldHVybiBmYWxzZTsJCQkJLyoga2VlcCBnb2luZyAqLwogfQpAQCAtMTU1 MSwxNiArMzE0LDIwIEBAIFNscnVTY2FuRGlyQ2JEZWxldGVBbGwoU2xydUN0bCBjdGwsIGNoYXIg KmZpbGVuYW1lLCBpbnQgc2VncGFnZSwgdm9pZCAqZGF0YSkKICAqIE5vdGUgdGhhdCBubyBsb2Nr aW5nIGlzIGFwcGxpZWQuCiAgKi8KIGJvb2wKLVNscnVTY2FuRGlyZWN0b3J5KFNscnVDdGwgY3Rs LCBTbHJ1U2NhbkNhbGxiYWNrIGNhbGxiYWNrLCB2b2lkICpkYXRhKQorU2xydVNjYW5EaXJlY3Rv cnkoaW50IHNscnVfaWQsIFNscnVQYWdlUHJlY2VkZXNGdW5jdGlvbiBQYWdlUHJlY2VkZXMsCisJ CQkJICBTbHJ1U2NhbkNhbGxiYWNrIGNhbGxiYWNrLCB2b2lkICpkYXRhKQogewogCWJvb2wJCXJl dHZhbCA9IGZhbHNlOwogCURJUgkJICAgKmNsZGlyOwogCXN0cnVjdCBkaXJlbnQgKmNsZGU7CiAJ aW50CQkJc2Vnbm87CiAJaW50CQkJc2VncGFnZTsKKwljb25zdCBjaGFyICpwYXRoOwogCi0JY2xk aXIgPSBBbGxvY2F0ZURpcihjdGwtPkRpcik7Ci0Jd2hpbGUgKChjbGRlID0gUmVhZERpcihjbGRp ciwgY3RsLT5EaXIpKSAhPSBOVUxMKQorCXBhdGggPSBzbHJ1X2RpcnNbc2xydV9pZF07CisKKwlj bGRpciA9IEFsbG9jYXRlRGlyKHBhdGgpOworCXdoaWxlICgoY2xkZSA9IFJlYWREaXIoY2xkaXIs IHBhdGgpKSAhPSBOVUxMKQogCXsKIAkJc2l6ZV90CQlsZW47CiAKQEAgLTE1NzMsOCArMzQwLDgg QEAgU2xydVNjYW5EaXJlY3RvcnkoU2xydUN0bCBjdGwsIFNscnVTY2FuQ2FsbGJhY2sgY2FsbGJh Y2ssIHZvaWQgKmRhdGEpCiAJCQlzZWdwYWdlID0gc2Vnbm8gKiBTTFJVX1BBR0VTX1BFUl9TRUdN RU5UOwogCiAJCQllbG9nKERFQlVHMiwgIlNscnVTY2FuRGlyZWN0b3J5IGludm9raW5nIGNhbGxi YWNrIG9uICVzLyVzIiwKLQkJCQkgY3RsLT5EaXIsIGNsZGUtPmRfbmFtZSk7Ci0JCQlyZXR2YWwg PSBjYWxsYmFjayhjdGwsIGNsZGUtPmRfbmFtZSwgc2VncGFnZSwgZGF0YSk7CisJCQkJIHBhdGgs IGNsZGUtPmRfbmFtZSk7CisJCQlyZXR2YWwgPSBjYWxsYmFjayhzbHJ1X2lkLCBQYWdlUHJlY2Vk ZXMsIGNsZGUtPmRfbmFtZSwgc2VncGFnZSwgZGF0YSk7CiAJCQlpZiAocmV0dmFsKQogCQkJCWJy ZWFrOwogCQl9CkBAIC0xNTg1LDI5ICszNTIsNzggQEAgU2xydVNjYW5EaXJlY3RvcnkoU2xydUN0 bCBjdGwsIFNscnVTY2FuQ2FsbGJhY2sgY2FsbGJhY2ssIHZvaWQgKmRhdGEpCiB9CiAKIC8qCi0g KiBJbmRpdmlkdWFsIFNMUlVzIChjbG9nLCAuLi4pIGhhdmUgdG8gcHJvdmlkZSBhIHN5bmMuYyBo YW5kbGVyIGZ1bmN0aW9uIHNvCi0gKiB0aGF0IHRoZXkgY2FuIHByb3ZpZGUgdGhlIGNvcnJlY3Qg IlNscnVDdGwiIChvdGhlcndpc2Ugd2UgZG9uJ3Qga25vdyBob3cgdG8KLSAqIGJ1aWxkIHRoZSBw YXRoKSwgYnV0IHRoZXkganVzdCBmb3J3YXJkIHRvIHRoaXMgY29tbW9uIGltcGxlbWVudGF0aW9u IHRoYXQKLSAqIHBlcmZvcm1zIHRoZSBmc3luYy4KKyAqIFJlYWQgYSBidWZmZXIuICBCdWZmZXIg aXMgcGlubmVkIG9uIHJldHVybi4KICAqLwotaW50Ci1TbHJ1U3luY0ZpbGVUYWcoU2xydUN0bCBj dGwsIGNvbnN0IEZpbGVUYWcgKmZ0YWcsIGNoYXIgKnBhdGgpCitCdWZmZXIKK1JlYWRTbHJ1QnVm ZmVyKGludCBzbHJ1X2lkLCBpbnQgcGFnZW5vKQogewotCWludAkJCWZkOwotCWludAkJCXNhdmVf ZXJybm87Ci0JaW50CQkJcmVzdWx0OworCWludAkJCXNlZ25vID0gcGFnZW5vIC8gU0xSVV9QQUdF U19QRVJfU0VHTUVOVDsKKwlpbnQJCQlycGFnZW5vID0gcGFnZW5vICUgU0xSVV9QQUdFU19QRVJf U0VHTUVOVDsKKwlSZWxGaWxlTG9jYXRvciBybG9jYXRvciA9IFNscnVSZWxGaWxlTG9jYXRvcihz bHJ1X2lkLCBzZWdubyk7CisJQnVmZmVyCQlidWZmZXI7CisJYm9vbAkJaGl0OworCisJLyogVHJ5 IHRvIGF2b2lkIGRvaW5nIGEgYnVmZmVyIG1hcHBpbmcgdGFibGUgbG9va3VwIGZvciByZXBlYXRl ZCBhY2Nlc3MuICovCisJYnVmZmVyID0gc2xydV9yZWNlbnRfYnVmZmVyc1tzbHJ1X2lkXS5yZWNl bnRfYnVmZmVyOworCWlmIChzbHJ1X3JlY2VudF9idWZmZXJzW3NscnVfaWRdLnBhZ2VubyA9PSBw YWdlbm8gJiYKKwkJQnVmZmVySXNWYWxpZChidWZmZXIpICYmCisJCVJlYWRSZWNlbnRCdWZmZXIo cmxvY2F0b3IsIE1BSU5fRk9SS05VTSwgcGFnZW5vLCBidWZmZXIpKQorCXsKKwkJcGdzdGF0X2Nv dW50X3NscnVfcGFnZV9oaXQoc2xydV9pZCk7CisJCXJldHVybiBidWZmZXI7CisJfQorCisJLyog UmVndWxhciBsb29rdXAuICovCisJYnVmZmVyID0gUmVhZEJ1ZmZlcldpdGhvdXRSZWxjYWNoZVdp dGhIaXQocmxvY2F0b3IsIE1BSU5fRk9SS05VTSwgcnBhZ2VubywKKwkJCQkJCQkJCQkJICBSQk1f Tk9STUFMLCBOVUxMLCB0cnVlLCAmaGl0KTsKIAotCVNscnVGaWxlTmFtZShjdGwsIHBhdGgsIGZ0 YWctPnNlZ25vKTsKKwkvKiBSZW1lbWJlciB3aGVyZSB0aGlzIHBhZ2UgaXMgZm9yIG5leHQgdGlt ZS4gKi8KKwlzbHJ1X3JlY2VudF9idWZmZXJzW3NscnVfaWRdLnBhZ2VubyA9IHBhZ2VubzsKKwlz bHJ1X3JlY2VudF9idWZmZXJzW3NscnVfaWRdLnJlY2VudF9idWZmZXIgPSBidWZmZXI7CiAKLQlm ZCA9IE9wZW5UcmFuc2llbnRGaWxlKHBhdGgsIE9fUkRXUiB8IFBHX0JJTkFSWSk7Ci0JaWYgKGZk IDwgMCkKLQkJcmV0dXJuIC0xOworCWlmIChoaXQpCisJCXBnc3RhdF9jb3VudF9zbHJ1X3BhZ2Vf aGl0KHNscnVfaWQpOwogCi0JcmVzdWx0ID0gcGdfZnN5bmMoZmQpOwotCXNhdmVfZXJybm8gPSBl cnJubzsKKwlyZXR1cm4gYnVmZmVyOworfQorCisvKgorICogWmVyby1pbml0aWFsaXplIGEgYnVm ZmVyLiAgQnVmZmVyIGlzIHBpbm5lZCBhbmQgZXhjbHVzaXZlbHkgbG9ja2VkIG9uIHJldHVybi4K KyAqLworQnVmZmVyCitaZXJvU2xydUJ1ZmZlcihpbnQgc2xydV9pZCwgaW50IHBhZ2VubykKK3sK KwlpbnQJCQlzZWdubyA9IHBhZ2VubyAvIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQ7CisJaW50CQkJ cnBhZ2VubyA9IHBhZ2VubyAlIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQ7CisJUmVsRmlsZUxvY2F0 b3IgcmxvY2F0b3IgPSBTbHJ1UmVsRmlsZUxvY2F0b3Ioc2xydV9pZCwgc2Vnbm8pOworCUJ1ZmZl cgkJYnVmZmVyOworCVNNZ3JGaWxlSGFuZGxlIHNmaWxlOwogCi0JQ2xvc2VUcmFuc2llbnRGaWxl KGZkKTsKKwlpZiAocnBhZ2VubyA9PSAwKQorCXsKKwkJc2ZpbGUgPSBzbWdyb3BlbihybG9jYXRv ciwgSW52YWxpZEJhY2tlbmRJZCwgTUFJTl9GT1JLTlVNKTsKKwkJaWYgKCFzbWdyZXhpc3RzKHNm aWxlKSkKKwkJCXNtZ3JjcmVhdGUoc2ZpbGUsIGZhbHNlKTsKKwl9CisKKwlidWZmZXIgPSBSZWFk QnVmZmVyV2l0aG91dFJlbGNhY2hlKHJsb2NhdG9yLCBNQUlOX0ZPUktOVU0sIHJwYWdlbm8sCisJ CQkJCQkJCQkgICBSQk1fWkVST19BTkRfTE9DSywgTlVMTCwgdHJ1ZSk7CisKKwkvKiBSZW1lbWJl ciB3aGVyZSB0aGlzIHBhZ2UgaXMgZm9yIG5leHQgdGltZS4gKi8KKwlzbHJ1X3JlY2VudF9idWZm ZXJzW3NscnVfaWRdLnBhZ2VubyA9IHBhZ2VubzsKKwlzbHJ1X3JlY2VudF9idWZmZXJzW3NscnVf aWRdLnJlY2VudF9idWZmZXIgPSBidWZmZXI7CisKKwlwZ3N0YXRfY291bnRfc2xydV9wYWdlX3pl cm9lZChzbHJ1X2lkKTsKKworCXJldHVybiBidWZmZXI7Cit9CisKK2Jvb2wKK1Byb2JlU2xydUJ1 ZmZlcihpbnQgc2xydV9pZCwgaW50IHBhZ2VubykKK3sKKwlpbnQJCQlzZWdubyA9IHBhZ2VubyAv IFNMUlVfUEFHRVNfUEVSX1NFR01FTlQ7CisJaW50CQkJcnBhZ2VubyA9IHBhZ2VubyAlIFNMUlVf UEFHRVNfUEVSX1NFR01FTlQ7CisJUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IgPSBTbHJ1UmVsRmls ZUxvY2F0b3Ioc2xydV9pZCwgc2Vnbm8pOwogCi0JZXJybm8gPSBzYXZlX2Vycm5vOwotCXJldHVy biByZXN1bHQ7CisJcmV0dXJuIEJ1ZmZlclByb2JlKHJsb2NhdG9yLCBNQUlOX0ZPUktOVU0sIHJw YWdlbm8pOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vc3VidHJh bnMuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3N1YnRyYW5zLmMKaW5kZXggNjZkMzU0 ODE1NTIuLmNlZmQ5MjgwMjFkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNh bS9zdWJ0cmFucy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3N1YnRyYW5zLmMK QEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJhY2Nlc3Mvc3VidHJhbnMuaCIKICNpbmNsdWRl ICJhY2Nlc3MvdHJhbnNhbS5oIgogI2luY2x1ZGUgInBnX3RyYWNlLmgiCisjaW5jbHVkZSAic3Rv cmFnZS9idWZtZ3IuaCIKICNpbmNsdWRlICJ1dGlscy9zbmFwbWdyLmgiCiAKIApAQCAtNTUsMTUg KzU2LDcgQEAKICNkZWZpbmUgVHJhbnNhY3Rpb25JZFRvRW50cnkoeGlkKSAoKHhpZCkgJSAoVHJh bnNhY3Rpb25JZCkgU1VCVFJBTlNfWEFDVFNfUEVSX1BBR0UpCiAKIAotLyoKLSAqIExpbmsgdG8g c2hhcmVkLW1lbW9yeSBkYXRhIHN0cnVjdHVyZXMgZm9yIFNVQlRSQU5TIGNvbnRyb2wKLSAqLwot c3RhdGljIFNscnVDdGxEYXRhIFN1YlRyYW5zQ3RsRGF0YTsKLQotI2RlZmluZSBTdWJUcmFuc0N0 bCAgKCZTdWJUcmFuc0N0bERhdGEpCi0KLQotc3RhdGljIGludAlaZXJvU1VCVFJBTlNQYWdlKGlu dCBwYWdlbm8pOworc3RhdGljIEJ1ZmZlciBaZXJvU1VCVFJBTlNQYWdlKGludCBwYWdlbm8pOwog c3RhdGljIGJvb2wgU3ViVHJhbnNQYWdlUHJlY2VkZXMoaW50IHBhZ2UxLCBpbnQgcGFnZTIpOwog CiAKQEAgLTc1LDE2ICs2OCwxNSBAQCBTdWJUcmFuc1NldFBhcmVudChUcmFuc2FjdGlvbklkIHhp ZCwgVHJhbnNhY3Rpb25JZCBwYXJlbnQpCiB7CiAJaW50CQkJcGFnZW5vID0gVHJhbnNhY3Rpb25J ZFRvUGFnZSh4aWQpOwogCWludAkJCWVudHJ5bm8gPSBUcmFuc2FjdGlvbklkVG9FbnRyeSh4aWQp OwotCWludAkJCXNsb3RubzsKIAlUcmFuc2FjdGlvbklkICpwdHI7CisJQnVmZmVyCQlidWZmZXI7 CiAKIAlBc3NlcnQoVHJhbnNhY3Rpb25JZElzVmFsaWQocGFyZW50KSk7CiAJQXNzZXJ0KFRyYW5z YWN0aW9uSWRGb2xsb3dzKHhpZCwgcGFyZW50KSk7CiAKLQlMV0xvY2tBY3F1aXJlKFN1YnRyYW5z U0xSVUxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0KLQlzbG90bm8gPSBTaW1wbGVMcnVSZWFkUGFnZShT dWJUcmFuc0N0bCwgcGFnZW5vLCB0cnVlLCB4aWQpOwotCXB0ciA9IChUcmFuc2FjdGlvbklkICop IFN1YlRyYW5zQ3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub107CisJYnVmZmVyID0gUmVh ZFNscnVCdWZmZXIoU0xSVV9TVUJUUkFOU19JRCwgcGFnZW5vKTsKKwlMb2NrQnVmZmVyKGJ1ZmZl ciwgQlVGRkVSX0xPQ0tfRVhDTFVTSVZFKTsKKwlwdHIgPSAoVHJhbnNhY3Rpb25JZCAqKSBCdWZm ZXJHZXRQYWdlKGJ1ZmZlcik7CiAJcHRyICs9IGVudHJ5bm87CiAKIAkvKgpAQCAtOTYsMTAgKzg4 LDEwIEBAIFN1YlRyYW5zU2V0UGFyZW50KFRyYW5zYWN0aW9uSWQgeGlkLCBUcmFuc2FjdGlvbklk IHBhcmVudCkKIAl7CiAJCUFzc2VydCgqcHRyID09IEludmFsaWRUcmFuc2FjdGlvbklkKTsKIAkJ KnB0ciA9IHBhcmVudDsKLQkJU3ViVHJhbnNDdGwtPnNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90bm9d ID0gdHJ1ZTsKKwkJTWFya0J1ZmZlckRpcnR5KGJ1ZmZlcik7CiAJfQogCi0JTFdMb2NrUmVsZWFz ZShTdWJ0cmFuc1NMUlVMb2NrKTsKKwlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CiB9CiAK IC8qCkBAIC0xMTAsOSArMTAyLDkgQEAgU3ViVHJhbnNHZXRQYXJlbnQoVHJhbnNhY3Rpb25JZCB4 aWQpCiB7CiAJaW50CQkJcGFnZW5vID0gVHJhbnNhY3Rpb25JZFRvUGFnZSh4aWQpOwogCWludAkJ CWVudHJ5bm8gPSBUcmFuc2FjdGlvbklkVG9FbnRyeSh4aWQpOwotCWludAkJCXNsb3RubzsKIAlU cmFuc2FjdGlvbklkICpwdHI7CiAJVHJhbnNhY3Rpb25JZCBwYXJlbnQ7CisJQnVmZmVyCQlidWZm ZXI7CiAKIAkvKiBDYW4ndCBhc2sgYWJvdXQgc3R1ZmYgdGhhdCBtaWdodCBub3QgYmUgYXJvdW5k IGFueW1vcmUgKi8KIAlBc3NlcnQoVHJhbnNhY3Rpb25JZEZvbGxvd3NPckVxdWFscyh4aWQsIFRy YW5zYWN0aW9uWG1pbikpOwpAQCAtMTIxLDE1ICsxMTMsMTQgQEAgU3ViVHJhbnNHZXRQYXJlbnQo VHJhbnNhY3Rpb25JZCB4aWQpCiAJaWYgKCFUcmFuc2FjdGlvbklkSXNOb3JtYWwoeGlkKSkKIAkJ cmV0dXJuIEludmFsaWRUcmFuc2FjdGlvbklkOwogCi0JLyogbG9jayBpcyBhY3F1aXJlZCBieSBT aW1wbGVMcnVSZWFkUGFnZV9SZWFkT25seSAqLworCWJ1ZmZlciA9IFJlYWRTbHJ1QnVmZmVyKFNM UlVfU1VCVFJBTlNfSUQsIHBhZ2Vubyk7CiAKLQlzbG90bm8gPSBTaW1wbGVMcnVSZWFkUGFnZV9S ZWFkT25seShTdWJUcmFuc0N0bCwgcGFnZW5vLCB4aWQpOwotCXB0ciA9IChUcmFuc2FjdGlvbklk ICopIFN1YlRyYW5zQ3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub107CisJcHRyID0gKFRy YW5zYWN0aW9uSWQgKikgQnVmZmVyR2V0UGFnZShidWZmZXIpOwogCXB0ciArPSBlbnRyeW5vOwog CiAJcGFyZW50ID0gKnB0cjsKIAotCUxXTG9ja1JlbGVhc2UoU3VidHJhbnNTTFJVTG9jayk7CisJ UmVsZWFzZUJ1ZmZlcihidWZmZXIpOwogCiAJcmV0dXJuIHBhcmVudDsKIH0KQEAgLTE3NywyNiAr MTY4LDYgQEAgU3ViVHJhbnNHZXRUb3Btb3N0VHJhbnNhY3Rpb24oVHJhbnNhY3Rpb25JZCB4aWQp CiAJcmV0dXJuIHByZXZpb3VzWGlkOwogfQogCi0KLS8qCi0gKiBJbml0aWFsaXphdGlvbiBvZiBz aGFyZWQgbWVtb3J5IGZvciBTVUJUUkFOUwotICovCi1TaXplCi1TVUJUUkFOU1NobWVtU2l6ZSh2 b2lkKQotewotCXJldHVybiBTaW1wbGVMcnVTaG1lbVNpemUoTlVNX1NVQlRSQU5TX0JVRkZFUlMs IDApOwotfQotCi12b2lkCi1TVUJUUkFOU1NobWVtSW5pdCh2b2lkKQotewotCVN1YlRyYW5zQ3Rs LT5QYWdlUHJlY2VkZXMgPSBTdWJUcmFuc1BhZ2VQcmVjZWRlczsKLQlTaW1wbGVMcnVJbml0KFN1 YlRyYW5zQ3RsLCAiU3VidHJhbnMiLCBOVU1fU1VCVFJBTlNfQlVGRkVSUywgMCwKLQkJCQkgIFN1 YnRyYW5zU0xSVUxvY2ssICJwZ19zdWJ0cmFucyIsCi0JCQkJICBMV1RSQU5DSEVfU1VCVFJBTlNf QlVGRkVSLCBTWU5DX0hBTkRMRVJfTk9ORSk7Ci0JU2xydVBhZ2VQcmVjZWRlc1VuaXRUZXN0cyhT dWJUcmFuc0N0bCwgU1VCVFJBTlNfWEFDVFNfUEVSX1BBR0UpOwotfQotCiAvKgogICogVGhpcyBm dW5jIG11c3QgYmUgY2FsbGVkIE9OQ0Ugb24gc3lzdGVtIGluc3RhbGwuICBJdCBjcmVhdGVzCiAg KiB0aGUgaW5pdGlhbCBTVUJUUkFOUyBzZWdtZW50LiAgKFRoZSBTVUJUUkFOUyBkaXJlY3Rvcnkg aXMgYXNzdW1lZCB0bwpAQCAtMjEwLDE4ICsxODEsMTYgQEAgU1VCVFJBTlNTaG1lbUluaXQodm9p ZCkKIHZvaWQKIEJvb3RTdHJhcFNVQlRSQU5TKHZvaWQpCiB7Ci0JaW50CQkJc2xvdG5vOworCUJ1 ZmZlcgkJYnVmZmVyOwogCi0JTFdMb2NrQWNxdWlyZShTdWJ0cmFuc1NMUlVMb2NrLCBMV19FWENM VVNJVkUpOworCVNscnVQYWdlUHJlY2VkZXNVbml0VGVzdHMoU3ViVHJhbnNQYWdlUHJlY2VkZXMs IFNVQlRSQU5TX1hBQ1RTX1BFUl9QQUdFKTsKIAogCS8qIENyZWF0ZSBhbmQgemVybyB0aGUgZmly c3QgcGFnZSBvZiB0aGUgc3VidHJhbnMgbG9nICovCi0Jc2xvdG5vID0gWmVyb1NVQlRSQU5TUGFn ZSgwKTsKKwlidWZmZXIgPSBaZXJvU1VCVFJBTlNQYWdlKDApOwogCiAJLyogTWFrZSBzdXJlIGl0 J3Mgd3JpdHRlbiBvdXQgKi8KLQlTaW1wbGVMcnVXcml0ZVBhZ2UoU3ViVHJhbnNDdGwsIHNsb3Ru byk7Ci0JQXNzZXJ0KCFTdWJUcmFuc0N0bC0+c2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Rub10pOwot Ci0JTFdMb2NrUmVsZWFzZShTdWJ0cmFuc1NMUlVMb2NrKTsKKwlGbHVzaE9uZUJ1ZmZlcihidWZm ZXIpOworCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsKIH0KIAogLyoKQEAgLTIzMiwxMCAr MjAxLDE1IEBAIEJvb3RTdHJhcFNVQlRSQU5TKHZvaWQpCiAgKgogICogQ29udHJvbCBsb2NrIG11 c3QgYmUgaGVsZCBhdCBlbnRyeSwgYW5kIHdpbGwgYmUgaGVsZCBhdCBleGl0LgogICovCi1zdGF0 aWMgaW50CitzdGF0aWMgQnVmZmVyCiBaZXJvU1VCVFJBTlNQYWdlKGludCBwYWdlbm8pCiB7Ci0J cmV0dXJuIFNpbXBsZUxydVplcm9QYWdlKFN1YlRyYW5zQ3RsLCBwYWdlbm8pOworCUJ1ZmZlcgkJ YnVmZmVyOworCisJYnVmZmVyID0gWmVyb1NscnVCdWZmZXIoU0xSVV9TVUJUUkFOU19JRCwgcGFn ZW5vKTsKKwlNYXJrQnVmZmVyRGlydHkoYnVmZmVyKTsKKworCXJldHVybiBidWZmZXI7CiB9CiAK IC8qCkBAIC0yNTgsNyArMjMyLDYgQEAgU3RhcnR1cFNVQlRSQU5TKFRyYW5zYWN0aW9uSWQgb2xk ZXN0QWN0aXZlWElEKQogCSAqIFdoZW5ldmVyIHdlIGFkdmFuY2UgaW50byBhIG5ldyBwYWdlLCBF eHRlbmRTVUJUUkFOUyB3aWxsIGxpa2V3aXNlIHplcm8KIAkgKiB0aGUgbmV3IHBhZ2Ugd2l0aG91 dCByZWdhcmQgdG8gd2hhdGV2ZXIgd2FzIHByZXZpb3VzbHkgb24gZGlzay4KIAkgKi8KLQlMV0xv Y2tBY3F1aXJlKFN1YnRyYW5zU0xSVUxvY2ssIExXX0VYQ0xVU0lWRSk7CiAKIAlzdGFydFBhZ2Ug PSBUcmFuc2FjdGlvbklkVG9QYWdlKG9sZGVzdEFjdGl2ZVhJRCk7CiAJbmV4dFhpZCA9IFNobWVt VmFyaWFibGVDYWNoZS0+bmV4dFhpZDsKQEAgLTI2NiwzNiArMjM5LDE1IEBAIFN0YXJ0dXBTVUJU UkFOUyhUcmFuc2FjdGlvbklkIG9sZGVzdEFjdGl2ZVhJRCkKIAogCXdoaWxlIChzdGFydFBhZ2Ug IT0gZW5kUGFnZSkKIAl7Ci0JCSh2b2lkKSBaZXJvU1VCVFJBTlNQYWdlKHN0YXJ0UGFnZSk7CisJ CVVubG9ja1JlbGVhc2VCdWZmZXIoWmVyb1NVQlRSQU5TUGFnZShzdGFydFBhZ2UpKTsKIAkJc3Rh cnRQYWdlKys7CiAJCS8qIG11c3QgYWNjb3VudCBmb3Igd3JhcGFyb3VuZCAqLwogCQlpZiAoc3Rh cnRQYWdlID4gVHJhbnNhY3Rpb25JZFRvUGFnZShNYXhUcmFuc2FjdGlvbklkKSkKIAkJCXN0YXJ0 UGFnZSA9IDA7CiAJfQotCSh2b2lkKSBaZXJvU1VCVFJBTlNQYWdlKHN0YXJ0UGFnZSk7Ci0KLQlM V0xvY2tSZWxlYXNlKFN1YnRyYW5zU0xSVUxvY2spOworCVVubG9ja1JlbGVhc2VCdWZmZXIoWmVy b1NVQlRSQU5TUGFnZShzdGFydFBhZ2UpKTsKIH0KIAotLyoKLSAqIFBlcmZvcm0gYSBjaGVja3Bv aW50IC0tLSBlaXRoZXIgZHVyaW5nIHNodXRkb3duLCBvciBvbi10aGUtZmx5Ci0gKi8KLXZvaWQK LUNoZWNrUG9pbnRTVUJUUkFOUyh2b2lkKQotewotCS8qCi0JICogV3JpdGUgZGlydHkgU1VCVFJB TlMgcGFnZXMgdG8gZGlzawotCSAqCi0JICogVGhpcyBpcyBub3QgYWN0dWFsbHkgbmVjZXNzYXJ5 IGZyb20gYSBjb3JyZWN0bmVzcyBwb2ludCBvZiB2aWV3LiBXZSBkbwotCSAqIGl0IG1lcmVseSB0 byBpbXByb3ZlIHRoZSBvZGRzIHRoYXQgd3JpdGluZyBvZiBkaXJ0eSBwYWdlcyBpcyBkb25lIGJ5 Ci0JICogdGhlIGNoZWNrcG9pbnQgcHJvY2VzcyBhbmQgbm90IGJ5IGJhY2tlbmRzLgotCSAqLwot CVRSQUNFX1BPU1RHUkVTUUxfU1VCVFJBTlNfQ0hFQ0tQT0lOVF9TVEFSVCh0cnVlKTsKLQlTaW1w bGVMcnVXcml0ZUFsbChTdWJUcmFuc0N0bCwgdHJ1ZSk7Ci0JVFJBQ0VfUE9TVEdSRVNRTF9TVUJU UkFOU19DSEVDS1BPSU5UX0RPTkUodHJ1ZSk7Ci19Ci0KLQogLyoKICAqIE1ha2Ugc3VyZSB0aGF0 IFNVQlRSQU5TIGhhcyByb29tIGZvciBhIG5ld2x5LWFsbG9jYXRlZCBYSUQuCiAgKgpAQCAtMzE5 LDEyICsyNzEsOCBAQCBFeHRlbmRTVUJUUkFOUyhUcmFuc2FjdGlvbklkIG5ld2VzdFhhY3QpCiAK IAlwYWdlbm8gPSBUcmFuc2FjdGlvbklkVG9QYWdlKG5ld2VzdFhhY3QpOwogCi0JTFdMb2NrQWNx dWlyZShTdWJ0cmFuc1NMUlVMb2NrLCBMV19FWENMVVNJVkUpOwotCiAJLyogWmVybyB0aGUgcGFn ZSAqLwotCVplcm9TVUJUUkFOU1BhZ2UocGFnZW5vKTsKLQotCUxXTG9ja1JlbGVhc2UoU3VidHJh bnNTTFJVTG9jayk7CisJVW5sb2NrUmVsZWFzZUJ1ZmZlcihaZXJvU1VCVFJBTlNQYWdlKHBhZ2Vu bykpOwogfQogCiAKQEAgLTM1MCw3ICsyOTgsNyBAQCBUcnVuY2F0ZVNVQlRSQU5TKFRyYW5zYWN0 aW9uSWQgb2xkZXN0WGFjdCkKIAlUcmFuc2FjdGlvbklkUmV0cmVhdChvbGRlc3RYYWN0KTsKIAlj dXRvZmZQYWdlID0gVHJhbnNhY3Rpb25JZFRvUGFnZShvbGRlc3RYYWN0KTsKIAotCVNpbXBsZUxy dVRydW5jYXRlKFN1YlRyYW5zQ3RsLCBjdXRvZmZQYWdlKTsKKwlTaW1wbGVMcnVUcnVuY2F0ZShT TFJVX1NVQlRSQU5TX0lELCBTdWJUcmFuc1BhZ2VQcmVjZWRlcywgY3V0b2ZmUGFnZSk7CiB9CiAK IApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGFjdC5jIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL3RyYW5zYW0veGFjdC5jCmluZGV4IDgwODZiODU3Yjk2Li5kNzkyMTg2Y2Y5 NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGFjdC5jCisrKyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hhY3QuYwpAQCAtNjcsNiArNjcsNyBAQAogI2luY2x1 ZGUgInV0aWxzL2ludmFsLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKICNpbmNsdWRl ICJ1dGlscy9yZWxtYXBwZXIuaCIKKyNpbmNsdWRlICJ1dGlscy9yZXNvd25lcl9wcml2YXRlLmgi CiAjaW5jbHVkZSAidXRpbHMvc25hcG1nci5oIgogI2luY2x1ZGUgInV0aWxzL3RpbWVvdXQuaCIK ICNpbmNsdWRlICJ1dGlscy90aW1lc3RhbXAuaCIKQEAgLTEzOTYsNiArMTM5Nyw3IEBAIFJlY29y ZFRyYW5zYWN0aW9uQ29tbWl0KHZvaWQpCiAJCSAqIGFyZSBkZWxheWluZyB0aGUgY2hlY2twb2lu dCBhIGJpdCBmdXp6eSwgYnV0IGl0IGRvZXNuJ3QgbWF0dGVyLgogCQkgKi8KIAkJQXNzZXJ0KChN eVByb2MtPmRlbGF5Q2hrcHRGbGFncyAmIERFTEFZX0NIS1BUX1NUQVJUKSA9PSAwKTsKKwogCQlT VEFSVF9DUklUX1NFQ1RJT04oKTsKIAkJTXlQcm9jLT5kZWxheUNoa3B0RmxhZ3MgfD0gREVMQVlf Q0hLUFRfU1RBUlQ7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hs b2cuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYwppbmRleCBhMzFmYmJmZjc4 ZC4uOWUyYWMwZDUzOTIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hs b2cuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMKQEAgLTQ2NDUsNiAr NDY0NSw3IEBAIEJvb3RTdHJhcFhMT0codm9pZCkKIAl1aW50NjQJCXN5c2lkZW50aWZpZXI7CiAJ c3RydWN0IHRpbWV2YWwgdHY7CiAJcGdfY3JjMzJjCWNyYzsKKwlSZXNvdXJjZU93bmVyIHJlc293 bmVyOwogCiAJLyogYWxsb3cgb3JkaW5hcnkgV0FMIHNlZ21lbnQgY3JlYXRpb24sIGxpa2UgU3Rh cnR1cFhMT0coKSB3b3VsZCAqLwogCVNldEluc3RhbGxYTG9nRmlsZVNlZ21lbnRBY3RpdmUoKTsK QEAgLTQ3ODQsMTAgKzQ3ODUsMTQgQEAgQm9vdFN0cmFwWExPRyh2b2lkKQogCVdyaXRlQ29udHJv bEZpbGUoKTsKIAogCS8qIEJvb3RzdHJhcCB0aGUgY29tbWl0IGxvZywgdG9vICovCisJcmVzb3du ZXIgPSBSZXNvdXJjZU93bmVyQ3JlYXRlKE5VTEwsICJib290c3RyYXAgcmVzb3duZXIiKTsKKwlD dXJyZW50UmVzb3VyY2VPd25lciA9IHJlc293bmVyOwogCUJvb3RTdHJhcENMT0coKTsKIAlCb290 U3RyYXBDb21taXRUcygpOwogCUJvb3RTdHJhcFNVQlRSQU5TKCk7CiAJQm9vdFN0cmFwTXVsdGlY YWN0KCk7CisJQ3VycmVudFJlc291cmNlT3duZXIgPSBOVUxMOworCVJlc291cmNlT3duZXJEZWxl dGUocmVzb3duZXIpOwogCiAJcGZyZWUoYnVmZmVyKTsKIApAQCAtNDc5Niw2ICs0ODAxLDggQEAg Qm9vdFN0cmFwWExPRyh2b2lkKQogCSAqIG90aGVyd2lzZSBuZXZlciBydW4gdGhlIGNoZWNrcyBh bmQgR1VDIHJlbGF0ZWQgaW5pdGlhbGl6YXRpb25zIHRoZXJlaW4uCiAJICovCiAJUmVhZENvbnRy b2xGaWxlKCk7CisKKwlzbWdyY2xvc2VhbGwoKTsKIH0KIAogc3RhdGljIGNoYXIgKgpAQCAtNzAw NCwxNSArNzAxMSwxMSBAQCBDaGVja1BvaW50R3V0cyhYTG9nUmVjUHRyIGNoZWNrUG9pbnRSZWRv LCBpbnQgZmxhZ3MpCiAJQ2hlY2tQb2ludFNuYXBCdWlsZCgpOwogCUNoZWNrUG9pbnRMb2dpY2Fs UmV3cml0ZUhlYXAoKTsKIAlDaGVja1BvaW50UmVwbGljYXRpb25PcmlnaW4oKTsKKwlDaGVja1Bv aW50UHJlZGljYXRlKCk7CiAKLQkvKiBXcml0ZSBvdXQgYWxsIGRpcnR5IGRhdGEgaW4gU0xSVXMg YW5kIHRoZSBtYWluIGJ1ZmZlciBwb29sICovCisJLyogV3JpdGUgb3V0IGFsbCBkaXJ0eSBkYXRh IGluIHRoZSBidWZmZXIgcG9vbCAqLwogCVRSQUNFX1BPU1RHUkVTUUxfQlVGRkVSX0NIRUNLUE9J TlRfU1RBUlQoZmxhZ3MpOwogCUNoZWNrcG9pbnRTdGF0cy5ja3B0X3dyaXRlX3QgPSBHZXRDdXJy ZW50VGltZXN0YW1wKCk7Ci0JQ2hlY2tQb2ludENMT0coKTsKLQlDaGVja1BvaW50Q29tbWl0VHMo KTsKLQlDaGVja1BvaW50U1VCVFJBTlMoKTsKLQlDaGVja1BvaW50TXVsdGlYYWN0KCk7Ci0JQ2hl Y2tQb2ludFByZWRpY2F0ZSgpOwogCUNoZWNrUG9pbnRCdWZmZXJzKGZsYWdzKTsKIAogCS8qIFBl cmZvcm0gYWxsIHF1ZXVlZCB1cCBmc3luY3MgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy90cmFuc2FtL3hsb2dwcmVmZXRjaGVyLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNh bS94bG9ncHJlZmV0Y2hlci5jCmluZGV4IDBjZjAzOTQ1ZWVjLi5lN2IyYTJmOTI3MiAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3ByZWZldGNoZXIuYworKysgYi9z cmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncHJlZmV0Y2hlci5jCkBAIC02NTIsNyArNjUy LDcgQEAgWExvZ1ByZWZldGNoZXJOZXh0QmxvY2sodWludHB0cl90IHBnc3JfcHJpdmF0ZSwgWExv Z1JlY1B0ciAqbHNuKQogCQl7CiAJCQlpbnQJCQlibG9ja19pZCA9IHByZWZldGNoZXItPm5leHRf YmxvY2tfaWQrKzsKIAkJCURlY29kZWRCa3BCbG9jayAqYmxvY2sgPSAmcmVjb3JkLT5ibG9ja3Nb YmxvY2tfaWRdOwotCQkJU01nclJlbGF0aW9uIHJlbG47CisJCQlTTWdyRmlsZUhhbmRsZSBzZmls ZTsKIAkJCVByZWZldGNoQnVmZmVyUmVzdWx0IHJlc3VsdDsKIAogCQkJaWYgKCFibG9jay0+aW5f dXNlKQpAQCAtNzIyLDcgKzcyMiw3IEBAIFhMb2dQcmVmZXRjaGVyTmV4dEJsb2NrKHVpbnRwdHJf dCBwZ3NyX3ByaXZhdGUsIFhMb2dSZWNQdHIgKmxzbikKIAkJCSAqIHNhbWUgcmVsYXRpb24gKHdp dGggc29tZSBzY2hlbWUgdG8gaGFuZGxlIGludmFsaWRhdGlvbnMKIAkJCSAqIHNhZmVseSksIGJ1 dCBmb3Igbm93IHdlJ2xsIGNhbGwgc21ncm9wZW4oKSBldmVyeSB0aW1lLgogCQkJICovCi0JCQly ZWxuID0gc21ncm9wZW4oYmxvY2stPnJsb2NhdG9yLCBJbnZhbGlkQmFja2VuZElkKTsKKwkJCXNm aWxlID0gc21ncm9wZW4oYmxvY2stPnJsb2NhdG9yLCBJbnZhbGlkQmFja2VuZElkLCBibG9jay0+ Zm9ya251bSk7CiAKIAkJCS8qCiAJCQkgKiBJZiB0aGUgcmVsYXRpb24gZmlsZSBkb2Vzbid0IGV4 aXN0IG9uIGRpc2ssIGZvciBleGFtcGxlIGJlY2F1c2UKQEAgLTczMSwxNCArNzMxLDE0IEBAIFhM b2dQcmVmZXRjaGVyTmV4dEJsb2NrKHVpbnRwdHJfdCBwZ3NyX3ByaXZhdGUsIFhMb2dSZWNQdHIg KmxzbikKIAkJCSAqIGZ1cnRoZXIgcHJlZmV0Y2hpbmcgaW4gdGhlIHJlbGF0aW9uIHVudGlsIHRo aXMgcmVjb3JkIGlzCiAJCQkgKiByZXBsYXllZC4KIAkJCSAqLwotCQkJaWYgKCFzbWdyZXhpc3Rz KHJlbG4sIE1BSU5fRk9SS05VTSkpCisJCQlpZiAoIXNtZ3JleGlzdHMoc2ZpbGUpKQogCQkJewog I2lmZGVmIFhMT0dQUkVGRVRDSEVSX0RFQlVHX0xFVkVMCiAJCQkJZWxvZyhYTE9HUFJFRkVUQ0hF Ul9ERUJVR19MRVZFTCwKIAkJCQkJICJzdXBwcmVzc2luZyBhbGwgcHJlZmV0Y2ggaW4gcmVsYXRp b24gJXUvJXUvJXUgdW50aWwgJVgvJVggaXMgcmVwbGF5ZWQsIGJlY2F1c2UgdGhlIHJlbGF0aW9u IGRvZXMgbm90IGV4aXN0IG9uIGRpc2siLAotCQkJCQkgcmVsbi0+c21ncl9ybG9jYXRvci5sb2Nh dG9yLnNwY09pZCwKLQkJCQkJIHJlbG4tPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5kYk9pZCwKLQkJ CQkJIHJlbG4tPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5yZWxOdW1iZXIsCisJCQkJCSBzZmlsZS0+ c21ncl9ybG9jYXRvci5sb2NhdG9yLnNwY09pZCwKKwkJCQkJIHNmaWxlLT5zbWdyX3Jsb2NhdG9y LmxvY2F0b3IuZGJPaWQsCisJCQkJCSBzZmlsZS0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnJlbE51 bWJlciwKIAkJCQkJIExTTl9GT1JNQVRfQVJHUyhyZWNvcmQtPmxzbikpOwogI2VuZGlmCiAJCQkJ WExvZ1ByZWZldGNoZXJBZGRGaWx0ZXIocHJlZmV0Y2hlciwgYmxvY2stPnJsb2NhdG9yLCAwLApA QCAtNzUyLDE0ICs3NTIsMTQgQEAgWExvZ1ByZWZldGNoZXJOZXh0QmxvY2sodWludHB0cl90IHBn c3JfcHJpdmF0ZSwgWExvZ1JlY1B0ciAqbHNuKQogCQkJICogYmxvY2sgeWV0LCBzdXBwcmVzcyBw cmVmZXRjaGluZyBvZiB0aGlzIGJsb2NrIGFuZCBoaWdoZXIgdW50aWwKIAkJCSAqIHRoaXMgcmVj b3JkIGlzIHJlcGxheWVkLgogCQkJICovCi0JCQlpZiAoYmxvY2stPmJsa25vID49IHNtZ3JuYmxv Y2tzKHJlbG4sIGJsb2NrLT5mb3JrbnVtKSkKKwkJCWlmIChibG9jay0+Ymxrbm8gPj0gc21ncm5i bG9ja3Moc2ZpbGUpKQogCQkJewogI2lmZGVmIFhMT0dQUkVGRVRDSEVSX0RFQlVHX0xFVkVMCiAJ CQkJZWxvZyhYTE9HUFJFRkVUQ0hFUl9ERUJVR19MRVZFTCwKIAkJCQkJICJzdXBwcmVzc2luZyBw cmVmZXRjaCBpbiByZWxhdGlvbiAldS8ldS8ldSBmcm9tIGJsb2NrICV1IHVudGlsICVYLyVYIGlz IHJlcGxheWVkLCBiZWNhdXNlIHRoZSByZWxhdGlvbiBpcyB0b28gc21hbGwiLAotCQkJCQkgcmVs bi0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnNwY09pZCwKLQkJCQkJIHJlbG4tPnNtZ3JfcmxvY2F0 b3IubG9jYXRvci5kYk9pZCwKLQkJCQkJIHJlbG4tPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5yZWxO dW1iZXIsCisJCQkJCSBzZmlsZS0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnNwY09pZCwKKwkJCQkJ IHNmaWxlLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IuZGJPaWQsCisJCQkJCSBzZmlsZS0+c21ncl9y bG9jYXRvci5sb2NhdG9yLnJlbE51bWJlciwKIAkJCQkJIGJsb2NrLT5ibGtubywKIAkJCQkJIExT Tl9GT1JNQVRfQVJHUyhyZWNvcmQtPmxzbikpOwogI2VuZGlmCkBAIC03NzAsNyArNzcwLDcgQEAg WExvZ1ByZWZldGNoZXJOZXh0QmxvY2sodWludHB0cl90IHBnc3JfcHJpdmF0ZSwgWExvZ1JlY1B0 ciAqbHNuKQogCQkJfQogCiAJCQkvKiBUcnkgdG8gaW5pdGlhdGUgcHJlZmV0Y2hpbmcuICovCi0J CQlyZXN1bHQgPSBQcmVmZXRjaFNoYXJlZEJ1ZmZlcihyZWxuLCBibG9jay0+Zm9ya251bSwgYmxv Y2stPmJsa25vKTsKKwkJCXJlc3VsdCA9IFByZWZldGNoU2hhcmVkQnVmZmVyKHNmaWxlLCBibG9j ay0+Ymxrbm8pOwogCQkJaWYgKEJ1ZmZlcklzVmFsaWQocmVzdWx0LnJlY2VudF9idWZmZXIpKQog CQkJewogCQkJCS8qIENhY2hlIGhpdCwgbm90aGluZyB0byBkby4gKi8KQEAgLTc5Niw5ICs3OTYs OSBAQCBYTG9nUHJlZmV0Y2hlck5leHRCbG9jayh1aW50cHRyX3QgcGdzcl9wcml2YXRlLCBYTG9n UmVjUHRyICpsc24pCiAJCQkJICovCiAJCQkJZWxvZyhFUlJPUiwKIAkJCQkJICJjb3VsZCBub3Qg cHJlZmV0Y2ggcmVsYXRpb24gJXUvJXUvJXUgYmxvY2sgJXUiLAotCQkJCQkgcmVsbi0+c21ncl9y bG9jYXRvci5sb2NhdG9yLnNwY09pZCwKLQkJCQkJIHJlbG4tPnNtZ3JfcmxvY2F0b3IubG9jYXRv ci5kYk9pZCwKLQkJCQkJIHJlbG4tPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5yZWxOdW1iZXIsCisJ CQkJCSBzZmlsZS0+c21ncl9sb2NhdG9yLmxvY2F0b3Iuc3BjT2lkLAorCQkJCQkgc2ZpbGUtPnNt Z3JfbG9jYXRvci5sb2NhdG9yLmRiT2lkLAorCQkJCQkgc2ZpbGUtPnNtZ3JfbG9jYXRvci5sb2Nh dG9yLnJlbE51bWJlciwKIAkJCQkJIGJsb2NrLT5ibGtubyk7CiAJCQl9CiAJCX0KZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2d1dGlscy5jIGIvc3JjL2JhY2tlbmQv YWNjZXNzL3RyYW5zYW0veGxvZ3V0aWxzLmMKaW5kZXggNTYzY2JhMjU4ZGQuLmFiNTliZmU2NmM5 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ndXRpbHMuYworKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ndXRpbHMuYwpAQCAtNDc3LDcgKzQ3Nyw3 IEBAIFhMb2dSZWFkQnVmZmVyRXh0ZW5kZWQoUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IsIEZvcmtO dW1iZXIgZm9ya251bSwKIHsKIAlCbG9ja051bWJlciBsYXN0YmxvY2s7CiAJQnVmZmVyCQlidWZm ZXI7Ci0JU01nclJlbGF0aW9uIHNtZ3I7CisJU01nckZpbGVIYW5kbGUgc2ZpbGU7CiAKIAlBc3Nl cnQoYmxrbm8gIT0gUF9ORVcpOwogCkBAIC00OTEsNyArNDkxLDcgQEAgWExvZ1JlYWRCdWZmZXJF eHRlbmRlZChSZWxGaWxlTG9jYXRvciBybG9jYXRvciwgRm9ya051bWJlciBmb3JrbnVtLAogCX0K IAogCS8qIE9wZW4gdGhlIHJlbGF0aW9uIGF0IHNtZ3IgbGV2ZWwgKi8KLQlzbWdyID0gc21ncm9w ZW4ocmxvY2F0b3IsIEludmFsaWRCYWNrZW5kSWQpOworCXNmaWxlID0gc21ncm9wZW4ocmxvY2F0 b3IsIEludmFsaWRCYWNrZW5kSWQsIGZvcmtudW0pOwogCiAJLyoKIAkgKiBDcmVhdGUgdGhlIHRh cmdldCBmaWxlIGlmIGl0IGRvZXNuJ3QgYWxyZWFkeSBleGlzdC4gIFRoaXMgbGV0cyB1cyBjb3Bl CkBAIC01MDEsOSArNTAxLDkgQEAgWExvZ1JlYWRCdWZmZXJFeHRlbmRlZChSZWxGaWxlTG9jYXRv ciBybG9jYXRvciwgRm9ya051bWJlciBmb3JrbnVtLAogCSAqIGZpbGVzeXN0ZW0gbG9zZXMgYW4g aW5vZGUgZHVyaW5nIGEgY3Jhc2guICBCZXR0ZXIgdG8gd3JpdGUgdGhlIGRhdGEKIAkgKiB1bnRp bCB3ZSBhcmUgYWN0dWFsbHkgdG9sZCB0byBkZWxldGUgdGhlIGZpbGUuKQogCSAqLwotCXNtZ3Jj cmVhdGUoc21nciwgZm9ya251bSwgdHJ1ZSk7CisJc21ncmNyZWF0ZShzZmlsZSwgdHJ1ZSk7CiAK LQlsYXN0YmxvY2sgPSBzbWdybmJsb2NrcyhzbWdyLCBmb3JrbnVtKTsKKwlsYXN0YmxvY2sgPSBz bWdybmJsb2NrcyhzZmlsZSk7CiAKIAlpZiAoYmxrbm8gPCBsYXN0YmxvY2spCiAJewpAQCAtNjMx LDcgKzYzMSw3IEBAIENyZWF0ZUZha2VSZWxjYWNoZUVudHJ5KFJlbEZpbGVMb2NhdG9yIHJsb2Nh dG9yKQogCXJlbC0+cmRfbG9ja0luZm8ubG9ja1JlbElkLmRiSWQgPSBybG9jYXRvci5kYk9pZDsK IAlyZWwtPnJkX2xvY2tJbmZvLmxvY2tSZWxJZC5yZWxJZCA9IHJsb2NhdG9yLnJlbE51bWJlcjsK IAotCXJlbC0+cmRfc21nciA9IE5VTEw7CisJTWVtU2V0KHJlbC0+cmRfc21nciwgMCwgc2l6ZW9m KHJlbC0+cmRfc21ncikpOwogCiAJcmV0dXJuIHJlbDsKIH0KQEAgLTY0Myw4ICs2NDMsMTEgQEAg dm9pZAogRnJlZUZha2VSZWxjYWNoZUVudHJ5KFJlbGF0aW9uIGZha2VyZWwpCiB7CiAJLyogbWFr ZSBzdXJlIHRoZSBmYWtlcmVsIGlzIG5vdCByZWZlcmVuY2VkIGJ5IHRoZSBTbWdyUmVsYXRpb24g YW55bW9yZSAqLwotCWlmIChmYWtlcmVsLT5yZF9zbWdyICE9IE5VTEwpCi0JCXNtZ3JjbGVhcm93 bmVyKCZmYWtlcmVsLT5yZF9zbWdyLCBmYWtlcmVsLT5yZF9zbWdyKTsKKwlmb3IgKGludCBpID0g MDsgaSA8PSBNQVhfRk9SS05VTTsgaSsrKQorCXsKKwkJaWYgKGZha2VyZWwtPnJkX3NtZ3JbaV0g IT0gTlVMTCkKKwkJCXNtZ3JjbGVhcm93bmVyKCZmYWtlcmVsLT5yZF9zbWdyW2ldLCBmYWtlcmVs LT5yZF9zbWdyW2ldKTsKKwl9CiAJcGZyZWUoZmFrZXJlbCk7CiB9CiAKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2NhdGFsb2cvY2F0YWxvZy5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9jYXRhbG9n LmMKaW5kZXggMmFiZDZiMDA3YTIuLmY1MzZjZmMyYTliIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9jYXRhbG9nL2NhdGFsb2cuYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2NhdGFsb2cuYwpA QCAtNTAxLDEwICs1MDEsMTAgQEAgR2V0TmV3T2lkV2l0aEluZGV4KFJlbGF0aW9uIHJlbGF0aW9u LCBPaWQgaW5kZXhJZCwgQXR0ck51bWJlciBvaWRjb2x1bW4pCiBSZWxGaWxlTnVtYmVyCiBHZXRO ZXdSZWxGaWxlTnVtYmVyKE9pZCByZWx0YWJsZXNwYWNlLCBSZWxhdGlvbiBwZ19jbGFzcywgY2hh ciByZWxwZXJzaXN0ZW5jZSkKIHsKLQlSZWxGaWxlTG9jYXRvckJhY2tlbmQgcmxvY2F0b3I7Ci0J Y2hhcgkgICAqcnBhdGg7Ci0JYm9vbAkJY29sbGlkZXM7CisJUmVsRmlsZUxvY2F0b3IgcmxvY2F0 b3I7CiAJQmFja2VuZElkCWJhY2tlbmQ7CisJU01nckZpbGVIYW5kbGUgc2ZpbGU7CisJYm9vbAkJ Y29sbGlkZXM7CiAKIAkvKgogCSAqIElmIHdlIGV2ZXIgZ2V0IGhlcmUgZHVyaW5nIHBnX3VwZ3Jh ZGUsIHRoZXJlJ3Mgc29tZXRoaW5nIHdyb25nOyBhbGwKQEAgLTUxMyw2ICs1MTMsMTEgQEAgR2V0 TmV3UmVsRmlsZU51bWJlcihPaWQgcmVsdGFibGVzcGFjZSwgUmVsYXRpb24gcGdfY2xhc3MsIGNo YXIgcmVscGVyc2lzdGVuY2UpCiAJICovCiAJQXNzZXJ0KCFJc0JpbmFyeVVwZ3JhZGUpOwogCisJ LyoKKwkgKiBUaGUgcmVscGF0aCB3aWxsIHZhcnkgYmFzZWQgb24gdGhlIGJhY2tlbmQgSUQsIHNv IHdlIG11c3QgaW5pdGlhbGl6ZQorCSAqIHRoYXQgcHJvcGVybHkgaGVyZSB0byBtYWtlIHN1cmUg dGhhdCBhbnkgY29sbGlzaW9ucyBiYXNlZCBvbiBmaWxlbmFtZQorCSAqIGFyZSBwcm9wZXJseSBk ZXRlY3RlZC4KKwkgKi8KIAlzd2l0Y2ggKHJlbHBlcnNpc3RlbmNlKQogCXsKIAkJY2FzZSBSRUxQ RVJTSVNURU5DRV9URU1QOgpAQCAtNTI4LDUzICs1MzMsMjkgQEAgR2V0TmV3UmVsRmlsZU51bWJl cihPaWQgcmVsdGFibGVzcGFjZSwgUmVsYXRpb24gcGdfY2xhc3MsIGNoYXIgcmVscGVyc2lzdGVu Y2UpCiAJfQogCiAJLyogVGhpcyBsb2dpYyBzaG91bGQgbWF0Y2ggUmVsYXRpb25Jbml0UGh5c2lj YWxBZGRyICovCi0JcmxvY2F0b3IubG9jYXRvci5zcGNPaWQgPSByZWx0YWJsZXNwYWNlID8gcmVs dGFibGVzcGFjZSA6IE15RGF0YWJhc2VUYWJsZVNwYWNlOwotCXJsb2NhdG9yLmxvY2F0b3IuZGJP aWQgPQotCQkocmxvY2F0b3IubG9jYXRvci5zcGNPaWQgPT0gR0xPQkFMVEFCTEVTUEFDRV9PSUQp ID8KKwlybG9jYXRvci5zcGNPaWQgPSByZWx0YWJsZXNwYWNlID8gcmVsdGFibGVzcGFjZSA6IE15 RGF0YWJhc2VUYWJsZVNwYWNlOworCXJsb2NhdG9yLmRiT2lkID0KKwkJKHJsb2NhdG9yLnNwY09p ZCA9PSBHTE9CQUxUQUJMRVNQQUNFX09JRCkgPwogCQlJbnZhbGlkT2lkIDogTXlEYXRhYmFzZUlk OwogCi0JLyoKLQkgKiBUaGUgcmVscGF0aCB3aWxsIHZhcnkgYmFzZWQgb24gdGhlIGJhY2tlbmQg SUQsIHNvIHdlIG11c3QgaW5pdGlhbGl6ZQotCSAqIHRoYXQgcHJvcGVybHkgaGVyZSB0byBtYWtl IHN1cmUgdGhhdCBhbnkgY29sbGlzaW9ucyBiYXNlZCBvbiBmaWxlbmFtZQotCSAqIGFyZSBwcm9w ZXJseSBkZXRlY3RlZC4KLQkgKi8KLQlybG9jYXRvci5iYWNrZW5kID0gYmFja2VuZDsKLQogCWRv CiAJewogCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwogCiAJCS8qIEdlbmVyYXRlIHRoZSBPSUQg Ki8KIAkJaWYgKHBnX2NsYXNzKQotCQkJcmxvY2F0b3IubG9jYXRvci5yZWxOdW1iZXIgPSBHZXRO ZXdPaWRXaXRoSW5kZXgocGdfY2xhc3MsIENsYXNzT2lkSW5kZXhJZCwKKwkJCXJsb2NhdG9yLnJl bE51bWJlciA9IEdldE5ld09pZFdpdGhJbmRleChwZ19jbGFzcywgQ2xhc3NPaWRJbmRleElkLAog CQkJCQkJCQkJCQkJCQkJQW51bV9wZ19jbGFzc19vaWQpOwogCQllbHNlCi0JCQlybG9jYXRvci5s b2NhdG9yLnJlbE51bWJlciA9IEdldE5ld09iamVjdElkKCk7CisJCQlybG9jYXRvci5yZWxOdW1i ZXIgPSBHZXROZXdPYmplY3RJZCgpOwogCiAJCS8qIENoZWNrIGZvciBleGlzdGluZyBmaWxlIG9m IHNhbWUgbmFtZSAqLwotCQlycGF0aCA9IHJlbHBhdGgocmxvY2F0b3IsIE1BSU5fRk9SS05VTSk7 Ci0KLQkJaWYgKGFjY2VzcyhycGF0aCwgRl9PSykgPT0gMCkKLQkJewotCQkJLyogZGVmaW5pdGUg Y29sbGlzaW9uICovCi0JCQljb2xsaWRlcyA9IHRydWU7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQkv KgotCQkJICogSGVyZSB3ZSBoYXZlIGEgbGl0dGxlIGJpdCBvZiBhIGRpbGVtbWE6IGlmIGVycm5v IGlzIHNvbWV0aGluZwotCQkJICogb3RoZXIgdGhhbiBFTk9FTlQsIHNob3VsZCB3ZSBkZWNsYXJl IGEgY29sbGlzaW9uIGFuZCBsb29wPyBJbgotCQkJICogcHJhY3RpY2UgaXQgc2VlbXMgYmVzdCB0 byBnbyBhaGVhZCByZWdhcmRsZXNzIG9mIHRoZSBlcnJuby4gIElmCi0JCQkgKiB0aGVyZSBpcyBh IGNvbGxpZGluZyBmaWxlIHdlIHdpbGwgZ2V0IGFuIHNtZ3IgZmFpbHVyZSB3aGVuIHdlCi0JCQkg KiBhdHRlbXB0IHRvIGNyZWF0ZSB0aGUgbmV3IHJlbGF0aW9uIGZpbGUuCi0JCQkgKi8KLQkJCWNv bGxpZGVzID0gZmFsc2U7Ci0JCX0KLQotCQlwZnJlZShycGF0aCk7CisJCXNmaWxlID0gc21ncm9w ZW4ocmxvY2F0b3IsIGJhY2tlbmQsIE1BSU5fRk9SS05VTSk7CisJCWNvbGxpZGVzID0gc21ncmV4 aXN0cyhzZmlsZSk7CisJCXNtZ3JjbG9zZShzZmlsZSk7CiAJfSB3aGlsZSAoY29sbGlkZXMpOwog Ci0JcmV0dXJuIHJsb2NhdG9yLmxvY2F0b3IucmVsTnVtYmVyOworCXJldHVybiBybG9jYXRvci5y ZWxOdW1iZXI7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4 LmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMKaW5kZXggNjFmMWQzOTI2YTkuLjhhZTk0 M2M0OTE0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMKKysrIGIvc3Jj L2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jCkBAIC0zMDI5LDkgKzMwMjksOSBAQCBpbmRleF9idWls ZChSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJICogcmVsZmlsZW51bWJlciB3b24ndCBjaGFuZ2Us IGFuZCBub3RoaW5nIG5lZWRzIHRvIGJlIGRvbmUgaGVyZS4KIAkgKi8KIAlpZiAoaW5kZXhSZWxh dGlvbi0+cmRfcmVsLT5yZWxwZXJzaXN0ZW5jZSA9PSBSRUxQRVJTSVNURU5DRV9VTkxPR0dFRCAm JgotCQkhc21ncmV4aXN0cyhSZWxhdGlvbkdldFNtZ3IoaW5kZXhSZWxhdGlvbiksIElOSVRfRk9S S05VTSkpCisJCSFzbWdyZXhpc3RzKFJlbGF0aW9uR2V0U21ncihpbmRleFJlbGF0aW9uLCBJTklU X0ZPUktOVU0pKSkKIAl7Ci0JCXNtZ3JjcmVhdGUoUmVsYXRpb25HZXRTbWdyKGluZGV4UmVsYXRp b24pLCBJTklUX0ZPUktOVU0sIGZhbHNlKTsKKwkJc21ncmNyZWF0ZShSZWxhdGlvbkdldFNtZ3Io aW5kZXhSZWxhdGlvbiwgSU5JVF9GT1JLTlVNKSwgZmFsc2UpOwogCQlpbmRleFJlbGF0aW9uLT5y ZF9pbmRhbS0+YW1idWlsZGVtcHR5KGluZGV4UmVsYXRpb24pOwogCX0KIApkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvY2F0YWxvZy9zdG9yYWdlLmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3N0b3Jh Z2UuYwppbmRleCBkNzA4YWYxOWVkMi4uNWQ0Nzg2NGUzYTkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2NhdGFsb2cvc3RvcmFnZS5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3RvcmFnZS5j CkBAIC0xMTYsMTEgKzExNiwxMSBAQCBBZGRQZW5kaW5nU3luYyhjb25zdCBSZWxGaWxlTG9jYXRv ciAqcmxvY2F0b3IpCiAgKiB0aGF0IGRvZXMgbm90IHdhbnQgdGhlIHN0b3JhZ2UgdG8gYmUgZGVz dHJveWVkIGluIGNhc2Ugb2YgYW4gYWJvcnQgbWF5CiAgKiBwYXNzIHJlZ2lzdGVyX2RlbGV0ZSA9 IGZhbHNlLgogICovCi1TTWdyUmVsYXRpb24KK1NNZ3JGaWxlSGFuZGxlCiBSZWxhdGlvbkNyZWF0 ZVN0b3JhZ2UoUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IsIGNoYXIgcmVscGVyc2lzdGVuY2UsCiAJ CQkJCSAgYm9vbCByZWdpc3Rlcl9kZWxldGUpCiB7Ci0JU01nclJlbGF0aW9uIHNyZWw7CisJU01n ckZpbGVIYW5kbGUgc2ZpbGU7CiAJQmFja2VuZElkCWJhY2tlbmQ7CiAJYm9vbAkJbmVlZHNfd2Fs OwogCkBAIC0xNDUsMTEgKzE0NSwxMSBAQCBSZWxhdGlvbkNyZWF0ZVN0b3JhZ2UoUmVsRmlsZUxv Y2F0b3IgcmxvY2F0b3IsIGNoYXIgcmVscGVyc2lzdGVuY2UsCiAJCQlyZXR1cm4gTlVMTDsJCS8q IHBsYWNhdGUgY29tcGlsZXIgKi8KIAl9CiAKLQlzcmVsID0gc21ncm9wZW4ocmxvY2F0b3IsIGJh Y2tlbmQpOwotCXNtZ3JjcmVhdGUoc3JlbCwgTUFJTl9GT1JLTlVNLCBmYWxzZSk7CisJc2ZpbGUg PSBzbWdyb3BlbihybG9jYXRvciwgYmFja2VuZCwgTUFJTl9GT1JLTlVNKTsKKwlzbWdyY3JlYXRl KHNmaWxlLCBmYWxzZSk7CiAKIAlpZiAobmVlZHNfd2FsKQotCQlsb2dfc21ncmNyZWF0ZSgmc3Jl bC0+c21ncl9ybG9jYXRvci5sb2NhdG9yLCBNQUlOX0ZPUktOVU0pOworCQlsb2dfc21ncmNyZWF0 ZSgmcmxvY2F0b3IsIE1BSU5fRk9SS05VTSk7CiAKIAkvKgogCSAqIEFkZCB0aGUgcmVsYXRpb24g dG8gdGhlIGxpc3Qgb2Ygc3R1ZmYgdG8gZGVsZXRlIGF0IGFib3J0LCBpZiB3ZSBhcmUKQEAgLTE3 NSw3ICsxNzUsNyBAQCBSZWxhdGlvbkNyZWF0ZVN0b3JhZ2UoUmVsRmlsZUxvY2F0b3IgcmxvY2F0 b3IsIGNoYXIgcmVscGVyc2lzdGVuY2UsCiAJCUFkZFBlbmRpbmdTeW5jKCZybG9jYXRvcik7CiAJ fQogCi0JcmV0dXJuIHNyZWw7CisJcmV0dXJuIHNmaWxlOwogfQogCiAvKgpAQCAtMjkyLDE2ICsy OTIsMTggQEAgUmVsYXRpb25UcnVuY2F0ZShSZWxhdGlvbiByZWwsIEJsb2NrTnVtYmVyIG5ibG9j a3MpCiAJRm9ya051bWJlcglmb3Jrc1tNQVhfRk9SS05VTV07CiAJQmxvY2tOdW1iZXIgYmxvY2tz W01BWF9GT1JLTlVNXTsKIAlpbnQJCQluZm9ya3MgPSAwOwotCVNNZ3JSZWxhdGlvbiByZWxuOwog CiAJLyoKIAkgKiBNYWtlIHN1cmUgc21ncl90YXJnYmxvY2sgZXRjIGFyZW4ndCBwb2ludGluZyBz b21ld2hlcmUgcGFzdCBuZXcgZW5kLgogCSAqIChOb3RlOiBkb24ndCByZWx5IG9uIHRoaXMgcmVs biBwb2ludGVyIGJlbG93IHRoaXMgbG9vcC4pCiAJICovCi0JcmVsbiA9IFJlbGF0aW9uR2V0U21n cihyZWwpOwotCXJlbG4tPnNtZ3JfdGFyZ2Jsb2NrID0gSW52YWxpZEJsb2NrTnVtYmVyOwotCWZv ciAoaW50IGkgPSAwOyBpIDw9IE1BWF9GT1JLTlVNOyArK2kpCi0JCXJlbG4tPnNtZ3JfY2FjaGVk X25ibG9ja3NbaV0gPSBJbnZhbGlkQmxvY2tOdW1iZXI7CisJZm9yIChpbnQgaSA9IDA7IGkgPD0g TUFYX0ZPUktOVU07IGkrKykKKwl7CisJCVNNZ3JGaWxlSGFuZGxlIHNmaWxlID0gUmVsYXRpb25H ZXRTbWdyKHJlbCwgaSk7CisKKwkJc2ZpbGUtPnNtZ3JfdGFyZ2Jsb2NrID0gSW52YWxpZEJsb2Nr TnVtYmVyOworCQlzZmlsZS0+c21ncl9jYWNoZWRfbmJsb2NrcyA9IEludmFsaWRCbG9ja051bWJl cjsKKwl9CiAKIAkvKiBQcmVwYXJlIGZvciB0cnVuY2F0aW9uIG9mIE1BSU4gZm9yayBvZiB0aGUg cmVsYXRpb24gKi8KIAlmb3Jrc1tuZm9ya3NdID0gTUFJTl9GT1JLTlVNOwpAQCAtMzA5LDcgKzMx MSw3IEBAIFJlbGF0aW9uVHJ1bmNhdGUoUmVsYXRpb24gcmVsLCBCbG9ja051bWJlciBuYmxvY2tz KQogCW5mb3JrcysrOwogCiAJLyogUHJlcGFyZSBmb3IgdHJ1bmNhdGlvbiBvZiB0aGUgRlNNIGlm IGl0IGV4aXN0cyAqLwotCWZzbSA9IHNtZ3JleGlzdHMoUmVsYXRpb25HZXRTbWdyKHJlbCksIEZT TV9GT1JLTlVNKTsKKwlmc20gPSBzbWdyZXhpc3RzKFJlbGF0aW9uR2V0U21ncihyZWwsIEZTTV9G T1JLTlVNKSk7CiAJaWYgKGZzbSkKIAl7CiAJCWJsb2Nrc1tuZm9ya3NdID0gRnJlZVNwYWNlTWFw UHJlcGFyZVRydW5jYXRlUmVsKHJlbCwgbmJsb2Nrcyk7CkBAIC0zMjIsNyArMzI0LDcgQEAgUmVs YXRpb25UcnVuY2F0ZShSZWxhdGlvbiByZWwsIEJsb2NrTnVtYmVyIG5ibG9ja3MpCiAJfQogCiAJ LyogUHJlcGFyZSBmb3IgdHJ1bmNhdGlvbiBvZiB0aGUgdmlzaWJpbGl0eSBtYXAgdG9vIGlmIGl0 IGV4aXN0cyAqLwotCXZtID0gc21ncmV4aXN0cyhSZWxhdGlvbkdldFNtZ3IocmVsKSwgVklTSUJJ TElUWU1BUF9GT1JLTlVNKTsKKwl2bSA9IHNtZ3JleGlzdHMoUmVsYXRpb25HZXRTbWdyKHJlbCwg VklTSUJJTElUWU1BUF9GT1JLTlVNKSk7CiAJaWYgKHZtKQogCXsKIAkJYmxvY2tzW25mb3Jrc10g PSB2aXNpYmlsaXR5bWFwX3ByZXBhcmVfdHJ1bmNhdGUocmVsLCBuYmxvY2tzKTsKQEAgLTM5MCwx MSArMzkyLDEyIEBAIFJlbGF0aW9uVHJ1bmNhdGUoUmVsYXRpb24gcmVsLCBCbG9ja051bWJlciBu YmxvY2tzKQogCX0KIAogCS8qCi0JICogVGhpcyB3aWxsIGZpcnN0IHJlbW92ZSBhbnkgYnVmZmVy cyBmcm9tIHRoZSBidWZmZXIgcG9vbCB0aGF0IHNob3VsZCBubworCSAqIEZpcnN0IHJlbW92ZSBh bnkgYnVmZmVycyBmcm9tIHRoZSBidWZmZXIgcG9vbCB0aGF0IHNob3VsZCBubwogCSAqIGxvbmdl ciBleGlzdCBhZnRlciB0cnVuY2F0aW9uIGlzIGNvbXBsZXRlLCBhbmQgdGhlbiB0cnVuY2F0ZSB0 aGUKIAkgKiBjb3JyZXNwb25kaW5nIGZpbGVzIG9uIGRpc2suCiAJICovCi0Jc21ncnRydW5jYXRl KFJlbGF0aW9uR2V0U21ncihyZWwpLCBmb3JrcywgbmZvcmtzLCBibG9ja3MpOworCURyb3BSZWxh dGlvbkJ1ZmZlcnMocmVsLT5yZF9sb2NhdG9yLCByZWwtPnJkX2JhY2tlbmQsIGZvcmtzLCBuZm9y a3MsIGJsb2Nrcyk7CisJc21ncnRydW5jYXRlX211bHRpKHJlbC0+cmRfbG9jYXRvciwgcmVsLT5y ZF9iYWNrZW5kLCBmb3JrcywgbmZvcmtzLCBibG9ja3MpOwogCiAJLyogV2UndmUgZG9uZSBhbGwg dGhlIGNyaXRpY2FsIHdvcmssIHNvIGNoZWNrcG9pbnRzIGFyZSBPSyBub3cuICovCiAJTXlQcm9j LT5kZWxheUNoa3B0RmxhZ3MgJj0gfkRFTEFZX0NIS1BUX0NPTVBMRVRFOwpAQCAtNDI4LDcgKzQz MSw3IEBAIFJlbGF0aW9uUHJlVHJ1bmNhdGUoUmVsYXRpb24gcmVsKQogCQlyZXR1cm47CiAKIAlw ZW5kaW5nID0gaGFzaF9zZWFyY2gocGVuZGluZ1N5bmNIYXNoLAotCQkJCQkJICAmKFJlbGF0aW9u R2V0U21ncihyZWwpLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IpLAorCQkJCQkJICAmcmVsLT5yZF9s b2NhdG9yLAogCQkJCQkJICBIQVNIX0ZJTkQsIE5VTEwpOwogCWlmIChwZW5kaW5nKQogCQlwZW5k aW5nLT5pc190cnVuY2F0ZWQgPSB0cnVlOwpAQCAtNDQ0LDEyICs0NDcsMTIgQEAgUmVsYXRpb25Q cmVUcnVuY2F0ZShSZWxhdGlvbiByZWwpCiAgKiBBbHNvIG5vdGUgdGhhdCB0aGlzIGlzIGZyZXF1 ZW50bHkgY2FsbGVkIHZpYSBsb2N1dGlvbnMgc3VjaCBhcwogICoJCVJlbGF0aW9uQ29weVN0b3Jh Z2UoUmVsYXRpb25HZXRTbWdyKHJlbCksIC4uLik7CiAgKiBUaGF0J3Mgc2FmZSBvbmx5IGJlY2F1 c2Ugd2UgcGVyZm9ybSBvbmx5IHNtZ3IgYW5kIFdBTCBvcGVyYXRpb25zIGhlcmUuCi0gKiBJZiB3 ZSBpbnZva2VkIGFueXRoaW5nIGVsc2UsIGEgcmVsY2FjaGUgZmx1c2ggY291bGQgY2F1c2Ugb3Vy IFNNZ3JSZWxhdGlvbgorICogSWYgd2UgaW52b2tlZCBhbnl0aGluZyBlbHNlLCBhIHJlbGNhY2hl IGZsdXNoIGNvdWxkIGNhdXNlIG91ciBTTWdyRmlsZUhhbmRsZQogICogYXJndW1lbnQgdG8gYmVj b21lIGEgZGFuZ2xpbmcgcG9pbnRlci4KICAqLwogdm9pZAotUmVsYXRpb25Db3B5U3RvcmFnZShT TWdyUmVsYXRpb24gc3JjLCBTTWdyUmVsYXRpb24gZHN0LAotCQkJCQlGb3JrTnVtYmVyIGZvcmtO dW0sIGNoYXIgcmVscGVyc2lzdGVuY2UpCitSZWxhdGlvbkNvcHlTdG9yYWdlKFNNZ3JGaWxlSGFu ZGxlIHNyYywgU01nckZpbGVIYW5kbGUgZHN0LAorCQkJCQljaGFyIHJlbHBlcnNpc3RlbmNlKQog ewogCVBHQWxpZ25lZEJsb2NrIGJ1ZjsKIAlQYWdlCQlwYWdlOwpAQCAtNDY2LDcgKzQ2OSw3IEBA IFJlbGF0aW9uQ29weVN0b3JhZ2UoU01nclJlbGF0aW9uIHNyYywgU01nclJlbGF0aW9uIGRzdCwK IAkgKiBpdCBuZWVkcyB0byBiZSBzeW5jZWQgdG8gZGlzay4KIAkgKi8KIAljb3B5aW5nX2luaXRm b3JrID0gcmVscGVyc2lzdGVuY2UgPT0gUkVMUEVSU0lTVEVOQ0VfVU5MT0dHRUQgJiYKLQkJZm9y a051bSA9PSBJTklUX0ZPUktOVU07CisJCXNyYy0+c21ncl9sb2NhdG9yLmZvcmtudW0gPT0gSU5J VF9GT1JLTlVNOwogCiAJLyoKIAkgKiBXZSBuZWVkIHRvIGxvZyB0aGUgY29waWVkIGRhdGEgaW4g V0FMIGlmZiBXQUwgYXJjaGl2aW5nL3N0cmVhbWluZyBpcwpAQCAtNDc3LDE0ICs0ODAsMTQgQEAg UmVsYXRpb25Db3B5U3RvcmFnZShTTWdyUmVsYXRpb24gc3JjLCBTTWdyUmVsYXRpb24gZHN0LAog CXVzZV93YWwgPSBYTG9nSXNOZWVkZWQoKSAmJgogCQkocmVscGVyc2lzdGVuY2UgPT0gUkVMUEVS U0lTVEVOQ0VfUEVSTUFORU5UIHx8IGNvcHlpbmdfaW5pdGZvcmspOwogCi0JbmJsb2NrcyA9IHNt Z3JuYmxvY2tzKHNyYywgZm9ya051bSk7CisJbmJsb2NrcyA9IHNtZ3JuYmxvY2tzKHNyYyk7CiAK IAlmb3IgKGJsa25vID0gMDsgYmxrbm8gPCBuYmxvY2tzOyBibGtubysrKQogCXsKIAkJLyogSWYg d2UgZ290IGEgY2FuY2VsIHNpZ25hbCBkdXJpbmcgdGhlIGNvcHkgb2YgdGhlIGRhdGEsIHF1aXQg Ki8KIAkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKIAotCQlzbWdycmVhZChzcmMsIGZvcmtOdW0s IGJsa25vLCBidWYuZGF0YSk7CisJCXNtZ3JyZWFkKHNyYywgYmxrbm8sIGJ1Zi5kYXRhKTsKIAog CQlpZiAoIVBhZ2VJc1ZlcmlmaWVkRXh0ZW5kZWQocGFnZSwgYmxrbm8sCiAJCQkJCQkJCQlQSVZf TE9HX1dBUk5JTkcgfCBQSVZfUkVQT1JUX1NUQVQpKQpAQCAtNDk2LDkgKzQ5OSw3IEBAIFJlbGF0 aW9uQ29weVN0b3JhZ2UoU01nclJlbGF0aW9uIHNyYywgU01nclJlbGF0aW9uIGRzdCwKIAkJCSAq IChlcnJjb250ZXh0IGNhbGxiYWNrcyBzaG91bGRuJ3QgYmUgcmlza2luZyBhbnkgc3VjaCB0aGlu ZywgYnV0CiAJCQkgKiBwZW9wbGUgaGF2ZSBiZWVuIGtub3duIHRvIGZvcmdldCB0aGF0IHJ1bGUu KQogCQkJICovCi0JCQljaGFyCSAgICpyZWxwYXRoID0gcmVscGF0aGJhY2tlbmQoc3JjLT5zbWdy X3Jsb2NhdG9yLmxvY2F0b3IsCi0JCQkJCQkJCQkJCQkgc3JjLT5zbWdyX3Jsb2NhdG9yLmJhY2tl bmQsCi0JCQkJCQkJCQkJCQkgZm9ya051bSk7CisJCQljaGFyCSAgICpyZWxwYXRoID0gc21ncmZp bGVwYXRoKHNyYy0+c21ncl9sb2NhdG9yKTsKIAogCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJKGVy cmNvZGUoRVJSQ09ERV9EQVRBX0NPUlJVUFRFRCksCkBAIC01MTIsNyArNTEzLDcgQEAgUmVsYXRp b25Db3B5U3RvcmFnZShTTWdyUmVsYXRpb24gc3JjLCBTTWdyUmVsYXRpb24gZHN0LAogCQkgKiBz cGFjZS4KIAkJICovCiAJCWlmICh1c2Vfd2FsKQotCQkJbG9nX25ld3BhZ2UoJmRzdC0+c21ncl9y bG9jYXRvci5sb2NhdG9yLCBmb3JrTnVtLCBibGtubywgcGFnZSwgZmFsc2UpOworCQkJbG9nX25l d3BhZ2UoJmRzdC0+c21ncl9sb2NhdG9yLmxvY2F0b3IsIGRzdC0+c21ncl9sb2NhdG9yLmZvcmtu dW0sIGJsa25vLCBwYWdlLCBmYWxzZSk7CiAKIAkJUGFnZVNldENoZWNrc3VtSW5wbGFjZShwYWdl LCBibGtubyk7CiAKQEAgLTUyMSw3ICs1MjIsNyBAQCBSZWxhdGlvbkNvcHlTdG9yYWdlKFNNZ3JS ZWxhdGlvbiBzcmMsIFNNZ3JSZWxhdGlvbiBkc3QsCiAJCSAqIG5lZWQgZm9yIHNtZ3IgdG8gc2No ZWR1bGUgYW4gZnN5bmMgZm9yIHRoaXMgd3JpdGU7IHdlJ2xsIGRvIGl0CiAJCSAqIG91cnNlbHZl cyBiZWxvdy4KIAkJICovCi0JCXNtZ3JleHRlbmQoZHN0LCBmb3JrTnVtLCBibGtubywgYnVmLmRh dGEsIHRydWUpOworCQlzbWdyZXh0ZW5kKGRzdCwgYmxrbm8sIGJ1Zi5kYXRhLCB0cnVlKTsKIAl9 CiAKIAkvKgpAQCAtNTM0LDcgKzUzNSw3IEBAIFJlbGF0aW9uQ29weVN0b3JhZ2UoU01nclJlbGF0 aW9uIHNyYywgU01nclJlbGF0aW9uIGRzdCwKIAkgKiB0aGV5IG1pZ2h0IHN0aWxsIG5vdCBiZSBv biBkaXNrIHdoZW4gdGhlIGNyYXNoIG9jY3Vycy4KIAkgKi8KIAlpZiAodXNlX3dhbCB8fCBjb3B5 aW5nX2luaXRmb3JrKQotCQlzbWdyaW1tZWRzeW5jKGRzdCwgZm9ya051bSk7CisJCXNtZ3JpbW1l ZHN5bmMoZHN0KTsKIH0KIAogLyoKQEAgLTY1Myw5ICs2NTQsOSBAQCBzbWdyRG9QZW5kaW5nRGVs ZXRlcyhib29sIGlzQ29tbWl0KQogCVBlbmRpbmdSZWxEZWxldGUgKnBlbmRpbmc7CiAJUGVuZGlu Z1JlbERlbGV0ZSAqcHJldjsKIAlQZW5kaW5nUmVsRGVsZXRlICpuZXh0OwotCWludAkJCW5yZWxz ID0gMCwKLQkJCQltYXhyZWxzID0gMDsKLQlTTWdyUmVsYXRpb24gKnNyZWxzID0gTlVMTDsKKwlp bnQJCQlubG9jYXRvcnMgPSAwLAorCQkJCW1heGxvY2F0b3JzID0gMDsKKwlSZWxGaWxlTG9jYXRv ckJhY2tlbmQgKmxvY2F0b3JzID0gTlVMTDsKIAogCXByZXYgPSBOVUxMOwogCWZvciAocGVuZGlu ZyA9IHBlbmRpbmdEZWxldGVzOyBwZW5kaW5nICE9IE5VTEw7IHBlbmRpbmcgPSBuZXh0KQpAQCAt Njc2LDIzICs2NzcsMjEgQEAgc21nckRvUGVuZGluZ0RlbGV0ZXMoYm9vbCBpc0NvbW1pdCkKIAkJ CS8qIGRvIGRlbGV0aW9uIGlmIGNhbGxlZCBmb3IgKi8KIAkJCWlmIChwZW5kaW5nLT5hdENvbW1p dCA9PSBpc0NvbW1pdCkKIAkJCXsKLQkJCQlTTWdyUmVsYXRpb24gc3JlbDsKLQotCQkJCXNyZWwg PSBzbWdyb3BlbihwZW5kaW5nLT5ybG9jYXRvciwgcGVuZGluZy0+YmFja2VuZCk7CisJCQkJUmVs RmlsZUxvY2F0b3JCYWNrZW5kIHJsb2NhdG9yID0geyBwZW5kaW5nLT5ybG9jYXRvciwgcGVuZGlu Zy0+YmFja2VuZCB9OwogCiAJCQkJLyogYWxsb2NhdGUgdGhlIGluaXRpYWwgYXJyYXksIG9yIGV4 dGVuZCBpdCwgaWYgbmVlZGVkICovCi0JCQkJaWYgKG1heHJlbHMgPT0gMCkKKwkJCQlpZiAobWF4 bG9jYXRvcnMgPT0gMCkKIAkJCQl7Ci0JCQkJCW1heHJlbHMgPSA4OwotCQkJCQlzcmVscyA9IHBh bGxvYyhzaXplb2YoU01nclJlbGF0aW9uKSAqIG1heHJlbHMpOworCQkJCQltYXhsb2NhdG9ycyA9 IDg7CisJCQkJCWxvY2F0b3JzID0gcGFsbG9jKHNpemVvZihSZWxGaWxlTG9jYXRvckJhY2tlbmQp ICogbWF4bG9jYXRvcnMpOwogCQkJCX0KLQkJCQllbHNlIGlmIChtYXhyZWxzIDw9IG5yZWxzKQor CQkJCWVsc2UgaWYgKG1heGxvY2F0b3JzIDw9IG5sb2NhdG9ycykKIAkJCQl7Ci0JCQkJCW1heHJl bHMgKj0gMjsKLQkJCQkJc3JlbHMgPSByZXBhbGxvYyhzcmVscywgc2l6ZW9mKFNNZ3JSZWxhdGlv bikgKiBtYXhyZWxzKTsKKwkJCQkJbWF4bG9jYXRvcnMgKj0gMjsKKwkJCQkJbG9jYXRvcnMgPSBy ZXBhbGxvYyhsb2NhdG9ycywgc2l6ZW9mKFJlbEZpbGVMb2NhdG9yQmFja2VuZCkgKiBtYXhsb2Nh dG9ycyk7CiAJCQkJfQogCi0JCQkJc3JlbHNbbnJlbHMrK10gPSBzcmVsOworCQkJCWxvY2F0b3Jz W25sb2NhdG9ycysrXSA9IHJsb2NhdG9yOwogCQkJfQogCQkJLyogbXVzdCBleHBsaWNpdGx5IGZy ZWUgdGhlIGxpc3QgZW50cnkgKi8KIAkJCXBmcmVlKHBlbmRpbmcpOwpAQCAtNzAwLDE1ICs2OTks NTggQEAgc21nckRvUGVuZGluZ0RlbGV0ZXMoYm9vbCBpc0NvbW1pdCkKIAkJfQogCX0KIAotCWlm IChucmVscyA+IDApCisJaWYgKG5sb2NhdG9ycyA+IDApCiAJewotCQlzbWdyZG91bmxpbmthbGwo c3JlbHMsIG5yZWxzLCBmYWxzZSk7CisJCUZvcmtOdW1iZXIgZm9ya3NbTUFYX0ZPUktOVU0gKyAx XTsKKworCQlmb3IgKGludCBpID0gMDsgaSA8PSBNQVhfRk9SS05VTTsgaSsrKQorCQkJZm9ya3Nb aV0gPSBpOworCisJCS8qCisJCSAqIEdldCByaWQgb2YgYW55IHJlbWFpbmluZyBidWZmZXJzIGZv ciB0aGUgcmVsYXRpb25zLiAgYnVmbWdyIHdpbGwganVzdAorCQkgKiBkcm9wIHRoZW0gd2l0aG91 dCBib3RoZXJpbmcgdG8gd3JpdGUgdGhlIGNvbnRlbnRzLgorCQkgKi8KKwkJRHJvcFJlbGF0aW9u c0FsbEJ1ZmZlcnMobG9jYXRvcnMsIG5sb2NhdG9ycyk7CiAKLQkJZm9yIChpbnQgaSA9IDA7IGkg PCBucmVsczsgaSsrKQotCQkJc21ncmNsb3NlKHNyZWxzW2ldKTsKKwkJZm9yIChpbnQgaSA9IDA7 IGkgPCBubG9jYXRvcnM7IGkrKykKKwkJCXNtZ3J1bmxpbmtfbXVsdGkobG9jYXRvcnNbaV0ubG9j YXRvciwgbG9jYXRvcnNbaV0uYmFja2VuZCwgZm9ya3MsIE1BWF9GT1JLTlVNICsgMSwgZmFsc2Up OworCQlwZnJlZShsb2NhdG9ycyk7CisJfQorfQorCisvKgorICogRHJvcFJlbGF0aW9uRmlsZXMg LS0gZHJvcCBmaWxlcyBvZiBhbGwgZ2l2ZW4gcmVsYXRpb25zCisgKi8KK3ZvaWQKK0Ryb3BSZWxh dGlvbkZpbGVzKFJlbEZpbGVMb2NhdG9yICpkZWxyZWxzLCBpbnQgbmRlbHJlbHMsIGJvb2wgaXNS ZWRvKQoreworCVJlbEZpbGVMb2NhdG9yQmFja2VuZCAqbG9jYXRvcnM7CisJaW50CQkJaTsKKwlG b3JrTnVtYmVyCWFsbF9mb3Jrc1tNQVhfRk9SS05VTSArIDFdOwogCi0JCXBmcmVlKHNyZWxzKTsK Kwlsb2NhdG9ycyA9IHBhbGxvYyhzaXplb2YoUmVsRmlsZUxvY2F0b3JCYWNrZW5kKSAqIG5kZWxy ZWxzKTsKKwlmb3IgKGkgPSAwOyBpIDwgbmRlbHJlbHM7IGkrKykKKwl7CisJCWlmIChpc1JlZG8p CisJCXsKKwkJCWZvciAoaW50IGZvcmsgPSAwOyBmb3JrIDw9IE1BWF9GT1JLTlVNOyBmb3JrKysp CisJCQkJWExvZ0Ryb3BSZWxhdGlvbihkZWxyZWxzW2ldLCBmb3JrKTsKKwkJfQorCQlsb2NhdG9y c1tpXS5sb2NhdG9yID0gZGVscmVsc1tpXTsKKwkJbG9jYXRvcnNbaV0uYmFja2VuZCA9IEludmFs aWRCYWNrZW5kSWQ7CiAJfQorCisJLyoKKwkgKiBHZXQgcmlkIG9mIGFueSByZW1haW5pbmcgYnVm ZmVycyBmb3IgdGhlIHJlbGF0aW9ucy4gIGJ1Zm1nciB3aWxsIGp1c3QKKwkgKiBkcm9wIHRoZW0g d2l0aG91dCBib3RoZXJpbmcgdG8gd3JpdGUgdGhlIGNvbnRlbnRzLgorCSAqLworCURyb3BSZWxh dGlvbnNBbGxCdWZmZXJzKGxvY2F0b3JzLCBuZGVscmVscyk7CisKKwlmb3IgKGludCBmb3JrID0g MDsgZm9yayA8PSBNQVhfRk9SS05VTTsgZm9yaysrKQorCQlhbGxfZm9ya3NbZm9ya10gPSBmb3Jr OworCisJZm9yIChpID0gMDsgaSA8IG5kZWxyZWxzOyBpKyspCisJCXNtZ3J1bmxpbmtfbXVsdGko bG9jYXRvcnNbaV0ubG9jYXRvciwgbG9jYXRvcnNbaV0uYmFja2VuZCwgYWxsX2ZvcmtzLCBNQVhf Rk9SS05VTSArIDEsIHRydWUpOwogfQogCiAvKgpAQCAtNzE4LDkgKzc2MCw5IEBAIHZvaWQKIHNt Z3JEb1BlbmRpbmdTeW5jcyhib29sIGlzQ29tbWl0LCBib29sIGlzUGFyYWxsZWxXb3JrZXIpCiB7 CiAJUGVuZGluZ1JlbERlbGV0ZSAqcGVuZGluZzsKLQlpbnQJCQlucmVscyA9IDAsCi0JCQkJbWF4 cmVscyA9IDA7Ci0JU01nclJlbGF0aW9uICpzcmVscyA9IE5VTEw7CisJaW50CQkJbmxvY2F0b3Jz ID0gMCwKKwkJCQltYXhsb2NhdG9ycyA9IDA7CisJUmVsRmlsZUxvY2F0b3IgKmxvY2F0b3JzID0g TlVMTDsKIAlIQVNIX1NFUV9TVEFUVVMgc2NhbjsKIAlQZW5kaW5nUmVsU3luYyAqcGVuZGluZ3N5 bmM7CiAKQEAgLTc1Nyw5ICs3OTksNiBAQCBzbWdyRG9QZW5kaW5nU3luY3MoYm9vbCBpc0NvbW1p dCwgYm9vbCBpc1BhcmFsbGVsV29ya2VyKQogCQlGb3JrTnVtYmVyCWZvcms7CiAJCUJsb2NrTnVt YmVyIG5ibG9ja3NbTUFYX0ZPUktOVU0gKyAxXTsKIAkJQmxvY2tOdW1iZXIgdG90YWxfYmxvY2tz ID0gMDsKLQkJU01nclJlbGF0aW9uIHNyZWw7Ci0KLQkJc3JlbCA9IHNtZ3JvcGVuKHBlbmRpbmdz eW5jLT5ybG9jYXRvciwgSW52YWxpZEJhY2tlbmRJZCk7CiAKIAkJLyoKIAkJICogV2UgZW1pdCBu ZXdwYWdlIFdBTCByZWNvcmRzIGZvciBzbWFsbGVyIHJlbGF0aW9ucy4KQEAgLTc3Myw5ICs4MTIs MTIgQEAgc21nckRvUGVuZGluZ1N5bmNzKGJvb2wgaXNDb21taXQsIGJvb2wgaXNQYXJhbGxlbFdv cmtlcikKIAkJewogCQkJZm9yIChmb3JrID0gMDsgZm9yayA8PSBNQVhfRk9SS05VTTsgZm9yaysr KQogCQkJewotCQkJCWlmIChzbWdyZXhpc3RzKHNyZWwsIGZvcmspKQorCQkJCVNNZ3JGaWxlSGFu ZGxlIHNmaWxlOworCisJCQkJc2ZpbGUgPSBzbWdyb3BlbihwZW5kaW5nc3luYy0+cmxvY2F0b3Is IEludmFsaWRCYWNrZW5kSWQsIGZvcmspOworCQkJCWlmIChzbWdyZXhpc3RzKHNmaWxlKSkKIAkJ CQl7Ci0JCQkJCUJsb2NrTnVtYmVyIG4gPSBzbWdybmJsb2NrcyhzcmVsLCBmb3JrKTsKKwkJCQkJ QmxvY2tOdW1iZXIgbiA9IHNtZ3JuYmxvY2tzKHNmaWxlKTsKIAogCQkJCQkvKiB3ZSBzaG91bGRu J3QgY29tZSBoZXJlIGZvciB1bmxvZ2dlZCByZWxhdGlvbnMgKi8KIAkJCQkJQXNzZXJ0KGZvcmsg IT0gSU5JVF9GT1JLTlVNKTsKQEAgLTgwMywxOCArODQ1LDE5IEBAIHNtZ3JEb1BlbmRpbmdTeW5j cyhib29sIGlzQ29tbWl0LCBib29sIGlzUGFyYWxsZWxXb3JrZXIpCiAJCQl0b3RhbF9ibG9ja3Mg KiBCTENLU1ogLyAxMDI0ID49IHdhbF9za2lwX3RocmVzaG9sZCkKIAkJewogCQkJLyogYWxsb2Nh dGUgdGhlIGluaXRpYWwgYXJyYXksIG9yIGV4dGVuZCBpdCwgaWYgbmVlZGVkICovCi0JCQlpZiAo bWF4cmVscyA9PSAwKQorCQkJaWYgKG1heGxvY2F0b3JzID09IDApCiAJCQl7Ci0JCQkJbWF4cmVs cyA9IDg7Ci0JCQkJc3JlbHMgPSBwYWxsb2Moc2l6ZW9mKFNNZ3JSZWxhdGlvbikgKiBtYXhyZWxz KTsKKwkJCQltYXhsb2NhdG9ycyA9IDg7CisJCQkJbG9jYXRvcnMgPSBwYWxsb2Moc2l6ZW9mKFJl bEZpbGVMb2NhdG9yQmFja2VuZCkgKiBtYXhsb2NhdG9ycyk7CiAJCQl9Ci0JCQllbHNlIGlmICht YXhyZWxzIDw9IG5yZWxzKQorCQkJZWxzZSBpZiAobWF4bG9jYXRvcnMgPD0gbmxvY2F0b3JzKQog CQkJewotCQkJCW1heHJlbHMgKj0gMjsKLQkJCQlzcmVscyA9IHJlcGFsbG9jKHNyZWxzLCBzaXpl b2YoU01nclJlbGF0aW9uKSAqIG1heHJlbHMpOworCQkJCW1heGxvY2F0b3JzICo9IDI7CisJCQkJ bG9jYXRvcnMgPSByZXBhbGxvYyhsb2NhdG9ycywgc2l6ZW9mKFJlbEZpbGVMb2NhdG9yQmFja2Vu ZCkgKiBtYXhsb2NhdG9ycyk7CiAJCQl9CiAKLQkJCXNyZWxzW25yZWxzKytdID0gc3JlbDsKKwkJ CWxvY2F0b3JzW25sb2NhdG9yc10gPSBwZW5kaW5nc3luYy0+cmxvY2F0b3I7CisJCQlubG9jYXRv cnMrKzsKIAkJfQogCQllbHNlCiAJCXsKQEAgLTgzMyw3ICs4NzYsNyBAQCBzbWdyRG9QZW5kaW5n U3luY3MoYm9vbCBpc0NvbW1pdCwgYm9vbCBpc1BhcmFsbGVsV29ya2VyKQogCQkJCSAqIHBhZ2Ug aW5jbHVkaW5nIGFueSB1bnVzZWQgc3BhY2UuICBSZWFkQnVmZmVyRXh0ZW5kZWQoKQogCQkJCSAq IGNvdW50cyBzb21lIHBnc3RhdCBldmVudHM7IHVuZm9ydHVuYXRlbHksIHdlIGRpc2NhcmQgdGhl bS4KIAkJCQkgKi8KLQkJCQlyZWwgPSBDcmVhdGVGYWtlUmVsY2FjaGVFbnRyeShzcmVsLT5zbWdy X3Jsb2NhdG9yLmxvY2F0b3IpOworCQkJCXJlbCA9IENyZWF0ZUZha2VSZWxjYWNoZUVudHJ5KHBl bmRpbmdzeW5jLT5ybG9jYXRvcik7CiAJCQkJbG9nX25ld3BhZ2VfcmFuZ2UocmVsLCBmb3JrLCAw LCBuLCBmYWxzZSk7CiAJCQkJRnJlZUZha2VSZWxjYWNoZUVudHJ5KHJlbCk7CiAJCQl9CkBAIC04 NDIsMTEgKzg4NSwyMCBAQCBzbWdyRG9QZW5kaW5nU3luY3MoYm9vbCBpc0NvbW1pdCwgYm9vbCBp c1BhcmFsbGVsV29ya2VyKQogCiAJcGVuZGluZ1N5bmNIYXNoID0gTlVMTDsKIAotCWlmIChucmVs cyA+IDApCisJRmx1c2hSZWxhdGlvbnNBbGxCdWZmZXJzKGxvY2F0b3JzLCBubG9jYXRvcnMpOwor CisJZm9yIChpbnQgaSA9IDA7IGkgPCBubG9jYXRvcnM7IGkrKykKIAl7Ci0JCXNtZ3Jkb3N5bmNh bGwoc3JlbHMsIG5yZWxzKTsKLQkJcGZyZWUoc3JlbHMpOworCQlmb3IgKGludCBmb3JrID0gMDsg Zm9yayA8PSBNQVhfRk9SS05VTTsgZm9yaysrKQorCQl7CisJCQlTTWdyRmlsZUhhbmRsZSBzZmls ZSA9IHNtZ3JvcGVuKGxvY2F0b3JzW2ldLCBJbnZhbGlkQmFja2VuZElkLCBmb3JrKTsKKworCQkJ aWYgKHNtZ3JleGlzdHMoc2ZpbGUpKQorCQkJCXNtZ3JpbW1lZHN5bmMoc2ZpbGUpOworCQl9CiAJ fQorCWlmIChsb2NhdG9ycyAhPSBOVUxMKQorCQlwZnJlZShsb2NhdG9ycyk7CiB9CiAKIC8qCkBA IC05NjYsMjIgKzEwMTgsMjIgQEAgc21ncl9yZWRvKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQog CWlmIChpbmZvID09IFhMT0dfU01HUl9DUkVBVEUpCiAJewogCQl4bF9zbWdyX2NyZWF0ZSAqeGxy ZWMgPSAoeGxfc21ncl9jcmVhdGUgKikgWExvZ1JlY0dldERhdGEocmVjb3JkKTsKLQkJU01nclJl bGF0aW9uIHJlbG47CisJCVNNZ3JGaWxlSGFuZGxlIHNmaWxlOwogCi0JCXJlbG4gPSBzbWdyb3Bl bih4bHJlYy0+cmxvY2F0b3IsIEludmFsaWRCYWNrZW5kSWQpOwotCQlzbWdyY3JlYXRlKHJlbG4s IHhscmVjLT5mb3JrTnVtLCB0cnVlKTsKKwkJc2ZpbGUgPSBzbWdyb3Blbih4bHJlYy0+cmxvY2F0 b3IsIEludmFsaWRCYWNrZW5kSWQsIHhscmVjLT5mb3JrTnVtKTsKKwkJc21ncmNyZWF0ZShzZmls ZSwgdHJ1ZSk7CiAJfQogCWVsc2UgaWYgKGluZm8gPT0gWExPR19TTUdSX1RSVU5DQVRFKQogCXsK IAkJeGxfc21ncl90cnVuY2F0ZSAqeGxyZWMgPSAoeGxfc21ncl90cnVuY2F0ZSAqKSBYTG9nUmVj R2V0RGF0YShyZWNvcmQpOwotCQlTTWdyUmVsYXRpb24gcmVsbjsKKwkJU01nckZpbGVIYW5kbGUg c2ZpbGU7CiAJCVJlbGF0aW9uCXJlbDsKIAkJRm9ya051bWJlcglmb3Jrc1tNQVhfRk9SS05VTV07 CiAJCUJsb2NrTnVtYmVyIGJsb2Nrc1tNQVhfRk9SS05VTV07CiAJCWludAkJCW5mb3JrcyA9IDA7 CiAJCWJvb2wJCW5lZWRfZnNtX3ZhY3V1bSA9IGZhbHNlOwogCi0JCXJlbG4gPSBzbWdyb3Blbih4 bHJlYy0+cmxvY2F0b3IsIEludmFsaWRCYWNrZW5kSWQpOworCQlzZmlsZSA9IHNtZ3JvcGVuKHhs cmVjLT5ybG9jYXRvciwgSW52YWxpZEJhY2tlbmRJZCwgTUFJTl9GT1JLTlVNKTsKIAogCQkvKgog CQkgKiBGb3JjaWJseSBjcmVhdGUgcmVsYXRpb24gaWYgaXQgZG9lc24ndCBleGlzdCAod2hpY2gg c3VnZ2VzdHMgdGhhdApAQCAtOTg5LDcgKzEwNDEsNyBAQCBzbWdyX3JlZG8oWExvZ1JlYWRlclN0 YXRlICpyZWNvcmQpCiAJCSAqIFhMb2dSZWFkQnVmZmVyRm9yUmVkbywgd2UgcHJlZmVyIHRvIHJl Y3JlYXRlIHRoZSByZWwgYW5kIHJlcGxheSB0aGUKIAkJICogbG9nIGFzIGJlc3Qgd2UgY2FuIHVu dGlsIHRoZSBkcm9wIGlzIHNlZW4uCiAJCSAqLwotCQlzbWdyY3JlYXRlKHJlbG4sIE1BSU5fRk9S S05VTSwgdHJ1ZSk7CisJCXNtZ3JjcmVhdGUoc2ZpbGUsIHRydWUpOwogCiAJCS8qCiAJCSAqIEJl Zm9yZSB3ZSBwZXJmb3JtIHRoZSB0cnVuY2F0aW9uLCB1cGRhdGUgbWluaW11bSByZWNvdmVyeSBw b2ludCB0bwpAQCAtMTAyMiw4ICsxMDc0LDEwIEBAIHNtZ3JfcmVkbyhYTG9nUmVhZGVyU3RhdGUg KnJlY29yZCkKIAkJLyogUHJlcGFyZSBmb3IgdHJ1bmNhdGlvbiBvZiBGU00gYW5kIFZNIHRvbyAq LwogCQlyZWwgPSBDcmVhdGVGYWtlUmVsY2FjaGVFbnRyeSh4bHJlYy0+cmxvY2F0b3IpOwogCisJ CURyb3BSZWxhdGlvbkJ1ZmZlcnMoeGxyZWMtPnJsb2NhdG9yLCBJbnZhbGlkQmFja2VuZElkLCBm b3JrcywgbmZvcmtzLCBibG9ja3MpOworCiAJCWlmICgoeGxyZWMtPmZsYWdzICYgU01HUl9UUlVO Q0FURV9GU00pICE9IDAgJiYKLQkJCXNtZ3JleGlzdHMocmVsbiwgRlNNX0ZPUktOVU0pKQorCQkJ c21ncmV4aXN0cyhzbWdyb3Blbih4bHJlYy0+cmxvY2F0b3IsIEludmFsaWRCYWNrZW5kSWQsIEZT TV9GT1JLTlVNKSkpCiAJCXsKIAkJCWJsb2Nrc1tuZm9ya3NdID0gRnJlZVNwYWNlTWFwUHJlcGFy ZVRydW5jYXRlUmVsKHJlbCwgeGxyZWMtPmJsa25vKTsKIAkJCWlmIChCbG9ja051bWJlcklzVmFs aWQoYmxvY2tzW25mb3Jrc10pKQpAQCAtMTAzNCw3ICsxMDg4LDcgQEAgc21ncl9yZWRvKFhMb2dS ZWFkZXJTdGF0ZSAqcmVjb3JkKQogCQkJfQogCQl9CiAJCWlmICgoeGxyZWMtPmZsYWdzICYgU01H Ul9UUlVOQ0FURV9WTSkgIT0gMCAmJgotCQkJc21ncmV4aXN0cyhyZWxuLCBWSVNJQklMSVRZTUFQ X0ZPUktOVU0pKQorCQkJc21ncmV4aXN0cyhzbWdyb3Blbih4bHJlYy0+cmxvY2F0b3IsIEludmFs aWRCYWNrZW5kSWQsIFZJU0lCSUxJVFlNQVBfRk9SS05VTSkpKQogCQl7CiAJCQlibG9ja3NbbmZv cmtzXSA9IHZpc2liaWxpdHltYXBfcHJlcGFyZV90cnVuY2F0ZShyZWwsIHhscmVjLT5ibGtubyk7 CiAJCQlpZiAoQmxvY2tOdW1iZXJJc1ZhbGlkKGJsb2Nrc1tuZm9ya3NdKSkKQEAgLTEwNDYsNyAr MTEwMCwxMCBAQCBzbWdyX3JlZG8oWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAKIAkJLyogRG8g dGhlIHJlYWwgd29yayB0byB0cnVuY2F0ZSByZWxhdGlvbiBmb3JrcyAqLwogCQlpZiAobmZvcmtz ID4gMCkKLQkJCXNtZ3J0cnVuY2F0ZShyZWxuLCBmb3JrcywgbmZvcmtzLCBibG9ja3MpOworCQl7 CisJCQlEcm9wUmVsYXRpb25CdWZmZXJzKHhscmVjLT5ybG9jYXRvciwgSW52YWxpZEJhY2tlbmRJ ZCwgZm9ya3MsIG5mb3JrcywgYmxvY2tzKTsKKwkJCXNtZ3J0cnVuY2F0ZV9tdWx0aSh4bHJlYy0+ cmxvY2F0b3IsIEludmFsaWRCYWNrZW5kSWQsIGZvcmtzLCBuZm9ya3MsIGJsb2Nrcyk7CisJCX0K IAogCQkvKgogCQkgKiBVcGRhdGUgdXBwZXItbGV2ZWwgRlNNIHBhZ2VzIHRvIGFjY291bnQgZm9y IHRoZSB0cnVuY2F0aW9uLiBUaGlzIGlzCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5k cy9hc3luYy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5bmMuYwppbmRleCAzZTFiOTJkZjAz MC4uNzYwNzA1Y2FmOTAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2FzeW5jLmMK KysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5bmMuYwpAQCAtMTQxLDYgKzE0MSw3IEBACiAj aW5jbHVkZSAibGlicHEvbGlicHEuaCIKICNpbmNsdWRlICJsaWJwcS9wcWZvcm1hdC5oIgogI2lu Y2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCiAjaW5jbHVk ZSAic3RvcmFnZS9pcGMuaCIKICNpbmNsdWRlICJzdG9yYWdlL2xtZ3IuaCIKICNpbmNsdWRlICJz dG9yYWdlL3Byb2MuaCIKQEAgLTMwNSwxMiArMzA2LDYgQEAgc3RhdGljIEFzeW5jUXVldWVDb250 cm9sICphc3luY1F1ZXVlQ29udHJvbDsKICNkZWZpbmUgUVVFVUVfTkVYVF9MSVNURU5FUihpKQkJ KGFzeW5jUXVldWVDb250cm9sLT5iYWNrZW5kW2ldLm5leHRMaXN0ZW5lcikKICNkZWZpbmUgUVVF VUVfQkFDS0VORF9QT1MoaSkJCShhc3luY1F1ZXVlQ29udHJvbC0+YmFja2VuZFtpXS5wb3MpCiAK LS8qCi0gKiBUaGUgU0xSVSBidWZmZXIgYXJlYSB0aHJvdWdoIHdoaWNoIHdlIGFjY2VzcyB0aGUg bm90aWZpY2F0aW9uIHF1ZXVlCi0gKi8KLXN0YXRpYyBTbHJ1Q3RsRGF0YSBOb3RpZnlDdGxEYXRh OwotCi0jZGVmaW5lIE5vdGlmeUN0bAkJCQkJKCZOb3RpZnlDdGxEYXRhKQogI2RlZmluZSBRVUVV RV9QQUdFU0laRQkJCQlCTENLU1oKICNkZWZpbmUgUVVFVUVfRlVMTF9XQVJOX0lOVEVSVkFMCTUw MDAJLyogd2FybiBhdCBtb3N0IG9uY2UgZXZlcnkgNXMgKi8KIApAQCAtNTIxLDggKzUxNiw2IEBA IEFzeW5jU2htZW1TaXplKHZvaWQpCiAJc2l6ZSA9IG11bF9zaXplKE1heEJhY2tlbmRzICsgMSwg c2l6ZW9mKFF1ZXVlQmFja2VuZFN0YXR1cykpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBvZmZz ZXRvZihBc3luY1F1ZXVlQ29udHJvbCwgYmFja2VuZCkpOwogCi0Jc2l6ZSA9IGFkZF9zaXplKHNp emUsIFNpbXBsZUxydVNobWVtU2l6ZShOVU1fTk9USUZZX0JVRkZFUlMsIDApKTsKLQogCXJldHVy biBzaXplOwogfQogCkBAIC01NjUsMjAgKzU1OCwxMyBAQCBBc3luY1NobWVtSW5pdCh2b2lkKQog CQl9CiAJfQogCi0JLyoKLQkgKiBTZXQgdXAgU0xSVSBtYW5hZ2VtZW50IG9mIHRoZSBwZ19ub3Rp ZnkgZGF0YS4KLQkgKi8KLQlOb3RpZnlDdGwtPlBhZ2VQcmVjZWRlcyA9IGFzeW5jUXVldWVQYWdl UHJlY2VkZXM7Ci0JU2ltcGxlTHJ1SW5pdChOb3RpZnlDdGwsICJOb3RpZnkiLCBOVU1fTk9USUZZ X0JVRkZFUlMsIDAsCi0JCQkJICBOb3RpZnlTTFJVTG9jaywgInBnX25vdGlmeSIsIExXVFJBTkNI RV9OT1RJRllfQlVGRkVSLAotCQkJCSAgU1lOQ19IQU5ETEVSX05PTkUpOwotCiAJaWYgKCFmb3Vu ZCkKIAl7CiAJCS8qCiAJCSAqIER1cmluZyBzdGFydCBvciByZWJvb3QsIGNsZWFuIG91dCB0aGUg cGdfbm90aWZ5IGRpcmVjdG9yeS4KIAkJICovCi0JCSh2b2lkKSBTbHJ1U2NhbkRpcmVjdG9yeShO b3RpZnlDdGwsIFNscnVTY2FuRGlyQ2JEZWxldGVBbGwsIE5VTEwpOworCQkodm9pZCkgU2xydVNj YW5EaXJlY3RvcnkoU0xSVV9OT1RJRllfSUQsIGFzeW5jUXVldWVQYWdlUHJlY2VkZXMsCisJCQkJ CQkJCSBTbHJ1U2NhbkRpckNiRGVsZXRlQWxsLCBOVUxMKTsKIAl9CiB9CiAKQEAgLTE0MTEsMTAg KzEzOTcsNyBAQCBhc3luY1F1ZXVlQWRkRW50cmllcyhMaXN0Q2VsbCAqbmV4dE5vdGlmeSkKIAlR dWV1ZVBvc2l0aW9uIHF1ZXVlX2hlYWQ7CiAJaW50CQkJcGFnZW5vOwogCWludAkJCW9mZnNldDsK LQlpbnQJCQlzbG90bm87Ci0KLQkvKiBXZSBob2xkIGJvdGggTm90aWZ5UXVldWVMb2NrIGFuZCBO b3RpZnlTTFJVTG9jayBkdXJpbmcgdGhpcyBvcGVyYXRpb24gKi8KLQlMV0xvY2tBY3F1aXJlKE5v dGlmeVNMUlVMb2NrLCBMV19FWENMVVNJVkUpOworCUJ1ZmZlcgkJYnVmZmVyOwogCiAJLyoKIAkg KiBXZSB3b3JrIHdpdGggYSBsb2NhbCBjb3B5IG9mIFFVRVVFX0hFQUQsIHdoaWNoIHdlIHdyaXRl IGJhY2sgdG8gc2hhcmVkCkBAIC0xNDM5LDEzICsxNDIyLDE3IEBAIGFzeW5jUXVldWVBZGRFbnRy aWVzKExpc3RDZWxsICpuZXh0Tm90aWZ5KQogCSAqLwogCXBhZ2VubyA9IFFVRVVFX1BPU19QQUdF KHF1ZXVlX2hlYWQpOwogCWlmIChRVUVVRV9QT1NfSVNfWkVSTyhxdWV1ZV9oZWFkKSkKLQkJc2xv dG5vID0gU2ltcGxlTHJ1WmVyb1BhZ2UoTm90aWZ5Q3RsLCBwYWdlbm8pOworCXsKKwkJYnVmZmVy ID0gWmVyb1NscnVCdWZmZXIoU0xSVV9OT1RJRllfSUQsIHBhZ2Vubyk7CisJfQogCWVsc2UKLQkJ c2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBhZ2UoTm90aWZ5Q3RsLCBwYWdlbm8sIHRydWUsCi0JCQkJ CQkJCSAgIEludmFsaWRUcmFuc2FjdGlvbklkKTsKKwl7CisJCWJ1ZmZlciA9IFJlYWRTbHJ1QnVm ZmVyKFNMUlVfTk9USUZZX0lELCBwYWdlbm8pOworCQlMb2NrQnVmZmVyKGJ1ZmZlciwgQlVGRkVS X0xPQ0tfRVhDTFVTSVZFKTsKKwl9CiAKIAkvKiBOb3RlIHdlIG1hcmsgdGhlIHBhZ2UgZGlydHkg YmVmb3JlIHdyaXRpbmcgaW4gaXQgKi8KLQlOb3RpZnlDdGwtPnNoYXJlZC0+cGFnZV9kaXJ0eVtz bG90bm9dID0gdHJ1ZTsKKwlNYXJrQnVmZmVyRGlydHkoYnVmZmVyKTsKIAogCXdoaWxlIChuZXh0 Tm90aWZ5ICE9IE5VTEwpCiAJewpAQCAtMTQ3Niw3ICsxNDYzLDcgQEAgYXN5bmNRdWV1ZUFkZEVu dHJpZXMoTGlzdENlbGwgKm5leHROb3RpZnkpCiAJCX0KIAogCQkvKiBOb3cgY29weSBxZSBpbnRv IHRoZSBzaGFyZWQgYnVmZmVyIHBhZ2UgKi8KLQkJbWVtY3B5KE5vdGlmeUN0bC0+c2hhcmVkLT5w YWdlX2J1ZmZlcltzbG90bm9dICsgb2Zmc2V0LAorCQltZW1jcHkoQnVmZmVyR2V0UGFnZShidWZm ZXIpICsgb2Zmc2V0LAogCQkJICAgJnFlLAogCQkJICAgcWUubGVuZ3RoKTsKIApAQCAtMTQ5MSw3 ICsxNDc4LDEwIEBAIGFzeW5jUXVldWVBZGRFbnRyaWVzKExpc3RDZWxsICpuZXh0Tm90aWZ5KQog CQkJICogYXN5bmNRdWV1ZUlzRnVsbCgpIGVuc3VyZWQgdGhhdCB0aGVyZSBpcyByb29tIHRvIGNy ZWF0ZSB0aGlzCiAJCQkgKiBwYWdlIHdpdGhvdXQgb3ZlcnJ1bm5pbmcgdGhlIHF1ZXVlLgogCQkJ ICovCi0JCQlzbG90bm8gPSBTaW1wbGVMcnVaZXJvUGFnZShOb3RpZnlDdGwsIFFVRVVFX1BPU19Q QUdFKHF1ZXVlX2hlYWQpKTsKKwkJCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsKKwkJCWJ1 ZmZlciA9IFplcm9TbHJ1QnVmZmVyKFNMUlVfTk9USUZZX0lELAorCQkJCQkJCQkJUVVFVUVfUE9T X1BBR0UocXVldWVfaGVhZCkpOworCQkJTWFya0J1ZmZlckRpcnR5KGJ1ZmZlcik7CiAKIAkJCS8q CiAJCQkgKiBJZiB0aGUgbmV3IHBhZ2UgYWRkcmVzcyBpcyBhIG11bHRpcGxlIG9mIFFVRVVFX0NM RUFOVVBfREVMQVksCkBAIC0xNTA1LDEyICsxNDk1LDExIEBAIGFzeW5jUXVldWVBZGRFbnRyaWVz KExpc3RDZWxsICpuZXh0Tm90aWZ5KQogCQkJYnJlYWs7CiAJCX0KIAl9CisJVW5sb2NrUmVsZWFz ZUJ1ZmZlcihidWZmZXIpOwogCiAJLyogU3VjY2Vzcywgc28gdXBkYXRlIHRoZSBnbG9iYWwgUVVF VUVfSEVBRCAqLwogCVFVRVVFX0hFQUQgPSBxdWV1ZV9oZWFkOwogCi0JTFdMb2NrUmVsZWFzZShO b3RpZnlTTFJVTG9jayk7Ci0KIAlyZXR1cm4gbmV4dE5vdGlmeTsKIH0KIApAQCAtMTk4MywxNyAr MTk3MiwxNiBAQCBhc3luY1F1ZXVlUmVhZEFsbE5vdGlmaWNhdGlvbnModm9pZCkKIAkJewogCQkJ aW50CQkJY3VycGFnZSA9IFFVRVVFX1BPU19QQUdFKHBvcyk7CiAJCQlpbnQJCQljdXJvZmZzZXQg PSBRVUVVRV9QT1NfT0ZGU0VUKHBvcyk7Ci0JCQlpbnQJCQlzbG90bm87CiAJCQlpbnQJCQljb3B5 c2l6ZTsKKwkJCUJ1ZmZlcgkJYnVmZmVyOwogCiAJCQkvKgotCQkJICogV2UgY29weSB0aGUgZGF0 YSBmcm9tIFNMUlUgaW50byBhIGxvY2FsIGJ1ZmZlciwgc28gYXMgdG8gYXZvaWQKLQkJCSAqIGhv bGRpbmcgdGhlIE5vdGlmeVNMUlVMb2NrIHdoaWxlIHdlIGFyZSBleGFtaW5pbmcgdGhlIGVudHJp ZXMKLQkJCSAqIGFuZCBwb3NzaWJseSB0cmFuc21pdHRpbmcgdGhlbSB0byBvdXIgZnJvbnRlbmQu ICBDb3B5IG9ubHkgdGhlCi0JCQkgKiBwYXJ0IG9mIHRoZSBwYWdlIHdlIHdpbGwgYWN0dWFsbHkg aW5zcGVjdC4KKwkJCSAqIFdlIGNvcHkgdGhlIGRhdGEgaW50byBhIGxvY2FsIGJ1ZmZlciwgc28g YXMgdG8gYXZvaWQgaG9sZGluZyBhCisJCQkgKiBidWZmZXIgcGluIHdoaWxlIHdlIGFyZSBleGFt aW5pbmcgdGhlIGVudHJpZXMgYW5kIHBvc3NpYmx5CisJCQkgKiB0cmFuc21pdHRpbmcgdGhlbSB0 byBvdXIgZnJvbnRlbmQuICBDb3B5IG9ubHkgdGhlIHBhcnQgb2YgdGhlCisJCQkgKiBwYWdlIHdl IHdpbGwgYWN0dWFsbHkgaW5zcGVjdC4KIAkJCSAqLwotCQkJc2xvdG5vID0gU2ltcGxlTHJ1UmVh ZFBhZ2VfUmVhZE9ubHkoTm90aWZ5Q3RsLCBjdXJwYWdlLAotCQkJCQkJCQkJCQkJSW52YWxpZFRy YW5zYWN0aW9uSWQpOworCQkJYnVmZmVyID0gUmVhZFNscnVCdWZmZXIoU0xSVV9OT1RJRllfSUQs IGN1cnBhZ2UpOwogCQkJaWYgKGN1cnBhZ2UgPT0gUVVFVUVfUE9TX1BBR0UoaGVhZCkpCiAJCQl7 CiAJCQkJLyogd2Ugb25seSB3YW50IHRvIHJlYWQgYXMgZmFyIGFzIGhlYWQgKi8KQEAgLTIwMDcs MTAgKzE5OTUsOSBAQCBhc3luY1F1ZXVlUmVhZEFsbE5vdGlmaWNhdGlvbnModm9pZCkKIAkJCQlj b3B5c2l6ZSA9IFFVRVVFX1BBR0VTSVpFIC0gY3Vyb2Zmc2V0OwogCQkJfQogCQkJbWVtY3B5KHBh Z2VfYnVmZmVyLmJ1ZiArIGN1cm9mZnNldCwKLQkJCQkgICBOb3RpZnlDdGwtPnNoYXJlZC0+cGFn ZV9idWZmZXJbc2xvdG5vXSArIGN1cm9mZnNldCwKKwkJCQkgICBCdWZmZXJHZXRQYWdlKGJ1ZmZl cikgKyBjdXJvZmZzZXQsCiAJCQkJICAgY29weXNpemUpOwotCQkJLyogUmVsZWFzZSBsb2NrIHRo YXQgd2UgZ290IGZyb20gU2ltcGxlTHJ1UmVhZFBhZ2VfUmVhZE9ubHkoKSAqLwotCQkJTFdMb2Nr UmVsZWFzZShOb3RpZnlTTFJVTG9jayk7CisJCQlSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CiAKIAkJ CS8qCiAJCQkgKiBQcm9jZXNzIG1lc3NhZ2VzIHVwIHRvIHRoZSBzdG9wIHBvc2l0aW9uLCBlbmQg b2YgcGFnZSwgb3IgYW4KQEAgLTIyMDcsNyArMjE5NCw3IEBAIGFzeW5jUXVldWVBZHZhbmNlVGFp bCh2b2lkKQogCQkgKiBTaW1wbGVMcnVUcnVuY2F0ZSgpIHdpbGwgYXNrIGZvciBOb3RpZnlTTFJV TG9jayBidXQgd2lsbCBhbHNvCiAJCSAqIHJlbGVhc2UgdGhlIGxvY2sgYWdhaW4uCiAJCSAqLwot CQlTaW1wbGVMcnVUcnVuY2F0ZShOb3RpZnlDdGwsIG5ld3RhaWxwYWdlKTsKKwkJU2ltcGxlTHJ1 VHJ1bmNhdGUoU0xSVV9OT1RJRllfSUQsIGFzeW5jUXVldWVQYWdlUHJlY2VkZXMsIG5ld3RhaWxw YWdlKTsKIAogCQkvKgogCQkgKiBVcGRhdGUgUVVFVUVfU1RPUF9QQUdFLiAgVGhpcyBjaGFuZ2Vz IGFzeW5jUXVldWVJc0Z1bGwoKSdzIHZlcmRpY3QKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2RiY29tbWFuZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RiY29tbWFuZHMuYwpp bmRleCA2ZWI4NzQyNzE4MS4uNzAyNDFlNmY0YzcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2RiY29tbWFuZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kYmNvbW1hbmRz LmMKQEAgLTI1OSw3ICsyNTksNyBAQCBTY2FuU291cmNlRGF0YWJhc2VQZ0NsYXNzKE9pZCB0Ymlk LCBPaWQgZGJpZCwgY2hhciAqc3JjcGF0aCkKIAlMaXN0CSAgICpybG9jYXRvcmxpc3QgPSBOSUw7 CiAJTG9ja1JlbElkCXJlbGlkOwogCVNuYXBzaG90CXNuYXBzaG90OwotCVNNZ3JSZWxhdGlvbglz bWdyOworCVNNZ3JGaWxlSGFuZGxlIHNmaWxlOwogCUJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IGJzdHJh dGVneTsKIAogCS8qIEdldCBwZ19jbGFzcyByZWxmaWxlbnVtYmVyLiAqLwpAQCAtMjc2LDkgKzI3 Niw5IEBAIFNjYW5Tb3VyY2VEYXRhYmFzZVBnQ2xhc3MoT2lkIHRiaWQsIE9pZCBkYmlkLCBjaGFy ICpzcmNwYXRoKQogCXJsb2NhdG9yLmRiT2lkID0gZGJpZDsKIAlybG9jYXRvci5yZWxOdW1iZXIg PSByZWxmaWxlbnVtYmVyOwogCi0Jc21nciA9IHNtZ3JvcGVuKHJsb2NhdG9yLCBJbnZhbGlkQmFj a2VuZElkKTsKLQluYmxvY2tzID0gc21ncm5ibG9ja3Moc21nciwgTUFJTl9GT1JLTlVNKTsKLQlz bWdyY2xvc2Uoc21ncik7CisJc2ZpbGUgPSBzbWdyb3BlbihybG9jYXRvciwgSW52YWxpZEJhY2tl bmRJZCwgTUFJTl9GT1JLTlVNKTsKKwluYmxvY2tzID0gc21ncm5ibG9ja3Moc2ZpbGUpOworCXNt Z3JjbG9zZShzZmlsZSk7CiAKIAkvKiBVc2UgYSBidWZmZXIgYWNjZXNzIHN0cmF0ZWd5IHNpbmNl IHRoaXMgaXMgYSBidWxrIHJlYWQgb3BlcmF0aW9uLiAqLwogCWJzdHJhdGVneSA9IEdldEFjY2Vz c1N0cmF0ZWd5KEJBU19CVUxLUkVBRCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5k cy9zZXF1ZW5jZS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2UuYwppbmRleCA5OWM5 ZjkxY2JhNS4uZWUxMWVmNjNjMGUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3Nl cXVlbmNlLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2UuYwpAQCAtMzUzLDE0 ICszNTMsMTQgQEAgZmlsbF9zZXFfd2l0aF9kYXRhKFJlbGF0aW9uIHJlbCwgSGVhcFR1cGxlIHR1 cGxlKQogCiAJaWYgKHJlbC0+cmRfcmVsLT5yZWxwZXJzaXN0ZW5jZSA9PSBSRUxQRVJTSVNURU5D RV9VTkxPR0dFRCkKIAl7Ci0JCVNNZ3JSZWxhdGlvbiBzcmVsOworCQlTTWdyRmlsZUhhbmRsZSBz ZmlsZTsKIAotCQlzcmVsID0gc21ncm9wZW4ocmVsLT5yZF9sb2NhdG9yLCBJbnZhbGlkQmFja2Vu ZElkKTsKLQkJc21ncmNyZWF0ZShzcmVsLCBJTklUX0ZPUktOVU0sIGZhbHNlKTsKKwkJc2ZpbGUg PSBzbWdyb3BlbihyZWwtPnJkX2xvY2F0b3IsIEludmFsaWRCYWNrZW5kSWQsIElOSVRfRk9SS05V TSk7CisJCXNtZ3JjcmVhdGUoc2ZpbGUsIGZhbHNlKTsKIAkJbG9nX3NtZ3JjcmVhdGUoJnJlbC0+ cmRfbG9jYXRvciwgSU5JVF9GT1JLTlVNKTsKIAkJZmlsbF9zZXFfZm9ya193aXRoX2RhdGEocmVs LCB0dXBsZSwgSU5JVF9GT1JLTlVNKTsKIAkJRmx1c2hSZWxhdGlvbkJ1ZmZlcnMocmVsKTsKLQkJ c21ncmNsb3NlKHNyZWwpOworCQlzbWdyY2xvc2Uoc2ZpbGUpOwogCX0KIH0KIApkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5k cy90YWJsZWNtZHMuYwppbmRleCA4NDUyMDhkNjYyYi4uNzY5ZGIwMDg5NjQgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1h bmRzL3RhYmxlY21kcy5jCkBAIC0xNDY2OSw5ICsxNDY2OSw3IEBAIEFsdGVyVGFibGVNb3ZlQWxs KEFsdGVyVGFibGVNb3ZlQWxsU3RtdCAqc3RtdCkKIHN0YXRpYyB2b2lkCiBpbmRleF9jb3B5X2Rh dGEoUmVsYXRpb24gcmVsLCBSZWxGaWxlTG9jYXRvciBuZXdybG9jYXRvcikKIHsKLQlTTWdyUmVs YXRpb24gZHN0cmVsOwotCi0JZHN0cmVsID0gc21ncm9wZW4obmV3cmxvY2F0b3IsIHJlbC0+cmRf YmFja2VuZCk7CisJU01nckZpbGVIYW5kbGUgZHN0bWFpbjsKIAogCS8qCiAJICogU2luY2Ugd2Ug Y29weSB0aGUgZmlsZSBkaXJlY3RseSB3aXRob3V0IGxvb2tpbmcgYXQgdGhlIHNoYXJlZCBidWZm ZXJzLApAQCAtMTQ2OTEsMTYgKzE0Njg5LDIwIEBAIGluZGV4X2NvcHlfZGF0YShSZWxhdGlvbiBy ZWwsIFJlbEZpbGVMb2NhdG9yIG5ld3Jsb2NhdG9yKQogCVJlbGF0aW9uQ3JlYXRlU3RvcmFnZShu ZXdybG9jYXRvciwgcmVsLT5yZF9yZWwtPnJlbHBlcnNpc3RlbmNlLCB0cnVlKTsKIAogCS8qIGNv cHkgbWFpbiBmb3JrICovCi0JUmVsYXRpb25Db3B5U3RvcmFnZShSZWxhdGlvbkdldFNtZ3IocmVs KSwgZHN0cmVsLCBNQUlOX0ZPUktOVU0sCisJZHN0bWFpbiA9IHNtZ3JvcGVuKG5ld3Jsb2NhdG9y LCByZWwtPnJkX2JhY2tlbmQsIE1BSU5fRk9SS05VTSk7CisJUmVsYXRpb25Db3B5U3RvcmFnZShS ZWxhdGlvbkdldFNtZ3IocmVsLCBNQUlOX0ZPUktOVU0pLCBkc3RtYWluLAogCQkJCQkJcmVsLT5y ZF9yZWwtPnJlbHBlcnNpc3RlbmNlKTsKIAogCS8qIGNvcHkgdGhvc2UgZXh0cmEgZm9ya3MgdGhh dCBleGlzdCAqLwogCWZvciAoRm9ya051bWJlciBmb3JrTnVtID0gTUFJTl9GT1JLTlVNICsgMTsK IAkJIGZvcmtOdW0gPD0gTUFYX0ZPUktOVU07IGZvcmtOdW0rKykKIAl7Ci0JCWlmIChzbWdyZXhp c3RzKFJlbGF0aW9uR2V0U21ncihyZWwpLCBmb3JrTnVtKSkKKwkJaWYgKHNtZ3JleGlzdHMoUmVs YXRpb25HZXRTbWdyKHJlbCwgZm9ya051bSkpKQogCQl7Ci0JCQlzbWdyY3JlYXRlKGRzdHJlbCwg Zm9ya051bSwgZmFsc2UpOworCQkJU01nckZpbGVIYW5kbGUgc3JjX2ZvcmsgPSBSZWxhdGlvbkdl dFNtZ3IocmVsLCBmb3JrTnVtKTsKKwkJCVNNZ3JGaWxlSGFuZGxlIGRzdF9mb3JrID0gc21ncm9w ZW4obmV3cmxvY2F0b3IsIHJlbC0+cmRfYmFja2VuZCwgZm9ya051bSk7CisKKwkJCXNtZ3JjcmVh dGUoZHN0X2ZvcmssIGZhbHNlKTsKIAogCQkJLyoKIAkJCSAqIFdBTCBsb2cgY3JlYXRpb24gaWYg dGhlIHJlbGF0aW9uIGlzIHBlcnNpc3RlbnQsIG9yIHRoaXMgaXMgdGhlCkBAIC0xNDcxMCwxNCAr MTQ3MTIsMTUgQEAgaW5kZXhfY29weV9kYXRhKFJlbGF0aW9uIHJlbCwgUmVsRmlsZUxvY2F0b3Ig bmV3cmxvY2F0b3IpCiAJCQkJKHJlbC0+cmRfcmVsLT5yZWxwZXJzaXN0ZW5jZSA9PSBSRUxQRVJT SVNURU5DRV9VTkxPR0dFRCAmJgogCQkJCSBmb3JrTnVtID09IElOSVRfRk9SS05VTSkpCiAJCQkJ bG9nX3NtZ3JjcmVhdGUoJm5ld3Jsb2NhdG9yLCBmb3JrTnVtKTsKLQkJCVJlbGF0aW9uQ29weVN0 b3JhZ2UoUmVsYXRpb25HZXRTbWdyKHJlbCksIGRzdHJlbCwgZm9ya051bSwKKwkJCVJlbGF0aW9u Q29weVN0b3JhZ2Uoc3JjX2ZvcmssIGRzdF9mb3JrLAogCQkJCQkJCQlyZWwtPnJkX3JlbC0+cmVs cGVyc2lzdGVuY2UpOworCQkJc21ncmNsb3NlKGRzdF9mb3JrKTsKIAkJfQogCX0KIAogCS8qIGRy b3Agb2xkIHJlbGF0aW9uLCBhbmQgY2xvc2UgbmV3IG9uZSAqLwogCVJlbGF0aW9uRHJvcFN0b3Jh Z2UocmVsKTsKLQlzbWdyY2xvc2UoZHN0cmVsKTsKKwlzbWdyY2xvc2UoZHN0bWFpbik7CiB9CiAK IC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZfaW5pdC5jIGIv c3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmX2luaXQuYwppbmRleCA2YjYyNjQ4NTRlNi4u NDE4MTljNTkwZTAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zl9p bml0LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmX2luaXQuYwpAQCAtMjAs NiArMjAsNyBAQAogCiBCdWZmZXJEZXNjUGFkZGVkICpCdWZmZXJEZXNjcmlwdG9yczsKIGNoYXIJ ICAgKkJ1ZmZlckJsb2NrczsKK1hMb2dSZWNQdHIgKkJ1ZmZlckV4dGVybmFsTFNOczsKIENvbmRp dGlvblZhcmlhYmxlTWluaW1hbGx5UGFkZGVkICpCdWZmZXJJT0NWQXJyYXk7CiBXcml0ZWJhY2tD b250ZXh0IEJhY2tlbmRXcml0ZWJhY2tDb250ZXh0OwogQ2twdFNvcnRJdGVtICpDa3B0QnVmZmVy SWRzOwpAQCAtNjksOSArNzAsMTEgQEAgSW5pdEJ1ZmZlclBvb2wodm9pZCkKIHsKIAlib29sCQlm b3VuZEJ1ZnMsCiAJCQkJZm91bmREZXNjcywKKwkJCQlmb3VuZExTTnMsCiAJCQkJZm91bmRJT0NW LAogCQkJCWZvdW5kQnVmQ2twdDsKIAorCiAJLyogQWxpZ24gZGVzY3JpcHRvcnMgdG8gYSBjYWNo ZWxpbmUgYm91bmRhcnkuICovCiAJQnVmZmVyRGVzY3JpcHRvcnMgPSAoQnVmZmVyRGVzY1BhZGRl ZCAqKQogCQlTaG1lbUluaXRTdHJ1Y3QoIkJ1ZmZlciBEZXNjcmlwdG9ycyIsCkBAIC04OCw2ICs5 MSwxMSBAQCBJbml0QnVmZmVyUG9vbCh2b2lkKQogCQkJCQkJTkJ1ZmZlcnMgKiBzaXplb2YoQ29u ZGl0aW9uVmFyaWFibGVNaW5pbWFsbHlQYWRkZWQpLAogCQkJCQkJJmZvdW5kSU9DVik7CiAKKwlC dWZmZXJFeHRlcm5hbExTTnMgPSAoWExvZ1JlY1B0ciAqKQorCQlTaG1lbUluaXRTdHJ1Y3QoIkJ1 ZmZlciBFeHRlcm5hbCBMU05zIiwKKwkJCQkJCU5CdWZmZXJzICogc2l6ZW9mKFhMb2dSZWNQdHIp LAorCQkJCQkJJmZvdW5kTFNOcyk7CisKIAkvKgogCSAqIFRoZSBhcnJheSB1c2VkIHRvIHNvcnQg dG8tYmUtY2hlY2twb2ludGVkIGJ1ZmZlciBpZHMgaXMgbG9jYXRlZCBpbgogCSAqIHNoYXJlZCBt ZW1vcnksIHRvIGF2b2lkIGhhdmluZyB0byBhbGxvY2F0ZSBzaWduaWZpY2FudCBhbW91bnRzIG9m CkBAIC05OSwxMCArMTA3LDEwIEBAIEluaXRCdWZmZXJQb29sKHZvaWQpCiAJCVNobWVtSW5pdFN0 cnVjdCgiQ2hlY2twb2ludCBCdWZmZXJJZHMiLAogCQkJCQkJTkJ1ZmZlcnMgKiBzaXplb2YoQ2tw dFNvcnRJdGVtKSwgJmZvdW5kQnVmQ2twdCk7CiAKLQlpZiAoZm91bmREZXNjcyB8fCBmb3VuZEJ1 ZnMgfHwgZm91bmRJT0NWIHx8IGZvdW5kQnVmQ2twdCkKKwlpZiAoZm91bmREZXNjcyB8fCBmb3Vu ZEJ1ZnMgfHwgZm91bmRJT0NWIHx8IGZvdW5kQnVmQ2twdCB8fCBmb3VuZExTTnMpCiAJewogCQkv KiBzaG91bGQgZmluZCBhbGwgb2YgdGhlc2UsIG9yIG5vbmUgb2YgdGhlbSAqLwotCQlBc3NlcnQo Zm91bmREZXNjcyAmJiBmb3VuZEJ1ZnMgJiYgZm91bmRJT0NWICYmIGZvdW5kQnVmQ2twdCk7CisJ CUFzc2VydChmb3VuZERlc2NzICYmIGZvdW5kQnVmcyAmJiBmb3VuZElPQ1YgJiYgZm91bmRCdWZD a3B0ICYmIGZvdW5kTFNOcyk7CiAJCS8qIG5vdGU6IHRoaXMgcGF0aCBpcyBvbmx5IHRha2VuIGlu IEVYRUNfQkFDS0VORCBjYXNlICovCiAJfQogCWVsc2UKQEAgLTEzMyw2ICsxNDEsOCBAQCBJbml0 QnVmZmVyUG9vbCh2b2lkKQogCQkJCQkJCSBMV1RSQU5DSEVfQlVGRkVSX0NPTlRFTlQpOwogCiAJ CQlDb25kaXRpb25WYXJpYWJsZUluaXQoQnVmZmVyRGVzY3JpcHRvckdldElPQ1YoYnVmKSk7CisK KwkJCUJ1ZmZlckV4dGVybmFsTFNOc1tpXSA9IEludmFsaWRYTG9nUmVjUHRyOwogCQl9CiAKIAkJ LyogQ29ycmVjdCBsYXN0IGVudHJ5IG9mIGxpbmtlZCBsaXN0ICovCkBAIC0xNjYsNiArMTc2LDkg QEAgQnVmZmVyU2htZW1TaXplKHZvaWQpCiAJLyogc2l6ZSBvZiBkYXRhIHBhZ2VzICovCiAJc2l6 ZSA9IGFkZF9zaXplKHNpemUsIG11bF9zaXplKE5CdWZmZXJzLCBCTENLU1opKTsKIAorCS8qIHNp emUgb2YgZXh0ZXJuYWwgTFNOcyAqLworCXNpemUgPSBhZGRfc2l6ZShzaXplLCBtdWxfc2l6ZShO QnVmZmVycywgc2l6ZW9mKFhMb2dSZWNQdHIpKSk7CisKIAkvKiBzaXplIG9mIHN0dWZmIGNvbnRy b2xsZWQgYnkgZnJlZWxpc3QuYyAqLwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBTdHJhdGVneVNo bWVtU2l6ZSgpKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVm bWdyLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwppbmRleCA3M2QzMGJm NjE5MS4uZjNiYjkyNzU3ZWMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVy L2J1Zm1nci5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jCkBAIC01 NywxMCArNTcsMjEgQEAKICNpbmNsdWRlICJ1dGlscy9yZXNvd25lcl9wcml2YXRlLmgiCiAjaW5j bHVkZSAidXRpbHMvdGltZXN0YW1wLmgiCiAKKy8qCisgKiBYWFggSWRlYWxseSB3ZSdkIHN3aXRj aCB0byBzdGFuZGFyZCBwYWdlcyBmb3IgU0xSVSBkYXRhLCBidXQgaW4gdGhlCisgKiBtZWFudGlt ZSB3ZSBuZWVkIHNvbWUgd2F5IHRvIGlkZW50aWZ5IGJ1ZmZlcnMgdGhhdCBob2xkIHJhdyBkYXRh IChubworICogaW52YXNpdmUgTFNOLCBubyBjaGVja3N1bXMpLgorICovCisjZGVmaW5lIEJ1ZmZl ckhhc1N0YW5kYXJkUGFnZShidWZIZHIpCQkJXAorCSgoYnVmSGRyKS0+dGFnLnNwY09pZCAhPSA5 KQorCisjZGVmaW5lIEJ1ZmZlckhhc0V4dGVybmFsTFNOKGJ1ZkhkcikJCQlcCisJIUJ1ZmZlckhh c1N0YW5kYXJkUGFnZShidWZIZHIpCiAKIC8qIE5vdGU6IHRoZXNlIHR3byBtYWNyb3Mgb25seSB3 b3JrIG9uIHNoYXJlZCBidWZmZXJzLCBub3QgbG9jYWwgb25lcyEgKi8KICNkZWZpbmUgQnVmSGRy R2V0QmxvY2soYnVmSGRyKQkoKEJsb2NrKSAoQnVmZmVyQmxvY2tzICsgKChTaXplKSAoYnVmSGRy KS0+YnVmX2lkKSAqIEJMQ0tTWikpCi0jZGVmaW5lIEJ1ZmZlckdldExTTihidWZIZHIpCShQYWdl R2V0TFNOKEJ1ZkhkckdldEJsb2NrKGJ1ZkhkcikpKQorI2RlZmluZSBCdWZmZXJHZXRMU04oYnVm SGRyKSBcCisJKEJ1ZmZlckhhc0V4dGVybmFsTFNOKGJ1ZkhkcikgPyBCdWZmZXJHZXRFeHRlcm5h bExTTihidWZIZHIpIDogUGFnZUdldExTTihCdWZIZHJHZXRCbG9jayhidWZIZHIpKSkKIAogLyog Tm90ZTogdGhpcyBtYWNybyBvbmx5IHdvcmtzIG9uIGxvY2FsIGJ1ZmZlcnMsIG5vdCBzaGFyZWQg b25lcyEgKi8KICNkZWZpbmUgTG9jYWxCdWZIZHJHZXRCbG9jayhidWZIZHIpIFwKQEAgLTExNywx OSArMTI4LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgQ2twdFRzU3RhdHVzCiAJaW50CQkJaW5kZXg7CiB9 IENrcHRUc1N0YXR1czsKIAotLyoKLSAqIFR5cGUgZm9yIGFycmF5IHVzZWQgdG8gc29ydCBTTWdy UmVsYXRpb25zCi0gKgotICogRmx1c2hSZWxhdGlvbnNBbGxCdWZmZXJzIHNoYXJlcyB0aGUgc2Ft ZSBjb21wYXJhdG9yIGZ1bmN0aW9uIHdpdGgKLSAqIERyb3BSZWxhdGlvbnNBbGxCdWZmZXJzLiBQ b2ludGVyIHRvIHRoaXMgc3RydWN0IGFuZCBSZWxGaWxlTG9jYXRvciBtdXN0IGJlCi0gKiBjb21w YXRpYmxlLgotICovCi10eXBlZGVmIHN0cnVjdCBTTWdyU29ydEFycmF5Ci17Ci0JUmVsRmlsZUxv Y2F0b3IgcmxvY2F0b3I7CS8qIFRoaXMgbXVzdCBiZSB0aGUgZmlyc3QgbWVtYmVyICovCi0JU01n clJlbGF0aW9uIHNyZWw7Ci19IFNNZ3JTb3J0QXJyYXk7Ci0KIC8qIEdVQyB2YXJpYWJsZXMgKi8K IGJvb2wJCXplcm9fZGFtYWdlZF9wYWdlcyA9IGZhbHNlOwogaW50CQkJYmd3cml0ZXJfbHJ1X21h eHBhZ2VzID0gMTAwOwpAQCAtNDU5LDggKzQ1Nyw4IEBAIEZvcmdldFByaXZhdGVSZWZDb3VudEVu dHJ5KFByaXZhdGVSZWZDb3VudEVudHJ5ICpyZWYpCiApCiAKIAotc3RhdGljIEJ1ZmZlciBSZWFk QnVmZmVyX2NvbW1vbihTTWdyUmVsYXRpb24gc21nciwgY2hhciByZWxwZXJzaXN0ZW5jZSwKLQkJ CQkJCQkJRm9ya051bWJlciBmb3JrTnVtLCBCbG9ja051bWJlciBibG9ja051bSwKK3N0YXRpYyBC dWZmZXIgUmVhZEJ1ZmZlcl9jb21tb24oU01nckZpbGVIYW5kbGUgc2ZpbGUsIGNoYXIgcmVscGVy c2lzdGVuY2UsCisJCQkJCQkJCUJsb2NrTnVtYmVyIGJsb2NrTnVtLAogCQkJCQkJCQlSZWFkQnVm ZmVyTW9kZSBtb2RlLCBCdWZmZXJBY2Nlc3NTdHJhdGVneSBzdHJhdGVneSwKIAkJCQkJCQkJYm9v bCAqaGl0KTsKIHN0YXRpYyBib29sIFBpbkJ1ZmZlcihCdWZmZXJEZXNjICpidWYsIEJ1ZmZlckFj Y2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5KTsKQEAgLTQ3NiwyMCArNDc0LDE5IEBAIHN0YXRpYyB2b2lk IFRlcm1pbmF0ZUJ1ZmZlcklPKEJ1ZmZlckRlc2MgKmJ1ZiwgYm9vbCBjbGVhcl9kaXJ0eSwKIAkJ CQkJCQkgIHVpbnQzMiBzZXRfZmxhZ19iaXRzKTsKIHN0YXRpYyB2b2lkIHNoYXJlZF9idWZmZXJf d3JpdGVfZXJyb3JfY2FsbGJhY2sodm9pZCAqYXJnKTsKIHN0YXRpYyB2b2lkIGxvY2FsX2J1ZmZl cl93cml0ZV9lcnJvcl9jYWxsYmFjayh2b2lkICphcmcpOwotc3RhdGljIEJ1ZmZlckRlc2MgKkJ1 ZmZlckFsbG9jKFNNZ3JSZWxhdGlvbiBzbWdyLAorc3RhdGljIEJ1ZmZlckRlc2MgKkJ1ZmZlckFs bG9jKFNNZ3JGaWxlSGFuZGxlIHNtZ3IsCiAJCQkJCQkJICAgY2hhciByZWxwZXJzaXN0ZW5jZSwK LQkJCQkJCQkgICBGb3JrTnVtYmVyIGZvcmtOdW0sCiAJCQkJCQkJICAgQmxvY2tOdW1iZXIgYmxv Y2tOdW0sCiAJCQkJCQkJICAgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3ksCiAJCQkJCQkJ ICAgYm9vbCAqZm91bmRQdHIpOwotc3RhdGljIHZvaWQgRmx1c2hCdWZmZXIoQnVmZmVyRGVzYyAq YnVmLCBTTWdyUmVsYXRpb24gcmVsbik7CitzdGF0aWMgdm9pZCBGbHVzaEJ1ZmZlcihCdWZmZXJE ZXNjICpidWYsIFNNZ3JGaWxlSGFuZGxlIHNmaWxlKTsKIHN0YXRpYyB2b2lkIEZpbmRBbmREcm9w UmVsYXRpb25CdWZmZXJzKFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLAotCQkJCQkJCQkJICAgRm9y a051bWJlciBmb3JrTnVtLAorCQkJCQkJCQkJICAgRm9ya051bWJlciBmb3JrbnVtLAogCQkJCQkJ CQkJICAgQmxvY2tOdW1iZXIgbkZvcmtCbG9jaywKIAkJCQkJCQkJCSAgIEJsb2NrTnVtYmVyIGZp cnN0RGVsQmxvY2spOwogc3RhdGljIHZvaWQgUmVsYXRpb25Db3B5U3RvcmFnZVVzaW5nQnVmZmVy KFJlbEZpbGVMb2NhdG9yIHNyY2xvY2F0b3IsCiAJCQkJCQkJCQkJICAgUmVsRmlsZUxvY2F0b3Ig ZHN0bG9jYXRvciwKLQkJCQkJCQkJCQkgICBGb3JrTnVtYmVyIGZvcmtOdW0sIGJvb2wgcGVybWFu ZW50KTsKKwkJCQkJCQkJCQkgICBGb3JrTnVtYmVyIGZvcmtudW0sIGJvb2wgcGVybWFuZW50KTsK IHN0YXRpYyB2b2lkIEF0UHJvY0V4aXRfQnVmZmVycyhpbnQgY29kZSwgRGF0dW0gYXJnKTsKIHN0 YXRpYyB2b2lkIENoZWNrRm9yQnVmZmVyTGVha3Modm9pZCk7CiBzdGF0aWMgaW50CXJsb2NhdG9y X2NvbXBhcmF0b3IoY29uc3Qgdm9pZCAqcDEsIGNvbnN0IHZvaWQgKnAyKTsKQEAgLTUwMiw5ICs0 OTksNyBAQCBzdGF0aWMgaW50CXRzX2NrcHRfcHJvZ3Jlc3NfY29tcGFyYXRvcihEYXR1bSBhLCBE YXR1bSBiLCB2b2lkICphcmcpOwogICogSW1wbGVtZW50YXRpb24gb2YgUHJlZmV0Y2hCdWZmZXIo KSBmb3Igc2hhcmVkIGJ1ZmZlcnMuCiAgKi8KIFByZWZldGNoQnVmZmVyUmVzdWx0Ci1QcmVmZXRj aFNoYXJlZEJ1ZmZlcihTTWdyUmVsYXRpb24gc21ncl9yZWxuLAotCQkJCQkgRm9ya051bWJlciBm b3JrTnVtLAotCQkJCQkgQmxvY2tOdW1iZXIgYmxvY2tOdW0pCitQcmVmZXRjaFNoYXJlZEJ1ZmZl cihTTWdyRmlsZUhhbmRsZSBzZmlsZSwgQmxvY2tOdW1iZXIgYmxvY2tOdW0pCiB7CiAJUHJlZmV0 Y2hCdWZmZXJSZXN1bHQgcmVzdWx0ID0ge0ludmFsaWRCdWZmZXIsIGZhbHNlfTsKIAlCdWZmZXJU YWcJbmV3VGFnOwkJCS8qIGlkZW50aXR5IG9mIHJlcXVlc3RlZCBibG9jayAqLwpAQCAtNTE1LDgg KzUxMCw4IEBAIFByZWZldGNoU2hhcmVkQnVmZmVyKFNNZ3JSZWxhdGlvbiBzbWdyX3JlbG4sCiAJ QXNzZXJ0KEJsb2NrTnVtYmVySXNWYWxpZChibG9ja051bSkpOwogCiAJLyogY3JlYXRlIGEgdGFn IHNvIHdlIGNhbiBsb29rdXAgdGhlIGJ1ZmZlciAqLwotCUluaXRCdWZmZXJUYWcoJm5ld1RhZywg JnNtZ3JfcmVsbi0+c21ncl9ybG9jYXRvci5sb2NhdG9yLAotCQkJCSAgIGZvcmtOdW0sIGJsb2Nr TnVtKTsKKwlJbml0QnVmZmVyVGFnKCZuZXdUYWcsICZzZmlsZS0+c21ncl9sb2NhdG9yLmxvY2F0 b3IsCisJCQkJICAgc2ZpbGUtPnNtZ3JfbG9jYXRvci5mb3JrbnVtLCBibG9ja051bSk7CiAKIAkv KiBkZXRlcm1pbmUgaXRzIGhhc2ggY29kZSBhbmQgcGFydGl0aW9uIGxvY2sgSUQgKi8KIAluZXdI YXNoID0gQnVmVGFibGVIYXNoQ29kZSgmbmV3VGFnKTsKQEAgLTUzNSw3ICs1MzAsNyBAQCBQcmVm ZXRjaFNoYXJlZEJ1ZmZlcihTTWdyUmVsYXRpb24gc21ncl9yZWxuLAogCQkgKiBUcnkgdG8gaW5p dGlhdGUgYW4gYXN5bmNocm9ub3VzIHJlYWQuICBUaGlzIHJldHVybnMgZmFsc2UgaW4KIAkJICog cmVjb3ZlcnkgaWYgdGhlIHJlbGF0aW9uIGZpbGUgZG9lc24ndCBleGlzdC4KIAkJICovCi0JCWlm IChzbWdycHJlZmV0Y2goc21ncl9yZWxuLCBmb3JrTnVtLCBibG9ja051bSkpCisJCWlmIChzbWdy cHJlZmV0Y2goc2ZpbGUsIGJsb2NrTnVtKSkKIAkJCXJlc3VsdC5pbml0aWF0ZWRfaW8gPSB0cnVl OwogI2VuZGlmCQkJCQkJCS8qIFVTRV9QUkVGRVRDSCAqLwogCX0KQEAgLTU4OSw3ICs1ODQsNyBA QCBQcmVmZXRjaFNoYXJlZEJ1ZmZlcihTTWdyUmVsYXRpb24gc21ncl9yZWxuLAogICogcmVjb3Zl cnksIGFuIGVycm9yIGlzIHJhaXNlZCkuCiAgKi8KIFByZWZldGNoQnVmZmVyUmVzdWx0Ci1QcmVm ZXRjaEJ1ZmZlcihSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtOdW0sIEJsb2NrTnVtYmVy IGJsb2NrTnVtKQorUHJlZmV0Y2hCdWZmZXIoUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3Jr bnVtLCBCbG9ja051bWJlciBibG9ja051bSkKIHsKIAlBc3NlcnQoUmVsYXRpb25Jc1ZhbGlkKHJl bG4pKTsKIAlBc3NlcnQoQmxvY2tOdW1iZXJJc1ZhbGlkKGJsb2NrTnVtKSk7CkBAIC02MDMsMTIg KzU5OCwxMiBAQCBQcmVmZXRjaEJ1ZmZlcihSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtO dW0sIEJsb2NrTnVtYmVyIGJsb2NrTnVtKQogCQkJCQkgZXJybXNnKCJjYW5ub3QgYWNjZXNzIHRl bXBvcmFyeSB0YWJsZXMgb2Ygb3RoZXIgc2Vzc2lvbnMiKSkpOwogCiAJCS8qIHBhc3MgaXQgb2Zm IHRvIGxvY2FsYnVmLmMgKi8KLQkJcmV0dXJuIFByZWZldGNoTG9jYWxCdWZmZXIoUmVsYXRpb25H ZXRTbWdyKHJlbG4pLCBmb3JrTnVtLCBibG9ja051bSk7CisJCXJldHVybiBQcmVmZXRjaExvY2Fs QnVmZmVyKFJlbGF0aW9uR2V0U21ncihyZWxuLCBmb3JrbnVtKSwgYmxvY2tOdW0pOwogCX0KIAll bHNlCiAJewogCQkvKiBwYXNzIGl0IHRvIHRoZSBzaGFyZWQgYnVmZmVyIHZlcnNpb24gKi8KLQkJ cmV0dXJuIFByZWZldGNoU2hhcmVkQnVmZmVyKFJlbGF0aW9uR2V0U21ncihyZWxuKSwgZm9ya051 bSwgYmxvY2tOdW0pOworCQlyZXR1cm4gUHJlZmV0Y2hTaGFyZWRCdWZmZXIoUmVsYXRpb25HZXRT bWdyKHJlbG4sIGZvcmtudW0pLCBibG9ja051bSk7CiAJfQogfQogCkBAIC02MjAsNyArNjE1LDcg QEAgUHJlZmV0Y2hCdWZmZXIoUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrTnVtLCBCbG9j a051bWJlciBibG9ja051bSkKICAqIHRhZy4gIEluIHRoYXQgY2FzZSwgdGhlIGJ1ZmZlciBpcyBw aW5uZWQgYW5kIHRoZSB1c2FnZSBjb3VudCBpcyBidW1wZWQuCiAgKi8KIGJvb2wKLVJlYWRSZWNl bnRCdWZmZXIoUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IsIEZvcmtOdW1iZXIgZm9ya051bSwgQmxv Y2tOdW1iZXIgYmxvY2tOdW0sCitSZWFkUmVjZW50QnVmZmVyKFJlbEZpbGVMb2NhdG9yIHJsb2Nh dG9yLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGJsb2NrTnVtLAogCQkJCSBCdWZm ZXIgcmVjZW50X2J1ZmZlcikKIHsKIAlCdWZmZXJEZXNjICpidWZIZHI7CkBAIC02MzIsNyArNjI3 LDcgQEAgUmVhZFJlY2VudEJ1ZmZlcihSZWxGaWxlTG9jYXRvciBybG9jYXRvciwgRm9ya051bWJl ciBmb3JrTnVtLCBCbG9ja051bWJlciBibG9ja04KIAogCVJlc291cmNlT3duZXJFbmxhcmdlQnVm ZmVycyhDdXJyZW50UmVzb3VyY2VPd25lcik7CiAJUmVzZXJ2ZVByaXZhdGVSZWZDb3VudEVudHJ5 KCk7Ci0JSW5pdEJ1ZmZlclRhZygmdGFnLCAmcmxvY2F0b3IsIGZvcmtOdW0sIGJsb2NrTnVtKTsK KwlJbml0QnVmZmVyVGFnKCZ0YWcsICZybG9jYXRvciwgZm9ya251bSwgYmxvY2tOdW0pOwogCiAJ aWYgKEJ1ZmZlcklzTG9jYWwocmVjZW50X2J1ZmZlcikpCiAJewpAQCAtNzU2LDcgKzc1MSw3IEBA IFJlYWRCdWZmZXIoUmVsYXRpb24gcmVsbiwgQmxvY2tOdW1iZXIgYmxvY2tOdW0pCiAgKiBTZWUg YnVmZmVyL1JFQURNRSBmb3IgZGV0YWlscy4KICAqLwogQnVmZmVyCi1SZWFkQnVmZmVyRXh0ZW5k ZWQoUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrTnVtLCBCbG9ja051bWJlciBibG9ja051 bSwKK1JlYWRCdWZmZXJFeHRlbmRlZChSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0s IEJsb2NrTnVtYmVyIGJsb2NrTnVtLAogCQkJCSAgIFJlYWRCdWZmZXJNb2RlIG1vZGUsIEJ1ZmZl ckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5KQogewogCWJvb2wJCWhpdDsKQEAgLTc3Nyw4ICs3NzIs OSBAQCBSZWFkQnVmZmVyRXh0ZW5kZWQoUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrTnVt LCBCbG9ja051bWJlciBibG9ja051bSwKIAkgKiBtaXNzLgogCSAqLwogCXBnc3RhdF9jb3VudF9i dWZmZXJfcmVhZChyZWxuKTsKLQlidWYgPSBSZWFkQnVmZmVyX2NvbW1vbihSZWxhdGlvbkdldFNt Z3IocmVsbiksIHJlbG4tPnJkX3JlbC0+cmVscGVyc2lzdGVuY2UsCi0JCQkJCQkJZm9ya051bSwg YmxvY2tOdW0sIG1vZGUsIHN0cmF0ZWd5LCAmaGl0KTsKKwlidWYgPSBSZWFkQnVmZmVyX2NvbW1v bihSZWxhdGlvbkdldFNtZ3IocmVsbiwgZm9ya251bSksCisJCQkJCQkJcmVsbi0+cmRfcmVsLT5y ZWxwZXJzaXN0ZW5jZSwKKwkJCQkJCQlibG9ja051bSwgbW9kZSwgc3RyYXRlZ3ksICZoaXQpOwog CWlmIChoaXQpCiAJCXBnc3RhdF9jb3VudF9idWZmZXJfaGl0KHJlbG4pOwogCXJldHVybiBidWY7 CkBAIC03OTYsMTkgKzc5MiwzMSBAQCBSZWFkQnVmZmVyRXh0ZW5kZWQoUmVsYXRpb24gcmVsbiwg Rm9ya051bWJlciBmb3JrTnVtLCBCbG9ja051bWJlciBibG9ja051bSwKICAqIEJhY2tlbmRJZCku CiAgKi8KIEJ1ZmZlcgotUmVhZEJ1ZmZlcldpdGhvdXRSZWxjYWNoZShSZWxGaWxlTG9jYXRvciBy bG9jYXRvciwgRm9ya051bWJlciBmb3JrTnVtLAorUmVhZEJ1ZmZlcldpdGhvdXRSZWxjYWNoZShS ZWxGaWxlTG9jYXRvciBybG9jYXRvciwgRm9ya051bWJlciBmb3JrbnVtLAogCQkJCQkJICBCbG9j a051bWJlciBibG9ja051bSwgUmVhZEJ1ZmZlck1vZGUgbW9kZSwKIAkJCQkJCSAgQnVmZmVyQWNj ZXNzU3RyYXRlZ3kgc3RyYXRlZ3ksIGJvb2wgcGVybWFuZW50KQogewogCWJvb2wJCWhpdDsKIAot CVNNZ3JSZWxhdGlvbiBzbWdyID0gc21ncm9wZW4ocmxvY2F0b3IsIEludmFsaWRCYWNrZW5kSWQp OworCVNNZ3JGaWxlSGFuZGxlIHNmaWxlID0gc21ncm9wZW4ocmxvY2F0b3IsIEludmFsaWRCYWNr ZW5kSWQsIGZvcmtudW0pOwogCi0JcmV0dXJuIFJlYWRCdWZmZXJfY29tbW9uKHNtZ3IsIHBlcm1h bmVudCA/IFJFTFBFUlNJU1RFTkNFX1BFUk1BTkVOVCA6Ci0JCQkJCQkJIFJFTFBFUlNJU1RFTkNF X1VOTE9HR0VELCBmb3JrTnVtLCBibG9ja051bSwKKwlyZXR1cm4gUmVhZEJ1ZmZlcl9jb21tb24o c2ZpbGUsIHBlcm1hbmVudCA/IFJFTFBFUlNJU1RFTkNFX1BFUk1BTkVOVCA6CisJCQkJCQkJIFJF TFBFUlNJU1RFTkNFX1VOTE9HR0VELCBibG9ja051bSwKIAkJCQkJCQkgbW9kZSwgc3RyYXRlZ3ks ICZoaXQpOwogfQogCitCdWZmZXIKK1JlYWRCdWZmZXJXaXRob3V0UmVsY2FjaGVXaXRoSGl0KFJl bEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBGb3JrTnVtYmVyIGZvcmtudW0sCisJCQkJCQkJCSBCbG9j a051bWJlciBibG9ja051bSwgUmVhZEJ1ZmZlck1vZGUgbW9kZSwKKwkJCQkJCQkJIEJ1ZmZlckFj Y2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LCBib29sIHBlcm1hbmVudCwgYm9vbCAqaGl0KQoreworCVNN Z3JGaWxlSGFuZGxlIHNmaWxlID0gc21ncm9wZW4ocmxvY2F0b3IsIEludmFsaWRCYWNrZW5kSWQs IGZvcmtudW0pOworCisJcmV0dXJuIFJlYWRCdWZmZXJfY29tbW9uKHNmaWxlLCBwZXJtYW5lbnQg PyBSRUxQRVJTSVNURU5DRV9QRVJNQU5FTlQgOgorCQkJCQkJCSBSRUxQRVJTSVNURU5DRV9VTkxP R0dFRCwgYmxvY2tOdW0sCisJCQkJCQkJIG1vZGUsIHN0cmF0ZWd5LCBoaXQpOworfQorCiAKIC8q CiAgKiBSZWFkQnVmZmVyX2NvbW1vbiAtLSBjb21tb24gbG9naWMgZm9yIGFsbCBSZWFkQnVmZmVy IHZhcmlhbnRzCkBAIC04MTYsNyArODI0LDcgQEAgUmVhZEJ1ZmZlcldpdGhvdXRSZWxjYWNoZShS ZWxGaWxlTG9jYXRvciBybG9jYXRvciwgRm9ya051bWJlciBmb3JrTnVtLAogICogKmhpdCBpcyBz ZXQgdG8gdHJ1ZSBpZiB0aGUgcmVxdWVzdCB3YXMgc2F0aXNmaWVkIGZyb20gc2hhcmVkIGJ1ZmZl ciBjYWNoZS4KICAqLwogc3RhdGljIEJ1ZmZlcgotUmVhZEJ1ZmZlcl9jb21tb24oU01nclJlbGF0 aW9uIHNtZ3IsIGNoYXIgcmVscGVyc2lzdGVuY2UsIEZvcmtOdW1iZXIgZm9ya051bSwKK1JlYWRC dWZmZXJfY29tbW9uKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBjaGFyIHJlbHBlcnNpc3RlbmNlLAog CQkJCSAgQmxvY2tOdW1iZXIgYmxvY2tOdW0sIFJlYWRCdWZmZXJNb2RlIG1vZGUsCiAJCQkJICBC dWZmZXJBY2Nlc3NTdHJhdGVneSBzdHJhdGVneSwgYm9vbCAqaGl0KQogewpAQCAtODI0LDcgKzgz Miw3IEBAIFJlYWRCdWZmZXJfY29tbW9uKFNNZ3JSZWxhdGlvbiBzbWdyLCBjaGFyIHJlbHBlcnNp c3RlbmNlLCBGb3JrTnVtYmVyIGZvcmtOdW0sCiAJQmxvY2sJCWJ1ZkJsb2NrOwogCWJvb2wJCWZv dW5kOwogCWJvb2wJCWlzRXh0ZW5kOwotCWJvb2wJCWlzTG9jYWxCdWYgPSBTbWdySXNUZW1wKHNt Z3IpOworCWJvb2wJCWlzTG9jYWxCdWYgPSBTbWdySXNUZW1wKHNmaWxlKTsKIAogCSpoaXQgPSBm YWxzZTsKIApAQCAtODMzLDI5ICs4NDEsMzAgQEAgUmVhZEJ1ZmZlcl9jb21tb24oU01nclJlbGF0 aW9uIHNtZ3IsIGNoYXIgcmVscGVyc2lzdGVuY2UsIEZvcmtOdW1iZXIgZm9ya051bSwKIAogCWlz RXh0ZW5kID0gKGJsb2NrTnVtID09IFBfTkVXKTsKIAotCVRSQUNFX1BPU1RHUkVTUUxfQlVGRkVS X1JFQURfU1RBUlQoZm9ya051bSwgYmxvY2tOdW0sCi0JCQkJCQkJCQkgICBzbWdyLT5zbWdyX3Js b2NhdG9yLmxvY2F0b3Iuc3BjT2lkLAotCQkJCQkJCQkJICAgc21nci0+c21ncl9ybG9jYXRvci5s b2NhdG9yLmRiT2lkLAotCQkJCQkJCQkJICAgc21nci0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnJl bE51bWJlciwKLQkJCQkJCQkJCSAgIHNtZ3ItPnNtZ3JfcmxvY2F0b3IuYmFja2VuZCwKKwlUUkFD RV9QT1NUR1JFU1FMX0JVRkZFUl9SRUFEX1NUQVJUKHNtZ3ItPnNtZ3JfbG9jYXRvci5mb3JrbnVt LAorCQkJCQkJCQkJICAgYmxvY2tOdW0sCisJCQkJCQkJCQkgICBzbWdyLT5zbWdyX2xvY2F0b3Iu bG9jYXRvci5zcGNPaWQsCisJCQkJCQkJCQkgICBzbWdyLT5zbWdyX2xvY2F0b3IubG9jYXRvci5k Yk9pZCwKKwkJCQkJCQkJCSAgIHNtZ3ItPnNtZ3JfbG9jYXRvci5sb2NhdG9yLnJlbE51bWJlciwK KwkJCQkJCQkJCSAgIHNtZ3ItPnNtZ3JfbG9jYXRvci5iYWNrZW5kLAogCQkJCQkJCQkJICAgaXNF eHRlbmQpOwogCiAJLyogU3Vic3RpdHV0ZSBwcm9wZXIgYmxvY2sgbnVtYmVyIGlmIGNhbGxlciBh c2tlZCBmb3IgUF9ORVcgKi8KIAlpZiAoaXNFeHRlbmQpCiAJewotCQlibG9ja051bSA9IHNtZ3Ju YmxvY2tzKHNtZ3IsIGZvcmtOdW0pOworCQlibG9ja051bSA9IHNtZ3JuYmxvY2tzKHNmaWxlKTsK IAkJLyogRmFpbCBpZiByZWxhdGlvbiBpcyBhbHJlYWR5IGF0IG1heGltdW0gcG9zc2libGUgbGVu Z3RoICovCiAJCWlmIChibG9ja051bSA9PSBQX05FVykKIAkJCWVyZXBvcnQoRVJST1IsCiAJCQkJ CShlcnJjb2RlKEVSUkNPREVfUFJPR1JBTV9MSU1JVF9FWENFRURFRCksCiAJCQkJCSBlcnJtc2co ImNhbm5vdCBleHRlbmQgcmVsYXRpb24gJXMgYmV5b25kICV1IGJsb2NrcyIsCi0JCQkJCQkJcmVs cGF0aChzbWdyLT5zbWdyX3Jsb2NhdG9yLCBmb3JrTnVtKSwKKwkJCQkJCQlzbWdyZmlsZXBhdGgo c2ZpbGUtPnNtZ3JfbG9jYXRvciksCiAJCQkJCQkJUF9ORVcpKSk7CiAJfQogCiAJaWYgKGlzTG9j YWxCdWYpCiAJewotCQlidWZIZHIgPSBMb2NhbEJ1ZmZlckFsbG9jKHNtZ3IsIGZvcmtOdW0sIGJs b2NrTnVtLCAmZm91bmQpOworCQlidWZIZHIgPSBMb2NhbEJ1ZmZlckFsbG9jKHNmaWxlLCBibG9j a051bSwgJmZvdW5kKTsKIAkJaWYgKGZvdW5kKQogCQkJcGdCdWZmZXJVc2FnZS5sb2NhbF9ibGtz X2hpdCsrOwogCQllbHNlIGlmIChpc0V4dGVuZCkKQEAgLTg3MCw3ICs4NzksNyBAQCBSZWFkQnVm ZmVyX2NvbW1vbihTTWdyUmVsYXRpb24gc21nciwgY2hhciByZWxwZXJzaXN0ZW5jZSwgRm9ya051 bWJlciBmb3JrTnVtLAogCQkgKiBsb29rdXAgdGhlIGJ1ZmZlci4gIElPX0lOX1BST0dSRVNTIGlz IHNldCBpZiB0aGUgcmVxdWVzdGVkIGJsb2NrIGlzCiAJCSAqIG5vdCBjdXJyZW50bHkgaW4gbWVt b3J5LgogCQkgKi8KLQkJYnVmSGRyID0gQnVmZmVyQWxsb2Moc21nciwgcmVscGVyc2lzdGVuY2Us IGZvcmtOdW0sIGJsb2NrTnVtLAorCQlidWZIZHIgPSBCdWZmZXJBbGxvYyhzZmlsZSwgcmVscGVy c2lzdGVuY2UsIGJsb2NrTnVtLAogCQkJCQkJCSBzdHJhdGVneSwgJmZvdW5kKTsKIAkJaWYgKGZv dW5kKQogCQkJcGdCdWZmZXJVc2FnZS5zaGFyZWRfYmxrc19oaXQrKzsKQEAgLTg5NSwxMSArOTA0 LDEyIEBAIFJlYWRCdWZmZXJfY29tbW9uKFNNZ3JSZWxhdGlvbiBzbWdyLCBjaGFyIHJlbHBlcnNp c3RlbmNlLCBGb3JrTnVtYmVyIGZvcmtOdW0sCiAJCQlpZiAoVmFjdXVtQ29zdEFjdGl2ZSkKIAkJ CQlWYWN1dW1Db3N0QmFsYW5jZSArPSBWYWN1dW1Db3N0UGFnZUhpdDsKIAotCQkJVFJBQ0VfUE9T VEdSRVNRTF9CVUZGRVJfUkVBRF9ET05FKGZvcmtOdW0sIGJsb2NrTnVtLAotCQkJCQkJCQkJCQkg IHNtZ3ItPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5zcGNPaWQsCi0JCQkJCQkJCQkJCSAgc21nci0+ c21ncl9ybG9jYXRvci5sb2NhdG9yLmRiT2lkLAotCQkJCQkJCQkJCQkgIHNtZ3ItPnNtZ3Jfcmxv Y2F0b3IubG9jYXRvci5yZWxOdW1iZXIsCi0JCQkJCQkJCQkJCSAgc21nci0+c21ncl9ybG9jYXRv ci5iYWNrZW5kLAorCQkJVFJBQ0VfUE9TVEdSRVNRTF9CVUZGRVJfUkVBRF9ET05FKHNmaWxlLT5z bWdyX2ZvcmtudW0sCisJCQkJCQkJCQkJCSAgYmxvY2tOdW0sCisJCQkJCQkJCQkJCSAgc2ZpbGUt PnNtZ3JfcmxvY2F0b3IubG9jYXRvci5zcGNPaWQsCisJCQkJCQkJCQkJCSAgc2ZpbGUtPnNtZ3Jf cmxvY2F0b3IubG9jYXRvci5kYk9pZCwKKwkJCQkJCQkJCQkJICBzZmlsZS0+c21ncl9ybG9jYXRv ci5sb2NhdG9yLnJlbE51bWJlciwKKwkJCQkJCQkJCQkJICBzZmlsZS0+c21ncl9ybG9jYXRvci5i YWNrZW5kLAogCQkJCQkJCQkJCQkgIGlzRXh0ZW5kLAogCQkJCQkJCQkJCQkgIGZvdW5kKTsKIApA QCAtOTM2LDcgKzk0Niw3IEBAIFJlYWRCdWZmZXJfY29tbW9uKFNNZ3JSZWxhdGlvbiBzbWdyLCBj aGFyIHJlbHBlcnNpc3RlbmNlLCBGb3JrTnVtYmVyIGZvcmtOdW0sCiAJCWlmICghUGFnZUlzTmV3 KChQYWdlKSBidWZCbG9jaykpCiAJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkoZXJybXNnKCJ1bmV4 cGVjdGVkIGRhdGEgYmV5b25kIEVPRiBpbiBibG9jayAldSBvZiByZWxhdGlvbiAlcyIsCi0JCQkJ CQkJYmxvY2tOdW0sIHJlbHBhdGgoc21nci0+c21ncl9ybG9jYXRvciwgZm9ya051bSkpLAorCQkJ CQkJCWJsb2NrTnVtLCBzbWdyZmlsZXBhdGgoc2ZpbGUtPnNtZ3JfbG9jYXRvcikpLAogCQkJCQkg ZXJyaGludCgiVGhpcyBoYXMgYmVlbiBzZWVuIHRvIG9jY3VyIHdpdGggYnVnZ3kga2VybmVsczsg Y29uc2lkZXIgdXBkYXRpbmcgeW91ciBzeXN0ZW0uIikpKTsKIAogCQkvKgpAQCAtOTkzLDcgKzEw MDMsNyBAQCBSZWFkQnVmZmVyX2NvbW1vbihTTWdyUmVsYXRpb24gc21nciwgY2hhciByZWxwZXJz aXN0ZW5jZSwgRm9ya051bWJlciBmb3JrTnVtLAogCQkvKiBuZXcgYnVmZmVycyBhcmUgemVyby1m aWxsZWQgKi8KIAkJTWVtU2V0KChjaGFyICopIGJ1ZkJsb2NrLCAwLCBCTENLU1opOwogCQkvKiBk b24ndCBzZXQgY2hlY2tzdW0gZm9yIGFsbC16ZXJvIHBhZ2UgKi8KLQkJc21ncmV4dGVuZChzbWdy LCBmb3JrTnVtLCBibG9ja051bSwgKGNoYXIgKikgYnVmQmxvY2ssIGZhbHNlKTsKKwkJc21ncmV4 dGVuZChzZmlsZSwgYmxvY2tOdW0sIChjaGFyICopIGJ1ZkJsb2NrLCBmYWxzZSk7CiAKIAkJLyoK IAkJICogTkI6IHdlJ3JlICpub3QqIGRvaW5nIGEgU2NoZWR1bGVCdWZmZXJUYWdGb3JXcml0ZWJh Y2sgaGVyZTsKQEAgLTEwMTgsNyArMTAyOCw3IEBAIFJlYWRCdWZmZXJfY29tbW9uKFNNZ3JSZWxh dGlvbiBzbWdyLCBjaGFyIHJlbHBlcnNpc3RlbmNlLCBGb3JrTnVtYmVyIGZvcmtOdW0sCiAJCQlp ZiAodHJhY2tfaW9fdGltaW5nKQogCQkJCUlOU1RSX1RJTUVfU0VUX0NVUlJFTlQoaW9fc3RhcnQp OwogCi0JCQlzbWdycmVhZChzbWdyLCBmb3JrTnVtLCBibG9ja051bSwgKGNoYXIgKikgYnVmQmxv Y2spOworCQkJc21ncnJlYWQoc2ZpbGUsIGJsb2NrTnVtLCAoY2hhciAqKSBidWZCbG9jayk7CiAK IAkJCWlmICh0cmFja19pb190aW1pbmcpCiAJCQl7CkBAIC0xMDI5LDcgKzEwMzksOCBAQCBSZWFk QnVmZmVyX2NvbW1vbihTTWdyUmVsYXRpb24gc21nciwgY2hhciByZWxwZXJzaXN0ZW5jZSwgRm9y a051bWJlciBmb3JrTnVtLAogCQkJfQogCiAJCQkvKiBjaGVjayBmb3IgZ2FyYmFnZSBkYXRhICov Ci0JCQlpZiAoIVBhZ2VJc1ZlcmlmaWVkRXh0ZW5kZWQoKFBhZ2UpIGJ1ZkJsb2NrLCBibG9ja051 bSwKKwkJCWlmIChCdWZmZXJIYXNTdGFuZGFyZFBhZ2UoYnVmSGRyKSAmJgorCQkJCSFQYWdlSXNW ZXJpZmllZEV4dGVuZGVkKChQYWdlKSBidWZCbG9jaywgYmxvY2tOdW0sCiAJCQkJCQkJCQkJUElW X0xPR19XQVJOSU5HIHwgUElWX1JFUE9SVF9TVEFUKSkKIAkJCXsKIAkJCQlpZiAobW9kZSA9PSBS Qk1fWkVST19PTl9FUlJPUiB8fCB6ZXJvX2RhbWFnZWRfcGFnZXMpCkBAIC0xMDM4LDcgKzEwNDks NyBAQCBSZWFkQnVmZmVyX2NvbW1vbihTTWdyUmVsYXRpb24gc21nciwgY2hhciByZWxwZXJzaXN0 ZW5jZSwgRm9ya051bWJlciBmb3JrTnVtLAogCQkJCQkJCShlcnJjb2RlKEVSUkNPREVfREFUQV9D T1JSVVBURUQpLAogCQkJCQkJCSBlcnJtc2coImludmFsaWQgcGFnZSBpbiBibG9jayAldSBvZiBy ZWxhdGlvbiAlczsgemVyb2luZyBvdXQgcGFnZSIsCiAJCQkJCQkJCQlibG9ja051bSwKLQkJCQkJ CQkJCXJlbHBhdGgoc21nci0+c21ncl9ybG9jYXRvciwgZm9ya051bSkpKSk7CisJCQkJCQkJCQlz bWdyZmlsZXBhdGgoc2ZpbGUtPnNtZ3JfbG9jYXRvcikpKSk7CiAJCQkJCU1lbVNldCgoY2hhciAq KSBidWZCbG9jaywgMCwgQkxDS1NaKTsKIAkJCQl9CiAJCQkJZWxzZQpAQCAtMTA0Niw3ICsxMDU3 LDcgQEAgUmVhZEJ1ZmZlcl9jb21tb24oU01nclJlbGF0aW9uIHNtZ3IsIGNoYXIgcmVscGVyc2lz dGVuY2UsIEZvcmtOdW1iZXIgZm9ya051bSwKIAkJCQkJCQkoZXJyY29kZShFUlJDT0RFX0RBVEFf Q09SUlVQVEVEKSwKIAkJCQkJCQkgZXJybXNnKCJpbnZhbGlkIHBhZ2UgaW4gYmxvY2sgJXUgb2Yg cmVsYXRpb24gJXMiLAogCQkJCQkJCQkJYmxvY2tOdW0sCi0JCQkJCQkJCQlyZWxwYXRoKHNtZ3It PnNtZ3JfcmxvY2F0b3IsIGZvcmtOdW0pKSkpOworCQkJCQkJCQkJc21ncmZpbGVwYXRoKHNmaWxl LT5zbWdyX2xvY2F0b3IpKSkpOwogCQkJfQogCQl9CiAJfQpAQCAtMTA4NSwxMSArMTA5NiwxMiBA QCBSZWFkQnVmZmVyX2NvbW1vbihTTWdyUmVsYXRpb24gc21nciwgY2hhciByZWxwZXJzaXN0ZW5j ZSwgRm9ya051bWJlciBmb3JrTnVtLAogCWlmIChWYWN1dW1Db3N0QWN0aXZlKQogCQlWYWN1dW1D b3N0QmFsYW5jZSArPSBWYWN1dW1Db3N0UGFnZU1pc3M7CiAKLQlUUkFDRV9QT1NUR1JFU1FMX0JV RkZFUl9SRUFEX0RPTkUoZm9ya051bSwgYmxvY2tOdW0sCi0JCQkJCQkJCQkgIHNtZ3ItPnNtZ3Jf cmxvY2F0b3IubG9jYXRvci5zcGNPaWQsCi0JCQkJCQkJCQkgIHNtZ3ItPnNtZ3JfcmxvY2F0b3Iu bG9jYXRvci5kYk9pZCwKLQkJCQkJCQkJCSAgc21nci0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnJl bE51bWJlciwKLQkJCQkJCQkJCSAgc21nci0+c21ncl9ybG9jYXRvci5iYWNrZW5kLAorCVRSQUNF X1BPU1RHUkVTUUxfQlVGRkVSX1JFQURfRE9ORShzZmlsZS0+c21ncl9sb2NhdG9yLmZvcmtudW0s CisJCQkJCQkJCQkgIGJsb2NrTnVtLAorCQkJCQkJCQkJICBzZmlsZS0+c21ncl9sb2NhdG9yLmxv Y2F0b3Iuc3BjT2lkLAorCQkJCQkJCQkJICBzZmlsZS0+c21ncl9sb2NhdG9yLmxvY2F0b3IuZGJP aWQsCisJCQkJCQkJCQkgIHNmaWxlLT5zbWdyX2xvY2F0b3IubG9jYXRvci5yZWxOdW1iZXIsCisJ CQkJCQkJCQkgIHNmaWxlLT5zbWdyX2xvY2F0b3IuYmFja2VuZCwKIAkJCQkJCQkJCSAgaXNFeHRl bmQsCiAJCQkJCQkJCQkgIGZvdW5kKTsKIApAQCAtMTExNiw3ICsxMTI4LDcgQEAgUmVhZEJ1ZmZl cl9jb21tb24oU01nclJlbGF0aW9uIHNtZ3IsIGNoYXIgcmVscGVyc2lzdGVuY2UsIEZvcmtOdW1i ZXIgZm9ya051bSwKICAqIE5vIGxvY2tzIGFyZSBoZWxkIGVpdGhlciBhdCBlbnRyeSBvciBleGl0 LgogICovCiBzdGF0aWMgQnVmZmVyRGVzYyAqCi1CdWZmZXJBbGxvYyhTTWdyUmVsYXRpb24gc21n ciwgY2hhciByZWxwZXJzaXN0ZW5jZSwgRm9ya051bWJlciBmb3JrTnVtLAorQnVmZmVyQWxsb2Mo U01nckZpbGVIYW5kbGUgc2ZpbGUsIGNoYXIgcmVscGVyc2lzdGVuY2UsCiAJCQlCbG9ja051bWJl ciBibG9ja051bSwKIAkJCUJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LAogCQkJYm9vbCAq Zm91bmRQdHIpCkBAIC0xMTM0LDcgKzExNDYsNyBAQCBCdWZmZXJBbGxvYyhTTWdyUmVsYXRpb24g c21nciwgY2hhciByZWxwZXJzaXN0ZW5jZSwgRm9ya051bWJlciBmb3JrTnVtLAogCXVpbnQzMgkJ YnVmX3N0YXRlOwogCiAJLyogY3JlYXRlIGEgdGFnIHNvIHdlIGNhbiBsb29rdXAgdGhlIGJ1ZmZl ciAqLwotCUluaXRCdWZmZXJUYWcoJm5ld1RhZywgJnNtZ3ItPnNtZ3JfcmxvY2F0b3IubG9jYXRv ciwgZm9ya051bSwgYmxvY2tOdW0pOworCUluaXRCdWZmZXJUYWcoJm5ld1RhZywgJnNmaWxlLT5z bWdyX2xvY2F0b3IubG9jYXRvciwgc2ZpbGUtPnNtZ3JfbG9jYXRvci5mb3JrbnVtLCBibG9ja051 bSk7CiAKIAkvKiBkZXRlcm1pbmUgaXRzIGhhc2ggY29kZSBhbmQgcGFydGl0aW9uIGxvY2sgSUQg Ki8KIAluZXdIYXNoID0gQnVmVGFibGVIYXNoQ29kZSgmbmV3VGFnKTsKQEAgLTEyNjQsMTAgKzEy NzYsMTEgQEAgQnVmZmVyQWxsb2MoU01nclJlbGF0aW9uIHNtZ3IsIGNoYXIgcmVscGVyc2lzdGVu Y2UsIEZvcmtOdW1iZXIgZm9ya051bSwKIAkJCQl9CiAKIAkJCQkvKiBPSywgZG8gdGhlIEkvTyAq LwotCQkJCVRSQUNFX1BPU1RHUkVTUUxfQlVGRkVSX1dSSVRFX0RJUlRZX1NUQVJUKGZvcmtOdW0s IGJsb2NrTnVtLAotCQkJCQkJCQkJCQkJCQkgIHNtZ3ItPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5z cGNPaWQsCi0JCQkJCQkJCQkJCQkJCSAgc21nci0+c21ncl9ybG9jYXRvci5sb2NhdG9yLmRiT2lk LAotCQkJCQkJCQkJCQkJCQkgIHNtZ3ItPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5yZWxOdW1iZXIp OworCQkJCVRSQUNFX1BPU1RHUkVTUUxfQlVGRkVSX1dSSVRFX0RJUlRZX1NUQVJUKHNmaWxlLT5z bWdyX2xvY2F0b3IuZm9ya251bSwKKwkJCQkJCQkJCQkJCQkJICBibG9ja051bSwKKwkJCQkJCQkJ CQkJCQkJICBzZmlsZS0+c21ncl9sb2NhdG9yLmxvY2F0b3Iuc3BjT2lkLAorCQkJCQkJCQkJCQkJ CQkgIHNmaWxlLT5zbWdyX2xvY2F0b3IubG9jYXRvci5kYk9pZCwKKwkJCQkJCQkJCQkJCQkJICBz ZmlsZS0+c21ncl9sb2NhdG9yLmxvY2F0b3IucmVsTnVtYmVyKTsKIAogCQkJCUZsdXNoQnVmZmVy KGJ1ZiwgTlVMTCk7CiAJCQkJTFdMb2NrUmVsZWFzZShCdWZmZXJEZXNjcmlwdG9yR2V0Q29udGVu dExvY2soYnVmKSk7CkBAIC0xMjc1LDEwICsxMjg4LDExIEBAIEJ1ZmZlckFsbG9jKFNNZ3JSZWxh dGlvbiBzbWdyLCBjaGFyIHJlbHBlcnNpc3RlbmNlLCBGb3JrTnVtYmVyIGZvcmtOdW0sCiAJCQkJ U2NoZWR1bGVCdWZmZXJUYWdGb3JXcml0ZWJhY2soJkJhY2tlbmRXcml0ZWJhY2tDb250ZXh0LAog CQkJCQkJCQkJCQkgICZidWYtPnRhZyk7CiAKLQkJCQlUUkFDRV9QT1NUR1JFU1FMX0JVRkZFUl9X UklURV9ESVJUWV9ET05FKGZvcmtOdW0sIGJsb2NrTnVtLAotCQkJCQkJCQkJCQkJCQkgc21nci0+ c21ncl9ybG9jYXRvci5sb2NhdG9yLnNwY09pZCwKLQkJCQkJCQkJCQkJCQkJIHNtZ3ItPnNtZ3Jf cmxvY2F0b3IubG9jYXRvci5kYk9pZCwKLQkJCQkJCQkJCQkJCQkJIHNtZ3ItPnNtZ3JfcmxvY2F0 b3IubG9jYXRvci5yZWxOdW1iZXIpOworCQkJCVRSQUNFX1BPU1RHUkVTUUxfQlVGRkVSX1dSSVRF X0RJUlRZX0RPTkUoc2ZpbGUtPnNtZ3JfbG9jYXRvci5mb3JrbnVtLAorCQkJCQkJCQkJCQkJCQkg YmxvY2tOdW0sCisJCQkJCQkJCQkJCQkJCSBzZmlsZS0+c21ncl9sb2NhdG9yLmxvY2F0b3Iuc3Bj T2lkLAorCQkJCQkJCQkJCQkJCQkgc2ZpbGUtPnNtZ3JfbG9jYXRvci5sb2NhdG9yLmRiT2lkLAor CQkJCQkJCQkJCQkJCQkgc2ZpbGUtPnNtZ3JfbG9jYXRvci5sb2NhdG9yLnJlbE51bWJlcik7CiAJ CQl9CiAJCQllbHNlCiAJCQl7CkBAIC0xNDM0LDcgKzE0NDgsNyBAQCBCdWZmZXJBbGxvYyhTTWdy UmVsYXRpb24gc21nciwgY2hhciByZWxwZXJzaXN0ZW5jZSwgRm9ya051bWJlciBmb3JrTnVtLAog CWJ1Zl9zdGF0ZSAmPSB+KEJNX1ZBTElEIHwgQk1fRElSVFkgfCBCTV9KVVNUX0RJUlRJRUQgfAog CQkJCSAgIEJNX0NIRUNLUE9JTlRfTkVFREVEIHwgQk1fSU9fRVJST1IgfCBCTV9QRVJNQU5FTlQg fAogCQkJCSAgIEJVRl9VU0FHRUNPVU5UX01BU0spOwotCWlmIChyZWxwZXJzaXN0ZW5jZSA9PSBS RUxQRVJTSVNURU5DRV9QRVJNQU5FTlQgfHwgZm9ya051bSA9PSBJTklUX0ZPUktOVU0pCisJaWYg KHJlbHBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1BFUk1BTkVOVCB8fCBzZmlsZS0+c21n cl9sb2NhdG9yLmZvcmtudW0gPT0gSU5JVF9GT1JLTlVNKQogCQlidWZfc3RhdGUgfD0gQk1fVEFH X1ZBTElEIHwgQk1fUEVSTUFORU5UIHwgQlVGX1VTQUdFQ09VTlRfT05FOwogCWVsc2UKIAkJYnVm X3N0YXRlIHw9IEJNX1RBR19WQUxJRCB8IEJVRl9VU0FHRUNPVU5UX09ORTsKQEAgLTE0NTAsNiAr MTQ2NCw5IEBAIEJ1ZmZlckFsbG9jKFNNZ3JSZWxhdGlvbiBzbWdyLCBjaGFyIHJlbHBlcnNpc3Rl bmNlLCBGb3JrTnVtYmVyIGZvcmtOdW0sCiAKIAlMV0xvY2tSZWxlYXNlKG5ld1BhcnRpdGlvbkxv Y2spOwogCisJaWYgKEJ1ZmZlckhhc0V4dGVybmFsTFNOKGJ1ZikpCisJCUJ1ZmZlclNldEV4dGVy bmFsTFNOKGJ1ZiwgSW52YWxpZFhMb2dSZWNQdHIpOworCiAJLyoKIAkgKiBCdWZmZXIgY29udGVu dHMgYXJlIGN1cnJlbnRseSBpbnZhbGlkLiAgVHJ5IHRvIG9idGFpbiB0aGUgcmlnaHQgdG8KIAkg KiBzdGFydCBJL08uICBJZiBTdGFydEJ1ZmZlcklPIHJldHVybnMgZmFsc2UsIHRoZW4gc29tZW9u ZSBlbHNlIG1hbmFnZWQKQEAgLTE2NDcsNyArMTY2NCw3IEBAIFJlbGVhc2VBbmRSZWFkQnVmZmVy KEJ1ZmZlciBidWZmZXIsCiAJCQkJCSBSZWxhdGlvbiByZWxhdGlvbiwKIAkJCQkJIEJsb2NrTnVt YmVyIGJsb2NrTnVtKQogewotCUZvcmtOdW1iZXIJZm9ya051bSA9IE1BSU5fRk9SS05VTTsKKwlG b3JrTnVtYmVyCWZvcmtudW0gPSBNQUlOX0ZPUktOVU07CiAJQnVmZmVyRGVzYyAqYnVmSGRyOwog CiAJaWYgKEJ1ZmZlcklzVmFsaWQoYnVmZmVyKSkKQEAgLTE2NTgsNyArMTY3NSw3IEBAIFJlbGVh c2VBbmRSZWFkQnVmZmVyKEJ1ZmZlciBidWZmZXIsCiAJCQlidWZIZHIgPSBHZXRMb2NhbEJ1ZmZl ckRlc2NyaXB0b3IoLWJ1ZmZlciAtIDEpOwogCQkJaWYgKGJ1Zkhkci0+dGFnLmJsb2NrTnVtID09 IGJsb2NrTnVtICYmCiAJCQkJQnVmVGFnTWF0Y2hlc1JlbEZpbGVMb2NhdG9yKCZidWZIZHItPnRh ZywgJnJlbGF0aW9uLT5yZF9sb2NhdG9yKSAmJgotCQkJCUJ1ZlRhZ0dldEZvcmtOdW0oJmJ1Zkhk ci0+dGFnKSA9PSBmb3JrTnVtKQorCQkJCUJ1ZlRhZ0dldEZvcmtOdW0oJmJ1Zkhkci0+dGFnKSA9 PSBmb3JrbnVtKQogCQkJCXJldHVybiBidWZmZXI7CiAJCQlSZXNvdXJjZU93bmVyRm9yZ2V0QnVm ZmVyKEN1cnJlbnRSZXNvdXJjZU93bmVyLCBidWZmZXIpOwogCQkJTG9jYWxSZWZDb3VudFstYnVm ZmVyIC0gMV0tLTsKQEAgLTE2NjksNyArMTY4Niw3IEBAIFJlbGVhc2VBbmRSZWFkQnVmZmVyKEJ1 ZmZlciBidWZmZXIsCiAJCQkvKiB3ZSBoYXZlIHBpbiwgc28gaXQncyBvayB0byBleGFtaW5lIHRh ZyB3aXRob3V0IHNwaW5sb2NrICovCiAJCQlpZiAoYnVmSGRyLT50YWcuYmxvY2tOdW0gPT0gYmxv Y2tOdW0gJiYKIAkJCQlCdWZUYWdNYXRjaGVzUmVsRmlsZUxvY2F0b3IoJmJ1Zkhkci0+dGFnLCAm cmVsYXRpb24tPnJkX2xvY2F0b3IpICYmCi0JCQkJQnVmVGFnR2V0Rm9ya051bSgmYnVmSGRyLT50 YWcpID09IGZvcmtOdW0pCisJCQkJQnVmVGFnR2V0Rm9ya051bSgmYnVmSGRyLT50YWcpID09IGZv cmtudW0pCiAJCQkJcmV0dXJuIGJ1ZmZlcjsKIAkJCVVucGluQnVmZmVyKGJ1Zkhkcik7CiAJCX0K QEAgLTI4MjAsNyArMjgzNyw3IEBAIEJ1ZmZlckdldFRhZyhCdWZmZXIgYnVmZmVyLCBSZWxGaWxl TG9jYXRvciAqcmxvY2F0b3IsIEZvcmtOdW1iZXIgKmZvcmtudW0sCiAgKiBhcyB0aGUgc2Vjb25k IHBhcmFtZXRlci4gIElmIG5vdCwgcGFzcyBOVUxMLgogICovCiBzdGF0aWMgdm9pZAotRmx1c2hC dWZmZXIoQnVmZmVyRGVzYyAqYnVmLCBTTWdyUmVsYXRpb24gcmVsbikKK0ZsdXNoQnVmZmVyKEJ1 ZmZlckRlc2MgKmJ1ZiwgU01nckZpbGVIYW5kbGUgc2ZpbGUpCiB7CiAJWExvZ1JlY1B0cglyZWNw dHI7CiAJRXJyb3JDb250ZXh0Q2FsbGJhY2sgZXJyY2FsbGJhY2s7CkBAIC0yODQ1LDE0ICsyODYy LDE0IEBAIEZsdXNoQnVmZmVyKEJ1ZmZlckRlc2MgKmJ1ZiwgU01nclJlbGF0aW9uIHJlbG4pCiAJ ZXJyb3JfY29udGV4dF9zdGFjayA9ICZlcnJjYWxsYmFjazsKIAogCS8qIEZpbmQgc21nciByZWxh dGlvbiBmb3IgYnVmZmVyICovCi0JaWYgKHJlbG4gPT0gTlVMTCkKLQkJcmVsbiA9IHNtZ3JvcGVu KEJ1ZlRhZ0dldFJlbEZpbGVMb2NhdG9yKCZidWYtPnRhZyksIEludmFsaWRCYWNrZW5kSWQpOwor CWlmIChzZmlsZSA9PSBOVUxMKQorCQlzZmlsZSA9IHNtZ3JvcGVuKEJ1ZlRhZ0dldFJlbEZpbGVM b2NhdG9yKCZidWYtPnRhZyksIEludmFsaWRCYWNrZW5kSWQsIEJ1ZlRhZ0dldEZvcmtOdW0oJmJ1 Zi0+dGFnKSk7CiAKLQlUUkFDRV9QT1NUR1JFU1FMX0JVRkZFUl9GTFVTSF9TVEFSVChCdWZUYWdH ZXRGb3JrTnVtKCZidWYtPnRhZyksCisJVFJBQ0VfUE9TVEdSRVNRTF9CVUZGRVJfRkxVU0hfU1RB UlQoc2ZpbGUtPnNtZ3JfbG9jYXRvci5mb3JrbnVtLAogCQkJCQkJCQkJCWJ1Zi0+dGFnLmJsb2Nr TnVtLAotCQkJCQkJCQkJCXJlbG4tPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5zcGNPaWQsCi0JCQkJ CQkJCQkJcmVsbi0+c21ncl9ybG9jYXRvci5sb2NhdG9yLmRiT2lkLAotCQkJCQkJCQkJCXJlbG4t PnNtZ3JfcmxvY2F0b3IubG9jYXRvci5yZWxOdW1iZXIpOworCQkJCQkJCQkJCXNmaWxlLT5zbWdy X2xvY2F0b3IubG9jYXRvci5zcGNPaWQsCisJCQkJCQkJCQkJc2ZpbGUtPnNtZ3JfbG9jYXRvci5s b2NhdG9yLmRiT2lkLAorCQkJCQkJCQkJCXNmaWxlLT5zbWdyX2xvY2F0b3IubG9jYXRvci5yZWxO dW1iZXIpOwogCiAJYnVmX3N0YXRlID0gTG9ja0J1ZkhkcihidWYpOwogCkBAIC0yOTA2LDggKzI5 MjMsNyBAQCBGbHVzaEJ1ZmZlcihCdWZmZXJEZXNjICpidWYsIFNNZ3JSZWxhdGlvbiByZWxuKQog CS8qCiAJICogYnVmVG9Xcml0ZSBpcyBlaXRoZXIgdGhlIHNoYXJlZCBidWZmZXIgb3IgYSBjb3B5 LCBhcyBhcHByb3ByaWF0ZS4KIAkgKi8KLQlzbWdyd3JpdGUocmVsbiwKLQkJCSAgQnVmVGFnR2V0 Rm9ya051bSgmYnVmLT50YWcpLAorCXNtZ3J3cml0ZShzZmlsZSwKIAkJCSAgYnVmLT50YWcuYmxv Y2tOdW0sCiAJCQkgIGJ1ZlRvV3JpdGUsCiAJCQkgIGZhbHNlKTsKQEAgLTI5MjgsMTEgKzI5NDQs MTEgQEAgRmx1c2hCdWZmZXIoQnVmZmVyRGVzYyAqYnVmLCBTTWdyUmVsYXRpb24gcmVsbikKIAkg Ki8KIAlUZXJtaW5hdGVCdWZmZXJJTyhidWYsIHRydWUsIDApOwogCi0JVFJBQ0VfUE9TVEdSRVNR TF9CVUZGRVJfRkxVU0hfRE9ORShCdWZUYWdHZXRGb3JrTnVtKCZidWYtPnRhZyksCisJVFJBQ0Vf UE9TVEdSRVNRTF9CVUZGRVJfRkxVU0hfRE9ORShzZmlsZS0+c21ncl9sb2NhdG9yLmZvcmtudW0s CiAJCQkJCQkJCQkgICBidWYtPnRhZy5ibG9ja051bSwKLQkJCQkJCQkJCSAgIHJlbG4tPnNtZ3Jf cmxvY2F0b3IubG9jYXRvci5zcGNPaWQsCi0JCQkJCQkJCQkgICByZWxuLT5zbWdyX3Jsb2NhdG9y LmxvY2F0b3IuZGJPaWQsCi0JCQkJCQkJCQkgICByZWxuLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3Iu cmVsTnVtYmVyKTsKKwkJCQkJCQkJCSAgIHNmaWxlLT5zbWdyX2xvY2F0b3IubG9jYXRvci5zcGNP aWQsCisJCQkJCQkJCQkgICBzZmlsZS0+c21ncl9sb2NhdG9yLmxvY2F0b3IuZGJPaWQsCisJCQkJ CQkJCQkgICBzZmlsZS0+c21ncl9sb2NhdG9yLmxvY2F0b3IucmVsTnVtYmVyKTsKIAogCS8qIFBv cCB0aGUgZXJyb3IgY29udGV4dCBzdGFjayAqLwogCWVycm9yX2NvbnRleHRfc3RhY2sgPSBlcnJj YWxsYmFjay5wcmV2aW91czsKQEAgLTI5NDcsNyArMjk2Myw3IEBAIEZsdXNoQnVmZmVyKEJ1ZmZl ckRlc2MgKmJ1ZiwgU01nclJlbGF0aW9uIHJlbG4pCiAgKiBpdCBtaWdodCBub3QgYmUuCiAgKi8K IEJsb2NrTnVtYmVyCi1SZWxhdGlvbkdldE51bWJlck9mQmxvY2tzSW5Gb3JrKFJlbGF0aW9uIHJl bGF0aW9uLCBGb3JrTnVtYmVyIGZvcmtOdW0pCitSZWxhdGlvbkdldE51bWJlck9mQmxvY2tzSW5G b3JrKFJlbGF0aW9uIHJlbGF0aW9uLCBGb3JrTnVtYmVyIGZvcmtudW0pCiB7CiAJaWYgKFJFTEtJ TkRfSEFTX1RBQkxFX0FNKHJlbGF0aW9uLT5yZF9yZWwtPnJlbGtpbmQpKQogCXsKQEAgLTI5NTks MTMgKzI5NzUsMTMgQEAgUmVsYXRpb25HZXROdW1iZXJPZkJsb2Nrc0luRm9yayhSZWxhdGlvbiBy ZWxhdGlvbiwgRm9ya051bWJlciBmb3JrTnVtKQogCQkgKi8KIAkJdWludDY0CQlzemJ5dGVzOwog Ci0JCXN6Ynl0ZXMgPSB0YWJsZV9yZWxhdGlvbl9zaXplKHJlbGF0aW9uLCBmb3JrTnVtKTsKKwkJ c3pieXRlcyA9IHRhYmxlX3JlbGF0aW9uX3NpemUocmVsYXRpb24sIGZvcmtudW0pOwogCiAJCXJl dHVybiAoc3pieXRlcyArIChCTENLU1ogLSAxKSkgLyBCTENLU1o7CiAJfQogCWVsc2UgaWYgKFJF TEtJTkRfSEFTX1NUT1JBR0UocmVsYXRpb24tPnJkX3JlbC0+cmVsa2luZCkpCiAJewotCQlyZXR1 cm4gc21ncm5ibG9ja3MoUmVsYXRpb25HZXRTbWdyKHJlbGF0aW9uKSwgZm9ya051bSk7CisJCXJl dHVybiBzbWdybmJsb2NrcyhSZWxhdGlvbkdldFNtZ3IocmVsYXRpb24sIGZvcmtudW0pKTsKIAl9 CiAJZWxzZQogCQlBc3NlcnQoZmFsc2UpOwpAQCAtMzAyNyw3ICszMDQzLDEwIEBAIEJ1ZmZlckdl dExTTkF0b21pYyhCdWZmZXIgYnVmZmVyKQogCUFzc2VydChCdWZmZXJJc1Bpbm5lZChidWZmZXIp KTsKIAogCWJ1Zl9zdGF0ZSA9IExvY2tCdWZIZHIoYnVmSGRyKTsKLQlsc24gPSBQYWdlR2V0TFNO KHBhZ2UpOworCWlmIChCdWZmZXJIYXNTdGFuZGFyZFBhZ2UoYnVmSGRyKSkKKwkJbHNuID0gUGFn ZUdldExTTihwYWdlKTsKKwllbHNlCisJCWxzbiA9IEJ1ZmZlckdldEV4dGVybmFsTFNOKGJ1Zkhk cik7CiAJVW5sb2NrQnVmSGRyKGJ1ZkhkciwgYnVmX3N0YXRlKTsKIAogCXJldHVybiBsc247CkBA IC0zMDU1LDI2ICszMDc0LDIwIEBAIEJ1ZmZlckdldExTTkF0b21pYyhCdWZmZXIgYnVmZmVyKQog ICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KICAqLwogdm9pZAotRHJvcFJlbGF0aW9uQnVmZmVycyhTTWdyUmVsYXRp b24gc21ncl9yZWxuLCBGb3JrTnVtYmVyICpmb3JrTnVtLAorRHJvcFJlbGF0aW9uQnVmZmVycyhS ZWxGaWxlTG9jYXRvciBybG9jYXRvciwgQmFja2VuZElkIGJhY2tlbmQsIEZvcmtOdW1iZXIgKmZv cmtudW0sCiAJCQkJCWludCBuZm9ya3MsIEJsb2NrTnVtYmVyICpmaXJzdERlbEJsb2NrKQogewog CWludAkJCWk7CiAJaW50CQkJajsKLQlSZWxGaWxlTG9jYXRvckJhY2tlbmQgcmxvY2F0b3I7CiAJ QmxvY2tOdW1iZXIgbkZvcmtCbG9ja1tNQVhfRk9SS05VTV07CiAJdWludDY0CQluQmxvY2tzVG9J bnZhbGlkYXRlID0gMDsKIAotCXJsb2NhdG9yID0gc21ncl9yZWxuLT5zbWdyX3Jsb2NhdG9yOwot CiAJLyogSWYgaXQncyBhIGxvY2FsIHJlbGF0aW9uLCBpdCdzIGxvY2FsYnVmLmMncyBwcm9ibGVt LiAqLwotCWlmIChSZWxGaWxlTG9jYXRvckJhY2tlbmRJc1RlbXAocmxvY2F0b3IpKQorCWlmIChi YWNrZW5kID09IE15QmFja2VuZElkKQogCXsKLQkJaWYgKHJsb2NhdG9yLmJhY2tlbmQgPT0gTXlC YWNrZW5kSWQpCi0JCXsKLQkJCWZvciAoaiA9IDA7IGogPCBuZm9ya3M7IGorKykKLQkJCQlEcm9w UmVsYXRpb25Mb2NhbEJ1ZmZlcnMocmxvY2F0b3IubG9jYXRvciwgZm9ya051bVtqXSwKLQkJCQkJ CQkJCQkgZmlyc3REZWxCbG9ja1tqXSk7Ci0JCX0KKwkJZm9yIChqID0gMDsgaiA8IG5mb3Jrczsg aisrKQorCQkJRHJvcFJlbGF0aW9uTG9jYWxCdWZmZXJzKHJsb2NhdG9yLCBmb3JrbnVtW2pdLAor CQkJCQkJCQkJIGZpcnN0RGVsQmxvY2tbal0pOwogCQlyZXR1cm47CiAJfQogCkBAIC0zMTAzLDcg KzMxMTYsMTAgQEAgRHJvcFJlbGF0aW9uQnVmZmVycyhTTWdyUmVsYXRpb24gc21ncl9yZWxuLCBG b3JrTnVtYmVyICpmb3JrTnVtLAogCWZvciAoaSA9IDA7IGkgPCBuZm9ya3M7IGkrKykKIAl7CiAJ CS8qIEdldCB0aGUgbnVtYmVyIG9mIGJsb2NrcyBmb3IgYSByZWxhdGlvbidzIGZvcmsgKi8KLQkJ bkZvcmtCbG9ja1tpXSA9IHNtZ3JuYmxvY2tzX2NhY2hlZChzbWdyX3JlbG4sIGZvcmtOdW1baV0p OworCQlTTWdyRmlsZUhhbmRsZSBzZmlsZTsKKworCQlzZmlsZSA9IHNtZ3JvcGVuKHJsb2NhdG9y LCBiYWNrZW5kLCBmb3JrbnVtW2ldKTsKKwkJbkZvcmtCbG9ja1tpXSA9IHNtZ3JuYmxvY2tzX2Nh Y2hlZChzZmlsZSk7CiAKIAkJaWYgKG5Gb3JrQmxvY2tbaV0gPT0gSW52YWxpZEJsb2NrTnVtYmVy KQogCQl7CkBAIC0zMTIzLDcgKzMxMzksNyBAQCBEcm9wUmVsYXRpb25CdWZmZXJzKFNNZ3JSZWxh dGlvbiBzbWdyX3JlbG4sIEZvcmtOdW1iZXIgKmZvcmtOdW0sCiAJCW5CbG9ja3NUb0ludmFsaWRh dGUgPCBCVUZfRFJPUF9GVUxMX1NDQU5fVEhSRVNIT0xEKQogCXsKIAkJZm9yIChqID0gMDsgaiA8 IG5mb3JrczsgaisrKQotCQkJRmluZEFuZERyb3BSZWxhdGlvbkJ1ZmZlcnMocmxvY2F0b3IubG9j YXRvciwgZm9ya051bVtqXSwKKwkJCUZpbmRBbmREcm9wUmVsYXRpb25CdWZmZXJzKHJsb2NhdG9y LCBmb3JrbnVtW2pdLAogCQkJCQkJCQkJICAgbkZvcmtCbG9ja1tqXSwgZmlyc3REZWxCbG9ja1tq XSk7CiAJCXJldHVybjsKIAl9CkBAIC0zMTQ2LDE4ICszMTYyLDE4IEBAIERyb3BSZWxhdGlvbkJ1 ZmZlcnMoU01nclJlbGF0aW9uIHNtZ3JfcmVsbiwgRm9ya051bWJlciAqZm9ya051bSwKIAkJICog ZmFsc2UgcG9zaXRpdmVzIGFyZSBzYWZlIGJlY2F1c2Ugd2UnbGwgcmVjaGVjayBhZnRlciBnZXR0 aW5nIHRoZQogCQkgKiBidWZmZXIgbG9jay4KIAkJICoKLQkJICogV2UgY291bGQgY2hlY2sgZm9y a051bSBhbmQgYmxvY2tOdW0gYXMgd2VsbCBhcyB0aGUgcmxvY2F0b3IsIGJ1dAorCQkgKiBXZSBj b3VsZCBjaGVjayBmb3JrbnVtIGFuZCBibG9ja051bSBhcyB3ZWxsIGFzIHRoZSBybG9jYXRvciwg YnV0CiAJCSAqIHRoZSBpbmNyZW1lbnRhbCB3aW4gZnJvbSBkb2luZyBzbyBzZWVtcyBzbWFsbC4K IAkJICovCi0JCWlmICghQnVmVGFnTWF0Y2hlc1JlbEZpbGVMb2NhdG9yKCZidWZIZHItPnRhZywg JnJsb2NhdG9yLmxvY2F0b3IpKQorCQlpZiAoIUJ1ZlRhZ01hdGNoZXNSZWxGaWxlTG9jYXRvcigm YnVmSGRyLT50YWcsICZybG9jYXRvcikpCiAJCQljb250aW51ZTsKIAogCQlidWZfc3RhdGUgPSBM b2NrQnVmSGRyKGJ1Zkhkcik7CiAKIAkJZm9yIChqID0gMDsgaiA8IG5mb3JrczsgaisrKQogCQl7 Ci0JCQlpZiAoQnVmVGFnTWF0Y2hlc1JlbEZpbGVMb2NhdG9yKCZidWZIZHItPnRhZywgJnJsb2Nh dG9yLmxvY2F0b3IpICYmCi0JCQkJQnVmVGFnR2V0Rm9ya051bSgmYnVmSGRyLT50YWcpID09IGZv cmtOdW1bal0gJiYKKwkJCWlmIChCdWZUYWdNYXRjaGVzUmVsRmlsZUxvY2F0b3IoJmJ1Zkhkci0+ dGFnLCAmcmxvY2F0b3IpICYmCisJCQkJQnVmVGFnR2V0Rm9ya051bSgmYnVmSGRyLT50YWcpID09 IGZvcmtudW1bal0gJiYKIAkJCQlidWZIZHItPnRhZy5ibG9ja051bSA+PSBmaXJzdERlbEJsb2Nr W2pdKQogCQkJewogCQkJCUludmFsaWRhdGVCdWZmZXIoYnVmSGRyKTsJLyogcmVsZWFzZXMgc3Bp bmxvY2sgKi8KQEAgLTMxNzgsMTEgKzMxOTQsMTAgQEAgRHJvcFJlbGF0aW9uQnVmZmVycyhTTWdy UmVsYXRpb24gc21ncl9yZWxuLCBGb3JrTnVtYmVyICpmb3JrTnVtLAogICoJCS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CiAgKi8KIHZvaWQKLURyb3BSZWxhdGlvbnNBbGxCdWZmZXJzKFNNZ3JSZWxhdGlvbiAqc21ncl9y ZWxuLCBpbnQgbmxvY2F0b3JzKQorRHJvcFJlbGF0aW9uc0FsbEJ1ZmZlcnMoUmVsRmlsZUxvY2F0 b3JCYWNrZW5kICpybG9jYXRvcnMsIGludCBubG9jYXRvcnMpCiB7CiAJaW50CQkJaTsKIAlpbnQJ CQluID0gMDsKLQlTTWdyUmVsYXRpb24gKnJlbHM7CiAJQmxvY2tOdW1iZXIgKCpibG9jaylbTUFY X0ZPUktOVU0gKyAxXTsKIAl1aW50NjQJCW5CbG9ja3NUb0ludmFsaWRhdGUgPSAwOwogCVJlbEZp bGVMb2NhdG9yICpsb2NhdG9yczsKQEAgLTMxOTIsMTggKzMyMDcsMTggQEAgRHJvcFJlbGF0aW9u c0FsbEJ1ZmZlcnMoU01nclJlbGF0aW9uICpzbWdyX3JlbG4sIGludCBubG9jYXRvcnMpCiAJaWYg KG5sb2NhdG9ycyA9PSAwKQogCQlyZXR1cm47CiAKLQlyZWxzID0gcGFsbG9jKHNpemVvZihTTWdy UmVsYXRpb24pICogbmxvY2F0b3JzKTsJLyogbm9uLWxvY2FsIHJlbGF0aW9ucyAqLworCWxvY2F0 b3JzID0gcGFsbG9jKHNpemVvZihSZWxGaWxlTG9jYXRvcikgKiBubG9jYXRvcnMpOwkvKiBub24t bG9jYWwgcmVsYXRpb25zICovCiAKIAkvKiBJZiBpdCdzIGEgbG9jYWwgcmVsYXRpb24sIGl0J3Mg bG9jYWxidWYuYydzIHByb2JsZW0uICovCiAJZm9yIChpID0gMDsgaSA8IG5sb2NhdG9yczsgaSsr KQogCXsKLQkJaWYgKFJlbEZpbGVMb2NhdG9yQmFja2VuZElzVGVtcChzbWdyX3JlbG5baV0tPnNt Z3JfcmxvY2F0b3IpKQorCQlpZiAocmxvY2F0b3JzW2ldLmJhY2tlbmQgIT0gSW52YWxpZEJhY2tl bmRJZCkKIAkJewotCQkJaWYgKHNtZ3JfcmVsbltpXS0+c21ncl9ybG9jYXRvci5iYWNrZW5kID09 IE15QmFja2VuZElkKQotCQkJCURyb3BSZWxhdGlvbkFsbExvY2FsQnVmZmVycyhzbWdyX3JlbG5b aV0tPnNtZ3JfcmxvY2F0b3IubG9jYXRvcik7CisJCQlpZiAocmxvY2F0b3JzW2ldLmJhY2tlbmQg PT0gTXlCYWNrZW5kSWQpCisJCQkJRHJvcFJlbGF0aW9uQWxsTG9jYWxCdWZmZXJzKHJsb2NhdG9y c1tpXS5sb2NhdG9yKTsKIAkJfQogCQllbHNlCi0JCQlyZWxzW24rK10gPSBzbWdyX3JlbG5baV07 CisJCQlsb2NhdG9yc1tuKytdID0gcmxvY2F0b3JzW2ldLmxvY2F0b3I7CiAJfQogCiAJLyoKQEAg LTMyMTIsNyArMzIyNyw3IEBAIERyb3BSZWxhdGlvbnNBbGxCdWZmZXJzKFNNZ3JSZWxhdGlvbiAq c21ncl9yZWxuLCBpbnQgbmxvY2F0b3JzKQogCSAqLwogCWlmIChuID09IDApCiAJewotCQlwZnJl ZShyZWxzKTsKKwkJcGZyZWUobG9jYXRvcnMpOwogCQlyZXR1cm47CiAJfQogCkBAIC0zMjMyLDEy ICszMjQ3LDEzIEBAIERyb3BSZWxhdGlvbnNBbGxCdWZmZXJzKFNNZ3JSZWxhdGlvbiAqc21ncl9y ZWxuLCBpbnQgbmxvY2F0b3JzKQogCQlmb3IgKGludCBqID0gMDsgaiA8PSBNQVhfRk9SS05VTTsg aisrKQogCQl7CiAJCQkvKiBHZXQgdGhlIG51bWJlciBvZiBibG9ja3MgZm9yIGEgcmVsYXRpb24n cyBmb3JrLiAqLwotCQkJYmxvY2tbaV1bal0gPSBzbWdybmJsb2Nrc19jYWNoZWQocmVsc1tpXSwg aik7CisJCQlTTWdyRmlsZUhhbmRsZSBzZmlsZSA9IHNtZ3JvcGVuKGxvY2F0b3JzW2ldLCBJbnZh bGlkQmFja2VuZElkLCBqKTsKKwkJCWJsb2NrW2ldW2pdID0gc21ncm5ibG9ja3NfY2FjaGVkKHNm aWxlKTsKIAogCQkJLyogV2UgbmVlZCB0byBvbmx5IGNvbnNpZGVyIHRoZSByZWxhdGlvbiBmb3Jr cyB0aGF0IGV4aXN0cy4gKi8KIAkJCWlmIChibG9ja1tpXVtqXSA9PSBJbnZhbGlkQmxvY2tOdW1i ZXIpCiAJCQl7Ci0JCQkJaWYgKCFzbWdyZXhpc3RzKHJlbHNbaV0sIGopKQorCQkJCWlmICghc21n cmV4aXN0cyhzZmlsZSkpCiAJCQkJCWNvbnRpbnVlOwogCQkJCWNhY2hlZCA9IGZhbHNlOwogCQkJ CWJyZWFrOwpAQCAtMzI2MywyMCArMzI3OSwxNyBAQCBEcm9wUmVsYXRpb25zQWxsQnVmZmVycyhT TWdyUmVsYXRpb24gKnNtZ3JfcmVsbiwgaW50IG5sb2NhdG9ycykKIAkJCQkJY29udGludWU7CiAK IAkJCQkvKiBkcm9wIGFsbCB0aGUgYnVmZmVycyBmb3IgYSBwYXJ0aWN1bGFyIHJlbGF0aW9uIGZv cmsgKi8KLQkJCQlGaW5kQW5kRHJvcFJlbGF0aW9uQnVmZmVycyhyZWxzW2ldLT5zbWdyX3Jsb2Nh dG9yLmxvY2F0b3IsCisJCQkJRmluZEFuZERyb3BSZWxhdGlvbkJ1ZmZlcnMobG9jYXRvcnNbaV0s CiAJCQkJCQkJCQkJICAgaiwgYmxvY2tbaV1bal0sIDApOwogCQkJfQogCQl9CiAKIAkJcGZyZWUo YmxvY2spOwotCQlwZnJlZShyZWxzKTsKKwkJcGZyZWUobG9jYXRvcnMpOwogCQlyZXR1cm47CiAJ fQogCiAJcGZyZWUoYmxvY2spOwotCWxvY2F0b3JzID0gcGFsbG9jKHNpemVvZihSZWxGaWxlTG9j YXRvcikgKiBuKTsJLyogbm9uLWxvY2FsIHJlbGF0aW9ucyAqLwotCWZvciAoaSA9IDA7IGkgPCBu OyBpKyspCi0JCWxvY2F0b3JzW2ldID0gcmVsc1tpXS0+c21ncl9ybG9jYXRvci5sb2NhdG9yOwog CiAJLyoKIAkgKiBGb3IgbG93IG51bWJlciBvZiByZWxhdGlvbnMgdG8gZHJvcCBqdXN0IHVzZSBh IHNpbXBsZSB3YWxrIHRocm91Z2gsIHRvCkBAIC0zMzM2LDcgKzMzNDksNiBAQCBEcm9wUmVsYXRp b25zQWxsQnVmZmVycyhTTWdyUmVsYXRpb24gKnNtZ3JfcmVsbiwgaW50IG5sb2NhdG9ycykKIAl9 CiAKIAlwZnJlZShsb2NhdG9ycyk7Ci0JcGZyZWUocmVscyk7CiB9CiAKIC8qIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQpAQCAtMzM0OSw3ICszMzYxLDcgQEAgRHJvcFJlbGF0aW9uc0FsbEJ1ZmZlcnMoU01nclJlbGF0 aW9uICpzbWdyX3JlbG4sIGludCBubG9jYXRvcnMpCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiBzdGF0 aWMgdm9pZAotRmluZEFuZERyb3BSZWxhdGlvbkJ1ZmZlcnMoUmVsRmlsZUxvY2F0b3IgcmxvY2F0 b3IsIEZvcmtOdW1iZXIgZm9ya051bSwKK0ZpbmRBbmREcm9wUmVsYXRpb25CdWZmZXJzKFJlbEZp bGVMb2NhdG9yIHJsb2NhdG9yLCBGb3JrTnVtYmVyIGZvcmtudW0sCiAJCQkJCQkgICBCbG9ja051 bWJlciBuRm9ya0Jsb2NrLAogCQkJCQkJICAgQmxvY2tOdW1iZXIgZmlyc3REZWxCbG9jaykKIHsK QEAgLTMzNjUsNyArMzM3Nyw3IEBAIEZpbmRBbmREcm9wUmVsYXRpb25CdWZmZXJzKFJlbEZpbGVM b2NhdG9yIHJsb2NhdG9yLCBGb3JrTnVtYmVyIGZvcmtOdW0sCiAJCXVpbnQzMgkJYnVmX3N0YXRl OwogCiAJCS8qIGNyZWF0ZSBhIHRhZyBzbyB3ZSBjYW4gbG9va3VwIHRoZSBidWZmZXIgKi8KLQkJ SW5pdEJ1ZmZlclRhZygmYnVmVGFnLCAmcmxvY2F0b3IsIGZvcmtOdW0sIGN1ckJsb2NrKTsKKwkJ SW5pdEJ1ZmZlclRhZygmYnVmVGFnLCAmcmxvY2F0b3IsIGZvcmtudW0sIGN1ckJsb2NrKTsKIAog CQkvKiBkZXRlcm1pbmUgaXRzIGhhc2ggY29kZSBhbmQgcGFydGl0aW9uIGxvY2sgSUQgKi8KIAkJ YnVmSGFzaCA9IEJ1ZlRhYmxlSGFzaENvZGUoJmJ1ZlRhZyk7CkBAIC0zMzkwLDcgKzM0MDIsNyBA QCBGaW5kQW5kRHJvcFJlbGF0aW9uQnVmZmVycyhSZWxGaWxlTG9jYXRvciBybG9jYXRvciwgRm9y a051bWJlciBmb3JrTnVtLAogCQlidWZfc3RhdGUgPSBMb2NrQnVmSGRyKGJ1Zkhkcik7CiAKIAkJ aWYgKEJ1ZlRhZ01hdGNoZXNSZWxGaWxlTG9jYXRvcigmYnVmSGRyLT50YWcsICZybG9jYXRvcikg JiYKLQkJCUJ1ZlRhZ0dldEZvcmtOdW0oJmJ1Zkhkci0+dGFnKSA9PSBmb3JrTnVtICYmCisJCQlC dWZUYWdHZXRGb3JrTnVtKCZidWZIZHItPnRhZykgPT0gZm9ya251bSAmJgogCQkJYnVmSGRyLT50 YWcuYmxvY2tOdW0gPj0gZmlyc3REZWxCbG9jaykKIAkJCUludmFsaWRhdGVCdWZmZXIoYnVmSGRy KTsJLyogcmVsZWFzZXMgc3BpbmxvY2sgKi8KIAkJZWxzZQpAQCAtMzU0NSw4ICszNTU3LDcgQEAg Rmx1c2hSZWxhdGlvbkJ1ZmZlcnMoUmVsYXRpb24gcmVsKQogCiAJCQkJUGFnZVNldENoZWNrc3Vt SW5wbGFjZShsb2NhbHBhZ2UsIGJ1Zkhkci0+dGFnLmJsb2NrTnVtKTsKIAotCQkJCXNtZ3J3cml0 ZShSZWxhdGlvbkdldFNtZ3IocmVsKSwKLQkJCQkJCSAgQnVmVGFnR2V0Rm9ya051bSgmYnVmSGRy LT50YWcpLAorCQkJCXNtZ3J3cml0ZShSZWxhdGlvbkdldFNtZ3IocmVsLCBCdWZUYWdHZXRGb3Jr TnVtKCZidWZIZHItPnRhZykpLAogCQkJCQkJICBidWZIZHItPnRhZy5ibG9ja051bSwKIAkJCQkJ CSAgbG9jYWxwYWdlLAogCQkJCQkJICBmYWxzZSk7CkBAIC0zNTg2LDcgKzM1OTcsNyBAQCBGbHVz aFJlbGF0aW9uQnVmZmVycyhSZWxhdGlvbiByZWwpCiAJCXsKIAkJCVBpbkJ1ZmZlcl9Mb2NrZWQo YnVmSGRyKTsKIAkJCUxXTG9ja0FjcXVpcmUoQnVmZmVyRGVzY3JpcHRvckdldENvbnRlbnRMb2Nr KGJ1ZkhkciksIExXX1NIQVJFRCk7Ci0JCQlGbHVzaEJ1ZmZlcihidWZIZHIsIFJlbGF0aW9uR2V0 U21ncihyZWwpKTsKKwkJCUZsdXNoQnVmZmVyKGJ1ZkhkciwgUmVsYXRpb25HZXRTbWdyKHJlbCwg YnVmSGRyLT50YWcuZm9ya051bSkpOwogCQkJTFdMb2NrUmVsZWFzZShCdWZmZXJEZXNjcmlwdG9y R2V0Q29udGVudExvY2soYnVmSGRyKSk7CiAJCQlVbnBpbkJ1ZmZlcihidWZIZHIpOwogCQl9CkBA IC0zNjA1LDI1ICszNjE2LDIwIEBAIEZsdXNoUmVsYXRpb25CdWZmZXJzKFJlbGF0aW9uIHJlbCkK ICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCiAgKi8KIHZvaWQKLUZsdXNoUmVsYXRpb25zQWxsQnVmZmVycyhTTWdy UmVsYXRpb24gKnNtZ3JzLCBpbnQgbnJlbHMpCitGbHVzaFJlbGF0aW9uc0FsbEJ1ZmZlcnMoUmVs RmlsZUxvY2F0b3IgKnJlbHMsIGludCBucmVscykKIHsKIAlpbnQJCQlpOwotCVNNZ3JTb3J0QXJy YXkgKnNyZWxzOworCVJlbEZpbGVMb2NhdG9yICpsb2NhdG9ycyA9IE5VTEw7CiAJYm9vbAkJdXNl X2JzZWFyY2g7CiAKIAlpZiAobnJlbHMgPT0gMCkKIAkJcmV0dXJuOwogCiAJLyogZmlsbC1pbiBh cnJheSBmb3IgcXNvcnQgKi8KLQlzcmVscyA9IHBhbGxvYyhzaXplb2YoU01nclNvcnRBcnJheSkg KiBucmVscyk7CisJbG9jYXRvcnMgPSBwYWxsb2Moc2l6ZW9mKFJlbEZpbGVMb2NhdG9yKSAqIG5y ZWxzKTsKIAogCWZvciAoaSA9IDA7IGkgPCBucmVsczsgaSsrKQotCXsKLQkJQXNzZXJ0KCFSZWxG aWxlTG9jYXRvckJhY2tlbmRJc1RlbXAoc21ncnNbaV0tPnNtZ3JfcmxvY2F0b3IpKTsKLQotCQlz cmVsc1tpXS5ybG9jYXRvciA9IHNtZ3JzW2ldLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3I7Ci0JCXNy ZWxzW2ldLnNyZWwgPSBzbWdyc1tpXTsKLQl9CisJCWxvY2F0b3JzW2ldID0gcmVsc1tpXTsKIAog CS8qCiAJICogU2F2ZSB0aGUgYnNlYXJjaCBvdmVyaGVhZCBmb3IgbG93IG51bWJlciBvZiByZWxh dGlvbnMgdG8gc3luYy4gU2VlCkBAIC0zNjMxLDE2ICszNjM3LDE2IEBAIEZsdXNoUmVsYXRpb25z QWxsQnVmZmVycyhTTWdyUmVsYXRpb24gKnNtZ3JzLCBpbnQgbnJlbHMpCiAJICovCiAJdXNlX2Jz ZWFyY2ggPSBucmVscyA+IFJFTFNfQlNFQVJDSF9USFJFU0hPTEQ7CiAKLQkvKiBzb3J0IHRoZSBs aXN0IG9mIFNNZ3JSZWxhdGlvbnMgaWYgbmVjZXNzYXJ5ICovCisJLyogc29ydCB0aGUgbGlzdCBv ZiBsb2NhdG9ycyBpZiBuZWNlc3NhcnkgKi8KIAlpZiAodXNlX2JzZWFyY2gpCi0JCXBnX3Fzb3J0 KHNyZWxzLCBucmVscywgc2l6ZW9mKFNNZ3JTb3J0QXJyYXkpLCBybG9jYXRvcl9jb21wYXJhdG9y KTsKKwkJcGdfcXNvcnQobG9jYXRvcnMsIG5yZWxzLCBzaXplb2YoUmVsRmlsZUxvY2F0b3IpLCBy bG9jYXRvcl9jb21wYXJhdG9yKTsKIAogCS8qIE1ha2Ugc3VyZSB3ZSBjYW4gaGFuZGxlIHRoZSBw aW4gaW5zaWRlIHRoZSBsb29wICovCiAJUmVzb3VyY2VPd25lckVubGFyZ2VCdWZmZXJzKEN1cnJl bnRSZXNvdXJjZU93bmVyKTsKIAogCWZvciAoaSA9IDA7IGkgPCBOQnVmZmVyczsgaSsrKQogCXsK LQkJU01nclNvcnRBcnJheSAqc3JlbGVudCA9IE5VTEw7CisJCVJlbEZpbGVMb2NhdG9yICpmb3Vu ZCA9IE5VTEw7CiAJCUJ1ZmZlckRlc2MgKmJ1ZkhkciA9IEdldEJ1ZmZlckRlc2NyaXB0b3IoaSk7 CiAJCXVpbnQzMgkJYnVmX3N0YXRlOwogCkBAIC0zNjU1LDkgKzM2NjEsOSBAQCBGbHVzaFJlbGF0 aW9uc0FsbEJ1ZmZlcnMoU01nclJlbGF0aW9uICpzbWdycywgaW50IG5yZWxzKQogCiAJCQlmb3Ig KGogPSAwOyBqIDwgbnJlbHM7IGorKykKIAkJCXsKLQkJCQlpZiAoQnVmVGFnTWF0Y2hlc1JlbEZp bGVMb2NhdG9yKCZidWZIZHItPnRhZywgJnNyZWxzW2pdLnJsb2NhdG9yKSkKKwkJCQlpZiAoQnVm VGFnTWF0Y2hlc1JlbEZpbGVMb2NhdG9yKCZidWZIZHItPnRhZywgJmxvY2F0b3JzW2pdKSkKIAkJ CQl7Ci0JCQkJCXNyZWxlbnQgPSAmc3JlbHNbal07CisJCQkJCWZvdW5kID0gJmxvY2F0b3JzW2pd OwogCQkJCQlicmVhazsKIAkJCQl9CiAJCQl9CkBAIC0zNjY3LDI0ICszNjczLDI2IEBAIEZsdXNo UmVsYXRpb25zQWxsQnVmZmVycyhTTWdyUmVsYXRpb24gKnNtZ3JzLCBpbnQgbnJlbHMpCiAJCQlS ZWxGaWxlTG9jYXRvciBybG9jYXRvcjsKIAogCQkJcmxvY2F0b3IgPSBCdWZUYWdHZXRSZWxGaWxl TG9jYXRvcigmYnVmSGRyLT50YWcpOwotCQkJc3JlbGVudCA9IGJzZWFyY2goKGNvbnN0IHZvaWQg KikgJihybG9jYXRvciksCi0JCQkJCQkJICBzcmVscywgbnJlbHMsIHNpemVvZihTTWdyU29ydEFy cmF5KSwKKwkJCWZvdW5kID0gYnNlYXJjaCgoY29uc3Qgdm9pZCAqKSAmKHJsb2NhdG9yKSwKKwkJ CQkJCQkgIGxvY2F0b3JzLCBucmVscywgc2l6ZW9mKFJlbEZpbGVMb2NhdG9yKSwKIAkJCQkJCQkg IHJsb2NhdG9yX2NvbXBhcmF0b3IpOwogCQl9CiAKIAkJLyogYnVmZmVyIGRvZXNuJ3QgYmVsb25n IHRvIGFueSBvZiB0aGUgZ2l2ZW4gcmVsZmlsZWxvY2F0b3JzOyBza2lwIGl0ICovCi0JCWlmIChz cmVsZW50ID09IE5VTEwpCisJCWlmIChmb3VuZCA9PSBOVUxMKQogCQkJY29udGludWU7CiAKKwkJ LyogRklYTUU6IGNhY2hlIFNNZ3JGaWxlSGFuZGxlcyBmb3IgdGhlIHJlbHMsIGFuZCBwYXNzIHRv IEZsdXNoQnVmZmVyICovCisKIAkJUmVzZXJ2ZVByaXZhdGVSZWZDb3VudEVudHJ5KCk7CiAKIAkJ YnVmX3N0YXRlID0gTG9ja0J1ZkhkcihidWZIZHIpOwotCQlpZiAoQnVmVGFnTWF0Y2hlc1JlbEZp bGVMb2NhdG9yKCZidWZIZHItPnRhZywgJnNyZWxlbnQtPnJsb2NhdG9yKSAmJgorCQlpZiAoQnVm VGFnTWF0Y2hlc1JlbEZpbGVMb2NhdG9yKCZidWZIZHItPnRhZywgZm91bmQpICYmCiAJCQkoYnVm X3N0YXRlICYgKEJNX1ZBTElEIHwgQk1fRElSVFkpKSA9PSAoQk1fVkFMSUQgfCBCTV9ESVJUWSkp CiAJCXsKIAkJCVBpbkJ1ZmZlcl9Mb2NrZWQoYnVmSGRyKTsKIAkJCUxXTG9ja0FjcXVpcmUoQnVm ZmVyRGVzY3JpcHRvckdldENvbnRlbnRMb2NrKGJ1ZkhkciksIExXX1NIQVJFRCk7Ci0JCQlGbHVz aEJ1ZmZlcihidWZIZHIsIHNyZWxlbnQtPnNyZWwpOworCQkJRmx1c2hCdWZmZXIoYnVmSGRyLCBO VUxMKTsKIAkJCUxXTG9ja1JlbGVhc2UoQnVmZmVyRGVzY3JpcHRvckdldENvbnRlbnRMb2NrKGJ1 ZkhkcikpOwogCQkJVW5waW5CdWZmZXIoYnVmSGRyKTsKIAkJfQpAQCAtMzY5Miw3ICszNzAwLDcg QEAgRmx1c2hSZWxhdGlvbnNBbGxCdWZmZXJzKFNNZ3JSZWxhdGlvbiAqc21ncnMsIGludCBucmVs cykKIAkJCVVubG9ja0J1ZkhkcihidWZIZHIsIGJ1Zl9zdGF0ZSk7CiAJfQogCi0JcGZyZWUoc3Jl bHMpOworCXBmcmVlKGxvY2F0b3JzKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zNzA4LDcg KzM3MTYsNyBAQCBGbHVzaFJlbGF0aW9uc0FsbEJ1ZmZlcnMoU01nclJlbGF0aW9uICpzbWdycywg aW50IG5yZWxzKQogc3RhdGljIHZvaWQKIFJlbGF0aW9uQ29weVN0b3JhZ2VVc2luZ0J1ZmZlcihS ZWxGaWxlTG9jYXRvciBzcmNsb2NhdG9yLAogCQkJCQkJCSAgIFJlbEZpbGVMb2NhdG9yIGRzdGxv Y2F0b3IsCi0JCQkJCQkJICAgRm9ya051bWJlciBmb3JrTnVtLCBib29sIHBlcm1hbmVudCkKKwkJ CQkJCQkgICBGb3JrTnVtYmVyIGZvcmtudW0sIGJvb2wgcGVybWFuZW50KQogewogCUJ1ZmZlcgkJ c3JjQnVmOwogCUJ1ZmZlcgkJZHN0QnVmOwpAQCAtMzcyNiwxMSArMzczNCwxMSBAQCBSZWxhdGlv bkNvcHlTdG9yYWdlVXNpbmdCdWZmZXIoUmVsRmlsZUxvY2F0b3Igc3JjbG9jYXRvciwKIAkgKiBj YW4gc2tpcCBpdCB3aGVuIGNvcHlpbmcgYW55IGZvcmsgb2YgYW4gdW5sb2dnZWQgcmVsYXRpb24g b3RoZXIgdGhhbgogCSAqIHRoZSBpbml0IGZvcmsuCiAJICovCi0JdXNlX3dhbCA9IFhMb2dJc05l ZWRlZCgpICYmIChwZXJtYW5lbnQgfHwgZm9ya051bSA9PSBJTklUX0ZPUktOVU0pOworCXVzZV93 YWwgPSBYTG9nSXNOZWVkZWQoKSAmJiAocGVybWFuZW50IHx8IGZvcmtudW0gPT0gSU5JVF9GT1JL TlVNKTsKIAogCS8qIEdldCBudW1iZXIgb2YgYmxvY2tzIGluIHRoZSBzb3VyY2UgcmVsYXRpb24u ICovCi0JbmJsb2NrcyA9IHNtZ3JuYmxvY2tzKHNtZ3JvcGVuKHNyY2xvY2F0b3IsIEludmFsaWRC YWNrZW5kSWQpLAotCQkJCQkJICBmb3JrTnVtKTsKKwluYmxvY2tzID0gc21ncm5ibG9ja3Moc21n cm9wZW4oc3JjbG9jYXRvciwgSW52YWxpZEJhY2tlbmRJZCwgZm9ya251bSkpOworCQkJCQkJICAK IAogCS8qIE5vdGhpbmcgdG8gY29weTsganVzdCByZXR1cm4uICovCiAJaWYgKG5ibG9ja3MgPT0g MCkKQEAgLTM3NDEsNyArMzc0OSw3IEBAIFJlbGF0aW9uQ29weVN0b3JhZ2VVc2luZ0J1ZmZlcihS ZWxGaWxlTG9jYXRvciBzcmNsb2NhdG9yLAogCSAqIHJlbGF0aW9uIGJlZm9yZSBzdGFydGluZyB0 byBjb3B5IGJsb2NrIGJ5IGJsb2NrLgogCSAqLwogCW1lbXNldChidWYuZGF0YSwgMCwgQkxDS1Na KTsKLQlzbWdyZXh0ZW5kKHNtZ3JvcGVuKGRzdGxvY2F0b3IsIEludmFsaWRCYWNrZW5kSWQpLCBm b3JrTnVtLCBuYmxvY2tzIC0gMSwKKwlzbWdyZXh0ZW5kKHNtZ3JvcGVuKGRzdGxvY2F0b3IsIElu dmFsaWRCYWNrZW5kSWQsIGZvcmtudW0pLCBuYmxvY2tzIC0gMSwKIAkJCSAgIGJ1Zi5kYXRhLCB0 cnVlKTsKIAogCS8qIFRoaXMgaXMgYSBidWxrIG9wZXJhdGlvbiwgc28gdXNlIGJ1ZmZlciBhY2Nl c3Mgc3RyYXRlZ2llcy4gKi8KQEAgLTM3NTQsMTQgKzM3NjIsMTQgQEAgUmVsYXRpb25Db3B5U3Rv cmFnZVVzaW5nQnVmZmVyKFJlbEZpbGVMb2NhdG9yIHNyY2xvY2F0b3IsCiAJCUNIRUNLX0ZPUl9J TlRFUlJVUFRTKCk7CiAKIAkJLyogUmVhZCBibG9jayBmcm9tIHNvdXJjZSByZWxhdGlvbi4gKi8K LQkJc3JjQnVmID0gUmVhZEJ1ZmZlcldpdGhvdXRSZWxjYWNoZShzcmNsb2NhdG9yLCBmb3JrTnVt LCBibGtubywKKwkJc3JjQnVmID0gUmVhZEJ1ZmZlcldpdGhvdXRSZWxjYWNoZShzcmNsb2NhdG9y LCBmb3JrbnVtLCBibGtubywKIAkJCQkJCQkJCQkgICBSQk1fTk9STUFMLCBic3RyYXRlZ3lfc3Jj LAogCQkJCQkJCQkJCSAgIHBlcm1hbmVudCk7CiAJCUxvY2tCdWZmZXIoc3JjQnVmLCBCVUZGRVJf TE9DS19TSEFSRSk7CiAJCXNyY1BhZ2UgPSBCdWZmZXJHZXRQYWdlKHNyY0J1Zik7CiAKIAkJLyog VXNlIFBfTkVXIHRvIGV4dGVuZCB0aGUgZGVzdGluYXRpb24gcmVsYXRpb24uICovCi0JCWRzdEJ1 ZiA9IFJlYWRCdWZmZXJXaXRob3V0UmVsY2FjaGUoZHN0bG9jYXRvciwgZm9ya051bSwgYmxrbm8s CisJCWRzdEJ1ZiA9IFJlYWRCdWZmZXJXaXRob3V0UmVsY2FjaGUoZHN0bG9jYXRvciwgZm9ya251 bSwgYmxrbm8sCiAJCQkJCQkJCQkJICAgUkJNX05PUk1BTCwgYnN0cmF0ZWd5X2RzdCwKIAkJCQkJ CQkJCQkgICBwZXJtYW5lbnQpOwogCQlMb2NrQnVmZmVyKGRzdEJ1ZiwgQlVGRkVSX0xPQ0tfRVhD TFVTSVZFKTsKQEAgLTM3OTksNyArMzgwNyw2IEBAIHZvaWQKIENyZWF0ZUFuZENvcHlSZWxhdGlv bkRhdGEoUmVsRmlsZUxvY2F0b3Igc3JjX3Jsb2NhdG9yLAogCQkJCQkJICBSZWxGaWxlTG9jYXRv ciBkc3RfcmxvY2F0b3IsIGJvb2wgcGVybWFuZW50KQogewotCVJlbEZpbGVMb2NhdG9yQmFja2Vu ZCBybG9jYXRvcjsKIAljaGFyCQlyZWxwZXJzaXN0ZW5jZTsKIAogCS8qIFNldCB0aGUgcmVscGVy c2lzdGVuY2UuICovCkBAIC0zODE5LDM0ICszODI2LDMwIEBAIENyZWF0ZUFuZENvcHlSZWxhdGlv bkRhdGEoUmVsRmlsZUxvY2F0b3Igc3JjX3Jsb2NhdG9yLAogCQkJCQkJCQkgICBwZXJtYW5lbnQp OwogCiAJLyogY29weSB0aG9zZSBleHRyYSBmb3JrcyB0aGF0IGV4aXN0ICovCi0JZm9yIChGb3Jr TnVtYmVyIGZvcmtOdW0gPSBNQUlOX0ZPUktOVU0gKyAxOwotCQkgZm9ya051bSA8PSBNQVhfRk9S S05VTTsgZm9ya051bSsrKQorCWZvciAoRm9ya051bWJlciBmb3JrbnVtID0gTUFJTl9GT1JLTlVN ICsgMTsKKwkJIGZvcmtudW0gPD0gTUFYX0ZPUktOVU07IGZvcmtudW0rKykKIAl7Ci0JCWlmIChz bWdyZXhpc3RzKHNtZ3JvcGVuKHNyY19ybG9jYXRvciwgSW52YWxpZEJhY2tlbmRJZCksIGZvcmtO dW0pKQorCQlpZiAoc21ncmV4aXN0cyhzbWdyb3BlbihzcmNfcmxvY2F0b3IsIEludmFsaWRCYWNr ZW5kSWQsIGZvcmtudW0pKSkKIAkJewotCQkJc21ncmNyZWF0ZShzbWdyb3Blbihkc3RfcmxvY2F0 b3IsIEludmFsaWRCYWNrZW5kSWQpLCBmb3JrTnVtLCBmYWxzZSk7CisJCQlzbWdyY3JlYXRlKHNt Z3JvcGVuKGRzdF9ybG9jYXRvciwgSW52YWxpZEJhY2tlbmRJZCwgZm9ya251bSksIGZhbHNlKTsK IAogCQkJLyoKIAkJCSAqIFdBTCBsb2cgY3JlYXRpb24gaWYgdGhlIHJlbGF0aW9uIGlzIHBlcnNp c3RlbnQsIG9yIHRoaXMgaXMgdGhlCiAJCQkgKiBpbml0IGZvcmsgb2YgYW4gdW5sb2dnZWQgcmVs YXRpb24uCiAJCQkgKi8KLQkJCWlmIChwZXJtYW5lbnQgfHwgZm9ya051bSA9PSBJTklUX0ZPUktO VU0pCi0JCQkJbG9nX3NtZ3JjcmVhdGUoJmRzdF9ybG9jYXRvciwgZm9ya051bSk7CisJCQlpZiAo cGVybWFuZW50IHx8IGZvcmtudW0gPT0gSU5JVF9GT1JLTlVNKQorCQkJCWxvZ19zbWdyY3JlYXRl KCZkc3RfcmxvY2F0b3IsIGZvcmtudW0pOwogCiAJCQkvKiBDb3B5IGEgZm9yaydzIGRhdGEsIGJs b2NrIGJ5IGJsb2NrLiAqLwotCQkJUmVsYXRpb25Db3B5U3RvcmFnZVVzaW5nQnVmZmVyKHNyY19y bG9jYXRvciwgZHN0X3Jsb2NhdG9yLCBmb3JrTnVtLAorCQkJUmVsYXRpb25Db3B5U3RvcmFnZVVz aW5nQnVmZmVyKHNyY19ybG9jYXRvciwgZHN0X3Jsb2NhdG9yLCBmb3JrbnVtLAogCQkJCQkJCQkJ CSAgIHBlcm1hbmVudCk7CiAJCX0KIAl9CiAKLQkvKiBjbG9zZSBzb3VyY2UgYW5kIGRlc3RpbmF0 aW9uIHNtZ3IgaWYgZXhpc3RzLiAqLwotCXJsb2NhdG9yLmJhY2tlbmQgPSBJbnZhbGlkQmFja2Vu ZElkOwogCi0JcmxvY2F0b3IubG9jYXRvciA9IHNyY19ybG9jYXRvcjsKLQlzbWdyY2xvc2VyZWxs b2NhdG9yKHJsb2NhdG9yKTsKKwlzbWdyY2xvc2VyZWxsb2NhdG9yKHNyY19ybG9jYXRvciwgSW52 YWxpZEJhY2tlbmRJZCk7CiAKLQlybG9jYXRvci5sb2NhdG9yID0gZHN0X3Jsb2NhdG9yOwotCXNt Z3JjbG9zZXJlbGxvY2F0b3IocmxvY2F0b3IpOworCXNtZ3JjbG9zZXJlbGxvY2F0b3IoZHN0X3Js b2NhdG9yLCBJbnZhbGlkQmFja2VuZElkKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC00OTY3 LDcgKzQ5NzAsNyBAQCBJc3N1ZVBlbmRpbmdXcml0ZWJhY2tzKFdyaXRlYmFja0NvbnRleHQgKmNv bnRleHQpCiAJewogCQlQZW5kaW5nV3JpdGViYWNrICpjdXI7CiAJCVBlbmRpbmdXcml0ZWJhY2sg Km5leHQ7Ci0JCVNNZ3JSZWxhdGlvbiByZWxuOworCQlTTWdyRmlsZUhhbmRsZSBzZmlsZTsKIAkJ aW50CQkJYWhlYWQ7CiAJCUJ1ZmZlclRhZwl0YWc7CiAJCVJlbEZpbGVMb2NhdG9yIGN1cnJsb2Nh dG9yOwpAQCAtNTAwNyw4ICs1MDEwLDggQEAgSXNzdWVQZW5kaW5nV3JpdGViYWNrcyhXcml0ZWJh Y2tDb250ZXh0ICpjb250ZXh0KQogCQlpICs9IGFoZWFkOwogCiAJCS8qIGFuZCBmaW5hbGx5IHRl bGwgdGhlIGtlcm5lbCB0byB3cml0ZSB0aGUgZGF0YSB0byBzdG9yYWdlICovCi0JCXJlbG4gPSBz bWdyb3BlbihjdXJybG9jYXRvciwgSW52YWxpZEJhY2tlbmRJZCk7Ci0JCXNtZ3J3cml0ZWJhY2so cmVsbiwgQnVmVGFnR2V0Rm9ya051bSgmdGFnKSwgdGFnLmJsb2NrTnVtLCBuYmxvY2tzKTsKKwkJ c2ZpbGUgPSBzbWdyb3BlbihjdXJybG9jYXRvciwgSW52YWxpZEJhY2tlbmRJZCwgQnVmVGFnR2V0 Rm9ya051bSgmdGFnKSk7CisJCXNtZ3J3cml0ZWJhY2soc2ZpbGUsIHRhZy5ibG9ja051bSwgbmJs b2Nrcyk7CiAJfQogCiAJY29udGV4dC0+bnJfcGVuZGluZyA9IDA7CkBAIC01MDMwLDMgKzUwMzMs MjkgQEAgVGVzdEZvck9sZFNuYXBzaG90X2ltcGwoU25hcHNob3Qgc25hcHNob3QsIFJlbGF0aW9u IHJlbGF0aW9uKQogCQkJCShlcnJjb2RlKEVSUkNPREVfU05BUFNIT1RfVE9PX09MRCksCiAJCQkJ IGVycm1zZygic25hcHNob3QgdG9vIG9sZCIpKSk7CiB9CisKKy8qCisgKiBDaGVjayBpZiBhIGJ1 ZmZlciB0YWcgaXMgY3VycmVudGx5IG1hcHBlZC4KKyAqCisgKiBYWFggRHViaW91cyBzZW1hbnRp Y3M7IG5lZWRlZCBvbmx5IGZvciBtdWx0aXhhY3QncyBoYW5kbGluZyBmb3IKKyAqIGluY29uc2lz dGVudCBzdGF0ZXMuCisgKi8KK2Jvb2wKK0J1ZmZlclByb2JlKFJlbEZpbGVMb2NhdG9yIHJsb2Nh dG9yLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGJsb2NrTnVtKQoreworCUJ1ZmZl clRhZwl0YWc7CisJdWludDMyCQloYXNoOworCUxXTG9jawkgICAqcGFydGl0aW9uTG9jazsKKwlp bnQJCQlidWZfaWQ7CisKKwlJbml0QnVmZmVyVGFnKCZ0YWcsICZybG9jYXRvciwgZm9ya251bSwg YmxvY2tOdW0pOworCisJaGFzaCA9IEJ1ZlRhYmxlSGFzaENvZGUoJnRhZyk7CisJcGFydGl0aW9u TG9jayA9IEJ1Zk1hcHBpbmdQYXJ0aXRpb25Mb2NrKGhhc2gpOworCisJTFdMb2NrQWNxdWlyZShw YXJ0aXRpb25Mb2NrLCBMV19TSEFSRUQpOworCWJ1Zl9pZCA9IEJ1ZlRhYmxlTG9va3VwKCZ0YWcs IGhhc2gpOworCUxXTG9ja1JlbGVhc2UocGFydGl0aW9uTG9jayk7CisKKwlyZXR1cm4gYnVmX2lk ID49IDA7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9sb2NhbGJ1 Zi5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvbG9jYWxidWYuYwppbmRleCAzMGQ2N2Qx YzQwZC4uYTU2Mjk1MzJkNzIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVy L2xvY2FsYnVmLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvbG9jYWxidWYuYwpA QCAtNjEsMTQgKzYxLDEzIEBAIHN0YXRpYyBCbG9jayBHZXRMb2NhbEJ1ZmZlclN0b3JhZ2Uodm9p ZCk7CiAgKiBOby1vcCBpZiBwcmVmZXRjaGluZyBpc24ndCBjb21waWxlZCBpbi4KICAqLwogUHJl ZmV0Y2hCdWZmZXJSZXN1bHQKLVByZWZldGNoTG9jYWxCdWZmZXIoU01nclJlbGF0aW9uIHNtZ3Is IEZvcmtOdW1iZXIgZm9ya051bSwKLQkJCQkJQmxvY2tOdW1iZXIgYmxvY2tOdW0pCitQcmVmZXRj aExvY2FsQnVmZmVyKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBCbG9ja051bWJlciBibG9ja051bSkK IHsKIAlQcmVmZXRjaEJ1ZmZlclJlc3VsdCByZXN1bHQgPSB7SW52YWxpZEJ1ZmZlciwgZmFsc2V9 OwogCUJ1ZmZlclRhZwluZXdUYWc7CQkJLyogaWRlbnRpdHkgb2YgcmVxdWVzdGVkIGJsb2NrICov CiAJTG9jYWxCdWZmZXJMb29rdXBFbnQgKmhyZXN1bHQ7CiAKLQlJbml0QnVmZmVyVGFnKCZuZXdU YWcsICZzbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IsIGZvcmtOdW0sIGJsb2NrTnVtKTsKKwlJ bml0QnVmZmVyVGFnKCZuZXdUYWcsICZzZmlsZS0+c21ncl9sb2NhdG9yLmxvY2F0b3IsIHNmaWxl LT5zbWdyX2xvY2F0b3IuZm9ya251bSwgYmxvY2tOdW0pOwogCiAJLyogSW5pdGlhbGl6ZSBsb2Nh bCBidWZmZXJzIGlmIGZpcnN0IHJlcXVlc3QgaW4gdGhpcyBzZXNzaW9uICovCiAJaWYgKExvY2Fs QnVmSGFzaCA9PSBOVUxMKQpAQCAtODcsNyArODYsNyBAQCBQcmVmZXRjaExvY2FsQnVmZmVyKFNN Z3JSZWxhdGlvbiBzbWdyLCBGb3JrTnVtYmVyIGZvcmtOdW0sCiAJewogI2lmZGVmIFVTRV9QUkVG RVRDSAogCQkvKiBOb3QgaW4gYnVmZmVycywgc28gaW5pdGlhdGUgcHJlZmV0Y2ggKi8KLQkJc21n cnByZWZldGNoKHNtZ3IsIGZvcmtOdW0sIGJsb2NrTnVtKTsKKwkJc21ncnByZWZldGNoKHNmaWxl LCBibG9ja051bSk7CiAJCXJlc3VsdC5pbml0aWF0ZWRfaW8gPSB0cnVlOwogI2VuZGlmCQkJCQkJ CS8qIFVTRV9QUkVGRVRDSCAqLwogCX0KQEAgLTEwNiw4ICsxMDUsNyBAQCBQcmVmZXRjaExvY2Fs QnVmZmVyKFNNZ3JSZWxhdGlvbiBzbWdyLCBGb3JrTnVtYmVyIGZvcmtOdW0sCiAgKiAoaGVuY2Us IHVzYWdlX2NvdW50IGlzIGFsd2F5cyBhZHZhbmNlZCkuCiAgKi8KIEJ1ZmZlckRlc2MgKgotTG9j YWxCdWZmZXJBbGxvYyhTTWdyUmVsYXRpb24gc21nciwgRm9ya051bWJlciBmb3JrTnVtLCBCbG9j a051bWJlciBibG9ja051bSwKLQkJCQkgYm9vbCAqZm91bmRQdHIpCitMb2NhbEJ1ZmZlckFsbG9j KFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBCbG9ja051bWJlciBibG9ja051bSwgYm9vbCAqZm91bmRQ dHIpCiB7CiAJQnVmZmVyVGFnCW5ld1RhZzsJCQkvKiBpZGVudGl0eSBvZiByZXF1ZXN0ZWQgYmxv Y2sgKi8KIAlMb2NhbEJ1ZmZlckxvb2t1cEVudCAqaHJlc3VsdDsKQEAgLTExNyw3ICsxMTUsNyBA QCBMb2NhbEJ1ZmZlckFsbG9jKFNNZ3JSZWxhdGlvbiBzbWdyLCBGb3JrTnVtYmVyIGZvcmtOdW0s IEJsb2NrTnVtYmVyIGJsb2NrTnVtLAogCWJvb2wJCWZvdW5kOwogCXVpbnQzMgkJYnVmX3N0YXRl OwogCi0JSW5pdEJ1ZmZlclRhZygmbmV3VGFnLCAmc21nci0+c21ncl9ybG9jYXRvci5sb2NhdG9y LCBmb3JrTnVtLCBibG9ja051bSk7CisJSW5pdEJ1ZmZlclRhZygmbmV3VGFnLCAmc2ZpbGUtPnNt Z3JfbG9jYXRvci5sb2NhdG9yLCBzZmlsZS0+c21ncl9sb2NhdG9yLmZvcmtudW0sIGJsb2NrTnVt KTsKIAogCS8qIEluaXRpYWxpemUgbG9jYWwgYnVmZmVycyBpZiBmaXJzdCByZXF1ZXN0IGluIHRo aXMgc2Vzc2lvbiAqLwogCWlmIChMb2NhbEJ1Zkhhc2ggPT0gTlVMTCkKQEAgLTEzNCw3ICsxMzIs NyBAQCBMb2NhbEJ1ZmZlckFsbG9jKFNNZ3JSZWxhdGlvbiBzbWdyLCBGb3JrTnVtYmVyIGZvcmtO dW0sIEJsb2NrTnVtYmVyIGJsb2NrTnVtLAogCQlBc3NlcnQoQnVmZmVyVGFnc0VxdWFsKCZidWZI ZHItPnRhZywgJm5ld1RhZykpOwogI2lmZGVmIExCREVCVUcKIAkJZnByaW50ZihzdGRlcnIsICJM QiBBTExPQyAoJXUsJWQsJWQpICVkXG4iLAotCQkJCXNtZ3ItPnNtZ3JfcmxvY2F0b3IubG9jYXRv ci5yZWxOdW1iZXIsIGZvcmtOdW0sIGJsb2NrTnVtLCAtYiAtIDEpOworCQkJCXNmaWxlLT5zbWdy X2xvY2F0b3IubG9jYXRvci5yZWxOdW1iZXIsIHNmaWxlLT5zbWdyX2xvY2F0b3IuZm9ya251bSwg YmxvY2tOdW0sIC1iIC0gMSk7CiAjZW5kaWYKIAkJYnVmX3N0YXRlID0gcGdfYXRvbWljX3JlYWRf dTMyKCZidWZIZHItPnN0YXRlKTsKIApAQCAtMTYyLDcgKzE2MCw3IEBAIExvY2FsQnVmZmVyQWxs b2MoU01nclJlbGF0aW9uIHNtZ3IsIEZvcmtOdW1iZXIgZm9ya051bSwgQmxvY2tOdW1iZXIgYmxv Y2tOdW0sCiAKICNpZmRlZiBMQkRFQlVHCiAJZnByaW50ZihzdGRlcnIsICJMQiBBTExPQyAoJXUs JWQsJWQpICVkXG4iLAotCQkJc21nci0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnJlbE51bWJlciwg Zm9ya051bSwgYmxvY2tOdW0sCisJCQlzZmlsZS0+c21ncl9sb2NhdG9yLmxvY2F0b3IucmVsTnVt YmVyLCBzZmlsZS0+c21ncl9sb2NhdG9yLmZvcmtudW0sIGJsb2NrTnVtLAogCQkJLW5leHRGcmVl TG9jYWxCdWYgLSAxKTsKICNlbmRpZgogCkBAIC0yMTEsMTcgKzIwOSwxNiBAQCBMb2NhbEJ1ZmZl ckFsbG9jKFNNZ3JSZWxhdGlvbiBzbWdyLCBGb3JrTnVtYmVyIGZvcmtOdW0sIEJsb2NrTnVtYmVy IGJsb2NrTnVtLAogCSAqLwogCWlmIChidWZfc3RhdGUgJiBCTV9ESVJUWSkKIAl7Ci0JCVNNZ3JS ZWxhdGlvbiBvcmVsbjsKKwkJU01nckZpbGVIYW5kbGUgb2ZpbGU7CiAJCVBhZ2UJCWxvY2FscGFn ZSA9IChjaGFyICopIExvY2FsQnVmSGRyR2V0QmxvY2soYnVmSGRyKTsKIAotCQkvKiBGaW5kIHNt Z3IgcmVsYXRpb24gZm9yIGJ1ZmZlciAqLwotCQlvcmVsbiA9IHNtZ3JvcGVuKEJ1ZlRhZ0dldFJl bEZpbGVMb2NhdG9yKCZidWZIZHItPnRhZyksIE15QmFja2VuZElkKTsKKwkJLyogRmluZCBzbWdy IGZpbGUgaGFuZGxlIGZvciBidWZmZXIgKi8KKwkJb2ZpbGUgPSBzbWdyb3BlbihCdWZUYWdHZXRS ZWxGaWxlTG9jYXRvcigmYnVmSGRyLT50YWcpLCBNeUJhY2tlbmRJZCwgQnVmVGFnR2V0Rm9ya051 bSgmYnVmSGRyLT50YWcpKTsKIAogCQlQYWdlU2V0Q2hlY2tzdW1JbnBsYWNlKGxvY2FscGFnZSwg YnVmSGRyLT50YWcuYmxvY2tOdW0pOwogCiAJCS8qIEFuZCB3cml0ZS4uLiAqLwotCQlzbWdyd3Jp dGUob3JlbG4sCi0JCQkJICBCdWZUYWdHZXRGb3JrTnVtKCZidWZIZHItPnRhZyksCisJCXNtZ3J3 cml0ZShvZmlsZSwKIAkJCQkgIGJ1Zkhkci0+dGFnLmJsb2NrTnVtLAogCQkJCSAgbG9jYWxwYWdl LAogCQkJCSAgZmFsc2UpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9mcmVlc3Bh Y2UvZnJlZXNwYWNlLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2ZyZWVzcGFjZS9mcmVlc3BhY2Uu YwppbmRleCBhNmIwNTMzMTAzMi4uODYzNmY2YmVjNDMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3N0b3JhZ2UvZnJlZXNwYWNlL2ZyZWVzcGFjZS5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv ZnJlZXNwYWNlL2ZyZWVzcGFjZS5jCkBAIC0yNzEsNyArMjcxLDcgQEAgRnJlZVNwYWNlTWFwUHJl cGFyZVRydW5jYXRlUmVsKFJlbGF0aW9uIHJlbCwgQmxvY2tOdW1iZXIgbmJsb2NrcykKIAkgKiBJ ZiBubyBGU00gaGFzIGJlZW4gY3JlYXRlZCB5ZXQgZm9yIHRoaXMgcmVsYXRpb24sIHRoZXJlJ3Mg bm90aGluZyB0bwogCSAqIHRydW5jYXRlLgogCSAqLwotCWlmICghc21ncmV4aXN0cyhSZWxhdGlv bkdldFNtZ3IocmVsKSwgRlNNX0ZPUktOVU0pKQorCWlmICghc21ncmV4aXN0cyhSZWxhdGlvbkdl dFNtZ3IocmVsLCBGU01fRk9SS05VTSkpKQogCQlyZXR1cm4gSW52YWxpZEJsb2NrTnVtYmVyOwog CiAJLyogR2V0IHRoZSBsb2NhdGlvbiBpbiB0aGUgRlNNIG9mIHRoZSBmaXJzdCByZW1vdmVkIGhl YXAgYmxvY2sgKi8KQEAgLTMxNyw3ICszMTcsNyBAQCBGcmVlU3BhY2VNYXBQcmVwYXJlVHJ1bmNh dGVSZWwoUmVsYXRpb24gcmVsLCBCbG9ja051bWJlciBuYmxvY2tzKQogCWVsc2UKIAl7CiAJCW5l d19uZnNtYmxvY2tzID0gZnNtX2xvZ2ljYWxfdG9fcGh5c2ljYWwoZmlyc3RfcmVtb3ZlZF9hZGRy ZXNzKTsKLQkJaWYgKHNtZ3JuYmxvY2tzKFJlbGF0aW9uR2V0U21ncihyZWwpLCBGU01fRk9SS05V TSkgPD0gbmV3X25mc21ibG9ja3MpCisJCWlmIChzbWdybmJsb2NrcyhSZWxhdGlvbkdldFNtZ3Io cmVsLCBGU01fRk9SS05VTSkpIDw9IG5ld19uZnNtYmxvY2tzKQogCQkJcmV0dXJuIEludmFsaWRC bG9ja051bWJlcjsJLyogbm90aGluZyB0byBkbzsgdGhlIEZTTSB3YXMgYWxyZWFkeQogCQkJCQkJ CQkJCSAqIHNtYWxsZXIgKi8KIAl9CkBAIC01MzIsMTQgKzUzMiwxNCBAQCBmc21fcmVhZGJ1ZihS ZWxhdGlvbiByZWwsIEZTTUFkZHJlc3MgYWRkciwgYm9vbCBleHRlbmQpCiB7CiAJQmxvY2tOdW1i ZXIgYmxrbm8gPSBmc21fbG9naWNhbF90b19waHlzaWNhbChhZGRyKTsKIAlCdWZmZXIJCWJ1ZjsK LQlTTWdyUmVsYXRpb24gcmVsbjsKKwlTTWdyRmlsZUhhbmRsZSBmc21fZmlsZTsKIAogCS8qCiAJ ICogQ2F1dGlvbjogcmUtdXNpbmcgdGhpcyBzbWdyIHBvaW50ZXIgY291bGQgZmFpbCBpZiB0aGUg cmVsY2FjaGUgZW50cnkKIAkgKiBnZXRzIGNsb3NlZC4gIEl0J3Mgc2FmZSBhcyBsb25nIGFzIHdl IG9ubHkgZG8gc21nci1sZXZlbCBvcGVyYXRpb25zCiAJICogYmV0d2VlbiBoZXJlIGFuZCB0aGUg bGFzdCB1c2Ugb2YgdGhlIHBvaW50ZXIuCiAJICovCi0JcmVsbiA9IFJlbGF0aW9uR2V0U21ncihy ZWwpOworCWZzbV9maWxlID0gUmVsYXRpb25HZXRTbWdyKHJlbCwgRlNNX0ZPUktOVU0pOwogCiAJ LyoKIAkgKiBJZiB3ZSBoYXZlbid0IGNhY2hlZCB0aGUgc2l6ZSBvZiB0aGUgRlNNIHlldCwgY2hl Y2sgaXQgZmlyc3QuICBBbHNvCkBAIC01NDcsMTkgKzU0NywxOSBAQCBmc21fcmVhZGJ1ZihSZWxh dGlvbiByZWwsIEZTTUFkZHJlc3MgYWRkciwgYm9vbCBleHRlbmQpCiAJICogdmFsdWUgbWlnaHQg YmUgc3RhbGUuICAoV2Ugc2VuZCBzbWdyIGludmFsIG1lc3NhZ2VzIG9uIHRydW5jYXRpb24sIGJ1 dAogCSAqIG5vdCBvbiBleHRlbnNpb24uKQogCSAqLwotCWlmIChyZWxuLT5zbWdyX2NhY2hlZF9u YmxvY2tzW0ZTTV9GT1JLTlVNXSA9PSBJbnZhbGlkQmxvY2tOdW1iZXIgfHwKLQkJYmxrbm8gPj0g cmVsbi0+c21ncl9jYWNoZWRfbmJsb2Nrc1tGU01fRk9SS05VTV0pCisJaWYgKGZzbV9maWxlLT5z bWdyX2NhY2hlZF9uYmxvY2tzID09IEludmFsaWRCbG9ja051bWJlciB8fAorCQlibGtubyA+PSBm c21fZmlsZS0+c21ncl9jYWNoZWRfbmJsb2NrcykKIAl7CiAJCS8qIEludmFsaWRhdGUgdGhlIGNh Y2hlIHNvIHNtZ3JuYmxvY2tzIGFza3MgdGhlIGtlcm5lbC4gKi8KLQkJcmVsbi0+c21ncl9jYWNo ZWRfbmJsb2Nrc1tGU01fRk9SS05VTV0gPSBJbnZhbGlkQmxvY2tOdW1iZXI7Ci0JCWlmIChzbWdy ZXhpc3RzKHJlbG4sIEZTTV9GT1JLTlVNKSkKLQkJCXNtZ3JuYmxvY2tzKHJlbG4sIEZTTV9GT1JL TlVNKTsKKwkJZnNtX2ZpbGUtPnNtZ3JfY2FjaGVkX25ibG9ja3MgPSBJbnZhbGlkQmxvY2tOdW1i ZXI7CisJCWlmIChzbWdyZXhpc3RzKGZzbV9maWxlKSkKKwkJCXNtZ3JuYmxvY2tzKGZzbV9maWxl KTsKIAkJZWxzZQotCQkJcmVsbi0+c21ncl9jYWNoZWRfbmJsb2Nrc1tGU01fRk9SS05VTV0gPSAw OworCQkJZnNtX2ZpbGUtPnNtZ3JfY2FjaGVkX25ibG9ja3MgPSAwOwogCX0KIAogCS8qIEhhbmRs ZSByZXF1ZXN0cyBiZXlvbmQgRU9GICovCi0JaWYgKGJsa25vID49IHJlbG4tPnNtZ3JfY2FjaGVk X25ibG9ja3NbRlNNX0ZPUktOVU1dKQorCWlmIChibGtubyA+PSBmc21fZmlsZS0+c21ncl9jYWNo ZWRfbmJsb2NrcykKIAl7CiAJCWlmIChleHRlbmQpCiAJCQlmc21fZXh0ZW5kKHJlbCwgYmxrbm8g KyAxKTsKQEAgLTYwOSw3ICs2MDksNyBAQCBmc21fZXh0ZW5kKFJlbGF0aW9uIHJlbCwgQmxvY2tO dW1iZXIgZnNtX25ibG9ja3MpCiB7CiAJQmxvY2tOdW1iZXIgZnNtX25ibG9ja3Nfbm93OwogCVBH QWxpZ25lZEJsb2NrIHBnOwotCVNNZ3JSZWxhdGlvbiByZWxuOworCVNNZ3JGaWxlSGFuZGxlIGZz bV9maWxlOwogCiAJUGFnZUluaXQoKFBhZ2UpIHBnLmRhdGEsIEJMQ0tTWiwgMCk7CiAKQEAgLTYz MCwyOSArNjMwLDI4IEBAIGZzbV9leHRlbmQoUmVsYXRpb24gcmVsLCBCbG9ja051bWJlciBmc21f bmJsb2NrcykKIAkgKiBnZXRzIGNsb3NlZC4gIEl0J3Mgc2FmZSBhcyBsb25nIGFzIHdlIG9ubHkg ZG8gc21nci1sZXZlbCBvcGVyYXRpb25zCiAJICogYmV0d2VlbiBoZXJlIGFuZCB0aGUgbGFzdCB1 c2Ugb2YgdGhlIHBvaW50ZXIuCiAJICovCi0JcmVsbiA9IFJlbGF0aW9uR2V0U21ncihyZWwpOwor CWZzbV9maWxlID0gUmVsYXRpb25HZXRTbWdyKHJlbCwgRlNNX0ZPUktOVU0pOwogCiAJLyoKIAkg KiBDcmVhdGUgdGhlIEZTTSBmaWxlIGZpcnN0IGlmIGl0IGRvZXNuJ3QgZXhpc3QuICBJZgogCSAq IHNtZ3JfY2FjaGVkX25ibG9ja3NbRlNNX0ZPUktOVU1dIGlzIHBvc2l0aXZlIHRoZW4gaXQgbXVz dCBleGlzdCwgbm8KIAkgKiBuZWVkIGZvciBhbiBzbWdyZXhpc3RzIGNhbGwuCiAJICovCi0JaWYg KChyZWxuLT5zbWdyX2NhY2hlZF9uYmxvY2tzW0ZTTV9GT1JLTlVNXSA9PSAwIHx8Ci0JCSByZWxu LT5zbWdyX2NhY2hlZF9uYmxvY2tzW0ZTTV9GT1JLTlVNXSA9PSBJbnZhbGlkQmxvY2tOdW1iZXIp ICYmCi0JCSFzbWdyZXhpc3RzKHJlbG4sIEZTTV9GT1JLTlVNKSkKLQkJc21ncmNyZWF0ZShyZWxu LCBGU01fRk9SS05VTSwgZmFsc2UpOworCWlmICgoZnNtX2ZpbGUtPnNtZ3JfY2FjaGVkX25ibG9j a3MgPT0gMCB8fAorCQkgZnNtX2ZpbGUtPnNtZ3JfY2FjaGVkX25ibG9ja3MgPT0gSW52YWxpZEJs b2NrTnVtYmVyKSAmJgorCQkhc21ncmV4aXN0cyhmc21fZmlsZSkpCisJCXNtZ3JjcmVhdGUoZnNt X2ZpbGUsIGZhbHNlKTsKIAogCS8qIEludmFsaWRhdGUgY2FjaGUgc28gdGhhdCBzbWdybmJsb2Nr cygpIGFza3MgdGhlIGtlcm5lbC4gKi8KLQlyZWxuLT5zbWdyX2NhY2hlZF9uYmxvY2tzW0ZTTV9G T1JLTlVNXSA9IEludmFsaWRCbG9ja051bWJlcjsKLQlmc21fbmJsb2Nrc19ub3cgPSBzbWdybmJs b2NrcyhyZWxuLCBGU01fRk9SS05VTSk7CisJZnNtX2ZpbGUtPnNtZ3JfY2FjaGVkX25ibG9ja3Mg PSBJbnZhbGlkQmxvY2tOdW1iZXI7CisJZnNtX25ibG9ja3Nfbm93ID0gc21ncm5ibG9ja3MoZnNt X2ZpbGUpOwogCiAJLyogRXh0ZW5kIGFzIG5lZWRlZC4gKi8KIAl3aGlsZSAoZnNtX25ibG9ja3Nf bm93IDwgZnNtX25ibG9ja3MpCiAJewogCQlQYWdlU2V0Q2hlY2tzdW1JbnBsYWNlKChQYWdlKSBw Zy5kYXRhLCBmc21fbmJsb2Nrc19ub3cpOwogCi0JCXNtZ3JleHRlbmQocmVsbiwgRlNNX0ZPUktO VU0sIGZzbV9uYmxvY2tzX25vdywKLQkJCQkgICBwZy5kYXRhLCBmYWxzZSk7CisJCXNtZ3JleHRl bmQoZnNtX2ZpbGUsIGZzbV9uYmxvY2tzX25vdywgcGcuZGF0YSwgZmFsc2UpOwogCQlmc21fbmJs b2Nrc19ub3crKzsKIAl9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lw Y2kuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYwppbmRleCBiMjA0ZWNkYmMzMi4u MjQwZjBlMWEzZmYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYwor KysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMKQEAgLTExNyw5ICsxMTcsNyBAQCBD YWxjdWxhdGVTaG1lbVNpemUoaW50ICpudW1fc2VtYXBob3JlcykKIAlzaXplID0gYWRkX3NpemUo c2l6ZSwgWExvZ1ByZWZldGNoU2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBY TE9HU2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBYTG9nUmVjb3ZlcnlTaG1l bVNpemUoKSk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIENMT0dTaG1lbVNpemUoKSk7CiAJc2l6 ZSA9IGFkZF9zaXplKHNpemUsIENvbW1pdFRzU2htZW1TaXplKCkpOwotCXNpemUgPSBhZGRfc2l6 ZShzaXplLCBTVUJUUkFOU1NobWVtU2l6ZSgpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgVHdv UGhhc2VTaG1lbVNpemUoKSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIEJhY2tncm91bmRXb3Jr ZXJTaG1lbVNpemUoKSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIE11bHRpWGFjdFNobWVtU2l6 ZSgpKTsKQEAgLTI0MSw5ICsyMzksNyBAQCBDcmVhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVz KHZvaWQpCiAJWExPR1NobWVtSW5pdCgpOwogCVhMb2dQcmVmZXRjaFNobWVtSW5pdCgpOwogCVhM b2dSZWNvdmVyeVNobWVtSW5pdCgpOwotCUNMT0dTaG1lbUluaXQoKTsKIAlDb21taXRUc1NobWVt SW5pdCgpOwotCVNVQlRSQU5TU2htZW1Jbml0KCk7CiAJTXVsdGlYYWN0U2htZW1Jbml0KCk7CiAJ SW5pdEJ1ZmZlclBvb2woKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdy L3ByZWRpY2F0ZS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3ByZWRpY2F0ZS5jCmluZGV4 IGU4MTIwMTc0ZDYxLi4xNGE3MDMxM2RkMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFn ZS9sbWdyL3ByZWRpY2F0ZS5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcmVkaWNh dGUuYwpAQCAtMzEzLDE0ICszMTMsNiBAQAogCSgodGFyZ2V0aGFzaCkgXiAoKHVpbnQzMikgUG9p bnRlckdldERhdHVtKChwcmVkaWNhdGVsb2NrdGFnKS0+bXlYYWN0KSkgXAogCSA8PCBMT0cyX05V TV9QUkVESUNBVEVMT0NLX1BBUlRJVElPTlMpCiAKLQotLyoKLSAqIFRoZSBTTFJVIGJ1ZmZlciBh cmVhIHRocm91Z2ggd2hpY2ggd2UgYWNjZXNzIHRoZSBvbGQgeGlkcy4KLSAqLwotc3RhdGljIFNs cnVDdGxEYXRhIFNlcmlhbFNscnVDdGxEYXRhOwotCi0jZGVmaW5lIFNlcmlhbFNscnVDdGwJCQko JlNlcmlhbFNscnVDdGxEYXRhKQotCiAjZGVmaW5lIFNFUklBTF9QQUdFU0laRQkJCUJMQ0tTWgog I2RlZmluZSBTRVJJQUxfRU5UUllTSVpFCQkJc2l6ZW9mKFNlckNvbW1pdFNlcU5vKQogI2RlZmlu ZSBTRVJJQUxfRU5UUklFU1BFUlBBR0UJKFNFUklBTF9QQUdFU0laRSAvIFNFUklBTF9FTlRSWVNJ WkUpCkBAIC0zMzIsOCArMzI0LDggQEAgc3RhdGljIFNscnVDdGxEYXRhIFNlcmlhbFNscnVDdGxE YXRhOwogCiAjZGVmaW5lIFNlcmlhbE5leHRQYWdlKHBhZ2UpICgoKHBhZ2UpID49IFNFUklBTF9N QVhfUEFHRSkgPyAwIDogKHBhZ2UpICsgMSkKIAotI2RlZmluZSBTZXJpYWxWYWx1ZShzbG90bm8s IHhpZCkgKCooKFNlckNvbW1pdFNlcU5vICopIFwKLQkoU2VyaWFsU2xydUN0bC0+c2hhcmVkLT5w YWdlX2J1ZmZlcltzbG90bm9dICsgXAorI2RlZmluZSBTZXJpYWxWYWx1ZShidWZmZXIsIHhpZCkg KCooKFNlckNvbW1pdFNlcU5vICopIFwKKwkoQnVmZmVyR2V0UGFnZShidWZmZXIpICsgXAogCSgo KCh1aW50MzIpICh4aWQpKSAlIFNFUklBTF9FTlRSSUVTUEVSUEFHRSkgKiBTRVJJQUxfRU5UUllT SVpFKSkpKQogCiAjZGVmaW5lIFNlcmlhbFBhZ2UoeGlkKQkoKCh1aW50MzIpICh4aWQpKSAvIFNF UklBTF9FTlRSSUVTUEVSUEFHRSkKQEAgLTg2OCwxNyArODYwLDEwIEBAIFNlcmlhbEluaXQodm9p ZCkKIHsKIAlib29sCQlmb3VuZDsKIAotCS8qCi0JICogU2V0IHVwIFNMUlUgbWFuYWdlbWVudCBv ZiB0aGUgcGdfc2VyaWFsIGRhdGEuCi0JICovCi0JU2VyaWFsU2xydUN0bC0+UGFnZVByZWNlZGVz ID0gU2VyaWFsUGFnZVByZWNlZGVzTG9naWNhbGx5OwotCVNpbXBsZUxydUluaXQoU2VyaWFsU2xy dUN0bCwgIlNlcmlhbCIsCi0JCQkJICBOVU1fU0VSSUFMX0JVRkZFUlMsIDAsIFNlcmlhbFNMUlVM b2NrLCAicGdfc2VyaWFsIiwKLQkJCQkgIExXVFJBTkNIRV9TRVJJQUxfQlVGRkVSLCBTWU5DX0hB TkRMRVJfTk9ORSk7CiAjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORwogCVNlcmlhbFBhZ2VQcmVj ZWRlc0xvZ2ljYWxseVVuaXRUZXN0cygpOwogI2VuZGlmCi0JU2xydVBhZ2VQcmVjZWRlc1VuaXRU ZXN0cyhTZXJpYWxTbHJ1Q3RsLCBTRVJJQUxfRU5UUklFU1BFUlBBR0UpOworCVNscnVQYWdlUHJl Y2VkZXNVbml0VGVzdHMoU2VyaWFsUGFnZVByZWNlZGVzTG9naWNhbGx5LCBTRVJJQUxfRU5UUklF U1BFUlBBR0UpOwogCiAJLyoKIAkgKiBDcmVhdGUgb3IgYXR0YWNoIHRvIHRoZSBTZXJpYWxDb250 cm9sIHN0cnVjdHVyZS4KQEAgLTkwOCw5ICs4OTMsOSBAQCBTZXJpYWxBZGQoVHJhbnNhY3Rpb25J ZCB4aWQsIFNlckNvbW1pdFNlcU5vIG1pbkNvbmZsaWN0Q29tbWl0U2VxTm8pCiB7CiAJVHJhbnNh Y3Rpb25JZCB0YWlsWGlkOwogCWludAkJCXRhcmdldFBhZ2U7Ci0JaW50CQkJc2xvdG5vOwogCWlu dAkJCWZpcnN0WmVyb1BhZ2U7CiAJYm9vbAkJaXNOZXdQYWdlOworCUJ1ZmZlcgkJYnVmZmVyOwog CiAJQXNzZXJ0KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKHhpZCkpOwogCkBAIC05NTUsMTYgKzk0MCwy MiBAQCBTZXJpYWxBZGQoVHJhbnNhY3Rpb25JZCB4aWQsIFNlckNvbW1pdFNlcU5vIG1pbkNvbmZs aWN0Q29tbWl0U2VxTm8pCiAJCS8qIEluaXRpYWxpemUgaW50ZXJ2ZW5pbmcgcGFnZXMuICovCiAJ CXdoaWxlIChmaXJzdFplcm9QYWdlICE9IHRhcmdldFBhZ2UpCiAJCXsKLQkJCSh2b2lkKSBTaW1w bGVMcnVaZXJvUGFnZShTZXJpYWxTbHJ1Q3RsLCBmaXJzdFplcm9QYWdlKTsKKwkJCWJ1ZmZlciA9 IFplcm9TbHJ1QnVmZmVyKFNMUlVfU0VSSUFMX0lELCBmaXJzdFplcm9QYWdlKTsKKwkJCU1hcmtC dWZmZXJEaXJ0eShidWZmZXIpOworCQkJVW5sb2NrUmVsZWFzZUJ1ZmZlcihidWZmZXIpOwogCQkJ Zmlyc3RaZXJvUGFnZSA9IFNlcmlhbE5leHRQYWdlKGZpcnN0WmVyb1BhZ2UpOwogCQl9Ci0JCXNs b3RubyA9IFNpbXBsZUxydVplcm9QYWdlKFNlcmlhbFNscnVDdGwsIHRhcmdldFBhZ2UpOworCQli dWZmZXIgPSBaZXJvU2xydUJ1ZmZlcihTTFJVX1NFUklBTF9JRCwgdGFyZ2V0UGFnZSk7CiAJfQog CWVsc2UKLQkJc2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBhZ2UoU2VyaWFsU2xydUN0bCwgdGFyZ2V0 UGFnZSwgdHJ1ZSwgeGlkKTsKKwl7CisJCWJ1ZmZlciA9IFJlYWRTbHJ1QnVmZmVyKFNMUlVfU0VS SUFMX0lELCB0YXJnZXRQYWdlKTsKKwkJTG9ja0J1ZmZlcihidWZmZXIsIEJVRkZFUl9MT0NLX0VY Q0xVU0lWRSk7CisJfQogCi0JU2VyaWFsVmFsdWUoc2xvdG5vLCB4aWQpID0gbWluQ29uZmxpY3RD b21taXRTZXFObzsKLQlTZXJpYWxTbHJ1Q3RsLT5zaGFyZWQtPnBhZ2VfZGlydHlbc2xvdG5vXSA9 IHRydWU7CisJU2VyaWFsVmFsdWUoYnVmZmVyLCB4aWQpID0gbWluQ29uZmxpY3RDb21taXRTZXFO bzsKKwlNYXJrQnVmZmVyRGlydHkoYnVmZmVyKTsKKwlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZl cik7CiAKIAlMV0xvY2tSZWxlYXNlKFNlcmlhbFNMUlVMb2NrKTsKIH0KQEAgLTk4MCw3ICs5NzEs NyBAQCBTZXJpYWxHZXRNaW5Db25mbGljdENvbW1pdFNlcU5vKFRyYW5zYWN0aW9uSWQgeGlkKQog CVRyYW5zYWN0aW9uSWQgaGVhZFhpZDsKIAlUcmFuc2FjdGlvbklkIHRhaWxYaWQ7CiAJU2VyQ29t bWl0U2VxTm8gdmFsOwotCWludAkJCXNsb3RubzsKKwlCdWZmZXIJCWJ1ZmZlcjsKIAogCUFzc2Vy dChUcmFuc2FjdGlvbklkSXNWYWxpZCh4aWQpKTsKIApAQCAtMTAwMiw5ICs5OTMsOSBAQCBTZXJp YWxHZXRNaW5Db25mbGljdENvbW1pdFNlcU5vKFRyYW5zYWN0aW9uSWQgeGlkKQogCSAqIFRoZSBm b2xsb3dpbmcgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aG91dCBob2xkaW5nIFNlcmlhbFNM UlVMb2NrLAogCSAqIGJ1dCB3aWxsIHJldHVybiB3aXRoIHRoYXQgbG9jayBoZWxkLCB3aGljaCBt dXN0IHRoZW4gYmUgcmVsZWFzZWQuCiAJICovCi0Jc2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBhZ2Vf UmVhZE9ubHkoU2VyaWFsU2xydUN0bCwKLQkJCQkJCQkJCQlTZXJpYWxQYWdlKHhpZCksIHhpZCk7 Ci0JdmFsID0gU2VyaWFsVmFsdWUoc2xvdG5vLCB4aWQpOworCWJ1ZmZlciA9IFJlYWRTbHJ1QnVm ZmVyKFNMUlVfU0VSSUFMX0lELCBTZXJpYWxQYWdlKHhpZCkpOworCXZhbCA9IFNlcmlhbFZhbHVl KGJ1ZmZlciwgeGlkKTsKKwlSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CiAJTFdMb2NrUmVsZWFzZShT ZXJpYWxTTFJVTG9jayk7CiAJcmV0dXJuIHZhbDsKIH0KQEAgLTExMjMsMTkgKzExMTQsNyBAQCBD aGVja1BvaW50UHJlZGljYXRlKHZvaWQpCiAJTFdMb2NrUmVsZWFzZShTZXJpYWxTTFJVTG9jayk7 CiAKIAkvKiBUcnVuY2F0ZSBhd2F5IHBhZ2VzIHRoYXQgYXJlIG5vIGxvbmdlciByZXF1aXJlZCAq LwotCVNpbXBsZUxydVRydW5jYXRlKFNlcmlhbFNscnVDdGwsIHRhaWxQYWdlKTsKLQotCS8qCi0J ICogV3JpdGUgZGlydHkgU0xSVSBwYWdlcyB0byBkaXNrCi0JICoKLQkgKiBUaGlzIGlzIG5vdCBh Y3R1YWxseSBuZWNlc3NhcnkgZnJvbSBhIGNvcnJlY3RuZXNzIHBvaW50IG9mIHZpZXcuIFdlIGRv Ci0JICogaXQgbWVyZWx5IGFzIGEgZGVidWdnaW5nIGFpZC4KLQkgKgotCSAqIFdlJ3JlIGRvaW5n IHRoaXMgYWZ0ZXIgdGhlIHRydW5jYXRpb24gdG8gYXZvaWQgd3JpdGluZyBwYWdlcyByaWdodAot CSAqIGJlZm9yZSBkZWxldGluZyB0aGUgZmlsZSBpbiB3aGljaCB0aGV5IHNpdCwgd2hpY2ggd291 bGQgYmUgY29tcGxldGVseQotCSAqIHBvaW50bGVzcy4KLQkgKi8KLQlTaW1wbGVMcnVXcml0ZUFs bChTZXJpYWxTbHJ1Q3RsLCB0cnVlKTsKKwlTaW1wbGVMcnVUcnVuY2F0ZShTTFJVX1NFUklBTF9J RCwgU2VyaWFsUGFnZVByZWNlZGVzTG9naWNhbGx5LCB0YWlsUGFnZSk7CiB9CiAKIC8qLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKi8KQEAgLTEzOTcsNyArMTM3Niw2IEBAIFByZWRpY2F0ZUxvY2tTaG1lbVNpemUo dm9pZCkKIAogCS8qIFNoYXJlZCBtZW1vcnkgc3RydWN0dXJlcyBmb3IgU0xSVSB0cmFja2luZyBv ZiBvbGQgY29tbWl0dGVkIHhpZHMuICovCiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIHNpemVvZihT ZXJpYWxDb250cm9sRGF0YSkpOwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBTaW1wbGVMcnVTaG1l bVNpemUoTlVNX1NFUklBTF9CVUZGRVJTLCAwKSk7CiAKIAlyZXR1cm4gc2l6ZTsKIH0KZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uvc21nci9tZC5jIGIvc3JjL2JhY2tlbmQvc3RvcmFn ZS9zbWdyL21kLmMKaW5kZXggMTRiNmZhMGZkOTAuLmI5YTQxY2I5NDI3IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9zdG9yYWdlL3NtZ3IvbWQuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL3Nt Z3IvbWQuYwpAQCAtNjYsMTAgKzY2LDEwIEBACiAgKglvdXQgdG8gYW4gdW5saW5rZWQgb2xkIGNv cHkgb2YgYSBzZWdtZW50IGZpbGUgdGhhdCB3aWxsIGV2ZW50dWFsbHkKICAqCWRpc2FwcGVhci4K ICAqCi0gKglGaWxlIGRlc2NyaXB0b3JzIGFyZSBzdG9yZWQgaW4gdGhlIHBlci1mb3JrIG1kX3Nl Z19mZHMgYXJyYXlzIGluc2lkZQotICoJU01nclJlbGF0aW9uLiBUaGUgbGVuZ3RoIG9mIHRoZXNl IGFycmF5cyBpcyBzdG9yZWQgaW4gbWRfbnVtX29wZW5fc2Vncy4KLSAqCU5vdGUgdGhhdCBhIGZv cmsncyBtZF9udW1fb3Blbl9zZWdzIGhhdmluZyBhIHNwZWNpZmljIHZhbHVlIGRvZXMgbm90Ci0g KgluZWNlc3NhcmlseSBtZWFuIHRoZSByZWxhdGlvbiBkb2Vzbid0IGhhdmUgYWRkaXRpb25hbCBz ZWdtZW50czsgd2UgbWF5CisgKglGaWxlIGRlc2NyaXB0b3JzIGFyZSBzdG9yZWQgaW4gdGhlIG1k X3NlZ19mZHMgYXJyYXkgaW5zaWRlCisgKglTTWdyRmlsZURhdGEuIFRoZSBsZW5ndGggb2YgdGhl IGFycmF5IGlzIHN0b3JlZCBpbiBtZF9udW1fb3Blbl9zZWdzLgorICoJTm90ZSB0aGF0IG1kX251 bV9vcGVuX3NlZ3MgaGF2aW5nIGEgc3BlY2lmaWMgdmFsdWUgZG9lcyBub3QKKyAqCW5lY2Vzc2Fy aWx5IG1lYW4gdGhlIGZpbGUgZG9lc24ndCBoYXZlIGFkZGl0aW9uYWwgc2VnbWVudHM7IHdlIG1h eQogICoJanVzdCBub3QgaGF2ZSBvcGVuZWQgdGhlIG5leHQgc2VnbWVudCB5ZXQuICAoV2UgY291 bGQgbm90IGhhdmUgImFsbAogICoJc2VnbWVudHMgYXJlIGluIHRoZSBhcnJheSIgYXMgYW4gaW52 YXJpYW50IGFueXdheSwgc2luY2UgYW5vdGhlciBiYWNrZW5kCiAgKgljb3VsZCBleHRlbmQgdGhl IHJlbGF0aW9uIHdoaWxlIHdlIGFyZW4ndCBsb29raW5nLikgIFdlIGRvIG5vdCBoYXZlCkBAIC0x MjEsMjYgKzEyMSwxOCBAQCBzdGF0aWMgTWVtb3J5Q29udGV4dCBNZEN4dDsJCS8qIGNvbnRleHQg Zm9yIGFsbCBNZGZkVmVjIG9iamVjdHMgKi8KIAogCiAvKiBsb2NhbCByb3V0aW5lcyAqLwotc3Rh dGljIHZvaWQgbWR1bmxpbmtmb3JrKFJlbEZpbGVMb2NhdG9yQmFja2VuZCBybG9jYXRvciwgRm9y a051bWJlciBmb3JrbnVtLAotCQkJCQkJIGJvb2wgaXNSZWRvKTsKLXN0YXRpYyBNZGZkVmVjICpt ZG9wZW5mb3JrKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIGludCBiZWhh dmlvcik7Ci1zdGF0aWMgdm9pZCByZWdpc3Rlcl9kaXJ0eV9zZWdtZW50KFNNZ3JSZWxhdGlvbiBy ZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sCi0JCQkJCQkJCSAgIE1kZmRWZWMgKnNlZyk7Ci1zdGF0 aWMgdm9pZCByZWdpc3Rlcl91bmxpbmtfc2VnbWVudChSZWxGaWxlTG9jYXRvckJhY2tlbmQgcmxv Y2F0b3IsIEZvcmtOdW1iZXIgZm9ya251bSwKLQkJCQkJCQkJCUJsb2NrTnVtYmVyIHNlZ25vKTsK LXN0YXRpYyB2b2lkIHJlZ2lzdGVyX2ZvcmdldF9yZXF1ZXN0KFJlbEZpbGVMb2NhdG9yQmFja2Vu ZCBybG9jYXRvciwgRm9ya051bWJlciBmb3JrbnVtLAotCQkJCQkJCQkJQmxvY2tOdW1iZXIgc2Vn bm8pOwotc3RhdGljIHZvaWQgX2ZkdmVjX3Jlc2l6ZShTTWdyUmVsYXRpb24gcmVsbiwKLQkJCQkJ CSAgRm9ya051bWJlciBmb3JrbnVtLAotCQkJCQkJICBpbnQgbnNlZyk7Ci1zdGF0aWMgY2hhciAq X21kZmRfc2VncGF0aChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLAotCQkJ CQkJICAgQmxvY2tOdW1iZXIgc2Vnbm8pOwotc3RhdGljIE1kZmRWZWMgKl9tZGZkX29wZW5zZWco U01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwKK3N0YXRpYyB2b2lkIG1kdW5s aW5rZm9yayhTTWdyRmlsZUxvY2F0b3Igc2xvY2F0b3IsIGJvb2wgaXNSZWRvKTsKK3N0YXRpYyBN ZGZkVmVjICptZG9wZW5mb3JrKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBpbnQgYmVoYXZpb3IpOwor c3RhdGljIHZvaWQgcmVnaXN0ZXJfZGlydHlfc2VnbWVudChTTWdyRmlsZUhhbmRsZSBzZmlsZSwg TWRmZFZlYyAqc2VnKTsKK3N0YXRpYyB2b2lkIHJlZ2lzdGVyX3VubGlua19zZWdtZW50KFNNZ3JG aWxlTG9jYXRvciBzbG9jYXRvciwgQmxvY2tOdW1iZXIgc2Vnbm8pOworc3RhdGljIHZvaWQgcmVn aXN0ZXJfZm9yZ2V0X3JlcXVlc3QoU01nckZpbGVMb2NhdG9yIHNsb2NhdG9yLCBCbG9ja051bWJl ciBzZWdubyk7CitzdGF0aWMgdm9pZCBfZmR2ZWNfcmVzaXplKFNNZ3JGaWxlSGFuZGxlIHNmaWxl LCBpbnQgbnNlZyk7CitzdGF0aWMgY2hhciAqX21kZmRfc2VncGF0aChTTWdyRmlsZUhhbmRsZSBz ZmlsZSwgQmxvY2tOdW1iZXIgc2Vnbm8pOworc3RhdGljIE1kZmRWZWMgKl9tZGZkX29wZW5zZWco U01nckZpbGVIYW5kbGUgc2ZpbGUsCiAJCQkJCQkJICBCbG9ja051bWJlciBzZWdubywgaW50IG9m bGFncyk7Ci1zdGF0aWMgTWRmZFZlYyAqX21kZmRfZ2V0c2VnKFNNZ3JSZWxhdGlvbiByZWxuLCBG b3JrTnVtYmVyIGZvcmtudW0sCitzdGF0aWMgTWRmZFZlYyAqX21kZmRfZ2V0c2VnKFNNZ3JGaWxl SGFuZGxlIHNmaWxlLAogCQkJCQkJCSBCbG9ja051bWJlciBibGtubywgYm9vbCBza2lwRnN5bmMs IGludCBiZWhhdmlvcik7Ci1zdGF0aWMgQmxvY2tOdW1iZXIgX21kbmJsb2NrcyhTTWdyUmVsYXRp b24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLAotCQkJCQkJCSAgTWRmZFZlYyAqc2VnKTsKK3N0 YXRpYyBCbG9ja051bWJlciBfbWRuYmxvY2tzKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBNZGZkVmVj ICpzZWcpOwogCiAKIC8qCkBAIC0xNjAsNyArMTUyLDcgQEAgbWRpbml0KHZvaWQpCiAgKiBOb3Rl OiB0aGlzIHdpbGwgcmV0dXJuIHRydWUgZm9yIGxpbmdlcmluZyBmaWxlcywgd2l0aCBwZW5kaW5n IGRlbGV0aW9ucwogICovCiBib29sCi1tZGV4aXN0cyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051 bWJlciBmb3JrbnVtKQorbWRleGlzdHMoU01nckZpbGVIYW5kbGUgc2ZpbGUpCiB7CiAJLyoKIAkg KiBDbG9zZSBpdCBmaXJzdCwgdG8gZW5zdXJlIHRoYXQgd2Ugbm90aWNlIGlmIHRoZSBmb3JrIGhh cyBiZWVuIHVubGlua2VkCkBAIC0xNjgsOSArMTYwLDkgQEAgbWRleGlzdHMoU01nclJlbGF0aW9u IHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSkKIAkgKiB3aGljaCBhbHJlYWR5IGNsb3NlcyByZWxh dGlvbnMgd2hlbiBkcm9wcGluZyB0aGVtLgogCSAqLwogCWlmICghSW5SZWNvdmVyeSkKLQkJbWRj bG9zZShyZWxuLCBmb3JrbnVtKTsKKwkJbWRjbG9zZShzZmlsZSk7CiAKLQlyZXR1cm4gKG1kb3Bl bmZvcmsocmVsbiwgZm9ya251bSwgRVhURU5TSU9OX1JFVFVSTl9OVUxMKSAhPSBOVUxMKTsKKwly ZXR1cm4gKG1kb3BlbmZvcmsoc2ZpbGUsIEVYVEVOU0lPTl9SRVRVUk5fTlVMTCkgIT0gTlVMTCk7 CiB9CiAKIC8qCkBAIC0xNzksMTYgKzE3MSwxNiBAQCBtZGV4aXN0cyhTTWdyUmVsYXRpb24gcmVs biwgRm9ya051bWJlciBmb3JrbnVtKQogICogSWYgaXNSZWRvIGlzIHRydWUsIGl0J3Mgb2theSBm b3IgdGhlIHJlbGF0aW9uIHRvIGV4aXN0IGFscmVhZHkuCiAgKi8KIHZvaWQKLW1kY3JlYXRlKFNN Z3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIGJvb2wgaXNSZWRvKQorbWRjcmVh dGUoU01nckZpbGVIYW5kbGUgc2ZpbGUsIGJvb2wgaXNSZWRvKQogewogCU1kZmRWZWMgICAgKm1k ZmQ7CiAJY2hhcgkgICAqcGF0aDsKIAlGaWxlCQlmZDsKIAotCWlmIChpc1JlZG8gJiYgcmVsbi0+ bWRfbnVtX29wZW5fc2Vnc1tmb3JrbnVtXSA+IDApCisJaWYgKGlzUmVkbyAmJiBzZmlsZS0+bWRf bnVtX29wZW5fc2VncyA+IDApCiAJCXJldHVybjsJCQkJCS8qIGNyZWF0ZWQgYW5kIG9wZW5lZCBh bHJlYWR5Li4uICovCiAKLQlBc3NlcnQocmVsbi0+bWRfbnVtX29wZW5fc2Vnc1tmb3JrbnVtXSA9 PSAwKTsKKwlBc3NlcnQoc2ZpbGUtPm1kX251bV9vcGVuX3NlZ3MgPT0gMCk7CiAKIAkvKgogCSAq IFdlIG1heSBiZSB1c2luZyB0aGUgdGFyZ2V0IHRhYmxlIHNwYWNlIGZvciB0aGUgZmlyc3QgdGlt ZSBpbiB0aGlzCkBAIC0xOTksMTEgKzE5MSwxNCBAQCBtZGNyZWF0ZShTTWdyUmVsYXRpb24gcmVs biwgRm9ya051bWJlciBmb3JrbnVtLCBib29sIGlzUmVkbykKIAkgKiBzaG91bGQgYmUgaGVyZSBh bmQgbm90IGluIGNvbW1hbmRzL3RhYmxlc3BhY2UuYz8gIEJ1dCB0aGF0IHdvdWxkIGltcGx5CiAJ ICogaW1wb3J0aW5nIGEgbG90IG9mIHN0dWZmIHRoYXQgc21nci5jIG91Z2h0bid0IGtub3csIGVp dGhlci4KIAkgKi8KLQlUYWJsZXNwYWNlQ3JlYXRlRGJzcGFjZShyZWxuLT5zbWdyX3Jsb2NhdG9y LmxvY2F0b3Iuc3BjT2lkLAotCQkJCQkJCXJlbG4tPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5kYk9p ZCwKLQkJCQkJCQlpc1JlZG8pOworCWlmIChzZmlsZS0+c21ncl9sb2NhdG9yLmxvY2F0b3Iuc3Bj T2lkICE9IFNMUlVfU1BDX09JRCkKKwl7CisJCVRhYmxlc3BhY2VDcmVhdGVEYnNwYWNlKHNmaWxl LT5zbWdyX2xvY2F0b3IubG9jYXRvci5zcGNPaWQsCisJCQkJCQkJCXNmaWxlLT5zbWdyX2xvY2F0 b3IubG9jYXRvci5kYk9pZCwKKwkJCQkJCQkJaXNSZWRvKTsKKwl9CiAKLQlwYXRoID0gcmVscGF0 aChyZWxuLT5zbWdyX3Jsb2NhdG9yLCBmb3JrbnVtKTsKKwlwYXRoID0gc21ncmZpbGVwYXRoKHNm aWxlLT5zbWdyX2xvY2F0b3IpOwogCiAJZmQgPSBQYXRoTmFtZU9wZW5GaWxlKHBhdGgsIE9fUkRX UiB8IE9fQ1JFQVQgfCBPX0VYQ0wgfCBQR19CSU5BUlkpOwogCkBAIC0yMjUsOCArMjIwLDggQEAg bWRjcmVhdGUoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgYm9vbCBpc1Jl ZG8pCiAKIAlwZnJlZShwYXRoKTsKIAotCV9mZHZlY19yZXNpemUocmVsbiwgZm9ya251bSwgMSk7 Ci0JbWRmZCA9ICZyZWxuLT5tZF9zZWdfZmRzW2ZvcmtudW1dWzBdOworCV9mZHZlY19yZXNpemUo c2ZpbGUsIDEpOworCW1kZmQgPSAmc2ZpbGUtPm1kX3NlZ19mZHNbMF07CiAJbWRmZC0+bWRmZF92 ZmQgPSBmZDsKIAltZGZkLT5tZGZkX3NlZ25vID0gMDsKIH0KQEAgLTI5MywxNiArMjg4LDkgQEAg bWRjcmVhdGUoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgYm9vbCBpc1Jl ZG8pCiAgKiB3ZSBhcmUgdXN1YWxseSBub3QgaW4gYSB0cmFuc2FjdGlvbiBhbnltb3JlIHdoZW4g dGhpcyBpcyBjYWxsZWQuCiAgKi8KIHZvaWQKLW1kdW5saW5rKFJlbEZpbGVMb2NhdG9yQmFja2Vu ZCBybG9jYXRvciwgRm9ya051bWJlciBmb3JrbnVtLCBib29sIGlzUmVkbykKK21kdW5saW5rKFNN Z3JGaWxlTG9jYXRvciBzbG9jYXRvciwgYm9vbCBpc1JlZG8pCiB7Ci0JLyogTm93IGRvIHRoZSBw ZXItZm9yayB3b3JrICovCi0JaWYgKGZvcmtudW0gPT0gSW52YWxpZEZvcmtOdW1iZXIpCi0Jewot CQlmb3IgKGZvcmtudW0gPSAwOyBmb3JrbnVtIDw9IE1BWF9GT1JLTlVNOyBmb3JrbnVtKyspCi0J CQltZHVubGlua2ZvcmsocmxvY2F0b3IsIGZvcmtudW0sIGlzUmVkbyk7Ci0JfQotCWVsc2UKLQkJ bWR1bmxpbmtmb3JrKHJsb2NhdG9yLCBmb3JrbnVtLCBpc1JlZG8pOworCW1kdW5saW5rZm9yayhz bG9jYXRvciwgaXNSZWRvKTsKIH0KIAogLyoKQEAgLTMzMCwyOSArMzE4LDI5IEBAIGRvX3RydW5j YXRlKGNvbnN0IGNoYXIgKnBhdGgpCiB9CiAKIHN0YXRpYyB2b2lkCi1tZHVubGlua2ZvcmsoUmVs RmlsZUxvY2F0b3JCYWNrZW5kIHJsb2NhdG9yLCBGb3JrTnVtYmVyIGZvcmtudW0sIGJvb2wgaXNS ZWRvKQorbWR1bmxpbmtmb3JrKFNNZ3JGaWxlTG9jYXRvciBzbG9jYXRvciwgYm9vbCBpc1JlZG8p CiB7CiAJY2hhcgkgICAqcGF0aDsKIAlpbnQJCQlyZXQ7CiAJaW50CQkJc2F2ZV9lcnJubzsKIAot CXBhdGggPSByZWxwYXRoKHJsb2NhdG9yLCBmb3JrbnVtKTsKKwlwYXRoID0gc21ncmZpbGVwYXRo KHNsb2NhdG9yKTsKIAogCS8qCiAJICogVHJ1bmNhdGUgYW5kIHRoZW4gdW5saW5rIHRoZSBmaXJz dCBzZWdtZW50LCBvciBqdXN0IHJlZ2lzdGVyIGEgcmVxdWVzdAogCSAqIHRvIHVubGluayBpdCBs YXRlciwgYXMgZGVzY3JpYmVkIGluIHRoZSBjb21tZW50cyBmb3IgbWR1bmxpbmsoKS4KIAkgKi8K LQlpZiAoaXNSZWRvIHx8IElzQmluYXJ5VXBncmFkZSB8fCBmb3JrbnVtICE9IE1BSU5fRk9SS05V TSB8fAotCQlSZWxGaWxlTG9jYXRvckJhY2tlbmRJc1RlbXAocmxvY2F0b3IpKQorCWlmIChpc1Jl ZG8gfHwgSXNCaW5hcnlVcGdyYWRlIHx8IHNsb2NhdG9yLmZvcmtudW0gIT0gTUFJTl9GT1JLTlVN IHx8CisJCVNNZ3JGaWxlTG9jYXRvcklzVGVtcChzbG9jYXRvcikpCiAJewotCQlpZiAoIVJlbEZp bGVMb2NhdG9yQmFja2VuZElzVGVtcChybG9jYXRvcikpCisJCWlmICghU01nckZpbGVMb2NhdG9y SXNUZW1wKHNsb2NhdG9yKSkKIAkJewogCQkJLyogUHJldmVudCBvdGhlciBiYWNrZW5kcycgZmRz IGZyb20gaG9sZGluZyBvbiB0byB0aGUgZGlzayBzcGFjZSAqLwogCQkJcmV0ID0gZG9fdHJ1bmNh dGUocGF0aCk7CiAKIAkJCS8qIEZvcmdldCBhbnkgcGVuZGluZyBzeW5jIHJlcXVlc3RzIGZvciB0 aGUgZmlyc3Qgc2VnbWVudCAqLwogCQkJc2F2ZV9lcnJubyA9IGVycm5vOwotCQkJcmVnaXN0ZXJf Zm9yZ2V0X3JlcXVlc3QocmxvY2F0b3IsIGZvcmtudW0sIDAgLyogZmlyc3Qgc2VnICovICk7CisJ CQlyZWdpc3Rlcl9mb3JnZXRfcmVxdWVzdChzbG9jYXRvciwgMCAvKiBmaXJzdCBzZWcgKi8gKTsK IAkJCWVycm5vID0gc2F2ZV9lcnJubzsKIAkJfQogCQllbHNlCkBAIC0zNzksNyArMzY3LDcgQEAg bWR1bmxpbmtmb3JrKFJlbEZpbGVMb2NhdG9yQmFja2VuZCBybG9jYXRvciwgRm9ya051bWJlciBm b3JrbnVtLCBib29sIGlzUmVkbykKIAogCQkvKiBSZWdpc3RlciByZXF1ZXN0IHRvIHVubGluayBm aXJzdCBzZWdtZW50IGxhdGVyICovCiAJCXNhdmVfZXJybm8gPSBlcnJubzsKLQkJcmVnaXN0ZXJf dW5saW5rX3NlZ21lbnQocmxvY2F0b3IsIGZvcmtudW0sIDAgLyogZmlyc3Qgc2VnICovICk7CisJ CXJlZ2lzdGVyX3VubGlua19zZWdtZW50KHNsb2NhdG9yLCAwIC8qIGZpcnN0IHNlZyAqLyApOwog CQllcnJubyA9IHNhdmVfZXJybm87CiAJfQogCkBAIC00MDQsNyArMzkyLDcgQEAgbWR1bmxpbmtm b3JrKFJlbEZpbGVMb2NhdG9yQmFja2VuZCBybG9jYXRvciwgRm9ya051bWJlciBmb3JrbnVtLCBi b29sIGlzUmVkbykKIAkJewogCQkJc3ByaW50ZihzZWdwYXRoLCAiJXMuJXUiLCBwYXRoLCBzZWdu byk7CiAKLQkJCWlmICghUmVsRmlsZUxvY2F0b3JCYWNrZW5kSXNUZW1wKHJsb2NhdG9yKSkKKwkJ CWlmICghU01nckZpbGVMb2NhdG9ySXNUZW1wKHNsb2NhdG9yKSkKIAkJCXsKIAkJCQkvKgogCQkJ CSAqIFByZXZlbnQgb3RoZXIgYmFja2VuZHMnIGZkcyBmcm9tIGhvbGRpbmcgb24gdG8gdGhlIGRp c2sKQEAgLTQxNyw3ICs0MDUsNyBAQCBtZHVubGlua2ZvcmsoUmVsRmlsZUxvY2F0b3JCYWNrZW5k IHJsb2NhdG9yLCBGb3JrTnVtYmVyIGZvcmtudW0sIGJvb2wgaXNSZWRvKQogCQkJCSAqIEZvcmdl dCBhbnkgcGVuZGluZyBzeW5jIHJlcXVlc3RzIGZvciB0aGlzIHNlZ21lbnQgYmVmb3JlIHdlCiAJ CQkJICogdHJ5IHRvIHVubGluay4KIAkJCQkgKi8KLQkJCQlyZWdpc3Rlcl9mb3JnZXRfcmVxdWVz dChybG9jYXRvciwgZm9ya251bSwgc2Vnbm8pOworCQkJCXJlZ2lzdGVyX2ZvcmdldF9yZXF1ZXN0 KHNsb2NhdG9yLCBzZWdubyk7CiAJCQl9CiAKIAkJCWlmICh1bmxpbmsoc2VncGF0aCkgPCAwKQpA QCAtNDQ2LDcgKzQzNCw3IEBAIG1kdW5saW5rZm9yayhSZWxGaWxlTG9jYXRvckJhY2tlbmQgcmxv Y2F0b3IsIEZvcmtOdW1iZXIgZm9ya251bSwgYm9vbCBpc1JlZG8pCiAgKgkJY2F1c2VzIGludGVy dmVuaW5nIGZpbGUgc3BhY2UgdG8gYmVjb21lIGZpbGxlZCB3aXRoIHplcm9lcy4KICAqLwogdm9p ZAotbWRleHRlbmQoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tO dW1iZXIgYmxvY2tudW0sCittZGV4dGVuZChTTWdyRmlsZUhhbmRsZSBzZmlsZSwgQmxvY2tOdW1i ZXIgYmxvY2tudW0sCiAJCSBjaGFyICpidWZmZXIsIGJvb2wgc2tpcEZzeW5jKQogewogCW9mZl90 CQlzZWVrcG9zOwpAQCAtNDU1LDcgKzQ0Myw3IEBAIG1kZXh0ZW5kKFNNZ3JSZWxhdGlvbiByZWxu LCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGJsb2NrbnVtLAogCiAJLyogVGhpcyBh c3NlcnQgaXMgdG9vIGV4cGVuc2l2ZSB0byBoYXZlIG9uIG5vcm1hbGx5IC4uLiAqLwogI2lmZGVm IENIRUNLX1dSSVRFX1ZTX0VYVEVORAotCUFzc2VydChibG9ja251bSA+PSBtZG5ibG9ja3MocmVs biwgZm9ya251bSkpOworCUFzc2VydChibG9ja251bSA+PSBtZG5ibG9ja3Moc2ZpbGUpKTsKICNl bmRpZgogCiAJLyoKQEAgLTQ2OCwxMCArNDU2LDEwIEBAIG1kZXh0ZW5kKFNNZ3JSZWxhdGlvbiBy ZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGJsb2NrbnVtLAogCQllcmVwb3J0 KEVSUk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfUFJPR1JBTV9MSU1JVF9FWENFRURFRCksCiAJ CQkJIGVycm1zZygiY2Fubm90IGV4dGVuZCBmaWxlIFwiJXNcIiBiZXlvbmQgJXUgYmxvY2tzIiwK LQkJCQkJCXJlbHBhdGgocmVsbi0+c21ncl9ybG9jYXRvciwgZm9ya251bSksCisJCQkJCQlzbWdy ZmlsZXBhdGgoc2ZpbGUtPnNtZ3JfbG9jYXRvciksCiAJCQkJCQlJbnZhbGlkQmxvY2tOdW1iZXIp KSk7CiAKLQl2ID0gX21kZmRfZ2V0c2VnKHJlbG4sIGZvcmtudW0sIGJsb2NrbnVtLCBza2lwRnN5 bmMsIEVYVEVOU0lPTl9DUkVBVEUpOworCXYgPSBfbWRmZF9nZXRzZWcoc2ZpbGUsIGJsb2NrbnVt LCBza2lwRnN5bmMsIEVYVEVOU0lPTl9DUkVBVEUpOwogCiAJc2Vla3BvcyA9IChvZmZfdCkgQkxD S1NaICogKGJsb2NrbnVtICUgKChCbG9ja051bWJlcikgUkVMU0VHX1NJWkUpKTsKIApAQCAtNDk0 LDEwICs0ODIsMTAgQEAgbWRleHRlbmQoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9y a251bSwgQmxvY2tOdW1iZXIgYmxvY2tudW0sCiAJCQkJIGVycmhpbnQoIkNoZWNrIGZyZWUgZGlz ayBzcGFjZS4iKSkpOwogCX0KIAotCWlmICghc2tpcEZzeW5jICYmICFTbWdySXNUZW1wKHJlbG4p KQotCQlyZWdpc3Rlcl9kaXJ0eV9zZWdtZW50KHJlbG4sIGZvcmtudW0sIHYpOworCWlmICghc2tp cEZzeW5jICYmICFTbWdySXNUZW1wKHNmaWxlKSkKKwkJcmVnaXN0ZXJfZGlydHlfc2VnbWVudChz ZmlsZSwgdik7CiAKLQlBc3NlcnQoX21kbmJsb2NrcyhyZWxuLCBmb3JrbnVtLCB2KSA8PSAoKEJs b2NrTnVtYmVyKSBSRUxTRUdfU0laRSkpOworCUFzc2VydChfbWRuYmxvY2tzKHNmaWxlLCB2KSA8 PSAoKEJsb2NrTnVtYmVyKSBSRUxTRUdfU0laRSkpOwogfQogCiAvKgpAQCAtNTExLDE3ICs0OTks MTcgQEAgbWRleHRlbmQoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxv Y2tOdW1iZXIgYmxvY2tudW0sCiAgKiBpbnZlbnQgb25lIG91dCBvZiB3aG9sZSBjbG90aC4KICAq Lwogc3RhdGljIE1kZmRWZWMgKgotbWRvcGVuZm9yayhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051 bWJlciBmb3JrbnVtLCBpbnQgYmVoYXZpb3IpCittZG9wZW5mb3JrKFNNZ3JGaWxlSGFuZGxlIHNm aWxlLCBpbnQgYmVoYXZpb3IpCiB7CiAJTWRmZFZlYyAgICAqbWRmZDsKIAljaGFyCSAgICpwYXRo OwogCUZpbGUJCWZkOwogCiAJLyogTm8gd29yayBpZiBhbHJlYWR5IG9wZW4gKi8KLQlpZiAocmVs bi0+bWRfbnVtX29wZW5fc2Vnc1tmb3JrbnVtXSA+IDApCi0JCXJldHVybiAmcmVsbi0+bWRfc2Vn X2Zkc1tmb3JrbnVtXVswXTsKKwlpZiAoc2ZpbGUtPm1kX251bV9vcGVuX3NlZ3MgPiAwKQorCQly ZXR1cm4gJnNmaWxlLT5tZF9zZWdfZmRzWzBdOwogCi0JcGF0aCA9IHJlbHBhdGgocmVsbi0+c21n cl9ybG9jYXRvciwgZm9ya251bSk7CisJcGF0aCA9IHNtZ3JmaWxlcGF0aChzZmlsZS0+c21ncl9s b2NhdG9yKTsKIAogCWZkID0gUGF0aE5hbWVPcGVuRmlsZShwYXRoLCBPX1JEV1IgfCBQR19CSU5B UlkpOwogCkBAIC01NDAsMTIgKzUyOCwxMiBAQCBtZG9wZW5mb3JrKFNNZ3JSZWxhdGlvbiByZWxu LCBGb3JrTnVtYmVyIGZvcmtudW0sIGludCBiZWhhdmlvcikKIAogCXBmcmVlKHBhdGgpOwogCi0J X2ZkdmVjX3Jlc2l6ZShyZWxuLCBmb3JrbnVtLCAxKTsKLQltZGZkID0gJnJlbG4tPm1kX3NlZ19m ZHNbZm9ya251bV1bMF07CisJX2ZkdmVjX3Jlc2l6ZShzZmlsZSwgMSk7CisJbWRmZCA9ICZzZmls ZS0+bWRfc2VnX2Zkc1swXTsKIAltZGZkLT5tZGZkX3ZmZCA9IGZkOwogCW1kZmQtPm1kZmRfc2Vn bm8gPSAwOwogCi0JQXNzZXJ0KF9tZG5ibG9ja3MocmVsbiwgZm9ya251bSwgbWRmZCkgPD0gKChC bG9ja051bWJlcikgUkVMU0VHX1NJWkUpKTsKKwlBc3NlcnQoX21kbmJsb2NrcyhzZmlsZSwgbWRm ZCkgPD0gKChCbG9ja051bWJlcikgUkVMU0VHX1NJWkUpKTsKIAogCXJldHVybiBtZGZkOwogfQpA QCAtNTU0LDIwICs1NDIsMTkgQEAgbWRvcGVuZm9yayhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051 bWJlciBmb3JrbnVtLCBpbnQgYmVoYXZpb3IpCiAgKiAgbWRvcGVuKCkgLS0gSW5pdGlhbGl6ZSBu ZXdseS1vcGVuZWQgcmVsYXRpb24uCiAgKi8KIHZvaWQKLW1kb3BlbihTTWdyUmVsYXRpb24gcmVs bikKK21kb3BlbihTTWdyRmlsZUhhbmRsZSBzZmlsZSkKIHsKIAkvKiBtYXJrIGl0IG5vdCBvcGVu ICovCi0JZm9yIChpbnQgZm9ya251bSA9IDA7IGZvcmtudW0gPD0gTUFYX0ZPUktOVU07IGZvcmtu dW0rKykKLQkJcmVsbi0+bWRfbnVtX29wZW5fc2Vnc1tmb3JrbnVtXSA9IDA7CisJc2ZpbGUtPm1k X251bV9vcGVuX3NlZ3MgPSAwOwogfQogCiAvKgogICoJbWRjbG9zZSgpIC0tIENsb3NlIHRoZSBz cGVjaWZpZWQgcmVsYXRpb24sIGlmIGl0IGlzbid0IGNsb3NlZCBhbHJlYWR5LgogICovCiB2b2lk Ci1tZGNsb3NlKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0pCittZGNsb3Nl KFNNZ3JGaWxlSGFuZGxlIHNmaWxlKQogewotCWludAkJCW5vcGVuc2VncyA9IHJlbG4tPm1kX251 bV9vcGVuX3NlZ3NbZm9ya251bV07CisJaW50CQkJbm9wZW5zZWdzID0gc2ZpbGUtPm1kX251bV9v cGVuX3NlZ3M7CiAKIAkvKiBObyB3b3JrIGlmIGFscmVhZHkgY2xvc2VkICovCiAJaWYgKG5vcGVu c2VncyA9PSAwKQpAQCAtNTc2LDEwICs1NjMsMTAgQEAgbWRjbG9zZShTTWdyUmVsYXRpb24gcmVs biwgRm9ya051bWJlciBmb3JrbnVtKQogCS8qIGNsb3NlIHNlZ21lbnRzIHN0YXJ0aW5nIGZyb20g dGhlIGVuZCAqLwogCXdoaWxlIChub3BlbnNlZ3MgPiAwKQogCXsKLQkJTWRmZFZlYyAgICAqdiA9 ICZyZWxuLT5tZF9zZWdfZmRzW2ZvcmtudW1dW25vcGVuc2VncyAtIDFdOworCQlNZGZkVmVjICAg ICp2ID0gJnNmaWxlLT5tZF9zZWdfZmRzW25vcGVuc2VncyAtIDFdOwogCiAJCUZpbGVDbG9zZSh2 LT5tZGZkX3ZmZCk7Ci0JCV9mZHZlY19yZXNpemUocmVsbiwgZm9ya251bSwgbm9wZW5zZWdzIC0g MSk7CisJCV9mZHZlY19yZXNpemUoc2ZpbGUsIG5vcGVuc2VncyAtIDEpOwogCQlub3BlbnNlZ3Mt LTsKIAl9CiB9CkBAIC01ODgsMTMgKzU3NSwxMyBAQCBtZGNsb3NlKFNNZ3JSZWxhdGlvbiByZWxu LCBGb3JrTnVtYmVyIGZvcmtudW0pCiAgKgltZHByZWZldGNoKCkgLS0gSW5pdGlhdGUgYXN5bmNo cm9ub3VzIHJlYWQgb2YgdGhlIHNwZWNpZmllZCBibG9jayBvZiBhIHJlbGF0aW9uCiAgKi8KIGJv b2wKLW1kcHJlZmV0Y2goU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxv Y2tOdW1iZXIgYmxvY2tudW0pCittZHByZWZldGNoKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBCbG9j a051bWJlciBibG9ja251bSkKIHsKICNpZmRlZiBVU0VfUFJFRkVUQ0gKIAlvZmZfdAkJc2Vla3Bv czsKIAlNZGZkVmVjICAgICp2OwogCi0JdiA9IF9tZGZkX2dldHNlZyhyZWxuLCBmb3JrbnVtLCBi bG9ja251bSwgZmFsc2UsCisJdiA9IF9tZGZkX2dldHNlZyhzZmlsZSwgYmxvY2tudW0sIGZhbHNl LAogCQkJCQkgSW5SZWNvdmVyeSA/IEVYVEVOU0lPTl9SRVRVUk5fTlVMTCA6IEVYVEVOU0lPTl9G QUlMKTsKIAlpZiAodiA9PSBOVUxMKQogCQlyZXR1cm4gZmFsc2U7CkBAIC02MTYsOCArNjAzLDcg QEAgbWRwcmVmZXRjaChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9j a051bWJlciBibG9ja251bSkKICAqIGNvbnNpZGVyYWJseSBtb3JlIGVmZmljaWVudCB0aGFuIGRv aW5nIHNvIGluZGl2aWR1YWxseS4KICAqLwogdm9pZAotbWR3cml0ZWJhY2soU01nclJlbGF0aW9u IHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwKLQkJCUJsb2NrTnVtYmVyIGJsb2NrbnVtLCBCbG9j a051bWJlciBuYmxvY2tzKQorbWR3cml0ZWJhY2soU01nckZpbGVIYW5kbGUgc2ZpbGUsIEJsb2Nr TnVtYmVyIGJsb2NrbnVtLCBCbG9ja051bWJlciBuYmxvY2tzKQogewogCS8qCiAJICogSXNzdWUg Zmx1c2ggcmVxdWVzdHMgaW4gYXMgZmV3IHJlcXVlc3RzIGFzIHBvc3NpYmxlOyBoYXZlIHRvIHNw bGl0IGF0CkBAIC02MzEsNyArNjE3LDcgQEAgbWR3cml0ZWJhY2soU01nclJlbGF0aW9uIHJlbG4s IEZvcmtOdW1iZXIgZm9ya251bSwKIAkJaW50CQkJc2VnbnVtX3N0YXJ0LAogCQkJCQlzZWdudW1f ZW5kOwogCi0JCXYgPSBfbWRmZF9nZXRzZWcocmVsbiwgZm9ya251bSwgYmxvY2tudW0sIHRydWUg Lyogbm90IHVzZWQgKi8gLAorCQl2ID0gX21kZmRfZ2V0c2VnKHNmaWxlLCBibG9ja251bSwgdHJ1 ZSAvKiBub3QgdXNlZCAqLyAsCiAJCQkJCQkgRVhURU5TSU9OX0RPTlRfT1BFTik7CiAKIAkJLyoK QEAgLTY2OCwyMCArNjU0LDIxIEBAIG1kd3JpdGViYWNrKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3Jr TnVtYmVyIGZvcmtudW0sCiAgKgltZHJlYWQoKSAtLSBSZWFkIHRoZSBzcGVjaWZpZWQgYmxvY2sg ZnJvbSBhIHJlbGF0aW9uLgogICovCiB2b2lkCi1tZHJlYWQoU01nclJlbGF0aW9uIHJlbG4sIEZv cmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgYmxvY2tudW0sCittZHJlYWQoU01nckZpbGVI YW5kbGUgc2ZpbGUsIEJsb2NrTnVtYmVyIGJsb2NrbnVtLAogCSAgIGNoYXIgKmJ1ZmZlcikKIHsK IAlvZmZfdAkJc2Vla3BvczsKIAlpbnQJCQluYnl0ZXM7CiAJTWRmZFZlYyAgICAqdjsKIAotCVRS QUNFX1BPU1RHUkVTUUxfU01HUl9NRF9SRUFEX1NUQVJUKGZvcmtudW0sIGJsb2NrbnVtLAotCQkJ CQkJCQkJCXJlbG4tPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5zcGNPaWQsCi0JCQkJCQkJCQkJcmVs bi0+c21ncl9ybG9jYXRvci5sb2NhdG9yLmRiT2lkLAotCQkJCQkJCQkJCXJlbG4tPnNtZ3Jfcmxv Y2F0b3IubG9jYXRvci5yZWxOdW1iZXIsCi0JCQkJCQkJCQkJcmVsbi0+c21ncl9ybG9jYXRvci5i YWNrZW5kKTsKKwlUUkFDRV9QT1NUR1JFU1FMX1NNR1JfTURfUkVBRF9TVEFSVChzZmlsZS0+c21n cl9mb3JrbnVtLAorCQkJCQkJCQkJCWJsb2NrbnVtLAorCQkJCQkJCQkJCXNmaWxlLT5zbWdyX3Js b2NhdG9yLmxvY2F0b3Iuc3BjT2lkLAorCQkJCQkJCQkJCXNmaWxlLT5zbWdyX3Jsb2NhdG9yLmxv Y2F0b3IuZGJPaWQsCisJCQkJCQkJCQkJc2ZpbGUtPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5yZWxO dW1iZXIsCisJCQkJCQkJCQkJc2ZpbGUtPnNtZ3JfcmxvY2F0b3IuYmFja2VuZCk7CiAKLQl2ID0g X21kZmRfZ2V0c2VnKHJlbG4sIGZvcmtudW0sIGJsb2NrbnVtLCBmYWxzZSwKKwl2ID0gX21kZmRf Z2V0c2VnKHNmaWxlLCBibG9ja251bSwgZmFsc2UsCiAJCQkJCSBFWFRFTlNJT05fRkFJTCB8IEVY VEVOU0lPTl9DUkVBVEVfUkVDT1ZFUlkpOwogCiAJc2Vla3BvcyA9IChvZmZfdCkgQkxDS1NaICog KGJsb2NrbnVtICUgKChCbG9ja051bWJlcikgUkVMU0VHX1NJWkUpKTsKQEAgLTY5MCwxMSArNjc3 LDEyIEBAIG1kcmVhZChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9j a051bWJlciBibG9ja251bSwKIAogCW5ieXRlcyA9IEZpbGVSZWFkKHYtPm1kZmRfdmZkLCBidWZm ZXIsIEJMQ0tTWiwgc2Vla3BvcywgV0FJVF9FVkVOVF9EQVRBX0ZJTEVfUkVBRCk7CiAKLQlUUkFD RV9QT1NUR1JFU1FMX1NNR1JfTURfUkVBRF9ET05FKGZvcmtudW0sIGJsb2NrbnVtLAotCQkJCQkJ CQkJICAgcmVsbi0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnNwY09pZCwKLQkJCQkJCQkJCSAgIHJl bG4tPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5kYk9pZCwKLQkJCQkJCQkJCSAgIHJlbG4tPnNtZ3Jf cmxvY2F0b3IubG9jYXRvci5yZWxOdW1iZXIsCi0JCQkJCQkJCQkgICByZWxuLT5zbWdyX3Jsb2Nh dG9yLmJhY2tlbmQsCisJVFJBQ0VfUE9TVEdSRVNRTF9TTUdSX01EX1JFQURfRE9ORShzZmlsZS0+ c21ncl9mb3JrbnVtLAorCQkJCQkJCQkJICAgYmxvY2tudW0sCisJCQkJCQkJCQkgICBzZmlsZS0+ c21ncl9ybG9jYXRvci5sb2NhdG9yLnNwY09pZCwKKwkJCQkJCQkJCSAgIHNmaWxlLT5zbWdyX3Js b2NhdG9yLmxvY2F0b3IuZGJPaWQsCisJCQkJCQkJCQkgICBzZmlsZS0+c21ncl9ybG9jYXRvci5s b2NhdG9yLnJlbE51bWJlciwKKwkJCQkJCQkJCSAgIHNmaWxlLT5zbWdyX3Jsb2NhdG9yLmJhY2tl bmQsCiAJCQkJCQkJCQkgICBuYnl0ZXMsCiAJCQkJCQkJCQkgICBCTENLU1opOwogCkBAIC03MzMs NyArNzIxLDcgQEAgbWRyZWFkKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0s IEJsb2NrTnVtYmVyIGJsb2NrbnVtLAogICoJCXVzZSBtZGV4dGVuZCgpLgogICovCiB2b2lkCi1t ZHdyaXRlKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVy IGJsb2NrbnVtLAorbWR3cml0ZShTTWdyRmlsZUhhbmRsZSBzZmlsZSwgQmxvY2tOdW1iZXIgYmxv Y2tudW0sCiAJCWNoYXIgKmJ1ZmZlciwgYm9vbCBza2lwRnN5bmMpCiB7CiAJb2ZmX3QJCXNlZWtw b3M7CkBAIC03NDIsMTYgKzczMCwxNyBAQCBtZHdyaXRlKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3Jr TnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGJsb2NrbnVtLAogCiAJLyogVGhpcyBhc3NlcnQg aXMgdG9vIGV4cGVuc2l2ZSB0byBoYXZlIG9uIG5vcm1hbGx5IC4uLiAqLwogI2lmZGVmIENIRUNL X1dSSVRFX1ZTX0VYVEVORAotCUFzc2VydChibG9ja251bSA8IG1kbmJsb2NrcyhyZWxuLCBmb3Jr bnVtKSk7CisJQXNzZXJ0KGJsb2NrbnVtIDwgbWRuYmxvY2tzKHNmaWxlKSk7CiAjZW5kaWYKIAot CVRSQUNFX1BPU1RHUkVTUUxfU01HUl9NRF9XUklURV9TVEFSVChmb3JrbnVtLCBibG9ja251bSwK LQkJCQkJCQkJCQkgcmVsbi0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnNwY09pZCwKLQkJCQkJCQkJ CQkgcmVsbi0+c21ncl9ybG9jYXRvci5sb2NhdG9yLmRiT2lkLAotCQkJCQkJCQkJCSByZWxuLT5z bWdyX3Jsb2NhdG9yLmxvY2F0b3IucmVsTnVtYmVyLAotCQkJCQkJCQkJCSByZWxuLT5zbWdyX3Js b2NhdG9yLmJhY2tlbmQpOworCVRSQUNFX1BPU1RHUkVTUUxfU01HUl9NRF9XUklURV9TVEFSVChz ZmlsZS0+c21ncl9mb3JrbnVtLAorCQkJCQkJCQkJCSBibG9ja251bSwKKwkJCQkJCQkJCQkgc2Zp bGUtPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5zcGNPaWQsCisJCQkJCQkJCQkJIHNmaWxlLT5zbWdy X3Jsb2NhdG9yLmxvY2F0b3IuZGJPaWQsCisJCQkJCQkJCQkJIHNmaWxlLT5zbWdyX3Jsb2NhdG9y LmxvY2F0b3IucmVsTnVtYmVyLAorCQkJCQkJCQkJCSBzZmlsZS0+c21ncl9ybG9jYXRvci5iYWNr ZW5kKTsKIAotCXYgPSBfbWRmZF9nZXRzZWcocmVsbiwgZm9ya251bSwgYmxvY2tudW0sIHNraXBG c3luYywKKwl2ID0gX21kZmRfZ2V0c2VnKHNmaWxlLCBibG9ja251bSwgc2tpcEZzeW5jLAogCQkJ CQkgRVhURU5TSU9OX0ZBSUwgfCBFWFRFTlNJT05fQ1JFQVRFX1JFQ09WRVJZKTsKIAogCXNlZWtw b3MgPSAob2ZmX3QpIEJMQ0tTWiAqIChibG9ja251bSAlICgoQmxvY2tOdW1iZXIpIFJFTFNFR19T SVpFKSk7CkBAIC03NjAsMTEgKzc0OSwxMiBAQCBtZHdyaXRlKFNNZ3JSZWxhdGlvbiByZWxuLCBG b3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGJsb2NrbnVtLAogCiAJbmJ5dGVzID0gRmls ZVdyaXRlKHYtPm1kZmRfdmZkLCBidWZmZXIsIEJMQ0tTWiwgc2Vla3BvcywgV0FJVF9FVkVOVF9E QVRBX0ZJTEVfV1JJVEUpOwogCi0JVFJBQ0VfUE9TVEdSRVNRTF9TTUdSX01EX1dSSVRFX0RPTkUo Zm9ya251bSwgYmxvY2tudW0sCi0JCQkJCQkJCQkJcmVsbi0+c21ncl9ybG9jYXRvci5sb2NhdG9y LnNwY09pZCwKLQkJCQkJCQkJCQlyZWxuLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IuZGJPaWQsCi0J CQkJCQkJCQkJcmVsbi0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnJlbE51bWJlciwKLQkJCQkJCQkJ CQlyZWxuLT5zbWdyX3Jsb2NhdG9yLmJhY2tlbmQsCisJVFJBQ0VfUE9TVEdSRVNRTF9TTUdSX01E X1dSSVRFX0RPTkUoc2ZpbGUtPnNtZ3JfZm9ya251bSwKKwkJCQkJCQkJCQlibG9ja251bSwKKwkJ CQkJCQkJCQlzZmlsZS0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnNwY09pZCwKKwkJCQkJCQkJCQlz ZmlsZS0+c21ncl9ybG9jYXRvci5sb2NhdG9yLmRiT2lkLAorCQkJCQkJCQkJCXNmaWxlLT5zbWdy X3Jsb2NhdG9yLmxvY2F0b3IucmVsTnVtYmVyLAorCQkJCQkJCQkJCXNmaWxlLT5zbWdyX3Jsb2Nh dG9yLmJhY2tlbmQsCiAJCQkJCQkJCQkJbmJ5dGVzLAogCQkJCQkJCQkJCUJMQ0tTWik7CiAKQEAg LTc4NSw4ICs3NzUsOCBAQCBtZHdyaXRlKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZv cmtudW0sIEJsb2NrTnVtYmVyIGJsb2NrbnVtLAogCQkJCSBlcnJoaW50KCJDaGVjayBmcmVlIGRp c2sgc3BhY2UuIikpKTsKIAl9CiAKLQlpZiAoIXNraXBGc3luYyAmJiAhU21ncklzVGVtcChyZWxu KSkKLQkJcmVnaXN0ZXJfZGlydHlfc2VnbWVudChyZWxuLCBmb3JrbnVtLCB2KTsKKwlpZiAoIXNr aXBGc3luYyAmJiAhU21ncklzVGVtcChzZmlsZSkpCisJCXJlZ2lzdGVyX2RpcnR5X3NlZ21lbnQo c2ZpbGUsIHYpOwogfQogCiAvKgpAQCAtNzk4LDE2ICs3ODgsMTYgQEAgbWR3cml0ZShTTWdyUmVs YXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBibG9ja251bSwKICAq CQlhcmUgcHJlc2VudCBpbiB0aGUgYXJyYXkuCiAgKi8KIEJsb2NrTnVtYmVyCi1tZG5ibG9ja3Mo U01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSkKK21kbmJsb2NrcyhTTWdyRmls ZUhhbmRsZSBzZmlsZSkKIHsKIAlNZGZkVmVjICAgICp2OwogCUJsb2NrTnVtYmVyIG5ibG9ja3M7 CiAJQmxvY2tOdW1iZXIgc2Vnbm87CiAKLQltZG9wZW5mb3JrKHJlbG4sIGZvcmtudW0sIEVYVEVO U0lPTl9GQUlMKTsKKwltZG9wZW5mb3JrKHNmaWxlLCBFWFRFTlNJT05fRkFJTCk7CiAKIAkvKiBt ZG9wZW4gaGFzIG9wZW5lZCB0aGUgZmlyc3Qgc2VnbWVudCAqLwotCUFzc2VydChyZWxuLT5tZF9u dW1fb3Blbl9zZWdzW2ZvcmtudW1dID4gMCk7CisJQXNzZXJ0KHNmaWxlLT5tZF9udW1fb3Blbl9z ZWdzID4gMCk7CiAKIAkvKgogCSAqIFN0YXJ0IGZyb20gdGhlIGxhc3Qgb3BlbiBzZWdtZW50cywg dG8gYXZvaWQgcmVkdW5kYW50IHNlZWtzLiAgV2UgaGF2ZQpAQCAtODIyLDEyICs4MTIsMTIgQEAg bWRuYmxvY2tzKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0pCiAJICogdGhh dCdzIE9LIGJlY2F1c2UgdGhlIGNoZWNrcG9pbnRlciBuZXZlciBuZWVkcyB0byBjb21wdXRlIHJl bGF0aW9uCiAJICogc2l6ZS4pCiAJICovCi0Jc2Vnbm8gPSByZWxuLT5tZF9udW1fb3Blbl9zZWdz W2ZvcmtudW1dIC0gMTsKLQl2ID0gJnJlbG4tPm1kX3NlZ19mZHNbZm9ya251bV1bc2Vnbm9dOwor CXNlZ25vID0gc2ZpbGUtPm1kX251bV9vcGVuX3NlZ3MgLSAxOworCXYgPSAmc2ZpbGUtPm1kX3Nl Z19mZHNbc2Vnbm9dOwogCiAJZm9yICg7OykKIAl7Ci0JCW5ibG9ja3MgPSBfbWRuYmxvY2tzKHJl bG4sIGZvcmtudW0sIHYpOworCQluYmxvY2tzID0gX21kbmJsb2NrcyhzZmlsZSwgdik7CiAJCWlm IChuYmxvY2tzID4gKChCbG9ja051bWJlcikgUkVMU0VHX1NJWkUpKQogCQkJZWxvZyhGQVRBTCwg InNlZ21lbnQgdG9vIGJpZyIpOwogCQlpZiAobmJsb2NrcyA8ICgoQmxvY2tOdW1iZXIpIFJFTFNF R19TSVpFKSkKQEAgLTg0NSw3ICs4MzUsNyBAQCBtZG5ibG9ja3MoU01nclJlbGF0aW9uIHJlbG4s IEZvcmtOdW1iZXIgZm9ya251bSkKIAkJICogdW5kZXJtaW5lcyBfbWRmZF9nZXRzZWcncyBhdHRl bXB0cyB0byBub3RpY2UgYW5kIHJlcG9ydCBhbiBlcnJvcgogCQkgKiB1cG9uIGFjY2VzcyB0byBh IG1pc3Npbmcgc2VnbWVudC4KIAkJICovCi0JCXYgPSBfbWRmZF9vcGVuc2VnKHJlbG4sIGZvcmtu dW0sIHNlZ25vLCAwKTsKKwkJdiA9IF9tZGZkX29wZW5zZWcoc2ZpbGUsIHNlZ25vLCAwKTsKIAkJ aWYgKHYgPT0gTlVMTCkKIAkJCXJldHVybiBzZWdubyAqICgoQmxvY2tOdW1iZXIpIFJFTFNFR19T SVpFKTsKIAl9CkBAIC04NTUsNyArODQ1LDcgQEAgbWRuYmxvY2tzKFNNZ3JSZWxhdGlvbiByZWxu LCBGb3JrTnVtYmVyIGZvcmtudW0pCiAgKgltZHRydW5jYXRlKCkgLS0gVHJ1bmNhdGUgcmVsYXRp b24gdG8gc3BlY2lmaWVkIG51bWJlciBvZiBibG9ja3MuCiAgKi8KIHZvaWQKLW1kdHJ1bmNhdGUo U01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgbmJsb2Nr cykKK21kdHJ1bmNhdGUoU01nckZpbGVIYW5kbGUgc2ZpbGUsIEJsb2NrTnVtYmVyIG5ibG9ja3Mp CiB7CiAJQmxvY2tOdW1iZXIgY3VybmJsazsKIAlCbG9ja051bWJlciBwcmlvcmJsb2NrczsKQEAg LTg2NSw3ICs4NTUsNyBAQCBtZHRydW5jYXRlKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVy IGZvcmtudW0sIEJsb2NrTnVtYmVyIG5ibG9ja3MpCiAJICogTk9URTogbWRuYmxvY2tzIG1ha2Vz IHN1cmUgd2UgaGF2ZSBvcGVuZWQgYWxsIGFjdGl2ZSBzZWdtZW50cywgc28gdGhhdAogCSAqIHRy dW5jYXRpb24gbG9vcCB3aWxsIGdldCB0aGVtIGFsbCEKIAkgKi8KLQljdXJuYmxrID0gbWRuYmxv Y2tzKHJlbG4sIGZvcmtudW0pOworCWN1cm5ibGsgPSBtZG5ibG9ja3Moc2ZpbGUpOwogCWlmIChu YmxvY2tzID4gY3VybmJsaykKIAl7CiAJCS8qIEJvZ3VzIHJlcXVlc3QgLi4uIGJ1dCBubyBjb21w bGFpbnQgaWYgSW5SZWNvdmVyeSAqLwpAQCAtODczLDcgKzg2Myw3IEBAIG1kdHJ1bmNhdGUoU01n clJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgbmJsb2NrcykK IAkJCXJldHVybjsKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJybXNnKCJjb3VsZCBub3QgdHJ1 bmNhdGUgZmlsZSBcIiVzXCIgdG8gJXUgYmxvY2tzOiBpdCdzIG9ubHkgJXUgYmxvY2tzIG5vdyIs Ci0JCQkJCQlyZWxwYXRoKHJlbG4tPnNtZ3JfcmxvY2F0b3IsIGZvcmtudW0pLAorCQkJCQkJc21n cmZpbGVwYXRoKHNmaWxlLT5zbWdyX2xvY2F0b3IpLAogCQkJCQkJbmJsb2NrcywgY3VybmJsaykp KTsKIAl9CiAJaWYgKG5ibG9ja3MgPT0gY3VybmJsaykKQEAgLTg4MywxNCArODczLDE0IEBAIG1k dHJ1bmNhdGUoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1i ZXIgbmJsb2NrcykKIAkgKiBUcnVuY2F0ZSBzZWdtZW50cywgc3RhcnRpbmcgYXQgdGhlIGxhc3Qg b25lLiBTdGFydGluZyBhdCB0aGUgZW5kIG1ha2VzCiAJICogbWFuYWdpbmcgdGhlIG1lbW9yeSBm b3IgdGhlIGZkIGFycmF5IGVhc2llciwgc2hvdWxkIHRoZXJlIGJlIGVycm9ycy4KIAkgKi8KLQlj dXJvcGVuc2VncyA9IHJlbG4tPm1kX251bV9vcGVuX3NlZ3NbZm9ya251bV07CisJY3Vyb3BlbnNl Z3MgPSBzZmlsZS0+bWRfbnVtX29wZW5fc2VnczsKIAl3aGlsZSAoY3Vyb3BlbnNlZ3MgPiAwKQog CXsKIAkJTWRmZFZlYyAgICAqdjsKIAogCQlwcmlvcmJsb2NrcyA9IChjdXJvcGVuc2VncyAtIDEp ICogUkVMU0VHX1NJWkU7CiAKLQkJdiA9ICZyZWxuLT5tZF9zZWdfZmRzW2ZvcmtudW1dW2N1cm9w ZW5zZWdzIC0gMV07CisJCXYgPSAmc2ZpbGUtPm1kX3NlZ19mZHNbY3Vyb3BlbnNlZ3MgLSAxXTsK IAogCQlpZiAocHJpb3JibG9ja3MgPiBuYmxvY2tzKQogCQl7CkBAIC05MDQsMTQgKzg5NCwxNCBA QCBtZHRydW5jYXRlKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2Nr TnVtYmVyIG5ibG9ja3MpCiAJCQkJCQkgZXJybXNnKCJjb3VsZCBub3QgdHJ1bmNhdGUgZmlsZSBc IiVzXCI6ICVtIiwKIAkJCQkJCQkJRmlsZVBhdGhOYW1lKHYtPm1kZmRfdmZkKSkpKTsKIAotCQkJ aWYgKCFTbWdySXNUZW1wKHJlbG4pKQotCQkJCXJlZ2lzdGVyX2RpcnR5X3NlZ21lbnQocmVsbiwg Zm9ya251bSwgdik7CisJCQlpZiAoIVNtZ3JJc1RlbXAoc2ZpbGUpKQorCQkJCXJlZ2lzdGVyX2Rp cnR5X3NlZ21lbnQoc2ZpbGUsIHYpOwogCiAJCQkvKiB3ZSBuZXZlciBkcm9wIHRoZSAxc3Qgc2Vn bWVudCAqLwotCQkJQXNzZXJ0KHYgIT0gJnJlbG4tPm1kX3NlZ19mZHNbZm9ya251bV1bMF0pOwor CQkJQXNzZXJ0KHYgIT0gJnNmaWxlLT5tZF9zZWdfZmRzWzBdKTsKIAogCQkJRmlsZUNsb3NlKHYt Pm1kZmRfdmZkKTsKLQkJCV9mZHZlY19yZXNpemUocmVsbiwgZm9ya251bSwgY3Vyb3BlbnNlZ3Mg LSAxKTsKKwkJCV9mZHZlY19yZXNpemUoc2ZpbGUsIGN1cm9wZW5zZWdzIC0gMSk7CiAJCX0KIAkJ ZWxzZSBpZiAocHJpb3JibG9ja3MgKyAoKEJsb2NrTnVtYmVyKSBSRUxTRUdfU0laRSkgPiBuYmxv Y2tzKQogCQl7CkBAIC05MzAsOCArOTIwLDggQEAgbWR0cnVuY2F0ZShTTWdyUmVsYXRpb24gcmVs biwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBuYmxvY2tzKQogCQkJCQkJIGVycm1z ZygiY291bGQgbm90IHRydW5jYXRlIGZpbGUgXCIlc1wiIHRvICV1IGJsb2NrczogJW0iLAogCQkJ CQkJCQlGaWxlUGF0aE5hbWUodi0+bWRmZF92ZmQpLAogCQkJCQkJCQluYmxvY2tzKSkpOwotCQkJ aWYgKCFTbWdySXNUZW1wKHJlbG4pKQotCQkJCXJlZ2lzdGVyX2RpcnR5X3NlZ21lbnQocmVsbiwg Zm9ya251bSwgdik7CisJCQlpZiAoIVNtZ3JJc1RlbXAoc2ZpbGUpKQorCQkJCXJlZ2lzdGVyX2Rp cnR5X3NlZ21lbnQoc2ZpbGUsIHYpOwogCQl9CiAJCWVsc2UKIAkJewpAQCAtOTU3LDcgKzk0Nyw3 IEBAIG1kdHJ1bmNhdGUoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxv Y2tOdW1iZXIgbmJsb2NrcykKICAqIHNlZ21lbnQgbWF5IHN1cnZpdmUgcmVjb3ZlcnksIHJlaW50 cm9kdWNpbmcgdW53YW50ZWQgZGF0YSBpbnRvIHRoZSB0YWJsZS4KICAqLwogdm9pZAotbWRpbW1l ZHN5bmMoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSkKK21kaW1tZWRzeW5j KFNNZ3JGaWxlSGFuZGxlIHNmaWxlKQogewogCWludAkJCXNlZ25vOwogCWludAkJCW1pbl9pbmFj dGl2ZV9zZWc7CkBAIC05NjYsOSArOTU2LDkgQEAgbWRpbW1lZHN5bmMoU01nclJlbGF0aW9uIHJl bG4sIEZvcmtOdW1iZXIgZm9ya251bSkKIAkgKiBOT1RFOiBtZG5ibG9ja3MgbWFrZXMgc3VyZSB3 ZSBoYXZlIG9wZW5lZCBhbGwgYWN0aXZlIHNlZ21lbnRzLCBzbyB0aGF0CiAJICogZnN5bmMgbG9v cCB3aWxsIGdldCB0aGVtIGFsbCEKIAkgKi8KLQltZG5ibG9ja3MocmVsbiwgZm9ya251bSk7CisJ bWRuYmxvY2tzKHNmaWxlKTsKIAotCW1pbl9pbmFjdGl2ZV9zZWcgPSBzZWdubyA9IHJlbG4tPm1k X251bV9vcGVuX3NlZ3NbZm9ya251bV07CisJbWluX2luYWN0aXZlX3NlZyA9IHNlZ25vID0gc2Zp bGUtPm1kX251bV9vcGVuX3NlZ3M7CiAKIAkvKgogCSAqIFRlbXBvcmFyaWx5IG9wZW4gaW5hY3Rp dmUgc2VnbWVudHMsIHRoZW4gY2xvc2UgdGhlbSBhZnRlciBzeW5jLiAgVGhlcmUKQEAgLTk3Niwx MiArOTY2LDEyIEBAIG1kaW1tZWRzeW5jKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZv cmtudW0pCiAJICogaXMgaGFybWxlc3MuICBXZSBkb24ndCBib3RoZXIgdG8gY2xlYW4gdGhlbSB1 cCBhbmQgdGFrZSBhIHJpc2sgb2YKIAkgKiBmdXJ0aGVyIHRyb3VibGUuICBUaGUgbmV4dCBtZGNs b3NlKCkgd2lsbCBzb29uIGNsb3NlIHRoZW0uCiAJICovCi0Jd2hpbGUgKF9tZGZkX29wZW5zZWco cmVsbiwgZm9ya251bSwgc2Vnbm8sIDApICE9IE5VTEwpCisJd2hpbGUgKF9tZGZkX29wZW5zZWco c2ZpbGUsIHNlZ25vLCAwKSAhPSBOVUxMKQogCQlzZWdubysrOwogCiAJd2hpbGUgKHNlZ25vID4g MCkKIAl7Ci0JCU1kZmRWZWMgICAgKnYgPSAmcmVsbi0+bWRfc2VnX2Zkc1tmb3JrbnVtXVtzZWdu byAtIDFdOworCQlNZGZkVmVjICAgICp2ID0gJnNmaWxlLT5tZF9zZWdfZmRzW3NlZ25vIC0gMV07 CiAKIAkJaWYgKEZpbGVTeW5jKHYtPm1kZmRfdmZkLCBXQUlUX0VWRU5UX0RBVEFfRklMRV9JTU1F RElBVEVfU1lOQykgPCAwKQogCQkJZXJlcG9ydChkYXRhX3N5bmNfZWxldmVsKEVSUk9SKSwKQEAg LTk5Myw3ICs5ODMsNyBAQCBtZGltbWVkc3luYyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJl ciBmb3JrbnVtKQogCQlpZiAoc2Vnbm8gPiBtaW5faW5hY3RpdmVfc2VnKQogCQl7CiAJCQlGaWxl Q2xvc2Uodi0+bWRmZF92ZmQpOwotCQkJX2ZkdmVjX3Jlc2l6ZShyZWxuLCBmb3JrbnVtLCBzZWdu byAtIDEpOworCQkJX2ZkdmVjX3Jlc2l6ZShzZmlsZSwgc2Vnbm8gLSAxKTsKIAkJfQogCiAJCXNl Z25vLS07CkBAIC0xMDEwLDE0ICsxMDAwLDE0IEBAIG1kaW1tZWRzeW5jKFNNZ3JSZWxhdGlvbiBy ZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0pCiAgKiBlbm91Z2ggdG8gYmUgYSBwZXJmb3JtYW5jZSBw cm9ibGVtKS4KICAqLwogc3RhdGljIHZvaWQKLXJlZ2lzdGVyX2RpcnR5X3NlZ21lbnQoU01nclJl bGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgTWRmZFZlYyAqc2VnKQorcmVnaXN0ZXJf ZGlydHlfc2VnbWVudChTTWdyRmlsZUhhbmRsZSBzZmlsZSwgTWRmZFZlYyAqc2VnKQogewogCUZp bGVUYWcJCXRhZzsKIAotCUlOSVRfTURfRklMRVRBRyh0YWcsIHJlbG4tPnNtZ3JfcmxvY2F0b3Iu bG9jYXRvciwgZm9ya251bSwgc2VnLT5tZGZkX3NlZ25vKTsKKwlJTklUX01EX0ZJTEVUQUcodGFn LCBzZmlsZS0+c21ncl9sb2NhdG9yLmxvY2F0b3IsIHNmaWxlLT5zbWdyX2xvY2F0b3IuZm9ya251 bSwgc2VnLT5tZGZkX3NlZ25vKTsKIAogCS8qIFRlbXAgcmVsYXRpb25zIHNob3VsZCBuZXZlciBi ZSBmc3luYydkICovCi0JQXNzZXJ0KCFTbWdySXNUZW1wKHJlbG4pKTsKKwlBc3NlcnQoIVNtZ3JJ c1RlbXAoc2ZpbGUpKTsKIAogCWlmICghUmVnaXN0ZXJTeW5jUmVxdWVzdCgmdGFnLCBTWU5DX1JF UVVFU1QsIGZhbHNlIC8qIHJldHJ5T25FcnJvciAqLyApKQogCXsKQEAgLTEwMzYsMTUgKzEwMjYs MTQgQEAgcmVnaXN0ZXJfZGlydHlfc2VnbWVudChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJl ciBmb3JrbnVtLCBNZGZkVmVjICpzZWcpCiAgKiByZWdpc3Rlcl91bmxpbmtfc2VnbWVudCgpIC0t IFNjaGVkdWxlIGEgZmlsZSB0byBiZSBkZWxldGVkIGFmdGVyIG5leHQgY2hlY2twb2ludAogICov CiBzdGF0aWMgdm9pZAotcmVnaXN0ZXJfdW5saW5rX3NlZ21lbnQoUmVsRmlsZUxvY2F0b3JCYWNr ZW5kIHJsb2NhdG9yLCBGb3JrTnVtYmVyIGZvcmtudW0sCi0JCQkJCQlCbG9ja051bWJlciBzZWdu bykKK3JlZ2lzdGVyX3VubGlua19zZWdtZW50KFNNZ3JGaWxlTG9jYXRvciBzbG9jYXRvciwgQmxv Y2tOdW1iZXIgc2Vnbm8pCiB7CiAJRmlsZVRhZwkJdGFnOwogCi0JSU5JVF9NRF9GSUxFVEFHKHRh ZywgcmxvY2F0b3IubG9jYXRvciwgZm9ya251bSwgc2Vnbm8pOworCUlOSVRfTURfRklMRVRBRyh0 YWcsIHNsb2NhdG9yLmxvY2F0b3IsIHNsb2NhdG9yLmZvcmtudW0sIHNlZ25vKTsKIAogCS8qIFNo b3VsZCBuZXZlciBiZSB1c2VkIHdpdGggdGVtcCByZWxhdGlvbnMgKi8KLQlBc3NlcnQoIVJlbEZp bGVMb2NhdG9yQmFja2VuZElzVGVtcChybG9jYXRvcikpOworCUFzc2VydCghU01nckZpbGVMb2Nh dG9ySXNUZW1wKHNsb2NhdG9yKSk7CiAKIAlSZWdpc3RlclN5bmNSZXF1ZXN0KCZ0YWcsIFNZTkNf VU5MSU5LX1JFUVVFU1QsIHRydWUgLyogcmV0cnlPbkVycm9yICovICk7CiB9CkBAIC0xMDUzLDEy ICsxMDQyLDExIEBAIHJlZ2lzdGVyX3VubGlua19zZWdtZW50KFJlbEZpbGVMb2NhdG9yQmFja2Vu ZCBybG9jYXRvciwgRm9ya051bWJlciBmb3JrbnVtLAogICogcmVnaXN0ZXJfZm9yZ2V0X3JlcXVl c3QoKSAtLSBmb3JnZXQgYW55IGZzeW5jcyBmb3IgYSByZWxhdGlvbiBmb3JrJ3Mgc2VnbWVudAog ICovCiBzdGF0aWMgdm9pZAotcmVnaXN0ZXJfZm9yZ2V0X3JlcXVlc3QoUmVsRmlsZUxvY2F0b3JC YWNrZW5kIHJsb2NhdG9yLCBGb3JrTnVtYmVyIGZvcmtudW0sCi0JCQkJCQlCbG9ja051bWJlciBz ZWdubykKK3JlZ2lzdGVyX2ZvcmdldF9yZXF1ZXN0KFNNZ3JGaWxlTG9jYXRvciBzbG9jYXRvciwg QmxvY2tOdW1iZXIgc2Vnbm8pCiB7CiAJRmlsZVRhZwkJdGFnOwogCi0JSU5JVF9NRF9GSUxFVEFH KHRhZywgcmxvY2F0b3IubG9jYXRvciwgZm9ya251bSwgc2Vnbm8pOworCUlOSVRfTURfRklMRVRB Ryh0YWcsIHNsb2NhdG9yLmxvY2F0b3IsIHNsb2NhdG9yLmZvcmtudW0sIHNlZ25vKTsKIAogCVJl Z2lzdGVyU3luY1JlcXVlc3QoJnRhZywgU1lOQ19GT1JHRVRfUkVRVUVTVCwgdHJ1ZSAvKiByZXRy eU9uRXJyb3IgKi8gKTsKIH0KQEAgLTEwODEsNTcgKzEwNjksMjUgQEAgRm9yZ2V0RGF0YWJhc2VT eW5jUmVxdWVzdHMoT2lkIGRiaWQpCiAJUmVnaXN0ZXJTeW5jUmVxdWVzdCgmdGFnLCBTWU5DX0ZJ TFRFUl9SRVFVRVNULCB0cnVlIC8qIHJldHJ5T25FcnJvciAqLyApOwogfQogCi0vKgotICogRHJv cFJlbGF0aW9uRmlsZXMgLS0gZHJvcCBmaWxlcyBvZiBhbGwgZ2l2ZW4gcmVsYXRpb25zCi0gKi8K LXZvaWQKLURyb3BSZWxhdGlvbkZpbGVzKFJlbEZpbGVMb2NhdG9yICpkZWxyZWxzLCBpbnQgbmRl bHJlbHMsIGJvb2wgaXNSZWRvKQotewotCVNNZ3JSZWxhdGlvbiAqc3JlbHM7Ci0JaW50CQkJaTsK LQotCXNyZWxzID0gcGFsbG9jKHNpemVvZihTTWdyUmVsYXRpb24pICogbmRlbHJlbHMpOwotCWZv ciAoaSA9IDA7IGkgPCBuZGVscmVsczsgaSsrKQotCXsKLQkJU01nclJlbGF0aW9uIHNyZWwgPSBz bWdyb3BlbihkZWxyZWxzW2ldLCBJbnZhbGlkQmFja2VuZElkKTsKLQotCQlpZiAoaXNSZWRvKQot CQl7Ci0JCQlGb3JrTnVtYmVyCWZvcms7Ci0KLQkJCWZvciAoZm9yayA9IDA7IGZvcmsgPD0gTUFY X0ZPUktOVU07IGZvcmsrKykKLQkJCQlYTG9nRHJvcFJlbGF0aW9uKGRlbHJlbHNbaV0sIGZvcmsp OwotCQl9Ci0JCXNyZWxzW2ldID0gc3JlbDsKLQl9Ci0KLQlzbWdyZG91bmxpbmthbGwoc3JlbHMs IG5kZWxyZWxzLCBpc1JlZG8pOwotCi0JZm9yIChpID0gMDsgaSA8IG5kZWxyZWxzOyBpKyspCi0J CXNtZ3JjbG9zZShzcmVsc1tpXSk7Ci0JcGZyZWUoc3JlbHMpOwotfQotCiAKIC8qCiAgKglfZmR2 ZWNfcmVzaXplKCkgLS0gUmVzaXplIHRoZSBmb3JrJ3Mgb3BlbiBzZWdtZW50cyBhcnJheQogICov CiBzdGF0aWMgdm9pZAotX2ZkdmVjX3Jlc2l6ZShTTWdyUmVsYXRpb24gcmVsbiwKLQkJCSAgRm9y a051bWJlciBmb3JrbnVtLAorX2ZkdmVjX3Jlc2l6ZShTTWdyRmlsZUhhbmRsZSBzZmlsZSwKIAkJ CSAgaW50IG5zZWcpCiB7CiAJaWYgKG5zZWcgPT0gMCkKIAl7Ci0JCWlmIChyZWxuLT5tZF9udW1f b3Blbl9zZWdzW2ZvcmtudW1dID4gMCkKKwkJaWYgKHNmaWxlLT5tZF9udW1fb3Blbl9zZWdzID4g MCkKIAkJewotCQkJcGZyZWUocmVsbi0+bWRfc2VnX2Zkc1tmb3JrbnVtXSk7Ci0JCQlyZWxuLT5t ZF9zZWdfZmRzW2ZvcmtudW1dID0gTlVMTDsKKwkJCXBmcmVlKHNmaWxlLT5tZF9zZWdfZmRzKTsK KwkJCXNmaWxlLT5tZF9zZWdfZmRzID0gTlVMTDsKIAkJfQogCX0KLQllbHNlIGlmIChyZWxuLT5t ZF9udW1fb3Blbl9zZWdzW2ZvcmtudW1dID09IDApCisJZWxzZSBpZiAoc2ZpbGUtPm1kX251bV9v cGVuX3NlZ3MgPT0gMCkKIAl7Ci0JCXJlbG4tPm1kX3NlZ19mZHNbZm9ya251bV0gPQorCQlzZmls ZS0+bWRfc2VnX2ZkcyA9CiAJCQlNZW1vcnlDb250ZXh0QWxsb2MoTWRDeHQsIHNpemVvZihNZGZk VmVjKSAqIG5zZWcpOwogCX0KIAllbHNlCkBAIC0xMTQyLDEyICsxMDk4LDEyIEBAIF9mZHZlY19y ZXNpemUoU01nclJlbGF0aW9uIHJlbG4sCiAJCSAqIEZpbGVDbG9zZSgpLCBhbmQgdGhlIG1lbW9y eSBjb250ZXh0IGludGVybmFsbHkgd2lsbCBzb21ldGltZXMgYXZvaWQKIAkJICogZG9pbmcgYW4g YWN0dWFsIHJlYWxsb2NhdGlvbi4KIAkJICovCi0JCXJlbG4tPm1kX3NlZ19mZHNbZm9ya251bV0g PQotCQkJcmVwYWxsb2MocmVsbi0+bWRfc2VnX2Zkc1tmb3JrbnVtXSwKKwkJc2ZpbGUtPm1kX3Nl Z19mZHMgPQorCQkJcmVwYWxsb2Moc2ZpbGUtPm1kX3NlZ19mZHMsCiAJCQkJCSBzaXplb2YoTWRm ZFZlYykgKiBuc2VnKTsKIAl9CiAKLQlyZWxuLT5tZF9udW1fb3Blbl9zZWdzW2ZvcmtudW1dID0g bnNlZzsKKwlzZmlsZS0+bWRfbnVtX29wZW5fc2VncyA9IG5zZWc7CiB9CiAKIC8qCkBAIC0xMTU1 LDEyICsxMTExLDEyIEBAIF9mZHZlY19yZXNpemUoU01nclJlbGF0aW9uIHJlbG4sCiAgKiByZXR1 cm5lZCBzdHJpbmcgaXMgcGFsbG9jJ2QuCiAgKi8KIHN0YXRpYyBjaGFyICoKLV9tZGZkX3NlZ3Bh dGgoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgc2Vn bm8pCitfbWRmZF9zZWdwYXRoKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBCbG9ja051bWJlciBzZWdu bykKIHsKIAljaGFyCSAgICpwYXRoLAogCQkJICAgKmZ1bGxwYXRoOwogCi0JcGF0aCA9IHJlbHBh dGgocmVsbi0+c21ncl9ybG9jYXRvciwgZm9ya251bSk7CisJcGF0aCA9IHNtZ3JmaWxlcGF0aChz ZmlsZS0+c21ncl9sb2NhdG9yKTsKIAogCWlmIChzZWdubyA+IDApCiAJewpAQCAtMTE3OCwxNCAr MTEzNCwxNCBAQCBfbWRmZF9zZWdwYXRoKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZv cmtudW0sIEJsb2NrTnVtYmVyIHNlZ25vKQogICogYW5kIG1ha2UgYSBNZGZkVmVjIG9iamVjdCBm b3IgaXQuICBSZXR1cm5zIE5VTEwgb24gZmFpbHVyZS4KICAqLwogc3RhdGljIE1kZmRWZWMgKgot X21kZmRfb3BlbnNlZyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9j a051bWJlciBzZWdubywKK19tZGZkX29wZW5zZWcoU01nckZpbGVIYW5kbGUgc2ZpbGUsIEJsb2Nr TnVtYmVyIHNlZ25vLAogCQkJICBpbnQgb2ZsYWdzKQogewogCU1kZmRWZWMgICAgKnY7CiAJRmls ZQkJZmQ7CiAJY2hhcgkgICAqZnVsbHBhdGg7CiAKLQlmdWxscGF0aCA9IF9tZGZkX3NlZ3BhdGgo cmVsbiwgZm9ya251bSwgc2Vnbm8pOworCWZ1bGxwYXRoID0gX21kZmRfc2VncGF0aChzZmlsZSwg c2Vnbm8pOwogCiAJLyogb3BlbiB0aGUgZmlsZSAqLwogCWZkID0gUGF0aE5hbWVPcGVuRmlsZShm dWxscGF0aCwgT19SRFdSIHwgUEdfQklOQVJZIHwgb2ZsYWdzKTsKQEAgLTExOTksMTYgKzExNTUs MTYgQEAgX21kZmRfb3BlbnNlZyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVt LCBCbG9ja051bWJlciBzZWdubywKIAkgKiBTZWdtZW50cyBhcmUgYWx3YXlzIG9wZW5lZCBpbiBv cmRlciBmcm9tIGxvd2VzdCB0byBoaWdoZXN0LCBzbyB3ZSBtdXN0CiAJICogYmUgYWRkaW5nIGEg bmV3IG9uZSBhdCB0aGUgZW5kLgogCSAqLwotCUFzc2VydChzZWdubyA9PSByZWxuLT5tZF9udW1f b3Blbl9zZWdzW2ZvcmtudW1dKTsKKwlBc3NlcnQoc2Vnbm8gPT0gc2ZpbGUtPm1kX251bV9vcGVu X3NlZ3MpOwogCi0JX2ZkdmVjX3Jlc2l6ZShyZWxuLCBmb3JrbnVtLCBzZWdubyArIDEpOworCV9m ZHZlY19yZXNpemUoc2ZpbGUsIHNlZ25vICsgMSk7CiAKIAkvKiBmaWxsIHRoZSBlbnRyeSAqLwot CXYgPSAmcmVsbi0+bWRfc2VnX2Zkc1tmb3JrbnVtXVtzZWdub107CisJdiA9ICZzZmlsZS0+bWRf c2VnX2Zkc1tzZWdub107CiAJdi0+bWRmZF92ZmQgPSBmZDsKIAl2LT5tZGZkX3NlZ25vID0gc2Vn bm87CiAKLQlBc3NlcnQoX21kbmJsb2NrcyhyZWxuLCBmb3JrbnVtLCB2KSA8PSAoKEJsb2NrTnVt YmVyKSBSRUxTRUdfU0laRSkpOworCUFzc2VydChfbWRuYmxvY2tzKHNmaWxlLCB2KSA8PSAoKEJs b2NrTnVtYmVyKSBSRUxTRUdfU0laRSkpOwogCiAJLyogYWxsIGRvbmUgKi8KIAlyZXR1cm4gdjsK QEAgLTEyMjMsNyArMTE3OSw3IEBAIF9tZGZkX29wZW5zZWcoU01nclJlbGF0aW9uIHJlbG4sIEZv cmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgc2Vnbm8sCiAgKiBFWFRFTlNJT05fQ1JFQVRF IGNhc2UuCiAgKi8KIHN0YXRpYyBNZGZkVmVjICoKLV9tZGZkX2dldHNlZyhTTWdyUmVsYXRpb24g cmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBibGtubywKK19tZGZkX2dldHNl ZyhTTWdyRmlsZUhhbmRsZSBzZmlsZSwgQmxvY2tOdW1iZXIgYmxrbm8sCiAJCQkgYm9vbCBza2lw RnN5bmMsIGludCBiZWhhdmlvcikKIHsKIAlNZGZkVmVjICAgICp2OwpAQCAtMTIzOCw5ICsxMTk0 LDkgQEAgX21kZmRfZ2V0c2VnKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0s IEJsb2NrTnVtYmVyIGJsa25vLAogCXRhcmdldHNlZyA9IGJsa25vIC8gKChCbG9ja051bWJlcikg UkVMU0VHX1NJWkUpOwogCiAJLyogaWYgYW4gZXhpc3RpbmcgYW5kIG9wZW5lZCBzZWdtZW50LCB3 ZSdyZSBkb25lICovCi0JaWYgKHRhcmdldHNlZyA8IHJlbG4tPm1kX251bV9vcGVuX3NlZ3NbZm9y a251bV0pCisJaWYgKHRhcmdldHNlZyA8IHNmaWxlLT5tZF9udW1fb3Blbl9zZWdzKQogCXsKLQkJ diA9ICZyZWxuLT5tZF9zZWdfZmRzW2ZvcmtudW1dW3RhcmdldHNlZ107CisJCXYgPSAmc2ZpbGUt Pm1kX3NlZ19mZHNbdGFyZ2V0c2VnXTsKIAkJcmV0dXJuIHY7CiAJfQogCkBAIC0xMjU1LDE5ICsx MjExLDE5IEBAIF9tZGZkX2dldHNlZyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3Jr bnVtLCBCbG9ja051bWJlciBibGtubywKIAkgKiAnYmVoYXZpb3InKS4gU3RhcnQgd2l0aCBlaXRo ZXIgdGhlIGxhc3Qgb3BlbmVkLCBvciB0aGUgZmlyc3Qgc2VnbWVudCBpZgogCSAqIG5vbmUgd2Fz IG9wZW5lZCBiZWZvcmUuCiAJICovCi0JaWYgKHJlbG4tPm1kX251bV9vcGVuX3NlZ3NbZm9ya251 bV0gPiAwKQotCQl2ID0gJnJlbG4tPm1kX3NlZ19mZHNbZm9ya251bV1bcmVsbi0+bWRfbnVtX29w ZW5fc2Vnc1tmb3JrbnVtXSAtIDFdOworCWlmIChzZmlsZS0+bWRfbnVtX29wZW5fc2VncyA+IDAp CisJCXYgPSAmc2ZpbGUtPm1kX3NlZ19mZHNbc2ZpbGUtPm1kX251bV9vcGVuX3NlZ3MgLSAxXTsK IAllbHNlCiAJewotCQl2ID0gbWRvcGVuZm9yayhyZWxuLCBmb3JrbnVtLCBiZWhhdmlvcik7CisJ CXYgPSBtZG9wZW5mb3JrKHNmaWxlLCBiZWhhdmlvcik7CiAJCWlmICghdikKIAkJCXJldHVybiBO VUxMOwkJLyogaWYgYmVoYXZpb3IgJiBFWFRFTlNJT05fUkVUVVJOX05VTEwgKi8KIAl9CiAKLQlm b3IgKG5leHRzZWdubyA9IHJlbG4tPm1kX251bV9vcGVuX3NlZ3NbZm9ya251bV07CisJZm9yIChu ZXh0c2Vnbm8gPSBzZmlsZS0+bWRfbnVtX29wZW5fc2VnczsKIAkJIG5leHRzZWdubyA8PSB0YXJn ZXRzZWc7IG5leHRzZWdubysrKQogCXsKLQkJQmxvY2tOdW1iZXIgbmJsb2NrcyA9IF9tZG5ibG9j a3MocmVsbiwgZm9ya251bSwgdik7CisJCUJsb2NrTnVtYmVyIG5ibG9ja3MgPSBfbWRuYmxvY2tz KHNmaWxlLCB2KTsKIAkJaW50CQkJZmxhZ3MgPSAwOwogCiAJCUFzc2VydChuZXh0c2Vnbm8gPT0g di0+bWRmZF9zZWdubyArIDEpOwpAQCAtMTI5Niw3ICsxMjUyLDcgQEAgX21kZmRfZ2V0c2VnKFNN Z3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGJsa25vLAog CQkJewogCQkJCWNoYXIJICAgKnplcm9idWYgPSBwYWxsb2MwKEJMQ0tTWik7CiAKLQkJCQltZGV4 dGVuZChyZWxuLCBmb3JrbnVtLAorCQkJCW1kZXh0ZW5kKHNmaWxlLAogCQkJCQkJIG5leHRzZWdu byAqICgoQmxvY2tOdW1iZXIpIFJFTFNFR19TSVpFKSAtIDEsCiAJCQkJCQkgemVyb2J1Ziwgc2tp cEZzeW5jKTsKIAkJCQlwZnJlZSh6ZXJvYnVmKTsKQEAgLTEzMjcsMTEgKzEyODMsMTEgQEAgX21k ZmRfZ2V0c2VnKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVt YmVyIGJsa25vLAogCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNj ZXNzKCksCiAJCQkJCSBlcnJtc2coImNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiICh0YXJnZXQg YmxvY2sgJXUpOiBwcmV2aW91cyBzZWdtZW50IGlzIG9ubHkgJXUgYmxvY2tzIiwKLQkJCQkJCQlf bWRmZF9zZWdwYXRoKHJlbG4sIGZvcmtudW0sIG5leHRzZWdubyksCisJCQkJCQkJX21kZmRfc2Vn cGF0aChzZmlsZSwgbmV4dHNlZ25vKSwKIAkJCQkJCQlibGtubywgbmJsb2NrcykpKTsKIAkJfQog Ci0JCXYgPSBfbWRmZF9vcGVuc2VnKHJlbG4sIGZvcmtudW0sIG5leHRzZWdubywgZmxhZ3MpOwor CQl2ID0gX21kZmRfb3BlbnNlZyhzZmlsZSwgbmV4dHNlZ25vLCBmbGFncyk7CiAKIAkJaWYgKHYg PT0gTlVMTCkKIAkJewpAQCAtMTM0MSw3ICsxMjk3LDcgQEAgX21kZmRfZ2V0c2VnKFNNZ3JSZWxh dGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGJsa25vLAogCQkJZXJl cG9ydChFUlJPUiwKIAkJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCiAJCQkJCSBlcnJt c2coImNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiICh0YXJnZXQgYmxvY2sgJXUpOiAlbSIsCi0J CQkJCQkJX21kZmRfc2VncGF0aChyZWxuLCBmb3JrbnVtLCBuZXh0c2Vnbm8pLAorCQkJCQkJCV9t ZGZkX3NlZ3BhdGgoc2ZpbGUsIG5leHRzZWdubyksCiAJCQkJCQkJYmxrbm8pKSk7CiAJCX0KIAl9 CkBAIC0xMzUzLDcgKzEzMDksNyBAQCBfbWRmZF9nZXRzZWcoU01nclJlbGF0aW9uIHJlbG4sIEZv cmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgYmxrbm8sCiAgKiBHZXQgbnVtYmVyIG9mIGJs b2NrcyBwcmVzZW50IGluIGEgc2luZ2xlIGRpc2sgZmlsZQogICovCiBzdGF0aWMgQmxvY2tOdW1i ZXIKLV9tZG5ibG9ja3MoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgTWRm ZFZlYyAqc2VnKQorX21kbmJsb2NrcyhTTWdyRmlsZUhhbmRsZSBzZmlsZSwgTWRmZFZlYyAqc2Vn KQogewogCW9mZl90CQlsZW47CiAKQEAgLTEzNzYsMTYgKzEzMzIsMTYgQEAgX21kbmJsb2NrcyhT TWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBNZGZkVmVjICpzZWcpCiBpbnQK IG1kc3luY2ZpbGV0YWcoY29uc3QgRmlsZVRhZyAqZnRhZywgY2hhciAqcGF0aCkKIHsKLQlTTWdy UmVsYXRpb24gcmVsbiA9IHNtZ3JvcGVuKGZ0YWctPnJsb2NhdG9yLCBJbnZhbGlkQmFja2VuZElk KTsKKwlTTWdyRmlsZUhhbmRsZSBzZmlsZSA9IHNtZ3JvcGVuKGZ0YWctPnJsb2NhdG9yLCBJbnZh bGlkQmFja2VuZElkLCBmdGFnLT5mb3JrbnVtKTsKIAlGaWxlCQlmaWxlOwogCWJvb2wJCW5lZWRf dG9fY2xvc2U7CiAJaW50CQkJcmVzdWx0LAogCQkJCXNhdmVfZXJybm87CiAKIAkvKiBTZWUgaWYg d2UgYWxyZWFkeSBoYXZlIHRoZSBmaWxlIG9wZW4sIG9yIG5lZWQgdG8gb3BlbiBpdC4gKi8KLQlp ZiAoZnRhZy0+c2Vnbm8gPCByZWxuLT5tZF9udW1fb3Blbl9zZWdzW2Z0YWctPmZvcmtudW1dKQor CWlmIChmdGFnLT5zZWdubyA8IHNmaWxlLT5tZF9udW1fb3Blbl9zZWdzKQogCXsKLQkJZmlsZSA9 IHJlbG4tPm1kX3NlZ19mZHNbZnRhZy0+Zm9ya251bV1bZnRhZy0+c2Vnbm9dLm1kZmRfdmZkOwor CQlmaWxlID0gc2ZpbGUtPm1kX3NlZ19mZHNbZnRhZy0+c2Vnbm9dLm1kZmRfdmZkOwogCQlzdHJs Y3B5KHBhdGgsIEZpbGVQYXRoTmFtZShmaWxlKSwgTUFYUEdQQVRIKTsKIAkJbmVlZF90b19jbG9z ZSA9IGZhbHNlOwogCX0KQEAgLTEzOTMsNyArMTM0OSw3IEBAIG1kc3luY2ZpbGV0YWcoY29uc3Qg RmlsZVRhZyAqZnRhZywgY2hhciAqcGF0aCkKIAl7CiAJCWNoYXIJICAgKnA7CiAKLQkJcCA9IF9t ZGZkX3NlZ3BhdGgocmVsbiwgZnRhZy0+Zm9ya251bSwgZnRhZy0+c2Vnbm8pOworCQlwID0gX21k ZmRfc2VncGF0aChzZmlsZSwgZnRhZy0+c2Vnbm8pOwogCQlzdHJsY3B5KHBhdGgsIHAsIE1BWFBH UEFUSCk7CiAJCXBmcmVlKHApOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL3Nt Z3Ivc21nci5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9zbWdyL3NtZ3IuYwppbmRleCBjMWE1ZmVi Y2JmZC4uZGUxMDMzMjA1NzQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uvc21nci9z bWdyLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9zbWdyL3NtZ3IuYwpAQCAtNDEsMjcgKzQx LDI0IEBAIHR5cGVkZWYgc3RydWN0IGZfc21ncgogewogCXZvaWQJCSgqc21ncl9pbml0KSAodm9p ZCk7CS8qIG1heSBiZSBOVUxMICovCiAJdm9pZAkJKCpzbWdyX3NodXRkb3duKSAodm9pZCk7CS8q IG1heSBiZSBOVUxMICovCi0Jdm9pZAkJKCpzbWdyX29wZW4pIChTTWdyUmVsYXRpb24gcmVsbik7 Ci0Jdm9pZAkJKCpzbWdyX2Nsb3NlKSAoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9y a251bSk7Ci0Jdm9pZAkJKCpzbWdyX2NyZWF0ZSkgKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVt YmVyIGZvcmtudW0sCi0JCQkJCQkJCWJvb2wgaXNSZWRvKTsKLQlib29sCQkoKnNtZ3JfZXhpc3Rz KSAoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSk7Ci0Jdm9pZAkJKCpzbWdy X3VubGluaykgKFJlbEZpbGVMb2NhdG9yQmFja2VuZCBybG9jYXRvciwgRm9ya051bWJlciBmb3Jr bnVtLAotCQkJCQkJCQlib29sIGlzUmVkbyk7Ci0Jdm9pZAkJKCpzbWdyX2V4dGVuZCkgKFNNZ3JS ZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sCisJdm9pZAkJKCpzbWdyX29wZW4pIChT TWdyRmlsZUhhbmRsZSBzZmlsZSk7CisJdm9pZAkJKCpzbWdyX2Nsb3NlKSAoU01nckZpbGVIYW5k bGUgc2ZpbGUpOworCXZvaWQJCSgqc21ncl9jcmVhdGUpIChTTWdyRmlsZUhhbmRsZSBzZmlsZSwg Ym9vbCBpc1JlZG8pOworCWJvb2wJCSgqc21ncl9leGlzdHMpIChTTWdyRmlsZUhhbmRsZSBzZmls ZSk7CisJdm9pZAkJKCpzbWdyX3VubGluaykgKFNNZ3JGaWxlTG9jYXRvciBzbG9jYXRvciwgYm9v bCBpc1JlZG8pOworCXZvaWQJCSgqc21ncl9leHRlbmQpIChTTWdyRmlsZUhhbmRsZSBzZmlsZSwK IAkJCQkJCQkJQmxvY2tOdW1iZXIgYmxvY2tudW0sIGNoYXIgKmJ1ZmZlciwgYm9vbCBza2lwRnN5 bmMpOwotCWJvb2wJCSgqc21ncl9wcmVmZXRjaCkgKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVt YmVyIGZvcmtudW0sCisJYm9vbAkJKCpzbWdyX3ByZWZldGNoKSAoU01nckZpbGVIYW5kbGUgc2Zp bGUsCiAJCQkJCQkJCSAgQmxvY2tOdW1iZXIgYmxvY2tudW0pOwotCXZvaWQJCSgqc21ncl9yZWFk KSAoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwKKwl2b2lkCQkoKnNtZ3Jf cmVhZCkgKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLAogCQkJCQkJCSAgQmxvY2tOdW1iZXIgYmxvY2tu dW0sIGNoYXIgKmJ1ZmZlcik7Ci0Jdm9pZAkJKCpzbWdyX3dyaXRlKSAoU01nclJlbGF0aW9uIHJl bG4sIEZvcmtOdW1iZXIgZm9ya251bSwKKwl2b2lkCQkoKnNtZ3Jfd3JpdGUpIChTTWdyRmlsZUhh bmRsZSBzZmlsZSwKIAkJCQkJCQkgICBCbG9ja051bWJlciBibG9ja251bSwgY2hhciAqYnVmZmVy LCBib29sIHNraXBGc3luYyk7Ci0Jdm9pZAkJKCpzbWdyX3dyaXRlYmFjaykgKFNNZ3JSZWxhdGlv biByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sCisJdm9pZAkJKCpzbWdyX3dyaXRlYmFjaykgKFNN Z3JGaWxlSGFuZGxlIHNmaWxlLAogCQkJCQkJCQkgICBCbG9ja051bWJlciBibG9ja251bSwgQmxv Y2tOdW1iZXIgbmJsb2Nrcyk7Ci0JQmxvY2tOdW1iZXIgKCpzbWdyX25ibG9ja3MpIChTTWdyUmVs YXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtKTsKLQl2b2lkCQkoKnNtZ3JfdHJ1bmNhdGUp IChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLAotCQkJCQkJCQkgIEJsb2Nr TnVtYmVyIG5ibG9ja3MpOwotCXZvaWQJCSgqc21ncl9pbW1lZHN5bmMpIChTTWdyUmVsYXRpb24g cmVsbiwgRm9ya051bWJlciBmb3JrbnVtKTsKKwlCbG9ja051bWJlciAoKnNtZ3JfbmJsb2Nrcykg KFNNZ3JGaWxlSGFuZGxlIHNmaWxlKTsKKwl2b2lkCQkoKnNtZ3JfdHJ1bmNhdGUpIChTTWdyRmls ZUhhbmRsZSBzZmlsZSwgQmxvY2tOdW1iZXIgbmJsb2Nrcyk7CisJdm9pZAkJKCpzbWdyX2ltbWVk c3luYykgKFNNZ3JGaWxlSGFuZGxlIHNmaWxlKTsKIH0gZl9zbWdyOwogCiBzdGF0aWMgY29uc3Qg Zl9zbWdyIHNtZ3Jzd1tdID0gewpAQCAtODgsMTIgKzg1LDEyIEBAIHN0YXRpYyBjb25zdCBmX3Nt Z3Igc21ncnN3W10gPSB7CiBzdGF0aWMgY29uc3QgaW50IE5TbWdyID0gbGVuZ3Rob2Yoc21ncnN3 KTsKIAogLyoKLSAqIEVhY2ggYmFja2VuZCBoYXMgYSBoYXNodGFibGUgdGhhdCBzdG9yZXMgYWxs IGV4dGFudCBTTWdyUmVsYXRpb24gb2JqZWN0cy4KLSAqIEluIGFkZGl0aW9uLCAidW5vd25lZCIg U01nclJlbGF0aW9uIG9iamVjdHMgYXJlIGNoYWluZWQgdG9nZXRoZXIgaW4gYSBsaXN0LgorICog RWFjaCBiYWNrZW5kIGhhcyBhIGhhc2h0YWJsZSB0aGF0IHN0b3JlcyBhbGwgZXh0YW50IFNNZ3JG aWxlRGF0YSBvYmplY3RzLgorICogSW4gYWRkaXRpb24sICJ1bm93bmVkIiBTTWdyRmlsZSBvYmpl Y3RzIGFyZSBjaGFpbmVkIHRvZ2V0aGVyIGluIGEgbGlzdC4KICAqLwotc3RhdGljIEhUQUIgKlNN Z3JSZWxhdGlvbkhhc2ggPSBOVUxMOworc3RhdGljIEhUQUIgKlNNZ3JGaWxlSGFzaCA9IE5VTEw7 CiAKLXN0YXRpYyBkbGlzdF9oZWFkIHVub3duZWRfcmVsbnM7CitzdGF0aWMgZGxpc3RfaGVhZCB1 bm93bmVkX3NmaWxlczsKIAogLyogbG9jYWwgZnVuY3Rpb24gcHJvdG90eXBlcyAqLwogc3RhdGlj IHZvaWQgc21ncnNodXRkb3duKGludCBjb2RlLCBEYXR1bSBhcmcpOwpAQCAtMTQyLDUwICsxMzks NTAgQEAgc21ncnNodXRkb3duKGludCBjb2RlLCBEYXR1bSBhcmcpCiAgKgogICoJCVRoaXMgZG9l cyBub3QgYXR0ZW1wdCB0byBhY3R1YWxseSBvcGVuIHRoZSB1bmRlcmx5aW5nIGZpbGUuCiAgKi8K LVNNZ3JSZWxhdGlvbgotc21ncm9wZW4oUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IsIEJhY2tlbmRJ ZCBiYWNrZW5kKQorU01nckZpbGVIYW5kbGUKK3NtZ3JvcGVuKFJlbEZpbGVMb2NhdG9yIHJsb2Nh dG9yLCBCYWNrZW5kSWQgYmFja2VuZCwgRm9ya051bWJlciBmb3JrTnVtKQogewotCVJlbEZpbGVM b2NhdG9yQmFja2VuZCBicmxvY2F0b3I7Ci0JU01nclJlbGF0aW9uIHJlbG47CisJU01nckZpbGVM b2NhdG9yIHNsb2NhdG9yOworCVNNZ3JGaWxlSGFuZGxlIHNmaWxlOwogCWJvb2wJCWZvdW5kOwog Ci0JaWYgKFNNZ3JSZWxhdGlvbkhhc2ggPT0gTlVMTCkKKwlpZiAoU01nckZpbGVIYXNoID09IE5V TEwpCiAJewogCQkvKiBGaXJzdCB0aW1lIHRocm91Z2g6IGluaXRpYWxpemUgdGhlIGhhc2ggdGFi bGUgKi8KIAkJSEFTSENUTAkJY3RsOwogCi0JCWN0bC5rZXlzaXplID0gc2l6ZW9mKFJlbEZpbGVM b2NhdG9yQmFja2VuZCk7Ci0JCWN0bC5lbnRyeXNpemUgPSBzaXplb2YoU01nclJlbGF0aW9uRGF0 YSk7Ci0JCVNNZ3JSZWxhdGlvbkhhc2ggPSBoYXNoX2NyZWF0ZSgic21nciByZWxhdGlvbiB0YWJs ZSIsIDQwMCwKKwkJY3RsLmtleXNpemUgPSBzaXplb2YoU01nckZpbGVMb2NhdG9yKTsKKwkJY3Rs LmVudHJ5c2l6ZSA9IHNpemVvZihTTWdyRmlsZURhdGEpOworCQlTTWdyRmlsZUhhc2ggPSBoYXNo X2NyZWF0ZSgic21nciByZWxhdGlvbiB0YWJsZSIsIDQwMCwKIAkJCQkJCQkJCSAgICZjdGwsIEhB U0hfRUxFTSB8IEhBU0hfQkxPQlMpOwotCQlkbGlzdF9pbml0KCZ1bm93bmVkX3JlbG5zKTsKKwkJ ZGxpc3RfaW5pdCgmdW5vd25lZF9zZmlsZXMpOwogCX0KIAogCS8qIExvb2sgdXAgb3IgY3JlYXRl IGFuIGVudHJ5ICovCi0JYnJsb2NhdG9yLmxvY2F0b3IgPSBybG9jYXRvcjsKLQlicmxvY2F0b3Iu YmFja2VuZCA9IGJhY2tlbmQ7Ci0JcmVsbiA9IChTTWdyUmVsYXRpb24pIGhhc2hfc2VhcmNoKFNN Z3JSZWxhdGlvbkhhc2gsCi0JCQkJCQkJCQkgICh2b2lkICopICZicmxvY2F0b3IsCi0JCQkJCQkJ CQkgIEhBU0hfRU5URVIsICZmb3VuZCk7CisJc2xvY2F0b3IubG9jYXRvciA9IHJsb2NhdG9yOwor CXNsb2NhdG9yLmJhY2tlbmQgPSBiYWNrZW5kOworCXNsb2NhdG9yLmZvcmtudW0gPSBmb3JrTnVt OworCXNmaWxlID0gKFNNZ3JGaWxlSGFuZGxlKSBoYXNoX3NlYXJjaChTTWdyRmlsZUhhc2gsCisJ CQkJCQkJCQkJICh2b2lkICopICZzbG9jYXRvciwKKwkJCQkJCQkJCQkgSEFTSF9FTlRFUiwgJmZv dW5kKTsKIAogCS8qIEluaXRpYWxpemUgaXQgaWYgbm90IHByZXNlbnQgYmVmb3JlICovCiAJaWYg KCFmb3VuZCkKIAl7CiAJCS8qIGhhc2hfc2VhcmNoIGFscmVhZHkgZmlsbGVkIGluIHRoZSBsb29r dXAga2V5ICovCi0JCXJlbG4tPnNtZ3Jfb3duZXIgPSBOVUxMOwotCQlyZWxuLT5zbWdyX3Rhcmdi bG9jayA9IEludmFsaWRCbG9ja051bWJlcjsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPD0gTUFYX0ZP UktOVU07ICsraSkKLQkJCXJlbG4tPnNtZ3JfY2FjaGVkX25ibG9ja3NbaV0gPSBJbnZhbGlkQmxv Y2tOdW1iZXI7Ci0JCXJlbG4tPnNtZ3Jfd2hpY2ggPSAwOwkvKiB3ZSBvbmx5IGhhdmUgbWQuYyBh dCBwcmVzZW50ICovCisJCXNmaWxlLT5zbWdyX293bmVyID0gTlVMTDsKKwkJc2ZpbGUtPnNtZ3Jf dGFyZ2Jsb2NrID0gSW52YWxpZEJsb2NrTnVtYmVyOworCQlzZmlsZS0+c21ncl9jYWNoZWRfbmJs b2NrcyA9IEludmFsaWRCbG9ja051bWJlcjsKKwkJc2ZpbGUtPnNtZ3Jfd2hpY2ggPSAwOwkvKiB3 ZSBvbmx5IGhhdmUgbWQuYyBhdCBwcmVzZW50ICovCiAKIAkJLyogaW1wbGVtZW50YXRpb24tc3Bl Y2lmaWMgaW5pdGlhbGl6YXRpb24gKi8KLQkJc21ncnN3W3JlbG4tPnNtZ3Jfd2hpY2hdLnNtZ3Jf b3BlbihyZWxuKTsKKwkJc21ncnN3W3NmaWxlLT5zbWdyX3doaWNoXS5zbWdyX29wZW4oc2ZpbGUp OwogCiAJCS8qIGl0IGhhcyBubyBvd25lciB5ZXQgKi8KLQkJZGxpc3RfcHVzaF90YWlsKCZ1bm93 bmVkX3JlbG5zLCAmcmVsbi0+bm9kZSk7CisJCWRsaXN0X3B1c2hfdGFpbCgmdW5vd25lZF9zZmls ZXMsICZzZmlsZS0+bm9kZSk7CiAJfQogCi0JcmV0dXJuIHJlbG47CisJcmV0dXJuIHNmaWxlOwog fQogCiAvKgpAQCAtMTk1LDcgKzE5Miw3IEBAIHNtZ3JvcGVuKFJlbEZpbGVMb2NhdG9yIHJsb2Nh dG9yLCBCYWNrZW5kSWQgYmFja2VuZCkKICAqIHRoZSBvbmx5IHN1Y2ggb3duZXJzIGV4aXN0IGlu IHRoZSByZWxjYWNoZS4KICAqLwogdm9pZAotc21ncnNldG93bmVyKFNNZ3JSZWxhdGlvbiAqb3du ZXIsIFNNZ3JSZWxhdGlvbiByZWxuKQorc21ncnNldG93bmVyKFNNZ3JGaWxlSGFuZGxlICpvd25l ciwgU01nckZpbGVIYW5kbGUgc2ZpbGUpCiB7CiAJLyogV2UgZG9uJ3Qgc3VwcG9ydCAiZGlzb3du aW5nIiBhbiBTTWdyUmVsYXRpb24gaGVyZSwgdXNlIHNtZ3JjbGVhcm93bmVyICovCiAJQXNzZXJ0 KG93bmVyICE9IE5VTEwpOwpAQCAtMjA2LDY4ICsyMDMsNjYgQEAgc21ncnNldG93bmVyKFNNZ3JS ZWxhdGlvbiAqb3duZXIsIFNNZ3JSZWxhdGlvbiByZWxuKQogCSAqIGRlcGVuZGluZyBvbiB0aGUg b3JkZXIgb2YgcHJvY2Vzc2luZy4gIEl0J3Mgb2sgdG8gY2xvc2UgdGhlIG9sZAogCSAqIHJlbGNh Y2hlIGVudHJ5IGVhcmx5IGluIHRoYXQgY2FzZS4pCiAJICoKLQkgKiBJZiB0aGVyZSBpc24ndCBh biBvbGQgb3duZXIsIHRoZW4gdGhlIHJlbG4gc2hvdWxkIGJlIGluIHRoZSB1bm93bmVkCisJICog SWYgdGhlcmUgaXNuJ3QgYW4gb2xkIG93bmVyLCB0aGVuIHRoZSBzZmlsZSBzaG91bGQgYmUgaW4g dGhlIHVub3duZWQKIAkgKiBsaXN0LCBhbmQgd2UgbmVlZCB0byByZW1vdmUgaXQuCiAJICovCi0J aWYgKHJlbG4tPnNtZ3Jfb3duZXIpCi0JCSoocmVsbi0+c21ncl9vd25lcikgPSBOVUxMOworCWlm IChzZmlsZS0+c21ncl9vd25lcikKKwkJKihzZmlsZS0+c21ncl9vd25lcikgPSBOVUxMOwogCWVs c2UKLQkJZGxpc3RfZGVsZXRlKCZyZWxuLT5ub2RlKTsKKwkJZGxpc3RfZGVsZXRlKCZzZmlsZS0+ bm9kZSk7CiAKIAkvKiBOb3cgZXN0YWJsaXNoIHRoZSBvd25lcnNoaXAgcmVsYXRpb25zaGlwLiAq LwotCXJlbG4tPnNtZ3Jfb3duZXIgPSBvd25lcjsKLQkqb3duZXIgPSByZWxuOworCXNmaWxlLT5z bWdyX293bmVyID0gb3duZXI7CisJKm93bmVyID0gc2ZpbGU7CiB9CiAKIC8qCi0gKiBzbWdyY2xl YXJvd25lcigpIC0tIFJlbW92ZSBsb25nLWxpdmVkIHJlZmVyZW5jZSB0byBhbiBTTWdyUmVsYXRp b24gb2JqZWN0CisgKiBzbWdyY2xlYXJvd25lcigpIC0tIFJlbW92ZSBsb25nLWxpdmVkIHJlZmVy ZW5jZSB0byBhbiBTTWdyRmlsZUhhbmRsZSBvYmplY3QKICAqCQkJCQkgICBpZiBvbmUgZXhpc3Rz CiAgKi8KIHZvaWQKLXNtZ3JjbGVhcm93bmVyKFNNZ3JSZWxhdGlvbiAqb3duZXIsIFNNZ3JSZWxh dGlvbiByZWxuKQorc21ncmNsZWFyb3duZXIoU01nckZpbGVIYW5kbGUgKm93bmVyLCBTTWdyRmls ZUhhbmRsZSBzZmlsZSkKIHsKIAkvKiBEbyBub3RoaW5nIGlmIHRoZSBTTWdyUmVsYXRpb24gb2Jq ZWN0IGlzIG5vdCBvd25lZCBieSB0aGUgb3duZXIgKi8KLQlpZiAocmVsbi0+c21ncl9vd25lciAh PSBvd25lcikKKwlpZiAoc2ZpbGUtPnNtZ3Jfb3duZXIgIT0gb3duZXIpCiAJCXJldHVybjsKIAog CS8qIHVuc2V0IHRoZSBvd25lcidzIHJlZmVyZW5jZSAqLwogCSpvd25lciA9IE5VTEw7CiAKIAkv KiB1bnNldCBvdXIgcmVmZXJlbmNlIHRvIHRoZSBvd25lciAqLwotCXJlbG4tPnNtZ3Jfb3duZXIg PSBOVUxMOworCXNmaWxlLT5zbWdyX293bmVyID0gTlVMTDsKIAogCS8qIGFkZCB0byBsaXN0IG9m IHVub3duZWQgcmVsYXRpb25zICovCi0JZGxpc3RfcHVzaF90YWlsKCZ1bm93bmVkX3JlbG5zLCAm cmVsbi0+bm9kZSk7CisJZGxpc3RfcHVzaF90YWlsKCZ1bm93bmVkX3NmaWxlcywgJnNmaWxlLT5u b2RlKTsKIH0KIAogLyoKLSAqCXNtZ3JleGlzdHMoKSAtLSBEb2VzIHRoZSB1bmRlcmx5aW5nIGZp bGUgZm9yIGEgZm9yayBleGlzdD8KKyAqCXNtZ3JleGlzdHMoKSAtLSBEb2VzIHRoZSB1bmRlcmx5 aW5nIGZpbGUgZXhpc3Q/CiAgKi8KIGJvb2wKLXNtZ3JleGlzdHMoU01nclJlbGF0aW9uIHJlbG4s IEZvcmtOdW1iZXIgZm9ya251bSkKK3NtZ3JleGlzdHMoU01nckZpbGVIYW5kbGUgc2ZpbGUpCiB7 Ci0JcmV0dXJuIHNtZ3Jzd1tyZWxuLT5zbWdyX3doaWNoXS5zbWdyX2V4aXN0cyhyZWxuLCBmb3Jr bnVtKTsKKwlyZXR1cm4gc21ncnN3W3NmaWxlLT5zbWdyX3doaWNoXS5zbWdyX2V4aXN0cyhzZmls ZSk7CiB9CiAKIC8qCi0gKglzbWdyY2xvc2UoKSAtLSBDbG9zZSBhbmQgZGVsZXRlIGFuIFNNZ3JS ZWxhdGlvbiBvYmplY3QuCisgKglzbWdyY2xvc2UoKSAtLSBDbG9zZSBhbmQgZGVsZXRlIGFuIFNN Z3JGaWxlIG9iamVjdC4KICAqLwogdm9pZAotc21ncmNsb3NlKFNNZ3JSZWxhdGlvbiByZWxuKQor c21ncmNsb3NlKFNNZ3JGaWxlSGFuZGxlIHNmaWxlKQogewotCVNNZ3JSZWxhdGlvbiAqb3duZXI7 Ci0JRm9ya051bWJlcglmb3JrbnVtOworCVNNZ3JGaWxlSGFuZGxlICpvd25lcjsKIAotCWZvciAo Zm9ya251bSA9IDA7IGZvcmtudW0gPD0gTUFYX0ZPUktOVU07IGZvcmtudW0rKykKLQkJc21ncnN3 W3JlbG4tPnNtZ3Jfd2hpY2hdLnNtZ3JfY2xvc2UocmVsbiwgZm9ya251bSk7CisJc21ncnN3W3Nm aWxlLT5zbWdyX3doaWNoXS5zbWdyX2Nsb3NlKHNmaWxlKTsKIAotCW93bmVyID0gcmVsbi0+c21n cl9vd25lcjsKKwlvd25lciA9IHNmaWxlLT5zbWdyX293bmVyOwogCiAJaWYgKCFvd25lcikKLQkJ ZGxpc3RfZGVsZXRlKCZyZWxuLT5ub2RlKTsKKwkJZGxpc3RfZGVsZXRlKCZzZmlsZS0+bm9kZSk7 CiAKLQlpZiAoaGFzaF9zZWFyY2goU01nclJlbGF0aW9uSGFzaCwKLQkJCQkJKHZvaWQgKikgJihy ZWxuLT5zbWdyX3Jsb2NhdG9yKSwKKwlpZiAoaGFzaF9zZWFyY2goU01nckZpbGVIYXNoLAorCQkJ CQkodm9pZCAqKSAmKHNmaWxlLT5zbWdyX2xvY2F0b3IpLAogCQkJCQlIQVNIX1JFTU9WRSwgTlVM TCkgPT0gTlVMTCkKIAkJZWxvZyhFUlJPUiwgIlNNZ3JSZWxhdGlvbiBoYXNodGFibGUgY29ycnVw dGVkIik7CiAKQEAgLTI4NCwxNCArMjc5LDExIEBAIHNtZ3JjbG9zZShTTWdyUmVsYXRpb24gcmVs bikKICAqCiAgKglUaGUgb2JqZWN0IHJlbWFpbnMgdmFsaWQuCiAgKi8KLXZvaWQKLXNtZ3JyZWxl YXNlKFNNZ3JSZWxhdGlvbiByZWxuKQorc3RhdGljIHZvaWQKK3NtZ3JyZWxlYXNlKFNNZ3JGaWxl SGFuZGxlIHNmaWxlKQogewotCWZvciAoRm9ya051bWJlciBmb3JrbnVtID0gMDsgZm9ya251bSA8 PSBNQVhfRk9SS05VTTsgZm9ya251bSsrKQotCXsKLQkJc21ncnN3W3JlbG4tPnNtZ3Jfd2hpY2hd LnNtZ3JfY2xvc2UocmVsbiwgZm9ya251bSk7Ci0JCXJlbG4tPnNtZ3JfY2FjaGVkX25ibG9ja3Nb Zm9ya251bV0gPSBJbnZhbGlkQmxvY2tOdW1iZXI7Ci0JfQorCXNtZ3Jzd1tzZmlsZS0+c21ncl93 aGljaF0uc21ncl9jbG9zZShzZmlsZSk7CisJc2ZpbGUtPnNtZ3JfY2FjaGVkX25ibG9ja3MgPSBJ bnZhbGlkQmxvY2tOdW1iZXI7CiB9CiAKIC8qCkBAIC0zMDMsMTYgKzI5NSwxNiBAQCB2b2lkCiBz bWdycmVsZWFzZWFsbCh2b2lkKQogewogCUhBU0hfU0VRX1NUQVRVUyBzdGF0dXM7Ci0JU01nclJl bGF0aW9uIHJlbG47CisJU01nckZpbGVIYW5kbGUgc2ZpbGU7CiAKIAkvKiBOb3RoaW5nIHRvIGRv IGlmIGhhc2h0YWJsZSBub3Qgc2V0IHVwICovCi0JaWYgKFNNZ3JSZWxhdGlvbkhhc2ggPT0gTlVM TCkKKwlpZiAoU01nckZpbGVIYXNoID09IE5VTEwpCiAJCXJldHVybjsKIAotCWhhc2hfc2VxX2lu aXQoJnN0YXR1cywgU01nclJlbGF0aW9uSGFzaCk7CisJaGFzaF9zZXFfaW5pdCgmc3RhdHVzLCBT TWdyRmlsZUhhc2gpOwogCi0Jd2hpbGUgKChyZWxuID0gKFNNZ3JSZWxhdGlvbikgaGFzaF9zZXFf c2VhcmNoKCZzdGF0dXMpKSAhPSBOVUxMKQotCQlzbWdycmVsZWFzZShyZWxuKTsKKwl3aGlsZSAo KHNmaWxlID0gKFNNZ3JGaWxlSGFuZGxlKSBoYXNoX3NlcV9zZWFyY2goJnN0YXR1cykpICE9IE5V TEwpCisJCXNtZ3JyZWxlYXNlKHNmaWxlKTsKIH0KIAogLyoKQEAgLTMyMiwxNiArMzE0LDE2IEBA IHZvaWQKIHNtZ3JjbG9zZWFsbCh2b2lkKQogewogCUhBU0hfU0VRX1NUQVRVUyBzdGF0dXM7Ci0J U01nclJlbGF0aW9uIHJlbG47CisJU01nckZpbGVIYW5kbGUgc2ZpbGU7CiAKIAkvKiBOb3RoaW5n IHRvIGRvIGlmIGhhc2h0YWJsZSBub3Qgc2V0IHVwICovCi0JaWYgKFNNZ3JSZWxhdGlvbkhhc2gg PT0gTlVMTCkKKwlpZiAoU01nckZpbGVIYXNoID09IE5VTEwpCiAJCXJldHVybjsKIAotCWhhc2hf c2VxX2luaXQoJnN0YXR1cywgU01nclJlbGF0aW9uSGFzaCk7CisJaGFzaF9zZXFfaW5pdCgmc3Rh dHVzLCBTTWdyRmlsZUhhc2gpOwogCi0Jd2hpbGUgKChyZWxuID0gKFNNZ3JSZWxhdGlvbikgaGFz aF9zZXFfc2VhcmNoKCZzdGF0dXMpKSAhPSBOVUxMKQotCQlzbWdyY2xvc2UocmVsbik7CisJd2hp bGUgKChzZmlsZSA9IChTTWdyRmlsZUhhbmRsZSkgaGFzaF9zZXFfc2VhcmNoKCZzdGF0dXMpKSAh PSBOVUxMKQorCQlzbWdyY2xvc2Uoc2ZpbGUpOwogfQogCiAvKgpAQCAtMzQzLDExMSArMzM1LDEx MiBAQCBzbWdyY2xvc2VhbGwodm9pZCkKICAqIHN1Y2ggZW50cnkgZXhpc3RzIGFscmVhZHkuCiAg Ki8KIHZvaWQKLXNtZ3JjbG9zZXJlbGxvY2F0b3IoUmVsRmlsZUxvY2F0b3JCYWNrZW5kIHJsb2Nh dG9yKQorc21ncmNsb3NlcmVsbG9jYXRvcihSZWxGaWxlTG9jYXRvciBybG9jYXRvciwgQmFja2Vu ZElkIGJhY2tlbmQpCiB7Ci0JU01nclJlbGF0aW9uIHJlbG47CisJU01nckZpbGVIYW5kbGUgc2Zp bGU7CiAKIAkvKiBOb3RoaW5nIHRvIGRvIGlmIGhhc2h0YWJsZSBub3Qgc2V0IHVwICovCi0JaWYg KFNNZ3JSZWxhdGlvbkhhc2ggPT0gTlVMTCkKKwlpZiAoU01nckZpbGVIYXNoID09IE5VTEwpCiAJ CXJldHVybjsKIAotCXJlbG4gPSAoU01nclJlbGF0aW9uKSBoYXNoX3NlYXJjaChTTWdyUmVsYXRp b25IYXNoLAotCQkJCQkJCQkJICAodm9pZCAqKSAmcmxvY2F0b3IsCi0JCQkJCQkJCQkgIEhBU0hf RklORCwgTlVMTCk7Ci0JaWYgKHJlbG4gIT0gTlVMTCkKLQkJc21ncmNsb3NlKHJlbG4pOworCWZv ciAoaW50IGkgPSAwOyBpIDw9IE1BWF9GT1JLTlVNOyBpKyspCisJeworCQlTTWdyRmlsZUxvY2F0 b3Igc2xvY2F0b3IgPSB7IHJsb2NhdG9yLCBiYWNrZW5kLCBpIH07CisKKwkJc2ZpbGUgPSAoU01n ckZpbGVIYW5kbGUpIGhhc2hfc2VhcmNoKFNNZ3JGaWxlSGFzaCwKKwkJCQkJCQkJCQkJICh2b2lk ICopICZzbG9jYXRvciwKKwkJCQkJCQkJCQkJIEhBU0hfRklORCwgTlVMTCk7CisJCWlmIChzZmls ZSAhPSBOVUxMKQorCQkJc21ncmNsb3NlKHNmaWxlKTsKKwl9CiB9CiAKIC8qCi0gKglzbWdyY3Jl YXRlKCkgLS0gQ3JlYXRlIGEgbmV3IHJlbGF0aW9uLgorICoJc21ncmNyZWF0ZSgpIC0tIENyZWF0 ZSBhIG5ldyBmaWxlLgogICoKLSAqCQlHaXZlbiBhbiBhbHJlYWR5LWNyZWF0ZWQgKGJ1dCBwcmVz dW1hYmx5IHVudXNlZCkgU01nclJlbGF0aW9uLAorICoJCUdpdmVuIGFuIGFscmVhZHktY3JlYXRl ZCAoYnV0IHByZXN1bWFibHkgdW51c2VkKSBTTWdyRmlsZUhhbmRsZSwKICAqCQljYXVzZSB0aGUg dW5kZXJseWluZyBkaXNrIGZpbGUgb3Igb3RoZXIgc3RvcmFnZSBmb3IgdGhlIGZvcmsKICAqCQl0 byBiZSBjcmVhdGVkLgogICovCiB2b2lkCi1zbWdyY3JlYXRlKFNNZ3JSZWxhdGlvbiByZWxuLCBG b3JrTnVtYmVyIGZvcmtudW0sIGJvb2wgaXNSZWRvKQorc21ncmNyZWF0ZShTTWdyRmlsZUhhbmRs ZSBzZmlsZSwgYm9vbCBpc1JlZG8pCiB7Ci0Jc21ncnN3W3JlbG4tPnNtZ3Jfd2hpY2hdLnNtZ3Jf Y3JlYXRlKHJlbG4sIGZvcmtudW0sIGlzUmVkbyk7CisJc21ncnN3W3NmaWxlLT5zbWdyX3doaWNo XS5zbWdyX2NyZWF0ZShzZmlsZSwgaXNSZWRvKTsKIH0KIAogLyoKLSAqCXNtZ3Jkb3N5bmNhbGwo KSAtLSBJbW1lZGlhdGVseSBzeW5jIGFsbCBmb3JrcyBvZiBhbGwgZ2l2ZW4gcmVsYXRpb25zCisg KglzbWdydW5saW5rX211bHRpKCkgLS0gSW1tZWRpYXRlbHkgdW5saW5rIGdpdmVuIGZvcmtzIG9m IGdpdmVuIHJlbGF0aW9uCiAgKgotICoJCUFsbCBmb3JrcyBvZiBhbGwgZ2l2ZW4gcmVsYXRpb25z IGFyZSBzeW5jZWQgb3V0IHRvIHRoZSBzdG9yZS4KKyAqCQlUaGUgZ2l2ZW4gZm9ya3Mgb2YgdGhl IHJlbGF0aW9uIGFyZSByZW1vdmVkIGZyb20gdGhlIHN0b3JlLiAgVGhpcworICoJCXNob3VsZCBu b3QgYmUgdXNlZCBkdXJpbmcgdHJhbnNhY3Rpb25hbCBvcGVyYXRpb25zLCBzaW5jZSBpdCBjYW4n dCBiZQorICoJCXVuZG9uZS4KKyAqCisgKgkJVGhpcyBoYW5kbGVzIG11bHRpcGxlIGZvcmtzIGlu IG9uZSBjYWxsLCBiZWNhdXNlIHRoZSBjYWNoZSBpbnZhbGlkYXRpb24KKyAqCQloYXBwZW5zIGF0 IHJlbGF0aW9uIGdyYW51bGFyaXR5LiBJZiB3ZSBoYWQgYW4gc21ncnVubGluaygpIGZ1bmN0aW9u CisgKgkJdG8gdW5saW5rIGp1c3QgYSBzaW5nbGUgc21nciBmaWxlLCBhbmQgdGhlIGNhbGxlciB3 YW50ZWQgdG8gZGVsZXRlCisgKgkJbXVsdGlwbGUgZm9ya3Mgb2YgYSBzaW5nbGUgcmVsYXRpb24s IGVhY2ggY2FsbCB3b3VsZCBzZW5kIGEgbmV3CisgKgkJY2FjaGUgaW52YWxpZGF0aW9uIGV2ZW50 LCB3aGljaCB3b3VsZCBiZSB3YXN0ZWZ1bC4KICAqCi0gKgkJVGhpcyBpcyBlcXVpdmFsZW50IHRv IEZsdXNoUmVsYXRpb25CdWZmZXJzKCkgZm9yIGVhY2ggc21nciByZWxhdGlvbiwKLSAqCQl0aGVu IGNhbGxpbmcgc21ncmltbWVkc3luYygpIGZvciBhbGwgZm9ya3Mgb2YgZWFjaCByZWxhdGlvbiwg YnV0IGl0J3MKLSAqCQlzaWduaWZpY2FudGx5IHF1aWNrZXIgc28gc2hvdWxkIGJlIHByZWZlcnJl ZCB3aGVuIHBvc3NpYmxlLgorICoJCUlmIGlzUmVkbyBpcyB0cnVlLCBpdCBpcyBva2F5IGZvciB0 aGUgdW5kZXJseWluZyBmaWxlKHMpIHRvIGJlIGdvbmUKKyAqCQlhbHJlYWR5LgogICovCiB2b2lk Ci1zbWdyZG9zeW5jYWxsKFNNZ3JSZWxhdGlvbiAqcmVscywgaW50IG5yZWxzKQorc21ncnVubGlu a19tdWx0aShSZWxGaWxlTG9jYXRvciBybG9jYXRvciwgQmFja2VuZElkIGJhY2tlbmQsIEZvcmtO dW1iZXIgKmZvcmtzLCBpbnQgbmZvcmtzLCBib29sIGlzUmVkbykKIHsKKwlpbnQJCQl3aGljaDsK IAlpbnQJCQlpID0gMDsKLQlGb3JrTnVtYmVyCWZvcmtudW07CiAKLQlpZiAobnJlbHMgPT0gMCkK LQkJcmV0dXJuOworCXdoaWNoID0gMDsJLyogd2Ugb25seSBoYXZlIG1kLmMgYXQgcHJlc2VudCAq LwogCi0JRmx1c2hSZWxhdGlvbnNBbGxCdWZmZXJzKHJlbHMsIG5yZWxzKTsKKwkvKiBDbG9zZSB0 aGUgZm9ya3MgYXQgc21nciBsZXZlbCAqLworCXNtZ3JjbG9zZXJlbGxvY2F0b3IocmxvY2F0b3Is IGJhY2tlbmQpOwogCiAJLyoKLQkgKiBTeW5jIHRoZSBwaHlzaWNhbCBmaWxlKHMpLgorCSAqIFNl bmQgYSBzaGFyZWQtaW52YWwgbWVzc2FnZSB0byBmb3JjZSBvdGhlciBiYWNrZW5kcyB0byBjbG9z ZSBhbnkKKwkgKiBkYW5nbGluZyBzbWdyIHJlZmVyZW5jZXMgdGhleSBtYXkgaGF2ZSBmb3IgdGhl c2UgcmVscy4gIFdlIHNob3VsZCBkbworCSAqIHRoaXMgYmVmb3JlIHN0YXJ0aW5nIHRoZSBhY3R1 YWwgdW5saW5raW5nLCBpbiBjYXNlIHdlIGZhaWwgcGFydHdheQorCSAqIHRocm91Z2ggdGhhdCBz dGVwLiAgTm90ZSB0aGF0IHRoZSBzaW52YWwgbWVzc2FnZXMgd2lsbCBldmVudHVhbGx5IGNvbWUK KwkgKiBiYWNrIHRvIHRoaXMgYmFja2VuZCwgdG9vLCBhbmQgdGhlcmVieSBwcm92aWRlIGEgYmFj a3N0b3AgdGhhdCB3ZQorCSAqIGNsb3NlZCBvdXIgb3duIHNtZ3IgcmVsLgogCSAqLwotCWZvciAo aSA9IDA7IGkgPCBucmVsczsgaSsrKQotCXsKLQkJaW50CQkJd2hpY2ggPSByZWxzW2ldLT5zbWdy X3doaWNoOworCUNhY2hlSW52YWxpZGF0ZVNtZ3IocmxvY2F0b3IsIGJhY2tlbmQpOwogCi0JCWZv ciAoZm9ya251bSA9IDA7IGZvcmtudW0gPD0gTUFYX0ZPUktOVU07IGZvcmtudW0rKykKLQkJewot CQkJaWYgKHNtZ3Jzd1t3aGljaF0uc21ncl9leGlzdHMocmVsc1tpXSwgZm9ya251bSkpCi0JCQkJ c21ncnN3W3doaWNoXS5zbWdyX2ltbWVkc3luYyhyZWxzW2ldLCBmb3JrbnVtKTsKLQkJfQorCS8q CisJICogRGVsZXRlIHRoZSBwaHlzaWNhbCBmaWxlKHMpLgorCSAqCisJICogTm90ZTogc21ncl91 bmxpbmsgbXVzdCB0cmVhdCBkZWxldGlvbiBmYWlsdXJlIGFzIGEgV0FSTklORywgbm90IGFuCisJ ICogRVJST1IsIGJlY2F1c2Ugd2UndmUgYWxyZWFkeSBkZWNpZGVkIHRvIGNvbW1pdCBvciBhYm9y dCB0aGUgY3VycmVudAorCSAqIHhhY3QuCisJICovCisJZm9yIChpID0gMDsgaSA8IG5mb3Jrczsg aSsrKQorCXsKKwkJU01nckZpbGVMb2NhdG9yIHNsb2NhdG9yID0geyBybG9jYXRvciwgYmFja2Vu ZCwgZm9ya3NbaV0gfTsKKwkJc21ncnN3W3doaWNoXS5zbWdyX3VubGluayhzbG9jYXRvciwgaXNS ZWRvKTsKIAl9CiB9CiAKIC8qCi0gKglzbWdyZG91bmxpbmthbGwoKSAtLSBJbW1lZGlhdGVseSB1 bmxpbmsgYWxsIGZvcmtzIG9mIGFsbCBnaXZlbiByZWxhdGlvbnMKLSAqCi0gKgkJQWxsIGZvcmtz IG9mIGFsbCBnaXZlbiByZWxhdGlvbnMgYXJlIHJlbW92ZWQgZnJvbSB0aGUgc3RvcmUuICBUaGlz Ci0gKgkJc2hvdWxkIG5vdCBiZSB1c2VkIGR1cmluZyB0cmFuc2FjdGlvbmFsIG9wZXJhdGlvbnMs IHNpbmNlIGl0IGNhbid0IGJlCi0gKgkJdW5kb25lLgorICoJc21ncmRvdW5saW5rKCkgLS0gSW1t ZWRpYXRlbHkgdW5saW5rIGEgZmlsZQogICoKICAqCQlJZiBpc1JlZG8gaXMgdHJ1ZSwgaXQgaXMg b2theSBmb3IgdGhlIHVuZGVybHlpbmcgZmlsZShzKSB0byBiZSBnb25lCiAgKgkJYWxyZWFkeS4K KyAqCisgKiBUbyByZW1vdmUgYSByZWxhdGlvbiB0cmFuc2FjdGlvbmFsbHksIHNlZSBSZWxhdGlv bkRyb3BTdG9yYWdlKCkgaW5zdGVhZC4KKyAqIFRoaXMgd2lsbCBjYXVzZSBjYWNoZSBpbnZhbGlk YXRpb24gb2YgYWxsIGZvcmtzIG9mIHRoZSByZWxhdGlvbiwgbm90IGp1c3QKKyAqIHRoaXMgb25l LgogICovCiB2b2lkCi1zbWdyZG91bmxpbmthbGwoU01nclJlbGF0aW9uICpyZWxzLCBpbnQgbnJl bHMsIGJvb2wgaXNSZWRvKQorc21ncnVubGluayhTTWdyRmlsZUhhbmRsZSBzZmlsZSwgYm9vbCBp c1JlZG8pCiB7Ci0JaW50CQkJaSA9IDA7Ci0JUmVsRmlsZUxvY2F0b3JCYWNrZW5kICpybG9jYXRv cnM7Ci0JRm9ya051bWJlcglmb3JrbnVtOwotCi0JaWYgKG5yZWxzID09IDApCi0JCXJldHVybjsK LQotCS8qCi0JICogR2V0IHJpZCBvZiBhbnkgcmVtYWluaW5nIGJ1ZmZlcnMgZm9yIHRoZSByZWxh dGlvbnMuICBidWZtZ3Igd2lsbCBqdXN0Ci0JICogZHJvcCB0aGVtIHdpdGhvdXQgYm90aGVyaW5n IHRvIHdyaXRlIHRoZSBjb250ZW50cy4KLQkgKi8KLQlEcm9wUmVsYXRpb25zQWxsQnVmZmVycyhy ZWxzLCBucmVscyk7Ci0KLQkvKgotCSAqIGNyZWF0ZSBhbiBhcnJheSB3aGljaCBjb250YWlucyBh bGwgcmVsYXRpb25zIHRvIGJlIGRyb3BwZWQsIGFuZCBjbG9zZQotCSAqIGVhY2ggcmVsYXRpb24n cyBmb3JrcyBhdCB0aGUgc21nciBsZXZlbCB3aGlsZSBhdCBpdAotCSAqLwotCXJsb2NhdG9ycyA9 IHBhbGxvYyhzaXplb2YoUmVsRmlsZUxvY2F0b3JCYWNrZW5kKSAqIG5yZWxzKTsKLQlmb3IgKGkg PSAwOyBpIDwgbnJlbHM7IGkrKykKLQl7Ci0JCVJlbEZpbGVMb2NhdG9yQmFja2VuZCBybG9jYXRv ciA9IHJlbHNbaV0tPnNtZ3JfcmxvY2F0b3I7Ci0JCWludAkJCXdoaWNoID0gcmVsc1tpXS0+c21n cl93aGljaDsKKwlTTWdyRmlsZUxvY2F0b3IgbG9jYXRvcjsKKwlpbnQJCQl3aGljaDsKIAotCQly bG9jYXRvcnNbaV0gPSBybG9jYXRvcjsKKwkvKiByZW1lbWJlciBiZWZvcmUgY2xvc2luZyAqLwor CXdoaWNoID0gc2ZpbGUtPnNtZ3Jfd2hpY2g7CisJbG9jYXRvciA9IHNmaWxlLT5zbWdyX2xvY2F0 b3I7CiAKLQkJLyogQ2xvc2UgdGhlIGZvcmtzIGF0IHNtZ3IgbGV2ZWwgKi8KLQkJZm9yIChmb3Jr bnVtID0gMDsgZm9ya251bSA8PSBNQVhfRk9SS05VTTsgZm9ya251bSsrKQotCQkJc21ncnN3W3do aWNoXS5zbWdyX2Nsb3NlKHJlbHNbaV0sIGZvcmtudW0pOwotCX0KKwkvKiBDbG9zZSB0aGUgZmls ZSBhdCBzbWdyIGxldmVsICovCisJc21ncmNsb3NlKHNmaWxlKTsKIAogCS8qCiAJICogU2VuZCBh IHNoYXJlZC1pbnZhbCBtZXNzYWdlIHRvIGZvcmNlIG90aGVyIGJhY2tlbmRzIHRvIGNsb3NlIGFu eQpAQCAtNDU3LDggKzQ1MCw3IEBAIHNtZ3Jkb3VubGlua2FsbChTTWdyUmVsYXRpb24gKnJlbHMs IGludCBucmVscywgYm9vbCBpc1JlZG8pCiAJICogYmFjayB0byB0aGlzIGJhY2tlbmQsIHRvbywg YW5kIHRoZXJlYnkgcHJvdmlkZSBhIGJhY2tzdG9wIHRoYXQgd2UKIAkgKiBjbG9zZWQgb3VyIG93 biBzbWdyIHJlbC4KIAkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbnJlbHM7IGkrKykKLQkJQ2FjaGVJ bnZhbGlkYXRlU21ncihybG9jYXRvcnNbaV0pOworCUNhY2hlSW52YWxpZGF0ZVNtZ3IobG9jYXRv ci5sb2NhdG9yLCBsb2NhdG9yLmJhY2tlbmQpOwogCiAJLyoKIAkgKiBEZWxldGUgdGhlIHBoeXNp Y2FsIGZpbGUocykuCkBAIC00NjcsMTYgKzQ1OSw3IEBAIHNtZ3Jkb3VubGlua2FsbChTTWdyUmVs YXRpb24gKnJlbHMsIGludCBucmVscywgYm9vbCBpc1JlZG8pCiAJICogRVJST1IsIGJlY2F1c2Ug d2UndmUgYWxyZWFkeSBkZWNpZGVkIHRvIGNvbW1pdCBvciBhYm9ydCB0aGUgY3VycmVudAogCSAq IHhhY3QuCiAJICovCi0KLQlmb3IgKGkgPSAwOyBpIDwgbnJlbHM7IGkrKykKLQl7Ci0JCWludAkJ CXdoaWNoID0gcmVsc1tpXS0+c21ncl93aGljaDsKLQotCQlmb3IgKGZvcmtudW0gPSAwOyBmb3Jr bnVtIDw9IE1BWF9GT1JLTlVNOyBmb3JrbnVtKyspCi0JCQlzbWdyc3dbd2hpY2hdLnNtZ3JfdW5s aW5rKHJsb2NhdG9yc1tpXSwgZm9ya251bSwgaXNSZWRvKTsKLQl9Ci0KLQlwZnJlZShybG9jYXRv cnMpOworCXNtZ3Jzd1t3aGljaF0uc21ncl91bmxpbmsobG9jYXRvciwgaXNSZWRvKTsKIH0KIAog CkBAIC00OTAsMjEgKzQ3MywyMSBAQCBzbWdyZG91bmxpbmthbGwoU01nclJlbGF0aW9uICpyZWxz LCBpbnQgbnJlbHMsIGJvb2wgaXNSZWRvKQogICoJCWNhdXNlcyBpbnRlcnZlbmluZyBmaWxlIHNw YWNlIHRvIGJlY29tZSBmaWxsZWQgd2l0aCB6ZXJvZXMuCiAgKi8KIHZvaWQKLXNtZ3JleHRlbmQo U01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgYmxvY2tu dW0sCitzbWdyZXh0ZW5kKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBCbG9ja051bWJlciBibG9ja251 bSwKIAkJICAgY2hhciAqYnVmZmVyLCBib29sIHNraXBGc3luYykKIHsKLQlzbWdyc3dbcmVsbi0+ c21ncl93aGljaF0uc21ncl9leHRlbmQocmVsbiwgZm9ya251bSwgYmxvY2tudW0sCi0JCQkJCQkJ CQkJIGJ1ZmZlciwgc2tpcEZzeW5jKTsKKwlzbWdyc3dbc2ZpbGUtPnNtZ3Jfd2hpY2hdLnNtZ3Jf ZXh0ZW5kKHNmaWxlLCBibG9ja251bSwKKwkJCQkJCQkJCQkgIGJ1ZmZlciwgc2tpcEZzeW5jKTsK IAogCS8qCiAJICogTm9ybWFsbHkgd2UgZXhwZWN0IHRoaXMgdG8gaW5jcmVhc2UgbmJsb2NrcyBi eSBvbmUsIGJ1dCBpZiB0aGUgY2FjaGVkCiAJICogdmFsdWUgaXNuJ3QgYXMgZXhwZWN0ZWQsIGp1 c3QgaW52YWxpZGF0ZSBpdCBzbyB0aGUgbmV4dCBjYWxsIGFza3MgdGhlCiAJICoga2VybmVsLgog CSAqLwotCWlmIChyZWxuLT5zbWdyX2NhY2hlZF9uYmxvY2tzW2ZvcmtudW1dID09IGJsb2NrbnVt KQotCQlyZWxuLT5zbWdyX2NhY2hlZF9uYmxvY2tzW2ZvcmtudW1dID0gYmxvY2tudW0gKyAxOwor CWlmIChzZmlsZS0+c21ncl9jYWNoZWRfbmJsb2NrcyA9PSBibG9ja251bSkKKwkJc2ZpbGUtPnNt Z3JfY2FjaGVkX25ibG9ja3MgPSBibG9ja251bSArIDE7CiAJZWxzZQotCQlyZWxuLT5zbWdyX2Nh Y2hlZF9uYmxvY2tzW2ZvcmtudW1dID0gSW52YWxpZEJsb2NrTnVtYmVyOworCQlzZmlsZS0+c21n cl9jYWNoZWRfbmJsb2NrcyA9IEludmFsaWRCbG9ja051bWJlcjsKIH0KIAogLyoKQEAgLTUxNSwx MyArNDk4LDEzIEBAIHNtZ3JleHRlbmQoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9y a251bSwgQmxvY2tOdW1iZXIgYmxvY2tudW0sCiAgKgkJcmVjb3JkKS4KICAqLwogYm9vbAotc21n cnByZWZldGNoKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVt YmVyIGJsb2NrbnVtKQorc21ncnByZWZldGNoKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBCbG9ja051 bWJlciBibG9ja251bSkKIHsKLQlyZXR1cm4gc21ncnN3W3JlbG4tPnNtZ3Jfd2hpY2hdLnNtZ3Jf cHJlZmV0Y2gocmVsbiwgZm9ya251bSwgYmxvY2tudW0pOworCXJldHVybiBzbWdyc3dbc2ZpbGUt PnNtZ3Jfd2hpY2hdLnNtZ3JfcHJlZmV0Y2goc2ZpbGUsIGJsb2NrbnVtKTsKIH0KIAogLyoKLSAq CXNtZ3JyZWFkKCkgLS0gcmVhZCBhIHBhcnRpY3VsYXIgYmxvY2sgZnJvbSBhIHJlbGF0aW9uIGlu dG8gdGhlIHN1cHBsaWVkCisgKglzbWdycmVhZCgpIC0tIHJlYWQgYSBwYXJ0aWN1bGFyIGJsb2Nr IGZyb20gYSBmaWxlIGludG8gdGhlIHN1cHBsaWVkCiAgKgkJCQkgIGJ1ZmZlci4KICAqCiAgKgkJ VGhpcyByb3V0aW5lIGlzIGNhbGxlZCBmcm9tIHRoZSBidWZmZXIgbWFuYWdlciBpbiBvcmRlciB0 bwpAQCAtNTI5LDEwICs1MTIsOSBAQCBzbWdycHJlZmV0Y2goU01nclJlbGF0aW9uIHJlbG4sIEZv cmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgYmxvY2tudW0pCiAgKgkJcmV0dXJuIHBhZ2Vz IGluIHRoZSBmb3JtYXQgdGhhdCBQT1NUR1JFUyBleHBlY3RzLgogICovCiB2b2lkCi1zbWdycmVh ZChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBibG9j a251bSwKLQkJIGNoYXIgKmJ1ZmZlcikKK3NtZ3JyZWFkKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBC bG9ja051bWJlciBibG9ja251bSwgY2hhciAqYnVmZmVyKQogewotCXNtZ3Jzd1tyZWxuLT5zbWdy X3doaWNoXS5zbWdyX3JlYWQocmVsbiwgZm9ya251bSwgYmxvY2tudW0sIGJ1ZmZlcik7CisJc21n cnN3W3NmaWxlLT5zbWdyX3doaWNoXS5zbWdyX3JlYWQoc2ZpbGUsIGJsb2NrbnVtLCBidWZmZXIp OwogfQogCiAvKgpAQCAtNTUxLDExICs1MzMsMTEgQEAgc21ncnJlYWQoU01nclJlbGF0aW9uIHJl bG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgYmxvY2tudW0sCiAgKgkJZG8gbm90 IHJlcXVpcmUgZnN5bmMuCiAgKi8KIHZvaWQKLXNtZ3J3cml0ZShTTWdyUmVsYXRpb24gcmVsbiwg Rm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBibG9ja251bSwKK3NtZ3J3cml0ZShTTWdy RmlsZUhhbmRsZSBzZmlsZSwgQmxvY2tOdW1iZXIgYmxvY2tudW0sCiAJCSAgY2hhciAqYnVmZmVy LCBib29sIHNraXBGc3luYykKIHsKLQlzbWdyc3dbcmVsbi0+c21ncl93aGljaF0uc21ncl93cml0 ZShyZWxuLCBmb3JrbnVtLCBibG9ja251bSwKLQkJCQkJCQkJCQlidWZmZXIsIHNraXBGc3luYyk7 CisJc21ncnN3W3NmaWxlLT5zbWdyX3doaWNoXS5zbWdyX3dyaXRlKHNmaWxlLCBibG9ja251bSwK KwkJCQkJCQkJCQkgYnVmZmVyLCBza2lwRnN5bmMpOwogfQogCiAKQEAgLTU2NCwxMSArNTQ2LDEx IEBAIHNtZ3J3cml0ZShTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9j a051bWJlciBibG9ja251bSwKICAqCQkJCQkgICBibG9ja3MuCiAgKi8KIHZvaWQKLXNtZ3J3cml0 ZWJhY2soU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIg YmxvY2tudW0sCitzbWdyd3JpdGViYWNrKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBCbG9ja051bWJl ciBibG9ja251bSwKIAkJCSAgQmxvY2tOdW1iZXIgbmJsb2NrcykKIHsKLQlzbWdyc3dbcmVsbi0+ c21ncl93aGljaF0uc21ncl93cml0ZWJhY2socmVsbiwgZm9ya251bSwgYmxvY2tudW0sCi0JCQkJ CQkJCQkJCW5ibG9ja3MpOworCXNtZ3Jzd1tzZmlsZS0+c21ncl93aGljaF0uc21ncl93cml0ZWJh Y2soc2ZpbGUsIGJsb2NrbnVtLAorCQkJCQkJCQkJCQkgbmJsb2Nrcyk7CiB9CiAKIC8qCkBAIC01 NzYsMTggKzU1OCwxOCBAQCBzbWdyd3JpdGViYWNrKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVt YmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGJsb2NrbnVtLAogICoJCQkJCSBzdXBwbGllZCByZWxh dGlvbi4KICAqLwogQmxvY2tOdW1iZXIKLXNtZ3JuYmxvY2tzKFNNZ3JSZWxhdGlvbiByZWxuLCBG b3JrTnVtYmVyIGZvcmtudW0pCitzbWdybmJsb2NrcyhTTWdyRmlsZUhhbmRsZSBzZmlsZSkKIHsK IAlCbG9ja051bWJlciByZXN1bHQ7CiAKIAkvKiBDaGVjayBhbmQgcmV0dXJuIGlmIHdlIGdldCB0 aGUgY2FjaGVkIHZhbHVlIGZvciB0aGUgbnVtYmVyIG9mIGJsb2Nrcy4gKi8KLQlyZXN1bHQgPSBz bWdybmJsb2Nrc19jYWNoZWQocmVsbiwgZm9ya251bSk7CisJcmVzdWx0ID0gc21ncm5ibG9ja3Nf Y2FjaGVkKHNmaWxlKTsKIAlpZiAocmVzdWx0ICE9IEludmFsaWRCbG9ja051bWJlcikKIAkJcmV0 dXJuIHJlc3VsdDsKIAotCXJlc3VsdCA9IHNtZ3Jzd1tyZWxuLT5zbWdyX3doaWNoXS5zbWdyX25i bG9ja3MocmVsbiwgZm9ya251bSk7CisJcmVzdWx0ID0gc21ncnN3W3NmaWxlLT5zbWdyX3doaWNo XS5zbWdyX25ibG9ja3Moc2ZpbGUpOwogCi0JcmVsbi0+c21ncl9jYWNoZWRfbmJsb2Nrc1tmb3Jr bnVtXSA9IHJlc3VsdDsKKwlzZmlsZS0+c21ncl9jYWNoZWRfbmJsb2NrcyA9IHJlc3VsdDsKIAog CXJldHVybiByZXN1bHQ7CiB9CkBAIC02MDAsMzggKzU4Miw0MSBAQCBzbWdybmJsb2NrcyhTTWdy UmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtKQogICogZm9yayBzaXplIGlzIG5vdCBj YWNoZWQuCiAgKi8KIEJsb2NrTnVtYmVyCi1zbWdybmJsb2Nrc19jYWNoZWQoU01nclJlbGF0aW9u IHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSkKK3NtZ3JuYmxvY2tzX2NhY2hlZChTTWdyRmlsZUhh bmRsZSBzZmlsZSkKIHsKIAkvKgogCSAqIEZvciBub3csIHdlIG9ubHkgdXNlIGNhY2hlZCB2YWx1 ZXMgaW4gcmVjb3ZlcnkgZHVlIHRvIGxhY2sgb2YgYSBzaGFyZWQKIAkgKiBpbnZhbGlkYXRpb24g bWVjaGFuaXNtIGZvciBjaGFuZ2VzIGluIGZpbGUgc2l6ZS4KIAkgKi8KLQlpZiAoSW5SZWNvdmVy eSAmJiByZWxuLT5zbWdyX2NhY2hlZF9uYmxvY2tzW2ZvcmtudW1dICE9IEludmFsaWRCbG9ja051 bWJlcikKLQkJcmV0dXJuIHJlbG4tPnNtZ3JfY2FjaGVkX25ibG9ja3NbZm9ya251bV07CisJaWYg KEluUmVjb3ZlcnkgJiYgc2ZpbGUtPnNtZ3JfY2FjaGVkX25ibG9ja3MgIT0gSW52YWxpZEJsb2Nr TnVtYmVyKQorCQlyZXR1cm4gc2ZpbGUtPnNtZ3JfY2FjaGVkX25ibG9ja3M7CiAKIAlyZXR1cm4g SW52YWxpZEJsb2NrTnVtYmVyOwogfQogCiAvKgotICoJc21ncnRydW5jYXRlKCkgLS0gVHJ1bmNh dGUgdGhlIGdpdmVuIGZvcmtzIG9mIHN1cHBsaWVkIHJlbGF0aW9uIHRvCi0gKgkJCQkJICBlYWNo IHNwZWNpZmllZCBudW1iZXJzIG9mIGJsb2NrcworICoJc21ncnRydW5jYXRlX211bHRpKCkgLS0g VHJ1bmNhdGUgdGhlIGdpdmVuIGZvcmtzIG9mIHN1cHBsaWVkIHJlbGF0aW9uIHRvCisgKgkJCQkJ CQllYWNoIHNwZWNpZmllZCBudW1iZXJzIG9mIGJsb2NrcwogICoKICAqIFRoZSB0cnVuY2F0aW9u IGlzIGRvbmUgaW1tZWRpYXRlbHksIHNvIHRoaXMgY2FuJ3QgYmUgcm9sbGVkIGJhY2suCiAgKgog ICogVGhlIGNhbGxlciBtdXN0IGhvbGQgQWNjZXNzRXhjbHVzaXZlTG9jayBvbiB0aGUgcmVsYXRp b24sIHRvIGVuc3VyZSB0aGF0CiAgKiBvdGhlciBiYWNrZW5kcyByZWNlaXZlIHRoZSBzbWdyIGlu dmFsaWRhdGlvbiBldmVudCB0aGF0IHRoaXMgZnVuY3Rpb24gc2VuZHMKICAqIGJlZm9yZSB0aGV5 IGFjY2VzcyBhbnkgZm9ya3Mgb2YgdGhlIHJlbGF0aW9uIGFnYWluLgorICoKKyAqIExpa2Ugc21n cnVubGlua19tdWx0aSgpLCB0aGlzIGhhbmRsZXMgbXVsdGlwbGUgZm9ya3MgaW4gb25lIGNhbGwg YmVjYXVzZQorICogdGhlIGNhY2hlIGludmFsaWRhdGlvbiBoYXBwZW5zIGF0IHJlbGF0aW9uIGdy YW51bGFyaXR5LgorICoKKyAqIE5COiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBkcm9w cGluZyBidWZmZXJzISBCZWZvcmUgdjE2LCB0aGlzCisgKiBmdW5jdGlvbiBkaWQgaXQuCiAgKi8K IHZvaWQKLXNtZ3J0cnVuY2F0ZShTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciAqZm9ya251 bSwgaW50IG5mb3JrcywgQmxvY2tOdW1iZXIgKm5ibG9ja3MpCitzbWdydHJ1bmNhdGVfbXVsdGko UmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IsIEJhY2tlbmRJZCBiYWNrZW5kLCBGb3JrTnVtYmVyICpm b3JrcywKKwkJCQkgICBpbnQgbmZvcmtzLCBCbG9ja051bWJlciAqbmJsb2NrcykKIHsKIAlpbnQJ CQlpOwogCi0JLyoKLQkgKiBHZXQgcmlkIG9mIGFueSBidWZmZXJzIGZvciB0aGUgYWJvdXQtdG8t YmUtZGVsZXRlZCBibG9ja3MuIGJ1Zm1nciB3aWxsCi0JICoganVzdCBkcm9wIHRoZW0gd2l0aG91 dCBib3RoZXJpbmcgdG8gd3JpdGUgdGhlIGNvbnRlbnRzLgotCSAqLwotCURyb3BSZWxhdGlvbkJ1 ZmZlcnMocmVsbiwgZm9ya251bSwgbmZvcmtzLCBuYmxvY2tzKTsKKwlBc3NlcnQobmZvcmtzIDwg TUFYX0ZPUktOVU0gKyAxKTsKIAogCS8qCiAJICogU2VuZCBhIHNoYXJlZC1pbnZhbCBtZXNzYWdl IHRvIGZvcmNlIG90aGVyIGJhY2tlbmRzIHRvIGNsb3NlIGFueSBzbWdyCkBAIC02NDMsMTUgKzYy OCwxOSBAQCBzbWdydHJ1bmNhdGUoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgKmZvcmtu dW0sIGludCBuZm9ya3MsIEJsb2NrTnVtYmVyICpuYgogCSAqIGlzIGEgcGVyZm9ybWFuY2UtY3Jp dGljYWwgcGF0aC4pICBBcyBpbiB0aGUgdW5saW5rIGNvZGUsIHdlIHdhbnQgdG8gYmUKIAkgKiBz dXJlIHRoZSBtZXNzYWdlIGlzIHNlbnQgYmVmb3JlIHdlIHN0YXJ0IGNoYW5naW5nIHRoaW5ncyBv bi1kaXNrLgogCSAqLwotCUNhY2hlSW52YWxpZGF0ZVNtZ3IocmVsbi0+c21ncl9ybG9jYXRvcik7 CisJQ2FjaGVJbnZhbGlkYXRlU21ncihybG9jYXRvciwgYmFja2VuZCk7CiAKLQkvKiBEbyB0aGUg dHJ1bmNhdGlvbiAqLworCS8qIERvIHRoZSB0cnVuY2F0aW9ucyAqLwogCWZvciAoaSA9IDA7IGkg PCBuZm9ya3M7IGkrKykKIAl7CisJCVNNZ3JGaWxlSGFuZGxlIHNmaWxlOworCisJCXNmaWxlID0g c21ncm9wZW4ocmxvY2F0b3IsIGJhY2tlbmQsIGZvcmtzW2ldKTsKKwogCQkvKiBNYWtlIHRoZSBj YWNoZWQgc2l6ZSBpcyBpbnZhbGlkIGlmIHdlIGVuY291bnRlciBhbiBlcnJvci4gKi8KLQkJcmVs bi0+c21ncl9jYWNoZWRfbmJsb2Nrc1tmb3JrbnVtW2ldXSA9IEludmFsaWRCbG9ja051bWJlcjsK KwkJc2ZpbGUtPnNtZ3JfY2FjaGVkX25ibG9ja3MgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CiAKLQkJ c21ncnN3W3JlbG4tPnNtZ3Jfd2hpY2hdLnNtZ3JfdHJ1bmNhdGUocmVsbiwgZm9ya251bVtpXSwg bmJsb2Nrc1tpXSk7CisJCXNtZ3Jzd1tzZmlsZS0+c21ncl93aGljaF0uc21ncl90cnVuY2F0ZShz ZmlsZSwgbmJsb2Nrc1tpXSk7CiAKIAkJLyoKIAkJICogV2UgbWlnaHQgYXMgd2VsbCB1cGRhdGUg dGhlIGxvY2FsIHNtZ3JfY2FjaGVkX25ibG9ja3MgdmFsdWVzLiBUaGUKQEAgLTY2MCw3ICs2NDks NyBAQCBzbWdydHJ1bmNhdGUoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgKmZvcmtudW0s IGludCBuZm9ya3MsIEJsb2NrTnVtYmVyICpuYgogCQkgKiBzbWdyX3ZtX25ibG9ja3MsIGFuZCB0 aGVzZSBvbmVzIHRvbyBhdCB0aGUgbmV4dCBjb21tYW5kIGJvdW5kYXJ5LgogCQkgKiBCdXQgdGhl c2UgZW5zdXJlIHRoZXkgYXJlbid0IG91dHJpZ2h0IHdyb25nIHVudGlsIHRoZW4uCiAJCSAqLwot CQlyZWxuLT5zbWdyX2NhY2hlZF9uYmxvY2tzW2ZvcmtudW1baV1dID0gbmJsb2Nrc1tpXTsKKwkJ c2ZpbGUtPnNtZ3JfY2FjaGVkX25ibG9ja3MgPSBuYmxvY2tzW2ldOwogCX0KIH0KIApAQCAtNjg4 LDkgKzY3Nyw5IEBAIHNtZ3J0cnVuY2F0ZShTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciAq Zm9ya251bSwgaW50IG5mb3JrcywgQmxvY2tOdW1iZXIgKm5iCiAgKgkJb3RoZXJ3aXNlIHRoZSBz eW5jIGlzIG5vdCB2ZXJ5IG1lYW5pbmdmdWwuCiAgKi8KIHZvaWQKLXNtZ3JpbW1lZHN5bmMoU01n clJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSkKK3NtZ3JpbW1lZHN5bmMoU01nckZp bGVIYW5kbGUgc2ZpbGUpCiB7Ci0Jc21ncnN3W3JlbG4tPnNtZ3Jfd2hpY2hdLnNtZ3JfaW1tZWRz eW5jKHJlbG4sIGZvcmtudW0pOworCXNtZ3Jzd1tzZmlsZS0+c21ncl93aGljaF0uc21ncl9pbW1l ZHN5bmMoc2ZpbGUpOwogfQogCiAvKgpAQCAtNzE0LDE0ICs3MDMsMTQgQEAgQXRFT1hhY3RfU01n cih2b2lkKQogCSAqIFphcCBhbGwgdW5vd25lZCBTTWdyUmVsYXRpb25zLiAgV2UgcmVseSBvbiBz bWdyY2xvc2UoKSB0byByZW1vdmUgZWFjaAogCSAqIG9uZSBmcm9tIHRoZSBsaXN0LgogCSAqLwot CWRsaXN0X2ZvcmVhY2hfbW9kaWZ5KGl0ZXIsICZ1bm93bmVkX3JlbG5zKQorCWRsaXN0X2ZvcmVh Y2hfbW9kaWZ5KGl0ZXIsICZ1bm93bmVkX3NmaWxlcykKIAl7Ci0JCVNNZ3JSZWxhdGlvbiByZWwg PSBkbGlzdF9jb250YWluZXIoU01nclJlbGF0aW9uRGF0YSwgbm9kZSwKLQkJCQkJCQkJCQkgICBp dGVyLmN1cik7CisJCVNNZ3JGaWxlSGFuZGxlIHNmaWxlID0gZGxpc3RfY29udGFpbmVyKFNNZ3JG aWxlRGF0YSwgbm9kZSwKKwkJCQkJCQkJCQkJICAgaXRlci5jdXIpOwogCi0JCUFzc2VydChyZWwt PnNtZ3Jfb3duZXIgPT0gTlVMTCk7CisJCUFzc2VydChzZmlsZS0+c21ncl9vd25lciA9PSBOVUxM KTsKIAotCQlzbWdyY2xvc2UocmVsKTsKKwkJc21ncmNsb3NlKHNmaWxlKTsKIAl9CiB9CiAKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uvc3luYy9zeW5jLmMgYi9zcmMvYmFja2VuZC9z dG9yYWdlL3N5bmMvc3luYy5jCmluZGV4IDlkNmE5ZTkxMDkwLi4zNTcyMDc4YmE3OSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9zeW5jL3N5bmMuYworKysgYi9zcmMvYmFja2VuZC9z dG9yYWdlL3N5bmMvc3luYy5jCkBAIC0xOCw5ICsxOCw3IEBACiAjaW5jbHVkZSA8ZmNudGwuaD4K ICNpbmNsdWRlIDxzeXMvZmlsZS5oPgogCi0jaW5jbHVkZSAiYWNjZXNzL2NvbW1pdF90cy5oIgot I2luY2x1ZGUgImFjY2Vzcy9jbG9nLmgiCi0jaW5jbHVkZSAiYWNjZXNzL211bHRpeGFjdC5oIgor I2luY2x1ZGUgImFjY2Vzcy9zbHJ1LmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hsb2cuaCIKICNpbmNs dWRlICJhY2Nlc3MveGxvZ3V0aWxzLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvdGFibGVzcGFjZS5o IgpAQCAtMTA2LDIyICsxMDQsNiBAQCBzdGF0aWMgY29uc3QgU3luY09wcyBzeW5jc3dbXSA9IHsK IAkJLnN5bmNfdW5saW5rZmlsZXRhZyA9IG1kdW5saW5rZmlsZXRhZywKIAkJLnN5bmNfZmlsZXRh Z21hdGNoZXMgPSBtZGZpbGV0YWdtYXRjaGVzCiAJfSwKLQkvKiBwZ194YWN0ICovCi0JW1NZTkNf SEFORExFUl9DTE9HXSA9IHsKLQkJLnN5bmNfc3luY2ZpbGV0YWcgPSBjbG9nc3luY2ZpbGV0YWcK LQl9LAotCS8qIHBnX2NvbW1pdF90cyAqLwotCVtTWU5DX0hBTkRMRVJfQ09NTUlUX1RTXSA9IHsK LQkJLnN5bmNfc3luY2ZpbGV0YWcgPSBjb21taXR0c3N5bmNmaWxldGFnCi0JfSwKLQkvKiBwZ19t dWx0aXhhY3Qvb2Zmc2V0cyAqLwotCVtTWU5DX0hBTkRMRVJfTVVMVElYQUNUX09GRlNFVF0gPSB7 Ci0JCS5zeW5jX3N5bmNmaWxldGFnID0gbXVsdGl4YWN0b2Zmc2V0c3N5bmNmaWxldGFnCi0JfSwK LQkvKiBwZ19tdWx0aXhhY3QvbWVtYmVycyAqLwotCVtTWU5DX0hBTkRMRVJfTVVMVElYQUNUX01F TUJFUl0gPSB7Ci0JCS5zeW5jX3N5bmNmaWxldGFnID0gbXVsdGl4YWN0bWVtYmVyc3N5bmNmaWxl dGFnCi0JfQogfTsKIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL2lu dmFsLmMgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9pbnZhbC5jCmluZGV4IGViNTc4MmY4MmE0 Li5iZDQzNTIxNWRjYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvaW52YWwu YworKysgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9pbnZhbC5jCkBAIC02NjEsMTEgKzY2MSwx MiBAQCBMb2NhbEV4ZWN1dGVJbnZhbGlkYXRpb25NZXNzYWdlKFNoYXJlZEludmFsaWRhdGlvbk1l c3NhZ2UgKm1zZykKIAkJICogV2UgY291bGQgaGF2ZSBzbWdyIGVudHJpZXMgZm9yIHJlbGF0aW9u cyBvZiBvdGhlciBkYXRhYmFzZXMsIHNvIG5vCiAJCSAqIHNob3J0LWNpcmN1aXQgdGVzdCBpcyBw b3NzaWJsZSBoZXJlLgogCQkgKi8KLQkJUmVsRmlsZUxvY2F0b3JCYWNrZW5kIHJsb2NhdG9yOwor CQlSZWxGaWxlTG9jYXRvciBybG9jYXRvcjsKKwkJQmFja2VuZElkIGJhY2tlbmQ7CiAKLQkJcmxv Y2F0b3IubG9jYXRvciA9IG1zZy0+c20ucmxvY2F0b3I7Ci0JCXJsb2NhdG9yLmJhY2tlbmQgPSAo bXNnLT5zbS5iYWNrZW5kX2hpIDw8IDE2KSB8IChpbnQpIG1zZy0+c20uYmFja2VuZF9sbzsKLQkJ c21ncmNsb3NlcmVsbG9jYXRvcihybG9jYXRvcik7CisJCXJsb2NhdG9yID0gbXNnLT5zbS5ybG9j YXRvcjsKKwkJYmFja2VuZCA9IChtc2ctPnNtLmJhY2tlbmRfaGkgPDwgMTYpIHwgKGludCkgbXNn LT5zbS5iYWNrZW5kX2xvOworCQlzbWdyY2xvc2VyZWxsb2NhdG9yKHJsb2NhdG9yLCBiYWNrZW5k KTsKIAl9CiAJZWxzZSBpZiAobXNnLT5pZCA9PSBTSEFSRURJTlZBTFJFTE1BUF9JRCkKIAl7CkBA IC0xNDU5LDE0ICsxNDYwLDE0IEBAIENhY2hlSW52YWxpZGF0ZVJlbGNhY2hlQnlSZWxpZChPaWQg cmVsaWQpCiAgKiBUaHVzLCB0aGUgbWF4aW11bSBwb3NzaWJsZSBiYWNrZW5kIElEIGlzIDJeMjMt MS4KICAqLwogdm9pZAotQ2FjaGVJbnZhbGlkYXRlU21ncihSZWxGaWxlTG9jYXRvckJhY2tlbmQg cmxvY2F0b3IpCitDYWNoZUludmFsaWRhdGVTbWdyKFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBC YWNrZW5kSWQgYmFja2VuZCkKIHsKIAlTaGFyZWRJbnZhbGlkYXRpb25NZXNzYWdlIG1zZzsKIAog CW1zZy5zbS5pZCA9IFNIQVJFRElOVkFMU01HUl9JRDsKLQltc2cuc20uYmFja2VuZF9oaSA9IHJs b2NhdG9yLmJhY2tlbmQgPj4gMTY7Ci0JbXNnLnNtLmJhY2tlbmRfbG8gPSBybG9jYXRvci5iYWNr ZW5kICYgMHhmZmZmOwotCW1zZy5zbS5ybG9jYXRvciA9IHJsb2NhdG9yLmxvY2F0b3I7CisJbXNn LnNtLmJhY2tlbmRfaGkgPSBiYWNrZW5kID4+IDE2OworCW1zZy5zbS5iYWNrZW5kX2xvID0gYmFj a2VuZCAmIDB4ZmZmZjsKKwltc2cuc20ucmxvY2F0b3IgPSBybG9jYXRvcjsKIAkvKiBjaGVjayBB ZGRDYXRjYWNoZUludmFsaWRhdGlvbk1lc3NhZ2UoKSBmb3IgYW4gZXhwbGFuYXRpb24gKi8KIAlW QUxHUklORF9NQUtFX01FTV9ERUZJTkVEKCZtc2csIHNpemVvZihtc2cpKTsKIApkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxz L2NhY2hlL3JlbGNhY2hlLmMKaW5kZXggYmQ2Y2Q0ZTQ3YjUuLmQyZTFiMjZlMmNkIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jCisrKyBiL3NyYy9iYWNrZW5k L3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMKQEAgLTQxOSw3ICs0MTksNyBAQCBBbGxvY2F0ZVJlbGF0 aW9uRGVzYyhGb3JtX3BnX2NsYXNzIHJlbHApCiAJcmVsYXRpb24gPSAoUmVsYXRpb24pIHBhbGxv YzAoc2l6ZW9mKFJlbGF0aW9uRGF0YSkpOwogCiAJLyogbWFrZSBzdXJlIHJlbGF0aW9uIGlzIG1h cmtlZCBhcyBoYXZpbmcgbm8gb3BlbiBmaWxlIHlldCAqLwotCXJlbGF0aW9uLT5yZF9zbWdyID0g TlVMTDsKKwlNZW1TZXQocmVsYXRpb24tPnJkX3NtZ3IsIDAsIHNpemVvZihyZWxhdGlvbi0+cmRf c21ncikpOwogCiAJLyoKIAkgKiBDb3B5IHRoZSByZWxhdGlvbiB0dXBsZSBmb3JtCkBAIC0xMjQ4 LDcgKzEyNDgsNyBAQCByZXRyeToKIAlSZWxhdGlvbkluaXRQaHlzaWNhbEFkZHIocmVsYXRpb24p OwogCiAJLyogbWFrZSBzdXJlIHJlbGF0aW9uIGlzIG1hcmtlZCBhcyBoYXZpbmcgbm8gb3BlbiBm aWxlIHlldCAqLwotCXJlbGF0aW9uLT5yZF9zbWdyID0gTlVMTDsKKwlNZW1TZXQocmVsYXRpb24t PnJkX3NtZ3IsIDAsIHNpemVvZihyZWxhdGlvbi0+cmRfc21ncikpOwogCiAJLyoKIAkgKiBub3cg d2UgY2FuIGZyZWUgdGhlIG1lbW9yeSBhbGxvY2F0ZWQgZm9yIHBnX2NsYXNzX3R1cGxlCkBAIC0x ODc3LDcgKzE4NzcsNyBAQCBmb3JtcmRlc2MoY29uc3QgY2hhciAqcmVsYXRpb25OYW1lLCBPaWQg cmVsYXRpb25SZWx0eXBlLAogCXJlbGF0aW9uID0gKFJlbGF0aW9uKSBwYWxsb2MwKHNpemVvZihS ZWxhdGlvbkRhdGEpKTsKIAogCS8qIG1ha2Ugc3VyZSByZWxhdGlvbiBpcyBtYXJrZWQgYXMgaGF2 aW5nIG5vIG9wZW4gZmlsZSB5ZXQgKi8KLQlyZWxhdGlvbi0+cmRfc21nciA9IE5VTEw7CisJTWVt U2V0KHJlbGF0aW9uLT5yZF9zbWdyLCAwLCBzaXplb2YocmVsYXRpb24tPnJkX3NtZ3IpKTsKIAog CS8qCiAJICogaW5pdGlhbGl6ZSByZWZlcmVuY2UgY291bnQ6IDEgYmVjYXVzZSBpdCBpcyBuYWls ZWQgaW4gY2FjaGUKQEAgLTI2OTQsNyArMjY5NCw4IEBAIFJlbGF0aW9uQ2xlYXJSZWxhdGlvbihS ZWxhdGlvbiByZWxhdGlvbiwgYm9vbCByZWJ1aWxkKQogCQl9CiAKIAkJLyogcmRfc21nciBtdXN0 IG5vdCBiZSBzd2FwcGVkLCBkdWUgdG8gYmFjay1saW5rcyBmcm9tIHNtZ3IgbGV2ZWwgKi8KLQkJ U1dBUEZJRUxEKFNNZ3JSZWxhdGlvbiwgcmRfc21ncik7CisJCWZvciAoaW50IGkgPSAwOyBpIDw9 IE1BWF9GT1JLTlVNOyBpKyspCisJCQlTV0FQRklFTEQoU01nckZpbGVIYW5kbGUsIHJkX3NtZ3Jb aV0pOwogCQkvKiByZF9yZWZjbnQgbXVzdCBiZSBwcmVzZXJ2ZWQgKi8KIAkJU1dBUEZJRUxEKGlu dCwgcmRfcmVmY250KTsKIAkJLyogaXNuYWlsZWQgc2hvdWxkbid0IGNoYW5nZSAqLwpAQCAtMzUy NSw3ICszNTI2LDcgQEAgUmVsYXRpb25CdWlsZExvY2FsUmVsYXRpb24oY29uc3QgY2hhciAqcmVs bmFtZSwKIAlyZWwgPSAoUmVsYXRpb24pIHBhbGxvYzAoc2l6ZW9mKFJlbGF0aW9uRGF0YSkpOwog CiAJLyogbWFrZSBzdXJlIHJlbGF0aW9uIGlzIG1hcmtlZCBhcyBoYXZpbmcgbm8gb3BlbiBmaWxl IHlldCAqLwotCXJlbC0+cmRfc21nciA9IE5VTEw7CisJTWVtU2V0KHJlbC0+cmRfc21nciwgMCwg c2l6ZW9mKHJlbC0+cmRfc21ncikpOwogCiAJLyogbWFyayBpdCBuYWlsZWQgaWYgYXBwcm9wcmlh dGUgKi8KIAlyZWwtPnJkX2lzbmFpbGVkID0gbmFpbGl0OwpAQCAtMzc1Nyw3ICszNzU4LDYgQEAg UmVsYXRpb25TZXROZXdSZWxmaWxlbnVtYmVyKFJlbGF0aW9uIHJlbGF0aW9uLCBjaGFyIHBlcnNp c3RlbmNlKQogCSAqLwogCWlmIChJc0JpbmFyeVVwZ3JhZGUpCiAJewotCQlTTWdyUmVsYXRpb24J c3JlbDsKIAogCQkvKgogCQkgKiBEdXJpbmcgYSBiaW5hcnkgdXBncmFkZSwgd2UgdXNlIHRoaXMg Y29kZSBwYXRoIHRvIGVuc3VyZSB0aGF0CkBAIC0zNzc0LDkgKzM3NzQsMTQgQEAgUmVsYXRpb25T ZXROZXdSZWxmaWxlbnVtYmVyKFJlbGF0aW9uIHJlbGF0aW9uLCBjaGFyIHBlcnNpc3RlbmNlKQog CQkgKiBmYWlscyBhdCB0aGlzIHN0YWdlLCB0aGUgbmV3IGNsdXN0ZXIgd2lsbCBuZWVkIHRvIGJl IHJlY3JlYXRlZAogCQkgKiBhbnl3YXkuCiAJCSAqLwotCQlzcmVsID0gc21ncm9wZW4ocmVsYXRp b24tPnJkX2xvY2F0b3IsIHJlbGF0aW9uLT5yZF9iYWNrZW5kKTsKLQkJc21ncmRvdW5saW5rYWxs KCZzcmVsLCAxLCBmYWxzZSk7Ci0JCXNtZ3JjbG9zZShzcmVsKTsKKwkJRm9ya051bWJlciBmb3Jr c1tNQVhfRk9SS05VTSArIDFdOworCQlmb3IgKGludCBpID0gMDsgaSA8PSBNQVhfRk9SS05VTTsg aSArKykgCisJCXsKKwkJCXNtZ3JvcGVuKHJlbGF0aW9uLT5yZF9sb2NhdG9yLCByZWxhdGlvbi0+ cmRfYmFja2VuZCwgaSk7CisJCQlmb3Jrc1tpXSA9IGk7CisJCX0KKwkJCisJCXNtZ3J1bmxpbmtf bXVsdGkocmVsYXRpb24tPnJkX2xvY2F0b3IsIHJlbGF0aW9uLT5yZF9iYWNrZW5kLCBmb3Jrcywg TUFYX0ZPUktOVU0gKyAxLCBmYWxzZSk7CiAJfQogCWVsc2UKIAl7CkBAIC0zODA0LDcgKzM4MDks NyBAQCBSZWxhdGlvblNldE5ld1JlbGZpbGVudW1iZXIoUmVsYXRpb24gcmVsYXRpb24sIGNoYXIg cGVyc2lzdGVuY2UpCiAJZWxzZSBpZiAoUkVMS0lORF9IQVNfU1RPUkFHRShyZWxhdGlvbi0+cmRf cmVsLT5yZWxraW5kKSkKIAl7CiAJCS8qIGhhbmRsZSB0aGVzZSBkaXJlY3RseSwgYXQgbGVhc3Qg Zm9yIG5vdyAqLwotCQlTTWdyUmVsYXRpb24gc3JlbDsKKwkJU01nckZpbGVIYW5kbGUgc3JlbDsK IAogCQlzcmVsID0gUmVsYXRpb25DcmVhdGVTdG9yYWdlKG5ld3Jsb2NhdG9yLCBwZXJzaXN0ZW5j ZSwgdHJ1ZSk7CiAJCXNtZ3JjbG9zZShzcmVsKTsKQEAgLTYyOTEsNyArNjI5Niw3IEBAIGxvYWRf cmVsY2FjaGVfaW5pdF9maWxlKGJvb2wgc2hhcmVkKQogCQkvKgogCQkgKiBSZXNldCB0cmFuc2ll bnQtc3RhdGUgZmllbGRzIGluIHRoZSByZWxjYWNoZSBlbnRyeQogCQkgKi8KLQkJcmVsLT5yZF9z bWdyID0gTlVMTDsKKwkJTWVtU2V0KHJlbC0+cmRfc21nciwgMCwgc2l6ZW9mKHJlbC0+cmRfc21n cikpOwogCQlpZiAocmVsLT5yZF9pc25haWxlZCkKIAkJCXJlbC0+cmRfcmVmY250ID0gMTsKIAkJ ZWxzZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9tY3h0LmMgYi9zcmMvYmFj a2VuZC91dGlscy9tbWdyL21jeHQuYwppbmRleCA1N2JkNjY5MGNhMC4uZjkxMzdlMzY0MTEgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21tZ3IvbWN4dC5jCisrKyBiL3NyYy9iYWNrZW5k L3V0aWxzL21tZ3IvbWN4dC5jCkBAIC0xNTEsOSArMTUxLDIwIEBAIHN0YXRpYyB2b2lkIE1lbW9y eUNvbnRleHRTdGF0c1ByaW50KE1lbW9yeUNvbnRleHQgY29udGV4dCwgdm9pZCAqcGFzc3RocnUs CiAgKiBZb3Ugc2hvdWxkIG5vdCBkbyBtZW1vcnkgYWxsb2NhdGlvbnMgd2l0aGluIGEgY3JpdGlj YWwgc2VjdGlvbiwgYmVjYXVzZQogICogYW4gb3V0LW9mLW1lbW9yeSBlcnJvciB3aWxsIGJlIGVz Y2FsYXRlZCB0byBhIFBBTklDLiBUbyBlbmZvcmNlIHRoYXQKICAqIHJ1bGUsIHRoZSBhbGxvY2F0 aW9uIGZ1bmN0aW9ucyBBc3NlcnQgdGhhdC4KKyAqCisgKiBGSVhNRTogYnlwYXNzIHRoaXMgZm9y IHRoZSBjcml0aWNhbCBzZWN0aW9uIGluIFJlY29yZFRyYW5zYWN0aW9uQ29tbWl0KCkKKyAqIGZv ciBub3cuIEl0IGRvZXMgYSBsb3Qgb2YgdGhpbmdzIHRoYXQgY2FuIGFsbG9jYXRlOgorICogLSBj YWxscyBUcmFuc2FjdGlvbklkQ29tbWl0VHJlZSwgd2hpY2ggcGlucyBidWZmZXJzLCB3aGljaCBy ZXF1aXJlcworICogICBzcGFjZSBpbiB0aGUgUmVzb3VyY2VPd25lciBmb3IgdGhlIHBpbiAoUmVz b3VyY2VPd25lckVubGFyZ2VCdWZmZXJzKCkpCisgKiAtIHNhbWUgZm9yIFRyYW5zYWN0aW9uVHJl ZVNldENvbW1pdFRzRGF0YSgpIGNhbGwuCisgKiAtIHJlYWRpbmcgYSBwYWdlIGNhbiByZXF1aXJl IGZsdXNoaW5nIG90aGVyIHBhZ2VzLCB3aGljaCBpbiB0dXJuCisgKiAgIGNhbiBjYWxsIENvbXBh Y3RDaGVja3BvaW50ZXJSZXF1ZXN0UXVldWUoKSwgd2hpY2ggYWxsb2NhdGVzCisgKiAtIHJlYWRp bmcgYSBwYWdlIGNhbGxzIHNtZ3JvcGVuKCksIHdoaWNoIGFsbG9jYXRlcyB0aGUgU01nckZpbGUg ZW50cnkKKyAqICAgaWYgaXQncyBub3Qgb3BlbiBhbHJlYWR5CiAgKi8KICNkZWZpbmUgQXNzZXJ0 Tm90SW5Dcml0aWNhbFNlY3Rpb24oY29udGV4dCkgXAotCUFzc2VydChDcml0U2VjdGlvbkNvdW50 ID09IDAgfHwgKGNvbnRleHQpLT5hbGxvd0luQ3JpdFNlY3Rpb24pCisJQXNzZXJ0KENyaXRTZWN0 aW9uQ291bnQgPT0gMCB8fCAoY29udGV4dCktPmFsbG93SW5Dcml0U2VjdGlvbiB8fCBcCisJCSAg IChNeVByb2MgIT0gTlVMTCAmJiAoTXlQcm9jLT5kZWxheUNoa3B0RmxhZ3MgJiBERUxBWV9DSEtQ VF9TVEFSVCAhPSAwKSkpCiAKIC8qCiAgKiBDYWxsIHRoZSBnaXZlbiBmdW5jdGlvbiBpbiB0aGUg TWVtb3J5Q29udGV4dE1ldGhvZHMgZm9yIHRoZSBtZW1vcnkgY29udGV4dApkaWZmIC0tZ2l0IGEv c3JjL2NvbW1vbi9yZWxwYXRoLmMgYi9zcmMvY29tbW9uL3JlbHBhdGguYwppbmRleCAxYjZiNjIw Y2U4My4uMDA3YjA4OTgwNDkgMTAwNjQ0Ci0tLSBhL3NyYy9jb21tb24vcmVscGF0aC5jCisrKyBi L3NyYy9jb21tb24vcmVscGF0aC5jCkBAIC0yMiw2ICsyMiwxNiBAQAogI2luY2x1ZGUgImNvbW1v bi9yZWxwYXRoLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9iYWNrZW5kaWQuaCIKIAorLyoKKyAqIFNM UlUgSUQgdG8gcGF0aCBtYXBwaW5nCisgKi8KKyNkZWZpbmUgUEdfU0xSVShzeW1uYW1lLG5hbWUs cGF0aCxzeW5jaHJvbml6ZSkgXAorCXBhdGgsCisKK3N0YXRpYyBjaGFyICpzbHJ1X2RpcnNbXSA9 Cit7CisjaW5jbHVkZSAiYWNjZXNzL3NscnVsaXN0LmgiCit9OwogCiAvKgogICogTG9va3VwIHRh YmxlIG9mIGZvcmsgbmFtZSBieSBmb3JrIG51bWJlci4KQEAgLTEyOSw3ICsxMzksNyBAQCBHZXRE YXRhYmFzZVBhdGgoT2lkIGRiT2lkLCBPaWQgc3BjT2lkKQogfQogCiAvKgotICogR2V0UmVsYXRp b25QYXRoIC0gY29uc3RydWN0IHBhdGggdG8gYSByZWxhdGlvbidzIGZpbGUKKyAqIEdldFNNZ3JG aWxlUGF0aCAtIGNvbnN0cnVjdCBwYXRoIHRvIGEgcmVsYXRpb24ncyBmaWxlCiAgKgogICogUmVz dWx0IGlzIGEgcGFsbG9jJ2Qgc3RyaW5nLgogICoKQEAgLTEzOCwxMiArMTQ4LDI3IEBAIEdldERh dGFiYXNlUGF0aChPaWQgZGJPaWQsIE9pZCBzcGNPaWQpCiAgKiB0aGUgdHJvdWJsZSBjb25zaWRl cmluZyBCYWNrZW5kSWQgaXMganVzdCBpbnQgYW55d2F5LgogICovCiBjaGFyICoKLUdldFJlbGF0 aW9uUGF0aChPaWQgZGJPaWQsIE9pZCBzcGNPaWQsIFJlbEZpbGVOdW1iZXIgcmVsTnVtYmVyLAor R2V0U01nckZpbGVQYXRoKE9pZCBkYk9pZCwgT2lkIHNwY09pZCwgUmVsRmlsZU51bWJlciByZWxO dW1iZXIsCiAJCQkJaW50IGJhY2tlbmRJZCwgRm9ya051bWJlciBmb3JrTnVtYmVyKQogewogCWNo YXIJICAgKnBhdGg7CiAKLQlpZiAoc3BjT2lkID09IEdMT0JBTFRBQkxFU1BBQ0VfT0lEKQorCWlm IChzcGNPaWQgPT0gU0xSVV9TUENfT0lEKQorCXsKKwkJaWYgKGRiT2lkID49IGxlbmd0aG9mKHNs cnVfZGlycykgfHwgZm9ya051bWJlciAhPSAwIHx8IGJhY2tlbmRJZCAhPSBJbnZhbGlkQmFja2Vu ZElkKQorCQl7CisjaWZuZGVmIEZST05URU5ECisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJy Y29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJIGVycm1zZygiaW52 YWxpZCBTTFJVIGZpbGUgbG9jYXRvciAldS8ldS8ldS8ldS8ldSIsCisJCQkJCQkJc3BjT2lkLCBk Yk9pZCwgcmVsTnVtYmVyLCBiYWNrZW5kSWQsIGZvcmtOdW1iZXIpKSk7CisjZWxzZQorCQkJcmV0 dXJuIE5VTEw7CisjZW5kaWYKKwkJfQorCQlwYXRoID0gcHNwcmludGYoIiVzLyV1Iiwgc2xydV9k aXJzW2RiT2lkXSwgcmVsTnVtYmVyKTsKKwl9CisJZWxzZSBpZiAoc3BjT2lkID09IEdMT0JBTFRB QkxFU1BBQ0VfT0lEKQogCXsKIAkJLyogU2hhcmVkIHN5c3RlbSByZWxhdGlvbnMgbGl2ZSBpbiB7 ZGF0YWRpcn0vZ2xvYmFsICovCiAJCUFzc2VydChkYk9pZCA9PSAwKTsKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9jbG9nLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvY2xvZy5oCmluZGV4 IDU0M2YyZTI2NDNhLi5hZjE2YTJhZmNiOSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNz L2Nsb2cuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvY2xvZy5oCkBAIC00MCwxOCArNDAsMTIg QEAgZXh0ZXJuIHZvaWQgVHJhbnNhY3Rpb25JZFNldFRyZWVTdGF0dXMoVHJhbnNhY3Rpb25JZCB4 aWQsIGludCBuc3VieGlkcywKIAkJCQkJCQkJCSAgIFRyYW5zYWN0aW9uSWQgKnN1YnhpZHMsIFhp ZFN0YXR1cyBzdGF0dXMsIFhMb2dSZWNQdHIgbHNuKTsKIGV4dGVybiBYaWRTdGF0dXMgVHJhbnNh Y3Rpb25JZEdldFN0YXR1cyhUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciAqbHNuKTsKIAot ZXh0ZXJuIFNpemUgQ0xPR1NobWVtQnVmZmVycyh2b2lkKTsKLWV4dGVybiBTaXplIENMT0dTaG1l bVNpemUodm9pZCk7Ci1leHRlcm4gdm9pZCBDTE9HU2htZW1Jbml0KHZvaWQpOwogZXh0ZXJuIHZv aWQgQm9vdFN0cmFwQ0xPRyh2b2lkKTsKIGV4dGVybiB2b2lkIFN0YXJ0dXBDTE9HKHZvaWQpOwog ZXh0ZXJuIHZvaWQgVHJpbUNMT0codm9pZCk7Ci1leHRlcm4gdm9pZCBDaGVja1BvaW50Q0xPRyh2 b2lkKTsKIGV4dGVybiB2b2lkIEV4dGVuZENMT0coVHJhbnNhY3Rpb25JZCBuZXdlc3RYYWN0KTsK IGV4dGVybiB2b2lkIFRydW5jYXRlQ0xPRyhUcmFuc2FjdGlvbklkIG9sZGVzdFhhY3QsIE9pZCBv bGRlc3R4aWRfZGF0b2lkKTsKIAotZXh0ZXJuIGludAljbG9nc3luY2ZpbGV0YWcoY29uc3QgRmls ZVRhZyAqZnRhZywgY2hhciAqcGF0aCk7Ci0KIC8qIFhMT0cgc3R1ZmYgKi8KICNkZWZpbmUgQ0xP R19aRVJPUEFHRQkJMHgwMAogI2RlZmluZSBDTE9HX1RSVU5DQVRFCQkweDEwCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9hY2Nlc3MvY29tbWl0X3RzLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvY29t bWl0X3RzLmgKaW5kZXggNzY2MmY4ZTFhOWMuLjRlOTg2ZmMwMjNkIDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9hY2Nlc3MvY29tbWl0X3RzLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2NvbW1p dF90cy5oCkBAIC0yNyw3ICsyNyw2IEBAIGV4dGVybiBib29sIFRyYW5zYWN0aW9uSWRHZXRDb21t aXRUc0RhdGEoVHJhbnNhY3Rpb25JZCB4aWQsCiBleHRlcm4gVHJhbnNhY3Rpb25JZCBHZXRMYXRl c3RDb21taXRUc0RhdGEoVGltZXN0YW1wVHogKnRzLAogCQkJCQkJCQkJCSAgIFJlcE9yaWdpbklk ICpub2RlaWQpOwogCi1leHRlcm4gU2l6ZSBDb21taXRUc1NobWVtQnVmZmVycyh2b2lkKTsKIGV4 dGVybiBTaXplIENvbW1pdFRzU2htZW1TaXplKHZvaWQpOwogZXh0ZXJuIHZvaWQgQ29tbWl0VHNT aG1lbUluaXQodm9pZCk7CiBleHRlcm4gdm9pZCBCb290U3RyYXBDb21taXRUcyh2b2lkKTsKQEAg LTQxLDggKzQwLDYgQEAgZXh0ZXJuIHZvaWQgU2V0Q29tbWl0VHNMaW1pdChUcmFuc2FjdGlvbklk IG9sZGVzdFhhY3QsCiAJCQkJCQkJIFRyYW5zYWN0aW9uSWQgbmV3ZXN0WGFjdCk7CiBleHRlcm4g dm9pZCBBZHZhbmNlT2xkZXN0Q29tbWl0VHNYaWQoVHJhbnNhY3Rpb25JZCBvbGRlc3RYYWN0KTsK IAotZXh0ZXJuIGludAljb21taXR0c3N5bmNmaWxldGFnKGNvbnN0IEZpbGVUYWcgKmZ0YWcsIGNo YXIgKnBhdGgpOwotCiAvKiBYTE9HIHN0dWZmICovCiAjZGVmaW5lIENPTU1JVF9UU19aRVJPUEFH RQkJMHgwMAogI2RlZmluZSBDT01NSVRfVFNfVFJVTkNBVEUJCTB4MTAKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9tdWx0aXhhY3QuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9tdWx0aXhh Y3QuaAppbmRleCA0Y2JlMTdkZTdiZC4uOTZmODMyM2Y0ZTUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL2FjY2Vzcy9tdWx0aXhhY3QuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvbXVsdGl4YWN0 LmgKQEAgLTExOCw5ICsxMTgsNiBAQCBleHRlcm4gYm9vbCBNdWx0aVhhY3RJZFByZWNlZGVzKE11 bHRpWGFjdElkIG11bHRpMSwgTXVsdGlYYWN0SWQgbXVsdGkyKTsKIGV4dGVybiBib29sIE11bHRp WGFjdElkUHJlY2VkZXNPckVxdWFscyhNdWx0aVhhY3RJZCBtdWx0aTEsCiAJCQkJCQkJCQkJTXVs dGlYYWN0SWQgbXVsdGkyKTsKIAotZXh0ZXJuIGludAltdWx0aXhhY3RvZmZzZXRzc3luY2ZpbGV0 YWcoY29uc3QgRmlsZVRhZyAqZnRhZywgY2hhciAqcGF0aCk7Ci1leHRlcm4gaW50CW11bHRpeGFj dG1lbWJlcnNzeW5jZmlsZXRhZyhjb25zdCBGaWxlVGFnICpmdGFnLCBjaGFyICpwYXRoKTsKLQog ZXh0ZXJuIHZvaWQgQXRFT1hhY3RfTXVsdGlYYWN0KHZvaWQpOwogZXh0ZXJuIHZvaWQgQXRQcmVw YXJlX011bHRpWGFjdCh2b2lkKTsKIGV4dGVybiB2b2lkIFBvc3RQcmVwYXJlX011bHRpWGFjdChU cmFuc2FjdGlvbklkIHhpZCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3Mvc2xydS5o IGIvc3JjL2luY2x1ZGUvYWNjZXNzL3NscnUuaAppbmRleCAxMzBjNDFjODYzMi4uZWUxYjJmNDBj N2UgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9zbHJ1LmgKKysrIGIvc3JjL2luY2x1 ZGUvYWNjZXNzL3NscnUuaApAQCAtMSw3ICsxLDcgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoK ICAqIHNscnUuaAotICoJCVNpbXBsZSBMUlUgYnVmZmVyaW5nIGZvciB0cmFuc2FjdGlvbiBzdGF0 dXMgbG9nZmlsZXMKKyAqCQlCdWZmZXJpbmcgZm9yIHRyYW5zYWN0aW9uIHN0YXR1cyBsb2dmaWxl cwogICoKICAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIyLCBQb3N0Z3JlU1FMIEds b2JhbCBEZXZlbG9wbWVudCBHcm91cAogICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBS ZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKQEAgLTE0LDkgKzE0LDM1IEBA CiAjZGVmaW5lIFNMUlVfSAogCiAjaW5jbHVkZSAiYWNjZXNzL3hsb2dkZWZzLmgiCisjaW5jbHVk ZSAiY2F0YWxvZy9wZ190YWJsZXNwYWNlX2QuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2J1Zi5oIgog I2luY2x1ZGUgInN0b3JhZ2UvbHdsb2NrLmgiCisjaW5jbHVkZSAic3RvcmFnZS9zbWdyLmgiCiAj aW5jbHVkZSAic3RvcmFnZS9zeW5jLmgiCiAKKy8qIFBzZXVkbyBkYXRhYmFzZSBJRCB1c2VkIGZv ciBTTFJVIGRhdGEuICovCisjZGVmaW5lIFNMUlVfU1BDX0lEIDkKKworLyogUHNldWRvIGRhdGFi YXNlIElEcyB1c2VkIGJ5IGVhY2ggY2FjaGUuICovCisjZGVmaW5lIFBHX1NMUlUoc3ltbmFtZSxu YW1lLHBhdGgsIHN5bmNocm9uaXplKSBcCisJc3ltbmFtZSwKKwordHlwZWRlZiBlbnVtIFNscnVJ ZHMKK3sKKyNpbmNsdWRlICJhY2Nlc3Mvc2xydWxpc3QuaCIKKwlTTFJVX05FWFRfSUQKK30JCQlT bHJ1SWRzOworI3VuZGVmIFBHX1NMUlUKKwordHlwZWRlZiBib29sICgqU2xydVBhZ2VQcmVjZWRl c0Z1bmN0aW9uKSAoaW50LCBpbnQpOworCitzdGF0aWMgaW5saW5lIFJlbEZpbGVMb2NhdG9yCitT bHJ1UmVsRmlsZUxvY2F0b3IodWludDMyIHNscnVfZGJfaWQsIHVpbnQzMiBzZWdtZW50X2lkKQor eworCVJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yID0ge1NMUlVfU1BDX0lELCBzbHJ1X2RiX2lkLCBz ZWdtZW50X2lkfTsKKwlyZXR1cm4gcmxvY2F0b3I7Cit9CisKIAogLyoKICAqIERlZmluZSBTTFJV IHNlZ21lbnQgc2l6ZS4gIEEgcGFnZSBpcyB0aGUgc2FtZSBCTENLU1ogYXMgaXMgdXNlZCBldmVy eXdoZXJlCkBAIC0zMywxNDIgKzU5LDQwIEBACiAgKi8KICNkZWZpbmUgU0xSVV9QQUdFU19QRVJf U0VHTUVOVAkzMgogCi0vKgotICogUGFnZSBzdGF0dXMgY29kZXMuICBOb3RlIHRoYXQgdGhlc2Ug ZG8gbm90IGluY2x1ZGUgdGhlICJkaXJ0eSIgYml0LgotICogcGFnZV9kaXJ0eSBjYW4gYmUgdHJ1 ZSBvbmx5IGluIHRoZSBWQUxJRCBvciBXUklURV9JTl9QUk9HUkVTUyBzdGF0ZXM7Ci0gKiBpbiB0 aGUgbGF0dGVyIGNhc2UgaXQgaW1wbGllcyB0aGF0IHRoZSBwYWdlIGhhcyBiZWVuIHJlLWRpcnRp ZWQgc2luY2UKLSAqIHRoZSB3cml0ZSBzdGFydGVkLgotICovCi10eXBlZGVmIGVudW0KLXsKLQlT TFJVX1BBR0VfRU1QVFksCQkJLyogYnVmZmVyIGlzIG5vdCBpbiB1c2UgKi8KLQlTTFJVX1BBR0Vf UkVBRF9JTl9QUk9HUkVTUywgLyogcGFnZSBpcyBiZWluZyByZWFkIGluICovCi0JU0xSVV9QQUdF X1ZBTElELAkJCS8qIHBhZ2UgaXMgdmFsaWQgYW5kIG5vdCBiZWluZyB3cml0dGVuICovCi0JU0xS VV9QQUdFX1dSSVRFX0lOX1BST0dSRVNTIC8qIHBhZ2UgaXMgYmVpbmcgd3JpdHRlbiBvdXQgKi8K LX0gU2xydVBhZ2VTdGF0dXM7Ci0KLS8qCi0gKiBTaGFyZWQtbWVtb3J5IHN0YXRlCi0gKi8KLXR5 cGVkZWYgc3RydWN0IFNscnVTaGFyZWREYXRhCi17Ci0JTFdMb2NrCSAgICpDb250cm9sTG9jazsK LQotCS8qIE51bWJlciBvZiBidWZmZXJzIG1hbmFnZWQgYnkgdGhpcyBTTFJVIHN0cnVjdHVyZSAq LwotCWludAkJCW51bV9zbG90czsKLQotCS8qCi0JICogQXJyYXlzIGhvbGRpbmcgaW5mbyBmb3Ig ZWFjaCBidWZmZXIgc2xvdC4gIFBhZ2UgbnVtYmVyIGlzIHVuZGVmaW5lZAotCSAqIHdoZW4gc3Rh dHVzIGlzIEVNUFRZLCBhcyBpcyBwYWdlX2xydV9jb3VudC4KLQkgKi8KLQljaGFyCSAgKipwYWdl X2J1ZmZlcjsKLQlTbHJ1UGFnZVN0YXR1cyAqcGFnZV9zdGF0dXM7Ci0JYm9vbAkgICAqcGFnZV9k aXJ0eTsKLQlpbnQJCSAgICpwYWdlX251bWJlcjsKLQlpbnQJCSAgICpwYWdlX2xydV9jb3VudDsK LQlMV0xvY2tQYWRkZWQgKmJ1ZmZlcl9sb2NrczsKLQotCS8qCi0JICogT3B0aW9uYWwgYXJyYXkg b2YgV0FMIGZsdXNoIExTTnMgYXNzb2NpYXRlZCB3aXRoIGVudHJpZXMgaW4gdGhlIFNMUlUKLQkg KiBwYWdlcy4gIElmIG5vdCB6ZXJvL05VTEwsIHdlIG11c3QgZmx1c2ggV0FMIGJlZm9yZSB3cml0 aW5nIHBhZ2VzICh0cnVlCi0JICogZm9yIHBnX3hhY3QsIGZhbHNlIGZvciBtdWx0aXhhY3QsIHBn X3N1YnRyYW5zLCBwZ19ub3RpZnkpLiAgZ3JvdXBfbHNuW10KLQkgKiBoYXMgbHNuX2dyb3Vwc19w ZXJfcGFnZSBlbnRyaWVzIHBlciBidWZmZXIgc2xvdCwgZWFjaCBjb250YWluaW5nIHRoZQotCSAq IGhpZ2hlc3QgTFNOIGtub3duIGZvciBhIGNvbnRpZ3VvdXMgZ3JvdXAgb2YgU0xSVSBlbnRyaWVz IG9uIHRoYXQgc2xvdCdzCi0JICogcGFnZS4KLQkgKi8KLQlYTG9nUmVjUHRyICpncm91cF9sc247 Ci0JaW50CQkJbHNuX2dyb3Vwc19wZXJfcGFnZTsKLQotCS8qLS0tLS0tLS0tLQotCSAqIFdlIG1h cmsgYSBwYWdlICJtb3N0IHJlY2VudGx5IHVzZWQiIGJ5IHNldHRpbmcKLQkgKgkJcGFnZV9scnVf Y291bnRbc2xvdG5vXSA9ICsrY3VyX2xydV9jb3VudDsKLQkgKiBUaGUgb2xkZXN0IHBhZ2UgaXMg dGhlcmVmb3JlIHRoZSBvbmUgd2l0aCB0aGUgaGlnaGVzdCB2YWx1ZSBvZgotCSAqCQljdXJfbHJ1 X2NvdW50IC0gcGFnZV9scnVfY291bnRbc2xvdG5vXQotCSAqIFRoZSBjb3VudHMgd2lsbCBldmVu dHVhbGx5IHdyYXAgYXJvdW5kLCBidXQgdGhpcyBjYWxjdWxhdGlvbiBzdGlsbAotCSAqIHdvcmtz IGFzIGxvbmcgYXMgbm8gcGFnZSdzIGFnZSBleGNlZWRzIElOVF9NQVggY291bnRzLgotCSAqLS0t LS0tLS0tLQotCSAqLwotCWludAkJCWN1cl9scnVfY291bnQ7Ci0KLQkvKgotCSAqIGxhdGVzdF9w YWdlX251bWJlciBpcyB0aGUgcGFnZSBudW1iZXIgb2YgdGhlIGN1cnJlbnQgZW5kIG9mIHRoZSBs b2c7Ci0JICogdGhpcyBpcyBub3QgY3JpdGljYWwgZGF0YSwgc2luY2Ugd2UgdXNlIGl0IG9ubHkg dG8gYXZvaWQgc3dhcHBpbmcgb3V0Ci0JICogdGhlIGxhdGVzdCBwYWdlLgotCSAqLwotCWludAkJ CWxhdGVzdF9wYWdlX251bWJlcjsKLQotCS8qIFNMUlUncyBpbmRleCBmb3Igc3RhdGlzdGljcyBw dXJwb3NlcyAobWlnaHQgbm90IGJlIHVuaXF1ZSkgKi8KLQlpbnQJCQlzbHJ1X3N0YXRzX2lkeDsK LX0gU2xydVNoYXJlZERhdGE7Ci0KLXR5cGVkZWYgU2xydVNoYXJlZERhdGEgKlNscnVTaGFyZWQ7 Ci0KLS8qCi0gKiBTbHJ1Q3RsRGF0YSBpcyBhbiB1bnNoYXJlZCBzdHJ1Y3R1cmUgdGhhdCBwb2lu dHMgdG8gdGhlIGFjdGl2ZSBpbmZvcm1hdGlvbgotICogaW4gc2hhcmVkIG1lbW9yeS4KLSAqLwot dHlwZWRlZiBzdHJ1Y3QgU2xydUN0bERhdGEKLXsKLQlTbHJ1U2hhcmVkCXNoYXJlZDsKLQotCS8q Ci0JICogV2hpY2ggc3luYyBoYW5kbGVyIGZ1bmN0aW9uIHRvIHVzZSB3aGVuIGhhbmRpbmcgc3lu YyByZXF1ZXN0cyBvdmVyIHRvCi0JICogdGhlIGNoZWNrcG9pbnRlci4gIFNZTkNfSEFORExFUl9O T05FIHRvIGRpc2FibGUgZnN5bmMgKGVnIHBnX25vdGlmeSkuCi0JICovCi0JU3luY1JlcXVlc3RI YW5kbGVyIHN5bmNfaGFuZGxlcjsKLQotCS8qCi0JICogRGVjaWRlIHdoZXRoZXIgYSBwYWdlIGlz ICJvbGRlciIgZm9yIHRydW5jYXRpb24gYW5kIGFzIGEgaGludCBmb3IKLQkgKiBldmljdGluZyBw YWdlcyBpbiBMUlUgb3JkZXIuICBSZXR1cm4gdHJ1ZSBpZiBldmVyeSBlbnRyeSBvZiB0aGUgZmly c3QKLQkgKiBhcmd1bWVudCBpcyBvbGRlciB0aGFuIGV2ZXJ5IGVudHJ5IG9mIHRoZSBzZWNvbmQg YXJndW1lbnQuICBOb3RlIHRoYXQKLQkgKiAhUGFnZVByZWNlZGVzKGEsYikgJiYgIVBhZ2VQcmVj ZWRlcyhiLGEpIG5lZWQgbm90IGltcGx5IGE9PWI7IGl0IGFsc28KLQkgKiBhcmlzZXMgd2hlbiBz b21lIGVudHJpZXMgYXJlIG9sZGVyIGFuZCBzb21lIGFyZSBub3QuICBGb3IgU0xSVXMgdXNpbmcK LQkgKiBTaW1wbGVMcnVUcnVuY2F0ZSgpLCB0aGlzIG11c3QgdXNlIG1vZHVsYXIgYXJpdGhtZXRp Yy4gIChGb3Igb3RoZXJzLAotCSAqIHRoZSBiZWhhdmlvciBvZiB0aGlzIGNhbGxiYWNrIGhhcyBu byBmdW5jdGlvbmFsIGltcGxpY2F0aW9ucy4pICBVc2UKLQkgKiBTbHJ1UGFnZVByZWNlZGVzVW5p dFRlc3RzKCkgaW4gU0xSVXMgbWVldGluZyBpdHMgY3JpdGVyaWEuCi0JICovCi0JYm9vbAkJKCpQ YWdlUHJlY2VkZXMpIChpbnQsIGludCk7Ci0KLQkvKgotCSAqIERpciBpcyBzZXQgZHVyaW5nIFNp bXBsZUxydUluaXQgYW5kIGRvZXMgbm90IGNoYW5nZSB0aGVyZWFmdGVyLiBTaW5jZQotCSAqIGl0 J3MgYWx3YXlzIHRoZSBzYW1lLCBpdCBkb2Vzbid0IG5lZWQgdG8gYmUgaW4gc2hhcmVkIG1lbW9y eS4KLQkgKi8KLQljaGFyCQlEaXJbNjRdOwotfSBTbHJ1Q3RsRGF0YTsKLQotdHlwZWRlZiBTbHJ1 Q3RsRGF0YSAqU2xydUN0bDsKLQotCi1leHRlcm4gU2l6ZSBTaW1wbGVMcnVTaG1lbVNpemUoaW50 IG5zbG90cywgaW50IG5sc25zKTsKLWV4dGVybiB2b2lkIFNpbXBsZUxydUluaXQoU2xydUN0bCBj dGwsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuc2xvdHMsIGludCBubHNucywKLQkJCQkJCSAgTFdM b2NrICpjdGxsb2NrLCBjb25zdCBjaGFyICpzdWJkaXIsIGludCB0cmFuY2hlX2lkLAotCQkJCQkJ ICBTeW5jUmVxdWVzdEhhbmRsZXIgc3luY19oYW5kbGVyKTsKLWV4dGVybiBpbnQJU2ltcGxlTHJ1 WmVyb1BhZ2UoU2xydUN0bCBjdGwsIGludCBwYWdlbm8pOwotZXh0ZXJuIGludAlTaW1wbGVMcnVS ZWFkUGFnZShTbHJ1Q3RsIGN0bCwgaW50IHBhZ2VubywgYm9vbCB3cml0ZV9vaywKLQkJCQkJCQkg IFRyYW5zYWN0aW9uSWQgeGlkKTsKLWV4dGVybiBpbnQJU2ltcGxlTHJ1UmVhZFBhZ2VfUmVhZE9u bHkoU2xydUN0bCBjdGwsIGludCBwYWdlbm8sCi0JCQkJCQkJCQkgICBUcmFuc2FjdGlvbklkIHhp ZCk7Ci1leHRlcm4gdm9pZCBTaW1wbGVMcnVXcml0ZVBhZ2UoU2xydUN0bCBjdGwsIGludCBzbG90 bm8pOwotZXh0ZXJuIHZvaWQgU2ltcGxlTHJ1V3JpdGVBbGwoU2xydUN0bCBjdGwsIGJvb2wgYWxs b3dfcmVkaXJ0aWVkKTsKICNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCi1leHRlcm4gdm9pZCBT bHJ1UGFnZVByZWNlZGVzVW5pdFRlc3RzKFNscnVDdGwgY3RsLCBpbnQgcGVyX3BhZ2UpOworZXh0 ZXJuIHZvaWQgU2xydVBhZ2VQcmVjZWRlc1VuaXRUZXN0cyhTbHJ1UGFnZVByZWNlZGVzRnVuY3Rp b24gUGFnZVByZWNlZGVzLAorCQkJCQkJCQkJICBpbnQgcGVyX3BhZ2UpOwogI2Vsc2UKICNkZWZp bmUgU2xydVBhZ2VQcmVjZWRlc1VuaXRUZXN0cyhjdGwsIHBlcl9wYWdlKSBkbyB7fSB3aGlsZSAo MCkKICNlbmRpZgotZXh0ZXJuIHZvaWQgU2ltcGxlTHJ1VHJ1bmNhdGUoU2xydUN0bCBjdGwsIGlu dCBjdXRvZmZQYWdlKTsKLWV4dGVybiBib29sIFNpbXBsZUxydURvZXNQaHlzaWNhbFBhZ2VFeGlz dChTbHJ1Q3RsIGN0bCwgaW50IHBhZ2Vubyk7CitleHRlcm4gdm9pZCBTaW1wbGVMcnVUcnVuY2F0 ZShpbnQgc2xydV9pZCwgU2xydVBhZ2VQcmVjZWRlc0Z1bmN0aW9uIFBhZ2VQcmVjZWRlcywKKwkJ CQkJCQkgIGludCBjdXRvZmZQYWdlKTsKK2V4dGVybiBib29sIFNpbXBsZUxydURvZXNQaHlzaWNh bFBhZ2VFeGlzdChpbnQgc2xydV9pZCwgaW50IHBhZ2Vubyk7CiAKLXR5cGVkZWYgYm9vbCAoKlNs cnVTY2FuQ2FsbGJhY2spIChTbHJ1Q3RsIGN0bCwgY2hhciAqZmlsZW5hbWUsIGludCBzZWdwYWdl LAordHlwZWRlZiBib29sICgqU2xydVNjYW5DYWxsYmFjaykgKGludCBzbHJ1X2lkLAorCQkJCQkJ CQkgIFNscnVQYWdlUHJlY2VkZXNGdW5jdGlvbiBQYWdlUHJlY2VkZXMsCisJCQkJCQkJCSAgY2hh ciAqZmlsZW5hbWUsIGludCBzZWdwYWdlLAogCQkJCQkJCQkgIHZvaWQgKmRhdGEpOwotZXh0ZXJu IGJvb2wgU2xydVNjYW5EaXJlY3RvcnkoU2xydUN0bCBjdGwsIFNscnVTY2FuQ2FsbGJhY2sgY2Fs bGJhY2ssIHZvaWQgKmRhdGEpOwotZXh0ZXJuIHZvaWQgU2xydURlbGV0ZVNlZ21lbnQoU2xydUN0 bCBjdGwsIGludCBzZWdubyk7Ci0KLWV4dGVybiBpbnQJU2xydVN5bmNGaWxlVGFnKFNscnVDdGwg Y3RsLCBjb25zdCBGaWxlVGFnICpmdGFnLCBjaGFyICpwYXRoKTsKK2V4dGVybiBib29sIFNscnVT Y2FuRGlyZWN0b3J5KGludCBzbHJ1X2lkLCBTbHJ1UGFnZVByZWNlZGVzRnVuY3Rpb24gUGFnZVBy ZWNlZGVzLAorCQkJCQkJCSAgU2xydVNjYW5DYWxsYmFjayBjYWxsYmFjaywgdm9pZCAqZGF0YSk7 CitleHRlcm4gdm9pZCBTbHJ1RGVsZXRlU2VnbWVudChpbnQgc2xydV9pZCwgaW50IHNlZ25vKTsK IAogLyogU2xydVNjYW5EaXJlY3RvcnkgcHVibGljIGNhbGxiYWNrcyAqLwotZXh0ZXJuIGJvb2wg U2xydVNjYW5EaXJDYlJlcG9ydFByZXNlbmNlKFNscnVDdGwgY3RsLCBjaGFyICpmaWxlbmFtZSwK K2V4dGVybiBib29sIFNscnVTY2FuRGlyQ2JSZXBvcnRQcmVzZW5jZShpbnQgc2xydV9pZCwKKwkJ CQkJCQkJCQlTbHJ1UGFnZVByZWNlZGVzRnVuY3Rpb24gUGFnZVByZWNlZGVzLAorCQkJCQkJCQkJ CWNoYXIgKmZpbGVuYW1lLAogCQkJCQkJCQkJCWludCBzZWdwYWdlLCB2b2lkICpkYXRhKTsKLWV4 dGVybiBib29sIFNscnVTY2FuRGlyQ2JEZWxldGVBbGwoU2xydUN0bCBjdGwsIGNoYXIgKmZpbGVu YW1lLCBpbnQgc2VncGFnZSwKK2V4dGVybiBib29sIFNscnVTY2FuRGlyQ2JEZWxldGVBbGwoaW50 IHNscnVfaWQsIFNscnVQYWdlUHJlY2VkZXNGdW5jdGlvbiBQYWdlUHJlY2VkZXMsCisJCQkJCQkJ CSAgIGNoYXIgKmZpbGVuYW1lLCBpbnQgc2VncGFnZSwKIAkJCQkJCQkJICAgdm9pZCAqZGF0YSk7 CiAKKy8qIEJ1ZmZlciBhY2Nlc3MgKi8KK2V4dGVybiBCdWZmZXIgUmVhZFNscnVCdWZmZXIoaW50 IHNscnVfaWQsIGludCBwYWdlbm8pOworZXh0ZXJuIEJ1ZmZlciBaZXJvU2xydUJ1ZmZlcihpbnQg c2xydV9pZCwgaW50IHBhZ2Vubyk7CitleHRlcm4gYm9vbCBQcm9iZVNscnVCdWZmZXIoaW50IHNs cnVfaWQsIGludCBwYWdlbm8pOworCisvKiBJbnRlcmZhY2VzIHVzZSBieSBzdGF0cyB2aWV3ICov CitleHRlcm4gT2lkIFNscnVSZWxJZEJ5TmFtZShjb25zdCBjaGFyICpuYW1lKTsKK2V4dGVybiBj b25zdCBjaGFyICpTbHJ1TmFtZShpbnQgc2xydV9pZCk7CisKICNlbmRpZgkJCQkJCQkvKiBTTFJV X0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9zbHJ1bGlzdC5oIGIvc3JjL2lu Y2x1ZGUvYWNjZXNzL3NscnVsaXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAuLmMxMjg5YTEzMjZjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNz L3NscnVsaXN0LmgKQEAgLTAsMCArMSwzMCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHNs cnVsaXN0LmgKKyAqCisgKiBUaGUgU0xSVSBsaXN0IGlzIGtlcHQgaW4gaXRzIG93biBzb3VyY2Ug ZmlsZSBmb3IgcG9zc2libGUKKyAqIHVzZSBieSBhdXRvbWF0aWMgdG9vbHMuICBUaGUgZXhhY3Qg cmVwcmVzZW50YXRpb24gb2YgYSBybWdyIGlzIGRldGVybWluZWQKKyAqIGJ5IHRoZSBQR19TTFJV IG1hY3JvLCB3aGljaCBpcyBub3QgZGVmaW5lZCBpbiB0aGlzIGZpbGU7IGl0IGNhbiBiZQorICog ZGVmaW5lZCBieSB0aGUgY2FsbGVyIGZvciBzcGVjaWFsIHB1cnBvc2VzLgorICoKKyAqIFBvcnRp b25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVu dCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBV bml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBzcmMvaW5jbHVkZS9hY2Nlc3Mvc2xydWxp c3QuaAorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvKiB0aGVyZSBpcyBkZWxpYmVyYXRl bHkgbm90IGFuICNpZm5kZWYgU0xSVUxJU1RfSCBoZXJlICovCisKKy8qCisgKiBMaXN0IG9mIFNM UlUgZW50cmllcy4gIE5vdGUgdGhhdCBvcmRlciBvZiBlbnRyaWVzIGRlZmluZXMgdGhlCisgKiBu dW1lcmljYWwgdmFsdWVzIG9mIGVhY2ggU0xSVSdzIElELCB3aGljaCBpcyB1c2VkIGluIGluLW1l bW9yeSBzdHJ1Y3R1cy4KKyAqLworCisvKiBzeW1ib2wgbmFtZSwgdGV4dHVhbCBuYW1lLCBwYXRo LCBzeW5jaHJvbml6ZSAqLworUEdfU0xSVShTTFJVX0NMT0dfSUQsICJYYWN0IiwgInBnX3hhY3Qi LCB0cnVlKQorUEdfU0xSVShTTFJVX1NVQlRSQU5TX0lELCAiU3VidHJhbnMiLCAicGdfc3VidHJh bnMiLCBmYWxzZSkKK1BHX1NMUlUoU0xSVV9NVUxUSVhBQ1RfT0ZGU0VUX0lELCAiTXVsdGlYYWN0 T2Zmc2V0IiwgInBnX211bHRpeGFjdC9vZmZzZXRzIiwgdHJ1ZSkKK1BHX1NMUlUoU0xSVV9NVUxU SVhBQ1RfTUVNQkVSX0lELCAiTXVsdGlYYWN0TWVtYmVyIiwgInBnX211bHRpeGFjdC9tZW1iZXJz IiwgdHJ1ZSkKK1BHX1NMUlUoU0xSVV9DT01NSVRfVFNfSUQsICJDb21taXRUcyIsICJwZ19jb21t aXRfdHMiLCB0cnVlKQorUEdfU0xSVShTTFJVX1NFUklBTF9JRCwgIlNlcmlhbCIsICJwZ19zZXJp YWwiLCBmYWxzZSkKK1BHX1NMUlUoU0xSVV9OT1RJRllfSUQsICJOb3RpZnkiLCAicGdfbm90aWZ5 IiwgZmFsc2UpCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3Mvc3VidHJhbnMuaCBiL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9zdWJ0cmFucy5oCmluZGV4IGY5NGUxMTY2NDBiLi40Njg1YTA1YmM5 MiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3N1YnRyYW5zLmgKKysrIGIvc3JjL2lu Y2x1ZGUvYWNjZXNzL3N1YnRyYW5zLmgKQEAgLTE4LDExICsxOCw4IEBAIGV4dGVybiB2b2lkIFN1 YlRyYW5zU2V0UGFyZW50KFRyYW5zYWN0aW9uSWQgeGlkLCBUcmFuc2FjdGlvbklkIHBhcmVudCk7 CiBleHRlcm4gVHJhbnNhY3Rpb25JZCBTdWJUcmFuc0dldFBhcmVudChUcmFuc2FjdGlvbklkIHhp ZCk7CiBleHRlcm4gVHJhbnNhY3Rpb25JZCBTdWJUcmFuc0dldFRvcG1vc3RUcmFuc2FjdGlvbihU cmFuc2FjdGlvbklkIHhpZCk7CiAKLWV4dGVybiBTaXplIFNVQlRSQU5TU2htZW1TaXplKHZvaWQp OwotZXh0ZXJuIHZvaWQgU1VCVFJBTlNTaG1lbUluaXQodm9pZCk7CiBleHRlcm4gdm9pZCBCb290 U3RyYXBTVUJUUkFOUyh2b2lkKTsKIGV4dGVybiB2b2lkIFN0YXJ0dXBTVUJUUkFOUyhUcmFuc2Fj dGlvbklkIG9sZGVzdEFjdGl2ZVhJRCk7Ci1leHRlcm4gdm9pZCBDaGVja1BvaW50U1VCVFJBTlMo dm9pZCk7CiBleHRlcm4gdm9pZCBFeHRlbmRTVUJUUkFOUyhUcmFuc2FjdGlvbklkIG5ld2VzdFhh Y3QpOwogZXh0ZXJuIHZvaWQgVHJ1bmNhdGVTVUJUUkFOUyhUcmFuc2FjdGlvbklkIG9sZGVzdFhh Y3QpOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3N0b3JhZ2UuaCBiL3NyYy9p bmNsdWRlL2NhdGFsb2cvc3RvcmFnZS5oCmluZGV4IDk5NjRjMzEyYWEyLi4wNDExNDMwNTU0NyAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9zdG9yYWdlLmgKKysrIGIvc3JjL2luY2x1 ZGUvY2F0YWxvZy9zdG9yYWdlLmgKQEAgLTIyLDE5ICsyMiwyMCBAQAogLyogR1VDIHZhcmlhYmxl cyAqLwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCB3YWxfc2tpcF90aHJlc2hvbGQ7CiAKLWV4dGVy biBTTWdyUmVsYXRpb24gUmVsYXRpb25DcmVhdGVTdG9yYWdlKFJlbEZpbGVMb2NhdG9yIHJsb2Nh dG9yLAotCQkJCQkJCQkJCSAgY2hhciByZWxwZXJzaXN0ZW5jZSwKLQkJCQkJCQkJCQkgIGJvb2wg cmVnaXN0ZXJfZGVsZXRlKTsKK2V4dGVybiBTTWdyRmlsZUhhbmRsZSBSZWxhdGlvbkNyZWF0ZVN0 b3JhZ2UoUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IsCisJCQkJCQkJCQkJCWNoYXIgcmVscGVyc2lz dGVuY2UsCisJCQkJCQkJCQkJCWJvb2wgcmVnaXN0ZXJfZGVsZXRlKTsKIGV4dGVybiB2b2lkIFJl bGF0aW9uRHJvcFN0b3JhZ2UoUmVsYXRpb24gcmVsKTsKIGV4dGVybiB2b2lkIFJlbGF0aW9uUHJl c2VydmVTdG9yYWdlKFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBib29sIGF0Q29tbWl0KTsKIGV4 dGVybiB2b2lkIFJlbGF0aW9uUHJlVHJ1bmNhdGUoUmVsYXRpb24gcmVsKTsKIGV4dGVybiB2b2lk IFJlbGF0aW9uVHJ1bmNhdGUoUmVsYXRpb24gcmVsLCBCbG9ja051bWJlciBuYmxvY2tzKTsKLWV4 dGVybiB2b2lkIFJlbGF0aW9uQ29weVN0b3JhZ2UoU01nclJlbGF0aW9uIHNyYywgU01nclJlbGF0 aW9uIGRzdCwKLQkJCQkJCQkJRm9ya051bWJlciBmb3JrTnVtLCBjaGFyIHJlbHBlcnNpc3RlbmNl KTsKK2V4dGVybiB2b2lkIFJlbGF0aW9uQ29weVN0b3JhZ2UoU01nckZpbGVIYW5kbGUgc3JjLCBT TWdyRmlsZUhhbmRsZSBkc3QsCisJCQkJCQkJCWNoYXIgcmVscGVyc2lzdGVuY2UpOwogZXh0ZXJu IGJvb2wgUmVsRmlsZUxvY2F0b3JTa2lwcGluZ1dBTChSZWxGaWxlTG9jYXRvciBybG9jYXRvcik7 CiBleHRlcm4gU2l6ZSBFc3RpbWF0ZVBlbmRpbmdTeW5jc1NwYWNlKHZvaWQpOwogZXh0ZXJuIHZv aWQgU2VyaWFsaXplUGVuZGluZ1N5bmNzKFNpemUgbWF4U2l6ZSwgY2hhciAqc3RhcnRBZGRyZXNz KTsKIGV4dGVybiB2b2lkIFJlc3RvcmVQZW5kaW5nU3luY3MoY2hhciAqc3RhcnRBZGRyZXNzKTsK K2V4dGVybiB2b2lkIERyb3BSZWxhdGlvbkZpbGVzKFJlbEZpbGVMb2NhdG9yICpkZWxyZWxzLCBp bnQgbmRlbHJlbHMsIGJvb2wgaXNSZWRvKTsKIAogLyoKICAqIFRoZXNlIGZ1bmN0aW9ucyB1c2Vk IHRvIGJlIGluIHN0b3JhZ2Uvc21nci9zbWdyLmMsIHdoaWNoIGV4cGxhaW5zIHRoZQpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvY29tbW9uL3JlbHBhdGguaCBiL3NyYy9pbmNsdWRlL2NvbW1vbi9y ZWxwYXRoLmgKaW5kZXggNGJiZDk0MzkzYzguLjYwNmQwZThjNjRmIDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9jb21tb24vcmVscGF0aC5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1vbi9yZWxwYXRo LmgKQEAgLTYzLDYgKzYzLDkgQEAgdHlwZWRlZiBlbnVtIEZvcmtOdW1iZXIKIAogI2RlZmluZSBG T1JLTkFNRUNIQVJTCTQJCS8qIG1heCBjaGFycyBmb3IgYSBmb3JrIG5hbWUgKi8KIAorLyogUHNl dWRvIHRhYmxlc3BhY2UgSUQgdXNlZCBmb3IgU0xSVXMuICovCisjZGVmaW5lIFNMUlVfU1BDX09J RCA5CisKIGV4dGVybiBQR0RMTElNUE9SVCBjb25zdCBjaGFyICpjb25zdCBmb3JrTmFtZXNbXTsK IAogZXh0ZXJuIEZvcmtOdW1iZXIgZm9ya25hbWVfdG9fbnVtYmVyKGNvbnN0IGNoYXIgKmZvcmtO YW1lKTsKQEAgLTczLDI1ICs3NiwyNSBAQCBleHRlcm4gaW50CWZvcmtuYW1lX2NoYXJzKGNvbnN0 IGNoYXIgKnN0ciwgRm9ya051bWJlciAqZm9yayk7CiAgKi8KIGV4dGVybiBjaGFyICpHZXREYXRh YmFzZVBhdGgoT2lkIGRiT2lkLCBPaWQgc3BjT2lkKTsKIAotZXh0ZXJuIGNoYXIgKkdldFJlbGF0 aW9uUGF0aChPaWQgZGJPaWQsIE9pZCBzcGNPaWQsIFJlbEZpbGVOdW1iZXIgcmVsTnVtYmVyLAor ZXh0ZXJuIGNoYXIgKkdldFNNZ3JGaWxlUGF0aChPaWQgZGJPaWQsIE9pZCBzcGNPaWQsIFJlbEZp bGVOdW1iZXIgcmVsTnVtYmVyLAogCQkJCQkJCSBpbnQgYmFja2VuZElkLCBGb3JrTnVtYmVyIGZv cmtOdW1iZXIpOwogCiAvKgogICogV3JhcHBlciBtYWNyb3MgZm9yIEdldFJlbGF0aW9uUGF0aC4g IEJld2FyZSBvZiBtdWx0aXBsZQotICogZXZhbHVhdGlvbiBvZiB0aGUgUmVsRmlsZUxvY2F0b3Ig b3IgUmVsRmlsZUxvY2F0b3JCYWNrZW5kIGFyZ3VtZW50IQorICogZXZhbHVhdGlvbiBvZiB0aGUg UmVsRmlsZUxvY2F0b3Igb3IgU01nckZpbGVMb2NhdG9yIGFyZ3VtZW50IQogICovCiAKIC8qIEZp cnN0IGFyZ3VtZW50IGlzIGEgUmVsRmlsZUxvY2F0b3IgKi8KICNkZWZpbmUgcmVscGF0aGJhY2tl bmQocmxvY2F0b3IsIGJhY2tlbmQsIGZvcmtudW0pIFwKLQlHZXRSZWxhdGlvblBhdGgoKHJsb2Nh dG9yKS5kYk9pZCwgKHJsb2NhdG9yKS5zcGNPaWQsIChybG9jYXRvcikucmVsTnVtYmVyLCBcCisJ R2V0U01nckZpbGVQYXRoKChybG9jYXRvcikuZGJPaWQsIChybG9jYXRvcikuc3BjT2lkLCAocmxv Y2F0b3IpLnJlbE51bWJlciwgXAogCQkJCQliYWNrZW5kLCBmb3JrbnVtKQogCiAvKiBGaXJzdCBh cmd1bWVudCBpcyBhIFJlbEZpbGVMb2NhdG9yICovCiAjZGVmaW5lIHJlbHBhdGhwZXJtKHJsb2Nh dG9yLCBmb3JrbnVtKSBcCiAJcmVscGF0aGJhY2tlbmQocmxvY2F0b3IsIEludmFsaWRCYWNrZW5k SWQsIGZvcmtudW0pCiAKLS8qIEZpcnN0IGFyZ3VtZW50IGlzIGEgUmVsRmlsZUxvY2F0b3JCYWNr ZW5kICovCi0jZGVmaW5lIHJlbHBhdGgocmxvY2F0b3IsIGZvcmtudW0pIFwKLQlyZWxwYXRoYmFj a2VuZCgocmxvY2F0b3IpLmxvY2F0b3IsIChybG9jYXRvcikuYmFja2VuZCwgZm9ya251bSkKKy8q IEZpcnN0IGFyZ3VtZW50IGlzIGEgU01nckZpbGVMb2NhdG9yICovCisjZGVmaW5lIHNtZ3JmaWxl cGF0aChzbG9jYXRvcikgXAorCUdldFNNZ3JGaWxlUGF0aCgoc2xvY2F0b3IpLmxvY2F0b3IuZGJP aWQsIChzbG9jYXRvcikubG9jYXRvci5zcGNPaWQsIChzbG9jYXRvcikubG9jYXRvci5yZWxOdW1i ZXIsIChzbG9jYXRvcikuYmFja2VuZCwgKHNsb2NhdG9yKS5mb3JrbnVtKQogCiAjZW5kaWYJCQkJ CQkJLyogUkVMUEFUSF9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zl9p bnRlcm5hbHMuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmX2ludGVybmFscy5oCmluZGV4IDQw NmRiNmJlNzgzLi5lNjc2NjkyYTMwYSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9i dWZfaW50ZXJuYWxzLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZfaW50ZXJuYWxzLmgK QEAgLTI4MSw2ICsyODEsMTEgQEAgdHlwZWRlZiB1bmlvbiBCdWZmZXJEZXNjUGFkZGVkCiAJY2hh cgkJcGFkW0JVRkZFUkRFU0NfUEFEX1RPX1NJWkVdOwogfSBCdWZmZXJEZXNjUGFkZGVkOwogCisj ZGVmaW5lIEJ1ZmZlckdldEV4dGVybmFsTFNOKGJ1ZkhkcikgXAorCUJ1ZmZlckV4dGVybmFsTFNO c1soYnVmSGRyKS0+YnVmX2lkXQorI2RlZmluZSBCdWZmZXJTZXRFeHRlcm5hbExTTihidWZIZHIs IGxzbikgXAorCUJ1ZmZlckV4dGVybmFsTFNOc1soYnVmSGRyKS0+YnVmX2lkXSA9IChsc24pCisK IC8qCiAgKiBUaGUgUGVuZGluZ1dyaXRlYmFjayAmIFdyaXRlYmFja0NvbnRleHQgc3RydWN0dXJl IGFyZSB1c2VkIHRvIGtlZXAKICAqIGluZm9ybWF0aW9uIGFib3V0IHBlbmRpbmcgZmx1c2ggcmVx dWVzdHMgdG8gYmUgaXNzdWVkIHRvIHRoZSBPUy4KQEAgLTMwNyw2ICszMTIsNyBAQCB0eXBlZGVm IHN0cnVjdCBXcml0ZWJhY2tDb250ZXh0CiAvKiBpbiBidWZfaW5pdC5jICovCiBleHRlcm4gUEdE TExJTVBPUlQgQnVmZmVyRGVzY1BhZGRlZCAqQnVmZmVyRGVzY3JpcHRvcnM7CiBleHRlcm4gUEdE TExJTVBPUlQgQ29uZGl0aW9uVmFyaWFibGVNaW5pbWFsbHlQYWRkZWQgKkJ1ZmZlcklPQ1ZBcnJh eTsKK2V4dGVybiBQR0RMTElNUE9SVCBYTG9nUmVjUHRyICpCdWZmZXJFeHRlcm5hbExTTnM7CiBl eHRlcm4gUEdETExJTVBPUlQgV3JpdGViYWNrQ29udGV4dCBCYWNrZW5kV3JpdGViYWNrQ29udGV4 dDsKIAogLyogaW4gbG9jYWxidWYuYyAqLwpAQCAtNDEzLDEwICs0MTksOSBAQCBleHRlcm4gaW50 CUJ1ZlRhYmxlSW5zZXJ0KEJ1ZmZlclRhZyAqdGFnUHRyLCB1aW50MzIgaGFzaGNvZGUsIGludCBi dWZfaWQpOwogZXh0ZXJuIHZvaWQgQnVmVGFibGVEZWxldGUoQnVmZmVyVGFnICp0YWdQdHIsIHVp bnQzMiBoYXNoY29kZSk7CiAKIC8qIGxvY2FsYnVmLmMgKi8KLWV4dGVybiBQcmVmZXRjaEJ1ZmZl clJlc3VsdCBQcmVmZXRjaExvY2FsQnVmZmVyKFNNZ3JSZWxhdGlvbiBzbWdyLAotCQkJCQkJCQkJ CQkJRm9ya051bWJlciBmb3JrTnVtLAorZXh0ZXJuIFByZWZldGNoQnVmZmVyUmVzdWx0IFByZWZl dGNoTG9jYWxCdWZmZXIoU01nckZpbGVIYW5kbGUgc21nciwKIAkJCQkJCQkJCQkJCUJsb2NrTnVt YmVyIGJsb2NrTnVtKTsKLWV4dGVybiBCdWZmZXJEZXNjICpMb2NhbEJ1ZmZlckFsbG9jKFNNZ3JS ZWxhdGlvbiBzbWdyLCBGb3JrTnVtYmVyIGZvcmtOdW0sCitleHRlcm4gQnVmZmVyRGVzYyAqTG9j YWxCdWZmZXJBbGxvYyhTTWdyRmlsZUhhbmRsZSBzbWdyLAogCQkJCQkJCQkJQmxvY2tOdW1iZXIg YmxvY2tOdW0sIGJvb2wgKmZvdW5kUHRyKTsKIGV4dGVybiB2b2lkIE1hcmtMb2NhbEJ1ZmZlckRp cnR5KEJ1ZmZlciBidWZmZXIpOwogZXh0ZXJuIHZvaWQgRHJvcFJlbGF0aW9uTG9jYWxCdWZmZXJz KFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFn ZS9idWZtZ3IuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKaW5kZXggZTFiZDIyNDQx YjAuLmU0MWI0OGNmMmJmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5o CisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKQEAgLTU5LDcgKzU5LDcgQEAgdHlw ZWRlZiBzdHJ1Y3QgUHJlZmV0Y2hCdWZmZXJSZXN1bHQKIHN0cnVjdCBXcml0ZWJhY2tDb250ZXh0 OwogCiAvKiBmb3J3YXJkIGRlY2xhcmVkLCB0byBhdm9pZCBpbmNsdWRpbmcgc21nci5oIGhlcmUg Ki8KLXN0cnVjdCBTTWdyUmVsYXRpb25EYXRhOworc3RydWN0IFNNZ3JGaWxlRGF0YTsKIAogLyog aW4gZ2xvYmFscy5jIC4uLiB0aGlzIGR1cGxpY2F0ZXMgbWlzY2FkbWluLmggKi8KIGV4dGVybiBQ R0RMTElNUE9SVCBpbnQgTkJ1ZmZlcnM7CkBAIC0xMTAsOCArMTEwLDcgQEAgZXh0ZXJuIFBHRExM SU1QT1JUIGludDMyICpMb2NhbFJlZkNvdW50OwogLyoKICAqIHByb3RvdHlwZXMgZm9yIGZ1bmN0 aW9ucyBpbiBidWZtZ3IuYwogICovCi1leHRlcm4gUHJlZmV0Y2hCdWZmZXJSZXN1bHQgUHJlZmV0 Y2hTaGFyZWRCdWZmZXIoc3RydWN0IFNNZ3JSZWxhdGlvbkRhdGEgKnNtZ3JfcmVsbiwKLQkJCQkJ CQkJCQkJCSBGb3JrTnVtYmVyIGZvcmtOdW0sCitleHRlcm4gUHJlZmV0Y2hCdWZmZXJSZXN1bHQg UHJlZmV0Y2hTaGFyZWRCdWZmZXIoc3RydWN0IFNNZ3JGaWxlRGF0YSAqc21ncl9maWxlLAogCQkJ CQkJCQkJCQkJIEJsb2NrTnVtYmVyIGJsb2NrTnVtKTsKIGV4dGVybiBQcmVmZXRjaEJ1ZmZlclJl c3VsdCBQcmVmZXRjaEJ1ZmZlcihSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtOdW0sCiAJ CQkJCQkJCQkJICAgQmxvY2tOdW1iZXIgYmxvY2tOdW0pOwpAQCAtMTI1LDEzICsxMjQsMTkgQEAg ZXh0ZXJuIEJ1ZmZlciBSZWFkQnVmZmVyV2l0aG91dFJlbGNhY2hlKFJlbEZpbGVMb2NhdG9yIHJs b2NhdG9yLAogCQkJCQkJCQkJCUZvcmtOdW1iZXIgZm9ya051bSwgQmxvY2tOdW1iZXIgYmxvY2tO dW0sCiAJCQkJCQkJCQkJUmVhZEJ1ZmZlck1vZGUgbW9kZSwgQnVmZmVyQWNjZXNzU3RyYXRlZ3kg c3RyYXRlZ3ksCiAJCQkJCQkJCQkJYm9vbCBwZXJtYW5lbnQpOworZXh0ZXJuIEJ1ZmZlciBSZWFk QnVmZmVyV2l0aG91dFJlbGNhY2hlV2l0aEhpdChSZWxGaWxlTG9jYXRvciBybG9jYXRvciwKKwkJ CQkJCQkJCQlGb3JrTnVtYmVyIGZvcmtOdW0sIEJsb2NrTnVtYmVyIGJsb2NrTnVtLAorCQkJCQkJ CQkJCVJlYWRCdWZmZXJNb2RlIG1vZGUsIEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LAor CQkJCQkJCQkJCQkgICBib29sIHBlcm1hbmVudCwgYm9vbCAqaGl0KTsKIGV4dGVybiB2b2lkIFJl bGVhc2VCdWZmZXIoQnVmZmVyIGJ1ZmZlcik7CiBleHRlcm4gdm9pZCBVbmxvY2tSZWxlYXNlQnVm ZmVyKEJ1ZmZlciBidWZmZXIpOwogZXh0ZXJuIHZvaWQgTWFya0J1ZmZlckRpcnR5KEJ1ZmZlciBi dWZmZXIpOwogZXh0ZXJuIHZvaWQgSW5jckJ1ZmZlclJlZkNvdW50KEJ1ZmZlciBidWZmZXIpOwog ZXh0ZXJuIEJ1ZmZlciBSZWxlYXNlQW5kUmVhZEJ1ZmZlcihCdWZmZXIgYnVmZmVyLCBSZWxhdGlv biByZWxhdGlvbiwKIAkJCQkJCQkJICAgQmxvY2tOdW1iZXIgYmxvY2tOdW0pOwotCitleHRlcm4g Ym9vbCBCdWZmZXJQcm9iZShSZWxGaWxlTG9jYXRvciBybG9jYXRvciwgRm9ya051bWJlciBmb3Jr TnVtLAorCQkJCQkJQmxvY2tOdW1iZXIgYmxvY2tOdW0pOworIAogZXh0ZXJuIHZvaWQgSW5pdEJ1 ZmZlclBvb2xBY2Nlc3Modm9pZCk7CiBleHRlcm4gdm9pZCBBdEVPWGFjdF9CdWZmZXJzKGJvb2wg aXNDb21taXQpOwogZXh0ZXJuIHZvaWQgUHJpbnRCdWZmZXJMZWFrV2FybmluZyhCdWZmZXIgYnVm ZmVyKTsKQEAgLTEzOSwxOCArMTQ0LDI2IEBAIGV4dGVybiB2b2lkIENoZWNrUG9pbnRCdWZmZXJz KGludCBmbGFncyk7CiBleHRlcm4gQmxvY2tOdW1iZXIgQnVmZmVyR2V0QmxvY2tOdW1iZXIoQnVm ZmVyIGJ1ZmZlcik7CiBleHRlcm4gQmxvY2tOdW1iZXIgUmVsYXRpb25HZXROdW1iZXJPZkJsb2Nr c0luRm9yayhSZWxhdGlvbiByZWxhdGlvbiwKIAkJCQkJCQkJCQkJCSAgIEZvcmtOdW1iZXIgZm9y a051bSk7Ci1leHRlcm4gdm9pZCBGbHVzaE9uZUJ1ZmZlcihCdWZmZXIgYnVmZmVyKTsKLWV4dGVy biB2b2lkIEZsdXNoUmVsYXRpb25CdWZmZXJzKFJlbGF0aW9uIHJlbCk7Ci1leHRlcm4gdm9pZCBG bHVzaFJlbGF0aW9uc0FsbEJ1ZmZlcnMoc3RydWN0IFNNZ3JSZWxhdGlvbkRhdGEgKipzbWdycywg aW50IG5yZWxzKTsKIGV4dGVybiB2b2lkIENyZWF0ZUFuZENvcHlSZWxhdGlvbkRhdGEoUmVsRmls ZUxvY2F0b3Igc3JjX3Jsb2NhdG9yLAogCQkJCQkJCQkJICBSZWxGaWxlTG9jYXRvciBkc3Rfcmxv Y2F0b3IsCiAJCQkJCQkJCQkgIGJvb2wgcGVybWFuZW50KTsKKworZXh0ZXJuIHZvaWQgRmx1c2hP bmVCdWZmZXIoQnVmZmVyIGJ1ZmZlcik7CitleHRlcm4gdm9pZCBGbHVzaFJlbGF0aW9uQnVmZmVy cyhSZWxhdGlvbiByZWwpOworZXh0ZXJuIHZvaWQgRmx1c2hSZWxhdGlvbnNBbGxCdWZmZXJzKFJl bEZpbGVMb2NhdG9yICpsb2NhdG9ycywgaW50IG5sb2NhdG9ycyk7CiBleHRlcm4gdm9pZCBGbHVz aERhdGFiYXNlQnVmZmVycyhPaWQgZGJpZCk7Ci1leHRlcm4gdm9pZCBEcm9wUmVsYXRpb25CdWZm ZXJzKHN0cnVjdCBTTWdyUmVsYXRpb25EYXRhICpzbWdyX3JlbG4sCisKK2V4dGVybiB2b2lkIERy b3BSZWxhdGlvbkJ1ZmZlcnMoUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IsIEJhY2tlbmRJZCBiYWNr ZW5kLAogCQkJCQkJCQlGb3JrTnVtYmVyICpmb3JrTnVtLAogCQkJCQkJCQlpbnQgbmZvcmtzLCBC bG9ja051bWJlciAqZmlyc3REZWxCbG9jayk7Ci1leHRlcm4gdm9pZCBEcm9wUmVsYXRpb25zQWxs QnVmZmVycyhzdHJ1Y3QgU01nclJlbGF0aW9uRGF0YSAqKnNtZ3JfcmVsbiwKLQkJCQkJCQkJCWlu dCBubG9jYXRvcnMpOworCit0eXBlZGVmIHN0cnVjdCBSZWxGaWxlTG9jYXRvckJhY2tlbmQKK3sK KwlSZWxGaWxlTG9jYXRvciBsb2NhdG9yOworCUJhY2tlbmRJZAliYWNrZW5kOworfSBSZWxGaWxl TG9jYXRvckJhY2tlbmQ7CisKK2V4dGVybiB2b2lkIERyb3BSZWxhdGlvbnNBbGxCdWZmZXJzKFJl bEZpbGVMb2NhdG9yQmFja2VuZCAqbG9jYXRvcnMsIGludCBubG9jYXRvcnMpOwogZXh0ZXJuIHZv aWQgRHJvcERhdGFiYXNlQnVmZmVycyhPaWQgZGJpZCk7CiAKICNkZWZpbmUgUmVsYXRpb25HZXRO dW1iZXJPZkJsb2NrcyhyZWxuKSBcCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL21k LmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL21kLmgKaW5kZXggMTBhYTFiMDEwOWIuLmJjYjg3ZDU2 Mjk1IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL21kLmgKKysrIGIvc3JjL2luY2x1 ZGUvc3RvcmFnZS9tZC5oCkBAIC0yMSwyOCArMjEsMjYgQEAKIAogLyogbWQgc3RvcmFnZSBtYW5h Z2VyIGZ1bmN0aW9uYWxpdHkgKi8KIGV4dGVybiB2b2lkIG1kaW5pdCh2b2lkKTsKLWV4dGVybiB2 b2lkIG1kb3BlbihTTWdyUmVsYXRpb24gcmVsbik7Ci1leHRlcm4gdm9pZCBtZGNsb3NlKFNNZ3JS ZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0pOwotZXh0ZXJuIHZvaWQgbWRjcmVhdGUo U01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgYm9vbCBpc1JlZG8pOwotZXh0 ZXJuIGJvb2wgbWRleGlzdHMoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSk7 Ci1leHRlcm4gdm9pZCBtZHVubGluayhSZWxGaWxlTG9jYXRvckJhY2tlbmQgcmxvY2F0b3IsIEZv cmtOdW1iZXIgZm9ya251bSwgYm9vbCBpc1JlZG8pOwotZXh0ZXJuIHZvaWQgbWRleHRlbmQoU01n clJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwKK2V4dGVybiB2b2lkIG1kb3BlbihT TWdyRmlsZUhhbmRsZSBzZmlsZSk7CitleHRlcm4gdm9pZCBtZGNsb3NlKFNNZ3JGaWxlSGFuZGxl IHNmaWxlKTsKK2V4dGVybiB2b2lkIG1kY3JlYXRlKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBib29s IGlzUmVkbyk7CitleHRlcm4gYm9vbCBtZGV4aXN0cyhTTWdyRmlsZUhhbmRsZSBzZmlsZSk7Citl eHRlcm4gdm9pZCBtZHVubGluayhTTWdyRmlsZUxvY2F0b3Igc2xvY2F0b3IsIGJvb2wgaXNSZWRv KTsKK2V4dGVybiB2b2lkIG1kZXh0ZW5kKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLAogCQkJCQkgQmxv Y2tOdW1iZXIgYmxvY2tudW0sIGNoYXIgKmJ1ZmZlciwgYm9vbCBza2lwRnN5bmMpOwotZXh0ZXJu IGJvb2wgbWRwcmVmZXRjaChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLAor ZXh0ZXJuIGJvb2wgbWRwcmVmZXRjaChTTWdyRmlsZUhhbmRsZSBzZmlsZSwKIAkJCQkJICAgQmxv Y2tOdW1iZXIgYmxvY2tudW0pOwotZXh0ZXJuIHZvaWQgbWRyZWFkKFNNZ3JSZWxhdGlvbiByZWxu LCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGJsb2NrbnVtLAorZXh0ZXJuIHZvaWQg bWRyZWFkKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBCbG9ja051bWJlciBibG9ja251bSwKIAkJCQkg ICBjaGFyICpidWZmZXIpOwotZXh0ZXJuIHZvaWQgbWR3cml0ZShTTWdyUmVsYXRpb24gcmVsbiwg Rm9ya051bWJlciBmb3JrbnVtLAorZXh0ZXJuIHZvaWQgbWR3cml0ZShTTWdyRmlsZUhhbmRsZSBz ZmlsZSwKIAkJCQkJQmxvY2tOdW1iZXIgYmxvY2tudW0sIGNoYXIgKmJ1ZmZlciwgYm9vbCBza2lw RnN5bmMpOwotZXh0ZXJuIHZvaWQgbWR3cml0ZWJhY2soU01nclJlbGF0aW9uIHJlbG4sIEZvcmtO dW1iZXIgZm9ya251bSwKK2V4dGVybiB2b2lkIG1kd3JpdGViYWNrKFNNZ3JGaWxlSGFuZGxlIHNm aWxlLAogCQkJCQkJQmxvY2tOdW1iZXIgYmxvY2tudW0sIEJsb2NrTnVtYmVyIG5ibG9ja3MpOwot ZXh0ZXJuIEJsb2NrTnVtYmVyIG1kbmJsb2NrcyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJl ciBmb3JrbnVtKTsKLWV4dGVybiB2b2lkIG1kdHJ1bmNhdGUoU01nclJlbGF0aW9uIHJlbG4sIEZv cmtOdW1iZXIgZm9ya251bSwKLQkJCQkJICAgQmxvY2tOdW1iZXIgbmJsb2Nrcyk7Ci1leHRlcm4g dm9pZCBtZGltbWVkc3luYyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtKTsK K2V4dGVybiBCbG9ja051bWJlciBtZG5ibG9ja3MoU01nckZpbGVIYW5kbGUgc2ZpbGUpOworZXh0 ZXJuIHZvaWQgbWR0cnVuY2F0ZShTTWdyRmlsZUhhbmRsZSBzZmlsZSwgQmxvY2tOdW1iZXIgbmJs b2Nrcyk7CitleHRlcm4gdm9pZCBtZGltbWVkc3luYyhTTWdyRmlsZUhhbmRsZSBzZmlsZSk7CiAK IGV4dGVybiB2b2lkIEZvcmdldERhdGFiYXNlU3luY1JlcXVlc3RzKE9pZCBkYmlkKTsKLWV4dGVy biB2b2lkIERyb3BSZWxhdGlvbkZpbGVzKFJlbEZpbGVMb2NhdG9yICpkZWxyZWxzLCBpbnQgbmRl bHJlbHMsIGJvb2wgaXNSZWRvKTsKIAogLyogbWQgc3luYyBjYWxsYmFja3MgKi8KIGV4dGVybiBp bnQJbWRzeW5jZmlsZXRhZyhjb25zdCBGaWxlVGFnICpmdGFnLCBjaGFyICpwYXRoKTsKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcmVsZmlsZWxvY2F0b3IuaCBiL3NyYy9pbmNsdWRl L3N0b3JhZ2UvcmVsZmlsZWxvY2F0b3IuaAppbmRleCAxMGY0MWYzYWJiMy4uMjk2Y2IxYjhlNTEg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcmVsZmlsZWxvY2F0b3IuaAorKysgYi9z cmMvaW5jbHVkZS9zdG9yYWdlL3JlbGZpbGVsb2NhdG9yLmgKQEAgLTUzLDYgKzUzLDggQEAKICAq IE5vdGU6IHZhcmlvdXMgcGxhY2VzIHVzZSBSZWxGaWxlTG9jYXRvciBpbiBoYXNodGFibGUga2V5 cy4gIFRoZXJlZm9yZSwKICAqIHRoZXJlICptdXN0IG5vdCogYmUgYW55IHVudXNlZCBwYWRkaW5n IGJ5dGVzIGluIHRoaXMgc3RydWN0LiAgVGhhdAogICogc2hvdWxkIGJlIHNhZmUgYXMgbG9uZyBh cyBhbGwgdGhlIGZpZWxkcyBhcmUgb2YgdHlwZSBPaWQuCisgKgorICogU2VlIGFsc28gU01nckZp bGVMb2NhdG9yIGluIHNtZ3IuaC4KICAqLwogdHlwZWRlZiBzdHJ1Y3QgUmVsRmlsZUxvY2F0b3IK IHsKQEAgLTYyLDM4ICs2NCwxNSBAQCB0eXBlZGVmIHN0cnVjdCBSZWxGaWxlTG9jYXRvcgogfSBS ZWxGaWxlTG9jYXRvcjsKIAogLyoKLSAqIEF1Z21lbnRpbmcgYSByZWxmaWxlbG9jYXRvciB3aXRo IHRoZSBiYWNrZW5kIElEIHByb3ZpZGVzIGFsbCB0aGUgaW5mb3JtYXRpb24KLSAqIHdlIG5lZWQg dG8gbG9jYXRlIHRoZSBwaHlzaWNhbCBzdG9yYWdlLiAgVGhlIGJhY2tlbmQgSUQgaXMgSW52YWxp ZEJhY2tlbmRJZAotICogZm9yIHJlZ3VsYXIgcmVsYXRpb25zICh0aG9zZSBhY2Nlc3NpYmxlIHRv IG1vcmUgdGhhbiBvbmUgYmFja2VuZCksIG9yIHRoZQotICogb3duaW5nIGJhY2tlbmQncyBJRCBm b3IgYmFja2VuZC1sb2NhbCByZWxhdGlvbnMuICBCYWNrZW5kLWxvY2FsIHJlbGF0aW9ucwotICog YXJlIGFsd2F5cyB0cmFuc2llbnQgYW5kIHJlbW92ZWQgaW4gY2FzZSBvZiBhIGRhdGFiYXNlIGNy YXNoOyB0aGV5IGFyZQotICogbmV2ZXIgV0FMLWxvZ2dlZCBvciBmc3luYydkLgotICovCi10eXBl ZGVmIHN0cnVjdCBSZWxGaWxlTG9jYXRvckJhY2tlbmQKLXsKLQlSZWxGaWxlTG9jYXRvciBsb2Nh dG9yOwotCUJhY2tlbmRJZAliYWNrZW5kOwotfSBSZWxGaWxlTG9jYXRvckJhY2tlbmQ7Ci0KLSNk ZWZpbmUgUmVsRmlsZUxvY2F0b3JCYWNrZW5kSXNUZW1wKHJsb2NhdG9yKSBcCi0JKChybG9jYXRv cikuYmFja2VuZCAhPSBJbnZhbGlkQmFja2VuZElkKQotCi0vKgotICogTm90ZTogUmVsRmlsZUxv Y2F0b3JFcXVhbHMgYW5kIFJlbEZpbGVMb2NhdG9yQmFja2VuZEVxdWFscyBjb21wYXJlIHJlbE51 bWJlcgorICogTm90ZTogUmVsRmlsZUxvY2F0b3JFcXVhbHMgY29tcGFyZXMgcmVsTnVtYmVyCiAg KiBmaXJzdCBzaW5jZSB0aGF0IGlzIG1vc3QgbGlrZWx5IHRvIGJlIGRpZmZlcmVudCBpbiB0d28g dW5lcXVhbAogICogUmVsRmlsZUxvY2F0b3JzLiAgSXQgaXMgcHJvYmFibHkgcmVkdW5kYW50IHRv IGNvbXBhcmUgc3BjT2lkIGlmIHRoZSBvdGhlcgogICogZmllbGRzIGFyZSBmb3VuZCBlcXVhbCwg YnV0IGRvIGl0IGFueXdheSB0byBiZSBzdXJlLiAgTGlrZXdpc2UgZm9yIGNoZWNraW5nCi0gKiB0 aGUgYmFja2VuZCBJRCBpbiBSZWxGaWxlTG9jYXRvckJhY2tlbmRFcXVhbHMuCisgKiB0aGUgYmFj a2VuZCBJRCBpbiBTTWdyRmlsZUxvY2F0b3JCYWNrZW5kRXF1YWxzLgogICovCiAjZGVmaW5lIFJl bEZpbGVMb2NhdG9yRXF1YWxzKGxvY2F0b3IxLCBsb2NhdG9yMikgXAogCSgobG9jYXRvcjEpLnJl bE51bWJlciA9PSAobG9jYXRvcjIpLnJlbE51bWJlciAmJiBcCiAJIChsb2NhdG9yMSkuZGJPaWQg PT0gKGxvY2F0b3IyKS5kYk9pZCAmJiBcCiAJIChsb2NhdG9yMSkuc3BjT2lkID09IChsb2NhdG9y Mikuc3BjT2lkKQogCi0jZGVmaW5lIFJlbEZpbGVMb2NhdG9yQmFja2VuZEVxdWFscyhsb2NhdG9y MSwgbG9jYXRvcjIpIFwKLQkoKGxvY2F0b3IxKS5sb2NhdG9yLnJlbE51bWJlciA9PSAobG9jYXRv cjIpLmxvY2F0b3IucmVsTnVtYmVyICYmIFwKLQkgKGxvY2F0b3IxKS5sb2NhdG9yLmRiT2lkID09 IChsb2NhdG9yMikubG9jYXRvci5kYk9pZCAmJiBcCi0JIChsb2NhdG9yMSkuYmFja2VuZCA9PSAo bG9jYXRvcjIpLmJhY2tlbmQgJiYgXAotCSAobG9jYXRvcjEpLmxvY2F0b3Iuc3BjT2lkID09IChs b2NhdG9yMikubG9jYXRvci5zcGNPaWQpCi0KICNlbmRpZgkJCQkJCQkvKiBSRUxGSUxFTE9DQVRP Ul9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3NtZ3IuaCBiL3NyYy9pbmNs dWRlL3N0b3JhZ2Uvc21nci5oCmluZGV4IGEwNzcxNTM1NmJhLi4wZWQ1NjliMjgzNiAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9zbWdyLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFn ZS9zbWdyLmgKQEAgLTE4LDMxICsxOCw1NiBAQAogI2luY2x1ZGUgInN0b3JhZ2UvYmxvY2suaCIK ICNpbmNsdWRlICJzdG9yYWdlL3JlbGZpbGVsb2NhdG9yLmgiCiAKKwogLyoKLSAqIHNtZ3IuYyBt YWludGFpbnMgYSB0YWJsZSBvZiBTTWdyUmVsYXRpb24gb2JqZWN0cywgd2hpY2ggYXJlIGVzc2Vu dGlhbGx5Ci0gKiBjYWNoZWQgZmlsZSBoYW5kbGVzLiAgQW4gU01nclJlbGF0aW9uIGlzIGNyZWF0 ZWQgKGlmIG5vdCBhbHJlYWR5IHByZXNlbnQpCisgKiBTTWdyRmlsZUxvY2F0b3IgY29udGFpbnMg YWxsIHRoZSBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gbG9jYXRlIHRoZSBwaHlzaWNhbAorICogc3Rv cmFnZSBvZiBhIHJlbGF0aW9uIGZvcmssIG9yIHNvbWUgb3RoZXIgZmlsZSB0aGF0IGlzIG1hbmFn ZWQgYnkgdGhlIGJ1ZmZlcgorICogbWFuYWdlci4KKyAqCisgKiBUaGUgYmFja2VuZCBJRCBpcyBJ bnZhbGlkQmFja2VuZElkIGZvciByZWd1bGFyIHJlbGF0aW9ucyAodGhvc2UgYWNjZXNzaWJsZQor ICogdG8gbW9yZSB0aGFuIG9uZSBiYWNrZW5kKSwgb3IgdGhlIG93bmluZyBiYWNrZW5kJ3MgSUQg Zm9yIGJhY2tlbmQtbG9jYWwKKyAqIHJlbGF0aW9ucy4gQmFja2VuZC1sb2NhbCByZWxhdGlvbnMg YXJlIGFsd2F5cyB0cmFuc2llbnQgYW5kIHJlbW92ZWQgaW4KKyAqIGNhc2Ugb2YgYSBkYXRhYmFz ZSBjcmFzaDsgdGhleSBhcmUgbmV2ZXIgV0FMLWxvZ2dlZCBvciBmc3luYydkLgorICovCit0eXBl ZGVmIHN0cnVjdCBTTWdyRmlsZUxvY2F0b3IKK3sKKwlSZWxGaWxlTG9jYXRvciBsb2NhdG9yOwor CUJhY2tlbmRJZAliYWNrZW5kOworCUZvcmtOdW1iZXIJZm9ya251bTsKK30gU01nckZpbGVMb2Nh dG9yOworCisjZGVmaW5lIFNNZ3JGaWxlTG9jYXRvcklzVGVtcChzbG9jYXRvcikgXAorCSgoc2xv Y2F0b3IpLmJhY2tlbmQgIT0gSW52YWxpZEJhY2tlbmRJZCkKKworLyoKKyAqIHNtZ3IuYyBtYWlu dGFpbnMgYSB0YWJsZSBvZiBTTWdyRmlsZURhdGEgb2JqZWN0cywgd2hpY2ggYXJlIGVzc2VudGlh bGx5CisgKiBjYWNoZWQgZmlsZSBoYW5kbGVzLiAgQW4gU01nckZpbGUgaXMgY3JlYXRlZCAoaWYg bm90IGFscmVhZHkgcHJlc2VudCkKICAqIGJ5IHNtZ3JvcGVuKCksIGFuZCBkZXN0cm95ZWQgYnkg c21ncmNsb3NlKCkuICBOb3RlIHRoYXQgbmVpdGhlciBvZiB0aGVzZQogICogb3BlcmF0aW9ucyBp bXBseSBJL08sIHRoZXkganVzdCBjcmVhdGUgb3IgZGVzdHJveSBhIGhhc2h0YWJsZSBlbnRyeS4K ICAqIChCdXQgc21ncmNsb3NlKCkgbWF5IHJlbGVhc2UgYXNzb2NpYXRlZCByZXNvdXJjZXMsIHN1 Y2ggYXMgT1MtbGV2ZWwgZmlsZQogICogZGVzY3JpcHRvcnMuKQogICoKLSAqIEFuIFNNZ3JSZWxh dGlvbiBtYXkgaGF2ZSBhbiAib3duZXIiLCB3aGljaCBpcyBqdXN0IGEgcG9pbnRlciB0byBpdCBm cm9tCi0gKiBzb21ld2hlcmUgZWxzZTsgc21nci5jIHdpbGwgY2xlYXIgdGhpcyBwb2ludGVyIGlm IHRoZSBTTWdyUmVsYXRpb24gaXMKKyAqIEFuIFNNZ3JGaWxlIG1heSBoYXZlIGFuICJvd25lciIs IHdoaWNoIGlzIGp1c3QgYSBwb2ludGVyIHRvIGl0IGZyb20KKyAqIHNvbWV3aGVyZSBlbHNlOyBz bWdyLmMgd2lsbCBjbGVhciB0aGlzIHBvaW50ZXIgaWYgdGhlIFNNZ3JGaWxlIGlzCiAgKiBjbG9z ZWQuICBXZSB1c2UgdGhpcyB0byBhdm9pZCBkYW5nbGluZyBwb2ludGVycyBmcm9tIHJlbGNhY2hl IHRvIHNtZ3IKICAqIHdpdGhvdXQgaGF2aW5nIHRvIG1ha2UgdGhlIHNtZ3IgZXhwbGljaXRseSBh d2FyZSBvZiByZWxjYWNoZS4gIFRoZXJlCiAgKiBjYW4ndCBiZSBtb3JlIHRoYW4gb25lICJvd25l ciIgcG9pbnRlciBwZXIgU01nclJlbGF0aW9uLCBidXQgdGhhdCdzCiAgKiBhbGwgd2UgbmVlZC4K ICAqCi0gKiBTTWdyUmVsYXRpb25zIHRoYXQgZG8gbm90IGhhdmUgYW4gIm93bmVyIiBhcmUgY29u c2lkZXJlZCB0byBiZSB0cmFuc2llbnQsCisgKiBTTWdyRmlsZXMgdGhhdCBkbyBub3QgaGF2ZSBh biAib3duZXIiIGFyZSBjb25zaWRlcmVkIHRvIGJlIHRyYW5zaWVudCwKICAqIGFuZCBhcmUgZGVs ZXRlZCBhdCBlbmQgb2YgdHJhbnNhY3Rpb24uCisgKgorICogQSBmaWxlIHRoYXQgaXMgcmVwcmVz ZW50ZWQgYnkgYW4gU01nckZpbGUgY2FuIGJlIG1hbmFnZWQgYnkgdGhlIGJ1ZmZlcgorICogbWFu YWdlci4gQ3VycmVudGx5LCBpdCdzIG9ubHkgdXNlZCBmb3IgcmVsYXRpb24gZmlsZXMsIGJ1dCBj b3VsZCBiZSB1c2VkCisgKiBmb3IgU0xSVXMgYW5kIG90aGVyIHRoaW5ncyBpbiB0aGUgZnV0dXJl LgogICovCi10eXBlZGVmIHN0cnVjdCBTTWdyUmVsYXRpb25EYXRhCit0eXBlZGVmIHN0cnVjdCBT TWdyRmlsZURhdGEKIHsKLQkvKiBybG9jYXRvciBpcyB0aGUgaGFzaHRhYmxlIGxvb2t1cCBrZXks IHNvIGl0IG11c3QgYmUgZmlyc3QhICovCi0JUmVsRmlsZUxvY2F0b3JCYWNrZW5kIHNtZ3Jfcmxv Y2F0b3I7CS8qIHJlbGF0aW9uIHBoeXNpY2FsIGlkZW50aWZpZXIgKi8KKwkvKiBsb2NhdG9yIGlz IHRoZSBoYXNodGFibGUgbG9va3VwIGtleSwgc28gbXVzdCBiZSBmaXJzdCEgKi8KKwlTTWdyRmls ZUxvY2F0b3Igc21ncl9sb2NhdG9yOwkvKiBmaWxlIHBoeXNpY2FsIGlkZW50aWZpZXIgKi8KIAog CS8qIHBvaW50ZXIgdG8gb3duaW5nIHBvaW50ZXIsIG9yIE5VTEwgaWYgbm9uZSAqLwotCXN0cnVj dCBTTWdyUmVsYXRpb25EYXRhICoqc21ncl9vd25lcjsKKwlzdHJ1Y3QgU01nckZpbGVEYXRhICoq c21ncl9vd25lcjsKIAogCS8qCiAJICogVGhlIGZvbGxvd2luZyBmaWVsZHMgYXJlIHJlc2V0IHRv IEludmFsaWRCbG9ja051bWJlciB1cG9uIGEgY2FjaGUgZmx1c2gKQEAgLTUxLDcgKzc2LDcgQEAg dHlwZWRlZiBzdHJ1Y3QgU01nclJlbGF0aW9uRGF0YQogCSAqIGludmFsaWRhdGlvbiBmb3IgZm9y ayBleHRlbnNpb24uCiAJICovCiAJQmxvY2tOdW1iZXIgc21ncl90YXJnYmxvY2s7IC8qIGN1cnJl bnQgaW5zZXJ0aW9uIHRhcmdldCBibG9jayAqLwotCUJsb2NrTnVtYmVyIHNtZ3JfY2FjaGVkX25i bG9ja3NbTUFYX0ZPUktOVU0gKyAxXTsJLyogbGFzdCBrbm93biBzaXplICovCisJQmxvY2tOdW1i ZXIgc21ncl9jYWNoZWRfbmJsb2NrczsJLyogbGFzdCBrbm93biBzaXplICovCiAKIAkvKiBhZGRp dGlvbmFsIHB1YmxpYyBmaWVsZHMgbWF5IHNvbWVkYXkgZXhpc3QgaGVyZSAqLwogCkBAIC02NSw0 NiArOTAsNDYgQEAgdHlwZWRlZiBzdHJ1Y3QgU01nclJlbGF0aW9uRGF0YQogCSAqIGZvciBtZC5j OyBwZXItZm9yayBhcnJheXMgb2YgdGhlIG51bWJlciBvZiBvcGVuIHNlZ21lbnRzCiAJICogKG1k X251bV9vcGVuX3NlZ3MpIGFuZCB0aGUgc2VnbWVudHMgdGhlbXNlbHZlcyAobWRfc2VnX2Zkcyku CiAJICovCi0JaW50CQkJbWRfbnVtX29wZW5fc2Vnc1tNQVhfRk9SS05VTSArIDFdOwotCXN0cnVj dCBfTWRmZFZlYyAqbWRfc2VnX2Zkc1tNQVhfRk9SS05VTSArIDFdOworCWludAkJCW1kX251bV9v cGVuX3NlZ3M7CisJc3RydWN0IF9NZGZkVmVjICptZF9zZWdfZmRzOwogCi0JLyogaWYgdW5vd25l ZCwgbGlzdCBsaW5rIGluIGxpc3Qgb2YgYWxsIHVub3duZWQgU01nclJlbGF0aW9ucyAqLworCS8q IGlmIHVub3duZWQsIGxpc3QgbGluayBpbiBsaXN0IG9mIGFsbCB1bm93bmVkIFNNZ3JGaWxlcyAq LwogCWRsaXN0X25vZGUJbm9kZTsKLX0gU01nclJlbGF0aW9uRGF0YTsKK30gU01nckZpbGVEYXRh OwogCi10eXBlZGVmIFNNZ3JSZWxhdGlvbkRhdGEgKlNNZ3JSZWxhdGlvbjsKK3R5cGVkZWYgU01n ckZpbGVEYXRhICpTTWdyRmlsZUhhbmRsZTsKIAogI2RlZmluZSBTbWdySXNUZW1wKHNtZ3IpIFwK LQlSZWxGaWxlTG9jYXRvckJhY2tlbmRJc1RlbXAoKHNtZ3IpLT5zbWdyX3Jsb2NhdG9yKQorCVNN Z3JGaWxlTG9jYXRvcklzVGVtcCgoc21nciktPnNtZ3JfbG9jYXRvcikKIAogZXh0ZXJuIHZvaWQg c21ncmluaXQodm9pZCk7Ci1leHRlcm4gU01nclJlbGF0aW9uIHNtZ3JvcGVuKFJlbEZpbGVMb2Nh dG9yIHJsb2NhdG9yLCBCYWNrZW5kSWQgYmFja2VuZCk7Ci1leHRlcm4gYm9vbCBzbWdyZXhpc3Rz KFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0pOwotZXh0ZXJuIHZvaWQgc21n cnNldG93bmVyKFNNZ3JSZWxhdGlvbiAqb3duZXIsIFNNZ3JSZWxhdGlvbiByZWxuKTsKLWV4dGVy biB2b2lkIHNtZ3JjbGVhcm93bmVyKFNNZ3JSZWxhdGlvbiAqb3duZXIsIFNNZ3JSZWxhdGlvbiBy ZWxuKTsKLWV4dGVybiB2b2lkIHNtZ3JjbG9zZShTTWdyUmVsYXRpb24gcmVsbik7CitleHRlcm4g U01nckZpbGVIYW5kbGUgc21ncm9wZW4oUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IsIEJhY2tlbmRJ ZCBiYWNrZW5kLCBGb3JrTnVtYmVyIGZvcmtOdW0pOworZXh0ZXJuIGJvb2wgc21ncmV4aXN0cyhT TWdyRmlsZUhhbmRsZSBzZmlsZSk7CitleHRlcm4gdm9pZCBzbWdyc2V0b3duZXIoU01nckZpbGVI YW5kbGUgKm93bmVyLCBTTWdyRmlsZUhhbmRsZSBzZmlsZSk7CitleHRlcm4gdm9pZCBzbWdyY2xl YXJvd25lcihTTWdyRmlsZUhhbmRsZSAqb3duZXIsIFNNZ3JGaWxlSGFuZGxlIHNmaWxlKTsKK2V4 dGVybiB2b2lkIHNtZ3JjbG9zZShTTWdyRmlsZUhhbmRsZSBzZmlsZSk7CiBleHRlcm4gdm9pZCBz bWdyY2xvc2VhbGwodm9pZCk7Ci1leHRlcm4gdm9pZCBzbWdyY2xvc2VyZWxsb2NhdG9yKFJlbEZp bGVMb2NhdG9yQmFja2VuZCBybG9jYXRvcik7Ci1leHRlcm4gdm9pZCBzbWdycmVsZWFzZShTTWdy UmVsYXRpb24gcmVsbik7CiBleHRlcm4gdm9pZCBzbWdycmVsZWFzZWFsbCh2b2lkKTsKLWV4dGVy biB2b2lkIHNtZ3JjcmVhdGUoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwg Ym9vbCBpc1JlZG8pOwotZXh0ZXJuIHZvaWQgc21ncmRvc3luY2FsbChTTWdyUmVsYXRpb24gKnJl bHMsIGludCBucmVscyk7Ci1leHRlcm4gdm9pZCBzbWdyZG91bmxpbmthbGwoU01nclJlbGF0aW9u ICpyZWxzLCBpbnQgbnJlbHMsIGJvb2wgaXNSZWRvKTsKLWV4dGVybiB2b2lkIHNtZ3JleHRlbmQo U01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwKK2V4dGVybiB2b2lkIHNtZ3Jj cmVhdGUoU01nckZpbGVIYW5kbGUgc2ZpbGUsIGJvb2wgaXNSZWRvKTsKK2V4dGVybiB2b2lkIHNt Z3JleHRlbmQoU01nckZpbGVIYW5kbGUgc2ZpbGUsCiAJCQkJCSAgIEJsb2NrTnVtYmVyIGJsb2Nr bnVtLCBjaGFyICpidWZmZXIsIGJvb2wgc2tpcEZzeW5jKTsKLWV4dGVybiBib29sIHNtZ3JwcmVm ZXRjaChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLAotCQkJCQkJIEJsb2Nr TnVtYmVyIGJsb2NrbnVtKTsKLWV4dGVybiB2b2lkIHNtZ3JyZWFkKFNNZ3JSZWxhdGlvbiByZWxu LCBGb3JrTnVtYmVyIGZvcmtudW0sCitleHRlcm4gYm9vbCBzbWdycHJlZmV0Y2goU01nckZpbGVI YW5kbGUgc2ZpbGUsIEJsb2NrTnVtYmVyIGJsb2NrbnVtKTsKK2V4dGVybiB2b2lkIHNtZ3JyZWFk KFNNZ3JGaWxlSGFuZGxlIHNmaWxlLAogCQkJCQkgQmxvY2tOdW1iZXIgYmxvY2tudW0sIGNoYXIg KmJ1ZmZlcik7Ci1leHRlcm4gdm9pZCBzbWdyd3JpdGUoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtO dW1iZXIgZm9ya251bSwKK2V4dGVybiB2b2lkIHNtZ3J3cml0ZShTTWdyRmlsZUhhbmRsZSBzZmls ZSwKIAkJCQkJICBCbG9ja051bWJlciBibG9ja251bSwgY2hhciAqYnVmZmVyLCBib29sIHNraXBG c3luYyk7Ci1leHRlcm4gdm9pZCBzbWdyd3JpdGViYWNrKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3Jr TnVtYmVyIGZvcmtudW0sCitleHRlcm4gdm9pZCBzbWdyd3JpdGViYWNrKFNNZ3JGaWxlSGFuZGxl IHNmaWxlLAogCQkJCQkJICBCbG9ja051bWJlciBibG9ja251bSwgQmxvY2tOdW1iZXIgbmJsb2Nr cyk7Ci1leHRlcm4gQmxvY2tOdW1iZXIgc21ncm5ibG9ja3MoU01nclJlbGF0aW9uIHJlbG4sIEZv cmtOdW1iZXIgZm9ya251bSk7Ci1leHRlcm4gQmxvY2tOdW1iZXIgc21ncm5ibG9ja3NfY2FjaGVk KFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0pOwotZXh0ZXJuIHZvaWQgc21n cnRydW5jYXRlKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyICpmb3JrbnVtLAotCQkJCQkJ IGludCBuZm9ya3MsIEJsb2NrTnVtYmVyICpuYmxvY2tzKTsKLWV4dGVybiB2b2lkIHNtZ3JpbW1l ZHN5bmMoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSk7CitleHRlcm4gQmxv Y2tOdW1iZXIgc21ncm5ibG9ja3MoU01nckZpbGVIYW5kbGUgc2ZpbGUpOworZXh0ZXJuIEJsb2Nr TnVtYmVyIHNtZ3JuYmxvY2tzX2NhY2hlZChTTWdyRmlsZUhhbmRsZSBzZmlsZSk7CitleHRlcm4g dm9pZCBzbWdyaW1tZWRzeW5jKFNNZ3JGaWxlSGFuZGxlIHNmaWxlKTsKK2V4dGVybiB2b2lkIHNt Z3J1bmxpbmsoU01nckZpbGVIYW5kbGUgc2ZpbGUsIGJvb2wgaXNSZWRvKTsKKworZXh0ZXJuIHZv aWQgc21ncnRydW5jYXRlX211bHRpKFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBCYWNrZW5kSWQg YmFja2VuZCwgRm9ya051bWJlciAqZm9ya3MsIGludCBuZm9ya3MsIEJsb2NrTnVtYmVyICpuYmxv Y2tzKTsKK2V4dGVybiB2b2lkIHNtZ3J1bmxpbmtfbXVsdGkoUmVsRmlsZUxvY2F0b3IgcmxvY2F0 b3IsIEJhY2tlbmRJZCBiYWNrZW5kLCBGb3JrTnVtYmVyICpmb3JrcywgaW50IG5mb3JrcywgYm9v bCBpc1JlZG8pOworCitleHRlcm4gdm9pZCBzbWdyY2xvc2VyZWxsb2NhdG9yKFJlbEZpbGVMb2Nh dG9yIHJsb2NhdG9yLCBCYWNrZW5kSWQgYmFja2VuZCk7CisKIGV4dGVybiB2b2lkIEF0RU9YYWN0 X1NNZ3Iodm9pZCk7CiBleHRlcm4gYm9vbCBQcm9jZXNzQmFycmllclNtZ3JSZWxlYXNlKHZvaWQp OwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9pbnZhbC5oIGIvc3JjL2luY2x1ZGUv dXRpbHMvaW52YWwuaAppbmRleCAyMzc0OGI3MmNhZi4uYzQ5NGMwMTA1NmYgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL3V0aWxzL2ludmFsLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvaW52YWwu aApAQCAtNDgsNyArNDgsNyBAQCBleHRlcm4gdm9pZCBDYWNoZUludmFsaWRhdGVSZWxjYWNoZUJ5 VHVwbGUoSGVhcFR1cGxlIGNsYXNzVHVwbGUpOwogCiBleHRlcm4gdm9pZCBDYWNoZUludmFsaWRh dGVSZWxjYWNoZUJ5UmVsaWQoT2lkIHJlbGlkKTsKIAotZXh0ZXJuIHZvaWQgQ2FjaGVJbnZhbGlk YXRlU21ncihSZWxGaWxlTG9jYXRvckJhY2tlbmQgcmxvY2F0b3IpOworZXh0ZXJuIHZvaWQgQ2Fj aGVJbnZhbGlkYXRlU21ncihSZWxGaWxlTG9jYXRvciBybG9jYXRvciwgQmFja2VuZElkIGJhY2tl bmQpOwogCiBleHRlcm4gdm9pZCBDYWNoZUludmFsaWRhdGVSZWxtYXAoT2lkIGRhdGFiYXNlSWQp OwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9yZWwuaCBiL3NyYy9pbmNsdWRlL3V0 aWxzL3JlbC5oCmluZGV4IGYzODNhMmZjYTllLi4yOTA4MzhhYjhjNSAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvdXRpbHMvcmVsLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvcmVsLmgKQEAgLTU0 LDcgKzU0LDcgQEAgdHlwZWRlZiBMb2NrSW5mb0RhdGEgKkxvY2tJbmZvOwogdHlwZWRlZiBzdHJ1 Y3QgUmVsYXRpb25EYXRhCiB7CiAJUmVsRmlsZUxvY2F0b3IgcmRfbG9jYXRvcjsJLyogcmVsYXRp b24gcGh5c2ljYWwgaWRlbnRpZmllciAqLwotCVNNZ3JSZWxhdGlvbiByZF9zbWdyOwkJLyogY2Fj aGVkIGZpbGUgaGFuZGxlLCBvciBOVUxMICovCisJU01nckZpbGVIYW5kbGUgcmRfc21ncltNQVhf Rk9SS05VTSArIDFdOwkJLyogY2FjaGVkIGZpbGUgaGFuZGxlcywgb3IgTlVMTHMgKi8KIAlpbnQJ CQlyZF9yZWZjbnQ7CQkvKiByZWZlcmVuY2UgY291bnQgKi8KIAlCYWNrZW5kSWQJcmRfYmFja2Vu ZDsJCS8qIG93bmluZyBiYWNrZW5kIGlkLCBpZiB0ZW1wb3JhcnkgcmVsYXRpb24gKi8KIAlib29s CQlyZF9pc2xvY2FsdGVtcDsgLyogcmVsIGlzIGEgdGVtcCByZWwgb2YgdGhpcyBzZXNzaW9uICov CkBAIC01NjIsMTYgKzU2MiwxNyBAQCB0eXBlZGVmIHN0cnVjdCBWaWV3T3B0aW9ucwogICogTm90 ZTogc2luY2UgYSByZWxjYWNoZSBmbHVzaCBjYW4gY2F1c2UgdGhlIGZpbGUgaGFuZGxlIHRvIGJl IGNsb3NlZCBhZ2FpbiwKICAqIGl0J3MgdW53aXNlIHRvIGhvbGQgb250byB0aGUgcG9pbnRlciBy ZXR1cm5lZCBieSB0aGlzIGZ1bmN0aW9uIGZvciBhbnkKICAqIGxvbmcgcGVyaW9kLiAgUmVjb21t ZW5kZWQgcHJhY3RpY2UgaXMgdG8ganVzdCByZS1leGVjdXRlIFJlbGF0aW9uR2V0U21ncgotICog ZWFjaCB0aW1lIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgU01nclJlbGF0aW9uLiAgSXQncyBxdWl0 ZSBjaGVhcCBpbgorICogZWFjaCB0aW1lIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgU01nckZpbGVI YW5kbGUuICBJdCdzIHF1aXRlIGNoZWFwIGluCiAgKiBjb21wYXJpc29uIHRvIHdoYXRldmVyIGFu IHNtZ3IgZnVuY3Rpb24gaXMgZ29pbmcgdG8gZG8uCiAgKi8KLXN0YXRpYyBpbmxpbmUgU01nclJl bGF0aW9uCi1SZWxhdGlvbkdldFNtZ3IoUmVsYXRpb24gcmVsKQorc3RhdGljIGlubGluZSBTTWdy RmlsZUhhbmRsZQorUmVsYXRpb25HZXRTbWdyKFJlbGF0aW9uIHJlbCwgRm9ya051bWJlciBmb3Jr TnVtKQogewotCWlmICh1bmxpa2VseShyZWwtPnJkX3NtZ3IgPT0gTlVMTCkpCi0JCXNtZ3JzZXRv d25lcigmKHJlbC0+cmRfc21nciksIHNtZ3JvcGVuKHJlbC0+cmRfbG9jYXRvciwgcmVsLT5yZF9i YWNrZW5kKSk7Ci0JcmV0dXJuIHJlbC0+cmRfc21ncjsKKwlpZiAodW5saWtlbHkocmVsLT5yZF9z bWdyW2ZvcmtOdW1dID09IE5VTEwpKQorCQlzbWdyc2V0b3duZXIoJihyZWwtPnJkX3NtZ3JbZm9y a051bV0pLCBzbWdyb3BlbihyZWwtPnJkX2xvY2F0b3IsIHJlbC0+cmRfYmFja2VuZCwgZm9ya051 bSkpOworCXJldHVybiByZWwtPnJkX3NtZ3JbZm9ya051bV07CiB9CisjZW5kaWYKIAogLyoKICAq IFJlbGF0aW9uQ2xvc2VTbWdyCkBAIC01ODAsMTMgKzU4MSwxNSBAQCBSZWxhdGlvbkdldFNtZ3Io UmVsYXRpb24gcmVsKQogc3RhdGljIGlubGluZSB2b2lkCiBSZWxhdGlvbkNsb3NlU21ncihSZWxh dGlvbiByZWxhdGlvbikKIHsKLQlpZiAocmVsYXRpb24tPnJkX3NtZ3IgIT0gTlVMTCkKLQkJc21n cmNsb3NlKHJlbGF0aW9uLT5yZF9zbWdyKTsKLQotCS8qIHNtZ3JjbG9zZSBzaG91bGQgdW5ob29r IGZyb20gb3duZXIgcG9pbnRlciAqLwotCUFzc2VydChyZWxhdGlvbi0+cmRfc21nciA9PSBOVUxM KTsKKwlmb3IgKGludCBpID0gMDsgaSA8PSBNQVhfRk9SS05VTTsgaSsrKQorCXsKKwkJaWYgKHJl bGF0aW9uLT5yZF9zbWdyW2ldICE9IE5VTEwpCisJCXsKKwkJCXNtZ3JjbG9zZShyZWxhdGlvbi0+ cmRfc21ncltpXSk7CisJCQlBc3NlcnQocmVsYXRpb24tPnJkX3NtZ3JbaV0gPT0gTlVMTCk7CisJ CX0KKwl9CiB9Ci0jZW5kaWYJCQkJCQkJLyogIUZST05URU5EICovCiAKIC8qCiAgKiBSZWxhdGlv bkdldFRhcmdldEJsb2NrCkBAIC01OTcsNyArNjAwLDcgQEAgUmVsYXRpb25DbG9zZVNtZ3IoUmVs YXRpb24gcmVsYXRpb24pCiAgKiBzbyB0aGVyZSdzIG5vIG5lZWQgdG8gcmUtb3BlbiB0aGUgc21n ciBoYW5kbGUgaWYgaXQncyBub3QgY3VycmVudGx5IG9wZW4uCiAgKi8KICNkZWZpbmUgUmVsYXRp b25HZXRUYXJnZXRCbG9jayhyZWxhdGlvbikgXAotCSggKHJlbGF0aW9uKS0+cmRfc21nciAhPSBO VUxMID8gKHJlbGF0aW9uKS0+cmRfc21nci0+c21ncl90YXJnYmxvY2sgOiBJbnZhbGlkQmxvY2tO dW1iZXIgKQorCSggKHJlbGF0aW9uKS0+cmRfc21ncltNQUlOX0ZPUktOVU1dICE9IE5VTEwgPyAo cmVsYXRpb24pLT5yZF9zbWdyW01BSU5fRk9SS05VTV0tPnNtZ3JfdGFyZ2Jsb2NrIDogSW52YWxp ZEJsb2NrTnVtYmVyICkKIAogLyoKICAqIFJlbGF0aW9uU2V0VGFyZ2V0QmxvY2sKQEAgLTYwNSw3 ICs2MDgsNyBAQCBSZWxhdGlvbkNsb3NlU21ncihSZWxhdGlvbiByZWxhdGlvbikKICAqLwogI2Rl ZmluZSBSZWxhdGlvblNldFRhcmdldEJsb2NrKHJlbGF0aW9uLCB0YXJnYmxvY2spIFwKIAlkbyB7 IFwKLQkJUmVsYXRpb25HZXRTbWdyKHJlbGF0aW9uKS0+c21ncl90YXJnYmxvY2sgPSAodGFyZ2Js b2NrKTsgXAorCQlSZWxhdGlvbkdldFNtZ3IocmVsYXRpb24sIE1BSU5fRk9SS05VTSktPnNtZ3Jf dGFyZ2Jsb2NrID0gKHRhcmdibG9jayk7IFwKIAl9IHdoaWxlICgwKQogCiAvKgotLSAKMi4zNy4x CgoKRnJvbSA0MzQ3NTFkYjJiZTdjOTViODJiZTE3MGY2MzI5YWJlMDJiOWMyNTk3IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBSaXNodSBCYWdnYSA8YmFncmlzaHVAYW1hem9uLmNvbT4K RGF0ZTogV2VkLCAxNiBOb3YgMjAyMiAxMDoyMjozNiArMDAwMApTdWJqZWN0OiBbUEFUQ0ggMDIv MTVdIG1haW50YWluIG9yaWdpbmFsIHNscnUgZmlsZXBhdGggZm9ybWF0CgotLS0KIHNyYy9jb21t b24vcmVscGF0aC5jIHwgMiArLQogMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRl bGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2NvbW1vbi9yZWxwYXRoLmMgYi9zcmMvY29tbW9u L3JlbHBhdGguYwppbmRleCAwMDdiMDg5ODA0OS4uNGVjMGUzNmQ1NTYgMTAwNjQ0Ci0tLSBhL3Ny Yy9jb21tb24vcmVscGF0aC5jCisrKyBiL3NyYy9jb21tb24vcmVscGF0aC5jCkBAIC0xNjYsNyAr MTY2LDcgQEAgR2V0U01nckZpbGVQYXRoKE9pZCBkYk9pZCwgT2lkIHNwY09pZCwgUmVsRmlsZU51 bWJlciByZWxOdW1iZXIsCiAJCQlyZXR1cm4gTlVMTDsKICNlbmRpZgogCQl9Ci0JCXBhdGggPSBw c3ByaW50ZigiJXMvJXUiLCBzbHJ1X2RpcnNbZGJPaWRdLCByZWxOdW1iZXIpOworCQlwYXRoID0g cHNwcmludGYoIiVzLyUwNFgiLCBzbHJ1X2RpcnNbZGJPaWRdLCByZWxOdW1iZXIpOwogCX0KIAll bHNlIGlmIChzcGNPaWQgPT0gR0xPQkFMVEFCTEVTUEFDRV9PSUQpCiAJewotLSAKMi4zNy4xCgoK RnJvbSAwZTRhMDE0OWQxMjJiZjk3ZmNkM2EyYjVmY2M5ZjA2MWQ1YjAyY2U4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaXNodSBCYWdnYSA8YmFncmlzaHVAYW1hem9uLmNvbT4KRGF0 ZTogU2F0LCAxOSBOb3YgMjAyMiAyMDoyMzo1MiArMDAwMApTdWJqZWN0OiBbUEFUQ0ggMDMvMTVd IGZpeCBpc3N1ZXMgd2l0aCBhbGxvY2F0aW5nIG1lbW9yeSBpbiBDUklUX1NFQ1RJT04KCi0tLQog c3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4YWN0LmMgfCAxMSArKysrKysrKystLQog MSBmaWxlIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3QuYyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5jCmluZGV4IGVkYTM1OWFiZmY4Li45ZTdmNGQ3OTc5 NCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4YWN0LmMKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4YWN0LmMKQEAgLTgzMCw3ICs4MzAs NyBAQCBNdWx0aVhhY3RJZENyZWF0ZUZyb21NZW1iZXJzKGludCBubWVtYmVycywgTXVsdGlYYWN0 TWVtYmVyICptZW1iZXJzKQogCVJlY29yZE5ld011bHRpWGFjdChtdWx0aSwgb2Zmc2V0LCBubWVt YmVycywgbWVtYmVycyk7CiAKIAkvKiBEb25lIHdpdGggY3JpdGljYWwgc2VjdGlvbiAqLwotCUVO RF9DUklUX1NFQ1RJT04oKTsKKwkvKkVORF9DUklUX1NFQ1RJT04oKTsqLwogCiAJLyogU3RvcmUg dGhlIG5ldyBNdWx0aVhhY3RJZCBpbiB0aGUgbG9jYWwgY2FjaGUsIHRvbyAqLwogCW1YYWN0Q2Fj aGVQdXQobXVsdGksIG5tZW1iZXJzLCBtZW1iZXJzKTsKQEAgLTg2MCw3ICs4NjAsMTQgQEAgUmVj b3JkTmV3TXVsdGlYYWN0KE11bHRpWGFjdElkIG11bHRpLCBNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0 LAogCiAJcGFnZW5vID0gTXVsdGlYYWN0SWRUb09mZnNldFBhZ2UobXVsdGkpOwogCWVudHJ5bm8g PSBNdWx0aVhhY3RJZFRvT2Zmc2V0RW50cnkobXVsdGkpOwotCisJCisJLyogcHJldmlvdXNseSB3 ZSB1c2VkIHNscnUgY29udHJvbCBzdHJ1Y3R1cmVzIHRvIGRpcmVjdGx5IHdyaXRlIGludG8gCisJ ICogbXVsdGxpeGFjdHMsIHdpdGggbW92aW5nIHNscnUgZGF0YSBpbnRvIGJ1ZmZlciBjYWNoZSwg YnVmZmVyIGxvY2tpbmcKKwkgKiBzZW1hbnRpY3Mgc2hvdWxkIHRha2UgY2FyZSBvZiBjb25jdXJy ZW5jeSwgc28gd2UgY2FuIGVuZCB0aGUgY3JpdGljYWwgCisJICogc2VjdGlvbiBoZXJlLiBBZGRp dGlvbmFsbHksIFJlYWRCdWZmZXIgbWF5IG5lZWQgdG8gYWxsb2MgbWVtb3J5IGFuZAorCSAqIHNv IGNhbm5vdCBiZSBpbiBhIGNyaXRpY2FsIHNlY3Rpb24uCisJICovCisJRU5EX0NSSVRfU0VDVElP TigpOwogCS8qIFhYWCBzZXQgdXAgZXJyb3IgY29udGV4dD8gKi8KIAlidWZmZXIgPSBSZWFkU2xy dUJ1ZmZlcihTTFJVX01VTFRJWEFDVF9PRkZTRVRfSUQsIHBhZ2Vubyk7CiAJTG9ja0J1ZmZlcihi dWZmZXIsIEJVRkZFUl9MT0NLX0VYQ0xVU0lWRSk7Ci0tIAoyLjM3LjEKCgpGcm9tIDIyMGU3ZWRi NzJiZGRlMGE0OWFiNzJiZmJhMDk1MDRjMWIxMDQwODAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAx CkZyb206IFJpc2h1IEJhZ2dhIDxiYWdyaXNodUBhbWF6b24uY29tPgpEYXRlOiBUaHUsIDEwIE5v diAyMDIyIDEwOjA2OjE2ICswMDAwClN1YmplY3Q6IFtQQVRDSCAwNC8xNV0gYnVnIGZpeCB0cmlt IG11bHRpeGFjdAoKLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3QuYyB8 IDUgKysrKy0KIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkK CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3QuYyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5jCmluZGV4IDllN2Y0ZDc5Nzk0Li45 Mjg1Mjg5MTVkNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4 YWN0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4YWN0LmMKQEAgLTE5 ODEsNyArMTk4MSw4IEBAIFRyaW1NdWx0aVhhY3Qodm9pZCkKIAlvbGRlc3RNWGFjdERCID0gTXVs dGlYYWN0U3RhdGUtPm9sZGVzdE11bHRpWGFjdERCOwogCUxXTG9ja1JlbGVhc2UoTXVsdGlYYWN0 R2VuTG9jayk7CiAKLQlwYWdlbm8gPSBNWE9mZnNldFRvTWVtYmVyUGFnZShvZmZzZXQpOworCXBh Z2VubyA9IE11bHRpWGFjdElkVG9PZmZzZXRQYWdlKG5leHRNWGFjdCk7CisJCiAKIAkvKgogCSAq IFplcm8gb3V0IHRoZSByZW1haW5kZXIgb2YgdGhlIGN1cnJlbnQgb2Zmc2V0cyBwYWdlLiAgU2Vl IG5vdGVzIGluCkBAIC0yMDEyLDYgKzIwMTMsOCBAQCBUcmltTXVsdGlYYWN0KHZvaWQpCiAJICog WmVybyBvdXQgdGhlIHJlbWFpbmRlciBvZiB0aGUgY3VycmVudCBtZW1iZXJzIHBhZ2UuICBTZWUg bm90ZXMgaW4KIAkgKiBUcmltQ0xPRygpIGZvciBtb3RpdmF0aW9uLgogCSAqLworCisJcGFnZW5v ID0gTVhPZmZzZXRUb01lbWJlclBhZ2Uob2Zmc2V0KTsKIAlmbGFnc29mZiA9IE1YT2Zmc2V0VG9G bGFnc09mZnNldChvZmZzZXQpOwogCWlmIChmbGFnc29mZiAhPSAwKQogCXsKLS0gCjIuMzcuMQoK CkZyb20gMjFkOWQyMDA3ZGZiY2Y3OWNhNjhkZDc1M2YyM2JlMzU5OTgxMDcwYiBNb24gU2VwIDE3 IDAwOjAwOjAwIDIwMDEKRnJvbTogUmlzaHUgQmFnZ2EgPGJhZ3Jpc2h1QGFtYXpvbi5jb20+CkRh dGU6IFRodSwgMTUgU2VwIDIwMjIgMDk6NTc6NTggKzAwMDAKU3ViamVjdDogW1BBVENIIDA1LzE1 XSBjb21taXRfdHMgcGFnZSBoZWFkZXIKCnBvcHVsYXRlIHBhZ2UgaGVhZGVycyBpbiBjb21taXRf dHMuYwoKdXBkYXRlIGNoZWNrc3VtIG9uIGVhY2ggbmV3IGNvbW1pdF90cyBlbnRyeQoKcmVmYWN0 b3IgZnVuY3Rpb24gcG9wdWxhdGluZyBwYWdlIGhlYWRlcnMgZm9yIG5vbiByZWwgZGF0YQoKY3I6 IGh0dHBzOi8vY29kZS5hbWF6b24uY29tL3Jldmlld3MvQ1ItNzUwOTM5MzQKCnBhZ2UgaGVhZGVy cyBvbiBjb21taXQgdGltZXN0YW1wCi0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vY29t bWl0X3RzLmMgfCAzOCArKysrKysrKysrKysrKysrKysrKy0tLS0tLQogc3JjL2luY2x1ZGUvc3Rv cmFnZS9idWZwYWdlLmggICAgICAgICAgfCAxMiArKysrKysrKwogMiBmaWxlcyBjaGFuZ2VkLCA0 MSBpbnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL2NvbW1pdF90cy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0v Y29tbWl0X3RzLmMKaW5kZXggNGExZDk5NTliMWMuLmZhODNmNjQyYmJlIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9jb21taXRfdHMuYworKysgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvdHJhbnNhbS9jb21taXRfdHMuYwpAQCAtNjMsMTMgKzYzLDE1IEBAIHR5cGVkZWYgc3Ry dWN0IENvbW1pdFRpbWVzdGFtcEVudHJ5CiAJCQkJCQkJCQlzaXplb2YoUmVwT3JpZ2luSWQpKQog CiAjZGVmaW5lIENPTU1JVF9UU19YQUNUU19QRVJfUEFHRSBcCi0JKEJMQ0tTWiAvIFNpemVPZkNv bW1pdFRpbWVzdGFtcEVudHJ5KQorCSgoQkxDS1NaIC0gU2l6ZU9mUGFnZUhlYWRlckRhdGEpIC8g U2l6ZU9mQ29tbWl0VGltZXN0YW1wRW50cnkpCiAKICNkZWZpbmUgVHJhbnNhY3Rpb25JZFRvQ1Rz UGFnZSh4aWQpIFwKIAkoKHhpZCkgLyAoVHJhbnNhY3Rpb25JZCkgQ09NTUlUX1RTX1hBQ1RTX1BF Ul9QQUdFKQogI2RlZmluZSBUcmFuc2FjdGlvbklkVG9DVHNFbnRyeSh4aWQpCVwKIAkoKHhpZCkg JSAoVHJhbnNhY3Rpb25JZCkgQ09NTUlUX1RTX1hBQ1RTX1BFUl9QQUdFKQogCisKKwogLyoKICAq IFdlIGtlZXAgYSBjYWNoZSBvZiB0aGUgbGFzdCB2YWx1ZSBzZXQgaW4gc2hhcmVkIG1lbW9yeS4K ICAqCkBAIC0xMDQsNyArMTA2LDggQEAgc3RhdGljIEJ1ZmZlciBaZXJvQ29tbWl0VHNQYWdlKGlu dCBwYWdlbm8sIGJvb2wgd3JpdGVYbG9nKTsKIHN0YXRpYyBib29sIENvbW1pdFRzUGFnZVByZWNl ZGVzKGludCBwYWdlMSwgaW50IHBhZ2UyKTsKIHN0YXRpYyB2b2lkIEFjdGl2YXRlQ29tbWl0VHMo dm9pZCk7CiBzdGF0aWMgdm9pZCBEZWFjdGl2YXRlQ29tbWl0VHModm9pZCk7Ci1zdGF0aWMgdm9p ZCBXcml0ZVplcm9QYWdlWGxvZ1JlYyhpbnQgcGFnZW5vKTsKK3N0YXRpYyBYTG9nUmVjUHRyIFdy aXRlWmVyb1BhZ2VYbG9nUmVjKGludCBwYWdlbm8pOworCiBzdGF0aWMgdm9pZCBXcml0ZVRydW5j YXRlWGxvZ1JlYyhpbnQgcGFnZW5vLCBUcmFuc2FjdGlvbklkIG9sZGVzdFhpZCk7CiAKIC8qCkBA IC0yMzIsNiArMjM1LDggQEAgVHJhbnNhY3Rpb25JZFNldENvbW1pdFRzKFRyYW5zYWN0aW9uSWQg eGlkLCBUaW1lc3RhbXBUeiB0cywKIAkJCQkJCSBSZXBPcmlnaW5JZCBub2RlaWQsIEJ1ZmZlciBi dWZmZXIpCiB7CiAJaW50CQkJZW50cnlubyA9IFRyYW5zYWN0aW9uSWRUb0NUc0VudHJ5KHhpZCk7 CisJaW50IAkJcGFnZW5vICA9IFRyYW5zYWN0aW9uSWRUb0NUc1BhZ2UoeGlkKTsKKwkKIAlDb21t aXRUaW1lc3RhbXBFbnRyeSBlbnRyeTsKIAogCUFzc2VydChUcmFuc2FjdGlvbklkSXNOb3JtYWwo eGlkKSk7CkBAIC0yMzksOCArMjQ0LDEzIEBAIFRyYW5zYWN0aW9uSWRTZXRDb21taXRUcyhUcmFu c2FjdGlvbklkIHhpZCwgVGltZXN0YW1wVHogdHMsCiAJZW50cnkudGltZSA9IHRzOwogCWVudHJ5 Lm5vZGVpZCA9IG5vZGVpZDsKIAotCW1lbWNweShCdWZmZXJHZXRQYWdlKGJ1ZmZlcikgKyBTaXpl T2ZDb21taXRUaW1lc3RhbXBFbnRyeSAqIGVudHJ5bm8sCisJQXNzZXJ0KHhpZCA9PSBwYWdlbm8g KiBDT01NSVRfVFNfWEFDVFNfUEVSX1BBR0UgKyBlbnRyeW5vKTsKKworCW1lbWNweShQYWdlR2V0 Q29udGVudHMoQnVmZmVyR2V0UGFnZShidWZmZXIpKSArIFwKKwkJICAgU2l6ZU9mQ29tbWl0VGlt ZXN0YW1wRW50cnkgKiBlbnRyeW5vLAogCQkgICAmZW50cnksIFNpemVPZkNvbW1pdFRpbWVzdGFt cEVudHJ5KTsKKworCVBhZ2VTZXRDaGVja3N1bUlucGxhY2UoQnVmZmVyR2V0UGFnZShidWZmZXIp LCBwYWdlbm8pOwogfQogCiAvKgpAQCAtMzE4LDkgKzMyOCw5IEBAIFRyYW5zYWN0aW9uSWRHZXRD b21taXRUc0RhdGEoVHJhbnNhY3Rpb25JZCB4aWQsIFRpbWVzdGFtcFR6ICp0cywKIAlMb2NrQnVm ZmVyKGJ1ZmZlciwgQlVGRkVSX0xPQ0tfU0hBUkUpOwogCiAJbWVtY3B5KCZlbnRyeSwKLQkJICAg QnVmZmVyR2V0UGFnZShidWZmZXIpICsKLQkJICAgU2l6ZU9mQ29tbWl0VGltZXN0YW1wRW50cnkg KiBlbnRyeW5vLAotCQkgICBTaXplT2ZDb21taXRUaW1lc3RhbXBFbnRyeSk7CisJCQlQYWdlR2V0 Q29udGVudHMoQnVmZmVyR2V0UGFnZShidWZmZXIpKSArIFwKKwkJCVNpemVPZkNvbW1pdFRpbWVz dGFtcEVudHJ5ICogZW50cnlubywKKwkJCVNpemVPZkNvbW1pdFRpbWVzdGFtcEVudHJ5KTsKIAog CSp0cyA9IGVudHJ5LnRpbWU7CiAJaWYgKG5vZGVpZCkKQEAgLTU2MSwxMiArNTcxLDE4IEBAIHN0 YXRpYyBCdWZmZXIKIFplcm9Db21taXRUc1BhZ2UoaW50IHBhZ2VubywgYm9vbCB3cml0ZVhsb2cp CiB7CiAJQnVmZmVyCQlidWZmZXI7CisJUGFnZSAJCXBhZ2U7CisJWExvZ1JlY1B0ciAgbHNuOwog CiAJYnVmZmVyID0gWmVyb1NscnVCdWZmZXIoU0xSVV9DT01NSVRfVFNfSUQsIHBhZ2Vubyk7CiAJ TWFya0J1ZmZlckRpcnR5KGJ1ZmZlcik7CiAKIAlpZiAod3JpdGVYbG9nKQotCQlXcml0ZVplcm9Q YWdlWGxvZ1JlYyhwYWdlbm8pOworCXsKKwkJbHNuID0gV3JpdGVaZXJvUGFnZVhsb2dSZWMocGFn ZW5vKTsKKwkJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmZmVyKTsKKwkJUGFnZVNldEhlYWRlckRh dGFOb25SZWwocGFnZSwgcGFnZW5vLCBsc24sIEJMQ0tTWiwgUEdfTUVUQVBBR0VfTEFZT1VUX1ZF UlNJT04pOworCX0KIAogCXJldHVybiBidWZmZXI7CiB9CkBAIC05MDIsMTIgKzkxOCwxNiBAQCBD b21taXRUc1BhZ2VQcmVjZWRlcyhpbnQgcGFnZTEsIGludCBwYWdlMikKIC8qCiAgKiBXcml0ZSBh IFpFUk9QQUdFIHhsb2cgcmVjb3JkCiAgKi8KLXN0YXRpYyB2b2lkCitzdGF0aWMgWExvZ1JlY1B0 ciAKIFdyaXRlWmVyb1BhZ2VYbG9nUmVjKGludCBwYWdlbm8pCiB7CisJWExvZ1JlY1B0ciBsc247 CisJCiAJWExvZ0JlZ2luSW5zZXJ0KCk7CiAJWExvZ1JlZ2lzdGVyRGF0YSgoY2hhciAqKSAoJnBh Z2VubyksIHNpemVvZihpbnQpKTsKLQkodm9pZCkgWExvZ0luc2VydChSTV9DT01NSVRfVFNfSUQs IENPTU1JVF9UU19aRVJPUEFHRSk7CisJbHNuID0gWExvZ0luc2VydChSTV9DT01NSVRfVFNfSUQs IENPTU1JVF9UU19aRVJPUEFHRSk7CisJCisJcmV0dXJuIGxzbjsKIH0KIAogLyoKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmcGFnZS5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9i dWZwYWdlLmgKaW5kZXggMjcwOGM0YjY4M2QuLjgzODA1YTQ4MzU2IDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9zdG9yYWdlL2J1ZnBhZ2UuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1ZnBh Z2UuaApAQCAtMjAxLDYgKzIwMSw3IEBAIHR5cGVkZWYgUGFnZUhlYWRlckRhdGEgKlBhZ2VIZWFk ZXI7CiAgKiBoYW5kbGluZyBwYWdlcy4KICAqLwogI2RlZmluZSBQR19QQUdFX0xBWU9VVF9WRVJT SU9OCQk0CisjZGVmaW5lIFBHX01FVEFQQUdFX0xBWU9VVF9WRVJTSU9OICAxCiAjZGVmaW5lIFBH X0RBVEFfQ0hFQ0tTVU1fVkVSU0lPTgkxCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTMwMiw2ICszMDMsMTcg QEAgUGFnZVNldFBhZ2VTaXplQW5kVmVyc2lvbihQYWdlIHBhZ2UsIFNpemUgc2l6ZSwgdWludDgg dmVyc2lvbikKIAkoKFBhZ2VIZWFkZXIpIHBhZ2UpLT5wZF9wYWdlc2l6ZV92ZXJzaW9uID0gc2l6 ZSB8IHZlcnNpb247CiB9CiAKKy8qCisgKiBQYWdlU2V0SGVhZGVyRGF0YU1pbmltYWwgCisgKiBT ZXRzIHRoZSBMU04sIHBhZ2Ugc2l6ZSBhbmQgdmVyc2lvbiwgYW5kIGNoZWNrc3VtCisgKi8KKyNk ZWZpbmUgUGFnZVNldEhlYWRlckRhdGFOb25SZWwocGFnZSwgcGFnZW5vLCBsc24sIHNpemUsIHZl cnNpb24pIFwKKyggXAorCVBhZ2VTZXRMU04ocGFnZSwgbHNuKSwgXAorCVBhZ2VTZXRDaGVja3N1 bUlucGxhY2UocGFnZSwgcGFnZW5vKSwgXAorCVBhZ2VTZXRQYWdlU2l6ZUFuZFZlcnNpb24ocGFn ZSwgc2l6ZSwgdmVyc2lvbilcCispCisKIC8qIC0tLS0tLS0tLS0tLS0tLS0KICAqCQlwYWdlIHNw ZWNpYWwgZGF0YSBmdW5jdGlvbnMKICAqIC0tLS0tLS0tLS0tLS0tLS0KLS0gCjIuMzcuMQoKCkZy b20gNWU1YWVlNmJlY2JlMjE0NmI3YTJkYjRlNzJhODkwOTA1MzcxY2U0ZSBNb24gU2VwIDE3IDAw OjAwOjAwIDIwMDEKRnJvbTogUmlzaHUgQmFnZ2EgPGJhZ3Jpc2h1QGFtYXpvbi5jb20+CkRhdGU6 IE1vbiwgMTQgTm92IDIwMjIgMTk6Mzk6MDQgKzAwMDAKU3ViamVjdDogW1BBVENIIDA2LzE1XSBj bG9nLmMgcGFnZSBoZWFkZXIKCi0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vY2xvZy5j IHwgMzIgKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDI0 IGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv YWNjZXNzL3RyYW5zYW0vY2xvZy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vY2xvZy5j CmluZGV4IDE4MTFmNmJjZjkzLi4xMDNiZjU4NWI3ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv YWNjZXNzL3RyYW5zYW0vY2xvZy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL2Ns b2cuYwpAQCAtNjEsNyArNjEsNyBAQAogLyogV2UgbmVlZCB0d28gYml0cyBwZXIgeGFjdCwgc28g Zm91ciB4YWN0cyBmaXQgaW4gYSBieXRlICovCiAjZGVmaW5lIENMT0dfQklUU19QRVJfWEFDVAky CiAjZGVmaW5lIENMT0dfWEFDVFNfUEVSX0JZVEUgNAotI2RlZmluZSBDTE9HX1hBQ1RTX1BFUl9Q QUdFIChCTENLU1ogKiBDTE9HX1hBQ1RTX1BFUl9CWVRFKQorI2RlZmluZSBDTE9HX1hBQ1RTX1BF Ul9QQUdFICgoQkxDS1NaIC0gU2l6ZU9mUGFnZUhlYWRlckRhdGEpICogQ0xPR19YQUNUU19QRVJf QllURSkKICNkZWZpbmUgQ0xPR19YQUNUX0JJVE1BU0sJKCgxIDw8IENMT0dfQklUU19QRVJfWEFD VCkgLSAxKQogCiAjZGVmaW5lIFRyYW5zYWN0aW9uSWRUb1BhZ2UoeGlkKQkoKHhpZCkgLyAoVHJh bnNhY3Rpb25JZCkgQ0xPR19YQUNUU19QRVJfUEFHRSkKQEAgLTg2LDcgKzg2LDcgQEAKIAogc3Rh dGljIEJ1ZmZlciBaZXJvQ0xPR1BhZ2UoaW50IHBhZ2VubywgYm9vbCB3cml0ZVhsb2cpOwogc3Rh dGljIGJvb2wgQ0xPR1BhZ2VQcmVjZWRlcyhpbnQgcGFnZTEsIGludCBwYWdlMik7Ci1zdGF0aWMg dm9pZCBXcml0ZVplcm9QYWdlWGxvZ1JlYyhpbnQgcGFnZW5vKTsKK3N0YXRpYyBYTG9nUmVjUHRy IFdyaXRlWmVyb1BhZ2VYbG9nUmVjKGludCBwYWdlbm8pOwogc3RhdGljIHZvaWQgV3JpdGVUcnVu Y2F0ZVhsb2dSZWMoaW50IHBhZ2VubywgVHJhbnNhY3Rpb25JZCBvbGRlc3RYYWN0LAogCQkJCQkJ CQkgT2lkIG9sZGVzdFhhY3REYik7CiBzdGF0aWMgdm9pZCBUcmFuc2FjdGlvbklkU2V0UGFnZVN0 YXR1cyhUcmFuc2FjdGlvbklkIHhpZCwgaW50IG5zdWJ4aWRzLApAQCAtNTY1LDYgKzU2NSw3IEBA IHN0YXRpYyB2b2lkCiBUcmFuc2FjdGlvbklkU2V0U3RhdHVzQml0KFRyYW5zYWN0aW9uSWQgeGlk LCBYaWRTdGF0dXMgc3RhdHVzLCBYTG9nUmVjUHRyIGxzbiwgQnVmZmVyIGJ1ZmZlcikKIHsKIAlp bnQJCQlieXRlbm8gPSBUcmFuc2FjdGlvbklkVG9CeXRlKHhpZCk7CisJaW50IAkJcGFnZW5vID0g VHJhbnNhY3Rpb25JZFRvUGFnZSh4aWQpOwogCWludAkJCWJzaGlmdCA9IFRyYW5zYWN0aW9uSWRU b0JJbmRleCh4aWQpICogQ0xPR19CSVRTX1BFUl9YQUNUOwogCWNoYXIJICAgKmJ5dGVwdHI7CiAJ Y2hhcgkJYnl0ZXZhbDsKQEAgLTU3Myw3ICs1NzQsNyBAQCBUcmFuc2FjdGlvbklkU2V0U3RhdHVz Qml0KFRyYW5zYWN0aW9uSWQgeGlkLCBYaWRTdGF0dXMgc3RhdHVzLCBYTG9nUmVjUHRyIGxzbiwg QgogCUFzc2VydChMV0xvY2tIZWxkQnlNZUluTW9kZShCdWZmZXJEZXNjcmlwdG9yR2V0Q29udGVu dExvY2soR2V0QnVmZmVyRGVzY3JpcHRvcihidWZmZXIgLSAxKSksCiAJCQkJCQkJCUxXX0VYQ0xV U0lWRSkpOwogCi0JYnl0ZXB0ciA9IEJ1ZmZlckdldFBhZ2UoYnVmZmVyKSArIGJ5dGVubzsKKwli eXRlcHRyID0gUGFnZUdldENvbnRlbnRzKEJ1ZmZlckdldFBhZ2UoYnVmZmVyKSkgKyBieXRlbm87 CiAJY3VydmFsID0gKCpieXRlcHRyID4+IGJzaGlmdCkgJiBDTE9HX1hBQ1RfQklUTUFTSzsKIAog CS8qCkBAIC02MDAsNiArNjAxLDggQEAgVHJhbnNhY3Rpb25JZFNldFN0YXR1c0JpdChUcmFuc2Fj dGlvbklkIHhpZCwgWGlkU3RhdHVzIHN0YXR1cywgWExvZ1JlY1B0ciBsc24sIEIKIAlieXRldmFs ICY9IH4oKCgxIDw8IENMT0dfQklUU19QRVJfWEFDVCkgLSAxKSA8PCBic2hpZnQpOwogCWJ5dGV2 YWwgfD0gKHN0YXR1cyA8PCBic2hpZnQpOwogCSpieXRlcHRyID0gYnl0ZXZhbDsKKwlQYWdlU2V0 Q2hlY2tzdW1JbnBsYWNlKEJ1ZmZlckdldFBhZ2UoYnVmZmVyKSwgcGFnZW5vKTsKKwogCiAJLyoK IAkgKiBVcGRhdGUgdGhlIGJ1ZmZlciBMU04gaWYgdGhlIHRyYW5zYWN0aW9uIGNvbXBsZXRpb24g TFNOIGlzIGhpZ2hlci4KQEAgLTY0Miw3ICs2NDUsNyBAQCBUcmFuc2FjdGlvbklkR2V0U3RhdHVz KFRyYW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyICpsc24pCiAJQnVmZmVyCQlidWZmZXI7CiAK IAlidWZmZXIgPSBSZWFkU2xydUJ1ZmZlcihTTFJVX0NMT0dfSUQsIHBhZ2Vubyk7Ci0JYnl0ZXB0 ciA9IEJ1ZmZlckdldFBhZ2UoYnVmZmVyKSArIGJ5dGVubzsKKwlieXRlcHRyID0gUGFnZUdldENv bnRlbnRzKEJ1ZmZlckdldFBhZ2UoYnVmZmVyKSkgKyBieXRlbm87CiAKIAlzdGF0dXMgPSAoKmJ5 dGVwdHIgPj4gYnNoaWZ0KSAmIENMT0dfWEFDVF9CSVRNQVNLOwogCkBAIC02ODYsMTMgKzY4OSwy MSBAQCBzdGF0aWMgQnVmZmVyCiBaZXJvQ0xPR1BhZ2UoaW50IHBhZ2VubywgYm9vbCB3cml0ZVhs b2cpCiB7CiAJQnVmZmVyCQlidWZmZXI7CisJUGFnZSAJCXBhZ2U7CisJWExvZ1JlY1B0ciAgbHNu OwogCiAJYnVmZmVyID0gWmVyb1NscnVCdWZmZXIoU0xSVV9DTE9HX0lELCBwYWdlbm8pOwogCU1h cmtCdWZmZXJEaXJ0eShidWZmZXIpOwogCiAJaWYgKHdyaXRlWGxvZykKLQkJV3JpdGVaZXJvUGFn ZVhsb2dSZWMocGFnZW5vKTsKKwl7CisJCWxzbiA9IFdyaXRlWmVyb1BhZ2VYbG9nUmVjKHBhZ2Vu byk7CisJCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1ZmZlcik7CisJCVBhZ2VTZXRIZWFkZXJEYXRh Tm9uUmVsKHBhZ2UsIHBhZ2VubywgbHNuLCBCTENLU1osIFBHX01FVEFQQUdFX0xBWU9VVF9WRVJT SU9OKTsKKwkJUGFnZVNldENoZWNrc3VtSW5wbGFjZShwYWdlLCBwYWdlbm8pOwogCisJfQorCQkK IAlyZXR1cm4gYnVmZmVyOwogfQogCkBAIC03MzUsMTIgKzc0NiwxNCBAQCBUcmltQ0xPRyh2b2lk KQogCiAJCWJ1ZmZlciA9IFJlYWRTbHJ1QnVmZmVyKFNMUlVfQ0xPR19JRCwgcGFnZW5vKTsKIAkJ TG9ja0J1ZmZlcihidWZmZXIsIEJVRkZFUl9MT0NLX0VYQ0xVU0lWRSk7Ci0JCWJ5dGVwdHIgPSBC dWZmZXJHZXRQYWdlKGJ1ZmZlcikgKyBieXRlbm87CisJCWJ5dGVwdHIgPSBQYWdlR2V0Q29udGVu dHMoQnVmZmVyR2V0UGFnZShidWZmZXIpKSArIGJ5dGVubzsKIAogCQkvKiBaZXJvIHNvLWZhci11 bnVzZWQgcG9zaXRpb25zIGluIHRoZSBjdXJyZW50IGJ5dGUgKi8KIAkJKmJ5dGVwdHIgJj0gKDEg PDwgYnNoaWZ0KSAtIDE7CiAJCS8qIFplcm8gdGhlIHJlc3Qgb2YgdGhlIHBhZ2UgKi8KIAkJTWVt U2V0KGJ5dGVwdHIgKyAxLCAwLCBCTENLU1ogLSBieXRlbm8gLSAxKTsKKwkJUGFnZVNldENoZWNr c3VtSW5wbGFjZShCdWZmZXJHZXRQYWdlKGJ1ZmZlciksIHBhZ2Vubyk7CisKIAogCQlNYXJrQnVm ZmVyRGlydHkoYnVmZmVyKTsKIApAQCAtODY2LDEyICs4NzksMTUgQEAgQ0xPR1BhZ2VQcmVjZWRl cyhpbnQgcGFnZTEsIGludCBwYWdlMikKIC8qCiAgKiBXcml0ZSBhIFpFUk9QQUdFIHhsb2cgcmVj b3JkCiAgKi8KLXN0YXRpYyB2b2lkCitzdGF0aWMgWExvZ1JlY1B0ciAKIFdyaXRlWmVyb1BhZ2VY bG9nUmVjKGludCBwYWdlbm8pCiB7CisJWExvZ1JlY1B0ciBsc247CiAJWExvZ0JlZ2luSW5zZXJ0 KCk7CiAJWExvZ1JlZ2lzdGVyRGF0YSgoY2hhciAqKSAoJnBhZ2VubyksIHNpemVvZihpbnQpKTsK LQkodm9pZCkgWExvZ0luc2VydChSTV9DTE9HX0lELCBDTE9HX1pFUk9QQUdFKTsKKwlsc24gPSBY TG9nSW5zZXJ0KFJNX0NMT0dfSUQsIENMT0dfWkVST1BBR0UpOworCisJcmV0dXJuIGxzbjsKIH0K IAogLyoKLS0gCjIuMzcuMQoKCkZyb20gMjc5OWM0YzdiZWI5NzQ0Y2ZjZmQ1ZWEzMzI3YTBhYjVl NWM5MjFjNSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKRnJvbTogUmlzaHUgQmFnZ2EgPGJhZ3Jp c2h1QGFtYXpvbi5jb20+CkRhdGU6IEZyaSwgMjMgU2VwIDIwMjIgMjA6MDE6MzAgKzAwMDAKU3Vi amVjdDogW1BBVENIIDA3LzE1XSBwYWdlIGhlYWRlcnMgZm9yIHNlcmlhbCBzbHJ1IChwcmVkaWNh dGUpCgpjcjogaHR0cHM6Ly9jb2RlLmFtYXpvbi5jb20vcmV2aWV3cy9DUi03NjUyMjgyNQotLS0K IHNyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcmVkaWNhdGUuYyB8IDcgKysrKystLQogMSBmaWxl IGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJlZGljYXRlLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdl L2xtZ3IvcHJlZGljYXRlLmMKaW5kZXggMTRhNzAzMTNkZDEuLjcwNmJiMjg1MjYwIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJlZGljYXRlLmMKKysrIGIvc3JjL2JhY2tl bmQvc3RvcmFnZS9sbWdyL3ByZWRpY2F0ZS5jCkBAIC0zMTUsNyArMzE1LDcgQEAKIAogI2RlZmlu ZSBTRVJJQUxfUEFHRVNJWkUJCQlCTENLU1oKICNkZWZpbmUgU0VSSUFMX0VOVFJZU0laRQkJCXNp emVvZihTZXJDb21taXRTZXFObykKLSNkZWZpbmUgU0VSSUFMX0VOVFJJRVNQRVJQQUdFCShTRVJJ QUxfUEFHRVNJWkUgLyBTRVJJQUxfRU5UUllTSVpFKQorI2RlZmluZSBTRVJJQUxfRU5UUklFU1BF UlBBR0UJKChTRVJJQUxfUEFHRVNJWkUgLSBTaXplT2ZQYWdlSGVhZGVyRGF0YSkgLyBTRVJJQUxf RU5UUllTSVpFKQogCiAvKgogICogU2V0IG1heGltdW0gcGFnZXMgYmFzZWQgb24gdGhlIG51bWJl ciBuZWVkZWQgdG8gdHJhY2sgYWxsIHRyYW5zYWN0aW9ucy4KQEAgLTMyNSwxMSArMzI1LDEyIEBA CiAjZGVmaW5lIFNlcmlhbE5leHRQYWdlKHBhZ2UpICgoKHBhZ2UpID49IFNFUklBTF9NQVhfUEFH RSkgPyAwIDogKHBhZ2UpICsgMSkKIAogI2RlZmluZSBTZXJpYWxWYWx1ZShidWZmZXIsIHhpZCkg KCooKFNlckNvbW1pdFNlcU5vICopIFwKLQkoQnVmZmVyR2V0UGFnZShidWZmZXIpICsgXAorCShQ YWdlR2V0Q29udGVudHMoQnVmZmVyR2V0UGFnZShidWZmZXIpKSArIFwKIAkoKCgodWludDMyKSAo eGlkKSkgJSBTRVJJQUxfRU5UUklFU1BFUlBBR0UpICogU0VSSUFMX0VOVFJZU0laRSkpKSkKIAog I2RlZmluZSBTZXJpYWxQYWdlKHhpZCkJKCgodWludDMyKSAoeGlkKSkgLyBTRVJJQUxfRU5UUklF U1BFUlBBR0UpCiAKKwogdHlwZWRlZiBzdHJ1Y3QgU2VyaWFsQ29udHJvbERhdGEKIHsKIAlpbnQJ CQloZWFkUGFnZTsJCS8qIG5ld2VzdCBpbml0aWFsaXplZCBwYWdlICovCkBAIC05NDEsNiArOTQy LDcgQEAgU2VyaWFsQWRkKFRyYW5zYWN0aW9uSWQgeGlkLCBTZXJDb21taXRTZXFObyBtaW5Db25m bGljdENvbW1pdFNlcU5vKQogCQl3aGlsZSAoZmlyc3RaZXJvUGFnZSAhPSB0YXJnZXRQYWdlKQog CQl7CiAJCQlidWZmZXIgPSBaZXJvU2xydUJ1ZmZlcihTTFJVX1NFUklBTF9JRCwgZmlyc3RaZXJv UGFnZSk7CisJCQlQYWdlU2V0SGVhZGVyRGF0YU5vblJlbChCdWZmZXJHZXRQYWdlKGJ1ZmZlciks IGZpcnN0WmVyb1BhZ2UsIEludmFsaWRYTG9nUmVjUHRyLCBCTENLU1osIFBHX01FVEFQQUdFX0xB WU9VVF9WRVJTSU9OKTsKIAkJCU1hcmtCdWZmZXJEaXJ0eShidWZmZXIpOwogCQkJVW5sb2NrUmVs ZWFzZUJ1ZmZlcihidWZmZXIpOwogCQkJZmlyc3RaZXJvUGFnZSA9IFNlcmlhbE5leHRQYWdlKGZp cnN0WmVyb1BhZ2UpOwpAQCAtOTU0LDYgKzk1Niw3IEBAIFNlcmlhbEFkZChUcmFuc2FjdGlvbklk IHhpZCwgU2VyQ29tbWl0U2VxTm8gbWluQ29uZmxpY3RDb21taXRTZXFObykKIAl9CiAKIAlTZXJp YWxWYWx1ZShidWZmZXIsIHhpZCkgPSBtaW5Db25mbGljdENvbW1pdFNlcU5vOworCVBhZ2VTZXRD aGVja3N1bUlucGxhY2UoQnVmZmVyR2V0UGFnZShidWZmZXIpLCBTZXJpYWxQYWdlKHhpZCkpOwog CU1hcmtCdWZmZXJEaXJ0eShidWZmZXIpOwogCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsK IAotLSAKMi4zNy4xCgoKRnJvbSBiZGI2NTZhNWRkZTYwZDU4OTg2MGZkMjk4MzM4N2YxY2ZmMThj YTIxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBSaXNodSBCYWdnYSA8YmFncmlzaHVA YW1hem9uLmNvbT4KRGF0ZTogRnJpLCAyMyBTZXAgMjAyMiAyMDowNTo0NSArMDAwMApTdWJqZWN0 OiBbUEFUQ0ggMDgvMTVdIHBhZ2UgaGVhZGVyIGZvciBub3RpZnkgc2xydSAoYXN5bmMpCgotLS0K IHNyYy9iYWNrZW5kL2NvbW1hbmRzL2FzeW5jLmMgfCAzNSArKysrKysrKysrKysrKysrKysrKy0t LS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDIwIGluc2VydGlvbnMoKyksIDE1IGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2FzeW5jLmMgYi9zcmMv YmFja2VuZC9jb21tYW5kcy9hc3luYy5jCmluZGV4IDc2MDcwNWNhZjkwLi5mM2RjZmRmMjQ1YiAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5bmMuYworKysgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy9hc3luYy5jCkBAIC0xNjQsNyArMTY0LDcgQEAKICAqIHRoYW4gdGhhdCwgc28g Y2hhbmdlcyBpbiB0aGF0IGRhdGEgc3RydWN0dXJlIHdvbid0IGFmZmVjdCB1c2VyLXZpc2libGUK ICAqIHJlc3RyaWN0aW9ucy4KICAqLwotI2RlZmluZSBOT1RJRllfUEFZTE9BRF9NQVhfTEVOR1RI CShCTENLU1ogLSBOQU1FREFUQUxFTiAtIDEyOCkKKyNkZWZpbmUgTk9USUZZX1BBWUxPQURfTUFY X0xFTkdUSAkoQkxDS1NaIC0gTkFNRURBVEFMRU4gLSBTaXplT2ZQYWdlSGVhZGVyRGF0YSAtIDEy OCkKIAogLyoKICAqIFN0cnVjdCByZXByZXNlbnRpbmcgYW4gZW50cnkgaW4gdGhlIGdsb2JhbCBu b3RpZnkgcXVldWUKQEAgLTIxNCw3ICsyMTQsNyBAQCB0eXBlZGVmIHN0cnVjdCBRdWV1ZVBvc2l0 aW9uCiAJKCh4KS5wYWdlID09ICh5KS5wYWdlICYmICh4KS5vZmZzZXQgPT0gKHkpLm9mZnNldCkK IAogI2RlZmluZSBRVUVVRV9QT1NfSVNfWkVSTyh4KSBcCi0JKCh4KS5wYWdlID09IDAgJiYgKHgp Lm9mZnNldCA9PSAwKQorCSgoeCkucGFnZSA9PSAwICYmICh4KS5vZmZzZXQgPT0gTUFYQUxJR04o U2l6ZU9mUGFnZUhlYWRlckRhdGEpKQogCiAvKiBjaG9vc2UgbG9naWNhbGx5IHNtYWxsZXIgUXVl dWVQb3NpdGlvbiAqLwogI2RlZmluZSBRVUVVRV9QT1NfTUlOKHgseSkgXApAQCAtNTQzLDggKzU0 Myw4IEBAIEFzeW5jU2htZW1Jbml0KHZvaWQpCiAJaWYgKCFmb3VuZCkKIAl7CiAJCS8qIEZpcnN0 IHRpbWUgdGhyb3VnaCwgc28gaW5pdGlhbGl6ZSBpdCAqLwotCQlTRVRfUVVFVUVfUE9TKFFVRVVF X0hFQUQsIDAsIDApOwotCQlTRVRfUVVFVUVfUE9TKFFVRVVFX1RBSUwsIDAsIDApOworCQlTRVRf UVVFVUVfUE9TKFFVRVVFX0hFQUQsIDAsIE1BWEFMSUdOKFNpemVPZlBhZ2VIZWFkZXJEYXRhKSk7 CisJCVNFVF9RVUVVRV9QT1MoUVVFVUVfVEFJTCwgMCwgTUFYQUxJR04oU2l6ZU9mUGFnZUhlYWRl ckRhdGEpKTsKIAkJUVVFVUVfU1RPUF9QQUdFID0gMDsKIAkJUVVFVUVfRklSU1RfTElTVEVORVIg PSBJbnZhbGlkQmFja2VuZElkOwogCQlhc3luY1F1ZXVlQ29udHJvbC0+bGFzdFF1ZXVlRmlsbFdh cm4gPSAwOwpAQCAtNTU0LDcgKzU1NCw3IEBAIEFzeW5jU2htZW1Jbml0KHZvaWQpCiAJCQlRVUVV RV9CQUNLRU5EX1BJRChpKSA9IEludmFsaWRQaWQ7CiAJCQlRVUVVRV9CQUNLRU5EX0RCT0lEKGkp ID0gSW52YWxpZE9pZDsKIAkJCVFVRVVFX05FWFRfTElTVEVORVIoaSkgPSBJbnZhbGlkQmFja2Vu ZElkOwotCQkJU0VUX1FVRVVFX1BPUyhRVUVVRV9CQUNLRU5EX1BPUyhpKSwgMCwgMCk7CisJCQlT RVRfUVVFVUVfUE9TKFFVRVVFX0JBQ0tFTkRfUE9TKGkpLCAwLCBNQVhBTElHTihTaXplT2ZQYWdl SGVhZGVyRGF0YSkpOwogCQl9CiAJfQogCkBAIC0xMzMxLDE5ICsxMzMxLDE5IEBAIGFzeW5jUXVl dWVBZHZhbmNlKHZvbGF0aWxlIFF1ZXVlUG9zaXRpb24gKnBvc2l0aW9uLCBpbnQgZW50cnlMZW5n dGgpCiAJICogd3JpdHRlbiBvciByZWFkLgogCSAqLwogCW9mZnNldCArPSBlbnRyeUxlbmd0aDsK LQlBc3NlcnQob2Zmc2V0IDw9IFFVRVVFX1BBR0VTSVpFKTsKKwlBc3NlcnQob2Zmc2V0IDw9IFFV RVVFX1BBR0VTSVpFIC0gTUFYQUxJR04oU2l6ZU9mUGFnZUhlYWRlckRhdGEpKTsKIAogCS8qCiAJ ICogSW4gYSBzZWNvbmQgc3RlcCBjaGVjayBpZiBhbm90aGVyIGVudHJ5IGNhbiBwb3NzaWJseSBi ZSB3cml0dGVuIHRvIHRoZQogCSAqIHBhZ2UuIElmIHNvLCBzdGF5IGhlcmUsIHdlIGhhdmUgcmVh Y2hlZCB0aGUgbmV4dCBwb3NpdGlvbi4gSWYgbm90LCB0aGVuCiAJICogd2UgbmVlZCB0byBtb3Zl IG9uIHRvIHRoZSBuZXh0IHBhZ2UuCiAJICovCi0JaWYgKG9mZnNldCArIFFVRVVFQUxJR04oQXN5 bmNRdWV1ZUVudHJ5RW1wdHlTaXplKSA+IFFVRVVFX1BBR0VTSVpFKQorCWlmIChvZmZzZXQgKyBR VUVVRUFMSUdOKEFzeW5jUXVldWVFbnRyeUVtcHR5U2l6ZSkgPiBRVUVVRV9QQUdFU0laRSAtIE1B WEFMSUdOKFNpemVPZlBhZ2VIZWFkZXJEYXRhKSkKIAl7CiAJCXBhZ2VubysrOwogCQlpZiAocGFn ZW5vID4gUVVFVUVfTUFYX1BBR0UpCiAJCQlwYWdlbm8gPSAwOwkJCS8qIHdyYXAgYXJvdW5kICov Ci0JCW9mZnNldCA9IDA7CisJCW9mZnNldCA9IE1BWEFMSUdOKFNpemVPZlBhZ2VIZWFkZXJEYXRh KTsgLyogc3RhcnQgYXQgU2l6ZU9mUGFnZUhlYWRlckRhdGEgKi8KIAkJcGFnZUp1bXAgPSB0cnVl OwogCX0KIApAQCAtMTQyNCw2ICsxNDI0LDggQEAgYXN5bmNRdWV1ZUFkZEVudHJpZXMoTGlzdENl bGwgKm5leHROb3RpZnkpCiAJaWYgKFFVRVVFX1BPU19JU19aRVJPKHF1ZXVlX2hlYWQpKQogCXsK IAkJYnVmZmVyID0gWmVyb1NscnVCdWZmZXIoU0xSVV9OT1RJRllfSUQsIHBhZ2Vubyk7CisJCVBh Z2VTZXRIZWFkZXJEYXRhTm9uUmVsKEJ1ZmZlckdldFBhZ2UoYnVmZmVyKSwgcGFnZW5vLCBJbnZh bGlkWExvZ1JlY1B0ciwgQkxDS1NaLCBQR19NRVRBUEFHRV9MQVlPVVRfVkVSU0lPTik7CisKIAl9 CiAJZWxzZQogCXsKQEAgLTE0MzEsNiArMTQzMyw3IEBAIGFzeW5jUXVldWVBZGRFbnRyaWVzKExp c3RDZWxsICpuZXh0Tm90aWZ5KQogCQlMb2NrQnVmZmVyKGJ1ZmZlciwgQlVGRkVSX0xPQ0tfRVhD TFVTSVZFKTsKIAl9CiAKKwkKIAkvKiBOb3RlIHdlIG1hcmsgdGhlIHBhZ2UgZGlydHkgYmVmb3Jl IHdyaXRpbmcgaW4gaXQgKi8KIAlNYXJrQnVmZmVyRGlydHkoYnVmZmVyKTsKIApAQCAtMTQ0NCw3 ICsxNDQ3LDcgQEAgYXN5bmNRdWV1ZUFkZEVudHJpZXMoTGlzdENlbGwgKm5leHROb3RpZnkpCiAJ CW9mZnNldCA9IFFVRVVFX1BPU19PRkZTRVQocXVldWVfaGVhZCk7CiAKIAkJLyogQ2hlY2sgd2hl dGhlciB0aGUgZW50cnkgcmVhbGx5IGZpdHMgb24gdGhlIGN1cnJlbnQgcGFnZSAqLwotCQlpZiAo b2Zmc2V0ICsgcWUubGVuZ3RoIDw9IFFVRVVFX1BBR0VTSVpFKQorCQlpZiAob2Zmc2V0ICsgcWUu bGVuZ3RoIDw9IFFVRVVFX1BBR0VTSVpFIC0gTUFYQUxJR04oU2l6ZU9mUGFnZUhlYWRlckRhdGEp KQogCQl7CiAJCQkvKiBPSywgc28gYWR2YW5jZSBuZXh0Tm90aWZ5IHBhc3QgdGhpcyBpdGVtICov CiAJCQluZXh0Tm90aWZ5ID0gbG5leHQocGVuZGluZ05vdGlmaWVzLT5ldmVudHMsIG5leHROb3Rp ZnkpOwpAQCAtMTQ1NiwxNyArMTQ1OSwxOSBAQCBhc3luY1F1ZXVlQWRkRW50cmllcyhMaXN0Q2Vs bCAqbmV4dE5vdGlmeSkKIAkJCSAqIG9ubHkgY2hlY2sgZGJvaWQgYW5kIHNpbmNlIGl0IHdvbid0 IG1hdGNoIGFueSByZWFkZXIncyBkYXRhYmFzZQogCQkJICogT0lELCB0aGV5IHdpbGwgaWdub3Jl IHRoaXMgZW50cnkgYW5kIG1vdmUgb24uCiAJCQkgKi8KLQkJCXFlLmxlbmd0aCA9IFFVRVVFX1BB R0VTSVpFIC0gb2Zmc2V0OworCQkJcWUubGVuZ3RoID0gUVVFVUVfUEFHRVNJWkUgLSBNQVhBTElH TihTaXplT2ZQYWdlSGVhZGVyRGF0YSkgLSBvZmZzZXQ7CiAJCQlxZS5kYm9pZCA9IEludmFsaWRP aWQ7CiAJCQlxZS5kYXRhWzBdID0gJ1wwJzsJLyogZW1wdHkgY2hhbm5lbCAqLwogCQkJcWUuZGF0 YVsxXSA9ICdcMCc7CS8qIGVtcHR5IHBheWxvYWQgKi8KIAkJfQogCiAJCS8qIE5vdyBjb3B5IHFl IGludG8gdGhlIHNoYXJlZCBidWZmZXIgcGFnZSAqLwotCQltZW1jcHkoQnVmZmVyR2V0UGFnZShi dWZmZXIpICsgb2Zmc2V0LAorCQltZW1jcHkoUGFnZUdldENvbnRlbnRzKEJ1ZmZlckdldFBhZ2Uo YnVmZmVyKSkgKyBvZmZzZXQsCiAJCQkgICAmcWUsCiAJCQkgICBxZS5sZW5ndGgpOwogCisJCVBh Z2VTZXRDaGVja3N1bUlucGxhY2UoQnVmZmVyR2V0UGFnZShidWZmZXIpLCBwYWdlbm8pOworCiAJ CS8qIEFkdmFuY2UgcXVldWVfaGVhZCBhcHByb3ByaWF0ZWx5LCBhbmQgZGV0ZWN0IGlmIHBhZ2Ug aXMgZnVsbCAqLwogCQlpZiAoYXN5bmNRdWV1ZUFkdmFuY2UoJihxdWV1ZV9oZWFkKSwgcWUubGVu Z3RoKSkKIAkJewpAQCAtMTk5MiwxMCArMTk5NywxMCBAQCBhc3luY1F1ZXVlUmVhZEFsbE5vdGlm aWNhdGlvbnModm9pZCkKIAkJCWVsc2UKIAkJCXsKIAkJCQkvKiBmZXRjaCBhbGwgdGhlIHJlc3Qg b2YgdGhlIHBhZ2UgKi8KLQkJCQljb3B5c2l6ZSA9IFFVRVVFX1BBR0VTSVpFIC0gY3Vyb2Zmc2V0 OworCQkJCWNvcHlzaXplID0gUVVFVUVfUEFHRVNJWkUgLSBNQVhBTElHTihTaXplT2ZQYWdlSGVh ZGVyRGF0YSkgLSBjdXJvZmZzZXQ7CiAJCQl9Ci0JCQltZW1jcHkocGFnZV9idWZmZXIuYnVmICsg Y3Vyb2Zmc2V0LAotCQkJCSAgIEJ1ZmZlckdldFBhZ2UoYnVmZmVyKSArIGN1cm9mZnNldCwKKwkJ CW1lbWNweShQYWdlR2V0Q29udGVudHMocGFnZV9idWZmZXIuYnVmKSArICBjdXJvZmZzZXQsCisJ CQkJICAgUGFnZUdldENvbnRlbnRzKEJ1ZmZlckdldFBhZ2UoYnVmZmVyKSkgKyBjdXJvZmZzZXQs CiAJCQkJICAgY29weXNpemUpOwogCQkJUmVsZWFzZUJ1ZmZlcihidWZmZXIpOwogCkBAIC0yMDY1 LDcgKzIwNzAsNyBAQCBhc3luY1F1ZXVlUHJvY2Vzc1BhZ2VFbnRyaWVzKHZvbGF0aWxlIFF1ZXVl UG9zaXRpb24gKmN1cnJlbnQsCiAJCWlmIChRVUVVRV9QT1NfRVFVQUwodGhpc2VudHJ5LCBzdG9w KSkKIAkJCWJyZWFrOwogCi0JCXFlID0gKEFzeW5jUXVldWVFbnRyeSAqKSAocGFnZV9idWZmZXIg KyBRVUVVRV9QT1NfT0ZGU0VUKHRoaXNlbnRyeSkpOworCQlxZSA9IChBc3luY1F1ZXVlRW50cnkg KikgKFBhZ2VHZXRDb250ZW50cyhwYWdlX2J1ZmZlcikgKyBRVUVVRV9QT1NfT0ZGU0VUKHRoaXNl bnRyeSkpOwogCiAJCS8qCiAJCSAqIEFkdmFuY2UgKmN1cnJlbnQgb3ZlciB0aGlzIG1lc3NhZ2Us IHBvc3NpYmx5IHRvIHRoZSBuZXh0IHBhZ2UuIEFzCi0tIAoyLjM3LjEKCgpGcm9tIDE0MTBhZGFk ZGQxMjA0MGU3OWIxNjY0YTFkNDA3MzQ2YmZiYWNjMDUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAx CkZyb206IFJpc2h1IEJhZ2dhIDxiYWdyaXNodUBhbWF6b24uY29tPgpEYXRlOiBNb24sIDE0IE5v diAyMDIyIDE5OjIwOjMwICswMDAwClN1YmplY3Q6IFtQQVRDSCAwOS8xNV0gcGFnZSBoZWFkZXJz IG9uIG11bHRpeGFjdAoKLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3Qu YyB8IDYxICsrKysrKysrKysrKysrKysrLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgNDAgaW5z ZXJ0aW9ucygrKSwgMjEgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNj ZXNzL3RyYW5zYW0vbXVsdGl4YWN0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0 aXhhY3QuYwppbmRleCA5Mjg1Mjg5MTVkNC4uMjFmN2NiZDU4NTIgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy90cmFuc2FtL211bHRpeGFjdC5jCkBAIC0xMDYsNyArMTA2LDcgQEAKICAqLwogCiAvKiBXZSBu ZWVkIGZvdXIgYnl0ZXMgcGVyIG9mZnNldCAqLwotI2RlZmluZSBNVUxUSVhBQ1RfT0ZGU0VUU19Q RVJfUEFHRSAoQkxDS1NaIC8gc2l6ZW9mKE11bHRpWGFjdE9mZnNldCkpCisjZGVmaW5lIE1VTFRJ WEFDVF9PRkZTRVRTX1BFUl9QQUdFICgoQkxDS1NaIC0gU2l6ZU9mUGFnZUhlYWRlckRhdGEpLyBz aXplb2YoTXVsdGlYYWN0T2Zmc2V0KSkKIAogI2RlZmluZSBNdWx0aVhhY3RJZFRvT2Zmc2V0UGFn ZSh4aWQpIFwKIAkoKHhpZCkgLyAoTXVsdGlYYWN0T2Zmc2V0KSBNVUxUSVhBQ1RfT0ZGU0VUU19Q RVJfUEFHRSkKQEAgLTEzOCw3ICsxMzgsNyBAQAogLyogc2l6ZSBpbiBieXRlcyBvZiBhIGNvbXBs ZXRlIGdyb3VwICovCiAjZGVmaW5lIE1VTFRJWEFDVF9NRU1CRVJHUk9VUF9TSVpFIFwKIAkoc2l6 ZW9mKFRyYW5zYWN0aW9uSWQpICogTVVMVElYQUNUX01FTUJFUlNfUEVSX01FTUJFUkdST1VQICsg TVVMVElYQUNUX0ZMQUdCWVRFU19QRVJfR1JPVVApCi0jZGVmaW5lIE1VTFRJWEFDVF9NRU1CRVJH Uk9VUFNfUEVSX1BBR0UgKEJMQ0tTWiAvIE1VTFRJWEFDVF9NRU1CRVJHUk9VUF9TSVpFKQorI2Rl ZmluZSBNVUxUSVhBQ1RfTUVNQkVSR1JPVVBTX1BFUl9QQUdFICgoQkxDS1NaIC0gU2l6ZU9mUGFn ZUhlYWRlckRhdGEpIC8gTVVMVElYQUNUX01FTUJFUkdST1VQX1NJWkUpCiAjZGVmaW5lIE1VTFRJ WEFDVF9NRU1CRVJTX1BFUl9QQUdFCVwKIAkoTVVMVElYQUNUX01FTUJFUkdST1VQU19QRVJfUEFH RSAqIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9NRU1CRVJHUk9VUCkKIApAQCAtMTYxLDkgKzE2MSw5 IEBACiAKIC8qIExvY2F0aW9uIChieXRlIG9mZnNldCB3aXRoaW4gcGFnZSkgb2YgZmxhZyB3b3Jk IGZvciBhIGdpdmVuIG1lbWJlciAqLwogI2RlZmluZSBNWE9mZnNldFRvRmxhZ3NPZmZzZXQoeGlk KSBcCi0JKCgoKHhpZCkgLyAoVHJhbnNhY3Rpb25JZCkgTVVMVElYQUNUX01FTUJFUlNfUEVSX01F TUJFUkdST1VQKSAlIFwKKwkoKCgoKHhpZCkgLyAoVHJhbnNhY3Rpb25JZCkgTVVMVElYQUNUX01F TUJFUlNfUEVSX01FTUJFUkdST1VQKSAlIFwKIAkgIChUcmFuc2FjdGlvbklkKSBNVUxUSVhBQ1Rf TUVNQkVSR1JPVVBTX1BFUl9QQUdFKSAqIFwKLQkgKFRyYW5zYWN0aW9uSWQpIE1VTFRJWEFDVF9N RU1CRVJHUk9VUF9TSVpFKQorCSAoVHJhbnNhY3Rpb25JZCkgTVVMVElYQUNUX01FTUJFUkdST1VQ X1NJWkUpKQogI2RlZmluZSBNWE9mZnNldFRvRmxhZ3NCaXRTaGlmdCh4aWQpIFwKIAkoKCh4aWQp ICUgKFRyYW5zYWN0aW9uSWQpIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9NRU1CRVJHUk9VUCkgKiBc CiAJIE1YQUNUX01FTUJFUl9CSVRTX1BFUl9YQUNUKQpAQCAtMzU0LDcgKzM1NCw3IEBAIHN0YXRp YyBib29sIE11bHRpWGFjdE9mZnNldFdvdWxkV3JhcChNdWx0aVhhY3RPZmZzZXQgYm91bmRhcnks CiAJCQkJCQkJCQkgTXVsdGlYYWN0T2Zmc2V0IHN0YXJ0LCB1aW50MzIgZGlzdGFuY2UpOwogc3Rh dGljIGJvb2wgU2V0T2Zmc2V0VmFjdXVtTGltaXQoYm9vbCBpc19zdGFydHVwKTsKIHN0YXRpYyBi b29sIGZpbmRfbXVsdGl4YWN0X3N0YXJ0KE11bHRpWGFjdElkIG11bHRpLCBNdWx0aVhhY3RPZmZz ZXQgKnJlc3VsdCk7Ci1zdGF0aWMgdm9pZCBXcml0ZU1aZXJvUGFnZVhsb2dSZWMoaW50IHBhZ2Vu bywgdWludDggaW5mbyk7CitzdGF0aWMgWExvZ1JlY1B0ciBXcml0ZU1aZXJvUGFnZVhsb2dSZWMo aW50IHBhZ2VubywgdWludDggaW5mbyk7CiBzdGF0aWMgdm9pZCBXcml0ZU1UcnVuY2F0ZVhsb2dS ZWMoT2lkIG9sZGVzdE11bHRpREIsCiAJCQkJCQkJCSAgTXVsdGlYYWN0SWQgc3RhcnRUcnVuY09m ZiwKIAkJCQkJCQkJICBNdWx0aVhhY3RJZCBlbmRUcnVuY09mZiwKQEAgLTg3MSw3ICs4NzEsNyBA QCBSZWNvcmROZXdNdWx0aVhhY3QoTXVsdGlYYWN0SWQgbXVsdGksIE11bHRpWGFjdE9mZnNldCBv ZmZzZXQsCiAJLyogWFhYIHNldCB1cCBlcnJvciBjb250ZXh0PyAqLwogCWJ1ZmZlciA9IFJlYWRT bHJ1QnVmZmVyKFNMUlVfTVVMVElYQUNUX09GRlNFVF9JRCwgcGFnZW5vKTsKIAlMb2NrQnVmZmVy KGJ1ZmZlciwgQlVGRkVSX0xPQ0tfRVhDTFVTSVZFKTsKLQlvZmZwdHIgPSAoTXVsdGlYYWN0T2Zm c2V0ICopIEJ1ZmZlckdldFBhZ2UoYnVmZmVyKTsKKwlvZmZwdHIgPSAoTXVsdGlYYWN0T2Zmc2V0 ICopIChQYWdlR2V0Q29udGVudHMoQnVmZmVyR2V0UGFnZShidWZmZXIpKSk7CiAJb2ZmcHRyICs9 IGVudHJ5bm87CiAKIAkqb2ZmcHRyID0gb2Zmc2V0OwpAQCAtOTA4LDExICs5MDgsMTEgQEAgUmVj b3JkTmV3TXVsdGlYYWN0KE11bHRpWGFjdElkIG11bHRpLCBNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0 LAogCQkJcHJldl9wYWdlbm8gPSBwYWdlbm87CiAJCX0KIAotCQltZW1iZXJwdHIgPSAoVHJhbnNh Y3Rpb25JZCAqKSAoQnVmZmVyR2V0UGFnZShidWZmZXIpICsgbWVtYmVyb2ZmKTsKKwkJbWVtYmVy cHRyID0gKFRyYW5zYWN0aW9uSWQgKikgKFBhZ2VHZXRDb250ZW50cyhCdWZmZXJHZXRQYWdlKGJ1 ZmZlcikpICsgbWVtYmVyb2ZmKTsKIAogCQkqbWVtYmVycHRyID0gbWVtYmVyc1tpXS54aWQ7CiAK LQkJZmxhZ3NwdHIgPSAodWludDMyICopIChCdWZmZXJHZXRQYWdlKGJ1ZmZlcikgKyBmbGFnc29m Zik7CisJCWZsYWdzcHRyID0gKHVpbnQzMiAqKSAoUGFnZUdldENvbnRlbnRzKEJ1ZmZlckdldFBh Z2UoYnVmZmVyKSkgKyBmbGFnc29mZik7CiAKIAkJZmxhZ3N2YWwgPSAqZmxhZ3NwdHI7CiAJCWZs YWdzdmFsICY9IH4oKCgxIDw8IE1YQUNUX01FTUJFUl9CSVRTX1BFUl9YQUNUKSAtIDEpIDw8IGJz aGlmdCk7CkBAIC0xMzMzLDcgKzEzMzMsNyBAQCByZXRyeToKIAogCWJ1ZmZlciA9IFJlYWRTbHJ1 QnVmZmVyKFNMUlVfTVVMVElYQUNUX09GRlNFVF9JRCwgcGFnZW5vKTsKIAlMb2NrQnVmZmVyKGJ1 ZmZlciwgQlVGRkVSX0xPQ0tfU0hBUkUpOwotCW9mZnB0ciA9IChNdWx0aVhhY3RPZmZzZXQgKikg QnVmZmVyR2V0UGFnZShidWZmZXIpOworCW9mZnB0ciA9IChNdWx0aVhhY3RPZmZzZXQgKikgKFBh Z2VHZXRDb250ZW50cyhCdWZmZXJHZXRQYWdlKGJ1ZmZlcikpKTsKIAlvZmZwdHIgKz0gZW50cnlu bzsKIAlvZmZzZXQgPSAqb2ZmcHRyOwogCkBAIC0xMzcwLDcgKzEzNzAsNyBAQCByZXRyeToKIAkJ CUxvY2tCdWZmZXIoYnVmZmVyLCBCVUZGRVJfTE9DS19TSEFSRSk7CiAJCX0KIAotCQlvZmZwdHIg PSAoTXVsdGlYYWN0T2Zmc2V0ICopIEJ1ZmZlckdldFBhZ2UoYnVmZmVyKTsKKwkJb2ZmcHRyID0g KE11bHRpWGFjdE9mZnNldCAqKSAoUGFnZUdldENvbnRlbnRzKEJ1ZmZlckdldFBhZ2UoYnVmZmVy KSkpOwogCQlvZmZwdHIgKz0gZW50cnlubzsKIAkJbmV4dE1YT2Zmc2V0ID0gKm9mZnB0cjsKIApA QCAtMTQxMiw3ICsxNDEyLDcgQEAgcmV0cnk6CiAJCQlwcmV2X3BhZ2VubyA9IHBhZ2VubzsKIAkJ fQogCi0JCXhhY3RwdHIgPSAoVHJhbnNhY3Rpb25JZCAqKSAoQnVmZmVyR2V0UGFnZShidWZmZXIp ICsgbWVtYmVyb2ZmKTsKKwkJeGFjdHB0ciA9IChUcmFuc2FjdGlvbklkICopIChQYWdlR2V0Q29u dGVudHMoKEJ1ZmZlckdldFBhZ2UoYnVmZmVyKSkgKyBtZW1iZXJvZmYpKTsKIAogCQlpZiAoIVRy YW5zYWN0aW9uSWRJc1ZhbGlkKCp4YWN0cHRyKSkKIAkJewpAQCAtMTQyMyw3ICsxNDIzLDcgQEAg cmV0cnk6CiAKIAkJZmxhZ3NvZmYgPSBNWE9mZnNldFRvRmxhZ3NPZmZzZXQob2Zmc2V0KTsKIAkJ YnNoaWZ0ID0gTVhPZmZzZXRUb0ZsYWdzQml0U2hpZnQob2Zmc2V0KTsKLQkJZmxhZ3NwdHIgPSAo dWludDMyICopIChCdWZmZXJHZXRQYWdlKGJ1ZmZlcikgKyBmbGFnc29mZik7CisJCWZsYWdzcHRy ID0gKHVpbnQzMiAqKSAoUGFnZUdldENvbnRlbnRzKEJ1ZmZlckdldFBhZ2UoYnVmZmVyKSkgKyBm bGFnc29mZik7CiAKIAkJcHRyW3RydWVsZW5ndGhdLnhpZCA9ICp4YWN0cHRyOwogCQlwdHJbdHJ1 ZWxlbmd0aF0uc3RhdHVzID0gKCpmbGFnc3B0ciA+PiBic2hpZnQpICYgTVhBQ1RfTUVNQkVSX1hB Q1RfQklUTUFTSzsKQEAgLTE4ODgsMTIgKzE4ODgsMjAgQEAgc3RhdGljIEJ1ZmZlcgogWmVyb011 bHRpWGFjdE9mZnNldFBhZ2UoaW50IHBhZ2VubywgYm9vbCB3cml0ZVhsb2cpCiB7CiAJQnVmZmVy CQlidWZmZXI7CisJUGFnZQkJcGFnZTsKKwlYTG9nUmVjUHRyCXJlY3B0cjsKIAogCWJ1ZmZlciA9 IFplcm9TbHJ1QnVmZmVyKFNMUlVfTVVMVElYQUNUX09GRlNFVF9JRCwgcGFnZW5vKTsKIAlNYXJr QnVmZmVyRGlydHkoYnVmZmVyKTsKIAogCWlmICh3cml0ZVhsb2cpCi0JCVdyaXRlTVplcm9QYWdl WGxvZ1JlYyhwYWdlbm8sIFhMT0dfTVVMVElYQUNUX1pFUk9fT0ZGX1BBR0UpOworCXsKKwkJcmVj cHRyID0gV3JpdGVNWmVyb1BhZ2VYbG9nUmVjKHBhZ2VubywgWExPR19NVUxUSVhBQ1RfWkVST19P RkZfUEFHRSk7CisJCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1ZmZlcik7CisJCVBhZ2VTZXRIZWFk ZXJEYXRhTm9uUmVsKHBhZ2UsIHBhZ2VubywgcmVjcHRyLCBCTENLU1osIFBHX01FVEFQQUdFX0xB WU9VVF9WRVJTSU9OKTsKKwkJUGFnZVNldENoZWNrc3VtSW5wbGFjZShwYWdlLCBwYWdlbm8pOwor CX0KKwogCiAJcmV0dXJuIGJ1ZmZlcjsKIH0KQEAgLTE5MDUsMTIgKzE5MTMsMTkgQEAgc3RhdGlj IEJ1ZmZlcgogWmVyb011bHRpWGFjdE1lbWJlclBhZ2UoaW50IHBhZ2VubywgYm9vbCB3cml0ZVhs b2cpCiB7CiAJQnVmZmVyCQlidWZmZXI7CisJUGFnZSAJCXBhZ2U7CisJWExvZ1JlY1B0ciAJcmVj cHRyOwogCiAJYnVmZmVyID0gWmVyb1NscnVCdWZmZXIoU0xSVV9NVUxUSVhBQ1RfTUVNQkVSX0lE LCBwYWdlbm8pOwogCU1hcmtCdWZmZXJEaXJ0eShidWZmZXIpOwogCiAJaWYgKHdyaXRlWGxvZykK LQkJV3JpdGVNWmVyb1BhZ2VYbG9nUmVjKHBhZ2VubywgWExPR19NVUxUSVhBQ1RfWkVST19NRU1f UEFHRSk7CisJeworCQlyZWNwdHIgPSBXcml0ZU1aZXJvUGFnZVhsb2dSZWMocGFnZW5vLCBYTE9H X01VTFRJWEFDVF9aRVJPX01FTV9QQUdFKTsKKwkJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmZmVy KTsKKwkJUGFnZVNldEhlYWRlckRhdGFOb25SZWwocGFnZSwgcGFnZW5vLCByZWNwdHIsIEJMQ0tT WiwgUEdfTUVUQVBBR0VfTEFZT1VUX1ZFUlNJT04pOworCQlQYWdlU2V0Q2hlY2tzdW1JbnBsYWNl KHBhZ2UsIHBhZ2Vubyk7CisJfQogCiAJcmV0dXJuIGJ1ZmZlcjsKIH0KQEAgLTIwMDAsMTAgKzIw MTUsMTAgQEAgVHJpbU11bHRpWGFjdCh2b2lkKQogCiAJCWJ1ZmZlciA9IFJlYWRTbHJ1QnVmZmVy KFNMUlVfTVVMVElYQUNUX09GRlNFVF9JRCwgcGFnZW5vKTsKIAkJTG9ja0J1ZmZlcihidWZmZXIs IEJVRkZFUl9MT0NLX0VYQ0xVU0lWRSk7Ci0JCW9mZnB0ciA9IChNdWx0aVhhY3RPZmZzZXQgKikg QnVmZmVyR2V0UGFnZShidWZmZXIpOworCQlvZmZwdHIgPSAoTXVsdGlYYWN0T2Zmc2V0ICopIChQ YWdlR2V0Q29udGVudHMoQnVmZmVyR2V0UGFnZShidWZmZXIpKSk7CiAJCW9mZnB0ciArPSBlbnRy eW5vOwogCi0JCU1lbVNldChvZmZwdHIsIDAsIEJMQ0tTWiAtIChlbnRyeW5vICogc2l6ZW9mKE11 bHRpWGFjdE9mZnNldCkpKTsKKwkJTWVtU2V0KG9mZnB0ciwgMCwgQkxDS1NaIC0gTUFYQUxJR04o U2l6ZU9mUGFnZUhlYWRlckRhdGEpIC0gKGVudHJ5bm8gKiBzaXplb2YoTXVsdGlYYWN0T2Zmc2V0 KSkpOwogCiAJCU1hcmtCdWZmZXJEaXJ0eShidWZmZXIpOwogCQlVbmxvY2tSZWxlYXNlQnVmZmVy KGJ1ZmZlcik7CkBAIC0yMDI1LDkgKzIwNDAsOSBAQCBUcmltTXVsdGlYYWN0KHZvaWQpCiAJCW1l bWJlcm9mZiA9IE1YT2Zmc2V0VG9NZW1iZXJPZmZzZXQob2Zmc2V0KTsKIAkJYnVmZmVyID0gUmVh ZFNscnVCdWZmZXIoU0xSVV9NVUxUSVhBQ1RfTUVNQkVSX0lELCBwYWdlbm8pOwogCQlMb2NrQnVm ZmVyKGJ1ZmZlciwgQlVGRkVSX0xPQ0tfRVhDTFVTSVZFKTsKLQkJeGlkcHRyID0gKFRyYW5zYWN0 aW9uSWQgKikgKEJ1ZmZlckdldFBhZ2UoYnVmZmVyKSArIG1lbWJlcm9mZik7CisJCXhpZHB0ciA9 IChUcmFuc2FjdGlvbklkICopIChQYWdlR2V0Q29udGVudHMoQnVmZmVyR2V0UGFnZShidWZmZXIp KSArIG1lbWJlcm9mZik7CiAKLQkJTWVtU2V0KHhpZHB0ciwgMCwgQkxDS1NaIC0gbWVtYmVyb2Zm KTsKKwkJTWVtU2V0KHhpZHB0ciwgMCwgQkxDS1NaIC0gbWVtYmVyb2ZmIC0gTUFYQUxJR04oU2l6 ZU9mUGFnZUhlYWRlckRhdGEpKTsKIAogCQkvKgogCQkgKiBOb3RlOiB3ZSBkb24ndCBuZWVkIHRv IHplcm8gb3V0IHRoZSBmbGFnIGJpdHMgaW4gdGhlIHJlbWFpbmluZwpAQCAtMjY0OSw3ICsyNjY0 LDcgQEAgZmluZF9tdWx0aXhhY3Rfc3RhcnQoTXVsdGlYYWN0SWQgbXVsdGksIE11bHRpWGFjdE9m ZnNldCAqcmVzdWx0KQogCiAJYnVmZmVyID0gUmVhZFNscnVCdWZmZXIoU0xSVV9NVUxUSVhBQ1Rf T0ZGU0VUX0lELCBwYWdlbm8pOwogCUxvY2tCdWZmZXIoYnVmZmVyLCBCVUZGRVJfTE9DS19TSEFS RSk7Ci0Jb2ZmcHRyID0gKE11bHRpWGFjdE9mZnNldCAqKSBCdWZmZXJHZXRQYWdlKGJ1ZmZlcik7 CisJb2ZmcHRyID0gKE11bHRpWGFjdE9mZnNldCAqKSAoUGFnZUdldENvbnRlbnRzKEJ1ZmZlckdl dFBhZ2UoYnVmZmVyKSkpOwogCW9mZnB0ciArPSBlbnRyeW5vOwogCW9mZnNldCA9ICpvZmZwdHI7 CiAJVW5sb2NrUmVsZWFzZUJ1ZmZlcihidWZmZXIpOwpAQCAtMzA3MywxMiArMzA4OCwxNiBAQCBN dWx0aVhhY3RPZmZzZXRQcmVjZWRlcyhNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0MSwgTXVsdGlYYWN0 T2Zmc2V0IG9mZnNldDIpCiAgKiBXcml0ZSBhbiB4bG9nIHJlY29yZCByZWZsZWN0aW5nIHRoZSB6 ZXJvaW5nIG9mIGVpdGhlciBhIE1FTUJFUnMgb3IKICAqIE9GRlNFVHMgcGFnZSAoaW5mbyBzaG93 cyB3aGljaCkKICAqLwotc3RhdGljIHZvaWQKK3N0YXRpYyBYTG9nUmVjUHRyIAogV3JpdGVNWmVy b1BhZ2VYbG9nUmVjKGludCBwYWdlbm8sIHVpbnQ4IGluZm8pCiB7CisJWExvZ1JlY1B0ciByZWNw dHI7CisJCiAJWExvZ0JlZ2luSW5zZXJ0KCk7CiAJWExvZ1JlZ2lzdGVyRGF0YSgoY2hhciAqKSAo JnBhZ2VubyksIHNpemVvZihpbnQpKTsKLQkodm9pZCkgWExvZ0luc2VydChSTV9NVUxUSVhBQ1Rf SUQsIGluZm8pOworCXJlY3B0ciA9IFhMb2dJbnNlcnQoUk1fTVVMVElYQUNUX0lELCBpbmZvKTsK KworCXJldHVybiByZWNwdHI7CiB9CiAKIC8qCi0tIAoyLjM3LjEKCgpGcm9tIDZjYTNiM2M4NjAz MjNmMGM4MGJmNjQ4NDA5NDI5YTM3MGRiOGQyMTkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCkZy b206IFJpc2h1IEJhZ2dhIDxiYWdyaXNodUBhbWF6b24uY29tPgpEYXRlOiBGcmksIDE4IE5vdiAy MDIyIDAwOjM2OjQxICswMDAwClN1YmplY3Q6IFtQQVRDSCAxMC8xNV0gcmVtb3ZlIGV4dGVybmFs IGxzbiBsb2dpYyBmcm9tIGhlaWtraSBwYXRjaAoKLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJh bnNhbS9jbG9nLmMgICAgICB8IDI3ICsrKysrKysrKysrKystLS0tLS0tLS0tLS0tCiBzcmMvYmFj a2VuZC9hY2Nlc3MvdHJhbnNhbS9jb21taXRfdHMuYyB8ICA0ICsrLS0KIHNyYy9iYWNrZW5kL2Fj Y2Vzcy90cmFuc2FtL211bHRpeGFjdC5jIHwgMTYgKysrKysrKy0tLS0tLS0tCiBzcmMvYmFja2Vu ZC9hY2Nlc3MvdHJhbnNhbS9zbHJ1LmMgICAgICB8IDE4ICsrKysrKystLS0tLS0tLS0tCiBzcmMv YmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9zdWJ0cmFucy5jICB8ICA0ICsrLS0KIHNyYy9iYWNrZW5k L2NvbW1hbmRzL2FzeW5jLmMgICAgICAgICAgIHwgIDQgKystLQogc3JjL2JhY2tlbmQvc3RvcmFn ZS9idWZmZXIvYnVmbWdyLmMgICAgfCAyMiArKysrKystLS0tLS0tLS0tLS0tLS0KIHNyYy9iYWNr ZW5kL3N0b3JhZ2UvbG1nci9wcmVkaWNhdGUuYyAgIHwgIDQgKystLQogc3JjL2JhY2tlbmQvc3Rv cmFnZS9wYWdlL2J1ZnBhZ2UuYyAgICAgfCAgMiArLQogc3JjL2luY2x1ZGUvYWNjZXNzL3NscnUu aCAgICAgICAgICAgICAgfCAgMyArKy0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmggICAg ICAgICAgIHwgIDUgKysrKy0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmcGFnZS5oICAgICAgICAg IHwgIDcgKysrKystLQogMTIgZmlsZXMgY2hhbmdlZCwgNTUgaW5zZXJ0aW9ucygrKSwgNjEgZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vY2xvZy5j IGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vY2xvZy5jCmluZGV4IDEwM2JmNTg1YjdmLi44 YTlkODI5ZjNmZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vY2xvZy5j CisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL2Nsb2cuYwpAQCAtMzUwLDcgKzM1MCw3 IEBAIFRyYW5zYWN0aW9uSWRTZXRQYWdlU3RhdHVzSW50ZXJuYWwoVHJhbnNhY3Rpb25JZCB4aWQs IGludCBuc3VieGlkcywKIAkgKiB3cml0ZS1idXN5LCBzaW5jZSB3ZSBkb24ndCBjYXJlIGlmIHRo ZSB1cGRhdGUgcmVhY2hlcyBkaXNrIHNvb25lciB0aGFuCiAJICogd2UgdGhpbmsuCiAJICovCi0J YnVmZmVyID0gUmVhZFNscnVCdWZmZXIoU0xSVV9DTE9HX0lELCBwYWdlbm8pOworCWJ1ZmZlciA9 IFJlYWRTbHJ1QnVmZmVyKFNMUlVfQ0xPR19JRCwgcGFnZW5vLCBSQk1fTk9STUFMKTsKIAlMb2Nr QnVmZmVyKGJ1ZmZlciwgQlVGRkVSX0xPQ0tfRVhDTFVTSVZFKTsKIAogCS8qCkBAIC02MTQsOCAr NjE0LDggQEAgVHJhbnNhY3Rpb25JZFNldFN0YXR1c0JpdChUcmFuc2FjdGlvbklkIHhpZCwgWGlk U3RhdHVzIHN0YXR1cywgWExvZ1JlY1B0ciBsc24sIEIKIAkgKi8KIAlpZiAoIVhMb2dSZWNQdHJJ c0ludmFsaWQobHNuKSkKIAl7Ci0JCWlmIChCdWZmZXJHZXRFeHRlcm5hbExTTihHZXRCdWZmZXJE ZXNjcmlwdG9yKGJ1ZmZlcikpIDwgbHNuKQotCQkJQnVmZmVyU2V0RXh0ZXJuYWxMU04oR2V0QnVm ZmVyRGVzY3JpcHRvcihidWZmZXIpLCBsc24pOworCQlpZiAoUGFnZUdldExTTihCdWZmZXJHZXRQ YWdlKGJ1ZmZlcikpIDwgbHNuKQorCQkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKGJ1ZmZlciks IGxzbik7CiAJfQogfQogCkBAIC02NDQsMTMgKzY0NCwxMSBAQCBUcmFuc2FjdGlvbklkR2V0U3Rh dHVzKFRyYW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyICpsc24pCiAJWGlkU3RhdHVzCXN0YXR1 czsKIAlCdWZmZXIJCWJ1ZmZlcjsKIAotCWJ1ZmZlciA9IFJlYWRTbHJ1QnVmZmVyKFNMUlVfQ0xP R19JRCwgcGFnZW5vKTsKKwlidWZmZXIgPSBSZWFkU2xydUJ1ZmZlcihTTFJVX0NMT0dfSUQsIHBh Z2VubywgUkJNX05PUk1BTCk7CiAJYnl0ZXB0ciA9IFBhZ2VHZXRDb250ZW50cyhCdWZmZXJHZXRQ YWdlKGJ1ZmZlcikpICsgYnl0ZW5vOwogCiAJc3RhdHVzID0gKCpieXRlcHRyID4+IGJzaGlmdCkg JiBDTE9HX1hBQ1RfQklUTUFTSzsKIAotCSpsc24gPSBCdWZmZXJHZXRFeHRlcm5hbExTTihHZXRC dWZmZXJEZXNjcmlwdG9yKGJ1ZmZlcikpOwotCiAJUmVsZWFzZUJ1ZmZlcihidWZmZXIpOwogCiAJ cmV0dXJuIHN0YXR1czsKQEAgLTY5MywxNyArNjkxLDIwIEBAIFplcm9DTE9HUGFnZShpbnQgcGFn ZW5vLCBib29sIHdyaXRlWGxvZykKIAlYTG9nUmVjUHRyICBsc247CiAKIAlidWZmZXIgPSBaZXJv U2xydUJ1ZmZlcihTTFJVX0NMT0dfSUQsIHBhZ2Vubyk7Ci0JTWFya0J1ZmZlckRpcnR5KGJ1ZmZl cik7CisJCisJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmZmVyKTsKKworCVBhZ2VJbml0KHBhZ2Us IEJMQ0tTWiwgMCk7CiAKKwlsc24gPSAwOwogCWlmICh3cml0ZVhsb2cpCiAJewogCQlsc24gPSBX cml0ZVplcm9QYWdlWGxvZ1JlYyhwYWdlbm8pOwotCQlwYWdlID0gQnVmZmVyR2V0UGFnZShidWZm ZXIpOwotCQlQYWdlU2V0SGVhZGVyRGF0YU5vblJlbChwYWdlLCBwYWdlbm8sIGxzbiwgQkxDS1Na LCBQR19NRVRBUEFHRV9MQVlPVVRfVkVSU0lPTik7Ci0JCVBhZ2VTZXRDaGVja3N1bUlucGxhY2Uo cGFnZSwgcGFnZW5vKTsKLQogCX0KLQkJCisJCisJUGFnZVNldEhlYWRlckRhdGFOb25SZWwocGFn ZSwgcGFnZW5vLCBsc24sIEJMQ0tTWiwgUEdfTUVUQVBBR0VfTEFZT1VUX1ZFUlNJT04pOworCU1h cmtCdWZmZXJEaXJ0eShidWZmZXIpOworCiAJcmV0dXJuIGJ1ZmZlcjsKIH0KIApAQCAtNzQ0LDcg Kzc0NSw3IEBAIFRyaW1DTE9HKHZvaWQpCiAJCWNoYXIJICAgKmJ5dGVwdHI7CiAJCUJ1ZmZlcgkJ YnVmZmVyOwogCi0JCWJ1ZmZlciA9IFJlYWRTbHJ1QnVmZmVyKFNMUlVfQ0xPR19JRCwgcGFnZW5v KTsKKwkJYnVmZmVyID0gUmVhZFNscnVCdWZmZXIoU0xSVV9DTE9HX0lELCBwYWdlbm8sIFJCTV9U UklNKTsKIAkJTG9ja0J1ZmZlcihidWZmZXIsIEJVRkZFUl9MT0NLX0VYQ0xVU0lWRSk7CiAJCWJ5 dGVwdHIgPSBQYWdlR2V0Q29udGVudHMoQnVmZmVyR2V0UGFnZShidWZmZXIpKSArIGJ5dGVubzsK IApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vY29tbWl0X3RzLmMgYi9z cmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9jb21taXRfdHMuYwppbmRleCBmYTgzZjY0MmJiZS4u MzQ3OTJiYmQ2NjQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL2NvbW1p dF90cy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL2NvbW1pdF90cy5jCkBAIC0y MTUsNyArMjE1LDcgQEAgU2V0WGlkQ29tbWl0VHNJblBhZ2UoVHJhbnNhY3Rpb25JZCB4aWQsIGlu dCBuc3VieGlkcywKIAlpbnQJCQlpOwogCUJ1ZmZlcgkJYnVmZmVyOwogCi0JYnVmZmVyID0gUmVh ZFNscnVCdWZmZXIoU0xSVV9DT01NSVRfVFNfSUQsIHBhZ2Vubyk7CisJYnVmZmVyID0gUmVhZFNs cnVCdWZmZXIoU0xSVV9DT01NSVRfVFNfSUQsIHBhZ2VubywgUkJNX05PUk1BTCk7CiAJTG9ja0J1 ZmZlcihidWZmZXIsIEJVRkZFUl9MT0NLX0VYQ0xVU0lWRSk7CiAKIAlUcmFuc2FjdGlvbklkU2V0 Q29tbWl0VHMoeGlkLCB0cywgbm9kZWlkLCBidWZmZXIpOwpAQCAtMzI0LDcgKzMyNCw3IEBAIFRy YW5zYWN0aW9uSWRHZXRDb21taXRUc0RhdGEoVHJhbnNhY3Rpb25JZCB4aWQsIFRpbWVzdGFtcFR6 ICp0cywKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAotCWJ1ZmZlciA9IFJlYWRTbHJ1QnVmZmVyKFNM UlVfQ09NTUlUX1RTX0lELCBwYWdlbm8pOworCWJ1ZmZlciA9IFJlYWRTbHJ1QnVmZmVyKFNMUlVf Q09NTUlUX1RTX0lELCBwYWdlbm8sIFJCTV9OT1JNQUwpOwogCUxvY2tCdWZmZXIoYnVmZmVyLCBC VUZGRVJfTE9DS19TSEFSRSk7CiAKIAltZW1jcHkoJmVudHJ5LApkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4YWN0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJh bnNhbS9tdWx0aXhhY3QuYwppbmRleCAyMWY3Y2JkNTg1Mi4uMjAwNTliMmVhMjYgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5jCisrKyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5jCkBAIC04NjksNyArODY5LDcgQEAgUmVjb3Jk TmV3TXVsdGlYYWN0KE11bHRpWGFjdElkIG11bHRpLCBNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0LAog CSAqLwogCUVORF9DUklUX1NFQ1RJT04oKTsKIAkvKiBYWFggc2V0IHVwIGVycm9yIGNvbnRleHQ/ ICovCi0JYnVmZmVyID0gUmVhZFNscnVCdWZmZXIoU0xSVV9NVUxUSVhBQ1RfT0ZGU0VUX0lELCBw YWdlbm8pOworCWJ1ZmZlciA9IFJlYWRTbHJ1QnVmZmVyKFNMUlVfTVVMVElYQUNUX09GRlNFVF9J RCwgcGFnZW5vLCBSQk1fTk9STUFMKTsKIAlMb2NrQnVmZmVyKGJ1ZmZlciwgQlVGRkVSX0xPQ0tf RVhDTFVTSVZFKTsKIAlvZmZwdHIgPSAoTXVsdGlYYWN0T2Zmc2V0ICopIChQYWdlR2V0Q29udGVu dHMoQnVmZmVyR2V0UGFnZShidWZmZXIpKSk7CiAJb2ZmcHRyICs9IGVudHJ5bm87CkBAIC05MDMs NyArOTAzLDcgQEAgUmVjb3JkTmV3TXVsdGlYYWN0KE11bHRpWGFjdElkIG11bHRpLCBNdWx0aVhh Y3RPZmZzZXQgb2Zmc2V0LAogCQl7CiAJCQlpZiAoQnVmZmVySXNWYWxpZChidWZmZXIpKQogCQkJ CVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsKLQkJCWJ1ZmZlciA9IFJlYWRTbHJ1QnVmZmVy KFNMUlVfTVVMVElYQUNUX01FTUJFUl9JRCwgcGFnZW5vKTsKKwkJCWJ1ZmZlciA9IFJlYWRTbHJ1 QnVmZmVyKFNMUlVfTVVMVElYQUNUX01FTUJFUl9JRCwgcGFnZW5vLCBSQk1fTk9STUFMKTsKIAkJ CUxvY2tCdWZmZXIoYnVmZmVyLCBCVUZGRVJfTE9DS19FWENMVVNJVkUpOwogCQkJcHJldl9wYWdl bm8gPSBwYWdlbm87CiAJCX0KQEAgLTEzMzEsNyArMTMzMSw3IEBAIHJldHJ5OgogCXBhZ2VubyA9 IE11bHRpWGFjdElkVG9PZmZzZXRQYWdlKG11bHRpKTsKIAllbnRyeW5vID0gTXVsdGlYYWN0SWRU b09mZnNldEVudHJ5KG11bHRpKTsKIAotCWJ1ZmZlciA9IFJlYWRTbHJ1QnVmZmVyKFNMUlVfTVVM VElYQUNUX09GRlNFVF9JRCwgcGFnZW5vKTsKKwlidWZmZXIgPSBSZWFkU2xydUJ1ZmZlcihTTFJV X01VTFRJWEFDVF9PRkZTRVRfSUQsIHBhZ2VubywgUkJNX05PUk1BTCk7CiAJTG9ja0J1ZmZlcihi dWZmZXIsIEJVRkZFUl9MT0NLX1NIQVJFKTsKIAlvZmZwdHIgPSAoTXVsdGlYYWN0T2Zmc2V0ICop IChQYWdlR2V0Q29udGVudHMoQnVmZmVyR2V0UGFnZShidWZmZXIpKSk7CiAJb2ZmcHRyICs9IGVu dHJ5bm87CkBAIC0xMzY2LDcgKzEzNjYsNyBAQCByZXRyeToKIAkJaWYgKHBhZ2VubyAhPSBwcmV2 X3BhZ2VubykKIAkJewogCQkJVW5sb2NrUmVsZWFzZUJ1ZmZlcihidWZmZXIpOwotCQkJYnVmZmVy ID0gUmVhZFNscnVCdWZmZXIoU0xSVV9NVUxUSVhBQ1RfT0ZGU0VUX0lELCBwYWdlbm8pOworCQkJ YnVmZmVyID0gUmVhZFNscnVCdWZmZXIoU0xSVV9NVUxUSVhBQ1RfT0ZGU0VUX0lELCBwYWdlbm8s IFJCTV9OT1JNQUwpOwogCQkJTG9ja0J1ZmZlcihidWZmZXIsIEJVRkZFUl9MT0NLX1NIQVJFKTsK IAkJfQogCkBAIC0xNDA3LDcgKzE0MDcsNyBAQCByZXRyeToKIAkJewogCQkJaWYgKEJ1ZmZlcklz VmFsaWQoYnVmZmVyKSkKIAkJCQlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7Ci0JCQlidWZm ZXIgPSBSZWFkU2xydUJ1ZmZlcihTTFJVX01VTFRJWEFDVF9NRU1CRVJfSUQsIHBhZ2Vubyk7CisJ CQlidWZmZXIgPSBSZWFkU2xydUJ1ZmZlcihTTFJVX01VTFRJWEFDVF9NRU1CRVJfSUQsIHBhZ2Vu bywgUkJNX05PUk1BTCk7CiAJCQlMb2NrQnVmZmVyKGJ1ZmZlciwgQlVGRkVSX0xPQ0tfU0hBUkUp OwogCQkJcHJldl9wYWdlbm8gPSBwYWdlbm87CiAJCX0KQEAgLTIwMTMsNyArMjAxMyw3IEBAIFRy aW1NdWx0aVhhY3Qodm9pZCkKIAkJTXVsdGlYYWN0T2Zmc2V0ICpvZmZwdHI7CiAJCUJ1ZmZlcgkJ YnVmZmVyOwogCi0JCWJ1ZmZlciA9IFJlYWRTbHJ1QnVmZmVyKFNMUlVfTVVMVElYQUNUX09GRlNF VF9JRCwgcGFnZW5vKTsKKwkJYnVmZmVyID0gUmVhZFNscnVCdWZmZXIoU0xSVV9NVUxUSVhBQ1Rf T0ZGU0VUX0lELCBwYWdlbm8sIFJCTV9UUklNKTsKIAkJTG9ja0J1ZmZlcihidWZmZXIsIEJVRkZF Ul9MT0NLX0VYQ0xVU0lWRSk7CiAJCW9mZnB0ciA9IChNdWx0aVhhY3RPZmZzZXQgKikgKFBhZ2VH ZXRDb250ZW50cyhCdWZmZXJHZXRQYWdlKGJ1ZmZlcikpKTsKIAkJb2ZmcHRyICs9IGVudHJ5bm87 CkBAIC0yMDM4LDcgKzIwMzgsNyBAQCBUcmltTXVsdGlYYWN0KHZvaWQpCiAJCUJ1ZmZlcgkJYnVm ZmVyOwogCiAJCW1lbWJlcm9mZiA9IE1YT2Zmc2V0VG9NZW1iZXJPZmZzZXQob2Zmc2V0KTsKLQkJ YnVmZmVyID0gUmVhZFNscnVCdWZmZXIoU0xSVV9NVUxUSVhBQ1RfTUVNQkVSX0lELCBwYWdlbm8p OworCQlidWZmZXIgPSBSZWFkU2xydUJ1ZmZlcihTTFJVX01VTFRJWEFDVF9NRU1CRVJfSUQsIHBh Z2VubywgUkJNX1RSSU0pOwogCQlMb2NrQnVmZmVyKGJ1ZmZlciwgQlVGRkVSX0xPQ0tfRVhDTFVT SVZFKTsKIAkJeGlkcHRyID0gKFRyYW5zYWN0aW9uSWQgKikgKFBhZ2VHZXRDb250ZW50cyhCdWZm ZXJHZXRQYWdlKGJ1ZmZlcikpICsgbWVtYmVyb2ZmKTsKIApAQCAtMjY2Miw3ICsyNjYyLDcgQEAg ZmluZF9tdWx0aXhhY3Rfc3RhcnQoTXVsdGlYYWN0SWQgbXVsdGksIE11bHRpWGFjdE9mZnNldCAq cmVzdWx0KQogCQkhU2ltcGxlTHJ1RG9lc1BoeXNpY2FsUGFnZUV4aXN0KFNMUlVfTVVMVElYQUNU X09GRlNFVF9JRCwgcGFnZW5vKSkKIAkJcmV0dXJuIGZhbHNlOwogCi0JYnVmZmVyID0gUmVhZFNs cnVCdWZmZXIoU0xSVV9NVUxUSVhBQ1RfT0ZGU0VUX0lELCBwYWdlbm8pOworCWJ1ZmZlciA9IFJl YWRTbHJ1QnVmZmVyKFNMUlVfTVVMVElYQUNUX09GRlNFVF9JRCwgcGFnZW5vLCBSQk1fTk9STUFM KTsKIAlMb2NrQnVmZmVyKGJ1ZmZlciwgQlVGRkVSX0xPQ0tfU0hBUkUpOwogCW9mZnB0ciA9IChN dWx0aVhhY3RPZmZzZXQgKikgKFBhZ2VHZXRDb250ZW50cyhCdWZmZXJHZXRQYWdlKGJ1ZmZlcikp KTsKIAlvZmZwdHIgKz0gZW50cnlubzsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90 cmFuc2FtL3NscnUuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3NscnUuYwppbmRleCA4 ODkwNTAzYjdjZi4uMmQ4NDQ1ZTEzMDcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90 cmFuc2FtL3NscnUuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9zbHJ1LmMKQEAg LTM1NSw3ICszNTUsNyBAQCBTbHJ1U2NhbkRpcmVjdG9yeShpbnQgc2xydV9pZCwgU2xydVBhZ2VQ cmVjZWRlc0Z1bmN0aW9uIFBhZ2VQcmVjZWRlcywKICAqIFJlYWQgYSBidWZmZXIuICBCdWZmZXIg aXMgcGlubmVkIG9uIHJldHVybi4KICAqLwogQnVmZmVyCi1SZWFkU2xydUJ1ZmZlcihpbnQgc2xy dV9pZCwgaW50IHBhZ2VubykKK1JlYWRTbHJ1QnVmZmVyKGludCBzbHJ1X2lkLCBpbnQgcGFnZW5v LCBSZWFkQnVmZmVyTW9kZSBtb2RlKQogewogCWludAkJCXNlZ25vID0gcGFnZW5vIC8gU0xSVV9Q QUdFU19QRVJfU0VHTUVOVDsKIAlpbnQJCQlycGFnZW5vID0gcGFnZW5vICUgU0xSVV9QQUdFU19Q RVJfU0VHTUVOVDsKQEAgLTM3NSw3ICszNzUsNyBAQCBSZWFkU2xydUJ1ZmZlcihpbnQgc2xydV9p ZCwgaW50IHBhZ2VubykKIAogCS8qIFJlZ3VsYXIgbG9va3VwLiAqLwogCWJ1ZmZlciA9IFJlYWRC dWZmZXJXaXRob3V0UmVsY2FjaGVXaXRoSGl0KHJsb2NhdG9yLCBNQUlOX0ZPUktOVU0sIHJwYWdl bm8sCi0JCQkJCQkJCQkJCSAgUkJNX05PUk1BTCwgTlVMTCwgdHJ1ZSwgJmhpdCk7CisJCQkJCQkJ CQkJCSAgbW9kZSwgTlVMTCwgdHJ1ZSwgJmhpdCk7CiAKIAkvKiBSZW1lbWJlciB3aGVyZSB0aGlz IHBhZ2UgaXMgZm9yIG5leHQgdGltZS4gKi8KIAlzbHJ1X3JlY2VudF9idWZmZXJzW3NscnVfaWRd LnBhZ2VubyA9IHBhZ2VubzsKQEAgLTM5OSwxNSArMzk5LDExIEBAIFplcm9TbHJ1QnVmZmVyKGlu dCBzbHJ1X2lkLCBpbnQgcGFnZW5vKQogCUJ1ZmZlcgkJYnVmZmVyOwogCVNNZ3JGaWxlSGFuZGxl IHNmaWxlOwogCi0JaWYgKHJwYWdlbm8gPT0gMCkKLQl7Ci0JCXNmaWxlID0gc21ncm9wZW4ocmxv Y2F0b3IsIEludmFsaWRCYWNrZW5kSWQsIE1BSU5fRk9SS05VTSk7Ci0JCWlmICghc21ncmV4aXN0 cyhzZmlsZSkpCi0JCQlzbWdyY3JlYXRlKHNmaWxlLCBmYWxzZSk7Ci0JfQotCi0JYnVmZmVyID0g UmVhZEJ1ZmZlcldpdGhvdXRSZWxjYWNoZShybG9jYXRvciwgTUFJTl9GT1JLTlVNLCBycGFnZW5v LAotCQkJCQkJCQkJICAgUkJNX1pFUk9fQU5EX0xPQ0ssIE5VTEwsIHRydWUpOworCXNmaWxlID0g c21ncm9wZW4ocmxvY2F0b3IsIEludmFsaWRCYWNrZW5kSWQsIE1BSU5fRk9SS05VTSk7CisJaWYg KCFzbWdyZXhpc3RzKHNmaWxlKSkKKwkJc21ncmNyZWF0ZShzZmlsZSwgZmFsc2UpOworCQorCWJ1 ZmZlciA9IFJlYWRCdWZmZXJXaXRob3V0UmVsY2FjaGUocmxvY2F0b3IsIE1BSU5fRk9SS05VTSwg cnBhZ2VubywgUkJNX1pFUk9fQU5EX0xPQ0ssIE5VTEwsIHRydWUpOwogCiAJLyogUmVtZW1iZXIg d2hlcmUgdGhpcyBwYWdlIGlzIGZvciBuZXh0IHRpbWUuICovCiAJc2xydV9yZWNlbnRfYnVmZmVy c1tzbHJ1X2lkXS5wYWdlbm8gPSBwYWdlbm87CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nl c3MvdHJhbnNhbS9zdWJ0cmFucy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vc3VidHJh bnMuYwppbmRleCBjZWZkOTI4MDIxZC4uYjRiOGNiZjdkOTUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy90cmFuc2FtL3N1YnRyYW5zLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3Ry YW5zYW0vc3VidHJhbnMuYwpAQCAtNzQsNyArNzQsNyBAQCBTdWJUcmFuc1NldFBhcmVudChUcmFu c2FjdGlvbklkIHhpZCwgVHJhbnNhY3Rpb25JZCBwYXJlbnQpCiAJQXNzZXJ0KFRyYW5zYWN0aW9u SWRJc1ZhbGlkKHBhcmVudCkpOwogCUFzc2VydChUcmFuc2FjdGlvbklkRm9sbG93cyh4aWQsIHBh cmVudCkpOwogCi0JYnVmZmVyID0gUmVhZFNscnVCdWZmZXIoU0xSVV9TVUJUUkFOU19JRCwgcGFn ZW5vKTsKKwlidWZmZXIgPSBSZWFkU2xydUJ1ZmZlcihTTFJVX1NVQlRSQU5TX0lELCBwYWdlbm8s IFJCTV9OT1JNQUwpOwogCUxvY2tCdWZmZXIoYnVmZmVyLCBCVUZGRVJfTE9DS19FWENMVVNJVkUp OwogCXB0ciA9IChUcmFuc2FjdGlvbklkICopIEJ1ZmZlckdldFBhZ2UoYnVmZmVyKTsKIAlwdHIg Kz0gZW50cnlubzsKQEAgLTExMyw3ICsxMTMsNyBAQCBTdWJUcmFuc0dldFBhcmVudChUcmFuc2Fj dGlvbklkIHhpZCkKIAlpZiAoIVRyYW5zYWN0aW9uSWRJc05vcm1hbCh4aWQpKQogCQlyZXR1cm4g SW52YWxpZFRyYW5zYWN0aW9uSWQ7CiAKLQlidWZmZXIgPSBSZWFkU2xydUJ1ZmZlcihTTFJVX1NV QlRSQU5TX0lELCBwYWdlbm8pOworCWJ1ZmZlciA9IFJlYWRTbHJ1QnVmZmVyKFNMUlVfU1VCVFJB TlNfSUQsIHBhZ2VubywgUkJNX05PUk1BTCk7CiAKIAlwdHIgPSAoVHJhbnNhY3Rpb25JZCAqKSBC dWZmZXJHZXRQYWdlKGJ1ZmZlcik7CiAJcHRyICs9IGVudHJ5bm87CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9jb21tYW5kcy9hc3luYy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5bmMuYwpp bmRleCBmM2RjZmRmMjQ1Yi4uNDQ4YWEzOTAzM2UgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2FzeW5jLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5bmMuYwpAQCAtMTQy OSw3ICsxNDI5LDcgQEAgYXN5bmNRdWV1ZUFkZEVudHJpZXMoTGlzdENlbGwgKm5leHROb3RpZnkp CiAJfQogCWVsc2UKIAl7Ci0JCWJ1ZmZlciA9IFJlYWRTbHJ1QnVmZmVyKFNMUlVfTk9USUZZX0lE LCBwYWdlbm8pOworCQlidWZmZXIgPSBSZWFkU2xydUJ1ZmZlcihTTFJVX05PVElGWV9JRCwgcGFn ZW5vLCBSQk1fTk9STUFMKTsKIAkJTG9ja0J1ZmZlcihidWZmZXIsIEJVRkZFUl9MT0NLX0VYQ0xV U0lWRSk7CiAJfQogCkBAIC0xOTg2LDcgKzE5ODYsNyBAQCBhc3luY1F1ZXVlUmVhZEFsbE5vdGlm aWNhdGlvbnModm9pZCkKIAkJCSAqIHRyYW5zbWl0dGluZyB0aGVtIHRvIG91ciBmcm9udGVuZC4g IENvcHkgb25seSB0aGUgcGFydCBvZiB0aGUKIAkJCSAqIHBhZ2Ugd2Ugd2lsbCBhY3R1YWxseSBp bnNwZWN0LgogCQkJICovCi0JCQlidWZmZXIgPSBSZWFkU2xydUJ1ZmZlcihTTFJVX05PVElGWV9J RCwgY3VycGFnZSk7CisJCQlidWZmZXIgPSBSZWFkU2xydUJ1ZmZlcihTTFJVX05PVElGWV9JRCwg Y3VycGFnZSwgUkJNX05PUk1BTCk7CiAJCQlpZiAoY3VycGFnZSA9PSBRVUVVRV9QT1NfUEFHRSho ZWFkKSkKIAkJCXsKIAkJCQkvKiB3ZSBvbmx5IHdhbnQgdG8gcmVhZCBhcyBmYXIgYXMgaGVhZCAq LwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMgYi9zcmMv YmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwppbmRleCBmM2JiOTI3NTdlYy4uYzAwZTRj MTBkY2UgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jCisr KyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jCkBAIC02MiwxNiArNjIsMTIg QEAKICAqIG1lYW50aW1lIHdlIG5lZWQgc29tZSB3YXkgdG8gaWRlbnRpZnkgYnVmZmVycyB0aGF0 IGhvbGQgcmF3IGRhdGEgKG5vCiAgKiBpbnZhc2l2ZSBMU04sIG5vIGNoZWNrc3VtcykuCiAgKi8K LSNkZWZpbmUgQnVmZmVySGFzU3RhbmRhcmRQYWdlKGJ1ZkhkcikJCQlcCi0JKChidWZIZHIpLT50 YWcuc3BjT2lkICE9IDkpCi0KLSNkZWZpbmUgQnVmZmVySGFzRXh0ZXJuYWxMU04oYnVmSGRyKQkJ CVwKLQkhQnVmZmVySGFzU3RhbmRhcmRQYWdlKGJ1ZkhkcikKIAogLyogTm90ZTogdGhlc2UgdHdv IG1hY3JvcyBvbmx5IHdvcmsgb24gc2hhcmVkIGJ1ZmZlcnMsIG5vdCBsb2NhbCBvbmVzISAqLwog I2RlZmluZSBCdWZIZHJHZXRCbG9jayhidWZIZHIpCSgoQmxvY2spIChCdWZmZXJCbG9ja3MgKyAo KFNpemUpIChidWZIZHIpLT5idWZfaWQpICogQkxDS1NaKSkKKwogI2RlZmluZSBCdWZmZXJHZXRM U04oYnVmSGRyKSBcCi0JKEJ1ZmZlckhhc0V4dGVybmFsTFNOKGJ1ZkhkcikgPyBCdWZmZXJHZXRF eHRlcm5hbExTTihidWZIZHIpIDogUGFnZUdldExTTihCdWZIZHJHZXRCbG9jayhidWZIZHIpKSkK KwkJUGFnZUdldExTTihCdWZIZHJHZXRCbG9jayhidWZIZHIpKQogCiAvKiBOb3RlOiB0aGlzIG1h Y3JvIG9ubHkgd29ya3Mgb24gbG9jYWwgYnVmZmVycywgbm90IHNoYXJlZCBvbmVzISAqLwogI2Rl ZmluZSBMb2NhbEJ1ZkhkckdldEJsb2NrKGJ1ZkhkcikgXApAQCAtMTAzOSw5ICsxMDM1LDggQEAg UmVhZEJ1ZmZlcl9jb21tb24oU01nckZpbGVIYW5kbGUgc2ZpbGUsIGNoYXIgcmVscGVyc2lzdGVu Y2UsCiAJCQl9CiAKIAkJCS8qIGNoZWNrIGZvciBnYXJiYWdlIGRhdGEgKi8KLQkJCWlmIChCdWZm ZXJIYXNTdGFuZGFyZFBhZ2UoYnVmSGRyKSAmJgotCQkJCSFQYWdlSXNWZXJpZmllZEV4dGVuZGVk KChQYWdlKSBidWZCbG9jaywgYmxvY2tOdW0sCi0JCQkJCQkJCQkJUElWX0xPR19XQVJOSU5HIHwg UElWX1JFUE9SVF9TVEFUKSkKKwkJCWlmICgoIVBhZ2VJc1ZlcmlmaWVkRXh0ZW5kZWQoKFBhZ2Up IGJ1ZkJsb2NrLCBibG9ja051bSwKKwkJCQkJCQkJCQlQSVZfTE9HX1dBUk5JTkcgfCBQSVZfUkVQ T1JUX1NUQVQpKSAmJiAhKG1vZGUgPT0gUkJNX1RSSU0pKQogCQkJewogCQkJCWlmIChtb2RlID09 IFJCTV9aRVJPX09OX0VSUk9SIHx8IHplcm9fZGFtYWdlZF9wYWdlcykKIAkJCQl7CkBAIC0xNDY0 LDkgKzE0NTksNiBAQCBCdWZmZXJBbGxvYyhTTWdyRmlsZUhhbmRsZSBzZmlsZSwgY2hhciByZWxw ZXJzaXN0ZW5jZSwKIAogCUxXTG9ja1JlbGVhc2UobmV3UGFydGl0aW9uTG9jayk7CiAKLQlpZiAo QnVmZmVySGFzRXh0ZXJuYWxMU04oYnVmKSkKLQkJQnVmZmVyU2V0RXh0ZXJuYWxMU04oYnVmLCBJ bnZhbGlkWExvZ1JlY1B0cik7Ci0KIAkvKgogCSAqIEJ1ZmZlciBjb250ZW50cyBhcmUgY3VycmVu dGx5IGludmFsaWQuICBUcnkgdG8gb2J0YWluIHRoZSByaWdodCB0bwogCSAqIHN0YXJ0IEkvTy4g IElmIFN0YXJ0QnVmZmVySU8gcmV0dXJucyBmYWxzZSwgdGhlbiBzb21lb25lIGVsc2UgbWFuYWdl ZApAQCAtMzA0MywxMCArMzAzNSw4IEBAIEJ1ZmZlckdldExTTkF0b21pYyhCdWZmZXIgYnVmZmVy KQogCUFzc2VydChCdWZmZXJJc1Bpbm5lZChidWZmZXIpKTsKIAogCWJ1Zl9zdGF0ZSA9IExvY2tC dWZIZHIoYnVmSGRyKTsKLQlpZiAoQnVmZmVySGFzU3RhbmRhcmRQYWdlKGJ1ZkhkcikpCi0JCWxz biA9IFBhZ2VHZXRMU04ocGFnZSk7Ci0JZWxzZQotCQlsc24gPSBCdWZmZXJHZXRFeHRlcm5hbExT TihidWZIZHIpOworCWxzbiA9IFBhZ2VHZXRMU04ocGFnZSk7CisJCiAJVW5sb2NrQnVmSGRyKGJ1 ZkhkciwgYnVmX3N0YXRlKTsKIAogCXJldHVybiBsc247CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9zdG9yYWdlL2xtZ3IvcHJlZGljYXRlLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJl ZGljYXRlLmMKaW5kZXggNzA2YmIyODUyNjAuLmUzNDkxYjU3YWU2IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJlZGljYXRlLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFn ZS9sbWdyL3ByZWRpY2F0ZS5jCkBAIC05NTEsNyArOTUxLDcgQEAgU2VyaWFsQWRkKFRyYW5zYWN0 aW9uSWQgeGlkLCBTZXJDb21taXRTZXFObyBtaW5Db25mbGljdENvbW1pdFNlcU5vKQogCX0KIAll bHNlCiAJewotCQlidWZmZXIgPSBSZWFkU2xydUJ1ZmZlcihTTFJVX1NFUklBTF9JRCwgdGFyZ2V0 UGFnZSk7CisJCWJ1ZmZlciA9IFJlYWRTbHJ1QnVmZmVyKFNMUlVfU0VSSUFMX0lELCB0YXJnZXRQ YWdlLCBSQk1fTk9STUFMKTsKIAkJTG9ja0J1ZmZlcihidWZmZXIsIEJVRkZFUl9MT0NLX0VYQ0xV U0lWRSk7CiAJfQogCkBAIC05OTYsNyArOTk2LDcgQEAgU2VyaWFsR2V0TWluQ29uZmxpY3RDb21t aXRTZXFObyhUcmFuc2FjdGlvbklkIHhpZCkKIAkgKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9uIG11 c3QgYmUgY2FsbGVkIHdpdGhvdXQgaG9sZGluZyBTZXJpYWxTTFJVTG9jaywKIAkgKiBidXQgd2ls bCByZXR1cm4gd2l0aCB0aGF0IGxvY2sgaGVsZCwgd2hpY2ggbXVzdCB0aGVuIGJlIHJlbGVhc2Vk LgogCSAqLwotCWJ1ZmZlciA9IFJlYWRTbHJ1QnVmZmVyKFNMUlVfU0VSSUFMX0lELCBTZXJpYWxQ YWdlKHhpZCkpOworCWJ1ZmZlciA9IFJlYWRTbHJ1QnVmZmVyKFNMUlVfU0VSSUFMX0lELCBTZXJp YWxQYWdlKHhpZCksIFJCTV9OT1JNQUwpOwogCXZhbCA9IFNlcmlhbFZhbHVlKGJ1ZmZlciwgeGlk KTsKIAlSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CiAJTFdMb2NrUmVsZWFzZShTZXJpYWxTTFJVTG9j ayk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL3BhZ2UvYnVmcGFnZS5jIGIvc3Jj L2JhY2tlbmQvc3RvcmFnZS9wYWdlL2J1ZnBhZ2UuYwppbmRleCA4YjYxN2M3ZTc5ZC4uMTg0OWU3 MjgyYmYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvcGFnZS9idWZwYWdlLmMKKysr IGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9wYWdlL2J1ZnBhZ2UuYwpAQCAtMTAzLDcgKzEwMyw3IEBA IFBhZ2VJc1ZlcmlmaWVkRXh0ZW5kZWQoUGFnZSBwYWdlLCBCbG9ja051bWJlciBibGtubywgaW50 IGZsYWdzKQogCQlpZiAoRGF0YUNoZWNrc3Vtc0VuYWJsZWQoKSkKIAkJewogCQkJY2hlY2tzdW0g PSBwZ19jaGVja3N1bV9wYWdlKChjaGFyICopIHBhZ2UsIGJsa25vKTsKLQorCQkJCiAJCQlpZiAo Y2hlY2tzdW0gIT0gcC0+cGRfY2hlY2tzdW0pCiAJCQkJY2hlY2tzdW1fZmFpbHVyZSA9IHRydWU7 CiAJCX0KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9zbHJ1LmggYi9zcmMvaW5jbHVk ZS9hY2Nlc3Mvc2xydS5oCmluZGV4IGVlMWIyZjQwYzdlLi4wNGZjMDc4ZThjMyAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3NscnUuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3Mvc2xy dS5oCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSAiYWNjZXNzL3hsb2dkZWZzLmgiCiAjaW5j bHVkZSAiY2F0YWxvZy9wZ190YWJsZXNwYWNlX2QuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1Zi5o IgorI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sd2xvY2su aCIKICNpbmNsdWRlICJzdG9yYWdlL3NtZ3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL3N5bmMuaCIK QEAgLTg3LDcgKzg4LDcgQEAgZXh0ZXJuIGJvb2wgU2xydVNjYW5EaXJDYkRlbGV0ZUFsbChpbnQg c2xydV9pZCwgU2xydVBhZ2VQcmVjZWRlc0Z1bmN0aW9uIFBhZ2VQcmUKIAkJCQkJCQkJICAgdm9p ZCAqZGF0YSk7CiAKIC8qIEJ1ZmZlciBhY2Nlc3MgKi8KLWV4dGVybiBCdWZmZXIgUmVhZFNscnVC dWZmZXIoaW50IHNscnVfaWQsIGludCBwYWdlbm8pOworZXh0ZXJuIEJ1ZmZlciBSZWFkU2xydUJ1 ZmZlcihpbnQgc2xydV9pZCwgaW50IHBhZ2VubywgUmVhZEJ1ZmZlck1vZGUgbW9kZSk7CiBleHRl cm4gQnVmZmVyIFplcm9TbHJ1QnVmZmVyKGludCBzbHJ1X2lkLCBpbnQgcGFnZW5vKTsKIGV4dGVy biBib29sIFByb2JlU2xydUJ1ZmZlcihpbnQgc2xydV9pZCwgaW50IHBhZ2Vubyk7CiAKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdl L2J1Zm1nci5oCmluZGV4IGU0MWI0OGNmMmJmLi40Y2RkYjU5ZjUwMCAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1n ci5oCkBAIC00Miw4ICs0MiwxMSBAQCB0eXBlZGVmIGVudW0KIAlSQk1fWkVST19BTkRfQ0xFQU5V UF9MT0NLLAkvKiBMaWtlIFJCTV9aRVJPX0FORF9MT0NLLCBidXQgbG9ja3MgdGhlIHBhZ2UKIAkJ CQkJCQkJICogaW4gImNsZWFudXAiIG1vZGUgKi8KIAlSQk1fWkVST19PTl9FUlJPUiwJCQkvKiBS ZWFkLCBidXQgcmV0dXJuIGFuIGFsbC16ZXJvcyBwYWdlIG9uIGVycm9yICovCi0JUkJNX05PUk1B TF9OT19MT0cJCQkvKiBEb24ndCBsb2cgcGFnZSBhcyBpbnZhbGlkIGR1cmluZyBXQUwKKwlSQk1f Tk9STUFMX05PX0xPRywJCQkvKiBEb24ndCBsb2cgcGFnZSBhcyBpbnZhbGlkIGR1cmluZyBXQUwK IAkJCQkJCQkJICogcmVwbGF5OyBvdGhlcndpc2Ugc2FtZSBhcyBSQk1fTk9STUFMICovCisKKwlS Qk1fVFJJTQkJCQkvKlJlYWQgZm9yIFRSSU0gZnVuY3Rpb25zIGluIENMT0cgLyBNdWx0aVhhY3Qu IAorCQkJCQkJICBEb24ndCB2YWxpZGF0ZSBjaGVja3N1bSAgb3IgemVyby4gKi8JCiB9IFJlYWRC dWZmZXJNb2RlOwogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZwYWdl LmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1ZnBhZ2UuaAppbmRleCA4MzgwNWE0ODM1Ni4uZmIy YWM1MWQ3YjAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmcGFnZS5oCisrKyBi L3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmcGFnZS5oCkBAIC0zMTAsMTAgKzMxMCwxMyBAQCBQYWdl U2V0UGFnZVNpemVBbmRWZXJzaW9uKFBhZ2UgcGFnZSwgU2l6ZSBzaXplLCB1aW50OCB2ZXJzaW9u KQogI2RlZmluZSBQYWdlU2V0SGVhZGVyRGF0YU5vblJlbChwYWdlLCBwYWdlbm8sIGxzbiwgc2l6 ZSwgdmVyc2lvbikgXAogKCBcCiAJUGFnZVNldExTTihwYWdlLCBsc24pLCBcCi0JUGFnZVNldENo ZWNrc3VtSW5wbGFjZShwYWdlLCBwYWdlbm8pLCBcCi0JUGFnZVNldFBhZ2VTaXplQW5kVmVyc2lv bihwYWdlLCBzaXplLCB2ZXJzaW9uKVwKKwlQYWdlU2V0UGFnZVNpemVBbmRWZXJzaW9uKHBhZ2Us IHNpemUsIHZlcnNpb24pLCBcCisJUGFnZUNsZWFySGFzRnJlZUxpbmVQb2ludGVycyhwYWdlKSwg XAorCVBhZ2VTZXRDaGVja3N1bUlucGxhY2UocGFnZSwgcGFnZW5vKVwKICkKIAorCisKIC8qIC0t LS0tLS0tLS0tLS0tLS0KICAqCQlwYWdlIHNwZWNpYWwgZGF0YSBmdW5jdGlvbnMKICAqIC0tLS0t LS0tLS0tLS0tLS0KLS0gCjIuMzcuMQoKCkZyb20gNjkyOGEyYzVlODU1ZDA1ZmFhYzIyZjJlNWI5 ZjdjZGEyOGZjN2ZmYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKRnJvbTogUmlzaHUgQmFnZ2Eg PGJhZ3Jpc2h1QGFtYXpvbi5jb20+CkRhdGU6IFNhdCwgMTkgTm92IDIwMjIgMjE6NDM6MjIgKzAw MDAKU3ViamVjdDogW1BBVENIIDExLzE1XSB1cGRhdGUgZXhjZXB0aW9uIGZvciBzZXJpYWwgcGFn ZSBhc3NlcnRzIHRvIGlnbm9yZSB0d28KIHBhZ2VzLgoKLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdl L2xtZ3IvcHJlZGljYXRlLmMgfCA2ICsrKysrLQogMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9u cygrKSwgMSBkZWxldGlvbigtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1n ci9wcmVkaWNhdGUuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcmVkaWNhdGUuYwppbmRl eCBlMzQ5MWI1N2FlNi4uMmIxZmViY2Q1MGEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3Jh Z2UvbG1nci9wcmVkaWNhdGUuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJlZGlj YXRlLmMKQEAgLTg0MywxMCArODQzLDE0IEBAIFNlcmlhbFBhZ2VQcmVjZWRlc0xvZ2ljYWxseVVu aXRUZXN0cyh2b2lkKQogCSAqIHJlcXVpcmVzIGJ1cm5pbmcgfjJCIFhJRHMgaW4gc2luZ2xlLXVz ZXIgbW9kZSwgYSBuZWdsaWdpYmxlCiAJICogcG9zc2liaWxpdHkuICBNb3Jlb3ZlciwgaWYgaXQg ZG9lcyBoYXBwZW4sIHRoZSBjb25zZXF1ZW5jZSB3b3VsZCBiZQogCSAqIG1pbGQsIG5hbWVseSBh IG5ldyB0cmFuc2FjdGlvbiBmYWlsaW5nIGluIFNpbXBsZUxydVJlYWRQYWdlKCkuCisJICogCisJ ICogTk9URTogIEFmdGVyIGFkZGluZyBwYWdlIGhlYWRlcnMsIHRoZSBkZWZlY3QgYWZmZWN0cyB0 d28gcGFnZXMuCisJICogV2Ugbm93IGFzc2VydCBjb3JyZWN0IHRyZWF0bWVudCBvZiBpdHMgc2Vj b25kIHRvIHByaW9yIHBhZ2UuCisJICogCiAJICovCiAJaGVhZFBhZ2UgPSBvbGRlc3RQYWdlOwog CXRhcmdldFBhZ2UgPSBuZXdlc3RQYWdlOwotCUFzc2VydChTZXJpYWxQYWdlUHJlY2VkZXNMb2dp Y2FsbHkoaGVhZFBhZ2UsIHRhcmdldFBhZ2UgLSAxKSk7CisJQXNzZXJ0KFNlcmlhbFBhZ2VQcmVj ZWRlc0xvZ2ljYWxseShoZWFkUGFnZSwgdGFyZ2V0UGFnZSAtIDIpKTsKICNpZiAwCiAJQXNzZXJ0 KFNlcmlhbFBhZ2VQcmVjZWRlc0xvZ2ljYWxseShoZWFkUGFnZSwgdGFyZ2V0UGFnZSkpOwogI2Vu ZGlmCi0tIAoyLjM3LjEKCgpGcm9tIGUzOTU3OTA5YTIzNzI3MGRjMTI3MjY4MzA2ZjIwOTM4Mzgy N2M1YmMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCkZyb206IFJpc2h1IEJhZ2dhIDxiYWdyaXNo dUBhbWF6b24uY29tPgpEYXRlOiBXZWQsIDE2IE5vdiAyMDIyIDAyOjEzOjM4ICswMDAwClN1Ympl Y3Q6IFtQQVRDSCAxMi8xNV0gY29tbWl0IHRzIHBhZ2UgaW5pdCBmaXgKCi0tLQogc3JjL2JhY2tl bmQvYWNjZXNzL3RyYW5zYW0vY29tbWl0X3RzLmMgfCA4ICsrKysrLS0tCiAxIGZpbGUgY2hhbmdl ZCwgNSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy90cmFuc2FtL2NvbW1pdF90cy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5z YW0vY29tbWl0X3RzLmMKaW5kZXggMzQ3OTJiYmQ2NjQuLjk0N2NjM2NlZmFjIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9jb21taXRfdHMuYworKysgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvdHJhbnNhbS9jb21taXRfdHMuYwpAQCAtNTc1LDE0ICs1NzUsMTYgQEAgWmVyb0Nv bW1pdFRzUGFnZShpbnQgcGFnZW5vLCBib29sIHdyaXRlWGxvZykKIAlYTG9nUmVjUHRyICBsc247 CiAKIAlidWZmZXIgPSBaZXJvU2xydUJ1ZmZlcihTTFJVX0NPTU1JVF9UU19JRCwgcGFnZW5vKTsK LQlNYXJrQnVmZmVyRGlydHkoYnVmZmVyKTsKLQorCQorCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1 ZmZlcik7CisJUGFnZUluaXQocGFnZSwgQkxDS1NaLCAwKTsKKwkKIAlpZiAod3JpdGVYbG9nKQog CXsKIAkJbHNuID0gV3JpdGVaZXJvUGFnZVhsb2dSZWMocGFnZW5vKTsKLQkJcGFnZSA9IEJ1ZmZl ckdldFBhZ2UoYnVmZmVyKTsKIAkJUGFnZVNldEhlYWRlckRhdGFOb25SZWwocGFnZSwgcGFnZW5v LCBsc24sIEJMQ0tTWiwgUEdfTUVUQVBBR0VfTEFZT1VUX1ZFUlNJT04pOwogCX0KKwlNYXJrQnVm ZmVyRGlydHkoYnVmZmVyKTsKIAogCXJldHVybiBidWZmZXI7CiB9Ci0tIAoyLjM3LjEKCgpGcm9t IDU5YmYwYjI4ZDIyMTNiYmMwZTAyZWYyNTU1Yjk1ODNjYTQ0ZWVjNjIgTW9uIFNlcCAxNyAwMDow MDowMCAyMDAxCkZyb206IFJpc2h1IEJhZ2dhIDxiYWdyaXNodUBhbWF6b24uY29tPgpEYXRlOiBU aHUsIDE3IE5vdiAyMDIyIDIyOjExOjQ2ICswMDAwClN1YmplY3Q6IFtQQVRDSCAxMy8xNV0gYWRk IFBhZ2VJbml0U0xSVQoKLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9jbG9nLmMgICAg ICB8ICAyICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9jb21taXRfdHMuYyB8ICAyICst CiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3QuYyB8IDI0ICsrKysrKysrKysr KysrLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vc3VidHJhbnMuYyAgfCAg NCArKysrCiBzcmMvYmFja2VuZC9zdG9yYWdlL3BhZ2UvYnVmcGFnZS5jICAgICB8IDIxICsrKysr KysrKysrKysrKysrKysrKwogc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZwYWdlLmggICAgICAgICAg fCAgNCArKystCiA2IGZpbGVzIGNoYW5nZWQsIDQ0IGluc2VydGlvbnMoKyksIDEzIGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL2Nsb2cuYyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL2Nsb2cuYwppbmRleCA4YTlkODI5ZjNmZS4uZjA1YWIy MjQ3OWUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL2Nsb2cuYworKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9jbG9nLmMKQEAgLTY5NCw3ICs2OTQsNyBAQCBa ZXJvQ0xPR1BhZ2UoaW50IHBhZ2VubywgYm9vbCB3cml0ZVhsb2cpCiAJCiAJcGFnZSA9IEJ1ZmZl ckdldFBhZ2UoYnVmZmVyKTsKIAotCVBhZ2VJbml0KHBhZ2UsIEJMQ0tTWiwgMCk7CisJUGFnZUlu aXRTTFJVKHBhZ2UsIEJMQ0tTWiwgMCk7CiAKIAlsc24gPSAwOwogCWlmICh3cml0ZVhsb2cpCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9jb21taXRfdHMuYyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy90cmFuc2FtL2NvbW1pdF90cy5jCmluZGV4IDk0N2NjM2NlZmFjLi4xMzZh MGQ0NmNhMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vY29tbWl0X3Rz LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vY29tbWl0X3RzLmMKQEAgLTU3Nyw3 ICs1NzcsNyBAQCBaZXJvQ29tbWl0VHNQYWdlKGludCBwYWdlbm8sIGJvb2wgd3JpdGVYbG9nKQog CWJ1ZmZlciA9IFplcm9TbHJ1QnVmZmVyKFNMUlVfQ09NTUlUX1RTX0lELCBwYWdlbm8pOwogCQog CXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1ZmZlcik7Ci0JUGFnZUluaXQocGFnZSwgQkxDS1NaLCAw KTsKKwlQYWdlSW5pdFNMUlUocGFnZSwgQkxDS1NaLCAwKTsKIAkKIAlpZiAod3JpdGVYbG9nKQog CXsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5jIGIv c3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4YWN0LmMKaW5kZXggMjAwNTliMmVhMjYu LmUxYzg5ZjdkYmMxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0 aXhhY3QuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3QuYwpAQCAt MTg5MiwxNiArMTg5MiwxOCBAQCBaZXJvTXVsdGlYYWN0T2Zmc2V0UGFnZShpbnQgcGFnZW5vLCBi b29sIHdyaXRlWGxvZykKIAlYTG9nUmVjUHRyCXJlY3B0cjsKIAogCWJ1ZmZlciA9IFplcm9TbHJ1 QnVmZmVyKFNMUlVfTVVMVElYQUNUX09GRlNFVF9JRCwgcGFnZW5vKTsKLQlNYXJrQnVmZmVyRGly dHkoYnVmZmVyKTsKKwlwYWdlID0gQnVmZmVyR2V0UGFnZShidWZmZXIpOworCVBhZ2VJbml0U0xS VShwYWdlLCBCTENLU1osIDApOwogCisJcmVjcHRyID0gMDsKKwkKIAlpZiAod3JpdGVYbG9nKQog CXsKIAkJcmVjcHRyID0gV3JpdGVNWmVyb1BhZ2VYbG9nUmVjKHBhZ2VubywgWExPR19NVUxUSVhB Q1RfWkVST19PRkZfUEFHRSk7Ci0JCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1ZmZlcik7Ci0JCVBh Z2VTZXRIZWFkZXJEYXRhTm9uUmVsKHBhZ2UsIHBhZ2VubywgcmVjcHRyLCBCTENLU1osIFBHX01F VEFQQUdFX0xBWU9VVF9WRVJTSU9OKTsKLQkJUGFnZVNldENoZWNrc3VtSW5wbGFjZShwYWdlLCBw YWdlbm8pOwogCX0KIAorCVBhZ2VTZXRIZWFkZXJEYXRhTm9uUmVsKHBhZ2UsIHBhZ2VubywgcmVj cHRyLCBCTENLU1osIFBHX01FVEFQQUdFX0xBWU9VVF9WRVJTSU9OKTsKKwlNYXJrQnVmZmVyRGly dHkoYnVmZmVyKTsKIAogCXJldHVybiBidWZmZXI7CiB9CkBAIC0xOTE3LDE2ICsxOTE5LDE4IEBA IFplcm9NdWx0aVhhY3RNZW1iZXJQYWdlKGludCBwYWdlbm8sIGJvb2wgd3JpdGVYbG9nKQogCVhM b2dSZWNQdHIgCXJlY3B0cjsKIAogCWJ1ZmZlciA9IFplcm9TbHJ1QnVmZmVyKFNMUlVfTVVMVElY QUNUX01FTUJFUl9JRCwgcGFnZW5vKTsKLQlNYXJrQnVmZmVyRGlydHkoYnVmZmVyKTsKLQorCXBh Z2UgPSBCdWZmZXJHZXRQYWdlKGJ1ZmZlcik7CisJUGFnZUluaXRTTFJVKHBhZ2UsIEJMQ0tTWiwg MCk7CisJCQorCXJlY3B0ciA9IDA7CiAJaWYgKHdyaXRlWGxvZykKIAl7CiAJCXJlY3B0ciA9IFdy aXRlTVplcm9QYWdlWGxvZ1JlYyhwYWdlbm8sIFhMT0dfTVVMVElYQUNUX1pFUk9fTUVNX1BBR0Up OwotCQlwYWdlID0gQnVmZmVyR2V0UGFnZShidWZmZXIpOwotCQlQYWdlU2V0SGVhZGVyRGF0YU5v blJlbChwYWdlLCBwYWdlbm8sIHJlY3B0ciwgQkxDS1NaLCBQR19NRVRBUEFHRV9MQVlPVVRfVkVS U0lPTik7Ci0JCVBhZ2VTZXRDaGVja3N1bUlucGxhY2UocGFnZSwgcGFnZW5vKTsKIAl9Ci0KKwkK KwlQYWdlU2V0SGVhZGVyRGF0YU5vblJlbChwYWdlLCBwYWdlbm8sIHJlY3B0ciwgQkxDS1NaLCBQ R19NRVRBUEFHRV9MQVlPVVRfVkVSU0lPTik7CisJTWFya0J1ZmZlckRpcnR5KGJ1ZmZlcik7CisJ CiAJcmV0dXJuIGJ1ZmZlcjsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3Ry YW5zYW0vc3VidHJhbnMuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3N1YnRyYW5zLmMK aW5kZXggYjRiOGNiZjdkOTUuLmNlZGQ4YjkwZDQzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9h Y2Nlc3MvdHJhbnNhbS9zdWJ0cmFucy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2Ft L3N1YnRyYW5zLmMKQEAgLTIwNSw4ICsyMDUsMTIgQEAgc3RhdGljIEJ1ZmZlcgogWmVyb1NVQlRS QU5TUGFnZShpbnQgcGFnZW5vKQogewogCUJ1ZmZlcgkJYnVmZmVyOworCVBhZ2UgCQlwYWdlOwog CiAJYnVmZmVyID0gWmVyb1NscnVCdWZmZXIoU0xSVV9TVUJUUkFOU19JRCwgcGFnZW5vKTsKKwlw YWdlID0gQnVmZmVyR2V0UGFnZShidWZmZXIpOworCVBhZ2VJbml0U0xSVShwYWdlLCBCTENLU1os IDApOworCiAJTWFya0J1ZmZlckRpcnR5KGJ1ZmZlcik7CiAKIAlyZXR1cm4gYnVmZmVyOwpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9wYWdlL2J1ZnBhZ2UuYyBiL3NyYy9iYWNrZW5k L3N0b3JhZ2UvcGFnZS9idWZwYWdlLmMKaW5kZXggMTg0OWU3MjgyYmYuLjg1N2NjZTlhMjhjIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL3BhZ2UvYnVmcGFnZS5jCisrKyBiL3NyYy9i YWNrZW5kL3N0b3JhZ2UvcGFnZS9idWZwYWdlLmMKQEAgLTU5LDYgKzU5LDI3IEBAIFBhZ2VJbml0 KFBhZ2UgcGFnZSwgU2l6ZSBwYWdlU2l6ZSwgU2l6ZSBzcGVjaWFsU2l6ZSkKIAkvKiBwLT5wZF9w cnVuZV94aWQgPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsJCWRvbmUgYnkgYWJvdmUgTWVtU2V0ICov CiB9CiAKK3ZvaWQKK1BhZ2VJbml0U0xSVShQYWdlIHBhZ2UsIFNpemUgcGFnZVNpemUsIFNpemUg c3BlY2lhbFNpemUpCit7CisJUGFnZUhlYWRlcglwID0gKFBhZ2VIZWFkZXIpIHBhZ2U7CisKKwlz cGVjaWFsU2l6ZSA9IE1BWEFMSUdOKHNwZWNpYWxTaXplKTsKKworCUFzc2VydChwYWdlU2l6ZSA9 PSBCTENLU1opOworCUFzc2VydChwYWdlU2l6ZSA+IHNwZWNpYWxTaXplICsgU2l6ZU9mUGFnZUhl YWRlckRhdGEpOworCisJLyogTWFrZSBzdXJlIGFsbCBmaWVsZHMgb2YgcGFnZSBhcmUgemVybywg YXMgd2VsbCBhcyB1bnVzZWQgc3BhY2UgKi8KKwlNZW1TZXQocCwgMCwgcGFnZVNpemUpOworCisJ cC0+cGRfZmxhZ3MgPSAwOworCXAtPnBkX2xvd2VyID0gU2l6ZU9mUGFnZUhlYWRlckRhdGE7CisJ cC0+cGRfdXBwZXIgPSBwYWdlU2l6ZSAtIHNwZWNpYWxTaXplOworCXAtPnBkX3NwZWNpYWwgPSBw YWdlU2l6ZSAtIHNwZWNpYWxTaXplOworCVBhZ2VTZXRQYWdlU2l6ZUFuZFZlcnNpb24ocGFnZSwg cGFnZVNpemUsIFBHX01FVEFQQUdFX0xBWU9VVF9WRVJTSU9OKTsKKwkvKiBwLT5wZF9wcnVuZV94 aWQgPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsJCWRvbmUgYnkgYWJvdmUgTWVtU2V0ICovCit9CisK IAogLyoKICAqIFBhZ2VJc1ZlcmlmaWVkRXh0ZW5kZWQKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L3N0b3JhZ2UvYnVmcGFnZS5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZwYWdlLmgKaW5kZXgg ZmIyYWM1MWQ3YjAuLjM4NzFhMzg2ZDRiIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdl L2J1ZnBhZ2UuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1ZnBhZ2UuaApAQCAtMzEyLDcg KzMxMiw3IEBAIFBhZ2VTZXRQYWdlU2l6ZUFuZFZlcnNpb24oUGFnZSBwYWdlLCBTaXplIHNpemUs IHVpbnQ4IHZlcnNpb24pCiAJUGFnZVNldExTTihwYWdlLCBsc24pLCBcCiAJUGFnZVNldFBhZ2VT aXplQW5kVmVyc2lvbihwYWdlLCBzaXplLCB2ZXJzaW9uKSwgXAogCVBhZ2VDbGVhckhhc0ZyZWVM aW5lUG9pbnRlcnMocGFnZSksIFwKLQlQYWdlU2V0Q2hlY2tzdW1JbnBsYWNlKHBhZ2UsIHBhZ2Vu bylcCisJUGFnZVNldENoZWNrc3VtSW5wbGFjZShwYWdlLCBwYWdlbm8pIFwKICkKIAogCkBAIC01 MDEsNiArNTAxLDggQEAgU3RhdGljQXNzZXJ0RGVjbChCTENLU1ogPT0gKChCTENLU1ogLyBzaXpl b2Yoc2l6ZV90KSkgKiBzaXplb2Yoc2l6ZV90KSksCiAJCQkJICJCTENLU1ogaGFzIHRvIGJlIGEg bXVsdGlwbGUgb2Ygc2l6ZW9mKHNpemVfdCkiKTsKIAogZXh0ZXJuIHZvaWQgUGFnZUluaXQoUGFn ZSBwYWdlLCBTaXplIHBhZ2VTaXplLCBTaXplIHNwZWNpYWxTaXplKTsKK2V4dGVybiB2b2lkIFBh Z2VJbml0U0xSVShQYWdlIHBhZ2UsIFNpemUgcGFnZVNpemUsIFNpemUgc3BlY2lhbFNpemUpOwor CiBleHRlcm4gYm9vbCBQYWdlSXNWZXJpZmllZEV4dGVuZGVkKFBhZ2UgcGFnZSwgQmxvY2tOdW1i ZXIgYmxrbm8sIGludCBmbGFncyk7CiBleHRlcm4gT2Zmc2V0TnVtYmVyIFBhZ2VBZGRJdGVtRXh0 ZW5kZWQoUGFnZSBwYWdlLCBJdGVtIGl0ZW0sIFNpemUgc2l6ZSwKIAkJCQkJCQkJCQlPZmZzZXRO dW1iZXIgb2Zmc2V0TnVtYmVyLCBpbnQgZmxhZ3MpOwotLSAKMi4zNy4xCgoKRnJvbSAxZmEzOGJj NzU3N2YxYzZlNmQyN2MwNTI5NmE0YTFkYTFjOTM4YjZkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAw MQpGcm9tOiBSaXNodSBCYWdnYSA8YmFncmlzaHVAYW1hem9uLmNvbT4KRGF0ZTogRnJpLCAxOCBO b3YgMjAyMiAwNDoxNDo1MyArMDAwMApTdWJqZWN0OiBbUEFUQ0ggMTQvMTVdIHBhZ2UgaGVhZGVy IG9uIHN1YnRyYW5zCgotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3N1YnRyYW5zLmMg fCA4ICsrKystLS0tCiAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3N1YnRyYW5zLmMg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9zdWJ0cmFucy5jCmluZGV4IGNlZGQ4YjkwZDQz Li40N2UwMGMxODc2NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vc3Vi dHJhbnMuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9zdWJ0cmFucy5jCkBAIC01 MCw3ICs1MCw3IEBACiAgKi8KIAogLyogV2UgbmVlZCBmb3VyIGJ5dGVzIHBlciB4YWN0ICovCi0j ZGVmaW5lIFNVQlRSQU5TX1hBQ1RTX1BFUl9QQUdFIChCTENLU1ogLyBzaXplb2YoVHJhbnNhY3Rp b25JZCkpCisjZGVmaW5lIFNVQlRSQU5TX1hBQ1RTX1BFUl9QQUdFICgoQkxDS1NaIC0gU2l6ZU9m UGFnZUhlYWRlckRhdGEpIC8gc2l6ZW9mKFRyYW5zYWN0aW9uSWQpKQogCiAjZGVmaW5lIFRyYW5z YWN0aW9uSWRUb1BhZ2UoeGlkKSAoKHhpZCkgLyAoVHJhbnNhY3Rpb25JZCkgU1VCVFJBTlNfWEFD VFNfUEVSX1BBR0UpCiAjZGVmaW5lIFRyYW5zYWN0aW9uSWRUb0VudHJ5KHhpZCkgKCh4aWQpICUg KFRyYW5zYWN0aW9uSWQpIFNVQlRSQU5TX1hBQ1RTX1BFUl9QQUdFKQpAQCAtNzYsNyArNzYsNyBA QCBTdWJUcmFuc1NldFBhcmVudChUcmFuc2FjdGlvbklkIHhpZCwgVHJhbnNhY3Rpb25JZCBwYXJl bnQpCiAKIAlidWZmZXIgPSBSZWFkU2xydUJ1ZmZlcihTTFJVX1NVQlRSQU5TX0lELCBwYWdlbm8s IFJCTV9OT1JNQUwpOwogCUxvY2tCdWZmZXIoYnVmZmVyLCBCVUZGRVJfTE9DS19FWENMVVNJVkUp OwotCXB0ciA9IChUcmFuc2FjdGlvbklkICopIEJ1ZmZlckdldFBhZ2UoYnVmZmVyKTsKKwlwdHIg PSAoVHJhbnNhY3Rpb25JZCAqKSBQYWdlR2V0Q29udGVudHMoQnVmZmVyR2V0UGFnZShidWZmZXIp KTsKIAlwdHIgKz0gZW50cnlubzsKIAogCS8qCkBAIC0xMTUsNyArMTE1LDcgQEAgU3ViVHJhbnNH ZXRQYXJlbnQoVHJhbnNhY3Rpb25JZCB4aWQpCiAKIAlidWZmZXIgPSBSZWFkU2xydUJ1ZmZlcihT TFJVX1NVQlRSQU5TX0lELCBwYWdlbm8sIFJCTV9OT1JNQUwpOwogCi0JcHRyID0gKFRyYW5zYWN0 aW9uSWQgKikgQnVmZmVyR2V0UGFnZShidWZmZXIpOworCXB0ciA9IChUcmFuc2FjdGlvbklkICop IFBhZ2VHZXRDb250ZW50cyhCdWZmZXJHZXRQYWdlKGJ1ZmZlcikpOwogCXB0ciArPSBlbnRyeW5v OwogCiAJcGFyZW50ID0gKnB0cjsKQEAgLTIwNSw3ICsyMDUsNyBAQCBzdGF0aWMgQnVmZmVyCiBa ZXJvU1VCVFJBTlNQYWdlKGludCBwYWdlbm8pCiB7CiAJQnVmZmVyCQlidWZmZXI7Ci0JUGFnZSAJ CXBhZ2U7CisJUGFnZQkJcGFnZTsKIAogCWJ1ZmZlciA9IFplcm9TbHJ1QnVmZmVyKFNMUlVfU1VC VFJBTlNfSUQsIHBhZ2Vubyk7CiAJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmZmVyKTsKLS0gCjIu MzcuMQoKCkZyb20gMmY5MDcwMWRhZDk3ZTk1YWU2MWZkMDcyZjdlYmVkZGY0MTI4NGNlMSBNb24g U2VwIDE3IDAwOjAwOjAwIDIwMDEKRnJvbTogUmlzaHUgQmFnZ2EgPGJhZ3Jpc2h1QGFtYXpvbi5j b20+CkRhdGU6IEZyaSwgMTggTm92IDIwMjIgMDQ6MDM6NDYgKzAwMDAKU3ViamVjdDogW1BBVENI IDE1LzE1XSB1cGdyYWRlCgpjcjogaHR0cHM6Ly9jb2RlLmFtYXpvbi5jb20vcmV2aWV3cy9DUi03 OTg3NzM5MAotLS0KIHNyYy9iaW4vcGdfdXBncmFkZS9maWxlLmMgICAgICAgIHwgMTc1ICsrKysr KysrKysrKysrKysrKysrKysrKysrKysrKy0KIHNyYy9iaW4vcGdfdXBncmFkZS9mdW5jdGlvbi5j ICAgIHwgIDY2ICsrKysrKysrKysrKwogc3JjL2Jpbi9wZ191cGdyYWRlL3BnX3VwZ3JhZGUuYyAg fCAgNzYgKysrKysrKysrKysrLS0KIHNyYy9iaW4vcGdfdXBncmFkZS9wZ191cGdyYWRlLmggIHwg IDE5ICsrKy0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9zbHJ1ZGVmcy5oICAgIHwgIDE5ICsrKysKIHNy Yy9pbmNsdWRlL2NhdGFsb2cvY2F0dmVyc2lvbi5oIHwgICAzICstCiA2IGZpbGVzIGNoYW5nZWQs IDM0MyBpbnNlcnRpb25zKCspLCAxNSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBz cmMvaW5jbHVkZS9hY2Nlc3Mvc2xydWRlZnMuaAoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfdXBn cmFkZS9maWxlLmMgYi9zcmMvYmluL3BnX3VwZ3JhZGUvZmlsZS5jCmluZGV4IDA3OWZiZGE4Mzg5 Li42Yjc2YTZiZjdlNSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ191cGdyYWRlL2ZpbGUuYworKysg Yi9zcmMvYmluL3BnX3VwZ3JhZGUvZmlsZS5jCkBAIC0yMCw2ICsyMCw3IEBACiAjZW5kaWYKIAog I2luY2x1ZGUgImFjY2Vzcy92aXNpYmlsaXR5bWFwZGVmcy5oIgorI2luY2x1ZGUgImFjY2Vzcy9z bHJ1ZGVmcy5oIgogI2luY2x1ZGUgImNvbW1vbi9maWxlX3Blcm0uaCIKICNpbmNsdWRlICJwZ191 cGdyYWRlLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9idWZwYWdlLmgiCkBAIC0xMzksNyArMTQwLDYg QEAgY29weUZpbGUoY29uc3QgY2hhciAqc3JjLCBjb25zdCBjaGFyICpkc3QsCiAjZW5kaWYJCQkJ CQkJLyogV0lOMzIgKi8KIH0KIAotCiAvKgogICogbGlua0ZpbGUoKQogICoKQEAgLTMxNiw2ICsz MTYsMTc5IEBAIHJld3JpdGVWaXNpYmlsaXR5TWFwKGNvbnN0IGNoYXIgKmZyb21maWxlLCBjb25z dCBjaGFyICp0b2ZpbGUsCiAJY2xvc2Uoc3JjX2ZkKTsKIH0KIAorCisvL2NyZWF0ZSBuZXcgZmls ZSBhbmQgaW5pdGlhbGl6ZSB0byAyNTZLCitzdGF0aWMgaW50Citpbml0X25ld19zbHJ1X2ZpbGUo RklMRSAqIGZwKQoreyAKKwlpbnQgZmQ7CisJaW50IHJlczsKKwkKKwlmZCA9IGZpbGVubyhmcCk7 CisJcmVzID0gZnRydW5jYXRlKGZkLCBCTENLU1ogKiBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UKTsK KwlyZXR1cm4gcmVzOworfQorCitpbnQgCitjb3B5X3RvX25ld19mb3JtYXQoY29uc3QgY2hhciAq b2xkX3N1YmRpciwgY29uc3QgY2hhciAqbmV3X3N1YmRpciwgaW50IGVsZW1lbnRfc2l6ZSkgCit7 CisJRElSICpkcjsKKwlzdHJ1Y3QgZGlyZW50ICpkZTsKKwkKKwlzaXplX3QgCXJlYWRfaXRlbXM7 CisJc2l6ZV90IAluX2l0ZW1zOworCXNpemVfdCAJdG9fcmVhZF9pdGVtczsKKwlzaXplX3QgCXdy aXRlX2l0ZW1zOworCXNpemVfdCAJcGFnZXNfd3JpdHRlbjsKKwlzaXplX3QgCXdyaXRlX29mZnNl dDsKKworCWNoYXIgKiAJcmVhZF9maWxlOwkKKwljaGFyICogCXdyaXRlX2ZpbGU7CisJCisJaW50 IAlyZXM7CisJaW50IAl3cml0ZV9maWxlX3NlZ25vOworCWludCAJdG90YWxfcmVhZF9maWxlczsK KwkKKwlGSUxFICogCW9sZF9mZDsgCisJRklMRSAqIAluZXdfZnA7CisKKyNkZWZpbmUgTUFYQlVG U0laRSAoQkxDS1NaIC0gU2l6ZU9mUGFnZUhlYWRlckRhdGEpCisKKwljaGFyCW9sZF9wYXRoW01B WFBHUEFUSF07CisJY2hhcgluZXdfcGF0aFtNQVhQR1BBVEhdOworCVBHQWxpZ25lZEJsb2NrIHBn X2J1ZjsKKwlCbG9ja051bWJlciBibGtubzsgLy90cmFjayBhYm9zbHV0ZSBibG9jayBudW1iZXIK KwkKKworCXN0cnVjdCAJZGlyZW50KiogYWxsX2RpcmVudHM7CisKKworCXNucHJpbnRmKG9sZF9w YXRoLCBzaXplb2Yob2xkX3BhdGgpLCAiJXMvJXMiLCBvbGRfY2x1c3Rlci5wZ2RhdGEsIG9sZF9z dWJkaXIpOworCXNucHJpbnRmKG5ld19wYXRoLCBzaXplb2YobmV3X3BhdGgpLCAiJXMvJXMiLCBu ZXdfY2x1c3Rlci5wZ2RhdGEsIG5ld19zdWJkaXIpOworCisJLyogCisJICogY2FsY3VsYXRlIHRo ZSBudW1iZXIgb2YgaXRlbXMgdGhhdCBjYW4gZml0IAorCSAqIGluc2lkZSBCTENLU1ogLSBTaXpl T2ZQYWdlSGVhZGVyRGF0YQorCSAqLworCisJbl9pdGVtcyA9IChzaXplX3QpIChNQVhCVUZTSVpF IC8gZWxlbWVudF9zaXplKTsgCisJCisJLyogbnVtYmVyIG9mIGl0ZW1zIHRvIHJlYWQgaW4gYXQg YSB0aW1lICovCisJdG9fcmVhZF9pdGVtcyA9IG5faXRlbXM7CisJCisJLy9idWZzaXplID0gKHNp emVfdCkgKG5faXRlbXMgKiBlbGVtZW50X3NpemUpOyAKKwl3cml0ZV9maWxlX3NlZ25vID0gMDsg LyogdHJhY2sgd2hpY2ggc2VnbWVudCB3ZSBhcmUgd3JpdGluZyBpbnRvICovCisJd3JpdGVfb2Zm c2V0ID0gKHNpemVfdCkgKFNpemVPZlBhZ2VIZWFkZXJEYXRhKTsgCisKKwlkciA9IG9wZW5kaXIo KGNoYXIgKilvbGRfcGF0aCk7CisJaWYgKGRyID09IE5VTEwpCisJCXJldHVybiAtMTsKKworCXdy aXRlX2ZpbGUgPSBwc3ByaW50ZigiJXMvJTA0WCIsIG5ld19wYXRoLCB3cml0ZV9maWxlX3NlZ25v KTsKKwkKKwluZXdfZnAgPSBmb3Blbih3cml0ZV9maWxlLCAid2IiKTsKKwkKKwlpZiAobmV3X2Zw ID09IE5VTEwpCisJCXJldHVybiAtMTsKKworCXJlcyA9IGluaXRfbmV3X3NscnVfZmlsZShuZXdf ZnApOworCWlmIChyZXMgPCAwKQkKKwkJcmV0dXJuIC0xOworCisJaWYgKHJlcyA8IDApCisJCXJl dHVybiAtMTsKKworCXBhZ2VzX3dyaXR0ZW4gPSAwOworCWJsa25vID0gMDsgLyogYWJzb2x1dGUg Ymxrbm8gKi8KKworCWFsbF9kaXJlbnRzID0gZ2V0X3NvcnRlZF9oZXhfZmlsZXMob2xkX3BhdGgs ICZ0b3RhbF9yZWFkX2ZpbGVzKTsKKworCXdyaXRlX2l0ZW1zID0gMDsKKwlmb3IgKGludCBpID0g MDsgaSA8IHRvdGFsX3JlYWRfZmlsZXM7IGkrKykKKwl7CisJCWRlID0gYWxsX2RpcmVudHNbaV07 CisJCQorCQlpZiAoKCFzdHJjbXAoKGNoYXIgKikgZGUtPmRfbmFtZSwgIi4iKSkgfHwgIXN0cmNt cCgoY2hhciAqKSBkZS0+ZF9uYW1lLCAiLi4iKSkKKwkgCXsKKwkJCWNvbnRpbnVlOworCSAJfQor CisJCXJlYWRfZmlsZSA9IHBzcHJpbnRmKCIlcy8lcyIsIChjaGFyICopIG9sZF9wYXRoLCAoY2hh ciAqKSBkZS0+ZF9uYW1lKTsKKwkJCisJCW9sZF9mZCA9IGZvcGVuKHJlYWRfZmlsZSwgInJiIik7 CisJCXJlYWRfaXRlbXMgPSAwOworCQkKKwkJZG8gCisJCXsKKwkJCW1lbXNldChwZ19idWYuZGF0 YSwgMCwgQkxDS1NaKTsJCQorCQkJcmVhZF9pdGVtcyA9IGZyZWFkKHBnX2J1Zi5kYXRhICsgd3Jp dGVfb2Zmc2V0LCBlbGVtZW50X3NpemUsIHRvX3JlYWRfaXRlbXMsIG9sZF9mZCk7ICAvKiBob3cg bWFueSBpdGVtcyB3ZSByZWFkICovCisKKwkJCWlmICh0b19yZWFkX2l0ZW1zID09IG5faXRlbXMp IC8qIG5vdCBmaW5pc2hpbmcgdXAgYSBwYXJ0aWFsIHJlYWQgKi8KKwkJCXsKKworCQkJCSgoUGFn ZUhlYWRlcikgcGdfYnVmLmRhdGEpLT5wZF9sb3dlciA9IFNpemVPZlBhZ2VIZWFkZXJEYXRhOwor CQkJCSgoUGFnZUhlYWRlcikgcGdfYnVmLmRhdGEpLT5wZF91cHBlciA9IEJMQ0tTWjsKKwkJCQko KFBhZ2VIZWFkZXIpIHBnX2J1Zi5kYXRhKS0+cGRfc3BlY2lhbCA9IEJMQ0tTWjsKKwkJCQkKKwkJ CQkoKFBhZ2VIZWFkZXIpIHBnX2J1Zi5kYXRhKS0+cGRfY2hlY2tzdW0gPQorCQkJCQlwZ19jaGVj a3N1bV9wYWdlKHBnX2J1Zi5kYXRhLCBibGtubyk7CisKKwkJCQlmd3JpdGUocGdfYnVmLmRhdGEs IFNpemVPZlBhZ2VIZWFkZXJEYXRhLCAxLCBuZXdfZnApOyAvKiB3cml0ZSBwYWdlIGhlYWRlciBk YXRhICovCisJCQl9CisKKwkJCQorCQkJd3JpdGVfaXRlbXMgKz0gZndyaXRlKHBnX2J1Zi5kYXRh ICsgd3JpdGVfb2Zmc2V0LCBlbGVtZW50X3NpemUsIHJlYWRfaXRlbXMsIG5ld19mcCk7ICAvKiBp bmNyZW1lbnQgaG93IG1hbnkgaXRlbXMgd3JpdHRlbiAqLworCQkJCQkJCisJCQlpZiAod3JpdGVf aXRlbXMgJSBuX2l0ZW1zID09IDAgJiYgd3JpdGVfaXRlbXMgPiAwICYmIGVycm5vID09IDApIC8q IGZpbmlzaGVkIHdyaXRpbmcgaW50byBuZXcgcGFnZS4gKi8KKwkJCXsKKwkJCQlpZiAod3JpdGVf aXRlbXMgPT0gbl9pdGVtcyAqIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQpIC8qIGVuZCBvZiBzZWdt ZW50ICovCisJCQkJeworCQkJCQlmY2xvc2UobmV3X2ZwKTsKKwkJCQkJcGFnZXNfd3JpdHRlbiA9 IDA7CisJCQkJCXdyaXRlX2ZpbGVfc2Vnbm8gKys7CisJCQkJCXdyaXRlX2l0ZW1zID0gMDsKKwkJ CQkJd3JpdGVfZmlsZSA9IHBzcHJpbnRmKCIlcy8lMDRYIiwgbmV3X3BhdGgsIHdyaXRlX2ZpbGVf c2Vnbm8pOworCQkJCQluZXdfZnAgPSBmb3BlbigoY2hhciAqKXdyaXRlX2ZpbGUsICJ3YiIpOwor CQkJCQlyZXMgPSBpbml0X25ld19zbHJ1X2ZpbGUobmV3X2ZwKTsKKwkJCQkJaWYgKHJlcyA8IDAg fHwgbmV3X2ZwID09IE5VTEwpCisJCQkJCXsKKwkJCQkJCWZjbG9zZShuZXdfZnApOworCQkJCQkJ Y2xlYW51cF9kaXJlbnRzKGFsbF9kaXJlbnRzLCB0b3RhbF9yZWFkX2ZpbGVzKTsKKwkJCQkJCQor CQkJCQl9CisJCQkJfSBlbHNlIHsgLyogZW5kIG9mIHBhZ2UgYnV0IG5vdCBzZWdtZW50ICovCisJ CQkJCS8vZmZsdXNoKG5ld19mcCk7CisJCQkJCXBhZ2VzX3dyaXR0ZW4gKys7IAorCQkJCX0KKwor CQkJCWJsa25vKys7IAorCisJCQkJdG9fcmVhZF9pdGVtcyA9IG5faXRlbXM7IC8qIHRvX3JlYWRf aXRlbXMgPSBuICovCisJCQkJcmVzID0gZnNlZWsobmV3X2ZwLCAocGFnZXNfd3JpdHRlbiAqIEJM Q0tTWiksIFNFRUtfU0VUKTsKKwkJCQlpZiAocmVzIDwgMCkKKwkJCQl7CisJCQkJCWZjbG9zZShu ZXdfZnApOworCQkJCQljbGVhbnVwX2RpcmVudHMoYWxsX2RpcmVudHMsIHRvdGFsX3JlYWRfZmls ZXMpOworCQkJCQlyZXR1cm4gLTE7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQkvKmVuZCBvZiBz ZWdtZW50IGluIHNvdXJjZSBkaXIqLworCQkJCWlmIChyZWFkX2l0ZW1zIDwgdG9fcmVhZF9pdGVt cykgCisJCQkJeworCQkJCQl0b19yZWFkX2l0ZW1zID0gbl9pdGVtcyAtIHJlYWRfaXRlbXM7IC8q IHJlYWQgcmVtYWluaW5nIGl0ZW1zICovCisJCQkJfQorCQkJfQorCQl9IHdoaWxlICghZmVvZihv bGRfZmQpKTsgIC8qIHVudGlsIGVuZCBvZiBmaWxlICovCisJCWZjbG9zZShvbGRfZmQpOworCX0K KwlmZmx1c2gobmV3X2ZwKTsKKwkKKwkvKiBmcmVlIG1lbW9yeSBtYWxsb2MnZCBieSBzY2FuZGly IHdoaWxlIHNvcnRpbmcgKi8KKwljbGVhbnVwX2RpcmVudHMoYWxsX2RpcmVudHMsIHRvdGFsX3Jl YWRfZmlsZXMpOworCisJcmV0dXJuIDA7Cit9CisKIHZvaWQKIGNoZWNrX2ZpbGVfY2xvbmUodm9p ZCkKIHsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfdXBncmFkZS9mdW5jdGlvbi5jIGIvc3JjL2Jp bi9wZ191cGdyYWRlL2Z1bmN0aW9uLmMKaW5kZXggOTNkOTc1ODY0YmEuLjkxNDFjMzBiMTY1IDEw MDY0NAotLS0gYS9zcmMvYmluL3BnX3VwZ3JhZGUvZnVuY3Rpb24uYworKysgYi9zcmMvYmluL3Bn X3VwZ3JhZGUvZnVuY3Rpb24uYwpAQCAtNyw2ICs3LDcgQEAKICAqCXNyYy9iaW4vcGdfdXBncmFk ZS9mdW5jdGlvbi5jCiAgKi8KIAorCiAjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIKIAogI2luY2x1 ZGUgImFjY2Vzcy90cmFuc2FtLmgiCkBAIC00Miw2ICs0Myw0MyBAQCBsaWJyYXJ5X25hbWVfY29t cGFyZShjb25zdCB2b2lkICpwMSwgY29uc3Qgdm9pZCAqcDIpCiAJCQkoKGNvbnN0IExpYnJhcnlJ bmZvICopIHAyKS0+ZGJudW07CiB9CiAKKy8qCisgKiBxc29ydCBjb21wYXJhdG9yIGZvciBoZXgg ZmlsZW5hbWVzCisgKi8KK3N0YXRpYyBpbnQKK2ZpbGVfbmFtZV9jb21wYXJlKGNvbnN0IHN0cnVj dCBkaXJlbnQgKiogZGVfMSwgY29uc3Qgc3RydWN0IGRpcmVudCAqKiBkZV8yKQoreworCWludCBu MTsKKwlpbnQgbjI7CisKKworCWNoYXIgKiBmbmFtZV8xOworCWNoYXIgKiBmbmFtZV8yOworCisJ Zm5hbWVfMSA9IChjaGFyICopICgqZGVfMSktPmRfbmFtZTsKKwlmbmFtZV8yID0gKGNoYXIgKikg KCpkZV8yKS0+ZF9uYW1lOworCQorCWlmICgoc3RyY21wKGZuYW1lXzEsICIuIikpIHx8IHN0cmNt cChmbmFtZV8xLCAiLi4iKSkgCisJeworCQluMSA9IChpbnQpIHN0cnRvbChmbmFtZV8xLCBOVUxM LCAxNik7CisJfSBlbHNlIHsKKwkJbjEgPSAtMTsKKwl9CisKKwlpZiAoKHN0cmNtcChmbmFtZV8y LCAiLiIpKSB8fCBzdHJjbXAoZm5hbWVfMiwgIi4uIikpCisJeworCQluMiA9IChpbnQpIHN0cnRv bChmbmFtZV8yLCBOVUxMLCAxNik7CisJfSBlbHNlIHsKKwkJbjIgPSAtMTsKKwl9CisKKwlpZiAo bjEgPT0gbjIpIAorCXsKKwkJcmV0dXJuIDE7IC8vYXJiaXRyYXJpbHkgc2VsZWN0IHRoZSBmaXJz dCBpbnB1dAorCX0gZWxzZSB7CisJCXJldHVybiBuMSAtIG4yOworCX0KK30KIAogLyoKICAqIGdl dF9sb2FkYWJsZV9saWJyYXJpZXMoKQpAQCAtMTA5LDYgKzE0NywzNCBAQCBnZXRfbG9hZGFibGVf bGlicmFyaWVzKHZvaWQpCiB9CiAKIAorLyoKKyAqIGdldF9zb3J0ZWRfaGV4X2ZpbGVzKCkKKyAq IGdpdmVuIHRoZSBmaWxlcGF0aCBvZiBhIGRpcmVjdG9yeSwKKyAqIHJldHVybiBhcnJheSBvZiBj aGlsZCBkaXJlbnRzIHdpdGggaGV4IGZpbGVuYW1lcyBlLmcgJzAwMEEnCisgKiBpbiBzb3J0ZWQg b3JkZXIKKyAqLworc3RydWN0IGRpcmVudCoqIAorZ2V0X3NvcnRlZF9oZXhfZmlsZXMoY2hhciAq IGRyLCBpbnQgKiBzaXplKQoreworCXN0cnVjdCBkaXJlbnQgKiplbnRyeV9saXN0OworCisJKnNp emUgPSBzY2FuZGlyKGRyLCAmZW50cnlfbGlzdCwgTlVMTCwgZmlsZV9uYW1lX2NvbXBhcmUpOwor CWlmICgqc2l6ZSA8IDApCisJeworCQlyZXR1cm4gTlVMTDsgLy9lcnJvcgorCX0KKwlyZXR1cm4g ZW50cnlfbGlzdDsKK30KKwordm9pZAorY2xlYW51cF9kaXJlbnRzKHN0cnVjdCBkaXJlbnQgKiog YWxsX2RpcmVudHMsIGludCB0b3RhbF9yZWFkX2ZpbGVzKQorewkKKwlmb3IgKGludCBpID0gMDsg aSA8IHRvdGFsX3JlYWRfZmlsZXM7IGkrKykKKwl7CisJCSBmcmVlKChzdHJ1Y3QgZGlyZW50ICoq KSBhbGxfZGlyZW50c1tpXSk7CisJfQorCWZyZWUoKHN0cnVjdCBkaXJlbnQgKiopIGFsbF9kaXJl bnRzKTsKK30KIC8qCiAgKiBjaGVja19sb2FkYWJsZV9saWJyYXJpZXMoKQogICoKZGlmZiAtLWdp dCBhL3NyYy9iaW4vcGdfdXBncmFkZS9wZ191cGdyYWRlLmMgYi9zcmMvYmluL3BnX3VwZ3JhZGUv cGdfdXBncmFkZS5jCmluZGV4IDExNWZhYTIyMmUzLi5iZjAxYjFkZjVlMSAxMDA2NDQKLS0tIGEv c3JjL2Jpbi9wZ191cGdyYWRlL3BnX3VwZ3JhZGUuYworKysgYi9zcmMvYmluL3BnX3VwZ3JhZGUv cGdfdXBncmFkZS5jCkBAIC0zOCwyNyArMzgsMzUgQEAKIAogI2luY2x1ZGUgInBvc3RncmVzX2Zl LmgiCiAKKyNpbmNsdWRlIDxkaXJlbnQuaD4KICNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8 dW5pc3RkLmg+CiAKICNpZmRlZiBIQVZFX0xBTkdJTkZPX0gKICNpbmNsdWRlIDxsYW5naW5mby5o PgogI2VuZGlmCiAKKyNpbmNsdWRlICJhY2Nlc3Mvc2xydWRlZnMuaCIKICNpbmNsdWRlICJjYXRh bG9nL3BnX2NsYXNzX2QuaCIKICNpbmNsdWRlICJjb21tb24vZmlsZV9wZXJtLmgiCiAjaW5jbHVk ZSAiY29tbW9uL2xvZ2dpbmcuaCIKICNpbmNsdWRlICJjb21tb24vcmVzdHJpY3RlZF90b2tlbi5o IgogI2luY2x1ZGUgImZlX3V0aWxzL3N0cmluZ191dGlscy5oIgogI2luY2x1ZGUgInBnX3VwZ3Jh ZGUuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2J1ZnBhZ2UuaCIKIAogc3RhdGljIHZvaWQgcHJlcGFy ZV9uZXdfY2x1c3Rlcih2b2lkKTsKIHN0YXRpYyB2b2lkIHByZXBhcmVfbmV3X2dsb2JhbHModm9p ZCk7CiBzdGF0aWMgdm9pZCBjcmVhdGVfbmV3X29iamVjdHModm9pZCk7CiBzdGF0aWMgdm9pZCBj b3B5X3hhY3RfeGxvZ194aWQodm9pZCk7Ci1zdGF0aWMgdm9pZCBzZXRfZnJvemVueGlkcyhib29s IG1pbm14aWRfb25seSk7CitzdGF0aWMgdm9pZCBzZXRfZnJvemVueGlkcyhib29sIG1pbm14aWRf b25seSk7Owogc3RhdGljIHZvaWQgbWFrZV9vdXRwdXRkaXJzKGNoYXIgKnBnZGF0YSk7CiBzdGF0 aWMgdm9pZCBzZXR1cChjaGFyICphcmd2MCwgYm9vbCAqbGl2ZV9jaGVjayk7CiAKKworI2RlZmlu ZSBNQVhCVUZTSVpFIChCTENLU1ogLSBTaXplT2ZQYWdlSGVhZGVyRGF0YSkKKyNkZWZpbmUgU0xS VV9QQUdFU19QRVJfU0VHTUVOVCAzMgorCiBDbHVzdGVySW5mbyBvbGRfY2x1c3RlciwKIAkJCW5l d19jbHVzdGVyOwogT1NJbmZvCQlvc19pbmZvOwpAQCAtNTczLDExICs1ODEsMzYgQEAgY29weV94 YWN0X3hsb2dfeGlkKHZvaWQpCiAJICogQ29weSBvbGQgY29tbWl0IGxvZ3MgdG8gbmV3IGRhdGEg ZGlyLiBwZ19jbG9nIGhhcyBiZWVuIHJlbmFtZWQgdG8KIAkgKiBwZ194YWN0IGluIHBvc3QtMTAg Y2x1c3RlcnMuCiAJICovCi0JY29weV9zdWJkaXJfZmlsZXMoR0VUX01BSk9SX1ZFUlNJT04ob2xk X2NsdXN0ZXIubWFqb3JfdmVyc2lvbikgPD0gOTA2ID8KLQkJCQkJICAicGdfY2xvZyIgOiAicGdf eGFjdCIsCi0JCQkJCSAgR0VUX01BSk9SX1ZFUlNJT04obmV3X2NsdXN0ZXIubWFqb3JfdmVyc2lv bikgPD0gOTA2ID8KLQkJCQkJICAicGdfY2xvZyIgOiAicGdfeGFjdCIpOworCSAKKwlpZiAob2xk X2NsdXN0ZXIuY29udHJvbGRhdGEuY2F0X3ZlciA8PSBDTE9HX0ZPUk1BVENIQU5HRV9DQVRfVkVS ICYmCisJCW5ld19jbHVzdGVyLmNvbnRyb2xkYXRhLmNhdF92ZXIgPj0gQ0xPR19GT1JNQVRDSEFO R0VfQ0FUX1ZFUikKKwl7CisJCQlpbnQgcmV0OworCQkJcmV0ID0gY29weV90b19uZXdfZm9ybWF0 KEdFVF9NQUpPUl9WRVJTSU9OKG9sZF9jbHVzdGVyLm1ham9yX3ZlcnNpb24pIDw9IDkwNiA/CisJ CQkicGdfY2xvZyIgOiAicGdfeGFjdCIsIAorCQkJInBnX3hhY3QiLCAxKTsKKwkJCQorCQkJaWYg KHJldCA8IDApCisJCQl7CisJCQkJcGdfZmF0YWwoImNvdWxkIG5vdCByZWZvcm1hdCBjbG9nIGZp bGVzIik7CisJCQl9CisJfQogCisJaWYgKG9sZF9jbHVzdGVyLmNvbnRyb2xkYXRhLmNhdF92ZXIg Pj0gQ0xPR19GT1JNQVRDSEFOR0VfQ0FUX1ZFUiAmJgorCQluZXdfY2x1c3Rlci5jb250cm9sZGF0 YS5jYXRfdmVyID49IENMT0dfRk9STUFUQ0hBTkdFX0NBVF9WRVIpCisJeworCQljb3B5X3N1YmRp cl9maWxlcygicGdfeGFjdCIsICJwZ194YWN0Iik7CisJfQorCisJaWYgKG9sZF9jbHVzdGVyLmNv bnRyb2xkYXRhLmNhdF92ZXIgPD0gQ0xPR19GT1JNQVRDSEFOR0VfQ0FUX1ZFUiAmJgorCQluZXdf Y2x1c3Rlci5jb250cm9sZGF0YS5jYXRfdmVyIDw9IENMT0dfRk9STUFUQ0hBTkdFX0NBVF9WRVIp CisJeworCQljb3B5X3N1YmRpcl9maWxlcyhHRVRfTUFKT1JfVkVSU0lPTihvbGRfY2x1c3Rlci5t YWpvcl92ZXJzaW9uKSA8PSA5MDYgPworCQkJCQkicGdfY2xvZyIgOiAicGdfeGFjdCIsCisJCQkJ CUdFVF9NQUpPUl9WRVJTSU9OKG5ld19jbHVzdGVyLm1ham9yX3ZlcnNpb24pIDw9IDkwNiA/CisJ CQkJCSJwZ19jbG9nIiA6ICJwZ194YWN0Iik7CisJfQorCQogCXByZXBfc3RhdHVzKCJTZXR0aW5n IG9sZGVzdCBYSUQgZm9yIG5ldyBjbHVzdGVyIik7CiAJZXhlY19wcm9nKFVUSUxJVFlfTE9HX0ZJ TEUsIE5VTEwsIHRydWUsIHRydWUsCiAJCQkgICJcIiVzL3BnX3Jlc2V0d2FsXCIgLWYgLXUgJXUg XCIlc1wiIiwKQEAgLTYzMywyMyArNjY2LDQ0IEBAIGNvcHlfeGFjdF94bG9nX3hpZCh2b2lkKQog CX0KIAllbHNlIGlmIChuZXdfY2x1c3Rlci5jb250cm9sZGF0YS5jYXRfdmVyID49IE1VTFRJWEFD VF9GT1JNQVRDSEFOR0VfQ0FUX1ZFUikKIAl7CisJCWNvcHlfdG9fbmV3X2Zvcm1hdCgicGdfbXVs dGl4YWN0L29mZnNldHMiLCAicGdfbXVsdGl4YWN0L29mZnNldHMiLCBNVUxUSVhBQ1RfTUVNQkVS X0VOVFJZX1NJWkUpOworCQljb3B5X3RvX25ld19mb3JtYXQoInBnX211bHRpeGFjdC9tZW1iZXJz IiwgInBnX211bHRpeGFjdC9tZW1iZXJzIiwgTVVMVElYQUNUX09GRlNFVF9FTlRSWV9TSVpFKTsJ IAorCisKKwkJcHJlcF9zdGF0dXMoIlNldHRpbmcgbmV4dCBtdWx0aXhhY3QgSUQgYW5kIG9mZnNl dCBmb3IgbmV3IGNsdXN0ZXIiKTsKKwogCQkvKgorCQkgKiB3ZSBwcmVzZXJ2ZSBhbGwgZmlsZXMg YW5kIGNvbnRlbnRzLCBzbyB3ZSBtdXN0IHByZXNlcnZlIGJvdGggIm5leHQiCisJCSAqIGNvdW50 ZXJzIGhlcmUgYW5kIHRoZSBvbGRlc3QgbXVsdGkgcHJlc2VudCBvbiBzeXN0ZW0uCisJCSAqLwor CQlleGVjX3Byb2coVVRJTElUWV9MT0dfRklMRSwgTlVMTCwgdHJ1ZSwgdHJ1ZSwKKwkJCQkgICJc IiVzL3BnX3Jlc2V0d2FsXCIgLU8gJXUgLW0gJXUsJXUgXCIlc1wiIiwKKwkJCQkgIG5ld19jbHVz dGVyLmJpbmRpciwKKwkJCQkgIG9sZF9jbHVzdGVyLmNvbnRyb2xkYXRhLmNoa3BudF9ueHRteG9m ZiwKKwkJCQkgIG9sZF9jbHVzdGVyLmNvbnRyb2xkYXRhLmNoa3BudF9ueHRtdWx0aSwKKwkJCQkg IG9sZF9jbHVzdGVyLmNvbnRyb2xkYXRhLmNoa3BudF9vbGRzdE11bHRpLAorCQkJCSAgbmV3X2Ns dXN0ZXIucGdkYXRhKTsKKwkJY2hlY2tfb2soKTsKKworCX0KKwkvKmVsc2UgaWYgKG5ld19jbHVz dGVyLmNvbnRyb2xkYXRhLmNhdF92ZXIgPj0gTVVMVElYQUNUX0ZPUk1BVENIQU5HRV9DQVRfVkVS KQorCXsKKwkJKgogCQkgKiBSZW1vdmUgb2Zmc2V0cy8wMDAwIGZpbGUgY3JlYXRlZCBieSBpbml0 ZGIgdGhhdCBubyBsb25nZXIgbWF0Y2hlcwogCQkgKiB0aGUgbmV3IG11bHRpLXhpZCB2YWx1ZS4g ICJtZW1iZXJzIiBzdGFydHMgYXQgemVybyBzbyBubyBuZWVkIHRvCiAJCSAqIHJlbW92ZSBpdC4K LQkJICovCisJCSAqCiAJCXJlbW92ZV9uZXdfc3ViZGlyKCJwZ19tdWx0aXhhY3Qvb2Zmc2V0cyIs IGZhbHNlKTsKIAogCQlwcmVwX3N0YXR1cygiU2V0dGluZyBvbGRlc3QgbXVsdGl4YWN0IElEIGlu IG5ldyBjbHVzdGVyIik7Ci0KLQkJLyoKKyAJCSoKIAkJICogV2UgZG9uJ3QgcHJlc2VydmUgZmls ZXMgaW4gdGhpcyBjYXNlLCBidXQgaXQncyBpbXBvcnRhbnQgdGhhdCB0aGUKIAkJICogb2xkZXN0 IG11bHRpIGlzIHNldCB0byB0aGUgbGF0ZXN0IHZhbHVlIHVzZWQgYnkgdGhlIG9sZCBzeXN0ZW0s IHNvCiAJCSAqIHRoYXQgbXVsdGl4YWN0LmMgcmV0dXJucyB0aGUgZW1wdHkgc2V0IGZvciBtdWx0 aXMgdGhhdCBtaWdodCBiZQogCQkgKiBwcmVzZW50IG9uIGRpc2suICBXZSBzZXQgbmV4dCBtdWx0 aSB0byB0aGUgdmFsdWUgZm9sbG93aW5nIHRoYXQ7IGl0CiAJCSAqIG1pZ2h0IGVuZCB1cCB3cmFw cGVkIGFyb3VuZCAoaS5lLiAwKSBpZiB0aGUgb2xkIGNsdXN0ZXIgaGFkCiAJCSAqIG5leHQ9TWF4 TXVsdGlYYWN0SWQsIGJ1dCBtdWx0aXhhY3QuYyBjYW4gY29wZSB3aXRoIHRoYXQganVzdCBmaW5l LgotCQkgKi8KKwkJICoKIAkJZXhlY19wcm9nKFVUSUxJVFlfTE9HX0ZJTEUsIE5VTEwsIHRydWUs IHRydWUsCiAJCQkJICAiXCIlcy9wZ19yZXNldHdhbFwiIC1tICV1LCV1IFwiJXNcIiIsCiAJCQkJ ICBuZXdfY2x1c3Rlci5iaW5kaXIsCkBAIC02NTcsNyArNzExLDggQEAgY29weV94YWN0X3hsb2df eGlkKHZvaWQpCiAJCQkJICBvbGRfY2x1c3Rlci5jb250cm9sZGF0YS5jaGtwbnRfbnh0bXVsdGks CiAJCQkJICBuZXdfY2x1c3Rlci5wZ2RhdGEpOwogCQljaGVja19vaygpOwotCX0KKwkJCisJfSov CiAKIAkvKiBub3cgcmVzZXQgdGhlIHdhbCBhcmNoaXZlcyBpbiB0aGUgbmV3IGNsdXN0ZXIgKi8K IAlwcmVwX3N0YXR1cygiUmVzZXR0aW5nIFdBTCBhcmNoaXZlcyIpOwpAQCAtNjY5LDcgKzcyNCw2 IEBAIGNvcHlfeGFjdF94bG9nX3hpZCh2b2lkKQogCWNoZWNrX29rKCk7CiB9CiAKLQogLyoKICAq CXNldF9mcm96ZW54aWRzKCkKICAqCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3VwZ3JhZGUvcGdf dXBncmFkZS5oIGIvc3JjL2Jpbi9wZ191cGdyYWRlL3BnX3VwZ3JhZGUuaAppbmRleCAzMTU4OWIw ZmRjNC4uMjZiZDU2Y2M0MjkgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfdXBncmFkZS9wZ191cGdy YWRlLmgKKysrIGIvc3JjL2Jpbi9wZ191cGdyYWRlL3BnX3VwZ3JhZGUuaApAQCAtNyw2ICs3LDcg QEAKIAogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUg PGRpcmVudC5oPgogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAjaW5jbHVkZSA8c3lzL3RpbWUuaD4K IApAQCAtMTEzLDcgKzExNCwxNiBAQCBleHRlcm4gY2hhciAqb3V0cHV0X2ZpbGVzW107CiAgKiB2 ZXJzaW9uIHRvIHRoaXMgdmFsdWUuICBwZ191cGdyYWRlIGJlaGF2aW9yIGRlcGVuZHMgb24gd2hl dGhlciBvbGQgYW5kIG5ldwogICogc2VydmVyIHZlcnNpb25zIGFyZSBib3RoIG5ld2VyIHRoYW4g dGhpcywgb3Igb25seSB0aGUgbmV3IG9uZSBpcy4KICAqLwotI2RlZmluZSBNVUxUSVhBQ1RfRk9S TUFUQ0hBTkdFX0NBVF9WRVIgMjAxMzAxMjMxCisKKy8qCisgKiBwYWdlIGhlYWRlciBmb3JtYXQg Y2hhbmdlCisgKi8KKyNkZWZpbmUgTVVMVElYQUNUX0ZPUk1BVENIQU5HRV9DQVRfVkVSIDIwMjIw OTE0MQorCisvKiAKKyAqIHBhZ2UgaGVhZGVyIGZvcm1hdCBjaGFuZ2UgCisgKi8KKyNkZWZpbmUg Q0xPR19GT1JNQVRDSEFOR0VfQ0FUX1ZFUiAyMDIyMTAxNDEKIAogLyoKICAqIGxhcmdlIG9iamVj dCBjaHVuayBzaXplIGFkZGVkIHRvIHBnX2NvbnRyb2xkYXRhLApAQCAtMTIyLDcgKzEzMiw3IEBA IGV4dGVybiBjaGFyICpvdXRwdXRfZmlsZXNbXTsKICNkZWZpbmUgTEFSR0VfT0JKRUNUX1NJWkVf UEdfQ09OVFJPTF9WRVIgOTQyCiAKIC8qCi0gKiBjaGFuZ2UgaW4gSlNPTkIgZm9ybWF0IGR1cmlu ZyA5LjQgYmV0YQorICogYWRkaXRpb24gb2YgcGFnZSBoZWFkZXIgCiAgKi8KICNkZWZpbmUgSlNP TkJfRk9STUFUX0NIQU5HRV9DQVRfVkVSIDIwMTQwOTI5MQogCkBAIC0zNzgsNiArMzg4LDkgQEAg dm9pZAkJcmV3cml0ZVZpc2liaWxpdHlNYXAoY29uc3QgY2hhciAqZnJvbWZpbGUsIGNvbnN0IGNo YXIgKnRvZmlsZSwKIHZvaWQJCWNoZWNrX2ZpbGVfY2xvbmUodm9pZCk7CiB2b2lkCQljaGVja19o YXJkX2xpbmsodm9pZCk7CiAKKworaW50IAljb3B5X3RvX25ld19mb3JtYXQoY29uc3QgY2hhciAq b2xkX3N1YmRpciwgY29uc3QgY2hhciAqbmV3X3N1YmRpciwgaW50IGVsZW1lbnRfc2l6ZSk7CisK IC8qIGZvcGVuX3ByaXYoKSBpcyBubyBsb25nZXIgZGlmZmVyZW50IGZyb20gZm9wZW4oKSAqLwog I2RlZmluZSBmb3Blbl9wcml2KHBhdGgsIG1vZGUpCWZvcGVuKHBhdGgsIG1vZGUpCiAKQEAgLTM4 NSw2ICszOTgsOCBAQCB2b2lkCQljaGVja19oYXJkX2xpbmsodm9pZCk7CiAKIHZvaWQJCWdldF9s b2FkYWJsZV9saWJyYXJpZXModm9pZCk7CiB2b2lkCQljaGVja19sb2FkYWJsZV9saWJyYXJpZXMo dm9pZCk7Cit2b2lkIAkJY2xlYW51cF9kaXJlbnRzKHN0cnVjdCBkaXJlbnQgKiogYWxsX2RpcmVu dHMsIGludCB0b3RhbF9yZWFkX2ZpbGVzKTsKK3N0cnVjdCBkaXJlbnQqKiAJZ2V0X3NvcnRlZF9o ZXhfZmlsZXMoY2hhciAqIGRyLCBpbnQgKiBzaXplKTsKIAogLyogaW5mby5jICovCiAKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9zbHJ1ZGVmcy5oIGIvc3JjL2luY2x1ZGUvYWNjZXNz L3NscnVkZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQ5Y2Q3 OGQ5MjNkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3NscnVkZWZzLmgK QEAgLTAsMCArMSwxOSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogc2xydWRlZnMuaAor ICoJCW1hY3JvcyBmb3IgYWNjZXNzaW5nIGNvbnRlbnRzIG9mICJzbHJ1IiBwYWdlcyAKKyAqCisg KgorICogQ29weXJpZ2h0IChjKSAyMDIxLTIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3Bt ZW50IEdyb3VwCisgKgorICogc3JjL2luY2x1ZGUvYWNjZXNzL3NscnVkZWZzLmgKKyAqCisgKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2RlZmluZSBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UIDMy CisKKyNkZWZpbmUgTVVMVElYQUNUX01FTUJFUl9FTlRSWV9TSVpFIDIwIAorCisjZGVmaW5lIE1V TFRJWEFDVF9PRkZTRVRfRU5UUllfU0laRSA4CisKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2Nh dGFsb2cvY2F0dmVyc2lvbi5oIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9jYXR2ZXJzaW9uLmgKaW5k ZXggNDllOWRjNGE5NGIuLjY5YzhmZTI1YjA4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRh bG9nL2NhdHZlcnNpb24uaAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL2NhdHZlcnNpb24uaApA QCAtNTcsNiArNTcsNyBAQAogICovCiAKIC8qCQkJCQkJCXl5eXltbWRkTiAqLwotI2RlZmluZSBD QVRBTE9HX1ZFUlNJT05fTk8JMjAyMjExMjExCisKKyNkZWZpbmUgQ0FUQUxPR19WRVJTSU9OX05P CTIwMjIxMTIxMgogCiAjZW5kaWYKLS0gCjIuMzcuMQoK --_002_A45DC000C7F543C19E9E57FB18E2FD0Damazoncom_--