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 1vqQov-00Aggq-00 for pgsql-hackers@arkaria.postgresql.org; Thu, 12 Feb 2026 07:09:03 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vqQot-007IDI-0l for pgsql-hackers@arkaria.postgresql.org; Thu, 12 Feb 2026 07:09:00 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vqQos-007ID9-0G for pgsql-hackers@lists.postgresql.org; Thu, 12 Feb 2026 07:08:59 +0000 Received: from mail.postgrespro.ru ([93.174.132.70]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1vqQoi-00000000FJT-2RKE for pgsql-hackers@postgresql.org; Thu, 12 Feb 2026 07:08:57 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mx2023; t=1770880125; bh=m447bCqYmJ486NN8DfYdcoPXY0tnMmy6KcGc/H3gwMw=; h=Date:From:To:Cc:Subject:In-Reply-To:References:Message-ID:From; b=7eKaraqoDU2h8ockU07TKeDjt9UFqV0almyF+mPHG4pgyjbFiJdUg6NidUiLbiBun iZjuilbSrOF0f+T1GpEG0MwFN0rxm7KTk1+Lt2e58gnm/yRIxjMmWTlr0LQezoKaiT 09/ls5tkSFv1chdEmP811Yif3bx8jsJC46ZT+wnWZZURCI0mCm1nNQYXE4Z7JEVNGB swRdG1n153WuLtNgNJt5rdYAX5kK4FdcOANov2r5YNmgcryI15ArVPRhp9RJD8wDv0 AgMRKtBVTFnUoLtizkwKwZyNWgAuT5Pon28DPXVZtGfqw4PlpeLntKbiKroCMkdD4A 1FmB4Dhde/e5g== Received: from mail.l.postgrespro.ru (webmail-master-mstn.l.postgrespro.ru [192.168.2.26]) (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 8110160AF6; Thu, 12 Feb 2026 10:08:45 +0300 (MSK) MIME-Version: 1.0 Date: Thu, 12 Feb 2026 10:08:45 +0300 From: Alexander Pyhalov To: Matheus Alcantara Cc: Alena Rybakina , Pgsql Hackers Subject: Re: Asynchronous MergeAppend In-Reply-To: References: <59be194c5a409fb9fc9f2031581b8a44@postgrespro.ru> <764dd8b8-6374-4f5a-aac7-d8e3f6ebe5fd@postgrespro.ru> <159b591411bb2c81332018927acbd509@postgrespro.ru> <2fb1d9923b6995492e7b163e6cb95402@postgrespro.ru> Message-ID: <782a968c8e01ec6db3b2da2120adf73b@postgrespro.ru> X-Sender: a.pyhalov@postgrespro.ru Content-Type: multipart/mixed; boundary="=_97193707b7dcc95945ffded93f09d47d" 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/02/11 23:32:00 #28234100 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 --=_97193707b7dcc95945ffded93f09d47d Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8; format=flowed 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. -- Best regards, Alexander Pyhalov, Postgres Professional --=_97193707b7dcc95945ffded93f09d47d Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v13-0001-mark_async_capable-subpath-should-match-subplan.patch Content-Disposition: attachment; filename=v13-0001-mark_async_capable-subpath-should-match-subplan.patch; size=2420 RnJvbSA1ZjJlNWY4OTk4NzM4NDQ5NWFiNTNlN2Y3ZTc5MzE2ZmYxMzIyODE0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4YW5kZXIgUHloYWxvdiA8YS5weWhhbG92QHBvc3RncmVz cHJvLnJ1PgpEYXRlOiBUaHUsIDEyIEZlYiAyMDI2IDA5OjE3OjM4ICswMzAwClN1YmplY3Q6IFtQ QVRDSCAxLzNdIG1hcmtfYXN5bmNfY2FwYWJsZSgpOiBzdWJwYXRoIHNob3VsZCBtYXRjaCBzdWJw bGFuCgptYXJrX2FzeW5jX2NhcGFibGUoKSBiZWxpZXZlcyB0aGF0IHBhdGggY29ycmVzcG9uZHMg dG8gcGxhbi4gVGhpcyBpcwpub3QgdHJ1ZSB3aGVuIGNyZWF0ZV9bbWVyZ2VfXWFwcGVuZF9wbGFu KCkgaW5zZXJ0cyBzb3J0IG5vZGUuIEluCnRoaXMgY2FzZSBtYXJrX2FzeW5jX2NhcGFibGUoKSBj YW4gdHJlYXQgU29ydCBwbGFuIG5vZGUgYXMgc29tZQpvdGhlciBhbmQgY3Jhc2guIEZpeCB0aGlz IGJ5IGhhbmRsaW5nIHRoZSBTb3J0IG5vZGUgc2VwYXJhdGVseS4KClRoaXMgaXMgbmVlZGVkIHRv IG1ha2UgTWVyZ2VBcHBlbmQgbm9kZSBhc3luYy1jYXBhYmxlIHRoYXQgd2lsbApiZSBpbXBsZW1l bnRlZCBpbiBhIG5leHQgY29tbWl0LgotLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2Ny ZWF0ZXBsYW4uYyB8IDE4ICsrKysrKysrKystLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDEwIGlu c2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3Jl YXRlcGxhbi5jCmluZGV4IDk1OWRmNDNjMzllLi4wOWFiYThhNGJjZiAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCisrKyBiL3NyYy9iYWNrZW5kL29w dGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYwpAQCAtMTEzNywxMCArMTEzNywxMiBAQCBtYXJrX2Fz eW5jX2NhcGFibGVfcGxhbihQbGFuICpwbGFuLCBQYXRoICpwYXRoKQogCQkJCVN1YnF1ZXJ5U2Nh biAqc2Nhbl9wbGFuID0gKFN1YnF1ZXJ5U2NhbiAqKSBwbGFuOwogCiAJCQkJLyoKLQkJCQkgKiBJ ZiB0aGUgZ2VuZXJhdGVkIHBsYW4gbm9kZSBpbmNsdWRlcyBhIGdhdGluZyBSZXN1bHQgbm9kZSwK LQkJCQkgKiB3ZSBjYW4ndCBleGVjdXRlIGl0IGFzeW5jaHJvbm91c2x5LgorCQkJCSAqIENoZWNr IHRoYXQgcGxhbiBpcyByZWFsbHkgYSBTdWJxdWVyeVNjYW4gYmVmb3JlIHVzaW5nIGl0LgorCQkJ CSAqIEl0IGNhbiBiZSBub3QgdHJ1ZSwgaWYgdGhlIGdlbmVyYXRlZCBwbGFuIG5vZGUgaW5jbHVk ZXMgYQorCQkJCSAqIGdhdGluZyBSZXN1bHQgbm9kZSBvciBhIFNvcnQgbm9kZS4gSW4gc3VjaCBj YXNlIHdlIGNhbid0CisJCQkJICogZXhlY3V0ZSBpdCBhc3luY2hyb25vdXNseS4KIAkJCQkgKi8K LQkJCQlpZiAoSXNBKHBsYW4sIFJlc3VsdCkpCisJCQkJaWYgKCFJc0EocGxhbiwgU3VicXVlcnlT Y2FuKSkKIAkJCQkJcmV0dXJuIGZhbHNlOwogCiAJCQkJLyoKQEAgLTExNTgsMTAgKzExNjAsMTAg QEAgbWFya19hc3luY19jYXBhYmxlX3BsYW4oUGxhbiAqcGxhbiwgUGF0aCAqcGF0aCkKIAkJCQlG ZHdSb3V0aW5lICpmZHdyb3V0aW5lID0gcGF0aC0+cGFyZW50LT5mZHdyb3V0aW5lOwogCiAJCQkJ LyoKLQkJCQkgKiBJZiB0aGUgZ2VuZXJhdGVkIHBsYW4gbm9kZSBpbmNsdWRlcyBhIGdhdGluZyBS ZXN1bHQgbm9kZSwKLQkJCQkgKiB3ZSBjYW4ndCBleGVjdXRlIGl0IGFzeW5jaHJvbm91c2x5Lgor CQkJCSAqIElmIHRoZSBnZW5lcmF0ZWQgcGxhbiBub2RlIGluY2x1ZGVzIGEgZ2F0aW5nIFJlc3Vs dCBub2RlIG9yCisJCQkJICogYSBTb3J0IG5vZGUsIHdlIGNhbid0IGV4ZWN1dGUgaXQgYXN5bmNo cm9ub3VzbHkuCiAJCQkJICovCi0JCQkJaWYgKElzQShwbGFuLCBSZXN1bHQpKQorCQkJCWlmIChJ c0EocGxhbiwgUmVzdWx0KSB8fCBJc0EocGxhbiwgU29ydCkpCiAJCQkJCXJldHVybiBmYWxzZTsK IAogCQkJCUFzc2VydChmZHdyb3V0aW5lICE9IE5VTEwpOwpAQCAtMTE3NCw5ICsxMTc2LDkgQEAg bWFya19hc3luY19jYXBhYmxlX3BsYW4oUGxhbiAqcGxhbiwgUGF0aCAqcGF0aCkKIAogCQkJLyoK IAkJCSAqIElmIHRoZSBnZW5lcmF0ZWQgcGxhbiBub2RlIGluY2x1ZGVzIGEgUmVzdWx0IG5vZGUg Zm9yIHRoZQotCQkJICogcHJvamVjdGlvbiwgd2UgY2FuJ3QgZXhlY3V0ZSBpdCBhc3luY2hyb25v dXNseS4KKwkJCSAqIHByb2plY3Rpb24gb3IgYSBTb3J0IG5vZGUsIHdlIGNhbid0IGV4ZWN1dGUg aXQgYXN5bmNocm9ub3VzbHkuCiAJCQkgKi8KLQkJCWlmIChJc0EocGxhbiwgUmVzdWx0KSkKKwkJ CWlmIChJc0EocGxhbiwgUmVzdWx0KSB8fCBJc0EocGxhbiwgU29ydCkpCiAJCQkJcmV0dXJuIGZh bHNlOwogCiAJCQkvKgotLSAKMi40My4wCgo= --=_97193707b7dcc95945ffded93f09d47d Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v13-0002-MergeAppend-should-support-Async-Foreign-Scan-subpla.patch Content-Disposition: attachment; filename*0*=UTF-8''v13-0002-MergeAppend-should-support-Async-Foreign-Scan; filename*1*=-subpla.patch; size=51506 RnJvbSA0ZjUyZTkyMGFjMzY4YTQ4NWZiMjk5MGI4M2UwNmMzNjY1MTY1ZmEwIE1vbiBTZXAgMTcg 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 cmVzX2Zkdy5jCmluZGV4IDM1NzI2ODllMzNiLi42MGU4YjZlN2Q3ZiAxMDA2NDQKLS0tIGEvY29u 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 L3NyYy9zZ21sL2NvbmZpZy5zZ21sCmluZGV4IDZiYzI2OTBjZTA3Li4xNzQ4MzY5ZTYxNyAxMDA2 NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9jb25m aWcuc2dtbApAQCAtNTUzNCw2ICs1NTM0LDIwIEBAIEFOWSA8cmVwbGFjZWFibGUgY2xhc3M9InBh 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 IGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFwcGVuZC5jCmluZGV4IDcxMzhkYzY5MmM2Li5i NTYxOWQ1MjEyOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFwcGVuZC5j CisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBcHBlbmQuYwpAQCAtMTE4NywxMCArMTE4 Nyw3IEBAIEV4ZWNBc3luY0FwcGVuZFJlc3BvbnNlKEFzeW5jUmVxdWVzdCAqYXJlcSkKIHN0YXRp YyB2b2lkCiBjbGFzc2lmeV9tYXRjaGluZ19zdWJwbGFucyhBcHBlbmRTdGF0ZSAqbm9kZSkKIHsK LQlCaXRtYXBzZXQgICp2YWxpZF9hc3luY3BsYW5zOwotCiAJQXNzZXJ0KG5vZGUtPmFzX3ZhbGlk X3N1YnBsYW5zX2lkZW50aWZpZWQpOwotCUFzc2VydChub2RlLT5hc192YWxpZF9hc3luY3BsYW5z ID09IE5VTEwpOwogCiAJLyogTm90aGluZyB0byBkbyBpZiB0aGVyZSBhcmUgbm8gdmFsaWQgc3Vi cGxhbnMuICovCiAJaWYgKGJtc19pc19lbXB0eShub2RlLT5hc192YWxpZF9zdWJwbGFucykpCkBA IC0xMjAwLDIxICsxMTk3LDEwIEBAIGNsYXNzaWZ5X21hdGNoaW5nX3N1YnBsYW5zKEFwcGVuZFN0 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 L29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYwppbmRleCAwOWFiYThhNGJjZi4uZjFmMTc1OWMz YTUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYwor KysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMKQEAgLTE0NjUsNiAr MTQ2NSw3IEBAIGNyZWF0ZV9tZXJnZV9hcHBlbmRfcGxhbihQbGFubmVySW5mbyAqcm9vdCwgTWVy Z2VBcHBlbmRQYXRoICpiZXN0X3BhdGgsCiAJTGlzdAkgICAqc3VicGxhbnMgPSBOSUw7CiAJTGlz dENlbGwgICAqc3VicGF0aHM7CiAJUmVsT3B0SW5mbyAqcmVsID0gYmVzdF9wYXRoLT5wYXRoLnBh cmVudDsKKwlib29sCQljb25zaWRlcl9hc3luYyA9IGZhbHNlOwogCiAJLyoKIAkgKiBXZSBkb24n dCBoYXZlIHRoZSBhY3R1YWwgY3JlYXRpb24gb2YgdGhlIE1lcmdlQXBwZW5kIG5vZGUgc3BsaXQg b3V0CkBAIC0xNDgwLDYgKzE0ODEsMTAgQEAgY3JlYXRlX21lcmdlX2FwcGVuZF9wbGFuKFBsYW5u ZXJJbmZvICpyb290LCBNZXJnZUFwcGVuZFBhdGggKmJlc3RfcGF0aCwKIAlub2RlLT5hcHByZWxp ZHMgPSByZWwtPnJlbGlkczsKIAlub2RlLT5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyA9IGJlc3Rf cGF0aC0+Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHM7CiAKKwljb25zaWRlcl9hc3luYyA9IChlbmFi bGVfYXN5bmNfbWVyZ2VfYXBwZW5kICYmCisJCQkJCSAgIWJlc3RfcGF0aC0+cGF0aC5wYXJhbGxl bF9zYWZlICYmCisJCQkJCSAgbGlzdF9sZW5ndGgoYmVzdF9wYXRoLT5zdWJwYXRocykgPiAxKTsK KwogCS8qCiAJICogQ29tcHV0ZSBzb3J0IGNvbHVtbiBpbmZvLCBhbmQgYWRqdXN0IE1lcmdlQXBw ZW5kJ3MgdGxpc3QgYXMgbmVlZGVkLgogCSAqIEJlY2F1c2Ugd2UgcGFzcyBhZGp1c3RfdGxpc3Rf aW5fcGxhY2UgPSB0cnVlLCB3ZSBtYXkgaWdub3JlIHRoZQpAQCAtMTU4MCw2ICsxNTg1LDEwIEBA IGNyZWF0ZV9tZXJnZV9hcHBlbmRfcGxhbihQbGFubmVySW5mbyAqcm9vdCwgTWVyZ2VBcHBlbmRQ YXRoICpiZXN0X3BhdGgsCiAJCQlzdWJwbGFuID0gc29ydF9wbGFuOwogCQl9CiAKKwkJLyogSWYg bmVlZGVkLCBjaGVjayB0byBzZWUgaWYgc3VicGxhbiBjYW4gYmUgZXhlY3V0ZWQgYXN5bmNocm9u b3VzbHkgKi8KKwkJaWYgKGNvbnNpZGVyX2FzeW5jKQorCQkJbWFya19hc3luY19jYXBhYmxlX3Bs YW4oc3VicGxhbiwgc3VicGF0aCk7CisKIAkJc3VicGxhbnMgPSBsYXBwZW5kKHN1YnBsYW5zLCBz dWJwbGFuKTsKIAl9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3Bh cmFtZXRlcnMuZGF0IGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQK aW5kZXggMjcxYzAzMzk1MmUuLmUxYzkwY2U2OWVhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91 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 cy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKaW5kZXggZjgwNTNkOWU1NzIuLjI4 Mjc0N2VlMTdiIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAorKysg Yi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaApAQCAtMTU0NywxMCArMTU0Nyw2OSBAQCB0 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= --=_97193707b7dcc95945ffded93f09d47d Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v13-0003-Common-infrastructure-to-MergeAppend-and-Append-node.patch Content-Disposition: attachment; filename*0*=UTF-8''v13-0003-Common-infrastructure-to-MergeAppend-and-Appe; filename*1*=nd-node.patch; size=90973 RnJvbSA0ZmI4MDc0YTExMzVhYTk0ZjcxOTAwN2ZlYzA2ZGU2ODliZjJlYWM5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXRoZXVzIEFsY2FudGFyYSA8bXRocy5kZXZAcG0ubWU+CkRh dGU6IFR1ZSwgMzAgRGVjIDIwMjUgMTQ6MzI6MjAgKzAzMDAKU3ViamVjdDogW1BBVENIIDMvM10g Q29tbW9uIGluZnJhc3RydWN0dXJlIHRvIE1lcmdlQXBwZW5kIGFuZCBBcHBlbmQgbm9kZXMKClRo aXMgY29tbWl0IGludHJvZHVjZXMgdGhlIGV4ZWNBcHBlbmQuYyBmaWxlIHRvIGNlbnRyYWxpemUg ZXhlY3V0b3IKb3BlcmF0aW9ucyB0aGF0IGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBNZXJnZUFwcGVu ZCBhbmQgQXBwZW5kIG5vZGVzLgoKVGhlIGxvZ2ljIGZvciBpbml0aWFsaXppbmcgYW5kIGVuZGlu ZyB0aGUgbm9kZXMsIGFzIHdlbGwgYXMgaW5pdGlhbGl6aW5nCmFzeW5jaHJvbm91cyBleGVjdXRp b24sIGlzIHZlcnkgc2ltaWxhciBmb3IgYm90aCBNZXJnZUFwcGVuZCBhbmQgQXBwZW5kLgpUbyBy ZWR1Y2UgcmVkdW5kYW5jeSwgdGhlIGR1cGxpY2F0ZWQgY29kZSBoYXMgYmVlbiBtb3ZlZCB0byBl eGVjQXBwZW5kLmMKc28gdGhhdCB0aGVzZSBub2RlcyBjYW4gcmV1c2UgdGhlIGNvbW1vbiBpbXBs ZW1lbnRhdGlvbi4KClRoZSBjb2RlIHJlc3BvbnNpYmxlIGZvciBhY3R1YWxseSBmZXRjaGluZyB0 aGUgdHVwbGVzIHJlbWFpbnMgc3BlY2lmaWMKdG8gZWFjaCBub2RlIGFuZCB3YXMgbm90IHJlZmFj dG9yZWQgaW50byBleGVjQXBwZW5kLmMgdG8gcHJlc2VydmUgdGhlCnVuaXF1ZSBleGVjdXRpb24g cmVxdWlyZW1lbnRzIG9mIGVhY2ggbm9kZSB0eXBlLgotLS0KIGNvbnRyaWIvcGdfb3ZlcmV4cGxh aW4vcGdfb3ZlcmV4cGxhaW4uYyB8ICAgOCArLQogY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdy ZXNfZmR3LmMgICAgIHwgICA4ICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMgICAg ICAgICAgfCAgMjYgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL01ha2VmaWxlICAgICAgICAgICB8 ICAgMSArCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjQW1pLmMgICAgICAgICAgfCAgIDIgKy0K IHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNBcHBlbmQuYyAgICAgICB8IDQwOCArKysrKysrKysr KysrKysrKysrCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjQ3VycmVudC5jICAgICAgfCAgIDQg Ky0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQcm9jbm9kZS5jICAgICB8ICAgOCArLQogc3Jj L2JhY2tlbmQvZXhlY3V0b3IvbWVzb24uYnVpbGQgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5k L2V4ZWN1dG9yL25vZGVBcHBlbmQuYyAgICAgICB8IDQ5NyArKysrKy0tLS0tLS0tLS0tLS0tLS0t LS0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5jICB8IDQxNiArKystLS0t LS0tLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvbm9kZXMvbm9kZUZ1bmNzLmMgICAgICAgICAgIHwg ICA4ICstCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMgfCAgMzggKy0K IHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYyAgICB8ICA0OCArLS0KIHNyYy9i YWNrZW5kL29wdGltaXplci9wbGFuL3N1YnNlbGVjdC5jICB8ICAgNCArLQogc3JjL2JhY2tlbmQv dXRpbHMvYWR0L3J1bGV1dGlscy5jICAgICAgIHwgICA4ICstCiBzcmMvaW5jbHVkZS9leGVjdXRv ci9leGVjQXBwZW5kLmggICAgICAgfCAgNjAgKysrCiBzcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9k ZXMuaCAgICAgICAgICAgfCAxMDUgKystLS0KIHNyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5o ICAgICAgICAgICB8ICA1NiArLS0KIDE5IGZpbGVzIGNoYW5nZWQsIDc1MiBpbnNlcnRpb25zKCsp LCA5NTQgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvZXhlY3V0 b3IvZXhlY0FwcGVuZC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1ZGUvZXhlY3V0b3Iv ZXhlY0FwcGVuZC5oCgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19vdmVy ZXhwbGFpbi5jIGIvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19vdmVyZXhwbGFpbi5jCmluZGV4 IDM2ZTZhYWMwZTJjLi5lOGNiMmEzM2QzZSAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ19vdmVyZXhw bGFpbi9wZ19vdmVyZXhwbGFpbi5jCisrKyBiL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vcGdfb3Zl cmV4cGxhaW4uYwpAQCAtMjMyLDE4ICsyMzIsMTggQEAgb3ZlcmV4cGxhaW5fcGVyX25vZGVfaG9v ayhQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgTGlzdCAqYW5jZXN0b3JzLAogCQkJCWJyZWFrOwogCQkJ Y2FzZSBUX0FwcGVuZDoKIAkJCQlvdmVyZXhwbGFpbl9iaXRtYXBzZXQoIkFwcGVuZCBSVElzIiwK LQkJCQkJCQkJCSAgKChBcHBlbmQgKikgcGxhbiktPmFwcHJlbGlkcywKKwkJCQkJCQkJCSAgKChB cHBlbmQgKikgcGxhbiktPmFwLmFwcHJlbGlkcywKIAkJCQkJCQkJCSAgZXMpOwogCQkJCW92ZXJl eHBsYWluX2JpdG1hcHNldF9saXN0KCJDaGlsZCBBcHBlbmQgUlRJcyIsCi0JCQkJCQkJCQkJICAg KChBcHBlbmQgKikgcGxhbiktPmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzLAorCQkJCQkJCQkJCSAg ICgoQXBwZW5kICopIHBsYW4pLT5hcC5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0cywKIAkJCQkJCQkJ CQkgICBlcyk7CiAJCQkJYnJlYWs7CiAJCQljYXNlIFRfTWVyZ2VBcHBlbmQ6CiAJCQkJb3ZlcmV4 cGxhaW5fYml0bWFwc2V0KCJBcHBlbmQgUlRJcyIsCi0JCQkJCQkJCQkgICgoTWVyZ2VBcHBlbmQg KikgcGxhbiktPmFwcHJlbGlkcywKKwkJCQkJCQkJCSAgKChNZXJnZUFwcGVuZCAqKSBwbGFuKS0+ YXAuYXBwcmVsaWRzLAogCQkJCQkJCQkJICBlcyk7CiAJCQkJb3ZlcmV4cGxhaW5fYml0bWFwc2V0 X2xpc3QoIkNoaWxkIEFwcGVuZCBSVElzIiwKLQkJCQkJCQkJCQkgICAoKE1lcmdlQXBwZW5kICop IHBsYW4pLT5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0cywKKwkJCQkJCQkJCQkgICAoKE1lcmdlQXBw ZW5kICopIHBsYW4pLT5hcC5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0cywKIAkJCQkJCQkJCQkgICBl cyk7CiAJCQkJYnJlYWs7CiAJCQljYXNlIFRfUmVzdWx0OgpkaWZmIC0tZ2l0IGEvY29udHJpYi9w b3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jl c19mZHcuYwppbmRleCA2MGU4YjZlN2Q3Zi4uNmVjMjhiMjdiNDIgMTAwNjQ0Ci0tLSBhL2NvbnRy aWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5jCisrKyBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3 L3Bvc3RncmVzX2Zkdy5jCkBAIC0yNDEyLDggKzI0MTIsOCBAQCBmaW5kX21vZGlmeXRhYmxlX3N1 YnBsYW4oUGxhbm5lckluZm8gKnJvb3QsCiAJewogCQlBcHBlbmQJICAgKmFwcGVuZHBsYW4gPSAo QXBwZW5kICopIHN1YnBsYW47CiAKLQkJaWYgKHN1YnBsYW5faW5kZXggPCBsaXN0X2xlbmd0aChh cHBlbmRwbGFuLT5hcHBlbmRwbGFucykpCi0JCQlzdWJwbGFuID0gKFBsYW4gKikgbGlzdF9udGgo YXBwZW5kcGxhbi0+YXBwZW5kcGxhbnMsIHN1YnBsYW5faW5kZXgpOworCQlpZiAoc3VicGxhbl9p bmRleCA8IGxpc3RfbGVuZ3RoKGFwcGVuZHBsYW4tPmFwLnN1YnBsYW5zKSkKKwkJCXN1YnBsYW4g PSAoUGxhbiAqKSBsaXN0X250aChhcHBlbmRwbGFuLT5hcC5zdWJwbGFucywgc3VicGxhbl9pbmRl eCk7CiAJfQogCWVsc2UgaWYgKElzQShzdWJwbGFuLCBSZXN1bHQpICYmCiAJCQkgb3V0ZXJQbGFu KHN1YnBsYW4pICE9IE5VTEwgJiYKQEAgLTI0MjEsOCArMjQyMSw4IEBAIGZpbmRfbW9kaWZ5dGFi bGVfc3VicGxhbihQbGFubmVySW5mbyAqcm9vdCwKIAl7CiAJCUFwcGVuZAkgICAqYXBwZW5kcGxh biA9IChBcHBlbmQgKikgb3V0ZXJQbGFuKHN1YnBsYW4pOwogCi0JCWlmIChzdWJwbGFuX2luZGV4 IDwgbGlzdF9sZW5ndGgoYXBwZW5kcGxhbi0+YXBwZW5kcGxhbnMpKQotCQkJc3VicGxhbiA9IChQ bGFuICopIGxpc3RfbnRoKGFwcGVuZHBsYW4tPmFwcGVuZHBsYW5zLCBzdWJwbGFuX2luZGV4KTsK KwkJaWYgKHN1YnBsYW5faW5kZXggPCBsaXN0X2xlbmd0aChhcHBlbmRwbGFuLT5hcC5zdWJwbGFu cykpCisJCQlzdWJwbGFuID0gKFBsYW4gKikgbGlzdF9udGgoYXBwZW5kcGxhbi0+YXAuc3VicGxh bnMsIHN1YnBsYW5faW5kZXgpOwogCX0KIAogCS8qIE5vdywgaGF2ZSB3ZSBnb3QgYSBGb3JlaWdu U2NhbiBvbiB0aGUgZGVzaXJlZCByZWw/ICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21t YW5kcy9leHBsYWluLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKaW5kZXggYjdi YjExMTY4OGMuLmRmNjUyNzRlNmY0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9l 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 Y3V0b3Ivbm9kZUFwcGVuZC5jCmluZGV4IGI1NjE5ZDUyMTI5Li4yYjc3ZmM5NGYxOCAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFwcGVuZC5jCisrKyBiL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL25vZGVBcHBlbmQuYwpAQCAtNTcsMTMgKzU3LDEzIEBACiAKICNpbmNsdWRlICJw b3N0Z3Jlcy5oIgogCisjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY0FwcGVuZC5oIgogI2luY2x1ZGUg ImV4ZWN1dG9yL2V4ZWNBc3luYy5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24u aCIKICNpbmNsdWRlICJleGVjdXRvci9leGVjdXRvci5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL25v ZGVBcHBlbmQuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIK LSNpbmNsdWRlICJzdG9yYWdlL2xhdGNoLmgiCiAKIC8qIFNoYXJlZCBzdGF0ZSBmb3IgcGFyYWxs ZWwtYXdhcmUgQXBwZW5kLiAqLwogc3RydWN0IFBhcmFsbGVsQXBwZW5kU3RhdGUKQEAgLTEwOSwx NSArMTA5LDYgQEAgQXBwZW5kU3RhdGUgKgogRXhlY0luaXRBcHBlbmQoQXBwZW5kICpub2RlLCBF U3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIHsKIAlBcHBlbmRTdGF0ZSAqYXBwZW5kc3RhdGUg PSBtYWtlTm9kZShBcHBlbmRTdGF0ZSk7Ci0JUGxhblN0YXRlICoqYXBwZW5kcGxhbnN0YXRlczsK LQljb25zdCBUdXBsZVRhYmxlU2xvdE9wcyAqYXBwZW5kb3BzOwotCUJpdG1hcHNldCAgKnZhbGlk c3VicGxhbnM7Ci0JQml0bWFwc2V0ICAqYXN5bmNwbGFuczsKLQlpbnQJCQlucGxhbnM7Ci0JaW50 CQkJbmFzeW5jcGxhbnM7Ci0JaW50CQkJZmlyc3R2YWxpZDsKLQlpbnQJCQlpLAotCQkJCWo7CiAK IAkvKiBjaGVjayBmb3IgdW5zdXBwb3J0ZWQgZmxhZ3MgKi8KIAlBc3NlcnQoIShlZmxhZ3MgJiBF WEVDX0ZMQUdfTUFSSykpOwpAQCAtMTI1LDE2NyArMTE2LDI3IEBAIEV4ZWNJbml0QXBwZW5kKEFw cGVuZCAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJLyoKIAkgKiBjcmVhdGUg bmV3IEFwcGVuZFN0YXRlIGZvciBvdXIgYXBwZW5kIG5vZGUKIAkgKi8KLQlhcHBlbmRzdGF0ZS0+ cHMucGxhbiA9IChQbGFuICopIG5vZGU7Ci0JYXBwZW5kc3RhdGUtPnBzLnN0YXRlID0gZXN0YXRl OwotCWFwcGVuZHN0YXRlLT5wcy5FeGVjUHJvY05vZGUgPSBFeGVjQXBwZW5kOworCWFwcGVuZHN0 YXRlLT5hcy5wcy5wbGFuID0gKFBsYW4gKikgbm9kZTsKKwlhcHBlbmRzdGF0ZS0+YXMucHMuc3Rh dGUgPSBlc3RhdGU7CisJYXBwZW5kc3RhdGUtPmFzLnBzLkV4ZWNQcm9jTm9kZSA9IEV4ZWNBcHBl bmQ7CiAKIAkvKiBMZXQgY2hvb3NlX25leHRfc3VicGxhbl8qIGZ1bmN0aW9uIGhhbmRsZSBzZXR0 aW5nIHRoZSBmaXJzdCBzdWJwbGFuICovCiAJYXBwZW5kc3RhdGUtPmFzX3doaWNocGxhbiA9IElO VkFMSURfU1VCUExBTl9JTkRFWDsKIAlhcHBlbmRzdGF0ZS0+YXNfc3luY2RvbmUgPSBmYWxzZTsK IAlhcHBlbmRzdGF0ZS0+YXNfYmVndW4gPSBmYWxzZTsKIAotCS8qIElmIHJ1bi10aW1lIHBhcnRp dGlvbiBwcnVuaW5nIGlzIGVuYWJsZWQsIHRoZW4gc2V0IHRoYXQgdXAgbm93ICovCi0JaWYgKG5v ZGUtPnBhcnRfcHJ1bmVfaW5kZXggPj0gMCkKLQl7Ci0JCVBhcnRpdGlvblBydW5lU3RhdGUgKnBy dW5lc3RhdGU7Ci0KLQkJLyoKLQkJICogU2V0IHVwIHBydW5pbmcgZGF0YSBzdHJ1Y3R1cmUuICBU aGlzIGFsc28gaW5pdGlhbGl6ZXMgdGhlIHNldCBvZgotCQkgKiBzdWJwbGFucyB0byBpbml0aWFs aXplICh2YWxpZHN1YnBsYW5zKSBieSB0YWtpbmcgaW50byBhY2NvdW50IHRoZQotCQkgKiByZXN1 bHQgb2YgcGVyZm9ybWluZyBpbml0aWFsIHBydW5pbmcgaWYgYW55LgotCQkgKi8KLQkJcHJ1bmVz dGF0ZSA9IEV4ZWNJbml0UGFydGl0aW9uRXhlY1BydW5pbmcoJmFwcGVuZHN0YXRlLT5wcywKLQkJ CQkJCQkJCQkJCSAgbGlzdF9sZW5ndGgobm9kZS0+YXBwZW5kcGxhbnMpLAotCQkJCQkJCQkJCQkJ ICBub2RlLT5wYXJ0X3BydW5lX2luZGV4LAotCQkJCQkJCQkJCQkJICBub2RlLT5hcHByZWxpZHMs Ci0JCQkJCQkJCQkJCQkgICZ2YWxpZHN1YnBsYW5zKTsKLQkJYXBwZW5kc3RhdGUtPmFzX3BydW5l X3N0YXRlID0gcHJ1bmVzdGF0ZTsKLQkJbnBsYW5zID0gYm1zX251bV9tZW1iZXJzKHZhbGlkc3Vi cGxhbnMpOwotCi0JCS8qCi0JCSAqIFdoZW4gbm8gcnVuLXRpbWUgcHJ1bmluZyBpcyByZXF1aXJl ZCBhbmQgdGhlcmUncyBhdCBsZWFzdCBvbmUKLQkJICogc3VicGxhbiwgd2UgY2FuIGZpbGwgYXNf dmFsaWRfc3VicGxhbnMgaW1tZWRpYXRlbHksIHByZXZlbnRpbmcKLQkJICogbGF0ZXIgY2FsbHMg dG8gRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zLgotCQkgKi8KLQkJaWYgKCFwcnVuZXN0YXRlLT5k b19leGVjX3BydW5lICYmIG5wbGFucyA+IDApCi0JCXsKLQkJCWFwcGVuZHN0YXRlLT5hc192YWxp ZF9zdWJwbGFucyA9IGJtc19hZGRfcmFuZ2UoTlVMTCwgMCwgbnBsYW5zIC0gMSk7Ci0JCQlhcHBl bmRzdGF0ZS0+YXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCA9IHRydWU7Ci0JCX0KLQl9Ci0J ZWxzZQotCXsKLQkJbnBsYW5zID0gbGlzdF9sZW5ndGgobm9kZS0+YXBwZW5kcGxhbnMpOwotCi0J CS8qCi0JCSAqIFdoZW4gcnVuLXRpbWUgcGFydGl0aW9uIHBydW5pbmcgaXMgbm90IGVuYWJsZWQg d2UgY2FuIGp1c3QgbWFyayBhbGwKLQkJICogc3VicGxhbnMgYXMgdmFsaWQ7IHRoZXkgbXVzdCBh bHNvIGFsbCBiZSBpbml0aWFsaXplZC4KLQkJICovCi0JCUFzc2VydChucGxhbnMgPiAwKTsKLQkJ YXBwZW5kc3RhdGUtPmFzX3ZhbGlkX3N1YnBsYW5zID0gdmFsaWRzdWJwbGFucyA9Ci0JCQlibXNf YWRkX3JhbmdlKE5VTEwsIDAsIG5wbGFucyAtIDEpOwotCQlhcHBlbmRzdGF0ZS0+YXNfdmFsaWRf c3VicGxhbnNfaWRlbnRpZmllZCA9IHRydWU7Ci0JCWFwcGVuZHN0YXRlLT5hc19wcnVuZV9zdGF0 ZSA9IE5VTEw7Ci0JfQotCi0JYXBwZW5kcGxhbnN0YXRlcyA9IChQbGFuU3RhdGUgKiopIHBhbGxv YyhucGxhbnMgKgotCQkJCQkJCQkJCQkgc2l6ZW9mKFBsYW5TdGF0ZSAqKSk7Ci0KLQkvKgotCSAq IGNhbGwgRXhlY0luaXROb2RlIG9uIGVhY2ggb2YgdGhlIHZhbGlkIHBsYW5zIHRvIGJlIGV4ZWN1 dGVkIGFuZCBzYXZlCi0JICogdGhlIHJlc3VsdHMgaW50byB0aGUgYXBwZW5kcGxhbnN0YXRlcyBh cnJheS4KLQkgKgotCSAqIFdoaWxlIGF0IGl0LCBmaW5kIG91dCB0aGUgZmlyc3QgdmFsaWQgcGFy dGlhbCBwbGFuLgotCSAqLwotCWogPSAwOwotCWFzeW5jcGxhbnMgPSBOVUxMOwotCW5hc3luY3Bs YW5zID0gMDsKLQlmaXJzdHZhbGlkID0gbnBsYW5zOwotCWkgPSAtMTsKLQl3aGlsZSAoKGkgPSBi bXNfbmV4dF9tZW1iZXIodmFsaWRzdWJwbGFucywgaSkpID49IDApCi0JewotCQlQbGFuCSAgICpp bml0Tm9kZSA9IChQbGFuICopIGxpc3RfbnRoKG5vZGUtPmFwcGVuZHBsYW5zLCBpKTsKLQotCQkv KgotCQkgKiBSZWNvcmQgYXN5bmMgc3VicGxhbnMuICBXaGVuIGV4ZWN1dGluZyBFdmFsUGxhblF1 YWwsIHdlIHRyZWF0IHRoZW0KLQkJICogYXMgc3luYyBvbmVzOyBkb24ndCBkbyB0aGlzIHdoZW4g aW5pdGlhbGl6aW5nIGFuIEV2YWxQbGFuUXVhbCBwbGFuCi0JCSAqIHRyZWUuCi0JCSAqLwotCQlp ZiAoaW5pdE5vZGUtPmFzeW5jX2NhcGFibGUgJiYgZXN0YXRlLT5lc19lcHFfYWN0aXZlID09IE5V TEwpCi0JCXsKLQkJCWFzeW5jcGxhbnMgPSBibXNfYWRkX21lbWJlcihhc3luY3BsYW5zLCBqKTsK LQkJCW5hc3luY3BsYW5zKys7Ci0JCX0KLQotCQkvKgotCQkgKiBSZWNvcmQgdGhlIGxvd2VzdCBh cHBlbmRwbGFucyBpbmRleCB3aGljaCBpcyBhIHZhbGlkIHBhcnRpYWwgcGxhbi4KLQkJICovCi0J CWlmIChpID49IG5vZGUtPmZpcnN0X3BhcnRpYWxfcGxhbiAmJiBqIDwgZmlyc3R2YWxpZCkKLQkJ CWZpcnN0dmFsaWQgPSBqOwotCi0JCWFwcGVuZHBsYW5zdGF0ZXNbaisrXSA9IEV4ZWNJbml0Tm9k ZShpbml0Tm9kZSwgZXN0YXRlLCBlZmxhZ3MpOwotCX0KLQotCWFwcGVuZHN0YXRlLT5hc19maXJz dF9wYXJ0aWFsX3BsYW4gPSBmaXJzdHZhbGlkOwotCWFwcGVuZHN0YXRlLT5hcHBlbmRwbGFucyA9 IGFwcGVuZHBsYW5zdGF0ZXM7Ci0JYXBwZW5kc3RhdGUtPmFzX25wbGFucyA9IG5wbGFuczsKKwkv KiBJbml0aWFsaXplIGNvbW1vbiBmaWVsZHMgKi8KKwlFeGVjSW5pdEFwcGVuZGVyKCZhcHBlbmRz dGF0ZS0+YXMsCisJCQkJCSAmbm9kZS0+YXAsCisJCQkJCSBlc3RhdGUsCisJCQkJCSBlZmxhZ3Ms CisJCQkJCSBub2RlLT5maXJzdF9wYXJ0aWFsX3BsYW4sCisJCQkJCSAmYXBwZW5kc3RhdGUtPmFz X2ZpcnN0X3BhcnRpYWxfcGxhbik7CiAKLQkvKgotCSAqIEluaXRpYWxpemUgQXBwZW5kJ3MgcmVz dWx0IHR1cGxlIHR5cGUgYW5kIHNsb3QuICBJZiB0aGUgY2hpbGQgcGxhbnMgYWxsCi0JICogcHJv ZHVjZSB0aGUgc2FtZSBmaXhlZCBzbG90IHR5cGUsIHdlIGNhbiB1c2UgdGhhdCBzbG90IHR5cGU7 IG90aGVyd2lzZQotCSAqIG1ha2UgYSB2aXJ0dWFsIHNsb3QuICAoTm90ZSB0aGF0IHRoZSByZXN1 bHQgc2xvdCBpdHNlbGYgaXMgdXNlZCBvbmx5IHRvCi0JICogcmV0dXJuIGEgbnVsbCB0dXBsZSBh dCBlbmQgb2YgZXhlY3V0aW9uOyByZWFsIHR1cGxlcyBhcmUgcmV0dXJuZWQgdG8KLQkgKiB0aGUg Y2FsbGVyIGluIHRoZSBjaGlsZHJlbidzIG93biByZXN1bHQgc2xvdHMuICBXaGF0IHdlIGFyZSBk b2luZyBoZXJlCi0JICogaXMgYWxsb3dpbmcgdGhlIHBhcmVudCBwbGFuIG5vZGUgdG8gb3B0aW1p emUgaWYgdGhlIEFwcGVuZCB3aWxsIHJldHVybgotCSAqIG9ubHkgb25lIGtpbmQgb2Ygc2xvdC4p Ci0JICovCi0JYXBwZW5kb3BzID0gRXhlY0dldENvbW1vblNsb3RPcHMoYXBwZW5kcGxhbnN0YXRl cywgaik7Ci0JaWYgKGFwcGVuZG9wcyAhPSBOVUxMKQotCXsKLQkJRXhlY0luaXRSZXN1bHRUdXBs ZVNsb3RUTCgmYXBwZW5kc3RhdGUtPnBzLCBhcHBlbmRvcHMpOwotCX0KLQllbHNlCi0JewotCQlF eGVjSW5pdFJlc3VsdFR1cGxlU2xvdFRMKCZhcHBlbmRzdGF0ZS0+cHMsICZUVFNPcHNWaXJ0dWFs KTsKLQkJLyogc2hvdyB0aGF0IHRoZSBvdXRwdXQgc2xvdCB0eXBlIGlzIG5vdCBmaXhlZCAqLwot CQlhcHBlbmRzdGF0ZS0+cHMucmVzdWx0b3Bzc2V0ID0gdHJ1ZTsKLQkJYXBwZW5kc3RhdGUtPnBz LnJlc3VsdG9wc2ZpeGVkID0gZmFsc2U7Ci0JfQorCWlmIChhcHBlbmRzdGF0ZS0+YXMubmFzeW5j cGxhbnMgPiAwICYmIGFwcGVuZHN0YXRlLT5hcy52YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkKQor CQljbGFzc2lmeV9tYXRjaGluZ19zdWJwbGFucyhhcHBlbmRzdGF0ZSk7CiAKLQkvKiBJbml0aWFs aXplIGFzeW5jIHN0YXRlICovCi0JYXBwZW5kc3RhdGUtPmFzX2FzeW5jcGxhbnMgPSBhc3luY3Bs YW5zOwotCWFwcGVuZHN0YXRlLT5hc19uYXN5bmNwbGFucyA9IG5hc3luY3BsYW5zOwotCWFwcGVu ZHN0YXRlLT5hc19hc3luY3JlcXVlc3RzID0gTlVMTDsKLQlhcHBlbmRzdGF0ZS0+YXNfYXN5bmNy ZXN1bHRzID0gTlVMTDsKLQlhcHBlbmRzdGF0ZS0+YXNfbmFzeW5jcmVzdWx0cyA9IDA7CiAJYXBw ZW5kc3RhdGUtPmFzX25hc3luY3JlbWFpbiA9IDA7Ci0JYXBwZW5kc3RhdGUtPmFzX25lZWRyZXF1 ZXN0ID0gTlVMTDsKLQlhcHBlbmRzdGF0ZS0+YXNfZXZlbnRzZXQgPSBOVUxMOwotCWFwcGVuZHN0 YXRlLT5hc192YWxpZF9hc3luY3BsYW5zID0gTlVMTDsKLQotCWlmIChuYXN5bmNwbGFucyA+IDAp Ci0JewotCQlhcHBlbmRzdGF0ZS0+YXNfYXN5bmNyZXF1ZXN0cyA9IChBc3luY1JlcXVlc3QgKiop Ci0JCQlwYWxsb2MwKG5wbGFucyAqIHNpemVvZihBc3luY1JlcXVlc3QgKikpOwotCi0JCWkgPSAt MTsKLQkJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKGFzeW5jcGxhbnMsIGkpKSA+PSAwKQot CQl7Ci0JCQlBc3luY1JlcXVlc3QgKmFyZXE7Ci0KLQkJCWFyZXEgPSBwYWxsb2Nfb2JqZWN0KEFz eW5jUmVxdWVzdCk7Ci0JCQlhcmVxLT5yZXF1ZXN0b3IgPSAoUGxhblN0YXRlICopIGFwcGVuZHN0 YXRlOwotCQkJYXJlcS0+cmVxdWVzdGVlID0gYXBwZW5kcGxhbnN0YXRlc1tpXTsKLQkJCWFyZXEt PnJlcXVlc3RfaW5kZXggPSBpOwotCQkJYXJlcS0+Y2FsbGJhY2tfcGVuZGluZyA9IGZhbHNlOwot CQkJYXJlcS0+cmVxdWVzdF9jb21wbGV0ZSA9IGZhbHNlOwotCQkJYXJlcS0+cmVzdWx0ID0gTlVM TDsKLQotCQkJYXBwZW5kc3RhdGUtPmFzX2FzeW5jcmVxdWVzdHNbaV0gPSBhcmVxOwotCQl9Ci0K LQkJYXBwZW5kc3RhdGUtPmFzX2FzeW5jcmVzdWx0cyA9IChUdXBsZVRhYmxlU2xvdCAqKikKLQkJ CXBhbGxvYzAobmFzeW5jcGxhbnMgKiBzaXplb2YoVHVwbGVUYWJsZVNsb3QgKikpOwotCi0JCWlm IChhcHBlbmRzdGF0ZS0+YXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCkKLQkJCWNsYXNzaWZ5 X21hdGNoaW5nX3N1YnBsYW5zKGFwcGVuZHN0YXRlKTsKLQl9Ci0KLQkvKgotCSAqIE1pc2NlbGxh bmVvdXMgaW5pdGlhbGl6YXRpb24KLQkgKi8KLQotCWFwcGVuZHN0YXRlLT5wcy5wc19Qcm9qSW5m byA9IE5VTEw7CiAKIAkvKiBGb3IgcGFyYWxsZWwgcXVlcnksIHRoaXMgd2lsbCBiZSBvdmVycmlk ZGVuIGxhdGVyLiAqLwogCWFwcGVuZHN0YXRlLT5jaG9vc2VfbmV4dF9zdWJwbGFuID0gY2hvb3Nl X25leHRfc3VicGxhbl9sb2NhbGx5OwpAQCAtMzE1LDExICsxNjYsMTEgQEAgRXhlY0FwcGVuZChQ bGFuU3RhdGUgKnBzdGF0ZSkKIAkJQXNzZXJ0KCFub2RlLT5hc19zeW5jZG9uZSk7CiAKIAkJLyog Tm90aGluZyB0byBkbyBpZiB0aGVyZSBhcmUgbm8gc3VicGxhbnMgKi8KLQkJaWYgKG5vZGUtPmFz X25wbGFucyA9PSAwKQotCQkJcmV0dXJuIEV4ZWNDbGVhclR1cGxlKG5vZGUtPnBzLnBzX1Jlc3Vs dFR1cGxlU2xvdCk7CisJCWlmIChub2RlLT5hcy5ucGxhbnMgPT0gMCkKKwkJCXJldHVybiBFeGVj Q2xlYXJUdXBsZShub2RlLT5hcy5wcy5wc19SZXN1bHRUdXBsZVNsb3QpOwogCiAJCS8qIElmIHRo ZXJlIGFyZSBhbnkgYXN5bmMgc3VicGxhbnMsIGJlZ2luIGV4ZWN1dGluZyB0aGVtLiAqLwotCQlp ZiAobm9kZS0+YXNfbmFzeW5jcGxhbnMgPiAwKQorCQlpZiAobm9kZS0+YXMubmFzeW5jcGxhbnMg PiAwKQogCQkJRXhlY0FwcGVuZEFzeW5jQmVnaW4obm9kZSk7CiAKIAkJLyoKQEAgLTMyNywxMSAr MTc4LDExIEBAIEV4ZWNBcHBlbmQoUGxhblN0YXRlICpwc3RhdGUpCiAJCSAqIHByb2NlZWRpbmcu CiAJCSAqLwogCQlpZiAoIW5vZGUtPmNob29zZV9uZXh0X3N1YnBsYW4obm9kZSkgJiYgbm9kZS0+ YXNfbmFzeW5jcmVtYWluID09IDApCi0JCQlyZXR1cm4gRXhlY0NsZWFyVHVwbGUobm9kZS0+cHMu cHNfUmVzdWx0VHVwbGVTbG90KTsKKwkJCXJldHVybiBFeGVjQ2xlYXJUdXBsZShub2RlLT5hcy5w cy5wc19SZXN1bHRUdXBsZVNsb3QpOwogCiAJCUFzc2VydChub2RlLT5hc19zeW5jZG9uZSB8fAog CQkJICAgKG5vZGUtPmFzX3doaWNocGxhbiA+PSAwICYmCi0JCQkJbm9kZS0+YXNfd2hpY2hwbGFu IDwgbm9kZS0+YXNfbnBsYW5zKSk7CisJCQkJbm9kZS0+YXNfd2hpY2hwbGFuIDwgbm9kZS0+YXMu bnBsYW5zKSk7CiAKIAkJLyogQW5kIHdlJ3JlIGluaXRpYWxpemVkLiAqLwogCQlub2RlLT5hc19i ZWd1biA9IHRydWU7CkBAIC0zNDYsMTkgKzE5NywxOSBAQCBFeGVjQXBwZW5kKFBsYW5TdGF0ZSAq cHN0YXRlKQogCQkvKgogCQkgKiB0cnkgdG8gZ2V0IGEgdHVwbGUgZnJvbSBhbiBhc3luYyBzdWJw bGFuIGlmIGFueQogCQkgKi8KLQkJaWYgKG5vZGUtPmFzX3N5bmNkb25lIHx8ICFibXNfaXNfZW1w dHkobm9kZS0+YXNfbmVlZHJlcXVlc3QpKQorCQlpZiAobm9kZS0+YXNfc3luY2RvbmUgfHwgIWJt c19pc19lbXB0eShub2RlLT5hcy5uZWVkcmVxdWVzdCkpCiAJCXsKIAkJCWlmIChFeGVjQXBwZW5k QXN5bmNHZXROZXh0KG5vZGUsICZyZXN1bHQpKQogCQkJCXJldHVybiByZXN1bHQ7CiAJCQlBc3Nl cnQoIW5vZGUtPmFzX3N5bmNkb25lKTsKLQkJCUFzc2VydChibXNfaXNfZW1wdHkobm9kZS0+YXNf bmVlZHJlcXVlc3QpKTsKKwkJCUFzc2VydChibXNfaXNfZW1wdHkobm9kZS0+YXMubmVlZHJlcXVl c3QpKTsKIAkJfQogCiAJCS8qCiAJCSAqIGZpZ3VyZSBvdXQgd2hpY2ggc3luYyBzdWJwbGFuIHdl IGFyZSBjdXJyZW50bHkgcHJvY2Vzc2luZwogCQkgKi8KLQkJQXNzZXJ0KG5vZGUtPmFzX3doaWNo cGxhbiA+PSAwICYmIG5vZGUtPmFzX3doaWNocGxhbiA8IG5vZGUtPmFzX25wbGFucyk7Ci0JCXN1 Ym5vZGUgPSBub2RlLT5hcHBlbmRwbGFuc1tub2RlLT5hc193aGljaHBsYW5dOworCQlBc3NlcnQo bm9kZS0+YXNfd2hpY2hwbGFuID49IDAgJiYgbm9kZS0+YXNfd2hpY2hwbGFuIDwgbm9kZS0+YXMu bnBsYW5zKTsKKwkJc3Vibm9kZSA9IG5vZGUtPmFzLnBsYW5zW25vZGUtPmFzX3doaWNocGxhbl07 CiAKIAkJLyoKIAkJICogZ2V0IGEgdHVwbGUgZnJvbSB0aGUgc3VicGxhbgpAQCAtMzg1LDcgKzIz Niw3IEBAIEV4ZWNBcHBlbmQoUGxhblN0YXRlICpwc3RhdGUpCiAKIAkJLyogY2hvb3NlIG5ldyBz eW5jIHN1YnBsYW47IGlmIG5vIHN5bmMvYXN5bmMgc3VicGxhbnMsIHdlJ3JlIGRvbmUgKi8KIAkJ aWYgKCFub2RlLT5jaG9vc2VfbmV4dF9zdWJwbGFuKG5vZGUpICYmIG5vZGUtPmFzX25hc3luY3Jl bWFpbiA9PSAwKQotCQkJcmV0dXJuIEV4ZWNDbGVhclR1cGxlKG5vZGUtPnBzLnBzX1Jlc3VsdFR1 cGxlU2xvdCk7CisJCQlyZXR1cm4gRXhlY0NsZWFyVHVwbGUobm9kZS0+YXMucHMucHNfUmVzdWx0 VHVwbGVTbG90KTsKIAl9CiB9CiAKQEAgLTQwMCw4MSArMjUxLDIyIEBAIEV4ZWNBcHBlbmQoUGxh blN0YXRlICpwc3RhdGUpCiB2b2lkCiBFeGVjRW5kQXBwZW5kKEFwcGVuZFN0YXRlICpub2RlKQog ewotCVBsYW5TdGF0ZSAqKmFwcGVuZHBsYW5zOwotCWludAkJCW5wbGFuczsKLQlpbnQJCQlpOwot Ci0JLyoKLQkgKiBnZXQgaW5mb3JtYXRpb24gZnJvbSB0aGUgbm9kZQotCSAqLwotCWFwcGVuZHBs YW5zID0gbm9kZS0+YXBwZW5kcGxhbnM7Ci0JbnBsYW5zID0gbm9kZS0+YXNfbnBsYW5zOwotCi0J LyoKLQkgKiBzaHV0IGRvd24gZWFjaCBvZiB0aGUgc3Vic2NhbnMKLQkgKi8KLQlmb3IgKGkgPSAw OyBpIDwgbnBsYW5zOyBpKyspCi0JCUV4ZWNFbmROb2RlKGFwcGVuZHBsYW5zW2ldKTsKKwlFeGVj RW5kQXBwZW5kZXIoJm5vZGUtPmFzKTsKIH0KIAogdm9pZAogRXhlY1JlU2NhbkFwcGVuZChBcHBl bmRTdGF0ZSAqbm9kZSkKIHsKLQlpbnQJCQluYXN5bmNwbGFucyA9IG5vZGUtPmFzX25hc3luY3Bs YW5zOwotCWludAkJCWk7Ci0KLQkvKgotCSAqIElmIGFueSBQQVJBTV9FWEVDIFBhcmFtcyB1c2Vk IGluIHBydW5pbmcgZXhwcmVzc2lvbnMgaGF2ZSBjaGFuZ2VkLCB0aGVuCi0JICogd2UnZCBiZXR0 ZXIgdW5zZXQgdGhlIHZhbGlkIHN1YnBsYW5zIHNvIHRoYXQgdGhleSBhcmUgcmVzZWxlY3RlZCBm b3IKLQkgKiB0aGUgbmV3IHBhcmFtZXRlciB2YWx1ZXMuCi0JICovCi0JaWYgKG5vZGUtPmFzX3By dW5lX3N0YXRlICYmCi0JCWJtc19vdmVybGFwKG5vZGUtPnBzLmNoZ1BhcmFtLAotCQkJCQlub2Rl LT5hc19wcnVuZV9zdGF0ZS0+ZXhlY3BhcmFtaWRzKSkKLQl7Ci0JCW5vZGUtPmFzX3ZhbGlkX3N1 YnBsYW5zX2lkZW50aWZpZWQgPSBmYWxzZTsKLQkJYm1zX2ZyZWUobm9kZS0+YXNfdmFsaWRfc3Vi cGxhbnMpOwotCQlub2RlLT5hc192YWxpZF9zdWJwbGFucyA9IE5VTEw7Ci0JCWJtc19mcmVlKG5v ZGUtPmFzX3ZhbGlkX2FzeW5jcGxhbnMpOwotCQlub2RlLT5hc192YWxpZF9hc3luY3BsYW5zID0g TlVMTDsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbm9kZS0+YXNfbnBsYW5zOyBpKyspCi0Jewot CQlQbGFuU3RhdGUgICpzdWJub2RlID0gbm9kZS0+YXBwZW5kcGxhbnNbaV07CiAKLQkJLyoKLQkJ ICogRXhlY1JlU2NhbiBkb2Vzbid0IGtub3cgYWJvdXQgbXkgc3VicGxhbnMsIHNvIEkgaGF2ZSB0 byBkbwotCQkgKiBjaGFuZ2VkLXBhcmFtZXRlciBzaWduYWxpbmcgbXlzZWxmLgotCQkgKi8KLQkJ aWYgKG5vZGUtPnBzLmNoZ1BhcmFtICE9IE5VTEwpCi0JCQlVcGRhdGVDaGFuZ2VkUGFyYW1TZXQo c3Vibm9kZSwgbm9kZS0+cHMuY2hnUGFyYW0pOworCWludAkJCW5hc3luY3BsYW5zID0gbm9kZS0+ YXMubmFzeW5jcGxhbnM7CiAKLQkJLyoKLQkJICogSWYgY2hnUGFyYW0gb2Ygc3Vibm9kZSBpcyBu b3QgbnVsbCB0aGVuIHBsYW4gd2lsbCBiZSByZS1zY2FubmVkIGJ5Ci0JCSAqIGZpcnN0IEV4ZWNQ cm9jTm9kZSBvciBieSBmaXJzdCBFeGVjQXN5bmNSZXF1ZXN0LgotCQkgKi8KLQkJaWYgKHN1Ym5v ZGUtPmNoZ1BhcmFtID09IE5VTEwpCi0JCQlFeGVjUmVTY2FuKHN1Ym5vZGUpOwotCX0KKwlFeGVj UmVTY2FuQXBwZW5kZXIoJm5vZGUtPmFzKTsKIAotCS8qIFJlc2V0IGFzeW5jIHN0YXRlICovCisJ LyogUmVzZXQgc3BlY2lmaWMgYXBwZW5kIGFzeW5jIHN0YXRlICovCiAJaWYgKG5hc3luY3BsYW5z ID4gMCkKIAl7Ci0JCWkgPSAtMTsKLQkJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKG5vZGUt PmFzX2FzeW5jcGxhbnMsIGkpKSA+PSAwKQotCQl7Ci0JCQlBc3luY1JlcXVlc3QgKmFyZXEgPSBu b2RlLT5hc19hc3luY3JlcXVlc3RzW2ldOwotCi0JCQlhcmVxLT5jYWxsYmFja19wZW5kaW5nID0g ZmFsc2U7Ci0JCQlhcmVxLT5yZXF1ZXN0X2NvbXBsZXRlID0gZmFsc2U7Ci0JCQlhcmVxLT5yZXN1 bHQgPSBOVUxMOwotCQl9Ci0KIAkJbm9kZS0+YXNfbmFzeW5jcmVzdWx0cyA9IDA7CiAJCW5vZGUt PmFzX25hc3luY3JlbWFpbiA9IDA7Ci0JCWJtc19mcmVlKG5vZGUtPmFzX25lZWRyZXF1ZXN0KTsK LQkJbm9kZS0+YXNfbmVlZHJlcXVlc3QgPSBOVUxMOwogCX0KIAogCS8qIExldCBjaG9vc2VfbmV4 dF9zdWJwbGFuXyogZnVuY3Rpb24gaGFuZGxlIHNldHRpbmcgdGhlIGZpcnN0IHN1YnBsYW4gKi8K QEAgLTUwMSw3ICsyOTMsNyBAQCBFeGVjQXBwZW5kRXN0aW1hdGUoQXBwZW5kU3RhdGUgKm5vZGUs CiB7CiAJbm9kZS0+cHN0YXRlX2xlbiA9CiAJCWFkZF9zaXplKG9mZnNldG9mKFBhcmFsbGVsQXBw ZW5kU3RhdGUsIHBhX2ZpbmlzaGVkKSwKLQkJCQkgc2l6ZW9mKGJvb2wpICogbm9kZS0+YXNfbnBs YW5zKTsKKwkJCQkgc2l6ZW9mKGJvb2wpICogbm9kZS0+YXMubnBsYW5zKTsKIAogCXNobV90b2Nf ZXN0aW1hdGVfY2h1bmsoJnBjeHQtPmVzdGltYXRvciwgbm9kZS0+cHN0YXRlX2xlbik7CiAJc2ht X3RvY19lc3RpbWF0ZV9rZXlzKCZwY3h0LT5lc3RpbWF0b3IsIDEpOwpAQCAtNTIzLDcgKzMxNSw3 IEBAIEV4ZWNBcHBlbmRJbml0aWFsaXplRFNNKEFwcGVuZFN0YXRlICpub2RlLAogCXBzdGF0ZSA9 IHNobV90b2NfYWxsb2NhdGUocGN4dC0+dG9jLCBub2RlLT5wc3RhdGVfbGVuKTsKIAltZW1zZXQo cHN0YXRlLCAwLCBub2RlLT5wc3RhdGVfbGVuKTsKIAlMV0xvY2tJbml0aWFsaXplKCZwc3RhdGUt PnBhX2xvY2ssIExXVFJBTkNIRV9QQVJBTExFTF9BUFBFTkQpOwotCXNobV90b2NfaW5zZXJ0KHBj eHQtPnRvYywgbm9kZS0+cHMucGxhbi0+cGxhbl9ub2RlX2lkLCBwc3RhdGUpOworCXNobV90b2Nf aW5zZXJ0KHBjeHQtPnRvYywgbm9kZS0+YXMucHMucGxhbi0+cGxhbl9ub2RlX2lkLCBwc3RhdGUp OwogCiAJbm9kZS0+YXNfcHN0YXRlID0gcHN0YXRlOwogCW5vZGUtPmNob29zZV9uZXh0X3N1YnBs YW4gPSBjaG9vc2VfbmV4dF9zdWJwbGFuX2Zvcl9sZWFkZXI7CkBAIC01NDEsNyArMzMzLDcgQEAg RXhlY0FwcGVuZFJlSW5pdGlhbGl6ZURTTShBcHBlbmRTdGF0ZSAqbm9kZSwgUGFyYWxsZWxDb250 ZXh0ICpwY3h0KQogCVBhcmFsbGVsQXBwZW5kU3RhdGUgKnBzdGF0ZSA9IG5vZGUtPmFzX3BzdGF0 ZTsKIAogCXBzdGF0ZS0+cGFfbmV4dF9wbGFuID0gMDsKLQltZW1zZXQocHN0YXRlLT5wYV9maW5p c2hlZCwgMCwgc2l6ZW9mKGJvb2wpICogbm9kZS0+YXNfbnBsYW5zKTsKKwltZW1zZXQocHN0YXRl LT5wYV9maW5pc2hlZCwgMCwgc2l6ZW9mKGJvb2wpICogbm9kZS0+YXMubnBsYW5zKTsKIH0KIAog LyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQpAQCAtNTU0LDcgKzM0Niw3IEBAIEV4ZWNBcHBlbmRSZUluaXRpYWxpemVEU00o QXBwZW5kU3RhdGUgKm5vZGUsIFBhcmFsbGVsQ29udGV4dCAqcGN4dCkKIHZvaWQKIEV4ZWNBcHBl bmRJbml0aWFsaXplV29ya2VyKEFwcGVuZFN0YXRlICpub2RlLCBQYXJhbGxlbFdvcmtlckNvbnRl eHQgKnB3Y3h0KQogewotCW5vZGUtPmFzX3BzdGF0ZSA9IHNobV90b2NfbG9va3VwKHB3Y3h0LT50 b2MsIG5vZGUtPnBzLnBsYW4tPnBsYW5fbm9kZV9pZCwgZmFsc2UpOworCW5vZGUtPmFzX3BzdGF0 ZSA9IHNobV90b2NfbG9va3VwKHB3Y3h0LT50b2MsIG5vZGUtPmFzLnBzLnBsYW4tPnBsYW5fbm9k ZV9pZCwgZmFsc2UpOwogCW5vZGUtPmNob29zZV9uZXh0X3N1YnBsYW4gPSBjaG9vc2VfbmV4dF9z dWJwbGFuX2Zvcl93b3JrZXI7CiB9CiAKQEAgLTU3Miw3ICszNjQsNyBAQCBjaG9vc2VfbmV4dF9z dWJwbGFuX2xvY2FsbHkoQXBwZW5kU3RhdGUgKm5vZGUpCiAJaW50CQkJbmV4dHBsYW47CiAKIAkv KiBXZSBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIHdoZW4gdGhlcmUgYXJlIG5vIHN1YnBsYW5zICov Ci0JQXNzZXJ0KG5vZGUtPmFzX25wbGFucyA+IDApOworCUFzc2VydChub2RlLT5hcy5ucGxhbnMg PiAwKTsKIAogCS8qIE5vdGhpbmcgdG8gZG8gaWYgc3luY2RvbmUgKi8KIAlpZiAobm9kZS0+YXNf c3luY2RvbmUpCkBAIC01ODcsMzMgKzM3OSwzMyBAQCBjaG9vc2VfbmV4dF9zdWJwbGFuX2xvY2Fs bHkoQXBwZW5kU3RhdGUgKm5vZGUpCiAJICovCiAJaWYgKHdoaWNocGxhbiA9PSBJTlZBTElEX1NV QlBMQU5fSU5ERVgpCiAJewotCQlpZiAobm9kZS0+YXNfbmFzeW5jcGxhbnMgPiAwKQorCQlpZiAo bm9kZS0+YXMubmFzeW5jcGxhbnMgPiAwKQogCQl7CiAJCQkvKiBXZSdkIGhhdmUgZmlsbGVkIGFz X3ZhbGlkX3N1YnBsYW5zIGFscmVhZHkgKi8KLQkJCUFzc2VydChub2RlLT5hc192YWxpZF9zdWJw bGFuc19pZGVudGlmaWVkKTsKKwkJCUFzc2VydChub2RlLT5hcy52YWxpZF9zdWJwbGFuc19pZGVu dGlmaWVkKTsKIAkJfQotCQllbHNlIGlmICghbm9kZS0+YXNfdmFsaWRfc3VicGxhbnNfaWRlbnRp ZmllZCkKKwkJZWxzZSBpZiAoIW5vZGUtPmFzLnZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQpCiAJ CXsKLQkJCW5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5zID0KLQkJCQlFeGVjRmluZE1hdGNoaW5nU3Vi UGxhbnMobm9kZS0+YXNfcHJ1bmVfc3RhdGUsIGZhbHNlLCBOVUxMKTsKLQkJCW5vZGUtPmFzX3Zh bGlkX3N1YnBsYW5zX2lkZW50aWZpZWQgPSB0cnVlOworCQkJbm9kZS0+YXMudmFsaWRfc3VicGxh bnMgPQorCQkJCUV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhub2RlLT5hcy5wcnVuZV9zdGF0ZSwg ZmFsc2UsIE5VTEwpOworCQkJbm9kZS0+YXMudmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCA9IHRy dWU7CiAJCX0KIAogCQl3aGljaHBsYW4gPSAtMTsKIAl9CiAKIAkvKiBFbnN1cmUgd2hpY2hwbGFu IGlzIHdpdGhpbiB0aGUgZXhwZWN0ZWQgcmFuZ2UgKi8KLQlBc3NlcnQod2hpY2hwbGFuID49IC0x ICYmIHdoaWNocGxhbiA8PSBub2RlLT5hc19ucGxhbnMpOworCUFzc2VydCh3aGljaHBsYW4gPj0g LTEgJiYgd2hpY2hwbGFuIDw9IG5vZGUtPmFzLm5wbGFucyk7CiAKLQlpZiAoU2NhbkRpcmVjdGlv bklzRm9yd2FyZChub2RlLT5wcy5zdGF0ZS0+ZXNfZGlyZWN0aW9uKSkKLQkJbmV4dHBsYW4gPSBi bXNfbmV4dF9tZW1iZXIobm9kZS0+YXNfdmFsaWRfc3VicGxhbnMsIHdoaWNocGxhbik7CisJaWYg KFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQobm9kZS0+YXMucHMuc3RhdGUtPmVzX2RpcmVjdGlvbikp CisJCW5leHRwbGFuID0gYm1zX25leHRfbWVtYmVyKG5vZGUtPmFzLnZhbGlkX3N1YnBsYW5zLCB3 aGljaHBsYW4pOwogCWVsc2UKLQkJbmV4dHBsYW4gPSBibXNfcHJldl9tZW1iZXIobm9kZS0+YXNf dmFsaWRfc3VicGxhbnMsIHdoaWNocGxhbik7CisJCW5leHRwbGFuID0gYm1zX3ByZXZfbWVtYmVy KG5vZGUtPmFzLnZhbGlkX3N1YnBsYW5zLCB3aGljaHBsYW4pOwogCiAJaWYgKG5leHRwbGFuIDwg MCkKIAl7CiAJCS8qIFNldCBhc19zeW5jZG9uZSBpZiBpbiBhc3luYyBtb2RlICovCi0JCWlmIChu b2RlLT5hc19uYXN5bmNwbGFucyA+IDApCisJCWlmIChub2RlLT5hcy5uYXN5bmNwbGFucyA+IDAp CiAJCQlub2RlLT5hc19zeW5jZG9uZSA9IHRydWU7CiAJCXJldHVybiBmYWxzZTsKIAl9CkBAIC02 MzcsMTAgKzQyOSwxMCBAQCBjaG9vc2VfbmV4dF9zdWJwbGFuX2Zvcl9sZWFkZXIoQXBwZW5kU3Rh dGUgKm5vZGUpCiAJUGFyYWxsZWxBcHBlbmRTdGF0ZSAqcHN0YXRlID0gbm9kZS0+YXNfcHN0YXRl OwogCiAJLyogQmFja3dhcmQgc2NhbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHBhcmFsbGVsLWF3YXJl IHBsYW5zICovCi0JQXNzZXJ0KFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQobm9kZS0+cHMuc3RhdGUt PmVzX2RpcmVjdGlvbikpOworCUFzc2VydChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKG5vZGUtPmFz LnBzLnN0YXRlLT5lc19kaXJlY3Rpb24pKTsKIAogCS8qIFdlIHNob3VsZCBuZXZlciBiZSBjYWxs ZWQgd2hlbiB0aGVyZSBhcmUgbm8gc3VicGxhbnMgKi8KLQlBc3NlcnQobm9kZS0+YXNfbnBsYW5z ID4gMCk7CisJQXNzZXJ0KG5vZGUtPmFzLm5wbGFucyA+IDApOwogCiAJTFdMb2NrQWNxdWlyZSgm cHN0YXRlLT5wYV9sb2NrLCBMV19FWENMVVNJVkUpOwogCkBAIC02NTIsMTggKzQ0NCwxOCBAQCBj aG9vc2VfbmV4dF9zdWJwbGFuX2Zvcl9sZWFkZXIoQXBwZW5kU3RhdGUgKm5vZGUpCiAJZWxzZQog CXsKIAkJLyogU3RhcnQgd2l0aCBsYXN0IHN1YnBsYW4uICovCi0JCW5vZGUtPmFzX3doaWNocGxh biA9IG5vZGUtPmFzX25wbGFucyAtIDE7CisJCW5vZGUtPmFzX3doaWNocGxhbiA9IG5vZGUtPmFz Lm5wbGFucyAtIDE7CiAKIAkJLyoKIAkJICogSWYgd2UndmUgeWV0IHRvIGRldGVybWluZSB0aGUg dmFsaWQgc3VicGxhbnMgdGhlbiBkbyBzbyBub3cuICBJZgogCQkgKiBydW4tdGltZSBwcnVuaW5n IGlzIGRpc2FibGVkIHRoZW4gdGhlIHZhbGlkIHN1YnBsYW5zIHdpbGwgYWx3YXlzIGJlCiAJCSAq IHNldCB0byBhbGwgc3VicGxhbnMuCiAJCSAqLwotCQlpZiAoIW5vZGUtPmFzX3ZhbGlkX3N1YnBs YW5zX2lkZW50aWZpZWQpCisJCWlmICghbm9kZS0+YXMudmFsaWRfc3VicGxhbnNfaWRlbnRpZmll ZCkKIAkJewotCQkJbm9kZS0+YXNfdmFsaWRfc3VicGxhbnMgPQotCQkJCUV4ZWNGaW5kTWF0Y2hp bmdTdWJQbGFucyhub2RlLT5hc19wcnVuZV9zdGF0ZSwgZmFsc2UsIE5VTEwpOwotCQkJbm9kZS0+ YXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCA9IHRydWU7CisJCQlub2RlLT5hcy52YWxpZF9z dWJwbGFucyA9CisJCQkJRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKG5vZGUtPmFzLnBydW5lX3N0 YXRlLCBmYWxzZSwgTlVMTCk7CisJCQlub2RlLT5hcy52YWxpZF9zdWJwbGFuc19pZGVudGlmaWVk ID0gdHJ1ZTsKIAogCQkJLyoKIAkJCSAqIE1hcmsgZWFjaCBpbnZhbGlkIHBsYW4gYXMgZmluaXNo ZWQgdG8gYWxsb3cgdGhlIGxvb3AgYmVsb3cgdG8KQEAgLTcxOSwxMCArNTExLDEwIEBAIGNob29z ZV9uZXh0X3N1YnBsYW5fZm9yX3dvcmtlcihBcHBlbmRTdGF0ZSAqbm9kZSkKIAlQYXJhbGxlbEFw cGVuZFN0YXRlICpwc3RhdGUgPSBub2RlLT5hc19wc3RhdGU7CiAKIAkvKiBCYWNrd2FyZCBzY2Fu IGlzIG5vdCBzdXBwb3J0ZWQgYnkgcGFyYWxsZWwtYXdhcmUgcGxhbnMgKi8KLQlBc3NlcnQoU2Nh bkRpcmVjdGlvbklzRm9yd2FyZChub2RlLT5wcy5zdGF0ZS0+ZXNfZGlyZWN0aW9uKSk7CisJQXNz ZXJ0KFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQobm9kZS0+YXMucHMuc3RhdGUtPmVzX2RpcmVjdGlv bikpOwogCiAJLyogV2Ugc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCB3aGVuIHRoZXJlIGFyZSBubyBz dWJwbGFucyAqLwotCUFzc2VydChub2RlLT5hc19ucGxhbnMgPiAwKTsKKwlBc3NlcnQobm9kZS0+ YXMubnBsYW5zID4gMCk7CiAKIAlMV0xvY2tBY3F1aXJlKCZwc3RhdGUtPnBhX2xvY2ssIExXX0VY Q0xVU0lWRSk7CiAKQEAgLTczNSwxMSArNTI3LDExIEBAIGNob29zZV9uZXh0X3N1YnBsYW5fZm9y X3dvcmtlcihBcHBlbmRTdGF0ZSAqbm9kZSkKIAkgKiBydW4tdGltZSBwcnVuaW5nIGlzIGRpc2Fi bGVkIHRoZW4gdGhlIHZhbGlkIHN1YnBsYW5zIHdpbGwgYWx3YXlzIGJlIHNldAogCSAqIHRvIGFs bCBzdWJwbGFucy4KIAkgKi8KLQllbHNlIGlmICghbm9kZS0+YXNfdmFsaWRfc3VicGxhbnNfaWRl bnRpZmllZCkKKwllbHNlIGlmICghbm9kZS0+YXMudmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCkK IAl7Ci0JCW5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5zID0KLQkJCUV4ZWNGaW5kTWF0Y2hpbmdTdWJQ bGFucyhub2RlLT5hc19wcnVuZV9zdGF0ZSwgZmFsc2UsIE5VTEwpOwotCQlub2RlLT5hc192YWxp ZF9zdWJwbGFuc19pZGVudGlmaWVkID0gdHJ1ZTsKKwkJbm9kZS0+YXMudmFsaWRfc3VicGxhbnMg PQorCQkJRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKG5vZGUtPmFzLnBydW5lX3N0YXRlLCBmYWxz ZSwgTlVMTCk7CisJCW5vZGUtPmFzLnZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQgPSB0cnVlOwog CiAJCW1hcmtfaW52YWxpZF9zdWJwbGFuc19hc19maW5pc2hlZChub2RlKTsKIAl9CkBAIC03NTks NyArNTUxLDcgQEAgY2hvb3NlX25leHRfc3VicGxhbl9mb3Jfd29ya2VyKEFwcGVuZFN0YXRlICpu b2RlKQogCXsKIAkJaW50CQkJbmV4dHBsYW47CiAKLQkJbmV4dHBsYW4gPSBibXNfbmV4dF9tZW1i ZXIobm9kZS0+YXNfdmFsaWRfc3VicGxhbnMsCisJCW5leHRwbGFuID0gYm1zX25leHRfbWVtYmVy KG5vZGUtPmFzLnZhbGlkX3N1YnBsYW5zLAogCQkJCQkJCQkgICBwc3RhdGUtPnBhX25leHRfcGxh bik7CiAJCWlmIChuZXh0cGxhbiA+PSAwKQogCQl7CkBAIC03NzIsNyArNTY0LDcgQEAgY2hvb3Nl X25leHRfc3VicGxhbl9mb3Jfd29ya2VyKEFwcGVuZFN0YXRlICpub2RlKQogCQkJICogVHJ5IGxv b3BpbmcgYmFjayB0byB0aGUgZmlyc3QgdmFsaWQgcGFydGlhbCBwbGFuLCBpZiB0aGVyZSBpcwog CQkJICogb25lLiAgSWYgdGhlcmUgaXNuJ3QsIGFycmFuZ2UgdG8gYmFpbCBvdXQgYmVsb3cuCiAJ CQkgKi8KLQkJCW5leHRwbGFuID0gYm1zX25leHRfbWVtYmVyKG5vZGUtPmFzX3ZhbGlkX3N1YnBs YW5zLAorCQkJbmV4dHBsYW4gPSBibXNfbmV4dF9tZW1iZXIobm9kZS0+YXMudmFsaWRfc3VicGxh bnMsCiAJCQkJCQkJCQkgICBub2RlLT5hc19maXJzdF9wYXJ0aWFsX3BsYW4gLSAxKTsKIAkJCXBz dGF0ZS0+cGFfbmV4dF9wbGFuID0KIAkJCQluZXh0cGxhbiA8IDAgPyBub2RlLT5hc193aGljaHBs YW4gOiBuZXh0cGxhbjsKQEAgLTc5Nyw3ICs1ODksNyBAQCBjaG9vc2VfbmV4dF9zdWJwbGFuX2Zv cl93b3JrZXIoQXBwZW5kU3RhdGUgKm5vZGUpCiAKIAkvKiBQaWNrIHRoZSBwbGFuIHdlIGZvdW5k LCBhbmQgYWR2YW5jZSBwYV9uZXh0X3BsYW4gb25lIG1vcmUgdGltZS4gKi8KIAlub2RlLT5hc193 aGljaHBsYW4gPSBwc3RhdGUtPnBhX25leHRfcGxhbjsKLQlwc3RhdGUtPnBhX25leHRfcGxhbiA9 IGJtc19uZXh0X21lbWJlcihub2RlLT5hc192YWxpZF9zdWJwbGFucywKKwlwc3RhdGUtPnBhX25l eHRfcGxhbiA9IGJtc19uZXh0X21lbWJlcihub2RlLT5hcy52YWxpZF9zdWJwbGFucywKIAkJCQkJ CQkJCQkgICBwc3RhdGUtPnBhX25leHRfcGxhbik7CiAKIAkvKgpAQCAtODA2LDcgKzU5OCw3IEBA IGNob29zZV9uZXh0X3N1YnBsYW5fZm9yX3dvcmtlcihBcHBlbmRTdGF0ZSAqbm9kZSkKIAkgKi8K IAlpZiAocHN0YXRlLT5wYV9uZXh0X3BsYW4gPCAwKQogCXsKLQkJaW50CQkJbmV4dHBsYW4gPSBi bXNfbmV4dF9tZW1iZXIobm9kZS0+YXNfdmFsaWRfc3VicGxhbnMsCisJCWludAkJCW5leHRwbGFu ID0gYm1zX25leHRfbWVtYmVyKG5vZGUtPmFzLnZhbGlkX3N1YnBsYW5zLAogCQkJCQkJCQkJCQkg ICBub2RlLT5hc19maXJzdF9wYXJ0aWFsX3BsYW4gLSAxKTsKIAogCQlpZiAobmV4dHBsYW4gPj0g MCkKQEAgLTg0OCwxNiArNjQwLDE2IEBAIG1hcmtfaW52YWxpZF9zdWJwbGFuc19hc19maW5pc2hl ZChBcHBlbmRTdGF0ZSAqbm9kZSkKIAlBc3NlcnQobm9kZS0+YXNfcHN0YXRlKTsKIAogCS8qIFNo b3VsZG4ndCBoYXZlIGJlZW4gY2FsbGVkIHdoZW4gcnVuLXRpbWUgcHJ1bmluZyBpcyBub3QgZW5h YmxlZCAqLwotCUFzc2VydChub2RlLT5hc19wcnVuZV9zdGF0ZSk7CisJQXNzZXJ0KG5vZGUtPmFz LnBydW5lX3N0YXRlKTsKIAogCS8qIE5vdGhpbmcgdG8gZG8gaWYgYWxsIHBsYW5zIGFyZSB2YWxp ZCAqLwotCWlmIChibXNfbnVtX21lbWJlcnMobm9kZS0+YXNfdmFsaWRfc3VicGxhbnMpID09IG5v ZGUtPmFzX25wbGFucykKKwlpZiAoYm1zX251bV9tZW1iZXJzKG5vZGUtPmFzLnZhbGlkX3N1YnBs YW5zKSA9PSBub2RlLT5hcy5ucGxhbnMpCiAJCXJldHVybjsKIAogCS8qIE1hcmsgYWxsIG5vbi12 YWxpZCBwbGFucyBhcyBmaW5pc2hlZCAqLwotCWZvciAoaSA9IDA7IGkgPCBub2RlLT5hc19ucGxh bnM7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgbm9kZS0+YXMubnBsYW5zOyBpKyspCiAJewotCQlp ZiAoIWJtc19pc19tZW1iZXIoaSwgbm9kZS0+YXNfdmFsaWRfc3VicGxhbnMpKQorCQlpZiAoIWJt c19pc19tZW1iZXIoaSwgbm9kZS0+YXMudmFsaWRfc3VicGxhbnMpKQogCQkJbm9kZS0+YXNfcHN0 YXRlLT5wYV9maW5pc2hlZFtpXSA9IHRydWU7CiAJfQogfQpAQCAtODc2LDQ3ICs2NjgsMjUgQEAg bWFya19pbnZhbGlkX3N1YnBsYW5zX2FzX2ZpbmlzaGVkKEFwcGVuZFN0YXRlICpub2RlKQogc3Rh dGljIHZvaWQKIEV4ZWNBcHBlbmRBc3luY0JlZ2luKEFwcGVuZFN0YXRlICpub2RlKQogewotCWlu dAkJCWk7Ci0KLQkvKiBCYWNrd2FyZCBzY2FuIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYXN5bmMtYXdh cmUgQXBwZW5kcy4gKi8KLQlBc3NlcnQoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChub2RlLT5wcy5z dGF0ZS0+ZXNfZGlyZWN0aW9uKSk7Ci0KLQkvKiBXZSBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIHdo ZW4gdGhlcmUgYXJlIG5vIHN1YnBsYW5zICovCi0JQXNzZXJ0KG5vZGUtPmFzX25wbGFucyA+IDAp OwotCi0JLyogV2Ugc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCB3aGVuIHRoZXJlIGFyZSBubyBhc3lu YyBzdWJwbGFucy4gKi8KLQlBc3NlcnQobm9kZS0+YXNfbmFzeW5jcGxhbnMgPiAwKTsKLQogCS8q IElmIHdlJ3ZlIHlldCB0byBkZXRlcm1pbmUgdGhlIHZhbGlkIHN1YnBsYW5zIHRoZW4gZG8gc28g bm93LiAqLwotCWlmICghbm9kZS0+YXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCkKKwlpZiAo IW5vZGUtPmFzLnZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQpCiAJewotCQlub2RlLT5hc192YWxp ZF9zdWJwbGFucyA9Ci0JCQlFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMobm9kZS0+YXNfcHJ1bmVf c3RhdGUsIGZhbHNlLCBOVUxMKTsKLQkJbm9kZS0+YXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmll ZCA9IHRydWU7CisJCW5vZGUtPmFzLnZhbGlkX3N1YnBsYW5zID0KKwkJCUV4ZWNGaW5kTWF0Y2hp bmdTdWJQbGFucyhub2RlLT5hcy5wcnVuZV9zdGF0ZSwgZmFsc2UsIE5VTEwpOworCQlub2RlLT5h cy52YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkID0gdHJ1ZTsKIAogCQljbGFzc2lmeV9tYXRjaGlu Z19zdWJwbGFucyhub2RlKTsKIAl9CiAKIAkvKiBJbml0aWFsaXplIHN0YXRlIHZhcmlhYmxlcy4g Ki8KLQlub2RlLT5hc19zeW5jZG9uZSA9IGJtc19pc19lbXB0eShub2RlLT5hc192YWxpZF9zdWJw bGFucyk7Ci0Jbm9kZS0+YXNfbmFzeW5jcmVtYWluID0gYm1zX251bV9tZW1iZXJzKG5vZGUtPmFz X3ZhbGlkX2FzeW5jcGxhbnMpOworCW5vZGUtPmFzX3N5bmNkb25lID0gYm1zX2lzX2VtcHR5KG5v ZGUtPmFzLnZhbGlkX3N1YnBsYW5zKTsKKwlub2RlLT5hc19uYXN5bmNyZW1haW4gPSBibXNfbnVt X21lbWJlcnMobm9kZS0+YXMudmFsaWRfYXN5bmNwbGFucyk7CiAKIAkvKiBOb3RoaW5nIHRvIGRv IGlmIHRoZXJlIGFyZSBubyB2YWxpZCBhc3luYyBzdWJwbGFucy4gKi8KIAlpZiAobm9kZS0+YXNf bmFzeW5jcmVtYWluID09IDApCiAJCXJldHVybjsKIAotCS8qIE1ha2UgYSByZXF1ZXN0IGZvciBl YWNoIG9mIHRoZSB2YWxpZCBhc3luYyBzdWJwbGFucy4gKi8KLQlpID0gLTE7Ci0Jd2hpbGUgKChp ID0gYm1zX25leHRfbWVtYmVyKG5vZGUtPmFzX3ZhbGlkX2FzeW5jcGxhbnMsIGkpKSA+PSAwKQot CXsKLQkJQXN5bmNSZXF1ZXN0ICphcmVxID0gbm9kZS0+YXNfYXN5bmNyZXF1ZXN0c1tpXTsKLQot CQlBc3NlcnQoYXJlcS0+cmVxdWVzdF9pbmRleCA9PSBpKTsKLQkJQXNzZXJ0KCFhcmVxLT5jYWxs YmFja19wZW5kaW5nKTsKLQotCQkvKiBEbyB0aGUgYWN0dWFsIHdvcmsuICovCi0JCUV4ZWNBc3lu Y1JlcXVlc3QoYXJlcSk7Ci0JfQorCUV4ZWNBcHBlbmRlckFzeW5jQmVnaW4oJm5vZGUtPmFzKTsK IH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQpAQCAtOTYxLDcgKzczMSw3IEBAIEV4ZWNBcHBlbmRBc3luY0dldE5l eHQoQXBwZW5kU3RhdGUgKm5vZGUsIFR1cGxlVGFibGVTbG90ICoqcmVzdWx0KQogCWlmIChub2Rl LT5hc19zeW5jZG9uZSkKIAl7CiAJCUFzc2VydChub2RlLT5hc19uYXN5bmNyZW1haW4gPT0gMCk7 Ci0JCSpyZXN1bHQgPSBFeGVjQ2xlYXJUdXBsZShub2RlLT5wcy5wc19SZXN1bHRUdXBsZVNsb3Qp OworCQkqcmVzdWx0ID0gRXhlY0NsZWFyVHVwbGUobm9kZS0+YXMucHMucHNfUmVzdWx0VHVwbGVT bG90KTsKIAkJcmV0dXJuIHRydWU7CiAJfQogCkBAIC05ODEsNyArNzUxLDcgQEAgRXhlY0FwcGVu ZEFzeW5jUmVxdWVzdChBcHBlbmRTdGF0ZSAqbm9kZSwgVHVwbGVUYWJsZVNsb3QgKipyZXN1bHQp CiAJaW50CQkJaTsKIAogCS8qIE5vdGhpbmcgdG8gZG8gaWYgdGhlcmUgYXJlIG5vIGFzeW5jIHN1 YnBsYW5zIG5lZWRpbmcgYSBuZXcgcmVxdWVzdC4gKi8KLQlpZiAoYm1zX2lzX2VtcHR5KG5vZGUt PmFzX25lZWRyZXF1ZXN0KSkKKwlpZiAoYm1zX2lzX2VtcHR5KG5vZGUtPmFzLm5lZWRyZXF1ZXN0 KSkKIAl7CiAJCUFzc2VydChub2RlLT5hc19uYXN5bmNyZXN1bHRzID09IDApOwogCQlyZXR1cm4g ZmFsc2U7CkBAIC05OTQsMTcgKzc2NCwxNyBAQCBFeGVjQXBwZW5kQXN5bmNSZXF1ZXN0KEFwcGVu ZFN0YXRlICpub2RlLCBUdXBsZVRhYmxlU2xvdCAqKnJlc3VsdCkKIAlpZiAobm9kZS0+YXNfbmFz eW5jcmVzdWx0cyA+IDApCiAJewogCQktLW5vZGUtPmFzX25hc3luY3Jlc3VsdHM7Ci0JCSpyZXN1 bHQgPSBub2RlLT5hc19hc3luY3Jlc3VsdHNbbm9kZS0+YXNfbmFzeW5jcmVzdWx0c107CisJCSpy ZXN1bHQgPSBub2RlLT5hcy5hc3luY3Jlc3VsdHNbbm9kZS0+YXNfbmFzeW5jcmVzdWx0c107CiAJ CXJldHVybiB0cnVlOwogCX0KIAogCS8qIE1ha2UgYSBuZXcgcmVxdWVzdCBmb3IgZWFjaCBvZiB0 aGUgYXN5bmMgc3VicGxhbnMgdGhhdCBuZWVkIGl0LiAqLwotCW5lZWRyZXF1ZXN0ID0gbm9kZS0+ YXNfbmVlZHJlcXVlc3Q7Ci0Jbm9kZS0+YXNfbmVlZHJlcXVlc3QgPSBOVUxMOworCW5lZWRyZXF1 ZXN0ID0gbm9kZS0+YXMubmVlZHJlcXVlc3Q7CisJbm9kZS0+YXMubmVlZHJlcXVlc3QgPSBOVUxM OwogCWkgPSAtMTsKIAl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIobmVlZHJlcXVlc3QsIGkp KSA+PSAwKQogCXsKLQkJQXN5bmNSZXF1ZXN0ICphcmVxID0gbm9kZS0+YXNfYXN5bmNyZXF1ZXN0 c1tpXTsKKwkJQXN5bmNSZXF1ZXN0ICphcmVxID0gbm9kZS0+YXMuYXN5bmNyZXF1ZXN0c1tpXTsK IAogCQkvKiBEbyB0aGUgYWN0dWFsIHdvcmsuICovCiAJCUV4ZWNBc3luY1JlcXVlc3QoYXJlcSk7 CkBAIC0xMDE1LDcgKzc4NSw3IEBAIEV4ZWNBcHBlbmRBc3luY1JlcXVlc3QoQXBwZW5kU3RhdGUg Km5vZGUsIFR1cGxlVGFibGVTbG90ICoqcmVzdWx0KQogCWlmIChub2RlLT5hc19uYXN5bmNyZXN1 bHRzID4gMCkKIAl7CiAJCS0tbm9kZS0+YXNfbmFzeW5jcmVzdWx0czsKLQkJKnJlc3VsdCA9IG5v ZGUtPmFzX2FzeW5jcmVzdWx0c1tub2RlLT5hc19uYXN5bmNyZXN1bHRzXTsKKwkJKnJlc3VsdCA9 IG5vZGUtPmFzLmFzeW5jcmVzdWx0c1tub2RlLT5hc19uYXN5bmNyZXN1bHRzXTsKIAkJcmV0dXJu IHRydWU7CiAJfQogCkBAIC0xMDMxLDEwNSArODAxLDEyIEBAIEV4ZWNBcHBlbmRBc3luY1JlcXVl c3QoQXBwZW5kU3RhdGUgKm5vZGUsIFR1cGxlVGFibGVTbG90ICoqcmVzdWx0KQogc3RhdGljIHZv aWQKIEV4ZWNBcHBlbmRBc3luY0V2ZW50V2FpdChBcHBlbmRTdGF0ZSAqbm9kZSkKIHsKLQlpbnQJ CQluZXZlbnRzID0gbm9kZS0+YXNfbmFzeW5jcGxhbnMgKyAyOwogCWxvbmcJCXRpbWVvdXQgPSBu b2RlLT5hc19zeW5jZG9uZSA/IC0xIDogMDsKLQlXYWl0RXZlbnQJb2NjdXJyZWRfZXZlbnRbRVZF TlRfQlVGRkVSX1NJWkVdOwotCWludAkJCW5vY2N1cnJlZDsKLQlpbnQJCQlpOwogCiAJLyogV2Ug c2hvdWxkIG5ldmVyIGJlIGNhbGxlZCB3aGVuIHRoZXJlIGFyZSBubyB2YWxpZCBhc3luYyBzdWJw bGFucy4gKi8KIAlBc3NlcnQobm9kZS0+YXNfbmFzeW5jcmVtYWluID4gMCk7CiAKLQlBc3NlcnQo bm9kZS0+YXNfZXZlbnRzZXQgPT0gTlVMTCk7Ci0Jbm9kZS0+YXNfZXZlbnRzZXQgPSBDcmVhdGVX YWl0RXZlbnRTZXQoQ3VycmVudFJlc291cmNlT3duZXIsIG5ldmVudHMpOwotCUFkZFdhaXRFdmVu dFRvU2V0KG5vZGUtPmFzX2V2ZW50c2V0LCBXTF9FWElUX09OX1BNX0RFQVRILCBQR0lOVkFMSURf U09DS0VULAotCQkJCQkgIE5VTEwsIE5VTEwpOwotCi0JLyogR2l2ZSBlYWNoIHdhaXRpbmcgc3Vi cGxhbiBhIGNoYW5jZSB0byBhZGQgYW4gZXZlbnQuICovCi0JaSA9IC0xOwotCXdoaWxlICgoaSA9 IGJtc19uZXh0X21lbWJlcihub2RlLT5hc19hc3luY3BsYW5zLCBpKSkgPj0gMCkKLQl7Ci0JCUFz eW5jUmVxdWVzdCAqYXJlcSA9IG5vZGUtPmFzX2FzeW5jcmVxdWVzdHNbaV07Ci0KLQkJaWYgKGFy ZXEtPmNhbGxiYWNrX3BlbmRpbmcpCi0JCQlFeGVjQXN5bmNDb25maWd1cmVXYWl0KGFyZXEpOwot CX0KLQotCS8qCi0JICogTm8gbmVlZCBmb3IgZnVydGhlciBwcm9jZXNzaW5nIGlmIG5vbmUgb2Yg dGhlIHN1YnBsYW5zIGNvbmZpZ3VyZWQgYW55Ci0JICogZXZlbnRzLgotCSAqLwotCWlmIChHZXRO dW1SZWdpc3RlcmVkV2FpdEV2ZW50cyhub2RlLT5hc19ldmVudHNldCkgPT0gMSkKLQl7Ci0JCUZy ZWVXYWl0RXZlbnRTZXQobm9kZS0+YXNfZXZlbnRzZXQpOwotCQlub2RlLT5hc19ldmVudHNldCA9 IE5VTEw7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKgotCSAqIEFkZCB0aGUgcHJvY2VzcyBsYXRjaCB0 byB0aGUgc2V0LCBzbyB0aGF0IHdlIHdha2UgdXAgdG8gcHJvY2VzcyB0aGUKLQkgKiBzdGFuZGFy ZCBpbnRlcnJ1cHRzIHdpdGggQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKS4KLQkgKgotCSAqIE5PVEU6 IEZvciBoaXN0b3JpY2FsIHJlYXNvbnMsIGl0J3MgaW1wb3J0YW50IHRoYXQgdGhpcyBpcyBhZGRl ZCB0byB0aGUKLQkgKiBXYWl0RXZlbnRTZXQgYWZ0ZXIgdGhlIEV4ZWNBc3luY0NvbmZpZ3VyZVdh aXQoKSBjYWxscy4gIE5hbWVseSwKLQkgKiBwb3N0Z3Jlc19mZHcgY2FsbHMgIkdldE51bVJlZ2lz dGVyZWRXYWl0RXZlbnRzKHNldCkgPT0gMSIgdG8gY2hlY2sgaWYKLQkgKiBhbnkgb3RoZXIgZXZl bnRzIGFyZSBpbiB0aGUgc2V0LiAgVGhhdCdzIGEgcG9vciBkZXNpZ24sIGl0J3MKLQkgKiBxdWVz dGlvbmFibGUgZm9yIHBvc3RncmVzX2ZkdyB0byBiZSBkb2luZyB0aGF0IGluIHRoZSBmaXJzdCBw bGFjZSwgYnV0Ci0JICogd2UgY2Fubm90IGNoYW5nZSBpdCBub3cuICBUaGUgcGF0dGVybiBoYXMg cG9zc2libHkgYmVlbiBjb3BpZWQgdG8gb3RoZXIKLQkgKiBleHRlbnNpb25zIHRvby4KLQkgKi8K LQlBZGRXYWl0RXZlbnRUb1NldChub2RlLT5hc19ldmVudHNldCwgV0xfTEFUQ0hfU0VULCBQR0lO VkFMSURfU09DS0VULAotCQkJCQkgIE15TGF0Y2gsIE5VTEwpOwotCi0JLyogUmV0dXJuIGF0IG1v c3QgRVZFTlRfQlVGRkVSX1NJWkUgZXZlbnRzIGluIG9uZSBjYWxsLiAqLwotCWlmIChuZXZlbnRz ID4gRVZFTlRfQlVGRkVSX1NJWkUpCi0JCW5ldmVudHMgPSBFVkVOVF9CVUZGRVJfU0laRTsKLQot CS8qCi0JICogSWYgdGhlIHRpbWVvdXQgaXMgLTEsIHdhaXQgdW50aWwgYXQgbGVhc3Qgb25lIGV2 ZW50IG9jY3Vycy4gIElmIHRoZQotCSAqIHRpbWVvdXQgaXMgMCwgcG9sbCBmb3IgZXZlbnRzLCBi dXQgZG8gbm90IHdhaXQgYXQgYWxsLgotCSAqLwotCW5vY2N1cnJlZCA9IFdhaXRFdmVudFNldFdh aXQobm9kZS0+YXNfZXZlbnRzZXQsIHRpbWVvdXQsIG9jY3VycmVkX2V2ZW50LAotCQkJCQkJCQkg bmV2ZW50cywgV0FJVF9FVkVOVF9BUFBFTkRfUkVBRFkpOwotCUZyZWVXYWl0RXZlbnRTZXQobm9k ZS0+YXNfZXZlbnRzZXQpOwotCW5vZGUtPmFzX2V2ZW50c2V0ID0gTlVMTDsKLQlpZiAobm9jY3Vy cmVkID09IDApCi0JCXJldHVybjsKLQotCS8qIERlbGl2ZXIgbm90aWZpY2F0aW9ucy4gKi8KLQlm b3IgKGkgPSAwOyBpIDwgbm9jY3VycmVkOyBpKyspCi0JewotCQlXYWl0RXZlbnQgICp3ID0gJm9j Y3VycmVkX2V2ZW50W2ldOwotCi0JCS8qCi0JCSAqIEVhY2ggd2FpdGluZyBzdWJwbGFuIHNob3Vs ZCBoYXZlIHJlZ2lzdGVyZWQgaXRzIHdhaXQgZXZlbnQgd2l0aAotCQkgKiB1c2VyX2RhdGEgcG9p bnRpbmcgYmFjayB0byBpdHMgQXN5bmNSZXF1ZXN0LgotCQkgKi8KLQkJaWYgKCh3LT5ldmVudHMg JiBXTF9TT0NLRVRfUkVBREFCTEUpICE9IDApCi0JCXsKLQkJCUFzeW5jUmVxdWVzdCAqYXJlcSA9 IChBc3luY1JlcXVlc3QgKikgdy0+dXNlcl9kYXRhOwotCi0JCQlpZiAoYXJlcS0+Y2FsbGJhY2tf cGVuZGluZykKLQkJCXsKLQkJCQkvKgotCQkJCSAqIE1hcmsgaXQgYXMgbm8gbG9uZ2VyIG5lZWRp bmcgYSBjYWxsYmFjay4gIFdlIG11c3QgZG8gdGhpcwotCQkJCSAqIGJlZm9yZSBkaXNwYXRjaGlu ZyB0aGUgY2FsbGJhY2sgaW4gY2FzZSB0aGUgY2FsbGJhY2sgcmVzZXRzCi0JCQkJICogdGhlIGZs YWcuCi0JCQkJICovCi0JCQkJYXJlcS0+Y2FsbGJhY2tfcGVuZGluZyA9IGZhbHNlOwotCi0JCQkJ LyogRG8gdGhlIGFjdHVhbCB3b3JrLiAqLwotCQkJCUV4ZWNBc3luY05vdGlmeShhcmVxKTsKLQkJ CX0KLQkJfQotCi0JCS8qIEhhbmRsZSBzdGFuZGFyZCBpbnRlcnJ1cHRzICovCi0JCWlmICgody0+ ZXZlbnRzICYgV0xfTEFUQ0hfU0VUKSAhPSAwKQotCQl7Ci0JCQlSZXNldExhdGNoKE15TGF0Y2gp OwotCQkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKLQkJfQotCX0KKwlFeGVjQXBwZW5kZXJBc3lu Y0V2ZW50V2FpdCgmbm9kZS0+YXMsIHRpbWVvdXQsIFdBSVRfRVZFTlRfQVBQRU5EX1JFQURZKTsK IH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQpAQCAtMTE2NSwxNCArODQyLDE0IEBAIEV4ZWNBc3luY0FwcGVuZFJl c3BvbnNlKEFzeW5jUmVxdWVzdCAqYXJlcSkKIAl9CiAKIAkvKiBTYXZlIHJlc3VsdCBzbyB3ZSBj YW4gcmV0dXJuIGl0LiAqLwotCUFzc2VydChub2RlLT5hc19uYXN5bmNyZXN1bHRzIDwgbm9kZS0+ YXNfbmFzeW5jcGxhbnMpOwotCW5vZGUtPmFzX2FzeW5jcmVzdWx0c1tub2RlLT5hc19uYXN5bmNy ZXN1bHRzKytdID0gc2xvdDsKKwlBc3NlcnQobm9kZS0+YXNfbmFzeW5jcmVzdWx0cyA8IG5vZGUt PmFzLm5hc3luY3BsYW5zKTsKKwlub2RlLT5hcy5hc3luY3Jlc3VsdHNbbm9kZS0+YXNfbmFzeW5j cmVzdWx0cysrXSA9IHNsb3Q7CiAKIAkvKgogCSAqIE1hcmsgdGhlIHN1YnBsYW4gdGhhdCByZXR1 cm5lZCBhIHJlc3VsdCBhcyByZWFkeSBmb3IgYSBuZXcgcmVxdWVzdC4gIFdlCiAJICogZG9uJ3Qg bGF1bmNoIGFub3RoZXIgb25lIGhlcmUgaW1tZWRpYXRlbHkgYmVjYXVzZSBpdCBtaWdodCBjb21w bGV0ZS4KIAkgKi8KLQlub2RlLT5hc19uZWVkcmVxdWVzdCA9IGJtc19hZGRfbWVtYmVyKG5vZGUt PmFzX25lZWRyZXF1ZXN0LAorCW5vZGUtPmFzLm5lZWRyZXF1ZXN0ID0gYm1zX2FkZF9tZW1iZXIo bm9kZS0+YXMubmVlZHJlcXVlc3QsCiAJCQkJCQkJCQkJICBhcmVxLT5yZXF1ZXN0X2luZGV4KTsK IH0KIApAQCAtMTE4NywxMCArODY0LDEwIEBAIEV4ZWNBc3luY0FwcGVuZFJlc3BvbnNlKEFzeW5j UmVxdWVzdCAqYXJlcSkKIHN0YXRpYyB2b2lkCiBjbGFzc2lmeV9tYXRjaGluZ19zdWJwbGFucyhB cHBlbmRTdGF0ZSAqbm9kZSkKIHsKLQlBc3NlcnQobm9kZS0+YXNfdmFsaWRfc3VicGxhbnNfaWRl bnRpZmllZCk7CisJQXNzZXJ0KG5vZGUtPmFzLnZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQpOwog CiAJLyogTm90aGluZyB0byBkbyBpZiB0aGVyZSBhcmUgbm8gdmFsaWQgc3VicGxhbnMuICovCi0J aWYgKGJtc19pc19lbXB0eShub2RlLT5hc192YWxpZF9zdWJwbGFucykpCisJaWYgKGJtc19pc19l bXB0eShub2RlLT5hcy52YWxpZF9zdWJwbGFucykpCiAJewogCQlub2RlLT5hc19zeW5jZG9uZSA9 IHRydWU7CiAJCW5vZGUtPmFzX25hc3luY3JlbWFpbiA9IDA7CkBAIC0xMTk5LDggKzg3Niw4IEBA IGNsYXNzaWZ5X21hdGNoaW5nX3N1YnBsYW5zKEFwcGVuZFN0YXRlICpub2RlKQogCiAJLyogTm8g dmFsaWQgYXN5bmMgc3VicGxhbnMgaWRlbnRpZmllZC4gKi8KIAlpZiAoIWNsYXNzaWZ5X21hdGNo aW5nX3N1YnBsYW5zX2NvbW1vbigKLQkJCQkJCQkJCQkgICAmbm9kZS0+YXNfdmFsaWRfc3VicGxh bnMsCi0JCQkJCQkJCQkJICAgbm9kZS0+YXNfYXN5bmNwbGFucywKLQkJCQkJCQkJCQkgICAmbm9k ZS0+YXNfdmFsaWRfYXN5bmNwbGFucykpCisJCQkJCQkJCQkJICAgJm5vZGUtPmFzLnZhbGlkX3N1 YnBsYW5zLAorCQkJCQkJCQkJCSAgIG5vZGUtPmFzLmFzeW5jcGxhbnMsCisJCQkJCQkJCQkJICAg Jm5vZGUtPmFzLnZhbGlkX2FzeW5jcGxhbnMpKQogCQlub2RlLT5hc19uYXN5bmNyZW1haW4gPSAw OwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmMg Yi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuYwppbmRleCAzOTgxMDY5MWJh NC4uNDAyZDlhNDc2ODEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNZXJn ZUFwcGVuZC5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5jCkBA IC0zOCw2ICszOCw3IEBACiAKICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCisjaW5jbHVkZSAiZXhl Y3V0b3IvZXhlY0FwcGVuZC5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWN1dG9yLmgiCiAjaW5j bHVkZSAiZXhlY3V0b3IvZXhlY0FzeW5jLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY1BhcnRp dGlvbi5oIgpAQCAtNzYsMTQgKzc3LDcgQEAgTWVyZ2VBcHBlbmRTdGF0ZSAqCiBFeGVjSW5pdE1l cmdlQXBwZW5kKE1lcmdlQXBwZW5kICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykK IHsKIAlNZXJnZUFwcGVuZFN0YXRlICptZXJnZXN0YXRlID0gbWFrZU5vZGUoTWVyZ2VBcHBlbmRT dGF0ZSk7Ci0JUGxhblN0YXRlICoqbWVyZ2VwbGFuc3RhdGVzOwotCWNvbnN0IFR1cGxlVGFibGVT bG90T3BzICptZXJnZW9wczsKLQlCaXRtYXBzZXQgICp2YWxpZHN1YnBsYW5zOwotCWludAkJCW5w bGFuczsKLQlpbnQJCQlpLAotCQkJCWo7Ci0JQml0bWFwc2V0ICAqYXN5bmNwbGFuczsKLQlpbnQJ CQluYXN5bmNwbGFuczsKKwlpbnQJCQlpOwogCiAJLyogY2hlY2sgZm9yIHVuc3VwcG9ydGVkIGZs YWdzICovCiAJQXNzZXJ0KCEoZWZsYWdzICYgKEVYRUNfRkxBR19CQUNLV0FSRCB8IEVYRUNfRkxB R19NQVJLKSkpOwpAQCAtOTEsMTU0ICs4NSwyNyBAQCBFeGVjSW5pdE1lcmdlQXBwZW5kKE1lcmdl QXBwZW5kICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAkvKgogCSAqIGNyZWF0 ZSBuZXcgTWVyZ2VBcHBlbmRTdGF0ZSBmb3Igb3VyIG5vZGUKIAkgKi8KLQltZXJnZXN0YXRlLT5w cy5wbGFuID0gKFBsYW4gKikgbm9kZTsKLQltZXJnZXN0YXRlLT5wcy5zdGF0ZSA9IGVzdGF0ZTsK LQltZXJnZXN0YXRlLT5wcy5FeGVjUHJvY05vZGUgPSBFeGVjTWVyZ2VBcHBlbmQ7Ci0KLQkvKiBJ ZiBydW4tdGltZSBwYXJ0aXRpb24gcHJ1bmluZyBpcyBlbmFibGVkLCB0aGVuIHNldCB0aGF0IHVw IG5vdyAqLwotCWlmIChub2RlLT5wYXJ0X3BydW5lX2luZGV4ID49IDApCi0JewotCQlQYXJ0aXRp b25QcnVuZVN0YXRlICpwcnVuZXN0YXRlOwotCi0JCS8qCi0JCSAqIFNldCB1cCBwcnVuaW5nIGRh dGEgc3RydWN0dXJlLiAgVGhpcyBhbHNvIGluaXRpYWxpemVzIHRoZSBzZXQgb2YKLQkJICogc3Vi cGxhbnMgdG8gaW5pdGlhbGl6ZSAodmFsaWRzdWJwbGFucykgYnkgdGFraW5nIGludG8gYWNjb3Vu dCB0aGUKLQkJICogcmVzdWx0IG9mIHBlcmZvcm1pbmcgaW5pdGlhbCBwcnVuaW5nIGlmIGFueS4K LQkJICovCi0JCXBydW5lc3RhdGUgPSBFeGVjSW5pdFBhcnRpdGlvbkV4ZWNQcnVuaW5nKCZtZXJn ZXN0YXRlLT5wcywKLQkJCQkJCQkJCQkJCSAgbGlzdF9sZW5ndGgobm9kZS0+bWVyZ2VwbGFucyks Ci0JCQkJCQkJCQkJCQkgIG5vZGUtPnBhcnRfcHJ1bmVfaW5kZXgsCi0JCQkJCQkJCQkJCQkgIG5v ZGUtPmFwcHJlbGlkcywKLQkJCQkJCQkJCQkJCSAgJnZhbGlkc3VicGxhbnMpOwotCQltZXJnZXN0 YXRlLT5tc19wcnVuZV9zdGF0ZSA9IHBydW5lc3RhdGU7Ci0JCW5wbGFucyA9IGJtc19udW1fbWVt YmVycyh2YWxpZHN1YnBsYW5zKTsKLQotCQkvKgotCQkgKiBXaGVuIG5vIHJ1bi10aW1lIHBydW5p bmcgaXMgcmVxdWlyZWQgYW5kIHRoZXJlJ3MgYXQgbGVhc3Qgb25lCi0JCSAqIHN1YnBsYW4sIHdl IGNhbiBmaWxsIG1zX3ZhbGlkX3N1YnBsYW5zIGltbWVkaWF0ZWx5LCBwcmV2ZW50aW5nCi0JCSAq IGxhdGVyIGNhbGxzIHRvIEV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucy4KLQkJICovCi0JCWlmICgh cHJ1bmVzdGF0ZS0+ZG9fZXhlY19wcnVuZSAmJiBucGxhbnMgPiAwKQotCQl7Ci0JCQltZXJnZXN0 YXRlLT5tc192YWxpZF9zdWJwbGFucyA9IGJtc19hZGRfcmFuZ2UoTlVMTCwgMCwgbnBsYW5zIC0g MSk7Ci0JCQltZXJnZXN0YXRlLT5tc192YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkID0gdHJ1ZTsK LQkJfQotCX0KLQllbHNlCi0JewotCQlucGxhbnMgPSBsaXN0X2xlbmd0aChub2RlLT5tZXJnZXBs YW5zKTsKLQotCQkvKgotCQkgKiBXaGVuIHJ1bi10aW1lIHBhcnRpdGlvbiBwcnVuaW5nIGlzIG5v dCBlbmFibGVkIHdlIGNhbiBqdXN0IG1hcmsgYWxsCi0JCSAqIHN1YnBsYW5zIGFzIHZhbGlkOyB0 aGV5IG11c3QgYWxzbyBhbGwgYmUgaW5pdGlhbGl6ZWQuCi0JCSAqLwotCQlBc3NlcnQobnBsYW5z ID4gMCk7Ci0JCW1lcmdlc3RhdGUtPm1zX3ZhbGlkX3N1YnBsYW5zID0gdmFsaWRzdWJwbGFucyA9 Ci0JCQlibXNfYWRkX3JhbmdlKE5VTEwsIDAsIG5wbGFucyAtIDEpOwotCQltZXJnZXN0YXRlLT5t c192YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkID0gdHJ1ZTsKLQkJbWVyZ2VzdGF0ZS0+bXNfcHJ1 bmVfc3RhdGUgPSBOVUxMOwotCX0KLQotCW1lcmdlcGxhbnN0YXRlcyA9IHBhbGxvY19hcnJheShQ bGFuU3RhdGUgKiwgbnBsYW5zKTsKLQltZXJnZXN0YXRlLT5tZXJnZXBsYW5zID0gbWVyZ2VwbGFu c3RhdGVzOwotCW1lcmdlc3RhdGUtPm1zX25wbGFucyA9IG5wbGFuczsKLQotCW1lcmdlc3RhdGUt Pm1zX3Nsb3RzID0gcGFsbG9jMF9hcnJheShUdXBsZVRhYmxlU2xvdCAqLCBucGxhbnMpOwotCW1l cmdlc3RhdGUtPm1zX2hlYXAgPSBiaW5hcnloZWFwX2FsbG9jYXRlKG5wbGFucywgaGVhcF9jb21w YXJlX3Nsb3RzLAorCW1lcmdlc3RhdGUtPm1zLnBzLnBsYW4gPSAoUGxhbiAqKSBub2RlOworCW1l cmdlc3RhdGUtPm1zLnBzLnN0YXRlID0gZXN0YXRlOworCW1lcmdlc3RhdGUtPm1zLnBzLkV4ZWNQ cm9jTm9kZSA9IEV4ZWNNZXJnZUFwcGVuZDsKKworCS8qIEluaXRpYWxpemUgY29tbW9uIGZpZWxk cyAqLworCUV4ZWNJbml0QXBwZW5kZXIoJm1lcmdlc3RhdGUtPm1zLAorCQkJCQkgJm5vZGUtPmFw LAorCQkJCQkgZXN0YXRlLAorCQkJCQkgZWZsYWdzLAorCQkJCQkgLTEsCisJCQkJCSBOVUxMKTsK KworCWlmIChtZXJnZXN0YXRlLT5tcy5uYXN5bmNwbGFucyA+IDAgJiYgbWVyZ2VzdGF0ZS0+bXMu dmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCkKKwkJY2xhc3NpZnlfbWF0Y2hpbmdfc3VicGxhbnMo bWVyZ2VzdGF0ZSk7CisKKwltZXJnZXN0YXRlLT5tc19zbG90cyA9IHBhbGxvYzBfYXJyYXkoVHVw bGVUYWJsZVNsb3QgKiwgbWVyZ2VzdGF0ZS0+bXMubnBsYW5zKTsKKwltZXJnZXN0YXRlLT5tc19o ZWFwID0gYmluYXJ5aGVhcF9hbGxvY2F0ZShtZXJnZXN0YXRlLT5tcy5ucGxhbnMsIGhlYXBfY29t cGFyZV9zbG90cywKIAkJCQkJCQkJCQkJICBtZXJnZXN0YXRlKTsKIAotCS8qCi0JICogY2FsbCBF eGVjSW5pdE5vZGUgb24gZWFjaCBvZiB0aGUgdmFsaWQgcGxhbnMgdG8gYmUgZXhlY3V0ZWQgYW5k IHNhdmUKLQkgKiB0aGUgcmVzdWx0cyBpbnRvIHRoZSBtZXJnZXBsYW5zdGF0ZXMgYXJyYXkuCi0J ICovCi0JaiA9IDA7Ci0JYXN5bmNwbGFucyA9IE5VTEw7Ci0JbmFzeW5jcGxhbnMgPSAwOwotCi0J aSA9IC0xOwotCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcih2YWxpZHN1YnBsYW5zLCBpKSkg Pj0gMCkKLQl7Ci0JCVBsYW4JICAgKmluaXROb2RlID0gKFBsYW4gKikgbGlzdF9udGgobm9kZS0+ bWVyZ2VwbGFucywgaSk7Ci0KLQkJLyoKLQkJICogUmVjb3JkIGFzeW5jIHN1YnBsYW5zLiAgV2hl biBleGVjdXRpbmcgRXZhbFBsYW5RdWFsLCB3ZSB0cmVhdCB0aGVtCi0JCSAqIGFzIHN5bmMgb25l czsgZG9uJ3QgZG8gdGhpcyB3aGVuIGluaXRpYWxpemluZyBhbiBFdmFsUGxhblF1YWwgcGxhbgot CQkgKiB0cmVlLgotCQkgKi8KLQkJaWYgKGluaXROb2RlLT5hc3luY19jYXBhYmxlICYmIGVzdGF0 ZS0+ZXNfZXBxX2FjdGl2ZSA9PSBOVUxMKQotCQl7Ci0JCQlhc3luY3BsYW5zID0gYm1zX2FkZF9t ZW1iZXIoYXN5bmNwbGFucywgaik7Ci0JCQluYXN5bmNwbGFucysrOwotCQl9Ci0KLQkJbWVyZ2Vw bGFuc3RhdGVzW2orK10gPSBFeGVjSW5pdE5vZGUoaW5pdE5vZGUsIGVzdGF0ZSwgZWZsYWdzKTsK LQl9Ci0KLQkvKgotCSAqIEluaXRpYWxpemUgTWVyZ2VBcHBlbmQncyByZXN1bHQgdHVwbGUgdHlw ZSBhbmQgc2xvdC4gIElmIHRoZSBjaGlsZAotCSAqIHBsYW5zIGFsbCBwcm9kdWNlIHRoZSBzYW1l IGZpeGVkIHNsb3QgdHlwZSwgd2UgY2FuIHVzZSB0aGF0IHNsb3QgdHlwZTsKLQkgKiBvdGhlcndp c2UgbWFrZSBhIHZpcnR1YWwgc2xvdC4gIChOb3RlIHRoYXQgdGhlIHJlc3VsdCBzbG90IGl0c2Vs ZiBpcwotCSAqIHVzZWQgb25seSB0byByZXR1cm4gYSBudWxsIHR1cGxlIGF0IGVuZCBvZiBleGVj dXRpb247IHJlYWwgdHVwbGVzIGFyZQotCSAqIHJldHVybmVkIHRvIHRoZSBjYWxsZXIgaW4gdGhl IGNoaWxkcmVuJ3Mgb3duIHJlc3VsdCBzbG90cy4gIFdoYXQgd2UgYXJlCi0JICogZG9pbmcgaGVy ZSBpcyBhbGxvd2luZyB0aGUgcGFyZW50IHBsYW4gbm9kZSB0byBvcHRpbWl6ZSBpZiB0aGUKLQkg KiBNZXJnZUFwcGVuZCB3aWxsIHJldHVybiBvbmx5IG9uZSBraW5kIG9mIHNsb3QuKQotCSAqLwot CW1lcmdlb3BzID0gRXhlY0dldENvbW1vblNsb3RPcHMobWVyZ2VwbGFuc3RhdGVzLCBqKTsKLQlp ZiAobWVyZ2VvcHMgIT0gTlVMTCkKLQl7Ci0JCUV4ZWNJbml0UmVzdWx0VHVwbGVTbG90VEwoJm1l cmdlc3RhdGUtPnBzLCBtZXJnZW9wcyk7Ci0JfQotCWVsc2UKLQl7Ci0JCUV4ZWNJbml0UmVzdWx0 VHVwbGVTbG90VEwoJm1lcmdlc3RhdGUtPnBzLCAmVFRTT3BzVmlydHVhbCk7Ci0JCS8qIHNob3cg dGhhdCB0aGUgb3V0cHV0IHNsb3QgdHlwZSBpcyBub3QgZml4ZWQgKi8KLQkJbWVyZ2VzdGF0ZS0+ cHMucmVzdWx0b3Bzc2V0ID0gdHJ1ZTsKLQkJbWVyZ2VzdGF0ZS0+cHMucmVzdWx0b3BzZml4ZWQg PSBmYWxzZTsKLQl9Ci0KLQkvKgotCSAqIE1pc2NlbGxhbmVvdXMgaW5pdGlhbGl6YXRpb24KLQkg Ki8KLQltZXJnZXN0YXRlLT5wcy5wc19Qcm9qSW5mbyA9IE5VTEw7Ci0KLQkvKiBJbml0aWFsaXpl IGFzeW5jIHN0YXRlICovCi0JbWVyZ2VzdGF0ZS0+bXNfYXN5bmNwbGFucyA9IGFzeW5jcGxhbnM7 Ci0JbWVyZ2VzdGF0ZS0+bXNfbmFzeW5jcGxhbnMgPSBuYXN5bmNwbGFuczsKLQltZXJnZXN0YXRl LT5tc19hc3luY3JlcXVlc3RzID0gTlVMTDsKLQltZXJnZXN0YXRlLT5tc19hc3luY3Jlc3VsdHMg PSBOVUxMOwogCW1lcmdlc3RhdGUtPm1zX2hhc19hc3luY3Jlc3VsdHMgPSBOVUxMOwogCW1lcmdl c3RhdGUtPm1zX2FzeW5jcmVtYWluID0gTlVMTDsKLQltZXJnZXN0YXRlLT5tc19uZWVkcmVxdWVz dCA9IE5VTEw7Ci0JbWVyZ2VzdGF0ZS0+bXNfZXZlbnRzZXQgPSBOVUxMOwotCW1lcmdlc3RhdGUt Pm1zX3ZhbGlkX2FzeW5jcGxhbnMgPSBOVUxMOwotCi0JaWYgKG5hc3luY3BsYW5zID4gMCkKLQl7 Ci0JCW1lcmdlc3RhdGUtPm1zX2FzeW5jcmVxdWVzdHMgPSAoQXN5bmNSZXF1ZXN0ICoqKQotCQkJ cGFsbG9jMChucGxhbnMgKiBzaXplb2YoQXN5bmNSZXF1ZXN0ICopKTsKLQotCQlpID0gLTE7Ci0J CXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihhc3luY3BsYW5zLCBpKSkgPj0gMCkKLQkJewot CQkJQXN5bmNSZXF1ZXN0ICphcmVxOwotCi0JCQlhcmVxID0gcGFsbG9jKHNpemVvZihBc3luY1Jl cXVlc3QpKTsKLQkJCWFyZXEtPnJlcXVlc3RvciA9IChQbGFuU3RhdGUgKikgbWVyZ2VzdGF0ZTsK LQkJCWFyZXEtPnJlcXVlc3RlZSA9IG1lcmdlcGxhbnN0YXRlc1tpXTsKLQkJCWFyZXEtPnJlcXVl c3RfaW5kZXggPSBpOwotCQkJYXJlcS0+Y2FsbGJhY2tfcGVuZGluZyA9IGZhbHNlOwotCQkJYXJl cS0+cmVxdWVzdF9jb21wbGV0ZSA9IGZhbHNlOwotCQkJYXJlcS0+cmVzdWx0ID0gTlVMTDsKLQot CQkJbWVyZ2VzdGF0ZS0+bXNfYXN5bmNyZXF1ZXN0c1tpXSA9IGFyZXE7Ci0JCX0KLQotCQltZXJn ZXN0YXRlLT5tc19hc3luY3Jlc3VsdHMgPSAoVHVwbGVUYWJsZVNsb3QgKiopCi0JCQlwYWxsb2Mw KG5wbGFucyAqIHNpemVvZihUdXBsZVRhYmxlU2xvdCAqKSk7Ci0KLQkJaWYgKG1lcmdlc3RhdGUt Pm1zX3ZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQpCi0JCQljbGFzc2lmeV9tYXRjaGluZ19zdWJw bGFucyhtZXJnZXN0YXRlKTsKLQl9CiAKIAkvKgogCSAqIGluaXRpYWxpemUgc29ydC1rZXkgaW5m b3JtYXRpb24KQEAgLTI5MywyMCArMTYwLDIwIEBAIEV4ZWNNZXJnZUFwcGVuZChQbGFuU3RhdGUg KnBzdGF0ZSkKIAlpZiAoIW5vZGUtPm1zX2luaXRpYWxpemVkKQogCXsKIAkJLyogTm90aGluZyB0 byBkbyBpZiBhbGwgc3VicGxhbnMgd2VyZSBwcnVuZWQgKi8KLQkJaWYgKG5vZGUtPm1zX25wbGFu cyA9PSAwKQotCQkJcmV0dXJuIEV4ZWNDbGVhclR1cGxlKG5vZGUtPnBzLnBzX1Jlc3VsdFR1cGxl U2xvdCk7CisJCWlmIChub2RlLT5tcy5ucGxhbnMgPT0gMCkKKwkJCXJldHVybiBFeGVjQ2xlYXJU dXBsZShub2RlLT5tcy5wcy5wc19SZXN1bHRUdXBsZVNsb3QpOwogCiAJCS8qIElmIHdlJ3ZlIHll dCB0byBkZXRlcm1pbmUgdGhlIHZhbGlkIHN1YnBsYW5zIHRoZW4gZG8gc28gbm93LiAqLwotCQlp ZiAoIW5vZGUtPm1zX3ZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQpCisJCWlmICghbm9kZS0+bXMu dmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCkKIAkJewotCQkJbm9kZS0+bXNfdmFsaWRfc3VicGxh bnMgPQotCQkJCUV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhub2RlLT5tc19wcnVuZV9zdGF0ZSwg ZmFsc2UsIE5VTEwpOwotCQkJbm9kZS0+bXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCA9IHRy dWU7CisJCQlub2RlLT5tcy52YWxpZF9zdWJwbGFucyA9CisJCQkJRXhlY0ZpbmRNYXRjaGluZ1N1 YlBsYW5zKG5vZGUtPm1zLnBydW5lX3N0YXRlLCBmYWxzZSwgTlVMTCk7CisJCQlub2RlLT5tcy52 YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkID0gdHJ1ZTsKIAkJCWNsYXNzaWZ5X21hdGNoaW5nX3N1 YnBsYW5zKG5vZGUpOwogCQl9CiAKIAkJLyogSWYgdGhlcmUgYXJlIGFueSBhc3luYyBzdWJwbGFu cywgYmVnaW4gZXhlY3V0aW5nIHRoZW0uICovCi0JCWlmIChub2RlLT5tc19uYXN5bmNwbGFucyA+ IDApCisJCWlmIChub2RlLT5tcy5uYXN5bmNwbGFucyA+IDApCiAJCQlFeGVjTWVyZ2VBcHBlbmRB c3luY0JlZ2luKG5vZGUpOwogCiAJCS8qCkBAIC0zMTQsMTYgKzE4MSwxNiBAQCBFeGVjTWVyZ2VB cHBlbmQoUGxhblN0YXRlICpwc3RhdGUpCiAJCSAqIGFuZCBzZXQgdXAgdGhlIGhlYXAuCiAJCSAq LwogCQlpID0gLTE7Ci0JCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihub2RlLT5tc192YWxp ZF9zdWJwbGFucywgaSkpID49IDApCisJCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihub2Rl LT5tcy52YWxpZF9zdWJwbGFucywgaSkpID49IDApCiAJCXsKLQkJCW5vZGUtPm1zX3Nsb3RzW2ld ID0gRXhlY1Byb2NOb2RlKG5vZGUtPm1lcmdlcGxhbnNbaV0pOworCQkJbm9kZS0+bXNfc2xvdHNb aV0gPSBFeGVjUHJvY05vZGUobm9kZS0+bXMucGxhbnNbaV0pOwogCQkJaWYgKCFUdXBJc051bGwo bm9kZS0+bXNfc2xvdHNbaV0pKQogCQkJCWJpbmFyeWhlYXBfYWRkX3Vub3JkZXJlZChub2RlLT5t c19oZWFwLCBJbnQzMkdldERhdHVtKGkpKTsKIAkJfQogCiAJCS8qIExvb2sgYXQgdmFsaWQgYXN5 bmMgc3VicGxhbnMgKi8KIAkJaSA9IC0xOwotCQl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIo bm9kZS0+bXNfdmFsaWRfYXN5bmNwbGFucywgaSkpID49IDApCisJCXdoaWxlICgoaSA9IGJtc19u ZXh0X21lbWJlcihub2RlLT5tcy52YWxpZF9hc3luY3BsYW5zLCBpKSkgPj0gMCkKIAkJewogCQkJ RXhlY01lcmdlQXBwZW5kQXN5bmNHZXROZXh0KG5vZGUsIGkpOwogCQkJaWYgKCFUdXBJc051bGwo bm9kZS0+bXNfc2xvdHNbaV0pKQpAQCAtMzQ0LDEyICsyMTEsMTIgQEAgRXhlY01lcmdlQXBwZW5k KFBsYW5TdGF0ZSAqcHN0YXRlKQogCQkgKiB0byBub3QgcHVsbCB0dXBsZXMgdW50aWwgbmVjZXNz YXJ5LikKIAkJICovCiAJCWkgPSBEYXR1bUdldEludDMyKGJpbmFyeWhlYXBfZmlyc3Qobm9kZS0+ bXNfaGVhcCkpOwotCQlpZiAoYm1zX2lzX21lbWJlcihpLCBub2RlLT5tc19hc3luY3BsYW5zKSkK KwkJaWYgKGJtc19pc19tZW1iZXIoaSwgbm9kZS0+bXMuYXN5bmNwbGFucykpCiAJCQlFeGVjTWVy Z2VBcHBlbmRBc3luY0dldE5leHQobm9kZSwgaSk7CiAJCWVsc2UKIAkJewotCQkJQXNzZXJ0KGJt c19pc19tZW1iZXIoaSwgbm9kZS0+bXNfdmFsaWRfc3VicGxhbnMpKTsKLQkJCW5vZGUtPm1zX3Ns b3RzW2ldID0gRXhlY1Byb2NOb2RlKG5vZGUtPm1lcmdlcGxhbnNbaV0pOworCQkJQXNzZXJ0KGJt c19pc19tZW1iZXIoaSwgbm9kZS0+bXMudmFsaWRfc3VicGxhbnMpKTsKKwkJCW5vZGUtPm1zX3Ns b3RzW2ldID0gRXhlY1Byb2NOb2RlKG5vZGUtPm1zLnBsYW5zW2ldKTsKIAkJfQogCQlpZiAoIVR1 cElzTnVsbChub2RlLT5tc19zbG90c1tpXSkpCiAJCQliaW5hcnloZWFwX3JlcGxhY2VfZmlyc3Qo bm9kZS0+bXNfaGVhcCwgSW50MzJHZXREYXR1bShpKSk7CkBAIC0zNjAsNyArMjI3LDcgQEAgRXhl Y01lcmdlQXBwZW5kKFBsYW5TdGF0ZSAqcHN0YXRlKQogCWlmIChiaW5hcnloZWFwX2VtcHR5KG5v ZGUtPm1zX2hlYXApKQogCXsKIAkJLyogQWxsIHRoZSBzdWJwbGFucyBhcmUgZXhoYXVzdGVkLCBh bmQgc28gaXMgdGhlIGhlYXAgKi8KLQkJcmVzdWx0ID0gRXhlY0NsZWFyVHVwbGUobm9kZS0+cHMu cHNfUmVzdWx0VHVwbGVTbG90KTsKKwkJcmVzdWx0ID0gRXhlY0NsZWFyVHVwbGUobm9kZS0+bXMu cHMucHNfUmVzdWx0VHVwbGVTbG90KTsKIAl9CiAJZWxzZQogCXsKQEAgLTQyNiw4MSArMjkzLDIx IEBAIGhlYXBfY29tcGFyZV9zbG90cyhEYXR1bSBhLCBEYXR1bSBiLCB2b2lkICphcmcpCiB2b2lk CiBFeGVjRW5kTWVyZ2VBcHBlbmQoTWVyZ2VBcHBlbmRTdGF0ZSAqbm9kZSkKIHsKLQlQbGFuU3Rh dGUgKiptZXJnZXBsYW5zOwotCWludAkJCW5wbGFuczsKLQlpbnQJCQlpOwotCi0JLyoKLQkgKiBn ZXQgaW5mb3JtYXRpb24gZnJvbSB0aGUgbm9kZQotCSAqLwotCW1lcmdlcGxhbnMgPSBub2RlLT5t ZXJnZXBsYW5zOwotCW5wbGFucyA9IG5vZGUtPm1zX25wbGFuczsKLQotCS8qCi0JICogc2h1dCBk b3duIGVhY2ggb2YgdGhlIHN1YnNjYW5zCi0JICovCi0JZm9yIChpID0gMDsgaSA8IG5wbGFuczsg aSsrKQotCQlFeGVjRW5kTm9kZShtZXJnZXBsYW5zW2ldKTsKKwlFeGVjRW5kQXBwZW5kZXIoJm5v ZGUtPm1zKTsKIH0KIAogdm9pZAogRXhlY1JlU2Nhbk1lcmdlQXBwZW5kKE1lcmdlQXBwZW5kU3Rh dGUgKm5vZGUpCiB7Ci0JaW50CQkJaTsKLQlpbnQJCQluYXN5bmNwbGFucyA9IG5vZGUtPm1zX25h c3luY3BsYW5zOworCWludAkJCW5hc3luY3BsYW5zID0gbm9kZS0+bXMubmFzeW5jcGxhbnM7CiAK LQkvKgotCSAqIElmIGFueSBQQVJBTV9FWEVDIFBhcmFtcyB1c2VkIGluIHBydW5pbmcgZXhwcmVz c2lvbnMgaGF2ZSBjaGFuZ2VkLCB0aGVuCi0JICogd2UnZCBiZXR0ZXIgdW5zZXQgdGhlIHZhbGlk IHN1YnBsYW5zIHNvIHRoYXQgdGhleSBhcmUgcmVzZWxlY3RlZCBmb3IKLQkgKiB0aGUgbmV3IHBh cmFtZXRlciB2YWx1ZXMuCi0JICovCi0JaWYgKG5vZGUtPm1zX3BydW5lX3N0YXRlICYmCi0JCWJt c19vdmVybGFwKG5vZGUtPnBzLmNoZ1BhcmFtLAotCQkJCQlub2RlLT5tc19wcnVuZV9zdGF0ZS0+ ZXhlY3BhcmFtaWRzKSkKLQl7Ci0JCW5vZGUtPm1zX3ZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQg PSBmYWxzZTsKLQkJYm1zX2ZyZWUobm9kZS0+bXNfdmFsaWRfc3VicGxhbnMpOwotCQlub2RlLT5t c192YWxpZF9zdWJwbGFucyA9IE5VTEw7Ci0JCWJtc19mcmVlKG5vZGUtPm1zX3ZhbGlkX2FzeW5j cGxhbnMpOwotCQlub2RlLT5tc192YWxpZF9hc3luY3BsYW5zID0gTlVMTDsKLQl9Ci0KLQlmb3Ig KGkgPSAwOyBpIDwgbm9kZS0+bXNfbnBsYW5zOyBpKyspCi0JewotCQlQbGFuU3RhdGUgICpzdWJu b2RlID0gbm9kZS0+bWVyZ2VwbGFuc1tpXTsKLQotCQkvKgotCQkgKiBFeGVjUmVTY2FuIGRvZXNu J3Qga25vdyBhYm91dCBteSBzdWJwbGFucywgc28gSSBoYXZlIHRvIGRvCi0JCSAqIGNoYW5nZWQt cGFyYW1ldGVyIHNpZ25hbGluZyBteXNlbGYuCi0JCSAqLwotCQlpZiAobm9kZS0+cHMuY2hnUGFy YW0gIT0gTlVMTCkKLQkJCVVwZGF0ZUNoYW5nZWRQYXJhbVNldChzdWJub2RlLCBub2RlLT5wcy5j aGdQYXJhbSk7Ci0KLQkJLyoKLQkJICogSWYgY2hnUGFyYW0gb2Ygc3Vibm9kZSBpcyBub3QgbnVs bCB0aGVuIHBsYW4gd2lsbCBiZSByZS1zY2FubmVkIGJ5Ci0JCSAqIGZpcnN0IEV4ZWNQcm9jTm9k ZS4KLQkJICovCi0JCWlmIChzdWJub2RlLT5jaGdQYXJhbSA9PSBOVUxMKQotCQkJRXhlY1JlU2Nh bihzdWJub2RlKTsKLQl9CisJRXhlY1JlU2NhbkFwcGVuZGVyKCZub2RlLT5tcyk7CiAKLQkvKiBS ZXNldCBhc3luYyBzdGF0ZSAqLworCS8qIFJlc2V0IHNwZWNpZmljIG1lcmdlIGFwcGVuZCBhc3lu YyBzdGF0ZSAqLwogCWlmIChuYXN5bmNwbGFucyA+IDApCiAJewotCQlpID0gLTE7Ci0JCXdoaWxl ICgoaSA9IGJtc19uZXh0X21lbWJlcihub2RlLT5tc19hc3luY3BsYW5zLCBpKSkgPj0gMCkKLQkJ ewotCQkJQXN5bmNSZXF1ZXN0ICphcmVxID0gbm9kZS0+bXNfYXN5bmNyZXF1ZXN0c1tpXTsKLQot CQkJYXJlcS0+Y2FsbGJhY2tfcGVuZGluZyA9IGZhbHNlOwotCQkJYXJlcS0+cmVxdWVzdF9jb21w bGV0ZSA9IGZhbHNlOwotCQkJYXJlcS0+cmVzdWx0ID0gTlVMTDsKLQkJfQotCiAJCWJtc19mcmVl KG5vZGUtPm1zX2FzeW5jcmVtYWluKTsKIAkJbm9kZS0+bXNfYXN5bmNyZW1haW4gPSBOVUxMOwot CQlibXNfZnJlZShub2RlLT5tc19uZWVkcmVxdWVzdCk7Ci0JCW5vZGUtPm1zX25lZWRyZXF1ZXN0 ID0gTlVMTDsKIAkJYm1zX2ZyZWUobm9kZS0+bXNfaGFzX2FzeW5jcmVzdWx0cyk7CiAJCW5vZGUt Pm1zX2hhc19hc3luY3Jlc3VsdHMgPSBOVUxMOwogCX0KQEAgLTUxOSwxMCArMzI2LDEwIEBAIEV4 ZWNSZVNjYW5NZXJnZUFwcGVuZChNZXJnZUFwcGVuZFN0YXRlICpub2RlKQogc3RhdGljIHZvaWQK IGNsYXNzaWZ5X21hdGNoaW5nX3N1YnBsYW5zKE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUpCiB7Ci0J QXNzZXJ0KG5vZGUtPm1zX3ZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQpOworCUFzc2VydChub2Rl LT5tcy52YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkKTsKIAogCS8qIE5vdGhpbmcgdG8gZG8gaWYg dGhlcmUgYXJlIG5vIHZhbGlkIHN1YnBsYW5zLiAqLwotCWlmIChibXNfaXNfZW1wdHkobm9kZS0+ bXNfdmFsaWRfc3VicGxhbnMpKQorCWlmIChibXNfaXNfZW1wdHkobm9kZS0+bXMudmFsaWRfc3Vi cGxhbnMpKQogCXsKIAkJbm9kZS0+bXNfYXN5bmNyZW1haW4gPSBOVUxMOwogCQlyZXR1cm47CkBA IC01MzAsOSArMzM3LDkgQEAgY2xhc3NpZnlfbWF0Y2hpbmdfc3VicGxhbnMoTWVyZ2VBcHBlbmRT dGF0ZSAqbm9kZSkKIAogCS8qIE5vIHZhbGlkIGFzeW5jIHN1YnBsYW5zIGlkZW50aWZpZWQuICov CiAJaWYgKCFjbGFzc2lmeV9tYXRjaGluZ19zdWJwbGFuc19jb21tb24oCi0JCQkJCQkJCQkJICAg Jm5vZGUtPm1zX3ZhbGlkX3N1YnBsYW5zLAotCQkJCQkJCQkJCSAgIG5vZGUtPm1zX2FzeW5jcGxh bnMsCi0JCQkJCQkJCQkJICAgJm5vZGUtPm1zX3ZhbGlkX2FzeW5jcGxhbnMpKQorCQkJCQkJCQkJ CSAgICZub2RlLT5tcy52YWxpZF9zdWJwbGFucywKKwkJCQkJCQkJCQkgICBub2RlLT5tcy5hc3lu Y3BsYW5zLAorCQkJCQkJCQkJCSAgICZub2RlLT5tcy52YWxpZF9hc3luY3BsYW5zKSkKIAkJbm9k ZS0+bXNfYXN5bmNyZW1haW4gPSBOVUxMOwogfQogCkBAIC01NDUsMzkgKzM1MiwxNyBAQCBjbGFz c2lmeV9tYXRjaGluZ19zdWJwbGFucyhNZXJnZUFwcGVuZFN0YXRlICpub2RlKQogc3RhdGljIHZv aWQKIEV4ZWNNZXJnZUFwcGVuZEFzeW5jQmVnaW4oTWVyZ2VBcHBlbmRTdGF0ZSAqbm9kZSkKIHsK LQlpbnQJCQlpOwotCi0JLyogQmFja3dhcmQgc2NhbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGFzeW5j LWF3YXJlIE1lcmdlQXBwZW5kcy4gKi8KLQlBc3NlcnQoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChu b2RlLT5wcy5zdGF0ZS0+ZXNfZGlyZWN0aW9uKSk7Ci0KLQkvKiBXZSBzaG91bGQgbmV2ZXIgYmUg Y2FsbGVkIHdoZW4gdGhlcmUgYXJlIG5vIHN1YnBsYW5zICovCi0JQXNzZXJ0KG5vZGUtPm1zX25w bGFucyA+IDApOwotCi0JLyogV2Ugc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCB3aGVuIHRoZXJlIGFy ZSBubyBhc3luYyBzdWJwbGFucy4gKi8KLQlBc3NlcnQobm9kZS0+bXNfbmFzeW5jcGxhbnMgPiAw KTsKLQogCS8qIEV4ZWNNZXJnZUFwcGVuZCgpIGlkZW50aWZpZXMgdmFsaWQgc3VicGxhbnMgKi8K LQlBc3NlcnQobm9kZS0+bXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCk7CisJQXNzZXJ0KG5v ZGUtPm1zLnZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQpOwogCiAJLyogSW5pdGlhbGl6ZSBzdGF0 ZSB2YXJpYWJsZXMuICovCi0Jbm9kZS0+bXNfYXN5bmNyZW1haW4gPSBibXNfY29weShub2RlLT5t c192YWxpZF9hc3luY3BsYW5zKTsKKwlub2RlLT5tc19hc3luY3JlbWFpbiA9IGJtc19jb3B5KG5v ZGUtPm1zLnZhbGlkX2FzeW5jcGxhbnMpOwogCiAJLyogTm90aGluZyB0byBkbyBpZiB0aGVyZSBh cmUgbm8gdmFsaWQgYXN5bmMgc3VicGxhbnMuICovCiAJaWYgKGJtc19pc19lbXB0eShub2RlLT5t c19hc3luY3JlbWFpbikpCiAJCXJldHVybjsKIAotCS8qIE1ha2UgYSByZXF1ZXN0IGZvciBlYWNo IG9mIHRoZSB2YWxpZCBhc3luYyBzdWJwbGFucy4gKi8KLQlpID0gLTE7Ci0Jd2hpbGUgKChpID0g Ym1zX25leHRfbWVtYmVyKG5vZGUtPm1zX3ZhbGlkX2FzeW5jcGxhbnMsIGkpKSA+PSAwKQotCXsK LQkJQXN5bmNSZXF1ZXN0ICphcmVxID0gbm9kZS0+bXNfYXN5bmNyZXF1ZXN0c1tpXTsKLQotCQlB c3NlcnQoYXJlcS0+cmVxdWVzdF9pbmRleCA9PSBpKTsKLQkJQXNzZXJ0KCFhcmVxLT5jYWxsYmFj a19wZW5kaW5nKTsKLQotCQkvKiBEbyB0aGUgYWN0dWFsIHdvcmsuICovCi0JCUV4ZWNBc3luY1Jl cXVlc3QoYXJlcSk7Ci0JfQorCUV4ZWNBcHBlbmRlckFzeW5jQmVnaW4oJm5vZGUtPm1zKTsKIH0K IAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQpAQCAtNjM4LDcgKzQyMyw3IEBAIEV4ZWNNZXJnZUFwcGVuZEFzeW5jUmVx dWVzdChNZXJnZUFwcGVuZFN0YXRlICpub2RlLCBpbnQgbXBsYW4pCiAJICovCiAJaWYgKGJtc19p c19tZW1iZXIobXBsYW4sIG5vZGUtPm1zX2hhc19hc3luY3Jlc3VsdHMpKQogCXsKLQkJbm9kZS0+ bXNfc2xvdHNbbXBsYW5dID0gbm9kZS0+bXNfYXN5bmNyZXN1bHRzW21wbGFuXTsKKwkJbm9kZS0+ bXNfc2xvdHNbbXBsYW5dID0gbm9kZS0+bXMuYXN5bmNyZXN1bHRzW21wbGFuXTsKIAkJcmV0dXJu IHRydWU7CiAJfQogCkBAIC02NDgsNyArNDMzLDcgQEAgRXhlY01lcmdlQXBwZW5kQXN5bmNSZXF1 ZXN0KE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUsIGludCBtcGxhbikKIAkgKi8KIAluZWVkcmVxdWVz dCA9IE5VTEw7CiAJaSA9IC0xOwotCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihub2RlLT5t c19uZWVkcmVxdWVzdCwgaSkpID49IDApCisJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKG5v ZGUtPm1zLm5lZWRyZXF1ZXN0LCBpKSkgPj0gMCkKIAl7CiAJCWlmICghYm1zX2lzX21lbWJlcihp LCBub2RlLT5tc19oYXNfYXN5bmNyZXN1bHRzKSkKIAkJCW5lZWRyZXF1ZXN0ID0gYm1zX2FkZF9t ZW1iZXIobmVlZHJlcXVlc3QsIGkpOwpAQCAtNjYxLDEzICs0NDYsMTMgQEAgRXhlY01lcmdlQXBw ZW5kQXN5bmNSZXF1ZXN0KE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUsIGludCBtcGxhbikKIAkJcmV0 dXJuIGZhbHNlOwogCiAJLyogQ2xlYXIgbXNfbmVlZHJlcXVlc3QgZmxhZywgYXMgd2UgYXJlIGdv aW5nIHRvIHNlbmQgcmVxdWVzdHMgbm93ICovCi0Jbm9kZS0+bXNfbmVlZHJlcXVlc3QgPSBibXNf ZGVsX21lbWJlcnMobm9kZS0+bXNfbmVlZHJlcXVlc3QsIG5lZWRyZXF1ZXN0KTsKKwlub2RlLT5t cy5uZWVkcmVxdWVzdCA9IGJtc19kZWxfbWVtYmVycyhub2RlLT5tcy5uZWVkcmVxdWVzdCwgbmVl ZHJlcXVlc3QpOwogCiAJLyogTWFrZSBhIG5ldyByZXF1ZXN0IGZvciBlYWNoIG9mIHRoZSBhc3lu YyBzdWJwbGFucyB0aGF0IG5lZWQgaXQuICovCiAJaSA9IC0xOwogCXdoaWxlICgoaSA9IGJtc19u ZXh0X21lbWJlcihuZWVkcmVxdWVzdCwgaSkpID49IDApCiAJewotCQlBc3luY1JlcXVlc3QgKmFy ZXEgPSBub2RlLT5tc19hc3luY3JlcXVlc3RzW2ldOworCQlBc3luY1JlcXVlc3QgKmFyZXEgPSBu b2RlLT5tcy5hc3luY3JlcXVlc3RzW2ldOwogCiAJCS8qCiAJCSAqIFdlJ3ZlIGp1c3QgY2hlY2tl ZCB0aGF0IHN1YnBsYW4gZG9lc24ndCBhbHJlYWR5IGhhdmUgc29tZSBmZXRjaGVkCkBAIC02ODMs NyArNDY4LDcgQEAgRXhlY01lcmdlQXBwZW5kQXN5bmNSZXF1ZXN0KE1lcmdlQXBwZW5kU3RhdGUg Km5vZGUsIGludCBtcGxhbikKIAkvKiBSZXR1cm4gbmVlZGVkIGFzeW5jaHJvbm91c2x5LWdlbmVy YXRlZCByZXN1bHRzIGlmIGFueS4gKi8KIAlpZiAoYm1zX2lzX21lbWJlcihtcGxhbiwgbm9kZS0+ bXNfaGFzX2FzeW5jcmVzdWx0cykpCiAJewotCQlub2RlLT5tc19zbG90c1ttcGxhbl0gPSBub2Rl LT5tc19hc3luY3Jlc3VsdHNbbXBsYW5dOworCQlub2RlLT5tc19zbG90c1ttcGxhbl0gPSBub2Rl LT5tcy5hc3luY3Jlc3VsdHNbbXBsYW5dOwogCQlyZXR1cm4gdHJ1ZTsKIAl9CiAKQEAgLTcwNyw3 ICs0OTIsNyBAQCBFeGVjQXN5bmNNZXJnZUFwcGVuZFJlc3BvbnNlKEFzeW5jUmVxdWVzdCAqYXJl cSkKIAkvKiBXZSBzaG91bGQgaGFuZGxlIHByZXZpb3VzIGFzeW5jIHJlc3VsdCBwcmlvciB0byBn ZXR0aW5nIG5ldyBvbmUgKi8KIAlBc3NlcnQoIWJtc19pc19tZW1iZXIoYXJlcS0+cmVxdWVzdF9p bmRleCwgbm9kZS0+bXNfaGFzX2FzeW5jcmVzdWx0cykpOwogCi0Jbm9kZS0+bXNfYXN5bmNyZXN1 bHRzW2FyZXEtPnJlcXVlc3RfaW5kZXhdID0gTlVMTDsKKwlub2RlLT5tcy5hc3luY3Jlc3VsdHNb YXJlcS0+cmVxdWVzdF9pbmRleF0gPSBOVUxMOwogCS8qIE5vdGhpbmcgdG8gZG8gaWYgdGhlIHJl cXVlc3QgaXMgcGVuZGluZy4gKi8KIAlpZiAoIWFyZXEtPnJlcXVlc3RfY29tcGxldGUpCiAJewpA QCAtNzMwLDEzICs1MTUsMTMgQEAgRXhlY0FzeW5jTWVyZ2VBcHBlbmRSZXNwb25zZShBc3luY1Jl cXVlc3QgKmFyZXEpCiAJbm9kZS0+bXNfaGFzX2FzeW5jcmVzdWx0cyA9IGJtc19hZGRfbWVtYmVy KG5vZGUtPm1zX2hhc19hc3luY3Jlc3VsdHMsCiAJCQkJCQkJCQkJCSAgIGFyZXEtPnJlcXVlc3Rf aW5kZXgpOwogCS8qIFNhdmUgcmVzdWx0IHNvIHdlIGNhbiByZXR1cm4gaXQuICovCi0Jbm9kZS0+ bXNfYXN5bmNyZXN1bHRzW2FyZXEtPnJlcXVlc3RfaW5kZXhdID0gc2xvdDsKKwlub2RlLT5tcy5h c3luY3Jlc3VsdHNbYXJlcS0+cmVxdWVzdF9pbmRleF0gPSBzbG90OwogCiAJLyoKIAkgKiBNYXJr IHRoZSBzdWJwbGFuIHRoYXQgcmV0dXJuZWQgYSByZXN1bHQgYXMgcmVhZHkgZm9yIGEgbmV3IHJl cXVlc3QuICBXZQogCSAqIGRvbid0IGxhdW5jaCBhbm90aGVyIG9uZSBoZXJlIGltbWVkaWF0ZWx5 IGJlY2F1c2UgaXQgbWlnaHQgY29tcGxldGUuCiAJICovCi0Jbm9kZS0+bXNfbmVlZHJlcXVlc3Qg PSBibXNfYWRkX21lbWJlcihub2RlLT5tc19uZWVkcmVxdWVzdCwKKwlub2RlLT5tcy5uZWVkcmVx dWVzdCA9IGJtc19hZGRfbWVtYmVyKG5vZGUtPm1zLm5lZWRyZXF1ZXN0LAogCQkJCQkJCQkJCSAg YXJlcS0+cmVxdWVzdF9pbmRleCk7CiB9CiAKQEAgLTc0OSwxMDEgKzUzNCw4IEBAIEV4ZWNBc3lu Y01lcmdlQXBwZW5kUmVzcG9uc2UoQXN5bmNSZXF1ZXN0ICphcmVxKQogc3RhdGljIHZvaWQKIEV4 ZWNNZXJnZUFwcGVuZEFzeW5jRXZlbnRXYWl0KE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUpCiB7Ci0J aW50CQkJbmV2ZW50cyA9IG5vZGUtPm1zX25hc3luY3BsYW5zICsgMjsgLyogb25lIGZvciBQTSBk ZWF0aCBhbmQKLQkJCQkJCQkJCQkJCQkgKiBvbmUgZm9yIGxhdGNoICovCi0JV2FpdEV2ZW50CW9j Y3VycmVkX2V2ZW50W0VWRU5UX0JVRkZFUl9TSVpFXTsKLQlpbnQJCQlub2NjdXJyZWQ7Ci0JaW50 CQkJaTsKLQogCS8qIFdlIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgd2hlbiB0aGVyZSBhcmUgbm8g dmFsaWQgYXN5bmMgc3VicGxhbnMuICovCiAJQXNzZXJ0KGJtc19udW1fbWVtYmVycyhub2RlLT5t c19hc3luY3JlbWFpbikgPiAwKTsKIAotCW5vZGUtPm1zX2V2ZW50c2V0ID0gQ3JlYXRlV2FpdEV2 ZW50U2V0KEN1cnJlbnRSZXNvdXJjZU93bmVyLCBuZXZlbnRzKTsKLQlBZGRXYWl0RXZlbnRUb1Nl dChub2RlLT5tc19ldmVudHNldCwgV0xfRVhJVF9PTl9QTV9ERUFUSCwgUEdJTlZBTElEX1NPQ0tF VCwKLQkJCQkJICBOVUxMLCBOVUxMKTsKLQotCS8qIEdpdmUgZWFjaCB3YWl0aW5nIHN1YnBsYW4g YSBjaGFuY2UgdG8gYWRkIGFuIGV2ZW50LiAqLwotCWkgPSAtMTsKLQl3aGlsZSAoKGkgPSBibXNf bmV4dF9tZW1iZXIobm9kZS0+bXNfYXN5bmNwbGFucywgaSkpID49IDApCi0JewotCQlBc3luY1Jl cXVlc3QgKmFyZXEgPSBub2RlLT5tc19hc3luY3JlcXVlc3RzW2ldOwotCi0JCWlmIChhcmVxLT5j YWxsYmFja19wZW5kaW5nKQotCQkJRXhlY0FzeW5jQ29uZmlndXJlV2FpdChhcmVxKTsKLQl9Ci0K LQkvKgotCSAqIE5vIG5lZWQgZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZyBpZiBub25lIG9mIHRoZSBz dWJwbGFucyBjb25maWd1cmVkIGFueQotCSAqIGV2ZW50cy4KLQkgKi8KLQlpZiAoR2V0TnVtUmVn aXN0ZXJlZFdhaXRFdmVudHMobm9kZS0+bXNfZXZlbnRzZXQpID09IDEpCi0JewotCQlGcmVlV2Fp dEV2ZW50U2V0KG5vZGUtPm1zX2V2ZW50c2V0KTsKLQkJbm9kZS0+bXNfZXZlbnRzZXQgPSBOVUxM OwotCQlyZXR1cm47Ci0JfQotCi0JLyoKLQkgKiBBZGQgdGhlIHByb2Nlc3MgbGF0Y2ggdG8gdGhl IHNldCwgc28gdGhhdCB3ZSB3YWtlIHVwIHRvIHByb2Nlc3MgdGhlCi0JICogc3RhbmRhcmQgaW50 ZXJydXB0cyB3aXRoIENIRUNLX0ZPUl9JTlRFUlJVUFRTKCkuCi0JICoKLQkgKiBOT1RFOiBGb3Ig aGlzdG9yaWNhbCByZWFzb25zLCBpdCdzIGltcG9ydGFudCB0aGF0IHRoaXMgaXMgYWRkZWQgdG8g dGhlCi0JICogV2FpdEV2ZW50U2V0IGFmdGVyIHRoZSBFeGVjQXN5bmNDb25maWd1cmVXYWl0KCkg Y2FsbHMuICBOYW1lbHksCi0JICogcG9zdGdyZXNfZmR3IGNhbGxzICJHZXROdW1SZWdpc3RlcmVk V2FpdEV2ZW50cyhzZXQpID09IDEiIHRvIGNoZWNrIGlmCi0JICogYW55IG90aGVyIGV2ZW50cyBh cmUgaW4gdGhlIHNldC4gIFRoYXQncyBhIHBvb3IgZGVzaWduLCBpdCdzCi0JICogcXVlc3Rpb25h YmxlIGZvciBwb3N0Z3Jlc19mZHcgdG8gYmUgZG9pbmcgdGhhdCBpbiB0aGUgZmlyc3QgcGxhY2Us IGJ1dAotCSAqIHdlIGNhbm5vdCBjaGFuZ2UgaXQgbm93LiAgVGhlIHBhdHRlcm4gaGFzIHBvc3Np Ymx5IGJlZW4gY29waWVkIHRvIG90aGVyCi0JICogZXh0ZW5zaW9ucyB0b28uCi0JICovCi0JQWRk V2FpdEV2ZW50VG9TZXQobm9kZS0+bXNfZXZlbnRzZXQsIFdMX0xBVENIX1NFVCwgUEdJTlZBTElE X1NPQ0tFVCwKLQkJCQkJICBNeUxhdGNoLCBOVUxMKTsKLQotCS8qIFJldHVybiBhdCBtb3N0IEVW RU5UX0JVRkZFUl9TSVpFIGV2ZW50cyBpbiBvbmUgY2FsbC4gKi8KLQlpZiAobmV2ZW50cyA+IEVW RU5UX0JVRkZFUl9TSVpFKQotCQluZXZlbnRzID0gRVZFTlRfQlVGRkVSX1NJWkU7Ci0KLQkvKgot CSAqIFdhaXQgdW50aWwgYXQgbGVhc3Qgb25lIGV2ZW50IG9jY3Vycy4KLQkgKi8KLQlub2NjdXJy ZWQgPSBXYWl0RXZlbnRTZXRXYWl0KG5vZGUtPm1zX2V2ZW50c2V0LCAtMSAvKiBubyB0aW1lb3V0 ICovICwgb2NjdXJyZWRfZXZlbnQsCi0JCQkJCQkJCSBuZXZlbnRzLCBXQUlUX0VWRU5UX0FQUEVO RF9SRUFEWSk7Ci0JRnJlZVdhaXRFdmVudFNldChub2RlLT5tc19ldmVudHNldCk7Ci0Jbm9kZS0+ bXNfZXZlbnRzZXQgPSBOVUxMOwotCWlmIChub2NjdXJyZWQgPT0gMCkKLQkJcmV0dXJuOwotCi0J LyogRGVsaXZlciBub3RpZmljYXRpb25zLiAqLwotCWZvciAoaSA9IDA7IGkgPCBub2NjdXJyZWQ7 IGkrKykKLQl7Ci0JCVdhaXRFdmVudCAgKncgPSAmb2NjdXJyZWRfZXZlbnRbaV07Ci0KLQkJLyoK LQkJICogRWFjaCB3YWl0aW5nIHN1YnBsYW4gc2hvdWxkIGhhdmUgcmVnaXN0ZXJlZCBpdHMgd2Fp dCBldmVudCB3aXRoCi0JCSAqIHVzZXJfZGF0YSBwb2ludGluZyBiYWNrIHRvIGl0cyBBc3luY1Jl cXVlc3QuCi0JCSAqLwotCQlpZiAoKHctPmV2ZW50cyAmIFdMX1NPQ0tFVF9SRUFEQUJMRSkgIT0g MCkKLQkJewotCQkJQXN5bmNSZXF1ZXN0ICphcmVxID0gKEFzeW5jUmVxdWVzdCAqKSB3LT51c2Vy X2RhdGE7Ci0KLQkJCWlmIChhcmVxLT5jYWxsYmFja19wZW5kaW5nKQotCQkJewotCQkJCS8qCi0J CQkJICogTWFyayBpdCBhcyBubyBsb25nZXIgbmVlZGluZyBhIGNhbGxiYWNrLiAgV2UgbXVzdCBk byB0aGlzCi0JCQkJICogYmVmb3JlIGRpc3BhdGNoaW5nIHRoZSBjYWxsYmFjayBpbiBjYXNlIHRo ZSBjYWxsYmFjayByZXNldHMKLQkJCQkgKiB0aGUgZmxhZy4KLQkJCQkgKi8KLQkJCQlhcmVxLT5j YWxsYmFja19wZW5kaW5nID0gZmFsc2U7Ci0KLQkJCQkvKiBEbyB0aGUgYWN0dWFsIHdvcmsuICov Ci0JCQkJRXhlY0FzeW5jTm90aWZ5KGFyZXEpOwotCQkJfQotCQl9Ci0KLQkJLyogSGFuZGxlIHN0 YW5kYXJkIGludGVycnVwdHMgKi8KLQkJaWYgKCh3LT5ldmVudHMgJiBXTF9MQVRDSF9TRVQpICE9 IDApCi0JCXsKLQkJCVJlc2V0TGF0Y2goTXlMYXRjaCk7Ci0JCQlDSEVDS19GT1JfSU5URVJSVVBU UygpOwotCQl9Ci0JfQorCUV4ZWNBcHBlbmRlckFzeW5jRXZlbnRXYWl0KCZub2RlLT5tcywgLTEg Lyogbm8gdGltZW91dCAqLyAsIFdBSVRfRVZFTlRfQVBQRU5EX1JFQURZKTsKIH0KZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL25vZGVzL25vZGVGdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMvbm9k ZUZ1bmNzLmMKaW5kZXggMTk5ZWQyNzk5NWYuLjYwODE5NWE4OWZhIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9ub2Rlcy9ub2RlRnVuY3MuYworKysgYi9zcmMvYmFja2VuZC9ub2Rlcy9ub2RlRnVu Y3MuYwpAQCAtNDc1NCwxNCArNDc1NCwxNCBAQCBwbGFuc3RhdGVfdHJlZV93YWxrZXJfaW1wbChQ bGFuU3RhdGUgKnBsYW5zdGF0ZSwKIAlzd2l0Y2ggKG5vZGVUYWcocGxhbikpCiAJewogCQljYXNl IFRfQXBwZW5kOgotCQkJaWYgKHBsYW5zdGF0ZV93YWxrX21lbWJlcnMoKChBcHBlbmRTdGF0ZSAq KSBwbGFuc3RhdGUpLT5hcHBlbmRwbGFucywKLQkJCQkJCQkJCSAgICgoQXBwZW5kU3RhdGUgKikg cGxhbnN0YXRlKS0+YXNfbnBsYW5zLAorCQkJaWYgKHBsYW5zdGF0ZV93YWxrX21lbWJlcnMoKChB cHBlbmRTdGF0ZSAqKSBwbGFuc3RhdGUpLT5hcy5wbGFucywKKwkJCQkJCQkJCSAgICgoQXBwZW5k U3RhdGUgKikgcGxhbnN0YXRlKS0+YXMubnBsYW5zLAogCQkJCQkJCQkJICAgd2Fsa2VyLCBjb250 ZXh0KSkKIAkJCQlyZXR1cm4gdHJ1ZTsKIAkJCWJyZWFrOwogCQljYXNlIFRfTWVyZ2VBcHBlbmQ6 Ci0JCQlpZiAocGxhbnN0YXRlX3dhbGtfbWVtYmVycygoKE1lcmdlQXBwZW5kU3RhdGUgKikgcGxh bnN0YXRlKS0+bWVyZ2VwbGFucywKLQkJCQkJCQkJCSAgICgoTWVyZ2VBcHBlbmRTdGF0ZSAqKSBw bGFuc3RhdGUpLT5tc19ucGxhbnMsCisJCQlpZiAocGxhbnN0YXRlX3dhbGtfbWVtYmVycygoKE1l cmdlQXBwZW5kU3RhdGUgKikgcGxhbnN0YXRlKS0+bXMucGxhbnMsCisJCQkJCQkJCQkgICAoKE1l cmdlQXBwZW5kU3RhdGUgKikgcGxhbnN0YXRlKS0+bXMubnBsYW5zLAogCQkJCQkJCQkJICAgd2Fs a2VyLCBjb250ZXh0KSkKIAkJCQlyZXR1cm4gdHJ1ZTsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jIGIvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCmluZGV4IGYxZjE3NTljM2E1Li41ZDVhODNhMTAyNiAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCisrKyBi L3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYwpAQCAtMTI2MCwxMiArMTI2 MCwxMiBAQCBjcmVhdGVfYXBwZW5kX3BsYW4oUGxhbm5lckluZm8gKnJvb3QsIEFwcGVuZFBhdGgg KmJlc3RfcGF0aCwgaW50IGZsYWdzKQogCSAqIGNoaWxkIHBsYW5zLCB0byBtYWtlIGNyb3NzLWNo ZWNraW5nIHRoZSBzb3J0IGluZm8gZWFzaWVyLgogCSAqLwogCXBsYW4gPSBtYWtlTm9kZShBcHBl bmQpOwotCXBsYW4tPnBsYW4udGFyZ2V0bGlzdCA9IHRsaXN0OwotCXBsYW4tPnBsYW4ucXVhbCA9 IE5JTDsKLQlwbGFuLT5wbGFuLmxlZnR0cmVlID0gTlVMTDsKLQlwbGFuLT5wbGFuLnJpZ2h0dHJl ZSA9IE5VTEw7Ci0JcGxhbi0+YXBwcmVsaWRzID0gcmVsLT5yZWxpZHM7Ci0JcGxhbi0+Y2hpbGRf YXBwZW5kX3JlbGlkX3NldHMgPSBiZXN0X3BhdGgtPmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzOwor CXBsYW4tPmFwLnBsYW4udGFyZ2V0bGlzdCA9IHRsaXN0OworCXBsYW4tPmFwLnBsYW4ucXVhbCA9 IE5JTDsKKwlwbGFuLT5hcC5wbGFuLmxlZnR0cmVlID0gTlVMTDsKKwlwbGFuLT5hcC5wbGFuLnJp Z2h0dHJlZSA9IE5VTEw7CisJcGxhbi0+YXAuYXBwcmVsaWRzID0gcmVsLT5yZWxpZHM7CisJcGxh bi0+YXAuY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMgPSBiZXN0X3BhdGgtPmNoaWxkX2FwcGVuZF9y ZWxpZF9zZXRzOwogCiAJaWYgKHBhdGhrZXlzICE9IE5JTCkKIAl7CkBAIC0xMjg0LDcgKzEyODQs NyBAQCBjcmVhdGVfYXBwZW5kX3BsYW4oUGxhbm5lckluZm8gKnJvb3QsIEFwcGVuZFBhdGggKmJl c3RfcGF0aCwgaW50IGZsYWdzKQogCQkJCQkJCQkJCSAgJm5vZGVTb3J0T3BlcmF0b3JzLAogCQkJ CQkJCQkJCSAgJm5vZGVDb2xsYXRpb25zLAogCQkJCQkJCQkJCSAgJm5vZGVOdWxsc0ZpcnN0KTsK LQkJdGxpc3Rfd2FzX2NoYW5nZWQgPSAob3JpZ190bGlzdF9sZW5ndGggIT0gbGlzdF9sZW5ndGgo cGxhbi0+cGxhbi50YXJnZXRsaXN0KSk7CisJCXRsaXN0X3dhc19jaGFuZ2VkID0gKG9yaWdfdGxp c3RfbGVuZ3RoICE9IGxpc3RfbGVuZ3RoKHBsYW4tPmFwLnBsYW4udGFyZ2V0bGlzdCkpOwogCX0K IAogCS8qIElmIGFwcHJvcHJpYXRlLCBjb25zaWRlciBhc3luYyBhcHBlbmQgKi8KQEAgLTEzOTQs NyArMTM5NCw3IEBAIGNyZWF0ZV9hcHBlbmRfcGxhbihQbGFubmVySW5mbyAqcm9vdCwgQXBwZW5k UGF0aCAqYmVzdF9wYXRoLCBpbnQgZmxhZ3MpCiAJfQogCiAJLyogU2V0IGJlbG93IGlmIHdlIGZp bmQgcXVhbHMgdGhhdCB3ZSBjYW4gdXNlIHRvIHJ1bi10aW1lIHBydW5lICovCi0JcGxhbi0+cGFy dF9wcnVuZV9pbmRleCA9IC0xOworCXBsYW4tPmFwLnBhcnRfcHJ1bmVfaW5kZXggPSAtMTsKIAog CS8qCiAJICogSWYgYW55IHF1YWxzIGV4aXN0LCB0aGV5IG1heSBiZSB1c2VmdWwgdG8gcGVyZm9y bSBmdXJ0aGVyIHBhcnRpdGlvbgpAQCAtMTQxOSwxNiArMTQxOSwxNiBAQCBjcmVhdGVfYXBwZW5k X3BsYW4oUGxhbm5lckluZm8gKnJvb3QsIEFwcGVuZFBhdGggKmJlc3RfcGF0aCwgaW50IGZsYWdz KQogCQl9CiAKIAkJaWYgKHBydW5lcXVhbCAhPSBOSUwpCi0JCQlwbGFuLT5wYXJ0X3BydW5lX2lu ZGV4ID0gbWFrZV9wYXJ0aXRpb25fcHJ1bmVpbmZvKHJvb3QsIHJlbCwKKwkJCXBsYW4tPmFwLnBh cnRfcHJ1bmVfaW5kZXggPSBtYWtlX3BhcnRpdGlvbl9wcnVuZWluZm8ocm9vdCwgcmVsLAogCQkJ CQkJCQkJCQkJCQkJICBiZXN0X3BhdGgtPnN1YnBhdGhzLAogCQkJCQkJCQkJCQkJCQkJICBwcnVu ZXF1YWwpOwogCX0KIAotCXBsYW4tPmFwcGVuZHBsYW5zID0gc3VicGxhbnM7CisJcGxhbi0+YXAu c3VicGxhbnMgPSBzdWJwbGFuczsKIAlwbGFuLT5uYXN5bmNwbGFucyA9IG5hc3luY3BsYW5zOwog CXBsYW4tPmZpcnN0X3BhcnRpYWxfcGxhbiA9IGJlc3RfcGF0aC0+Zmlyc3RfcGFydGlhbF9wYXRo OwogCi0JY29weV9nZW5lcmljX3BhdGhfaW5mbygmcGxhbi0+cGxhbiwgKFBhdGggKikgYmVzdF9w YXRoKTsKKwljb3B5X2dlbmVyaWNfcGF0aF9pbmZvKCZwbGFuLT5hcC5wbGFuLCAoUGF0aCAqKSBi ZXN0X3BhdGgpOwogCiAJLyoKIAkgKiBJZiBwcmVwYXJlX3NvcnRfZnJvbV9wYXRoa2V5cyBhZGRl ZCBzb3J0IGNvbHVtbnMsIGJ1dCB3ZSB3ZXJlIHRvbGQgdG8KQEAgLTE0MzcsOSArMTQzNyw5IEBA IGNyZWF0ZV9hcHBlbmRfcGxhbihQbGFubmVySW5mbyAqcm9vdCwgQXBwZW5kUGF0aCAqYmVzdF9w YXRoLCBpbnQgZmxhZ3MpCiAJICovCiAJaWYgKHRsaXN0X3dhc19jaGFuZ2VkICYmIChmbGFncyAm IChDUF9FWEFDVF9UTElTVCB8IENQX1NNQUxMX1RMSVNUKSkpCiAJewotCQl0bGlzdCA9IGxpc3Rf Y29weV9oZWFkKHBsYW4tPnBsYW4udGFyZ2V0bGlzdCwgb3JpZ190bGlzdF9sZW5ndGgpOworCQl0 bGlzdCA9IGxpc3RfY29weV9oZWFkKHBsYW4tPmFwLnBsYW4udGFyZ2V0bGlzdCwgb3JpZ190bGlz dF9sZW5ndGgpOwogCQlyZXR1cm4gaW5qZWN0X3Byb2plY3Rpb25fcGxhbigoUGxhbiAqKSBwbGFu LCB0bGlzdCwKLQkJCQkJCQkJCSAgcGxhbi0+cGxhbi5wYXJhbGxlbF9zYWZlKTsKKwkJCQkJCQkJ CSAgcGxhbi0+YXAucGxhbi5wYXJhbGxlbF9zYWZlKTsKIAl9CiAJZWxzZQogCQlyZXR1cm4gKFBs YW4gKikgcGxhbjsKQEAgLTE0NTcsNyArMTQ1Nyw3IEBAIGNyZWF0ZV9tZXJnZV9hcHBlbmRfcGxh bihQbGFubmVySW5mbyAqcm9vdCwgTWVyZ2VBcHBlbmRQYXRoICpiZXN0X3BhdGgsCiAJCQkJCQkg aW50IGZsYWdzKQogewogCU1lcmdlQXBwZW5kICpub2RlID0gbWFrZU5vZGUoTWVyZ2VBcHBlbmQp OwotCVBsYW4JICAgKnBsYW4gPSAmbm9kZS0+cGxhbjsKKwlQbGFuCSAgICpwbGFuID0gJm5vZGUt PmFwLnBsYW47CiAJTGlzdAkgICAqdGxpc3QgPSBidWlsZF9wYXRoX3RsaXN0KHJvb3QsICZiZXN0 X3BhdGgtPnBhdGgpOwogCWludAkJCW9yaWdfdGxpc3RfbGVuZ3RoID0gbGlzdF9sZW5ndGgodGxp c3QpOwogCWJvb2wJCXRsaXN0X3dhc19jaGFuZ2VkOwpAQCAtMTQ3OCw4ICsxNDc4LDggQEAgY3Jl YXRlX21lcmdlX2FwcGVuZF9wbGFuKFBsYW5uZXJJbmZvICpyb290LCBNZXJnZUFwcGVuZFBhdGgg KmJlc3RfcGF0aCwKIAlwbGFuLT5xdWFsID0gTklMOwogCXBsYW4tPmxlZnR0cmVlID0gTlVMTDsK IAlwbGFuLT5yaWdodHRyZWUgPSBOVUxMOwotCW5vZGUtPmFwcHJlbGlkcyA9IHJlbC0+cmVsaWRz OwotCW5vZGUtPmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzID0gYmVzdF9wYXRoLT5jaGlsZF9hcHBl bmRfcmVsaWRfc2V0czsKKwlub2RlLT5hcC5hcHByZWxpZHMgPSByZWwtPnJlbGlkczsKKwlub2Rl LT5hcC5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyA9IGJlc3RfcGF0aC0+Y2hpbGRfYXBwZW5kX3Jl bGlkX3NldHM7CiAKIAljb25zaWRlcl9hc3luYyA9IChlbmFibGVfYXN5bmNfbWVyZ2VfYXBwZW5k ICYmCiAJCQkJCSAgIWJlc3RfcGF0aC0+cGF0aC5wYXJhbGxlbF9zYWZlICYmCkBAIC0xNTkzLDcg KzE1OTMsNyBAQCBjcmVhdGVfbWVyZ2VfYXBwZW5kX3BsYW4oUGxhbm5lckluZm8gKnJvb3QsIE1l cmdlQXBwZW5kUGF0aCAqYmVzdF9wYXRoLAogCX0KIAogCS8qIFNldCBiZWxvdyBpZiB3ZSBmaW5k IHF1YWxzIHRoYXQgd2UgY2FuIHVzZSB0byBydW4tdGltZSBwcnVuZSAqLwotCW5vZGUtPnBhcnRf cHJ1bmVfaW5kZXggPSAtMTsKKwlub2RlLT5hcC5wYXJ0X3BydW5lX2luZGV4ID0gLTE7CiAKIAkv KgogCSAqIElmIGFueSBxdWFscyBleGlzdCwgdGhleSBtYXkgYmUgdXNlZnVsIHRvIHBlcmZvcm0g ZnVydGhlciBwYXJ0aXRpb24KQEAgLTE2MTAsMTIgKzE2MTAsMTIgQEAgY3JlYXRlX21lcmdlX2Fw cGVuZF9wbGFuKFBsYW5uZXJJbmZvICpyb290LCBNZXJnZUFwcGVuZFBhdGggKmJlc3RfcGF0aCwK IAkJQXNzZXJ0KGJlc3RfcGF0aC0+cGF0aC5wYXJhbV9pbmZvID09IE5VTEwpOwogCiAJCWlmIChw cnVuZXF1YWwgIT0gTklMKQotCQkJbm9kZS0+cGFydF9wcnVuZV9pbmRleCA9IG1ha2VfcGFydGl0 aW9uX3BydW5laW5mbyhyb290LCByZWwsCisJCQlub2RlLT5hcC5wYXJ0X3BydW5lX2luZGV4ID0g bWFrZV9wYXJ0aXRpb25fcHJ1bmVpbmZvKHJvb3QsIHJlbCwKIAkJCQkJCQkJCQkJCQkJCSAgYmVz dF9wYXRoLT5zdWJwYXRocywKIAkJCQkJCQkJCQkJCQkJCSAgcHJ1bmVxdWFsKTsKIAl9CiAKLQlu b2RlLT5tZXJnZXBsYW5zID0gc3VicGxhbnM7CisJbm9kZS0+YXAuc3VicGxhbnMgPSBzdWJwbGFu czsKIAogCS8qCiAJICogSWYgcHJlcGFyZV9zb3J0X2Zyb21fcGF0aGtleXMgYWRkZWQgc29ydCBj b2x1bW5zLCBidXQgd2Ugd2VyZSB0b2xkIHRvCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvcGxhbi9zZXRyZWZzLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZz LmMKaW5kZXggNWFkNmMxMzgzMGIuLjQwZjkyNWM1ZjZiIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3Bs YW4vc2V0cmVmcy5jCkBAIC0xODgwLDEwICsxODgwLDEwIEBAIHNldF9hcHBlbmRfcmVmZXJlbmNl cyhQbGFubmVySW5mbyAqcm9vdCwKIAkgKiBjaGVjayBxdWFscy4gIElmIGl0J3MgZ290IGV4YWN0 bHkgb25lIGNoaWxkIHBsYW4sIHRoZW4gaXQncyBub3QgZG9pbmcKIAkgKiBhbnl0aGluZyB1c2Vm dWwgYXQgYWxsLCBhbmQgd2UgY2FuIHN0cmlwIGl0IG91dC4KIAkgKi8KLQlBc3NlcnQoYXBsYW4t PnBsYW4ucXVhbCA9PSBOSUwpOworCUFzc2VydChhcGxhbi0+YXAucGxhbi5xdWFsID09IE5JTCk7 CiAKIAkvKiBGaXJzdCwgd2UgZ290dGEgcmVjdXJzZSBvbiB0aGUgY2hpbGRyZW4gKi8KLQlmb3Jl YWNoKGwsIGFwbGFuLT5hcHBlbmRwbGFucykKKwlmb3JlYWNoKGwsIGFwbGFuLT5hcC5zdWJwbGFu cykKIAl7CiAJCWxmaXJzdChsKSA9IHNldF9wbGFuX3JlZnMocm9vdCwgKFBsYW4gKikgbGZpcnN0 KGwpLCBydG9mZnNldCk7CiAJfQpAQCAtMTg5NiwxMSArMTg5NiwxMSBAQCBzZXRfYXBwZW5kX3Jl ZmVyZW5jZXMoUGxhbm5lckluZm8gKnJvb3QsCiAJICogcGxhbiBtYXkgZXhlY3V0ZSB0aGUgbm9u LXBhcmFsbGVsIGF3YXJlIGNoaWxkIG11bHRpcGxlIHRpbWVzLiAgKElmIHlvdQogCSAqIGNoYW5n ZSB0aGVzZSBydWxlcywgdXBkYXRlIGNyZWF0ZV9hcHBlbmRfcGF0aCB0byBtYXRjaC4pCiAJICov Ci0JaWYgKGxpc3RfbGVuZ3RoKGFwbGFuLT5hcHBlbmRwbGFucykgPT0gMSkKKwlpZiAobGlzdF9s ZW5ndGgoYXBsYW4tPmFwLnN1YnBsYW5zKSA9PSAxKQogCXsKLQkJUGxhbgkgICAqcCA9IChQbGFu ICopIGxpbml0aWFsKGFwbGFuLT5hcHBlbmRwbGFucyk7CisJCVBsYW4JICAgKnAgPSAoUGxhbiAq KSBsaW5pdGlhbChhcGxhbi0+YXAuc3VicGxhbnMpOwogCi0JCWlmIChwLT5wYXJhbGxlbF9hd2Fy ZSA9PSBhcGxhbi0+cGxhbi5wYXJhbGxlbF9hd2FyZSkKKwkJaWYgKHAtPnBhcmFsbGVsX2F3YXJl ID09IGFwbGFuLT5hcC5wbGFuLnBhcmFsbGVsX2F3YXJlKQogCQl7CiAJCQlQbGFuCSAgICpyZXN1 bHQ7CiAKQEAgLTE5MDgsNyArMTkwOCw3IEBAIHNldF9hcHBlbmRfcmVmZXJlbmNlcyhQbGFubmVy SW5mbyAqcm9vdCwKIAogCQkJLyogUmVtZW1iZXIgdGhhdCB3ZSByZW1vdmVkIGFuIEFwcGVuZCAq LwogCQkJcmVjb3JkX2VsaWRlZF9ub2RlKHJvb3QtPmdsb2IsIHAtPnBsYW5fbm9kZV9pZCwgVF9B cHBlbmQsCi0JCQkJCQkJICAgb2Zmc2V0X3JlbGlkX3NldChhcGxhbi0+YXBwcmVsaWRzLCBydG9m ZnNldCkpOworCQkJCQkJCSAgIG9mZnNldF9yZWxpZF9zZXQoYXBsYW4tPmFwLmFwcHJlbGlkcywg cnRvZmZzZXQpKTsKIAogCQkJcmV0dXJuIHJlc3VsdDsKIAkJfQpAQCAtMTkyMSwxOSArMTkyMSwx OSBAQCBzZXRfYXBwZW5kX3JlZmVyZW5jZXMoUGxhbm5lckluZm8gKnJvb3QsCiAJICovCiAJc2V0 X2R1bW15X3RsaXN0X3JlZmVyZW5jZXMoKFBsYW4gKikgYXBsYW4sIHJ0b2Zmc2V0KTsKIAotCWFw bGFuLT5hcHByZWxpZHMgPSBvZmZzZXRfcmVsaWRfc2V0KGFwbGFuLT5hcHByZWxpZHMsIHJ0b2Zm c2V0KTsKKwlhcGxhbi0+YXAuYXBwcmVsaWRzID0gb2Zmc2V0X3JlbGlkX3NldChhcGxhbi0+YXAu YXBwcmVsaWRzLCBydG9mZnNldCk7CiAKIAkvKgogCSAqIEFkZCBQYXJ0aXRpb25QcnVuZUluZm8s IGlmIGFueSwgdG8gUGxhbm5lckdsb2JhbCBhbmQgdXBkYXRlIHRoZSBpbmRleC4KIAkgKiBBbHNv IHVwZGF0ZSB0aGUgUlQgaW5kZXhlcyBwcmVzZW50IGluIGl0IHRvIGFkZCB0aGUgb2Zmc2V0Lgog CSAqLwotCWlmIChhcGxhbi0+cGFydF9wcnVuZV9pbmRleCA+PSAwKQotCQlhcGxhbi0+cGFydF9w cnVuZV9pbmRleCA9Ci0JCQlyZWdpc3Rlcl9wYXJ0cHJ1bmVpbmZvKHJvb3QsIGFwbGFuLT5wYXJ0 X3BydW5lX2luZGV4LCBydG9mZnNldCk7CisJaWYgKGFwbGFuLT5hcC5wYXJ0X3BydW5lX2luZGV4 ID49IDApCisJCWFwbGFuLT5hcC5wYXJ0X3BydW5lX2luZGV4ID0KKwkJCXJlZ2lzdGVyX3BhcnRw cnVuZWluZm8ocm9vdCwgYXBsYW4tPmFwLnBhcnRfcHJ1bmVfaW5kZXgsIHJ0b2Zmc2V0KTsKIAog CS8qIFdlIGRvbid0IG5lZWQgdG8gcmVjdXJzZSB0byBsZWZ0dHJlZSBvciByaWdodHRyZWUgLi4u ICovCi0JQXNzZXJ0KGFwbGFuLT5wbGFuLmxlZnR0cmVlID09IE5VTEwpOwotCUFzc2VydChhcGxh bi0+cGxhbi5yaWdodHRyZWUgPT0gTlVMTCk7CisJQXNzZXJ0KGFwbGFuLT5hcC5wbGFuLmxlZnR0 cmVlID09IE5VTEwpOworCUFzc2VydChhcGxhbi0+YXAucGxhbi5yaWdodHRyZWUgPT0gTlVMTCk7 CiAKIAlyZXR1cm4gKFBsYW4gKikgYXBsYW47CiB9CkBAIC0xOTU3LDEwICsxOTU3LDEwIEBAIHNl dF9tZXJnZWFwcGVuZF9yZWZlcmVuY2VzKFBsYW5uZXJJbmZvICpyb290LAogCSAqIG9yIGNoZWNr IHF1YWxzLiAgSWYgaXQncyBnb3QgZXhhY3RseSBvbmUgY2hpbGQgcGxhbiwgdGhlbiBpdCdzIG5v dAogCSAqIGRvaW5nIGFueXRoaW5nIHVzZWZ1bCBhdCBhbGwsIGFuZCB3ZSBjYW4gc3RyaXAgaXQg b3V0LgogCSAqLwotCUFzc2VydChtcGxhbi0+cGxhbi5xdWFsID09IE5JTCk7CisJQXNzZXJ0KG1w bGFuLT5hcC5wbGFuLnF1YWwgPT0gTklMKTsKIAogCS8qIEZpcnN0LCB3ZSBnb3R0YSByZWN1cnNl IG9uIHRoZSBjaGlsZHJlbiAqLwotCWZvcmVhY2gobCwgbXBsYW4tPm1lcmdlcGxhbnMpCisJZm9y ZWFjaChsLCBtcGxhbi0+YXAuc3VicGxhbnMpCiAJewogCQlsZmlyc3QobCkgPSBzZXRfcGxhbl9y ZWZzKHJvb3QsIChQbGFuICopIGxmaXJzdChsKSwgcnRvZmZzZXQpOwogCX0KQEAgLTE5NzQsMTEg KzE5NzQsMTEgQEAgc2V0X21lcmdlYXBwZW5kX3JlZmVyZW5jZXMoUGxhbm5lckluZm8gKnJvb3Qs CiAJICogbXVsdGlwbGUgdGltZXMuICAoSWYgeW91IGNoYW5nZSB0aGVzZSBydWxlcywgdXBkYXRl CiAJICogY3JlYXRlX21lcmdlX2FwcGVuZF9wYXRoIHRvIG1hdGNoLikKIAkgKi8KLQlpZiAobGlz dF9sZW5ndGgobXBsYW4tPm1lcmdlcGxhbnMpID09IDEpCisJaWYgKGxpc3RfbGVuZ3RoKG1wbGFu LT5hcC5zdWJwbGFucykgPT0gMSkKIAl7Ci0JCVBsYW4JICAgKnAgPSAoUGxhbiAqKSBsaW5pdGlh bChtcGxhbi0+bWVyZ2VwbGFucyk7CisJCVBsYW4JICAgKnAgPSAoUGxhbiAqKSBsaW5pdGlhbCht cGxhbi0+YXAuc3VicGxhbnMpOwogCi0JCWlmIChwLT5wYXJhbGxlbF9hd2FyZSA9PSBtcGxhbi0+ cGxhbi5wYXJhbGxlbF9hd2FyZSkKKwkJaWYgKHAtPnBhcmFsbGVsX2F3YXJlID09IG1wbGFuLT5h cC5wbGFuLnBhcmFsbGVsX2F3YXJlKQogCQl7CiAJCQlQbGFuCSAgICpyZXN1bHQ7CiAKQEAgLTE5 ODYsNyArMTk4Niw3IEBAIHNldF9tZXJnZWFwcGVuZF9yZWZlcmVuY2VzKFBsYW5uZXJJbmZvICpy b290LAogCiAJCQkvKiBSZW1lbWJlciB0aGF0IHdlIHJlbW92ZWQgYSBNZXJnZUFwcGVuZCAqLwog CQkJcmVjb3JkX2VsaWRlZF9ub2RlKHJvb3QtPmdsb2IsIHAtPnBsYW5fbm9kZV9pZCwgVF9NZXJn ZUFwcGVuZCwKLQkJCQkJCQkgICBvZmZzZXRfcmVsaWRfc2V0KG1wbGFuLT5hcHByZWxpZHMsIHJ0 b2Zmc2V0KSk7CisJCQkJCQkJICAgb2Zmc2V0X3JlbGlkX3NldChtcGxhbi0+YXAuYXBwcmVsaWRz LCBydG9mZnNldCkpOwogCiAJCQlyZXR1cm4gcmVzdWx0OwogCQl9CkBAIC0xOTk5LDE5ICsxOTk5 LDE5IEBAIHNldF9tZXJnZWFwcGVuZF9yZWZlcmVuY2VzKFBsYW5uZXJJbmZvICpyb290LAogCSAq LwogCXNldF9kdW1teV90bGlzdF9yZWZlcmVuY2VzKChQbGFuICopIG1wbGFuLCBydG9mZnNldCk7 CiAKLQltcGxhbi0+YXBwcmVsaWRzID0gb2Zmc2V0X3JlbGlkX3NldChtcGxhbi0+YXBwcmVsaWRz LCBydG9mZnNldCk7CisJbXBsYW4tPmFwLmFwcHJlbGlkcyA9IG9mZnNldF9yZWxpZF9zZXQobXBs YW4tPmFwLmFwcHJlbGlkcywgcnRvZmZzZXQpOwogCiAJLyoKIAkgKiBBZGQgUGFydGl0aW9uUHJ1 bmVJbmZvLCBpZiBhbnksIHRvIFBsYW5uZXJHbG9iYWwgYW5kIHVwZGF0ZSB0aGUgaW5kZXguCiAJ ICogQWxzbyB1cGRhdGUgdGhlIFJUIGluZGV4ZXMgcHJlc2VudCBpbiBpdCB0byBhZGQgdGhlIG9m ZnNldC4KIAkgKi8KLQlpZiAobXBsYW4tPnBhcnRfcHJ1bmVfaW5kZXggPj0gMCkKLQkJbXBsYW4t PnBhcnRfcHJ1bmVfaW5kZXggPQotCQkJcmVnaXN0ZXJfcGFydHBydW5laW5mbyhyb290LCBtcGxh bi0+cGFydF9wcnVuZV9pbmRleCwgcnRvZmZzZXQpOworCWlmIChtcGxhbi0+YXAucGFydF9wcnVu ZV9pbmRleCA+PSAwKQorCQltcGxhbi0+YXAucGFydF9wcnVuZV9pbmRleCA9CisJCQlyZWdpc3Rl cl9wYXJ0cHJ1bmVpbmZvKHJvb3QsIG1wbGFuLT5hcC5wYXJ0X3BydW5lX2luZGV4LCBydG9mZnNl dCk7CiAKIAkvKiBXZSBkb24ndCBuZWVkIHRvIHJlY3Vyc2UgdG8gbGVmdHRyZWUgb3IgcmlnaHR0 cmVlIC4uLiAqLwotCUFzc2VydChtcGxhbi0+cGxhbi5sZWZ0dHJlZSA9PSBOVUxMKTsKLQlBc3Nl cnQobXBsYW4tPnBsYW4ucmlnaHR0cmVlID09IE5VTEwpOworCUFzc2VydChtcGxhbi0+YXAucGxh bi5sZWZ0dHJlZSA9PSBOVUxMKTsKKwlBc3NlcnQobXBsYW4tPmFwLnBsYW4ucmlnaHR0cmVlID09 IE5VTEwpOwogCiAJcmV0dXJuIChQbGFuICopIG1wbGFuOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BsYW4vc3Vic2VsZWN0LmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIv cGxhbi9zdWJzZWxlY3QuYwppbmRleCBlOWRjOWQzMWYwNS4uNTI1ZTc1OWRlOWUgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3N1YnNlbGVjdC5jCisrKyBiL3NyYy9iYWNr ZW5kL29wdGltaXplci9wbGFuL3N1YnNlbGVjdC5jCkBAIC0yNzU5LDcgKzI3NTksNyBAQCBmaW5h bGl6ZV9wbGFuKFBsYW5uZXJJbmZvICpyb290LCBQbGFuICpwbGFuLAogCiAJCWNhc2UgVF9BcHBl bmQ6CiAJCQl7Ci0JCQkJZm9yZWFjaChsLCAoKEFwcGVuZCAqKSBwbGFuKS0+YXBwZW5kcGxhbnMp CisJCQkJZm9yZWFjaChsLCAoKEFwcGVuZCAqKSBwbGFuKS0+YXAuc3VicGxhbnMpCiAJCQkJewog CQkJCQljb250ZXh0LnBhcmFtaWRzID0KIAkJCQkJCWJtc19hZGRfbWVtYmVycyhjb250ZXh0LnBh cmFtaWRzLApAQCAtMjc3NCw3ICsyNzc0LDcgQEAgZmluYWxpemVfcGxhbihQbGFubmVySW5mbyAq cm9vdCwgUGxhbiAqcGxhbiwKIAogCQljYXNlIFRfTWVyZ2VBcHBlbmQ6CiAJCQl7Ci0JCQkJZm9y ZWFjaChsLCAoKE1lcmdlQXBwZW5kICopIHBsYW4pLT5tZXJnZXBsYW5zKQorCQkJCWZvcmVhY2go bCwgKChNZXJnZUFwcGVuZCAqKSBwbGFuKS0+YXAuc3VicGxhbnMpCiAJCQkJewogCQkJCQljb250 ZXh0LnBhcmFtaWRzID0KIAkJCQkJCWJtc19hZGRfbWVtYmVycyhjb250ZXh0LnBhcmFtaWRzLApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jIGIvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jCmluZGV4IGI1YTdhZDkwNjZlLi5kZTI5MmYyOGYxNyAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jCisrKyBiL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYwpAQCAtNTE2Myw5ICs1MTYzLDkgQEAgc2V0X2Rl cGFyc2VfcGxhbihkZXBhcnNlX25hbWVzcGFjZSAqZHBucywgUGxhbiAqcGxhbikKIAkgKiBuYXR1 cmFsIGNob2ljZS4KIAkgKi8KIAlpZiAoSXNBKHBsYW4sIEFwcGVuZCkpCi0JCWRwbnMtPm91dGVy X3BsYW4gPSBsaW5pdGlhbCgoKEFwcGVuZCAqKSBwbGFuKS0+YXBwZW5kcGxhbnMpOworCQlkcG5z LT5vdXRlcl9wbGFuID0gbGluaXRpYWwoKChBcHBlbmQgKikgcGxhbiktPmFwLnN1YnBsYW5zKTsK IAllbHNlIGlmIChJc0EocGxhbiwgTWVyZ2VBcHBlbmQpKQotCQlkcG5zLT5vdXRlcl9wbGFuID0g bGluaXRpYWwoKChNZXJnZUFwcGVuZCAqKSBwbGFuKS0+bWVyZ2VwbGFucyk7CisJCWRwbnMtPm91 dGVyX3BsYW4gPSBsaW5pdGlhbCgoKE1lcmdlQXBwZW5kICopIHBsYW4pLT5hcC5zdWJwbGFucyk7 CiAJZWxzZQogCQlkcG5zLT5vdXRlcl9wbGFuID0gb3V0ZXJQbGFuKHBsYW4pOwogCkBAIC03OTU1 LDEwICs3OTU1LDEwIEBAIHJlc29sdmVfc3BlY2lhbF92YXJubyhOb2RlICpub2RlLCBkZXBhcnNl X2NvbnRleHQgKmNvbnRleHQsCiAKIAkJaWYgKElzQShkcG5zLT5wbGFuLCBBcHBlbmQpKQogCQkJ Y29udGV4dC0+YXBwZW5kcGFyZW50cyA9IGJtc191bmlvbihjb250ZXh0LT5hcHBlbmRwYXJlbnRz LAotCQkJCQkJCQkJCQkgICAoKEFwcGVuZCAqKSBkcG5zLT5wbGFuKS0+YXBwcmVsaWRzKTsKKwkJ CQkJCQkJCQkJICAgKChBcHBlbmQgKikgZHBucy0+cGxhbiktPmFwLmFwcHJlbGlkcyk7CiAJCWVs c2UgaWYgKElzQShkcG5zLT5wbGFuLCBNZXJnZUFwcGVuZCkpCiAJCQljb250ZXh0LT5hcHBlbmRw YXJlbnRzID0gYm1zX3VuaW9uKGNvbnRleHQtPmFwcGVuZHBhcmVudHMsCi0JCQkJCQkJCQkJCSAg ICgoTWVyZ2VBcHBlbmQgKikgZHBucy0+cGxhbiktPmFwcHJlbGlkcyk7CisJCQkJCQkJCQkJCSAg ICgoTWVyZ2VBcHBlbmQgKikgZHBucy0+cGxhbiktPmFwLmFwcHJlbGlkcyk7CiAKIAkJcHVzaF9j aGlsZF9wbGFuKGRwbnMsIGRwbnMtPm91dGVyX3BsYW4sICZzYXZlX2RwbnMpOwogCQlyZXNvbHZl X3NwZWNpYWxfdmFybm8oKE5vZGUgKikgdGxlLT5leHByLCBjb250ZXh0LApkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0FwcGVuZC5oIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3Iv ZXhlY0FwcGVuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iNTUw OTM3MzUyNAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNBcHBl bmQuaApAQCAtMCwwICsxLDYwIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIGV4ZWNBcHBlbmQu aAorICoJCVN1cHBvcnQgZnVuY3Rpb25zIGZvciBNZXJnZUFwcGVuZCBhbmQgQXBwZW5kIG5vZGVz LgorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDI1LCBQb3N0Z3JlU1FMIEds b2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBS ZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBJREVOVElGSUNB VElPTgorICoJCXNyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNBcHBlbmQuaAorICotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgKi8KKworI2lmbmRlZiBFWEVDQVBQRU5EX0gKKyNkZWZpbmUgRVhFQ0FQUEVORF9I CisKKyNpbmNsdWRlICJub2Rlcy9leGVjbm9kZXMuaCIKKwordm9pZAkJRXhlY0luaXRBcHBlbmRl cihBcHBlbmRlclN0YXRlICogc3RhdGUsCisJCQkJCQkJIEFwcGVuZGVyICogbm9kZSwKKwkJCQkJ CQkgRVN0YXRlICplc3RhdGUsCisJCQkJCQkJIGludCBlZmxhZ3MsCisJCQkJCQkJIGludCBmaXJz dF9wYXJ0aWFsX3BsYW4sCisJCQkJCQkJIGludCAqZmlyc3RfdmFsaWRfcGFydGlhbF9wbGFuKTsK Kwordm9pZAkJRXhlY0VuZEFwcGVuZGVyKEFwcGVuZGVyU3RhdGUgKiBub2RlKTsKKwordm9pZAkJ RXhlY1JlU2NhbkFwcGVuZGVyKEFwcGVuZGVyU3RhdGUgKiBub2RlKTsKKwordm9pZAkJRXhlY0Fw cGVuZGVyQXN5bmNCZWdpbihBcHBlbmRlclN0YXRlICogbm9kZSk7CisKK3ZvaWQJCUV4ZWNBcHBl bmRlckFzeW5jRXZlbnRXYWl0KEFwcGVuZGVyU3RhdGUgKiBub2RlLAorCQkJCQkJCQkJICAgaW50 IHRpbWVvdXQsCisJCQkJCQkJCQkgICB1aW50MzIgd2FpdF9ldmVudF9pbmZvKTsKKworLyogQ29t bW9uIHBhcnQgb2YgY2xhc3NpZnlfbWF0Y2hpbmdfc3VicGxhbnMoKSBmb3IgQXBwZW5kIGFuZCBN ZXJnZUFwcGVuZCAqLworc3RhdGljIGlubGluZSBib29sCitjbGFzc2lmeV9tYXRjaGluZ19zdWJw bGFuc19jb21tb24oQml0bWFwc2V0ICoqdmFsaWRfc3VicGxhbnMsCisJCQkJCQkJCSAgQml0bWFw c2V0ICphc3luY3BsYW5zLAorCQkJCQkJCQkgIEJpdG1hcHNldCAqKnZhbGlkX2FzeW5jcGxhbnMp Cit7CisJQXNzZXJ0KCp2YWxpZF9hc3luY3BsYW5zID09IE5VTEwpOworCisJLyogQ2hlY2tlZCBi eSBjbGFzc2lmeV9tYXRjaGluZ19zdWJwbGFucygpICovCisJQXNzZXJ0KCFibXNfaXNfZW1wdHko KnZhbGlkX3N1YnBsYW5zKSk7CisKKwkvKiBOb3RoaW5nIHRvIGRvIGlmIHRoZXJlIGFyZSBubyB2 YWxpZCBhc3luYyBzdWJwbGFucy4gKi8KKwlpZiAoIWJtc19vdmVybGFwKCp2YWxpZF9zdWJwbGFu cywgYXN5bmNwbGFucykpCisJCXJldHVybiBmYWxzZTsKKworCS8qIEdldCB2YWxpZCBhc3luYyBz dWJwbGFucy4gKi8KKwkqdmFsaWRfYXN5bmNwbGFucyA9IGJtc19pbnRlcnNlY3QoYXN5bmNwbGFu cywKKwkJCQkJCQkJCSAgKnZhbGlkX3N1YnBsYW5zKTsKKworCS8qIEFkanVzdCB0aGUgdmFsaWQg c3VicGxhbnMgdG8gY29udGFpbiBzeW5jIHN1YnBsYW5zIG9ubHkuICovCisJKnZhbGlkX3N1YnBs YW5zID0gYm1zX2RlbF9tZW1iZXJzKCp2YWxpZF9zdWJwbGFucywKKwkJCQkJCQkJCSAgKnZhbGlk X2FzeW5jcGxhbnMpOworCXJldHVybiB0cnVlOworfQorCisjZW5kaWYJCQkJCQkJLyogRVhFQ0FQ UEVORF9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCBiL3Ny Yy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCmluZGV4IDI4Mjc0N2VlMTdiLi4yNmEwZTE3NDll MyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKKysrIGIvc3JjL2lu Y2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKQEAgLTE0NzQsNiArMTQ3NCwyNyBAQCB0eXBlZGVmIHN0 cnVjdCBNb2RpZnlUYWJsZVN0YXRlCiAJTGlzdAkgICAqbXRfbWVyZ2VKb2luQ29uZGl0aW9uczsK IH0gTW9kaWZ5VGFibGVTdGF0ZTsKIAordHlwZWRlZiBzdHJ1Y3QgQXBwZW5kZXJTdGF0ZQorewor CVBsYW5TdGF0ZQlwczsJCQkJLyogaXRzIGZpcnN0IGZpZWxkIGlzIE5vZGVUYWcgKi8KKwlQbGFu U3RhdGUgKipwbGFuczsJCQkvKiBhcnJheSBvZiBQbGFuU3RhdGVzIGZvciBteSBpbnB1dHMgKi8K KwlpbnQJCQlucGxhbnM7CisKKwkvKiBBc3luY2hyb25vdXMgZXhlY3V0aW9uIHN0YXRlICovCisJ Qml0bWFwc2V0ICAqYXN5bmNwbGFuczsJCS8qIGFzeW5jaHJvbm91cyBwbGFucyBpbmRleGVzICov CisJaW50CQkJbmFzeW5jcGxhbnM7CS8qICMgb2YgYXN5bmNocm9ub3VzIHBsYW5zICovCisJQXN5 bmNSZXF1ZXN0ICoqYXN5bmNyZXF1ZXN0czsJLyogYXJyYXkgb2YgQXN5bmNSZXF1ZXN0cyAqLwor CVR1cGxlVGFibGVTbG90ICoqYXN5bmNyZXN1bHRzOwkvKiB1bnJldHVybmVkIHJlc3VsdHMgb2Yg YXN5bmMgcGxhbnMgKi8KKwlCaXRtYXBzZXQgICpuZWVkcmVxdWVzdDsJLyogYXN5bmNocm9ub3Vz IHBsYW5zIG5lZWRpbmcgYSBuZXcgcmVxdWVzdCAqLworCXN0cnVjdCBXYWl0RXZlbnRTZXQgKmV2 ZW50c2V0OwkvKiBXYWl0RXZlbnRTZXQgZm9yIGZpbGUgZGVzY3JpcHRvciB3YWl0cyAqLworCisJ LyogUGFydGl0aW9uIHBydW5pbmcgc3RhdGUgKi8KKwlzdHJ1Y3QgUGFydGl0aW9uUHJ1bmVTdGF0 ZSAqcHJ1bmVfc3RhdGU7CisJYm9vbAkJdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZDsKKwlCaXRt YXBzZXQgICp2YWxpZF9zdWJwbGFuczsKKwlCaXRtYXBzZXQgICp2YWxpZF9hc3luY3BsYW5zOwkv KiB2YWxpZCBhc3luY2hyb25vdXMgcGxhbnMgaW5kZXhlcyAqLworfQkJCUFwcGVuZGVyU3RhdGU7 CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0KICAqCSBBcHBlbmRTdGF0ZSBpbmZvcm1hdGlvbgogICoK QEAgLTE0OTUsMzEgKzE1MTYsMjAgQEAgc3RydWN0IFBhcnRpdGlvblBydW5lU3RhdGU7CiAKIHN0 cnVjdCBBcHBlbmRTdGF0ZQogewotCVBsYW5TdGF0ZQlwczsJCQkJLyogaXRzIGZpcnN0IGZpZWxk IGlzIE5vZGVUYWcgKi8KLQlQbGFuU3RhdGUgKiphcHBlbmRwbGFuczsJLyogYXJyYXkgb2YgUGxh blN0YXRlcyBmb3IgbXkgaW5wdXRzICovCi0JaW50CQkJYXNfbnBsYW5zOworCUFwcGVuZGVyU3Rh dGUgYXM7CisKIAlpbnQJCQlhc193aGljaHBsYW47CiAJYm9vbAkJYXNfYmVndW47CQkvKiBmYWxz ZSBtZWFucyBuZWVkIHRvIGluaXRpYWxpemUgKi8KLQlCaXRtYXBzZXQgICphc19hc3luY3BsYW5z OwkvKiBhc3luY2hyb25vdXMgcGxhbnMgaW5kZXhlcyAqLwotCWludAkJCWFzX25hc3luY3BsYW5z OyAvKiAjIG9mIGFzeW5jaHJvbm91cyBwbGFucyAqLwotCUFzeW5jUmVxdWVzdCAqKmFzX2FzeW5j cmVxdWVzdHM7CS8qIGFycmF5IG9mIEFzeW5jUmVxdWVzdHMgKi8KLQlUdXBsZVRhYmxlU2xvdCAq KmFzX2FzeW5jcmVzdWx0czsJLyogdW5yZXR1cm5lZCByZXN1bHRzIG9mIGFzeW5jIHBsYW5zICov Ci0JaW50CQkJYXNfbmFzeW5jcmVzdWx0czsJLyogIyBvZiB2YWxpZCBlbnRyaWVzIGluIGFzX2Fz eW5jcmVzdWx0cyAqLwotCWJvb2wJCWFzX3N5bmNkb25lOwkvKiB0cnVlIGlmIGFsbCBzeW5jaHJv bm91cyBwbGFucyBkb25lIGluCi0JCQkJCQkJCSAqIGFzeW5jaHJvbm91cyBtb2RlLCBlbHNlIGZh bHNlICovCisJaW50CQkJYXNfbmFzeW5jcmVzdWx0czsJLyogIyBvZiB2YWxpZCBlbnRyaWVzIGlu IGFzeW5jcmVzdWx0cyAqLworCWJvb2wJCWFzX3N5bmNkb25lOwkvKiBhbGwgc3luYyBwbGFucyBk b25lIGluIGFzeW5jIG1vZGU/ICovCiAJaW50CQkJYXNfbmFzeW5jcmVtYWluOwkvKiAjIG9mIHJl bWFpbmluZyBhc3luY2hyb25vdXMgcGxhbnMgKi8KLQlCaXRtYXBzZXQgICphc19uZWVkcmVxdWVz dDsgLyogYXN5bmNocm9ub3VzIHBsYW5zIG5lZWRpbmcgYSBuZXcgcmVxdWVzdCAqLwotCXN0cnVj dCBXYWl0RXZlbnRTZXQgKmFzX2V2ZW50c2V0OwkvKiBXYWl0RXZlbnRTZXQgdXNlZCB0byBjb25m aWd1cmUgZmlsZQotCQkJCQkJCQkJCSAqIGRlc2NyaXB0b3Igd2FpdCBldmVudHMgKi8KLQlpbnQJ CQlhc19maXJzdF9wYXJ0aWFsX3BsYW47CS8qIEluZGV4IG9mICdhcHBlbmRwbGFucycgY29udGFp bmluZwotCQkJCQkJCQkJCSAqIHRoZSBmaXJzdCBwYXJ0aWFsIHBsYW4gKi8KLQlQYXJhbGxlbEFw cGVuZFN0YXRlICphc19wc3RhdGU7IC8qIHBhcmFsbGVsIGNvb3JkaW5hdGlvbiBpbmZvICovCi0J U2l6ZQkJcHN0YXRlX2xlbjsJCS8qIHNpemUgb2YgcGFyYWxsZWwgY29vcmRpbmF0aW9uIGluZm8g Ki8KLQlzdHJ1Y3QgUGFydGl0aW9uUHJ1bmVTdGF0ZSAqYXNfcHJ1bmVfc3RhdGU7Ci0JYm9vbAkJ YXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZDsJLyogaXMgYXNfdmFsaWRfc3VicGxhbnMgdmFs aWQ/ICovCi0JQml0bWFwc2V0ICAqYXNfdmFsaWRfc3VicGxhbnM7Ci0JQml0bWFwc2V0ICAqYXNf dmFsaWRfYXN5bmNwbGFuczsJLyogdmFsaWQgYXN5bmNocm9ub3VzIHBsYW5zIGluZGV4ZXMgKi8K LQlib29sCQkoKmNob29zZV9uZXh0X3N1YnBsYW4pIChBcHBlbmRTdGF0ZSAqKTsKKwlpbnQJCQlh c19maXJzdF9wYXJ0aWFsX3BsYW47CisKKwkvKiBQYXJhbGxlbCBhcHBlbmQgc3BlY2lmaWMgKi8K KwlQYXJhbGxlbEFwcGVuZFN0YXRlICphc19wc3RhdGU7CisJU2l6ZQkJcHN0YXRlX2xlbjsKKwor CWJvb2wJCSgqY2hvb3NlX25leHRfc3VicGxhbikgKHN0cnVjdCBBcHBlbmRTdGF0ZSAqKTsKIH07 CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0KQEAgLTE1MzksMjcgKzE1NDksMTcgQEAgc3RydWN0IEFw cGVuZFN0YXRlCiAgKi8KIHR5cGVkZWYgc3RydWN0IE1lcmdlQXBwZW5kU3RhdGUKIHsKLQlQbGFu U3RhdGUJcHM7CQkJCS8qIGl0cyBmaXJzdCBmaWVsZCBpcyBOb2RlVGFnICovCi0JUGxhblN0YXRl ICoqbWVyZ2VwbGFuczsJCS8qIGFycmF5IG9mIFBsYW5TdGF0ZXMgZm9yIG15IGlucHV0cyAqLwot CWludAkJCW1zX25wbGFuczsKKwlBcHBlbmRlclN0YXRlIG1zOworCiAJaW50CQkJbXNfbmtleXM7 CiAJU29ydFN1cHBvcnQgbXNfc29ydGtleXM7CS8qIGFycmF5IG9mIGxlbmd0aCBtc19ua2V5cyAq LwogCVR1cGxlVGFibGVTbG90ICoqbXNfc2xvdHM7CS8qIGFycmF5IG9mIGxlbmd0aCBtc19ucGxh bnMgKi8KIAlzdHJ1Y3QgYmluYXJ5aGVhcCAqbXNfaGVhcDsgLyogYmluYXJ5IGhlYXAgb2Ygc2xv dCBpbmRpY2VzICovCiAJYm9vbAkJbXNfaW5pdGlhbGl6ZWQ7IC8qIGFyZSBzdWJwbGFucyBzdGFy dGVkPyAqLwotCUJpdG1hcHNldCAgKm1zX2FzeW5jcGxhbnM7CS8qIGFzeW5jaHJvbm91cyBwbGFu cyBpbmRleGVzICovCi0JaW50CQkJbXNfbmFzeW5jcGxhbnM7IC8qICMgb2YgYXN5bmNocm9ub3Vz IHBsYW5zICovCi0JQXN5bmNSZXF1ZXN0ICoqbXNfYXN5bmNyZXF1ZXN0czsJLyogYXJyYXkgb2Yg QXN5bmNSZXF1ZXN0cyAqLwotCVR1cGxlVGFibGVTbG90ICoqbXNfYXN5bmNyZXN1bHRzOwkvKiB1 bnJldHVybmVkIHJlc3VsdHMgb2YgYXN5bmMgcGxhbnMgKi8KKworCS8qIE1lcmdlLXNwZWNpZmlj IGFzeW5jIHRyYWNraW5nICovCiAJQml0bWFwc2V0ICAqbXNfaGFzX2FzeW5jcmVzdWx0czsJLyog cGxhbnMgd2hpY2ggaGF2ZSBhc3luYyByZXN1bHRzICovCiAJQml0bWFwc2V0ICAqbXNfYXN5bmNy ZW1haW47IC8qIHJlbWFpbmluZyBhc3luY2hyb25vdXMgcGxhbnMgKi8KLQlCaXRtYXBzZXQgICpt c19uZWVkcmVxdWVzdDsgLyogYXN5bmNocm9ub3VzIHBsYW5zIG5lZWRpbmcgYSBuZXcgcmVxdWVz dCAqLwotCXN0cnVjdCBXYWl0RXZlbnRTZXQgKm1zX2V2ZW50c2V0OwkvKiBXYWl0RXZlbnRTZXQg dXNlZCB0byBjb25maWd1cmUgZmlsZQotCQkJCQkJCQkJCSAqIGRlc2NyaXB0b3Igd2FpdCBldmVu dHMgKi8KLQlzdHJ1Y3QgUGFydGl0aW9uUHJ1bmVTdGF0ZSAqbXNfcHJ1bmVfc3RhdGU7Ci0JYm9v bAkJbXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZDsJLyogaXMgbXNfdmFsaWRfc3VicGxhbnMg dmFsaWQ/ICovCi0JQml0bWFwc2V0ICAqbXNfdmFsaWRfc3VicGxhbnM7Ci0JQml0bWFwc2V0ICAq bXNfdmFsaWRfYXN5bmNwbGFuczsJLyogdmFsaWQgYXN5bmNocm9ub3VzIHBsYW5zIGluZGV4ZXMg Ki8KIH0gTWVyZ2VBcHBlbmRTdGF0ZTsKIAogLyogR2V0dGVycyBmb3IgQXBwZW5kU3RhdGUgYW5k IE1lcmdlQXBwZW5kU3RhdGUgKi8KQEAgLTE1NjksOSArMTU2OSw5IEBAIEdldEFwcGVuZEV2ZW50 U2V0KFBsYW5TdGF0ZSAqcHMpCiAJQXNzZXJ0KElzQShwcywgQXBwZW5kU3RhdGUpIHx8IElzQShw cywgTWVyZ2VBcHBlbmRTdGF0ZSkpOwogCiAJaWYgKElzQShwcywgQXBwZW5kU3RhdGUpKQotCQly ZXR1cm4gKChBcHBlbmRTdGF0ZSAqKSBwcyktPmFzX2V2ZW50c2V0OworCQlyZXR1cm4gKChBcHBl bmRTdGF0ZSAqKSBwcyktPmFzLmV2ZW50c2V0OwogCWVsc2UKLQkJcmV0dXJuICgoTWVyZ2VBcHBl bmRTdGF0ZSAqKSBwcyktPm1zX2V2ZW50c2V0OworCQlyZXR1cm4gKChNZXJnZUFwcGVuZFN0YXRl ICopIHBzKS0+bXMuZXZlbnRzZXQ7CiB9CiAKIHN0YXRpYyBpbmxpbmUgQml0bWFwc2V0ICoKQEAg LTE1ODAsMzQgKzE1ODAsOSBAQCBHZXROZWVkUmVxdWVzdChQbGFuU3RhdGUgKnBzKQogCUFzc2Vy dChJc0EocHMsIEFwcGVuZFN0YXRlKSB8fCBJc0EocHMsIE1lcmdlQXBwZW5kU3RhdGUpKTsKIAog CWlmIChJc0EocHMsIEFwcGVuZFN0YXRlKSkKLQkJcmV0dXJuICgoQXBwZW5kU3RhdGUgKikgcHMp LT5hc19uZWVkcmVxdWVzdDsKKwkJcmV0dXJuICgoQXBwZW5kU3RhdGUgKikgcHMpLT5hcy5uZWVk cmVxdWVzdDsKIAllbHNlCi0JCXJldHVybiAoKE1lcmdlQXBwZW5kU3RhdGUgKikgcHMpLT5tc19u ZWVkcmVxdWVzdDsKLX0KLQotLyogQ29tbW9uIHBhcnQgb2YgY2xhc3NpZnlfbWF0Y2hpbmdfc3Vi cGxhbnMoKSBmb3IgQXBwZW5kIGFuZCBNZXJnZUFwcGVuZCAqLwotc3RhdGljIGlubGluZSBib29s Ci1jbGFzc2lmeV9tYXRjaGluZ19zdWJwbGFuc19jb21tb24oQml0bWFwc2V0ICoqdmFsaWRfc3Vi cGxhbnMsCi0JCQkJCQkJCSAgQml0bWFwc2V0ICphc3luY3BsYW5zLAotCQkJCQkJCQkgIEJpdG1h cHNldCAqKnZhbGlkX2FzeW5jcGxhbnMpCi17Ci0JQXNzZXJ0KCp2YWxpZF9hc3luY3BsYW5zID09 IE5VTEwpOwotCi0JLyogQ2hlY2tlZCBieSBjbGFzc2lmeV9tYXRjaGluZ19zdWJwbGFucygpICov Ci0JQXNzZXJ0KCFibXNfaXNfZW1wdHkoKnZhbGlkX3N1YnBsYW5zKSk7Ci0KLQkvKiBOb3RoaW5n IHRvIGRvIGlmIHRoZXJlIGFyZSBubyB2YWxpZCBhc3luYyBzdWJwbGFucy4gKi8KLQlpZiAoIWJt c19vdmVybGFwKCp2YWxpZF9zdWJwbGFucywgYXN5bmNwbGFucykpCi0JCXJldHVybiBmYWxzZTsK LQotCS8qIEdldCB2YWxpZCBhc3luYyBzdWJwbGFucy4gKi8KLQkqdmFsaWRfYXN5bmNwbGFucyA9 IGJtc19pbnRlcnNlY3QoYXN5bmNwbGFucywKLQkJCQkJCQkJCSAgKnZhbGlkX3N1YnBsYW5zKTsK LQotCS8qIEFkanVzdCB0aGUgdmFsaWQgc3VicGxhbnMgdG8gY29udGFpbiBzeW5jIHN1YnBsYW5z IG9ubHkuICovCi0JKnZhbGlkX3N1YnBsYW5zID0gYm1zX2RlbF9tZW1iZXJzKCp2YWxpZF9zdWJw bGFucywKLQkJCQkJCQkJCSAgKnZhbGlkX2FzeW5jcGxhbnMpOwotCXJldHVybiB0cnVlOworCQly ZXR1cm4gKChNZXJnZUFwcGVuZFN0YXRlICopIHBzKS0+bXMubmVlZHJlcXVlc3Q7CiB9CiAKIC8q IC0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rl cy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKaW5kZXggNDg1YmVjNWFhYmQuLmQ1 NDZhMDJiOTRlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaAorKysg Yi9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaApAQCAtMzg2LDYgKzM4NiwyMiBAQCB0eXBl ZGVmIHN0cnVjdCBNb2RpZnlUYWJsZQogCiBzdHJ1Y3QgUGFydGl0aW9uUHJ1bmVJbmZvOwkJLyog Zm9yd2FyZCByZWZlcmVuY2UgdG8gc3RydWN0IGJlbG93ICovCiAKK3R5cGVkZWYgc3RydWN0IEFw cGVuZGVyCit7CisJUGxhbgkJcGxhbjsJCQkvKiBpdHMgZmlyc3QgZmllbGQgaXMgTm9kZVRhZyAq LworCUJpdG1hcHNldCAgKmFwcHJlbGlkczsJCS8qIFJUSXMgb2YgYXBwZW5kcmVsKHMpIGZvcm1l ZCBieSB0aGlzIG5vZGUgKi8KKwlMaXN0CSAgICpjaGlsZF9hcHBlbmRfcmVsaWRfc2V0czsJLyog c2V0cyBvZiBSVElzIG9mIGFwcGVuZHJlbHMKKwkJCQkJCQkJCQkJICogY29uc29saWRhdGVkIGlu dG8gdGhpcyBub2RlICovCisJTGlzdAkgICAqc3VicGxhbnM7CQkvKiBMaXN0IG9mIFBsYW5zIChm b3JtZXJseQorCQkJCQkJCQkgKiBhcHBlbmRwbGFucy9tZXJnZXBsYW5zKSAqLworCisJLyoKKwkg KiBJbmRleCBpbnRvIFBsYW5uZWRTdG10LnBhcnRQcnVuZUluZm9zIGFuZCBwYXJhbGxlbCBsaXN0 cyBpbiBFU3RhdGUuIFNldAorCSAqIHRvIC0xIGlmIG5vIHJ1bi10aW1lIHBydW5pbmcgaXMgdXNl ZC4KKwkgKi8KKwlpbnQJCQlwYXJ0X3BydW5lX2luZGV4OworfQkJCUFwcGVuZGVyOworCiAvKiAt LS0tLS0tLS0tLS0tLS0tCiAgKgkgQXBwZW5kIG5vZGUgLQogICoJCUdlbmVyYXRlIHRoZSBjb25j YXRlbmF0aW9uIG9mIHRoZSByZXN1bHRzIG9mIHN1Yi1wbGFucy4KQEAgLTM5MywzMiArNDA5LDE2 IEBAIHN0cnVjdCBQYXJ0aXRpb25QcnVuZUluZm87CQkvKiBmb3J3YXJkIHJlZmVyZW5jZSB0byBz dHJ1Y3QgYmVsb3cgKi8KICAqLwogdHlwZWRlZiBzdHJ1Y3QgQXBwZW5kCiB7Ci0JUGxhbgkJcGxh bjsKLQotCS8qIFJUSXMgb2YgYXBwZW5kcmVsKHMpIGZvcm1lZCBieSB0aGlzIG5vZGUgKi8KLQlC aXRtYXBzZXQgICphcHByZWxpZHM7Ci0KLQkvKiBzZXRzIG9mIFJUSXMgb2YgYXBwZW5kcmVscyBj b25zb2xpZGF0ZWQgaW50byB0aGlzIG5vZGUgKi8KLQlMaXN0CSAgICpjaGlsZF9hcHBlbmRfcmVs aWRfc2V0czsKLQotCS8qIHBsYW5zIHRvIHJ1biAqLwotCUxpc3QJICAgKmFwcGVuZHBsYW5zOwor CUFwcGVuZGVyCWFwOwogCiAJLyogIyBvZiBhc3luY2hyb25vdXMgcGxhbnMgKi8KIAlpbnQJCQlu YXN5bmNwbGFuczsKIAogCS8qCi0JICogQWxsICdhcHBlbmRwbGFucycgcHJlY2VkaW5nIHRoaXMg aW5kZXggYXJlIG5vbi1wYXJ0aWFsIHBsYW5zLiBBbGwKLQkgKiAnYXBwZW5kcGxhbnMnIGZyb20g dGhpcyBpbmRleCBvbndhcmRzIGFyZSBwYXJ0aWFsIHBsYW5zLgorCSAqIEFsbCAnc3VicGxhbnMn IHByZWNlZGluZyB0aGlzIGluZGV4IGFyZSBub24tcGFydGlhbCBwbGFucy4gQWxsCisJICogJ3N1 YnBsYW5zJyBmcm9tIHRoaXMgaW5kZXggb253YXJkcyBhcmUgcGFydGlhbCBwbGFucy4KIAkgKi8K IAlpbnQJCQlmaXJzdF9wYXJ0aWFsX3BsYW47Ci0KLQkvKgotCSAqIEluZGV4IGludG8gUGxhbm5l ZFN0bXQucGFydFBydW5lSW5mb3MgYW5kIHBhcmFsbGVsIGxpc3RzIGluIEVTdGF0ZToKLQkgKiBl c19wYXJ0X3BydW5lX3N0YXRlcyBhbmQgZXNfcGFydF9wcnVuZV9yZXN1bHRzLiBTZXQgdG8gLTEg aWYgbm8KLQkgKiBydW4tdGltZSBwcnVuaW5nIGlzIHVzZWQuCi0JICovCi0JaW50CQkJcGFydF9w cnVuZV9pbmRleDsKIH0gQXBwZW5kOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tCkBAIC00MjgsMTYg KzQyOCw3IEBAIHR5cGVkZWYgc3RydWN0IEFwcGVuZAogICovCiB0eXBlZGVmIHN0cnVjdCBNZXJn ZUFwcGVuZAogewotCVBsYW4JCXBsYW47Ci0KLQkvKiBSVElzIG9mIGFwcGVuZHJlbChzKSBmb3Jt ZWQgYnkgdGhpcyBub2RlICovCi0JQml0bWFwc2V0ICAqYXBwcmVsaWRzOwotCi0JLyogc2V0cyBv ZiBSVElzIG9mIGFwcGVuZHJlbHMgY29uc29saWRhdGVkIGludG8gdGhpcyBub2RlICovCi0JTGlz dAkgICAqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHM7Ci0KLQkvKiBwbGFucyB0byBydW4gKi8KLQlM aXN0CSAgICptZXJnZXBsYW5zOworCUFwcGVuZGVyCWFwOwogCiAJLyogdGhlc2UgZmllbGRzIGFy ZSBqdXN0IGxpa2UgdGhlIHNvcnQta2V5IGluZm8gaW4gc3RydWN0IFNvcnQ6ICovCiAKQEAgLTQ1 NSwxMyArNDQ2LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgTWVyZ2VBcHBlbmQKIAogCS8qIE5VTExTIEZJ UlNUL0xBU1QgZGlyZWN0aW9ucyAqLwogCWJvb2wJICAgKm51bGxzRmlyc3QgcGdfbm9kZV9hdHRy KGFycmF5X3NpemUobnVtQ29scykpOwotCi0JLyoKLQkgKiBJbmRleCBpbnRvIFBsYW5uZWRTdG10 LnBhcnRQcnVuZUluZm9zIGFuZCBwYXJhbGxlbCBsaXN0cyBpbiBFU3RhdGU6Ci0JICogZXNfcGFy dF9wcnVuZV9zdGF0ZXMgYW5kIGVzX3BhcnRfcHJ1bmVfcmVzdWx0cy4gU2V0IHRvIC0xIGlmIG5v Ci0JICogcnVuLXRpbWUgcHJ1bmluZyBpcyB1c2VkLgotCSAqLwotCWludAkJCXBhcnRfcHJ1bmVf aW5kZXg7CiB9IE1lcmdlQXBwZW5kOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tCi0tIAoyLjQzLjAK Cg== --=_97193707b7dcc95945ffded93f09d47d--