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.94.2) (envelope-from ) id 1rLP7s-007jMg-6F for pgsql-hackers@arkaria.postgresql.org; Thu, 04 Jan 2024 14:55:16 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1rLP7q-00DJXC-A5 for pgsql-hackers@arkaria.postgresql.org; Thu, 04 Jan 2024 14:55:14 +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.94.2) (envelope-from ) id 1rLP7p-00DJX4-DF for pgsql-hackers@lists.postgresql.org; Thu, 04 Jan 2024 14:55:13 +0000 Received: from mail-wr1-x429.google.com ([2a00:1450:4864:20::429]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1rLP7h-00DiCD-IJ for pgsql-hackers@lists.postgresql.org; Thu, 04 Jan 2024 14:55:11 +0000 Received: by mail-wr1-x429.google.com with SMTP id ffacd0b85a97d-3366ddd1eddso516392f8f.0 for ; Thu, 04 Jan 2024 06:55:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; t=1704380103; x=1704984903; darn=lists.postgresql.org; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=xuuY9iq6AKexalv0r5NzWgGdDWF0mzNiXZcpT+ttL3I=; b=QVAjSFZIVSV2O9UkwokIbR/0eFfAmAPwjU0RkcWWc8hCnITojIIwu8h0bJSo/erq1S EnPzhP9kDC96gyfqEp1+KiidqbAjnLze+n43KOhhw1mX86o67OctYIkhS6iiXzC3UkNL JmOmUIfQMA5XVGosEDXWQmVXcv160fke5a6P1BHu61aKQ04xsX9J/kYk+0bmy8FvYJfm Ilm4RTWRLV3hDiJEmFi+paSKlj/1QtWS5k0gVMNzOmmzMq2m/+y/5CxUaaubAJcvFR1h Ufm7fjHd+L0KQn28xAjZtvfJG1cy3Om2hThoJN7mwJHbjXzSU4iyNbSKDWZTuQGLkzJY UUiw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1704380103; x=1704984903; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=xuuY9iq6AKexalv0r5NzWgGdDWF0mzNiXZcpT+ttL3I=; b=BQ4GAT563jWnSVh6dOt4zeIaNQQ2RCn1UA1UGoeR55UjlmOCw633d9P11yHjA2e0zj wlFHzXMpS1Ss3Zy45svk6PBEr8AEQngzczeGVNFuDXGG4YRba+6MdG+IhKPeQe+X52ZM +1bvvuptD2mAdOD0W6eRODngC2V0KqV9IddNlJPVk3r8z86VmOHa4iCyy/uIuJkcFkMC eLbX6GIbh16dPLLGhhDiBq+Cp/R9y+srwQhOxLAnOi6xK2JSaseLnD2AWUxByirKcYnD ukl8XA4hNd/qjn9SXRZWOxwtPnbMxL/c7wZoFz8AwFtePW8Ai6MdxmbNsb/iQEZmEUaA 38yQ== X-Gm-Message-State: AOJu0YzN4hK9ompj31atAr1wfkSLO8HN+KEEmHYPuikNvyVeXVQoKNJw zLFdy0deFGwi8QW6YAG2H8uS82ETRH/I X-Google-Smtp-Source: AGHT+IHoc4pwLEJPIoAlaqN8axx5HY8P13jt0qEgdaAh6bkASiu4/6zQeCkNrdIETSAfVA+XEyvOng== X-Received: by 2002:a5d:4d89:0:b0:336:5f57:d1c7 with SMTP id b9-20020a5d4d89000000b003365f57d1c7mr282541wru.131.1704380102453; Thu, 04 Jan 2024 06:55:02 -0800 (PST) Received: from [10.137.0.18] (srv1.mobissw.com. [89.235.0.226]) by smtp.gmail.com with ESMTPSA id z16-20020adfec90000000b003366fb71297sm32964525wrn.81.2024.01.04.06.55.01 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 04 Jan 2024 06:55:01 -0800 (PST) Content-Type: multipart/mixed; boundary="------------DeQq8rsUZatFkEjxF1hv4CO9" Message-ID: Date: Thu, 4 Jan 2024 15:55:01 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: index prefetching To: Andres Freund Cc: Robert Haas , PostgreSQL Hackers , Georgios References: <8ec36f51-b863-60e3-20e2-b9c981c5ce5e@enterprisedb.com> <06bb7d02-2c44-3062-731e-a735ba13da7e@enterprisedb.com> <367160ea-b1ed-4481-e804-bca509128878@enterprisedb.com> <280dc83c-a16f-4424-1319-95e7e3f798bd@enterprisedb.com> <98ba4b25-fae8-c1f4-1597-8093375a1986@enterprisedb.com> <20231221134314.wf2rs62d37u62j7t@alap3.anarazel.de> <20231221154352.ijtg6wloa3nowivh@alap3.anarazel.de> Content-Language: en-US From: Tomas Vondra In-Reply-To: <20231221154352.ijtg6wloa3nowivh@alap3.anarazel.de> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------DeQq8rsUZatFkEjxF1hv4CO9 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Hi, Here's a somewhat reworked version of the patch. My initial goal was to see if it could adopt the StreamingRead API proposed in [1], but that turned out to be less straight-forward than I hoped, for two reasons: (1) The StreamingRead API seems to be designed for pages, but the index code naturally works with TIDs/tuples. Yes, the callbacks can associate the blocks with custom data (in this case that'd be the TID), but it seemed a bit strange ... (2) The place adding requests to the StreamingRead queue is pretty far from the place actually reading the pages - for prefetching, the requests would be generated in nodeIndexscan, but the page reading happens somewhere deep in index_fetch_heap/heapam_index_fetch_tuple. Sure, the TIDs would come from a callback, so it's a bit as if the requests were generated in heapam_index_fetch_tuple - but it has no idea StreamingRead exists, so where would it get it. We might teach it about it, but what if there are multiple places calling index_fetch_heap()? Not all of which may be using StreamingRead (only indexscans would do that). Or if there are multiple index scans, there's need to be a separate StreamingRead queues, right? In any case, I felt a bit out of my depth here, and I chose not to do all this work without discussing the direction here. (Also, see the point about cursors and xs_heap_continue a bit later in this post.) I did however like the general StreamingRead API - how it splits the work between the API and the callback. The patch used to do everything, which meant it hardcoded a lot of the IOS-specific logic etc. I did plan to have some sort of "callback" for reading from the queue, but that didn't quite solve this issue - a lot of the stuff remained hard-coded. But the StreamingRead API made me realize that having a callback for the first phase (that adds requests to the queue) would fix that. So I did that - there's now one simple callback in for index scans, and a bit more complex callback for index-only scans. Thanks to this the hard-coded stuff mostly disappears, which is good. Perhaps a bigger change is that I decided to move this into a separate API on top of indexam.c. The original idea was to integrate this into index_getnext_tid/index_getnext_slot, so that all callers benefit from the prefetching automatically. Which would be nice, but it also meant it's need to happen in the indexam.c code, which seemed dirty. This patch introduces an API similar to StreamingRead. It calls the indexam.c stuff, but does all the prefetching on top of it, not in it. If a place calling index_getnext_tid() wants to allow prefetching, it needs to switch to IndexPrefetchNext(). (There's no function that would replace index_getnext_slot, at the moment. Maybe there should be.) Note 1: The IndexPrefetch name is a bit misleading, because it's used even with prefetching disabled - all index reads from the index scan happen through it. Maybe it should be called IndexReader or something like that. Note 2: I left the code in indexam.c for now, but in principle it could (should) be moved to a different place. I think this layering makes sense, and it's probably much closer to what Andres meant when he said the prefetching should happen in the executor. Even if the patch ends up using StreamingRead in the future, I guess we'll want something like IndexPrefetch - it might use the StreamingRead internally, but it would still need to do some custom stuff to detect I/O patterns or something that does not quite fit into the StreamingRead. Now, let's talk about two (mostly unrelated) problems I ran into. Firstly, I realized there's a bit of a problem with cursors. The prefetching works like this: 1) reading TIDs from the index 2) stashing them into a queue in IndexPrefetch 3) doing prefetches for the new TIDs added to the queue 4) returning the TIDs to the caller, one by one And all of this works ... unless the direction of the scan changes. Which for cursors can happen if someone does FETCH BACKWARD or stuff like that. I'm not sure how difficult it'd be to make this work. I suppose we could simply discard the prefetched entries and do the right number of steps back for the index scan. But I haven't tried, and maybe it's more complex than I'm imagining. Also, if the cursor changes the direction a lot, it'd make the prefetching harmful. The patch simply disables prefetching for such queries, using the same logic that we do for parallelism. This may be over-zealous. FWIW this is one of the things that probably should remain outside of StreamingRead API - it seems pretty index-specific, and I'm not sure we'd even want to support these "backward" movements in the API. The other issue I'm aware of is handling xs_heap_continue. I believe it works fine for "false" but I need to take a look at non-MVCC snapshots (i.e. when xs_heap_continue=true). I haven't done any benchmarks with this reworked API - there's a couple more allocations etc. but it did not change in a fundamental way. I don't expect any major difference. regards [1] https://www.postgresql.org/message-id/CA%2BhUKGJkOiOCa%2Bmag4BF%2BzHo7qo%3Do9CFheB8%3Dg6uT5TUm2gkvA%40mail.gmail.com -- Tomas Vondra EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company --------------DeQq8rsUZatFkEjxF1hv4CO9 Content-Type: text/x-patch; charset=UTF-8; name="v20240103-0001-prefetch-2023-12-09.patch" Content-Disposition: attachment; filename="v20240103-0001-prefetch-2023-12-09.patch" Content-Transfer-Encoding: base64 RnJvbSA3NGJkMGQ2YjcwZmE4Y2EzYTFiMjYxOTZkZTZiN2E5Y2M2NzBhYzliIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQDJuZHF1YWRyYW50 LmNvbT4KRGF0ZTogRnJpLCAxNyBOb3YgMjAyMyAyMzo1NDoxOSArMDEwMApTdWJqZWN0OiBb UEFUQ0ggdjIwMjQwMTAzIDEvMl0gcHJlZmV0Y2ggMjAyMy0xMi0wOQoKUGF0Y2ggdmVyc2lv biBzaGFyZWQgb24gMjAyMy8xMi8wOS4KLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9o ZWFwYW1faGFuZGxlci5jIHwgICAyICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2Vu YW0uYyAgICAgICAgIHwgICA0ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhh bS5jICAgICAgIHwgNTUxICsrKysrKysrKysrKysrKysrKysrKystCiBzcmMvYmFja2VuZC9j b21tYW5kcy9leHBsYWluLmMgICAgICAgICAgIHwgIDE4ICsKIHNyYy9iYWNrZW5kL2V4ZWN1 dG9yL2V4ZWNJbmRleGluZy5jICAgICAgfCAgIDYgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9y L2V4ZWNSZXBsaWNhdGlvbi5jICAgfCAgIDkgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2lu c3RydW1lbnQuYyAgICAgICAgfCAgIDQgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUlu ZGV4b25seXNjYW4uYyB8ICA5OSArKystCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5k ZXhzY2FuLmMgICAgIHwgIDcxICsrLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNz LmMgICAgICAgICB8ICAgMiArLQogc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmggICAgICAg ICAgICAgICB8IDExNSArKysrLQogc3JjL2luY2x1ZGUvZXhlY3V0b3IvaW5zdHJ1bWVudC5o ICAgICAgICB8ICAgMiArCiBzcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCAgICAgICAg ICAgIHwgICA0ICsKIDEzIGZpbGVzIGNoYW5nZWQsIDg2OCBpbnNlcnRpb25zKCspLCAxOSBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFw YW1faGFuZGxlci5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIu YwppbmRleCA3YzI4ZGFmYjcyOC4uMjZkM2VjMjBiNjMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwpAQCAtNzkyLDcgKzc5Miw3IEBAIGhlYXBhbV9y ZWxhdGlvbl9jb3B5X2Zvcl9jbHVzdGVyKFJlbGF0aW9uIE9sZEhlYXAsIFJlbGF0aW9uIE5l d0hlYXAsCiAKIAkJaWYgKGluZGV4U2NhbiAhPSBOVUxMKQogCQl7Ci0JCQlpZiAoIWluZGV4 X2dldG5leHRfc2xvdChpbmRleFNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBzbG90KSkK KwkJCWlmICghaW5kZXhfZ2V0bmV4dF9zbG90KGluZGV4U2NhbiwgRm9yd2FyZFNjYW5EaXJl Y3Rpb24sIHNsb3QsIE5VTEwpKQogCQkJCWJyZWFrOwogCiAJCQkvKiBTaW5jZSB3ZSB1c2Vk IG5vIHNjYW4ga2V5cywgc2hvdWxkIG5ldmVyIG5lZWQgdG8gcmVjaGVjayAqLwpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvaW5kZXgvZ2VuYW0uYwppbmRleCA0Y2ExMjAwNjg0My4uNzJlN2M5ZjIwNmMgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5jCisrKyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5jCkBAIC01MDksNyArNTA5LDcgQEAgc3lzdGFi bGVfZ2V0bmV4dChTeXNTY2FuRGVzYyBzeXNzY2FuKQogCiAJaWYgKHN5c3NjYW4tPmlyZWwp CiAJewotCQlpZiAoaW5kZXhfZ2V0bmV4dF9zbG90KHN5c3NjYW4tPmlzY2FuLCBGb3J3YXJk U2NhbkRpcmVjdGlvbiwgc3lzc2Nhbi0+c2xvdCkpCisJCWlmIChpbmRleF9nZXRuZXh0X3Ns b3Qoc3lzc2Nhbi0+aXNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBzeXNzY2FuLT5zbG90 LCBOVUxMKSkKIAkJewogCQkJYm9vbAkJc2hvdWxkRnJlZTsKIApAQCAtNzEzLDcgKzcxMyw3 IEBAIHN5c3RhYmxlX2dldG5leHRfb3JkZXJlZChTeXNTY2FuRGVzYyBzeXNzY2FuLCBTY2Fu RGlyZWN0aW9uIGRpcmVjdGlvbikKIAlIZWFwVHVwbGUJaHR1cCA9IE5VTEw7CiAKIAlBc3Nl cnQoc3lzc2Nhbi0+aXJlbCk7Ci0JaWYgKGluZGV4X2dldG5leHRfc2xvdChzeXNzY2FuLT5p c2NhbiwgZGlyZWN0aW9uLCBzeXNzY2FuLT5zbG90KSkKKwlpZiAoaW5kZXhfZ2V0bmV4dF9z bG90KHN5c3NjYW4tPmlzY2FuLCBkaXJlY3Rpb24sIHN5c3NjYW4tPnNsb3QsIE5VTEwpKQog CQlodHVwID0gRXhlY0ZldGNoU2xvdEhlYXBUdXBsZShzeXNzY2FuLT5zbG90LCBmYWxzZSwg TlVMTCk7CiAKIAkvKiBTZWUgbm90ZXMgaW4gc3lzdGFibGVfZ2V0bmV4dCAqLwpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9pbmRleC9pbmRleGFtLmMKaW5kZXggZjIzZTAxOTlmMDguLmY5NmFlYmExYjM5 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jCisrKyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMKQEAgLTQ5LDE2ICs0OSwxOSBA QAogI2luY2x1ZGUgImFjY2Vzcy9yZWxzY2FuLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3RhYmxl YW0uaCIKICNpbmNsdWRlICJhY2Nlc3MvdHJhbnNhbS5oIgorI2luY2x1ZGUgImFjY2Vzcy92 aXNpYmlsaXR5bWFwLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hsb2cuaCIKICNpbmNsdWRlICJj YXRhbG9nL2luZGV4LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19hbXByb2MuaCIKICNpbmNs dWRlICJjYXRhbG9nL3BnX3R5cGUuaCIKICNpbmNsdWRlICJjb21tYW5kcy9kZWZyZW0uaCIK KyNpbmNsdWRlICJjb21tb24vaGFzaGZuLmgiCiAjaW5jbHVkZSAibm9kZXMvbWFrZWZ1bmNz LmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9idWZtZ3IuaCIK ICNpbmNsdWRlICJzdG9yYWdlL2xtZ3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL3ByZWRpY2F0 ZS5oIgorI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL3J1 bGV1dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL3NuYXBtZ3IuaCIKICNpbmNsdWRlICJ1dGls cy9zeXNjYWNoZS5oIgpAQCAtMTA4LDYgKzExMSwxMyBAQCBzdGF0aWMgSW5kZXhTY2FuRGVz YyBpbmRleF9iZWdpbnNjYW5faW50ZXJuYWwoUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKIAkJ CQkJCQkJCQkJICBpbnQgbmtleXMsIGludCBub3JkZXJieXMsIFNuYXBzaG90IHNuYXBzaG90 LAogCQkJCQkJCQkJCQkgIFBhcmFsbGVsSW5kZXhTY2FuRGVzYyBwc2NhbiwgYm9vbCB0ZW1w X3NuYXApOwogCitzdGF0aWMgdm9pZCBpbmRleF9wcmVmZXRjaF90aWRzKEluZGV4U2NhbkRl c2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCQkJCUluZGV4UHJlZmV0 Y2ggKnByZWZldGNoKTsKK3N0YXRpYyBJdGVtUG9pbnRlciBpbmRleF9wcmVmZXRjaF9nZXRf dGlkKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJ CQkJCQkJICBJbmRleFByZWZldGNoICpwcmVmZXRjaCwgYm9vbCAqYWxsX3Zpc2libGUpOwor c3RhdGljIHZvaWQgaW5kZXhfcHJlZmV0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFBy ZWZldGNoICpwcmVmZXRjaCwKKwkJCQkJCSAgIEl0ZW1Qb2ludGVyIHRpZCwgYm9vbCBza2lw X2FsbF92aXNpYmxlLCBib29sICphbGxfdmlzaWJsZSk7CisKIAogLyogLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog ICoJCQkJICAgaW5kZXhfIGludGVyZmFjZSBmdW5jdGlvbnMKQEAgLTUzNiw4ICs1NDYsOCBA QCBpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwoUmVsYXRpb24gaGVhcHJlbCwgUmVsYXRpb24g aW5kZXhyZWwsIGludCBua2V5cywKICAqIG9yIE5VTEwgaWYgbm8gbW9yZSBtYXRjaGluZyB0 dXBsZXMgZXhpc3QuCiAgKiAtLS0tLS0tLS0tLS0tLS0tCiAgKi8KLUl0ZW1Qb2ludGVyCi1p bmRleF9nZXRuZXh0X3RpZChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGly ZWN0aW9uKQorc3RhdGljIEl0ZW1Qb2ludGVyCitpbmRleF9nZXRuZXh0X3RpZF9pbnRlcm5h bChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKQogewogCWJv b2wJCWZvdW5kOwogCkBAIC02MzYsMTYgKzY0NiwyMSBAQCBpbmRleF9mZXRjaF9oZWFwKElu ZGV4U2NhbkRlc2Mgc2NhbiwgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCiAgKiAtLS0tLS0tLS0t LS0tLS0tCiAgKi8KIGJvb2wKLWluZGV4X2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIHNj YW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCkKK2lu ZGV4X2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGly ZWN0aW9uLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKKwkJCQkgICBJbmRleFByZWZldGNoICpw cmVmZXRjaCkKIHsKIAlmb3IgKDs7KQogCXsKKwkJLyogRG8gcHJlZmV0Y2hpbmcgKGlmIHJl cXVlc3RlZC9lbmFibGVkKS4gKi8KKwkJaW5kZXhfcHJlZmV0Y2hfdGlkcyhzY2FuLCBkaXJl Y3Rpb24sIHByZWZldGNoKTsKKwogCQlpZiAoIXNjYW4tPnhzX2hlYXBfY29udGludWUpCiAJ CXsKLQkJCUl0ZW1Qb2ludGVyIHRpZDsKKwkJCUl0ZW1Qb2ludGVyCXRpZDsKKwkJCWJvb2wJ CWFsbF92aXNpYmxlOwogCiAJCQkvKiBUaW1lIHRvIGZldGNoIHRoZSBuZXh0IFRJRCBmcm9t IHRoZSBpbmRleCAqLwotCQkJdGlkID0gaW5kZXhfZ2V0bmV4dF90aWQoc2NhbiwgZGlyZWN0 aW9uKTsKKwkJCXRpZCA9IGluZGV4X3ByZWZldGNoX2dldF90aWQoc2NhbiwgZGlyZWN0aW9u LCBwcmVmZXRjaCwgJmFsbF92aXNpYmxlKTsKIAogCQkJLyogSWYgd2UncmUgb3V0IG9mIGlu ZGV4IGVudHJpZXMsIHdlJ3JlIGRvbmUgKi8KIAkJCWlmICh0aWQgPT0gTlVMTCkKQEAgLTEw MDMsMyArMTAxOCw1MjkgQEAgaW5kZXhfb3BjbGFzc19vcHRpb25zKFJlbGF0aW9uIGluZHJl bCwgQXR0ck51bWJlciBhdHRudW0sIERhdHVtIGF0dG9wdGlvbnMsCiAKIAlyZXR1cm4gYnVp bGRfbG9jYWxfcmVsb3B0aW9ucygmcmVsb3B0cywgYXR0b3B0aW9ucywgdmFsaWRhdGUpOwog fQorCisvKgorICogaW5kZXhfcHJlZmV0Y2hfaXNfc2VxdWVudGlhbAorICoJCVRyYWNrIHRo ZSBibG9jayBudW1iZXIgYW5kIGNoZWNrIGlmIHRoZSBJL08gcGF0dGVybiBpcyBzZXF1ZW50 aWFsLAorICoJCW9yIGlmIHRoZSBzYW1lIGJsb2NrIHdhcyBqdXN0IHByZWZldGNoZWQuCisg KgorICogUHJlZmV0Y2hpbmcgaXMgY2hlYXAsIGJ1dCBmb3Igc29tZSBhY2Nlc3MgcGF0dGVy bnMgdGhlIGJlbmVmaXRzIGFyZSBzbWFsbAorICogY29tcGFyZWQgdG8gdGhlIGV4dHJhIG92 ZXJoZWFkLiBJbiBwYXJ0aWN1bGFyLCBmb3Igc2VxdWVudGlhbCBhY2Nlc3MgdGhlCisgKiBy ZWFkLWFoZWFkIHBlcmZvcm1lZCBieSB0aGUgT1MgaXMgdmVyeSBlZmZlY3RpdmUvZWZmaWNp ZW50LiBEb2luZyBtb3JlCisgKiBwcmVmZXRjaGluZyBpcyBqdXN0IGluY3JlYXNpbmcgdGhl IGNvc3RzLgorICoKKyAqIFRoaXMgdHJpZXMgdG8gaWRlbnRpZnkgc2ltcGxlIHNlcXVlbnRp YWwgcGF0dGVybnMsIHNvIHRoYXQgd2UgY2FuIHNraXAKKyAqIHRoZSBwcmVmZXRjaGluZyBy ZXF1ZXN0LiBUaGlzIGlzIGltcGxlbWVudGVkIGJ5IGhhdmluZyBhIHNtYWxsIHF1ZXVlCisg KiBvZiBibG9jayBudW1iZXJzLCBhbmQgY2hlY2tpbmcgaXQgYmVmb3JlIHByZWZldGNoaW5n IGFub3RoZXIgYmxvY2suCisgKgorICogV2UgbG9vayBhdCB0aGUgcHJlY2VkaW5nIFBSRUZF VENIX1NFUV9QQVRURVJOX0JMT0NLUyBibG9ja3MsIGFuZCBzZWUgaWYKKyAqIHRoZXkgYXJl IHNlcXVlbnRpYWwuIFdlIGFsc28gY2hlY2sgaWYgdGhlIGJsb2NrIGlzIHRoZSBzYW1lIGFz IHRoZSBsYXN0CisgKiByZXF1ZXN0ICh3aGljaCBpcyBub3Qgc2VxdWVudGlhbCkuCisgKgor ICogTm90ZSB0aGF0IHRoZSBtYWluIHByZWZldGNoIHF1ZXVlIGlzIG5vdCByZWFsbHkgdXNl ZnVsIGZvciB0aGlzLCBhcyBpdAorICogc3RvcmVzIFRJRHMgd2hpbGUgd2UgY2FyZSBhYm91 dCBibG9jayBudW1iZXJzLiBDb25zaWRlciBhIHNvcnRlZCB0YWJsZSwKKyAqIHdpdGggYSBw ZXJmZWN0bHkgc2VxdWVudGlhbCBwYXR0ZXJuIHdoZW4gYWNjZXNzZWQgdGhyb3VnaCBhbiBp bmRleC4gRWFjaAorICogaGVhcCBwYWdlIG1heSBoYXZlIGRvemVucyBvZiBUSURzLCBidXQg d2UgbmVlZCB0byBjaGVjayBibG9jayBudW1iZXJzLgorICogV2UgY291bGQga2VlcCBlbm91 Z2ggVElEcyB0byBjb3ZlciBlbm91Z2ggYmxvY2tzLCBidXQgdGhlbiB3ZSBhbHNvIG5lZWQK KyAqIHRvIHdhbGsgdGhvc2Ugd2hlbiBjaGVja2luZyB0aGUgcGF0dGVybiAoaW4gaG90IHBh dGgpLgorICoKKyAqIFNvIGluc3RlYWQsIHdlIG1haW50YWluIGEgc21hbGwgc2VwYXJhdGUg cXVldWUgb2YgYmxvY2sgbnVtYmVycywgYW5kIHdlIHVzZQorICogdGhpcyBpbnN0ZWFkLgor ICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgYmxvY2sgaXMgaW4gYSBzZXF1ZW50aWFsIHBh dHRlcm4gKGFuZCBzbyBzaG91bGQgbm90IGJlCisgKiBwcmVmZXRjaGVkKSwgb3IgZmFsc2Ug KG5vdCBzZXF1ZW50aWFsLCBzaG91bGQgYmUgcHJlZmV0Y2hlZCkuCisgKgorICogWFhYIFRo ZSBuYW1lIGlzIGEgYml0IG1pc2xlYWRpbmcsIGFzIGl0IGFsc28gYWRkcyB0aGUgYmxvY2sg bnVtYmVyIHRvIHRoZQorICogYmxvY2sgcXVldWUgYW5kIGNoZWNrcyBpZiB0aGUgYmxvY2sg aXMgdGhlIHNhbWUgYXMgdGhlIGxhc3Qgb25lICh3aGljaAorICogZG9lcyBub3QgcmVxdWly ZSBhIHNlcXVlbnRpYWwgcGF0dGVybikuCisgKi8KK3N0YXRpYyBib29sCitpbmRleF9wcmVm ZXRjaF9pc19zZXF1ZW50aWFsKEluZGV4UHJlZmV0Y2ggKnByZWZldGNoLCBCbG9ja051bWJl ciBibG9jaykKK3sKKwlpbnQJCQlpZHg7CisKKwkvKgorCSAqIElmIHRoZSBibG9jayBxdWV1 ZSBpcyBlbXB0eSwganVzdCBzdG9yZSB0aGUgYmxvY2sgYW5kIHdlJ3JlIGRvbmUgKGl0J3MK KwkgKiBuZWl0aGVyIGEgc2VxdWVudGlhbCBwYXR0ZXJuLCBuZWl0aGVyIHJlY2VudGx5IHBy ZWZldGNoZWQgYmxvY2spLgorCSAqLworCWlmIChwcmVmZXRjaC0+YmxvY2tJbmRleCA9PSAw KQorCXsKKwkJcHJlZmV0Y2gtPmJsb2NrSXRlbXNbUFJFRkVUQ0hfQkxPQ0tfSU5ERVgocHJl ZmV0Y2gtPmJsb2NrSW5kZXgpXSA9IGJsb2NrOworCQlwcmVmZXRjaC0+YmxvY2tJbmRleCsr OworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoKKwkgKiBDaGVjayBpZiBpdCdzIHRoZSBz YW1lIGFzIHRoZSBpbW1lZGlhdGVseSBwcmVjZWRpbmcgYmxvY2suIFdlIGRvbid0CisJICog d2FudCB0byBwcmVmZXRjaCB0aGUgc2FtZSBibG9jayBvdmVyIGFuZCBvdmVyICh3aGljaCB3 b3VsZCBoYXBwZW4gZm9yCisJICogd2VsbCBjb3JyZWxhdGVkIGluZGV4ZXMpLgorCSAqCisJ ICogSW4gcHJpbmNpcGxlIHdlIGNvdWxkIHJlbHkgb24gaW5kZXhfcHJlZmV0Y2hfYWRkX2Nh Y2hlIGRvaW5nIHRoaXMgdXNpbmcKKwkgKiB0aGUgZnVsbCBjYWNoZSwgYnV0IHRoaXMgY2hl Y2sgaXMgbXVjaCBjaGVhcGVyIGFuZCB3ZSBuZWVkIHRvIGxvb2sgYXQKKwkgKiB0aGUgcHJl Y2VkaW5nIGJsb2NrIGFueXdheSwgc28gd2UganVzdCBkbyBpdC4KKwkgKgorCSAqIFhYWCBO b3RpY2Ugd2UgaGF2ZW4ndCBhZGRlZCB0aGUgYmxvY2sgdG8gdGhlIGJsb2NrIHF1ZXVlIHll dCwgYW5kIHRoZXJlCisJICogaXMgYSBwcmVjZWRpbmcgYmxvY2sgKGkuZS4gYmxvY2tJbmRl eC0xIGlzIHZhbGlkKS4KKwkgKi8KKwlpZiAocHJlZmV0Y2gtPmJsb2NrSXRlbXNbUFJFRkVU Q0hfQkxPQ0tfSU5ERVgocHJlZmV0Y2gtPmJsb2NrSW5kZXggLSAxKV0gPT0gYmxvY2spCisJ CXJldHVybiB0cnVlOworCisJLyoKKwkgKiBBZGQgdGhlIGJsb2NrIG51bWJlciB0byB0aGUg cXVldWUuCisJICoKKwkgKiBXZSBkbyB0aGlzIGJlZm9yZSBjaGVja2luZyBpZiB0aGUgcGF0 dGVybiwgYmVjYXVzZSB3ZSB3YW50IHRvIGtub3cKKwkgKiBhYm91dCB0aGUgYmxvY2sgZXZl biBpZiB3ZSBlbmQgdXAgc2tpcHBpbmcgdGhlIHByZWZldGNoLiBPdGhlcndpc2Ugd2UnZAor CSAqIG5vdCBiZSBhYmxlIHRvIGRldGVjdCBsb25nZXIgc2VxdWVudGlhbCBwYXR0ZW5zIC0g d2UnZCBza2lwIG9uZSBibG9jaworCSAqIGJ1dCB0aGVuIGZhaWwgdG8gc2tpcCB0aGUgbmV4 dCBjb3VwbGUgYmxvY2tzIGV2ZW4gaW4gYSBwZXJmZWN0CisJICogc2VxdWVudGlhbCBwYXR0 ZXJuLiBUaGlzIG9jaWxsYXRpb24gbWlnaHQgZXZlbiBwcmV2ZW50IHRoZSBPUworCSAqIHJl YWQtYWhlYWQgZnJvbSBraWNraW5nIGluLgorCSAqLworCXByZWZldGNoLT5ibG9ja0l0ZW1z W1BSRUZFVENIX0JMT0NLX0lOREVYKHByZWZldGNoLT5ibG9ja0luZGV4KV0gPSBibG9jazsK KwlwcmVmZXRjaC0+YmxvY2tJbmRleCsrOworCisJLyoKKwkgKiBDaGVjayBpZiB0aGUgbGFz dCBjb3VwbGUgYmxvY2tzIGFyZSBpbiBhIHNlcXVlbnRpYWwgcGF0dGVybi4gV2UgbG9vawor CSAqIGZvciBhIHNlcXVlbnRpYWwgcGF0dGVybiBvZiBQUkVGRVRDSF9TRVFfUEFUVEVSTl9C TE9DS1MgKDQgYnkgZGVmYXVsdCksCisJICogc28gd2UgbG9vayBmb3IgcGF0dGVybnMgb2Yg NSBwYWdlcyAoNDBrQikgaW5jbHVkaW5nIHRoZSBuZXcgYmxvY2suCisJICoKKwkgKiBYWFgg UGVyaGFwcyB0aGlzIHNob3VsZCBiZSB0aWVkIHRvIGVmZmVjdGl2ZV9pb19jb25jdXJyZW5j eSBzb21laG93PworCSAqCisJICogWFhYIENvdWxkIGl0IGJlIGhhcm1mdWwgdGhhdCB3ZSBy ZWFkIHRoZSBxdWV1ZSBiYWNrd2FyZHM/IE1heWJlIG1lbW9yeQorCSAqIHByZWZldGNoaW5n IHdvcmtzIGJldHRlciBmb3IgdGhlIGZvcndhcmQgZGlyZWN0aW9uPworCSAqLworCWZvciAo aW50IGkgPSAxOyBpIDwgUFJFRkVUQ0hfU0VRX1BBVFRFUk5fQkxPQ0tTOyBpKyspCisJewor CQkvKgorCQkgKiBBcmUgdGhlcmUgZW5vdWdoIHJlcXVlc3RzIHRvIGNvbmZpcm0gYSBzZXF1 ZW50aWFsIHBhdHRlcm4/IFdlIG9ubHkKKwkJICogY29uc2lkZXIgc29tZXRoaW5nIHRvIGJl IHNlcXVlbnRpYWwgYWZ0ZXIgZmluZGluZyBhIHNlcXVlbmNlIG9mCisJCSAqIFBSRUZFVENI X1NFUV9QQVRURVJOX0JMT0NLUyBibG9ja3MuCisJCSAqCisJCSAqIEZJWE1FIEJldHRlciB0 byBtb3ZlIHRoaXMgb3V0c2lkZSB0aGUgbG9vcC4KKwkJICovCisJCWlmIChwcmVmZXRjaC0+ YmxvY2tJbmRleCA8IGkpCisJCQlyZXR1cm4gZmFsc2U7CisKKwkJLyoKKwkJICogQ2FsY3Vs YXRlIGluZGV4IG9mIHRoZSBlYXJsaWVyIGJsb2NrICh3ZSBuZWVkIHRvIGRvIC0xIGFzIHdl CisJCSAqIGFscmVhZHkgaW5jcmVtZW50ZWQgdGhlIGluZGV4IHdoZW4gYWRkaW5nIHRoZSBu ZXcgYmxvY2sgdG8gdGhlCisJCSAqIHF1ZXVlKS4KKwkJICovCisJCWlkeCA9IFBSRUZFVENI X0JMT0NLX0lOREVYKHByZWZldGNoLT5ibG9ja0luZGV4IC0gaSAtIDEpOworCisJCS8qCisJ CSAqIEZvciBhIHNlcXVlbnRpYWwgcGF0dGVybiwgYmxvY2tzICJrIiBzdGVwIGFnbyBuZWVk cyB0byBoYXZlIGJsb2NrCisJCSAqIG51bWJlciBieSAiayIgc21hbGxlciBjb21wYXJlZCB0 byB0aGUgY3VycmVudCBibG9jay4KKwkJICovCisJCWlmIChwcmVmZXRjaC0+YmxvY2tJdGVt c1tpZHhdICE9IChibG9jayAtIGkpKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKworCXJldHVy biB0cnVlOworfQorCisvKgorICogaW5kZXhfcHJlZmV0Y2hfYWRkX2NhY2hlCisgKgkJQWRk IGEgYmxvY2sgdG8gdGhlIGNhY2hlLCBjaGVjayBpZiBpdCB3YXMgcmVjZW50bHkgcHJlZmV0 Y2hlZC4KKyAqCisgKiBXZSBkb24ndCB3YW50IHRvIHByZWZldGNoIGJsb2NrcyB0aGF0IHdl IGFscmVhZHkgcHJlZmV0Y2hlZCByZWNlbnRseS4gSXQncworICogY2hlYXAgYnV0IG5vdCBm cmVlLCBhbmQgdGhlIG92ZXJoZWFkIG1heSBoYXZlIG1lYXN1cmFibGUgaW1wYWN0LgorICoK KyAqIFRoaXMgY2hlY2sgbmVlZHMgdG8gYmUgdmVyeSBjaGVhcCwgZXZlbiB3aXRoIGZhaXJs eSBsYXJnZSBjYWNoZXMgKGh1bmRyZWRzCisgKiBvZiBlbnRyaWVzLCBzZWUgUFJFRkVUQ0hf Q0FDSEVfU0laRSkuCisgKgorICogQSBzaW1wbGUgcXVldWUgd291bGQgYWxsb3cgZXhwaXJp bmcgdGhlIHJlcXVlc3RzLCBidXQgY2hlY2tpbmcgaWYgaXQKKyAqIGNvbnRhaW5zIGEgcGFy dGljdWxhciBibG9jayBwcmVmZXRjaGVkIHdvdWxkIGJlIGV4cGVuc2l2ZSAobGluZWFyIHNl YXJjaCkuCisgKiBBbm90aGVyIG9wdGlvbiB3b3VsZCBiZSBhIHNpbXBsZSBoYXNoIHRhYmxl LCB3aGljaCBoYXMgZmFzdCBsb29rdXAgYnV0CisgKiBkb2VzIG5vdCBhbGxvdyBleHBpcmlu ZyBlbnRyaWVzIGNoZWFwbHkuCisgKgorICogVGhlIGNhY2hlIGRvZXMgbm90IG5lZWQgdG8g YmUgcGVyZmVjdCwgd2UgY2FuIGFjY2VwdCBmYWxzZQorICogcG9zaXRpdmVzL25lZ2F0aXZl cywgYXMgbG9uZyBhcyB0aGUgcmF0ZSBpcyByZWFzb25hYmx5IGxvdy4gV2UgYWxzbyBuZWVk CisgKiB0byBleHBpcmUgZW50cmllcywgc28gdGhhdCBvbmx5ICJyZWNlbnQiIHJlcXVlc3Rz IGFyZSByZW1lbWJlcmVkLgorICoKKyAqIFdlIHVzZSBhIGh5YnJpZCBjYWNoZSB0aGF0IGlz IG9yZ2FuaXplZCBhcyBtYW55IHNtYWxsIExSVSBjYWNoZXMuIEVhY2gKKyAqIGJsb2NrIGlz IG1hcHBlZCB0byBhIHBhcnRpY3VsYXIgTFJVIGJ5IGhhc2hpbmcgKHNvIGl0J3MgYSBiaXQg bGlrZSBhCisgKiBoYXNoIHRhYmxlKS4gVGhlIExSVSBjYWNoZXMgYXJlIHRpbnkgKGUuZy4g OCBlbnRyaWVzKSwgYW5kIHRoZSBleHBpcmF0aW9uCisgKiBoYXBwZW5zIGF0IHRoZSBsZXZl bCBvZiBhIHNpbmdsZSBMUlUgKGJ5IHRyYWNraW5nIG9ubHkgdGhlIDggbW9zdCByZWNlbnQg cmVxdWVzdHMpLgorICoKKyAqIFRoaXMgYWxsb3dzIHF1aWNrIHNlYXJjaGVzIGFuZCBleHBp cmF0aW9uLCBidXQgd2l0aCBmYWxzZSBuZWdhdGl2ZXMgKHdoZW4gYQorICogcGFydGljdWxh ciBMUlUgaGFzIHRvbyBtYW55IGNvbGxpc2lvbnMsIHdlIG1heSBldmljdCBlbnRyaWVzIHRo YXQgYXJlIG1vcmUKKyAqIHJlY2VudCB0aGFuIHNvbWUgb3RoZXIgTFJVKS4KKyAqCisgKiBG b3IgZXhhbXBsZSwgaW1hZ2luZSAxMjggTFJVIGNhY2hlcywgZWFjaCB3aXRoIDggZW50cmll cyAtIHRoYXQncyAxMDI0CisgKiBwcmVmZXRjaCByZXF1ZXN0IGluIHRvdGFsICh0aGVzZSBh cmUgdGhlIGRlZmF1bHQgcGFyYW1ldGVycy4pCisgKgorICogVGhlIHJlY2VuY3kgaXMgZGV0 ZXJtaW5lZCB1c2luZyBhIHByZWZldGNoIGNvdW50ZXIsIGluY3JlbWVudGVkIGV2ZXJ5Cisg KiB0aW1lIHdlIGVuZCB1cCBwcmVmZXRjaGluZyBhIGJsb2NrLiBUaGUgY291bnRlciBpcyB1 aW50NjQsIHNvIGl0IHNob3VsZAorICogbm90IHdyYXAgKDEyNSB6ZWJpYnl0ZXMsIHdvdWxk IHRha2UgfjQgbWlsbGlvbiB5ZWFycyBhdCAxR0IvcykuCisgKgorICogVG8gY2hlY2sgaWYg YSBibG9jayB3YXMgcHJlZmV0Y2hlZCByZWNlbnRseSwgd2UgY2FsY3VsYXRlIGhhc2goYmxv Y2spLAorICogYW5kIHRoZW4gbGluZWFybHkgc2VhcmNoIGlmIHRoZSB0aW55IExSVSBoYXMg ZW50cnkgZm9yIHRoZSBzYW1lIGJsb2NrCisgKiBhbmQgcmVxdWVzdCBsZXNzIHRoYW4gUFJF RkVUQ0hfQ0FDSEVfU0laRSBhZ28uCisgKgorICogQXQgdGhlIHNhbWUgdGltZSwgd2UgZWl0 aGVyIHVwZGF0ZSB0aGUgZW50cnkgKGZvciB0aGUgcXVlcmllZCBibG9jaykgaWYKKyAqIGZv dW5kLCBvciByZXBsYWNlIHRoZSBvbGRlc3QvZW1wdHkgZW50cnkuCisgKgorICogSWYgdGhl IGJsb2NrIHdhcyBub3QgcmVjZW50bHkgcHJlZmV0Y2hlZCAoaS5lLiB3ZSB3YW50IHRvIHBy ZWZldGNoIGl0KSwKKyAqIHdlIGluY3JlbWVudCB0aGUgY291bnRlci4KKyAqCisgKiBSZXR1 cm5zIHRydWUgaWYgdGhlIGJsb2NrIHdhcyByZWNlbnRseSBwcmVmZXRjaGVkIChhbmQgdGh1 cyB3ZSBkb24ndAorICogbmVlZCB0byBwcmVmZXRjaCBpdCBhZ2FpbiksIG9yIGZhbHNlIChz aG91bGQgZG8gYSBwcmVmZXRjaCkuCisgKgorICogWFhYIEl0J3MgYSBiaXQgY29uZnVzaW5n IHRoZXNlIHJldHVybiB2YWx1ZXMgYXJlIGludmVyc2UgY29tcGFyZWQgdG8KKyAqIHdoYXQg aW5kZXhfcHJlZmV0Y2hfaXNfc2VxdWVudGlhbCBkb2VzLgorICovCitzdGF0aWMgYm9vbAor aW5kZXhfcHJlZmV0Y2hfYWRkX2NhY2hlKEluZGV4UHJlZmV0Y2ggKnByZWZldGNoLCBCbG9j a051bWJlciBibG9jaykKK3sKKwlJbmRleFByZWZldGNoQ2FjaGVFbnRyeSAqZW50cnk7CisK KwkvKiBtYXAgdGhlIGJsb2NrIG51bWJlciB0aGUgdGhlIExSVSAqLworCWludAkJCWxydSA9 IGhhc2hfdWludDMyKGJsb2NrKSAlIFBSRUZFVENIX0xSVV9DT1VOVDsKKworCS8qIGFnZS9p bmRleCBvZiB0aGUgb2xkZXN0IGVudHJ5IGluIHRoZSBMUlUsIHRvIG1heWJlIHVzZSAqLwor CXVpbnQ2NAkJb2xkZXN0UmVxdWVzdCA9IFBHX1VJTlQ2NF9NQVg7CisJaW50CQkJb2xkZXN0 SW5kZXggPSAtMTsKKworCS8qCisJICogRmlyc3QgYWRkIHRoZSBibG9jayB0byB0aGUgKHRp bnkpIHRvcC1sZXZlbCBMUlUgY2FjaGUgYW5kIHNlZSBpZiBpdCdzCisJICogcGFydCBvZiBh IHNlcXVlbnRpYWwgcGF0dGVybi4gSW4gdGhpcyBjYXNlIHdlIGp1c3QgaWdub3JlIHRoZSBi bG9jayBhbmQKKwkgKiBkb24ndCBwcmVmZXRjaCBpdCAtIHdlIGV4cGVjdCByZWFkLWFoZWFk IHRvIGRvIGEgYmV0dGVyIGpvYi4KKwkgKgorCSAqIFhYWCBNYXliZSB3ZSBzaG91bGQgc3Rp bGwgYWRkIHRoZSBibG9jayB0byB0aGUgaHlicmlkIGNhY2hlLCBpbiBjYXNlIHdlCisJICog aGFwcGVuIHRvIGFjY2VzcyBpdCBsYXRlcj8gVGhhdCBtaWdodCBoZWxwIGlmIHdlIGZpcnN0 IHNjYW4gYSBsb3Qgb2YKKwkgKiB0aGUgdGFibGUgc2VxdWVudGlhbGx5LCBhbmQgdGhlbiBy YW5kb21seS4gTm90IHN1cmUgdGhhdCdzIHZlcnkgbGlrZWx5CisJICogd2l0aCBpbmRleCBh Y2Nlc3MsIHRob3VnaC4KKwkgKi8KKwlpZiAoaW5kZXhfcHJlZmV0Y2hfaXNfc2VxdWVudGlh bChwcmVmZXRjaCwgYmxvY2spKQorCXsKKwkJcHJlZmV0Y2gtPmNvdW50U2tpcFNlcXVlbnRp YWwrKzsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJLyoKKwkgKiBTZWUgaWYgd2UgcmVjZW50 bHkgcHJlZmV0Y2hlZCB0aGlzIGJsb2NrIC0gd2Ugc2ltcGx5IHNjYW4gdGhlIExSVQorCSAq IGxpbmVhcmx5LiBXaGlsZSBkb2luZyB0aGF0LCB3ZSBhbHNvIHRyYWNrIHRoZSBvbGRlc3Qg ZW50cnksIHNvIHRoYXQgd2UKKwkgKiBrbm93IHdoZXJlIHRvIHB1dCB0aGUgYmxvY2sgaWYg d2UgZG9uJ3QgZmluZCBhIG1hdGNoaW5nIGVudHJ5LgorCSAqLworCWZvciAoaW50IGkgPSAw OyBpIDwgUFJFRkVUQ0hfTFJVX1NJWkU7IGkrKykKKwl7CisJCWVudHJ5ID0gJnByZWZldGNo LT5wcmVmZXRjaENhY2hlW2xydSAqIFBSRUZFVENIX0xSVV9TSVpFICsgaV07CisKKwkJLyog SXMgdGhpcyB0aGUgb2xkZXN0IHByZWZldGNoIHJlcXVlc3QgaW4gdGhpcyBMUlU/ICovCisJ CWlmIChlbnRyeS0+cmVxdWVzdCA8IG9sZGVzdFJlcXVlc3QpCisJCXsKKwkJCW9sZGVzdFJl cXVlc3QgPSBlbnRyeS0+cmVxdWVzdDsKKwkJCW9sZGVzdEluZGV4ID0gaTsKKwkJfQorCisJ CS8qCisJCSAqIElmIHRoZSBlbnRyeSBpcyB1bnVzZWQgKGlkZW50aWZpZWQgYnkgcmVxdWVz dCBiZWluZyBzZXQgdG8gMCksCisJCSAqIHdlJ3JlIGRvbmUuIE5vdGljZSB0aGUgZmllbGQg aXMgdWludDY0LCBzbyBlbXB0eSBlbnRyeSBpcworCQkgKiBndWFyYW50ZWVkIHRvIGJlIHRo ZSBvbGRlc3Qgb25lLgorCQkgKi8KKwkJaWYgKGVudHJ5LT5yZXF1ZXN0ID09IDApCisJCQlj b250aW51ZTsKKworCQkvKiBJcyB0aGlzIGVudHJ5IGZvciB0aGUgc2FtZSBibG9jayBhcyB0 aGUgY3VycmVudCByZXF1ZXN0PyAqLworCQlpZiAoZW50cnktPmJsb2NrID09IGJsb2NrKQor CQl7CisJCQlib29sCQlwcmVmZXRjaGVkOworCisJCQkvKgorCQkJICogSXMgdGhlIG9sZCBy ZXF1ZXN0IHN1ZmZpY2llbnRseSByZWNlbnQ/IElmIHllcywgd2UgdHJlYXQgdGhlCisJCQkg KiBibG9jayBhcyBhbHJlYWR5IHByZWZldGNoZWQuCisJCQkgKgorCQkJICogWFhYIFdlIGRv IGFkZCB0aGUgY2FjaGUgc2l6ZSB0byB0aGUgcmVxdWVzdCBpbiBvcmRlciBub3QgdG8KKwkJ CSAqIGhhdmUgaXNzdWVzIHdpdGggdWludDY0IHVuZGVyZmxvd3MuCisJCQkgKi8KKwkJCXBy ZWZldGNoZWQgPSAoKGVudHJ5LT5yZXF1ZXN0ICsgUFJFRkVUQ0hfQ0FDSEVfU0laRSkgPj0g cHJlZmV0Y2gtPnByZWZldGNoUmVxTnVtYmVyKTsKKworCQkJLyogVXBkYXRlIHRoZSByZXF1 ZXN0IG51bWJlci4gKi8KKwkJCWVudHJ5LT5yZXF1ZXN0ID0gKytwcmVmZXRjaC0+cHJlZmV0 Y2hSZXFOdW1iZXI7CisKKwkJCXByZWZldGNoLT5jb3VudFNraXBDYWNoZWQgKz0gKHByZWZl dGNoZWQpID8gMSA6IDA7CisKKwkJCXJldHVybiBwcmVmZXRjaGVkOworCQl9CisJfQorCisJ LyoKKwkgKiBXZSBkaWRuJ3QgZmluZCB0aGUgYmxvY2sgaW4gdGhlIExSVSwgc28gc3RvcmUg aXQgZWl0aGVyIGluIGFuIGVtcHR5CisJICogZW50cnksIG9yIGluIHRoZSAib2xkZXN0IiBw cmVmZXRjaCByZXF1ZXN0IGluIHRoaXMgTFJVLgorCSAqLworCUFzc2VydCgob2xkZXN0SW5k ZXggPj0gMCkgJiYgKG9sZGVzdEluZGV4IDwgUFJFRkVUQ0hfTFJVX1NJWkUpKTsKKworCS8q IEZJWE1FIGRvIGEgbmljZSBtYWNybyAqLworCWVudHJ5ID0gJnByZWZldGNoLT5wcmVmZXRj aENhY2hlW2xydSAqIFBSRUZFVENIX0xSVV9TSVpFICsgb2xkZXN0SW5kZXhdOworCisJZW50 cnktPmJsb2NrID0gYmxvY2s7CisJZW50cnktPnJlcXVlc3QgPSArK3ByZWZldGNoLT5wcmVm ZXRjaFJlcU51bWJlcjsKKworCS8qIG5vdCBpbiB0aGUgcHJlZmV0Y2ggY2FjaGUgKi8KKwly ZXR1cm4gZmFsc2U7Cit9CisKKy8qCisgKiBpbmRleF9wcmVmZXRjaAorICoJCVByZWZldGNo IHRoZSBUSUQsIHVubGVzcyBpdCdzIHNlcXVlbnRpYWwgb3IgcmVjZW50bHkgcHJlZmV0Y2hl ZC4KKyAqCisgKiBYWFggU29tZSBpZGVhcyBob3cgdG8gYXV0by10dW5lIHRoZSBwcmVmZXRj aGluZywgc28gdGhhdCB1bm5lY2Vzc2FyeQorICogcHJlZmV0Y2hpbmcgZG9lcyBub3QgY2F1 c2Ugc2lnbmlmaWNhbnQgcmVncmVzc2lvbnMgKGUuZy4gZm9yIG5lc3Rsb29wCisgKiB3aXRo IGlubmVyIGluZGV4IHNjYW4pLiBXZSBjb3VsZCB0cmFjayBudW1iZXIgb2YgcmVzY2FucyBh bmQgbnVtYmVyIG9mCisgKiBpdGVtcyAoVElEcykgYWN0dWFsbHkgcmV0dXJuZWQgZnJvbSB0 aGUgc2Nhbi4gVGhlbiB3ZSBjb3VsZCBjYWxjdWxhdGUKKyAqIHJvd3MgLyByZXNjYW4gYW5k IHVzZSB0aGF0IHRvIGNsYW1wIHByZWZldGNoIHRhcmdldC4KKyAqCisgKiBUaGF0J2QgaGVs cCB3aXRoIGNhc2VzIHdoZW4gYSBzY2FuIG1hdGNoZXMgb25seSB2ZXJ5IGZldyByb3dzLCBm YXIgbGVzcworICogdGhhbiB0aGUgcHJlZmV0Y2hUYXJnZXQsIGJlY2F1c2UgdGhlIHVubmVj ZXNzYXJ5IHByZWZldGNoZXMgYXJlIHdhc3RlZAorICogSS9PLiBJbWFnaW5lIGEgTElNSVQg b24gdG9wIG9mIGluZGV4IHNjYW4sIG9yIHNvbWV0aGluZyBsaWtlIHRoYXQuCisgKgorICog QW5vdGhlciBvcHRpb24gaXMgdG8gdXNlIHRoZSBwbGFubmVyIGVzdGltYXRlcyAtIHdlIGtu b3cgaG93IG1hbnkgcm93cyB3ZSdyZQorICogZXhwZWN0aW5nIHRvIGZldGNoIChvbiBhdmVy YWdlLCBhc3N1bWluZyB0aGUgZXN0aW1hdGVzIGFyZSByZWFzb25hYmx5CisgKiBhY2N1cmF0 ZSksIHNvIHdoeSBub3QgdG8gdXNlIHRoYXQ/CisgKgorICogT2YgY291cnNlLCB3ZSBjb3Vs ZC9zaG91bGQgY29tYmluZSB0aGVzZSB0d28gYXBwcm9hY2hlcy4KKyAqCisgKiBYWFggVGhl IHByZWZldGNoaW5nIG1heSBpbnRlcmZlcmUgd2l0aCB0aGUgcGF0Y2ggYWxsb3dpbmcgdXMg dG8gZXZhbHVhdGUKKyAqIGNvbmRpdGlvbnMgb24gdGhlIGluZGV4IHR1cGxlLCBpbiB3aGlj aCBjYXNlIHdlIG1heSBub3QgbmVlZCB0aGUgaGVhcAorICogdHVwbGUuIE1heWJlIGlmIHRo ZXJlJ3Mgc3VjaCBmaWx0ZXIsIHdlIHNob3VsZCBwcmVmZXRjaCBvbmx5IHBhZ2VzIHRoYXQK KyAqIGFyZSBub3QgYWxsLXZpc2libGUgKGFuZCB0aGUgc2FtZSBpZGVhIHdvdWxkIGFsc28g d29yayBmb3IgSU9TKSwgYnV0CisgKiBpdCBhbHNvIG1ha2VzIHRoZSBpbmRleGluZyBhIGJp dCAiYXdhcmUiIG9mIHRoZSB2aXNpYmlsaXR5IHN0dWZmICh3aGljaAorICogc2VlbXMgYSBz b21ld2hhdCB3cm9uZykuIEFsc28sIG1heWJlIHdlIHNob3VsZCBjb25zaWRlciB0aGUgZmls dGVyIHNlbGVjdGl2aXR5CisgKiAoaWYgdGhlIGluZGV4LW9ubHkgZmlsdGVyIGlzIGV4cGVj dGVkIHRvIGVsaW1pbmF0ZSBvbmx5IGZldyByb3dzLCB0aGVuCisgKiB0aGUgdm0gY2hlY2sg aXMgcG9pbnRsZXNzKS4gTWF5YmUgdGhpcyBjb3VsZC9zaG91bGQgYmUgYXV0by10dW5pbmcg dG9vLAorICogaS5lLiB3ZSBjb3VsZCB0cmFjayBob3cgbWFueSBoZWFwIHR1cGxlcyB3ZXJl IG5lZWRlZCBhZnRlciBhbGwsIGFuZCB0aGVuCisgKiB3ZSB3b3VsZCBjb25zaWRlciB0aGlz IHdoZW4gZGVjaWRpbmcgd2hldGhlciB0byBwcmVmZXRjaCBhbGwtdmlzaWJsZQorICogcGFn ZXMgb3Igbm90IChtYXR0ZXJzIG9ubHkgZm9yIHJlZ3VsYXIgaW5kZXggc2NhbnMsIG5vdCBJ T1MpLgorICoKKyAqIFhYWCBNYXliZSB3ZSBjb3VsZC9zaG91bGQgYWxzbyBwcmVmZXRjaCB0 aGUgbmV4dCBpbmRleCBibG9jaywgZS5nLiBzdG9yZWQKKyAqIGluIEJUU2NhblBvc0RhdGEu bmV4dFBhZ2UuCisgKgorICogWFhYIENvdWxkIHdlIHR1bmUgdGhlIGNhY2hlIHNpemUgYmFz ZWQgb24gZXhlY3V0aW9uIHN0YXRpc3RpY3M/IFdlIGhhdmUKKyAqIGEgY2FjaGUgb2YgbGlt aXRlZCBzaXplIChQUkVGRVRDSF9DQUNIRV9TSVpFID0gMTAyNCBieSBkZWZhdWx0KSwgYnV0 CisgKiBob3cgZG8gd2Uga25vdyBpdCdzIHRoZSByaWdodCBzaXplPyBJZGVhbGx5LCB3ZSdk IGhhdmUgYSBjYWNoZSBsYXJnZQorICogZW5vdWdoIHRvIHRyYWNrIGFjdHVhbGx5IGNhY2hl ZCBibG9ja3MuIElmIHRoZSBPUyBjYWNoZXMgMTAyNDAgcGFnZXMsCisgKiB0aGVuIHdlIG1h eSBkbyA5MCUgb2YgcHJlZmV0Y2ggcmVxdWVzdHMgdW5uZWNlc3NhcmlseS4gT3IgbWF5YmUg dGhlcmUncworICogYSBsb3Qgb2YgY29udGVudGlvbiwgYmxvY2tzIGFyZSBldmljdGVkIHF1 aWNrbHksIGFuZCA5MCUgb2YgdGhlIGJsb2NrcworICogaW4gdGhlIGNhY2hlIGFyZSBub3Qg YWN0dWFsbHkgY2FjaGVkIGFueW1vcmU/IEJ1dCB3ZSBkbyBoYXZlIGEgY29uY2VwdAorICog b2Ygc2VxdWVudGlhbCByZXF1ZXN0IElEIChQcmVmZXRjaENhY2hlRW50cnktPnJlcXVlc3Qp LCB3aGljaCBnaXZlcyB1cworICogaW5mb3JtYXRpb24gYWJvdXQgImFnZSIgb2YgdGhlIGxh c3QgcHJlZmV0Y2guIE5vdyBpdCdzIHVzZWQgb25seSB3aGVuCisgKiBldmljdGluZyBlbnRy aWVzICh0byBrZWVwIHRoZSBtb3JlIHJlY2VudCBvbmUpLCBidXQgbWF5YmUgd2UgY291bGQg YWxzbworICogdXNlIGl0IHdoZW4gZGVjaWRpbmcgaWYgdGhlIHBhZ2UgaXMgY2FjaGVkLiBS aWdodCBub3cgYW55IGJsb2NrIHRoYXQncworICogaW4gdGhlIGNhY2hlIGlzIGNvbnNpZGVy ZWQgY2FjaGVkIGFuZCBub3QgcHJlZmV0Y2hlZCwgYnV0IG1heWJlIHdlIGNvdWxkCisgKiBo YXZlICJtYXggYWdlIiwgYW5kIHR1bmUgaXQgYmFzZWQgb24gZmVlZGJhY2sgZnJvbSByZWFk aW5nIHRoZSBibG9ja3MKKyAqIGxhdGVyLiBGb3IgZXhhbXBsZSwgaWYgd2UgZmluZCB0aGUg YmxvY2sgaW4gY2FjaGUgYW5kIGRlY2lkZSBub3QgdG8KKyAqIHByZWZldGNoIGl0LCBidXQg dGhlbiBsYXRlciBmaW5kIHdlIGhhdmUgdG8gZG8gSS9PLCBpdCBtZWFucyBvdXIgY2FjaGUK KyAqIGlzIHRvbyBsYXJnZS4gQW5kIHdlIGNvdWxkICJyZWR1Y2UiIHRoZSBtYXhpbXVtIGFn ZSAobWVhc3VyZWQgZnJvbSB0aGUKKyAqIGN1cnJlbnQgcHJlZmV0Y2hSZXFOdW1iZXIgdmFs dWUpLCBzbyB0aGF0IG9ubHkgbW9yZSByZWNlbnQgYmxvY2tzIHdvdWxkCisgKiBiZSBjb25z aWRlcmVkIGNhY2hlZC4gTm90IHN1cmUgYWJvdXQgdGhlIG9wcG9zaXRlIGRpcmVjdGlvbiwg d2hlcmUgd2UKKyAqIGRlY2lkZSB0byBwcmVmZXRjaCBhIGJsb2NrIC0gQUZBSUsgd2UgZG9u J3QgaGF2ZSBhIHdheSB0byBkZXRlcm1pbmUgaWYKKyAqIEkvTyB3YXMgbmVlZGVkIG9yIG5v dCBpbiB0aGlzIGNhc2UgKHNvIHdlIGNhbid0IGluY3JlYXNlIHRoZSBtYXggYWdlKS4KKyAq IEJ1dCBtYXliZSB3ZSBjb3VsZCBkaSB0aGF0IHNvbWVob3cgc3BlY3VsYXRpdmVseSwgaS5l LiBpbmNyZWFzZSB0aGUKKyAqIHZhbHVlIG9uY2UgaW4gYSB3aGlsZSwgYW5kIHNlZSB3aGF0 IGhhcHBlbnMuCisgKi8KK3N0YXRpYyB2b2lkCitpbmRleF9wcmVmZXRjaChJbmRleFNjYW5E ZXNjIHNjYW4sIEluZGV4UHJlZmV0Y2ggKnByZWZldGNoLAorCQkJICAgSXRlbVBvaW50ZXIg dGlkLCBib29sIHNraXBfYWxsX3Zpc2libGUsIGJvb2wgKmFsbF92aXNpYmxlKQoreworCUJs b2NrTnVtYmVyIGJsb2NrOworCisJLyogYnkgZGVmYXVsdCBub3QgYWxsIHZpc2libGUgKG9y IHdlIGRpZG4ndCBjaGVjaykgKi8KKwkqYWxsX3Zpc2libGUgPSBmYWxzZTsKKworCS8qCisJ ICogTm8gaGVhcCByZWxhdGlvbiBtZWFucyBiaXRtYXAgaW5kZXggc2Nhbiwgd2hpY2ggZG9l cyBwcmVmZXRjaGluZyBhdCB0aGUKKwkgKiBiaXRtYXAgaGVhcCBzY2FuLCBzbyBubyBwcmVm ZXRjaCBoZXJlICh3ZSBjYW4ndCBkbyBpdCBhbnl3YXksIHdpdGhvdXQKKwkgKiB0aGUgaGVh cCkKKwkgKgorCSAqIFhYWCBCdXQgaW4gdGhpcyBjYXNlIHdlIHNob3VsZCBoYXZlIHByZWZl dGNoTWF4VGFyZ2V0PTAsIGJlY2F1c2UgaW4KKwkgKiBpbmRleF9iZWJpbnNjYW5fYml0bWFw KCkgd2UgZGlzYWJsZSBwcmVmZXRjaGluZy4gU28gbWF5YmUgd2Ugc2hvdWxkCisJICoganVz dCBjaGVjayB0aGF0LgorCSAqLworCWlmICghcHJlZmV0Y2gpCisJCXJldHVybjsKKworCS8q CisJICogSWYgd2UgZ290IGhlcmUsIHByZWZldGNoaW5nIGlzIGVuYWJsZWQgYW5kIGl0J3Mg YSBub2RlIHRoYXQgc3VwcG9ydHMKKwkgKiBwcmVmZXRjaGluZyAoaS5lLiBpdCBjYW4ndCBi ZSBhIGJpdG1hcCBpbmRleCBzY2FuKS4KKwkgKi8KKwlBc3NlcnQoc2Nhbi0+aGVhcFJlbGF0 aW9uKTsKKworCWJsb2NrID0gSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpOworCisJ LyoKKwkgKiBXaGVuIHByZWZldGNoaW5nIGZvciBJT1MsIHdlIHdhbnQgdG8gb25seSBwcmVm ZXRjaCBwYWdlcyB0aGF0IGFyZSBub3QKKwkgKiBtYXJrZWQgYXMgYWxsLXZpc2libGUgKGJl Y2F1c2Ugbm90IGZldGNoaW5nIGFsbC12aXNpYmxlIHBhZ2VzIGlzIHRoZQorCSAqIHBvaW50 IG9mIElPUykuCisJICoKKwkgKiBYWFggVGhpcyBpcyBub3QgZ3JlYXQsIGJlY2F1c2UgaXQg cmVsZWFzZXMgdGhlIFZNIGJ1ZmZlciBmb3IgZWFjaCBUSUQKKwkgKiB3ZSBjb25zaWRlciB0 byBwcmVmZXRjaC4gV2Ugc2hvdWxkIHJldXNlIHRoYXQgc29tZWhvdywgc2ltaWxhciB0byB0 aGUKKwkgKiBhY3R1YWwgSU9TIGNvZGUuIElkZWFsbHksIHdlIHNob3VsZCB1c2UgdGhlIHNh bWUgaW9zc19WTUJ1ZmZlciAoaWYKKwkgKiB3ZSBjYW4gcHJvcGFnYXRlIGl0IGhlcmUpLiBP ciBhdCBsZWFzdCBkbyBpdCBmb3IgYSBidWxrIG9mIHByZWZldGNoZXMsCisJICogYWx0aG91 Z2ggdGhhdCdzIG5vdCB2ZXJ5IHVzZWZ1bCAtIGFmdGVyIHRoZSByYW1wLXVwIHdlIHdpbGwg cHJlZmV0Y2gKKwkgKiB0aGUgcGFnZXMgb25lIGJ5IG9uZSBhbnl3YXkuCisJICoKKwkgKiBY WFggSWRlYWxseSB3ZSdkIGFsc28gcHJvcGFnYXRlIHRoaXMgdG8gdGhlIGV4ZWN1dG9yLCBz byB0aGF0IHRoZQorCSAqIG5vZGVJbmRleG9ubHlzY2FuLmMgZG9lc24ndCBuZWVkIHRvIHJl cGVhdCB0aGUgc2FtZSBWTSBjaGVjayAod2hpY2gKKwkgKiBpcyBtZWFzdXJhYmxlKS4gQnV0 IHRoZSBpbmRleF9nZXRuZXh0X3RpZCgpIGlzIG5vdCByZWFsbHkgd2VsbAorCSAqIHN1aXRl ZCBmb3IgdGhhdCwgc28gdGhlIEFQSSBuZWVkcyBhIGNoYW5nZS5zCisJICovCisJaWYgKHNr aXBfYWxsX3Zpc2libGUpCisJeworCQkqYWxsX3Zpc2libGUgPSBWTV9BTExfVklTSUJMRShz Y2FuLT5oZWFwUmVsYXRpb24sCisJCQkJCQkJCQkgIGJsb2NrLAorCQkJCQkJCQkJICAmcHJl ZmV0Y2gtPnZtQnVmZmVyKTsKKworCQlpZiAoKmFsbF92aXNpYmxlKQorCQkJcmV0dXJuOwor CX0KKworCS8qCisJICogRG8gbm90IHByZWZldGNoIHRoZSBzYW1lIGJsb2NrIG92ZXIgYW5k IG92ZXIgYWdhaW4sCisJICoKKwkgKiBUaGlzIGhhcHBlbnMgZS5nLiBmb3IgY2x1c3RlcmVk IG9yIG5hdHVyYWxseSBjb3JyZWxhdGVkIGluZGV4ZXMgKGZrZXkKKwkgKiB0byBhIHNlcXVl bmNlIElEKS4gSXQncyBub3QgZXhwZW5zaXZlICh0aGUgYmxvY2sgaXMgaW4gcGFnZSBjYWNo ZQorCSAqIGFscmVhZHksIHNvIG5vIEkvTyksIGJ1dCBpdCdzIG5vdCBmcmVlIGVpdGhlci4K KwkgKi8KKwlpZiAoIWluZGV4X3ByZWZldGNoX2FkZF9jYWNoZShwcmVmZXRjaCwgYmxvY2sp KQorCXsKKwkJcHJlZmV0Y2gtPmNvdW50UHJlZmV0Y2grKzsKKworCQlQcmVmZXRjaEJ1ZmZl cihzY2FuLT5oZWFwUmVsYXRpb24sIE1BSU5fRk9SS05VTSwgYmxvY2spOworCQlwZ0J1ZmZl clVzYWdlLmJsa3NfcHJlZmV0Y2hlcysrOworCX0KKworCXByZWZldGNoLT5jb3VudEFsbCsr OworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKiBpbmRleF9nZXRuZXh0X3RpZCAtIGdl dCB0aGUgbmV4dCBUSUQgZnJvbSBhIHNjYW4KKyAqCisgKiBUaGUgcmVzdWx0IGlzIHRoZSBu ZXh0IFRJRCBzYXRpc2Z5aW5nIHRoZSBzY2FuIGtleXMsCisgKiBvciBOVUxMIGlmIG5vIG1v cmUgbWF0Y2hpbmcgdHVwbGVzIGV4aXN0LgorICoKKyAqIEZJWE1FIG5vdCBzdXJlIHRoaXMg aGFuZGxlcyB4c19oZWFwZmV0Y2ggY29ycmVjdGx5LgorICogLS0tLS0tLS0tLS0tLS0tLQor ICovCitJdGVtUG9pbnRlcgoraW5kZXhfZ2V0bmV4dF90aWQoSW5kZXhTY2FuRGVzYyBzY2Fu LCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkgIEluZGV4UHJlZmV0Y2ggKnByZWZl dGNoKQoreworCWJvb2wJCWFsbF92aXNpYmxlOwkvKiBpZ25vcmVkICovCisKKwkvKiBEbyBw cmVmZXRjaGluZyAoaWYgcmVxdWVzdGVkL2VuYWJsZWQpLiAqLworCWluZGV4X3ByZWZldGNo X3RpZHMoc2NhbiwgZGlyZWN0aW9uLCBwcmVmZXRjaCk7CisKKwkvKiBSZWFkIHRoZSBUSUQg ZnJvbSB0aGUgcXVldWUgKG9yIGRpcmVjdGx5IGZyb20gdGhlIGluZGV4KS4gKi8KKwlyZXR1 cm4gaW5kZXhfcHJlZmV0Y2hfZ2V0X3RpZChzY2FuLCBkaXJlY3Rpb24sIHByZWZldGNoLCAm YWxsX3Zpc2libGUpOworfQorCitJdGVtUG9pbnRlcgoraW5kZXhfZ2V0bmV4dF90aWRfdm0o SW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJIElu ZGV4UHJlZmV0Y2ggKnByZWZldGNoLCBib29sICphbGxfdmlzaWJsZSkKK3sKKwkvKiBEbyBw cmVmZXRjaGluZyAoaWYgcmVxdWVzdGVkL2VuYWJsZWQpLiAqLworCWluZGV4X3ByZWZldGNo X3RpZHMoc2NhbiwgZGlyZWN0aW9uLCBwcmVmZXRjaCk7CisKKwkvKiBSZWFkIHRoZSBUSUQg ZnJvbSB0aGUgcXVldWUgKG9yIGRpcmVjdGx5IGZyb20gdGhlIGluZGV4KS4gKi8KKwlyZXR1 cm4gaW5kZXhfcHJlZmV0Y2hfZ2V0X3RpZChzY2FuLCBkaXJlY3Rpb24sIHByZWZldGNoLCBh bGxfdmlzaWJsZSk7Cit9CisKK3N0YXRpYyB2b2lkCitpbmRleF9wcmVmZXRjaF90aWRzKElu ZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCUluZGV4 UHJlZmV0Y2ggKnByZWZldGNoKQoreworCS8qCisJICogSWYgdGhlIHByZWZldGNoaW5nIGlz IHN0aWxsIGFjdGl2ZSAoaS5lLiBlbmFibGVkIGFuZCB3ZSBzdGlsbAorCSAqIGhhdmVuJ3Qg ZmluaXNoZWQgcmVhZGluZyBUSURzIGZyb20gdGhlIHNjYW4pLCByZWFkIGVub3VnaCBUSURz IGludG8KKwkgKiB0aGUgcXVldWUgdW50aWwgd2UgaGl0IHRoZSBjdXJyZW50IHRhcmdldC4K KwkgKi8KKwlpZiAoUFJFRkVUQ0hfQUNUSVZFKHByZWZldGNoKSkKKwl7CisJCS8qCisJCSAq IFJhbXAgdXAgdGhlIHByZWZldGNoIGRpc3RhbmNlIGluY3JlbWVudGFsbHkuCisJCSAqCisJ CSAqIEludGVudGlvbmFsbHkgZG9uZSBhcyBmaXJzdCwgYmVmb3JlIHJlYWRpbmcgdGhlIFRJ RHMgaW50byB0aGUKKwkJICogcXVldWUsIHNvIHRoYXQgdGhlcmUncyBhbHdheXMgYXQgbGVh c3Qgb25lIGl0ZW0uIE90aGVyd2lzZSB3ZQorCQkgKiBtaWdodCBnZXQgaW50byBhIHNpdHVh dGlvbiB3aGVyZSB3ZSBzdGFydCB3aXRoIHRhcmdldD0wIGFuZCBubworCQkgKiBUSURzIGxv YWRlZC4KKwkJICovCisJCXByZWZldGNoLT5wcmVmZXRjaFRhcmdldCA9IE1pbihwcmVmZXRj aC0+cHJlZmV0Y2hUYXJnZXQgKyAxLAorCQkJCQkJCQkJICAgcHJlZmV0Y2gtPnByZWZldGNo TWF4VGFyZ2V0KTsKKworCQkvKgorCQkgKiBOb3cgcmVhZCBUSURzIGZyb20gdGhlIGluZGV4 IHVudGlsIHRoZSBxdWV1ZSBpcyBmdWxsICh3aXRoCisJCSAqIHJlc3BlY3QgdG8gdGhlIGN1 cnJlbnQgcHJlZmV0Y2ggdGFyZ2V0KS4KKwkJICovCisJCXdoaWxlICghUFJFRkVUQ0hfRlVM TChwcmVmZXRjaCkpCisJCXsKKwkJCUl0ZW1Qb2ludGVyIHRpZDsKKwkJCWJvb2wJCWFsbF92 aXNpYmxlOworCisJCQkvKiBUaW1lIHRvIGZldGNoIHRoZSBuZXh0IFRJRCBmcm9tIHRoZSBp bmRleCAqLworCQkJdGlkID0gaW5kZXhfZ2V0bmV4dF90aWRfaW50ZXJuYWwoc2NhbiwgZGly ZWN0aW9uKTsKKworCQkJLyoKKwkJCSAqIElmIHdlJ3JlIG91dCBvZiBpbmRleCBlbnRyaWVz LCB3ZSdyZSBkb25lIChhbmQgd2UgbWFyayB0aGUKKwkJCSAqIHRoZSBwcmVmZXRjaGVyIGFz IGluYWN0aXZlKS4KKwkJCSAqLworCQkJaWYgKHRpZCA9PSBOVUxMKQorCQkJeworCQkJCXBy ZWZldGNoLT5wcmVmZXRjaERvbmUgPSB0cnVlOworCQkJCWJyZWFrOworCQkJfQorCisJCQlB c3NlcnQoSXRlbVBvaW50ZXJFcXVhbHModGlkLCAmc2Nhbi0+eHNfaGVhcHRpZCkpOworCisJ CQkvKgorCQkJICogSXNzdWUgdGhlIGFjdHVhbGwgcHJlZmV0Y2ggcmVxdWVzdHMgZm9yIHRo ZSBuZXcgVElELgorCQkJICoKKwkJCSAqIFhYWCBpbmRleF9nZXRuZXh0X3RpZF9wcmVmZXRj aCBpcyBvbmx5IGNhbGxlZCBmb3IgSU9TIChmb3Igbm93KSwKKwkJCSAqIHNvIHNraXAgcHJl ZmV0Y2hpbmcgb2YgYWxsLXZpc2libGUgcGFnZXMuCisJCQkgKi8KKwkJCWluZGV4X3ByZWZl dGNoKHNjYW4sIHByZWZldGNoLCB0aWQsIHByZWZldGNoLT5pbmRleG9ubHksICZhbGxfdmlz aWJsZSk7CisKKwkJCXByZWZldGNoLT5xdWV1ZUl0ZW1zW1BSRUZFVENIX1FVRVVFX0lOREVY KHByZWZldGNoLT5xdWV1ZUVuZCldLnRpZCA9ICp0aWQ7CisJCQlwcmVmZXRjaC0+cXVldWVJ dGVtc1tQUkVGRVRDSF9RVUVVRV9JTkRFWChwcmVmZXRjaC0+cXVldWVFbmQpXS5hbGxfdmlz aWJsZSA9IGFsbF92aXNpYmxlOworCQkJcHJlZmV0Y2gtPnF1ZXVlRW5kKys7CisJCX0KKwl9 Cit9CisKK3N0YXRpYyBJdGVtUG9pbnRlcgoraW5kZXhfcHJlZmV0Y2hfZ2V0X3RpZChJbmRl eFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkgICBJbmRl eFByZWZldGNoICpwcmVmZXRjaCwgYm9vbCAqYWxsX3Zpc2libGUpCit7CisJLyoKKwkgKiBX aXRoIHByZWZldGNoaW5nIGVuYWJsZWQgKGV2ZW4gaWYgd2UgYWxyZWFkeSBmaW5pc2hlZCBy ZWFkaW5nCisJICogYWxsIFRJRHMgZnJvbSB0aGUgaW5kZXggc2NhbiksIHdlIG5lZWQgdG8g cmV0dXJuIGEgVElEIGZyb20gdGhlCisJICogcXVldWUuIE90aGVyd2lzZSwgd2UganVzdCBn ZXQgdGhlIG5leHQgVElEIGZyb20gdGhlIHNjYW4KKwkgKiBkaXJlY3RseS4KKwkgKi8KKwlp ZiAoUFJFRkVUQ0hfRU5BQkxFRChwcmVmZXRjaCkpCisJeworCQkvKiBEaWQgd2UgcmVhY2gg dGhlIGVuZCBvZiB0aGUgc2NhbiBhbmQgdGhlIHF1ZXVlIGlzIGVtcHR5PyAqLworCQlpZiAo UFJFRkVUQ0hfRE9ORShwcmVmZXRjaCkpCisJCQlyZXR1cm4gTlVMTDsKKworCQlzY2FuLT54 c19oZWFwdGlkID0gcHJlZmV0Y2gtPnF1ZXVlSXRlbXNbUFJFRkVUQ0hfUVVFVUVfSU5ERVgo cHJlZmV0Y2gtPnF1ZXVlSW5kZXgpXS50aWQ7CisJCSphbGxfdmlzaWJsZSA9IHByZWZldGNo LT5xdWV1ZUl0ZW1zW1BSRUZFVENIX1FVRVVFX0lOREVYKHByZWZldGNoLT5xdWV1ZUluZGV4 KV0uYWxsX3Zpc2libGU7CisJCXByZWZldGNoLT5xdWV1ZUluZGV4Kys7CisJfQorCWVsc2UJ CQkJLyogbm90IHByZWZldGNoaW5nLCBqdXN0IGRvIHRoZSByZWd1bGFyIHdvcmsgICovCisJ eworCQlJdGVtUG9pbnRlciB0aWQ7CisKKwkJLyogVGltZSB0byBmZXRjaCB0aGUgbmV4dCBU SUQgZnJvbSB0aGUgaW5kZXggKi8KKwkJdGlkID0gaW5kZXhfZ2V0bmV4dF90aWRfaW50ZXJu YWwoc2NhbiwgZGlyZWN0aW9uKTsKKwkJKmFsbF92aXNpYmxlID0gZmFsc2U7CisKKwkJLyog SWYgd2UncmUgb3V0IG9mIGluZGV4IGVudHJpZXMsIHdlJ3JlIGRvbmUgKi8KKwkJaWYgKHRp ZCA9PSBOVUxMKQorCQkJcmV0dXJuIE5VTEw7CisKKwkJQXNzZXJ0KEl0ZW1Qb2ludGVyRXF1 YWxzKHRpZCwgJnNjYW4tPnhzX2hlYXB0aWQpKTsKKwl9CisKKwkvKiBSZXR1cm4gdGhlIFRJ RCBvZiB0aGUgdHVwbGUgd2UgZm91bmQuICovCisJcmV0dXJuICZzY2FuLT54c19oZWFwdGlk OworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jIGIvc3Jj L2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCmluZGV4IGYxZDcxYmM1NGU4Li42ODEwOTk2 ZWRmZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCisrKyBi L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYwpAQCAtMzU2OCw2ICszNTY4LDcgQEAg c2hvd19idWZmZXJfdXNhZ2UoRXhwbGFpblN0YXRlICplcywgY29uc3QgQnVmZmVyVXNhZ2Ug KnVzYWdlLCBib29sIHBsYW5uaW5nKQogCQkJCQkJCQkJCSFJTlNUUl9USU1FX0lTX1pFUk8o dXNhZ2UtPmxvY2FsX2Jsa193cml0ZV90aW1lKSk7CiAJCWJvb2wJCWhhc190ZW1wX3RpbWlu ZyA9ICghSU5TVFJfVElNRV9JU19aRVJPKHVzYWdlLT50ZW1wX2Jsa19yZWFkX3RpbWUpIHx8 CiAJCQkJCQkJCQkgICAhSU5TVFJfVElNRV9JU19aRVJPKHVzYWdlLT50ZW1wX2Jsa193cml0 ZV90aW1lKSk7CisJCWJvb2wJCWhhc19wcmVmZXRjaGVzID0gKHVzYWdlLT5ibGtzX3ByZWZl dGNoZXMgPiAwKTsKIAkJYm9vbAkJc2hvd19wbGFubmluZyA9IChwbGFubmluZyAmJiAoaGFz X3NoYXJlZCB8fAogCQkJCQkJCQkJCQkJICBoYXNfbG9jYWwgfHwgaGFzX3RlbXAgfHwKIAkJ CQkJCQkJCQkJCSAgaGFzX3NoYXJlZF90aW1pbmcgfHwKQEAgLTM2NzksNiArMzY4MCwyMyBA QCBzaG93X2J1ZmZlcl91c2FnZShFeHBsYWluU3RhdGUgKmVzLCBjb25zdCBCdWZmZXJVc2Fn ZSAqdXNhZ2UsIGJvb2wgcGxhbm5pbmcpCiAJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihlcy0+ c3RyLCAnXG4nKTsKIAkJfQogCisJCS8qIEFzIGFib3ZlLCBzaG93IG9ubHkgcG9zaXRpdmUg Y291bnRlciB2YWx1ZXMuICovCisJCWlmIChoYXNfcHJlZmV0Y2hlcykKKwkJeworCQkJRXhw bGFpbkluZGVudFRleHQoZXMpOworCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhlcy0+c3Ry LCAiUHJlZmV0Y2hlczoiKTsKKworCQkJaWYgKHVzYWdlLT5ibGtzX3ByZWZldGNoZXMgPiAw KQorCQkJCWFwcGVuZFN0cmluZ0luZm8oZXMtPnN0ciwgIiBibG9ja3M9JWxsZCIsCisJCQkJ CQkJCSAobG9uZyBsb25nKSB1c2FnZS0+Ymxrc19wcmVmZXRjaGVzKTsKKworCQkJaWYgKHVz YWdlLT5ibGtzX3ByZWZldGNoX3JvdW5kcyA+IDApCisJCQkJYXBwZW5kU3RyaW5nSW5mbyhl cy0+c3RyLCAiIHJvdW5kcz0lbGxkIiwKKwkJCQkJCQkJIChsb25nIGxvbmcpIHVzYWdlLT5i bGtzX3ByZWZldGNoX3JvdW5kcyk7CisKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGVzLT5z dHIsICdcbicpOworCQl9CisKIAkJaWYgKHNob3dfcGxhbm5pbmcpCiAJCQllcy0+aW5kZW50 LS07CiAJfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5n LmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcuYwppbmRleCAyZmEyMTE4 ZjNjMi4uMGExMzZkYjY3MTIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNJbmRleGluZy5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5j CkBAIC03NzcsNyArNzc3LDExIEBAIHJldHJ5OgogCWluZGV4X3NjYW4gPSBpbmRleF9iZWdp bnNjYW4oaGVhcCwgaW5kZXgsICZEaXJ0eVNuYXBzaG90LCBpbmRua2V5YXR0cywgMCk7CiAJ aW5kZXhfcmVzY2FuKGluZGV4X3NjYW4sIHNjYW5rZXlzLCBpbmRua2V5YXR0cywgTlVMTCwg MCk7CiAKLQl3aGlsZSAoaW5kZXhfZ2V0bmV4dF9zbG90KGluZGV4X3NjYW4sIEZvcndhcmRT Y2FuRGlyZWN0aW9uLCBleGlzdGluZ19zbG90KSkKKwkvKgorCSAqIFhYWCBXb3VsZCBiZSBu aWNlIHRvIGFsc28gYmVuZWZpdCBmcm9tIHByZWZldGNoaW5nIGhlcmUuIEFsbCB3ZSBuZWVk IHRvCisJICogZG8gaXMgaW5zdGFudGlhdGUgdGhlIHByZWZldGNoZXIsIEkgZ3Vlc3MuCisJ ICovCisJd2hpbGUgKGluZGV4X2dldG5leHRfc2xvdChpbmRleF9zY2FuLCBGb3J3YXJkU2Nh bkRpcmVjdGlvbiwgZXhpc3Rpbmdfc2xvdCwgTlVMTCkpCiAJewogCQlUcmFuc2FjdGlvbklk IHh3YWl0OwogCQlYTFRXX09wZXIJcmVhc29uX3dhaXQ7CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9leGVjdXRvci9leGVjUmVwbGljYXRpb24uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L2V4ZWNSZXBsaWNhdGlvbi5jCmluZGV4IDgxZjI3MDQyYmM0Li45NDk4YjAwZmE2NCAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMKKysrIGIv c3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMKQEAgLTIxMiw4ICsyMTIs MTMgQEAgcmV0cnk6CiAKIAlpbmRleF9yZXNjYW4oc2Nhbiwgc2tleSwgc2tleV9hdHRvZmYs IE5VTEwsIDApOwogCi0JLyogVHJ5IHRvIGZpbmQgdGhlIHR1cGxlICovCi0Jd2hpbGUgKGlu ZGV4X2dldG5leHRfc2xvdChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgb3V0c2xvdCkp CisJLyoKKwkgKiBUcnkgdG8gZmluZCB0aGUgdHVwbGUKKwkgKgorCSAqIFhYWCBXb3VsZCBi ZSBuaWNlIHRvIGFsc28gYmVuZWZpdCBmcm9tIHByZWZldGNoaW5nIGhlcmUuIEFsbCB3ZSBu ZWVkIHRvCisJICogZG8gaXMgaW5zdGFudGlhdGUgdGhlIHByZWZldGNoZXIsIEkgZ3Vlc3Mu CisJICovCisJd2hpbGUgKGluZGV4X2dldG5leHRfc2xvdChzY2FuLCBGb3J3YXJkU2NhbkRp cmVjdGlvbiwgb3V0c2xvdCwgTlVMTCkpCiAJewogCQkvKgogCQkgKiBBdm9pZCBleHBlbnNp dmUgZXF1YWxpdHkgY2hlY2sgaWYgdGhlIGluZGV4IGlzIHByaW1hcnkga2V5IG9yCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9pbnN0cnVtZW50LmMgYi9zcmMvYmFja2Vu ZC9leGVjdXRvci9pbnN0cnVtZW50LmMKaW5kZXggYzM4M2YzNGMwNjYuLjAwMTFkOWY2Nzlj IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9pbnN0cnVtZW50LmMKKysrIGIv c3JjL2JhY2tlbmQvZXhlY3V0b3IvaW5zdHJ1bWVudC5jCkBAIC0yMzUsNiArMjM1LDggQEAg QnVmZmVyVXNhZ2VBZGQoQnVmZmVyVXNhZ2UgKmRzdCwgY29uc3QgQnVmZmVyVXNhZ2UgKmFk ZCkKIAlkc3QtPmxvY2FsX2Jsa3Nfd3JpdHRlbiArPSBhZGQtPmxvY2FsX2Jsa3Nfd3JpdHRl bjsKIAlkc3QtPnRlbXBfYmxrc19yZWFkICs9IGFkZC0+dGVtcF9ibGtzX3JlYWQ7CiAJZHN0 LT50ZW1wX2Jsa3Nfd3JpdHRlbiArPSBhZGQtPnRlbXBfYmxrc193cml0dGVuOworCWRzdC0+ Ymxrc19wcmVmZXRjaF9yb3VuZHMgKz0gYWRkLT5ibGtzX3ByZWZldGNoX3JvdW5kczsKKwlk c3QtPmJsa3NfcHJlZmV0Y2hlcyArPSBhZGQtPmJsa3NfcHJlZmV0Y2hlczsKIAlJTlNUUl9U SU1FX0FERChkc3QtPnNoYXJlZF9ibGtfcmVhZF90aW1lLCBhZGQtPnNoYXJlZF9ibGtfcmVh ZF90aW1lKTsKIAlJTlNUUl9USU1FX0FERChkc3QtPnNoYXJlZF9ibGtfd3JpdGVfdGltZSwg YWRkLT5zaGFyZWRfYmxrX3dyaXRlX3RpbWUpOwogCUlOU1RSX1RJTUVfQUREKGRzdC0+bG9j YWxfYmxrX3JlYWRfdGltZSwgYWRkLT5sb2NhbF9ibGtfcmVhZF90aW1lKTsKQEAgLTI1OSw2 ICsyNjEsOCBAQCBCdWZmZXJVc2FnZUFjY3VtRGlmZihCdWZmZXJVc2FnZSAqZHN0LAogCWRz dC0+bG9jYWxfYmxrc193cml0dGVuICs9IGFkZC0+bG9jYWxfYmxrc193cml0dGVuIC0gc3Vi LT5sb2NhbF9ibGtzX3dyaXR0ZW47CiAJZHN0LT50ZW1wX2Jsa3NfcmVhZCArPSBhZGQtPnRl bXBfYmxrc19yZWFkIC0gc3ViLT50ZW1wX2Jsa3NfcmVhZDsKIAlkc3QtPnRlbXBfYmxrc193 cml0dGVuICs9IGFkZC0+dGVtcF9ibGtzX3dyaXR0ZW4gLSBzdWItPnRlbXBfYmxrc193cml0 dGVuOworCWRzdC0+Ymxrc19wcmVmZXRjaGVzICs9IGFkZC0+Ymxrc19wcmVmZXRjaGVzIC0g c3ViLT5ibGtzX3ByZWZldGNoZXM7CisJZHN0LT5ibGtzX3ByZWZldGNoX3JvdW5kcyArPSBh ZGQtPmJsa3NfcHJlZmV0Y2hfcm91bmRzIC0gc3ViLT5ibGtzX3ByZWZldGNoX3JvdW5kczsK IAlJTlNUUl9USU1FX0FDQ1VNX0RJRkYoZHN0LT5zaGFyZWRfYmxrX3JlYWRfdGltZSwKIAkJ CQkJCSAgYWRkLT5zaGFyZWRfYmxrX3JlYWRfdGltZSwgc3ViLT5zaGFyZWRfYmxrX3JlYWRf dGltZSk7CiAJSU5TVFJfVElNRV9BQ0NVTV9ESUZGKGRzdC0+c2hhcmVkX2Jsa193cml0ZV90 aW1lLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNj YW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMKaW5kZXgg ZjFkYjM1NjY1YzguLmE3ZWFkYWYzZGIyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVj dXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25v ZGVJbmRleG9ubHlzY2FuLmMKQEAgLTQzLDcgKzQzLDcgQEAKICNpbmNsdWRlICJzdG9yYWdl L3ByZWRpY2F0ZS5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAjaW5jbHVkZSAi dXRpbHMvcmVsLmgiCi0KKyNpbmNsdWRlICJ1dGlscy9zcGNjYWNoZS5oIgogCiBzdGF0aWMg VHVwbGVUYWJsZVNsb3QgKkluZGV4T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRlICpub2Rl KTsKIHN0YXRpYyB2b2lkIFN0b3JlSW5kZXhUdXBsZShUdXBsZVRhYmxlU2xvdCAqc2xvdCwg SW5kZXhUdXBsZSBpdHVwLApAQCAtNjUsNiArNjUsOCBAQCBJbmRleE9ubHlOZXh0KEluZGV4 T25seVNjYW5TdGF0ZSAqbm9kZSkKIAlJbmRleFNjYW5EZXNjIHNjYW5kZXNjOwogCVR1cGxl VGFibGVTbG90ICpzbG90OwogCUl0ZW1Qb2ludGVyIHRpZDsKKwlJbmRleFByZWZldGNoICAq cHJlZmV0Y2g7CisJYm9vbAkJCWFsbF92aXNpYmxlOwogCiAJLyoKIAkgKiBleHRyYWN0IG5l Y2Vzc2FyeSBpbmZvcm1hdGlvbiBmcm9tIGluZGV4IHNjYW4gbm9kZQpAQCAtNzgsNiArODAs NyBAQCBJbmRleE9ubHlOZXh0KEluZGV4T25seVNjYW5TdGF0ZSAqbm9kZSkKIAlkaXJlY3Rp b24gPSBTY2FuRGlyZWN0aW9uQ29tYmluZShlc3RhdGUtPmVzX2RpcmVjdGlvbiwKIAkJCQkJ CQkJCSAoKEluZGV4T25seVNjYW4gKikgbm9kZS0+c3MucHMucGxhbiktPmluZGV4b3JkZXJk aXIpOwogCXNjYW5kZXNjID0gbm9kZS0+aW9zc19TY2FuRGVzYzsKKwlwcmVmZXRjaCA9IG5v ZGUtPmlvc3NfcHJlZmV0Y2g7CiAJZWNvbnRleHQgPSBub2RlLT5zcy5wcy5wc19FeHByQ29u dGV4dDsKIAlzbG90ID0gbm9kZS0+c3Muc3NfU2NhblR1cGxlU2xvdDsKIApAQCAtMTE2LDcg KzExOSw3IEBAIEluZGV4T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCS8q CiAJICogT0ssIG5vdyB0aGF0IHdlIGhhdmUgd2hhdCB3ZSBuZWVkLCBmZXRjaCB0aGUgbmV4 dCB0dXBsZS4KIAkgKi8KLQl3aGlsZSAoKHRpZCA9IGluZGV4X2dldG5leHRfdGlkKHNjYW5k ZXNjLCBkaXJlY3Rpb24pKSAhPSBOVUxMKQorCXdoaWxlICgodGlkID0gaW5kZXhfZ2V0bmV4 dF90aWRfdm0oc2NhbmRlc2MsIGRpcmVjdGlvbiwgcHJlZmV0Y2gsICZhbGxfdmlzaWJsZSkp ICE9IE5VTEwpCiAJewogCQlib29sCQl0dXBsZV9mcm9tX2hlYXAgPSBmYWxzZTsKIApAQCAt MTU1LDggKzE1OCwxMSBAQCBJbmRleE9ubHlOZXh0KEluZGV4T25seVNjYW5TdGF0ZSAqbm9k ZSkKIAkJICoKIAkJICogSXQncyB3b3J0aCBnb2luZyB0aHJvdWdoIHRoaXMgY29tcGxleGl0 eSB0byBhdm9pZCBuZWVkaW5nIHRvIGxvY2sKIAkJICogdGhlIFZNIGJ1ZmZlciwgd2hpY2gg Y291bGQgY2F1c2Ugc2lnbmlmaWNhbnQgY29udGVudGlvbi4KKwkJICoKKwkJICogWFhYIFNr aXAgaWYgd2UgYWxyZWFkeSBrbm93IHRoZSBwYWdlIGlzIGFsbCB2aXNpYmxlIGZyb20gcHJl ZmV0Y2hlci4KIAkJICovCi0JCWlmICghVk1fQUxMX1ZJU0lCTEUoc2NhbmRlc2MtPmhlYXBS ZWxhdGlvbiwKKwkJaWYgKCFhbGxfdmlzaWJsZSAmJgorCQkJIVZNX0FMTF9WSVNJQkxFKHNj YW5kZXNjLT5oZWFwUmVsYXRpb24sCiAJCQkJCQkJSXRlbVBvaW50ZXJHZXRCbG9ja051bWJl cih0aWQpLAogCQkJCQkJCSZub2RlLT5pb3NzX1ZNQnVmZmVyKSkKIAkJewpAQCAtMzUzLDYg KzM1OSwxNiBAQCBFeGVjUmVTY2FuSW5kZXhPbmx5U2NhbihJbmRleE9ubHlTY2FuU3RhdGUg Km5vZGUpCiAJCQkJCSBub2RlLT5pb3NzX1NjYW5LZXlzLCBub2RlLT5pb3NzX051bVNjYW5L ZXlzLAogCQkJCQkgbm9kZS0+aW9zc19PcmRlckJ5S2V5cywgbm9kZS0+aW9zc19OdW1PcmRl ckJ5S2V5cyk7CiAKKwkvKiBhbHNvIHJlc2V0IHRoZSBwcmVmZXRjaGVyLCBzbyB0aGF0IHdl IHN0YXJ0IGZyb20gc2NyYXRjaCAqLworCWlmIChub2RlLT5pb3NzX3ByZWZldGNoKQorCXsK KwkJSW5kZXhQcmVmZXRjaCAqcHJlZmV0Y2ggPSBub2RlLT5pb3NzX3ByZWZldGNoOworCisJ CXByZWZldGNoLT5xdWV1ZUluZGV4ID0gMDsKKwkJcHJlZmV0Y2gtPnF1ZXVlU3RhcnQgPSAw OworCQlwcmVmZXRjaC0+cXVldWVFbmQgPSAwOworCX0KKwogCUV4ZWNTY2FuUmVTY2FuKCZu b2RlLT5zcyk7CiB9CiAKQEAgLTM4MCw2ICszOTYsMjYgQEAgRXhlY0VuZEluZGV4T25seVNj YW4oSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCQlub2RlLT5pb3NzX1ZNQnVmZmVyID0g SW52YWxpZEJ1ZmZlcjsKIAl9CiAKKwkvKiBSZWxlYXNlIFZNIGJ1ZmZlciBwaW4gZnJvbSBw cmVmZXRjaGVyLCBpZiBhbnkuICovCisJaWYgKG5vZGUtPmlvc3NfcHJlZmV0Y2gpCisJewor CQlJbmRleFByZWZldGNoICpwcmVmZXRjaCA9IG5vZGUtPmlvc3NfcHJlZmV0Y2g7CisKKwkJ LyogWFhYIHNvbWUgZGVidWcgaW5mbyAqLworCQllbG9nKExPRywgImluZGV4IHByZWZldGNo IHN0YXRzOiByZXF1ZXN0cyAiIFVJTlQ2NF9GT1JNQVQgIiBwcmVmZXRjaGVzICIgVUlOVDY0 X0ZPUk1BVCAiICglZikgc2tpcCBjYWNoZWQgIiBVSU5UNjRfRk9STUFUICIgc2VxdWVudGlh bCAiIFVJTlQ2NF9GT1JNQVQsCisJCQkgcHJlZmV0Y2gtPmNvdW50QWxsLAorCQkJIHByZWZl dGNoLT5jb3VudFByZWZldGNoLAorCQkJIHByZWZldGNoLT5jb3VudFByZWZldGNoICogMTAw LjAgLyBwcmVmZXRjaC0+Y291bnRBbGwsCisJCQkgcHJlZmV0Y2gtPmNvdW50U2tpcENhY2hl ZCwKKwkJCSBwcmVmZXRjaC0+Y291bnRTa2lwU2VxdWVudGlhbCk7CisKKwkJaWYgKHByZWZl dGNoLT52bUJ1ZmZlciAhPSBJbnZhbGlkQnVmZmVyKQorCQl7CisJCQlSZWxlYXNlQnVmZmVy KHByZWZldGNoLT52bUJ1ZmZlcik7CisJCQlwcmVmZXRjaC0+dm1CdWZmZXIgPSBJbnZhbGlk QnVmZmVyOworCQl9CisJfQorCiAJLyoKIAkgKiBjbG9zZSB0aGUgaW5kZXggcmVsYXRpb24g KG5vLW9wIGlmIHdlIGRpZG4ndCBvcGVuIGl0KQogCSAqLwpAQCAtNjA0LDYgKzY0MCw2MyBA QCBFeGVjSW5pdEluZGV4T25seVNjYW4oSW5kZXhPbmx5U2NhbiAqbm9kZSwgRVN0YXRlICpl c3RhdGUsIGludCBlZmxhZ3MpCiAJCWluZGV4c3RhdGUtPmlvc3NfUnVudGltZUNvbnRleHQg PSBOVUxMOwogCX0KIAorCS8qCisJICogQWxzbyBpbml0aWFsaXplIGluZGV4IHByZWZldGNo ZXIuCisJICoKKwkgKiBYWFggTm8gcHJlZmV0Y2hpbmcgZm9yIGRpcmVjdCBJL08uCisJICov CisJaWYgKChpb19kaXJlY3RfZmxhZ3MgJiBJT19ESVJFQ1RfREFUQSkgPT0gMCkKKwl7CisJ CWludAkJCXByZWZldGNoX21heDsKKwkJUmVsYXRpb24gICAgaGVhcFJlbCA9IGluZGV4c3Rh dGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbjsKKworCQkvKgorCQkgKiBEZXRlcm1pbmUgbnVt YmVyIG9mIGhlYXAgcGFnZXMgdG8gcHJlZmV0Y2ggZm9yIHRoaXMgaW5kZXguIFRoaXMgaXMK KwkJICogZXNzZW50aWFsbHkganVzdCBlZmZlY3RpdmVfaW9fY29uY3VycmVuY3kgZm9yIHRo ZSB0YWJsZSAob3IgdGhlCisJCSAqIHRhYmxlc3BhY2UgaXQncyBpbikuCisJCSAqCisJCSAq IFhYWCBTaG91bGQgdGhpcyBhbHNvIGxvb2sgYXQgcGxhbi5wbGFuX3Jvd3MgYW5kIG1heWJl IGNhcCB0aGUgdGFyZ2V0CisJCSAqIHRvIHRoYXQ/IFBvaW50bGVzcyB0byBwcmVmZXRjaCBt b3JlIHRoYW4gd2UgZXhwZWN0IHRvIHVzZS4gT3IgbWF5YmUKKwkJICoganVzdCByZXNldCB0 byB0aGF0IHZhbHVlIGR1cmluZyBwcmVmZXRjaGluZywgYWZ0ZXIgcmVhZGluZyB0aGUgbmV4 dAorCQkgKiBpbmRleCBwYWdlIChvciByYXRoZXIgYWZ0ZXIgcmVzY2FuKT8KKwkJICoKKwkJ ICogWFhYIE1heWJlIHJlZHVjZSB0aGUgdmFsdWUgd2l0aCBwYXJhbGxlbCB3b3JrZXJzPwor CQkgKi8KKwkJcHJlZmV0Y2hfbWF4ID0gTWluKGdldF90YWJsZXNwYWNlX2lvX2NvbmN1cnJl bmN5KGhlYXBSZWwtPnJkX3JlbC0+cmVsdGFibGVzcGFjZSksCisJCQkJCQkgICBpbmRleHN0 YXRlLT5zcy5wcy5wbGFuLT5wbGFuX3Jvd3MpOworCisJCS8qCisJCSAqIFdlIHJlYWNoIGhl cmUgaWYgdGhlIGluZGV4IG9ubHkgc2NhbiBpcyBub3QgcGFyYWxsZWwsIG9yIGlmIHdlJ3Jl CisJCSAqIHNlcmlhbGx5IGV4ZWN1dGluZyBhbiBpbmRleCBvbmx5IHNjYW4gdGhhdCB3YXMg cGxhbm5lZCB0byBiZQorCQkgKiBwYXJhbGxlbC4KKwkJICoKKwkJICogWFhYIE1heWJlIHdl IHNob3VsZCBlbmFibGUgcHJlZmV0Y2hpbmcsIGJ1dCBwcmVmZXRjaCBvbmx5IHBhZ2VzIHRo YXQKKwkJICogYXJlIG5vdCBhbGwtdmlzaWJsZSAoYnV0IGNoZWNraW5nIHRoYXQgZnJvbSB0 aGUgaW5kZXggY29kZSBzZWVtcyBsaWtlCisJCSAqIGEgdmlvbGF0aW9uIG9mIGxheWVyaW5n IGV0YykuCisJCSAqCisJCSAqIFhYWCBUaGlzIG1pZ2h0IGxlYWQgdG8gSU9TIGJlaW5nIHNs b3dlciB0aGFuIHBsYWluIGluZGV4IHNjYW4sIGlmIHRoZQorCQkgKiB0YWJsZSBoYXMgYSBs b3Qgb2YgcGFnZXMgdGhhdCBuZWVkIHJlY2hlY2suCisJCSAqCisJCSAqIFJlbWVtYmVyIHRo aXMgaXMgaW5kZXgtb25seSBzY2FuLCBiZWNhdXNlIG9mIHByZWZldGNoaW5nLiBOb3QgdGhl IG1vc3QKKwkJICogZWxlZ2FudCB3YXkgdG8gcGFzcyB0aGlzIGluZm8uCisJCSAqLworCQlp ZiAocHJlZmV0Y2hfbWF4ID4gMCkKKwkJeworCQkJSW5kZXhQcmVmZXRjaCAqcHJlZmV0Y2gg PSBwYWxsb2MwKHNpemVvZihJbmRleFByZWZldGNoKSk7CisKKwkJCXByZWZldGNoLT5xdWV1 ZUluZGV4ID0gMDsKKwkJCXByZWZldGNoLT5xdWV1ZVN0YXJ0ID0gMDsKKwkJCXByZWZldGNo LT5xdWV1ZUVuZCA9IDA7CisKKwkJCXByZWZldGNoLT5wcmVmZXRjaFRhcmdldCA9IDA7CisJ CQlwcmVmZXRjaC0+cHJlZmV0Y2hNYXhUYXJnZXQgPSBwcmVmZXRjaF9tYXg7CisJCQlwcmVm ZXRjaC0+dm1CdWZmZXIgPSBJbnZhbGlkQnVmZmVyOworCQkJcHJlZmV0Y2gtPmluZGV4b25s eSA9IHRydWU7CisKKwkJCWluZGV4c3RhdGUtPmlvc3NfcHJlZmV0Y2ggPSBwcmVmZXRjaDsK KwkJfQorCX0KKwogCS8qCiAJICogYWxsIGRvbmUuCiAJICovCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhzY2FuLmMgYi9zcmMvYmFja2VuZC9leGVjdXRv ci9ub2RlSW5kZXhzY2FuLmMKaW5kZXggMTRiOWMwMDIxN2EuLmIzMjgyZWM1YTc1IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhzY2FuLmMKKysrIGIvc3Jj L2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jCkBAIC00Myw2ICs0Myw3IEBACiAj aW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMu aCIKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKKyNpbmNsdWRlICJ1dGlscy9zcGNjYWNoZS5o IgogCiAvKgogICogV2hlbiBhbiBvcmRlcmluZyBvcGVyYXRvciBpcyB1c2VkLCB0dXBsZXMg ZmV0Y2hlZCBmcm9tIHRoZSBpbmRleCB0aGF0CkBAIC04NSw2ICs4Niw3IEBAIEluZGV4TmV4 dChJbmRleFNjYW5TdGF0ZSAqbm9kZSkKIAlTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbjsKIAlJ bmRleFNjYW5EZXNjIHNjYW5kZXNjOwogCVR1cGxlVGFibGVTbG90ICpzbG90OworCUluZGV4 UHJlZmV0Y2ggICpwcmVmZXRjaDsKIAogCS8qCiAJICogZXh0cmFjdCBuZWNlc3NhcnkgaW5m b3JtYXRpb24gZnJvbSBpbmRleCBzY2FuIG5vZGUKQEAgLTk4LDYgKzEwMCw3IEBAIEluZGV4 TmV4dChJbmRleFNjYW5TdGF0ZSAqbm9kZSkKIAlkaXJlY3Rpb24gPSBTY2FuRGlyZWN0aW9u Q29tYmluZShlc3RhdGUtPmVzX2RpcmVjdGlvbiwKIAkJCQkJCQkJCSAoKEluZGV4U2NhbiAq KSBub2RlLT5zcy5wcy5wbGFuKS0+aW5kZXhvcmRlcmRpcik7CiAJc2NhbmRlc2MgPSBub2Rl LT5pc3NfU2NhbkRlc2M7CisJcHJlZmV0Y2ggPSBub2RlLT5pc3NfcHJlZmV0Y2g7CiAJZWNv bnRleHQgPSBub2RlLT5zcy5wcy5wc19FeHByQ29udGV4dDsKIAlzbG90ID0gbm9kZS0+c3Mu c3NfU2NhblR1cGxlU2xvdDsKIApAQCAtMTI4LDcgKzEzMSw3IEBAIEluZGV4TmV4dChJbmRl eFNjYW5TdGF0ZSAqbm9kZSkKIAkvKgogCSAqIG9rLCBub3cgdGhhdCB3ZSBoYXZlIHdoYXQg d2UgbmVlZCwgZmV0Y2ggdGhlIG5leHQgdHVwbGUuCiAJICovCi0Jd2hpbGUgKGluZGV4X2dl dG5leHRfc2xvdChzY2FuZGVzYywgZGlyZWN0aW9uLCBzbG90KSkKKwl3aGlsZSAoaW5kZXhf Z2V0bmV4dF9zbG90KHNjYW5kZXNjLCBkaXJlY3Rpb24sIHNsb3QsIHByZWZldGNoKSkKIAl7 CiAJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CiAKQEAgLTE3Nyw2ICsxODAsNyBAQCBJbmRl eE5leHRXaXRoUmVvcmRlcihJbmRleFNjYW5TdGF0ZSAqbm9kZSkKIAlEYXR1bQkgICAqbGFz dGZldGNoZWRfdmFsczsKIAlib29sCSAgICpsYXN0ZmV0Y2hlZF9udWxsczsKIAlpbnQJCQlj bXA7CisJSW5kZXhQcmVmZXRjaCAqcHJlZmV0Y2g7CiAKIAllc3RhdGUgPSBub2RlLT5zcy5w cy5zdGF0ZTsKIApAQCAtMTkzLDYgKzE5Nyw3IEBAIEluZGV4TmV4dFdpdGhSZW9yZGVyKElu ZGV4U2NhblN0YXRlICpub2RlKQogCUFzc2VydChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGVz dGF0ZS0+ZXNfZGlyZWN0aW9uKSk7CiAKIAlzY2FuZGVzYyA9IG5vZGUtPmlzc19TY2FuRGVz YzsKKwlwcmVmZXRjaCA9IG5vZGUtPmlzc19wcmVmZXRjaDsKIAllY29udGV4dCA9IG5vZGUt PnNzLnBzLnBzX0V4cHJDb250ZXh0OwogCXNsb3QgPSBub2RlLT5zcy5zc19TY2FuVHVwbGVT bG90OwogCkBAIC0yNTksNyArMjY0LDcgQEAgSW5kZXhOZXh0V2l0aFJlb3JkZXIoSW5kZXhT Y2FuU3RhdGUgKm5vZGUpCiAJCSAqIEZldGNoIG5leHQgdHVwbGUgZnJvbSB0aGUgaW5kZXgu CiAJCSAqLwogbmV4dF9pbmRleHR1cGxlOgotCQlpZiAoIWluZGV4X2dldG5leHRfc2xvdChz Y2FuZGVzYywgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIHNsb3QpKQorCQlpZiAoIWluZGV4X2dl dG5leHRfc2xvdChzY2FuZGVzYywgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIHNsb3QsIHByZWZl dGNoKSkKIAkJewogCQkJLyoKIAkJCSAqIE5vIG1vcmUgdHVwbGVzIGZyb20gdGhlIGluZGV4 LiAgQnV0IHdlIHN0aWxsIG5lZWQgdG8gZHJhaW4gYW55CkBAIC01ODgsNiArNTkzLDE2IEBA IEV4ZWNSZVNjYW5JbmRleFNjYW4oSW5kZXhTY2FuU3RhdGUgKm5vZGUpCiAJCQkJCSBub2Rl LT5pc3NfT3JkZXJCeUtleXMsIG5vZGUtPmlzc19OdW1PcmRlckJ5S2V5cyk7CiAJbm9kZS0+ aXNzX1JlYWNoZWRFbmQgPSBmYWxzZTsKIAorCS8qIGFsc28gcmVzZXQgdGhlIHByZWZldGNo ZXIsIHNvIHRoYXQgd2Ugc3RhcnQgZnJvbSBzY3JhdGNoICovCisJaWYgKG5vZGUtPmlzc19w cmVmZXRjaCkKKwl7CisJCUluZGV4UHJlZmV0Y2ggKnByZWZldGNoID0gbm9kZS0+aXNzX3By ZWZldGNoOworCisJCXByZWZldGNoLT5xdWV1ZUluZGV4ID0gMDsKKwkJcHJlZmV0Y2gtPnF1 ZXVlU3RhcnQgPSAwOworCQlwcmVmZXRjaC0+cXVldWVFbmQgPSAwOworCX0KKwogCUV4ZWNT Y2FuUmVTY2FuKCZub2RlLT5zcyk7CiB9CiAKQEAgLTc5NCw2ICs4MDksMTkgQEAgRXhlY0Vu ZEluZGV4U2NhbihJbmRleFNjYW5TdGF0ZSAqbm9kZSkKIAlpbmRleFJlbGF0aW9uRGVzYyA9 IG5vZGUtPmlzc19SZWxhdGlvbkRlc2M7CiAJaW5kZXhTY2FuRGVzYyA9IG5vZGUtPmlzc19T Y2FuRGVzYzsKIAorCS8qIFhYWCBub3RoaW5nIHRvIGZyZWUsIGJ1dCBwcmludCBzb21lIGRl YnVnIGluZm8gKi8KKwlpZiAobm9kZS0+aXNzX3ByZWZldGNoKQorCXsKKwkJSW5kZXhQcmVm ZXRjaCAqcHJlZmV0Y2ggPSBub2RlLT5pc3NfcHJlZmV0Y2g7CisKKwkJZWxvZyhMT0csICJp bmRleCBwcmVmZXRjaCBzdGF0czogcmVxdWVzdHMgIiBVSU5UNjRfRk9STUFUICIgcHJlZmV0 Y2hlcyAiIFVJTlQ2NF9GT1JNQVQgIiAoJWYpIHNraXAgY2FjaGVkICIgVUlOVDY0X0ZPUk1B VCAiIHNlcXVlbnRpYWwgIiBVSU5UNjRfRk9STUFULAorCQkJIHByZWZldGNoLT5jb3VudEFs bCwKKwkJCSBwcmVmZXRjaC0+Y291bnRQcmVmZXRjaCwKKwkJCSBwcmVmZXRjaC0+Y291bnRQ cmVmZXRjaCAqIDEwMC4wIC8gcHJlZmV0Y2gtPmNvdW50QWxsLAorCQkJIHByZWZldGNoLT5j b3VudFNraXBDYWNoZWQsCisJCQkgcHJlZmV0Y2gtPmNvdW50U2tpcFNlcXVlbnRpYWwpOwor CX0KKwogCS8qCiAJICogY2xvc2UgdGhlIGluZGV4IHJlbGF0aW9uIChuby1vcCBpZiB3ZSBk aWRuJ3Qgb3BlbiBpdCkKIAkgKi8KQEAgLTEwNjYsNiArMTA5NCw0NSBAQCBFeGVjSW5pdElu ZGV4U2NhbihJbmRleFNjYW4gKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQog CQlpbmRleHN0YXRlLT5pc3NfUnVudGltZUNvbnRleHQgPSBOVUxMOwogCX0KIAorCS8qCisJ ICogQWxzbyBpbml0aWFsaXplIGluZGV4IHByZWZldGNoZXIuCisJICoKKwkgKiBYWFggTm8g cHJlZmV0Y2hpbmcgZm9yIGRpcmVjdCBJL08uCisJICovCisJaWYgKChpb19kaXJlY3RfZmxh Z3MgJiBJT19ESVJFQ1RfREFUQSkgPT0gMCkKKwl7CisJCWludAlwcmVmZXRjaF9tYXg7CisJ CVJlbGF0aW9uICAgIGhlYXBSZWwgPSBpbmRleHN0YXRlLT5zcy5zc19jdXJyZW50UmVsYXRp b247CisKKwkJLyoKKwkJICogRGV0ZXJtaW5lIG51bWJlciBvZiBoZWFwIHBhZ2VzIHRvIHBy ZWZldGNoIGZvciB0aGlzIGluZGV4IHNjYW4uIFRoaXMKKwkJICogaXMgZXNzZW50aWFsbHkg anVzdCBlZmZlY3RpdmVfaW9fY29uY3VycmVuY3kgZm9yIHRoZSB0YWJsZSAob3IgdGhlCisJ CSAqIHRhYmxlc3BhY2UgaXQncyBpbikuCisJCSAqCisJCSAqIFhYWCBTaG91bGQgdGhpcyBh bHNvIGxvb2sgYXQgcGxhbi5wbGFuX3Jvd3MgYW5kIG1heWJlIGNhcCB0aGUgdGFyZ2V0CisJ CSAqIHRvIHRoYXQ/IFBvaW50bGVzcyB0byBwcmVmZXRjaCBtb3JlIHRoYW4gd2UgZXhwZWN0 IHRvIHVzZS4gT3IgbWF5YmUKKwkJICoganVzdCByZXNldCB0byB0aGF0IHZhbHVlIGR1cmlu ZyBwcmVmZXRjaGluZywgYWZ0ZXIgcmVhZGluZyB0aGUgbmV4dAorCQkgKiBpbmRleCBwYWdl IChvciByYXRoZXIgYWZ0ZXIgcmVzY2FuKT8KKwkJICovCisJCXByZWZldGNoX21heCA9IE1p bihnZXRfdGFibGVzcGFjZV9pb19jb25jdXJyZW5jeShoZWFwUmVsLT5yZF9yZWwtPnJlbHRh Ymxlc3BhY2UpLAorCQkJCQkJICAgaW5kZXhzdGF0ZS0+c3MucHMucGxhbi0+cGxhbl9yb3dz KTsKKworCQlpZiAocHJlZmV0Y2hfbWF4ID4gMCkKKwkJeworCQkJSW5kZXhQcmVmZXRjaCAq cHJlZmV0Y2ggPSBwYWxsb2MwKHNpemVvZihJbmRleFByZWZldGNoKSk7CisKKwkJCXByZWZl dGNoLT5xdWV1ZUluZGV4ID0gMDsKKwkJCXByZWZldGNoLT5xdWV1ZVN0YXJ0ID0gMDsKKwkJ CXByZWZldGNoLT5xdWV1ZUVuZCA9IDA7CisKKwkJCXByZWZldGNoLT5wcmVmZXRjaFRhcmdl dCA9IDA7CisJCQlwcmVmZXRjaC0+cHJlZmV0Y2hNYXhUYXJnZXQgPSBwcmVmZXRjaF9tYXg7 CisJCQlwcmVmZXRjaC0+dm1CdWZmZXIgPSBJbnZhbGlkQnVmZmVyOworCisJCQlpbmRleHN0 YXRlLT5pc3NfcHJlZmV0Y2ggPSBwcmVmZXRjaDsKKwkJfQorCX0KKwogCS8qCiAJICogYWxs IGRvbmUuCiAJICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvc2VsZnVu Y3MuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jCmluZGV4IGUxMWQwMjI4 MjdhLi5iNWM3OTM1OTQyNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Nl bGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMKQEAgLTYy OTcsNyArNjI5Nyw3IEBAIGdldF9hY3R1YWxfdmFyaWFibGVfZW5kcG9pbnQoUmVsYXRpb24g aGVhcFJlbCwKIAlpbmRleF9yZXNjYW4oaW5kZXhfc2Nhbiwgc2NhbmtleXMsIDEsIE5VTEws IDApOwogCiAJLyogRmV0Y2ggZmlyc3QvbmV4dCB0dXBsZSBpbiBzcGVjaWZpZWQgZGlyZWN0 aW9uICovCi0Jd2hpbGUgKCh0aWQgPSBpbmRleF9nZXRuZXh0X3RpZChpbmRleF9zY2FuLCBp bmRleHNjYW5kaXIpKSAhPSBOVUxMKQorCXdoaWxlICgodGlkID0gaW5kZXhfZ2V0bmV4dF90 aWQoaW5kZXhfc2NhbiwgaW5kZXhzY2FuZGlyLCBOVUxMKSkgIT0gTlVMTCkKIAl7CiAJCUJs b2NrTnVtYmVyIGJsb2NrID0gSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpOwogCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2VuYW0uaCBiL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9nZW5hbS5oCmluZGV4IDgwZGM4ZDU0MDY2Li5jMGM0NmQ3YTA1ZiAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNz L2dlbmFtLmgKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlICJhY2Nlc3Mvc2Rpci5oIgog I2luY2x1ZGUgImFjY2Vzcy9za2V5LmgiCiAjaW5jbHVkZSAibm9kZXMvdGlkYml0bWFwLmgi CisjaW5jbHVkZSAic3RvcmFnZS9idWZtZ3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL2xvY2tk ZWZzLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsY2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy9z bmFwc2hvdC5oIgpAQCAtMTI4LDYgKzEyOSwxMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhP cmRlckJ5RGlzdGFuY2UKIAlib29sCQlpc251bGw7CiB9IEluZGV4T3JkZXJCeURpc3RhbmNl OwogCisKKworLyoKKyAqIENhY2hlIG9mIHJlY2VudGx5IHByZWZldGNoZWQgYmxvY2tzLCBv cmdhbml6ZWQgYXMgYSBoYXNoIHRhYmxlIG9mCisgKiBzbWFsbCBMUlUgY2FjaGVzLiBEb2Vz bid0IG5lZWQgdG8gYmUgcGVyZmVjdGx5IGFjY3VyYXRlLCBidXQgd2UKKyAqIGFpbSB0byBt YWtlIGZhbHNlIHBvc2l0aXZlcy9uZWdhdGl2ZXMgcmVhc29uYWJseSBsb3cuCisgKi8KK3R5 cGVkZWYgc3RydWN0IEluZGV4UHJlZmV0Y2hDYWNoZUVudHJ5IHsKKwlCbG9ja051bWJlcgkJ YmxvY2s7CisJdWludDY0CQkJcmVxdWVzdDsKK30gSW5kZXhQcmVmZXRjaENhY2hlRW50cnk7 CisKKy8qCisgKiBTaXplIG9mIHRoZSBjYWNoZSBvZiByZWNlbnRseSBwcmVmZXRjaGVkIGJs b2NrcyAtIHNob3VsZG4ndCBiZSB0b28KKyAqIHNtYWxsIG9yIHRvbyBsYXJnZS4gMTAyNCBz ZWVtcyBhYm91dCByaWdodCwgaXQgY292ZXJzIH44TUIgb2YgZGF0YS4KKyAqIEl0J3Mgc29t ZXdoYXQgYXJiaXRyYXJ5LCB0aGVyZSdzIG5vIHBhcnRpY3VsYXIgZm9ybXVsYSBzYXlpbmcg aXQKKyAqIHNob3VsZCBub3QgYmUgaGlnaGVyL2xvd2VyLgorICoKKyAqIFRoZSBjYWNoZSBp cyBzdHJ1Y3R1cmVkIGFzIGFuIGFycmF5IG9mIHNtYWxsIExSVSBjYWNoZXMsIHNvIHRoZSB0 b3RhbAorICogc2l6ZSBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIExSVSBzaXplLiBUaGUg TFJVIHNob3VsZCBiZSB0aW55IHRvCisgKiBrZWVwIGxpbmVhciBzZWFyY2ggY2hlYXAgZW5v dWdoLgorICoKKyAqIFhYWCBNYXliZSB3ZSBjb3VsZCBjb25zaWRlciBlZmZlY3RpdmVfY2Fj aGVfc2l6ZSBvciBzb21ldGhpbmc/CisgKi8KKyNkZWZpbmUJCVBSRUZFVENIX0xSVV9TSVpF CQk4CisjZGVmaW5lCQlQUkVGRVRDSF9MUlVfQ09VTlQJCTEyOAorI2RlZmluZQkJUFJFRkVU Q0hfQ0FDSEVfU0laRQkJKFBSRUZFVENIX0xSVV9TSVpFICogUFJFRkVUQ0hfTFJVX0NPVU5U KQorCisvKgorICogVXNlZCB0byBkZXRlY3Qgc2VxdWVudGlhbCBwYXR0ZXJucyAoYW5kIGRp c2FibGUgcHJlZmV0Y2hpbmcpLgorICovCisjZGVmaW5lCQlQUkVGRVRDSF9RVUVVRV9ISVNU T1JZCQkJOAorI2RlZmluZQkJUFJFRkVUQ0hfU0VRX1BBVFRFUk5fQkxPQ0tTCQk0CisKK3R5 cGVkZWYgc3RydWN0IEluZGV4UHJlZmV0Y2hFbnRyeQoreworCUl0ZW1Qb2ludGVyRGF0YQkJ dGlkOworCWJvb2wJCQkJYWxsX3Zpc2libGU7Cit9IEluZGV4UHJlZmV0Y2hFbnRyeTsKKwor dHlwZWRlZiBzdHJ1Y3QgSW5kZXhQcmVmZXRjaAoreworCS8qCisJICogWFhYIFdlIG5lZWQg dG8gZGlzYWJsZSB0aGlzIGluIHNvbWUgY2FzZXMgKGUuZy4gd2hlbiB1c2luZyBpbmRleC1v bmx5CisJICogc2NhbnMsIHdlIGRvbid0IHdhbnQgdG8gcHJlZmV0Y2ggcGFnZXMpLiBPciBt YXliZSB3ZSBzaG91bGQgcHJlZmV0Y2gKKwkgKiBvbmx5IHBhZ2VzIHRoYXQgYXJlIG5vdCBh bGwtdmlzaWJsZSwgdGhhdCdkIGJlIGV2ZW4gYmV0dGVyLgorCSAqLworCWludAkJCXByZWZl dGNoVGFyZ2V0OwkvKiBob3cgZmFyIHdlIHNob3VsZCBiZSBwcmVmZXRjaGluZyAqLworCWlu dAkJCXByZWZldGNoTWF4VGFyZ2V0OwkvKiBtYXhpbXVtIHByZWZldGNoaW5nIGRpc3RhbmNl ICovCisJaW50CQkJcHJlZmV0Y2hSZXNldDsJLyogcmVzZXQgdG8gdGhpcyBkaXN0YW5jZSBv biByZXNjYW4gKi8KKwlib29sCQlwcmVmZXRjaERvbmU7CS8qIGRpZCB3ZSBnZXQgYWxsIFRJ RHMgZnJvbSB0aGUgaW5kZXg/ICovCisKKwkvKiBydW50aW1lIHN0YXRpc3RpY3MgKi8KKwl1 aW50NjQJCWNvdW50QWxsOwkJLyogYWxsIHByZWZldGNoIHJlcXVlc3RzICovCisJdWludDY0 CQljb3VudFByZWZldGNoOwkvKiBhY3R1YWwgcHJlZmV0Y2hlcyAqLworCXVpbnQ2NAkJY291 bnRTa2lwU2VxdWVudGlhbDsKKwl1aW50NjQJCWNvdW50U2tpcENhY2hlZDsKKworCS8qIHVz ZWQgd2hlbiBwcmVmZXRjaGluZyBpbmRleC1vbmx5IHNjYW5zICovCisJYm9vbAkJaW5kZXhv bmx5OworCUJ1ZmZlcgkJdm1CdWZmZXI7CisKKwkvKgorCSAqIFF1ZXVlIG9mIFRJRHMgdG8g cHJlZmV0Y2guCisJICoKKwkgKiBYWFggU2l6aW5nIGZvciBNQVhfSU9fQ09OQ1VSUkVOQ1kg bWF5IGJlIG92ZXJraWxsLCBidXQgaXQgc2VlbXMgc2ltcGxlcgorCSAqIHRoYW4gZHluYW1p Y2FsbHkgYWRqdXN0aW5nIGZvciBjdXN0b20gdmFsdWVzLgorCSAqLworCUluZGV4UHJlZmV0 Y2hFbnRyeQlxdWV1ZUl0ZW1zW01BWF9JT19DT05DVVJSRU5DWV07CisJdWludDY0CQkJcXVl dWVJbmRleDsJLyogbmV4dCBUSUQgdG8gcHJlZmV0Y2ggKi8KKwl1aW50NjQJCQlxdWV1ZVN0 YXJ0OwkvKiBmaXJzdCB2YWxpZCBUSUQgaW4gcXVldWUgKi8KKwl1aW50NjQJCQlxdWV1ZUVu ZDsJLyogZmlyc3QgaW52YWxpZCAoZW1wdHkpIFRJRCBpbiBxdWV1ZSAqLworCisJLyoKKwkg KiBBIGNvdXBsZSBvZiBsYXN0IHByZWZldGNoZWQgYmxvY2tzLCB1c2VkIHRvIGNoZWNrIGZv ciBjZXJ0YWluIGFjY2VzcworCSAqIHBhdHRlcm4gYW5kIHNraXAgcHJlZmV0Y2hpbmcgLSBl LmcuIGZvciBzZXF1ZW50aWFsIGFjY2VzcykuCisJICoKKwkgKiBYWFggU2VwYXJhdGUgZnJv bSB0aGUgbWFpbiBxdWV1ZSwgYmVjYXVzZSB3ZSBvbmx5IHdhbnQgdG8gY29tcGFyZSB0aGUK KwkgKiBibG9jayBudW1iZXJzLCBub3QgdGhlIHdob2xlIFRJRC4gSW4gc2VxdWVudGlhbCBh Y2Nlc3MgaXQncyBsaWtlbHkgd2UKKwkgKiByZWFkIG1hbnkgaXRlbXMgZnJvbSBlYWNoIHBh Z2UsIGFuZCB3ZSBkb24ndCB3YW50IHRvIGNoZWNrIG1hbnkgaXRlbXMKKwkgKiAoYXMgdGhh dCBpcyBtdWNoIG1vcmUgZXhwZW5zaXZlKS4KKwkgKi8KKwlCbG9ja051bWJlcgkJYmxvY2tJ dGVtc1tQUkVGRVRDSF9RVUVVRV9ISVNUT1JZXTsKKwl1aW50NjQJCQlibG9ja0luZGV4Owkv KiBpbmRleCBpbiB0aGUgYmxvY2sgKHBvaW50cyB0byB0aGUgZmlyc3QKKwkJCQkJCQkJICog ZW1wdHkgZW50cnkpKi8KKworCS8qCisJICogQ2FjaGUgb2YgcmVjZW50bHkgcHJlZmV0Y2hl ZCBibG9ja3MsIG9yZ2FuaXplZCBhcyBhIGhhc2ggdGFibGUgb2YKKwkgKiBzbWFsbCBMUlUg Y2FjaGVzLgorCSAqLworCXVpbnQ2NAkJCQlwcmVmZXRjaFJlcU51bWJlcjsKKwlJbmRleFBy ZWZldGNoQ2FjaGVFbnRyeQlwcmVmZXRjaENhY2hlW1BSRUZFVENIX0NBQ0hFX1NJWkVdOwor Cit9IEluZGV4UHJlZmV0Y2g7CisKKyNkZWZpbmUgUFJFRkVUQ0hfUVVFVUVfSU5ERVgoYSkJ KChhKSAlIChNQVhfSU9fQ09OQ1VSUkVOQ1kpKQorI2RlZmluZSBQUkVGRVRDSF9RVUVVRV9F TVBUWShwKQkoKHApLT5xdWV1ZUVuZCA9PSAocCktPnF1ZXVlSW5kZXgpCisjZGVmaW5lIFBS RUZFVENIX0VOQUJMRUQocCkJCSgocCkgJiYgKChwKS0+cHJlZmV0Y2hNYXhUYXJnZXQgPiAw KSkKKyNkZWZpbmUgUFJFRkVUQ0hfRlVMTChwKQkJKChwKS0+cXVldWVFbmQgLSAocCktPnF1 ZXVlSW5kZXggPT0gKHApLT5wcmVmZXRjaFRhcmdldCkKKyNkZWZpbmUgUFJFRkVUQ0hfRE9O RShwKQkJKChwKSAmJiAoKHApLT5wcmVmZXRjaERvbmUgJiYgUFJFRkVUQ0hfUVVFVUVfRU1Q VFkocCkpKQorI2RlZmluZSBQUkVGRVRDSF9BQ1RJVkUocCkJCShQUkVGRVRDSF9FTkFCTEVE KHApICYmICEocCktPnByZWZldGNoRG9uZSkKKyNkZWZpbmUgUFJFRkVUQ0hfQkxPQ0tfSU5E RVgodikJKCh2KSAlIFBSRUZFVENIX1FVRVVFX0hJU1RPUlkpCisKKwogLyoKICAqIGdlbmVy YWxpemVkIGluZGV4XyBpbnRlcmZhY2Ugcm91dGluZXMgKGluIGluZGV4YW0uYykKICAqLwpA QCAtMTczLDExICsyNzgsMTcgQEAgZXh0ZXJuIEluZGV4U2NhbkRlc2MgaW5kZXhfYmVnaW5z Y2FuX3BhcmFsbGVsKFJlbGF0aW9uIGhlYXByZWwsCiAJCQkJCQkJCQkJCSAgUmVsYXRpb24g aW5kZXhyZWwsIGludCBua2V5cywgaW50IG5vcmRlcmJ5cywKIAkJCQkJCQkJCQkJICBQYXJh bGxlbEluZGV4U2NhbkRlc2MgcHNjYW4pOwogZXh0ZXJuIEl0ZW1Qb2ludGVyIGluZGV4X2dl dG5leHRfdGlkKEluZGV4U2NhbkRlc2Mgc2NhbiwKLQkJCQkJCQkJCSBTY2FuRGlyZWN0aW9u IGRpcmVjdGlvbik7CisJCQkJCQkJCQkgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJ CQkJCQkgSW5kZXhQcmVmZXRjaCAqcHJlZmV0Y2gpOworZXh0ZXJuIEl0ZW1Qb2ludGVyIGlu ZGV4X2dldG5leHRfdGlkX3ZtKEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJCQlTY2Fu RGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJCQkJCQlJbmRleFByZWZldGNoICpwcmVmZXRj aCwKKwkJCQkJCQkJCQlib29sICphbGxfdmlzaWJsZSk7CiBzdHJ1Y3QgVHVwbGVUYWJsZVNs b3Q7CiBleHRlcm4gYm9vbCBpbmRleF9mZXRjaF9oZWFwKEluZGV4U2NhbkRlc2Mgc2Nhbiwg c3RydWN0IFR1cGxlVGFibGVTbG90ICpzbG90KTsKIGV4dGVybiBib29sIGluZGV4X2dldG5l eHRfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAot CQkJCQkJCSAgIHN0cnVjdCBUdXBsZVRhYmxlU2xvdCAqc2xvdCk7CisJCQkJCQkJICAgc3Ry dWN0IFR1cGxlVGFibGVTbG90ICpzbG90LAorCQkJCQkJCSAgIEluZGV4UHJlZmV0Y2ggKnBy ZWZldGNoKTsKIGV4dGVybiBpbnQ2NCBpbmRleF9nZXRiaXRtYXAoSW5kZXhTY2FuRGVzYyBz Y2FuLCBUSURCaXRtYXAgKmJpdG1hcCk7CiAKIGV4dGVybiBJbmRleEJ1bGtEZWxldGVSZXN1 bHQgKmluZGV4X2J1bGtfZGVsZXRlKEluZGV4VmFjdXVtSW5mbyAqaW5mbywKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2luc3RydW1lbnQuaCBiL3NyYy9pbmNsdWRlL2V4 ZWN1dG9yL2luc3RydW1lbnQuaAppbmRleCBkNWQ2OTk0MWM1Mi4uZjUzZmI0YTFlNTEgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2luc3RydW1lbnQuaAorKysgYi9zcmMv aW5jbHVkZS9leGVjdXRvci9pbnN0cnVtZW50LmgKQEAgLTMzLDYgKzMzLDggQEAgdHlwZWRl ZiBzdHJ1Y3QgQnVmZmVyVXNhZ2UKIAlpbnQ2NAkJbG9jYWxfYmxrc193cml0dGVuOyAvKiAj IG9mIGxvY2FsIGRpc2sgYmxvY2tzIHdyaXR0ZW4gKi8KIAlpbnQ2NAkJdGVtcF9ibGtzX3Jl YWQ7IC8qICMgb2YgdGVtcCBibG9ja3MgcmVhZCAqLwogCWludDY0CQl0ZW1wX2Jsa3Nfd3Jp dHRlbjsJLyogIyBvZiB0ZW1wIGJsb2NrcyB3cml0dGVuICovCisJaW50NjQJCWJsa3NfcHJl ZmV0Y2hfcm91bmRzOwkvKiAjIG9mIHByZWZldGNoIHJvdW5kcyAqLworCWludDY0CQlibGtz X3ByZWZldGNoZXM7CS8qICMgb2YgYnVmZmVycyBwcmVmZXRjaGVkICovCiAJaW5zdHJfdGlt ZQlzaGFyZWRfYmxrX3JlYWRfdGltZTsJLyogdGltZSBzcGVudCByZWFkaW5nIHNoYXJlZCBi bG9ja3MgKi8KIAlpbnN0cl90aW1lCXNoYXJlZF9ibGtfd3JpdGVfdGltZTsJLyogdGltZSBz cGVudCB3cml0aW5nIHNoYXJlZCBibG9ja3MgKi8KIAlpbnN0cl90aW1lCWxvY2FsX2Jsa19y ZWFkX3RpbWU7CS8qIHRpbWUgc3BlbnQgcmVhZGluZyBsb2NhbCBibG9ja3MgKi8KZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9k ZXMvZXhlY25vZGVzLmgKaW5kZXggNWQ3ZjE3ZGVlMDcuLjg3NDU0NTNhNWI0IDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9u b2Rlcy9leGVjbm9kZXMuaApAQCAtMTUyOSw2ICsxNTI5LDcgQEAgdHlwZWRlZiBzdHJ1Y3QK IAlib29sCSAgICplbGVtX251bGxzOwkJLyogYXJyYXkgb2YgbnVtX2VsZW1zIGlzLW51bGwg ZmxhZ3MgKi8KIH0gSW5kZXhBcnJheUtleUluZm87CiAKKwogLyogLS0tLS0tLS0tLS0tLS0t LQogICoJIEluZGV4U2NhblN0YXRlIGluZm9ybWF0aW9uCiAgKgpAQCAtMTU4MCw2ICsxNTgx LDggQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuU3RhdGUKIAlib29sCSAgICppc3NfT3Jk ZXJCeVR5cEJ5VmFsczsKIAlpbnQxNgkgICAqaXNzX09yZGVyQnlUeXBMZW5zOwogCVNpemUJ CWlzc19Qc2NhbkxlbjsKKworCUluZGV4UHJlZmV0Y2ggKmlzc19wcmVmZXRjaDsKIH0gSW5k ZXhTY2FuU3RhdGU7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0KQEAgLTE2MTgsNiArMTYyMSw3 IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4T25seVNjYW5TdGF0ZQogCVR1cGxlVGFibGVTbG90 ICppb3NzX1RhYmxlU2xvdDsKIAlCdWZmZXIJCWlvc3NfVk1CdWZmZXI7CiAJU2l6ZQkJaW9z c19Qc2NhbkxlbjsKKwlJbmRleFByZWZldGNoICppb3NzX3ByZWZldGNoOwogfSBJbmRleE9u bHlTY2FuU3RhdGU7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0KLS0gCjIuNDMuMAoK --------------DeQq8rsUZatFkEjxF1hv4CO9 Content-Type: text/x-patch; charset=UTF-8; name="v20240103-0002-switch-to-StreamingRead-like-API.patch" Content-Disposition: attachment; filename="v20240103-0002-switch-to-StreamingRead-like-API.patch" Content-Transfer-Encoding: base64 RnJvbSBiOTAyMWM0OThiYjI3MzA1NWY4Y2Y4ODA5MDMwYzRhYmM3ODQ4NzM3IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQDJuZHF1YWRyYW50 LmNvbT4KRGF0ZTogTW9uLCAxIEphbiAyMDI0IDIxOjUwOjQ3ICswMTAwClN1YmplY3Q6IFtQ QVRDSCB2MjAyNDAxMDMgMi8yXSBzd2l0Y2ggdG8gU3RyZWFtaW5nUmVhZC1saWtlIEFQSQoK LS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jIHwgICAyICst CiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvUkVBRE1FLnByZWZldGNoIHwgICAzICsKIHNy Yy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5jICAgICAgICAgfCAgIDQgKy0KIHNyYy9i YWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMgICAgICAgfCAyNTQgKysrKysrKysrKysr LS0tLS0tLS0tLS0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jICAgICAg fCAgIDYgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jICAgfCAg IDkgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMgfCAxNDkg KysrKysrKy0tLS0tLQogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jICAg ICB8IDEwNSArKysrKystLS0tCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVw bGFuLmMgIHwgIDI3ICsrLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMgICAg ICAgICB8ICAgMiArLQogc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmggICAgICAgICAgICAg ICB8ICA2OCArKysrLS0KIHNyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oICAgICAgICAg ICAgfCAgIDQgKy0KIHNyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oICAgICAgICAgICAg fCAgIDIgKwogMTMgZmlsZXMgY2hhbmdlZCwgMzgyIGluc2VydGlvbnMoKyksIDI1MyBkZWxl dGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgv UkVBRE1FLnByZWZldGNoCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAv aGVhcGFtX2hhbmRsZXIuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5k bGVyLmMKaW5kZXggMjZkM2VjMjBiNjMuLjdjMjhkYWZiNzI4IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCisrKyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKQEAgLTc5Miw3ICs3OTIsNyBAQCBoZWFw YW1fcmVsYXRpb25fY29weV9mb3JfY2x1c3RlcihSZWxhdGlvbiBPbGRIZWFwLCBSZWxhdGlv biBOZXdIZWFwLAogCiAJCWlmIChpbmRleFNjYW4gIT0gTlVMTCkKIAkJewotCQkJaWYgKCFp bmRleF9nZXRuZXh0X3Nsb3QoaW5kZXhTY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgc2xv dCwgTlVMTCkpCisJCQlpZiAoIWluZGV4X2dldG5leHRfc2xvdChpbmRleFNjYW4sIEZvcndh cmRTY2FuRGlyZWN0aW9uLCBzbG90KSkKIAkJCQlicmVhazsKIAogCQkJLyogU2luY2Ugd2Ug dXNlZCBubyBzY2FuIGtleXMsIHNob3VsZCBuZXZlciBuZWVkIHRvIHJlY2hlY2sgKi8KZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9SRUFETUUucHJlZmV0Y2ggYi9z cmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvUkVBRE1FLnByZWZldGNoCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yYTZhYzRhMGVlYQotLS0gL2Rldi9udWxsCisr KyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9SRUFETUUucHJlZmV0Y2gKQEAgLTAsMCAr MSwzIEBACistIGluZGV4IGhlYXAgcHJlZmV0Y2ggb3ZlcnZpZXcKKy0gCistIGNhbGxiYWNr IC0gZGVjaXNpb24gd2hldGhlciB0byBwcmVmZXRjaCwgcG9zc2liaWxpdHkgdG8ga2VlcCBk YXRhCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5jCmluZGV4IDcyZTdjOWYyMDZjLi40Y2Ex MjAwNjg0MyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMK KysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMKQEAgLTUwOSw3ICs1MDks NyBAQCBzeXN0YWJsZV9nZXRuZXh0KFN5c1NjYW5EZXNjIHN5c3NjYW4pCiAKIAlpZiAoc3lz c2Nhbi0+aXJlbCkKIAl7Ci0JCWlmIChpbmRleF9nZXRuZXh0X3Nsb3Qoc3lzc2Nhbi0+aXNj YW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBzeXNzY2FuLT5zbG90LCBOVUxMKSkKKwkJaWYg KGluZGV4X2dldG5leHRfc2xvdChzeXNzY2FuLT5pc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rp b24sIHN5c3NjYW4tPnNsb3QpKQogCQl7CiAJCQlib29sCQlzaG91bGRGcmVlOwogCkBAIC03 MTMsNyArNzEzLDcgQEAgc3lzdGFibGVfZ2V0bmV4dF9vcmRlcmVkKFN5c1NjYW5EZXNjIHN5 c3NjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKQogCUhlYXBUdXBsZQlodHVwID0gTlVM TDsKIAogCUFzc2VydChzeXNzY2FuLT5pcmVsKTsKLQlpZiAoaW5kZXhfZ2V0bmV4dF9zbG90 KHN5c3NjYW4tPmlzY2FuLCBkaXJlY3Rpb24sIHN5c3NjYW4tPnNsb3QsIE5VTEwpKQorCWlm IChpbmRleF9nZXRuZXh0X3Nsb3Qoc3lzc2Nhbi0+aXNjYW4sIGRpcmVjdGlvbiwgc3lzc2Nh bi0+c2xvdCkpCiAJCWh0dXAgPSBFeGVjRmV0Y2hTbG90SGVhcFR1cGxlKHN5c3NjYW4tPnNs b3QsIGZhbHNlLCBOVUxMKTsKIAogCS8qIFNlZSBub3RlcyBpbiBzeXN0YWJsZV9nZXRuZXh0 ICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jIGIv c3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYwppbmRleCBmOTZhZWJhMWIzOS4u Y2RhZDNmNGM2ZjkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRl eGFtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYwpAQCAtNDks NyArNDksNiBAQAogI2luY2x1ZGUgImFjY2Vzcy9yZWxzY2FuLmgiCiAjaW5jbHVkZSAiYWNj ZXNzL3RhYmxlYW0uaCIKICNpbmNsdWRlICJhY2Nlc3MvdHJhbnNhbS5oIgotI2luY2x1ZGUg ImFjY2Vzcy92aXNpYmlsaXR5bWFwLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hsb2cuaCIKICNp bmNsdWRlICJjYXRhbG9nL2luZGV4LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19hbXByb2Mu aCIKQEAgLTY0LDYgKzYzLDcgQEAKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKICNp bmNsdWRlICJ1dGlscy9ydWxldXRpbHMuaCIKICNpbmNsdWRlICJ1dGlscy9zbmFwbWdyLmgi CisjaW5jbHVkZSAidXRpbHMvc3BjY2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy9zeXNjYWNo ZS5oIgogCiAKQEAgLTExMSwxMyArMTExLDE2IEBAIHN0YXRpYyBJbmRleFNjYW5EZXNjIGlu ZGV4X2JlZ2luc2Nhbl9pbnRlcm5hbChSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAogCQkJCQkJ CQkJCQkgIGludCBua2V5cywgaW50IG5vcmRlcmJ5cywgU25hcHNob3Qgc25hcHNob3QsCiAJ CQkJCQkJCQkJCSAgUGFyYWxsZWxJbmRleFNjYW5EZXNjIHBzY2FuLCBib29sIHRlbXBfc25h cCk7CiAKLXN0YXRpYyB2b2lkIGluZGV4X3ByZWZldGNoX3RpZHMoSW5kZXhTY2FuRGVzYyBz Y2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKLQkJCQkJCQkJSW5kZXhQcmVmZXRjaCAq cHJlZmV0Y2gpOwotc3RhdGljIEl0ZW1Qb2ludGVyIGluZGV4X3ByZWZldGNoX2dldF90aWQo SW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKLQkJCQkJCQkJ CQkgIEluZGV4UHJlZmV0Y2ggKnByZWZldGNoLCBib29sICphbGxfdmlzaWJsZSk7Ci1zdGF0 aWMgdm9pZCBpbmRleF9wcmVmZXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4UHJlZmV0 Y2ggKnByZWZldGNoLAotCQkJCQkJICAgSXRlbVBvaW50ZXIgdGlkLCBib29sIHNraXBfYWxs X3Zpc2libGUsIGJvb2wgKmFsbF92aXNpYmxlKTsKLQorLyogaW5kZXggcHJlZmV0Y2hpbmcg b2YgaGVhcCBwYWdlcyAqLworc3RhdGljIHZvaWQgaW5kZXhfcHJlZmV0Y2hfdGlkcyhJbmRl eFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCUluZGV4UHJlZmV0Y2ggKnByZWZldGNoLAorCQkJ CQkJCQlTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbik7CitzdGF0aWMgSW5kZXhQcmVmZXRjaEVu dHJ5ICppbmRleF9wcmVmZXRjaF9nZXRfZW50cnkoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJ CQkJCQkJCQkJICAgIEluZGV4UHJlZmV0Y2ggKnByZWZldGNoLAorCQkJCQkJCQkJCQkJCVNj YW5EaXJlY3Rpb24gZGlyZWN0aW9uKTsKK3N0YXRpYyB2b2lkIGluZGV4X3ByZWZldGNoX2hl YXBfcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkgSW5kZXhQcmVmZXRjaCAq cHJlZmV0Y2gsCisJCQkJCQkJCQkgSW5kZXhQcmVmZXRjaEVudHJ5ICplbnRyeSk7CiAKIC8q IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KICAqCQkJCSAgIGluZGV4XyBpbnRlcmZhY2UgZnVuY3Rpb25zCkBAIC01 NDYsOCArNTQ5LDggQEAgaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKFJlbGF0aW9uIGhlYXBy ZWwsIFJlbGF0aW9uIGluZGV4cmVsLCBpbnQgbmtleXMsCiAgKiBvciBOVUxMIGlmIG5vIG1v cmUgbWF0Y2hpbmcgdHVwbGVzIGV4aXN0LgogICogLS0tLS0tLS0tLS0tLS0tLQogICovCi1z dGF0aWMgSXRlbVBvaW50ZXIKLWluZGV4X2dldG5leHRfdGlkX2ludGVybmFsKEluZGV4U2Nh bkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pCitJdGVtUG9pbnRlcgoraW5k ZXhfZ2V0bmV4dF90aWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVj dGlvbikKIHsKIAlib29sCQlmb3VuZDsKIApAQCAtNjQzLDI0ICs2NDYsMjIgQEAgaW5kZXhf ZmV0Y2hfaGVhcChJbmRleFNjYW5EZXNjIHNjYW4sIFR1cGxlVGFibGVTbG90ICpzbG90KQog ICogTm90ZTogY2FsbGVyIG11c3QgY2hlY2sgc2Nhbi0+eHNfcmVjaGVjaywgYW5kIHBlcmZv cm0gcmVjaGVja2luZyBvZiB0aGUKICAqIHNjYW4ga2V5cyBpZiByZXF1aXJlZC4gIFdlIGRv IG5vdCBkbyB0aGF0IGhlcmUgYmVjYXVzZSB3ZSBkb24ndCBoYXZlCiAgKiBlbm91Z2ggaW5m b3JtYXRpb24gdG8gZG8gaXQgZWZmaWNpZW50bHkgaW4gdGhlIGdlbmVyYWwgY2FzZS4KKyAq CisgKiBYWFggVGhpcyBkb2VzIG5vdCBzdXBwb3J0IHByZWZldGNoaW5nIG9mIGhlYXAgcGFn ZXMuIFdoZW4gc3VjaCBwcmVmZXRjaGluZyBpcworICogZGVzaXJhYmxlLCB1c2UgaW5kZXhf Z2V0bmV4dF90aWQoKS4KICAqIC0tLS0tLS0tLS0tLS0tLS0KICAqLwogYm9vbAotaW5kZXhf Z2V0bmV4dF9zbG90KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rp b24sIFR1cGxlVGFibGVTbG90ICpzbG90LAotCQkJCSAgIEluZGV4UHJlZmV0Y2ggKnByZWZl dGNoKQoraW5kZXhfZ2V0bmV4dF9zbG90KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVj dGlvbiBkaXJlY3Rpb24sIFR1cGxlVGFibGVTbG90ICpzbG90KQogewogCWZvciAoOzspCiAJ ewotCQkvKiBEbyBwcmVmZXRjaGluZyAoaWYgcmVxdWVzdGVkL2VuYWJsZWQpLiAqLwotCQlp bmRleF9wcmVmZXRjaF90aWRzKHNjYW4sIGRpcmVjdGlvbiwgcHJlZmV0Y2gpOwotCiAJCWlm ICghc2Nhbi0+eHNfaGVhcF9jb250aW51ZSkKIAkJewotCQkJSXRlbVBvaW50ZXIJdGlkOwot CQkJYm9vbAkJYWxsX3Zpc2libGU7CisJCQlJdGVtUG9pbnRlciB0aWQ7CiAKIAkJCS8qIFRp bWUgdG8gZmV0Y2ggdGhlIG5leHQgVElEIGZyb20gdGhlIGluZGV4ICovCi0JCQl0aWQgPSBp bmRleF9wcmVmZXRjaF9nZXRfdGlkKHNjYW4sIGRpcmVjdGlvbiwgcHJlZmV0Y2gsICZhbGxf dmlzaWJsZSk7CisJCQl0aWQgPSBpbmRleF9nZXRuZXh0X3RpZChzY2FuLCBkaXJlY3Rpb24p OwogCiAJCQkvKiBJZiB3ZSdyZSBvdXQgb2YgaW5kZXggZW50cmllcywgd2UncmUgZG9uZSAq LwogCQkJaWYgKHRpZCA9PSBOVUxMKQpAQCAtMTMzOSwxMyArMTM0MCw5IEBAIGluZGV4X3By ZWZldGNoX2FkZF9jYWNoZShJbmRleFByZWZldGNoICpwcmVmZXRjaCwgQmxvY2tOdW1iZXIg YmxvY2spCiAgKiB2YWx1ZSBvbmNlIGluIGEgd2hpbGUsIGFuZCBzZWUgd2hhdCBoYXBwZW5z LgogICovCiBzdGF0aWMgdm9pZAotaW5kZXhfcHJlZmV0Y2goSW5kZXhTY2FuRGVzYyBzY2Fu LCBJbmRleFByZWZldGNoICpwcmVmZXRjaCwKLQkJCSAgIEl0ZW1Qb2ludGVyIHRpZCwgYm9v bCBza2lwX2FsbF92aXNpYmxlLCBib29sICphbGxfdmlzaWJsZSkKK2luZGV4X3ByZWZldGNo X2hlYXBfcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4UHJlZmV0Y2ggKnByZWZldGNo LCBJbmRleFByZWZldGNoRW50cnkgKmVudHJ5KQogewotCUJsb2NrTnVtYmVyIGJsb2NrOwot Ci0JLyogYnkgZGVmYXVsdCBub3QgYWxsIHZpc2libGUgKG9yIHdlIGRpZG4ndCBjaGVjaykg Ki8KLQkqYWxsX3Zpc2libGUgPSBmYWxzZTsKKwlCbG9ja051bWJlciBibG9jayA9IEl0ZW1Q b2ludGVyR2V0QmxvY2tOdW1iZXIoJmVudHJ5LT50aWQpOwogCiAJLyoKIAkgKiBObyBoZWFw IHJlbGF0aW9uIG1lYW5zIGJpdG1hcCBpbmRleCBzY2FuLCB3aGljaCBkb2VzIHByZWZldGNo aW5nIGF0IHRoZQpAQCAtMTM1NSw2ICsxMzUyLDggQEAgaW5kZXhfcHJlZmV0Y2goSW5kZXhT Y2FuRGVzYyBzY2FuLCBJbmRleFByZWZldGNoICpwcmVmZXRjaCwKIAkgKiBYWFggQnV0IGlu IHRoaXMgY2FzZSB3ZSBzaG91bGQgaGF2ZSBwcmVmZXRjaE1heFRhcmdldD0wLCBiZWNhdXNl IGluCiAJICogaW5kZXhfYmViaW5zY2FuX2JpdG1hcCgpIHdlIGRpc2FibGUgcHJlZmV0Y2hp bmcuIFNvIG1heWJlIHdlIHNob3VsZAogCSAqIGp1c3QgY2hlY2sgdGhhdC4KKwkgKgorCSAq IFhYWCBDb21tZW50L2NoZWNrIHNlZW1zIG9ic29sZXRlLgogCSAqLwogCWlmICghcHJlZmV0 Y2gpCiAJCXJldHVybjsKQEAgLTEzNjIsMzcgKzEzNjEsMTAgQEAgaW5kZXhfcHJlZmV0Y2go SW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFByZWZldGNoICpwcmVmZXRjaCwKIAkvKgogCSAq IElmIHdlIGdvdCBoZXJlLCBwcmVmZXRjaGluZyBpcyBlbmFibGVkIGFuZCBpdCdzIGEgbm9k ZSB0aGF0IHN1cHBvcnRzCiAJICogcHJlZmV0Y2hpbmcgKGkuZS4gaXQgY2FuJ3QgYmUgYSBi aXRtYXAgaW5kZXggc2NhbikuCi0JICovCi0JQXNzZXJ0KHNjYW4tPmhlYXBSZWxhdGlvbik7 Ci0KLQlibG9jayA9IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKTsKLQotCS8qCi0J ICogV2hlbiBwcmVmZXRjaGluZyBmb3IgSU9TLCB3ZSB3YW50IHRvIG9ubHkgcHJlZmV0Y2gg cGFnZXMgdGhhdCBhcmUgbm90Ci0JICogbWFya2VkIGFzIGFsbC12aXNpYmxlIChiZWNhdXNl IG5vdCBmZXRjaGluZyBhbGwtdmlzaWJsZSBwYWdlcyBpcyB0aGUKLQkgKiBwb2ludCBvZiBJ T1MpLgogCSAqCi0JICogWFhYIFRoaXMgaXMgbm90IGdyZWF0LCBiZWNhdXNlIGl0IHJlbGVh c2VzIHRoZSBWTSBidWZmZXIgZm9yIGVhY2ggVElECi0JICogd2UgY29uc2lkZXIgdG8gcHJl ZmV0Y2guIFdlIHNob3VsZCByZXVzZSB0aGF0IHNvbWVob3csIHNpbWlsYXIgdG8gdGhlCi0J ICogYWN0dWFsIElPUyBjb2RlLiBJZGVhbGx5LCB3ZSBzaG91bGQgdXNlIHRoZSBzYW1lIGlv c3NfVk1CdWZmZXIgKGlmCi0JICogd2UgY2FuIHByb3BhZ2F0ZSBpdCBoZXJlKS4gT3IgYXQg bGVhc3QgZG8gaXQgZm9yIGEgYnVsayBvZiBwcmVmZXRjaGVzLAotCSAqIGFsdGhvdWdoIHRo YXQncyBub3QgdmVyeSB1c2VmdWwgLSBhZnRlciB0aGUgcmFtcC11cCB3ZSB3aWxsIHByZWZl dGNoCi0JICogdGhlIHBhZ2VzIG9uZSBieSBvbmUgYW55d2F5LgotCSAqCi0JICogWFhYIElk ZWFsbHkgd2UnZCBhbHNvIHByb3BhZ2F0ZSB0aGlzIHRvIHRoZSBleGVjdXRvciwgc28gdGhh dCB0aGUKLQkgKiBub2RlSW5kZXhvbmx5c2Nhbi5jIGRvZXNuJ3QgbmVlZCB0byByZXBlYXQg dGhlIHNhbWUgVk0gY2hlY2sgKHdoaWNoCi0JICogaXMgbWVhc3VyYWJsZSkuIEJ1dCB0aGUg aW5kZXhfZ2V0bmV4dF90aWQoKSBpcyBub3QgcmVhbGx5IHdlbGwKLQkgKiBzdWl0ZWQgZm9y IHRoYXQsIHNvIHRoZSBBUEkgbmVlZHMgYSBjaGFuZ2UucworCSAqIFhYWCBDb21tZW50L2No ZWNrIHNlZW1zIG9ic29sZXRlLgogCSAqLwotCWlmIChza2lwX2FsbF92aXNpYmxlKQotCXsK LQkJKmFsbF92aXNpYmxlID0gVk1fQUxMX1ZJU0lCTEUoc2Nhbi0+aGVhcFJlbGF0aW9uLAot CQkJCQkJCQkJICBibG9jaywKLQkJCQkJCQkJCSAgJnByZWZldGNoLT52bUJ1ZmZlcik7Ci0K LQkJaWYgKCphbGxfdmlzaWJsZSkKLQkJCXJldHVybjsKLQl9CisJQXNzZXJ0KHNjYW4tPmhl YXBSZWxhdGlvbik7CiAKIAkvKgogCSAqIERvIG5vdCBwcmVmZXRjaCB0aGUgc2FtZSBibG9j ayBvdmVyIGFuZCBvdmVyIGFnYWluLApAQCAtMTQxMiw0MiArMTM4NCwxMiBAQCBpbmRleF9w cmVmZXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4UHJlZmV0Y2ggKnByZWZldGNoLAog CXByZWZldGNoLT5jb3VudEFsbCsrOwogfQogCi0vKiAtLS0tLS0tLS0tLS0tLS0tCi0gKiBp bmRleF9nZXRuZXh0X3RpZCAtIGdldCB0aGUgbmV4dCBUSUQgZnJvbSBhIHNjYW4KLSAqCi0g KiBUaGUgcmVzdWx0IGlzIHRoZSBuZXh0IFRJRCBzYXRpc2Z5aW5nIHRoZSBzY2FuIGtleXMs Ci0gKiBvciBOVUxMIGlmIG5vIG1vcmUgbWF0Y2hpbmcgdHVwbGVzIGV4aXN0LgotICoKLSAq IEZJWE1FIG5vdCBzdXJlIHRoaXMgaGFuZGxlcyB4c19oZWFwZmV0Y2ggY29ycmVjdGx5Lgot ICogLS0tLS0tLS0tLS0tLS0tLQorLyoKKyAqIGluZGV4X3ByZWZldGNoX3RpZHMKKyAqCQlG aWxsIHRoZSBwcmVmZXRjaCBxdWV1ZSBhbmQgaXNzdWUgbmVjZXNzYXJ5IHByZWZldGNoIHJl cXVlc3RzLgogICovCi1JdGVtUG9pbnRlcgotaW5kZXhfZ2V0bmV4dF90aWQoSW5kZXhTY2Fu RGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKLQkJCQkgIEluZGV4UHJlZmV0 Y2ggKnByZWZldGNoKQotewotCWJvb2wJCWFsbF92aXNpYmxlOwkvKiBpZ25vcmVkICovCi0K LQkvKiBEbyBwcmVmZXRjaGluZyAoaWYgcmVxdWVzdGVkL2VuYWJsZWQpLiAqLwotCWluZGV4 X3ByZWZldGNoX3RpZHMoc2NhbiwgZGlyZWN0aW9uLCBwcmVmZXRjaCk7Ci0KLQkvKiBSZWFk IHRoZSBUSUQgZnJvbSB0aGUgcXVldWUgKG9yIGRpcmVjdGx5IGZyb20gdGhlIGluZGV4KS4g Ki8KLQlyZXR1cm4gaW5kZXhfcHJlZmV0Y2hfZ2V0X3RpZChzY2FuLCBkaXJlY3Rpb24sIHBy ZWZldGNoLCAmYWxsX3Zpc2libGUpOwotfQotCi1JdGVtUG9pbnRlcgotaW5kZXhfZ2V0bmV4 dF90aWRfdm0oSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwK LQkJCQkJIEluZGV4UHJlZmV0Y2ggKnByZWZldGNoLCBib29sICphbGxfdmlzaWJsZSkKLXsK LQkvKiBEbyBwcmVmZXRjaGluZyAoaWYgcmVxdWVzdGVkL2VuYWJsZWQpLiAqLwotCWluZGV4 X3ByZWZldGNoX3RpZHMoc2NhbiwgZGlyZWN0aW9uLCBwcmVmZXRjaCk7Ci0KLQkvKiBSZWFk IHRoZSBUSUQgZnJvbSB0aGUgcXVldWUgKG9yIGRpcmVjdGx5IGZyb20gdGhlIGluZGV4KS4g Ki8KLQlyZXR1cm4gaW5kZXhfcHJlZmV0Y2hfZ2V0X3RpZChzY2FuLCBkaXJlY3Rpb24sIHBy ZWZldGNoLCBhbGxfdmlzaWJsZSk7Ci19Ci0KIHN0YXRpYyB2b2lkCi1pbmRleF9wcmVmZXRj aF90aWRzKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCi0J CQkJCUluZGV4UHJlZmV0Y2ggKnByZWZldGNoKQoraW5kZXhfcHJlZmV0Y2hfdGlkcyhJbmRl eFNjYW5EZXNjIHNjYW4sIEluZGV4UHJlZmV0Y2ggKnByZWZldGNoLCBTY2FuRGlyZWN0aW9u IGRpcmVjdGlvbikKIHsKIAkvKgogCSAqIElmIHRoZSBwcmVmZXRjaGluZyBpcyBzdGlsbCBh Y3RpdmUgKGkuZS4gZW5hYmxlZCBhbmQgd2Ugc3RpbGwKQEAgLTE0NzMsNDMgKzE0MTUsNDYg QEAgaW5kZXhfcHJlZmV0Y2hfdGlkcyhJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rp b24gZGlyZWN0aW9uLAogCQkgKi8KIAkJd2hpbGUgKCFQUkVGRVRDSF9GVUxMKHByZWZldGNo KSkKIAkJewotCQkJSXRlbVBvaW50ZXIgdGlkOwotCQkJYm9vbAkJYWxsX3Zpc2libGU7CisJ CQlJbmRleFByZWZldGNoRW50cnkgKmVudHJ5ID0gcHJlZmV0Y2gtPm5leHRfY2Ioc2Nhbiwg cHJlZmV0Y2gsIGRpcmVjdGlvbik7CiAKLQkJCS8qIFRpbWUgdG8gZmV0Y2ggdGhlIG5leHQg VElEIGZyb20gdGhlIGluZGV4ICovCi0JCQl0aWQgPSBpbmRleF9nZXRuZXh0X3RpZF9pbnRl cm5hbChzY2FuLCBkaXJlY3Rpb24pOwotCi0JCQkvKgotCQkJICogSWYgd2UncmUgb3V0IG9m IGluZGV4IGVudHJpZXMsIHdlJ3JlIGRvbmUgKGFuZCB3ZSBtYXJrIHRoZQotCQkJICogdGhl IHByZWZldGNoZXIgYXMgaW5hY3RpdmUpLgotCQkJICovCi0JCQlpZiAodGlkID09IE5VTEwp CisJCQkvKiBubyBtb3JlIGVudHJpZXMgaW4gdGhpcyBpbmRleCBzY2FuICovCisJCQlpZiAo ZW50cnkgPT0gTlVMTCkKIAkJCXsKIAkJCQlwcmVmZXRjaC0+cHJlZmV0Y2hEb25lID0gdHJ1 ZTsKLQkJCQlicmVhazsKKwkJCQlyZXR1cm47CiAJCQl9CiAKLQkJCUFzc2VydChJdGVtUG9p bnRlckVxdWFscyh0aWQsICZzY2FuLT54c19oZWFwdGlkKSk7CisJCQlBc3NlcnQoSXRlbVBv aW50ZXJFcXVhbHMoJmVudHJ5LT50aWQsICZzY2FuLT54c19oZWFwdGlkKSk7CiAKLQkJCS8q Ci0JCQkgKiBJc3N1ZSB0aGUgYWN0dWFsbCBwcmVmZXRjaCByZXF1ZXN0cyBmb3IgdGhlIG5l dyBUSUQuCi0JCQkgKgotCQkJICogWFhYIGluZGV4X2dldG5leHRfdGlkX3ByZWZldGNoIGlz IG9ubHkgY2FsbGVkIGZvciBJT1MgKGZvciBub3cpLAotCQkJICogc28gc2tpcCBwcmVmZXRj aGluZyBvZiBhbGwtdmlzaWJsZSBwYWdlcy4KLQkJCSAqLwotCQkJaW5kZXhfcHJlZmV0Y2go c2NhbiwgcHJlZmV0Y2gsIHRpZCwgcHJlZmV0Y2gtPmluZGV4b25seSwgJmFsbF92aXNpYmxl KTsKKwkJCS8qIHN0b3JlIHRoZSBlbnRyeSBhbmQgdGhlbiBtYXliZSBpc3N1ZSB0aGUgcHJl ZmV0Y2ggcmVxdWVzdCAqLworCQkJcHJlZmV0Y2gtPnF1ZXVlSXRlbXNbUFJFRkVUQ0hfUVVF VUVfSU5ERVgocHJlZmV0Y2gtPnF1ZXVlRW5kKyspXSA9ICplbnRyeTsKIAotCQkJcHJlZmV0 Y2gtPnF1ZXVlSXRlbXNbUFJFRkVUQ0hfUVVFVUVfSU5ERVgocHJlZmV0Y2gtPnF1ZXVlRW5k KV0udGlkID0gKnRpZDsKLQkJCXByZWZldGNoLT5xdWV1ZUl0ZW1zW1BSRUZFVENIX1FVRVVF X0lOREVYKHByZWZldGNoLT5xdWV1ZUVuZCldLmFsbF92aXNpYmxlID0gYWxsX3Zpc2libGU7 Ci0JCQlwcmVmZXRjaC0+cXVldWVFbmQrKzsKKwkJCS8qIGlzc3VlIHRoZSBwcmVmZXRjaCBy ZXF1ZXN0PyAqLworCQkJaWYgKGVudHJ5LT5wcmVmZXRjaCkKKwkJCQlpbmRleF9wcmVmZXRj aF9oZWFwX3BhZ2Uoc2NhbiwgcHJlZmV0Y2gsIGVudHJ5KTsKIAkJfQogCX0KIH0KIAotc3Rh dGljIEl0ZW1Qb2ludGVyCi1pbmRleF9wcmVmZXRjaF9nZXRfdGlkKEluZGV4U2NhbkRlc2Mg c2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCi0JCQkJCSAgIEluZGV4UHJlZmV0Y2gg KnByZWZldGNoLCBib29sICphbGxfdmlzaWJsZSkKKy8qCisgKiBpbmRleF9wcmVmZXRjaF9n ZXRfZW50cnkKKyAqCQlHZXQgdGhlIG5leHQgZW50cnkgZnJvbSB0aGUgcHJlZmV0Y2ggcXVl dWUgKG9yIGZyb20gdGhlIGluZGV4IGRpcmVjdGx5KS4KKyAqCisgKiBJZiBwcmVmZXRjaGlu ZyBpcyBlbmFibGVkLCBnZXQgbmV4dCBlbnRyeSBmcm9tIHRoZSBwcmVmZXRjaCBxdWV1ZSAo dW5sZXNzCisgKiBxdWV1ZSBpcyBlbXB0eSkuIFdpdGggcHJlZmV0Y2hpbmcgZGlzYWJsZWQs IHJlYWQgYW4gZW50cnkgZGlyZWN0bHkgZnJvbSB0aGUKKyAqIGluZGV4IHNjYW4uCisgKgor ICogWFhYIG5vdCBzdXJlIHRoaXMgY29ycmVjdGx5IGhhbmRsZXMgeHNfaGVhcF9jb250aW51 ZSAtIHNlZSBpbmRleF9nZXRuZXh0X3Nsb3QsCisgKiBtYXliZSBub2RlSW5kZXhzY2FuIG5l ZWRzIHRvIGRvIHNvbWV0aGluZyBtb3JlIHRvIGhhbmRsZSB0aGlzPyBBbHRob3VnaCwgdGhh dAorICogc2hvdWxkIGJlIGluIHRoZSBpbmRleHNjYW4gbmV4dF9jYiBjYWxsYmFjaywgcHJv YmFibHkuCisgKgorICogWFhYIElmIHhzX2hlYXBfY29udGludWU9dHJ1ZSwgd2UgbmVlZCB0 byByZXR1cm4gdGhlIGxhc3QgVElELgorICovCitzdGF0aWMgSW5kZXhQcmVmZXRjaEVudHJ5 ICoKK2luZGV4X3ByZWZldGNoX2dldF9lbnRyeShJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4 UHJlZmV0Y2ggKnByZWZldGNoLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKKwlJbmRl eFByZWZldGNoRW50cnkgKmVudHJ5ID0gTlVMTDsKKwogCS8qCiAJICogV2l0aCBwcmVmZXRj aGluZyBlbmFibGVkIChldmVuIGlmIHdlIGFscmVhZHkgZmluaXNoZWQgcmVhZGluZwogCSAq IGFsbCBUSURzIGZyb20gdGhlIGluZGV4IHNjYW4pLCB3ZSBuZWVkIHRvIHJldHVybiBhIFRJ RCBmcm9tIHRoZQpAQCAtMTUyMiwyNSArMTQ2Nyw5OCBAQCBpbmRleF9wcmVmZXRjaF9nZXRf dGlkKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCiAJCWlm IChQUkVGRVRDSF9ET05FKHByZWZldGNoKSkKIAkJCXJldHVybiBOVUxMOwogCi0JCXNjYW4t PnhzX2hlYXB0aWQgPSBwcmVmZXRjaC0+cXVldWVJdGVtc1tQUkVGRVRDSF9RVUVVRV9JTkRF WChwcmVmZXRjaC0+cXVldWVJbmRleCldLnRpZDsKLQkJKmFsbF92aXNpYmxlID0gcHJlZmV0 Y2gtPnF1ZXVlSXRlbXNbUFJFRkVUQ0hfUVVFVUVfSU5ERVgocHJlZmV0Y2gtPnF1ZXVlSW5k ZXgpXS5hbGxfdmlzaWJsZTsKKwkJZW50cnkgPSBwYWxsb2Moc2l6ZW9mKEluZGV4UHJlZmV0 Y2hFbnRyeSkpOworCisJCWVudHJ5LT50aWQgPSBwcmVmZXRjaC0+cXVldWVJdGVtc1tQUkVG RVRDSF9RVUVVRV9JTkRFWChwcmVmZXRjaC0+cXVldWVJbmRleCldLnRpZDsKKwkJZW50cnkt PmRhdGEgPSBwcmVmZXRjaC0+cXVldWVJdGVtc1tQUkVGRVRDSF9RVUVVRV9JTkRFWChwcmVm ZXRjaC0+cXVldWVJbmRleCldLmRhdGE7CisKIAkJcHJlZmV0Y2gtPnF1ZXVlSW5kZXgrKzsK KworCQlzY2FuLT54c19oZWFwdGlkID0gZW50cnktPnRpZDsKIAl9CiAJZWxzZQkJCQkvKiBu b3QgcHJlZmV0Y2hpbmcsIGp1c3QgZG8gdGhlIHJlZ3VsYXIgd29yayAgKi8KIAl7CiAJCUl0 ZW1Qb2ludGVyIHRpZDsKIAogCQkvKiBUaW1lIHRvIGZldGNoIHRoZSBuZXh0IFRJRCBmcm9t IHRoZSBpbmRleCAqLwotCQl0aWQgPSBpbmRleF9nZXRuZXh0X3RpZF9pbnRlcm5hbChzY2Fu LCBkaXJlY3Rpb24pOwotCQkqYWxsX3Zpc2libGUgPSBmYWxzZTsKKwkJdGlkID0gaW5kZXhf Z2V0bmV4dF90aWQoc2NhbiwgZGlyZWN0aW9uKTsKIAogCQkvKiBJZiB3ZSdyZSBvdXQgb2Yg aW5kZXggZW50cmllcywgd2UncmUgZG9uZSAqLwogCQlpZiAodGlkID09IE5VTEwpCiAJCQly ZXR1cm4gTlVMTDsKIAogCQlBc3NlcnQoSXRlbVBvaW50ZXJFcXVhbHModGlkLCAmc2Nhbi0+ eHNfaGVhcHRpZCkpOworCisJCWVudHJ5ID0gcGFsbG9jKHNpemVvZihJbmRleFByZWZldGNo RW50cnkpKTsKKworCQllbnRyeS0+dGlkID0gc2Nhbi0+eHNfaGVhcHRpZDsKKwkJZW50cnkt PmRhdGEgPSBOVUxMOwogCX0KIAotCS8qIFJldHVybiB0aGUgVElEIG9mIHRoZSB0dXBsZSB3 ZSBmb3VuZC4gKi8KLQlyZXR1cm4gJnNjYW4tPnhzX2hlYXB0aWQ7CisJcmV0dXJuIGVudHJ5 OworfQorCitpbnQKK2luZGV4X2hlYXBfcHJlZmV0Y2hfdGFyZ2V0KFJlbGF0aW9uIGhlYXBS ZWwsIGRvdWJsZSBwbGFuX3Jvd3MsIGJvb2wgYWxsb3dfcHJlZmV0Y2gpCit7CisJLyoKKwkg KiBYWFggTm8gcHJlZmV0Y2hpbmcgZm9yIGRpcmVjdCBJL08uCisJICoKKwkgKiBYWFggU2hv dWxkbid0IHdlIGRvIHByZWZldGNoaW5nIGV2ZW4gZm9yIGRpcmVjdCBJL08/IFdlIHdvdWxk IG9ubHkgcHJldGVuZAorCSAqIGRvaW5nIGl0IG5vdywgb2ZjLCBiZWNhdXNlIHdlJ2Qgbm90 IGRvIHBvc2l4X2ZhZHZpc2UoKSwgYnV0IG9uY2UgdGhlIGNvZGUKKwkgKiBzdGFydHMgbG9h ZGluZyBpbnRvIHNoYXJlZCBidWZmZXJzLCB0aGF0J2Qgd29yay4KKwkgKi8KKwlpZiAoKGlv X2RpcmVjdF9mbGFncyAmIElPX0RJUkVDVF9EQVRBKSA9PSAwKQorCQlyZXR1cm4gMDsKKwor CS8qIGRpc2FibGUgcHJlZmV0Y2hpbmcgZm9yIGN1cnNvcnMgZXRjLiAqLworCWlmICghYWxs b3dfcHJlZmV0Y2gpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBEZXRlcm1pbmUgbnVtYmVy IG9mIGhlYXAgcGFnZXMgdG8gcHJlZmV0Y2ggZm9yIHRoaXMgaW5kZXguIFRoaXMgaXMKKwkg KiBlc3NlbnRpYWxseSBqdXN0IGVmZmVjdGl2ZV9pb19jb25jdXJyZW5jeSBmb3IgdGhlIHRh YmxlIChvciB0aGUKKwkgKiB0YWJsZXNwYWNlIGl0J3MgaW4pLgorCSAqCisJICogWFhYIFNo b3VsZCB0aGlzIGFsc28gbG9vayBhdCBwbGFuLnBsYW5fcm93cyBhbmQgbWF5YmUgY2FwIHRo ZSB0YXJnZXQKKwkgKiB0byB0aGF0PyBQb2ludGxlc3MgdG8gcHJlZmV0Y2ggbW9yZSB0aGFu IHdlIGV4cGVjdCB0byB1c2UuIE9yIG1heWJlCisJICoganVzdCByZXNldCB0byB0aGF0IHZh bHVlIGR1cmluZyBwcmVmZXRjaGluZywgYWZ0ZXIgcmVhZGluZyB0aGUgbmV4dAorCSAqIGlu ZGV4IHBhZ2UgKG9yIHJhdGhlciBhZnRlciByZXNjYW4pPworCSAqCisJICogWFhYIE1heWJl IHJlZHVjZSB0aGUgdmFsdWUgd2l0aCBwYXJhbGxlbCB3b3JrZXJzPworCSAqLworCXJldHVy biBNaW4oZ2V0X3RhYmxlc3BhY2VfaW9fY29uY3VycmVuY3koaGVhcFJlbC0+cmRfcmVsLT5y ZWx0YWJsZXNwYWNlKSwKKwkJCSAgIHBsYW5fcm93cyk7Cit9CisKK0luZGV4UHJlZmV0Y2gg KgorSW5kZXhQcmVmZXRjaEFsbG9jKEluZGV4UHJlZmV0Y2hOZXh0Q0IgbmV4dF9jYiwgaW50 IHByZWZldGNoX21heCwgdm9pZCAqZGF0YSkKK3sKKwlJbmRleFByZWZldGNoICpwcmVmZXRj aCA9IHBhbGxvYzAoc2l6ZW9mKEluZGV4UHJlZmV0Y2gpKTsKKworCXByZWZldGNoLT5xdWV1 ZUluZGV4ID0gMDsKKwlwcmVmZXRjaC0+cXVldWVTdGFydCA9IDA7CisJcHJlZmV0Y2gtPnF1 ZXVlRW5kID0gMDsKKworCXByZWZldGNoLT5wcmVmZXRjaFRhcmdldCA9IDA7CisJcHJlZmV0 Y2gtPnByZWZldGNoTWF4VGFyZ2V0ID0gcHJlZmV0Y2hfbWF4OworCisJLyoKKwkgKiBDdXN0 b21pemUgdGhlIHByZWZldGNoIHRvIGFsc28gY2hlY2sgdmlzaWJpbGl0eSBtYXAgYW5kIGtl ZXAKKwkgKiB0aGUgcmVzdWx0IHNvIHRoYXQgSU9TIGRvZXMgbm90IG5lZWQgdG8gcmVwZWF0 IGl0LgorCSAqLworCXByZWZldGNoLT5uZXh0X2NiID0gbmV4dF9jYjsKKwlwcmVmZXRjaC0+ ZGF0YSA9IGRhdGE7CisKKwlyZXR1cm4gcHJlZmV0Y2g7Cit9CisKK0luZGV4UHJlZmV0Y2hF bnRyeSAqCitJbmRleFByZWZldGNoTmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4UHJl ZmV0Y2ggKnByZWZldGNoLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwkvKiBEbyBw cmVmZXRjaGluZyAoaWYgcmVxdWVzdGVkL2VuYWJsZWQpLiAqLworCWluZGV4X3ByZWZldGNo X3RpZHMoc2NhbiwgcHJlZmV0Y2gsIGRpcmVjdGlvbik7CisKKwkvKiBSZWFkIHRoZSBUSUQg ZnJvbSB0aGUgcXVldWUgKG9yIGRpcmVjdGx5IGZyb20gdGhlIGluZGV4KS4gKi8KKwlyZXR1 cm4gaW5kZXhfcHJlZmV0Y2hfZ2V0X2VudHJ5KHNjYW4sIHByZWZldGNoLCBkaXJlY3Rpb24p OwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMg Yi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcuYwppbmRleCAwYTEzNmRiNjcx Mi4uMmZhMjExOGYzYzIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJ bmRleGluZy5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jCkBA IC03NzcsMTEgKzc3Nyw3IEBAIHJldHJ5OgogCWluZGV4X3NjYW4gPSBpbmRleF9iZWdpbnNj YW4oaGVhcCwgaW5kZXgsICZEaXJ0eVNuYXBzaG90LCBpbmRua2V5YXR0cywgMCk7CiAJaW5k ZXhfcmVzY2FuKGluZGV4X3NjYW4sIHNjYW5rZXlzLCBpbmRua2V5YXR0cywgTlVMTCwgMCk7 CiAKLQkvKgotCSAqIFhYWCBXb3VsZCBiZSBuaWNlIHRvIGFsc28gYmVuZWZpdCBmcm9tIHBy ZWZldGNoaW5nIGhlcmUuIEFsbCB3ZSBuZWVkIHRvCi0JICogZG8gaXMgaW5zdGFudGlhdGUg dGhlIHByZWZldGNoZXIsIEkgZ3Vlc3MuCi0JICovCi0Jd2hpbGUgKGluZGV4X2dldG5leHRf c2xvdChpbmRleF9zY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgZXhpc3Rpbmdfc2xvdCwg TlVMTCkpCisJd2hpbGUgKGluZGV4X2dldG5leHRfc2xvdChpbmRleF9zY2FuLCBGb3J3YXJk U2NhbkRpcmVjdGlvbiwgZXhpc3Rpbmdfc2xvdCkpCiAJewogCQlUcmFuc2FjdGlvbklkIHh3 YWl0OwogCQlYTFRXX09wZXIJcmVhc29uX3dhaXQ7CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9leGVjdXRvci9leGVjUmVwbGljYXRpb24uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNSZXBsaWNhdGlvbi5jCmluZGV4IDk0OThiMDBmYTY0Li44MWYyNzA0MmJjNCAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMKKysrIGIvc3Jj L2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMKQEAgLTIxMiwxMyArMjEyLDgg QEAgcmV0cnk6CiAKIAlpbmRleF9yZXNjYW4oc2Nhbiwgc2tleSwgc2tleV9hdHRvZmYsIE5V TEwsIDApOwogCi0JLyoKLQkgKiBUcnkgdG8gZmluZCB0aGUgdHVwbGUKLQkgKgotCSAqIFhY WCBXb3VsZCBiZSBuaWNlIHRvIGFsc28gYmVuZWZpdCBmcm9tIHByZWZldGNoaW5nIGhlcmUu IEFsbCB3ZSBuZWVkIHRvCi0JICogZG8gaXMgaW5zdGFudGlhdGUgdGhlIHByZWZldGNoZXIs IEkgZ3Vlc3MuCi0JICovCi0Jd2hpbGUgKGluZGV4X2dldG5leHRfc2xvdChzY2FuLCBGb3J3 YXJkU2NhbkRpcmVjdGlvbiwgb3V0c2xvdCwgTlVMTCkpCisJLyogVHJ5IHRvIGZpbmQgdGhl IHR1cGxlICovCisJd2hpbGUgKGluZGV4X2dldG5leHRfc2xvdChzY2FuLCBGb3J3YXJkU2Nh bkRpcmVjdGlvbiwgb3V0c2xvdCkpCiAJewogCQkvKgogCQkgKiBBdm9pZCBleHBlbnNpdmUg ZXF1YWxpdHkgY2hlY2sgaWYgdGhlIGluZGV4IGlzIHByaW1hcnkga2V5IG9yCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jIGIvc3JjL2Jh Y2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYwppbmRleCBhN2VhZGFmM2RiMi4u YWY3ZGQzNjRmMzMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRl eG9ubHlzY2FuLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNj YW4uYwpAQCAtNDMsMTIgKzQzLDEzIEBACiAjaW5jbHVkZSAic3RvcmFnZS9wcmVkaWNhdGUu aCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5o IgotI2luY2x1ZGUgInV0aWxzL3NwY2NhY2hlLmgiCiAKIHN0YXRpYyBUdXBsZVRhYmxlU2xv dCAqSW5kZXhPbmx5TmV4dChJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUpOwogc3RhdGljIHZv aWQgU3RvcmVJbmRleFR1cGxlKFR1cGxlVGFibGVTbG90ICpzbG90LCBJbmRleFR1cGxlIGl0 dXAsCiAJCQkJCQkJVHVwbGVEZXNjIGl0dXBkZXNjKTsKLQorc3RhdGljIEluZGV4UHJlZmV0 Y2hFbnRyeSAqSW5kZXhPbmx5UHJlZmV0Y2hOZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJ CQkJCQkJCQkJCSBJbmRleFByZWZldGNoICpwcmVmZXRjaCwKKwkJCQkJCQkJCQkJCSBTY2Fu RGlyZWN0aW9uIGRpcmVjdGlvbik7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCQlJbmRleE9ubHlO ZXh0CkBAIC02Niw3ICs2Nyw3IEBAIEluZGV4T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRl ICpub2RlKQogCVR1cGxlVGFibGVTbG90ICpzbG90OwogCUl0ZW1Qb2ludGVyIHRpZDsKIAlJ bmRleFByZWZldGNoICAqcHJlZmV0Y2g7Ci0JYm9vbAkJCWFsbF92aXNpYmxlOworCUluZGV4 UHJlZmV0Y2hFbnRyeSAqZW50cnk7CiAKIAkvKgogCSAqIGV4dHJhY3QgbmVjZXNzYXJ5IGlu Zm9ybWF0aW9uIGZyb20gaW5kZXggc2NhbiBub2RlCkBAIC03Niw2ICs3NywxMiBAQCBJbmRl eE9ubHlOZXh0KEluZGV4T25seVNjYW5TdGF0ZSAqbm9kZSkKIAkvKgogCSAqIERldGVybWlu ZSB3aGljaCBkaXJlY3Rpb24gdG8gc2NhbiB0aGUgaW5kZXggaW4gYmFzZWQgb24gdGhlIHBs YW4ncyBzY2FuCiAJICogZGlyZWN0aW9uIGFuZCB0aGUgY3VycmVudCBkaXJlY3Rpb24gb2Yg ZXhlY3V0aW9uLgorCSAqCisJICogWFhYIENvdWxkIHRoaXMgYmUgYW4gaXNzdWUgZm9yIHRo ZSBwcmVmZXRjaGluZz8gV2hhdCBpZiB3ZSBwcmVmZXRjaCBzb21ldGhpbmcKKwkgKiBidXQg dGhlIGRpcmVjdGlvbiBjaGFuZ2VzIGJlZm9yZSB3ZSBnZXQgdG8gdGhlIHJlYWQ/IElmIHRo YXQgY291bGQgaGFwcGVuLAorCSAqIG1heWJlIHdlIHNob3VsZCBkaXNjYXJkIHRoZSBwcmVm ZXRjaGVkIGRhdGEgYW5kIGdvIGJhY2s/IEJ1dCBjYW4gd2UgZXZlbgorCSAqIGRvIHRoYXQs IGlmIHdlIGFscmVhZHkgZmV0Y2hlZCBzb21lIFRJRHMgZnJvbSB0aGUgaW5kZXg/IEkgZG9u J3QgdGhpbmsKKwkgKiBpbmRleG9yZGVyZGlyIGNhbid0IGNoYW5nZSwgYnV0IGVzX2RpcmVj dGlvbiBtYXliZSBjYW4/CiAJICovCiAJZGlyZWN0aW9uID0gU2NhbkRpcmVjdGlvbkNvbWJp bmUoZXN0YXRlLT5lc19kaXJlY3Rpb24sCiAJCQkJCQkJCQkgKChJbmRleE9ubHlTY2FuICop IG5vZGUtPnNzLnBzLnBsYW4pLT5pbmRleG9yZGVyZGlyKTsKQEAgLTExOSwxMCArMTI2LDE1 IEBAIEluZGV4T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCS8qCiAJICog T0ssIG5vdyB0aGF0IHdlIGhhdmUgd2hhdCB3ZSBuZWVkLCBmZXRjaCB0aGUgbmV4dCB0dXBs ZS4KIAkgKi8KLQl3aGlsZSAoKHRpZCA9IGluZGV4X2dldG5leHRfdGlkX3ZtKHNjYW5kZXNj LCBkaXJlY3Rpb24sIHByZWZldGNoLCAmYWxsX3Zpc2libGUpKSAhPSBOVUxMKQorCXdoaWxl ICgoZW50cnkgPSBJbmRleFByZWZldGNoTmV4dChzY2FuZGVzYywgcHJlZmV0Y2gsIGRpcmVj dGlvbikpICE9IE5VTEwpCiAJeworCQlib29sCSAgICphbGxfdmlzaWJsZSA9IE5VTEw7CiAJ CWJvb2wJCXR1cGxlX2Zyb21faGVhcCA9IGZhbHNlOwogCisJCS8qIHVucGFjayB0aGUgZW50 cnkgKi8KKwkJdGlkID0gJmVudHJ5LT50aWQ7CisJCWFsbF92aXNpYmxlID0gKGJvb2wgKikg ZW50cnktPmRhdGE7CS8qIHJlc3VsdCBvZiB2aXNpYmlsaXR5IGNoZWNrICovCisKIAkJQ0hF Q0tfRk9SX0lOVEVSUlVQVFMoKTsKIAogCQkvKgpAQCAtMTYxLDcgKzE3Myw3IEBAIEluZGV4 T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCQkgKgogCQkgKiBYWFggU2tp cCBpZiB3ZSBhbHJlYWR5IGtub3cgdGhlIHBhZ2UgaXMgYWxsIHZpc2libGUgZnJvbSBwcmVm ZXRjaGVyLgogCQkgKi8KLQkJaWYgKCFhbGxfdmlzaWJsZSAmJgorCQlpZiAoIShhbGxfdmlz aWJsZSAmJiAqYWxsX3Zpc2libGUpICYmCiAJCQkhVk1fQUxMX1ZJU0lCTEUoc2NhbmRlc2Mt PmhlYXBSZWxhdGlvbiwKIAkJCQkJCQlJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCks CiAJCQkJCQkJJm5vZGUtPmlvc3NfVk1CdWZmZXIpKQpAQCAtMzY3LDYgKzM3OSw5IEBAIEV4 ZWNSZVNjYW5JbmRleE9ubHlTY2FuKEluZGV4T25seVNjYW5TdGF0ZSAqbm9kZSkKIAkJcHJl ZmV0Y2gtPnF1ZXVlSW5kZXggPSAwOwogCQlwcmVmZXRjaC0+cXVldWVTdGFydCA9IDA7CiAJ CXByZWZldGNoLT5xdWV1ZUVuZCA9IDA7CisKKwkJcHJlZmV0Y2gtPnByZWZldGNoRG9uZSA9 IGZhbHNlOworCQlwcmVmZXRjaC0+cHJlZmV0Y2hUYXJnZXQgPSAwOwogCX0KIAogCUV4ZWNT Y2FuUmVTY2FuKCZub2RlLT5zcyk7CkBAIC00MDEsNiArNDE2LDggQEAgRXhlY0VuZEluZGV4 T25seVNjYW4oSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCXsKIAkJSW5kZXhQcmVmZXRj aCAqcHJlZmV0Y2ggPSBub2RlLT5pb3NzX3ByZWZldGNoOwogCisJCUJ1ZmZlciAqYnVmZmVy ID0gKEJ1ZmZlciAqKSBwcmVmZXRjaC0+ZGF0YTsKKwogCQkvKiBYWFggc29tZSBkZWJ1ZyBp bmZvICovCiAJCWVsb2coTE9HLCAiaW5kZXggcHJlZmV0Y2ggc3RhdHM6IHJlcXVlc3RzICIg VUlOVDY0X0ZPUk1BVCAiIHByZWZldGNoZXMgIiBVSU5UNjRfRk9STUFUICIgKCVmKSBza2lw IGNhY2hlZCAiIFVJTlQ2NF9GT1JNQVQgIiBzZXF1ZW50aWFsICIgVUlOVDY0X0ZPUk1BVCwK IAkJCSBwcmVmZXRjaC0+Y291bnRBbGwsCkBAIC00MDksMTAgKzQyNiwxMCBAQCBFeGVjRW5k SW5kZXhPbmx5U2NhbihJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUpCiAJCQkgcHJlZmV0Y2gt PmNvdW50U2tpcENhY2hlZCwKIAkJCSBwcmVmZXRjaC0+Y291bnRTa2lwU2VxdWVudGlhbCk7 CiAKLQkJaWYgKHByZWZldGNoLT52bUJ1ZmZlciAhPSBJbnZhbGlkQnVmZmVyKQorCQlpZiAo KmJ1ZmZlciAhPSBJbnZhbGlkQnVmZmVyKQogCQl7Ci0JCQlSZWxlYXNlQnVmZmVyKHByZWZl dGNoLT52bUJ1ZmZlcik7Ci0JCQlwcmVmZXRjaC0+dm1CdWZmZXIgPSBJbnZhbGlkQnVmZmVy OworCQkJUmVsZWFzZUJ1ZmZlcigqYnVmZmVyKTsKKwkJCSpidWZmZXIgPSBJbnZhbGlkQnVm ZmVyOwogCQl9CiAJfQogCkBAIC01MTIsNiArNTI5LDcgQEAgRXhlY0luaXRJbmRleE9ubHlT Y2FuKEluZGV4T25seVNjYW4gKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQog CVJlbGF0aW9uCWN1cnJlbnRSZWxhdGlvbjsKIAlMT0NLTU9ERQlsb2NrbW9kZTsKIAlUdXBs ZURlc2MJdHVwRGVzYzsKKwlpbnQJCQlwcmVmZXRjaF9tYXg7CiAKIAkvKgogCSAqIGNyZWF0 ZSBzdGF0ZSBzdHJ1Y3R1cmUKQEAgLTY0MSw2MSArNjU5LDMzIEBAIEV4ZWNJbml0SW5kZXhP bmx5U2NhbihJbmRleE9ubHlTY2FuICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFn cykKIAl9CiAKIAkvKgotCSAqIEFsc28gaW5pdGlhbGl6ZSBpbmRleCBwcmVmZXRjaGVyLgor CSAqIEFsc28gaW5pdGlhbGl6ZSBpbmRleCBwcmVmZXRjaGVyLiBXZSBkbyB0aGlzIGV2ZW4g d2hlbiBwcmVmZXRjaGluZyBpcworCSAqIG5vdCBkb25lIChzZWUgaW5kZXhfaGVhcF9wcmVm ZXRjaF9jYWxjdWxhdGVfdGFyZ2V0KSwgYmVjYXVzZSB0aGUKKwkgKiBwcmVmZXRjaGVyIGlz IHVzZWQgZm9yIGFsbCBpbmRleCByZWFkcy4KKwkgKgorCSAqIFdlIHJlYWNoIGhlcmUgaWYg dGhlIGluZGV4IG9ubHkgc2NhbiBpcyBub3QgcGFyYWxsZWwsIG9yIGlmIHdlJ3JlCisJICog c2VyaWFsbHkgZXhlY3V0aW5nIGFuIGluZGV4IG9ubHkgc2NhbiB0aGF0IHdhcyBwbGFubmVk IHRvIGJlCisJICogcGFyYWxsZWwuCiAJICoKLQkgKiBYWFggTm8gcHJlZmV0Y2hpbmcgZm9y IGRpcmVjdCBJL08uCisJICogWFhYIE1heWJlIHdlIHNob3VsZCBlbmFibGUgcHJlZmV0Y2hp bmcsIGJ1dCBwcmVmZXRjaCBvbmx5IHBhZ2VzIHRoYXQKKwkgKiBhcmUgbm90IGFsbC12aXNp YmxlIChidXQgY2hlY2tpbmcgdGhhdCBmcm9tIHRoZSBpbmRleCBjb2RlIHNlZW1zIGxpa2UK KwkgKiBhIHZpb2xhdGlvbiBvZiBsYXllcmluZyBldGMpLgorCSAqCisJICogWFhYIFRoaXMg bWlnaHQgbGVhZCB0byBJT1MgYmVpbmcgc2xvd2VyIHRoYW4gcGxhaW4gaW5kZXggc2Nhbiwg aWYgdGhlCisJICogdGFibGUgaGFzIGEgbG90IG9mIHBhZ2VzIHRoYXQgbmVlZCByZWNoZWNr LgorCSAqCisJICogUmVtZW1iZXIgdGhpcyBpcyBpbmRleC1vbmx5IHNjYW4sIGJlY2F1c2Ug b2YgcHJlZmV0Y2hpbmcuIE5vdCB0aGUgbW9zdAorCSAqIGVsZWdhbnQgd2F5IHRvIHBhc3Mg dGhpcyBpbmZvLgorCSAqCisJICogWFhYIE1heWJlIHJlbmFtZSB0aGUgb2JqZWN0IHRvICJp bmRleCByZWFkZXIiIG9yIHNvbWV0aGluZz8KIAkgKi8KLQlpZiAoKGlvX2RpcmVjdF9mbGFn cyAmIElPX0RJUkVDVF9EQVRBKSA9PSAwKQotCXsKLQkJaW50CQkJcHJlZmV0Y2hfbWF4Owot CQlSZWxhdGlvbiAgICBoZWFwUmVsID0gaW5kZXhzdGF0ZS0+c3Muc3NfY3VycmVudFJlbGF0 aW9uOwotCi0JCS8qCi0JCSAqIERldGVybWluZSBudW1iZXIgb2YgaGVhcCBwYWdlcyB0byBw cmVmZXRjaCBmb3IgdGhpcyBpbmRleC4gVGhpcyBpcwotCQkgKiBlc3NlbnRpYWxseSBqdXN0 IGVmZmVjdGl2ZV9pb19jb25jdXJyZW5jeSBmb3IgdGhlIHRhYmxlIChvciB0aGUKLQkJICog dGFibGVzcGFjZSBpdCdzIGluKS4KLQkJICoKLQkJICogWFhYIFNob3VsZCB0aGlzIGFsc28g bG9vayBhdCBwbGFuLnBsYW5fcm93cyBhbmQgbWF5YmUgY2FwIHRoZSB0YXJnZXQKLQkJICog dG8gdGhhdD8gUG9pbnRsZXNzIHRvIHByZWZldGNoIG1vcmUgdGhhbiB3ZSBleHBlY3QgdG8g dXNlLiBPciBtYXliZQotCQkgKiBqdXN0IHJlc2V0IHRvIHRoYXQgdmFsdWUgZHVyaW5nIHBy ZWZldGNoaW5nLCBhZnRlciByZWFkaW5nIHRoZSBuZXh0Ci0JCSAqIGluZGV4IHBhZ2UgKG9y IHJhdGhlciBhZnRlciByZXNjYW4pPwotCQkgKgotCQkgKiBYWFggTWF5YmUgcmVkdWNlIHRo ZSB2YWx1ZSB3aXRoIHBhcmFsbGVsIHdvcmtlcnM/Ci0JCSAqLwotCQlwcmVmZXRjaF9tYXgg PSBNaW4oZ2V0X3RhYmxlc3BhY2VfaW9fY29uY3VycmVuY3koaGVhcFJlbC0+cmRfcmVsLT5y ZWx0YWJsZXNwYWNlKSwKLQkJCQkJCSAgIGluZGV4c3RhdGUtPnNzLnBzLnBsYW4tPnBsYW5f cm93cyk7Ci0KLQkJLyoKLQkJICogV2UgcmVhY2ggaGVyZSBpZiB0aGUgaW5kZXggb25seSBz Y2FuIGlzIG5vdCBwYXJhbGxlbCwgb3IgaWYgd2UncmUKLQkJICogc2VyaWFsbHkgZXhlY3V0 aW5nIGFuIGluZGV4IG9ubHkgc2NhbiB0aGF0IHdhcyBwbGFubmVkIHRvIGJlCi0JCSAqIHBh cmFsbGVsLgotCQkgKgotCQkgKiBYWFggTWF5YmUgd2Ugc2hvdWxkIGVuYWJsZSBwcmVmZXRj aGluZywgYnV0IHByZWZldGNoIG9ubHkgcGFnZXMgdGhhdAotCQkgKiBhcmUgbm90IGFsbC12 aXNpYmxlIChidXQgY2hlY2tpbmcgdGhhdCBmcm9tIHRoZSBpbmRleCBjb2RlIHNlZW1zIGxp a2UKLQkJICogYSB2aW9sYXRpb24gb2YgbGF5ZXJpbmcgZXRjKS4KLQkJICoKLQkJICogWFhY IFRoaXMgbWlnaHQgbGVhZCB0byBJT1MgYmVpbmcgc2xvd2VyIHRoYW4gcGxhaW4gaW5kZXgg c2NhbiwgaWYgdGhlCi0JCSAqIHRhYmxlIGhhcyBhIGxvdCBvZiBwYWdlcyB0aGF0IG5lZWQg cmVjaGVjay4KLQkJICoKLQkJICogUmVtZW1iZXIgdGhpcyBpcyBpbmRleC1vbmx5IHNjYW4s IGJlY2F1c2Ugb2YgcHJlZmV0Y2hpbmcuIE5vdCB0aGUgbW9zdAotCQkgKiBlbGVnYW50IHdh eSB0byBwYXNzIHRoaXMgaW5mby4KLQkJICovCi0JCWlmIChwcmVmZXRjaF9tYXggPiAwKQot CQl7Ci0JCQlJbmRleFByZWZldGNoICpwcmVmZXRjaCA9IHBhbGxvYzAoc2l6ZW9mKEluZGV4 UHJlZmV0Y2gpKTsKKwlwcmVmZXRjaF9tYXggPSBpbmRleF9oZWFwX3ByZWZldGNoX3Rhcmdl dChpbmRleHN0YXRlLT5zcy5zc19jdXJyZW50UmVsYXRpb24sCisJCQkJCQkJCQkJCSAgaW5k ZXhzdGF0ZS0+c3MucHMucGxhbi0+cGxhbl9yb3dzLAorCQkJCQkJCQkJCQkgIG5vZGUtPmFs bG93X3ByZWZldGNoKTsKIAotCQkJcHJlZmV0Y2gtPnF1ZXVlSW5kZXggPSAwOwotCQkJcHJl ZmV0Y2gtPnF1ZXVlU3RhcnQgPSAwOwotCQkJcHJlZmV0Y2gtPnF1ZXVlRW5kID0gMDsKLQot CQkJcHJlZmV0Y2gtPnByZWZldGNoVGFyZ2V0ID0gMDsKLQkJCXByZWZldGNoLT5wcmVmZXRj aE1heFRhcmdldCA9IHByZWZldGNoX21heDsKLQkJCXByZWZldGNoLT52bUJ1ZmZlciA9IElu dmFsaWRCdWZmZXI7Ci0JCQlwcmVmZXRjaC0+aW5kZXhvbmx5ID0gdHJ1ZTsKLQotCQkJaW5k ZXhzdGF0ZS0+aW9zc19wcmVmZXRjaCA9IHByZWZldGNoOwotCQl9Ci0JfQorCWluZGV4c3Rh dGUtPmlvc3NfcHJlZmV0Y2ggPSBJbmRleFByZWZldGNoQWxsb2MoSW5kZXhPbmx5UHJlZmV0 Y2hOZXh0LAorCQkJCQkJCQkJCQkJICAgcHJlZmV0Y2hfbWF4LAorCQkJCQkJCQkJCQkJICAg cGFsbG9jMChzaXplb2YoQnVmZmVyKSkpOwogCiAJLyoKIAkgKiBhbGwgZG9uZS4KQEAgLTgw OCwzICs3OTgsNDIgQEAgRXhlY0luZGV4T25seVNjYW5Jbml0aWFsaXplV29ya2VyKEluZGV4 T25seVNjYW5TdGF0ZSAqbm9kZSwKIAkJCQkJIG5vZGUtPmlvc3NfU2NhbktleXMsIG5vZGUt Pmlvc3NfTnVtU2NhbktleXMsCiAJCQkJCSBub2RlLT5pb3NzX09yZGVyQnlLZXlzLCBub2Rl LT5pb3NzX051bU9yZGVyQnlLZXlzKTsKIH0KKworLyoKKyAqIFdoZW4gcHJlZmV0Y2hpbmcg Zm9yIElPUywgd2Ugd2FudCB0byBvbmx5IHByZWZldGNoIHBhZ2VzIHRoYXQgYXJlIG5vdAor ICogbWFya2VkIGFzIGFsbC12aXNpYmxlIChiZWNhdXNlIG5vdCBmZXRjaGluZyBhbGwtdmlz aWJsZSBwYWdlcyBpcyB0aGUKKyAqIHBvaW50IG9mIElPUykuCisgKgorICogVGhlIGJ1ZmZl ciB1c2VkIGJ5IHRoZSBWTV9BTExfVklTSUJMRSgpIGNoZWNrIGlzIHJldXNlZCwgc2ltaWxh cmx5IHRvCisgKiBpb3NzX1ZNQnVmZmVyIChtYXliZSB3ZSBjb3VsZC9zaG91bGQgdXNlIGl0 IGhlcmUgdG9vPykuIFdlIGFsc28ga2VlcAorICogdGhlIHJlc3VsdCBvZiB0aGUgYWxsX3Zp c2libGUgZmxhZywgc28gdGhhdCB0aGUgbWFpbiBsb29wIGRvZXMgbm90IHRvCisgKiBkbyBp dCBhZ2Fpbi4KKyAqLworc3RhdGljIEluZGV4UHJlZmV0Y2hFbnRyeSAqCitJbmRleE9ubHlQ cmVmZXRjaE5leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFByZWZldGNoICpwcmVmZXRj aCwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJSW5kZXhQcmVmZXRjaEVudHJ5ICpl bnRyeSA9IE5VTEw7CisJSXRlbVBvaW50ZXIJCQl0aWQ7CisKKwlpZiAoKHRpZCA9IGluZGV4 X2dldG5leHRfdGlkKHNjYW4sIGRpcmVjdGlvbikpICE9IE5VTEwpCisJeworCQlCbG9ja051 bWJlcglibGtubyA9IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKTsKKworCQlib29s CWFsbF92aXNpYmxlID0gVk1fQUxMX1ZJU0lCTEUoc2Nhbi0+aGVhcFJlbGF0aW9uLAorCQkJ CQkJCQkJCQkgYmxrbm8sCisJCQkJCQkJCQkJCSAoQnVmZmVyICopIHByZWZldGNoLT5kYXRh KTsKKworCQllbnRyeSA9IHBhbGxvYzAoc2l6ZW9mKEluZGV4UHJlZmV0Y2hFbnRyeSkpOwor CisJCWVudHJ5LT50aWQgPSAqdGlkOworCisJCS8qIHByZWZldGNoIG9ubHkgaWYgbm90IGFs bCB2aXNpYmxlICovCisJCWVudHJ5LT5wcmVmZXRjaCA9ICFhbGxfdmlzaWJsZTsKKworCQkv KiBzdG9yZSB0aGUgYWxsX3Zpc2libGUgZmxhZyBpbiB0aGUgcHJpdmF0ZSBwYXJ0IG9mIHRo ZSBlbnRyeSAqLworCQllbnRyeS0+ZGF0YSA9IHBhbGxvYyhzaXplb2YoYm9vbCkpOworCQkq KGJvb2wgKikgZW50cnktPmRhdGEgPSBhbGxfdmlzaWJsZTsKKwl9CisKKwlyZXR1cm4gZW50 cnk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhzY2Fu LmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhzY2FuLmMKaW5kZXggYjMyODJl YzVhNzUuLmJkNjUzMzcyNzBjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9u b2RlSW5kZXhzY2FuLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nh bi5jCkBAIC00Myw3ICs0Myw2IEBACiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAj aW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKLSNp bmNsdWRlICJ1dGlscy9zcGNjYWNoZS5oIgogCiAvKgogICogV2hlbiBhbiBvcmRlcmluZyBv cGVyYXRvciBpcyB1c2VkLCB0dXBsZXMgZmV0Y2hlZCBmcm9tIHRoZSBpbmRleCB0aGF0CkBA IC03MCw2ICs2OSw5IEBAIHN0YXRpYyB2b2lkIHJlb3JkZXJxdWV1ZV9wdXNoKEluZGV4U2Nh blN0YXRlICpub2RlLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKIAkJCQkJCQkgIERhdHVtICpv cmRlcmJ5dmFscywgYm9vbCAqb3JkZXJieW51bGxzKTsKIHN0YXRpYyBIZWFwVHVwbGUgcmVv cmRlcnF1ZXVlX3BvcChJbmRleFNjYW5TdGF0ZSAqbm9kZSk7CiAKK3N0YXRpYyBJbmRleFBy ZWZldGNoRW50cnkgKkluZGV4U2NhblByZWZldGNoTmV4dChJbmRleFNjYW5EZXNjIHNjYW4s CisJCQkJCQkJCQkJCQkgSW5kZXhQcmVmZXRjaCAqcHJlZmV0Y2gsCisJCQkJCQkJCQkJCQkg U2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgkJSW5kZXhO ZXh0CkBAIC04Nyw2ICs4OSw3IEBAIEluZGV4TmV4dChJbmRleFNjYW5TdGF0ZSAqbm9kZSkK IAlJbmRleFNjYW5EZXNjIHNjYW5kZXNjOwogCVR1cGxlVGFibGVTbG90ICpzbG90OwogCUlu ZGV4UHJlZmV0Y2ggICpwcmVmZXRjaDsKKwlJbmRleFByZWZldGNoRW50cnkgICplbnRyeTsK IAogCS8qCiAJICogZXh0cmFjdCBuZWNlc3NhcnkgaW5mb3JtYXRpb24gZnJvbSBpbmRleCBz Y2FuIG5vZGUKQEAgLTEzMSwxMCArMTM0LDE5IEBAIEluZGV4TmV4dChJbmRleFNjYW5TdGF0 ZSAqbm9kZSkKIAkvKgogCSAqIG9rLCBub3cgdGhhdCB3ZSBoYXZlIHdoYXQgd2UgbmVlZCwg ZmV0Y2ggdGhlIG5leHQgdHVwbGUuCiAJICovCi0Jd2hpbGUgKGluZGV4X2dldG5leHRfc2xv dChzY2FuZGVzYywgZGlyZWN0aW9uLCBzbG90LCBwcmVmZXRjaCkpCisJd2hpbGUgKChlbnRy eSA9IEluZGV4UHJlZmV0Y2hOZXh0KHNjYW5kZXNjLCBwcmVmZXRjaCwgZGlyZWN0aW9uKSkg IT0gTlVMTCkKIAl7CiAJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CiAKKwkJLyoKKwkJICog RmV0Y2ggdGhlIG5leHQgKG9yIG9ubHkpIHZpc2libGUgaGVhcCB0dXBsZSBmb3IgdGhpcyBp bmRleCBlbnRyeS4KKwkJICogSWYgd2UgZG9uJ3QgZmluZCBhbnl0aGluZywgbG9vcCBhcm91 bmQgYW5kIGdyYWIgdGhlIG5leHQgVElEIGZyb20KKwkJICogdGhlIGluZGV4LgorCQkgKi8K KwkJQXNzZXJ0KEl0ZW1Qb2ludGVySXNWYWxpZCgmc2NhbmRlc2MtPnhzX2hlYXB0aWQpKTsK KwkJaWYgKCFpbmRleF9mZXRjaF9oZWFwKHNjYW5kZXNjLCBzbG90KSkKKwkJCWNvbnRpbnVl OworCiAJCS8qCiAJCSAqIElmIHRoZSBpbmRleCB3YXMgbG9zc3ksIHdlIGhhdmUgdG8gcmVj aGVjayB0aGUgaW5kZXggcXVhbHMgdXNpbmcKIAkJICogdGhlIGZldGNoZWQgdHVwbGUuCkBA IC0xODAsNyArMTkyLDYgQEAgSW5kZXhOZXh0V2l0aFJlb3JkZXIoSW5kZXhTY2FuU3RhdGUg Km5vZGUpCiAJRGF0dW0JICAgKmxhc3RmZXRjaGVkX3ZhbHM7CiAJYm9vbAkgICAqbGFzdGZl dGNoZWRfbnVsbHM7CiAJaW50CQkJY21wOwotCUluZGV4UHJlZmV0Y2ggKnByZWZldGNoOwog CiAJZXN0YXRlID0gbm9kZS0+c3MucHMuc3RhdGU7CiAKQEAgLTE5Nyw3ICsyMDgsNiBAQCBJ bmRleE5leHRXaXRoUmVvcmRlcihJbmRleFNjYW5TdGF0ZSAqbm9kZSkKIAlBc3NlcnQoU2Nh bkRpcmVjdGlvbklzRm9yd2FyZChlc3RhdGUtPmVzX2RpcmVjdGlvbikpOwogCiAJc2NhbmRl c2MgPSBub2RlLT5pc3NfU2NhbkRlc2M7Ci0JcHJlZmV0Y2ggPSBub2RlLT5pc3NfcHJlZmV0 Y2g7CiAJZWNvbnRleHQgPSBub2RlLT5zcy5wcy5wc19FeHByQ29udGV4dDsKIAlzbG90ID0g bm9kZS0+c3Muc3NfU2NhblR1cGxlU2xvdDsKIApAQCAtMjY0LDcgKzI3NCw3IEBAIEluZGV4 TmV4dFdpdGhSZW9yZGVyKEluZGV4U2NhblN0YXRlICpub2RlKQogCQkgKiBGZXRjaCBuZXh0 IHR1cGxlIGZyb20gdGhlIGluZGV4LgogCQkgKi8KIG5leHRfaW5kZXh0dXBsZToKLQkJaWYg KCFpbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbmRlc2MsIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBz bG90LCBwcmVmZXRjaCkpCisJCWlmICghaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW5kZXNjLCBG b3J3YXJkU2NhbkRpcmVjdGlvbiwgc2xvdCkpCiAJCXsKIAkJCS8qCiAJCQkgKiBObyBtb3Jl IHR1cGxlcyBmcm9tIHRoZSBpbmRleC4gIEJ1dCB3ZSBzdGlsbCBuZWVkIHRvIGRyYWluIGFu eQpAQCAtNjAxLDYgKzYxMSw5IEBAIEV4ZWNSZVNjYW5JbmRleFNjYW4oSW5kZXhTY2FuU3Rh dGUgKm5vZGUpCiAJCXByZWZldGNoLT5xdWV1ZUluZGV4ID0gMDsKIAkJcHJlZmV0Y2gtPnF1 ZXVlU3RhcnQgPSAwOwogCQlwcmVmZXRjaC0+cXVldWVFbmQgPSAwOworCisJCXByZWZldGNo LT5wcmVmZXRjaERvbmUgPSBmYWxzZTsKKwkJcHJlZmV0Y2gtPnByZWZldGNoVGFyZ2V0ID0g MDsKIAl9CiAKIAlFeGVjU2NhblJlU2Nhbigmbm9kZS0+c3MpOwpAQCAtOTE3LDYgKzkzMCw3 IEBAIEV4ZWNJbml0SW5kZXhTY2FuKEluZGV4U2NhbiAqbm9kZSwgRVN0YXRlICplc3RhdGUs IGludCBlZmxhZ3MpCiAJSW5kZXhTY2FuU3RhdGUgKmluZGV4c3RhdGU7CiAJUmVsYXRpb24J Y3VycmVudFJlbGF0aW9uOwogCUxPQ0tNT0RFCWxvY2ttb2RlOworCWludAkJCXByZWZldGNo X21heDsKIAogCS8qCiAJICogY3JlYXRlIHN0YXRlIHN0cnVjdHVyZQpAQCAtMTA5NSw0MyAr MTEwOSwzMyBAQCBFeGVjSW5pdEluZGV4U2NhbihJbmRleFNjYW4gKm5vZGUsIEVTdGF0ZSAq ZXN0YXRlLCBpbnQgZWZsYWdzKQogCX0KIAogCS8qCi0JICogQWxzbyBpbml0aWFsaXplIGlu ZGV4IHByZWZldGNoZXIuCisJICogQWxzbyBpbml0aWFsaXplIGluZGV4IHByZWZldGNoZXIu IFdlIGRvIHRoaXMgZXZlbiB3aGVuIHByZWZldGNoaW5nIGlzCisJICogbm90IGRvbmUgKHNl ZSBpbmRleF9oZWFwX3ByZWZldGNoX2NhbGN1bGF0ZV90YXJnZXQpLCBiZWNhdXNlIHRoZQor CSAqIHByZWZldGNoZXIgaXMgdXNlZCBmb3IgYWxsIGluZGV4IHJlYWRzLgorCSAqCisJICog V2UgcmVhY2ggaGVyZSBpZiB0aGUgaW5kZXggb25seSBzY2FuIGlzIG5vdCBwYXJhbGxlbCwg b3IgaWYgd2UncmUKKwkgKiBzZXJpYWxseSBleGVjdXRpbmcgYW4gaW5kZXggb25seSBzY2Fu IHRoYXQgd2FzIHBsYW5uZWQgdG8gYmUKKwkgKiBwYXJhbGxlbC4KKwkgKgorCSAqIFhYWCBN YXliZSB3ZSBzaG91bGQgZW5hYmxlIHByZWZldGNoaW5nLCBidXQgcHJlZmV0Y2ggb25seSBw YWdlcyB0aGF0CisJICogYXJlIG5vdCBhbGwtdmlzaWJsZSAoYnV0IGNoZWNraW5nIHRoYXQg ZnJvbSB0aGUgaW5kZXggY29kZSBzZWVtcyBsaWtlCisJICogYSB2aW9sYXRpb24gb2YgbGF5 ZXJpbmcgZXRjKS4KIAkgKgotCSAqIFhYWCBObyBwcmVmZXRjaGluZyBmb3IgZGlyZWN0IEkv Ty4KKwkgKiBYWFggVGhpcyBtaWdodCBsZWFkIHRvIElPUyBiZWluZyBzbG93ZXIgdGhhbiBw bGFpbiBpbmRleCBzY2FuLCBpZiB0aGUKKwkgKiB0YWJsZSBoYXMgYSBsb3Qgb2YgcGFnZXMg dGhhdCBuZWVkIHJlY2hlY2suCisJICoKKwkgKiBSZW1lbWJlciB0aGlzIGlzIGluZGV4LW9u bHkgc2NhbiwgYmVjYXVzZSBvZiBwcmVmZXRjaGluZy4gTm90IHRoZSBtb3N0CisJICogZWxl Z2FudCB3YXkgdG8gcGFzcyB0aGlzIGluZm8uCisJICoKKwkgKiBYWFggTWF5YmUgcmVuYW1l IHRoZSBvYmplY3QgdG8gImluZGV4IHJlYWRlciIgb3Igc29tZXRoaW5nPwogCSAqLwotCWlm ICgoaW9fZGlyZWN0X2ZsYWdzICYgSU9fRElSRUNUX0RBVEEpID09IDApCi0JewotCQlpbnQJ cHJlZmV0Y2hfbWF4OwotCQlSZWxhdGlvbiAgICBoZWFwUmVsID0gaW5kZXhzdGF0ZS0+c3Mu c3NfY3VycmVudFJlbGF0aW9uOwotCi0JCS8qCi0JCSAqIERldGVybWluZSBudW1iZXIgb2Yg aGVhcCBwYWdlcyB0byBwcmVmZXRjaCBmb3IgdGhpcyBpbmRleCBzY2FuLiBUaGlzCi0JCSAq IGlzIGVzc2VudGlhbGx5IGp1c3QgZWZmZWN0aXZlX2lvX2NvbmN1cnJlbmN5IGZvciB0aGUg dGFibGUgKG9yIHRoZQotCQkgKiB0YWJsZXNwYWNlIGl0J3MgaW4pLgotCQkgKgotCQkgKiBY WFggU2hvdWxkIHRoaXMgYWxzbyBsb29rIGF0IHBsYW4ucGxhbl9yb3dzIGFuZCBtYXliZSBj YXAgdGhlIHRhcmdldAotCQkgKiB0byB0aGF0PyBQb2ludGxlc3MgdG8gcHJlZmV0Y2ggbW9y ZSB0aGFuIHdlIGV4cGVjdCB0byB1c2UuIE9yIG1heWJlCi0JCSAqIGp1c3QgcmVzZXQgdG8g dGhhdCB2YWx1ZSBkdXJpbmcgcHJlZmV0Y2hpbmcsIGFmdGVyIHJlYWRpbmcgdGhlIG5leHQK LQkJICogaW5kZXggcGFnZSAob3IgcmF0aGVyIGFmdGVyIHJlc2Nhbik/Ci0JCSAqLwotCQlw cmVmZXRjaF9tYXggPSBNaW4oZ2V0X3RhYmxlc3BhY2VfaW9fY29uY3VycmVuY3koaGVhcFJl bC0+cmRfcmVsLT5yZWx0YWJsZXNwYWNlKSwKLQkJCQkJCSAgIGluZGV4c3RhdGUtPnNzLnBz LnBsYW4tPnBsYW5fcm93cyk7Ci0KLQkJaWYgKHByZWZldGNoX21heCA+IDApCi0JCXsKLQkJ CUluZGV4UHJlZmV0Y2ggKnByZWZldGNoID0gcGFsbG9jMChzaXplb2YoSW5kZXhQcmVmZXRj aCkpOwotCi0JCQlwcmVmZXRjaC0+cXVldWVJbmRleCA9IDA7Ci0JCQlwcmVmZXRjaC0+cXVl dWVTdGFydCA9IDA7Ci0JCQlwcmVmZXRjaC0+cXVldWVFbmQgPSAwOworCXByZWZldGNoX21h eCA9IGluZGV4X2hlYXBfcHJlZmV0Y2hfdGFyZ2V0KGluZGV4c3RhdGUtPnNzLnNzX2N1cnJl bnRSZWxhdGlvbiwKKwkJCQkJCQkJCQkJICBpbmRleHN0YXRlLT5zcy5wcy5wbGFuLT5wbGFu X3Jvd3MsCisJCQkJCQkJCQkJCSAgbm9kZS0+YWxsb3dfcHJlZmV0Y2gpOwogCi0JCQlwcmVm ZXRjaC0+cHJlZmV0Y2hUYXJnZXQgPSAwOwotCQkJcHJlZmV0Y2gtPnByZWZldGNoTWF4VGFy Z2V0ID0gcHJlZmV0Y2hfbWF4OwotCQkJcHJlZmV0Y2gtPnZtQnVmZmVyID0gSW52YWxpZEJ1 ZmZlcjsKLQotCQkJaW5kZXhzdGF0ZS0+aXNzX3ByZWZldGNoID0gcHJlZmV0Y2g7Ci0JCX0K LQl9CisJaW5kZXhzdGF0ZS0+aXNzX3ByZWZldGNoID0gSW5kZXhQcmVmZXRjaEFsbG9jKElu ZGV4U2NhblByZWZldGNoTmV4dCwKKwkJCQkJCQkJCQkJCSAgcHJlZmV0Y2hfbWF4LAorCQkJ CQkJCQkJCQkJICBOVUxMKTsKIAogCS8qCiAJICogYWxsIGRvbmUuCkBAIC0xNzk1LDMgKzE3 OTksMjYgQEAgRXhlY0luZGV4U2NhbkluaXRpYWxpemVXb3JrZXIoSW5kZXhTY2FuU3RhdGUg Km5vZGUsCiAJCQkJCSBub2RlLT5pc3NfU2NhbktleXMsIG5vZGUtPmlzc19OdW1TY2FuS2V5 cywKIAkJCQkJIG5vZGUtPmlzc19PcmRlckJ5S2V5cywgbm9kZS0+aXNzX051bU9yZGVyQnlL ZXlzKTsKIH0KKworLyoKKyAqIFhYWCBub3Qgc3VyZSB0aGlzIGNvcnJlY3RseSBoYW5kbGVz IHhzX2hlYXBfY29udGludWUgLSBzZWUgaW5kZXhfZ2V0bmV4dF9zbG90LAorICogbWF5YmUg bm9kZUluZGV4c2NhbiBuZWVkcyB0byBkbyBzb21ldGhpbmcgbW9yZSB0byBoYW5kbGUgdGhp cz8KKyAqLworc3RhdGljIEluZGV4UHJlZmV0Y2hFbnRyeSAqCitJbmRleFNjYW5QcmVmZXRj aE5leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFByZWZldGNoICpwcmVmZXRjaCwgU2Nh bkRpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJSW5kZXhQcmVmZXRjaEVudHJ5ICplbnRyeSA9 IE5VTEw7CisJSXRlbVBvaW50ZXIJCQl0aWQ7CisKKwlpZiAoKHRpZCA9IGluZGV4X2dldG5l eHRfdGlkKHNjYW4sIGRpcmVjdGlvbikpICE9IE5VTEwpCisJeworCQllbnRyeSA9IHBhbGxv YzAoc2l6ZW9mKEluZGV4UHJlZmV0Y2hFbnRyeSkpOworCisJCWVudHJ5LT50aWQgPSAqdGlk OworCisJCS8qIHByZWZldGNoIGFsd2F5cyAqLworCQllbnRyeS0+cHJlZmV0Y2ggPSB0cnVl OworCX0KKworCXJldHVybiBlbnRyeTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29w dGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFu L2NyZWF0ZXBsYW4uYwppbmRleCAzNGNhNmQ0YWMyMS4uMGFiYmNkMzFkZGQgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYworKysgYi9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMKQEAgLTE4NCwxMyArMTg0LDE1 IEBAIHN0YXRpYyBJbmRleFNjYW4gKm1ha2VfaW5kZXhzY2FuKExpc3QgKnFwdGxpc3QsIExp c3QgKnFwcXVhbCwgSW5kZXggc2NhbnJlbGlkLAogCQkJCQkJCQkgT2lkIGluZGV4aWQsIExp c3QgKmluZGV4cXVhbCwgTGlzdCAqaW5kZXhxdWFsb3JpZywKIAkJCQkJCQkJIExpc3QgKmlu ZGV4b3JkZXJieSwgTGlzdCAqaW5kZXhvcmRlcmJ5b3JpZywKIAkJCQkJCQkJIExpc3QgKmlu ZGV4b3JkZXJieW9wcywKLQkJCQkJCQkJIFNjYW5EaXJlY3Rpb24gaW5kZXhzY2FuZGlyKTsK KwkJCQkJCQkJIFNjYW5EaXJlY3Rpb24gaW5kZXhzY2FuZGlyLAorCQkJCQkJCQkgYm9vbCBh bGxvd19wcmVmZXRjaCk7CiBzdGF0aWMgSW5kZXhPbmx5U2NhbiAqbWFrZV9pbmRleG9ubHlz Y2FuKExpc3QgKnFwdGxpc3QsIExpc3QgKnFwcXVhbCwKIAkJCQkJCQkJCQkgSW5kZXggc2Nh bnJlbGlkLCBPaWQgaW5kZXhpZCwKIAkJCQkJCQkJCQkgTGlzdCAqaW5kZXhxdWFsLCBMaXN0 ICpyZWNoZWNrcXVhbCwKIAkJCQkJCQkJCQkgTGlzdCAqaW5kZXhvcmRlcmJ5LAogCQkJCQkJ CQkJCSBMaXN0ICppbmRleHRsaXN0LAotCQkJCQkJCQkJCSBTY2FuRGlyZWN0aW9uIGluZGV4 c2NhbmRpcik7CisJCQkJCQkJCQkJIFNjYW5EaXJlY3Rpb24gaW5kZXhzY2FuZGlyLAorCQkJ CQkJCQkJCSBib29sIGFsbG93X3ByZWZldGNoKTsKIHN0YXRpYyBCaXRtYXBJbmRleFNjYW4g Km1ha2VfYml0bWFwX2luZGV4c2NhbihJbmRleCBzY2FucmVsaWQsIE9pZCBpbmRleGlkLAog CQkJCQkJCQkJCQkgIExpc3QgKmluZGV4cXVhbCwKIAkJCQkJCQkJCQkJICBMaXN0ICppbmRl eHF1YWxvcmlnKTsKQEAgLTMxNjEsNiArMzE2MywxMyBAQCBjcmVhdGVfaW5kZXhzY2FuX3Bs YW4oUGxhbm5lckluZm8gKnJvb3QsCiAJCX0KIAl9CiAKKwkvKgorCSAqIFhYWCBPbmx5IGFs bG93IGluZGV4IHByZWZldGNoaW5nIHdoZW4gcGFyYWxsZWxNb2RlT0s9dHJ1ZS4gVGhpcyBp cyBhIGJpdAorCSAqIG9mIGEgbWlzdXNlIG9mIHRoZSBmbGFnLCBidXQgd2UgbmVlZCB0byBk aXNhYmxlIHByZWZldGNoaW5nIGZvciBjdXJzb3JzCisJICogKHdoaWNoIG1pZ2h0IGNoYW5n ZSBkaXJlY3Rpb24pLCBhbmQgcGFyYWxsZWxNb2RlT0sgZG9lcyB0aGF0LiBCdXQgbWF5YmUK KwkgKiB3ZSBtaWdodCAob3Igc2hvdWxkKSBoYXZlIGEgc2VwYXJhdGUgZmxhZy4KKwkgKi8K KwogCS8qIEZpbmFsbHkgcmVhZHkgdG8gYnVpbGQgdGhlIHBsYW4gbm9kZSAqLwogCWlmIChp bmRleG9ubHkpCiAJCXNjYW5fcGxhbiA9IChTY2FuICopIG1ha2VfaW5kZXhvbmx5c2Nhbih0 bGlzdCwKQEAgLTMxNzEsNyArMzE4MCw4IEBAIGNyZWF0ZV9pbmRleHNjYW5fcGxhbihQbGFu bmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJCQkJCXN0cmlwcGVkX2luZGV4cXVhbHMsCiAJCQkJ CQkJCQkJCQlmaXhlZF9pbmRleG9yZGVyYnlzLAogCQkJCQkJCQkJCQkJaW5kZXhpbmZvLT5p bmRleHRsaXN0LAotCQkJCQkJCQkJCQkJYmVzdF9wYXRoLT5pbmRleHNjYW5kaXIpOworCQkJ CQkJCQkJCQkJYmVzdF9wYXRoLT5pbmRleHNjYW5kaXIsCisJCQkJCQkJCQkJCQlyb290LT5n bG9iLT5wYXJhbGxlbE1vZGVPSyk7CiAJZWxzZQogCQlzY2FuX3BsYW4gPSAoU2NhbiAqKSBt YWtlX2luZGV4c2Nhbih0bGlzdCwKIAkJCQkJCQkJCQkJcXBxdWFsLApAQCAtMzE4Miw3ICsz MTkyLDggQEAgY3JlYXRlX2luZGV4c2Nhbl9wbGFuKFBsYW5uZXJJbmZvICpyb290LAogCQkJ CQkJCQkJCQlmaXhlZF9pbmRleG9yZGVyYnlzLAogCQkJCQkJCQkJCQlpbmRleG9yZGVyYnlz LAogCQkJCQkJCQkJCQlpbmRleG9yZGVyYnlvcHMsCi0JCQkJCQkJCQkJCWJlc3RfcGF0aC0+ aW5kZXhzY2FuZGlyKTsKKwkJCQkJCQkJCQkJYmVzdF9wYXRoLT5pbmRleHNjYW5kaXIsCisJ CQkJCQkJCQkJCXJvb3QtPmdsb2ItPnBhcmFsbGVsTW9kZU9LKTsKIAogCWNvcHlfZ2VuZXJp Y19wYXRoX2luZm8oJnNjYW5fcGxhbi0+cGxhbiwgJmJlc3RfcGF0aC0+cGF0aCk7CiAKQEAg LTU1MjIsNyArNTUzMyw4IEBAIG1ha2VfaW5kZXhzY2FuKExpc3QgKnFwdGxpc3QsCiAJCQkg ICBMaXN0ICppbmRleG9yZGVyYnksCiAJCQkgICBMaXN0ICppbmRleG9yZGVyYnlvcmlnLAog CQkJICAgTGlzdCAqaW5kZXhvcmRlcmJ5b3BzLAotCQkJICAgU2NhbkRpcmVjdGlvbiBpbmRl eHNjYW5kaXIpCisJCQkgICBTY2FuRGlyZWN0aW9uIGluZGV4c2NhbmRpciwKKwkJCSAgIGJv b2wgYWxsb3dfcHJlZmV0Y2gpCiB7CiAJSW5kZXhTY2FuICAqbm9kZSA9IG1ha2VOb2RlKElu ZGV4U2Nhbik7CiAJUGxhbgkgICAqcGxhbiA9ICZub2RlLT5zY2FuLnBsYW47CkBAIC01NTM5 LDYgKzU1NTEsNyBAQCBtYWtlX2luZGV4c2NhbihMaXN0ICpxcHRsaXN0LAogCW5vZGUtPmlu ZGV4b3JkZXJieW9yaWcgPSBpbmRleG9yZGVyYnlvcmlnOwogCW5vZGUtPmluZGV4b3JkZXJi eW9wcyA9IGluZGV4b3JkZXJieW9wczsKIAlub2RlLT5pbmRleG9yZGVyZGlyID0gaW5kZXhz Y2FuZGlyOworCW5vZGUtPmFsbG93X3ByZWZldGNoID0gYWxsb3dfcHJlZmV0Y2g7CiAKIAly ZXR1cm4gbm9kZTsKIH0KQEAgLTU1NTIsNyArNTU2NSw4IEBAIG1ha2VfaW5kZXhvbmx5c2Nh bihMaXN0ICpxcHRsaXN0LAogCQkJCSAgIExpc3QgKnJlY2hlY2txdWFsLAogCQkJCSAgIExp c3QgKmluZGV4b3JkZXJieSwKIAkJCQkgICBMaXN0ICppbmRleHRsaXN0LAotCQkJCSAgIFNj YW5EaXJlY3Rpb24gaW5kZXhzY2FuZGlyKQorCQkJCSAgIFNjYW5EaXJlY3Rpb24gaW5kZXhz Y2FuZGlyLAorCQkJCSAgIGJvb2wgYWxsb3dfcHJlZmV0Y2gpCiB7CiAJSW5kZXhPbmx5U2Nh biAqbm9kZSA9IG1ha2VOb2RlKEluZGV4T25seVNjYW4pOwogCVBsYW4JICAgKnBsYW4gPSAm bm9kZS0+c2Nhbi5wbGFuOwpAQCAtNTU2OCw2ICs1NTgyLDcgQEAgbWFrZV9pbmRleG9ubHlz Y2FuKExpc3QgKnFwdGxpc3QsCiAJbm9kZS0+aW5kZXhvcmRlcmJ5ID0gaW5kZXhvcmRlcmJ5 OwogCW5vZGUtPmluZGV4dGxpc3QgPSBpbmRleHRsaXN0OwogCW5vZGUtPmluZGV4b3JkZXJk aXIgPSBpbmRleHNjYW5kaXI7CisJbm9kZS0+YWxsb3dfcHJlZmV0Y2ggPSBhbGxvd19wcmVm ZXRjaDsKIAogCXJldHVybiBub2RlOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L3NlbGZ1bmNzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYwpp bmRleCBiNWM3OTM1OTQyNS4uZTExZDAyMjgyN2EgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC9zZWxmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxm dW5jcy5jCkBAIC02Mjk3LDcgKzYyOTcsNyBAQCBnZXRfYWN0dWFsX3ZhcmlhYmxlX2VuZHBv aW50KFJlbGF0aW9uIGhlYXBSZWwsCiAJaW5kZXhfcmVzY2FuKGluZGV4X3NjYW4sIHNjYW5r ZXlzLCAxLCBOVUxMLCAwKTsKIAogCS8qIEZldGNoIGZpcnN0L25leHQgdHVwbGUgaW4gc3Bl Y2lmaWVkIGRpcmVjdGlvbiAqLwotCXdoaWxlICgodGlkID0gaW5kZXhfZ2V0bmV4dF90aWQo aW5kZXhfc2NhbiwgaW5kZXhzY2FuZGlyLCBOVUxMKSkgIT0gTlVMTCkKKwl3aGlsZSAoKHRp ZCA9IGluZGV4X2dldG5leHRfdGlkKGluZGV4X3NjYW4sIGluZGV4c2NhbmRpcikpICE9IE5V TEwpCiAJewogCQlCbG9ja051bWJlciBibG9jayA9IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1i ZXIodGlkKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmggYi9z cmMvaW5jbHVkZS9hY2Nlc3MvZ2VuYW0uaAppbmRleCBjMGM0NmQ3YTA1Zi4uZjM0NTJlOGE3 OTkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oCisrKyBiL3NyYy9p bmNsdWRlL2FjY2Vzcy9nZW5hbS5oCkBAIC0xMjksNyArMTI5LDcgQEAgdHlwZWRlZiBzdHJ1 Y3QgSW5kZXhPcmRlckJ5RGlzdGFuY2UKIAlib29sCQlpc251bGw7CiB9IEluZGV4T3JkZXJC eURpc3RhbmNlOwogCi0KKy8qIGluZGV4IHByZWZldGNoaW5nIC0gcHJvYmFibHkgc2hvdWxk IGJlIHNvbWV3aGVyZSBlbHNlLCBvdXRzaWRlIGluZGV4YW0gKi8KIAogLyoKICAqIENhY2hl IG9mIHJlY2VudGx5IHByZWZldGNoZWQgYmxvY2tzLCBvcmdhbml6ZWQgYXMgYSBoYXNoIHRh YmxlIG9mCkBAIC0xNTksNiArMTU5LDggQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhQcmVmZXRj aENhY2hlRW50cnkgewogCiAvKgogICogVXNlZCB0byBkZXRlY3Qgc2VxdWVudGlhbCBwYXR0 ZXJucyAoYW5kIGRpc2FibGUgcHJlZmV0Y2hpbmcpLgorICoKKyAqIFhYWCBzZWVtcyBzdHJh bmdlIHRvIGhhdmUgdHdvIHNlcGFyYXRlIHZhbHVlcwogICovCiAjZGVmaW5lCQlQUkVGRVRD SF9RVUVVRV9ISVNUT1JZCQkJOAogI2RlZmluZQkJUFJFRkVUQ0hfU0VRX1BBVFRFUk5fQkxP Q0tTCQk0CkBAIC0xNjYsOSArMTY4LDM4IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4UHJlZmV0 Y2hDYWNoZUVudHJ5IHsKIHR5cGVkZWYgc3RydWN0IEluZGV4UHJlZmV0Y2hFbnRyeQogewog CUl0ZW1Qb2ludGVyRGF0YQkJdGlkOwotCWJvb2wJCQkJYWxsX3Zpc2libGU7CisKKwkvKiBz aG91bGQgd2UgcHJlZmV0Y2ggaGVhcCBwYWdlIGZvciB0aGlzIFRJRD8gKi8KKwlib29sCQkJ CXByZWZldGNoOworCisJLyoKKwkgKiBJZiBhIGNhbGxiYWNrIGlzIHNwZWNpZmllZCwgaXQg bWF5IHN0b3JlIHBlci10aWQgaW5mb3JtYXRpb24uIFRoZQorCSAqIGRhdGEgaGFzIHRvIGJl IGEgc2luZ2xlIHBhbGxvYy1lZCBwaWVjZSBvZiBkYXRhLCBzbyB0aGF0IGl0IGNhbgorCSAq IGJlIGVhc2lseSBwZnJlZWQuCisJICoKKwkgKiBYWFggV2UgY291bGQgcmVsYXggdGhpcyBi eSBwcm92aWRpbmcgYW5vdGhlciBjbGVhbnVwIGNhbGxiYWNrLCBidXQKKwkgKiB0aGF0IHNl ZW1zIHVubmVjZXNzYXJpbHkgY29tcGxleCAtIHdlIGV4cGVjdCB0aGUgaW5mb3JtYXRpb24g dG8gYmUKKwkgKiB2ZXJ5IHNpbXBsZSwgbGlrZSBib29sIGZsYWdzIG9yIHNvbWV0aGluZy4g RWFzeSB0byBkbyBpbiBhIHNpbXBsZQorCSAqIHN0cnVjdCwgYW5kIHBlcmhhcHMgZXZlbiBy ZXVzZSB3aXRob3V0IHBmcmVlL3BhbGxvYy4KKwkgKi8KKwl2b2lkCQkJICAgICpkYXRhOwog fSBJbmRleFByZWZldGNoRW50cnk7CiAKKy8qIG5lZWRzIHRvIGJlIGJlZm9yZSBJbmRleFBy ZWZldGNoQ2FsbGJhY2sgdHlwZWRlZiAqLwordHlwZWRlZiBzdHJ1Y3QgSW5kZXhQcmVmZXRj aCBJbmRleFByZWZldGNoOworCisvKgorICogY3VzdG9tIGNhbGxiYWNrLCBhbGxvd2luZyB0 aGUgdXNlciBjb2RlIHRvIGRldGVybWluZSB3aGljaCBUSUQgdG8gcmVhZAorICoKKyAqIElm IHRoZXJlIGlzIG5vIFRJRCB0byBwcmVmZXRjaCwgdGhlIHJldHVybiB2YWx1ZSBpcyBleHBl Y3RlZCB0byBiZSBOVUxMLgorICoKKyAqIE90aGVyd2lzZSB0aGUgInRpZCIgZmllbGQgaXMg ZXhwZWN0ZWQgdG8gY29udGFpbiB0aGUgVElEIHRvIHByZWZldGNoLCBhbmQKKyAqICJkYXRh IiBtYXkgYmUgc2V0IHRvIGN1c3RvbSBpbmZvcm1hdGlvbiB0aGUgY2FsbGJhY2sgbmVlZHMg dG8gcGFzcyBvdXRzaWRlLgorICovCit0eXBlZGVmIEluZGV4UHJlZmV0Y2hFbnRyeSAqKCpJ bmRleFByZWZldGNoTmV4dENCKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJCQkJ CUluZGV4UHJlZmV0Y2ggKnN0YXRlLAorCQkJCQkJCQkJCQkJCVNjYW5EaXJlY3Rpb24gZGly ZWN0aW9uKTsKKwogdHlwZWRlZiBzdHJ1Y3QgSW5kZXhQcmVmZXRjaAogewogCS8qCkBAIC0x ODcsOSArMjE4LDE4IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4UHJlZmV0Y2gKIAl1aW50NjQJ CWNvdW50U2tpcFNlcXVlbnRpYWw7CiAJdWludDY0CQljb3VudFNraXBDYWNoZWQ7CiAKLQkv KiB1c2VkIHdoZW4gcHJlZmV0Y2hpbmcgaW5kZXgtb25seSBzY2FucyAqLwotCWJvb2wJCWlu ZGV4b25seTsKLQlCdWZmZXIJCXZtQnVmZmVyOworCS8qCisJICogSWYgYSBjYWxsYmFjayBp cyBzcGVjaWZpZWQsIGl0IG1heSBzdG9yZSBnbG9iYWwgc3RhdGUgKGZvciBhbGwgVElEcyku CisJICogRm9yIGV4YW1wbGUgVk0gYnVmZmVyIG1heSBiZSBrZXB0IGR1cmluZyBJT1MuIFRo aXMgaXMgc2ltaWxhciB0byB0aGUKKwkgKiBkYXRhIGZpZWxkIGluIEluZGV4UHJlZmV0Y2hF bnRyeSwgYnV0IHRoYXQncyBwZXItVElELgorCSAqLworCXZvaWQJICAgKmRhdGE7CisKKwkv KgorCSAqIENhbGxiYWNrIHRvIGN1c3RvbWl6ZSB0aGUgcHJlZmV0Y2ggKGRlY2lkZSB3aGlj aCBibG9jayBuZWVkIHRvIGJlCisJICogcHJlZmV0Y2hlZCwgZXRjLikKKwkgKi8KKwlJbmRl eFByZWZldGNoTmV4dENCCW5leHRfY2I7CiAKIAkvKgogCSAqIFF1ZXVlIG9mIFRJRHMgdG8g cHJlZmV0Y2guCkBAIC0yMjQsMTQgKzI2NCwyMiBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleFBy ZWZldGNoCiAKIH0gSW5kZXhQcmVmZXRjaDsKIAorSW5kZXhQcmVmZXRjaCAqSW5kZXhQcmVm ZXRjaEFsbG9jKEluZGV4UHJlZmV0Y2hOZXh0Q0IgbmV4dF9jYiwKKwkJCQkJCQkJICBpbnQg cHJlZmV0Y2hfbWF4LCB2b2lkICpkYXRhKTsKKworSW5kZXhQcmVmZXRjaEVudHJ5ICpJbmRl eFByZWZldGNoTmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4UHJlZmV0Y2ggKnN0YXRl LCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbik7CisKICNkZWZpbmUgUFJFRkVUQ0hfUVVFVUVf SU5ERVgoYSkJKChhKSAlIChNQVhfSU9fQ09OQ1VSUkVOQ1kpKQogI2RlZmluZSBQUkVGRVRD SF9RVUVVRV9FTVBUWShwKQkoKHApLT5xdWV1ZUVuZCA9PSAocCktPnF1ZXVlSW5kZXgpCiAj ZGVmaW5lIFBSRUZFVENIX0VOQUJMRUQocCkJCSgocCkgJiYgKChwKS0+cHJlZmV0Y2hNYXhU YXJnZXQgPiAwKSkKICNkZWZpbmUgUFJFRkVUQ0hfRlVMTChwKQkJKChwKS0+cXVldWVFbmQg LSAocCktPnF1ZXVlSW5kZXggPT0gKHApLT5wcmVmZXRjaFRhcmdldCkKICNkZWZpbmUgUFJF RkVUQ0hfRE9ORShwKQkJKChwKSAmJiAoKHApLT5wcmVmZXRjaERvbmUgJiYgUFJFRkVUQ0hf UVVFVUVfRU1QVFkocCkpKQorCisvKiBYWFggZWFzeSB0byBjb25mdXNlIHdpdGggUFJFRkVU Q0hfQUNUSVZFICovCiAjZGVmaW5lIFBSRUZFVENIX0FDVElWRShwKQkJKFBSRUZFVENIX0VO QUJMRUQocCkgJiYgIShwKS0+cHJlZmV0Y2hEb25lKQogI2RlZmluZSBQUkVGRVRDSF9CTE9D S19JTkRFWCh2KQkoKHYpICUgUFJFRkVUQ0hfUVVFVUVfSElTVE9SWSkKIAoraW50IGluZGV4 X2hlYXBfcHJlZmV0Y2hfdGFyZ2V0KFJlbGF0aW9uIGhlYXBSZWwsIGRvdWJsZSBwbGFuX3Jv d3MsIGJvb2wgYWxsb3dfcHJlZmV0Y2gpOwogCiAvKgogICogZ2VuZXJhbGl6ZWQgaW5kZXhf IGludGVyZmFjZSByb3V0aW5lcyAoaW4gaW5kZXhhbS5jKQpAQCAtMjc4LDE3ICszMjYsMTEg QEAgZXh0ZXJuIEluZGV4U2NhbkRlc2MgaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKFJlbGF0 aW9uIGhlYXByZWwsCiAJCQkJCQkJCQkJCSAgUmVsYXRpb24gaW5kZXhyZWwsIGludCBua2V5 cywgaW50IG5vcmRlcmJ5cywKIAkJCQkJCQkJCQkJICBQYXJhbGxlbEluZGV4U2NhbkRlc2Mg cHNjYW4pOwogZXh0ZXJuIEl0ZW1Qb2ludGVyIGluZGV4X2dldG5leHRfdGlkKEluZGV4U2Nh bkRlc2Mgc2NhbiwKLQkJCQkJCQkJCSBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKLQkJCQkJ CQkJCSBJbmRleFByZWZldGNoICpwcmVmZXRjaCk7Ci1leHRlcm4gSXRlbVBvaW50ZXIgaW5k ZXhfZ2V0bmV4dF90aWRfdm0oSW5kZXhTY2FuRGVzYyBzY2FuLAotCQkJCQkJCQkJCVNjYW5E aXJlY3Rpb24gZGlyZWN0aW9uLAotCQkJCQkJCQkJCUluZGV4UHJlZmV0Y2ggKnByZWZldGNo LAotCQkJCQkJCQkJCWJvb2wgKmFsbF92aXNpYmxlKTsKKwkJCQkJCQkJCSBTY2FuRGlyZWN0 aW9uIGRpcmVjdGlvbik7CiBzdHJ1Y3QgVHVwbGVUYWJsZVNsb3Q7CiBleHRlcm4gYm9vbCBp bmRleF9mZXRjaF9oZWFwKEluZGV4U2NhbkRlc2Mgc2Nhbiwgc3RydWN0IFR1cGxlVGFibGVT bG90ICpzbG90KTsKIGV4dGVybiBib29sIGluZGV4X2dldG5leHRfc2xvdChJbmRleFNjYW5E ZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAotCQkJCQkJCSAgIHN0cnVjdCBU dXBsZVRhYmxlU2xvdCAqc2xvdCwKLQkJCQkJCQkgICBJbmRleFByZWZldGNoICpwcmVmZXRj aCk7CisJCQkJCQkJICAgc3RydWN0IFR1cGxlVGFibGVTbG90ICpzbG90KTsKIGV4dGVybiBp bnQ2NCBpbmRleF9nZXRiaXRtYXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBUSURCaXRtYXAgKmJp dG1hcCk7CiAKIGV4dGVybiBJbmRleEJ1bGtEZWxldGVSZXN1bHQgKmluZGV4X2J1bGtfZGVs ZXRlKEluZGV4VmFjdXVtSW5mbyAqaW5mbywKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25v ZGVzL2V4ZWNub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKaW5kZXgg ODc0NTQ1M2E1YjQuLmNjODkxZDRmY2NmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rl cy9leGVjbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaApAQCAt MTUyOSw3ICsxNTI5LDYgQEAgdHlwZWRlZiBzdHJ1Y3QKIAlib29sCSAgICplbGVtX251bGxz OwkJLyogYXJyYXkgb2YgbnVtX2VsZW1zIGlzLW51bGwgZmxhZ3MgKi8KIH0gSW5kZXhBcnJh eUtleUluZm87CiAKLQogLyogLS0tLS0tLS0tLS0tLS0tLQogICoJIEluZGV4U2NhblN0YXRl IGluZm9ybWF0aW9uCiAgKgpAQCAtMTU4Miw2ICsxNTgxLDcgQEAgdHlwZWRlZiBzdHJ1Y3Qg SW5kZXhTY2FuU3RhdGUKIAlpbnQxNgkgICAqaXNzX09yZGVyQnlUeXBMZW5zOwogCVNpemUJ CWlzc19Qc2NhbkxlbjsKIAorCS8qIHByZWZldGNoaW5nICovCiAJSW5kZXhQcmVmZXRjaCAq aXNzX3ByZWZldGNoOwogfSBJbmRleFNjYW5TdGF0ZTsKIApAQCAtMTYyMSw2ICsxNjIxLDgg QEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhPbmx5U2NhblN0YXRlCiAJVHVwbGVUYWJsZVNsb3Qg Kmlvc3NfVGFibGVTbG90OwogCUJ1ZmZlcgkJaW9zc19WTUJ1ZmZlcjsKIAlTaXplCQlpb3Nz X1BzY2FuTGVuOworCisJLyogcHJlZmV0Y2hpbmcgKi8KIAlJbmRleFByZWZldGNoICppb3Nz X3ByZWZldGNoOwogfSBJbmRleE9ubHlTY2FuU3RhdGU7CiAKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVz LmgKaW5kZXggZDQwYWY4ZTU5ZmUuLmJjMTAyOTk4MmNmIDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9ub2Rlcy9wbGFubm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9k ZXMuaApAQCAtNDU0LDYgKzQ1NCw3IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhbgogCUxp c3QJICAgKmluZGV4b3JkZXJieW9yaWc7CS8qIHRoZSBzYW1lIGluIG9yaWdpbmFsIGZvcm0g Ki8KIAlMaXN0CSAgICppbmRleG9yZGVyYnlvcHM7CS8qIE9JRHMgb2Ygc29ydCBvcHMgZm9y IE9SREVSIEJZIGV4cHJzICovCiAJU2NhbkRpcmVjdGlvbiBpbmRleG9yZGVyZGlyOwkvKiBm b3J3YXJkIG9yIGJhY2t3YXJkIG9yIGRvbid0IGNhcmUgKi8KKwlib29sCQlhbGxvd19wcmVm ZXRjaDsJLyogYWxsb3cgcHJlZmV0Y2hpbmcgb2YgaGVhcCBwYWdlcyAqLwogfSBJbmRleFNj YW47CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0KQEAgLTQ5Niw2ICs0OTcsNyBAQCB0eXBlZGVm IHN0cnVjdCBJbmRleE9ubHlTY2FuCiAJTGlzdAkgICAqaW5kZXhvcmRlcmJ5OwkvKiBsaXN0 IG9mIGluZGV4IE9SREVSIEJZIGV4cHJzICovCiAJTGlzdAkgICAqaW5kZXh0bGlzdDsJCS8q IFRhcmdldEVudHJ5IGxpc3QgZGVzY3JpYmluZyBpbmRleCdzIGNvbHMgKi8KIAlTY2FuRGly ZWN0aW9uIGluZGV4b3JkZXJkaXI7CS8qIGZvcndhcmQgb3IgYmFja3dhcmQgb3IgZG9uJ3Qg Y2FyZSAqLworCWJvb2wJCWFsbG93X3ByZWZldGNoOwkvKiBhbGxvdyBwcmVmZXRjaGluZyBv ZiBoZWFwIHBhZ2VzICovCiB9IEluZGV4T25seVNjYW47CiAKIC8qIC0tLS0tLS0tLS0tLS0t LS0KLS0gCjIuNDMuMAoK --------------DeQq8rsUZatFkEjxF1hv4CO9--