Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vwx1T-0067lH-1F for pgsql-hackers@arkaria.postgresql.org; Mon, 02 Mar 2026 06:44:56 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vwx1R-00FgoU-1b for pgsql-hackers@arkaria.postgresql.org; Mon, 02 Mar 2026 06:44:53 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vwx1Q-00FgoG-2d for pgsql-hackers@lists.postgresql.org; Mon, 02 Mar 2026 06:44:53 +0000 Received: from mail.postgrespro.ru ([93.174.132.70]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1vwx1L-00000001z7d-3XUP for pgsql-hackers@postgresql.org; Mon, 02 Mar 2026 06:44:52 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mx2023; t=1772433887; bh=caEL2Of0V140bP15BXOMRfQdBk5msW1Hsf5N7n17SGA=; h=Date:From:To:Cc:Subject:In-Reply-To:References:Message-ID:From; b=aP5dWxvkLrMYAJ0kkwgUUAp+533ReamuInoFNFNIH/He+iQpvTO+ibhW7H0vb+ObZ Qc3dEo6ndtw/z2nWv9YxSZYmCSnWh77AOlp+ZS08yNRDUY3qSOAxyWBuiwZKc43hrz ltqu3kkuM41AeYT1wq8iUZA/KiLlgHB3Ru7YyC0PdTePyLB0HnJBO7HYow/xqiO/pw ghQZMBAxLgqIf/Jocsc8wnVTw4ygcntCjlicCwdoNzBjVTNJq1rVWIoCFuuXmX0/vL lMgx6hPisw3SLsWGVkHRlZqfTHjXkTBqSY9RMwixbsbWkXjp10Px44PMUGrZreA+Au iskdKYh7pzRjA== Received: from mail.l.postgrespro.ru (webmail-slave-mstn.l.postgrespro.ru [192.168.2.28]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (Client did not present a certificate) (Authenticated sender: a.pyhalov@postgrespro.ru) by mail.postgrespro.ru (Postfix/587) with ESMTPSA id F03B560442; Mon, 2 Mar 2026 09:44:46 +0300 (MSK) MIME-Version: 1.0 Date: Mon, 02 Mar 2026 09:44:46 +0300 From: Alexander Pyhalov To: Pgsql Hackers Cc: Alena Rybakina , Matheus Alcantara Subject: Re: Asynchronous MergeAppend In-Reply-To: <782a968c8e01ec6db3b2da2120adf73b@postgrespro.ru> References: <59be194c5a409fb9fc9f2031581b8a44@postgrespro.ru> <764dd8b8-6374-4f5a-aac7-d8e3f6ebe5fd@postgrespro.ru> <159b591411bb2c81332018927acbd509@postgrespro.ru> <2fb1d9923b6995492e7b163e6cb95402@postgrespro.ru> <782a968c8e01ec6db3b2da2120adf73b@postgrespro.ru> Message-ID: <554a73f7ffea8b22b3f81a4804b5fc34@postgrespro.ru> X-Sender: a.pyhalov@postgrespro.ru Content-Type: multipart/mixed; boundary="=_49b6486fa938655d059949ecccd5e96f" X-KSMG-AntiPhishing: NotDetected X-KSMG-AntiSpam-Interceptor-Info: not scanned X-KSMG-AntiSpam-Status: not scanned, disabled by settings X-KSMG-AntiVirus: Kaspersky Secure Mail Gateway, version 2.1.0.7854, bases: 2026/03/02 04:25:00 #28238217 X-KSMG-AntiVirus-Status: NotDetected, skipped X-KSMG-LinksScanning: not scanned, disabled by settings X-KSMG-Message-Action: skipped X-KSMG-Rule-ID: 1 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=_49b6486fa938655d059949ecccd5e96f Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8; format=flowed Alexander Pyhalov писал(а) 2026-02-12 10:08: > Alexander Pyhalov писал(а) 2025-12-30 22:04: >> Matheus Alcantara писал(а) 2025-12-30 18:04: >>> On Tue Dec 30, 2025 at 10:15 AM -03, Alexander Pyhalov wrote: >>>> Looks good. What do you think about >>>> classify_matching_subplans_common()? >>>> Should it stay where it is or should we hide it to >>>> src/include/executor/execAppend.h ? >>>> >>> Yeah, sounds better to me to move classify_matching_subplans_common >>> to >>> execAppend.h since it very specific for the MergeAppend and Append >>> execution. I've declared the function as static inline on >>> execAppend.h >>> but I'm not sure if it's the best approach. >>> >>> I've also wrote a proper commit message for this new version. >> >> Looks good to me. > > Hi. > Rebased patches over fresh master. Hi. Rebased patches over fresh master. -- Best regards, Alexander Pyhalov, Postgres Professional --=_49b6486fa938655d059949ecccd5e96f Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v14-0001-mark_async_capable-subpath-should-match-subplan.patch Content-Disposition: attachment; filename=v14-0001-mark_async_capable-subpath-should-match-subplan.patch; size=2420 RnJvbSBlOTVjYjg0NWNmNWRkOWI3NjExNWNlYTkxNmI2MzBjMzI0YzNkZDE2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4YW5kZXIgUHloYWxvdiA8YS5weWhhbG92QHBvc3RncmVz cHJvLnJ1PgpEYXRlOiBUaHUsIDEyIEZlYiAyMDI2IDA5OjE3OjM4ICswMzAwClN1YmplY3Q6IFtQ QVRDSCAxLzNdIG1hcmtfYXN5bmNfY2FwYWJsZSgpOiBzdWJwYXRoIHNob3VsZCBtYXRjaCBzdWJw bGFuCgptYXJrX2FzeW5jX2NhcGFibGUoKSBiZWxpZXZlcyB0aGF0IHBhdGggY29ycmVzcG9uZHMg dG8gcGxhbi4gVGhpcyBpcwpub3QgdHJ1ZSB3aGVuIGNyZWF0ZV9bbWVyZ2VfXWFwcGVuZF9wbGFu KCkgaW5zZXJ0cyBzb3J0IG5vZGUuIEluCnRoaXMgY2FzZSBtYXJrX2FzeW5jX2NhcGFibGUoKSBj YW4gdHJlYXQgU29ydCBwbGFuIG5vZGUgYXMgc29tZQpvdGhlciBhbmQgY3Jhc2guIEZpeCB0aGlz IGJ5IGhhbmRsaW5nIHRoZSBTb3J0IG5vZGUgc2VwYXJhdGVseS4KClRoaXMgaXMgbmVlZGVkIHRv IG1ha2UgTWVyZ2VBcHBlbmQgbm9kZSBhc3luYy1jYXBhYmxlIHRoYXQgd2lsbApiZSBpbXBsZW1l bnRlZCBpbiBhIG5leHQgY29tbWl0LgotLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2Ny ZWF0ZXBsYW4uYyB8IDE4ICsrKysrKysrKystLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDEwIGlu c2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3Jl YXRlcGxhbi5jCmluZGV4IDUwYjBlMTAzMDhiLi41ZDcwNGUzOGYzNyAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCisrKyBiL3NyYy9iYWNrZW5kL29w dGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYwpAQCAtMTEzOCwxMCArMTEzOCwxMiBAQCBtYXJrX2Fz eW5jX2NhcGFibGVfcGxhbihQbGFuICpwbGFuLCBQYXRoICpwYXRoKQogCQkJCVN1YnF1ZXJ5U2Nh biAqc2Nhbl9wbGFuID0gKFN1YnF1ZXJ5U2NhbiAqKSBwbGFuOwogCiAJCQkJLyoKLQkJCQkgKiBJ ZiB0aGUgZ2VuZXJhdGVkIHBsYW4gbm9kZSBpbmNsdWRlcyBhIGdhdGluZyBSZXN1bHQgbm9kZSwK LQkJCQkgKiB3ZSBjYW4ndCBleGVjdXRlIGl0IGFzeW5jaHJvbm91c2x5LgorCQkJCSAqIENoZWNr IHRoYXQgcGxhbiBpcyByZWFsbHkgYSBTdWJxdWVyeVNjYW4gYmVmb3JlIHVzaW5nIGl0LgorCQkJ CSAqIEl0IGNhbiBiZSBub3QgdHJ1ZSwgaWYgdGhlIGdlbmVyYXRlZCBwbGFuIG5vZGUgaW5jbHVk ZXMgYQorCQkJCSAqIGdhdGluZyBSZXN1bHQgbm9kZSBvciBhIFNvcnQgbm9kZS4gSW4gc3VjaCBj YXNlIHdlIGNhbid0CisJCQkJICogZXhlY3V0ZSBpdCBhc3luY2hyb25vdXNseS4KIAkJCQkgKi8K LQkJCQlpZiAoSXNBKHBsYW4sIFJlc3VsdCkpCisJCQkJaWYgKCFJc0EocGxhbiwgU3VicXVlcnlT Y2FuKSkKIAkJCQkJcmV0dXJuIGZhbHNlOwogCiAJCQkJLyoKQEAgLTExNTksMTAgKzExNjEsMTAg QEAgbWFya19hc3luY19jYXBhYmxlX3BsYW4oUGxhbiAqcGxhbiwgUGF0aCAqcGF0aCkKIAkJCQlG ZHdSb3V0aW5lICpmZHdyb3V0aW5lID0gcGF0aC0+cGFyZW50LT5mZHdyb3V0aW5lOwogCiAJCQkJ LyoKLQkJCQkgKiBJZiB0aGUgZ2VuZXJhdGVkIHBsYW4gbm9kZSBpbmNsdWRlcyBhIGdhdGluZyBS ZXN1bHQgbm9kZSwKLQkJCQkgKiB3ZSBjYW4ndCBleGVjdXRlIGl0IGFzeW5jaHJvbm91c2x5Lgor CQkJCSAqIElmIHRoZSBnZW5lcmF0ZWQgcGxhbiBub2RlIGluY2x1ZGVzIGEgZ2F0aW5nIFJlc3Vs dCBub2RlIG9yCisJCQkJICogYSBTb3J0IG5vZGUsIHdlIGNhbid0IGV4ZWN1dGUgaXQgYXN5bmNo cm9ub3VzbHkuCiAJCQkJICovCi0JCQkJaWYgKElzQShwbGFuLCBSZXN1bHQpKQorCQkJCWlmIChJ c0EocGxhbiwgUmVzdWx0KSB8fCBJc0EocGxhbiwgU29ydCkpCiAJCQkJCXJldHVybiBmYWxzZTsK IAogCQkJCUFzc2VydChmZHdyb3V0aW5lICE9IE5VTEwpOwpAQCAtMTE3NSw5ICsxMTc3LDkgQEAg bWFya19hc3luY19jYXBhYmxlX3BsYW4oUGxhbiAqcGxhbiwgUGF0aCAqcGF0aCkKIAogCQkJLyoK IAkJCSAqIElmIHRoZSBnZW5lcmF0ZWQgcGxhbiBub2RlIGluY2x1ZGVzIGEgUmVzdWx0IG5vZGUg Zm9yIHRoZQotCQkJICogcHJvamVjdGlvbiwgd2UgY2FuJ3QgZXhlY3V0ZSBpdCBhc3luY2hyb25v dXNseS4KKwkJCSAqIHByb2plY3Rpb24gb3IgYSBTb3J0IG5vZGUsIHdlIGNhbid0IGV4ZWN1dGUg aXQgYXN5bmNocm9ub3VzbHkuCiAJCQkgKi8KLQkJCWlmIChJc0EocGxhbiwgUmVzdWx0KSkKKwkJ CWlmIChJc0EocGxhbiwgUmVzdWx0KSB8fCBJc0EocGxhbiwgU29ydCkpCiAJCQkJcmV0dXJuIGZh bHNlOwogCiAJCQkvKgotLSAKMi40My4wCgo= --=_49b6486fa938655d059949ecccd5e96f Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v14-0002-MergeAppend-should-support-Async-Foreign-Scan-subpla.patch Content-Disposition: attachment; filename*0*=UTF-8''v14-0002-MergeAppend-should-support-Async-Foreign-Scan; filename*1*=-subpla.patch; size=51506 RnJvbSBmZWNhZDdhZDc2ZTE5ZWJhMzBjMDQ5NmIyOWFkM2JkODE3N2M3ZGNmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4YW5kZXIgUHloYWxvdiA8YS5weWhhbG92QHBvc3RncmVz cHJvLnJ1PgpEYXRlOiBTYXQsIDE1IE5vdiAyMDI1IDEwOjIzOjQ3ICswMzAwClN1YmplY3Q6IFtQ QVRDSCAyLzNdIE1lcmdlQXBwZW5kIHNob3VsZCBzdXBwb3J0IEFzeW5jIEZvcmVpZ24gU2NhbiBz dWJwbGFucwoKLS0tCiAuLi4vcG9zdGdyZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5vdXQg ICAgfCAyODggKysrKysrKysrKysKIGNvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5j ICAgICAgICAgICB8ICAxMCArLQogY29udHJpYi9wb3N0Z3Jlc19mZHcvc3FsL3Bvc3RncmVzX2Zk dy5zcWwgICAgIHwgIDg3ICsrKysKIGRvYy9zcmMvc2dtbC9jb25maWcuc2dtbCAgICAgICAgICAg ICAgICAgICAgICB8ICAxNCArCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjQXN5bmMuYyAgICAg ICAgICAgICAgfCAgIDQgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFwcGVuZC5jICAgICAg ICAgICAgIHwgIDI0ICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuYyAg ICAgICAgfCA0NzEgKysrKysrKysrKysrKysrKystCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0 aC9jb3N0c2l6ZS5jICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4v Y3JlYXRlcGxhbi5jICAgICAgIHwgICA5ICsKIHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3Bh cmFtZXRlcnMuZGF0ICAgICB8ICAgOCArCiBzcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVz cWwuY29uZi5zYW1wbGUgfCAgIDEgKwogc3JjL2luY2x1ZGUvZXhlY3V0b3Ivbm9kZU1lcmdlQXBw ZW5kLmggICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oICAgICAg ICAgICAgICAgICB8ICA1OSArKysKIHNyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmggICAgICAg ICAgICAgICAgICB8ICAgMSArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91 dCAgICAgICAgfCAgIDMgKy0KIDE1IGZpbGVzIGNoYW5nZWQsIDk1MSBpbnNlcnRpb25zKCspLCAz MCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9jb250cmliL3Bvc3RncmVzX2Zkdy9leHBlY3Rl ZC9wb3N0Z3Jlc19mZHcub3V0IGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvZXhwZWN0ZWQvcG9zdGdy ZXNfZmR3Lm91dAppbmRleCAyY2NiNzJjNTM5YS4uYmMxMWYzNWUxYmMgMTAwNjQ0Ci0tLSBhL2Nv bnRyaWIvcG9zdGdyZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5vdXQKKysrIGIvY29udHJp Yi9wb3N0Z3Jlc19mZHcvZXhwZWN0ZWQvcG9zdGdyZXNfZmR3Lm91dApAQCAtMTE1NjcsNiArMTE1 NjcsNDYgQEAgU0VMRUNUICogRlJPTSByZXN1bHRfdGJsIE9SREVSIEJZIGE7CiAoMiByb3dzKQog CiBERUxFVEUgRlJPTSByZXN1bHRfdGJsOworLS0gVGVzdCBNZXJnZSBBcHBlbmQKK0VYUExBSU4g KFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gYXN5bmNfcHQgV0hFUkUgYiAlIDEw MCA9IDAgT1JERVIgQlkgYiwgYTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2Ug QXBwZW5kCisgICBTb3J0IEtleTogYXN5bmNfcHQuYiwgYXN5bmNfcHQuYQorICAgLT4gIEFzeW5j IEZvcmVpZ24gU2NhbiBvbiBwdWJsaWMuYXN5bmNfcDEgYXN5bmNfcHRfMQorICAgICAgICAgT3V0 cHV0OiBhc3luY19wdF8xLmEsIGFzeW5jX3B0XzEuYiwgYXN5bmNfcHRfMS5jCisgICAgICAgICBS ZW1vdGUgU1FMOiBTRUxFQ1QgYSwgYiwgYyBGUk9NIHB1YmxpYy5iYXNlX3RibDEgV0hFUkUgKCgo YiAlIDEwMCkgPSAwKSkgT1JERVIgQlkgYiBBU0MgTlVMTFMgTEFTVCwgYSBBU0MgTlVMTFMgTEFT VAorICAgLT4gIEFzeW5jIEZvcmVpZ24gU2NhbiBvbiBwdWJsaWMuYXN5bmNfcDIgYXN5bmNfcHRf MgorICAgICAgICAgT3V0cHV0OiBhc3luY19wdF8yLmEsIGFzeW5jX3B0XzIuYiwgYXN5bmNfcHRf Mi5jCisgICAgICAgICBSZW1vdGUgU1FMOiBTRUxFQ1QgYSwgYiwgYyBGUk9NIHB1YmxpYy5iYXNl X3RibDIgV0hFUkUgKCgoYiAlIDEwMCkgPSAwKSkgT1JERVIgQlkgYiBBU0MgTlVMTFMgTEFTVCwg YSBBU0MgTlVMTFMgTEFTVAorKDggcm93cykKKworU0VMRUNUICogRlJPTSBhc3luY19wdCBXSEVS RSBiICUgMTAwID0gMCBPUkRFUiBCWSBiLCBhOworICBhICAgfCAgYiAgfCAgYyAgIAorLS0tLS0t Ky0tLS0tKy0tLS0tLQorIDEwMDAgfCAgIDAgfCAwMDAwCisgMjAwMCB8ICAgMCB8IDAwMDAKKyAx MTAwIHwgMTAwIHwgMDEwMAorIDIxMDAgfCAxMDAgfCAwMTAwCisgMTIwMCB8IDIwMCB8IDAyMDAK KyAyMjAwIHwgMjAwIHwgMDIwMAorIDEzMDAgfCAzMDAgfCAwMzAwCisgMjMwMCB8IDMwMCB8IDAz MDAKKyAxNDAwIHwgNDAwIHwgMDQwMAorIDI0MDAgfCA0MDAgfCAwNDAwCisgMTUwMCB8IDUwMCB8 IDA1MDAKKyAyNTAwIHwgNTAwIHwgMDUwMAorIDE2MDAgfCA2MDAgfCAwNjAwCisgMjYwMCB8IDYw MCB8IDA2MDAKKyAxNzAwIHwgNzAwIHwgMDcwMAorIDI3MDAgfCA3MDAgfCAwNzAwCisgMTgwMCB8 IDgwMCB8IDA4MDAKKyAyODAwIHwgODAwIHwgMDgwMAorIDE5MDAgfCA5MDAgfCAwOTAwCisgMjkw MCB8IDkwMCB8IDA5MDAKKygyMCByb3dzKQorCiAtLSBUZXN0IGVycm9yIGhhbmRsaW5nLCBpZiBh Y2Nlc3Npbmcgb25lIG9mIHRoZSBmb3JlaWduIHBhcnRpdGlvbnMgZXJyb3JzIG91dAogQ1JFQVRF IEZPUkVJR04gVEFCTEUgYXN5bmNfcF9icm9rZW4gUEFSVElUSU9OIE9GIGFzeW5jX3B0IEZPUiBW QUxVRVMgRlJPTSAoMTAwMDApIFRPICgxMDAwMSkKICAgU0VSVkVSIGxvb3BiYWNrIE9QVElPTlMg KHRhYmxlX25hbWUgJ25vbl9leGlzdGVudF90YWJsZScpOwpAQCAtMTE2MTUsNiArMTE2NTUsNzYg QEAgQ09QWSBhc3luY19wdCBUTyBzdGRvdXQ7IC0tZXJyb3IKIEVSUk9SOiAgY2Fubm90IGNvcHkg ZnJvbSBmb3JlaWduIHRhYmxlICJhc3luY19wMSIKIERFVEFJTDogIFBhcnRpdGlvbiAiYXN5bmNf cDEiIGlzIGEgZm9yZWlnbiB0YWJsZSBpbiBwYXJ0aXRpb25lZCB0YWJsZSAiYXN5bmNfcHQiCiBI SU5UOiAgVHJ5IHRoZSBDT1BZIChTRUxFQ1QgLi4uKSBUTyB2YXJpYW50LgorLS0gVGVzdCBNZXJn ZSBBcHBlbmQKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gYXN5 bmNfcHQgV0hFUkUgYiA9PT0gNTA1IE9SREVSIEJZIGIsIGE7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIEFwcGVuZAorICAgU29ydCBLZXk6IGFzeW5jX3B0LmIs IGFzeW5jX3B0LmEKKyAgIC0+ICBBc3luYyBGb3JlaWduIFNjYW4gb24gcHVibGljLmFzeW5jX3Ax IGFzeW5jX3B0XzEKKyAgICAgICAgIE91dHB1dDogYXN5bmNfcHRfMS5hLCBhc3luY19wdF8xLmIs IGFzeW5jX3B0XzEuYworICAgICAgICAgRmlsdGVyOiAoYXN5bmNfcHRfMS5iID09PSA1MDUpCisg ICAgICAgICBSZW1vdGUgU1FMOiBTRUxFQ1QgYSwgYiwgYyBGUk9NIHB1YmxpYy5iYXNlX3RibDEg T1JERVIgQlkgYiBBU0MgTlVMTFMgTEFTVCwgYSBBU0MgTlVMTFMgTEFTVAorICAgLT4gIEFzeW5j IEZvcmVpZ24gU2NhbiBvbiBwdWJsaWMuYXN5bmNfcDIgYXN5bmNfcHRfMgorICAgICAgICAgT3V0 cHV0OiBhc3luY19wdF8yLmEsIGFzeW5jX3B0XzIuYiwgYXN5bmNfcHRfMi5jCisgICAgICAgICBG aWx0ZXI6IChhc3luY19wdF8yLmIgPT09IDUwNSkKKyAgICAgICAgIFJlbW90ZSBTUUw6IFNFTEVD VCBhLCBiLCBjIEZST00gcHVibGljLmJhc2VfdGJsMiBPUkRFUiBCWSBiIEFTQyBOVUxMUyBMQVNU LCBhIEFTQyBOVUxMUyBMQVNUCisgICAtPiAgQXN5bmMgRm9yZWlnbiBTY2FuIG9uIHB1YmxpYy5h c3luY19wMyBhc3luY19wdF8zCisgICAgICAgICBPdXRwdXQ6IGFzeW5jX3B0XzMuYSwgYXN5bmNf cHRfMy5iLCBhc3luY19wdF8zLmMKKyAgICAgICAgIEZpbHRlcjogKGFzeW5jX3B0XzMuYiA9PT0g NTA1KQorICAgICAgICAgUmVtb3RlIFNRTDogU0VMRUNUIGEsIGIsIGMgRlJPTSBwdWJsaWMuYmFz ZV90YmwzIE9SREVSIEJZIGIgQVNDIE5VTExTIExBU1QsIGEgQVNDIE5VTExTIExBU1QKKygxNCBy b3dzKQorCitTRUxFQ1QgKiBGUk9NIGFzeW5jX3B0IFdIRVJFIGIgPT09IDUwNSBPUkRFUiBCWSBi LCBhOworICBhICAgfCAgYiAgfCAgYyAgIAorLS0tLS0tKy0tLS0tKy0tLS0tLQorIDE1MDUgfCA1 MDUgfCAwNTA1CisgMjUwNSB8IDUwNSB8IDA1MDUKKyAzNTA1IHwgNTA1IHwgMDUwNQorKDMgcm93 cykKKworLS0gVGVzdCBhc3luYyBNZXJnZSBBcHBlbmQgcmVzY2FuCitFWFBMQUlOIChWRVJCT1NF LCBDT1NUUyBPRkYpCitTRUxFQ1QKKwlBUlJBWShTRUxFQ1QgZi5pIEZST00gKFNFTEVDVCBiICsg Zy5pIEZST00gYXN5bmNfcHQgV0hFUkUgYSA+IGcuaSBPUkRFUiBCWSBiKSBmKGkpIE9SREVSIEJZ IGYuaSBMSU1JVCAxMCkKK0ZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDMpIGcoaSk7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgRnVuY3Rpb24gU2NhbiBvbiBwZ19jYXRhbG9n LmdlbmVyYXRlX3NlcmllcyBnCisgICBPdXRwdXQ6IEFSUkFZKFN1YlBsYW4gYXJyYXlfMSkKKyAg IEZ1bmN0aW9uIENhbGw6IGdlbmVyYXRlX3NlcmllcygxLCAzKQorICAgU3ViUGxhbiBhcnJheV8x CisgICAgIC0+ICBMaW1pdAorICAgICAgICAgICBPdXRwdXQ6IGYuaQorICAgICAgICAgICAtPiAg U29ydAorICAgICAgICAgICAgICAgICBPdXRwdXQ6IGYuaQorICAgICAgICAgICAgICAgICBTb3J0 IEtleTogZi5pCisgICAgICAgICAgICAgICAgIC0+ICBTdWJxdWVyeSBTY2FuIG9uIGYKKyAgICAg ICAgICAgICAgICAgICAgICAgT3V0cHV0OiBmLmkKKyAgICAgICAgICAgICAgICAgICAgICAgLT4g IE1lcmdlIEFwcGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3J0IEtleTogYXN5 bmNfcHQuYgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgQXN5bmMgRm9yZWlnbiBT Y2FuIG9uIHB1YmxpYy5hc3luY19wMSBhc3luY19wdF8xCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE91dHB1dDogKGFzeW5jX3B0XzEuYiArIGcuaSksIGFzeW5jX3B0XzEuYgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW1vdGUgU1FMOiBTRUxFQ1QgYiBG Uk9NIHB1YmxpYy5iYXNlX3RibDEgV0hFUkUgKChhID4gJDE6OmludGVnZXIpKSBPUkRFUiBCWSBi IEFTQyBOVUxMUyBMQVNUCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBBc3luYyBG b3JlaWduIFNjYW4gb24gcHVibGljLmFzeW5jX3AyIGFzeW5jX3B0XzIKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiAoYXN5bmNfcHRfMi5iICsgZy5pKSwgYXN5bmNf cHRfMi5iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbW90ZSBTUUw6IFNF TEVDVCBiIEZST00gcHVibGljLmJhc2VfdGJsMiBXSEVSRSAoKGEgPiAkMTo6aW50ZWdlcikpIE9S REVSIEJZIGIgQVNDIE5VTExTIExBU1QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4g IEFzeW5jIEZvcmVpZ24gU2NhbiBvbiBwdWJsaWMuYXN5bmNfcDMgYXN5bmNfcHRfMworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IChhc3luY19wdF8zLmIgKyBnLmkp LCBhc3luY19wdF8zLmIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVtb3Rl IFNRTDogU0VMRUNUIGIgRlJPTSBwdWJsaWMuYmFzZV90YmwzIFdIRVJFICgoYSA+ICQxOjppbnRl Z2VyKSkgT1JERVIgQlkgYiBBU0MgTlVMTFMgTEFTVAorKDIyIHJvd3MpCisKK1NFTEVDVAorCUFS UkFZKFNFTEVDVCBmLmkgRlJPTSAoU0VMRUNUIGIgKyBnLmkgRlJPTSBhc3luY19wdCBXSEVSRSBh ID4gZy5pIE9SREVSIEJZIGIpIGYoaSkgT1JERVIgQlkgZi5pIExJTUlUIDEwKQorRlJPTSBnZW5l cmF0ZV9zZXJpZXMoMSwgMykgZyhpKTsKKyAgICAgICAgICAgYXJyYXkgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgezEsMSwxLDYsNiw2LDExLDExLDExLDE2fQorIHsy LDIsMiw3LDcsNywxMiwxMiwxMiwxN30KKyB7MywzLDMsOCw4LDgsMTMsMTMsMTMsMTh9CisoMyBy b3dzKQorCiBEUk9QIEZPUkVJR04gVEFCTEUgYXN5bmNfcDM7CiBEUk9QIFRBQkxFIGJhc2VfdGJs MzsKIC0tIENoZWNrIGNhc2Ugd2hlcmUgdGhlIHBhcnRpdGlvbmVkIHRhYmxlIGhhcyBsb2NhbC9y ZW1vdGUgcGFydGl0aW9ucwpAQCAtMTE2NTAsNiArMTE3NjAsMzcgQEAgU0VMRUNUICogRlJPTSBy ZXN1bHRfdGJsIE9SREVSIEJZIGE7CiAoMyByb3dzKQogCiBERUxFVEUgRlJPTSByZXN1bHRfdGJs OworLS0gVGVzdCBNZXJnZSBBcHBlbmQKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NF TEVDVCAqIEZST00gYXN5bmNfcHQgV0hFUkUgYiA9PT0gNTA1IE9SREVSIEJZIGIsIGE7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIEFwcGVuZAorICAgU29ydCBL ZXk6IGFzeW5jX3B0LmIsIGFzeW5jX3B0LmEKKyAgIC0+ICBBc3luYyBGb3JlaWduIFNjYW4gb24g cHVibGljLmFzeW5jX3AxIGFzeW5jX3B0XzEKKyAgICAgICAgIE91dHB1dDogYXN5bmNfcHRfMS5h LCBhc3luY19wdF8xLmIsIGFzeW5jX3B0XzEuYworICAgICAgICAgRmlsdGVyOiAoYXN5bmNfcHRf MS5iID09PSA1MDUpCisgICAgICAgICBSZW1vdGUgU1FMOiBTRUxFQ1QgYSwgYiwgYyBGUk9NIHB1 YmxpYy5iYXNlX3RibDEgT1JERVIgQlkgYiBBU0MgTlVMTFMgTEFTVCwgYSBBU0MgTlVMTFMgTEFT VAorICAgLT4gIEFzeW5jIEZvcmVpZ24gU2NhbiBvbiBwdWJsaWMuYXN5bmNfcDIgYXN5bmNfcHRf MgorICAgICAgICAgT3V0cHV0OiBhc3luY19wdF8yLmEsIGFzeW5jX3B0XzIuYiwgYXN5bmNfcHRf Mi5jCisgICAgICAgICBGaWx0ZXI6IChhc3luY19wdF8yLmIgPT09IDUwNSkKKyAgICAgICAgIFJl bW90ZSBTUUw6IFNFTEVDVCBhLCBiLCBjIEZST00gcHVibGljLmJhc2VfdGJsMiBPUkRFUiBCWSBi IEFTQyBOVUxMUyBMQVNULCBhIEFTQyBOVUxMUyBMQVNUCisgICAtPiAgU29ydAorICAgICAgICAg T3V0cHV0OiBhc3luY19wdF8zLmEsIGFzeW5jX3B0XzMuYiwgYXN5bmNfcHRfMy5jCisgICAgICAg ICBTb3J0IEtleTogYXN5bmNfcHRfMy5iLCBhc3luY19wdF8zLmEKKyAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBwdWJsaWMuYXN5bmNfcDMgYXN5bmNfcHRfMworICAgICAgICAgICAgICAgT3V0cHV0 OiBhc3luY19wdF8zLmEsIGFzeW5jX3B0XzMuYiwgYXN5bmNfcHRfMy5jCisgICAgICAgICAgICAg ICBGaWx0ZXI6IChhc3luY19wdF8zLmIgPT09IDUwNSkKKygxNiByb3dzKQorCitTRUxFQ1QgKiBG Uk9NIGFzeW5jX3B0IFdIRVJFIGIgPT09IDUwNSBPUkRFUiBCWSBiLCBhOworICBhICAgfCAgYiAg fCAgYyAgIAorLS0tLS0tKy0tLS0tKy0tLS0tLQorIDE1MDUgfCA1MDUgfCAwNTA1CisgMjUwNSB8 IDUwNSB8IDA1MDUKKyAzNTA1IHwgNTA1IHwgMDUwNQorKDMgcm93cykKKwogLS0gcGFydGl0aW9u d2lzZSBqb2lucwogU0VUIGVuYWJsZV9wYXJ0aXRpb253aXNlX2pvaW4gVE8gdHJ1ZTsKIENSRUFU RSBUQUJMRSBqb2luX3RibCAoYTEgaW50LCBiMSBpbnQsIGMxIHRleHQsIGEyIGludCwgYjIgaW50 LCBjMiB0ZXh0KTsKQEAgLTEyNDMyLDYgKzEyNTczLDE1MyBAQCBTRUxFQ1QgYSBGUk9NIGJhc2Vf dGJsIFdIRVJFIChhLCByYW5kb20oKSA+IDApIElOIChTRUxFQ1QgYSwgcmFuZG9tKCkgPiAwIEZS T00gZgogRFJPUCBGT1JFSUdOIFRBQkxFIGZvcmVpZ25fdGJsIENBU0NBREU7CiBOT1RJQ0U6ICBk cm9wIGNhc2NhZGVzIHRvIGZvcmVpZ24gdGFibGUgZm9yZWlnbl90YmwyCiBEUk9QIFRBQkxFIGJh c2VfdGJsOworLS0gVGVzdCBhc3luYyBNZXJnZSBBcHBlbmQKK0NSRUFURSBUQUJMRSBkaXN0cjEg KGkgaW50LCBqIGludCwgayB0ZXh0KSBQQVJUSVRJT04gQlkgSEFTSCAoaSk7CitDUkVBVEUgVEFC TEUgYmFzZTEgKGkgaW50LCBqIGludCwgayB0ZXh0KTsKK0NSRUFURSBUQUJMRSBiYXNlMiAoaSBp bnQsIGogaW50LCBrIHRleHQpOworQ1JFQVRFIEZPUkVJR04gVEFCTEUgZGlzdHIxX3AxIFBBUlRJ VElPTiBPRiBkaXN0cjEgRk9SIFZBTFVFUyBXSVRIIChNT0RVTFVTIDIsIFJFTUFJTkRFUiAwKQor U0VSVkVSIGxvb3BiYWNrIE9QVElPTlMgKHRhYmxlX25hbWUgJ2Jhc2UxJyk7CitDUkVBVEUgRk9S RUlHTiBUQUJMRSBkaXN0cjFfcDIgUEFSVElUSU9OIE9GIGRpc3RyMSBGT1IgVkFMVUVTIFdJVEgg KE1PRFVMVVMgMiwgUkVNQUlOREVSIDEpCitTRVJWRVIgbG9vcGJhY2sgT1BUSU9OUyAodGFibGVf bmFtZSAnYmFzZTInKTsKK0NSRUFURSBUQUJMRSBkaXN0cjIgKGkgaW50LCBqIGludCwgayB0ZXh0 KSBQQVJUSVRJT04gQlkgSEFTSCAoaSk7CitDUkVBVEUgVEFCTEUgYmFzZTMgKGkgaW50LCBqIGlu dCwgayB0ZXh0KTsKK0NSRUFURSBUQUJMRSBiYXNlNCAoaSBpbnQsIGogaW50LCBrIHRleHQpOwor Q1JFQVRFIEZPUkVJR04gVEFCTEUgZGlzdHIyX3AxIFBBUlRJVElPTiBPRiBkaXN0cjIgRk9SIFZB TFVFUyBXSVRIIChNT0RVTFVTIDIsIFJFTUFJTkRFUiAwKQorU0VSVkVSIGxvb3BiYWNrIE9QVElP TlMgKHRhYmxlX25hbWUgJ2Jhc2UzJyk7CitDUkVBVEUgRk9SRUlHTiBUQUJMRSBkaXN0cjJfcDIg UEFSVElUSU9OIE9GIGRpc3RyMiBGT1IgVkFMVUVTIFdJVEggKE1PRFVMVVMgMiwgUkVNQUlOREVS IDEpCitTRVJWRVIgbG9vcGJhY2sgT1BUSU9OUyAodGFibGVfbmFtZSAnYmFzZTQnKTsKK0lOU0VS VCBJTlRPIGRpc3RyMQorU0VMRUNUIGksIGkqMTAsICdkYXRhXycgfHwgaSBGUk9NIGdlbmVyYXRl X3NlcmllcygxLCAxMDAwKSBpOworSU5TRVJUIElOVE8gZGlzdHIyCitTRUxFQ1QgaSwgaSoxMCwg J2RhdGFfJyB8fCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMCkgaTsKK0FOQUxZWkUgZGlz dHIxX3AxOworQU5BTFlaRSBkaXN0cjFfcDI7CitBTkFMWVpFIGRpc3RyMl9wMTsKK0FOQUxZWkUg ZGlzdHIyX3AyOworU0VUIGVuYWJsZV9wYXJ0aXRpb253aXNlX2pvaW4gVE8gT047CistLSBUZXN0 IGpvaW5zIHdpdGggYXN5bmMgTWVyZ2UgQXBwZW5kCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBP RkYpCitTRUxFQ1QgKiBGUk9NIGRpc3RyMSwgZGlzdHIyIFdIRVJFIGRpc3RyMS5pPWRpc3RyMi5p IEFORCBkaXN0cjIuaiA+IDkwIGFuZCBkaXN0cjIuayBsaWtlICdkYXRhJScKK09SREVSIEJZIGRp c3RyMi5pIExJTUlUIDEwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIExpbWl0CisgICBP dXRwdXQ6IGRpc3RyMS5pLCBkaXN0cjEuaiwgZGlzdHIxLmssIGRpc3RyMi5pLCBkaXN0cjIuaiwg ZGlzdHIyLmsKKyAgIC0+ICBNZXJnZSBBcHBlbmQKKyAgICAgICAgIFNvcnQgS2V5OiBkaXN0cjEu aQorICAgICAgICAgLT4gIEFzeW5jIEZvcmVpZ24gU2NhbgorICAgICAgICAgICAgICAgT3V0cHV0 OiBkaXN0cjFfMS5pLCBkaXN0cjFfMS5qLCBkaXN0cjFfMS5rLCBkaXN0cjJfMS5pLCBkaXN0cjJf MS5qLCBkaXN0cjJfMS5rCisgICAgICAgICAgICAgICBSZWxhdGlvbnM6IChwdWJsaWMuZGlzdHIx X3AxIGRpc3RyMV8xKSBJTk5FUiBKT0lOIChwdWJsaWMuZGlzdHIyX3AxIGRpc3RyMl8xKQorICAg ICAgICAgICAgICAgUmVtb3RlIFNRTDogU0VMRUNUIHIzLmksIHIzLmosIHIzLmssIHI1LmksIHI1 LmosIHI1LmsgRlJPTSAocHVibGljLmJhc2UxIHIzIElOTkVSIEpPSU4gcHVibGljLmJhc2UzIHI1 IE9OICgoKHIzLmkgPSByNS5pKSkgQU5EICgocjUuaiA+IDkwKSkgQU5EICgocjUuayB+fiAnZGF0 YSUnKSkpKSBPUkRFUiBCWSByMy5pIEFTQyBOVUxMUyBMQVNUCisgICAgICAgICAtPiAgQXN5bmMg Rm9yZWlnbiBTY2FuCisgICAgICAgICAgICAgICBPdXRwdXQ6IGRpc3RyMV8yLmksIGRpc3RyMV8y LmosIGRpc3RyMV8yLmssIGRpc3RyMl8yLmksIGRpc3RyMl8yLmosIGRpc3RyMl8yLmsKKyAgICAg ICAgICAgICAgIFJlbGF0aW9uczogKHB1YmxpYy5kaXN0cjFfcDIgZGlzdHIxXzIpIElOTkVSIEpP SU4gKHB1YmxpYy5kaXN0cjJfcDIgZGlzdHIyXzIpCisgICAgICAgICAgICAgICBSZW1vdGUgU1FM OiBTRUxFQ1QgcjQuaSwgcjQuaiwgcjQuaywgcjYuaSwgcjYuaiwgcjYuayBGUk9NIChwdWJsaWMu YmFzZTIgcjQgSU5ORVIgSk9JTiBwdWJsaWMuYmFzZTQgcjYgT04gKCgocjQuaSA9IHI2LmkpKSBB TkQgKChyNi5qID4gOTApKSBBTkQgKChyNi5rIH5+ICdkYXRhJScpKSkpIE9SREVSIEJZIHI0Lmkg QVNDIE5VTExTIExBU1QKKygxMiByb3dzKQorCitTRUxFQ1QgKiBGUk9NIGRpc3RyMSwgZGlzdHIy IFdIRVJFIGRpc3RyMS5pPWRpc3RyMi5pIEFORCBkaXN0cjIuaiA+IDkwIGFuZCBkaXN0cjIuayBs aWtlICdkYXRhJScKK09SREVSIEJZIGRpc3RyMi5pIExJTUlUIDEwOworIGkgIHwgIGogIHwgICAg ayAgICB8IGkgIHwgIGogIHwgICAgayAgICAKKy0tLS0rLS0tLS0rLS0tLS0tLS0tKy0tLS0rLS0t LS0rLS0tLS0tLS0tCisgMTAgfCAxMDAgfCBkYXRhXzEwIHwgMTAgfCAxMDAgfCBkYXRhXzEwCisg MTEgfCAxMTAgfCBkYXRhXzExIHwgMTEgfCAxMTAgfCBkYXRhXzExCisgMTIgfCAxMjAgfCBkYXRh XzEyIHwgMTIgfCAxMjAgfCBkYXRhXzEyCisgMTMgfCAxMzAgfCBkYXRhXzEzIHwgMTMgfCAxMzAg fCBkYXRhXzEzCisgMTQgfCAxNDAgfCBkYXRhXzE0IHwgMTQgfCAxNDAgfCBkYXRhXzE0CisgMTUg fCAxNTAgfCBkYXRhXzE1IHwgMTUgfCAxNTAgfCBkYXRhXzE1CisgMTYgfCAxNjAgfCBkYXRhXzE2 IHwgMTYgfCAxNjAgfCBkYXRhXzE2CisgMTcgfCAxNzAgfCBkYXRhXzE3IHwgMTcgfCAxNzAgfCBk YXRhXzE3CisgMTggfCAxODAgfCBkYXRhXzE4IHwgMTggfCAxODAgfCBkYXRhXzE4CisgMTkgfCAx OTAgfCBkYXRhXzE5IHwgMTkgfCAxOTAgfCBkYXRhXzE5CisoMTAgcm93cykKKworRVhQTEFJTiAo VkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBkaXN0cjEgTEVGVCBKT0lOIGRpc3Ry MiBPTiBkaXN0cjEuaT1kaXN0cjIuaSBBTkQgZGlzdHIyLmsgbGlrZSAnZGF0YSUnIFdIRVJFICBk aXN0cjEuaSA+IDkwCitPUkRFUiBCWSBkaXN0cjEuaSBMSU1JVCAyMDsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIExpbWl0CisgICBPdXRwdXQ6IGRpc3RyMS5pLCBkaXN0cjEuaiwgZGlz dHIxLmssIGRpc3RyMi5pLCBkaXN0cjIuaiwgZGlzdHIyLmsKKyAgIC0+ICBNZXJnZSBBcHBlbmQK KyAgICAgICAgIFNvcnQgS2V5OiBkaXN0cjEuaQorICAgICAgICAgLT4gIEFzeW5jIEZvcmVpZ24g U2NhbgorICAgICAgICAgICAgICAgT3V0cHV0OiBkaXN0cjFfMS5pLCBkaXN0cjFfMS5qLCBkaXN0 cjFfMS5rLCBkaXN0cjJfMS5pLCBkaXN0cjJfMS5qLCBkaXN0cjJfMS5rCisgICAgICAgICAgICAg ICBSZWxhdGlvbnM6IChwdWJsaWMuZGlzdHIxX3AxIGRpc3RyMV8xKSBMRUZUIEpPSU4gKHB1Ymxp Yy5kaXN0cjJfcDEgZGlzdHIyXzEpCisgICAgICAgICAgICAgICBSZW1vdGUgU1FMOiBTRUxFQ1Qg cjQuaSwgcjQuaiwgcjQuaywgcjYuaSwgcjYuaiwgcjYuayBGUk9NIChwdWJsaWMuYmFzZTEgcjQg TEVGVCBKT0lOIHB1YmxpYy5iYXNlMyByNiBPTiAoKChyNC5pID0gcjYuaSkpIEFORCAoKHI2Lmsg fn4gJ2RhdGElJykpKSkgV0hFUkUgKChyNC5pID4gOTApKSBPUkRFUiBCWSByNC5pIEFTQyBOVUxM UyBMQVNUCisgICAgICAgICAtPiAgQXN5bmMgRm9yZWlnbiBTY2FuCisgICAgICAgICAgICAgICBP dXRwdXQ6IGRpc3RyMV8yLmksIGRpc3RyMV8yLmosIGRpc3RyMV8yLmssIGRpc3RyMl8yLmksIGRp c3RyMl8yLmosIGRpc3RyMl8yLmsKKyAgICAgICAgICAgICAgIFJlbGF0aW9uczogKHB1YmxpYy5k aXN0cjFfcDIgZGlzdHIxXzIpIExFRlQgSk9JTiAocHVibGljLmRpc3RyMl9wMiBkaXN0cjJfMikK KyAgICAgICAgICAgICAgIFJlbW90ZSBTUUw6IFNFTEVDVCByNS5pLCByNS5qLCByNS5rLCByNy5p LCByNy5qLCByNy5rIEZST00gKHB1YmxpYy5iYXNlMiByNSBMRUZUIEpPSU4gcHVibGljLmJhc2U0 IHI3IE9OICgoKHI1LmkgPSByNy5pKSkgQU5EICgocjcuayB+fiAnZGF0YSUnKSkpKSBXSEVSRSAo KHI1LmkgPiA5MCkpIE9SREVSIEJZIHI1LmkgQVNDIE5VTExTIExBU1QKKygxMiByb3dzKQorCitT RUxFQ1QgKiBGUk9NIGRpc3RyMSBMRUZUIEpPSU4gZGlzdHIyIE9OICBkaXN0cjEuaT1kaXN0cjIu aSBBTkQgZGlzdHIyLmsgbGlrZSAnZGF0YSUnIFdIRVJFIGRpc3RyMS5pID4gOTAKK09SREVSIEJZ IGRpc3RyMS5pIExJTUlUIDIwOworICBpICB8ICBqICAgfCAgICBrICAgICB8ICBpICB8ICBqICAg fCAgICBrICAgICAKKy0tLS0tKy0tLS0tLSstLS0tLS0tLS0tKy0tLS0tKy0tLS0tLSstLS0tLS0t LS0tCisgIDkxIHwgIDkxMCB8IGRhdGFfOTEgIHwgIDkxIHwgIDkxMCB8IGRhdGFfOTEKKyAgOTIg fCAgOTIwIHwgZGF0YV85MiAgfCAgOTIgfCAgOTIwIHwgZGF0YV85MgorICA5MyB8ICA5MzAgfCBk YXRhXzkzICB8ICA5MyB8ICA5MzAgfCBkYXRhXzkzCisgIDk0IHwgIDk0MCB8IGRhdGFfOTQgIHwg IDk0IHwgIDk0MCB8IGRhdGFfOTQKKyAgOTUgfCAgOTUwIHwgZGF0YV85NSAgfCAgOTUgfCAgOTUw IHwgZGF0YV85NQorICA5NiB8ICA5NjAgfCBkYXRhXzk2ICB8ICA5NiB8ICA5NjAgfCBkYXRhXzk2 CisgIDk3IHwgIDk3MCB8IGRhdGFfOTcgIHwgIDk3IHwgIDk3MCB8IGRhdGFfOTcKKyAgOTggfCAg OTgwIHwgZGF0YV85OCAgfCAgOTggfCAgOTgwIHwgZGF0YV85OAorICA5OSB8ICA5OTAgfCBkYXRh Xzk5ICB8ICA5OSB8ICA5OTAgfCBkYXRhXzk5CisgMTAwIHwgMTAwMCB8IGRhdGFfMTAwIHwgMTAw IHwgMTAwMCB8IGRhdGFfMTAwCisgMTAxIHwgMTAxMCB8IGRhdGFfMTAxIHwgICAgIHwgICAgICB8 IAorIDEwMiB8IDEwMjAgfCBkYXRhXzEwMiB8ICAgICB8ICAgICAgfCAKKyAxMDMgfCAxMDMwIHwg ZGF0YV8xMDMgfCAgICAgfCAgICAgIHwgCisgMTA0IHwgMTA0MCB8IGRhdGFfMTA0IHwgICAgIHwg ICAgICB8IAorIDEwNSB8IDEwNTAgfCBkYXRhXzEwNSB8ICAgICB8ICAgICAgfCAKKyAxMDYgfCAx MDYwIHwgZGF0YV8xMDYgfCAgICAgfCAgICAgIHwgCisgMTA3IHwgMTA3MCB8IGRhdGFfMTA3IHwg ICAgIHwgICAgICB8IAorIDEwOCB8IDEwODAgfCBkYXRhXzEwOCB8ICAgICB8ICAgICAgfCAKKyAx MDkgfCAxMDkwIHwgZGF0YV8xMDkgfCAgICAgfCAgICAgIHwgCisgMTEwIHwgMTEwMCB8IGRhdGFf MTEwIHwgICAgIHwgICAgICB8IAorKDIwIHJvd3MpCisKKy0tIFRlc3QgcHJ1bmluZyB3aXRoIGFz eW5jIE1lcmdlIEFwcGVuZAorREVMRVRFIEZST00gZGlzdHIyOworSU5TRVJUIElOVE8gZGlzdHIy CitTRUxFQ1QgaSUxMCwgaSoxMCwgJ2RhdGFfJyB8fCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEs IDEwMDApIGk7CitERUFMTE9DQVRFIEFMTDsKK1NFVCBwbGFuX2NhY2hlX21vZGUgVE8gZm9yY2Vf Z2VuZXJpY19wbGFuOworUFJFUEFSRSBhc3luY19wdF9xdWVyeSAoaW50LCBpbnQpIEFTCisgIFNF TEVDVCAqIEZST00gZGlzdHIyIFdIRVJFIGkgPSBBTlkoQVJSQVlbJDEsICQyXSkKKyAgT1JERVIg QlkgaSxqCisgIExJTUlUIDEwOworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorCUVYRUNV VEUgYXN5bmNfcHRfcXVlcnkoMSwgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IExpbWl0CisgICBPdXRwdXQ6IGRpc3RyMi5pLCBkaXN0cjIuaiwgZGlzdHIyLmsKKyAgIC0+ICBN ZXJnZSBBcHBlbmQKKyAgICAgICAgIFNvcnQgS2V5OiBkaXN0cjIuaSwgZGlzdHIyLmoKKyAgICAg ICAgIFN1YnBsYW5zIFJlbW92ZWQ6IDEKKyAgICAgICAgIC0+ICBBc3luYyBGb3JlaWduIFNjYW4g b24gcHVibGljLmRpc3RyMl9wMSBkaXN0cjJfMQorICAgICAgICAgICAgICAgT3V0cHV0OiBkaXN0 cjJfMS5pLCBkaXN0cjJfMS5qLCBkaXN0cjJfMS5rCisgICAgICAgICAgICAgICBSZW1vdGUgU1FM OiBTRUxFQ1QgaSwgaiwgayBGUk9NIHB1YmxpYy5iYXNlMyBXSEVSRSAoKGkgPSBBTlkgKEFSUkFZ WyQxOjppbnRlZ2VyLCAkMjo6aW50ZWdlcl0pKSkgT1JERVIgQlkgaSBBU0MgTlVMTFMgTEFTVCwg aiBBU0MgTlVMTFMgTEFTVAorKDggcm93cykKKworRVhFQ1VURSBhc3luY19wdF9xdWVyeSgxLCAx KTsKKyBpIHwgIGogIHwgICAgayAgICAKKy0tLSstLS0tLSstLS0tLS0tLS0KKyAxIHwgIDEwIHwg ZGF0YV8xCisgMSB8IDExMCB8IGRhdGFfMTEKKyAxIHwgMjEwIHwgZGF0YV8yMQorIDEgfCAzMTAg fCBkYXRhXzMxCisgMSB8IDQxMCB8IGRhdGFfNDEKKyAxIHwgNTEwIHwgZGF0YV81MQorIDEgfCA2 MTAgfCBkYXRhXzYxCisgMSB8IDcxMCB8IGRhdGFfNzEKKyAxIHwgODEwIHwgZGF0YV84MQorIDEg fCA5MTAgfCBkYXRhXzkxCisoMTAgcm93cykKKworUkVTRVQgcGxhbl9jYWNoZV9tb2RlOworUkVT RVQgZW5hYmxlX3BhcnRpdGlvbndpc2Vfam9pbjsKK0RST1AgVEFCTEUgZGlzdHIxLCBkaXN0cjIs IGJhc2UxLCBiYXNlMiwgYmFzZTMsIGJhc2U0OwogQUxURVIgU0VSVkVSIGxvb3BiYWNrIE9QVElP TlMgKERST1AgYXN5bmNfY2FwYWJsZSk7CiBBTFRFUiBTRVJWRVIgbG9vcGJhY2syIE9QVElPTlMg KERST1AgYXN5bmNfY2FwYWJsZSk7CiAtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9jb250cmli L3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYyBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3Rn cmVzX2Zkdy5jCmluZGV4IDYwZDkwMzI5YTY1Li5jZjZiZjljZWY1MSAxMDA2NDQKLS0tIGEvY29u dHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMKKysrIGIvY29udHJpYi9wb3N0Z3Jlc19m ZHcvcG9zdGdyZXNfZmR3LmMKQEAgLTcyMTMsMTIgKzcyMTMsMTYgQEAgcG9zdGdyZXNGb3JlaWdu QXN5bmNDb25maWd1cmVXYWl0KEFzeW5jUmVxdWVzdCAqYXJlcSkKIAlGb3JlaWduU2NhblN0YXRl ICpub2RlID0gKEZvcmVpZ25TY2FuU3RhdGUgKikgYXJlcS0+cmVxdWVzdGVlOwogCVBnRmR3U2Nh blN0YXRlICpmc3N0YXRlID0gKFBnRmR3U2NhblN0YXRlICopIG5vZGUtPmZkd19zdGF0ZTsKIAlB c3luY1JlcXVlc3QgKnBlbmRpbmdBcmVxID0gZnNzdGF0ZS0+Y29ubl9zdGF0ZS0+cGVuZGluZ0Fy ZXE7Ci0JQXBwZW5kU3RhdGUgKnJlcXVlc3RvciA9IChBcHBlbmRTdGF0ZSAqKSBhcmVxLT5yZXF1 ZXN0b3I7Ci0JV2FpdEV2ZW50U2V0ICpzZXQgPSByZXF1ZXN0b3ItPmFzX2V2ZW50c2V0OworCVBs YW5TdGF0ZSAgKnJlcXVlc3RvciA9IGFyZXEtPnJlcXVlc3RvcjsKKwlXYWl0RXZlbnRTZXQgKnNl dDsKKwlCaXRtYXBzZXQgICpuZWVkcmVxdWVzdDsKIAogCS8qIFRoaXMgc2hvdWxkIG5vdCBiZSBj YWxsZWQgdW5sZXNzIGNhbGxiYWNrX3BlbmRpbmcgKi8KIAlBc3NlcnQoYXJlcS0+Y2FsbGJhY2tf cGVuZGluZyk7CiAKKwlzZXQgPSBHZXRBcHBlbmRFdmVudFNldChyZXF1ZXN0b3IpOworCW5lZWRy ZXF1ZXN0ID0gR2V0TmVlZFJlcXVlc3QocmVxdWVzdG9yKTsKKwogCS8qCiAJICogSWYgcHJvY2Vz c19wZW5kaW5nX3JlcXVlc3QoKSBoYXMgYmVlbiBpbnZva2VkIG9uIHRoZSBnaXZlbiByZXF1ZXN0 CiAJICogYmVmb3JlIHdlIGdldCBoZXJlLCB3ZSBtaWdodCBoYXZlIHNvbWUgdHVwbGVzIGFscmVh ZHk7IGluIHdoaWNoIGNhc2UKQEAgLTcyNTYsNyArNzI2MCw3IEBAIHBvc3RncmVzRm9yZWlnbkFz eW5jQ29uZmlndXJlV2FpdChBc3luY1JlcXVlc3QgKmFyZXEpCiAJCSAqIGJlbG93LCBiZWNhdXNl IHdlIG1pZ2h0IG90aGVyd2lzZSBlbmQgdXAgd2l0aCBubyBjb25maWd1cmVkIGV2ZW50cwogCQkg KiBvdGhlciB0aGFuIHRoZSBwb3N0bWFzdGVyIGRlYXRoIGV2ZW50LgogCQkgKi8KLQkJaWYgKCFi bXNfaXNfZW1wdHkocmVxdWVzdG9yLT5hc19uZWVkcmVxdWVzdCkpCisJCWlmICghYm1zX2lzX2Vt cHR5KG5lZWRyZXF1ZXN0KSkKIAkJCXJldHVybjsKIAkJaWYgKEdldE51bVJlZ2lzdGVyZWRXYWl0 RXZlbnRzKHNldCkgPiAxKQogCQkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wb3N0Z3Jl c19mZHcvc3FsL3Bvc3RncmVzX2Zkdy5zcWwgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9zcWwvcG9z dGdyZXNfZmR3LnNxbAppbmRleCA3MmQyZDljMzExYi4uYzk1NjBmYTg5YTUgMTAwNjQ0Ci0tLSBh L2NvbnRyaWIvcG9zdGdyZXNfZmR3L3NxbC9wb3N0Z3Jlc19mZHcuc3FsCisrKyBiL2NvbnRyaWIv cG9zdGdyZXNfZmR3L3NxbC9wb3N0Z3Jlc19mZHcuc3FsCkBAIC0zOTM2LDYgKzM5MzYsMTEgQEAg SU5TRVJUIElOVE8gcmVzdWx0X3RibCBTRUxFQ1QgYSwgYiwgJ0FBQScgfHwgYyBGUk9NIGFzeW5j X3B0IFdIRVJFIGIgPT09IDUwNTsKIFNFTEVDVCAqIEZST00gcmVzdWx0X3RibCBPUkRFUiBCWSBh OwogREVMRVRFIEZST00gcmVzdWx0X3RibDsKIAorLS0gVGVzdCBNZXJnZSBBcHBlbmQKK0VYUExB SU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gYXN5bmNfcHQgV0hFUkUgYiAl IDEwMCA9IDAgT1JERVIgQlkgYiwgYTsKK1NFTEVDVCAqIEZST00gYXN5bmNfcHQgV0hFUkUgYiAl IDEwMCA9IDAgT1JERVIgQlkgYiwgYTsKKwogLS0gVGVzdCBlcnJvciBoYW5kbGluZywgaWYgYWNj ZXNzaW5nIG9uZSBvZiB0aGUgZm9yZWlnbiBwYXJ0aXRpb25zIGVycm9ycyBvdXQKIENSRUFURSBG T1JFSUdOIFRBQkxFIGFzeW5jX3BfYnJva2VuIFBBUlRJVElPTiBPRiBhc3luY19wdCBGT1IgVkFM VUVTIEZST00gKDEwMDAwKSBUTyAoMTAwMDEpCiAgIFNFUlZFUiBsb29wYmFjayBPUFRJT05TICh0 YWJsZV9uYW1lICdub25fZXhpc3RlbnRfdGFibGUnKTsKQEAgLTM5NTksNiArMzk2NCwyMCBAQCBE RUxFVEUgRlJPTSByZXN1bHRfdGJsOwogLS0gVGVzdCBDT1BZIFRPIHdoZW4gZm9yZWlnbiB0YWJs ZSBpcyBwYXJ0aXRpb24KIENPUFkgYXN5bmNfcHQgVE8gc3Rkb3V0OyAtLWVycm9yCiAKKy0tIFRl c3QgTWVyZ2UgQXBwZW5kCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBG Uk9NIGFzeW5jX3B0IFdIRVJFIGIgPT09IDUwNSBPUkRFUiBCWSBiLCBhOworU0VMRUNUICogRlJP TSBhc3luY19wdCBXSEVSRSBiID09PSA1MDUgT1JERVIgQlkgYiwgYTsKKworLS0gVGVzdCBhc3lu YyBNZXJnZSBBcHBlbmQgcmVzY2FuCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxF Q1QKKwlBUlJBWShTRUxFQ1QgZi5pIEZST00gKFNFTEVDVCBiICsgZy5pIEZST00gYXN5bmNfcHQg V0hFUkUgYSA+IGcuaSBPUkRFUiBCWSBiKSBmKGkpIE9SREVSIEJZIGYuaSBMSU1JVCAxMCkKK0ZS T00gZ2VuZXJhdGVfc2VyaWVzKDEsIDMpIGcoaSk7CitTRUxFQ1QKKwlBUlJBWShTRUxFQ1QgZi5p IEZST00gKFNFTEVDVCBiICsgZy5pIEZST00gYXN5bmNfcHQgV0hFUkUgYSA+IGcuaSBPUkRFUiBC WSBiKSBmKGkpIE9SREVSIEJZIGYuaSBMSU1JVCAxMCkKK0ZST00gZ2VuZXJhdGVfc2VyaWVzKDEs IDMpIGcoaSk7CisKIERST1AgRk9SRUlHTiBUQUJMRSBhc3luY19wMzsKIERST1AgVEFCTEUgYmFz ZV90YmwzOwogCkBAIC0zOTc0LDYgKzM5OTMsMTEgQEAgSU5TRVJUIElOVE8gcmVzdWx0X3RibCBT RUxFQ1QgKiBGUk9NIGFzeW5jX3B0IFdIRVJFIGIgPT09IDUwNTsKIFNFTEVDVCAqIEZST00gcmVz dWx0X3RibCBPUkRFUiBCWSBhOwogREVMRVRFIEZST00gcmVzdWx0X3RibDsKIAorLS0gVGVzdCBN ZXJnZSBBcHBlbmQKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00g YXN5bmNfcHQgV0hFUkUgYiA9PT0gNTA1IE9SREVSIEJZIGIsIGE7CitTRUxFQ1QgKiBGUk9NIGFz eW5jX3B0IFdIRVJFIGIgPT09IDUwNSBPUkRFUiBCWSBiLCBhOworCiAtLSBwYXJ0aXRpb253aXNl IGpvaW5zCiBTRVQgZW5hYmxlX3BhcnRpdGlvbndpc2Vfam9pbiBUTyB0cnVlOwogCkBAIC00MjEy LDYgKzQyMzYsNjkgQEAgU0VMRUNUIGEgRlJPTSBiYXNlX3RibCBXSEVSRSAoYSwgcmFuZG9tKCkg PiAwKSBJTiAoU0VMRUNUIGEsIHJhbmRvbSgpID4gMCBGUk9NIGYKIERST1AgRk9SRUlHTiBUQUJM RSBmb3JlaWduX3RibCBDQVNDQURFOwogRFJPUCBUQUJMRSBiYXNlX3RibDsKIAorLS0gVGVzdCBh c3luYyBNZXJnZSBBcHBlbmQKK0NSRUFURSBUQUJMRSBkaXN0cjEgKGkgaW50LCBqIGludCwgayB0 ZXh0KSBQQVJUSVRJT04gQlkgSEFTSCAoaSk7CitDUkVBVEUgVEFCTEUgYmFzZTEgKGkgaW50LCBq IGludCwgayB0ZXh0KTsKK0NSRUFURSBUQUJMRSBiYXNlMiAoaSBpbnQsIGogaW50LCBrIHRleHQp OworQ1JFQVRFIEZPUkVJR04gVEFCTEUgZGlzdHIxX3AxIFBBUlRJVElPTiBPRiBkaXN0cjEgRk9S IFZBTFVFUyBXSVRIIChNT0RVTFVTIDIsIFJFTUFJTkRFUiAwKQorU0VSVkVSIGxvb3BiYWNrIE9Q VElPTlMgKHRhYmxlX25hbWUgJ2Jhc2UxJyk7CitDUkVBVEUgRk9SRUlHTiBUQUJMRSBkaXN0cjFf cDIgUEFSVElUSU9OIE9GIGRpc3RyMSBGT1IgVkFMVUVTIFdJVEggKE1PRFVMVVMgMiwgUkVNQUlO REVSIDEpCitTRVJWRVIgbG9vcGJhY2sgT1BUSU9OUyAodGFibGVfbmFtZSAnYmFzZTInKTsKKwor Q1JFQVRFIFRBQkxFIGRpc3RyMiAoaSBpbnQsIGogaW50LCBrIHRleHQpIFBBUlRJVElPTiBCWSBI QVNIIChpKTsKK0NSRUFURSBUQUJMRSBiYXNlMyAoaSBpbnQsIGogaW50LCBrIHRleHQpOworQ1JF QVRFIFRBQkxFIGJhc2U0IChpIGludCwgaiBpbnQsIGsgdGV4dCk7CitDUkVBVEUgRk9SRUlHTiBU QUJMRSBkaXN0cjJfcDEgUEFSVElUSU9OIE9GIGRpc3RyMiBGT1IgVkFMVUVTIFdJVEggKE1PRFVM VVMgMiwgUkVNQUlOREVSIDApCitTRVJWRVIgbG9vcGJhY2sgT1BUSU9OUyAodGFibGVfbmFtZSAn YmFzZTMnKTsKK0NSRUFURSBGT1JFSUdOIFRBQkxFIGRpc3RyMl9wMiBQQVJUSVRJT04gT0YgZGlz dHIyIEZPUiBWQUxVRVMgV0lUSCAoTU9EVUxVUyAyLCBSRU1BSU5ERVIgMSkKK1NFUlZFUiBsb29w YmFjayBPUFRJT05TICh0YWJsZV9uYW1lICdiYXNlNCcpOworCitJTlNFUlQgSU5UTyBkaXN0cjEK K1NFTEVDVCBpLCBpKjEwLCAnZGF0YV8nIHx8IGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAw MCkgaTsKKworSU5TRVJUIElOVE8gZGlzdHIyCitTRUxFQ1QgaSwgaSoxMCwgJ2RhdGFfJyB8fCBp IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMCkgaTsKKworQU5BTFlaRSBkaXN0cjFfcDE7CitB TkFMWVpFIGRpc3RyMV9wMjsKK0FOQUxZWkUgZGlzdHIyX3AxOworQU5BTFlaRSBkaXN0cjJfcDI7 CisKK1NFVCBlbmFibGVfcGFydGl0aW9ud2lzZV9qb2luIFRPIE9OOworCistLSBUZXN0IGpvaW5z IHdpdGggYXN5bmMgTWVyZ2UgQXBwZW5kCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitT RUxFQ1QgKiBGUk9NIGRpc3RyMSwgZGlzdHIyIFdIRVJFIGRpc3RyMS5pPWRpc3RyMi5pIEFORCBk aXN0cjIuaiA+IDkwIGFuZCBkaXN0cjIuayBsaWtlICdkYXRhJScKK09SREVSIEJZIGRpc3RyMi5p IExJTUlUIDEwOworU0VMRUNUICogRlJPTSBkaXN0cjEsIGRpc3RyMiBXSEVSRSBkaXN0cjEuaT1k aXN0cjIuaSBBTkQgZGlzdHIyLmogPiA5MCBhbmQgZGlzdHIyLmsgbGlrZSAnZGF0YSUnCitPUkRF UiBCWSBkaXN0cjIuaSBMSU1JVCAxMDsKKworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQor U0VMRUNUICogRlJPTSBkaXN0cjEgTEVGVCBKT0lOIGRpc3RyMiBPTiBkaXN0cjEuaT1kaXN0cjIu aSBBTkQgZGlzdHIyLmsgbGlrZSAnZGF0YSUnIFdIRVJFICBkaXN0cjEuaSA+IDkwCitPUkRFUiBC WSBkaXN0cjEuaSBMSU1JVCAyMDsKK1NFTEVDVCAqIEZST00gZGlzdHIxIExFRlQgSk9JTiBkaXN0 cjIgT04gIGRpc3RyMS5pPWRpc3RyMi5pIEFORCBkaXN0cjIuayBsaWtlICdkYXRhJScgV0hFUkUg ZGlzdHIxLmkgPiA5MAorT1JERVIgQlkgZGlzdHIxLmkgTElNSVQgMjA7CisKKy0tIFRlc3QgcHJ1 bmluZyB3aXRoIGFzeW5jIE1lcmdlIEFwcGVuZAorREVMRVRFIEZST00gZGlzdHIyOworSU5TRVJU IElOVE8gZGlzdHIyCitTRUxFQ1QgaSUxMCwgaSoxMCwgJ2RhdGFfJyB8fCBpIEZST00gZ2VuZXJh dGVfc2VyaWVzKDEsIDEwMDApIGk7CisKK0RFQUxMT0NBVEUgQUxMOworU0VUIHBsYW5fY2FjaGVf bW9kZSBUTyBmb3JjZV9nZW5lcmljX3BsYW47CitQUkVQQVJFIGFzeW5jX3B0X3F1ZXJ5IChpbnQs IGludCkgQVMKKyAgU0VMRUNUICogRlJPTSBkaXN0cjIgV0hFUkUgaSA9IEFOWShBUlJBWVskMSwg JDJdKQorICBPUkRFUiBCWSBpLGoKKyAgTElNSVQgMTA7CitFWFBMQUlOIChWRVJCT1NFLCBDT1NU UyBPRkYpCisJRVhFQ1VURSBhc3luY19wdF9xdWVyeSgxLCAxKTsKK0VYRUNVVEUgYXN5bmNfcHRf cXVlcnkoMSwgMSk7CitSRVNFVCBwbGFuX2NhY2hlX21vZGU7CisKK1JFU0VUIGVuYWJsZV9wYXJ0 aXRpb253aXNlX2pvaW47CisKK0RST1AgVEFCTEUgZGlzdHIxLCBkaXN0cjIsIGJhc2UxLCBiYXNl MiwgYmFzZTMsIGJhc2U0OworCiBBTFRFUiBTRVJWRVIgbG9vcGJhY2sgT1BUSU9OUyAoRFJPUCBh c3luY19jYXBhYmxlKTsKIEFMVEVSIFNFUlZFUiBsb29wYmFjazIgT1BUSU9OUyAoRFJPUCBhc3lu Y19jYXBhYmxlKTsKIApkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sIGIvZG9j L3NyYy9zZ21sL2NvbmZpZy5zZ21sCmluZGV4IGY2NzBlMmQ0YzMxLi5mMmQ3ZDRlOGY1OCAxMDA2 NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9jb25m aWcuc2dtbApAQCAtNTU0MSw2ICs1NTQxLDIwIEBAIEFOWSA8cmVwbGFjZWFibGUgY2xhc3M9InBh cmFtZXRlciI+bnVtX3N5bmM8L3JlcGxhY2VhYmxlPiAoIDxyZXBsYWNlYWJsZSBjbGFzcz0iCiAg ICAgICA8L2xpc3RpdGVtPgogICAgICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgICA8dmFybGlzdGVu dHJ5IGlkPSJndWMtZW5hYmxlLWFzeW5jLW1lcmdlLWFwcGVuZCIgeHJlZmxhYmVsPSJlbmFibGVf YXN5bmNfbWVyZ2VfYXBwZW5kIj4KKyAgICAgIDx0ZXJtPjx2YXJuYW1lPmVuYWJsZV9hc3luY19t ZXJnZV9hcHBlbmQ8L3Zhcm5hbWU+ICg8dHlwZT5ib29sZWFuPC90eXBlPikKKyAgICAgIDxpbmRl eHRlcm0+CisgICAgICAgPHByaW1hcnk+PHZhcm5hbWU+ZW5hYmxlX2FzeW5jX21lcmdlX2FwcGVu ZDwvdmFybmFtZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgICA8L2lu ZGV4dGVybT4KKyAgICAgIDwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4K KyAgICAgICAgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgcXVlcnkgcGxhbm5lcidzIHVzZSBvZiBh c3luYy1hd2FyZQorICAgICAgICBtZXJnZSBhcHBlbmQgcGxhbiB0eXBlcy4gVGhlIGRlZmF1bHQg aXMgPGxpdGVyYWw+b248L2xpdGVyYWw+LgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0 ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorCiAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy1l bmFibGUtYml0bWFwc2NhbiIgeHJlZmxhYmVsPSJlbmFibGVfYml0bWFwc2NhbiI+CiAgICAgICA8 dGVybT48dmFybmFtZT5lbmFibGVfYml0bWFwc2NhbjwvdmFybmFtZT4gKDx0eXBlPmJvb2xlYW48 L3R5cGU+KQogICAgICAgPGluZGV4dGVybT4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL2V4ZWNBc3luYy5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FzeW5jLmMKaW5kZXgg ODcyODExMTM1NWQuLmU3Yzc3ZjNjZDJhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRv ci9leGVjQXN5bmMuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjQXN5bmMuYwpAQCAt MTcsNiArMTcsNyBAQAogI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWNBc3luYy5oIgogI2luY2x1ZGUg ImV4ZWN1dG9yL2V4ZWN1dG9yLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3Ivbm9kZUFwcGVuZC5oIgor I2luY2x1ZGUgImV4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5oIgogI2luY2x1ZGUgImV4ZWN1dG9y L25vZGVGb3JlaWduc2Nhbi5oIgogCiAvKgpAQCAtMTIxLDYgKzEyMiw5IEBAIEV4ZWNBc3luY1Jl c3BvbnNlKEFzeW5jUmVxdWVzdCAqYXJlcSkKIAkJY2FzZSBUX0FwcGVuZFN0YXRlOgogCQkJRXhl Y0FzeW5jQXBwZW5kUmVzcG9uc2UoYXJlcSk7CiAJCQlicmVhazsKKwkJY2FzZSBUX01lcmdlQXBw ZW5kU3RhdGU6CisJCQlFeGVjQXN5bmNNZXJnZUFwcGVuZFJlc3BvbnNlKGFyZXEpOworCQkJYnJl YWs7CiAJCWRlZmF1bHQ6CiAJCQkvKiBJZiB0aGUgbm9kZSBkb2Vzbid0IHN1cHBvcnQgYXN5bmMs IGNhbGxlciBtZXNzZWQgdXAuICovCiAJCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIG5vZGUg dHlwZTogJWQiLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFwcGVuZC5j IGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFwcGVuZC5jCmluZGV4IDM5ZDk0NDJjMTIxLi4w NTlmOTZkMjBmNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFwcGVuZC5j CisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBcHBlbmQuYwpAQCAtMTE4OCwxMCArMTE4 OCw3IEBAIEV4ZWNBc3luY0FwcGVuZFJlc3BvbnNlKEFzeW5jUmVxdWVzdCAqYXJlcSkKIHN0YXRp YyB2b2lkCiBjbGFzc2lmeV9tYXRjaGluZ19zdWJwbGFucyhBcHBlbmRTdGF0ZSAqbm9kZSkKIHsK LQlCaXRtYXBzZXQgICp2YWxpZF9hc3luY3BsYW5zOwotCiAJQXNzZXJ0KG5vZGUtPmFzX3ZhbGlk X3N1YnBsYW5zX2lkZW50aWZpZWQpOwotCUFzc2VydChub2RlLT5hc192YWxpZF9hc3luY3BsYW5z ID09IE5VTEwpOwogCiAJLyogTm90aGluZyB0byBkbyBpZiB0aGVyZSBhcmUgbm8gdmFsaWQgc3Vi cGxhbnMuICovCiAJaWYgKGJtc19pc19lbXB0eShub2RlLT5hc192YWxpZF9zdWJwbGFucykpCkBA IC0xMjAxLDIxICsxMTk4LDEwIEBAIGNsYXNzaWZ5X21hdGNoaW5nX3N1YnBsYW5zKEFwcGVuZFN0 YXRlICpub2RlKQogCQlyZXR1cm47CiAJfQogCi0JLyogTm90aGluZyB0byBkbyBpZiB0aGVyZSBh cmUgbm8gdmFsaWQgYXN5bmMgc3VicGxhbnMuICovCi0JaWYgKCFibXNfb3ZlcmxhcChub2RlLT5h c192YWxpZF9zdWJwbGFucywgbm9kZS0+YXNfYXN5bmNwbGFucykpCi0JeworCS8qIE5vIHZhbGlk IGFzeW5jIHN1YnBsYW5zIGlkZW50aWZpZWQuICovCisJaWYgKCFjbGFzc2lmeV9tYXRjaGluZ19z dWJwbGFuc19jb21tb24oCisJCQkJCQkJCQkJICAgJm5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5zLAor CQkJCQkJCQkJCSAgIG5vZGUtPmFzX2FzeW5jcGxhbnMsCisJCQkJCQkJCQkJICAgJm5vZGUtPmFz X3ZhbGlkX2FzeW5jcGxhbnMpKQogCQlub2RlLT5hc19uYXN5bmNyZW1haW4gPSAwOwotCQlyZXR1 cm47Ci0JfQotCi0JLyogR2V0IHZhbGlkIGFzeW5jIHN1YnBsYW5zLiAqLwotCXZhbGlkX2FzeW5j cGxhbnMgPSBibXNfaW50ZXJzZWN0KG5vZGUtPmFzX2FzeW5jcGxhbnMsCi0JCQkJCQkJCQkgbm9k ZS0+YXNfdmFsaWRfc3VicGxhbnMpOwotCi0JLyogQWRqdXN0IHRoZSB2YWxpZCBzdWJwbGFucyB0 byBjb250YWluIHN5bmMgc3VicGxhbnMgb25seS4gKi8KLQlub2RlLT5hc192YWxpZF9zdWJwbGFu cyA9IGJtc19kZWxfbWVtYmVycyhub2RlLT5hc192YWxpZF9zdWJwbGFucywKLQkJCQkJCQkJCQkJ ICB2YWxpZF9hc3luY3BsYW5zKTsKLQotCS8qIFNhdmUgdmFsaWQgYXN5bmMgc3VicGxhbnMuICov Ci0Jbm9kZS0+YXNfdmFsaWRfYXN5bmNwbGFucyA9IHZhbGlkX2FzeW5jcGxhbnM7CiB9CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuYyBiL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5jCmluZGV4IDMwYmZlYWY3YzEzLi4zOTgxMDY5 MWJhNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmMK KysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmMKQEAgLTM5LDEwICsz OSwxNSBAQAogI2luY2x1ZGUgInBvc3RncmVzLmgiCiAKICNpbmNsdWRlICJleGVjdXRvci9leGVj dXRvci5oIgorI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWNBc3luYy5oIgogI2luY2x1ZGUgImV4ZWN1 dG9yL2V4ZWNQYXJ0aXRpb24uaCIKICNpbmNsdWRlICJleGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQu aCIKICNpbmNsdWRlICJsaWIvYmluYXJ5aGVhcC5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgor I2luY2x1ZGUgInN0b3JhZ2UvbGF0Y2guaCIKKyNpbmNsdWRlICJ1dGlscy93YWl0X2V2ZW50Lmgi CisKKyNkZWZpbmUgRVZFTlRfQlVGRkVSX1NJWkUgICAgICAgICAgICAgICAgICAgICAxNgogCiAv KgogICogV2UgaGF2ZSBvbmUgc2xvdCBmb3IgZWFjaCBpdGVtIGluIHRoZSBoZWFwIGFycmF5LiAg V2UgdXNlIFNsb3ROdW1iZXIKQEAgLTU0LDYgKzU5LDEyIEBAIHR5cGVkZWYgaW50MzIgU2xvdE51 bWJlcjsKIHN0YXRpYyBUdXBsZVRhYmxlU2xvdCAqRXhlY01lcmdlQXBwZW5kKFBsYW5TdGF0ZSAq cHN0YXRlKTsKIHN0YXRpYyBpbnQJaGVhcF9jb21wYXJlX3Nsb3RzKERhdHVtIGEsIERhdHVtIGIs IHZvaWQgKmFyZyk7CiAKK3N0YXRpYyB2b2lkIGNsYXNzaWZ5X21hdGNoaW5nX3N1YnBsYW5zKE1l cmdlQXBwZW5kU3RhdGUgKm5vZGUpOworc3RhdGljIHZvaWQgRXhlY01lcmdlQXBwZW5kQXN5bmNC ZWdpbihNZXJnZUFwcGVuZFN0YXRlICpub2RlKTsKK3N0YXRpYyB2b2lkIEV4ZWNNZXJnZUFwcGVu ZEFzeW5jR2V0TmV4dChNZXJnZUFwcGVuZFN0YXRlICpub2RlLCBpbnQgbXBsYW4pOworc3RhdGlj IGJvb2wgRXhlY01lcmdlQXBwZW5kQXN5bmNSZXF1ZXN0KE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUs IGludCBtcGxhbik7CitzdGF0aWMgdm9pZCBFeGVjTWVyZ2VBcHBlbmRBc3luY0V2ZW50V2FpdChN ZXJnZUFwcGVuZFN0YXRlICpub2RlKTsKKwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgkJRXhlY0luaXRNZXJn ZUFwcGVuZApAQCAtNzEsNiArODIsOCBAQCBFeGVjSW5pdE1lcmdlQXBwZW5kKE1lcmdlQXBwZW5k ICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAlpbnQJCQlucGxhbnM7CiAJaW50 CQkJaSwKIAkJCQlqOworCUJpdG1hcHNldCAgKmFzeW5jcGxhbnM7CisJaW50CQkJbmFzeW5jcGxh bnM7CiAKIAkvKiBjaGVjayBmb3IgdW5zdXBwb3J0ZWQgZmxhZ3MgKi8KIAlBc3NlcnQoIShlZmxh Z3MgJiAoRVhFQ19GTEFHX0JBQ0tXQVJEIHwgRVhFQ19GTEFHX01BUkspKSk7CkBAIC0xMDYsNyAr MTE5LDEwIEBAIEV4ZWNJbml0TWVyZ2VBcHBlbmQoTWVyZ2VBcHBlbmQgKm5vZGUsIEVTdGF0ZSAq ZXN0YXRlLCBpbnQgZWZsYWdzKQogCQkgKiBsYXRlciBjYWxscyB0byBFeGVjRmluZE1hdGNoaW5n U3ViUGxhbnMuCiAJCSAqLwogCQlpZiAoIXBydW5lc3RhdGUtPmRvX2V4ZWNfcHJ1bmUgJiYgbnBs YW5zID4gMCkKKwkJewogCQkJbWVyZ2VzdGF0ZS0+bXNfdmFsaWRfc3VicGxhbnMgPSBibXNfYWRk X3JhbmdlKE5VTEwsIDAsIG5wbGFucyAtIDEpOworCQkJbWVyZ2VzdGF0ZS0+bXNfdmFsaWRfc3Vi cGxhbnNfaWRlbnRpZmllZCA9IHRydWU7CisJCX0KIAl9CiAJZWxzZQogCXsKQEAgLTExOSw2ICsx MzUsNyBAQCBFeGVjSW5pdE1lcmdlQXBwZW5kKE1lcmdlQXBwZW5kICpub2RlLCBFU3RhdGUgKmVz dGF0ZSwgaW50IGVmbGFncykKIAkJQXNzZXJ0KG5wbGFucyA+IDApOwogCQltZXJnZXN0YXRlLT5t c192YWxpZF9zdWJwbGFucyA9IHZhbGlkc3VicGxhbnMgPQogCQkJYm1zX2FkZF9yYW5nZShOVUxM LCAwLCBucGxhbnMgLSAxKTsKKwkJbWVyZ2VzdGF0ZS0+bXNfdmFsaWRfc3VicGxhbnNfaWRlbnRp ZmllZCA9IHRydWU7CiAJCW1lcmdlc3RhdGUtPm1zX3BydW5lX3N0YXRlID0gTlVMTDsKIAl9CiAK QEAgLTEzNSwxMSArMTUyLDI1IEBAIEV4ZWNJbml0TWVyZ2VBcHBlbmQoTWVyZ2VBcHBlbmQgKm5v ZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCSAqIHRoZSByZXN1bHRzIGludG8gdGhl IG1lcmdlcGxhbnN0YXRlcyBhcnJheS4KIAkgKi8KIAlqID0gMDsKKwlhc3luY3BsYW5zID0gTlVM TDsKKwluYXN5bmNwbGFucyA9IDA7CisKIAlpID0gLTE7CiAJd2hpbGUgKChpID0gYm1zX25leHRf bWVtYmVyKHZhbGlkc3VicGxhbnMsIGkpKSA+PSAwKQogCXsKIAkJUGxhbgkgICAqaW5pdE5vZGUg PSAoUGxhbiAqKSBsaXN0X250aChub2RlLT5tZXJnZXBsYW5zLCBpKTsKIAorCQkvKgorCQkgKiBS ZWNvcmQgYXN5bmMgc3VicGxhbnMuICBXaGVuIGV4ZWN1dGluZyBFdmFsUGxhblF1YWwsIHdlIHRy ZWF0IHRoZW0KKwkJICogYXMgc3luYyBvbmVzOyBkb24ndCBkbyB0aGlzIHdoZW4gaW5pdGlhbGl6 aW5nIGFuIEV2YWxQbGFuUXVhbCBwbGFuCisJCSAqIHRyZWUuCisJCSAqLworCQlpZiAoaW5pdE5v ZGUtPmFzeW5jX2NhcGFibGUgJiYgZXN0YXRlLT5lc19lcHFfYWN0aXZlID09IE5VTEwpCisJCXsK KwkJCWFzeW5jcGxhbnMgPSBibXNfYWRkX21lbWJlcihhc3luY3BsYW5zLCBqKTsKKwkJCW5hc3lu Y3BsYW5zKys7CisJCX0KKwogCQltZXJnZXBsYW5zdGF0ZXNbaisrXSA9IEV4ZWNJbml0Tm9kZShp bml0Tm9kZSwgZXN0YXRlLCBlZmxhZ3MpOwogCX0KIApAQCAtMTcwLDYgKzIwMSw0NSBAQCBFeGVj SW5pdE1lcmdlQXBwZW5kKE1lcmdlQXBwZW5kICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVm bGFncykKIAkgKi8KIAltZXJnZXN0YXRlLT5wcy5wc19Qcm9qSW5mbyA9IE5VTEw7CiAKKwkvKiBJ bml0aWFsaXplIGFzeW5jIHN0YXRlICovCisJbWVyZ2VzdGF0ZS0+bXNfYXN5bmNwbGFucyA9IGFz eW5jcGxhbnM7CisJbWVyZ2VzdGF0ZS0+bXNfbmFzeW5jcGxhbnMgPSBuYXN5bmNwbGFuczsKKwlt ZXJnZXN0YXRlLT5tc19hc3luY3JlcXVlc3RzID0gTlVMTDsKKwltZXJnZXN0YXRlLT5tc19hc3lu Y3Jlc3VsdHMgPSBOVUxMOworCW1lcmdlc3RhdGUtPm1zX2hhc19hc3luY3Jlc3VsdHMgPSBOVUxM OworCW1lcmdlc3RhdGUtPm1zX2FzeW5jcmVtYWluID0gTlVMTDsKKwltZXJnZXN0YXRlLT5tc19u ZWVkcmVxdWVzdCA9IE5VTEw7CisJbWVyZ2VzdGF0ZS0+bXNfZXZlbnRzZXQgPSBOVUxMOworCW1l cmdlc3RhdGUtPm1zX3ZhbGlkX2FzeW5jcGxhbnMgPSBOVUxMOworCisJaWYgKG5hc3luY3BsYW5z ID4gMCkKKwl7CisJCW1lcmdlc3RhdGUtPm1zX2FzeW5jcmVxdWVzdHMgPSAoQXN5bmNSZXF1ZXN0 ICoqKQorCQkJcGFsbG9jMChucGxhbnMgKiBzaXplb2YoQXN5bmNSZXF1ZXN0ICopKTsKKworCQlp ID0gLTE7CisJCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihhc3luY3BsYW5zLCBpKSkgPj0g MCkKKwkJeworCQkJQXN5bmNSZXF1ZXN0ICphcmVxOworCisJCQlhcmVxID0gcGFsbG9jKHNpemVv ZihBc3luY1JlcXVlc3QpKTsKKwkJCWFyZXEtPnJlcXVlc3RvciA9IChQbGFuU3RhdGUgKikgbWVy Z2VzdGF0ZTsKKwkJCWFyZXEtPnJlcXVlc3RlZSA9IG1lcmdlcGxhbnN0YXRlc1tpXTsKKwkJCWFy ZXEtPnJlcXVlc3RfaW5kZXggPSBpOworCQkJYXJlcS0+Y2FsbGJhY2tfcGVuZGluZyA9IGZhbHNl OworCQkJYXJlcS0+cmVxdWVzdF9jb21wbGV0ZSA9IGZhbHNlOworCQkJYXJlcS0+cmVzdWx0ID0g TlVMTDsKKworCQkJbWVyZ2VzdGF0ZS0+bXNfYXN5bmNyZXF1ZXN0c1tpXSA9IGFyZXE7CisJCX0K KworCQltZXJnZXN0YXRlLT5tc19hc3luY3Jlc3VsdHMgPSAoVHVwbGVUYWJsZVNsb3QgKiopCisJ CQlwYWxsb2MwKG5wbGFucyAqIHNpemVvZihUdXBsZVRhYmxlU2xvdCAqKSk7CisKKwkJaWYgKG1l cmdlc3RhdGUtPm1zX3ZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQpCisJCQljbGFzc2lmeV9tYXRj aGluZ19zdWJwbGFucyhtZXJnZXN0YXRlKTsKKwl9CisKIAkvKgogCSAqIGluaXRpYWxpemUgc29y dC1rZXkgaW5mb3JtYXRpb24KIAkgKi8KQEAgLTIyNiwxNCArMjk2LDE4IEBAIEV4ZWNNZXJnZUFw cGVuZChQbGFuU3RhdGUgKnBzdGF0ZSkKIAkJaWYgKG5vZGUtPm1zX25wbGFucyA9PSAwKQogCQkJ cmV0dXJuIEV4ZWNDbGVhclR1cGxlKG5vZGUtPnBzLnBzX1Jlc3VsdFR1cGxlU2xvdCk7CiAKLQkJ LyoKLQkJICogSWYgd2UndmUgeWV0IHRvIGRldGVybWluZSB0aGUgdmFsaWQgc3VicGxhbnMgdGhl biBkbyBzbyBub3cuICBJZgotCQkgKiBydW4tdGltZSBwcnVuaW5nIGlzIGRpc2FibGVkIHRoZW4g dGhlIHZhbGlkIHN1YnBsYW5zIHdpbGwgYWx3YXlzIGJlCi0JCSAqIHNldCB0byBhbGwgc3VicGxh bnMuCi0JCSAqLwotCQlpZiAobm9kZS0+bXNfdmFsaWRfc3VicGxhbnMgPT0gTlVMTCkKKwkJLyog SWYgd2UndmUgeWV0IHRvIGRldGVybWluZSB0aGUgdmFsaWQgc3VicGxhbnMgdGhlbiBkbyBzbyBu b3cuICovCisJCWlmICghbm9kZS0+bXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCkKKwkJewog CQkJbm9kZS0+bXNfdmFsaWRfc3VicGxhbnMgPQogCQkJCUV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFu cyhub2RlLT5tc19wcnVuZV9zdGF0ZSwgZmFsc2UsIE5VTEwpOworCQkJbm9kZS0+bXNfdmFsaWRf c3VicGxhbnNfaWRlbnRpZmllZCA9IHRydWU7CisJCQljbGFzc2lmeV9tYXRjaGluZ19zdWJwbGFu cyhub2RlKTsKKwkJfQorCisJCS8qIElmIHRoZXJlIGFyZSBhbnkgYXN5bmMgc3VicGxhbnMsIGJl Z2luIGV4ZWN1dGluZyB0aGVtLiAqLworCQlpZiAobm9kZS0+bXNfbmFzeW5jcGxhbnMgPiAwKQor CQkJRXhlY01lcmdlQXBwZW5kQXN5bmNCZWdpbihub2RlKTsKIAogCQkvKgogCQkgKiBGaXJzdCB0 aW1lIHRocm91Z2g6IHB1bGwgdGhlIGZpcnN0IHR1cGxlIGZyb20gZWFjaCB2YWxpZCBzdWJwbGFu LApAQCAtMjQ2LDYgKzMyMCwxNiBAQCBFeGVjTWVyZ2VBcHBlbmQoUGxhblN0YXRlICpwc3RhdGUp CiAJCQlpZiAoIVR1cElzTnVsbChub2RlLT5tc19zbG90c1tpXSkpCiAJCQkJYmluYXJ5aGVhcF9h ZGRfdW5vcmRlcmVkKG5vZGUtPm1zX2hlYXAsIEludDMyR2V0RGF0dW0oaSkpOwogCQl9CisKKwkJ LyogTG9vayBhdCB2YWxpZCBhc3luYyBzdWJwbGFucyAqLworCQlpID0gLTE7CisJCXdoaWxlICgo aSA9IGJtc19uZXh0X21lbWJlcihub2RlLT5tc192YWxpZF9hc3luY3BsYW5zLCBpKSkgPj0gMCkK KwkJeworCQkJRXhlY01lcmdlQXBwZW5kQXN5bmNHZXROZXh0KG5vZGUsIGkpOworCQkJaWYgKCFU dXBJc051bGwobm9kZS0+bXNfc2xvdHNbaV0pKQorCQkJCWJpbmFyeWhlYXBfYWRkX3Vub3JkZXJl ZChub2RlLT5tc19oZWFwLCBJbnQzMkdldERhdHVtKGkpKTsKKwkJfQorCiAJCWJpbmFyeWhlYXBf YnVpbGQobm9kZS0+bXNfaGVhcCk7CiAJCW5vZGUtPm1zX2luaXRpYWxpemVkID0gdHJ1ZTsKIAl9 CkBAIC0yNjAsNyArMzQ0LDEzIEBAIEV4ZWNNZXJnZUFwcGVuZChQbGFuU3RhdGUgKnBzdGF0ZSkK IAkJICogdG8gbm90IHB1bGwgdHVwbGVzIHVudGlsIG5lY2Vzc2FyeS4pCiAJCSAqLwogCQlpID0g RGF0dW1HZXRJbnQzMihiaW5hcnloZWFwX2ZpcnN0KG5vZGUtPm1zX2hlYXApKTsKLQkJbm9kZS0+ bXNfc2xvdHNbaV0gPSBFeGVjUHJvY05vZGUobm9kZS0+bWVyZ2VwbGFuc1tpXSk7CisJCWlmIChi bXNfaXNfbWVtYmVyKGksIG5vZGUtPm1zX2FzeW5jcGxhbnMpKQorCQkJRXhlY01lcmdlQXBwZW5k QXN5bmNHZXROZXh0KG5vZGUsIGkpOworCQllbHNlCisJCXsKKwkJCUFzc2VydChibXNfaXNfbWVt YmVyKGksIG5vZGUtPm1zX3ZhbGlkX3N1YnBsYW5zKSk7CisJCQlub2RlLT5tc19zbG90c1tpXSA9 IEV4ZWNQcm9jTm9kZShub2RlLT5tZXJnZXBsYW5zW2ldKTsKKwkJfQogCQlpZiAoIVR1cElzTnVs bChub2RlLT5tc19zbG90c1tpXSkpCiAJCQliaW5hcnloZWFwX3JlcGxhY2VfZmlyc3Qobm9kZS0+ bXNfaGVhcCwgSW50MzJHZXREYXR1bShpKSk7CiAJCWVsc2UKQEAgLTI3Niw2ICszNjYsOCBAQCBF eGVjTWVyZ2VBcHBlbmQoUGxhblN0YXRlICpwc3RhdGUpCiAJewogCQlpID0gRGF0dW1HZXRJbnQz MihiaW5hcnloZWFwX2ZpcnN0KG5vZGUtPm1zX2hlYXApKTsKIAkJcmVzdWx0ID0gbm9kZS0+bXNf c2xvdHNbaV07CisJCS8qIEZvciBhc3luYyBwbGFuIHJlY29yZCB0aGF0IHdlIGNhbiBnZXQgdGhl IG5leHQgdHVwbGUgKi8KKwkJbm9kZS0+bXNfaGFzX2FzeW5jcmVzdWx0cyA9IGJtc19kZWxfbWVt YmVyKG5vZGUtPm1zX2hhc19hc3luY3Jlc3VsdHMsIGkpOwogCX0KIAogCXJldHVybiByZXN1bHQ7 CkBAIC0zNTUsNiArNDQ3LDcgQEAgdm9pZAogRXhlY1JlU2Nhbk1lcmdlQXBwZW5kKE1lcmdlQXBw ZW5kU3RhdGUgKm5vZGUpCiB7CiAJaW50CQkJaTsKKwlpbnQJCQluYXN5bmNwbGFucyA9IG5vZGUt Pm1zX25hc3luY3BsYW5zOwogCiAJLyoKIAkgKiBJZiBhbnkgUEFSQU1fRVhFQyBQYXJhbXMgdXNl ZCBpbiBwcnVuaW5nIGV4cHJlc3Npb25zIGhhdmUgY2hhbmdlZCwgdGhlbgpAQCAtMzY1LDggKzQ1 OCwxMSBAQCBFeGVjUmVTY2FuTWVyZ2VBcHBlbmQoTWVyZ2VBcHBlbmRTdGF0ZSAqbm9kZSkKIAkJ Ym1zX292ZXJsYXAobm9kZS0+cHMuY2hnUGFyYW0sCiAJCQkJCW5vZGUtPm1zX3BydW5lX3N0YXRl LT5leGVjcGFyYW1pZHMpKQogCXsKKwkJbm9kZS0+bXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmll ZCA9IGZhbHNlOwogCQlibXNfZnJlZShub2RlLT5tc192YWxpZF9zdWJwbGFucyk7CiAJCW5vZGUt Pm1zX3ZhbGlkX3N1YnBsYW5zID0gTlVMTDsKKwkJYm1zX2ZyZWUobm9kZS0+bXNfdmFsaWRfYXN5 bmNwbGFucyk7CisJCW5vZGUtPm1zX3ZhbGlkX2FzeW5jcGxhbnMgPSBOVUxMOwogCX0KIAogCWZv ciAoaSA9IDA7IGkgPCBub2RlLT5tc19ucGxhbnM7IGkrKykKQEAgLTM4Nyw2ICs0ODMsMzY3IEBA IEV4ZWNSZVNjYW5NZXJnZUFwcGVuZChNZXJnZUFwcGVuZFN0YXRlICpub2RlKQogCQlpZiAoc3Vi bm9kZS0+Y2hnUGFyYW0gPT0gTlVMTCkKIAkJCUV4ZWNSZVNjYW4oc3Vibm9kZSk7CiAJfQorCisJ LyogUmVzZXQgYXN5bmMgc3RhdGUgKi8KKwlpZiAobmFzeW5jcGxhbnMgPiAwKQorCXsKKwkJaSA9 IC0xOworCQl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIobm9kZS0+bXNfYXN5bmNwbGFucywg aSkpID49IDApCisJCXsKKwkJCUFzeW5jUmVxdWVzdCAqYXJlcSA9IG5vZGUtPm1zX2FzeW5jcmVx dWVzdHNbaV07CisKKwkJCWFyZXEtPmNhbGxiYWNrX3BlbmRpbmcgPSBmYWxzZTsKKwkJCWFyZXEt PnJlcXVlc3RfY29tcGxldGUgPSBmYWxzZTsKKwkJCWFyZXEtPnJlc3VsdCA9IE5VTEw7CisJCX0K KworCQlibXNfZnJlZShub2RlLT5tc19hc3luY3JlbWFpbik7CisJCW5vZGUtPm1zX2FzeW5jcmVt YWluID0gTlVMTDsKKwkJYm1zX2ZyZWUobm9kZS0+bXNfbmVlZHJlcXVlc3QpOworCQlub2RlLT5t c19uZWVkcmVxdWVzdCA9IE5VTEw7CisJCWJtc19mcmVlKG5vZGUtPm1zX2hhc19hc3luY3Jlc3Vs dHMpOworCQlub2RlLT5tc19oYXNfYXN5bmNyZXN1bHRzID0gTlVMTDsKKwl9CiAJYmluYXJ5aGVh cF9yZXNldChub2RlLT5tc19oZWFwKTsKIAlub2RlLT5tc19pbml0aWFsaXplZCA9IGZhbHNlOwog fQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgKiAgICAgICAgICAgICAgY2xhc3NpZnlfbWF0Y2hpbmdfc3VicGxh bnMKKyAqCisgKiAgICAgICAgICAgICAgQ2xhc3NpZnkgdGhlIG5vZGUncyBtc192YWxpZF9zdWJw bGFucyBpbnRvIHN5bmMgb25lcyBhbmQKKyAqICAgICAgICAgICAgICBhc3luYyBvbmVzLCBhZGp1 c3QgaXQgdG8gY29udGFpbiBzeW5jIG9uZXMgb25seSwgYW5kIHNhdmUKKyAqICAgICAgICAgICAg ICBhc3luYyBvbmVzIGluIHRoZSBub2RlJ3MgbXNfdmFsaWRfYXN5bmNwbGFucy4KKyAqIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqLworc3RhdGljIHZvaWQKK2NsYXNzaWZ5X21hdGNoaW5nX3N1YnBsYW5zKE1lcmdlQXBw ZW5kU3RhdGUgKm5vZGUpCit7CisJQXNzZXJ0KG5vZGUtPm1zX3ZhbGlkX3N1YnBsYW5zX2lkZW50 aWZpZWQpOworCisJLyogTm90aGluZyB0byBkbyBpZiB0aGVyZSBhcmUgbm8gdmFsaWQgc3VicGxh bnMuICovCisJaWYgKGJtc19pc19lbXB0eShub2RlLT5tc192YWxpZF9zdWJwbGFucykpCisJewor CQlub2RlLT5tc19hc3luY3JlbWFpbiA9IE5VTEw7CisJCXJldHVybjsKKwl9CisKKwkvKiBObyB2 YWxpZCBhc3luYyBzdWJwbGFucyBpZGVudGlmaWVkLiAqLworCWlmICghY2xhc3NpZnlfbWF0Y2hp bmdfc3VicGxhbnNfY29tbW9uKAorCQkJCQkJCQkJCSAgICZub2RlLT5tc192YWxpZF9zdWJwbGFu cywKKwkJCQkJCQkJCQkgICBub2RlLT5tc19hc3luY3BsYW5zLAorCQkJCQkJCQkJCSAgICZub2Rl LT5tc192YWxpZF9hc3luY3BsYW5zKSkKKwkJbm9kZS0+bXNfYXN5bmNyZW1haW4gPSBOVUxMOwor fQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgKiAgICAgICAgICAgICAgRXhlY01lcmdlQXBwZW5kQXN5bmNCZWdp bgorICoKKyAqICAgICAgICAgICAgICBCZWdpbiBleGVjdXRpbmcgZGVzaWduZWQgYXN5bmMtY2Fw YWJsZSBzdWJwbGFucy4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworc3RhdGljIHZvaWQKK0V4ZWNNZXJnZUFw cGVuZEFzeW5jQmVnaW4oTWVyZ2VBcHBlbmRTdGF0ZSAqbm9kZSkKK3sKKwlpbnQJCQlpOworCisJ LyogQmFja3dhcmQgc2NhbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGFzeW5jLWF3YXJlIE1lcmdlQXBw ZW5kcy4gKi8KKwlBc3NlcnQoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChub2RlLT5wcy5zdGF0ZS0+ ZXNfZGlyZWN0aW9uKSk7CisKKwkvKiBXZSBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIHdoZW4gdGhl cmUgYXJlIG5vIHN1YnBsYW5zICovCisJQXNzZXJ0KG5vZGUtPm1zX25wbGFucyA+IDApOworCisJ LyogV2Ugc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCB3aGVuIHRoZXJlIGFyZSBubyBhc3luYyBzdWJw bGFucy4gKi8KKwlBc3NlcnQobm9kZS0+bXNfbmFzeW5jcGxhbnMgPiAwKTsKKworCS8qIEV4ZWNN ZXJnZUFwcGVuZCgpIGlkZW50aWZpZXMgdmFsaWQgc3VicGxhbnMgKi8KKwlBc3NlcnQobm9kZS0+ bXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCk7CisKKwkvKiBJbml0aWFsaXplIHN0YXRlIHZh cmlhYmxlcy4gKi8KKwlub2RlLT5tc19hc3luY3JlbWFpbiA9IGJtc19jb3B5KG5vZGUtPm1zX3Zh bGlkX2FzeW5jcGxhbnMpOworCisJLyogTm90aGluZyB0byBkbyBpZiB0aGVyZSBhcmUgbm8gdmFs aWQgYXN5bmMgc3VicGxhbnMuICovCisJaWYgKGJtc19pc19lbXB0eShub2RlLT5tc19hc3luY3Jl bWFpbikpCisJCXJldHVybjsKKworCS8qIE1ha2UgYSByZXF1ZXN0IGZvciBlYWNoIG9mIHRoZSB2 YWxpZCBhc3luYyBzdWJwbGFucy4gKi8KKwlpID0gLTE7CisJd2hpbGUgKChpID0gYm1zX25leHRf bWVtYmVyKG5vZGUtPm1zX3ZhbGlkX2FzeW5jcGxhbnMsIGkpKSA+PSAwKQorCXsKKwkJQXN5bmNS ZXF1ZXN0ICphcmVxID0gbm9kZS0+bXNfYXN5bmNyZXF1ZXN0c1tpXTsKKworCQlBc3NlcnQoYXJl cS0+cmVxdWVzdF9pbmRleCA9PSBpKTsKKwkJQXNzZXJ0KCFhcmVxLT5jYWxsYmFja19wZW5kaW5n KTsKKworCQkvKiBEbyB0aGUgYWN0dWFsIHdvcmsuICovCisJCUV4ZWNBc3luY1JlcXVlc3QoYXJl cSk7CisJfQorfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgICAgICAgICAgICAgRXhlY01lcmdlQXBwZW5k QXN5bmNHZXROZXh0CisgKgorICogICAgICAgICAgICAgIEdldCB0aGUgbmV4dCB0dXBsZSBmcm9t IHNwZWNpZmllZCBhc3luY2hyb25vdXMgc3VicGxhbi4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworc3RhdGlj IHZvaWQKK0V4ZWNNZXJnZUFwcGVuZEFzeW5jR2V0TmV4dChNZXJnZUFwcGVuZFN0YXRlICpub2Rl LCBpbnQgbXBsYW4pCit7CisJbm9kZS0+bXNfc2xvdHNbbXBsYW5dID0gTlVMTDsKKworCS8qIFJl cXVlc3QgYSB0dXBsZSBhc3luY2hyb25vdXNseS4gKi8KKwlpZiAoRXhlY01lcmdlQXBwZW5kQXN5 bmNSZXF1ZXN0KG5vZGUsIG1wbGFuKSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBub2RlLT5tc19h c3luY3JlbWFpbiBjYW4gYmUgTlVMTCBpZiB3ZSBoYXZlIGZldGNoZWQgdHVwbGVzLCBidXQgaGF2 ZW4ndAorCSAqIHJldHVybmVkIHRoZW0geWV0LiBJbiB0aGlzIGNhc2UgRXhlY01lcmdlQXBwZW5k QXN5bmNSZXF1ZXN0KCkgYWJvdmUKKwkgKiBqdXN0IHJldHVybnMgdHVwbGVzIHdpdGhvdXQgcGVy Zm9ybWluZyBhIHJlcXVlc3QuCisJICovCisJd2hpbGUgKGJtc19pc19tZW1iZXIobXBsYW4sIG5v ZGUtPm1zX2FzeW5jcmVtYWluKSkKKwl7CisJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CisKKwkJ LyogV2FpdCBvciBwb2xsIGZvciBhc3luYyBldmVudHMuICovCisJCUV4ZWNNZXJnZUFwcGVuZEFz eW5jRXZlbnRXYWl0KG5vZGUpOworCisJCS8qIFJlcXVlc3QgYSB0dXBsZSBhc3luY2hyb25vdXNs eS4gKi8KKwkJaWYgKEV4ZWNNZXJnZUFwcGVuZEFzeW5jUmVxdWVzdChub2RlLCBtcGxhbikpCisJ CQlyZXR1cm47CisKKwkJLyoKKwkJICogV2FpdGluZyB1bnRpbCB0aGVyZSdzIG5vIGFzeW5jIHJl cXVlc3RzIHBlbmRpbmcgb3Igd2UgZ290IHNvbWUKKwkJICogdHVwbGVzIGZyb20gb3VyIHJlcXVl c3QKKwkJICovCisJfQorCisJLyogTm8gdHVwbGVzICovCisJcmV0dXJuOworfQorCisvKiAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKiAgICAgICAgICAgICAgRXhlY01lcmdlQXBwZW5kQXN5bmNSZXF1ZXN0CisgKgorICog ICAgICAgICAgICAgIFJlcXVlc3QgYSB0dXBsZSBhc3luY2hyb25vdXNseS4KKyAqIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqLworc3RhdGljIGJvb2wKK0V4ZWNNZXJnZUFwcGVuZEFzeW5jUmVxdWVzdChNZXJnZUFwcGVu ZFN0YXRlICpub2RlLCBpbnQgbXBsYW4pCit7CisJQml0bWFwc2V0ICAqbmVlZHJlcXVlc3Q7CisJ aW50CQkJaTsKKworCS8qCisJICogSWYgd2UndmUgYWxyZWFkeSBmZXRjaGVkIG5lY2Vzc2FyeSBk YXRhLCBqdXN0IHJldHVybiBpdAorCSAqLworCWlmIChibXNfaXNfbWVtYmVyKG1wbGFuLCBub2Rl LT5tc19oYXNfYXN5bmNyZXN1bHRzKSkKKwl7CisJCW5vZGUtPm1zX3Nsb3RzW21wbGFuXSA9IG5v ZGUtPm1zX2FzeW5jcmVzdWx0c1ttcGxhbl07CisJCXJldHVybiB0cnVlOworCX0KKworCS8qCisJ ICogR2V0IGEgbGlzdCBvZiBtZW1iZXJzIHdoaWNoIGNhbiBwcm9jZXNzIHJlcXVlc3QgYW5kIGRv bid0IGhhdmUgZGF0YQorCSAqIHJlYWR5LgorCSAqLworCW5lZWRyZXF1ZXN0ID0gTlVMTDsKKwlp ID0gLTE7CisJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKG5vZGUtPm1zX25lZWRyZXF1ZXN0 LCBpKSkgPj0gMCkKKwl7CisJCWlmICghYm1zX2lzX21lbWJlcihpLCBub2RlLT5tc19oYXNfYXN5 bmNyZXN1bHRzKSkKKwkJCW5lZWRyZXF1ZXN0ID0gYm1zX2FkZF9tZW1iZXIobmVlZHJlcXVlc3Qs IGkpOworCX0KKworCS8qCisJICogSWYgdGhlcmUncyBubyBtZW1iZXJzLCB3aGljaCBzdGlsbCBu ZWVkIHJlcXVlc3QsIG5vIG5lZWQgdG8gc2VuZCBpdC4KKwkgKi8KKwlpZiAoYm1zX2lzX2VtcHR5 KG5lZWRyZXF1ZXN0KSkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogQ2xlYXIgbXNfbmVlZHJlcXVl c3QgZmxhZywgYXMgd2UgYXJlIGdvaW5nIHRvIHNlbmQgcmVxdWVzdHMgbm93ICovCisJbm9kZS0+ bXNfbmVlZHJlcXVlc3QgPSBibXNfZGVsX21lbWJlcnMobm9kZS0+bXNfbmVlZHJlcXVlc3QsIG5l ZWRyZXF1ZXN0KTsKKworCS8qIE1ha2UgYSBuZXcgcmVxdWVzdCBmb3IgZWFjaCBvZiB0aGUgYXN5 bmMgc3VicGxhbnMgdGhhdCBuZWVkIGl0LiAqLworCWkgPSAtMTsKKwl3aGlsZSAoKGkgPSBibXNf bmV4dF9tZW1iZXIobmVlZHJlcXVlc3QsIGkpKSA+PSAwKQorCXsKKwkJQXN5bmNSZXF1ZXN0ICph cmVxID0gbm9kZS0+bXNfYXN5bmNyZXF1ZXN0c1tpXTsKKworCQkvKgorCQkgKiBXZSd2ZSBqdXN0 IGNoZWNrZWQgdGhhdCBzdWJwbGFuIGRvZXNuJ3QgYWxyZWFkeSBoYXZlIHNvbWUgZmV0Y2hlZAor CQkgKiBkYXRhCisJCSAqLworCQlBc3NlcnQoIWJtc19pc19tZW1iZXIoaSwgbm9kZS0+bXNfaGFz X2FzeW5jcmVzdWx0cykpOworCisJCS8qIERvIHRoZSBhY3R1YWwgd29yay4gKi8KKwkJRXhlY0Fz eW5jUmVxdWVzdChhcmVxKTsKKwl9CisJYm1zX2ZyZWUobmVlZHJlcXVlc3QpOworCisJLyogUmV0 dXJuIG5lZWRlZCBhc3luY2hyb25vdXNseS1nZW5lcmF0ZWQgcmVzdWx0cyBpZiBhbnkuICovCisJ aWYgKGJtc19pc19tZW1iZXIobXBsYW4sIG5vZGUtPm1zX2hhc19hc3luY3Jlc3VsdHMpKQorCXsK KwkJbm9kZS0+bXNfc2xvdHNbbXBsYW5dID0gbm9kZS0+bXNfYXN5bmNyZXN1bHRzW21wbGFuXTsK KwkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCisvKiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg KiAgICAgICAgICAgICAgRXhlY0FzeW5jTWVyZ2VBcHBlbmRSZXNwb25zZQorICoKKyAqICAgICAg ICAgICAgICBSZWNlaXZlIGEgcmVzcG9uc2UgZnJvbSBhbiBhc3luY2hyb25vdXMgcmVxdWVzdCB3 ZSBtYWRlLgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICovCit2b2lkCitFeGVjQXN5bmNNZXJnZUFwcGVuZFJlc3Bv bnNlKEFzeW5jUmVxdWVzdCAqYXJlcSkKK3sKKwlNZXJnZUFwcGVuZFN0YXRlICpub2RlID0gKE1l cmdlQXBwZW5kU3RhdGUgKikgYXJlcS0+cmVxdWVzdG9yOworCVR1cGxlVGFibGVTbG90ICpzbG90 ID0gYXJlcS0+cmVzdWx0OworCisJLyogVGhlIHJlc3VsdCBzaG91bGQgYmUgYSBUdXBsZVRhYmxl U2xvdCBvciBOVUxMLiAqLworCUFzc2VydChzbG90ID09IE5VTEwgfHwgSXNBKHNsb3QsIFR1cGxl VGFibGVTbG90KSk7CisJLyogV2Ugc2hvdWxkIGhhbmRsZSBwcmV2aW91cyBhc3luYyByZXN1bHQg cHJpb3IgdG8gZ2V0dGluZyBuZXcgb25lICovCisJQXNzZXJ0KCFibXNfaXNfbWVtYmVyKGFyZXEt PnJlcXVlc3RfaW5kZXgsIG5vZGUtPm1zX2hhc19hc3luY3Jlc3VsdHMpKTsKKworCW5vZGUtPm1z X2FzeW5jcmVzdWx0c1thcmVxLT5yZXF1ZXN0X2luZGV4XSA9IE5VTEw7CisJLyogTm90aGluZyB0 byBkbyBpZiB0aGUgcmVxdWVzdCBpcyBwZW5kaW5nLiAqLworCWlmICghYXJlcS0+cmVxdWVzdF9j b21wbGV0ZSkKKwl7CisJCS8qIFRoZSByZXF1ZXN0IHdvdWxkIGhhdmUgYmVlbiBwZW5kaW5nIGZv ciBhIGNhbGxiYWNrLiAqLworCQlBc3NlcnQoYXJlcS0+Y2FsbGJhY2tfcGVuZGluZyk7CisJCXJl dHVybjsKKwl9CisKKwkvKiBJZiB0aGUgcmVzdWx0IGlzIE5VTEwgb3IgYW4gZW1wdHkgc2xvdCwg dGhlcmUncyBub3RoaW5nIG1vcmUgdG8gZG8uICovCisJaWYgKFR1cElzTnVsbChzbG90KSkKKwl7 CisJCS8qIFRoZSBlbmRpbmcgc3VicGxhbiB3b3VsZG4ndCBoYXZlIGJlZW4gcGVuZGluZyBmb3Ig YSBjYWxsYmFjay4gKi8KKwkJQXNzZXJ0KCFhcmVxLT5jYWxsYmFja19wZW5kaW5nKTsKKwkJbm9k ZS0+bXNfYXN5bmNyZW1haW4gPSBibXNfZGVsX21lbWJlcihub2RlLT5tc19hc3luY3JlbWFpbiwK KwkJCQkJCQkJCQkJICBhcmVxLT5yZXF1ZXN0X2luZGV4KTsKKwkJcmV0dXJuOworCX0KKworCS8q IE1hcmsgdGhhdCB0aGUgYXN5bmMgcmVxdWVzdCBoYXMgYSByZXN1bHQgKi8KKwlub2RlLT5tc19o YXNfYXN5bmNyZXN1bHRzID0gYm1zX2FkZF9tZW1iZXIobm9kZS0+bXNfaGFzX2FzeW5jcmVzdWx0 cywKKwkJCQkJCQkJCQkJICAgYXJlcS0+cmVxdWVzdF9pbmRleCk7CisJLyogU2F2ZSByZXN1bHQg c28gd2UgY2FuIHJldHVybiBpdC4gKi8KKwlub2RlLT5tc19hc3luY3Jlc3VsdHNbYXJlcS0+cmVx dWVzdF9pbmRleF0gPSBzbG90OworCisJLyoKKwkgKiBNYXJrIHRoZSBzdWJwbGFuIHRoYXQgcmV0 dXJuZWQgYSByZXN1bHQgYXMgcmVhZHkgZm9yIGEgbmV3IHJlcXVlc3QuICBXZQorCSAqIGRvbid0 IGxhdW5jaCBhbm90aGVyIG9uZSBoZXJlIGltbWVkaWF0ZWx5IGJlY2F1c2UgaXQgbWlnaHQgY29t cGxldGUuCisJICovCisJbm9kZS0+bXNfbmVlZHJlcXVlc3QgPSBibXNfYWRkX21lbWJlcihub2Rl LT5tc19uZWVkcmVxdWVzdCwKKwkJCQkJCQkJCQkgIGFyZXEtPnJlcXVlc3RfaW5kZXgpOworfQor CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgKgkJRXhlY01lcmdlQXBwZW5kQXN5bmNFdmVudFdhaXQKKyAqCisgKgkJ V2FpdCBvciBwb2xsIGZvciBmaWxlIGRlc2NyaXB0b3IgZXZlbnRzIGFuZCBmaXJlIGNhbGxiYWNr cy4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAqLworc3RhdGljIHZvaWQKK0V4ZWNNZXJnZUFwcGVuZEFzeW5jRXZl bnRXYWl0KE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUpCit7CisJaW50CQkJbmV2ZW50cyA9IG5vZGUt Pm1zX25hc3luY3BsYW5zICsgMjsgLyogb25lIGZvciBQTSBkZWF0aCBhbmQKKwkJCQkJCQkJCQkJ CQkgKiBvbmUgZm9yIGxhdGNoICovCisJV2FpdEV2ZW50CW9jY3VycmVkX2V2ZW50W0VWRU5UX0JV RkZFUl9TSVpFXTsKKwlpbnQJCQlub2NjdXJyZWQ7CisJaW50CQkJaTsKKworCS8qIFdlIHNob3Vs ZCBuZXZlciBiZSBjYWxsZWQgd2hlbiB0aGVyZSBhcmUgbm8gdmFsaWQgYXN5bmMgc3VicGxhbnMu ICovCisJQXNzZXJ0KGJtc19udW1fbWVtYmVycyhub2RlLT5tc19hc3luY3JlbWFpbikgPiAwKTsK KworCW5vZGUtPm1zX2V2ZW50c2V0ID0gQ3JlYXRlV2FpdEV2ZW50U2V0KEN1cnJlbnRSZXNvdXJj ZU93bmVyLCBuZXZlbnRzKTsKKwlBZGRXYWl0RXZlbnRUb1NldChub2RlLT5tc19ldmVudHNldCwg V0xfRVhJVF9PTl9QTV9ERUFUSCwgUEdJTlZBTElEX1NPQ0tFVCwKKwkJCQkJICBOVUxMLCBOVUxM KTsKKworCS8qIEdpdmUgZWFjaCB3YWl0aW5nIHN1YnBsYW4gYSBjaGFuY2UgdG8gYWRkIGFuIGV2 ZW50LiAqLworCWkgPSAtMTsKKwl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIobm9kZS0+bXNf YXN5bmNwbGFucywgaSkpID49IDApCisJeworCQlBc3luY1JlcXVlc3QgKmFyZXEgPSBub2RlLT5t c19hc3luY3JlcXVlc3RzW2ldOworCisJCWlmIChhcmVxLT5jYWxsYmFja19wZW5kaW5nKQorCQkJ RXhlY0FzeW5jQ29uZmlndXJlV2FpdChhcmVxKTsKKwl9CisKKwkvKgorCSAqIE5vIG5lZWQgZm9y IGZ1cnRoZXIgcHJvY2Vzc2luZyBpZiBub25lIG9mIHRoZSBzdWJwbGFucyBjb25maWd1cmVkIGFu eQorCSAqIGV2ZW50cy4KKwkgKi8KKwlpZiAoR2V0TnVtUmVnaXN0ZXJlZFdhaXRFdmVudHMobm9k ZS0+bXNfZXZlbnRzZXQpID09IDEpCisJeworCQlGcmVlV2FpdEV2ZW50U2V0KG5vZGUtPm1zX2V2 ZW50c2V0KTsKKwkJbm9kZS0+bXNfZXZlbnRzZXQgPSBOVUxMOworCQlyZXR1cm47CisJfQorCisJ LyoKKwkgKiBBZGQgdGhlIHByb2Nlc3MgbGF0Y2ggdG8gdGhlIHNldCwgc28gdGhhdCB3ZSB3YWtl IHVwIHRvIHByb2Nlc3MgdGhlCisJICogc3RhbmRhcmQgaW50ZXJydXB0cyB3aXRoIENIRUNLX0ZP Ul9JTlRFUlJVUFRTKCkuCisJICoKKwkgKiBOT1RFOiBGb3IgaGlzdG9yaWNhbCByZWFzb25zLCBp dCdzIGltcG9ydGFudCB0aGF0IHRoaXMgaXMgYWRkZWQgdG8gdGhlCisJICogV2FpdEV2ZW50U2V0 IGFmdGVyIHRoZSBFeGVjQXN5bmNDb25maWd1cmVXYWl0KCkgY2FsbHMuICBOYW1lbHksCisJICog cG9zdGdyZXNfZmR3IGNhbGxzICJHZXROdW1SZWdpc3RlcmVkV2FpdEV2ZW50cyhzZXQpID09IDEi IHRvIGNoZWNrIGlmCisJICogYW55IG90aGVyIGV2ZW50cyBhcmUgaW4gdGhlIHNldC4gIFRoYXQn cyBhIHBvb3IgZGVzaWduLCBpdCdzCisJICogcXVlc3Rpb25hYmxlIGZvciBwb3N0Z3Jlc19mZHcg dG8gYmUgZG9pbmcgdGhhdCBpbiB0aGUgZmlyc3QgcGxhY2UsIGJ1dAorCSAqIHdlIGNhbm5vdCBj aGFuZ2UgaXQgbm93LiAgVGhlIHBhdHRlcm4gaGFzIHBvc3NpYmx5IGJlZW4gY29waWVkIHRvIG90 aGVyCisJICogZXh0ZW5zaW9ucyB0b28uCisJICovCisJQWRkV2FpdEV2ZW50VG9TZXQobm9kZS0+ bXNfZXZlbnRzZXQsIFdMX0xBVENIX1NFVCwgUEdJTlZBTElEX1NPQ0tFVCwKKwkJCQkJICBNeUxh dGNoLCBOVUxMKTsKKworCS8qIFJldHVybiBhdCBtb3N0IEVWRU5UX0JVRkZFUl9TSVpFIGV2ZW50 cyBpbiBvbmUgY2FsbC4gKi8KKwlpZiAobmV2ZW50cyA+IEVWRU5UX0JVRkZFUl9TSVpFKQorCQlu ZXZlbnRzID0gRVZFTlRfQlVGRkVSX1NJWkU7CisKKwkvKgorCSAqIFdhaXQgdW50aWwgYXQgbGVh c3Qgb25lIGV2ZW50IG9jY3Vycy4KKwkgKi8KKwlub2NjdXJyZWQgPSBXYWl0RXZlbnRTZXRXYWl0 KG5vZGUtPm1zX2V2ZW50c2V0LCAtMSAvKiBubyB0aW1lb3V0ICovICwgb2NjdXJyZWRfZXZlbnQs CisJCQkJCQkJCSBuZXZlbnRzLCBXQUlUX0VWRU5UX0FQUEVORF9SRUFEWSk7CisJRnJlZVdhaXRF dmVudFNldChub2RlLT5tc19ldmVudHNldCk7CisJbm9kZS0+bXNfZXZlbnRzZXQgPSBOVUxMOwor CWlmIChub2NjdXJyZWQgPT0gMCkKKwkJcmV0dXJuOworCisJLyogRGVsaXZlciBub3RpZmljYXRp b25zLiAqLworCWZvciAoaSA9IDA7IGkgPCBub2NjdXJyZWQ7IGkrKykKKwl7CisJCVdhaXRFdmVu dCAgKncgPSAmb2NjdXJyZWRfZXZlbnRbaV07CisKKwkJLyoKKwkJICogRWFjaCB3YWl0aW5nIHN1 YnBsYW4gc2hvdWxkIGhhdmUgcmVnaXN0ZXJlZCBpdHMgd2FpdCBldmVudCB3aXRoCisJCSAqIHVz ZXJfZGF0YSBwb2ludGluZyBiYWNrIHRvIGl0cyBBc3luY1JlcXVlc3QuCisJCSAqLworCQlpZiAo KHctPmV2ZW50cyAmIFdMX1NPQ0tFVF9SRUFEQUJMRSkgIT0gMCkKKwkJeworCQkJQXN5bmNSZXF1 ZXN0ICphcmVxID0gKEFzeW5jUmVxdWVzdCAqKSB3LT51c2VyX2RhdGE7CisKKwkJCWlmIChhcmVx LT5jYWxsYmFja19wZW5kaW5nKQorCQkJeworCQkJCS8qCisJCQkJICogTWFyayBpdCBhcyBubyBs b25nZXIgbmVlZGluZyBhIGNhbGxiYWNrLiAgV2UgbXVzdCBkbyB0aGlzCisJCQkJICogYmVmb3Jl IGRpc3BhdGNoaW5nIHRoZSBjYWxsYmFjayBpbiBjYXNlIHRoZSBjYWxsYmFjayByZXNldHMKKwkJ CQkgKiB0aGUgZmxhZy4KKwkJCQkgKi8KKwkJCQlhcmVxLT5jYWxsYmFja19wZW5kaW5nID0gZmFs c2U7CisKKwkJCQkvKiBEbyB0aGUgYWN0dWFsIHdvcmsuICovCisJCQkJRXhlY0FzeW5jTm90aWZ5 KGFyZXEpOworCQkJfQorCQl9CisKKwkJLyogSGFuZGxlIHN0YW5kYXJkIGludGVycnVwdHMgKi8K KwkJaWYgKCh3LT5ldmVudHMgJiBXTF9MQVRDSF9TRVQpICE9IDApCisJCXsKKwkJCVJlc2V0TGF0 Y2goTXlMYXRjaCk7CisJCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOworCQl9CisJfQorfQpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYyBiL3NyYy9iYWNr ZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMKaW5kZXggODljYTRlMDhiZjEuLjI5OGVhNTcw ZGZiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jCisr KyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMKQEAgLTE2Myw2ICsxNjMs NyBAQCBib29sCQllbmFibGVfcGFyYWxsZWxfaGFzaCA9IHRydWU7CiBib29sCQllbmFibGVfcGFy dGl0aW9uX3BydW5pbmcgPSB0cnVlOwogYm9vbAkJZW5hYmxlX3ByZXNvcnRlZF9hZ2dyZWdhdGUg PSB0cnVlOwogYm9vbAkJZW5hYmxlX2FzeW5jX2FwcGVuZCA9IHRydWU7Citib29sCQllbmFibGVf YXN5bmNfbWVyZ2VfYXBwZW5kID0gdHJ1ZTsKIAogdHlwZWRlZiBzdHJ1Y3QKIHsKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYyBiL3NyYy9iYWNrZW5k L29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYwppbmRleCA1ZDcwNGUzOGYzNy4uNWEzZmMwZDI4 MWIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYwor KysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMKQEAgLTE0NjYsNiAr MTQ2Niw3IEBAIGNyZWF0ZV9tZXJnZV9hcHBlbmRfcGxhbihQbGFubmVySW5mbyAqcm9vdCwgTWVy Z2VBcHBlbmRQYXRoICpiZXN0X3BhdGgsCiAJTGlzdAkgICAqc3VicGxhbnMgPSBOSUw7CiAJTGlz dENlbGwgICAqc3VicGF0aHM7CiAJUmVsT3B0SW5mbyAqcmVsID0gYmVzdF9wYXRoLT5wYXRoLnBh cmVudDsKKwlib29sCQljb25zaWRlcl9hc3luYyA9IGZhbHNlOwogCiAJLyoKIAkgKiBXZSBkb24n dCBoYXZlIHRoZSBhY3R1YWwgY3JlYXRpb24gb2YgdGhlIE1lcmdlQXBwZW5kIG5vZGUgc3BsaXQg b3V0CkBAIC0xNDgxLDYgKzE0ODIsMTAgQEAgY3JlYXRlX21lcmdlX2FwcGVuZF9wbGFuKFBsYW5u ZXJJbmZvICpyb290LCBNZXJnZUFwcGVuZFBhdGggKmJlc3RfcGF0aCwKIAlub2RlLT5hcHByZWxp ZHMgPSByZWwtPnJlbGlkczsKIAlub2RlLT5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyA9IGJlc3Rf cGF0aC0+Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHM7CiAKKwljb25zaWRlcl9hc3luYyA9IChlbmFi bGVfYXN5bmNfbWVyZ2VfYXBwZW5kICYmCisJCQkJCSAgIWJlc3RfcGF0aC0+cGF0aC5wYXJhbGxl bF9zYWZlICYmCisJCQkJCSAgbGlzdF9sZW5ndGgoYmVzdF9wYXRoLT5zdWJwYXRocykgPiAxKTsK KwogCS8qCiAJICogQ29tcHV0ZSBzb3J0IGNvbHVtbiBpbmZvLCBhbmQgYWRqdXN0IE1lcmdlQXBw ZW5kJ3MgdGxpc3QgYXMgbmVlZGVkLgogCSAqIEJlY2F1c2Ugd2UgcGFzcyBhZGp1c3RfdGxpc3Rf aW5fcGxhY2UgPSB0cnVlLCB3ZSBtYXkgaWdub3JlIHRoZQpAQCAtMTU4MSw2ICsxNTg2LDEwIEBA IGNyZWF0ZV9tZXJnZV9hcHBlbmRfcGxhbihQbGFubmVySW5mbyAqcm9vdCwgTWVyZ2VBcHBlbmRQ YXRoICpiZXN0X3BhdGgsCiAJCQlzdWJwbGFuID0gc29ydF9wbGFuOwogCQl9CiAKKwkJLyogSWYg bmVlZGVkLCBjaGVjayB0byBzZWUgaWYgc3VicGxhbiBjYW4gYmUgZXhlY3V0ZWQgYXN5bmNocm9u b3VzbHkgKi8KKwkJaWYgKGNvbnNpZGVyX2FzeW5jKQorCQkJbWFya19hc3luY19jYXBhYmxlX3Bs YW4oc3VicGxhbiwgc3VicGF0aCk7CisKIAkJc3VicGxhbnMgPSBsYXBwZW5kKHN1YnBsYW5zLCBz dWJwbGFuKTsKIAl9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3Bh cmFtZXRlcnMuZGF0IGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQK aW5kZXggOTUwNzc3ODQxNWQuLjNiNWM4ODU5ZTBmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91 dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdAorKysgYi9zcmMvYmFja2VuZC91dGlscy9taXNj L2d1Y19wYXJhbWV0ZXJzLmRhdApAQCAtODIxLDYgKzgyMSwxNCBAQAogICBib290X3ZhbCA9PiAn dHJ1ZScsCiB9LAogCit7IG5hbWUgPT4gJ2VuYWJsZV9hc3luY19tZXJnZV9hcHBlbmQnLCB0eXBl ID0+ICdib29sJywgY29udGV4dCA9PiAnUEdDX1VTRVJTRVQnLCBncm91cCA9PiAnUVVFUllfVFVO SU5HX01FVEhPRCcsCisgIHNob3J0X2Rlc2MgPT4gJ0VuYWJsZXMgdGhlIHBsYW5uZXJcJ3MgdXNl IG9mIGFzeW5jIG1lcmdlIGFwcGVuZCBwbGFucy4nLAorICBmbGFncyA9PiAnR1VDX0VYUExBSU4n LAorICB2YXJpYWJsZSA9PiAnZW5hYmxlX2FzeW5jX21lcmdlX2FwcGVuZCcsCisgIGJvb3RfdmFs ID0+ICd0cnVlJywKK30sCisKKwogeyBuYW1lID0+ICdlbmFibGVfYml0bWFwc2NhbicsIHR5cGUg PT4gJ2Jvb2wnLCBjb250ZXh0ID0+ICdQR0NfVVNFUlNFVCcsIGdyb3VwID0+ICdRVUVSWV9UVU5J TkdfTUVUSE9EJywKICAgc2hvcnRfZGVzYyA9PiAnRW5hYmxlcyB0aGUgcGxhbm5lclwncyB1c2Ug b2YgYml0bWFwLXNjYW4gcGxhbnMuJywKICAgZmxhZ3MgPT4gJ0dVQ19FWFBMQUlOJywKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZSBiL3Ny Yy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQppbmRleCBmOTM4Y2M2 NWEzYS4uZGIxNWM3Yjk4NzAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9z dGdyZXNxbC5jb25mLnNhbXBsZQorKysgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVz cWwuY29uZi5zYW1wbGUKQEAgLTQxMCw2ICs0MTAsNyBAQAogIyAtIFBsYW5uZXIgTWV0aG9kIENv bmZpZ3VyYXRpb24gLQogCiAjZW5hYmxlX2FzeW5jX2FwcGVuZCA9IG9uCisjZW5hYmxlX2FzeW5j X21lcmdlX2FwcGVuZCA9IG9uCiAjZW5hYmxlX2JpdG1hcHNjYW4gPSBvbgogI2VuYWJsZV9nYXRo ZXJtZXJnZSA9IG9uCiAjZW5hYmxlX2hhc2hhZ2cgPSBvbgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci9ub2Rl TWVyZ2VBcHBlbmQuaAppbmRleCBkZmNmNDUwOTliYS4uMjI1NWNjNjhiMjEgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5oCisrKyBiL3NyYy9pbmNsdWRl L2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5oCkBAIC0xOSw1ICsxOSw2IEBACiBleHRlcm4gTWVy Z2VBcHBlbmRTdGF0ZSAqRXhlY0luaXRNZXJnZUFwcGVuZChNZXJnZUFwcGVuZCAqbm9kZSwgRVN0 YXRlICplc3RhdGUsIGludCBlZmxhZ3MpOwogZXh0ZXJuIHZvaWQgRXhlY0VuZE1lcmdlQXBwZW5k KE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUpOwogZXh0ZXJuIHZvaWQgRXhlY1JlU2Nhbk1lcmdlQXBw ZW5kKE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUpOworZXh0ZXJuIHZvaWQgRXhlY0FzeW5jTWVyZ2VB cHBlbmRSZXNwb25zZShBc3luY1JlcXVlc3QgKmFyZXEpOwogCiAjZW5kaWYJCQkJCQkJLyogTk9E RU1FUkdFQVBQRU5EX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rl cy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKaW5kZXggNjNjMDY3ZDVhYWUuLjEy ZTY4MTA1YTA4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAorKysg Yi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaApAQCAtMTU0OCwxMCArMTU0OCw2OSBAQCB0 eXBlZGVmIHN0cnVjdCBNZXJnZUFwcGVuZFN0YXRlCiAJVHVwbGVUYWJsZVNsb3QgKiptc19zbG90 czsJLyogYXJyYXkgb2YgbGVuZ3RoIG1zX25wbGFucyAqLwogCXN0cnVjdCBiaW5hcnloZWFwICpt c19oZWFwOyAvKiBiaW5hcnkgaGVhcCBvZiBzbG90IGluZGljZXMgKi8KIAlib29sCQltc19pbml0 aWFsaXplZDsgLyogYXJlIHN1YnBsYW5zIHN0YXJ0ZWQ/ICovCisJQml0bWFwc2V0ICAqbXNfYXN5 bmNwbGFuczsJLyogYXN5bmNocm9ub3VzIHBsYW5zIGluZGV4ZXMgKi8KKwlpbnQJCQltc19uYXN5 bmNwbGFuczsgLyogIyBvZiBhc3luY2hyb25vdXMgcGxhbnMgKi8KKwlBc3luY1JlcXVlc3QgKipt c19hc3luY3JlcXVlc3RzOwkvKiBhcnJheSBvZiBBc3luY1JlcXVlc3RzICovCisJVHVwbGVUYWJs ZVNsb3QgKiptc19hc3luY3Jlc3VsdHM7CS8qIHVucmV0dXJuZWQgcmVzdWx0cyBvZiBhc3luYyBw bGFucyAqLworCUJpdG1hcHNldCAgKm1zX2hhc19hc3luY3Jlc3VsdHM7CS8qIHBsYW5zIHdoaWNo IGhhdmUgYXN5bmMgcmVzdWx0cyAqLworCUJpdG1hcHNldCAgKm1zX2FzeW5jcmVtYWluOyAvKiBy ZW1haW5pbmcgYXN5bmNocm9ub3VzIHBsYW5zICovCisJQml0bWFwc2V0ICAqbXNfbmVlZHJlcXVl c3Q7IC8qIGFzeW5jaHJvbm91cyBwbGFucyBuZWVkaW5nIGEgbmV3IHJlcXVlc3QgKi8KKwlzdHJ1 Y3QgV2FpdEV2ZW50U2V0ICptc19ldmVudHNldDsJLyogV2FpdEV2ZW50U2V0IHVzZWQgdG8gY29u ZmlndXJlIGZpbGUKKwkJCQkJCQkJCQkgKiBkZXNjcmlwdG9yIHdhaXQgZXZlbnRzICovCiAJc3Ry dWN0IFBhcnRpdGlvblBydW5lU3RhdGUgKm1zX3BydW5lX3N0YXRlOworCWJvb2wJCW1zX3ZhbGlk X3N1YnBsYW5zX2lkZW50aWZpZWQ7CS8qIGlzIG1zX3ZhbGlkX3N1YnBsYW5zIHZhbGlkPyAqLwog CUJpdG1hcHNldCAgKm1zX3ZhbGlkX3N1YnBsYW5zOworCUJpdG1hcHNldCAgKm1zX3ZhbGlkX2Fz eW5jcGxhbnM7CS8qIHZhbGlkIGFzeW5jaHJvbm91cyBwbGFucyBpbmRleGVzICovCiB9IE1lcmdl QXBwZW5kU3RhdGU7CiAKKy8qIEdldHRlcnMgZm9yIEFwcGVuZFN0YXRlIGFuZCBNZXJnZUFwcGVu ZFN0YXRlICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBXYWl0RXZlbnRTZXQgKgorR2V0QXBwZW5k RXZlbnRTZXQoUGxhblN0YXRlICpwcykKK3sKKwlBc3NlcnQoSXNBKHBzLCBBcHBlbmRTdGF0ZSkg fHwgSXNBKHBzLCBNZXJnZUFwcGVuZFN0YXRlKSk7CisKKwlpZiAoSXNBKHBzLCBBcHBlbmRTdGF0 ZSkpCisJCXJldHVybiAoKEFwcGVuZFN0YXRlICopIHBzKS0+YXNfZXZlbnRzZXQ7CisJZWxzZQor CQlyZXR1cm4gKChNZXJnZUFwcGVuZFN0YXRlICopIHBzKS0+bXNfZXZlbnRzZXQ7Cit9CisKK3N0 YXRpYyBpbmxpbmUgQml0bWFwc2V0ICoKK0dldE5lZWRSZXF1ZXN0KFBsYW5TdGF0ZSAqcHMpCit7 CisJQXNzZXJ0KElzQShwcywgQXBwZW5kU3RhdGUpIHx8IElzQShwcywgTWVyZ2VBcHBlbmRTdGF0 ZSkpOworCisJaWYgKElzQShwcywgQXBwZW5kU3RhdGUpKQorCQlyZXR1cm4gKChBcHBlbmRTdGF0 ZSAqKSBwcyktPmFzX25lZWRyZXF1ZXN0OworCWVsc2UKKwkJcmV0dXJuICgoTWVyZ2VBcHBlbmRT dGF0ZSAqKSBwcyktPm1zX25lZWRyZXF1ZXN0OworfQorCisvKiBDb21tb24gcGFydCBvZiBjbGFz c2lmeV9tYXRjaGluZ19zdWJwbGFucygpIGZvciBBcHBlbmQgYW5kIE1lcmdlQXBwZW5kICovCitz dGF0aWMgaW5saW5lIGJvb2wKK2NsYXNzaWZ5X21hdGNoaW5nX3N1YnBsYW5zX2NvbW1vbihCaXRt YXBzZXQgKip2YWxpZF9zdWJwbGFucywKKwkJCQkJCQkJICBCaXRtYXBzZXQgKmFzeW5jcGxhbnMs CisJCQkJCQkJCSAgQml0bWFwc2V0ICoqdmFsaWRfYXN5bmNwbGFucykKK3sKKwlBc3NlcnQoKnZh bGlkX2FzeW5jcGxhbnMgPT0gTlVMTCk7CisKKwkvKiBDaGVja2VkIGJ5IGNsYXNzaWZ5X21hdGNo aW5nX3N1YnBsYW5zKCkgKi8KKwlBc3NlcnQoIWJtc19pc19lbXB0eSgqdmFsaWRfc3VicGxhbnMp KTsKKworCS8qIE5vdGhpbmcgdG8gZG8gaWYgdGhlcmUgYXJlIG5vIHZhbGlkIGFzeW5jIHN1YnBs YW5zLiAqLworCWlmICghYm1zX292ZXJsYXAoKnZhbGlkX3N1YnBsYW5zLCBhc3luY3BsYW5zKSkK KwkJcmV0dXJuIGZhbHNlOworCisJLyogR2V0IHZhbGlkIGFzeW5jIHN1YnBsYW5zLiAqLworCSp2 YWxpZF9hc3luY3BsYW5zID0gYm1zX2ludGVyc2VjdChhc3luY3BsYW5zLAorCQkJCQkJCQkJICAq dmFsaWRfc3VicGxhbnMpOworCisJLyogQWRqdXN0IHRoZSB2YWxpZCBzdWJwbGFucyB0byBjb250 YWluIHN5bmMgc3VicGxhbnMgb25seS4gKi8KKwkqdmFsaWRfc3VicGxhbnMgPSBibXNfZGVsX21l bWJlcnMoKnZhbGlkX3N1YnBsYW5zLAorCQkJCQkJCQkJICAqdmFsaWRfYXN5bmNwbGFucyk7CisJ cmV0dXJuIHRydWU7Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0KICAqCSBSZWN1cnNpdmVVbmlv blN0YXRlIGluZm9ybWF0aW9uCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVy L2Nvc3QuaCBiL3NyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmgKaW5kZXggZjJmZDVkMzE1MDcu Ljc5OGFmMWZjZDVjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29zdC5oCisr KyBiL3NyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmgKQEAgLTcwLDYgKzcwLDcgQEAgZXh0ZXJu IFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX3BhcmFsbGVsX2hhc2g7CiBleHRlcm4gUEdETExJTVBP UlQgYm9vbCBlbmFibGVfcGFydGl0aW9uX3BydW5pbmc7CiBleHRlcm4gUEdETExJTVBPUlQgYm9v bCBlbmFibGVfcHJlc29ydGVkX2FnZ3JlZ2F0ZTsKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVu YWJsZV9hc3luY19hcHBlbmQ7CitleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfYXN5bmNf bWVyZ2VfYXBwZW5kOwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBjb25zdHJhaW50X2V4Y2x1c2lv bjsKIAogZXh0ZXJuIGRvdWJsZSBpbmRleF9wYWdlc19mZXRjaGVkKGRvdWJsZSB0dXBsZXNfZmV0 Y2hlZCwgQmxvY2tOdW1iZXIgcGFnZXMsCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL3N5c3ZpZXdzLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mu b3V0CmluZGV4IDNkZDYzZmQ4OGVkLi4zZGNkOWIxNzg4OSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9zeXN2aWV3cy5vdXQKQEAgLTE0OSw2ICsxNDksNyBAQCBzZWxlY3QgbmFtZSwgc2V0dGlu ZyBmcm9tIHBnX3NldHRpbmdzIHdoZXJlIG5hbWUgbGlrZSAnZW5hYmxlJSc7CiAgICAgICAgICAg ICAgIG5hbWUgICAgICAgICAgICAgIHwgc2V0dGluZyAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLQogIGVuYWJsZV9hc3luY19hcHBlbmQgICAgICAgICAgICB8IG9u CisgZW5hYmxlX2FzeW5jX21lcmdlX2FwcGVuZCAgICAgIHwgb24KICBlbmFibGVfYml0bWFwc2Nh biAgICAgICAgICAgICAgfCBvbgogIGVuYWJsZV9kaXN0aW5jdF9yZW9yZGVyaW5nICAgICB8IG9u CiAgZW5hYmxlX2VhZ2VyX2FnZ3JlZ2F0ZSAgICAgICAgIHwgb24KQEAgLTE3Myw3ICsxNzQsNyBA QCBzZWxlY3QgbmFtZSwgc2V0dGluZyBmcm9tIHBnX3NldHRpbmdzIHdoZXJlIG5hbWUgbGlrZSAn ZW5hYmxlJSc7CiAgZW5hYmxlX3NlcXNjYW4gICAgICAgICAgICAgICAgIHwgb24KICBlbmFibGVf c29ydCAgICAgICAgICAgICAgICAgICAgfCBvbgogIGVuYWJsZV90aWRzY2FuICAgICAgICAgICAg ICAgICB8IG9uCi0oMjUgcm93cykKKygyNiByb3dzKQogCiAtLSBUaGVyZSBhcmUgYWx3YXlzIHdh aXQgZXZlbnQgZGVzY3JpcHRpb25zIGZvciB2YXJpb3VzIHR5cGVzLiAgSW5qZWN0aW9uUG9pbnQK IC0tIG1heSBiZSBwcmVzZW50IG9yIGFic2VudCwgZGVwZW5kaW5nIG9uIGhpc3Rvcnkgc2luY2Ug bGFzdCBwb3N0bWFzdGVyIHN0YXJ0LgotLSAKMi40My4wCgo= --=_49b6486fa938655d059949ecccd5e96f Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v14-0003-Common-infrastructure-to-MergeAppend-and-Append-node.patch Content-Disposition: attachment; filename*0*=UTF-8''v14-0003-Common-infrastructure-to-MergeAppend-and-Appe; filename*1*=nd-node.patch; size=90787 RnJvbSBmNTRkYTU4MzhkNTEyNTU4MjA0MDJlYWIyMjJmM2YzY2ViYTY1MzI2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXRoZXVzIEFsY2FudGFyYSA8bXRocy5kZXZAcG0ubWU+CkRh dGU6IFR1ZSwgMzAgRGVjIDIwMjUgMTQ6MzI6MjAgKzAzMDAKU3ViamVjdDogW1BBVENIIDMvM10g Q29tbW9uIGluZnJhc3RydWN0dXJlIHRvIE1lcmdlQXBwZW5kIGFuZCBBcHBlbmQgbm9kZXMKClRo aXMgY29tbWl0IGludHJvZHVjZXMgdGhlIGV4ZWNBcHBlbmQuYyBmaWxlIHRvIGNlbnRyYWxpemUg ZXhlY3V0b3IKb3BlcmF0aW9ucyB0aGF0IGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBNZXJnZUFwcGVu ZCBhbmQgQXBwZW5kIG5vZGVzLgoKVGhlIGxvZ2ljIGZvciBpbml0aWFsaXppbmcgYW5kIGVuZGlu ZyB0aGUgbm9kZXMsIGFzIHdlbGwgYXMgaW5pdGlhbGl6aW5nCmFzeW5jaHJvbm91cyBleGVjdXRp b24sIGlzIHZlcnkgc2ltaWxhciBmb3IgYm90aCBNZXJnZUFwcGVuZCBhbmQgQXBwZW5kLgpUbyBy ZWR1Y2UgcmVkdW5kYW5jeSwgdGhlIGR1cGxpY2F0ZWQgY29kZSBoYXMgYmVlbiBtb3ZlZCB0byBl eGVjQXBwZW5kLmMKc28gdGhhdCB0aGVzZSBub2RlcyBjYW4gcmV1c2UgdGhlIGNvbW1vbiBpbXBs ZW1lbnRhdGlvbi4KClRoZSBjb2RlIHJlc3BvbnNpYmxlIGZvciBhY3R1YWxseSBmZXRjaGluZyB0 aGUgdHVwbGVzIHJlbWFpbnMgc3BlY2lmaWMKdG8gZWFjaCBub2RlIGFuZCB3YXMgbm90IHJlZmFj dG9yZWQgaW50byBleGVjQXBwZW5kLmMgdG8gcHJlc2VydmUgdGhlCnVuaXF1ZSBleGVjdXRpb24g cmVxdWlyZW1lbnRzIG9mIGVhY2ggbm9kZSB0eXBlLgotLS0KIGNvbnRyaWIvcGdfb3ZlcmV4cGxh aW4vcGdfb3ZlcmV4cGxhaW4uYyB8ICAgOCArLQogY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdy ZXNfZmR3LmMgICAgIHwgICA4ICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMgICAg ICAgICAgfCAgMjYgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL01ha2VmaWxlICAgICAgICAgICB8 ICAgMSArCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjQW1pLmMgICAgICAgICAgfCAgIDIgKy0K IHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNBcHBlbmQuYyAgICAgICB8IDQwOCArKysrKysrKysr KysrKysrKysrCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjQ3VycmVudC5jICAgICAgfCAgIDQg Ky0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQcm9jbm9kZS5jICAgICB8ICAgOCArLQogc3Jj L2JhY2tlbmQvZXhlY3V0b3IvbWVzb24uYnVpbGQgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5k L2V4ZWN1dG9yL25vZGVBcHBlbmQuYyAgICAgICB8IDQ5NiArKysrKy0tLS0tLS0tLS0tLS0tLS0t LS0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5jICB8IDQxNiArKystLS0t LS0tLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvbm9kZXMvbm9kZUZ1bmNzLmMgICAgICAgICAgIHwg ICA4ICstCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMgfCAgMzggKy0K IHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYyAgICB8ICA0OCArLS0KIHNyYy9i YWNrZW5kL29wdGltaXplci9wbGFuL3N1YnNlbGVjdC5jICB8ICAgNCArLQogc3JjL2JhY2tlbmQv dXRpbHMvYWR0L3J1bGV1dGlscy5jICAgICAgIHwgICA4ICstCiBzcmMvaW5jbHVkZS9leGVjdXRv ci9leGVjQXBwZW5kLmggICAgICAgfCAgNjAgKysrCiBzcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9k ZXMuaCAgICAgICAgICAgfCAxMDUgKystLS0KIHNyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5o ICAgICAgICAgICB8ICA1NiArLS0KIDE5IGZpbGVzIGNoYW5nZWQsIDc1MiBpbnNlcnRpb25zKCsp LCA5NTMgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvZXhlY3V0 b3IvZXhlY0FwcGVuZC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1ZGUvZXhlY3V0b3Iv ZXhlY0FwcGVuZC5oCgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19vdmVy ZXhwbGFpbi5jIGIvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19vdmVyZXhwbGFpbi5jCmluZGV4 IDk2NGUzNTI0MGRiLi43NjE2ZDZkNzVhNSAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ19vdmVyZXhw bGFpbi9wZ19vdmVyZXhwbGFpbi5jCisrKyBiL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vcGdfb3Zl cmV4cGxhaW4uYwpAQCAtMjMyLDE4ICsyMzIsMTggQEAgb3ZlcmV4cGxhaW5fcGVyX25vZGVfaG9v ayhQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgTGlzdCAqYW5jZXN0b3JzLAogCQkJCWJyZWFrOwogCQkJ Y2FzZSBUX0FwcGVuZDoKIAkJCQlvdmVyZXhwbGFpbl9iaXRtYXBzZXQoIkFwcGVuZCBSVElzIiwK LQkJCQkJCQkJCSAgKChBcHBlbmQgKikgcGxhbiktPmFwcHJlbGlkcywKKwkJCQkJCQkJCSAgKChB cHBlbmQgKikgcGxhbiktPmFwLmFwcHJlbGlkcywKIAkJCQkJCQkJCSAgZXMpOwogCQkJCW92ZXJl eHBsYWluX2JpdG1hcHNldF9saXN0KCJDaGlsZCBBcHBlbmQgUlRJcyIsCi0JCQkJCQkJCQkJICAg KChBcHBlbmQgKikgcGxhbiktPmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzLAorCQkJCQkJCQkJCSAg ICgoQXBwZW5kICopIHBsYW4pLT5hcC5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0cywKIAkJCQkJCQkJ CQkgICBlcyk7CiAJCQkJYnJlYWs7CiAJCQljYXNlIFRfTWVyZ2VBcHBlbmQ6CiAJCQkJb3ZlcmV4 cGxhaW5fYml0bWFwc2V0KCJBcHBlbmQgUlRJcyIsCi0JCQkJCQkJCQkgICgoTWVyZ2VBcHBlbmQg KikgcGxhbiktPmFwcHJlbGlkcywKKwkJCQkJCQkJCSAgKChNZXJnZUFwcGVuZCAqKSBwbGFuKS0+ YXAuYXBwcmVsaWRzLAogCQkJCQkJCQkJICBlcyk7CiAJCQkJb3ZlcmV4cGxhaW5fYml0bWFwc2V0 X2xpc3QoIkNoaWxkIEFwcGVuZCBSVElzIiwKLQkJCQkJCQkJCQkgICAoKE1lcmdlQXBwZW5kICop IHBsYW4pLT5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0cywKKwkJCQkJCQkJCQkgICAoKE1lcmdlQXBw ZW5kICopIHBsYW4pLT5hcC5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0cywKIAkJCQkJCQkJCQkgICBl cyk7CiAJCQkJYnJlYWs7CiAJCQljYXNlIFRfUmVzdWx0OgpkaWZmIC0tZ2l0IGEvY29udHJpYi9w b3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jl c19mZHcuYwppbmRleCBjZjZiZjljZWY1MS4uZjQ4MjAzZmZhZWIgMTAwNjQ0Ci0tLSBhL2NvbnRy aWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5jCisrKyBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3 L3Bvc3RncmVzX2Zkdy5jCkBAIC0yNDEyLDggKzI0MTIsOCBAQCBmaW5kX21vZGlmeXRhYmxlX3N1 YnBsYW4oUGxhbm5lckluZm8gKnJvb3QsCiAJewogCQlBcHBlbmQJICAgKmFwcGVuZHBsYW4gPSAo QXBwZW5kICopIHN1YnBsYW47CiAKLQkJaWYgKHN1YnBsYW5faW5kZXggPCBsaXN0X2xlbmd0aChh cHBlbmRwbGFuLT5hcHBlbmRwbGFucykpCi0JCQlzdWJwbGFuID0gKFBsYW4gKikgbGlzdF9udGgo YXBwZW5kcGxhbi0+YXBwZW5kcGxhbnMsIHN1YnBsYW5faW5kZXgpOworCQlpZiAoc3VicGxhbl9p bmRleCA8IGxpc3RfbGVuZ3RoKGFwcGVuZHBsYW4tPmFwLnN1YnBsYW5zKSkKKwkJCXN1YnBsYW4g PSAoUGxhbiAqKSBsaXN0X250aChhcHBlbmRwbGFuLT5hcC5zdWJwbGFucywgc3VicGxhbl9pbmRl eCk7CiAJfQogCWVsc2UgaWYgKElzQShzdWJwbGFuLCBSZXN1bHQpICYmCiAJCQkgb3V0ZXJQbGFu KHN1YnBsYW4pICE9IE5VTEwgJiYKQEAgLTI0MjEsOCArMjQyMSw4IEBAIGZpbmRfbW9kaWZ5dGFi bGVfc3VicGxhbihQbGFubmVySW5mbyAqcm9vdCwKIAl7CiAJCUFwcGVuZAkgICAqYXBwZW5kcGxh biA9IChBcHBlbmQgKikgb3V0ZXJQbGFuKHN1YnBsYW4pOwogCi0JCWlmIChzdWJwbGFuX2luZGV4 IDwgbGlzdF9sZW5ndGgoYXBwZW5kcGxhbi0+YXBwZW5kcGxhbnMpKQotCQkJc3VicGxhbiA9IChQ bGFuICopIGxpc3RfbnRoKGFwcGVuZHBsYW4tPmFwcGVuZHBsYW5zLCBzdWJwbGFuX2luZGV4KTsK KwkJaWYgKHN1YnBsYW5faW5kZXggPCBsaXN0X2xlbmd0aChhcHBlbmRwbGFuLT5hcC5zdWJwbGFu cykpCisJCQlzdWJwbGFuID0gKFBsYW4gKikgbGlzdF9udGgoYXBwZW5kcGxhbi0+YXAuc3VicGxh bnMsIHN1YnBsYW5faW5kZXgpOwogCX0KIAogCS8qIE5vdywgaGF2ZSB3ZSBnb3QgYSBGb3JlaWdu U2NhbiBvbiB0aGUgZGVzaXJlZCByZWw/ICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21t YW5kcy9leHBsYWluLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKaW5kZXggOTM5 MThhMjIzYjguLjdlMjhjZDBlODBiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9l eHBsYWluLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCkBAIC0xMjI2LDEx ICsxMjI2LDExIEBAIEV4cGxhaW5QcmVTY2FuTm9kZShQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgQml0 bWFwc2V0ICoqcmVsc191c2VkKQogCQkJYnJlYWs7CiAJCWNhc2UgVF9BcHBlbmQ6CiAJCQkqcmVs c191c2VkID0gYm1zX2FkZF9tZW1iZXJzKCpyZWxzX3VzZWQsCi0JCQkJCQkJCQkJICgoQXBwZW5k ICopIHBsYW4pLT5hcHByZWxpZHMpOworCQkJCQkJCQkJCSAoKEFwcGVuZCAqKSBwbGFuKS0+YXAu YXBwcmVsaWRzKTsKIAkJCWJyZWFrOwogCQljYXNlIFRfTWVyZ2VBcHBlbmQ6CiAJCQkqcmVsc191 c2VkID0gYm1zX2FkZF9tZW1iZXJzKCpyZWxzX3VzZWQsCi0JCQkJCQkJCQkJICgoTWVyZ2VBcHBl bmQgKikgcGxhbiktPmFwcHJlbGlkcyk7CisJCQkJCQkJCQkJICgoTWVyZ2VBcHBlbmQgKikgcGxh biktPmFwLmFwcHJlbGlkcyk7CiAJCQlicmVhazsKIAkJY2FzZSBUX1Jlc3VsdDoKIAkJCSpyZWxz X3VzZWQgPSBibXNfYWRkX21lbWJlcnMoKnJlbHNfdXNlZCwKQEAgLTEyNzQsNyArMTI3NCw3IEBA IHBsYW5faXNfZGlzYWJsZWQoUGxhbiAqcGxhbikKIAkJICogaW5jbHVkZXMgYW55IHJ1bi10aW1l IHBydW5lZCBjaGlsZHJlbi4gIElnbm9yaW5nIHRob3NlIGNvdWxkIGdpdmUKIAkJICogdXMgdGhl IGluY29ycmVjdCBudW1iZXIgb2YgZGlzYWJsZWQgbm9kZXMuCiAJCSAqLwotCQlmb3JlYWNoKGxj LCBhcGxhbi0+YXBwZW5kcGxhbnMpCisJCWZvcmVhY2gobGMsIGFwbGFuLT5hcC5zdWJwbGFucykK IAkJewogCQkJUGxhbgkgICAqc3VicGxhbiA9IGxmaXJzdChsYyk7CiAKQEAgLTEyOTEsNyArMTI5 MSw3IEBAIHBsYW5faXNfZGlzYWJsZWQoUGxhbiAqcGxhbikKIAkJICogaW5jbHVkZXMgYW55IHJ1 bi10aW1lIHBydW5lZCBjaGlsZHJlbi4gIElnbm9yaW5nIHRob3NlIGNvdWxkIGdpdmUKIAkJICog dXMgdGhlIGluY29ycmVjdCBudW1iZXIgb2YgZGlzYWJsZWQgbm9kZXMuCiAJCSAqLwotCQlmb3Jl YWNoKGxjLCBtYXBsYW4tPm1lcmdlcGxhbnMpCisJCWZvcmVhY2gobGMsIG1hcGxhbi0+YXAuc3Vi cGxhbnMpCiAJCXsKIAkJCVBsYW4JICAgKnN1YnBsYW4gPSBsZmlyc3QobGMpOwogCkBAIC0yMzM4 LDEzICsyMzM4LDEzIEBAIEV4cGxhaW5Ob2RlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBMaXN0ICph bmNlc3RvcnMsCiAJc3dpdGNoIChub2RlVGFnKHBsYW4pKQogCXsKIAkJY2FzZSBUX0FwcGVuZDoK LQkJCUV4cGxhaW5NaXNzaW5nTWVtYmVycygoKEFwcGVuZFN0YXRlICopIHBsYW5zdGF0ZSktPmFz X25wbGFucywKLQkJCQkJCQkJICBsaXN0X2xlbmd0aCgoKEFwcGVuZCAqKSBwbGFuKS0+YXBwZW5k cGxhbnMpLAorCQkJRXhwbGFpbk1pc3NpbmdNZW1iZXJzKCgoQXBwZW5kU3RhdGUgKikgcGxhbnN0 YXRlKS0+YXMubnBsYW5zLAorCQkJCQkJCQkgIGxpc3RfbGVuZ3RoKCgoQXBwZW5kICopIHBsYW4p LT5hcC5zdWJwbGFucyksCiAJCQkJCQkJCSAgZXMpOwogCQkJYnJlYWs7CiAJCWNhc2UgVF9NZXJn ZUFwcGVuZDoKLQkJCUV4cGxhaW5NaXNzaW5nTWVtYmVycygoKE1lcmdlQXBwZW5kU3RhdGUgKikg cGxhbnN0YXRlKS0+bXNfbnBsYW5zLAotCQkJCQkJCQkgIGxpc3RfbGVuZ3RoKCgoTWVyZ2VBcHBl bmQgKikgcGxhbiktPm1lcmdlcGxhbnMpLAorCQkJRXhwbGFpbk1pc3NpbmdNZW1iZXJzKCgoTWVy Z2VBcHBlbmRTdGF0ZSAqKSBwbGFuc3RhdGUpLT5tcy5ucGxhbnMsCisJCQkJCQkJCSAgbGlzdF9s ZW5ndGgoKChNZXJnZUFwcGVuZCAqKSBwbGFuKS0+YXAuc3VicGxhbnMpLAogCQkJCQkJCQkgIGVz KTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgpAQCAtMjM4OCwxMyArMjM4OCwxMyBAQCBFeHBsYWlu Tm9kZShQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgTGlzdCAqYW5jZXN0b3JzLAogCXN3aXRjaCAobm9k ZVRhZyhwbGFuKSkKIAl7CiAJCWNhc2UgVF9BcHBlbmQ6Ci0JCQlFeHBsYWluTWVtYmVyTm9kZXMo KChBcHBlbmRTdGF0ZSAqKSBwbGFuc3RhdGUpLT5hcHBlbmRwbGFucywKLQkJCQkJCQkgICAoKEFw cGVuZFN0YXRlICopIHBsYW5zdGF0ZSktPmFzX25wbGFucywKKwkJCUV4cGxhaW5NZW1iZXJOb2Rl cygoKEFwcGVuZFN0YXRlICopIHBsYW5zdGF0ZSktPmFzLnBsYW5zLAorCQkJCQkJCSAgICgoQXBw ZW5kU3RhdGUgKikgcGxhbnN0YXRlKS0+YXMubnBsYW5zLAogCQkJCQkJCSAgIGFuY2VzdG9ycywg ZXMpOwogCQkJYnJlYWs7CiAJCWNhc2UgVF9NZXJnZUFwcGVuZDoKLQkJCUV4cGxhaW5NZW1iZXJO b2RlcygoKE1lcmdlQXBwZW5kU3RhdGUgKikgcGxhbnN0YXRlKS0+bWVyZ2VwbGFucywKLQkJCQkJ CQkgICAoKE1lcmdlQXBwZW5kU3RhdGUgKikgcGxhbnN0YXRlKS0+bXNfbnBsYW5zLAorCQkJRXhw bGFpbk1lbWJlck5vZGVzKCgoTWVyZ2VBcHBlbmRTdGF0ZSAqKSBwbGFuc3RhdGUpLT5tcy5wbGFu cywKKwkJCQkJCQkgICAoKE1lcmdlQXBwZW5kU3RhdGUgKikgcGxhbnN0YXRlKS0+bXMubnBsYW5z LAogCQkJCQkJCSAgIGFuY2VzdG9ycywgZXMpOwogCQkJYnJlYWs7CiAJCWNhc2UgVF9CaXRtYXBB bmQ6CkBAIC0yNjA4LDcgKzI2MDgsNyBAQCBzdGF0aWMgdm9pZAogc2hvd19tZXJnZV9hcHBlbmRf a2V5cyhNZXJnZUFwcGVuZFN0YXRlICptc3RhdGUsIExpc3QgKmFuY2VzdG9ycywKIAkJCQkJICAg RXhwbGFpblN0YXRlICplcykKIHsKLQlNZXJnZUFwcGVuZCAqcGxhbiA9IChNZXJnZUFwcGVuZCAq KSBtc3RhdGUtPnBzLnBsYW47CisJTWVyZ2VBcHBlbmQgKnBsYW4gPSAoTWVyZ2VBcHBlbmQgKikg bXN0YXRlLT5tcy5wcy5wbGFuOwogCiAJc2hvd19zb3J0X2dyb3VwX2tleXMoKFBsYW5TdGF0ZSAq KSBtc3RhdGUsICJTb3J0IEtleSIsCiAJCQkJCQkgcGxhbi0+bnVtQ29scywgMCwgcGxhbi0+c29y dENvbElkeCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL01ha2VmaWxlIGIvc3Jj L2JhY2tlbmQvZXhlY3V0b3IvTWFrZWZpbGUKaW5kZXggMTExMThkMGNlMDIuLjY2YjYyZmNhOTIx IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9NYWtlZmlsZQorKysgYi9zcmMvYmFj a2VuZC9leGVjdXRvci9NYWtlZmlsZQpAQCAtMTUsNiArMTUsNyBAQCBpbmNsdWRlICQodG9wX2J1 aWxkZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCiBPQkpTID0gXAogCWV4ZWNBbWkubyBcCiAJZXhl Y0FzeW5jLm8gXAorCWV4ZWNBcHBlbmQubyBcCiAJZXhlY0N1cnJlbnQubyBcCiAJZXhlY0V4cHIu byBcCiAJZXhlY0V4cHJJbnRlcnAubyBcCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRv ci9leGVjQW1pLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjQW1pLmMKaW5kZXggOTBhNjhj MGQxNTYuLjE4YjcwYmY3MDYzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVj QW1pLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FtaS5jCkBAIC01MzcsNyArNTM3 LDcgQEAgRXhlY1N1cHBvcnRzQmFja3dhcmRTY2FuKFBsYW4gKm5vZGUpCiAJCQkJaWYgKCgoQXBw ZW5kICopIG5vZGUpLT5uYXN5bmNwbGFucyA+IDApCiAJCQkJCXJldHVybiBmYWxzZTsKIAotCQkJ CWZvcmVhY2gobCwgKChBcHBlbmQgKikgbm9kZSktPmFwcGVuZHBsYW5zKQorCQkJCWZvcmVhY2go bCwgKChBcHBlbmQgKikgbm9kZSktPmFwLnN1YnBsYW5zKQogCQkJCXsKIAkJCQkJaWYgKCFFeGVj U3VwcG9ydHNCYWNrd2FyZFNjYW4oKFBsYW4gKikgbGZpcnN0KGwpKSkKIAkJCQkJCXJldHVybiBm YWxzZTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNBcHBlbmQuYyBiL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNBcHBlbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMC4uMWU3NjI0OGYyZDcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2Vu ZC9leGVjdXRvci9leGVjQXBwZW5kLmMKQEAgLTAsMCArMSw0MDggQEAKKy8qLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICoKKyAqIGV4ZWNBcHBlbmQuYworICoJICBUaGlzIGNvZGUgcHJvdmlkZXMgc3VwcG9y dCBmdW5jdGlvbnMgZm9yIGV4ZWN1dGluZyBNZXJnZUFwcGVuZCBhbmQgQXBwZW5kCisgKgkgIG5v ZGVzLgorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDI1LCBQb3N0Z3JlU1FM IEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0 LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKgorICogSURF TlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FwcGVuZC5jCisgKgor ICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorI2luY2x1ZGUg ImV4ZWN1dG9yL2V4ZWN1dG9yLmgiCisjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY0FwcGVuZC5oIgor I2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWNBc3luYy5oIgorI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWNQ YXJ0aXRpb24uaCIKKyNpbmNsdWRlICJzdG9yYWdlL2xhdGNoLmgiCisjaW5jbHVkZSAic3RvcmFn ZS93YWl0ZXZlbnRzZXQuaCIKKyNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKworI2RlZmluZSBFVkVO VF9CVUZGRVJfU0laRQkJCTE2CisKKy8qICBCZWdpbiBhbGwgb2YgdGhlIHN1YnNjYW5zIG9mIGFu IEFwcGVuZGVyIG5vZGUuICovCit2b2lkCitFeGVjSW5pdEFwcGVuZGVyKEFwcGVuZGVyU3RhdGUg KiBzdGF0ZSwKKwkJCQkgQXBwZW5kZXIgKiBub2RlLAorCQkJCSBFU3RhdGUgKmVzdGF0ZSwKKwkJ CQkgaW50IGVmbGFncywKKwkJCQkgaW50IGZpcnN0X3BhcnRpYWxfcGxhbiwKKwkJCQkgaW50ICpm aXJzdF92YWxpZF9wYXJ0aWFsX3BsYW4pCit7CisJUGxhblN0YXRlICoqYXBwZW5kcGxhbnN0YXRl czsKKwljb25zdCBUdXBsZVRhYmxlU2xvdE9wcyAqYXBwZW5kb3BzOworCUJpdG1hcHNldCAgKnZh bGlkc3VicGxhbnM7CisJQml0bWFwc2V0ICAqYXN5bmNwbGFuczsKKwlpbnQJCQlucGxhbnM7CisJ aW50CQkJbmFzeW5jcGxhbnM7CisJaW50CQkJZmlyc3R2YWxpZDsKKwlpbnQJCQlpLAorCQkJCWo7 CisKKwkvKiBJZiBydW4tdGltZSBwYXJ0aXRpb24gcHJ1bmluZyBpcyBlbmFibGVkLCB0aGVuIHNl dCB0aGF0IHVwIG5vdyAqLworCWlmIChub2RlLT5wYXJ0X3BydW5lX2luZGV4ID49IDApCisJewor CQlQYXJ0aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0YXRlOworCisJCS8qCisJCSAqIFNldCB1cCBw cnVuaW5nIGRhdGEgc3RydWN0dXJlLiAgVGhpcyBhbHNvIGluaXRpYWxpemVzIHRoZSBzZXQgb2YK KwkJICogc3VicGxhbnMgdG8gaW5pdGlhbGl6ZSAodmFsaWRzdWJwbGFucykgYnkgdGFraW5nIGlu dG8gYWNjb3VudCB0aGUKKwkJICogcmVzdWx0IG9mIHBlcmZvcm1pbmcgaW5pdGlhbCBwcnVuaW5n IGlmIGFueS4KKwkJICovCisJCXBydW5lc3RhdGUgPSBFeGVjSW5pdFBhcnRpdGlvbkV4ZWNQcnVu aW5nKCZzdGF0ZS0+cHMsCisJCQkJCQkJCQkJCQkgIGxpc3RfbGVuZ3RoKG5vZGUtPnN1YnBsYW5z KSwKKwkJCQkJCQkJCQkJCSAgbm9kZS0+cGFydF9wcnVuZV9pbmRleCwKKwkJCQkJCQkJCQkJCSAg bm9kZS0+YXBwcmVsaWRzLAorCQkJCQkJCQkJCQkJICAmdmFsaWRzdWJwbGFucyk7CisJCXN0YXRl LT5wcnVuZV9zdGF0ZSA9IHBydW5lc3RhdGU7CisJCW5wbGFucyA9IGJtc19udW1fbWVtYmVycyh2 YWxpZHN1YnBsYW5zKTsKKworCQkvKgorCQkgKiBXaGVuIG5vIHJ1bi10aW1lIHBydW5pbmcgaXMg cmVxdWlyZWQgYW5kIHRoZXJlJ3MgYXQgbGVhc3Qgb25lCisJCSAqIHN1YnBsYW4sIHdlIGNhbiBm aWxsIHZhbGlkX3N1YnBsYW5zIGltbWVkaWF0ZWx5LCBwcmV2ZW50aW5nCisJCSAqIGxhdGVyIGNh bGxzIHRvIEV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucy4KKwkJICovCisJCWlmICghcHJ1bmVzdGF0 ZS0+ZG9fZXhlY19wcnVuZSAmJiBucGxhbnMgPiAwKQorCQl7CisJCQlzdGF0ZS0+dmFsaWRfc3Vi cGxhbnMgPSBibXNfYWRkX3JhbmdlKE5VTEwsIDAsIG5wbGFucyAtIDEpOworCQkJc3RhdGUtPnZh bGlkX3N1YnBsYW5zX2lkZW50aWZpZWQgPSB0cnVlOworCQl9CisJfQorCWVsc2UKKwl7CisJCW5w bGFucyA9IGxpc3RfbGVuZ3RoKG5vZGUtPnN1YnBsYW5zKTsKKworCQkvKgorCQkgKiBXaGVuIHJ1 bi10aW1lIHBhcnRpdGlvbiBwcnVuaW5nIGlzIG5vdCBlbmFibGVkIHdlIGNhbiBqdXN0IG1hcmsg YWxsCisJCSAqIHN1YnBsYW5zIGFzIHZhbGlkOyB0aGV5IG11c3QgYWxzbyBhbGwgYmUgaW5pdGlh bGl6ZWQuCisJCSAqLworCQlBc3NlcnQobnBsYW5zID4gMCk7CisJCXN0YXRlLT52YWxpZF9zdWJw bGFucyA9IHZhbGlkc3VicGxhbnMgPQorCQkJYm1zX2FkZF9yYW5nZShOVUxMLCAwLCBucGxhbnMg LSAxKTsKKwkJc3RhdGUtPnZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQgPSB0cnVlOworCQlzdGF0 ZS0+cHJ1bmVfc3RhdGUgPSBOVUxMOworCX0KKworCWFwcGVuZHBsYW5zdGF0ZXMgPSBwYWxsb2Mw X2FycmF5KFBsYW5TdGF0ZSAqLCBucGxhbnMpOworCisJLyoKKwkgKiBjYWxsIEV4ZWNJbml0Tm9k ZSBvbiBlYWNoIG9mIHRoZSB2YWxpZCBwbGFucyB0byBiZSBleGVjdXRlZCBhbmQgc2F2ZQorCSAq IHRoZSByZXN1bHRzIGludG8gdGhlIGFwcGVuZHBsYW5zdGF0ZXMgYXJyYXkuCisJICoKKwkgKiBX aGlsZSBhdCBpdCwgZmluZCBvdXQgdGhlIGZpcnN0IHZhbGlkIHBhcnRpYWwgcGxhbi4KKwkgKi8K KwlqID0gMDsKKwlhc3luY3BsYW5zID0gTlVMTDsKKwluYXN5bmNwbGFucyA9IDA7CisJZmlyc3R2 YWxpZCA9IG5wbGFuczsKKwlpID0gLTE7CisJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKHZh bGlkc3VicGxhbnMsIGkpKSA+PSAwKQorCXsKKwkJUGxhbgkgICAqaW5pdE5vZGUgPSAoUGxhbiAq KSBsaXN0X250aChub2RlLT5zdWJwbGFucywgaSk7CisKKwkJLyoKKwkJICogUmVjb3JkIGFzeW5j IHN1YnBsYW5zLiAgV2hlbiBleGVjdXRpbmcgRXZhbFBsYW5RdWFsLCB3ZSB0cmVhdCB0aGVtCisJ CSAqIGFzIHN5bmMgb25lczsgZG9uJ3QgZG8gdGhpcyB3aGVuIGluaXRpYWxpemluZyBhbiBFdmFs UGxhblF1YWwgcGxhbgorCQkgKiB0cmVlLgorCQkgKi8KKwkJaWYgKGluaXROb2RlLT5hc3luY19j YXBhYmxlICYmIGVzdGF0ZS0+ZXNfZXBxX2FjdGl2ZSA9PSBOVUxMKQorCQl7CisJCQlhc3luY3Bs YW5zID0gYm1zX2FkZF9tZW1iZXIoYXN5bmNwbGFucywgaik7CisJCQluYXN5bmNwbGFucysrOwor CQl9CisKKwkJLyoKKwkJICogUmVjb3JkIHRoZSBsb3dlc3QgYXBwZW5kcGxhbnMgaW5kZXggd2hp Y2ggaXMgYSB2YWxpZCBwYXJ0aWFsIHBsYW4uCisJCSAqLworCQlpZiAoZmlyc3RfdmFsaWRfcGFy dGlhbF9wbGFuICYmIGkgPj0gZmlyc3RfcGFydGlhbF9wbGFuICYmIGogPCBmaXJzdHZhbGlkKQor CQkJZmlyc3R2YWxpZCA9IGo7CisKKwkJYXBwZW5kcGxhbnN0YXRlc1tqKytdID0gRXhlY0luaXRO b2RlKGluaXROb2RlLCBlc3RhdGUsIGVmbGFncyk7CisJfQorCisJaWYgKGZpcnN0X3ZhbGlkX3Bh cnRpYWxfcGxhbikKKwkJKmZpcnN0X3ZhbGlkX3BhcnRpYWxfcGxhbiA9IGZpcnN0dmFsaWQ7CisK KwlzdGF0ZS0+cGxhbnMgPSBhcHBlbmRwbGFuc3RhdGVzOworCXN0YXRlLT5ucGxhbnMgPSBucGxh bnM7CisKKwkvKgorCSAqIEluaXRpYWxpemUgQXBwZW5kJ3MgcmVzdWx0IHR1cGxlIHR5cGUgYW5k IHNsb3QuICBJZiB0aGUgY2hpbGQgcGxhbnMgYWxsCisJICogcHJvZHVjZSB0aGUgc2FtZSBmaXhl ZCBzbG90IHR5cGUsIHdlIGNhbiB1c2UgdGhhdCBzbG90IHR5cGU7IG90aGVyd2lzZQorCSAqIG1h a2UgYSB2aXJ0dWFsIHNsb3QuICAoTm90ZSB0aGF0IHRoZSByZXN1bHQgc2xvdCBpdHNlbGYgaXMg dXNlZCBvbmx5IHRvCisJICogcmV0dXJuIGEgbnVsbCB0dXBsZSBhdCBlbmQgb2YgZXhlY3V0aW9u OyByZWFsIHR1cGxlcyBhcmUgcmV0dXJuZWQgdG8KKwkgKiB0aGUgY2FsbGVyIGluIHRoZSBjaGls ZHJlbidzIG93biByZXN1bHQgc2xvdHMuICBXaGF0IHdlIGFyZSBkb2luZyBoZXJlCisJICogaXMg YWxsb3dpbmcgdGhlIHBhcmVudCBwbGFuIG5vZGUgdG8gb3B0aW1pemUgaWYgdGhlIEFwcGVuZCB3 aWxsIHJldHVybgorCSAqIG9ubHkgb25lIGtpbmQgb2Ygc2xvdC4pCisJICovCisJYXBwZW5kb3Bz ID0gRXhlY0dldENvbW1vblNsb3RPcHMoYXBwZW5kcGxhbnN0YXRlcywgaik7CisJaWYgKGFwcGVu ZG9wcyAhPSBOVUxMKQorCXsKKwkJRXhlY0luaXRSZXN1bHRUdXBsZVNsb3RUTCgmc3RhdGUtPnBz LCBhcHBlbmRvcHMpOworCX0KKwllbHNlCisJeworCQlFeGVjSW5pdFJlc3VsdFR1cGxlU2xvdFRM KCZzdGF0ZS0+cHMsICZUVFNPcHNWaXJ0dWFsKTsKKwkJLyogc2hvdyB0aGF0IHRoZSBvdXRwdXQg c2xvdCB0eXBlIGlzIG5vdCBmaXhlZCAqLworCQlzdGF0ZS0+cHMucmVzdWx0b3Bzc2V0ID0gdHJ1 ZTsKKwkJc3RhdGUtPnBzLnJlc3VsdG9wc2ZpeGVkID0gZmFsc2U7CisJfQorCisJLyogSW5pdGlh bGl6ZSBhc3luYyBzdGF0ZSAqLworCXN0YXRlLT5hc3luY3BsYW5zID0gYXN5bmNwbGFuczsKKwlz dGF0ZS0+bmFzeW5jcGxhbnMgPSBuYXN5bmNwbGFuczsKKwlzdGF0ZS0+YXN5bmNyZXF1ZXN0cyA9 IE5VTEw7CisJc3RhdGUtPmFzeW5jcmVzdWx0cyA9IE5VTEw7CisJc3RhdGUtPm5lZWRyZXF1ZXN0 ID0gTlVMTDsKKwlzdGF0ZS0+ZXZlbnRzZXQgPSBOVUxMOworCXN0YXRlLT52YWxpZF9hc3luY3Bs YW5zID0gTlVMTDsKKworCWlmIChuYXN5bmNwbGFucyA+IDApCisJeworCQlzdGF0ZS0+YXN5bmNy ZXF1ZXN0cyA9IHBhbGxvYzBfYXJyYXkoQXN5bmNSZXF1ZXN0ICosIG5wbGFucyk7CisKKwkJaSA9 IC0xOworCQl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIoYXN5bmNwbGFucywgaSkpID49IDAp CisJCXsKKwkJCUFzeW5jUmVxdWVzdCAqYXJlcTsKKworCQkJYXJlcSA9IHBhbGxvY19vYmplY3Qo QXN5bmNSZXF1ZXN0KTsKKwkJCWFyZXEtPnJlcXVlc3RvciA9IChQbGFuU3RhdGUgKikgc3RhdGU7 CisJCQlhcmVxLT5yZXF1ZXN0ZWUgPSBhcHBlbmRwbGFuc3RhdGVzW2ldOworCQkJYXJlcS0+cmVx dWVzdF9pbmRleCA9IGk7CisJCQlhcmVxLT5jYWxsYmFja19wZW5kaW5nID0gZmFsc2U7CisJCQlh cmVxLT5yZXF1ZXN0X2NvbXBsZXRlID0gZmFsc2U7CisJCQlhcmVxLT5yZXN1bHQgPSBOVUxMOwor CisJCQlzdGF0ZS0+YXN5bmNyZXF1ZXN0c1tpXSA9IGFyZXE7CisJCX0KKworCQkvKgorCQkgKiBB cHBlbmRTdGF0ZSBhbmQgTWVyZ2VBcHBlbmRTdGF0ZSBoYXZlIHNsaWdodGx5IGRpZmZlcmVudCBh bGxvY2F0aW9uCisJCSAqIHNpemVzIGZvciBhc3luY3Jlc3VsdHMgaW4gdGhlIG9yaWdpbmFsIGNv ZGUsIGJ1dCB3ZSB1bmlmeSB0byB0aGUKKwkJICogbGFyZ2VyIHJlcXVpcmVtZW50IG9yIHNwZWNp ZmljIG5wbGFucyBpZiByZXF1aXJlZC4KKwkJICovCisJCXN0YXRlLT5hc3luY3Jlc3VsdHMgPSBw YWxsb2MwX2FycmF5KFR1cGxlVGFibGVTbG90ICosIG5wbGFucyk7CisJfQorCisJLyoKKwkgKiBN aXNjZWxsYW5lb3VzIGluaXRpYWxpemF0aW9uCisJICovCisJc3RhdGUtPnBzLnBzX1Byb2pJbmZv ID0gTlVMTDsKK30KKwordm9pZAorRXhlY1JlU2NhbkFwcGVuZGVyKEFwcGVuZGVyU3RhdGUgKiBu b2RlKQoreworCWludAkJCWk7CisJaW50CQkJbmFzeW5jcGxhbnMgPSBub2RlLT5uYXN5bmNwbGFu czsKKworCS8qCisJICogSWYgYW55IFBBUkFNX0VYRUMgUGFyYW1zIHVzZWQgaW4gcHJ1bmluZyBl eHByZXNzaW9ucyBoYXZlIGNoYW5nZWQsIHRoZW4KKwkgKiB3ZSdkIGJldHRlciB1bnNldCB0aGUg dmFsaWQgc3VicGxhbnMgc28gdGhhdCB0aGV5IGFyZSByZXNlbGVjdGVkIGZvcgorCSAqIHRoZSBu ZXcgcGFyYW1ldGVyIHZhbHVlcy4KKwkgKi8KKwlpZiAobm9kZS0+cHJ1bmVfc3RhdGUgJiYKKwkJ Ym1zX292ZXJsYXAobm9kZS0+cHMuY2hnUGFyYW0sCisJCQkJCW5vZGUtPnBydW5lX3N0YXRlLT5l eGVjcGFyYW1pZHMpKQorCXsKKwkJbm9kZS0+dmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCA9IGZh bHNlOworCQlibXNfZnJlZShub2RlLT52YWxpZF9zdWJwbGFucyk7CisJCW5vZGUtPnZhbGlkX3N1 YnBsYW5zID0gTlVMTDsKKwkJYm1zX2ZyZWUobm9kZS0+dmFsaWRfYXN5bmNwbGFucyk7CisJCW5v ZGUtPnZhbGlkX2FzeW5jcGxhbnMgPSBOVUxMOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBub2Rl LT5ucGxhbnM7IGkrKykKKwl7CisJCVBsYW5TdGF0ZSAgKnN1Ym5vZGUgPSBub2RlLT5wbGFuc1tp XTsKKworCQkvKgorCQkgKiBFeGVjUmVTY2FuIGRvZXNuJ3Qga25vdyBhYm91dCBteSBzdWJwbGFu cywgc28gSSBoYXZlIHRvIGRvCisJCSAqIGNoYW5nZWQtcGFyYW1ldGVyIHNpZ25hbGluZyBteXNl bGYuCisJCSAqLworCQlpZiAobm9kZS0+cHMuY2hnUGFyYW0gIT0gTlVMTCkKKwkJCVVwZGF0ZUNo YW5nZWRQYXJhbVNldChzdWJub2RlLCBub2RlLT5wcy5jaGdQYXJhbSk7CisKKwkJLyoKKwkJICog SWYgY2hnUGFyYW0gb2Ygc3Vibm9kZSBpcyBub3QgbnVsbCB0aGVuIHBsYW4gd2lsbCBiZSByZS1z Y2FubmVkIGJ5CisJCSAqIGZpcnN0IEV4ZWNQcm9jTm9kZS4KKwkJICovCisJCWlmIChzdWJub2Rl LT5jaGdQYXJhbSA9PSBOVUxMKQorCQkJRXhlY1JlU2NhbihzdWJub2RlKTsKKwl9CisKKwkvKiBS ZXNldCBhc3luYyBzdGF0ZSAqLworCWlmIChuYXN5bmNwbGFucyA+IDApCisJeworCQlpID0gLTE7 CisJCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihub2RlLT5hc3luY3BsYW5zLCBpKSkgPj0g MCkKKwkJeworCQkJQXN5bmNSZXF1ZXN0ICphcmVxID0gbm9kZS0+YXN5bmNyZXF1ZXN0c1tpXTsK KworCQkJYXJlcS0+Y2FsbGJhY2tfcGVuZGluZyA9IGZhbHNlOworCQkJYXJlcS0+cmVxdWVzdF9j b21wbGV0ZSA9IGZhbHNlOworCQkJYXJlcS0+cmVzdWx0ID0gTlVMTDsKKwkJfQorCisJCWJtc19m cmVlKG5vZGUtPm5lZWRyZXF1ZXN0KTsKKwkJbm9kZS0+bmVlZHJlcXVlc3QgPSBOVUxMOworCX0K K30KKworLyogIFdhaXQgb3IgcG9sbCBmb3IgZmlsZSBkZXNjcmlwdG9yIGV2ZW50cyBhbmQgZmly ZSBjYWxsYmFja3MuICovCit2b2lkCitFeGVjQXBwZW5kZXJBc3luY0V2ZW50V2FpdChBcHBlbmRl clN0YXRlICogbm9kZSwgaW50IHRpbWVvdXQsIHVpbnQzMiB3YWl0X2V2ZW50X2luZm8pCit7CisJ aW50CQkJbmV2ZW50cyA9IG5vZGUtPm5hc3luY3BsYW5zICsgMjsJLyogb25lIGZvciBQTSBkZWF0 aCBhbmQKKwkJCQkJCQkJCQkJCQkgKiBvbmUgZm9yIGxhdGNoICovCisJaW50CQkJbm9jY3VycmVk OworCWludAkJCWk7CisJV2FpdEV2ZW50CW9jY3VycmVkX2V2ZW50W0VWRU5UX0JVRkZFUl9TSVpF XTsKKworCUFzc2VydChub2RlLT5ldmVudHNldCA9PSBOVUxMKTsKKworCW5vZGUtPmV2ZW50c2V0 ID0gQ3JlYXRlV2FpdEV2ZW50U2V0KEN1cnJlbnRSZXNvdXJjZU93bmVyLCBuZXZlbnRzKTsKKwlB ZGRXYWl0RXZlbnRUb1NldChub2RlLT5ldmVudHNldCwgV0xfRVhJVF9PTl9QTV9ERUFUSCwgUEdJ TlZBTElEX1NPQ0tFVCwKKwkJCQkJICBOVUxMLCBOVUxMKTsKKworCS8qIEdpdmUgZWFjaCB3YWl0 aW5nIHN1YnBsYW4gYSBjaGFuY2UgdG8gYWRkIGFuIGV2ZW50LiAqLworCWkgPSAtMTsKKwl3aGls ZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIobm9kZS0+YXN5bmNwbGFucywgaSkpID49IDApCisJewor CQlBc3luY1JlcXVlc3QgKmFyZXEgPSBub2RlLT5hc3luY3JlcXVlc3RzW2ldOworCisJCWlmIChh cmVxLT5jYWxsYmFja19wZW5kaW5nKQorCQkJRXhlY0FzeW5jQ29uZmlndXJlV2FpdChhcmVxKTsK Kwl9CisKKwkvKgorCSAqIE5vIG5lZWQgZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZyBpZiBub25lIG9m IHRoZSBzdWJwbGFucyBjb25maWd1cmVkIGFueQorCSAqIGV2ZW50cy4KKwkgKi8KKwlpZiAoR2V0 TnVtUmVnaXN0ZXJlZFdhaXRFdmVudHMobm9kZS0+ZXZlbnRzZXQpID09IDEpCisJeworCQlGcmVl V2FpdEV2ZW50U2V0KG5vZGUtPmV2ZW50c2V0KTsKKwkJbm9kZS0+ZXZlbnRzZXQgPSBOVUxMOwor CQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBBZGQgdGhlIHByb2Nlc3MgbGF0Y2ggdG8gdGhlIHNl dCwgc28gdGhhdCB3ZSB3YWtlIHVwIHRvIHByb2Nlc3MgdGhlCisJICogc3RhbmRhcmQgaW50ZXJy dXB0cyB3aXRoIENIRUNLX0ZPUl9JTlRFUlJVUFRTKCkuCisJICoKKwkgKiBOT1RFOiBGb3IgaGlz dG9yaWNhbCByZWFzb25zLCBpdCdzIGltcG9ydGFudCB0aGF0IHRoaXMgaXMgYWRkZWQgdG8gdGhl CisJICogV2FpdEV2ZW50U2V0IGFmdGVyIHRoZSBFeGVjQXN5bmNDb25maWd1cmVXYWl0KCkgY2Fs bHMuICBOYW1lbHksCisJICogcG9zdGdyZXNfZmR3IGNhbGxzICJHZXROdW1SZWdpc3RlcmVkV2Fp dEV2ZW50cyhzZXQpID09IDEiIHRvIGNoZWNrIGlmCisJICogYW55IG90aGVyIGV2ZW50cyBhcmUg aW4gdGhlIHNldC4gIFRoYXQncyBhIHBvb3IgZGVzaWduLCBpdCdzCisJICogcXVlc3Rpb25hYmxl IGZvciBwb3N0Z3Jlc19mZHcgdG8gYmUgZG9pbmcgdGhhdCBpbiB0aGUgZmlyc3QgcGxhY2UsIGJ1 dAorCSAqIHdlIGNhbm5vdCBjaGFuZ2UgaXQgbm93LiAgVGhlIHBhdHRlcm4gaGFzIHBvc3NpYmx5 IGJlZW4gY29waWVkIHRvIG90aGVyCisJICogZXh0ZW5zaW9ucyB0b28uCisJICovCisJQWRkV2Fp dEV2ZW50VG9TZXQobm9kZS0+ZXZlbnRzZXQsIFdMX0xBVENIX1NFVCwgUEdJTlZBTElEX1NPQ0tF VCwKKwkJCQkJICBNeUxhdGNoLCBOVUxMKTsKKworCS8qIFJldHVybiBhdCBtb3N0IEVWRU5UX0JV RkZFUl9TSVpFIGV2ZW50cyBpbiBvbmUgY2FsbC4gKi8KKwlpZiAobmV2ZW50cyA+IEVWRU5UX0JV RkZFUl9TSVpFKQorCQluZXZlbnRzID0gRVZFTlRfQlVGRkVSX1NJWkU7CisKKwkvKiBXYWl0IHVu dGlsIGF0IGxlYXN0IG9uZSBldmVudCBvY2N1cnMuICovCisJbm9jY3VycmVkID0gV2FpdEV2ZW50 U2V0V2FpdChub2RlLT5ldmVudHNldCwgdGltZW91dCwgb2NjdXJyZWRfZXZlbnQsCisJCQkJCQkJ CSBuZXZlbnRzLCB3YWl0X2V2ZW50X2luZm8pOworCisKKwlGcmVlV2FpdEV2ZW50U2V0KG5vZGUt PmV2ZW50c2V0KTsKKwlub2RlLT5ldmVudHNldCA9IE5VTEw7CisJaWYgKG5vY2N1cnJlZCA9PSAw KQorCQlyZXR1cm47CisKKworCS8qIERlbGl2ZXIgbm90aWZpY2F0aW9ucy4gKi8KKwlmb3IgKGkg PSAwOyBpIDwgbm9jY3VycmVkOyBpKyspCisJeworCQlXYWl0RXZlbnQgICp3ID0gJm9jY3VycmVk X2V2ZW50W2ldOworCisJCS8qCisJCSAqIEVhY2ggd2FpdGluZyBzdWJwbGFuIHNob3VsZCBoYXZl IHJlZ2lzdGVyZWQgaXRzIHdhaXQgZXZlbnQgd2l0aAorCQkgKiB1c2VyX2RhdGEgcG9pbnRpbmcg YmFjayB0byBpdHMgQXN5bmNSZXF1ZXN0LgorCQkgKi8KKwkJaWYgKCh3LT5ldmVudHMgJiBXTF9T T0NLRVRfUkVBREFCTEUpICE9IDApCisJCXsKKwkJCUFzeW5jUmVxdWVzdCAqYXJlcSA9IChBc3lu Y1JlcXVlc3QgKikgdy0+dXNlcl9kYXRhOworCisJCQlpZiAoYXJlcS0+Y2FsbGJhY2tfcGVuZGlu ZykKKwkJCXsKKwkJCQkvKgorCQkJCSAqIE1hcmsgaXQgYXMgbm8gbG9uZ2VyIG5lZWRpbmcgYSBj YWxsYmFjay4gIFdlIG11c3QgZG8gdGhpcworCQkJCSAqIGJlZm9yZSBkaXNwYXRjaGluZyB0aGUg Y2FsbGJhY2sgaW4gY2FzZSB0aGUgY2FsbGJhY2sgcmVzZXRzCisJCQkJICogdGhlIGZsYWcuCisJ CQkJICovCisJCQkJYXJlcS0+Y2FsbGJhY2tfcGVuZGluZyA9IGZhbHNlOworCisJCQkJLyogRG8g dGhlIGFjdHVhbCB3b3JrLiAqLworCQkJCUV4ZWNBc3luY05vdGlmeShhcmVxKTsKKwkJCX0KKwkJ fQorCisJCS8qIEhhbmRsZSBzdGFuZGFyZCBpbnRlcnJ1cHRzICovCisJCWlmICgody0+ZXZlbnRz ICYgV0xfTEFUQ0hfU0VUKSAhPSAwKQorCQl7CisJCQlSZXNldExhdGNoKE15TGF0Y2gpOworCQkJ Q0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKwkJfQorCX0KK30KKworLyogIEJlZ2luIGV4ZWN1dGlu ZyBhc3luYy1jYXBhYmxlIHN1YnBsYW5zLiAqLwordm9pZAorRXhlY0FwcGVuZGVyQXN5bmNCZWdp bihBcHBlbmRlclN0YXRlICogbm9kZSkKK3sKKwlpbnQJCQlpOworCisJLyogQmFja3dhcmQgc2Nh biBpcyBub3Qgc3VwcG9ydGVkIGJ5IGFzeW5jLWF3YXJlIEFwcGVuZHMuICovCisJQXNzZXJ0KFNj YW5EaXJlY3Rpb25Jc0ZvcndhcmQobm9kZS0+cHMuc3RhdGUtPmVzX2RpcmVjdGlvbikpOworCisJ LyogV2Ugc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCB3aGVuIHRoZXJlIGFyZSBubyBzdWJwbGFucyAq LworCUFzc2VydChub2RlLT5ucGxhbnMgPiAwKTsKKworCS8qIFdlIHNob3VsZCBuZXZlciBiZSBj YWxsZWQgd2hlbiB0aGVyZSBhcmUgbm8gYXN5bmMgc3VicGxhbnMuICovCisJQXNzZXJ0KG5vZGUt Pm5hc3luY3BsYW5zID4gMCk7CisKKwkvKiBNYWtlIGEgcmVxdWVzdCBmb3IgZWFjaCBvZiB0aGUg dmFsaWQgYXN5bmMgc3VicGxhbnMuICovCisJaSA9IC0xOworCXdoaWxlICgoaSA9IGJtc19uZXh0 X21lbWJlcihub2RlLT52YWxpZF9hc3luY3BsYW5zLCBpKSkgPj0gMCkKKwl7CisJCUFzeW5jUmVx dWVzdCAqYXJlcSA9IG5vZGUtPmFzeW5jcmVxdWVzdHNbaV07CisKKwkJQXNzZXJ0KGFyZXEtPnJl cXVlc3RfaW5kZXggPT0gaSk7CisJCUFzc2VydCghYXJlcS0+Y2FsbGJhY2tfcGVuZGluZyk7CisK KwkJLyogRG8gdGhlIGFjdHVhbCB3b3JrLiAqLworCQlFeGVjQXN5bmNSZXF1ZXN0KGFyZXEpOwor CX0KK30KKworLyogIFNodXRzIGRvd24gdGhlIHN1YnBsYW5zIG9mIGFuIEFwcGVuZGVyIG5vZGUu ICovCit2b2lkCitFeGVjRW5kQXBwZW5kZXIoQXBwZW5kZXJTdGF0ZSAqIG5vZGUpCit7CisJUGxh blN0YXRlICoqc3VicGxhbnM7CisJaW50CQkJbnBsYW5zOworCWludAkJCWk7CisKKwkvKgorCSAq IGdldCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBub2RlCisJICovCisJc3VicGxhbnMgPSBub2RlLT5w bGFuczsKKwlucGxhbnMgPSBub2RlLT5ucGxhbnM7CisKKwkvKgorCSAqIHNodXQgZG93biBlYWNo IG9mIHRoZSBzdWJzY2FucworCSAqLworCWZvciAoaSA9IDA7IGkgPCBucGxhbnM7IGkrKykKKwkJ RXhlY0VuZE5vZGUoc3VicGxhbnNbaV0pOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhl Y3V0b3IvZXhlY0N1cnJlbnQuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNDdXJyZW50LmMK aW5kZXggOTlmMmIyZDBjNmYuLjM3ZjVjN2ZkMmM1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9l eGVjdXRvci9leGVjQ3VycmVudC5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNDdXJy ZW50LmMKQEAgLTM3NSw5ICszNzUsOSBAQCBzZWFyY2hfcGxhbl90cmVlKFBsYW5TdGF0ZSAqbm9k ZSwgT2lkIHRhYmxlX29pZCwKIAkJCQlBcHBlbmRTdGF0ZSAqYXN0YXRlID0gKEFwcGVuZFN0YXRl ICopIG5vZGU7CiAJCQkJaW50CQkJaTsKIAotCQkJCWZvciAoaSA9IDA7IGkgPCBhc3RhdGUtPmFz X25wbGFuczsgaSsrKQorCQkJCWZvciAoaSA9IDA7IGkgPCBhc3RhdGUtPmFzLm5wbGFuczsgaSsr KQogCQkJCXsKLQkJCQkJU2NhblN0YXRlICAqZWxlbSA9IHNlYXJjaF9wbGFuX3RyZWUoYXN0YXRl LT5hcHBlbmRwbGFuc1tpXSwKKwkJCQkJU2NhblN0YXRlICAqZWxlbSA9IHNlYXJjaF9wbGFuX3Ry ZWUoYXN0YXRlLT5hcy5wbGFuc1tpXSwKIAkJCQkJCQkJCQkJCQkJdGFibGVfb2lkLAogCQkJCQkJ CQkJCQkJCQlwZW5kaW5nX3Jlc2Nhbik7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL2V4ZWNQcm9jbm9kZS5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1Byb2Nub2RlLmMK aW5kZXggN2U0MGI4NTI1MTcuLmI5OTQ4MGY0M2ZjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9l eGVjdXRvci9leGVjUHJvY25vZGUuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUHJv Y25vZGUuYwpAQCAtOTEwLDggKzkxMCw4IEBAIEV4ZWNTZXRUdXBsZUJvdW5kKGludDY0IHR1cGxl c19uZWVkZWQsIFBsYW5TdGF0ZSAqY2hpbGRfbm9kZSkKIAkJQXBwZW5kU3RhdGUgKmFTdGF0ZSA9 IChBcHBlbmRTdGF0ZSAqKSBjaGlsZF9ub2RlOwogCQlpbnQJCQlpOwogCi0JCWZvciAoaSA9IDA7 IGkgPCBhU3RhdGUtPmFzX25wbGFuczsgaSsrKQotCQkJRXhlY1NldFR1cGxlQm91bmQodHVwbGVz X25lZWRlZCwgYVN0YXRlLT5hcHBlbmRwbGFuc1tpXSk7CisJCWZvciAoaSA9IDA7IGkgPCBhU3Rh dGUtPmFzLm5wbGFuczsgaSsrKQorCQkJRXhlY1NldFR1cGxlQm91bmQodHVwbGVzX25lZWRlZCwg YVN0YXRlLT5hcy5wbGFuc1tpXSk7CiAJfQogCWVsc2UgaWYgKElzQShjaGlsZF9ub2RlLCBNZXJn ZUFwcGVuZFN0YXRlKSkKIAl7CkBAIC05MjMsOCArOTIzLDggQEAgRXhlY1NldFR1cGxlQm91bmQo aW50NjQgdHVwbGVzX25lZWRlZCwgUGxhblN0YXRlICpjaGlsZF9ub2RlKQogCQlNZXJnZUFwcGVu ZFN0YXRlICptYVN0YXRlID0gKE1lcmdlQXBwZW5kU3RhdGUgKikgY2hpbGRfbm9kZTsKIAkJaW50 CQkJaTsKIAotCQlmb3IgKGkgPSAwOyBpIDwgbWFTdGF0ZS0+bXNfbnBsYW5zOyBpKyspCi0JCQlF eGVjU2V0VHVwbGVCb3VuZCh0dXBsZXNfbmVlZGVkLCBtYVN0YXRlLT5tZXJnZXBsYW5zW2ldKTsK KwkJZm9yIChpID0gMDsgaSA8IG1hU3RhdGUtPm1zLm5wbGFuczsgaSsrKQorCQkJRXhlY1NldFR1 cGxlQm91bmQodHVwbGVzX25lZWRlZCwgbWFTdGF0ZS0+bXMucGxhbnNbaV0pOwogCX0KIAllbHNl IGlmIChJc0EoY2hpbGRfbm9kZSwgUmVzdWx0U3RhdGUpKQogCXsKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL21lc29uLmJ1aWxkIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvbWVzb24u YnVpbGQKaW5kZXggZGM0NWJlMGIyY2UuLjA2MTkxYjIyMTQyIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9leGVjdXRvci9tZXNvbi5idWlsZAorKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9tZXNv bi5idWlsZApAQCAtMyw2ICszLDcgQEAKIGJhY2tlbmRfc291cmNlcyArPSBmaWxlcygKICAgJ2V4 ZWNBbWkuYycsCiAgICdleGVjQXN5bmMuYycsCisgICdleGVjQXBwZW5kLmMnLAogICAnZXhlY0N1 cnJlbnQuYycsCiAgICdleGVjRXhwci5jJywKICAgJ2V4ZWNFeHBySW50ZXJwLmMnLApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFwcGVuZC5jIGIvc3JjL2JhY2tlbmQvZXhl Y3V0b3Ivbm9kZUFwcGVuZC5jCmluZGV4IDA1OWY5NmQyMGY3Li45NjNhYjg5MDZlMSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFwcGVuZC5jCisrKyBiL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL25vZGVBcHBlbmQuYwpAQCAtNTcsNiArNTcsNyBAQAogCiAjaW5jbHVkZSAicG9z dGdyZXMuaCIKIAorI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWNBcHBlbmQuaCIKICNpbmNsdWRlICJl eGVjdXRvci9leGVjQXN5bmMuaCIKICNpbmNsdWRlICJleGVjdXRvci9leGVjUGFydGl0aW9uLmgi CiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY3V0b3IuaCIKQEAgLTExMCwxNSArMTExLDYgQEAgQXBw ZW5kU3RhdGUgKgogRXhlY0luaXRBcHBlbmQoQXBwZW5kICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwg aW50IGVmbGFncykKIHsKIAlBcHBlbmRTdGF0ZSAqYXBwZW5kc3RhdGUgPSBtYWtlTm9kZShBcHBl bmRTdGF0ZSk7Ci0JUGxhblN0YXRlICoqYXBwZW5kcGxhbnN0YXRlczsKLQljb25zdCBUdXBsZVRh YmxlU2xvdE9wcyAqYXBwZW5kb3BzOwotCUJpdG1hcHNldCAgKnZhbGlkc3VicGxhbnM7Ci0JQml0 bWFwc2V0ICAqYXN5bmNwbGFuczsKLQlpbnQJCQlucGxhbnM7Ci0JaW50CQkJbmFzeW5jcGxhbnM7 Ci0JaW50CQkJZmlyc3R2YWxpZDsKLQlpbnQJCQlpLAotCQkJCWo7CiAKIAkvKiBjaGVjayBmb3Ig dW5zdXBwb3J0ZWQgZmxhZ3MgKi8KIAlBc3NlcnQoIShlZmxhZ3MgJiBFWEVDX0ZMQUdfTUFSSykp OwpAQCAtMTI2LDE2NyArMTE4LDI3IEBAIEV4ZWNJbml0QXBwZW5kKEFwcGVuZCAqbm9kZSwgRVN0 YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJLyoKIAkgKiBjcmVhdGUgbmV3IEFwcGVuZFN0YXRl IGZvciBvdXIgYXBwZW5kIG5vZGUKIAkgKi8KLQlhcHBlbmRzdGF0ZS0+cHMucGxhbiA9IChQbGFu ICopIG5vZGU7Ci0JYXBwZW5kc3RhdGUtPnBzLnN0YXRlID0gZXN0YXRlOwotCWFwcGVuZHN0YXRl LT5wcy5FeGVjUHJvY05vZGUgPSBFeGVjQXBwZW5kOworCWFwcGVuZHN0YXRlLT5hcy5wcy5wbGFu ID0gKFBsYW4gKikgbm9kZTsKKwlhcHBlbmRzdGF0ZS0+YXMucHMuc3RhdGUgPSBlc3RhdGU7CisJ YXBwZW5kc3RhdGUtPmFzLnBzLkV4ZWNQcm9jTm9kZSA9IEV4ZWNBcHBlbmQ7CiAKIAkvKiBMZXQg Y2hvb3NlX25leHRfc3VicGxhbl8qIGZ1bmN0aW9uIGhhbmRsZSBzZXR0aW5nIHRoZSBmaXJzdCBz dWJwbGFuICovCiAJYXBwZW5kc3RhdGUtPmFzX3doaWNocGxhbiA9IElOVkFMSURfU1VCUExBTl9J TkRFWDsKIAlhcHBlbmRzdGF0ZS0+YXNfc3luY2RvbmUgPSBmYWxzZTsKIAlhcHBlbmRzdGF0ZS0+ YXNfYmVndW4gPSBmYWxzZTsKIAotCS8qIElmIHJ1bi10aW1lIHBhcnRpdGlvbiBwcnVuaW5nIGlz IGVuYWJsZWQsIHRoZW4gc2V0IHRoYXQgdXAgbm93ICovCi0JaWYgKG5vZGUtPnBhcnRfcHJ1bmVf aW5kZXggPj0gMCkKLQl7Ci0JCVBhcnRpdGlvblBydW5lU3RhdGUgKnBydW5lc3RhdGU7Ci0KLQkJ LyoKLQkJICogU2V0IHVwIHBydW5pbmcgZGF0YSBzdHJ1Y3R1cmUuICBUaGlzIGFsc28gaW5pdGlh bGl6ZXMgdGhlIHNldCBvZgotCQkgKiBzdWJwbGFucyB0byBpbml0aWFsaXplICh2YWxpZHN1YnBs YW5zKSBieSB0YWtpbmcgaW50byBhY2NvdW50IHRoZQotCQkgKiByZXN1bHQgb2YgcGVyZm9ybWlu ZyBpbml0aWFsIHBydW5pbmcgaWYgYW55LgotCQkgKi8KLQkJcHJ1bmVzdGF0ZSA9IEV4ZWNJbml0 UGFydGl0aW9uRXhlY1BydW5pbmcoJmFwcGVuZHN0YXRlLT5wcywKLQkJCQkJCQkJCQkJCSAgbGlz dF9sZW5ndGgobm9kZS0+YXBwZW5kcGxhbnMpLAotCQkJCQkJCQkJCQkJICBub2RlLT5wYXJ0X3By dW5lX2luZGV4LAotCQkJCQkJCQkJCQkJICBub2RlLT5hcHByZWxpZHMsCi0JCQkJCQkJCQkJCQkg ICZ2YWxpZHN1YnBsYW5zKTsKLQkJYXBwZW5kc3RhdGUtPmFzX3BydW5lX3N0YXRlID0gcHJ1bmVz dGF0ZTsKLQkJbnBsYW5zID0gYm1zX251bV9tZW1iZXJzKHZhbGlkc3VicGxhbnMpOwotCi0JCS8q Ci0JCSAqIFdoZW4gbm8gcnVuLXRpbWUgcHJ1bmluZyBpcyByZXF1aXJlZCBhbmQgdGhlcmUncyBh dCBsZWFzdCBvbmUKLQkJICogc3VicGxhbiwgd2UgY2FuIGZpbGwgYXNfdmFsaWRfc3VicGxhbnMg aW1tZWRpYXRlbHksIHByZXZlbnRpbmcKLQkJICogbGF0ZXIgY2FsbHMgdG8gRXhlY0ZpbmRNYXRj aGluZ1N1YlBsYW5zLgotCQkgKi8KLQkJaWYgKCFwcnVuZXN0YXRlLT5kb19leGVjX3BydW5lICYm IG5wbGFucyA+IDApCi0JCXsKLQkJCWFwcGVuZHN0YXRlLT5hc192YWxpZF9zdWJwbGFucyA9IGJt c19hZGRfcmFuZ2UoTlVMTCwgMCwgbnBsYW5zIC0gMSk7Ci0JCQlhcHBlbmRzdGF0ZS0+YXNfdmFs aWRfc3VicGxhbnNfaWRlbnRpZmllZCA9IHRydWU7Ci0JCX0KLQl9Ci0JZWxzZQotCXsKLQkJbnBs YW5zID0gbGlzdF9sZW5ndGgobm9kZS0+YXBwZW5kcGxhbnMpOwotCi0JCS8qCi0JCSAqIFdoZW4g cnVuLXRpbWUgcGFydGl0aW9uIHBydW5pbmcgaXMgbm90IGVuYWJsZWQgd2UgY2FuIGp1c3QgbWFy ayBhbGwKLQkJICogc3VicGxhbnMgYXMgdmFsaWQ7IHRoZXkgbXVzdCBhbHNvIGFsbCBiZSBpbml0 aWFsaXplZC4KLQkJICovCi0JCUFzc2VydChucGxhbnMgPiAwKTsKLQkJYXBwZW5kc3RhdGUtPmFz X3ZhbGlkX3N1YnBsYW5zID0gdmFsaWRzdWJwbGFucyA9Ci0JCQlibXNfYWRkX3JhbmdlKE5VTEws IDAsIG5wbGFucyAtIDEpOwotCQlhcHBlbmRzdGF0ZS0+YXNfdmFsaWRfc3VicGxhbnNfaWRlbnRp ZmllZCA9IHRydWU7Ci0JCWFwcGVuZHN0YXRlLT5hc19wcnVuZV9zdGF0ZSA9IE5VTEw7Ci0JfQot Ci0JYXBwZW5kcGxhbnN0YXRlcyA9IChQbGFuU3RhdGUgKiopIHBhbGxvYyhucGxhbnMgKgotCQkJ CQkJCQkJCQkgc2l6ZW9mKFBsYW5TdGF0ZSAqKSk7Ci0KLQkvKgotCSAqIGNhbGwgRXhlY0luaXRO b2RlIG9uIGVhY2ggb2YgdGhlIHZhbGlkIHBsYW5zIHRvIGJlIGV4ZWN1dGVkIGFuZCBzYXZlCi0J ICogdGhlIHJlc3VsdHMgaW50byB0aGUgYXBwZW5kcGxhbnN0YXRlcyBhcnJheS4KLQkgKgotCSAq IFdoaWxlIGF0IGl0LCBmaW5kIG91dCB0aGUgZmlyc3QgdmFsaWQgcGFydGlhbCBwbGFuLgotCSAq LwotCWogPSAwOwotCWFzeW5jcGxhbnMgPSBOVUxMOwotCW5hc3luY3BsYW5zID0gMDsKLQlmaXJz dHZhbGlkID0gbnBsYW5zOwotCWkgPSAtMTsKLQl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIo dmFsaWRzdWJwbGFucywgaSkpID49IDApCi0JewotCQlQbGFuCSAgICppbml0Tm9kZSA9IChQbGFu ICopIGxpc3RfbnRoKG5vZGUtPmFwcGVuZHBsYW5zLCBpKTsKLQotCQkvKgotCQkgKiBSZWNvcmQg YXN5bmMgc3VicGxhbnMuICBXaGVuIGV4ZWN1dGluZyBFdmFsUGxhblF1YWwsIHdlIHRyZWF0IHRo ZW0KLQkJICogYXMgc3luYyBvbmVzOyBkb24ndCBkbyB0aGlzIHdoZW4gaW5pdGlhbGl6aW5nIGFu IEV2YWxQbGFuUXVhbCBwbGFuCi0JCSAqIHRyZWUuCi0JCSAqLwotCQlpZiAoaW5pdE5vZGUtPmFz eW5jX2NhcGFibGUgJiYgZXN0YXRlLT5lc19lcHFfYWN0aXZlID09IE5VTEwpCi0JCXsKLQkJCWFz eW5jcGxhbnMgPSBibXNfYWRkX21lbWJlcihhc3luY3BsYW5zLCBqKTsKLQkJCW5hc3luY3BsYW5z Kys7Ci0JCX0KLQotCQkvKgotCQkgKiBSZWNvcmQgdGhlIGxvd2VzdCBhcHBlbmRwbGFucyBpbmRl eCB3aGljaCBpcyBhIHZhbGlkIHBhcnRpYWwgcGxhbi4KLQkJICovCi0JCWlmIChpID49IG5vZGUt PmZpcnN0X3BhcnRpYWxfcGxhbiAmJiBqIDwgZmlyc3R2YWxpZCkKLQkJCWZpcnN0dmFsaWQgPSBq OwotCi0JCWFwcGVuZHBsYW5zdGF0ZXNbaisrXSA9IEV4ZWNJbml0Tm9kZShpbml0Tm9kZSwgZXN0 YXRlLCBlZmxhZ3MpOwotCX0KLQotCWFwcGVuZHN0YXRlLT5hc19maXJzdF9wYXJ0aWFsX3BsYW4g PSBmaXJzdHZhbGlkOwotCWFwcGVuZHN0YXRlLT5hcHBlbmRwbGFucyA9IGFwcGVuZHBsYW5zdGF0 ZXM7Ci0JYXBwZW5kc3RhdGUtPmFzX25wbGFucyA9IG5wbGFuczsKKwkvKiBJbml0aWFsaXplIGNv bW1vbiBmaWVsZHMgKi8KKwlFeGVjSW5pdEFwcGVuZGVyKCZhcHBlbmRzdGF0ZS0+YXMsCisJCQkJ CSAmbm9kZS0+YXAsCisJCQkJCSBlc3RhdGUsCisJCQkJCSBlZmxhZ3MsCisJCQkJCSBub2RlLT5m aXJzdF9wYXJ0aWFsX3BsYW4sCisJCQkJCSAmYXBwZW5kc3RhdGUtPmFzX2ZpcnN0X3BhcnRpYWxf cGxhbik7CiAKLQkvKgotCSAqIEluaXRpYWxpemUgQXBwZW5kJ3MgcmVzdWx0IHR1cGxlIHR5cGUg YW5kIHNsb3QuICBJZiB0aGUgY2hpbGQgcGxhbnMgYWxsCi0JICogcHJvZHVjZSB0aGUgc2FtZSBm aXhlZCBzbG90IHR5cGUsIHdlIGNhbiB1c2UgdGhhdCBzbG90IHR5cGU7IG90aGVyd2lzZQotCSAq IG1ha2UgYSB2aXJ0dWFsIHNsb3QuICAoTm90ZSB0aGF0IHRoZSByZXN1bHQgc2xvdCBpdHNlbGYg aXMgdXNlZCBvbmx5IHRvCi0JICogcmV0dXJuIGEgbnVsbCB0dXBsZSBhdCBlbmQgb2YgZXhlY3V0 aW9uOyByZWFsIHR1cGxlcyBhcmUgcmV0dXJuZWQgdG8KLQkgKiB0aGUgY2FsbGVyIGluIHRoZSBj aGlsZHJlbidzIG93biByZXN1bHQgc2xvdHMuICBXaGF0IHdlIGFyZSBkb2luZyBoZXJlCi0JICog aXMgYWxsb3dpbmcgdGhlIHBhcmVudCBwbGFuIG5vZGUgdG8gb3B0aW1pemUgaWYgdGhlIEFwcGVu ZCB3aWxsIHJldHVybgotCSAqIG9ubHkgb25lIGtpbmQgb2Ygc2xvdC4pCi0JICovCi0JYXBwZW5k b3BzID0gRXhlY0dldENvbW1vblNsb3RPcHMoYXBwZW5kcGxhbnN0YXRlcywgaik7Ci0JaWYgKGFw cGVuZG9wcyAhPSBOVUxMKQotCXsKLQkJRXhlY0luaXRSZXN1bHRUdXBsZVNsb3RUTCgmYXBwZW5k c3RhdGUtPnBzLCBhcHBlbmRvcHMpOwotCX0KLQllbHNlCi0JewotCQlFeGVjSW5pdFJlc3VsdFR1 cGxlU2xvdFRMKCZhcHBlbmRzdGF0ZS0+cHMsICZUVFNPcHNWaXJ0dWFsKTsKLQkJLyogc2hvdyB0 aGF0IHRoZSBvdXRwdXQgc2xvdCB0eXBlIGlzIG5vdCBmaXhlZCAqLwotCQlhcHBlbmRzdGF0ZS0+ cHMucmVzdWx0b3Bzc2V0ID0gdHJ1ZTsKLQkJYXBwZW5kc3RhdGUtPnBzLnJlc3VsdG9wc2ZpeGVk ID0gZmFsc2U7Ci0JfQorCWlmIChhcHBlbmRzdGF0ZS0+YXMubmFzeW5jcGxhbnMgPiAwICYmIGFw cGVuZHN0YXRlLT5hcy52YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkKQorCQljbGFzc2lmeV9tYXRj aGluZ19zdWJwbGFucyhhcHBlbmRzdGF0ZSk7CiAKLQkvKiBJbml0aWFsaXplIGFzeW5jIHN0YXRl ICovCi0JYXBwZW5kc3RhdGUtPmFzX2FzeW5jcGxhbnMgPSBhc3luY3BsYW5zOwotCWFwcGVuZHN0 YXRlLT5hc19uYXN5bmNwbGFucyA9IG5hc3luY3BsYW5zOwotCWFwcGVuZHN0YXRlLT5hc19hc3lu Y3JlcXVlc3RzID0gTlVMTDsKLQlhcHBlbmRzdGF0ZS0+YXNfYXN5bmNyZXN1bHRzID0gTlVMTDsK LQlhcHBlbmRzdGF0ZS0+YXNfbmFzeW5jcmVzdWx0cyA9IDA7CiAJYXBwZW5kc3RhdGUtPmFzX25h c3luY3JlbWFpbiA9IDA7Ci0JYXBwZW5kc3RhdGUtPmFzX25lZWRyZXF1ZXN0ID0gTlVMTDsKLQlh cHBlbmRzdGF0ZS0+YXNfZXZlbnRzZXQgPSBOVUxMOwotCWFwcGVuZHN0YXRlLT5hc192YWxpZF9h c3luY3BsYW5zID0gTlVMTDsKLQotCWlmIChuYXN5bmNwbGFucyA+IDApCi0JewotCQlhcHBlbmRz dGF0ZS0+YXNfYXN5bmNyZXF1ZXN0cyA9IChBc3luY1JlcXVlc3QgKiopCi0JCQlwYWxsb2MwKG5w bGFucyAqIHNpemVvZihBc3luY1JlcXVlc3QgKikpOwotCi0JCWkgPSAtMTsKLQkJd2hpbGUgKChp ID0gYm1zX25leHRfbWVtYmVyKGFzeW5jcGxhbnMsIGkpKSA+PSAwKQotCQl7Ci0JCQlBc3luY1Jl cXVlc3QgKmFyZXE7Ci0KLQkJCWFyZXEgPSBwYWxsb2Nfb2JqZWN0KEFzeW5jUmVxdWVzdCk7Ci0J CQlhcmVxLT5yZXF1ZXN0b3IgPSAoUGxhblN0YXRlICopIGFwcGVuZHN0YXRlOwotCQkJYXJlcS0+ cmVxdWVzdGVlID0gYXBwZW5kcGxhbnN0YXRlc1tpXTsKLQkJCWFyZXEtPnJlcXVlc3RfaW5kZXgg PSBpOwotCQkJYXJlcS0+Y2FsbGJhY2tfcGVuZGluZyA9IGZhbHNlOwotCQkJYXJlcS0+cmVxdWVz dF9jb21wbGV0ZSA9IGZhbHNlOwotCQkJYXJlcS0+cmVzdWx0ID0gTlVMTDsKLQotCQkJYXBwZW5k c3RhdGUtPmFzX2FzeW5jcmVxdWVzdHNbaV0gPSBhcmVxOwotCQl9Ci0KLQkJYXBwZW5kc3RhdGUt PmFzX2FzeW5jcmVzdWx0cyA9IChUdXBsZVRhYmxlU2xvdCAqKikKLQkJCXBhbGxvYzAobmFzeW5j cGxhbnMgKiBzaXplb2YoVHVwbGVUYWJsZVNsb3QgKikpOwotCi0JCWlmIChhcHBlbmRzdGF0ZS0+ YXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCkKLQkJCWNsYXNzaWZ5X21hdGNoaW5nX3N1YnBs YW5zKGFwcGVuZHN0YXRlKTsKLQl9Ci0KLQkvKgotCSAqIE1pc2NlbGxhbmVvdXMgaW5pdGlhbGl6 YXRpb24KLQkgKi8KLQotCWFwcGVuZHN0YXRlLT5wcy5wc19Qcm9qSW5mbyA9IE5VTEw7CiAKIAkv KiBGb3IgcGFyYWxsZWwgcXVlcnksIHRoaXMgd2lsbCBiZSBvdmVycmlkZGVuIGxhdGVyLiAqLwog CWFwcGVuZHN0YXRlLT5jaG9vc2VfbmV4dF9zdWJwbGFuID0gY2hvb3NlX25leHRfc3VicGxhbl9s b2NhbGx5OwpAQCAtMzE2LDExICsxNjgsMTEgQEAgRXhlY0FwcGVuZChQbGFuU3RhdGUgKnBzdGF0 ZSkKIAkJQXNzZXJ0KCFub2RlLT5hc19zeW5jZG9uZSk7CiAKIAkJLyogTm90aGluZyB0byBkbyBp ZiB0aGVyZSBhcmUgbm8gc3VicGxhbnMgKi8KLQkJaWYgKG5vZGUtPmFzX25wbGFucyA9PSAwKQot CQkJcmV0dXJuIEV4ZWNDbGVhclR1cGxlKG5vZGUtPnBzLnBzX1Jlc3VsdFR1cGxlU2xvdCk7CisJ CWlmIChub2RlLT5hcy5ucGxhbnMgPT0gMCkKKwkJCXJldHVybiBFeGVjQ2xlYXJUdXBsZShub2Rl LT5hcy5wcy5wc19SZXN1bHRUdXBsZVNsb3QpOwogCiAJCS8qIElmIHRoZXJlIGFyZSBhbnkgYXN5 bmMgc3VicGxhbnMsIGJlZ2luIGV4ZWN1dGluZyB0aGVtLiAqLwotCQlpZiAobm9kZS0+YXNfbmFz eW5jcGxhbnMgPiAwKQorCQlpZiAobm9kZS0+YXMubmFzeW5jcGxhbnMgPiAwKQogCQkJRXhlY0Fw cGVuZEFzeW5jQmVnaW4obm9kZSk7CiAKIAkJLyoKQEAgLTMyOCwxMSArMTgwLDExIEBAIEV4ZWNB cHBlbmQoUGxhblN0YXRlICpwc3RhdGUpCiAJCSAqIHByb2NlZWRpbmcuCiAJCSAqLwogCQlpZiAo IW5vZGUtPmNob29zZV9uZXh0X3N1YnBsYW4obm9kZSkgJiYgbm9kZS0+YXNfbmFzeW5jcmVtYWlu ID09IDApCi0JCQlyZXR1cm4gRXhlY0NsZWFyVHVwbGUobm9kZS0+cHMucHNfUmVzdWx0VHVwbGVT bG90KTsKKwkJCXJldHVybiBFeGVjQ2xlYXJUdXBsZShub2RlLT5hcy5wcy5wc19SZXN1bHRUdXBs ZVNsb3QpOwogCiAJCUFzc2VydChub2RlLT5hc19zeW5jZG9uZSB8fAogCQkJICAgKG5vZGUtPmFz X3doaWNocGxhbiA+PSAwICYmCi0JCQkJbm9kZS0+YXNfd2hpY2hwbGFuIDwgbm9kZS0+YXNfbnBs YW5zKSk7CisJCQkJbm9kZS0+YXNfd2hpY2hwbGFuIDwgbm9kZS0+YXMubnBsYW5zKSk7CiAKIAkJ LyogQW5kIHdlJ3JlIGluaXRpYWxpemVkLiAqLwogCQlub2RlLT5hc19iZWd1biA9IHRydWU7CkBA IC0zNDcsMTkgKzE5OSwxOSBAQCBFeGVjQXBwZW5kKFBsYW5TdGF0ZSAqcHN0YXRlKQogCQkvKgog CQkgKiB0cnkgdG8gZ2V0IGEgdHVwbGUgZnJvbSBhbiBhc3luYyBzdWJwbGFuIGlmIGFueQogCQkg Ki8KLQkJaWYgKG5vZGUtPmFzX3N5bmNkb25lIHx8ICFibXNfaXNfZW1wdHkobm9kZS0+YXNfbmVl ZHJlcXVlc3QpKQorCQlpZiAobm9kZS0+YXNfc3luY2RvbmUgfHwgIWJtc19pc19lbXB0eShub2Rl LT5hcy5uZWVkcmVxdWVzdCkpCiAJCXsKIAkJCWlmIChFeGVjQXBwZW5kQXN5bmNHZXROZXh0KG5v ZGUsICZyZXN1bHQpKQogCQkJCXJldHVybiByZXN1bHQ7CiAJCQlBc3NlcnQoIW5vZGUtPmFzX3N5 bmNkb25lKTsKLQkJCUFzc2VydChibXNfaXNfZW1wdHkobm9kZS0+YXNfbmVlZHJlcXVlc3QpKTsK KwkJCUFzc2VydChibXNfaXNfZW1wdHkobm9kZS0+YXMubmVlZHJlcXVlc3QpKTsKIAkJfQogCiAJ CS8qCiAJCSAqIGZpZ3VyZSBvdXQgd2hpY2ggc3luYyBzdWJwbGFuIHdlIGFyZSBjdXJyZW50bHkg cHJvY2Vzc2luZwogCQkgKi8KLQkJQXNzZXJ0KG5vZGUtPmFzX3doaWNocGxhbiA+PSAwICYmIG5v ZGUtPmFzX3doaWNocGxhbiA8IG5vZGUtPmFzX25wbGFucyk7Ci0JCXN1Ym5vZGUgPSBub2RlLT5h cHBlbmRwbGFuc1tub2RlLT5hc193aGljaHBsYW5dOworCQlBc3NlcnQobm9kZS0+YXNfd2hpY2hw bGFuID49IDAgJiYgbm9kZS0+YXNfd2hpY2hwbGFuIDwgbm9kZS0+YXMubnBsYW5zKTsKKwkJc3Vi bm9kZSA9IG5vZGUtPmFzLnBsYW5zW25vZGUtPmFzX3doaWNocGxhbl07CiAKIAkJLyoKIAkJICog Z2V0IGEgdHVwbGUgZnJvbSB0aGUgc3VicGxhbgpAQCAtMzg2LDcgKzIzOCw3IEBAIEV4ZWNBcHBl bmQoUGxhblN0YXRlICpwc3RhdGUpCiAKIAkJLyogY2hvb3NlIG5ldyBzeW5jIHN1YnBsYW47IGlm IG5vIHN5bmMvYXN5bmMgc3VicGxhbnMsIHdlJ3JlIGRvbmUgKi8KIAkJaWYgKCFub2RlLT5jaG9v c2VfbmV4dF9zdWJwbGFuKG5vZGUpICYmIG5vZGUtPmFzX25hc3luY3JlbWFpbiA9PSAwKQotCQkJ cmV0dXJuIEV4ZWNDbGVhclR1cGxlKG5vZGUtPnBzLnBzX1Jlc3VsdFR1cGxlU2xvdCk7CisJCQly ZXR1cm4gRXhlY0NsZWFyVHVwbGUobm9kZS0+YXMucHMucHNfUmVzdWx0VHVwbGVTbG90KTsKIAl9 CiB9CiAKQEAgLTQwMSw4MSArMjUzLDIyIEBAIEV4ZWNBcHBlbmQoUGxhblN0YXRlICpwc3RhdGUp CiB2b2lkCiBFeGVjRW5kQXBwZW5kKEFwcGVuZFN0YXRlICpub2RlKQogewotCVBsYW5TdGF0ZSAq KmFwcGVuZHBsYW5zOwotCWludAkJCW5wbGFuczsKLQlpbnQJCQlpOwotCi0JLyoKLQkgKiBnZXQg aW5mb3JtYXRpb24gZnJvbSB0aGUgbm9kZQotCSAqLwotCWFwcGVuZHBsYW5zID0gbm9kZS0+YXBw ZW5kcGxhbnM7Ci0JbnBsYW5zID0gbm9kZS0+YXNfbnBsYW5zOwotCi0JLyoKLQkgKiBzaHV0IGRv d24gZWFjaCBvZiB0aGUgc3Vic2NhbnMKLQkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbnBsYW5zOyBp KyspCi0JCUV4ZWNFbmROb2RlKGFwcGVuZHBsYW5zW2ldKTsKKwlFeGVjRW5kQXBwZW5kZXIoJm5v ZGUtPmFzKTsKIH0KIAogdm9pZAogRXhlY1JlU2NhbkFwcGVuZChBcHBlbmRTdGF0ZSAqbm9kZSkK IHsKLQlpbnQJCQluYXN5bmNwbGFucyA9IG5vZGUtPmFzX25hc3luY3BsYW5zOwotCWludAkJCWk7 Ci0KLQkvKgotCSAqIElmIGFueSBQQVJBTV9FWEVDIFBhcmFtcyB1c2VkIGluIHBydW5pbmcgZXhw cmVzc2lvbnMgaGF2ZSBjaGFuZ2VkLCB0aGVuCi0JICogd2UnZCBiZXR0ZXIgdW5zZXQgdGhlIHZh bGlkIHN1YnBsYW5zIHNvIHRoYXQgdGhleSBhcmUgcmVzZWxlY3RlZCBmb3IKLQkgKiB0aGUgbmV3 IHBhcmFtZXRlciB2YWx1ZXMuCi0JICovCi0JaWYgKG5vZGUtPmFzX3BydW5lX3N0YXRlICYmCi0J CWJtc19vdmVybGFwKG5vZGUtPnBzLmNoZ1BhcmFtLAotCQkJCQlub2RlLT5hc19wcnVuZV9zdGF0 ZS0+ZXhlY3BhcmFtaWRzKSkKLQl7Ci0JCW5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5zX2lkZW50aWZp ZWQgPSBmYWxzZTsKLQkJYm1zX2ZyZWUobm9kZS0+YXNfdmFsaWRfc3VicGxhbnMpOwotCQlub2Rl LT5hc192YWxpZF9zdWJwbGFucyA9IE5VTEw7Ci0JCWJtc19mcmVlKG5vZGUtPmFzX3ZhbGlkX2Fz eW5jcGxhbnMpOwotCQlub2RlLT5hc192YWxpZF9hc3luY3BsYW5zID0gTlVMTDsKLQl9Ci0KLQlm b3IgKGkgPSAwOyBpIDwgbm9kZS0+YXNfbnBsYW5zOyBpKyspCi0JewotCQlQbGFuU3RhdGUgICpz dWJub2RlID0gbm9kZS0+YXBwZW5kcGxhbnNbaV07CiAKLQkJLyoKLQkJICogRXhlY1JlU2NhbiBk b2Vzbid0IGtub3cgYWJvdXQgbXkgc3VicGxhbnMsIHNvIEkgaGF2ZSB0byBkbwotCQkgKiBjaGFu Z2VkLXBhcmFtZXRlciBzaWduYWxpbmcgbXlzZWxmLgotCQkgKi8KLQkJaWYgKG5vZGUtPnBzLmNo Z1BhcmFtICE9IE5VTEwpCi0JCQlVcGRhdGVDaGFuZ2VkUGFyYW1TZXQoc3Vibm9kZSwgbm9kZS0+ cHMuY2hnUGFyYW0pOworCWludAkJCW5hc3luY3BsYW5zID0gbm9kZS0+YXMubmFzeW5jcGxhbnM7 CiAKLQkJLyoKLQkJICogSWYgY2hnUGFyYW0gb2Ygc3Vibm9kZSBpcyBub3QgbnVsbCB0aGVuIHBs YW4gd2lsbCBiZSByZS1zY2FubmVkIGJ5Ci0JCSAqIGZpcnN0IEV4ZWNQcm9jTm9kZSBvciBieSBm aXJzdCBFeGVjQXN5bmNSZXF1ZXN0LgotCQkgKi8KLQkJaWYgKHN1Ym5vZGUtPmNoZ1BhcmFtID09 IE5VTEwpCi0JCQlFeGVjUmVTY2FuKHN1Ym5vZGUpOwotCX0KKwlFeGVjUmVTY2FuQXBwZW5kZXIo Jm5vZGUtPmFzKTsKIAotCS8qIFJlc2V0IGFzeW5jIHN0YXRlICovCisJLyogUmVzZXQgc3BlY2lm aWMgYXBwZW5kIGFzeW5jIHN0YXRlICovCiAJaWYgKG5hc3luY3BsYW5zID4gMCkKIAl7Ci0JCWkg PSAtMTsKLQkJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKG5vZGUtPmFzX2FzeW5jcGxhbnMs IGkpKSA+PSAwKQotCQl7Ci0JCQlBc3luY1JlcXVlc3QgKmFyZXEgPSBub2RlLT5hc19hc3luY3Jl cXVlc3RzW2ldOwotCi0JCQlhcmVxLT5jYWxsYmFja19wZW5kaW5nID0gZmFsc2U7Ci0JCQlhcmVx LT5yZXF1ZXN0X2NvbXBsZXRlID0gZmFsc2U7Ci0JCQlhcmVxLT5yZXN1bHQgPSBOVUxMOwotCQl9 Ci0KIAkJbm9kZS0+YXNfbmFzeW5jcmVzdWx0cyA9IDA7CiAJCW5vZGUtPmFzX25hc3luY3JlbWFp biA9IDA7Ci0JCWJtc19mcmVlKG5vZGUtPmFzX25lZWRyZXF1ZXN0KTsKLQkJbm9kZS0+YXNfbmVl ZHJlcXVlc3QgPSBOVUxMOwogCX0KIAogCS8qIExldCBjaG9vc2VfbmV4dF9zdWJwbGFuXyogZnVu Y3Rpb24gaGFuZGxlIHNldHRpbmcgdGhlIGZpcnN0IHN1YnBsYW4gKi8KQEAgLTUwMiw3ICsyOTUs NyBAQCBFeGVjQXBwZW5kRXN0aW1hdGUoQXBwZW5kU3RhdGUgKm5vZGUsCiB7CiAJbm9kZS0+cHN0 YXRlX2xlbiA9CiAJCWFkZF9zaXplKG9mZnNldG9mKFBhcmFsbGVsQXBwZW5kU3RhdGUsIHBhX2Zp bmlzaGVkKSwKLQkJCQkgc2l6ZW9mKGJvb2wpICogbm9kZS0+YXNfbnBsYW5zKTsKKwkJCQkgc2l6 ZW9mKGJvb2wpICogbm9kZS0+YXMubnBsYW5zKTsKIAogCXNobV90b2NfZXN0aW1hdGVfY2h1bmso JnBjeHQtPmVzdGltYXRvciwgbm9kZS0+cHN0YXRlX2xlbik7CiAJc2htX3RvY19lc3RpbWF0ZV9r ZXlzKCZwY3h0LT5lc3RpbWF0b3IsIDEpOwpAQCAtNTI0LDcgKzMxNyw3IEBAIEV4ZWNBcHBlbmRJ bml0aWFsaXplRFNNKEFwcGVuZFN0YXRlICpub2RlLAogCXBzdGF0ZSA9IHNobV90b2NfYWxsb2Nh dGUocGN4dC0+dG9jLCBub2RlLT5wc3RhdGVfbGVuKTsKIAltZW1zZXQocHN0YXRlLCAwLCBub2Rl LT5wc3RhdGVfbGVuKTsKIAlMV0xvY2tJbml0aWFsaXplKCZwc3RhdGUtPnBhX2xvY2ssIExXVFJB TkNIRV9QQVJBTExFTF9BUFBFTkQpOwotCXNobV90b2NfaW5zZXJ0KHBjeHQtPnRvYywgbm9kZS0+ cHMucGxhbi0+cGxhbl9ub2RlX2lkLCBwc3RhdGUpOworCXNobV90b2NfaW5zZXJ0KHBjeHQtPnRv Yywgbm9kZS0+YXMucHMucGxhbi0+cGxhbl9ub2RlX2lkLCBwc3RhdGUpOwogCiAJbm9kZS0+YXNf cHN0YXRlID0gcHN0YXRlOwogCW5vZGUtPmNob29zZV9uZXh0X3N1YnBsYW4gPSBjaG9vc2VfbmV4 dF9zdWJwbGFuX2Zvcl9sZWFkZXI7CkBAIC01NDIsNyArMzM1LDcgQEAgRXhlY0FwcGVuZFJlSW5p dGlhbGl6ZURTTShBcHBlbmRTdGF0ZSAqbm9kZSwgUGFyYWxsZWxDb250ZXh0ICpwY3h0KQogCVBh cmFsbGVsQXBwZW5kU3RhdGUgKnBzdGF0ZSA9IG5vZGUtPmFzX3BzdGF0ZTsKIAogCXBzdGF0ZS0+ cGFfbmV4dF9wbGFuID0gMDsKLQltZW1zZXQocHN0YXRlLT5wYV9maW5pc2hlZCwgMCwgc2l6ZW9m KGJvb2wpICogbm9kZS0+YXNfbnBsYW5zKTsKKwltZW1zZXQocHN0YXRlLT5wYV9maW5pc2hlZCwg MCwgc2l6ZW9mKGJvb2wpICogbm9kZS0+YXMubnBsYW5zKTsKIH0KIAogLyogLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAt NTU1LDcgKzM0OCw3IEBAIEV4ZWNBcHBlbmRSZUluaXRpYWxpemVEU00oQXBwZW5kU3RhdGUgKm5v ZGUsIFBhcmFsbGVsQ29udGV4dCAqcGN4dCkKIHZvaWQKIEV4ZWNBcHBlbmRJbml0aWFsaXplV29y a2VyKEFwcGVuZFN0YXRlICpub2RlLCBQYXJhbGxlbFdvcmtlckNvbnRleHQgKnB3Y3h0KQogewot CW5vZGUtPmFzX3BzdGF0ZSA9IHNobV90b2NfbG9va3VwKHB3Y3h0LT50b2MsIG5vZGUtPnBzLnBs YW4tPnBsYW5fbm9kZV9pZCwgZmFsc2UpOworCW5vZGUtPmFzX3BzdGF0ZSA9IHNobV90b2NfbG9v a3VwKHB3Y3h0LT50b2MsIG5vZGUtPmFzLnBzLnBsYW4tPnBsYW5fbm9kZV9pZCwgZmFsc2UpOwog CW5vZGUtPmNob29zZV9uZXh0X3N1YnBsYW4gPSBjaG9vc2VfbmV4dF9zdWJwbGFuX2Zvcl93b3Jr ZXI7CiB9CiAKQEAgLTU3Myw3ICszNjYsNyBAQCBjaG9vc2VfbmV4dF9zdWJwbGFuX2xvY2FsbHko QXBwZW5kU3RhdGUgKm5vZGUpCiAJaW50CQkJbmV4dHBsYW47CiAKIAkvKiBXZSBzaG91bGQgbmV2 ZXIgYmUgY2FsbGVkIHdoZW4gdGhlcmUgYXJlIG5vIHN1YnBsYW5zICovCi0JQXNzZXJ0KG5vZGUt PmFzX25wbGFucyA+IDApOworCUFzc2VydChub2RlLT5hcy5ucGxhbnMgPiAwKTsKIAogCS8qIE5v dGhpbmcgdG8gZG8gaWYgc3luY2RvbmUgKi8KIAlpZiAobm9kZS0+YXNfc3luY2RvbmUpCkBAIC01 ODgsMzMgKzM4MSwzMyBAQCBjaG9vc2VfbmV4dF9zdWJwbGFuX2xvY2FsbHkoQXBwZW5kU3RhdGUg Km5vZGUpCiAJICovCiAJaWYgKHdoaWNocGxhbiA9PSBJTlZBTElEX1NVQlBMQU5fSU5ERVgpCiAJ ewotCQlpZiAobm9kZS0+YXNfbmFzeW5jcGxhbnMgPiAwKQorCQlpZiAobm9kZS0+YXMubmFzeW5j cGxhbnMgPiAwKQogCQl7CiAJCQkvKiBXZSdkIGhhdmUgZmlsbGVkIGFzX3ZhbGlkX3N1YnBsYW5z IGFscmVhZHkgKi8KLQkJCUFzc2VydChub2RlLT5hc192YWxpZF9zdWJwbGFuc19pZGVudGlmaWVk KTsKKwkJCUFzc2VydChub2RlLT5hcy52YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkKTsKIAkJfQot CQllbHNlIGlmICghbm9kZS0+YXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCkKKwkJZWxzZSBp ZiAoIW5vZGUtPmFzLnZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQpCiAJCXsKLQkJCW5vZGUtPmFz X3ZhbGlkX3N1YnBsYW5zID0KLQkJCQlFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMobm9kZS0+YXNf cHJ1bmVfc3RhdGUsIGZhbHNlLCBOVUxMKTsKLQkJCW5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5zX2lk ZW50aWZpZWQgPSB0cnVlOworCQkJbm9kZS0+YXMudmFsaWRfc3VicGxhbnMgPQorCQkJCUV4ZWNG aW5kTWF0Y2hpbmdTdWJQbGFucyhub2RlLT5hcy5wcnVuZV9zdGF0ZSwgZmFsc2UsIE5VTEwpOwor CQkJbm9kZS0+YXMudmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCA9IHRydWU7CiAJCX0KIAogCQl3 aGljaHBsYW4gPSAtMTsKIAl9CiAKIAkvKiBFbnN1cmUgd2hpY2hwbGFuIGlzIHdpdGhpbiB0aGUg ZXhwZWN0ZWQgcmFuZ2UgKi8KLQlBc3NlcnQod2hpY2hwbGFuID49IC0xICYmIHdoaWNocGxhbiA8 PSBub2RlLT5hc19ucGxhbnMpOworCUFzc2VydCh3aGljaHBsYW4gPj0gLTEgJiYgd2hpY2hwbGFu IDw9IG5vZGUtPmFzLm5wbGFucyk7CiAKLQlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChub2Rl LT5wcy5zdGF0ZS0+ZXNfZGlyZWN0aW9uKSkKLQkJbmV4dHBsYW4gPSBibXNfbmV4dF9tZW1iZXIo bm9kZS0+YXNfdmFsaWRfc3VicGxhbnMsIHdoaWNocGxhbik7CisJaWYgKFNjYW5EaXJlY3Rpb25J c0ZvcndhcmQobm9kZS0+YXMucHMuc3RhdGUtPmVzX2RpcmVjdGlvbikpCisJCW5leHRwbGFuID0g Ym1zX25leHRfbWVtYmVyKG5vZGUtPmFzLnZhbGlkX3N1YnBsYW5zLCB3aGljaHBsYW4pOwogCWVs c2UKLQkJbmV4dHBsYW4gPSBibXNfcHJldl9tZW1iZXIobm9kZS0+YXNfdmFsaWRfc3VicGxhbnMs IHdoaWNocGxhbik7CisJCW5leHRwbGFuID0gYm1zX3ByZXZfbWVtYmVyKG5vZGUtPmFzLnZhbGlk X3N1YnBsYW5zLCB3aGljaHBsYW4pOwogCiAJaWYgKG5leHRwbGFuIDwgMCkKIAl7CiAJCS8qIFNl dCBhc19zeW5jZG9uZSBpZiBpbiBhc3luYyBtb2RlICovCi0JCWlmIChub2RlLT5hc19uYXN5bmNw bGFucyA+IDApCisJCWlmIChub2RlLT5hcy5uYXN5bmNwbGFucyA+IDApCiAJCQlub2RlLT5hc19z eW5jZG9uZSA9IHRydWU7CiAJCXJldHVybiBmYWxzZTsKIAl9CkBAIC02MzgsMTAgKzQzMSwxMCBA QCBjaG9vc2VfbmV4dF9zdWJwbGFuX2Zvcl9sZWFkZXIoQXBwZW5kU3RhdGUgKm5vZGUpCiAJUGFy YWxsZWxBcHBlbmRTdGF0ZSAqcHN0YXRlID0gbm9kZS0+YXNfcHN0YXRlOwogCiAJLyogQmFja3dh cmQgc2NhbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHBhcmFsbGVsLWF3YXJlIHBsYW5zICovCi0JQXNz ZXJ0KFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQobm9kZS0+cHMuc3RhdGUtPmVzX2RpcmVjdGlvbikp OworCUFzc2VydChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKG5vZGUtPmFzLnBzLnN0YXRlLT5lc19k aXJlY3Rpb24pKTsKIAogCS8qIFdlIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgd2hlbiB0aGVyZSBh cmUgbm8gc3VicGxhbnMgKi8KLQlBc3NlcnQobm9kZS0+YXNfbnBsYW5zID4gMCk7CisJQXNzZXJ0 KG5vZGUtPmFzLm5wbGFucyA+IDApOwogCiAJTFdMb2NrQWNxdWlyZSgmcHN0YXRlLT5wYV9sb2Nr LCBMV19FWENMVVNJVkUpOwogCkBAIC02NTMsMTggKzQ0NiwxOCBAQCBjaG9vc2VfbmV4dF9zdWJw bGFuX2Zvcl9sZWFkZXIoQXBwZW5kU3RhdGUgKm5vZGUpCiAJZWxzZQogCXsKIAkJLyogU3RhcnQg d2l0aCBsYXN0IHN1YnBsYW4uICovCi0JCW5vZGUtPmFzX3doaWNocGxhbiA9IG5vZGUtPmFzX25w bGFucyAtIDE7CisJCW5vZGUtPmFzX3doaWNocGxhbiA9IG5vZGUtPmFzLm5wbGFucyAtIDE7CiAK IAkJLyoKIAkJICogSWYgd2UndmUgeWV0IHRvIGRldGVybWluZSB0aGUgdmFsaWQgc3VicGxhbnMg dGhlbiBkbyBzbyBub3cuICBJZgogCQkgKiBydW4tdGltZSBwcnVuaW5nIGlzIGRpc2FibGVkIHRo ZW4gdGhlIHZhbGlkIHN1YnBsYW5zIHdpbGwgYWx3YXlzIGJlCiAJCSAqIHNldCB0byBhbGwgc3Vi cGxhbnMuCiAJCSAqLwotCQlpZiAoIW5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQp CisJCWlmICghbm9kZS0+YXMudmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCkKIAkJewotCQkJbm9k ZS0+YXNfdmFsaWRfc3VicGxhbnMgPQotCQkJCUV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhub2Rl LT5hc19wcnVuZV9zdGF0ZSwgZmFsc2UsIE5VTEwpOwotCQkJbm9kZS0+YXNfdmFsaWRfc3VicGxh bnNfaWRlbnRpZmllZCA9IHRydWU7CisJCQlub2RlLT5hcy52YWxpZF9zdWJwbGFucyA9CisJCQkJ RXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKG5vZGUtPmFzLnBydW5lX3N0YXRlLCBmYWxzZSwgTlVM TCk7CisJCQlub2RlLT5hcy52YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkID0gdHJ1ZTsKIAogCQkJ LyoKIAkJCSAqIE1hcmsgZWFjaCBpbnZhbGlkIHBsYW4gYXMgZmluaXNoZWQgdG8gYWxsb3cgdGhl IGxvb3AgYmVsb3cgdG8KQEAgLTcyMCwxMCArNTEzLDEwIEBAIGNob29zZV9uZXh0X3N1YnBsYW5f Zm9yX3dvcmtlcihBcHBlbmRTdGF0ZSAqbm9kZSkKIAlQYXJhbGxlbEFwcGVuZFN0YXRlICpwc3Rh dGUgPSBub2RlLT5hc19wc3RhdGU7CiAKIAkvKiBCYWNrd2FyZCBzY2FuIGlzIG5vdCBzdXBwb3J0 ZWQgYnkgcGFyYWxsZWwtYXdhcmUgcGxhbnMgKi8KLQlBc3NlcnQoU2NhbkRpcmVjdGlvbklzRm9y d2FyZChub2RlLT5wcy5zdGF0ZS0+ZXNfZGlyZWN0aW9uKSk7CisJQXNzZXJ0KFNjYW5EaXJlY3Rp b25Jc0ZvcndhcmQobm9kZS0+YXMucHMuc3RhdGUtPmVzX2RpcmVjdGlvbikpOwogCiAJLyogV2Ug c2hvdWxkIG5ldmVyIGJlIGNhbGxlZCB3aGVuIHRoZXJlIGFyZSBubyBzdWJwbGFucyAqLwotCUFz c2VydChub2RlLT5hc19ucGxhbnMgPiAwKTsKKwlBc3NlcnQobm9kZS0+YXMubnBsYW5zID4gMCk7 CiAKIAlMV0xvY2tBY3F1aXJlKCZwc3RhdGUtPnBhX2xvY2ssIExXX0VYQ0xVU0lWRSk7CiAKQEAg LTczNiwxMSArNTI5LDExIEBAIGNob29zZV9uZXh0X3N1YnBsYW5fZm9yX3dvcmtlcihBcHBlbmRT dGF0ZSAqbm9kZSkKIAkgKiBydW4tdGltZSBwcnVuaW5nIGlzIGRpc2FibGVkIHRoZW4gdGhlIHZh bGlkIHN1YnBsYW5zIHdpbGwgYWx3YXlzIGJlIHNldAogCSAqIHRvIGFsbCBzdWJwbGFucy4KIAkg Ki8KLQllbHNlIGlmICghbm9kZS0+YXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCkKKwllbHNl IGlmICghbm9kZS0+YXMudmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCkKIAl7Ci0JCW5vZGUtPmFz X3ZhbGlkX3N1YnBsYW5zID0KLQkJCUV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhub2RlLT5hc19w cnVuZV9zdGF0ZSwgZmFsc2UsIE5VTEwpOwotCQlub2RlLT5hc192YWxpZF9zdWJwbGFuc19pZGVu dGlmaWVkID0gdHJ1ZTsKKwkJbm9kZS0+YXMudmFsaWRfc3VicGxhbnMgPQorCQkJRXhlY0ZpbmRN YXRjaGluZ1N1YlBsYW5zKG5vZGUtPmFzLnBydW5lX3N0YXRlLCBmYWxzZSwgTlVMTCk7CisJCW5v ZGUtPmFzLnZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQgPSB0cnVlOwogCiAJCW1hcmtfaW52YWxp ZF9zdWJwbGFuc19hc19maW5pc2hlZChub2RlKTsKIAl9CkBAIC03NjAsNyArNTUzLDcgQEAgY2hv b3NlX25leHRfc3VicGxhbl9mb3Jfd29ya2VyKEFwcGVuZFN0YXRlICpub2RlKQogCXsKIAkJaW50 CQkJbmV4dHBsYW47CiAKLQkJbmV4dHBsYW4gPSBibXNfbmV4dF9tZW1iZXIobm9kZS0+YXNfdmFs aWRfc3VicGxhbnMsCisJCW5leHRwbGFuID0gYm1zX25leHRfbWVtYmVyKG5vZGUtPmFzLnZhbGlk X3N1YnBsYW5zLAogCQkJCQkJCQkgICBwc3RhdGUtPnBhX25leHRfcGxhbik7CiAJCWlmIChuZXh0 cGxhbiA+PSAwKQogCQl7CkBAIC03NzMsNyArNTY2LDcgQEAgY2hvb3NlX25leHRfc3VicGxhbl9m b3Jfd29ya2VyKEFwcGVuZFN0YXRlICpub2RlKQogCQkJICogVHJ5IGxvb3BpbmcgYmFjayB0byB0 aGUgZmlyc3QgdmFsaWQgcGFydGlhbCBwbGFuLCBpZiB0aGVyZSBpcwogCQkJICogb25lLiAgSWYg dGhlcmUgaXNuJ3QsIGFycmFuZ2UgdG8gYmFpbCBvdXQgYmVsb3cuCiAJCQkgKi8KLQkJCW5leHRw bGFuID0gYm1zX25leHRfbWVtYmVyKG5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5zLAorCQkJbmV4dHBs YW4gPSBibXNfbmV4dF9tZW1iZXIobm9kZS0+YXMudmFsaWRfc3VicGxhbnMsCiAJCQkJCQkJCQkg ICBub2RlLT5hc19maXJzdF9wYXJ0aWFsX3BsYW4gLSAxKTsKIAkJCXBzdGF0ZS0+cGFfbmV4dF9w bGFuID0KIAkJCQluZXh0cGxhbiA8IDAgPyBub2RlLT5hc193aGljaHBsYW4gOiBuZXh0cGxhbjsK QEAgLTc5OCw3ICs1OTEsNyBAQCBjaG9vc2VfbmV4dF9zdWJwbGFuX2Zvcl93b3JrZXIoQXBwZW5k U3RhdGUgKm5vZGUpCiAKIAkvKiBQaWNrIHRoZSBwbGFuIHdlIGZvdW5kLCBhbmQgYWR2YW5jZSBw YV9uZXh0X3BsYW4gb25lIG1vcmUgdGltZS4gKi8KIAlub2RlLT5hc193aGljaHBsYW4gPSBwc3Rh dGUtPnBhX25leHRfcGxhbjsKLQlwc3RhdGUtPnBhX25leHRfcGxhbiA9IGJtc19uZXh0X21lbWJl cihub2RlLT5hc192YWxpZF9zdWJwbGFucywKKwlwc3RhdGUtPnBhX25leHRfcGxhbiA9IGJtc19u ZXh0X21lbWJlcihub2RlLT5hcy52YWxpZF9zdWJwbGFucywKIAkJCQkJCQkJCQkgICBwc3RhdGUt PnBhX25leHRfcGxhbik7CiAKIAkvKgpAQCAtODA3LDcgKzYwMCw3IEBAIGNob29zZV9uZXh0X3N1 YnBsYW5fZm9yX3dvcmtlcihBcHBlbmRTdGF0ZSAqbm9kZSkKIAkgKi8KIAlpZiAocHN0YXRlLT5w YV9uZXh0X3BsYW4gPCAwKQogCXsKLQkJaW50CQkJbmV4dHBsYW4gPSBibXNfbmV4dF9tZW1iZXIo bm9kZS0+YXNfdmFsaWRfc3VicGxhbnMsCisJCWludAkJCW5leHRwbGFuID0gYm1zX25leHRfbWVt YmVyKG5vZGUtPmFzLnZhbGlkX3N1YnBsYW5zLAogCQkJCQkJCQkJCQkgICBub2RlLT5hc19maXJz dF9wYXJ0aWFsX3BsYW4gLSAxKTsKIAogCQlpZiAobmV4dHBsYW4gPj0gMCkKQEAgLTg0OSwxNiAr NjQyLDE2IEBAIG1hcmtfaW52YWxpZF9zdWJwbGFuc19hc19maW5pc2hlZChBcHBlbmRTdGF0ZSAq bm9kZSkKIAlBc3NlcnQobm9kZS0+YXNfcHN0YXRlKTsKIAogCS8qIFNob3VsZG4ndCBoYXZlIGJl ZW4gY2FsbGVkIHdoZW4gcnVuLXRpbWUgcHJ1bmluZyBpcyBub3QgZW5hYmxlZCAqLwotCUFzc2Vy dChub2RlLT5hc19wcnVuZV9zdGF0ZSk7CisJQXNzZXJ0KG5vZGUtPmFzLnBydW5lX3N0YXRlKTsK IAogCS8qIE5vdGhpbmcgdG8gZG8gaWYgYWxsIHBsYW5zIGFyZSB2YWxpZCAqLwotCWlmIChibXNf bnVtX21lbWJlcnMobm9kZS0+YXNfdmFsaWRfc3VicGxhbnMpID09IG5vZGUtPmFzX25wbGFucykK KwlpZiAoYm1zX251bV9tZW1iZXJzKG5vZGUtPmFzLnZhbGlkX3N1YnBsYW5zKSA9PSBub2RlLT5h cy5ucGxhbnMpCiAJCXJldHVybjsKIAogCS8qIE1hcmsgYWxsIG5vbi12YWxpZCBwbGFucyBhcyBm aW5pc2hlZCAqLwotCWZvciAoaSA9IDA7IGkgPCBub2RlLT5hc19ucGxhbnM7IGkrKykKKwlmb3Ig KGkgPSAwOyBpIDwgbm9kZS0+YXMubnBsYW5zOyBpKyspCiAJewotCQlpZiAoIWJtc19pc19tZW1i ZXIoaSwgbm9kZS0+YXNfdmFsaWRfc3VicGxhbnMpKQorCQlpZiAoIWJtc19pc19tZW1iZXIoaSwg bm9kZS0+YXMudmFsaWRfc3VicGxhbnMpKQogCQkJbm9kZS0+YXNfcHN0YXRlLT5wYV9maW5pc2hl ZFtpXSA9IHRydWU7CiAJfQogfQpAQCAtODc3LDQ3ICs2NzAsMjUgQEAgbWFya19pbnZhbGlkX3N1 YnBsYW5zX2FzX2ZpbmlzaGVkKEFwcGVuZFN0YXRlICpub2RlKQogc3RhdGljIHZvaWQKIEV4ZWNB cHBlbmRBc3luY0JlZ2luKEFwcGVuZFN0YXRlICpub2RlKQogewotCWludAkJCWk7Ci0KLQkvKiBC YWNrd2FyZCBzY2FuIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYXN5bmMtYXdhcmUgQXBwZW5kcy4gKi8K LQlBc3NlcnQoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChub2RlLT5wcy5zdGF0ZS0+ZXNfZGlyZWN0 aW9uKSk7Ci0KLQkvKiBXZSBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIHdoZW4gdGhlcmUgYXJlIG5v IHN1YnBsYW5zICovCi0JQXNzZXJ0KG5vZGUtPmFzX25wbGFucyA+IDApOwotCi0JLyogV2Ugc2hv dWxkIG5ldmVyIGJlIGNhbGxlZCB3aGVuIHRoZXJlIGFyZSBubyBhc3luYyBzdWJwbGFucy4gKi8K LQlBc3NlcnQobm9kZS0+YXNfbmFzeW5jcGxhbnMgPiAwKTsKLQogCS8qIElmIHdlJ3ZlIHlldCB0 byBkZXRlcm1pbmUgdGhlIHZhbGlkIHN1YnBsYW5zIHRoZW4gZG8gc28gbm93LiAqLwotCWlmICgh bm9kZS0+YXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCkKKwlpZiAoIW5vZGUtPmFzLnZhbGlk X3N1YnBsYW5zX2lkZW50aWZpZWQpCiAJewotCQlub2RlLT5hc192YWxpZF9zdWJwbGFucyA9Ci0J CQlFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMobm9kZS0+YXNfcHJ1bmVfc3RhdGUsIGZhbHNlLCBO VUxMKTsKLQkJbm9kZS0+YXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCA9IHRydWU7CisJCW5v ZGUtPmFzLnZhbGlkX3N1YnBsYW5zID0KKwkJCUV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhub2Rl LT5hcy5wcnVuZV9zdGF0ZSwgZmFsc2UsIE5VTEwpOworCQlub2RlLT5hcy52YWxpZF9zdWJwbGFu c19pZGVudGlmaWVkID0gdHJ1ZTsKIAogCQljbGFzc2lmeV9tYXRjaGluZ19zdWJwbGFucyhub2Rl KTsKIAl9CiAKIAkvKiBJbml0aWFsaXplIHN0YXRlIHZhcmlhYmxlcy4gKi8KLQlub2RlLT5hc19z eW5jZG9uZSA9IGJtc19pc19lbXB0eShub2RlLT5hc192YWxpZF9zdWJwbGFucyk7Ci0Jbm9kZS0+ YXNfbmFzeW5jcmVtYWluID0gYm1zX251bV9tZW1iZXJzKG5vZGUtPmFzX3ZhbGlkX2FzeW5jcGxh bnMpOworCW5vZGUtPmFzX3N5bmNkb25lID0gYm1zX2lzX2VtcHR5KG5vZGUtPmFzLnZhbGlkX3N1 YnBsYW5zKTsKKwlub2RlLT5hc19uYXN5bmNyZW1haW4gPSBibXNfbnVtX21lbWJlcnMobm9kZS0+ YXMudmFsaWRfYXN5bmNwbGFucyk7CiAKIAkvKiBOb3RoaW5nIHRvIGRvIGlmIHRoZXJlIGFyZSBu byB2YWxpZCBhc3luYyBzdWJwbGFucy4gKi8KIAlpZiAobm9kZS0+YXNfbmFzeW5jcmVtYWluID09 IDApCiAJCXJldHVybjsKIAotCS8qIE1ha2UgYSByZXF1ZXN0IGZvciBlYWNoIG9mIHRoZSB2YWxp ZCBhc3luYyBzdWJwbGFucy4gKi8KLQlpID0gLTE7Ci0Jd2hpbGUgKChpID0gYm1zX25leHRfbWVt YmVyKG5vZGUtPmFzX3ZhbGlkX2FzeW5jcGxhbnMsIGkpKSA+PSAwKQotCXsKLQkJQXN5bmNSZXF1 ZXN0ICphcmVxID0gbm9kZS0+YXNfYXN5bmNyZXF1ZXN0c1tpXTsKLQotCQlBc3NlcnQoYXJlcS0+ cmVxdWVzdF9pbmRleCA9PSBpKTsKLQkJQXNzZXJ0KCFhcmVxLT5jYWxsYmFja19wZW5kaW5nKTsK LQotCQkvKiBEbyB0aGUgYWN0dWFsIHdvcmsuICovCi0JCUV4ZWNBc3luY1JlcXVlc3QoYXJlcSk7 Ci0JfQorCUV4ZWNBcHBlbmRlckFzeW5jQmVnaW4oJm5vZGUtPmFzKTsKIH0KIAogLyogLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQpAQCAtOTYyLDcgKzczMyw3IEBAIEV4ZWNBcHBlbmRBc3luY0dldE5leHQoQXBwZW5kU3RhdGUg Km5vZGUsIFR1cGxlVGFibGVTbG90ICoqcmVzdWx0KQogCWlmIChub2RlLT5hc19zeW5jZG9uZSkK IAl7CiAJCUFzc2VydChub2RlLT5hc19uYXN5bmNyZW1haW4gPT0gMCk7Ci0JCSpyZXN1bHQgPSBF eGVjQ2xlYXJUdXBsZShub2RlLT5wcy5wc19SZXN1bHRUdXBsZVNsb3QpOworCQkqcmVzdWx0ID0g RXhlY0NsZWFyVHVwbGUobm9kZS0+YXMucHMucHNfUmVzdWx0VHVwbGVTbG90KTsKIAkJcmV0dXJu IHRydWU7CiAJfQogCkBAIC05ODIsNyArNzUzLDcgQEAgRXhlY0FwcGVuZEFzeW5jUmVxdWVzdChB cHBlbmRTdGF0ZSAqbm9kZSwgVHVwbGVUYWJsZVNsb3QgKipyZXN1bHQpCiAJaW50CQkJaTsKIAog CS8qIE5vdGhpbmcgdG8gZG8gaWYgdGhlcmUgYXJlIG5vIGFzeW5jIHN1YnBsYW5zIG5lZWRpbmcg YSBuZXcgcmVxdWVzdC4gKi8KLQlpZiAoYm1zX2lzX2VtcHR5KG5vZGUtPmFzX25lZWRyZXF1ZXN0 KSkKKwlpZiAoYm1zX2lzX2VtcHR5KG5vZGUtPmFzLm5lZWRyZXF1ZXN0KSkKIAl7CiAJCUFzc2Vy dChub2RlLT5hc19uYXN5bmNyZXN1bHRzID09IDApOwogCQlyZXR1cm4gZmFsc2U7CkBAIC05OTUs MTcgKzc2NiwxNyBAQCBFeGVjQXBwZW5kQXN5bmNSZXF1ZXN0KEFwcGVuZFN0YXRlICpub2RlLCBU dXBsZVRhYmxlU2xvdCAqKnJlc3VsdCkKIAlpZiAobm9kZS0+YXNfbmFzeW5jcmVzdWx0cyA+IDAp CiAJewogCQktLW5vZGUtPmFzX25hc3luY3Jlc3VsdHM7Ci0JCSpyZXN1bHQgPSBub2RlLT5hc19h c3luY3Jlc3VsdHNbbm9kZS0+YXNfbmFzeW5jcmVzdWx0c107CisJCSpyZXN1bHQgPSBub2RlLT5h cy5hc3luY3Jlc3VsdHNbbm9kZS0+YXNfbmFzeW5jcmVzdWx0c107CiAJCXJldHVybiB0cnVlOwog CX0KIAogCS8qIE1ha2UgYSBuZXcgcmVxdWVzdCBmb3IgZWFjaCBvZiB0aGUgYXN5bmMgc3VicGxh bnMgdGhhdCBuZWVkIGl0LiAqLwotCW5lZWRyZXF1ZXN0ID0gbm9kZS0+YXNfbmVlZHJlcXVlc3Q7 Ci0Jbm9kZS0+YXNfbmVlZHJlcXVlc3QgPSBOVUxMOworCW5lZWRyZXF1ZXN0ID0gbm9kZS0+YXMu bmVlZHJlcXVlc3Q7CisJbm9kZS0+YXMubmVlZHJlcXVlc3QgPSBOVUxMOwogCWkgPSAtMTsKIAl3 aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIobmVlZHJlcXVlc3QsIGkpKSA+PSAwKQogCXsKLQkJ QXN5bmNSZXF1ZXN0ICphcmVxID0gbm9kZS0+YXNfYXN5bmNyZXF1ZXN0c1tpXTsKKwkJQXN5bmNS ZXF1ZXN0ICphcmVxID0gbm9kZS0+YXMuYXN5bmNyZXF1ZXN0c1tpXTsKIAogCQkvKiBEbyB0aGUg YWN0dWFsIHdvcmsuICovCiAJCUV4ZWNBc3luY1JlcXVlc3QoYXJlcSk7CkBAIC0xMDE2LDcgKzc4 Nyw3IEBAIEV4ZWNBcHBlbmRBc3luY1JlcXVlc3QoQXBwZW5kU3RhdGUgKm5vZGUsIFR1cGxlVGFi bGVTbG90ICoqcmVzdWx0KQogCWlmIChub2RlLT5hc19uYXN5bmNyZXN1bHRzID4gMCkKIAl7CiAJ CS0tbm9kZS0+YXNfbmFzeW5jcmVzdWx0czsKLQkJKnJlc3VsdCA9IG5vZGUtPmFzX2FzeW5jcmVz dWx0c1tub2RlLT5hc19uYXN5bmNyZXN1bHRzXTsKKwkJKnJlc3VsdCA9IG5vZGUtPmFzLmFzeW5j cmVzdWx0c1tub2RlLT5hc19uYXN5bmNyZXN1bHRzXTsKIAkJcmV0dXJuIHRydWU7CiAJfQogCkBA IC0xMDMyLDEwNSArODAzLDEyIEBAIEV4ZWNBcHBlbmRBc3luY1JlcXVlc3QoQXBwZW5kU3RhdGUg Km5vZGUsIFR1cGxlVGFibGVTbG90ICoqcmVzdWx0KQogc3RhdGljIHZvaWQKIEV4ZWNBcHBlbmRB c3luY0V2ZW50V2FpdChBcHBlbmRTdGF0ZSAqbm9kZSkKIHsKLQlpbnQJCQluZXZlbnRzID0gbm9k ZS0+YXNfbmFzeW5jcGxhbnMgKyAyOwogCWxvbmcJCXRpbWVvdXQgPSBub2RlLT5hc19zeW5jZG9u ZSA/IC0xIDogMDsKLQlXYWl0RXZlbnQJb2NjdXJyZWRfZXZlbnRbRVZFTlRfQlVGRkVSX1NJWkVd OwotCWludAkJCW5vY2N1cnJlZDsKLQlpbnQJCQlpOwogCiAJLyogV2Ugc2hvdWxkIG5ldmVyIGJl IGNhbGxlZCB3aGVuIHRoZXJlIGFyZSBubyB2YWxpZCBhc3luYyBzdWJwbGFucy4gKi8KIAlBc3Nl cnQobm9kZS0+YXNfbmFzeW5jcmVtYWluID4gMCk7CiAKLQlBc3NlcnQobm9kZS0+YXNfZXZlbnRz ZXQgPT0gTlVMTCk7Ci0Jbm9kZS0+YXNfZXZlbnRzZXQgPSBDcmVhdGVXYWl0RXZlbnRTZXQoQ3Vy cmVudFJlc291cmNlT3duZXIsIG5ldmVudHMpOwotCUFkZFdhaXRFdmVudFRvU2V0KG5vZGUtPmFz X2V2ZW50c2V0LCBXTF9FWElUX09OX1BNX0RFQVRILCBQR0lOVkFMSURfU09DS0VULAotCQkJCQkg IE5VTEwsIE5VTEwpOwotCi0JLyogR2l2ZSBlYWNoIHdhaXRpbmcgc3VicGxhbiBhIGNoYW5jZSB0 byBhZGQgYW4gZXZlbnQuICovCi0JaSA9IC0xOwotCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJl cihub2RlLT5hc19hc3luY3BsYW5zLCBpKSkgPj0gMCkKLQl7Ci0JCUFzeW5jUmVxdWVzdCAqYXJl cSA9IG5vZGUtPmFzX2FzeW5jcmVxdWVzdHNbaV07Ci0KLQkJaWYgKGFyZXEtPmNhbGxiYWNrX3Bl bmRpbmcpCi0JCQlFeGVjQXN5bmNDb25maWd1cmVXYWl0KGFyZXEpOwotCX0KLQotCS8qCi0JICog Tm8gbmVlZCBmb3IgZnVydGhlciBwcm9jZXNzaW5nIGlmIG5vbmUgb2YgdGhlIHN1YnBsYW5zIGNv bmZpZ3VyZWQgYW55Ci0JICogZXZlbnRzLgotCSAqLwotCWlmIChHZXROdW1SZWdpc3RlcmVkV2Fp dEV2ZW50cyhub2RlLT5hc19ldmVudHNldCkgPT0gMSkKLQl7Ci0JCUZyZWVXYWl0RXZlbnRTZXQo bm9kZS0+YXNfZXZlbnRzZXQpOwotCQlub2RlLT5hc19ldmVudHNldCA9IE5VTEw7Ci0JCXJldHVy bjsKLQl9Ci0KLQkvKgotCSAqIEFkZCB0aGUgcHJvY2VzcyBsYXRjaCB0byB0aGUgc2V0LCBzbyB0 aGF0IHdlIHdha2UgdXAgdG8gcHJvY2VzcyB0aGUKLQkgKiBzdGFuZGFyZCBpbnRlcnJ1cHRzIHdp dGggQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKS4KLQkgKgotCSAqIE5PVEU6IEZvciBoaXN0b3JpY2Fs IHJlYXNvbnMsIGl0J3MgaW1wb3J0YW50IHRoYXQgdGhpcyBpcyBhZGRlZCB0byB0aGUKLQkgKiBX YWl0RXZlbnRTZXQgYWZ0ZXIgdGhlIEV4ZWNBc3luY0NvbmZpZ3VyZVdhaXQoKSBjYWxscy4gIE5h bWVseSwKLQkgKiBwb3N0Z3Jlc19mZHcgY2FsbHMgIkdldE51bVJlZ2lzdGVyZWRXYWl0RXZlbnRz KHNldCkgPT0gMSIgdG8gY2hlY2sgaWYKLQkgKiBhbnkgb3RoZXIgZXZlbnRzIGFyZSBpbiB0aGUg c2V0LiAgVGhhdCdzIGEgcG9vciBkZXNpZ24sIGl0J3MKLQkgKiBxdWVzdGlvbmFibGUgZm9yIHBv c3RncmVzX2ZkdyB0byBiZSBkb2luZyB0aGF0IGluIHRoZSBmaXJzdCBwbGFjZSwgYnV0Ci0JICog d2UgY2Fubm90IGNoYW5nZSBpdCBub3cuICBUaGUgcGF0dGVybiBoYXMgcG9zc2libHkgYmVlbiBj b3BpZWQgdG8gb3RoZXIKLQkgKiBleHRlbnNpb25zIHRvby4KLQkgKi8KLQlBZGRXYWl0RXZlbnRU b1NldChub2RlLT5hc19ldmVudHNldCwgV0xfTEFUQ0hfU0VULCBQR0lOVkFMSURfU09DS0VULAot CQkJCQkgIE15TGF0Y2gsIE5VTEwpOwotCi0JLyogUmV0dXJuIGF0IG1vc3QgRVZFTlRfQlVGRkVS X1NJWkUgZXZlbnRzIGluIG9uZSBjYWxsLiAqLwotCWlmIChuZXZlbnRzID4gRVZFTlRfQlVGRkVS X1NJWkUpCi0JCW5ldmVudHMgPSBFVkVOVF9CVUZGRVJfU0laRTsKLQotCS8qCi0JICogSWYgdGhl IHRpbWVvdXQgaXMgLTEsIHdhaXQgdW50aWwgYXQgbGVhc3Qgb25lIGV2ZW50IG9jY3Vycy4gIElm IHRoZQotCSAqIHRpbWVvdXQgaXMgMCwgcG9sbCBmb3IgZXZlbnRzLCBidXQgZG8gbm90IHdhaXQg YXQgYWxsLgotCSAqLwotCW5vY2N1cnJlZCA9IFdhaXRFdmVudFNldFdhaXQobm9kZS0+YXNfZXZl bnRzZXQsIHRpbWVvdXQsIG9jY3VycmVkX2V2ZW50LAotCQkJCQkJCQkgbmV2ZW50cywgV0FJVF9F VkVOVF9BUFBFTkRfUkVBRFkpOwotCUZyZWVXYWl0RXZlbnRTZXQobm9kZS0+YXNfZXZlbnRzZXQp OwotCW5vZGUtPmFzX2V2ZW50c2V0ID0gTlVMTDsKLQlpZiAobm9jY3VycmVkID09IDApCi0JCXJl dHVybjsKLQotCS8qIERlbGl2ZXIgbm90aWZpY2F0aW9ucy4gKi8KLQlmb3IgKGkgPSAwOyBpIDwg bm9jY3VycmVkOyBpKyspCi0JewotCQlXYWl0RXZlbnQgICp3ID0gJm9jY3VycmVkX2V2ZW50W2ld OwotCi0JCS8qCi0JCSAqIEVhY2ggd2FpdGluZyBzdWJwbGFuIHNob3VsZCBoYXZlIHJlZ2lzdGVy ZWQgaXRzIHdhaXQgZXZlbnQgd2l0aAotCQkgKiB1c2VyX2RhdGEgcG9pbnRpbmcgYmFjayB0byBp dHMgQXN5bmNSZXF1ZXN0LgotCQkgKi8KLQkJaWYgKCh3LT5ldmVudHMgJiBXTF9TT0NLRVRfUkVB REFCTEUpICE9IDApCi0JCXsKLQkJCUFzeW5jUmVxdWVzdCAqYXJlcSA9IChBc3luY1JlcXVlc3Qg Kikgdy0+dXNlcl9kYXRhOwotCi0JCQlpZiAoYXJlcS0+Y2FsbGJhY2tfcGVuZGluZykKLQkJCXsK LQkJCQkvKgotCQkJCSAqIE1hcmsgaXQgYXMgbm8gbG9uZ2VyIG5lZWRpbmcgYSBjYWxsYmFjay4g IFdlIG11c3QgZG8gdGhpcwotCQkJCSAqIGJlZm9yZSBkaXNwYXRjaGluZyB0aGUgY2FsbGJhY2sg aW4gY2FzZSB0aGUgY2FsbGJhY2sgcmVzZXRzCi0JCQkJICogdGhlIGZsYWcuCi0JCQkJICovCi0J CQkJYXJlcS0+Y2FsbGJhY2tfcGVuZGluZyA9IGZhbHNlOwotCi0JCQkJLyogRG8gdGhlIGFjdHVh bCB3b3JrLiAqLwotCQkJCUV4ZWNBc3luY05vdGlmeShhcmVxKTsKLQkJCX0KLQkJfQotCi0JCS8q IEhhbmRsZSBzdGFuZGFyZCBpbnRlcnJ1cHRzICovCi0JCWlmICgody0+ZXZlbnRzICYgV0xfTEFU Q0hfU0VUKSAhPSAwKQotCQl7Ci0JCQlSZXNldExhdGNoKE15TGF0Y2gpOwotCQkJQ0hFQ0tfRk9S X0lOVEVSUlVQVFMoKTsKLQkJfQotCX0KKwlFeGVjQXBwZW5kZXJBc3luY0V2ZW50V2FpdCgmbm9k ZS0+YXMsIHRpbWVvdXQsIFdBSVRfRVZFTlRfQVBQRU5EX1JFQURZKTsKIH0KIAogLyogLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQpAQCAtMTE2NiwxNCArODQ0LDE0IEBAIEV4ZWNBc3luY0FwcGVuZFJlc3BvbnNlKEFzeW5jUmVx dWVzdCAqYXJlcSkKIAl9CiAKIAkvKiBTYXZlIHJlc3VsdCBzbyB3ZSBjYW4gcmV0dXJuIGl0LiAq LwotCUFzc2VydChub2RlLT5hc19uYXN5bmNyZXN1bHRzIDwgbm9kZS0+YXNfbmFzeW5jcGxhbnMp OwotCW5vZGUtPmFzX2FzeW5jcmVzdWx0c1tub2RlLT5hc19uYXN5bmNyZXN1bHRzKytdID0gc2xv dDsKKwlBc3NlcnQobm9kZS0+YXNfbmFzeW5jcmVzdWx0cyA8IG5vZGUtPmFzLm5hc3luY3BsYW5z KTsKKwlub2RlLT5hcy5hc3luY3Jlc3VsdHNbbm9kZS0+YXNfbmFzeW5jcmVzdWx0cysrXSA9IHNs b3Q7CiAKIAkvKgogCSAqIE1hcmsgdGhlIHN1YnBsYW4gdGhhdCByZXR1cm5lZCBhIHJlc3VsdCBh cyByZWFkeSBmb3IgYSBuZXcgcmVxdWVzdC4gIFdlCiAJICogZG9uJ3QgbGF1bmNoIGFub3RoZXIg b25lIGhlcmUgaW1tZWRpYXRlbHkgYmVjYXVzZSBpdCBtaWdodCBjb21wbGV0ZS4KIAkgKi8KLQlu b2RlLT5hc19uZWVkcmVxdWVzdCA9IGJtc19hZGRfbWVtYmVyKG5vZGUtPmFzX25lZWRyZXF1ZXN0 LAorCW5vZGUtPmFzLm5lZWRyZXF1ZXN0ID0gYm1zX2FkZF9tZW1iZXIobm9kZS0+YXMubmVlZHJl cXVlc3QsCiAJCQkJCQkJCQkJICBhcmVxLT5yZXF1ZXN0X2luZGV4KTsKIH0KIApAQCAtMTE4OCwx MCArODY2LDEwIEBAIEV4ZWNBc3luY0FwcGVuZFJlc3BvbnNlKEFzeW5jUmVxdWVzdCAqYXJlcSkK IHN0YXRpYyB2b2lkCiBjbGFzc2lmeV9tYXRjaGluZ19zdWJwbGFucyhBcHBlbmRTdGF0ZSAqbm9k ZSkKIHsKLQlBc3NlcnQobm9kZS0+YXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCk7CisJQXNz ZXJ0KG5vZGUtPmFzLnZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQpOwogCiAJLyogTm90aGluZyB0 byBkbyBpZiB0aGVyZSBhcmUgbm8gdmFsaWQgc3VicGxhbnMuICovCi0JaWYgKGJtc19pc19lbXB0 eShub2RlLT5hc192YWxpZF9zdWJwbGFucykpCisJaWYgKGJtc19pc19lbXB0eShub2RlLT5hcy52 YWxpZF9zdWJwbGFucykpCiAJewogCQlub2RlLT5hc19zeW5jZG9uZSA9IHRydWU7CiAJCW5vZGUt PmFzX25hc3luY3JlbWFpbiA9IDA7CkBAIC0xMjAwLDggKzg3OCw4IEBAIGNsYXNzaWZ5X21hdGNo aW5nX3N1YnBsYW5zKEFwcGVuZFN0YXRlICpub2RlKQogCiAJLyogTm8gdmFsaWQgYXN5bmMgc3Vi cGxhbnMgaWRlbnRpZmllZC4gKi8KIAlpZiAoIWNsYXNzaWZ5X21hdGNoaW5nX3N1YnBsYW5zX2Nv bW1vbigKLQkJCQkJCQkJCQkgICAmbm9kZS0+YXNfdmFsaWRfc3VicGxhbnMsCi0JCQkJCQkJCQkJ ICAgbm9kZS0+YXNfYXN5bmNwbGFucywKLQkJCQkJCQkJCQkgICAmbm9kZS0+YXNfdmFsaWRfYXN5 bmNwbGFucykpCisJCQkJCQkJCQkJICAgJm5vZGUtPmFzLnZhbGlkX3N1YnBsYW5zLAorCQkJCQkJ CQkJCSAgIG5vZGUtPmFzLmFzeW5jcGxhbnMsCisJCQkJCQkJCQkJICAgJm5vZGUtPmFzLnZhbGlk X2FzeW5jcGxhbnMpKQogCQlub2RlLT5hc19uYXN5bmNyZW1haW4gPSAwOwogfQpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmMgYi9zcmMvYmFja2VuZC9l eGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuYwppbmRleCAzOTgxMDY5MWJhNC4uNDAyZDlhNDc2ODEg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5jCisrKyBi L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5jCkBAIC0zOCw2ICszOCw3IEBA CiAKICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCisjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY0FwcGVu ZC5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWN1dG9yLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3Iv ZXhlY0FzeW5jLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5oIgpAQCAtNzYs MTQgKzc3LDcgQEAgTWVyZ2VBcHBlbmRTdGF0ZSAqCiBFeGVjSW5pdE1lcmdlQXBwZW5kKE1lcmdl QXBwZW5kICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIHsKIAlNZXJnZUFwcGVu ZFN0YXRlICptZXJnZXN0YXRlID0gbWFrZU5vZGUoTWVyZ2VBcHBlbmRTdGF0ZSk7Ci0JUGxhblN0 YXRlICoqbWVyZ2VwbGFuc3RhdGVzOwotCWNvbnN0IFR1cGxlVGFibGVTbG90T3BzICptZXJnZW9w czsKLQlCaXRtYXBzZXQgICp2YWxpZHN1YnBsYW5zOwotCWludAkJCW5wbGFuczsKLQlpbnQJCQlp LAotCQkJCWo7Ci0JQml0bWFwc2V0ICAqYXN5bmNwbGFuczsKLQlpbnQJCQluYXN5bmNwbGFuczsK KwlpbnQJCQlpOwogCiAJLyogY2hlY2sgZm9yIHVuc3VwcG9ydGVkIGZsYWdzICovCiAJQXNzZXJ0 KCEoZWZsYWdzICYgKEVYRUNfRkxBR19CQUNLV0FSRCB8IEVYRUNfRkxBR19NQVJLKSkpOwpAQCAt OTEsMTU0ICs4NSwyNyBAQCBFeGVjSW5pdE1lcmdlQXBwZW5kKE1lcmdlQXBwZW5kICpub2RlLCBF U3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAkvKgogCSAqIGNyZWF0ZSBuZXcgTWVyZ2VBcHBl bmRTdGF0ZSBmb3Igb3VyIG5vZGUKIAkgKi8KLQltZXJnZXN0YXRlLT5wcy5wbGFuID0gKFBsYW4g Kikgbm9kZTsKLQltZXJnZXN0YXRlLT5wcy5zdGF0ZSA9IGVzdGF0ZTsKLQltZXJnZXN0YXRlLT5w cy5FeGVjUHJvY05vZGUgPSBFeGVjTWVyZ2VBcHBlbmQ7Ci0KLQkvKiBJZiBydW4tdGltZSBwYXJ0 aXRpb24gcHJ1bmluZyBpcyBlbmFibGVkLCB0aGVuIHNldCB0aGF0IHVwIG5vdyAqLwotCWlmIChu b2RlLT5wYXJ0X3BydW5lX2luZGV4ID49IDApCi0JewotCQlQYXJ0aXRpb25QcnVuZVN0YXRlICpw cnVuZXN0YXRlOwotCi0JCS8qCi0JCSAqIFNldCB1cCBwcnVuaW5nIGRhdGEgc3RydWN0dXJlLiAg VGhpcyBhbHNvIGluaXRpYWxpemVzIHRoZSBzZXQgb2YKLQkJICogc3VicGxhbnMgdG8gaW5pdGlh bGl6ZSAodmFsaWRzdWJwbGFucykgYnkgdGFraW5nIGludG8gYWNjb3VudCB0aGUKLQkJICogcmVz dWx0IG9mIHBlcmZvcm1pbmcgaW5pdGlhbCBwcnVuaW5nIGlmIGFueS4KLQkJICovCi0JCXBydW5l c3RhdGUgPSBFeGVjSW5pdFBhcnRpdGlvbkV4ZWNQcnVuaW5nKCZtZXJnZXN0YXRlLT5wcywKLQkJ CQkJCQkJCQkJCSAgbGlzdF9sZW5ndGgobm9kZS0+bWVyZ2VwbGFucyksCi0JCQkJCQkJCQkJCQkg IG5vZGUtPnBhcnRfcHJ1bmVfaW5kZXgsCi0JCQkJCQkJCQkJCQkgIG5vZGUtPmFwcHJlbGlkcywK LQkJCQkJCQkJCQkJCSAgJnZhbGlkc3VicGxhbnMpOwotCQltZXJnZXN0YXRlLT5tc19wcnVuZV9z dGF0ZSA9IHBydW5lc3RhdGU7Ci0JCW5wbGFucyA9IGJtc19udW1fbWVtYmVycyh2YWxpZHN1YnBs YW5zKTsKLQotCQkvKgotCQkgKiBXaGVuIG5vIHJ1bi10aW1lIHBydW5pbmcgaXMgcmVxdWlyZWQg YW5kIHRoZXJlJ3MgYXQgbGVhc3Qgb25lCi0JCSAqIHN1YnBsYW4sIHdlIGNhbiBmaWxsIG1zX3Zh bGlkX3N1YnBsYW5zIGltbWVkaWF0ZWx5LCBwcmV2ZW50aW5nCi0JCSAqIGxhdGVyIGNhbGxzIHRv IEV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucy4KLQkJICovCi0JCWlmICghcHJ1bmVzdGF0ZS0+ZG9f ZXhlY19wcnVuZSAmJiBucGxhbnMgPiAwKQotCQl7Ci0JCQltZXJnZXN0YXRlLT5tc192YWxpZF9z dWJwbGFucyA9IGJtc19hZGRfcmFuZ2UoTlVMTCwgMCwgbnBsYW5zIC0gMSk7Ci0JCQltZXJnZXN0 YXRlLT5tc192YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkID0gdHJ1ZTsKLQkJfQotCX0KLQllbHNl Ci0JewotCQlucGxhbnMgPSBsaXN0X2xlbmd0aChub2RlLT5tZXJnZXBsYW5zKTsKLQotCQkvKgot CQkgKiBXaGVuIHJ1bi10aW1lIHBhcnRpdGlvbiBwcnVuaW5nIGlzIG5vdCBlbmFibGVkIHdlIGNh biBqdXN0IG1hcmsgYWxsCi0JCSAqIHN1YnBsYW5zIGFzIHZhbGlkOyB0aGV5IG11c3QgYWxzbyBh bGwgYmUgaW5pdGlhbGl6ZWQuCi0JCSAqLwotCQlBc3NlcnQobnBsYW5zID4gMCk7Ci0JCW1lcmdl c3RhdGUtPm1zX3ZhbGlkX3N1YnBsYW5zID0gdmFsaWRzdWJwbGFucyA9Ci0JCQlibXNfYWRkX3Jh bmdlKE5VTEwsIDAsIG5wbGFucyAtIDEpOwotCQltZXJnZXN0YXRlLT5tc192YWxpZF9zdWJwbGFu c19pZGVudGlmaWVkID0gdHJ1ZTsKLQkJbWVyZ2VzdGF0ZS0+bXNfcHJ1bmVfc3RhdGUgPSBOVUxM OwotCX0KLQotCW1lcmdlcGxhbnN0YXRlcyA9IHBhbGxvY19hcnJheShQbGFuU3RhdGUgKiwgbnBs YW5zKTsKLQltZXJnZXN0YXRlLT5tZXJnZXBsYW5zID0gbWVyZ2VwbGFuc3RhdGVzOwotCW1lcmdl c3RhdGUtPm1zX25wbGFucyA9IG5wbGFuczsKLQotCW1lcmdlc3RhdGUtPm1zX3Nsb3RzID0gcGFs bG9jMF9hcnJheShUdXBsZVRhYmxlU2xvdCAqLCBucGxhbnMpOwotCW1lcmdlc3RhdGUtPm1zX2hl YXAgPSBiaW5hcnloZWFwX2FsbG9jYXRlKG5wbGFucywgaGVhcF9jb21wYXJlX3Nsb3RzLAorCW1l cmdlc3RhdGUtPm1zLnBzLnBsYW4gPSAoUGxhbiAqKSBub2RlOworCW1lcmdlc3RhdGUtPm1zLnBz LnN0YXRlID0gZXN0YXRlOworCW1lcmdlc3RhdGUtPm1zLnBzLkV4ZWNQcm9jTm9kZSA9IEV4ZWNN ZXJnZUFwcGVuZDsKKworCS8qIEluaXRpYWxpemUgY29tbW9uIGZpZWxkcyAqLworCUV4ZWNJbml0 QXBwZW5kZXIoJm1lcmdlc3RhdGUtPm1zLAorCQkJCQkgJm5vZGUtPmFwLAorCQkJCQkgZXN0YXRl LAorCQkJCQkgZWZsYWdzLAorCQkJCQkgLTEsCisJCQkJCSBOVUxMKTsKKworCWlmIChtZXJnZXN0 YXRlLT5tcy5uYXN5bmNwbGFucyA+IDAgJiYgbWVyZ2VzdGF0ZS0+bXMudmFsaWRfc3VicGxhbnNf aWRlbnRpZmllZCkKKwkJY2xhc3NpZnlfbWF0Y2hpbmdfc3VicGxhbnMobWVyZ2VzdGF0ZSk7CisK KwltZXJnZXN0YXRlLT5tc19zbG90cyA9IHBhbGxvYzBfYXJyYXkoVHVwbGVUYWJsZVNsb3QgKiwg bWVyZ2VzdGF0ZS0+bXMubnBsYW5zKTsKKwltZXJnZXN0YXRlLT5tc19oZWFwID0gYmluYXJ5aGVh cF9hbGxvY2F0ZShtZXJnZXN0YXRlLT5tcy5ucGxhbnMsIGhlYXBfY29tcGFyZV9zbG90cywKIAkJ CQkJCQkJCQkJICBtZXJnZXN0YXRlKTsKIAotCS8qCi0JICogY2FsbCBFeGVjSW5pdE5vZGUgb24g ZWFjaCBvZiB0aGUgdmFsaWQgcGxhbnMgdG8gYmUgZXhlY3V0ZWQgYW5kIHNhdmUKLQkgKiB0aGUg cmVzdWx0cyBpbnRvIHRoZSBtZXJnZXBsYW5zdGF0ZXMgYXJyYXkuCi0JICovCi0JaiA9IDA7Ci0J YXN5bmNwbGFucyA9IE5VTEw7Ci0JbmFzeW5jcGxhbnMgPSAwOwotCi0JaSA9IC0xOwotCXdoaWxl ICgoaSA9IGJtc19uZXh0X21lbWJlcih2YWxpZHN1YnBsYW5zLCBpKSkgPj0gMCkKLQl7Ci0JCVBs YW4JICAgKmluaXROb2RlID0gKFBsYW4gKikgbGlzdF9udGgobm9kZS0+bWVyZ2VwbGFucywgaSk7 Ci0KLQkJLyoKLQkJICogUmVjb3JkIGFzeW5jIHN1YnBsYW5zLiAgV2hlbiBleGVjdXRpbmcgRXZh bFBsYW5RdWFsLCB3ZSB0cmVhdCB0aGVtCi0JCSAqIGFzIHN5bmMgb25lczsgZG9uJ3QgZG8gdGhp cyB3aGVuIGluaXRpYWxpemluZyBhbiBFdmFsUGxhblF1YWwgcGxhbgotCQkgKiB0cmVlLgotCQkg Ki8KLQkJaWYgKGluaXROb2RlLT5hc3luY19jYXBhYmxlICYmIGVzdGF0ZS0+ZXNfZXBxX2FjdGl2 ZSA9PSBOVUxMKQotCQl7Ci0JCQlhc3luY3BsYW5zID0gYm1zX2FkZF9tZW1iZXIoYXN5bmNwbGFu cywgaik7Ci0JCQluYXN5bmNwbGFucysrOwotCQl9Ci0KLQkJbWVyZ2VwbGFuc3RhdGVzW2orK10g PSBFeGVjSW5pdE5vZGUoaW5pdE5vZGUsIGVzdGF0ZSwgZWZsYWdzKTsKLQl9Ci0KLQkvKgotCSAq IEluaXRpYWxpemUgTWVyZ2VBcHBlbmQncyByZXN1bHQgdHVwbGUgdHlwZSBhbmQgc2xvdC4gIElm IHRoZSBjaGlsZAotCSAqIHBsYW5zIGFsbCBwcm9kdWNlIHRoZSBzYW1lIGZpeGVkIHNsb3QgdHlw ZSwgd2UgY2FuIHVzZSB0aGF0IHNsb3QgdHlwZTsKLQkgKiBvdGhlcndpc2UgbWFrZSBhIHZpcnR1 YWwgc2xvdC4gIChOb3RlIHRoYXQgdGhlIHJlc3VsdCBzbG90IGl0c2VsZiBpcwotCSAqIHVzZWQg b25seSB0byByZXR1cm4gYSBudWxsIHR1cGxlIGF0IGVuZCBvZiBleGVjdXRpb247IHJlYWwgdHVw bGVzIGFyZQotCSAqIHJldHVybmVkIHRvIHRoZSBjYWxsZXIgaW4gdGhlIGNoaWxkcmVuJ3Mgb3du IHJlc3VsdCBzbG90cy4gIFdoYXQgd2UgYXJlCi0JICogZG9pbmcgaGVyZSBpcyBhbGxvd2luZyB0 aGUgcGFyZW50IHBsYW4gbm9kZSB0byBvcHRpbWl6ZSBpZiB0aGUKLQkgKiBNZXJnZUFwcGVuZCB3 aWxsIHJldHVybiBvbmx5IG9uZSBraW5kIG9mIHNsb3QuKQotCSAqLwotCW1lcmdlb3BzID0gRXhl Y0dldENvbW1vblNsb3RPcHMobWVyZ2VwbGFuc3RhdGVzLCBqKTsKLQlpZiAobWVyZ2VvcHMgIT0g TlVMTCkKLQl7Ci0JCUV4ZWNJbml0UmVzdWx0VHVwbGVTbG90VEwoJm1lcmdlc3RhdGUtPnBzLCBt ZXJnZW9wcyk7Ci0JfQotCWVsc2UKLQl7Ci0JCUV4ZWNJbml0UmVzdWx0VHVwbGVTbG90VEwoJm1l cmdlc3RhdGUtPnBzLCAmVFRTT3BzVmlydHVhbCk7Ci0JCS8qIHNob3cgdGhhdCB0aGUgb3V0cHV0 IHNsb3QgdHlwZSBpcyBub3QgZml4ZWQgKi8KLQkJbWVyZ2VzdGF0ZS0+cHMucmVzdWx0b3Bzc2V0 ID0gdHJ1ZTsKLQkJbWVyZ2VzdGF0ZS0+cHMucmVzdWx0b3BzZml4ZWQgPSBmYWxzZTsKLQl9Ci0K LQkvKgotCSAqIE1pc2NlbGxhbmVvdXMgaW5pdGlhbGl6YXRpb24KLQkgKi8KLQltZXJnZXN0YXRl LT5wcy5wc19Qcm9qSW5mbyA9IE5VTEw7Ci0KLQkvKiBJbml0aWFsaXplIGFzeW5jIHN0YXRlICov Ci0JbWVyZ2VzdGF0ZS0+bXNfYXN5bmNwbGFucyA9IGFzeW5jcGxhbnM7Ci0JbWVyZ2VzdGF0ZS0+ bXNfbmFzeW5jcGxhbnMgPSBuYXN5bmNwbGFuczsKLQltZXJnZXN0YXRlLT5tc19hc3luY3JlcXVl c3RzID0gTlVMTDsKLQltZXJnZXN0YXRlLT5tc19hc3luY3Jlc3VsdHMgPSBOVUxMOwogCW1lcmdl c3RhdGUtPm1zX2hhc19hc3luY3Jlc3VsdHMgPSBOVUxMOwogCW1lcmdlc3RhdGUtPm1zX2FzeW5j cmVtYWluID0gTlVMTDsKLQltZXJnZXN0YXRlLT5tc19uZWVkcmVxdWVzdCA9IE5VTEw7Ci0JbWVy Z2VzdGF0ZS0+bXNfZXZlbnRzZXQgPSBOVUxMOwotCW1lcmdlc3RhdGUtPm1zX3ZhbGlkX2FzeW5j cGxhbnMgPSBOVUxMOwotCi0JaWYgKG5hc3luY3BsYW5zID4gMCkKLQl7Ci0JCW1lcmdlc3RhdGUt Pm1zX2FzeW5jcmVxdWVzdHMgPSAoQXN5bmNSZXF1ZXN0ICoqKQotCQkJcGFsbG9jMChucGxhbnMg KiBzaXplb2YoQXN5bmNSZXF1ZXN0ICopKTsKLQotCQlpID0gLTE7Ci0JCXdoaWxlICgoaSA9IGJt c19uZXh0X21lbWJlcihhc3luY3BsYW5zLCBpKSkgPj0gMCkKLQkJewotCQkJQXN5bmNSZXF1ZXN0 ICphcmVxOwotCi0JCQlhcmVxID0gcGFsbG9jKHNpemVvZihBc3luY1JlcXVlc3QpKTsKLQkJCWFy ZXEtPnJlcXVlc3RvciA9IChQbGFuU3RhdGUgKikgbWVyZ2VzdGF0ZTsKLQkJCWFyZXEtPnJlcXVl c3RlZSA9IG1lcmdlcGxhbnN0YXRlc1tpXTsKLQkJCWFyZXEtPnJlcXVlc3RfaW5kZXggPSBpOwot CQkJYXJlcS0+Y2FsbGJhY2tfcGVuZGluZyA9IGZhbHNlOwotCQkJYXJlcS0+cmVxdWVzdF9jb21w bGV0ZSA9IGZhbHNlOwotCQkJYXJlcS0+cmVzdWx0ID0gTlVMTDsKLQotCQkJbWVyZ2VzdGF0ZS0+ bXNfYXN5bmNyZXF1ZXN0c1tpXSA9IGFyZXE7Ci0JCX0KLQotCQltZXJnZXN0YXRlLT5tc19hc3lu Y3Jlc3VsdHMgPSAoVHVwbGVUYWJsZVNsb3QgKiopCi0JCQlwYWxsb2MwKG5wbGFucyAqIHNpemVv ZihUdXBsZVRhYmxlU2xvdCAqKSk7Ci0KLQkJaWYgKG1lcmdlc3RhdGUtPm1zX3ZhbGlkX3N1YnBs YW5zX2lkZW50aWZpZWQpCi0JCQljbGFzc2lmeV9tYXRjaGluZ19zdWJwbGFucyhtZXJnZXN0YXRl KTsKLQl9CiAKIAkvKgogCSAqIGluaXRpYWxpemUgc29ydC1rZXkgaW5mb3JtYXRpb24KQEAgLTI5 MywyMCArMTYwLDIwIEBAIEV4ZWNNZXJnZUFwcGVuZChQbGFuU3RhdGUgKnBzdGF0ZSkKIAlpZiAo IW5vZGUtPm1zX2luaXRpYWxpemVkKQogCXsKIAkJLyogTm90aGluZyB0byBkbyBpZiBhbGwgc3Vi cGxhbnMgd2VyZSBwcnVuZWQgKi8KLQkJaWYgKG5vZGUtPm1zX25wbGFucyA9PSAwKQotCQkJcmV0 dXJuIEV4ZWNDbGVhclR1cGxlKG5vZGUtPnBzLnBzX1Jlc3VsdFR1cGxlU2xvdCk7CisJCWlmIChu b2RlLT5tcy5ucGxhbnMgPT0gMCkKKwkJCXJldHVybiBFeGVjQ2xlYXJUdXBsZShub2RlLT5tcy5w cy5wc19SZXN1bHRUdXBsZVNsb3QpOwogCiAJCS8qIElmIHdlJ3ZlIHlldCB0byBkZXRlcm1pbmUg dGhlIHZhbGlkIHN1YnBsYW5zIHRoZW4gZG8gc28gbm93LiAqLwotCQlpZiAoIW5vZGUtPm1zX3Zh bGlkX3N1YnBsYW5zX2lkZW50aWZpZWQpCisJCWlmICghbm9kZS0+bXMudmFsaWRfc3VicGxhbnNf aWRlbnRpZmllZCkKIAkJewotCQkJbm9kZS0+bXNfdmFsaWRfc3VicGxhbnMgPQotCQkJCUV4ZWNG aW5kTWF0Y2hpbmdTdWJQbGFucyhub2RlLT5tc19wcnVuZV9zdGF0ZSwgZmFsc2UsIE5VTEwpOwot CQkJbm9kZS0+bXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCA9IHRydWU7CisJCQlub2RlLT5t cy52YWxpZF9zdWJwbGFucyA9CisJCQkJRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKG5vZGUtPm1z LnBydW5lX3N0YXRlLCBmYWxzZSwgTlVMTCk7CisJCQlub2RlLT5tcy52YWxpZF9zdWJwbGFuc19p ZGVudGlmaWVkID0gdHJ1ZTsKIAkJCWNsYXNzaWZ5X21hdGNoaW5nX3N1YnBsYW5zKG5vZGUpOwog CQl9CiAKIAkJLyogSWYgdGhlcmUgYXJlIGFueSBhc3luYyBzdWJwbGFucywgYmVnaW4gZXhlY3V0 aW5nIHRoZW0uICovCi0JCWlmIChub2RlLT5tc19uYXN5bmNwbGFucyA+IDApCisJCWlmIChub2Rl LT5tcy5uYXN5bmNwbGFucyA+IDApCiAJCQlFeGVjTWVyZ2VBcHBlbmRBc3luY0JlZ2luKG5vZGUp OwogCiAJCS8qCkBAIC0zMTQsMTYgKzE4MSwxNiBAQCBFeGVjTWVyZ2VBcHBlbmQoUGxhblN0YXRl ICpwc3RhdGUpCiAJCSAqIGFuZCBzZXQgdXAgdGhlIGhlYXAuCiAJCSAqLwogCQlpID0gLTE7Ci0J CXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihub2RlLT5tc192YWxpZF9zdWJwbGFucywgaSkp ID49IDApCisJCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihub2RlLT5tcy52YWxpZF9zdWJw bGFucywgaSkpID49IDApCiAJCXsKLQkJCW5vZGUtPm1zX3Nsb3RzW2ldID0gRXhlY1Byb2NOb2Rl KG5vZGUtPm1lcmdlcGxhbnNbaV0pOworCQkJbm9kZS0+bXNfc2xvdHNbaV0gPSBFeGVjUHJvY05v ZGUobm9kZS0+bXMucGxhbnNbaV0pOwogCQkJaWYgKCFUdXBJc051bGwobm9kZS0+bXNfc2xvdHNb aV0pKQogCQkJCWJpbmFyeWhlYXBfYWRkX3Vub3JkZXJlZChub2RlLT5tc19oZWFwLCBJbnQzMkdl dERhdHVtKGkpKTsKIAkJfQogCiAJCS8qIExvb2sgYXQgdmFsaWQgYXN5bmMgc3VicGxhbnMgKi8K IAkJaSA9IC0xOwotCQl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIobm9kZS0+bXNfdmFsaWRf YXN5bmNwbGFucywgaSkpID49IDApCisJCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihub2Rl LT5tcy52YWxpZF9hc3luY3BsYW5zLCBpKSkgPj0gMCkKIAkJewogCQkJRXhlY01lcmdlQXBwZW5k QXN5bmNHZXROZXh0KG5vZGUsIGkpOwogCQkJaWYgKCFUdXBJc051bGwobm9kZS0+bXNfc2xvdHNb aV0pKQpAQCAtMzQ0LDEyICsyMTEsMTIgQEAgRXhlY01lcmdlQXBwZW5kKFBsYW5TdGF0ZSAqcHN0 YXRlKQogCQkgKiB0byBub3QgcHVsbCB0dXBsZXMgdW50aWwgbmVjZXNzYXJ5LikKIAkJICovCiAJ CWkgPSBEYXR1bUdldEludDMyKGJpbmFyeWhlYXBfZmlyc3Qobm9kZS0+bXNfaGVhcCkpOwotCQlp ZiAoYm1zX2lzX21lbWJlcihpLCBub2RlLT5tc19hc3luY3BsYW5zKSkKKwkJaWYgKGJtc19pc19t ZW1iZXIoaSwgbm9kZS0+bXMuYXN5bmNwbGFucykpCiAJCQlFeGVjTWVyZ2VBcHBlbmRBc3luY0dl dE5leHQobm9kZSwgaSk7CiAJCWVsc2UKIAkJewotCQkJQXNzZXJ0KGJtc19pc19tZW1iZXIoaSwg bm9kZS0+bXNfdmFsaWRfc3VicGxhbnMpKTsKLQkJCW5vZGUtPm1zX3Nsb3RzW2ldID0gRXhlY1By b2NOb2RlKG5vZGUtPm1lcmdlcGxhbnNbaV0pOworCQkJQXNzZXJ0KGJtc19pc19tZW1iZXIoaSwg bm9kZS0+bXMudmFsaWRfc3VicGxhbnMpKTsKKwkJCW5vZGUtPm1zX3Nsb3RzW2ldID0gRXhlY1By b2NOb2RlKG5vZGUtPm1zLnBsYW5zW2ldKTsKIAkJfQogCQlpZiAoIVR1cElzTnVsbChub2RlLT5t c19zbG90c1tpXSkpCiAJCQliaW5hcnloZWFwX3JlcGxhY2VfZmlyc3Qobm9kZS0+bXNfaGVhcCwg SW50MzJHZXREYXR1bShpKSk7CkBAIC0zNjAsNyArMjI3LDcgQEAgRXhlY01lcmdlQXBwZW5kKFBs YW5TdGF0ZSAqcHN0YXRlKQogCWlmIChiaW5hcnloZWFwX2VtcHR5KG5vZGUtPm1zX2hlYXApKQog CXsKIAkJLyogQWxsIHRoZSBzdWJwbGFucyBhcmUgZXhoYXVzdGVkLCBhbmQgc28gaXMgdGhlIGhl YXAgKi8KLQkJcmVzdWx0ID0gRXhlY0NsZWFyVHVwbGUobm9kZS0+cHMucHNfUmVzdWx0VHVwbGVT bG90KTsKKwkJcmVzdWx0ID0gRXhlY0NsZWFyVHVwbGUobm9kZS0+bXMucHMucHNfUmVzdWx0VHVw bGVTbG90KTsKIAl9CiAJZWxzZQogCXsKQEAgLTQyNiw4MSArMjkzLDIxIEBAIGhlYXBfY29tcGFy ZV9zbG90cyhEYXR1bSBhLCBEYXR1bSBiLCB2b2lkICphcmcpCiB2b2lkCiBFeGVjRW5kTWVyZ2VB cHBlbmQoTWVyZ2VBcHBlbmRTdGF0ZSAqbm9kZSkKIHsKLQlQbGFuU3RhdGUgKiptZXJnZXBsYW5z OwotCWludAkJCW5wbGFuczsKLQlpbnQJCQlpOwotCi0JLyoKLQkgKiBnZXQgaW5mb3JtYXRpb24g ZnJvbSB0aGUgbm9kZQotCSAqLwotCW1lcmdlcGxhbnMgPSBub2RlLT5tZXJnZXBsYW5zOwotCW5w bGFucyA9IG5vZGUtPm1zX25wbGFuczsKLQotCS8qCi0JICogc2h1dCBkb3duIGVhY2ggb2YgdGhl IHN1YnNjYW5zCi0JICovCi0JZm9yIChpID0gMDsgaSA8IG5wbGFuczsgaSsrKQotCQlFeGVjRW5k Tm9kZShtZXJnZXBsYW5zW2ldKTsKKwlFeGVjRW5kQXBwZW5kZXIoJm5vZGUtPm1zKTsKIH0KIAog dm9pZAogRXhlY1JlU2Nhbk1lcmdlQXBwZW5kKE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUpCiB7Ci0J aW50CQkJaTsKLQlpbnQJCQluYXN5bmNwbGFucyA9IG5vZGUtPm1zX25hc3luY3BsYW5zOworCWlu dAkJCW5hc3luY3BsYW5zID0gbm9kZS0+bXMubmFzeW5jcGxhbnM7CiAKLQkvKgotCSAqIElmIGFu eSBQQVJBTV9FWEVDIFBhcmFtcyB1c2VkIGluIHBydW5pbmcgZXhwcmVzc2lvbnMgaGF2ZSBjaGFu Z2VkLCB0aGVuCi0JICogd2UnZCBiZXR0ZXIgdW5zZXQgdGhlIHZhbGlkIHN1YnBsYW5zIHNvIHRo YXQgdGhleSBhcmUgcmVzZWxlY3RlZCBmb3IKLQkgKiB0aGUgbmV3IHBhcmFtZXRlciB2YWx1ZXMu Ci0JICovCi0JaWYgKG5vZGUtPm1zX3BydW5lX3N0YXRlICYmCi0JCWJtc19vdmVybGFwKG5vZGUt PnBzLmNoZ1BhcmFtLAotCQkJCQlub2RlLT5tc19wcnVuZV9zdGF0ZS0+ZXhlY3BhcmFtaWRzKSkK LQl7Ci0JCW5vZGUtPm1zX3ZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQgPSBmYWxzZTsKLQkJYm1z X2ZyZWUobm9kZS0+bXNfdmFsaWRfc3VicGxhbnMpOwotCQlub2RlLT5tc192YWxpZF9zdWJwbGFu cyA9IE5VTEw7Ci0JCWJtc19mcmVlKG5vZGUtPm1zX3ZhbGlkX2FzeW5jcGxhbnMpOwotCQlub2Rl LT5tc192YWxpZF9hc3luY3BsYW5zID0gTlVMTDsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbm9k ZS0+bXNfbnBsYW5zOyBpKyspCi0JewotCQlQbGFuU3RhdGUgICpzdWJub2RlID0gbm9kZS0+bWVy Z2VwbGFuc1tpXTsKLQotCQkvKgotCQkgKiBFeGVjUmVTY2FuIGRvZXNuJ3Qga25vdyBhYm91dCBt eSBzdWJwbGFucywgc28gSSBoYXZlIHRvIGRvCi0JCSAqIGNoYW5nZWQtcGFyYW1ldGVyIHNpZ25h bGluZyBteXNlbGYuCi0JCSAqLwotCQlpZiAobm9kZS0+cHMuY2hnUGFyYW0gIT0gTlVMTCkKLQkJ CVVwZGF0ZUNoYW5nZWRQYXJhbVNldChzdWJub2RlLCBub2RlLT5wcy5jaGdQYXJhbSk7Ci0KLQkJ LyoKLQkJICogSWYgY2hnUGFyYW0gb2Ygc3Vibm9kZSBpcyBub3QgbnVsbCB0aGVuIHBsYW4gd2ls bCBiZSByZS1zY2FubmVkIGJ5Ci0JCSAqIGZpcnN0IEV4ZWNQcm9jTm9kZS4KLQkJICovCi0JCWlm IChzdWJub2RlLT5jaGdQYXJhbSA9PSBOVUxMKQotCQkJRXhlY1JlU2NhbihzdWJub2RlKTsKLQl9 CisJRXhlY1JlU2NhbkFwcGVuZGVyKCZub2RlLT5tcyk7CiAKLQkvKiBSZXNldCBhc3luYyBzdGF0 ZSAqLworCS8qIFJlc2V0IHNwZWNpZmljIG1lcmdlIGFwcGVuZCBhc3luYyBzdGF0ZSAqLwogCWlm IChuYXN5bmNwbGFucyA+IDApCiAJewotCQlpID0gLTE7Ci0JCXdoaWxlICgoaSA9IGJtc19uZXh0 X21lbWJlcihub2RlLT5tc19hc3luY3BsYW5zLCBpKSkgPj0gMCkKLQkJewotCQkJQXN5bmNSZXF1 ZXN0ICphcmVxID0gbm9kZS0+bXNfYXN5bmNyZXF1ZXN0c1tpXTsKLQotCQkJYXJlcS0+Y2FsbGJh Y2tfcGVuZGluZyA9IGZhbHNlOwotCQkJYXJlcS0+cmVxdWVzdF9jb21wbGV0ZSA9IGZhbHNlOwot CQkJYXJlcS0+cmVzdWx0ID0gTlVMTDsKLQkJfQotCiAJCWJtc19mcmVlKG5vZGUtPm1zX2FzeW5j cmVtYWluKTsKIAkJbm9kZS0+bXNfYXN5bmNyZW1haW4gPSBOVUxMOwotCQlibXNfZnJlZShub2Rl LT5tc19uZWVkcmVxdWVzdCk7Ci0JCW5vZGUtPm1zX25lZWRyZXF1ZXN0ID0gTlVMTDsKIAkJYm1z X2ZyZWUobm9kZS0+bXNfaGFzX2FzeW5jcmVzdWx0cyk7CiAJCW5vZGUtPm1zX2hhc19hc3luY3Jl c3VsdHMgPSBOVUxMOwogCX0KQEAgLTUxOSwxMCArMzI2LDEwIEBAIEV4ZWNSZVNjYW5NZXJnZUFw cGVuZChNZXJnZUFwcGVuZFN0YXRlICpub2RlKQogc3RhdGljIHZvaWQKIGNsYXNzaWZ5X21hdGNo aW5nX3N1YnBsYW5zKE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUpCiB7Ci0JQXNzZXJ0KG5vZGUtPm1z X3ZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQpOworCUFzc2VydChub2RlLT5tcy52YWxpZF9zdWJw bGFuc19pZGVudGlmaWVkKTsKIAogCS8qIE5vdGhpbmcgdG8gZG8gaWYgdGhlcmUgYXJlIG5vIHZh bGlkIHN1YnBsYW5zLiAqLwotCWlmIChibXNfaXNfZW1wdHkobm9kZS0+bXNfdmFsaWRfc3VicGxh bnMpKQorCWlmIChibXNfaXNfZW1wdHkobm9kZS0+bXMudmFsaWRfc3VicGxhbnMpKQogCXsKIAkJ bm9kZS0+bXNfYXN5bmNyZW1haW4gPSBOVUxMOwogCQlyZXR1cm47CkBAIC01MzAsOSArMzM3LDkg QEAgY2xhc3NpZnlfbWF0Y2hpbmdfc3VicGxhbnMoTWVyZ2VBcHBlbmRTdGF0ZSAqbm9kZSkKIAog CS8qIE5vIHZhbGlkIGFzeW5jIHN1YnBsYW5zIGlkZW50aWZpZWQuICovCiAJaWYgKCFjbGFzc2lm eV9tYXRjaGluZ19zdWJwbGFuc19jb21tb24oCi0JCQkJCQkJCQkJICAgJm5vZGUtPm1zX3ZhbGlk X3N1YnBsYW5zLAotCQkJCQkJCQkJCSAgIG5vZGUtPm1zX2FzeW5jcGxhbnMsCi0JCQkJCQkJCQkJ ICAgJm5vZGUtPm1zX3ZhbGlkX2FzeW5jcGxhbnMpKQorCQkJCQkJCQkJCSAgICZub2RlLT5tcy52 YWxpZF9zdWJwbGFucywKKwkJCQkJCQkJCQkgICBub2RlLT5tcy5hc3luY3BsYW5zLAorCQkJCQkJ CQkJCSAgICZub2RlLT5tcy52YWxpZF9hc3luY3BsYW5zKSkKIAkJbm9kZS0+bXNfYXN5bmNyZW1h aW4gPSBOVUxMOwogfQogCkBAIC01NDUsMzkgKzM1MiwxNyBAQCBjbGFzc2lmeV9tYXRjaGluZ19z dWJwbGFucyhNZXJnZUFwcGVuZFN0YXRlICpub2RlKQogc3RhdGljIHZvaWQKIEV4ZWNNZXJnZUFw cGVuZEFzeW5jQmVnaW4oTWVyZ2VBcHBlbmRTdGF0ZSAqbm9kZSkKIHsKLQlpbnQJCQlpOwotCi0J LyogQmFja3dhcmQgc2NhbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGFzeW5jLWF3YXJlIE1lcmdlQXBw ZW5kcy4gKi8KLQlBc3NlcnQoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChub2RlLT5wcy5zdGF0ZS0+ ZXNfZGlyZWN0aW9uKSk7Ci0KLQkvKiBXZSBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIHdoZW4gdGhl cmUgYXJlIG5vIHN1YnBsYW5zICovCi0JQXNzZXJ0KG5vZGUtPm1zX25wbGFucyA+IDApOwotCi0J LyogV2Ugc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCB3aGVuIHRoZXJlIGFyZSBubyBhc3luYyBzdWJw bGFucy4gKi8KLQlBc3NlcnQobm9kZS0+bXNfbmFzeW5jcGxhbnMgPiAwKTsKLQogCS8qIEV4ZWNN ZXJnZUFwcGVuZCgpIGlkZW50aWZpZXMgdmFsaWQgc3VicGxhbnMgKi8KLQlBc3NlcnQobm9kZS0+ bXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCk7CisJQXNzZXJ0KG5vZGUtPm1zLnZhbGlkX3N1 YnBsYW5zX2lkZW50aWZpZWQpOwogCiAJLyogSW5pdGlhbGl6ZSBzdGF0ZSB2YXJpYWJsZXMuICov Ci0Jbm9kZS0+bXNfYXN5bmNyZW1haW4gPSBibXNfY29weShub2RlLT5tc192YWxpZF9hc3luY3Bs YW5zKTsKKwlub2RlLT5tc19hc3luY3JlbWFpbiA9IGJtc19jb3B5KG5vZGUtPm1zLnZhbGlkX2Fz eW5jcGxhbnMpOwogCiAJLyogTm90aGluZyB0byBkbyBpZiB0aGVyZSBhcmUgbm8gdmFsaWQgYXN5 bmMgc3VicGxhbnMuICovCiAJaWYgKGJtc19pc19lbXB0eShub2RlLT5tc19hc3luY3JlbWFpbikp CiAJCXJldHVybjsKIAotCS8qIE1ha2UgYSByZXF1ZXN0IGZvciBlYWNoIG9mIHRoZSB2YWxpZCBh c3luYyBzdWJwbGFucy4gKi8KLQlpID0gLTE7Ci0Jd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVy KG5vZGUtPm1zX3ZhbGlkX2FzeW5jcGxhbnMsIGkpKSA+PSAwKQotCXsKLQkJQXN5bmNSZXF1ZXN0 ICphcmVxID0gbm9kZS0+bXNfYXN5bmNyZXF1ZXN0c1tpXTsKLQotCQlBc3NlcnQoYXJlcS0+cmVx dWVzdF9pbmRleCA9PSBpKTsKLQkJQXNzZXJ0KCFhcmVxLT5jYWxsYmFja19wZW5kaW5nKTsKLQot CQkvKiBEbyB0aGUgYWN0dWFsIHdvcmsuICovCi0JCUV4ZWNBc3luY1JlcXVlc3QoYXJlcSk7Ci0J fQorCUV4ZWNBcHBlbmRlckFzeW5jQmVnaW4oJm5vZGUtPm1zKTsKIH0KIAogLyogLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpA QCAtNjM4LDcgKzQyMyw3IEBAIEV4ZWNNZXJnZUFwcGVuZEFzeW5jUmVxdWVzdChNZXJnZUFwcGVu ZFN0YXRlICpub2RlLCBpbnQgbXBsYW4pCiAJICovCiAJaWYgKGJtc19pc19tZW1iZXIobXBsYW4s IG5vZGUtPm1zX2hhc19hc3luY3Jlc3VsdHMpKQogCXsKLQkJbm9kZS0+bXNfc2xvdHNbbXBsYW5d ID0gbm9kZS0+bXNfYXN5bmNyZXN1bHRzW21wbGFuXTsKKwkJbm9kZS0+bXNfc2xvdHNbbXBsYW5d ID0gbm9kZS0+bXMuYXN5bmNyZXN1bHRzW21wbGFuXTsKIAkJcmV0dXJuIHRydWU7CiAJfQogCkBA IC02NDgsNyArNDMzLDcgQEAgRXhlY01lcmdlQXBwZW5kQXN5bmNSZXF1ZXN0KE1lcmdlQXBwZW5k U3RhdGUgKm5vZGUsIGludCBtcGxhbikKIAkgKi8KIAluZWVkcmVxdWVzdCA9IE5VTEw7CiAJaSA9 IC0xOwotCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihub2RlLT5tc19uZWVkcmVxdWVzdCwg aSkpID49IDApCisJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKG5vZGUtPm1zLm5lZWRyZXF1 ZXN0LCBpKSkgPj0gMCkKIAl7CiAJCWlmICghYm1zX2lzX21lbWJlcihpLCBub2RlLT5tc19oYXNf YXN5bmNyZXN1bHRzKSkKIAkJCW5lZWRyZXF1ZXN0ID0gYm1zX2FkZF9tZW1iZXIobmVlZHJlcXVl c3QsIGkpOwpAQCAtNjYxLDEzICs0NDYsMTMgQEAgRXhlY01lcmdlQXBwZW5kQXN5bmNSZXF1ZXN0 KE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUsIGludCBtcGxhbikKIAkJcmV0dXJuIGZhbHNlOwogCiAJ LyogQ2xlYXIgbXNfbmVlZHJlcXVlc3QgZmxhZywgYXMgd2UgYXJlIGdvaW5nIHRvIHNlbmQgcmVx dWVzdHMgbm93ICovCi0Jbm9kZS0+bXNfbmVlZHJlcXVlc3QgPSBibXNfZGVsX21lbWJlcnMobm9k ZS0+bXNfbmVlZHJlcXVlc3QsIG5lZWRyZXF1ZXN0KTsKKwlub2RlLT5tcy5uZWVkcmVxdWVzdCA9 IGJtc19kZWxfbWVtYmVycyhub2RlLT5tcy5uZWVkcmVxdWVzdCwgbmVlZHJlcXVlc3QpOwogCiAJ LyogTWFrZSBhIG5ldyByZXF1ZXN0IGZvciBlYWNoIG9mIHRoZSBhc3luYyBzdWJwbGFucyB0aGF0 IG5lZWQgaXQuICovCiAJaSA9IC0xOwogCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihuZWVk cmVxdWVzdCwgaSkpID49IDApCiAJewotCQlBc3luY1JlcXVlc3QgKmFyZXEgPSBub2RlLT5tc19h c3luY3JlcXVlc3RzW2ldOworCQlBc3luY1JlcXVlc3QgKmFyZXEgPSBub2RlLT5tcy5hc3luY3Jl cXVlc3RzW2ldOwogCiAJCS8qCiAJCSAqIFdlJ3ZlIGp1c3QgY2hlY2tlZCB0aGF0IHN1YnBsYW4g ZG9lc24ndCBhbHJlYWR5IGhhdmUgc29tZSBmZXRjaGVkCkBAIC02ODMsNyArNDY4LDcgQEAgRXhl Y01lcmdlQXBwZW5kQXN5bmNSZXF1ZXN0KE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUsIGludCBtcGxh bikKIAkvKiBSZXR1cm4gbmVlZGVkIGFzeW5jaHJvbm91c2x5LWdlbmVyYXRlZCByZXN1bHRzIGlm IGFueS4gKi8KIAlpZiAoYm1zX2lzX21lbWJlcihtcGxhbiwgbm9kZS0+bXNfaGFzX2FzeW5jcmVz dWx0cykpCiAJewotCQlub2RlLT5tc19zbG90c1ttcGxhbl0gPSBub2RlLT5tc19hc3luY3Jlc3Vs dHNbbXBsYW5dOworCQlub2RlLT5tc19zbG90c1ttcGxhbl0gPSBub2RlLT5tcy5hc3luY3Jlc3Vs dHNbbXBsYW5dOwogCQlyZXR1cm4gdHJ1ZTsKIAl9CiAKQEAgLTcwNyw3ICs0OTIsNyBAQCBFeGVj QXN5bmNNZXJnZUFwcGVuZFJlc3BvbnNlKEFzeW5jUmVxdWVzdCAqYXJlcSkKIAkvKiBXZSBzaG91 bGQgaGFuZGxlIHByZXZpb3VzIGFzeW5jIHJlc3VsdCBwcmlvciB0byBnZXR0aW5nIG5ldyBvbmUg Ki8KIAlBc3NlcnQoIWJtc19pc19tZW1iZXIoYXJlcS0+cmVxdWVzdF9pbmRleCwgbm9kZS0+bXNf aGFzX2FzeW5jcmVzdWx0cykpOwogCi0Jbm9kZS0+bXNfYXN5bmNyZXN1bHRzW2FyZXEtPnJlcXVl c3RfaW5kZXhdID0gTlVMTDsKKwlub2RlLT5tcy5hc3luY3Jlc3VsdHNbYXJlcS0+cmVxdWVzdF9p bmRleF0gPSBOVUxMOwogCS8qIE5vdGhpbmcgdG8gZG8gaWYgdGhlIHJlcXVlc3QgaXMgcGVuZGlu Zy4gKi8KIAlpZiAoIWFyZXEtPnJlcXVlc3RfY29tcGxldGUpCiAJewpAQCAtNzMwLDEzICs1MTUs MTMgQEAgRXhlY0FzeW5jTWVyZ2VBcHBlbmRSZXNwb25zZShBc3luY1JlcXVlc3QgKmFyZXEpCiAJ bm9kZS0+bXNfaGFzX2FzeW5jcmVzdWx0cyA9IGJtc19hZGRfbWVtYmVyKG5vZGUtPm1zX2hhc19h c3luY3Jlc3VsdHMsCiAJCQkJCQkJCQkJCSAgIGFyZXEtPnJlcXVlc3RfaW5kZXgpOwogCS8qIFNh dmUgcmVzdWx0IHNvIHdlIGNhbiByZXR1cm4gaXQuICovCi0Jbm9kZS0+bXNfYXN5bmNyZXN1bHRz W2FyZXEtPnJlcXVlc3RfaW5kZXhdID0gc2xvdDsKKwlub2RlLT5tcy5hc3luY3Jlc3VsdHNbYXJl cS0+cmVxdWVzdF9pbmRleF0gPSBzbG90OwogCiAJLyoKIAkgKiBNYXJrIHRoZSBzdWJwbGFuIHRo YXQgcmV0dXJuZWQgYSByZXN1bHQgYXMgcmVhZHkgZm9yIGEgbmV3IHJlcXVlc3QuICBXZQogCSAq IGRvbid0IGxhdW5jaCBhbm90aGVyIG9uZSBoZXJlIGltbWVkaWF0ZWx5IGJlY2F1c2UgaXQgbWln aHQgY29tcGxldGUuCiAJICovCi0Jbm9kZS0+bXNfbmVlZHJlcXVlc3QgPSBibXNfYWRkX21lbWJl cihub2RlLT5tc19uZWVkcmVxdWVzdCwKKwlub2RlLT5tcy5uZWVkcmVxdWVzdCA9IGJtc19hZGRf bWVtYmVyKG5vZGUtPm1zLm5lZWRyZXF1ZXN0LAogCQkJCQkJCQkJCSAgYXJlcS0+cmVxdWVzdF9p bmRleCk7CiB9CiAKQEAgLTc0OSwxMDEgKzUzNCw4IEBAIEV4ZWNBc3luY01lcmdlQXBwZW5kUmVz cG9uc2UoQXN5bmNSZXF1ZXN0ICphcmVxKQogc3RhdGljIHZvaWQKIEV4ZWNNZXJnZUFwcGVuZEFz eW5jRXZlbnRXYWl0KE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUpCiB7Ci0JaW50CQkJbmV2ZW50cyA9 IG5vZGUtPm1zX25hc3luY3BsYW5zICsgMjsgLyogb25lIGZvciBQTSBkZWF0aCBhbmQKLQkJCQkJ CQkJCQkJCQkgKiBvbmUgZm9yIGxhdGNoICovCi0JV2FpdEV2ZW50CW9jY3VycmVkX2V2ZW50W0VW RU5UX0JVRkZFUl9TSVpFXTsKLQlpbnQJCQlub2NjdXJyZWQ7Ci0JaW50CQkJaTsKLQogCS8qIFdl IHNob3VsZCBuZXZlciBiZSBjYWxsZWQgd2hlbiB0aGVyZSBhcmUgbm8gdmFsaWQgYXN5bmMgc3Vi cGxhbnMuICovCiAJQXNzZXJ0KGJtc19udW1fbWVtYmVycyhub2RlLT5tc19hc3luY3JlbWFpbikg PiAwKTsKIAotCW5vZGUtPm1zX2V2ZW50c2V0ID0gQ3JlYXRlV2FpdEV2ZW50U2V0KEN1cnJlbnRS ZXNvdXJjZU93bmVyLCBuZXZlbnRzKTsKLQlBZGRXYWl0RXZlbnRUb1NldChub2RlLT5tc19ldmVu dHNldCwgV0xfRVhJVF9PTl9QTV9ERUFUSCwgUEdJTlZBTElEX1NPQ0tFVCwKLQkJCQkJICBOVUxM LCBOVUxMKTsKLQotCS8qIEdpdmUgZWFjaCB3YWl0aW5nIHN1YnBsYW4gYSBjaGFuY2UgdG8gYWRk IGFuIGV2ZW50LiAqLwotCWkgPSAtMTsKLQl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIobm9k ZS0+bXNfYXN5bmNwbGFucywgaSkpID49IDApCi0JewotCQlBc3luY1JlcXVlc3QgKmFyZXEgPSBu b2RlLT5tc19hc3luY3JlcXVlc3RzW2ldOwotCi0JCWlmIChhcmVxLT5jYWxsYmFja19wZW5kaW5n KQotCQkJRXhlY0FzeW5jQ29uZmlndXJlV2FpdChhcmVxKTsKLQl9Ci0KLQkvKgotCSAqIE5vIG5l ZWQgZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZyBpZiBub25lIG9mIHRoZSBzdWJwbGFucyBjb25maWd1 cmVkIGFueQotCSAqIGV2ZW50cy4KLQkgKi8KLQlpZiAoR2V0TnVtUmVnaXN0ZXJlZFdhaXRFdmVu dHMobm9kZS0+bXNfZXZlbnRzZXQpID09IDEpCi0JewotCQlGcmVlV2FpdEV2ZW50U2V0KG5vZGUt Pm1zX2V2ZW50c2V0KTsKLQkJbm9kZS0+bXNfZXZlbnRzZXQgPSBOVUxMOwotCQlyZXR1cm47Ci0J fQotCi0JLyoKLQkgKiBBZGQgdGhlIHByb2Nlc3MgbGF0Y2ggdG8gdGhlIHNldCwgc28gdGhhdCB3 ZSB3YWtlIHVwIHRvIHByb2Nlc3MgdGhlCi0JICogc3RhbmRhcmQgaW50ZXJydXB0cyB3aXRoIENI RUNLX0ZPUl9JTlRFUlJVUFRTKCkuCi0JICoKLQkgKiBOT1RFOiBGb3IgaGlzdG9yaWNhbCByZWFz b25zLCBpdCdzIGltcG9ydGFudCB0aGF0IHRoaXMgaXMgYWRkZWQgdG8gdGhlCi0JICogV2FpdEV2 ZW50U2V0IGFmdGVyIHRoZSBFeGVjQXN5bmNDb25maWd1cmVXYWl0KCkgY2FsbHMuICBOYW1lbHks Ci0JICogcG9zdGdyZXNfZmR3IGNhbGxzICJHZXROdW1SZWdpc3RlcmVkV2FpdEV2ZW50cyhzZXQp ID09IDEiIHRvIGNoZWNrIGlmCi0JICogYW55IG90aGVyIGV2ZW50cyBhcmUgaW4gdGhlIHNldC4g IFRoYXQncyBhIHBvb3IgZGVzaWduLCBpdCdzCi0JICogcXVlc3Rpb25hYmxlIGZvciBwb3N0Z3Jl c19mZHcgdG8gYmUgZG9pbmcgdGhhdCBpbiB0aGUgZmlyc3QgcGxhY2UsIGJ1dAotCSAqIHdlIGNh bm5vdCBjaGFuZ2UgaXQgbm93LiAgVGhlIHBhdHRlcm4gaGFzIHBvc3NpYmx5IGJlZW4gY29waWVk IHRvIG90aGVyCi0JICogZXh0ZW5zaW9ucyB0b28uCi0JICovCi0JQWRkV2FpdEV2ZW50VG9TZXQo bm9kZS0+bXNfZXZlbnRzZXQsIFdMX0xBVENIX1NFVCwgUEdJTlZBTElEX1NPQ0tFVCwKLQkJCQkJ ICBNeUxhdGNoLCBOVUxMKTsKLQotCS8qIFJldHVybiBhdCBtb3N0IEVWRU5UX0JVRkZFUl9TSVpF IGV2ZW50cyBpbiBvbmUgY2FsbC4gKi8KLQlpZiAobmV2ZW50cyA+IEVWRU5UX0JVRkZFUl9TSVpF KQotCQluZXZlbnRzID0gRVZFTlRfQlVGRkVSX1NJWkU7Ci0KLQkvKgotCSAqIFdhaXQgdW50aWwg YXQgbGVhc3Qgb25lIGV2ZW50IG9jY3Vycy4KLQkgKi8KLQlub2NjdXJyZWQgPSBXYWl0RXZlbnRT ZXRXYWl0KG5vZGUtPm1zX2V2ZW50c2V0LCAtMSAvKiBubyB0aW1lb3V0ICovICwgb2NjdXJyZWRf ZXZlbnQsCi0JCQkJCQkJCSBuZXZlbnRzLCBXQUlUX0VWRU5UX0FQUEVORF9SRUFEWSk7Ci0JRnJl ZVdhaXRFdmVudFNldChub2RlLT5tc19ldmVudHNldCk7Ci0Jbm9kZS0+bXNfZXZlbnRzZXQgPSBO VUxMOwotCWlmIChub2NjdXJyZWQgPT0gMCkKLQkJcmV0dXJuOwotCi0JLyogRGVsaXZlciBub3Rp ZmljYXRpb25zLiAqLwotCWZvciAoaSA9IDA7IGkgPCBub2NjdXJyZWQ7IGkrKykKLQl7Ci0JCVdh aXRFdmVudCAgKncgPSAmb2NjdXJyZWRfZXZlbnRbaV07Ci0KLQkJLyoKLQkJICogRWFjaCB3YWl0 aW5nIHN1YnBsYW4gc2hvdWxkIGhhdmUgcmVnaXN0ZXJlZCBpdHMgd2FpdCBldmVudCB3aXRoCi0J CSAqIHVzZXJfZGF0YSBwb2ludGluZyBiYWNrIHRvIGl0cyBBc3luY1JlcXVlc3QuCi0JCSAqLwot CQlpZiAoKHctPmV2ZW50cyAmIFdMX1NPQ0tFVF9SRUFEQUJMRSkgIT0gMCkKLQkJewotCQkJQXN5 bmNSZXF1ZXN0ICphcmVxID0gKEFzeW5jUmVxdWVzdCAqKSB3LT51c2VyX2RhdGE7Ci0KLQkJCWlm IChhcmVxLT5jYWxsYmFja19wZW5kaW5nKQotCQkJewotCQkJCS8qCi0JCQkJICogTWFyayBpdCBh cyBubyBsb25nZXIgbmVlZGluZyBhIGNhbGxiYWNrLiAgV2UgbXVzdCBkbyB0aGlzCi0JCQkJICog YmVmb3JlIGRpc3BhdGNoaW5nIHRoZSBjYWxsYmFjayBpbiBjYXNlIHRoZSBjYWxsYmFjayByZXNl dHMKLQkJCQkgKiB0aGUgZmxhZy4KLQkJCQkgKi8KLQkJCQlhcmVxLT5jYWxsYmFja19wZW5kaW5n ID0gZmFsc2U7Ci0KLQkJCQkvKiBEbyB0aGUgYWN0dWFsIHdvcmsuICovCi0JCQkJRXhlY0FzeW5j Tm90aWZ5KGFyZXEpOwotCQkJfQotCQl9Ci0KLQkJLyogSGFuZGxlIHN0YW5kYXJkIGludGVycnVw dHMgKi8KLQkJaWYgKCh3LT5ldmVudHMgJiBXTF9MQVRDSF9TRVQpICE9IDApCi0JCXsKLQkJCVJl c2V0TGF0Y2goTXlMYXRjaCk7Ci0JCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwotCQl9Ci0JfQor CUV4ZWNBcHBlbmRlckFzeW5jRXZlbnRXYWl0KCZub2RlLT5tcywgLTEgLyogbm8gdGltZW91dCAq LyAsIFdBSVRfRVZFTlRfQVBQRU5EX1JFQURZKTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L25vZGVzL25vZGVGdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMvbm9kZUZ1bmNzLmMKaW5kZXgg MTk5ZWQyNzk5NWYuLjYwODE5NWE4OWZhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9u b2RlRnVuY3MuYworKysgYi9zcmMvYmFja2VuZC9ub2Rlcy9ub2RlRnVuY3MuYwpAQCAtNDc1NCwx NCArNDc1NCwxNCBAQCBwbGFuc3RhdGVfdHJlZV93YWxrZXJfaW1wbChQbGFuU3RhdGUgKnBsYW5z dGF0ZSwKIAlzd2l0Y2ggKG5vZGVUYWcocGxhbikpCiAJewogCQljYXNlIFRfQXBwZW5kOgotCQkJ aWYgKHBsYW5zdGF0ZV93YWxrX21lbWJlcnMoKChBcHBlbmRTdGF0ZSAqKSBwbGFuc3RhdGUpLT5h cHBlbmRwbGFucywKLQkJCQkJCQkJCSAgICgoQXBwZW5kU3RhdGUgKikgcGxhbnN0YXRlKS0+YXNf bnBsYW5zLAorCQkJaWYgKHBsYW5zdGF0ZV93YWxrX21lbWJlcnMoKChBcHBlbmRTdGF0ZSAqKSBw bGFuc3RhdGUpLT5hcy5wbGFucywKKwkJCQkJCQkJCSAgICgoQXBwZW5kU3RhdGUgKikgcGxhbnN0 YXRlKS0+YXMubnBsYW5zLAogCQkJCQkJCQkJICAgd2Fsa2VyLCBjb250ZXh0KSkKIAkJCQlyZXR1 cm4gdHJ1ZTsKIAkJCWJyZWFrOwogCQljYXNlIFRfTWVyZ2VBcHBlbmQ6Ci0JCQlpZiAocGxhbnN0 YXRlX3dhbGtfbWVtYmVycygoKE1lcmdlQXBwZW5kU3RhdGUgKikgcGxhbnN0YXRlKS0+bWVyZ2Vw bGFucywKLQkJCQkJCQkJCSAgICgoTWVyZ2VBcHBlbmRTdGF0ZSAqKSBwbGFuc3RhdGUpLT5tc19u cGxhbnMsCisJCQlpZiAocGxhbnN0YXRlX3dhbGtfbWVtYmVycygoKE1lcmdlQXBwZW5kU3RhdGUg KikgcGxhbnN0YXRlKS0+bXMucGxhbnMsCisJCQkJCQkJCQkgICAoKE1lcmdlQXBwZW5kU3RhdGUg KikgcGxhbnN0YXRlKS0+bXMubnBsYW5zLAogCQkJCQkJCQkJICAgd2Fsa2VyLCBjb250ZXh0KSkK IAkJCQlyZXR1cm4gdHJ1ZTsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3Jl YXRlcGxhbi5jCmluZGV4IDVhM2ZjMGQyODFiLi40YWMyNGZmYTNhZiAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCisrKyBiL3NyYy9iYWNrZW5kL29w dGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYwpAQCAtMTI2MSwxMiArMTI2MSwxMiBAQCBjcmVhdGVf YXBwZW5kX3BsYW4oUGxhbm5lckluZm8gKnJvb3QsIEFwcGVuZFBhdGggKmJlc3RfcGF0aCwgaW50 IGZsYWdzKQogCSAqIGNoaWxkIHBsYW5zLCB0byBtYWtlIGNyb3NzLWNoZWNraW5nIHRoZSBzb3J0 IGluZm8gZWFzaWVyLgogCSAqLwogCXBsYW4gPSBtYWtlTm9kZShBcHBlbmQpOwotCXBsYW4tPnBs YW4udGFyZ2V0bGlzdCA9IHRsaXN0OwotCXBsYW4tPnBsYW4ucXVhbCA9IE5JTDsKLQlwbGFuLT5w bGFuLmxlZnR0cmVlID0gTlVMTDsKLQlwbGFuLT5wbGFuLnJpZ2h0dHJlZSA9IE5VTEw7Ci0JcGxh bi0+YXBwcmVsaWRzID0gcmVsLT5yZWxpZHM7Ci0JcGxhbi0+Y2hpbGRfYXBwZW5kX3JlbGlkX3Nl dHMgPSBiZXN0X3BhdGgtPmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzOworCXBsYW4tPmFwLnBsYW4u dGFyZ2V0bGlzdCA9IHRsaXN0OworCXBsYW4tPmFwLnBsYW4ucXVhbCA9IE5JTDsKKwlwbGFuLT5h cC5wbGFuLmxlZnR0cmVlID0gTlVMTDsKKwlwbGFuLT5hcC5wbGFuLnJpZ2h0dHJlZSA9IE5VTEw7 CisJcGxhbi0+YXAuYXBwcmVsaWRzID0gcmVsLT5yZWxpZHM7CisJcGxhbi0+YXAuY2hpbGRfYXBw ZW5kX3JlbGlkX3NldHMgPSBiZXN0X3BhdGgtPmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzOwogCiAJ aWYgKHBhdGhrZXlzICE9IE5JTCkKIAl7CkBAIC0xMjg1LDcgKzEyODUsNyBAQCBjcmVhdGVfYXBw ZW5kX3BsYW4oUGxhbm5lckluZm8gKnJvb3QsIEFwcGVuZFBhdGggKmJlc3RfcGF0aCwgaW50IGZs YWdzKQogCQkJCQkJCQkJCSAgJm5vZGVTb3J0T3BlcmF0b3JzLAogCQkJCQkJCQkJCSAgJm5vZGVD b2xsYXRpb25zLAogCQkJCQkJCQkJCSAgJm5vZGVOdWxsc0ZpcnN0KTsKLQkJdGxpc3Rfd2FzX2No YW5nZWQgPSAob3JpZ190bGlzdF9sZW5ndGggIT0gbGlzdF9sZW5ndGgocGxhbi0+cGxhbi50YXJn ZXRsaXN0KSk7CisJCXRsaXN0X3dhc19jaGFuZ2VkID0gKG9yaWdfdGxpc3RfbGVuZ3RoICE9IGxp c3RfbGVuZ3RoKHBsYW4tPmFwLnBsYW4udGFyZ2V0bGlzdCkpOwogCX0KIAogCS8qIElmIGFwcHJv cHJpYXRlLCBjb25zaWRlciBhc3luYyBhcHBlbmQgKi8KQEAgLTEzOTUsNyArMTM5NSw3IEBAIGNy ZWF0ZV9hcHBlbmRfcGxhbihQbGFubmVySW5mbyAqcm9vdCwgQXBwZW5kUGF0aCAqYmVzdF9wYXRo LCBpbnQgZmxhZ3MpCiAJfQogCiAJLyogU2V0IGJlbG93IGlmIHdlIGZpbmQgcXVhbHMgdGhhdCB3 ZSBjYW4gdXNlIHRvIHJ1bi10aW1lIHBydW5lICovCi0JcGxhbi0+cGFydF9wcnVuZV9pbmRleCA9 IC0xOworCXBsYW4tPmFwLnBhcnRfcHJ1bmVfaW5kZXggPSAtMTsKIAogCS8qCiAJICogSWYgYW55 IHF1YWxzIGV4aXN0LCB0aGV5IG1heSBiZSB1c2VmdWwgdG8gcGVyZm9ybSBmdXJ0aGVyIHBhcnRp dGlvbgpAQCAtMTQyMCwxNiArMTQyMCwxNiBAQCBjcmVhdGVfYXBwZW5kX3BsYW4oUGxhbm5lcklu Zm8gKnJvb3QsIEFwcGVuZFBhdGggKmJlc3RfcGF0aCwgaW50IGZsYWdzKQogCQl9CiAKIAkJaWYg KHBydW5lcXVhbCAhPSBOSUwpCi0JCQlwbGFuLT5wYXJ0X3BydW5lX2luZGV4ID0gbWFrZV9wYXJ0 aXRpb25fcHJ1bmVpbmZvKHJvb3QsIHJlbCwKKwkJCXBsYW4tPmFwLnBhcnRfcHJ1bmVfaW5kZXgg PSBtYWtlX3BhcnRpdGlvbl9wcnVuZWluZm8ocm9vdCwgcmVsLAogCQkJCQkJCQkJCQkJCQkJICBi ZXN0X3BhdGgtPnN1YnBhdGhzLAogCQkJCQkJCQkJCQkJCQkJICBwcnVuZXF1YWwpOwogCX0KIAot CXBsYW4tPmFwcGVuZHBsYW5zID0gc3VicGxhbnM7CisJcGxhbi0+YXAuc3VicGxhbnMgPSBzdWJw bGFuczsKIAlwbGFuLT5uYXN5bmNwbGFucyA9IG5hc3luY3BsYW5zOwogCXBsYW4tPmZpcnN0X3Bh cnRpYWxfcGxhbiA9IGJlc3RfcGF0aC0+Zmlyc3RfcGFydGlhbF9wYXRoOwogCi0JY29weV9nZW5l cmljX3BhdGhfaW5mbygmcGxhbi0+cGxhbiwgKFBhdGggKikgYmVzdF9wYXRoKTsKKwljb3B5X2dl bmVyaWNfcGF0aF9pbmZvKCZwbGFuLT5hcC5wbGFuLCAoUGF0aCAqKSBiZXN0X3BhdGgpOwogCiAJ LyoKIAkgKiBJZiBwcmVwYXJlX3NvcnRfZnJvbV9wYXRoa2V5cyBhZGRlZCBzb3J0IGNvbHVtbnMs IGJ1dCB3ZSB3ZXJlIHRvbGQgdG8KQEAgLTE0MzgsOSArMTQzOCw5IEBAIGNyZWF0ZV9hcHBlbmRf cGxhbihQbGFubmVySW5mbyAqcm9vdCwgQXBwZW5kUGF0aCAqYmVzdF9wYXRoLCBpbnQgZmxhZ3Mp CiAJICovCiAJaWYgKHRsaXN0X3dhc19jaGFuZ2VkICYmIChmbGFncyAmIChDUF9FWEFDVF9UTElT VCB8IENQX1NNQUxMX1RMSVNUKSkpCiAJewotCQl0bGlzdCA9IGxpc3RfY29weV9oZWFkKHBsYW4t PnBsYW4udGFyZ2V0bGlzdCwgb3JpZ190bGlzdF9sZW5ndGgpOworCQl0bGlzdCA9IGxpc3RfY29w eV9oZWFkKHBsYW4tPmFwLnBsYW4udGFyZ2V0bGlzdCwgb3JpZ190bGlzdF9sZW5ndGgpOwogCQly ZXR1cm4gaW5qZWN0X3Byb2plY3Rpb25fcGxhbigoUGxhbiAqKSBwbGFuLCB0bGlzdCwKLQkJCQkJ CQkJCSAgcGxhbi0+cGxhbi5wYXJhbGxlbF9zYWZlKTsKKwkJCQkJCQkJCSAgcGxhbi0+YXAucGxh bi5wYXJhbGxlbF9zYWZlKTsKIAl9CiAJZWxzZQogCQlyZXR1cm4gKFBsYW4gKikgcGxhbjsKQEAg LTE0NTgsNyArMTQ1OCw3IEBAIGNyZWF0ZV9tZXJnZV9hcHBlbmRfcGxhbihQbGFubmVySW5mbyAq cm9vdCwgTWVyZ2VBcHBlbmRQYXRoICpiZXN0X3BhdGgsCiAJCQkJCQkgaW50IGZsYWdzKQogewog CU1lcmdlQXBwZW5kICpub2RlID0gbWFrZU5vZGUoTWVyZ2VBcHBlbmQpOwotCVBsYW4JICAgKnBs YW4gPSAmbm9kZS0+cGxhbjsKKwlQbGFuCSAgICpwbGFuID0gJm5vZGUtPmFwLnBsYW47CiAJTGlz dAkgICAqdGxpc3QgPSBidWlsZF9wYXRoX3RsaXN0KHJvb3QsICZiZXN0X3BhdGgtPnBhdGgpOwog CWludAkJCW9yaWdfdGxpc3RfbGVuZ3RoID0gbGlzdF9sZW5ndGgodGxpc3QpOwogCWJvb2wJCXRs aXN0X3dhc19jaGFuZ2VkOwpAQCAtMTQ3OSw4ICsxNDc5LDggQEAgY3JlYXRlX21lcmdlX2FwcGVu ZF9wbGFuKFBsYW5uZXJJbmZvICpyb290LCBNZXJnZUFwcGVuZFBhdGggKmJlc3RfcGF0aCwKIAlw bGFuLT5xdWFsID0gTklMOwogCXBsYW4tPmxlZnR0cmVlID0gTlVMTDsKIAlwbGFuLT5yaWdodHRy ZWUgPSBOVUxMOwotCW5vZGUtPmFwcHJlbGlkcyA9IHJlbC0+cmVsaWRzOwotCW5vZGUtPmNoaWxk X2FwcGVuZF9yZWxpZF9zZXRzID0gYmVzdF9wYXRoLT5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0czsK Kwlub2RlLT5hcC5hcHByZWxpZHMgPSByZWwtPnJlbGlkczsKKwlub2RlLT5hcC5jaGlsZF9hcHBl bmRfcmVsaWRfc2V0cyA9IGJlc3RfcGF0aC0+Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHM7CiAKIAlj b25zaWRlcl9hc3luYyA9IChlbmFibGVfYXN5bmNfbWVyZ2VfYXBwZW5kICYmCiAJCQkJCSAgIWJl c3RfcGF0aC0+cGF0aC5wYXJhbGxlbF9zYWZlICYmCkBAIC0xNTk0LDcgKzE1OTQsNyBAQCBjcmVh dGVfbWVyZ2VfYXBwZW5kX3BsYW4oUGxhbm5lckluZm8gKnJvb3QsIE1lcmdlQXBwZW5kUGF0aCAq YmVzdF9wYXRoLAogCX0KIAogCS8qIFNldCBiZWxvdyBpZiB3ZSBmaW5kIHF1YWxzIHRoYXQgd2Ug Y2FuIHVzZSB0byBydW4tdGltZSBwcnVuZSAqLwotCW5vZGUtPnBhcnRfcHJ1bmVfaW5kZXggPSAt MTsKKwlub2RlLT5hcC5wYXJ0X3BydW5lX2luZGV4ID0gLTE7CiAKIAkvKgogCSAqIElmIGFueSBx dWFscyBleGlzdCwgdGhleSBtYXkgYmUgdXNlZnVsIHRvIHBlcmZvcm0gZnVydGhlciBwYXJ0aXRp b24KQEAgLTE2MTEsMTIgKzE2MTEsMTIgQEAgY3JlYXRlX21lcmdlX2FwcGVuZF9wbGFuKFBsYW5u ZXJJbmZvICpyb290LCBNZXJnZUFwcGVuZFBhdGggKmJlc3RfcGF0aCwKIAkJQXNzZXJ0KGJlc3Rf cGF0aC0+cGF0aC5wYXJhbV9pbmZvID09IE5VTEwpOwogCiAJCWlmIChwcnVuZXF1YWwgIT0gTklM KQotCQkJbm9kZS0+cGFydF9wcnVuZV9pbmRleCA9IG1ha2VfcGFydGl0aW9uX3BydW5laW5mbyhy b290LCByZWwsCisJCQlub2RlLT5hcC5wYXJ0X3BydW5lX2luZGV4ID0gbWFrZV9wYXJ0aXRpb25f cHJ1bmVpbmZvKHJvb3QsIHJlbCwKIAkJCQkJCQkJCQkJCQkJCSAgYmVzdF9wYXRoLT5zdWJwYXRo cywKIAkJCQkJCQkJCQkJCQkJCSAgcHJ1bmVxdWFsKTsKIAl9CiAKLQlub2RlLT5tZXJnZXBsYW5z ID0gc3VicGxhbnM7CisJbm9kZS0+YXAuc3VicGxhbnMgPSBzdWJwbGFuczsKIAogCS8qCiAJICog SWYgcHJlcGFyZV9zb3J0X2Zyb21fcGF0aGtleXMgYWRkZWQgc29ydCBjb2x1bW5zLCBidXQgd2Ug d2VyZSB0b2xkIHRvCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRy ZWZzLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMKaW5kZXggMWI1Yjli NWVkOWMuLjBjMWZjNDU1NDIzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxh bi9zZXRyZWZzLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVmcy5jCkBA IC0xODgxLDEwICsxODgxLDEwIEBAIHNldF9hcHBlbmRfcmVmZXJlbmNlcyhQbGFubmVySW5mbyAq cm9vdCwKIAkgKiBjaGVjayBxdWFscy4gIElmIGl0J3MgZ290IGV4YWN0bHkgb25lIGNoaWxkIHBs YW4sIHRoZW4gaXQncyBub3QgZG9pbmcKIAkgKiBhbnl0aGluZyB1c2VmdWwgYXQgYWxsLCBhbmQg d2UgY2FuIHN0cmlwIGl0IG91dC4KIAkgKi8KLQlBc3NlcnQoYXBsYW4tPnBsYW4ucXVhbCA9PSBO SUwpOworCUFzc2VydChhcGxhbi0+YXAucGxhbi5xdWFsID09IE5JTCk7CiAKIAkvKiBGaXJzdCwg d2UgZ290dGEgcmVjdXJzZSBvbiB0aGUgY2hpbGRyZW4gKi8KLQlmb3JlYWNoKGwsIGFwbGFuLT5h cHBlbmRwbGFucykKKwlmb3JlYWNoKGwsIGFwbGFuLT5hcC5zdWJwbGFucykKIAl7CiAJCWxmaXJz dChsKSA9IHNldF9wbGFuX3JlZnMocm9vdCwgKFBsYW4gKikgbGZpcnN0KGwpLCBydG9mZnNldCk7 CiAJfQpAQCAtMTg5NywxMSArMTg5NywxMSBAQCBzZXRfYXBwZW5kX3JlZmVyZW5jZXMoUGxhbm5l ckluZm8gKnJvb3QsCiAJICogcGxhbiBtYXkgZXhlY3V0ZSB0aGUgbm9uLXBhcmFsbGVsIGF3YXJl IGNoaWxkIG11bHRpcGxlIHRpbWVzLiAgKElmIHlvdQogCSAqIGNoYW5nZSB0aGVzZSBydWxlcywg dXBkYXRlIGNyZWF0ZV9hcHBlbmRfcGF0aCB0byBtYXRjaC4pCiAJICovCi0JaWYgKGxpc3RfbGVu Z3RoKGFwbGFuLT5hcHBlbmRwbGFucykgPT0gMSkKKwlpZiAobGlzdF9sZW5ndGgoYXBsYW4tPmFw LnN1YnBsYW5zKSA9PSAxKQogCXsKLQkJUGxhbgkgICAqcCA9IChQbGFuICopIGxpbml0aWFsKGFw bGFuLT5hcHBlbmRwbGFucyk7CisJCVBsYW4JICAgKnAgPSAoUGxhbiAqKSBsaW5pdGlhbChhcGxh bi0+YXAuc3VicGxhbnMpOwogCi0JCWlmIChwLT5wYXJhbGxlbF9hd2FyZSA9PSBhcGxhbi0+cGxh bi5wYXJhbGxlbF9hd2FyZSkKKwkJaWYgKHAtPnBhcmFsbGVsX2F3YXJlID09IGFwbGFuLT5hcC5w bGFuLnBhcmFsbGVsX2F3YXJlKQogCQl7CiAJCQlQbGFuCSAgICpyZXN1bHQ7CiAKQEAgLTE5MDks NyArMTkwOSw3IEBAIHNldF9hcHBlbmRfcmVmZXJlbmNlcyhQbGFubmVySW5mbyAqcm9vdCwKIAog CQkJLyogUmVtZW1iZXIgdGhhdCB3ZSByZW1vdmVkIGFuIEFwcGVuZCAqLwogCQkJcmVjb3JkX2Vs aWRlZF9ub2RlKHJvb3QtPmdsb2IsIHAtPnBsYW5fbm9kZV9pZCwgVF9BcHBlbmQsCi0JCQkJCQkJ ICAgb2Zmc2V0X3JlbGlkX3NldChhcGxhbi0+YXBwcmVsaWRzLCBydG9mZnNldCkpOworCQkJCQkJ CSAgIG9mZnNldF9yZWxpZF9zZXQoYXBsYW4tPmFwLmFwcHJlbGlkcywgcnRvZmZzZXQpKTsKIAog CQkJcmV0dXJuIHJlc3VsdDsKIAkJfQpAQCAtMTkyMiwxOSArMTkyMiwxOSBAQCBzZXRfYXBwZW5k X3JlZmVyZW5jZXMoUGxhbm5lckluZm8gKnJvb3QsCiAJICovCiAJc2V0X2R1bW15X3RsaXN0X3Jl ZmVyZW5jZXMoKFBsYW4gKikgYXBsYW4sIHJ0b2Zmc2V0KTsKIAotCWFwbGFuLT5hcHByZWxpZHMg PSBvZmZzZXRfcmVsaWRfc2V0KGFwbGFuLT5hcHByZWxpZHMsIHJ0b2Zmc2V0KTsKKwlhcGxhbi0+ YXAuYXBwcmVsaWRzID0gb2Zmc2V0X3JlbGlkX3NldChhcGxhbi0+YXAuYXBwcmVsaWRzLCBydG9m ZnNldCk7CiAKIAkvKgogCSAqIEFkZCBQYXJ0aXRpb25QcnVuZUluZm8sIGlmIGFueSwgdG8gUGxh bm5lckdsb2JhbCBhbmQgdXBkYXRlIHRoZSBpbmRleC4KIAkgKiBBbHNvIHVwZGF0ZSB0aGUgUlQg aW5kZXhlcyBwcmVzZW50IGluIGl0IHRvIGFkZCB0aGUgb2Zmc2V0LgogCSAqLwotCWlmIChhcGxh bi0+cGFydF9wcnVuZV9pbmRleCA+PSAwKQotCQlhcGxhbi0+cGFydF9wcnVuZV9pbmRleCA9Ci0J CQlyZWdpc3Rlcl9wYXJ0cHJ1bmVpbmZvKHJvb3QsIGFwbGFuLT5wYXJ0X3BydW5lX2luZGV4LCBy dG9mZnNldCk7CisJaWYgKGFwbGFuLT5hcC5wYXJ0X3BydW5lX2luZGV4ID49IDApCisJCWFwbGFu LT5hcC5wYXJ0X3BydW5lX2luZGV4ID0KKwkJCXJlZ2lzdGVyX3BhcnRwcnVuZWluZm8ocm9vdCwg YXBsYW4tPmFwLnBhcnRfcHJ1bmVfaW5kZXgsIHJ0b2Zmc2V0KTsKIAogCS8qIFdlIGRvbid0IG5l ZWQgdG8gcmVjdXJzZSB0byBsZWZ0dHJlZSBvciByaWdodHRyZWUgLi4uICovCi0JQXNzZXJ0KGFw bGFuLT5wbGFuLmxlZnR0cmVlID09IE5VTEwpOwotCUFzc2VydChhcGxhbi0+cGxhbi5yaWdodHRy ZWUgPT0gTlVMTCk7CisJQXNzZXJ0KGFwbGFuLT5hcC5wbGFuLmxlZnR0cmVlID09IE5VTEwpOwor CUFzc2VydChhcGxhbi0+YXAucGxhbi5yaWdodHRyZWUgPT0gTlVMTCk7CiAKIAlyZXR1cm4gKFBs YW4gKikgYXBsYW47CiB9CkBAIC0xOTU4LDEwICsxOTU4LDEwIEBAIHNldF9tZXJnZWFwcGVuZF9y ZWZlcmVuY2VzKFBsYW5uZXJJbmZvICpyb290LAogCSAqIG9yIGNoZWNrIHF1YWxzLiAgSWYgaXQn cyBnb3QgZXhhY3RseSBvbmUgY2hpbGQgcGxhbiwgdGhlbiBpdCdzIG5vdAogCSAqIGRvaW5nIGFu eXRoaW5nIHVzZWZ1bCBhdCBhbGwsIGFuZCB3ZSBjYW4gc3RyaXAgaXQgb3V0LgogCSAqLwotCUFz c2VydChtcGxhbi0+cGxhbi5xdWFsID09IE5JTCk7CisJQXNzZXJ0KG1wbGFuLT5hcC5wbGFuLnF1 YWwgPT0gTklMKTsKIAogCS8qIEZpcnN0LCB3ZSBnb3R0YSByZWN1cnNlIG9uIHRoZSBjaGlsZHJl biAqLwotCWZvcmVhY2gobCwgbXBsYW4tPm1lcmdlcGxhbnMpCisJZm9yZWFjaChsLCBtcGxhbi0+ YXAuc3VicGxhbnMpCiAJewogCQlsZmlyc3QobCkgPSBzZXRfcGxhbl9yZWZzKHJvb3QsIChQbGFu ICopIGxmaXJzdChsKSwgcnRvZmZzZXQpOwogCX0KQEAgLTE5NzUsMTEgKzE5NzUsMTEgQEAgc2V0 X21lcmdlYXBwZW5kX3JlZmVyZW5jZXMoUGxhbm5lckluZm8gKnJvb3QsCiAJICogbXVsdGlwbGUg dGltZXMuICAoSWYgeW91IGNoYW5nZSB0aGVzZSBydWxlcywgdXBkYXRlCiAJICogY3JlYXRlX21l cmdlX2FwcGVuZF9wYXRoIHRvIG1hdGNoLikKIAkgKi8KLQlpZiAobGlzdF9sZW5ndGgobXBsYW4t Pm1lcmdlcGxhbnMpID09IDEpCisJaWYgKGxpc3RfbGVuZ3RoKG1wbGFuLT5hcC5zdWJwbGFucykg PT0gMSkKIAl7Ci0JCVBsYW4JICAgKnAgPSAoUGxhbiAqKSBsaW5pdGlhbChtcGxhbi0+bWVyZ2Vw bGFucyk7CisJCVBsYW4JICAgKnAgPSAoUGxhbiAqKSBsaW5pdGlhbChtcGxhbi0+YXAuc3VicGxh bnMpOwogCi0JCWlmIChwLT5wYXJhbGxlbF9hd2FyZSA9PSBtcGxhbi0+cGxhbi5wYXJhbGxlbF9h d2FyZSkKKwkJaWYgKHAtPnBhcmFsbGVsX2F3YXJlID09IG1wbGFuLT5hcC5wbGFuLnBhcmFsbGVs X2F3YXJlKQogCQl7CiAJCQlQbGFuCSAgICpyZXN1bHQ7CiAKQEAgLTE5ODcsNyArMTk4Nyw3IEBA IHNldF9tZXJnZWFwcGVuZF9yZWZlcmVuY2VzKFBsYW5uZXJJbmZvICpyb290LAogCiAJCQkvKiBS ZW1lbWJlciB0aGF0IHdlIHJlbW92ZWQgYSBNZXJnZUFwcGVuZCAqLwogCQkJcmVjb3JkX2VsaWRl ZF9ub2RlKHJvb3QtPmdsb2IsIHAtPnBsYW5fbm9kZV9pZCwgVF9NZXJnZUFwcGVuZCwKLQkJCQkJ CQkgICBvZmZzZXRfcmVsaWRfc2V0KG1wbGFuLT5hcHByZWxpZHMsIHJ0b2Zmc2V0KSk7CisJCQkJ CQkJICAgb2Zmc2V0X3JlbGlkX3NldChtcGxhbi0+YXAuYXBwcmVsaWRzLCBydG9mZnNldCkpOwog CiAJCQlyZXR1cm4gcmVzdWx0OwogCQl9CkBAIC0yMDAwLDE5ICsyMDAwLDE5IEBAIHNldF9tZXJn ZWFwcGVuZF9yZWZlcmVuY2VzKFBsYW5uZXJJbmZvICpyb290LAogCSAqLwogCXNldF9kdW1teV90 bGlzdF9yZWZlcmVuY2VzKChQbGFuICopIG1wbGFuLCBydG9mZnNldCk7CiAKLQltcGxhbi0+YXBw cmVsaWRzID0gb2Zmc2V0X3JlbGlkX3NldChtcGxhbi0+YXBwcmVsaWRzLCBydG9mZnNldCk7CisJ bXBsYW4tPmFwLmFwcHJlbGlkcyA9IG9mZnNldF9yZWxpZF9zZXQobXBsYW4tPmFwLmFwcHJlbGlk cywgcnRvZmZzZXQpOwogCiAJLyoKIAkgKiBBZGQgUGFydGl0aW9uUHJ1bmVJbmZvLCBpZiBhbnks IHRvIFBsYW5uZXJHbG9iYWwgYW5kIHVwZGF0ZSB0aGUgaW5kZXguCiAJICogQWxzbyB1cGRhdGUg dGhlIFJUIGluZGV4ZXMgcHJlc2VudCBpbiBpdCB0byBhZGQgdGhlIG9mZnNldC4KIAkgKi8KLQlp ZiAobXBsYW4tPnBhcnRfcHJ1bmVfaW5kZXggPj0gMCkKLQkJbXBsYW4tPnBhcnRfcHJ1bmVfaW5k ZXggPQotCQkJcmVnaXN0ZXJfcGFydHBydW5laW5mbyhyb290LCBtcGxhbi0+cGFydF9wcnVuZV9p bmRleCwgcnRvZmZzZXQpOworCWlmIChtcGxhbi0+YXAucGFydF9wcnVuZV9pbmRleCA+PSAwKQor CQltcGxhbi0+YXAucGFydF9wcnVuZV9pbmRleCA9CisJCQlyZWdpc3Rlcl9wYXJ0cHJ1bmVpbmZv KHJvb3QsIG1wbGFuLT5hcC5wYXJ0X3BydW5lX2luZGV4LCBydG9mZnNldCk7CiAKIAkvKiBXZSBk b24ndCBuZWVkIHRvIHJlY3Vyc2UgdG8gbGVmdHRyZWUgb3IgcmlnaHR0cmVlIC4uLiAqLwotCUFz c2VydChtcGxhbi0+cGxhbi5sZWZ0dHJlZSA9PSBOVUxMKTsKLQlBc3NlcnQobXBsYW4tPnBsYW4u cmlnaHR0cmVlID09IE5VTEwpOworCUFzc2VydChtcGxhbi0+YXAucGxhbi5sZWZ0dHJlZSA9PSBO VUxMKTsKKwlBc3NlcnQobXBsYW4tPmFwLnBsYW4ucmlnaHR0cmVlID09IE5VTEwpOwogCiAJcmV0 dXJuIChQbGFuICopIG1wbGFuOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BsYW4vc3Vic2VsZWN0LmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zdWJzZWxlY3Qu YwppbmRleCBkN2YzY2VkZjNkNS4uZDNhYTQ3Y2UzNmQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L29wdGltaXplci9wbGFuL3N1YnNlbGVjdC5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9w bGFuL3N1YnNlbGVjdC5jCkBAIC0yNzY1LDcgKzI3NjUsNyBAQCBmaW5hbGl6ZV9wbGFuKFBsYW5u ZXJJbmZvICpyb290LCBQbGFuICpwbGFuLAogCiAJCWNhc2UgVF9BcHBlbmQ6CiAJCQl7Ci0JCQkJ Zm9yZWFjaChsLCAoKEFwcGVuZCAqKSBwbGFuKS0+YXBwZW5kcGxhbnMpCisJCQkJZm9yZWFjaChs LCAoKEFwcGVuZCAqKSBwbGFuKS0+YXAuc3VicGxhbnMpCiAJCQkJewogCQkJCQljb250ZXh0LnBh cmFtaWRzID0KIAkJCQkJCWJtc19hZGRfbWVtYmVycyhjb250ZXh0LnBhcmFtaWRzLApAQCAtMjc4 MCw3ICsyNzgwLDcgQEAgZmluYWxpemVfcGxhbihQbGFubmVySW5mbyAqcm9vdCwgUGxhbiAqcGxh biwKIAogCQljYXNlIFRfTWVyZ2VBcHBlbmQ6CiAJCQl7Ci0JCQkJZm9yZWFjaChsLCAoKE1lcmdl QXBwZW5kICopIHBsYW4pLT5tZXJnZXBsYW5zKQorCQkJCWZvcmVhY2gobCwgKChNZXJnZUFwcGVu ZCAqKSBwbGFuKS0+YXAuc3VicGxhbnMpCiAJCQkJewogCQkJCQljb250ZXh0LnBhcmFtaWRzID0K IAkJCQkJCWJtc19hZGRfbWVtYmVycyhjb250ZXh0LnBhcmFtaWRzLApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1 bGV1dGlscy5jCmluZGV4IGYxNmYxNTM1Nzg1Li4zOTNhYTE0NDNmMSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9ydWxldXRpbHMuYwpAQCAtNTE2NCw5ICs1MTY0LDkgQEAgc2V0X2RlcGFyc2VfcGxhbihkZXBh cnNlX25hbWVzcGFjZSAqZHBucywgUGxhbiAqcGxhbikKIAkgKiBuYXR1cmFsIGNob2ljZS4KIAkg Ki8KIAlpZiAoSXNBKHBsYW4sIEFwcGVuZCkpCi0JCWRwbnMtPm91dGVyX3BsYW4gPSBsaW5pdGlh bCgoKEFwcGVuZCAqKSBwbGFuKS0+YXBwZW5kcGxhbnMpOworCQlkcG5zLT5vdXRlcl9wbGFuID0g bGluaXRpYWwoKChBcHBlbmQgKikgcGxhbiktPmFwLnN1YnBsYW5zKTsKIAllbHNlIGlmIChJc0Eo cGxhbiwgTWVyZ2VBcHBlbmQpKQotCQlkcG5zLT5vdXRlcl9wbGFuID0gbGluaXRpYWwoKChNZXJn ZUFwcGVuZCAqKSBwbGFuKS0+bWVyZ2VwbGFucyk7CisJCWRwbnMtPm91dGVyX3BsYW4gPSBsaW5p dGlhbCgoKE1lcmdlQXBwZW5kICopIHBsYW4pLT5hcC5zdWJwbGFucyk7CiAJZWxzZQogCQlkcG5z LT5vdXRlcl9wbGFuID0gb3V0ZXJQbGFuKHBsYW4pOwogCkBAIC03OTc0LDEwICs3OTc0LDEwIEBA IHJlc29sdmVfc3BlY2lhbF92YXJubyhOb2RlICpub2RlLCBkZXBhcnNlX2NvbnRleHQgKmNvbnRl eHQsCiAKIAkJaWYgKElzQShkcG5zLT5wbGFuLCBBcHBlbmQpKQogCQkJY29udGV4dC0+YXBwZW5k cGFyZW50cyA9IGJtc191bmlvbihjb250ZXh0LT5hcHBlbmRwYXJlbnRzLAotCQkJCQkJCQkJCQkg ICAoKEFwcGVuZCAqKSBkcG5zLT5wbGFuKS0+YXBwcmVsaWRzKTsKKwkJCQkJCQkJCQkJICAgKChB cHBlbmQgKikgZHBucy0+cGxhbiktPmFwLmFwcHJlbGlkcyk7CiAJCWVsc2UgaWYgKElzQShkcG5z LT5wbGFuLCBNZXJnZUFwcGVuZCkpCiAJCQljb250ZXh0LT5hcHBlbmRwYXJlbnRzID0gYm1zX3Vu aW9uKGNvbnRleHQtPmFwcGVuZHBhcmVudHMsCi0JCQkJCQkJCQkJCSAgICgoTWVyZ2VBcHBlbmQg KikgZHBucy0+cGxhbiktPmFwcHJlbGlkcyk7CisJCQkJCQkJCQkJCSAgICgoTWVyZ2VBcHBlbmQg KikgZHBucy0+cGxhbiktPmFwLmFwcHJlbGlkcyk7CiAKIAkJcHVzaF9jaGlsZF9wbGFuKGRwbnMs IGRwbnMtPm91dGVyX3BsYW4sICZzYXZlX2RwbnMpOwogCQlyZXNvbHZlX3NwZWNpYWxfdmFybm8o KE5vZGUgKikgdGxlLT5leHByLCBjb250ZXh0LApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhl Y3V0b3IvZXhlY0FwcGVuZC5oIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0FwcGVuZC5oCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iNTUwOTM3MzUyNAotLS0gL2Rl di9udWxsCisrKyBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNBcHBlbmQuaApAQCAtMCwwICsx LDYwIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIGV4ZWNBcHBlbmQuaAorICoJCVN1cHBvcnQg ZnVuY3Rpb25zIGZvciBNZXJnZUFwcGVuZCBhbmQgQXBwZW5kIG5vZGVzLgorICoKKyAqIFBvcnRp b25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVu dCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBV bml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJCXNyYy9p bmNsdWRlL2V4ZWN1dG9yL2V4ZWNBcHBlbmQuaAorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKwor I2lmbmRlZiBFWEVDQVBQRU5EX0gKKyNkZWZpbmUgRVhFQ0FQUEVORF9ICisKKyNpbmNsdWRlICJu b2Rlcy9leGVjbm9kZXMuaCIKKwordm9pZAkJRXhlY0luaXRBcHBlbmRlcihBcHBlbmRlclN0YXRl ICogc3RhdGUsCisJCQkJCQkJIEFwcGVuZGVyICogbm9kZSwKKwkJCQkJCQkgRVN0YXRlICplc3Rh dGUsCisJCQkJCQkJIGludCBlZmxhZ3MsCisJCQkJCQkJIGludCBmaXJzdF9wYXJ0aWFsX3BsYW4s CisJCQkJCQkJIGludCAqZmlyc3RfdmFsaWRfcGFydGlhbF9wbGFuKTsKKwordm9pZAkJRXhlY0Vu ZEFwcGVuZGVyKEFwcGVuZGVyU3RhdGUgKiBub2RlKTsKKwordm9pZAkJRXhlY1JlU2NhbkFwcGVu ZGVyKEFwcGVuZGVyU3RhdGUgKiBub2RlKTsKKwordm9pZAkJRXhlY0FwcGVuZGVyQXN5bmNCZWdp bihBcHBlbmRlclN0YXRlICogbm9kZSk7CisKK3ZvaWQJCUV4ZWNBcHBlbmRlckFzeW5jRXZlbnRX YWl0KEFwcGVuZGVyU3RhdGUgKiBub2RlLAorCQkJCQkJCQkJICAgaW50IHRpbWVvdXQsCisJCQkJ CQkJCQkgICB1aW50MzIgd2FpdF9ldmVudF9pbmZvKTsKKworLyogQ29tbW9uIHBhcnQgb2YgY2xh c3NpZnlfbWF0Y2hpbmdfc3VicGxhbnMoKSBmb3IgQXBwZW5kIGFuZCBNZXJnZUFwcGVuZCAqLwor c3RhdGljIGlubGluZSBib29sCitjbGFzc2lmeV9tYXRjaGluZ19zdWJwbGFuc19jb21tb24oQml0 bWFwc2V0ICoqdmFsaWRfc3VicGxhbnMsCisJCQkJCQkJCSAgQml0bWFwc2V0ICphc3luY3BsYW5z LAorCQkJCQkJCQkgIEJpdG1hcHNldCAqKnZhbGlkX2FzeW5jcGxhbnMpCit7CisJQXNzZXJ0KCp2 YWxpZF9hc3luY3BsYW5zID09IE5VTEwpOworCisJLyogQ2hlY2tlZCBieSBjbGFzc2lmeV9tYXRj aGluZ19zdWJwbGFucygpICovCisJQXNzZXJ0KCFibXNfaXNfZW1wdHkoKnZhbGlkX3N1YnBsYW5z KSk7CisKKwkvKiBOb3RoaW5nIHRvIGRvIGlmIHRoZXJlIGFyZSBubyB2YWxpZCBhc3luYyBzdWJw bGFucy4gKi8KKwlpZiAoIWJtc19vdmVybGFwKCp2YWxpZF9zdWJwbGFucywgYXN5bmNwbGFucykp CisJCXJldHVybiBmYWxzZTsKKworCS8qIEdldCB2YWxpZCBhc3luYyBzdWJwbGFucy4gKi8KKwkq dmFsaWRfYXN5bmNwbGFucyA9IGJtc19pbnRlcnNlY3QoYXN5bmNwbGFucywKKwkJCQkJCQkJCSAg KnZhbGlkX3N1YnBsYW5zKTsKKworCS8qIEFkanVzdCB0aGUgdmFsaWQgc3VicGxhbnMgdG8gY29u dGFpbiBzeW5jIHN1YnBsYW5zIG9ubHkuICovCisJKnZhbGlkX3N1YnBsYW5zID0gYm1zX2RlbF9t ZW1iZXJzKCp2YWxpZF9zdWJwbGFucywKKwkJCQkJCQkJCSAgKnZhbGlkX2FzeW5jcGxhbnMpOwor CXJldHVybiB0cnVlOworfQorCisjZW5kaWYJCQkJCQkJLyogRVhFQ0FQUEVORF9IICovCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVz L2V4ZWNub2Rlcy5oCmluZGV4IDEyZTY4MTA1YTA4Li41NDQ5YjNiNmNjMiAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhl Y25vZGVzLmgKQEAgLTE0NzUsNiArMTQ3NSwyNyBAQCB0eXBlZGVmIHN0cnVjdCBNb2RpZnlUYWJs ZVN0YXRlCiAJTGlzdAkgICAqbXRfbWVyZ2VKb2luQ29uZGl0aW9uczsKIH0gTW9kaWZ5VGFibGVT dGF0ZTsKIAordHlwZWRlZiBzdHJ1Y3QgQXBwZW5kZXJTdGF0ZQoreworCVBsYW5TdGF0ZQlwczsJ CQkJLyogaXRzIGZpcnN0IGZpZWxkIGlzIE5vZGVUYWcgKi8KKwlQbGFuU3RhdGUgKipwbGFuczsJ CQkvKiBhcnJheSBvZiBQbGFuU3RhdGVzIGZvciBteSBpbnB1dHMgKi8KKwlpbnQJCQlucGxhbnM7 CisKKwkvKiBBc3luY2hyb25vdXMgZXhlY3V0aW9uIHN0YXRlICovCisJQml0bWFwc2V0ICAqYXN5 bmNwbGFuczsJCS8qIGFzeW5jaHJvbm91cyBwbGFucyBpbmRleGVzICovCisJaW50CQkJbmFzeW5j cGxhbnM7CS8qICMgb2YgYXN5bmNocm9ub3VzIHBsYW5zICovCisJQXN5bmNSZXF1ZXN0ICoqYXN5 bmNyZXF1ZXN0czsJLyogYXJyYXkgb2YgQXN5bmNSZXF1ZXN0cyAqLworCVR1cGxlVGFibGVTbG90 ICoqYXN5bmNyZXN1bHRzOwkvKiB1bnJldHVybmVkIHJlc3VsdHMgb2YgYXN5bmMgcGxhbnMgKi8K KwlCaXRtYXBzZXQgICpuZWVkcmVxdWVzdDsJLyogYXN5bmNocm9ub3VzIHBsYW5zIG5lZWRpbmcg YSBuZXcgcmVxdWVzdCAqLworCXN0cnVjdCBXYWl0RXZlbnRTZXQgKmV2ZW50c2V0OwkvKiBXYWl0 RXZlbnRTZXQgZm9yIGZpbGUgZGVzY3JpcHRvciB3YWl0cyAqLworCisJLyogUGFydGl0aW9uIHBy dW5pbmcgc3RhdGUgKi8KKwlzdHJ1Y3QgUGFydGl0aW9uUHJ1bmVTdGF0ZSAqcHJ1bmVfc3RhdGU7 CisJYm9vbAkJdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZDsKKwlCaXRtYXBzZXQgICp2YWxpZF9z dWJwbGFuczsKKwlCaXRtYXBzZXQgICp2YWxpZF9hc3luY3BsYW5zOwkvKiB2YWxpZCBhc3luY2hy b25vdXMgcGxhbnMgaW5kZXhlcyAqLworfQkJCUFwcGVuZGVyU3RhdGU7CisKIC8qIC0tLS0tLS0t LS0tLS0tLS0KICAqCSBBcHBlbmRTdGF0ZSBpbmZvcm1hdGlvbgogICoKQEAgLTE0OTYsMzEgKzE1 MTcsMjAgQEAgc3RydWN0IFBhcnRpdGlvblBydW5lU3RhdGU7CiAKIHN0cnVjdCBBcHBlbmRTdGF0 ZQogewotCVBsYW5TdGF0ZQlwczsJCQkJLyogaXRzIGZpcnN0IGZpZWxkIGlzIE5vZGVUYWcgKi8K LQlQbGFuU3RhdGUgKiphcHBlbmRwbGFuczsJLyogYXJyYXkgb2YgUGxhblN0YXRlcyBmb3IgbXkg aW5wdXRzICovCi0JaW50CQkJYXNfbnBsYW5zOworCUFwcGVuZGVyU3RhdGUgYXM7CisKIAlpbnQJ CQlhc193aGljaHBsYW47CiAJYm9vbAkJYXNfYmVndW47CQkvKiBmYWxzZSBtZWFucyBuZWVkIHRv IGluaXRpYWxpemUgKi8KLQlCaXRtYXBzZXQgICphc19hc3luY3BsYW5zOwkvKiBhc3luY2hyb25v dXMgcGxhbnMgaW5kZXhlcyAqLwotCWludAkJCWFzX25hc3luY3BsYW5zOyAvKiAjIG9mIGFzeW5j aHJvbm91cyBwbGFucyAqLwotCUFzeW5jUmVxdWVzdCAqKmFzX2FzeW5jcmVxdWVzdHM7CS8qIGFy cmF5IG9mIEFzeW5jUmVxdWVzdHMgKi8KLQlUdXBsZVRhYmxlU2xvdCAqKmFzX2FzeW5jcmVzdWx0 czsJLyogdW5yZXR1cm5lZCByZXN1bHRzIG9mIGFzeW5jIHBsYW5zICovCi0JaW50CQkJYXNfbmFz eW5jcmVzdWx0czsJLyogIyBvZiB2YWxpZCBlbnRyaWVzIGluIGFzX2FzeW5jcmVzdWx0cyAqLwot CWJvb2wJCWFzX3N5bmNkb25lOwkvKiB0cnVlIGlmIGFsbCBzeW5jaHJvbm91cyBwbGFucyBkb25l IGluCi0JCQkJCQkJCSAqIGFzeW5jaHJvbm91cyBtb2RlLCBlbHNlIGZhbHNlICovCisJaW50CQkJ YXNfbmFzeW5jcmVzdWx0czsJLyogIyBvZiB2YWxpZCBlbnRyaWVzIGluIGFzeW5jcmVzdWx0cyAq LworCWJvb2wJCWFzX3N5bmNkb25lOwkvKiBhbGwgc3luYyBwbGFucyBkb25lIGluIGFzeW5jIG1v ZGU/ICovCiAJaW50CQkJYXNfbmFzeW5jcmVtYWluOwkvKiAjIG9mIHJlbWFpbmluZyBhc3luY2hy b25vdXMgcGxhbnMgKi8KLQlCaXRtYXBzZXQgICphc19uZWVkcmVxdWVzdDsgLyogYXN5bmNocm9u b3VzIHBsYW5zIG5lZWRpbmcgYSBuZXcgcmVxdWVzdCAqLwotCXN0cnVjdCBXYWl0RXZlbnRTZXQg KmFzX2V2ZW50c2V0OwkvKiBXYWl0RXZlbnRTZXQgdXNlZCB0byBjb25maWd1cmUgZmlsZQotCQkJ CQkJCQkJCSAqIGRlc2NyaXB0b3Igd2FpdCBldmVudHMgKi8KLQlpbnQJCQlhc19maXJzdF9wYXJ0 aWFsX3BsYW47CS8qIEluZGV4IG9mICdhcHBlbmRwbGFucycgY29udGFpbmluZwotCQkJCQkJCQkJ CSAqIHRoZSBmaXJzdCBwYXJ0aWFsIHBsYW4gKi8KLQlQYXJhbGxlbEFwcGVuZFN0YXRlICphc19w c3RhdGU7IC8qIHBhcmFsbGVsIGNvb3JkaW5hdGlvbiBpbmZvICovCi0JU2l6ZQkJcHN0YXRlX2xl bjsJCS8qIHNpemUgb2YgcGFyYWxsZWwgY29vcmRpbmF0aW9uIGluZm8gKi8KLQlzdHJ1Y3QgUGFy dGl0aW9uUHJ1bmVTdGF0ZSAqYXNfcHJ1bmVfc3RhdGU7Ci0JYm9vbAkJYXNfdmFsaWRfc3VicGxh bnNfaWRlbnRpZmllZDsJLyogaXMgYXNfdmFsaWRfc3VicGxhbnMgdmFsaWQ/ICovCi0JQml0bWFw c2V0ICAqYXNfdmFsaWRfc3VicGxhbnM7Ci0JQml0bWFwc2V0ICAqYXNfdmFsaWRfYXN5bmNwbGFu czsJLyogdmFsaWQgYXN5bmNocm9ub3VzIHBsYW5zIGluZGV4ZXMgKi8KLQlib29sCQkoKmNob29z ZV9uZXh0X3N1YnBsYW4pIChBcHBlbmRTdGF0ZSAqKTsKKwlpbnQJCQlhc19maXJzdF9wYXJ0aWFs X3BsYW47CisKKwkvKiBQYXJhbGxlbCBhcHBlbmQgc3BlY2lmaWMgKi8KKwlQYXJhbGxlbEFwcGVu ZFN0YXRlICphc19wc3RhdGU7CisJU2l6ZQkJcHN0YXRlX2xlbjsKKworCWJvb2wJCSgqY2hvb3Nl X25leHRfc3VicGxhbikgKHN0cnVjdCBBcHBlbmRTdGF0ZSAqKTsKIH07CiAKIC8qIC0tLS0tLS0t LS0tLS0tLS0KQEAgLTE1NDAsMjcgKzE1NTAsMTcgQEAgc3RydWN0IEFwcGVuZFN0YXRlCiAgKi8K IHR5cGVkZWYgc3RydWN0IE1lcmdlQXBwZW5kU3RhdGUKIHsKLQlQbGFuU3RhdGUJcHM7CQkJCS8q IGl0cyBmaXJzdCBmaWVsZCBpcyBOb2RlVGFnICovCi0JUGxhblN0YXRlICoqbWVyZ2VwbGFuczsJ CS8qIGFycmF5IG9mIFBsYW5TdGF0ZXMgZm9yIG15IGlucHV0cyAqLwotCWludAkJCW1zX25wbGFu czsKKwlBcHBlbmRlclN0YXRlIG1zOworCiAJaW50CQkJbXNfbmtleXM7CiAJU29ydFN1cHBvcnQg bXNfc29ydGtleXM7CS8qIGFycmF5IG9mIGxlbmd0aCBtc19ua2V5cyAqLwogCVR1cGxlVGFibGVT bG90ICoqbXNfc2xvdHM7CS8qIGFycmF5IG9mIGxlbmd0aCBtc19ucGxhbnMgKi8KIAlzdHJ1Y3Qg YmluYXJ5aGVhcCAqbXNfaGVhcDsgLyogYmluYXJ5IGhlYXAgb2Ygc2xvdCBpbmRpY2VzICovCiAJ Ym9vbAkJbXNfaW5pdGlhbGl6ZWQ7IC8qIGFyZSBzdWJwbGFucyBzdGFydGVkPyAqLwotCUJpdG1h cHNldCAgKm1zX2FzeW5jcGxhbnM7CS8qIGFzeW5jaHJvbm91cyBwbGFucyBpbmRleGVzICovCi0J aW50CQkJbXNfbmFzeW5jcGxhbnM7IC8qICMgb2YgYXN5bmNocm9ub3VzIHBsYW5zICovCi0JQXN5 bmNSZXF1ZXN0ICoqbXNfYXN5bmNyZXF1ZXN0czsJLyogYXJyYXkgb2YgQXN5bmNSZXF1ZXN0cyAq LwotCVR1cGxlVGFibGVTbG90ICoqbXNfYXN5bmNyZXN1bHRzOwkvKiB1bnJldHVybmVkIHJlc3Vs dHMgb2YgYXN5bmMgcGxhbnMgKi8KKworCS8qIE1lcmdlLXNwZWNpZmljIGFzeW5jIHRyYWNraW5n ICovCiAJQml0bWFwc2V0ICAqbXNfaGFzX2FzeW5jcmVzdWx0czsJLyogcGxhbnMgd2hpY2ggaGF2 ZSBhc3luYyByZXN1bHRzICovCiAJQml0bWFwc2V0ICAqbXNfYXN5bmNyZW1haW47IC8qIHJlbWFp bmluZyBhc3luY2hyb25vdXMgcGxhbnMgKi8KLQlCaXRtYXBzZXQgICptc19uZWVkcmVxdWVzdDsg LyogYXN5bmNocm9ub3VzIHBsYW5zIG5lZWRpbmcgYSBuZXcgcmVxdWVzdCAqLwotCXN0cnVjdCBX YWl0RXZlbnRTZXQgKm1zX2V2ZW50c2V0OwkvKiBXYWl0RXZlbnRTZXQgdXNlZCB0byBjb25maWd1 cmUgZmlsZQotCQkJCQkJCQkJCSAqIGRlc2NyaXB0b3Igd2FpdCBldmVudHMgKi8KLQlzdHJ1Y3Qg UGFydGl0aW9uUHJ1bmVTdGF0ZSAqbXNfcHJ1bmVfc3RhdGU7Ci0JYm9vbAkJbXNfdmFsaWRfc3Vi cGxhbnNfaWRlbnRpZmllZDsJLyogaXMgbXNfdmFsaWRfc3VicGxhbnMgdmFsaWQ/ICovCi0JQml0 bWFwc2V0ICAqbXNfdmFsaWRfc3VicGxhbnM7Ci0JQml0bWFwc2V0ICAqbXNfdmFsaWRfYXN5bmNw bGFuczsJLyogdmFsaWQgYXN5bmNocm9ub3VzIHBsYW5zIGluZGV4ZXMgKi8KIH0gTWVyZ2VBcHBl bmRTdGF0ZTsKIAogLyogR2V0dGVycyBmb3IgQXBwZW5kU3RhdGUgYW5kIE1lcmdlQXBwZW5kU3Rh dGUgKi8KQEAgLTE1NzAsOSArMTU3MCw5IEBAIEdldEFwcGVuZEV2ZW50U2V0KFBsYW5TdGF0ZSAq cHMpCiAJQXNzZXJ0KElzQShwcywgQXBwZW5kU3RhdGUpIHx8IElzQShwcywgTWVyZ2VBcHBlbmRT dGF0ZSkpOwogCiAJaWYgKElzQShwcywgQXBwZW5kU3RhdGUpKQotCQlyZXR1cm4gKChBcHBlbmRT dGF0ZSAqKSBwcyktPmFzX2V2ZW50c2V0OworCQlyZXR1cm4gKChBcHBlbmRTdGF0ZSAqKSBwcykt PmFzLmV2ZW50c2V0OwogCWVsc2UKLQkJcmV0dXJuICgoTWVyZ2VBcHBlbmRTdGF0ZSAqKSBwcykt Pm1zX2V2ZW50c2V0OworCQlyZXR1cm4gKChNZXJnZUFwcGVuZFN0YXRlICopIHBzKS0+bXMuZXZl bnRzZXQ7CiB9CiAKIHN0YXRpYyBpbmxpbmUgQml0bWFwc2V0ICoKQEAgLTE1ODEsMzQgKzE1ODEs OSBAQCBHZXROZWVkUmVxdWVzdChQbGFuU3RhdGUgKnBzKQogCUFzc2VydChJc0EocHMsIEFwcGVu ZFN0YXRlKSB8fCBJc0EocHMsIE1lcmdlQXBwZW5kU3RhdGUpKTsKIAogCWlmIChJc0EocHMsIEFw cGVuZFN0YXRlKSkKLQkJcmV0dXJuICgoQXBwZW5kU3RhdGUgKikgcHMpLT5hc19uZWVkcmVxdWVz dDsKKwkJcmV0dXJuICgoQXBwZW5kU3RhdGUgKikgcHMpLT5hcy5uZWVkcmVxdWVzdDsKIAllbHNl Ci0JCXJldHVybiAoKE1lcmdlQXBwZW5kU3RhdGUgKikgcHMpLT5tc19uZWVkcmVxdWVzdDsKLX0K LQotLyogQ29tbW9uIHBhcnQgb2YgY2xhc3NpZnlfbWF0Y2hpbmdfc3VicGxhbnMoKSBmb3IgQXBw ZW5kIGFuZCBNZXJnZUFwcGVuZCAqLwotc3RhdGljIGlubGluZSBib29sCi1jbGFzc2lmeV9tYXRj aGluZ19zdWJwbGFuc19jb21tb24oQml0bWFwc2V0ICoqdmFsaWRfc3VicGxhbnMsCi0JCQkJCQkJ CSAgQml0bWFwc2V0ICphc3luY3BsYW5zLAotCQkJCQkJCQkgIEJpdG1hcHNldCAqKnZhbGlkX2Fz eW5jcGxhbnMpCi17Ci0JQXNzZXJ0KCp2YWxpZF9hc3luY3BsYW5zID09IE5VTEwpOwotCi0JLyog Q2hlY2tlZCBieSBjbGFzc2lmeV9tYXRjaGluZ19zdWJwbGFucygpICovCi0JQXNzZXJ0KCFibXNf aXNfZW1wdHkoKnZhbGlkX3N1YnBsYW5zKSk7Ci0KLQkvKiBOb3RoaW5nIHRvIGRvIGlmIHRoZXJl IGFyZSBubyB2YWxpZCBhc3luYyBzdWJwbGFucy4gKi8KLQlpZiAoIWJtc19vdmVybGFwKCp2YWxp ZF9zdWJwbGFucywgYXN5bmNwbGFucykpCi0JCXJldHVybiBmYWxzZTsKLQotCS8qIEdldCB2YWxp ZCBhc3luYyBzdWJwbGFucy4gKi8KLQkqdmFsaWRfYXN5bmNwbGFucyA9IGJtc19pbnRlcnNlY3Qo YXN5bmNwbGFucywKLQkJCQkJCQkJCSAgKnZhbGlkX3N1YnBsYW5zKTsKLQotCS8qIEFkanVzdCB0 aGUgdmFsaWQgc3VicGxhbnMgdG8gY29udGFpbiBzeW5jIHN1YnBsYW5zIG9ubHkuICovCi0JKnZh bGlkX3N1YnBsYW5zID0gYm1zX2RlbF9tZW1iZXJzKCp2YWxpZF9zdWJwbGFucywKLQkJCQkJCQkJ CSAgKnZhbGlkX2FzeW5jcGxhbnMpOwotCXJldHVybiB0cnVlOworCQlyZXR1cm4gKChNZXJnZUFw cGVuZFN0YXRlICopIHBzKS0+bXMubmVlZHJlcXVlc3Q7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0t LS0KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oIGIvc3JjL2luY2x1 ZGUvbm9kZXMvcGxhbm5vZGVzLmgKaW5kZXggOGM5MzIxYWFiOGMuLjRkNGUyOGQ4ODk2IDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9u b2Rlcy9wbGFubm9kZXMuaApAQCAtMzg4LDYgKzM4OCwyMiBAQCB0eXBlZGVmIHN0cnVjdCBNb2Rp ZnlUYWJsZQogCiBzdHJ1Y3QgUGFydGl0aW9uUHJ1bmVJbmZvOwkJLyogZm9yd2FyZCByZWZlcmVu Y2UgdG8gc3RydWN0IGJlbG93ICovCiAKK3R5cGVkZWYgc3RydWN0IEFwcGVuZGVyCit7CisJUGxh bgkJcGxhbjsJCQkvKiBpdHMgZmlyc3QgZmllbGQgaXMgTm9kZVRhZyAqLworCUJpdG1hcHNldCAg KmFwcHJlbGlkczsJCS8qIFJUSXMgb2YgYXBwZW5kcmVsKHMpIGZvcm1lZCBieSB0aGlzIG5vZGUg Ki8KKwlMaXN0CSAgICpjaGlsZF9hcHBlbmRfcmVsaWRfc2V0czsJLyogc2V0cyBvZiBSVElzIG9m IGFwcGVuZHJlbHMKKwkJCQkJCQkJCQkJICogY29uc29saWRhdGVkIGludG8gdGhpcyBub2RlICov CisJTGlzdAkgICAqc3VicGxhbnM7CQkvKiBMaXN0IG9mIFBsYW5zIChmb3JtZXJseQorCQkJCQkJ CQkgKiBhcHBlbmRwbGFucy9tZXJnZXBsYW5zKSAqLworCisJLyoKKwkgKiBJbmRleCBpbnRvIFBs YW5uZWRTdG10LnBhcnRQcnVuZUluZm9zIGFuZCBwYXJhbGxlbCBsaXN0cyBpbiBFU3RhdGUuIFNl dAorCSAqIHRvIC0xIGlmIG5vIHJ1bi10aW1lIHBydW5pbmcgaXMgdXNlZC4KKwkgKi8KKwlpbnQJ CQlwYXJ0X3BydW5lX2luZGV4OworfQkJCUFwcGVuZGVyOworCiAvKiAtLS0tLS0tLS0tLS0tLS0t CiAgKgkgQXBwZW5kIG5vZGUgLQogICoJCUdlbmVyYXRlIHRoZSBjb25jYXRlbmF0aW9uIG9mIHRo ZSByZXN1bHRzIG9mIHN1Yi1wbGFucy4KQEAgLTM5NSwzMiArNDExLDE2IEBAIHN0cnVjdCBQYXJ0 aXRpb25QcnVuZUluZm87CQkvKiBmb3J3YXJkIHJlZmVyZW5jZSB0byBzdHJ1Y3QgYmVsb3cgKi8K ICAqLwogdHlwZWRlZiBzdHJ1Y3QgQXBwZW5kCiB7Ci0JUGxhbgkJcGxhbjsKLQotCS8qIFJUSXMg b2YgYXBwZW5kcmVsKHMpIGZvcm1lZCBieSB0aGlzIG5vZGUgKi8KLQlCaXRtYXBzZXQgICphcHBy ZWxpZHM7Ci0KLQkvKiBzZXRzIG9mIFJUSXMgb2YgYXBwZW5kcmVscyBjb25zb2xpZGF0ZWQgaW50 byB0aGlzIG5vZGUgKi8KLQlMaXN0CSAgICpjaGlsZF9hcHBlbmRfcmVsaWRfc2V0czsKLQotCS8q IHBsYW5zIHRvIHJ1biAqLwotCUxpc3QJICAgKmFwcGVuZHBsYW5zOworCUFwcGVuZGVyCWFwOwog CiAJLyogIyBvZiBhc3luY2hyb25vdXMgcGxhbnMgKi8KIAlpbnQJCQluYXN5bmNwbGFuczsKIAog CS8qCi0JICogQWxsICdhcHBlbmRwbGFucycgcHJlY2VkaW5nIHRoaXMgaW5kZXggYXJlIG5vbi1w YXJ0aWFsIHBsYW5zLiBBbGwKLQkgKiAnYXBwZW5kcGxhbnMnIGZyb20gdGhpcyBpbmRleCBvbndh cmRzIGFyZSBwYXJ0aWFsIHBsYW5zLgorCSAqIEFsbCAnc3VicGxhbnMnIHByZWNlZGluZyB0aGlz IGluZGV4IGFyZSBub24tcGFydGlhbCBwbGFucy4gQWxsCisJICogJ3N1YnBsYW5zJyBmcm9tIHRo aXMgaW5kZXggb253YXJkcyBhcmUgcGFydGlhbCBwbGFucy4KIAkgKi8KIAlpbnQJCQlmaXJzdF9w YXJ0aWFsX3BsYW47Ci0KLQkvKgotCSAqIEluZGV4IGludG8gUGxhbm5lZFN0bXQucGFydFBydW5l SW5mb3MgYW5kIHBhcmFsbGVsIGxpc3RzIGluIEVTdGF0ZToKLQkgKiBlc19wYXJ0X3BydW5lX3N0 YXRlcyBhbmQgZXNfcGFydF9wcnVuZV9yZXN1bHRzLiBTZXQgdG8gLTEgaWYgbm8KLQkgKiBydW4t dGltZSBwcnVuaW5nIGlzIHVzZWQuCi0JICovCi0JaW50CQkJcGFydF9wcnVuZV9pbmRleDsKIH0g QXBwZW5kOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tCkBAIC00MzAsMTYgKzQzMCw3IEBAIHR5cGVk ZWYgc3RydWN0IEFwcGVuZAogICovCiB0eXBlZGVmIHN0cnVjdCBNZXJnZUFwcGVuZAogewotCVBs YW4JCXBsYW47Ci0KLQkvKiBSVElzIG9mIGFwcGVuZHJlbChzKSBmb3JtZWQgYnkgdGhpcyBub2Rl ICovCi0JQml0bWFwc2V0ICAqYXBwcmVsaWRzOwotCi0JLyogc2V0cyBvZiBSVElzIG9mIGFwcGVu ZHJlbHMgY29uc29saWRhdGVkIGludG8gdGhpcyBub2RlICovCi0JTGlzdAkgICAqY2hpbGRfYXBw ZW5kX3JlbGlkX3NldHM7Ci0KLQkvKiBwbGFucyB0byBydW4gKi8KLQlMaXN0CSAgICptZXJnZXBs YW5zOworCUFwcGVuZGVyCWFwOwogCiAJLyogdGhlc2UgZmllbGRzIGFyZSBqdXN0IGxpa2UgdGhl IHNvcnQta2V5IGluZm8gaW4gc3RydWN0IFNvcnQ6ICovCiAKQEAgLTQ1NywxMyArNDQ4LDYgQEAg dHlwZWRlZiBzdHJ1Y3QgTWVyZ2VBcHBlbmQKIAogCS8qIE5VTExTIEZJUlNUL0xBU1QgZGlyZWN0 aW9ucyAqLwogCWJvb2wJICAgKm51bGxzRmlyc3QgcGdfbm9kZV9hdHRyKGFycmF5X3NpemUobnVt Q29scykpOwotCi0JLyoKLQkgKiBJbmRleCBpbnRvIFBsYW5uZWRTdG10LnBhcnRQcnVuZUluZm9z IGFuZCBwYXJhbGxlbCBsaXN0cyBpbiBFU3RhdGU6Ci0JICogZXNfcGFydF9wcnVuZV9zdGF0ZXMg YW5kIGVzX3BhcnRfcHJ1bmVfcmVzdWx0cy4gU2V0IHRvIC0xIGlmIG5vCi0JICogcnVuLXRpbWUg cHJ1bmluZyBpcyB1c2VkLgotCSAqLwotCWludAkJCXBhcnRfcHJ1bmVfaW5kZXg7CiB9IE1lcmdl QXBwZW5kOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tCi0tIAoyLjQzLjAKCg== --=_49b6486fa938655d059949ecccd5e96f--