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 1r82Mt-007vYp-Li for pgsql-hackers@arkaria.postgresql.org; Tue, 28 Nov 2023 17:59:32 +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 1r82Mr-006wnn-4Z for pgsql-hackers@arkaria.postgresql.org; Tue, 28 Nov 2023 17:59:29 +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 1r82Mq-006wne-4O for pgsql-hackers@lists.postgresql.org; Tue, 28 Nov 2023 17:59:28 +0000 Received: from mail-ej1-x62f.google.com ([2a00:1450:4864:20::62f]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1r82Mi-007o5q-FS for pgsql-hackers@lists.postgresql.org; Tue, 28 Nov 2023 17:59:26 +0000 Received: by mail-ej1-x62f.google.com with SMTP id a640c23a62f3a-a08e4352992so603013066b.1 for ; Tue, 28 Nov 2023 09:59:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; t=1701194359; x=1701799159; darn=lists.postgresql.org; h=in-reply-to:from:references:cc:to:content-language:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=zUwVZX/0ZpvHdnXt4KklalLW6CLUZ++JGkOdZ0MyBbo=; b=d8FzCiFG1rf/bcgduB9X/TAOUNCa7v9x5+B17Y/og2tIQvVezt85ZD0tt2ErYMNhwi DVpPPHeHKrIi5FDa3hYJ/LRIolDJMiEd1Jb3SFcvntFuCKw7KaBPQh5ouSRMt5YzzGNx 3xu18fNbuwAi45Oz8jYB75g8rd4/04XL4NcqYLGZQvSwr/eaVKhhTSjHukTa/o6LnheI JrrdV2ivaBf3BPDqyBcSb63qwOexvXYkGCD943JacOEoGcsOfpJbWdfg0pmsbaUFAQrm uHCJOZkRwQARXKRjjrhAl3y7OaLqxUoSt8MYveOebEjqnVRBhug80SP0OEHirSqB5v81 1Lbw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1701194359; x=1701799159; h=in-reply-to:from:references:cc:to:content-language:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=zUwVZX/0ZpvHdnXt4KklalLW6CLUZ++JGkOdZ0MyBbo=; b=dp2dYKXGWa4Ex0ZFv4ohEb9sHfeauUpAG+SMFSvXdgQXSKHFmz0dMFG99WdeVv2Eye Ro1kftrT4jfc8rNQOlLlWtTE5X4dr5MfVuKVoTmmNFMvQnZuCkoYEo7Wc8uSQC8VSSQF YICeavLPaIjrMXlZfve5ybYYnszyR+fYfQwkrCA290rEiCFHQcMACCbLiIJPnCoIxgEl GdhiRjTiLAFIMMIfgf6onQ33D4RU31SCNsu4Nv1RJsUk55+AVG0tbIVi+QvFOKAl1WDV j8zsjlEgXQCHZArCsk0JA47lEUXJJ2ArUDpV27F2IlD7lMey2Vsi/hi1DesI4DnBBr17 J0iA== X-Gm-Message-State: AOJu0YyMAJRkeLH40vWERWcPCAu+ikA5r0G9ArTfKnPp+sZwvNPhK0i+ Xml//Fia1FhtHKjD8fVQGl9fSg== X-Google-Smtp-Source: AGHT+IEaNASednM78wAKutaj1Zedhil8849SSX0z65TrQxQDoTTxwlE4Jvzct13Tq4um8Yet/r1OIQ== X-Received: by 2002:a17:906:2409:b0:9fd:4bed:72af with SMTP id z9-20020a170906240900b009fd4bed72afmr11439902eja.72.1701194358293; Tue, 28 Nov 2023 09:59:18 -0800 (PST) Received: from [10.137.0.17] (srv1.mobissw.com. [89.235.0.226]) by smtp.gmail.com with ESMTPSA id a21-20020a1709064a5500b009eff65e6942sm7045461ejv.197.2023.11.28.09.59.17 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 28 Nov 2023 09:59:17 -0800 (PST) Content-Type: multipart/mixed; boundary="------------K4A0wOAng8JatwEd4NvqL3mz" Message-ID: <9a646c51-a4c3-ce34-cccd-99d00fd1dc6a@enterprisedb.com> Date: Tue, 28 Nov 2023 18:59:15 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.15.1 Subject: Re: Parallel CREATE INDEX for BRIN indexes Content-Language: en-US To: Matthias van de Meent Cc: PostgreSQL Hackers References: <2d7c64de-716e-346e-b01e-03db0c2bc5ac@enterprisedb.com> <2e86059f-4004-eec1-2bc1-9e7fd119c9e2@enterprisedb.com> <5384d42e-1961-c2fd-1955-1a5a99fa1234@enterprisedb.com> From: Tomas Vondra In-Reply-To: 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. --------------K4A0wOAng8JatwEd4NvqL3mz Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 11/28/23 16:39, Matthias van de Meent wrote: > On Thu, 23 Nov 2023 at 14:35, Tomas Vondra > wrote: >> On 11/23/23 13:33, Matthias van de Meent wrote: >>> The union operator may leak (lots of) memory, so I think it makes >>> sense to keep a context around that can be reset after we've extracted >>> the merge result. >>> >> >> But does the current code actually achieve that? It does create a "brin >> union" context, but then it only does this: >> >> /* Use our own memory context to avoid retail pfree */ >> cxt = AllocSetContextCreate(CurrentMemoryContext, >> "brin union", >> ALLOCSET_DEFAULT_SIZES); >> oldcxt = MemoryContextSwitchTo(cxt); >> db = brin_deform_tuple(bdesc, b, NULL); >> MemoryContextSwitchTo(oldcxt); >> >> Surely that does not limit the amount of memory used by the actual union >> functions in any way? > > Oh, yes, of course. For some reason I thought that covered the calls > to the union operator function too, but it indeed only covers > deserialization. I do think it is still worthwhile to not do the > create/delete cycle, but won't hold the patch back for that. > I think the union_tuples() changes are better left for a separate patch. >>>> However, I don't think the number of union_tuples calls is likely to be >>>> very high, especially for large tables. Because we split the table into >>>> 2048 chunks, and then cap the chunk size by 8192. For large tables >>>> (where this matters) we're likely close to 8192. >>> >>> I agree that the merging part of the index creation is the last part, >>> and usually has no high impact on the total performance of the reindex >>> operation, but in memory-constrained environments releasing and then >>> requesting the same chunk of memory over and over again just isn't >>> great. >> >> OK, I'll take a look at the scratch context you suggested. >> >> My point however was we won't actually do that very often, because on >> large tables the BRIN ranges are likely smaller than the parallel scan >> chunk size, so few overlaps. OTOH if the table is small, or if the BRIN >> ranges are large, there'll be few of them. > > That's true, so maybe I'm concerned about something that amounts to > only marginal gains. > However, after thinking about this a bit more, I think we actually do need to do something about the memory management when merging tuples. AFAIK the general assumption was that union_tuple() only runs for a single range, and then the whole context gets freed. But the way the merging was implemented, it all runs in a single context. And while a single union_tuple() may not need a lot memory, in total it may be annoying. I just added a palloc(1MB) into union_tuples and ended up with ~160MB allocated in the PortalContext on just 2GB table. In practice the memory will grow more slowly, but not great :-/ The attached 0003 patch adds a memory context that's reset after producing a merged BRIN tuple for each page range. > I noticed that the v4 patch doesn't yet update the documentation in > indexam.sgml with am->amcanbuildparallel. Should be fixed by 0002. I decided to add a simple note to ambuild(), not sure if something more is needed. > Once that is included and reviewed I think this will be ready, unless > you want to address any of my comments upthread (that I marked with > 'not in this patch') in this patch. > Thanks. I believe the attached version addresses it. There's also 0004 with some indentation tweaks per pgindent. regards -- Tomas Vondra EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company --------------K4A0wOAng8JatwEd4NvqL3mz Content-Type: text/x-patch; charset=UTF-8; name="v20231128-0001-parallel-CREATE-INDEX-for-BRIN-v3.patch" Content-Disposition: attachment; filename="v20231128-0001-parallel-CREATE-INDEX-for-BRIN-v3.patch" Content-Transfer-Encoding: base64 RnJvbSAyMTlhNDUxMjUwY2JiYmMxMjM1YzYwZjQ3NzZjMmVlNmJjODQ0MzJkIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzLnZvbmRyYUBwb3N0 Z3Jlc3FsLm9yZz4KRGF0ZTogVHVlLCA3IE5vdiAyMDIzIDE3OjA0OjI4ICswMTAwClN1Ympl Y3Q6IFtQQVRDSCB2MjAyMzExMjggMS80XSBwYXJhbGxlbCBDUkVBVEUgSU5ERVggZm9yIEJS SU4gdjMKCi0tLQogY29udHJpYi9ibG9vbS9ibHV0aWxzLmMgICAgICAgICAgICAgICAgICAg ICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYyAgICAgICAgICAg ICAgICB8IDg2NiArKysrKysrKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9naW4v Z2ludXRpbC5jICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9hY2Nlc3MvZ2lz dC9naXN0LmMgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvYWNjZXNzL2hh c2gvaGFzaC5jICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9u YnRyZWUvbmJ0cmVlLmMgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9hY2Nlc3Mv c3BnaXN0L3NwZ3V0aWxzLmMgICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvYWNjZXNz L3RyYW5zYW0vcGFyYWxsZWwuYyAgICAgICAgIHwgICA0ICsKIHNyYy9iYWNrZW5kL2NhdGFs b2cvaW5kZXguYyAgICAgICAgICAgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvdXRp bHMvc29ydC90dXBsZXNvcnR2YXJpYW50cy5jICAgIHwgMjA3ICsrKysrCiBzcmMvaW5jbHVk ZS9hY2Nlc3MvYW1hcGkuaCAgICAgICAgICAgICAgICAgICAgfCAgIDIgKwogc3JjL2luY2x1 ZGUvYWNjZXNzL2JyaW4uaCAgICAgICAgICAgICAgICAgICAgIHwgICAzICsKIHNyYy9pbmNs dWRlL3V0aWxzL3R1cGxlc29ydC5oICAgICAgICAgICAgICAgICB8ICAxMSArCiAuLi4vbW9k dWxlcy9kdW1teV9pbmRleF9hbS9kdW1teV9pbmRleF9hbS5jICAgfCAgIDEgKwogMTQgZmls ZXMgY2hhbmdlZCwgMTA5NiBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQoKZGlmZiAt LWdpdCBhL2NvbnRyaWIvYmxvb20vYmx1dGlscy5jIGIvY29udHJpYi9ibG9vbS9ibHV0aWxz LmMKaW5kZXggNDgzMGNiM2ZlZTYuLmE3ODFjNWQ5OGQ2IDEwMDY0NAotLS0gYS9jb250cmli L2Jsb29tL2JsdXRpbHMuYworKysgYi9jb250cmliL2Jsb29tL2JsdXRpbHMuYwpAQCAtMTIy LDYgKzEyMiw3IEBAIGJsaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCWFtcm91dGluZS0+ YW1jbHVzdGVyYWJsZSA9IGZhbHNlOwogCWFtcm91dGluZS0+YW1wcmVkbG9ja3MgPSBmYWxz ZTsKIAlhbXJvdXRpbmUtPmFtY2FucGFyYWxsZWwgPSBmYWxzZTsKKwlhbXJvdXRpbmUtPmFt Y2FuYnVpbGRwYXJhbGxlbCA9IGZhbHNlOwogCWFtcm91dGluZS0+YW1jYW5pbmNsdWRlID0g ZmFsc2U7CiAJYW1yb3V0aW5lLT5hbXVzZW1haW50ZW5hbmNld29ya21lbSA9IGZhbHNlOwog CWFtcm91dGluZS0+YW1wYXJhbGxlbHZhY3V1bW9wdGlvbnMgPQpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4v YnJpbi5jCmluZGV4IDRmMmRmZGQxN2I5Li4wYzZjYTFhYzE4YyAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9i cmluL2JyaW4uYwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgInBvc3RtYXN0ZXIvYXV0 b3ZhY3V1bS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCiAjaW5jbHVkZSAic3Rv cmFnZS9mcmVlc3BhY2UuaCIKKyNpbmNsdWRlICJ0Y29wL3Rjb3Bwcm90LmgiCQkvKiBwZ3Jt aW5jbHVkZSBpZ25vcmUgKi8KICNpbmNsdWRlICJ1dGlscy9hY2wuaCIKICNpbmNsdWRlICJ1 dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL2RhdHVtLmgiCkBAIC00MCw3ICs0 MSwxMTggQEAKICNpbmNsdWRlICJ1dGlscy9pbmRleF9zZWxmdW5jcy5oIgogI2luY2x1ZGUg InV0aWxzL21lbXV0aWxzLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCisjaW5jbHVkZSAi dXRpbHMvdHVwbGVzb3J0LmgiCiAKKy8qIE1hZ2ljIG51bWJlcnMgZm9yIHBhcmFsbGVsIHN0 YXRlIHNoYXJpbmcgKi8KKyNkZWZpbmUgUEFSQUxMRUxfS0VZX0JSSU5fU0hBUkVECQlVSU5U NjRDT05TVCgweEIwMDAwMDAwMDAwMDAwMDEpCisjZGVmaW5lIFBBUkFMTEVMX0tFWV9UVVBM RVNPUlQJCQlVSU5UNjRDT05TVCgweEIwMDAwMDAwMDAwMDAwMDIpCisjZGVmaW5lIFBBUkFM TEVMX0tFWV9RVUVSWV9URVhUCQkJVUlOVDY0Q09OU1QoMHhCMDAwMDAwMDAwMDAwMDAzKQor I2RlZmluZSBQQVJBTExFTF9LRVlfV0FMX1VTQUdFCQkJVUlOVDY0Q09OU1QoMHhCMDAwMDAw MDAwMDAwMDA0KQorI2RlZmluZSBQQVJBTExFTF9LRVlfQlVGRkVSX1VTQUdFCQlVSU5UNjRD T05TVCgweEIwMDAwMDAwMDAwMDAwMDUpCisKKy8qCisgKiBTdGF0dXMgcmVjb3JkIGZvciBz cG9vbGluZy9zb3J0aW5nIHBoYXNlLgorICovCit0eXBlZGVmIHN0cnVjdCBCcmluU3Bvb2wK K3sKKwlUdXBsZXNvcnRzdGF0ZSAqc29ydHN0YXRlOwkvKiBzdGF0ZSBkYXRhIGZvciB0dXBs ZXNvcnQuYyAqLworCVJlbGF0aW9uCWhlYXA7CisJUmVsYXRpb24JaW5kZXg7Cit9IEJyaW5T cG9vbDsKKworLyoKKyAqIFN0YXR1cyBmb3IgaW5kZXggYnVpbGRzIHBlcmZvcm1lZCBpbiBw YXJhbGxlbC4gIFRoaXMgaXMgYWxsb2NhdGVkIGluIGEKKyAqIGR5bmFtaWMgc2hhcmVkIG1l bW9yeSBzZWdtZW50LgorICovCit0eXBlZGVmIHN0cnVjdCBCcmluU2hhcmVkCit7CisJLyoK KwkgKiBUaGVzZSBmaWVsZHMgYXJlIG5vdCBtb2RpZmllZCBkdXJpbmcgdGhlIGJ1aWxkLiAg VGhleSBwcmltYXJpbHkgZXhpc3QgZm9yCisJICogdGhlIGJlbmVmaXQgb2Ygd29ya2VyIHBy b2Nlc3NlcyB0aGF0IG5lZWQgdG8gY3JlYXRlIHN0YXRlIGNvcnJlc3BvbmRpbmcKKwkgKiB0 byB0aGF0IHVzZWQgYnkgdGhlIGxlYWRlci4KKwkgKi8KKwlPaWQJCQloZWFwcmVsaWQ7CisJ T2lkCQkJaW5kZXhyZWxpZDsKKwlib29sCQlpc2NvbmN1cnJlbnQ7CisJQmxvY2tOdW1iZXIJ cGFnZXNQZXJSYW5nZTsKKwlpbnQJCQlzY2FudHVwbGVzb3J0c3RhdGVzOworCisJLyoKKwkg KiB3b3JrZXJzZG9uZWN2IGlzIHVzZWQgdG8gbW9uaXRvciB0aGUgcHJvZ3Jlc3Mgb2Ygd29y a2Vycy4gIEFsbCBwYXJhbGxlbAorCSAqIHBhcnRpY2lwYW50cyBtdXN0IGluZGljYXRlIHRo YXQgdGhleSBhcmUgZG9uZSBiZWZvcmUgbGVhZGVyIGNhbiB1c2UKKwkgKiByZXN1bHRzIGJ1 aWx0IGJ5IHRoZSB3b3JrZXJzIChhbmQgYmVmb3JlIGxlYWRlciBjYW4gd3JpdGUgdGhlIGRh dGEgaW50bworCSAqIHRoZSBpbmRleCkuCisJICovCisJQ29uZGl0aW9uVmFyaWFibGUgd29y a2Vyc2RvbmVjdjsKKworCS8qCisJICogbXV0ZXggcHJvdGVjdHMgYWxsIGZpZWxkcyBiZWZv cmUgaGVhcGRlc2MuCisJICoKKwkgKiBUaGVzZSBmaWVsZHMgY29udGFpbiBzdGF0dXMgaW5m b3JtYXRpb24gb2YgaW50ZXJlc3QgdG8gQlJJTiBpbmRleAorCSAqIGJ1aWxkcyB0aGF0IG11 c3Qgd29yayBqdXN0IHRoZSBzYW1lIHdoZW4gYW4gaW5kZXggaXMgYnVpbHQgaW4gcGFyYWxs ZWwuCisJICovCisJc2xvY2tfdAkJbXV0ZXg7CisKKwkvKgorCSAqIE11dGFibGUgc3RhdGUg dGhhdCBpcyBtYWludGFpbmVkIGJ5IHdvcmtlcnMsIGFuZCByZXBvcnRlZCBiYWNrIHRvCisJ ICogbGVhZGVyIGF0IGVuZCBvZiB0aGUgc2NhbnMuCisJICoKKwkgKiBucGFydGljaXBhbnRz ZG9uZSBpcyBudW1iZXIgb2Ygd29ya2VyIHByb2Nlc3NlcyBmaW5pc2hlZC4KKwkgKgorCSAq IHJlbHR1cGxlcyBpcyB0aGUgdG90YWwgbnVtYmVyIG9mIGlucHV0IGhlYXAgdHVwbGVzLgor CSAqCisJICogaW5kdHVwbGVzIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgdHVwbGVzIHRoYXQg bWFkZSBpdCBpbnRvIHRoZSBpbmRleC4KKwkgKi8KKwlpbnQJCQlucGFydGljaXBhbnRzZG9u ZTsKKwlkb3VibGUJCXJlbHR1cGxlczsKKwlkb3VibGUJCWluZHR1cGxlczsKKworCS8qCisJ ICogUGFyYWxsZWxUYWJsZVNjYW5EZXNjRGF0YSBkYXRhIGZvbGxvd3MuIENhbid0IGRpcmVj dGx5IGVtYmVkIGhlcmUsIGFzCisJICogaW1wbGVtZW50YXRpb25zIG9mIHRoZSBwYXJhbGxl bCB0YWJsZSBzY2FuIGRlc2MgaW50ZXJmYWNlIG1pZ2h0IG5lZWQKKwkgKiBzdHJvbmdlciBh bGlnbm1lbnQuCisJICovCit9IEJyaW5TaGFyZWQ7CisKKy8qCisgKiBSZXR1cm4gcG9pbnRl ciB0byBhIEJyaW5TaGFyZWQncyBwYXJhbGxlbCB0YWJsZSBzY2FuLgorICoKKyAqIGMuZi4g c2htX3RvY19hbGxvY2F0ZSBhcyB0byB3aHkgQlVGRkVSQUxJR04gaXMgdXNlZCwgcmF0aGVy IHRoYW4ganVzdAorICogTUFYQUxJR04uCisgKi8KKyNkZWZpbmUgUGFyYWxsZWxUYWJsZVNj YW5Gcm9tQnJpblNoYXJlZChzaGFyZWQpIFwKKwkoUGFyYWxsZWxUYWJsZVNjYW5EZXNjKSAo KGNoYXIgKikgKHNoYXJlZCkgKyBCVUZGRVJBTElHTihzaXplb2YoQnJpblNoYXJlZCkpKQor CisvKgorICogU3RhdHVzIGZvciBsZWFkZXIgaW4gcGFyYWxsZWwgaW5kZXggYnVpbGQuCisg Ki8KK3R5cGVkZWYgc3RydWN0IEJyaW5MZWFkZXIKK3sKKwkvKiBwYXJhbGxlbCBjb250ZXh0 IGl0c2VsZiAqLworCVBhcmFsbGVsQ29udGV4dCAqcGN4dDsKKworCS8qCisJICogbnBhcnRp Y2lwYW50dHVwbGVzb3J0cyBpcyB0aGUgZXhhY3QgbnVtYmVyIG9mIHdvcmtlciBwcm9jZXNz ZXMKKwkgKiBzdWNjZXNzZnVsbHkgbGF1bmNoZWQsIHBsdXMgb25lIGxlYWRlciBwcm9jZXNz IGlmIGl0IHBhcnRpY2lwYXRlcyBhcyBhCisJICogd29ya2VyIChvbmx5IERJU0FCTEVfTEVB REVSX1BBUlRJQ0lQQVRJT04gYnVpbGRzIGF2b2lkIGxlYWRlcgorCSAqIHBhcnRpY2lwYXRp bmcgYXMgYSB3b3JrZXIpLgorCSAqLworCWludAkJCW5wYXJ0aWNpcGFudHR1cGxlc29ydHM7 CisKKwkvKgorCSAqIExlYWRlciBwcm9jZXNzIGNvbnZlbmllbmNlIHBvaW50ZXJzIHRvIHNo YXJlZCBzdGF0ZSAobGVhZGVyIGF2b2lkcyBUT0MKKwkgKiBsb29rdXBzKS4KKwkgKgorCSAq IGJyaW5zaGFyZWQgaXMgdGhlIHNoYXJlZCBzdGF0ZSBmb3IgZW50aXJlIGJ1aWxkLiAgc2hh cmVkc29ydCBpcyB0aGUKKwkgKiBzaGFyZWQsIHR1cGxlc29ydC1tYW5hZ2VkIHN0YXRlIHBh c3NlZCB0byBlYWNoIHByb2Nlc3MgdHVwbGVzb3J0LgorCSAqIHNuYXBzaG90IGlzIHRoZSBz bmFwc2hvdCB1c2VkIGJ5IHRoZSBzY2FuIGlmZiBhbiBNVkNDIHNuYXBzaG90IGlzIHJlcXVp cmVkLgorCSAqLworCUJyaW5TaGFyZWQJICAgKmJyaW5zaGFyZWQ7CisJU2hhcmVkc29ydCAq c2hhcmVkc29ydDsKKwlTbmFwc2hvdAlzbmFwc2hvdDsKKwlXYWxVc2FnZSAgICp3YWx1c2Fn ZTsKKwlCdWZmZXJVc2FnZSAqYnVmZmVydXNhZ2U7Cit9IEJyaW5MZWFkZXI7CiAKIC8qCiAg KiBXZSB1c2UgYSBCcmluQnVpbGRTdGF0ZSBkdXJpbmcgaW5pdGlhbCBjb25zdHJ1Y3Rpb24g b2YgYSBCUklOIGluZGV4LgpAQCAtNDksMTMgKzE2MSwyMyBAQAogdHlwZWRlZiBzdHJ1Y3Qg QnJpbkJ1aWxkU3RhdGUKIHsKIAlSZWxhdGlvbglic19pcmVsOwotCWludAkJCWJzX251bXR1 cGxlczsKKwlkb3VibGUJCWJzX251bXR1cGxlczsKKwlkb3VibGUJCWJzX3JlbHR1cGxlczsK IAlCdWZmZXIJCWJzX2N1cnJlbnRJbnNlcnRCdWY7CiAJQmxvY2tOdW1iZXIgYnNfcGFnZXNQ ZXJSYW5nZTsKIAlCbG9ja051bWJlciBic19jdXJyUmFuZ2VTdGFydDsKIAlCcmluUmV2bWFw ICpic19ybUFjY2VzczsKIAlCcmluRGVzYyAgICpic19iZGVzYzsKIAlCcmluTWVtVHVwbGUg KmJzX2R0dXBsZTsKKworCS8qCisJICogYnNfbGVhZGVyIGlzIG9ubHkgcHJlc2VudCB3aGVu IGEgcGFyYWxsZWwgaW5kZXggYnVpbGQgaXMgcGVyZm9ybWVkLCBhbmQKKwkgKiBvbmx5IGlu IHRoZSBsZWFkZXIgcHJvY2Vzcy4gKEFjdHVhbGx5LCBvbmx5IHRoZSBsZWFkZXIgcHJvY2Vz cyBoYXMgYQorCSAqIEJyaW5CdWlsZFN0YXRlLikKKwkgKi8KKwlCcmluTGVhZGVyICpic19s ZWFkZXI7CisJaW50CQkJYnNfd29ya2VyX2lkOworCUJyaW5TcG9vbCAgKmJzX3Nwb29sOwog fSBCcmluQnVpbGRTdGF0ZTsKIAogLyoKQEAgLTg4LDYgKzIxMCw3IEBAIHN0YXRpYyB2b2lk IHRlcm1pbmF0ZV9icmluX2J1aWxkc3RhdGUoQnJpbkJ1aWxkU3RhdGUgKnN0YXRlKTsKIHN0 YXRpYyB2b2lkIGJyaW5zdW1tYXJpemUoUmVsYXRpb24gaW5kZXgsIFJlbGF0aW9uIGhlYXBS ZWwsIEJsb2NrTnVtYmVyIHBhZ2VSYW5nZSwKIAkJCQkJCSAgYm9vbCBpbmNsdWRlX3BhcnRp YWwsIGRvdWJsZSAqbnVtU3VtbWFyaXplZCwgZG91YmxlICpudW1FeGlzdGluZyk7CiBzdGF0 aWMgdm9pZCBmb3JtX2FuZF9pbnNlcnRfdHVwbGUoQnJpbkJ1aWxkU3RhdGUgKnN0YXRlKTsK K3N0YXRpYyB2b2lkIGZvcm1fYW5kX3NwaWxsX3R1cGxlKEJyaW5CdWlsZFN0YXRlICpzdGF0 ZSk7CiBzdGF0aWMgdm9pZCB1bmlvbl90dXBsZXMoQnJpbkRlc2MgKmJkZXNjLCBCcmluTWVt VHVwbGUgKmEsCiAJCQkJCQkgQnJpblR1cGxlICpiKTsKIHN0YXRpYyB2b2lkIGJyaW5fdmFj dXVtX3NjYW4oUmVsYXRpb24gaWR4cmVsLCBCdWZmZXJBY2Nlc3NTdHJhdGVneSBzdHJhdGVn eSk7CkBAIC05NSw2ICsyMTgsMjAgQEAgc3RhdGljIGJvb2wgYWRkX3ZhbHVlc190b19yYW5n ZShSZWxhdGlvbiBpZHhSZWwsIEJyaW5EZXNjICpiZGVzYywKIAkJCQkJCQkJQnJpbk1lbVR1 cGxlICpkdHVwLCBjb25zdCBEYXR1bSAqdmFsdWVzLCBjb25zdCBib29sICpudWxscyk7CiBz dGF0aWMgYm9vbCBjaGVja19udWxsX2tleXMoQnJpblZhbHVlcyAqYnZhbCwgU2NhbktleSAq bnVsbGtleXMsIGludCBubnVsbGtleXMpOwogCisvKiBwYXJhbGxlbCBpbmRleCBidWlsZHMg Ki8KK3N0YXRpYyB2b2lkIF9icmluX2JlZ2luX3BhcmFsbGVsKEJyaW5CdWlsZFN0YXRlICpi dWlsZHN0YXRlLCBSZWxhdGlvbiBoZWFwLCBSZWxhdGlvbiBpbmRleCwKKwkJCQkJCQkJIGJv b2wgaXNjb25jdXJyZW50LCBpbnQgcmVxdWVzdCk7CitzdGF0aWMgdm9pZCBfYnJpbl9lbmRf cGFyYWxsZWwoQnJpbkxlYWRlciAqYnRsZWFkZXIsIEJyaW5CdWlsZFN0YXRlICpzdGF0ZSk7 CitzdGF0aWMgU2l6ZSBfYnJpbl9wYXJhbGxlbF9lc3RpbWF0ZV9zaGFyZWQoUmVsYXRpb24g aGVhcCwgU25hcHNob3Qgc25hcHNob3QpOworc3RhdGljIHZvaWQgX2JyaW5fbGVhZGVyX3Bh cnRpY2lwYXRlX2FzX3dvcmtlcihCcmluQnVpbGRTdGF0ZSAqYnVpbGRzdGF0ZSwKKwkJCQkJ CQkJCQkJICAgUmVsYXRpb24gaGVhcCwgUmVsYXRpb24gaW5kZXgpOworc3RhdGljIHZvaWQg X2JyaW5fcGFyYWxsZWxfc2Nhbl9hbmRfYnVpbGQoQnJpbkJ1aWxkU3RhdGUgKmJ1aWxkc3Rh dGUsCisJCQkJCQkJCQkJICBCcmluU3Bvb2wgKmJyaW5zcG9vbCwKKwkJCQkJCQkJCQkgIEJy aW5TaGFyZWQgKmJyaW5zaGFyZWQsCisJCQkJCQkJCQkJICBTaGFyZWRzb3J0ICpzaGFyZWRz b3J0LAorCQkJCQkJCQkJCSAgUmVsYXRpb24gaGVhcCwgUmVsYXRpb24gaW5kZXgsCisJCQkJ CQkJCQkJICBpbnQgc29ydG1lbSwgYm9vbCBwcm9ncmVzcyk7CisKIC8qCiAgKiBCUklOIGhh bmRsZXIgZnVuY3Rpb246IHJldHVybiBJbmRleEFtUm91dGluZSB3aXRoIGFjY2VzcyBtZXRo b2QgcGFyYW1ldGVycwogICogYW5kIGNhbGxiYWNrcy4KQEAgLTExOSw2ICsyNTYsNyBAQCBi cmluaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCWFtcm91dGluZS0+YW1jbHVzdGVyYWJs ZSA9IGZhbHNlOwogCWFtcm91dGluZS0+YW1wcmVkbG9ja3MgPSBmYWxzZTsKIAlhbXJvdXRp bmUtPmFtY2FucGFyYWxsZWwgPSBmYWxzZTsKKwlhbXJvdXRpbmUtPmFtY2FuYnVpbGRwYXJh bGxlbCA9IHRydWU7CiAJYW1yb3V0aW5lLT5hbWNhbmluY2x1ZGUgPSBmYWxzZTsKIAlhbXJv dXRpbmUtPmFtdXNlbWFpbnRlbmFuY2V3b3JrbWVtID0gZmFsc2U7CiAJYW1yb3V0aW5lLT5h bXN1bW1hcml6aW5nID0gdHJ1ZTsKQEAgLTg3NCw2ICsxMDEyLDYzIEBAIGJyaW5idWlsZENh bGxiYWNrKFJlbGF0aW9uIGluZGV4LAogCQkJCQkJCSAgIHZhbHVlcywgaXNudWxsKTsKIH0K IAorLyoKKyAqIEEgdmVyc2lvbiBvZiB0aGUgY2FsbGJhY2ssIHVzZWQgYnkgcGFyYWxsZWwg aW5kZXggYnVpbGRzLiBUaGUgbWFpbiBkaWZmZXJlbmNlCisgKiBpcyB0aGF0IGluc3RlYWQg b2Ygd3JpdGluZyB0aGUgQlJJTiB0dXBsZXMgaW50byB0aGUgaW5kZXgsIHdlIHdyaXRlIHRo ZW0gaW50bworICogYSBzaGFyZWQgdHVwbGVzb3J0LCBhbmQgbGVhdmUgdGhlIGluc2VydGlv biB1cCB0byB0aGUgbGVhZGVyICh3aGljaCBtYXkKKyAqIHJlb3JkZXIgdGhlbSBhIGJpdCBl dGMuKS4gVGhlIGNhbGxiYWNrIGFsc28gZG9lcyBub3QgZ2VuZXJhdGUgZW1wdHkgcmFuZ2Vz LAorICogdGhvc2UgbWF5IGJlIGFkZGVkIGJ5IHRoZSBsZWFkZXIgd2hlbiBtZXJnaW5nIHJl c3VsdHMgZnJvbSB3b3JrZXJzLgorICovCitzdGF0aWMgdm9pZAorYnJpbmJ1aWxkQ2FsbGJh Y2tQYXJhbGxlbChSZWxhdGlvbiBpbmRleCwKKwkJCQkJCSAgSXRlbVBvaW50ZXIgdGlkLAor CQkJCQkJICBEYXR1bSAqdmFsdWVzLAorCQkJCQkJICBib29sICppc251bGwsCisJCQkJCQkg IGJvb2wgdHVwbGVJc0FsaXZlLAorCQkJCQkJICB2b2lkICpicnN0YXRlKQoreworCUJyaW5C dWlsZFN0YXRlICpzdGF0ZSA9IChCcmluQnVpbGRTdGF0ZSAqKSBicnN0YXRlOworCUJsb2Nr TnVtYmVyIHRoaXNibG9jazsKKworCXRoaXNibG9jayA9IEl0ZW1Qb2ludGVyR2V0QmxvY2tO dW1iZXIodGlkKTsKKworCS8qCisJICogSWYgd2UncmUgaW4gYSBibG9jayB0aGF0IGJlbG9u Z3MgdG8gYSBmdXR1cmUgcmFuZ2UsIHN1bW1hcml6ZSB3aGF0CisJICogd2UndmUgZ290IGFu ZCBzdGFydCBhZnJlc2guICBOb3RlIHRoZSBzY2FuIG1pZ2h0IGhhdmUgc2tpcHBlZCBtYW55 CisJICogcGFnZXMsIGlmIHRoZXkgd2VyZSBkZXZvaWQgb2YgbGl2ZSB0dXBsZXM7IHdlIGRv IG5vdCBjcmVhdGUgZW1wdHJ5CisJICogQlJJTiByYW5nZXMgaGVyZSAtIHRoZSBsZWFkZXIg aXMgcmVzcG9uc2libGUgZm9yIGZpbGxpbmcgdGhlbSBpbi4KKwkgKi8KKwlpZiAodGhpc2Js b2NrID4gc3RhdGUtPmJzX2N1cnJSYW5nZVN0YXJ0ICsgc3RhdGUtPmJzX3BhZ2VzUGVyUmFu Z2UgLSAxKQorCXsKKworCQlCUklOX2Vsb2coKERFQlVHMiwKKwkJCQkgICAiYnJpbmJ1aWxk Q2FsbGJhY2s6IGNvbXBsZXRlZCBhIHJhbmdlOiAldS0tJXUiLAorCQkJCSAgIHN0YXRlLT5i c19jdXJyUmFuZ2VTdGFydCwKKwkJCQkgICBzdGF0ZS0+YnNfY3VyclJhbmdlU3RhcnQgKyBz dGF0ZS0+YnNfcGFnZXNQZXJSYW5nZSkpOworCisJCS8qIGNyZWF0ZSB0aGUgaW5kZXggdHVw bGUgYW5kIHdyaXRlIGl0IGludG8gdGhlIHR1cGxlc29ydCAqLworCQlmb3JtX2FuZF9zcGls bF90dXBsZShzdGF0ZSk7CisKKwkJLyoKKwkJICogU2V0IHN0YXRlIHRvIGNvcnJlc3BvbmQg dG8gdGhlIG5leHQgcmFuZ2UgKGZvciB0aGlzIGJsb2NrKS4KKwkJICoKKwkJICogVGhpcyBz a2lwcyByYW5nZXMgdGhhdCBhcmUgZWl0aGVyIGVtcHR5IChhbmQgc28gd2UgZG9uJ3QgZ2V0 IGFueQorCQkgKiB0dXBsZXMgdG8gc3VtbWFyaXplKSwgb3IgcHJvY2Vzc2VzIGJ5IG90aGVy IHdvcmtlcnMuIFdlIGNhbid0CisJCSAqIGRpZmZlcmVudGlhdGUgdGhvc2UgY2FzZXMgaGVy ZSBlYXNpbHksIHNvIHdlIGxlYXZlIGl0IHVwIHRvIHRoZQorCQkgKiBsZWFkZXIgdG8gZmls bCBlbXB0eSByYW5nZXMgd2hlcmUgbmVlZGVkLgorCQkgKi8KKwkJc3RhdGUtPmJzX2N1cnJS YW5nZVN0YXJ0CisJCQk9IHN0YXRlLT5ic19wYWdlc1BlclJhbmdlICogKHRoaXNibG9jayAv IHN0YXRlLT5ic19wYWdlc1BlclJhbmdlKTsKKworCQkvKiByZS1pbml0aWFsaXplIHN0YXRl IGZvciBpdCAqLworCQlicmluX21lbXR1cGxlX2luaXRpYWxpemUoc3RhdGUtPmJzX2R0dXBs ZSwgc3RhdGUtPmJzX2JkZXNjKTsKKwl9CisKKwkvKiBBY2N1bXVsYXRlIHRoZSBjdXJyZW50 IHR1cGxlIGludG8gdGhlIHJ1bm5pbmcgc3RhdGUgKi8KKwkodm9pZCkgYWRkX3ZhbHVlc190 b19yYW5nZShpbmRleCwgc3RhdGUtPmJzX2JkZXNjLCBzdGF0ZS0+YnNfZHR1cGxlLAorCQkJ CQkJCSAgIHZhbHVlcywgaXNudWxsKTsKK30KKwogLyoKICAqIGJyaW5idWlsZCgpIC0tIGJ1 aWxkIGEgbmV3IEJSSU4gaW5kZXguCiAgKi8KQEAgLTkzNSwxOCArMTEzMCw4OSBAQCBicmlu YnVpbGQoUmVsYXRpb24gaGVhcCwgUmVsYXRpb24gaW5kZXgsIEluZGV4SW5mbyAqaW5kZXhJ bmZvKQogCXJldm1hcCA9IGJyaW5SZXZtYXBJbml0aWFsaXplKGluZGV4LCAmcGFnZXNQZXJS YW5nZSk7CiAJc3RhdGUgPSBpbml0aWFsaXplX2JyaW5fYnVpbGRzdGF0ZShpbmRleCwgcmV2 bWFwLCBwYWdlc1BlclJhbmdlKTsKIAorCXN0YXRlLT5ic19zcG9vbCA9IChCcmluU3Bvb2wg KikgcGFsbG9jMChzaXplb2YoQnJpblNwb29sKSk7CisJc3RhdGUtPmJzX3Nwb29sLT5oZWFw ID0gaGVhcDsKKwlzdGF0ZS0+YnNfc3Bvb2wtPmluZGV4ID0gaW5kZXg7CisKKwkvKgorCSAq IEF0dGVtcHQgdG8gbGF1bmNoIHBhcmFsbGVsIHdvcmtlciBzY2FuIHdoZW4gcmVxdWlyZWQK KwkgKgorCSAqIFhYWCBwbGFuX2NyZWF0ZV9pbmRleF93b3JrZXJzIG1ha2VzIHRoZSBudW1i ZXIgb2Ygd29ya2VycyBkZXBlbmRlbnQgb24KKwkgKiBtYWludGVuYW5jZV93b3JrX21lbSwg cmVxdWlyaW5nIDMyTUIgZm9yIGVhY2ggd29ya2VyLiBUaGF0IG1ha2VzIHNlbnNlCisJICog Zm9yIGJ0cmVlLCBidXQgbm90IGZvciBCUklOLCB3aGljaCBjYW4gZG8gYXdheSB3aXRoIG11 Y2ggbGVzcyBtZW1vcnkuCisJICogU28gbWF5YmUgbWFrZSB0aGF0IHNvbWVob3cgbGVzcyBz dHJpY3QsIG9wdGlvbmFsbHk/CisJICovCisJaWYgKGluZGV4SW5mby0+aWlfUGFyYWxsZWxX b3JrZXJzID4gMCkKKwkJX2JyaW5fYmVnaW5fcGFyYWxsZWwoc3RhdGUsIGhlYXAsIGluZGV4 LCBpbmRleEluZm8tPmlpX0NvbmN1cnJlbnQsCisJCQkJCQkJIGluZGV4SW5mby0+aWlfUGFy YWxsZWxXb3JrZXJzKTsKKwogCS8qCiAJICogTm93IHNjYW4gdGhlIHJlbGF0aW9uLiAgTm8g c3luY3NjYW4gYWxsb3dlZCBoZXJlIGJlY2F1c2Ugd2Ugd2FudCB0aGUKIAkgKiBoZWFwIGJs b2NrcyBpbiBwaHlzaWNhbCBvcmRlci4KIAkgKi8KLQlyZWx0dXBsZXMgPSB0YWJsZV9pbmRl eF9idWlsZF9zY2FuKGhlYXAsIGluZGV4LCBpbmRleEluZm8sIGZhbHNlLCB0cnVlLAotCQkJ CQkJCQkJICAgYnJpbmJ1aWxkQ2FsbGJhY2ssICh2b2lkICopIHN0YXRlLCBOVUxMKTsKIAot CS8qIHByb2Nlc3MgdGhlIGZpbmFsIGJhdGNoICovCi0JZm9ybV9hbmRfaW5zZXJ0X3R1cGxl KHN0YXRlKTsKKwkvKgorCSAqIElmIHBhcmFsbGVsIGJ1aWxkIHJlcXVlc3RlZCBhbmQgYXQg bGVhc3Qgb25lIHdvcmtlciBwcm9jZXNzIHdhcworCSAqIHN1Y2Nlc3NmdWxseSBsYXVuY2hl ZCwgc2V0IHVwIGNvb3JkaW5hdGlvbiBzdGF0ZQorCSAqLworCWlmIChzdGF0ZS0+YnNfbGVh ZGVyKQorCXsKKwkJU29ydENvb3JkaW5hdGUgY29vcmRpbmF0ZTsKKworCQljb29yZGluYXRl ID0gKFNvcnRDb29yZGluYXRlKSBwYWxsb2MwKHNpemVvZihTb3J0Q29vcmRpbmF0ZURhdGEp KTsKKwkJY29vcmRpbmF0ZS0+aXNXb3JrZXIgPSBmYWxzZTsKKwkJY29vcmRpbmF0ZS0+blBh cnRpY2lwYW50cyA9CisJCQlzdGF0ZS0+YnNfbGVhZGVyLT5ucGFydGljaXBhbnR0dXBsZXNv cnRzOworCQljb29yZGluYXRlLT5zaGFyZWRzb3J0ID0gc3RhdGUtPmJzX2xlYWRlci0+c2hh cmVkc29ydDsKKworCisJCS8qCisJCSAqIEJlZ2luIHNlcmlhbC9sZWFkZXIgdHVwbGVzb3J0 LgorCQkgKgorCQkgKiBJbiBjYXNlcyB3aGVyZSBwYXJhbGxlbGlzbSBpcyBpbnZvbHZlZCwg dGhlIGxlYWRlciByZWNlaXZlcyB0aGUgc2FtZQorCQkgKiBzaGFyZSBvZiBtYWludGVuYW5j ZV93b3JrX21lbSBhcyBhIHNlcmlhbCBzb3J0IChpdCBpcyBnZW5lcmFsbHkgdHJlYXRlZAor CQkgKiBpbiB0aGUgc2FtZSB3YXkgYXMgYSBzZXJpYWwgc29ydCBvbmNlIHdlIHJldHVybiku ICBQYXJhbGxlbCB3b3JrZXIKKwkJICogVHVwbGVzb3J0c3RhdGVzIHdpbGwgaGF2ZSByZWNl aXZlZCBvbmx5IGEgZnJhY3Rpb24gb2YKKwkJICogbWFpbnRlbmFuY2Vfd29ya19tZW0sIHRo b3VnaC4KKwkJICoKKwkJICogV2UgcmVseSBvbiB0aGUgbGlmZXRpbWUgb2YgdGhlIExlYWRl ciBUdXBsZXNvcnRzdGF0ZSBhbG1vc3Qgbm90CisJCSAqIG92ZXJsYXBwaW5nIHdpdGggYW55 IHdvcmtlciBUdXBsZXNvcnRzdGF0ZSdzIGxpZmV0aW1lLiAgVGhlcmUgbWF5IGJlCisJCSAq IHNvbWUgc21hbGwgb3ZlcmxhcCwgYnV0IHRoYXQncyBva2F5IGJlY2F1c2Ugd2UgcmVseSBv biBsZWFkZXIKKwkJICogVHVwbGVzb3J0c3RhdGUgb25seSBhbGxvY2F0aW5nIGEgc21hbGws IGZpeGVkIGFtb3VudCBvZiBtZW1vcnkgaGVyZS4KKwkJICogV2hlbiBpdHMgdHVwbGVzb3J0 X3BlcmZvcm1zb3J0KCkgaXMgY2FsbGVkIChieSBvdXIgY2FsbGVyKSwgYW5kCisJCSAqIHNp Z25pZmljYW50IGFtb3VudHMgb2YgbWVtb3J5IGFyZSBsaWtlbHkgdG8gYmUgdXNlZCwgYWxs IHdvcmtlcnMgbXVzdAorCQkgKiBoYXZlIGFscmVhZHkgZnJlZWQgYWxtb3N0IGFsbCBtZW1v cnkgaGVsZCBieSB0aGVpciBUdXBsZXNvcnRzdGF0ZXMKKwkJICogKHRoZXkgYXJlIGFib3V0 IHRvIGdvIGF3YXkgY29tcGxldGVseSwgdG9vKS4gIFRoZSBvdmVyYWxsIGVmZmVjdCBpcwor CQkgKiB0aGF0IG1haW50ZW5hbmNlX3dvcmtfbWVtIGFsd2F5cyByZXByZXNlbnRzIGFuIGFi c29sdXRlIGhpZ2ggd2F0ZXJtYXJrCisJCSAqIG9uIHRoZSBhbW91bnQgb2YgbWVtb3J5IHVz ZWQgYnkgYSBDUkVBVEUgSU5ERVggb3BlcmF0aW9uLCByZWdhcmRsZXNzIG9mCisJCSAqIHRo ZSB1c2Ugb2YgcGFyYWxsZWxpc20gb3IgYW55IG90aGVyIGZhY3Rvci4KKwkJICovCisJCXN0 YXRlLT5ic19zcG9vbC0+c29ydHN0YXRlID0KKwkJCXR1cGxlc29ydF9iZWdpbl9pbmRleF9i cmluKGhlYXAsIGluZGV4LAorCQkJCQkJCQkJICAgbWFpbnRlbmFuY2Vfd29ya19tZW0sIGNv b3JkaW5hdGUsCisJCQkJCQkJCQkgICBUVVBMRVNPUlRfTk9ORSk7CisKKwkJLyoKKwkJICog SW4gcGFyYWxsZWwgbW9kZSwgd2FpdCBmb3Igd29ya2VycyB0byBjb21wbGV0ZSwgYW5kIHRo ZW4gcmVhZCBhbGwKKwkJICogdHVwbGVzIGZyb20gdGhlIHNoYXJlZCB0dXBsZXNvcnQgYW5k IGluc2VydCB0aGVtIGludG8gdGhlIGluZGV4LgorCQkgKi8KKwkJX2JyaW5fZW5kX3BhcmFs bGVsKHN0YXRlLT5ic19sZWFkZXIsIHN0YXRlKTsKKwl9CisJZWxzZQkvKiBubyBwYXJhbGxl bCBpbmRleCBidWlsZCwganVzdCBkbyB0aGUgdXN1YWwgdGhpbmcgKi8KKwl7CisJCXJlbHR1 cGxlcyA9IHRhYmxlX2luZGV4X2J1aWxkX3NjYW4oaGVhcCwgaW5kZXgsIGluZGV4SW5mbywg ZmFsc2UsIHRydWUsCisJCQkJCQkJCQkJICAgYnJpbmJ1aWxkQ2FsbGJhY2ssICh2b2lkICop IHN0YXRlLCBOVUxMKTsKKworCQkvKiBwcm9jZXNzIHRoZSBmaW5hbCBiYXRjaCAqLworCQlm b3JtX2FuZF9pbnNlcnRfdHVwbGUoc3RhdGUpOworCisJCS8qIHRyYWNrIHRoZSBudW1iZXIg b2YgcmVsYXRpb24gdHVwbGVzICovCisJCXN0YXRlLT5ic19yZWx0dXBsZXMgPSByZWx0dXBs ZXM7CisJfQogCiAJLyogcmVsZWFzZSByZXNvdXJjZXMgKi8KIAlpZHh0dXBsZXMgPSBzdGF0 ZS0+YnNfbnVtdHVwbGVzOworCXJlbHR1cGxlcyA9IHN0YXRlLT5ic19yZWx0dXBsZXM7CiAJ YnJpblJldm1hcFRlcm1pbmF0ZShzdGF0ZS0+YnNfcm1BY2Nlc3MpOwogCXRlcm1pbmF0ZV9i cmluX2J1aWxkc3RhdGUoc3RhdGUpOwogCkBAIC0xMzY2LDEyICsxNjMyLDE2IEBAIGluaXRp YWxpemVfYnJpbl9idWlsZHN0YXRlKFJlbGF0aW9uIGlkeFJlbCwgQnJpblJldm1hcCAqcmV2 bWFwLAogCiAJc3RhdGUtPmJzX2lyZWwgPSBpZHhSZWw7CiAJc3RhdGUtPmJzX251bXR1cGxl cyA9IDA7CisJc3RhdGUtPmJzX3JlbHR1cGxlcyA9IDA7CiAJc3RhdGUtPmJzX2N1cnJlbnRJ bnNlcnRCdWYgPSBJbnZhbGlkQnVmZmVyOwogCXN0YXRlLT5ic19wYWdlc1BlclJhbmdlID0g cGFnZXNQZXJSYW5nZTsKIAlzdGF0ZS0+YnNfY3VyclJhbmdlU3RhcnQgPSAwOwogCXN0YXRl LT5ic19ybUFjY2VzcyA9IHJldm1hcDsKIAlzdGF0ZS0+YnNfYmRlc2MgPSBicmluX2J1aWxk X2Rlc2MoaWR4UmVsKTsKIAlzdGF0ZS0+YnNfZHR1cGxlID0gYnJpbl9uZXdfbWVtdHVwbGUo c3RhdGUtPmJzX2JkZXNjKTsKKwlzdGF0ZS0+YnNfbGVhZGVyID0gTlVMTDsKKwlzdGF0ZS0+ YnNfd29ya2VyX2lkID0gMDsKKwlzdGF0ZS0+YnNfc3Bvb2wgPSBOVUxMOwogCiAJcmV0dXJu IHN0YXRlOwogfQpAQCAtMTY2Myw2ICsxOTMzLDMyIEBAIGZvcm1fYW5kX2luc2VydF90dXBs ZShCcmluQnVpbGRTdGF0ZSAqc3RhdGUpCiAJcGZyZWUodHVwKTsKIH0KIAorLyoKKyAqIEdp dmVuIGEgZGVmb3JtZWQgdHVwbGUgaW4gdGhlIGJ1aWxkIHN0YXRlLCBjb252ZXJ0IGl0IGlu dG8gdGhlIG9uLWRpc2sKKyAqIGZvcm1hdCBhbmQgd3JpdGUgaXQgdG8gYSAoc2hhcmVkKSB0 dXBsZXNvcnQgKHRoZSBsZWFkZXIgd2lsbCBpbnNlcnQgaXQKKyAqIGludG8gdGhlIGluZGV4 IGxhdGVyKS4KKyAqLworc3RhdGljIHZvaWQKK2Zvcm1fYW5kX3NwaWxsX3R1cGxlKEJyaW5C dWlsZFN0YXRlICpzdGF0ZSkKK3sKKwlCcmluVHVwbGUgICp0dXA7CisJU2l6ZQkJc2l6ZTsK KworCS8qIGRvbid0IGluc2VydCBlbXB0eSB0dXBsZXMgaW4gcGFyYWxsZWwgYnVpbGQgKi8K KwlpZiAoc3RhdGUtPmJzX2R0dXBsZS0+YnRfZW1wdHlfcmFuZ2UpCisJCXJldHVybjsKKwor CXR1cCA9IGJyaW5fZm9ybV90dXBsZShzdGF0ZS0+YnNfYmRlc2MsIHN0YXRlLT5ic19jdXJy UmFuZ2VTdGFydCwKKwkJCQkJCSAgc3RhdGUtPmJzX2R0dXBsZSwgJnNpemUpOworCisJLyog d3JpdGUgdGhlIEJSSU4gdHVwbGUgdG8gdGhlIHR1cGxlc29ydCAqLworCXR1cGxlc29ydF9w dXRicmludHVwbGUoc3RhdGUtPmJzX3Nwb29sLT5zb3J0c3RhdGUsIHR1cCwgc2l6ZSk7CisK KwlzdGF0ZS0+YnNfbnVtdHVwbGVzKys7CisKKwlwZnJlZSh0dXApOworfQorCiAvKgogICog R2l2ZW4gdHdvIGRlZm9ybWVkIHR1cGxlcywgYWRqdXN0IHRoZSBmaXJzdCBvbmUgc28gdGhh dCBpdCdzIGNvbnNpc3RlbnQKICAqIHdpdGggdGhlIHN1bW1hcnkgdmFsdWVzIGluIGJvdGgu CkBAIC0xOTgyLDMgKzIyNzgsNTYzIEBAIGNoZWNrX251bGxfa2V5cyhCcmluVmFsdWVzICpi dmFsLCBTY2FuS2V5ICpudWxsa2V5cywgaW50IG5udWxsa2V5cykKIAogCXJldHVybiB0cnVl OwogfQorCitzdGF0aWMgdm9pZAorX2JyaW5fYmVnaW5fcGFyYWxsZWwoQnJpbkJ1aWxkU3Rh dGUgKmJ1aWxkc3RhdGUsIFJlbGF0aW9uIGhlYXAsIFJlbGF0aW9uIGluZGV4LAorCQkJCQkg Ym9vbCBpc2NvbmN1cnJlbnQsIGludCByZXF1ZXN0KQoreworCVBhcmFsbGVsQ29udGV4dCAq cGN4dDsKKwlpbnQJCQlzY2FudHVwbGVzb3J0c3RhdGVzOworCVNuYXBzaG90CXNuYXBzaG90 OworCVNpemUJCWVzdGJyaW5zaGFyZWQ7CisJU2l6ZQkJZXN0c29ydDsKKwlCcmluU2hhcmVk ICAgKmJyaW5zaGFyZWQ7CisJU2hhcmVkc29ydCAgICpzaGFyZWRzb3J0OworCUJyaW5MZWFk ZXIgICAqYnJpbmxlYWRlciA9IChCcmluTGVhZGVyICopIHBhbGxvYzAoc2l6ZW9mKEJyaW5M ZWFkZXIpKTsKKwlXYWxVc2FnZSAgICp3YWx1c2FnZTsKKwlCdWZmZXJVc2FnZSAqYnVmZmVy dXNhZ2U7CisJYm9vbAkJbGVhZGVycGFydGljaXBhdGVzID0gdHJ1ZTsKKwlpbnQJCQlxdWVy eWxlbjsKKworI2lmZGVmIERJU0FCTEVfTEVBREVSX1BBUlRJQ0lQQVRJT04KKwlsZWFkZXJw YXJ0aWNpcGF0ZXMgPSBmYWxzZTsKKyNlbmRpZgorCisJLyoKKwkgKiBFbnRlciBwYXJhbGxl bCBtb2RlLCBhbmQgY3JlYXRlIGNvbnRleHQgZm9yIHBhcmFsbGVsIGJ1aWxkIG9mIGJyaW4K KwkgKiBpbmRleAorCSAqLworCUVudGVyUGFyYWxsZWxNb2RlKCk7CisJQXNzZXJ0KHJlcXVl c3QgPiAwKTsKKwlwY3h0ID0gQ3JlYXRlUGFyYWxsZWxDb250ZXh0KCJwb3N0Z3JlcyIsICJf YnJpbl9wYXJhbGxlbF9idWlsZF9tYWluIiwKKwkJCQkJCQkJIHJlcXVlc3QpOworCisJc2Nh bnR1cGxlc29ydHN0YXRlcyA9IGxlYWRlcnBhcnRpY2lwYXRlcyA/IHJlcXVlc3QgKyAxIDog cmVxdWVzdDsKKworCS8qCisJICogUHJlcGFyZSBmb3Igc2NhbiBvZiB0aGUgYmFzZSByZWxh dGlvbi4gIEluIGEgbm9ybWFsIGluZGV4IGJ1aWxkLCB3ZSB1c2UKKwkgKiBTbmFwc2hvdEFu eSBiZWNhdXNlIHdlIG11c3QgcmV0cmlldmUgYWxsIHR1cGxlcyBhbmQgZG8gb3VyIG93biB0 aW1lCisJICogcXVhbCBjaGVja3MgKGJlY2F1c2Ugd2UgaGF2ZSB0byBpbmRleCBSRUNFTlRM WV9ERUFEIHR1cGxlcykuICBJbiBhCisJICogY29uY3VycmVudCBidWlsZCwgd2UgdGFrZSBh IHJlZ3VsYXIgTVZDQyBzbmFwc2hvdCBhbmQgaW5kZXggd2hhdGV2ZXIncworCSAqIGxpdmUg YWNjb3JkaW5nIHRvIHRoYXQuCisJICovCisJaWYgKCFpc2NvbmN1cnJlbnQpCisJCXNuYXBz aG90ID0gU25hcHNob3RBbnk7CisJZWxzZQorCQlzbmFwc2hvdCA9IFJlZ2lzdGVyU25hcHNo b3QoR2V0VHJhbnNhY3Rpb25TbmFwc2hvdCgpKTsKKworCS8qCisJICogRXN0aW1hdGUgc2l6 ZSBmb3Igb3VyIG93biBQQVJBTExFTF9LRVlfQlJJTl9TSEFSRUQgd29ya3NwYWNlLgorCSAq LworCWVzdGJyaW5zaGFyZWQgPSBfYnJpbl9wYXJhbGxlbF9lc3RpbWF0ZV9zaGFyZWQoaGVh cCwgc25hcHNob3QpOworCXNobV90b2NfZXN0aW1hdGVfY2h1bmsoJnBjeHQtPmVzdGltYXRv ciwgZXN0YnJpbnNoYXJlZCk7CisJZXN0c29ydCA9IHR1cGxlc29ydF9lc3RpbWF0ZV9zaGFy ZWQoc2NhbnR1cGxlc29ydHN0YXRlcyk7CisJc2htX3RvY19lc3RpbWF0ZV9jaHVuaygmcGN4 dC0+ZXN0aW1hdG9yLCBlc3Rzb3J0KTsKKworCXNobV90b2NfZXN0aW1hdGVfa2V5cygmcGN4 dC0+ZXN0aW1hdG9yLCAyKTsKKworCS8qCisJICogRXN0aW1hdGUgc3BhY2UgZm9yIFdhbFVz YWdlIGFuZCBCdWZmZXJVc2FnZSAtLSBQQVJBTExFTF9LRVlfV0FMX1VTQUdFCisJICogYW5k IFBBUkFMTEVMX0tFWV9CVUZGRVJfVVNBR0UuCisJICoKKwkgKiBJZiB0aGVyZSBhcmUgbm8g ZXh0ZW5zaW9ucyBsb2FkZWQgdGhhdCBjYXJlLCB3ZSBjb3VsZCBza2lwIHRoaXMuICBXZQor CSAqIGhhdmUgbm8gd2F5IG9mIGtub3dpbmcgd2hldGhlciBhbnlvbmUncyBsb29raW5nIGF0 IHBnV2FsVXNhZ2Ugb3IKKwkgKiBwZ0J1ZmZlclVzYWdlLCBzbyBkbyBpdCB1bmNvbmRpdGlv bmFsbHkuCisJICovCisJc2htX3RvY19lc3RpbWF0ZV9jaHVuaygmcGN4dC0+ZXN0aW1hdG9y LAorCQkJCQkJICAgbXVsX3NpemUoc2l6ZW9mKFdhbFVzYWdlKSwgcGN4dC0+bndvcmtlcnMp KTsKKwlzaG1fdG9jX2VzdGltYXRlX2tleXMoJnBjeHQtPmVzdGltYXRvciwgMSk7CisJc2ht X3RvY19lc3RpbWF0ZV9jaHVuaygmcGN4dC0+ZXN0aW1hdG9yLAorCQkJCQkJICAgbXVsX3Np emUoc2l6ZW9mKEJ1ZmZlclVzYWdlKSwgcGN4dC0+bndvcmtlcnMpKTsKKwlzaG1fdG9jX2Vz dGltYXRlX2tleXMoJnBjeHQtPmVzdGltYXRvciwgMSk7CisKKwkvKiBGaW5hbGx5LCBlc3Rp bWF0ZSBQQVJBTExFTF9LRVlfUVVFUllfVEVYVCBzcGFjZSAqLworCWlmIChkZWJ1Z19xdWVy eV9zdHJpbmcpCisJeworCQlxdWVyeWxlbiA9IHN0cmxlbihkZWJ1Z19xdWVyeV9zdHJpbmcp OworCQlzaG1fdG9jX2VzdGltYXRlX2NodW5rKCZwY3h0LT5lc3RpbWF0b3IsIHF1ZXJ5bGVu ICsgMSk7CisJCXNobV90b2NfZXN0aW1hdGVfa2V5cygmcGN4dC0+ZXN0aW1hdG9yLCAxKTsK Kwl9CisJZWxzZQorCQlxdWVyeWxlbiA9IDA7CQkJLyoga2VlcCBjb21waWxlciBxdWlldCAq LworCisJLyogRXZlcnlvbmUncyBoYWQgYSBjaGFuY2UgdG8gYXNrIGZvciBzcGFjZSwgc28g bm93IGNyZWF0ZSB0aGUgRFNNICovCisJSW5pdGlhbGl6ZVBhcmFsbGVsRFNNKHBjeHQpOwor CisJLyogSWYgbm8gRFNNIHNlZ21lbnQgd2FzIGF2YWlsYWJsZSwgYmFjayBvdXQgKGRvIHNl cmlhbCBidWlsZCkgKi8KKwlpZiAocGN4dC0+c2VnID09IE5VTEwpCisJeworCQlpZiAoSXNN VkNDU25hcHNob3Qoc25hcHNob3QpKQorCQkJVW5yZWdpc3RlclNuYXBzaG90KHNuYXBzaG90 KTsKKwkJRGVzdHJveVBhcmFsbGVsQ29udGV4dChwY3h0KTsKKwkJRXhpdFBhcmFsbGVsTW9k ZSgpOworCQlyZXR1cm47CisJfQorCisJLyogU3RvcmUgc2hhcmVkIGJ1aWxkIHN0YXRlLCBm b3Igd2hpY2ggd2UgcmVzZXJ2ZWQgc3BhY2UgKi8KKwlicmluc2hhcmVkID0gKEJyaW5TaGFy ZWQgKikgc2htX3RvY19hbGxvY2F0ZShwY3h0LT50b2MsIGVzdGJyaW5zaGFyZWQpOworCS8q IEluaXRpYWxpemUgaW1tdXRhYmxlIHN0YXRlICovCisJYnJpbnNoYXJlZC0+aGVhcHJlbGlk ID0gUmVsYXRpb25HZXRSZWxpZChoZWFwKTsKKwlicmluc2hhcmVkLT5pbmRleHJlbGlkID0g UmVsYXRpb25HZXRSZWxpZChpbmRleCk7CisJYnJpbnNoYXJlZC0+aXNjb25jdXJyZW50ID0g aXNjb25jdXJyZW50OworCWJyaW5zaGFyZWQtPnNjYW50dXBsZXNvcnRzdGF0ZXMgPSBzY2Fu dHVwbGVzb3J0c3RhdGVzOworCWJyaW5zaGFyZWQtPnBhZ2VzUGVyUmFuZ2UgPSBidWlsZHN0 YXRlLT5ic19wYWdlc1BlclJhbmdlOworCUNvbmRpdGlvblZhcmlhYmxlSW5pdCgmYnJpbnNo YXJlZC0+d29ya2Vyc2RvbmVjdik7CisJU3BpbkxvY2tJbml0KCZicmluc2hhcmVkLT5tdXRl eCk7CisKKwkvKiBJbml0aWFsaXplIG11dGFibGUgc3RhdGUgKi8KKwlicmluc2hhcmVkLT5u cGFydGljaXBhbnRzZG9uZSA9IDA7CisJYnJpbnNoYXJlZC0+cmVsdHVwbGVzID0gMC4wOwor CWJyaW5zaGFyZWQtPmluZHR1cGxlcyA9IDAuMDsKKworCXRhYmxlX3BhcmFsbGVsc2Nhbl9p bml0aWFsaXplKGhlYXAsCisJCQkJCQkJCSAgUGFyYWxsZWxUYWJsZVNjYW5Gcm9tQnJpblNo YXJlZChicmluc2hhcmVkKSwKKwkJCQkJCQkJICBzbmFwc2hvdCk7CisKKwkvKgorCSAqIFN0 b3JlIHNoYXJlZCB0dXBsZXNvcnQtcHJpdmF0ZSBzdGF0ZSwgZm9yIHdoaWNoIHdlIHJlc2Vy dmVkIHNwYWNlLgorCSAqIFRoZW4sIGluaXRpYWxpemUgb3BhcXVlIHN0YXRlIHVzaW5nIHR1 cGxlc29ydCByb3V0aW5lLgorCSAqLworCXNoYXJlZHNvcnQgPSAoU2hhcmVkc29ydCAqKSBz aG1fdG9jX2FsbG9jYXRlKHBjeHQtPnRvYywgZXN0c29ydCk7CisJdHVwbGVzb3J0X2luaXRp YWxpemVfc2hhcmVkKHNoYXJlZHNvcnQsIHNjYW50dXBsZXNvcnRzdGF0ZXMsCisJCQkJCQkJ CXBjeHQtPnNlZyk7CisKKwkvKgorCSAqIFN0b3JlIHNoYXJlZCB0dXBsZXNvcnQtcHJpdmF0 ZSBzdGF0ZSwgZm9yIHdoaWNoIHdlIHJlc2VydmVkIHNwYWNlLgorCSAqIFRoZW4sIGluaXRp YWxpemUgb3BhcXVlIHN0YXRlIHVzaW5nIHR1cGxlc29ydCByb3V0aW5lLgorCSAqLworCXNo bV90b2NfaW5zZXJ0KHBjeHQtPnRvYywgUEFSQUxMRUxfS0VZX0JSSU5fU0hBUkVELCBicmlu c2hhcmVkKTsKKwlzaG1fdG9jX2luc2VydChwY3h0LT50b2MsIFBBUkFMTEVMX0tFWV9UVVBM RVNPUlQsIHNoYXJlZHNvcnQpOworCisJLyogU3RvcmUgcXVlcnkgc3RyaW5nIGZvciB3b3Jr ZXJzICovCisJaWYgKGRlYnVnX3F1ZXJ5X3N0cmluZykKKwl7CisJCWNoYXIJICAgKnNoYXJl ZHF1ZXJ5OworCisJCXNoYXJlZHF1ZXJ5ID0gKGNoYXIgKikgc2htX3RvY19hbGxvY2F0ZShw Y3h0LT50b2MsIHF1ZXJ5bGVuICsgMSk7CisJCW1lbWNweShzaGFyZWRxdWVyeSwgZGVidWdf cXVlcnlfc3RyaW5nLCBxdWVyeWxlbiArIDEpOworCQlzaG1fdG9jX2luc2VydChwY3h0LT50 b2MsIFBBUkFMTEVMX0tFWV9RVUVSWV9URVhULCBzaGFyZWRxdWVyeSk7CisJfQorCisJLyoK KwkgKiBBbGxvY2F0ZSBzcGFjZSBmb3IgZWFjaCB3b3JrZXIncyBXYWxVc2FnZSBhbmQgQnVm ZmVyVXNhZ2U7IG5vIG5lZWQgdG8KKwkgKiBpbml0aWFsaXplLgorCSAqLworCXdhbHVzYWdl ID0gc2htX3RvY19hbGxvY2F0ZShwY3h0LT50b2MsCisJCQkJCQkJCW11bF9zaXplKHNpemVv ZihXYWxVc2FnZSksIHBjeHQtPm53b3JrZXJzKSk7CisJc2htX3RvY19pbnNlcnQocGN4dC0+ dG9jLCBQQVJBTExFTF9LRVlfV0FMX1VTQUdFLCB3YWx1c2FnZSk7CisJYnVmZmVydXNhZ2Ug PSBzaG1fdG9jX2FsbG9jYXRlKHBjeHQtPnRvYywKKwkJCQkJCQkJICAgbXVsX3NpemUoc2l6 ZW9mKEJ1ZmZlclVzYWdlKSwgcGN4dC0+bndvcmtlcnMpKTsKKwlzaG1fdG9jX2luc2VydChw Y3h0LT50b2MsIFBBUkFMTEVMX0tFWV9CVUZGRVJfVVNBR0UsIGJ1ZmZlcnVzYWdlKTsKKwor CS8qIExhdW5jaCB3b3JrZXJzLCBzYXZpbmcgc3RhdHVzIGZvciBsZWFkZXIvY2FsbGVyICov CisJTGF1bmNoUGFyYWxsZWxXb3JrZXJzKHBjeHQpOworCWJyaW5sZWFkZXItPnBjeHQgPSBw Y3h0OworCWJyaW5sZWFkZXItPm5wYXJ0aWNpcGFudHR1cGxlc29ydHMgPSBwY3h0LT5ud29y a2Vyc19sYXVuY2hlZDsKKwlpZiAobGVhZGVycGFydGljaXBhdGVzKQorCQlicmlubGVhZGVy LT5ucGFydGljaXBhbnR0dXBsZXNvcnRzKys7CisJYnJpbmxlYWRlci0+YnJpbnNoYXJlZCA9 IGJyaW5zaGFyZWQ7CisJYnJpbmxlYWRlci0+c2hhcmVkc29ydCA9IHNoYXJlZHNvcnQ7CisJ YnJpbmxlYWRlci0+c25hcHNob3QgPSBzbmFwc2hvdDsKKwlicmlubGVhZGVyLT53YWx1c2Fn ZSA9IHdhbHVzYWdlOworCWJyaW5sZWFkZXItPmJ1ZmZlcnVzYWdlID0gYnVmZmVydXNhZ2U7 CisKKwkvKiBJZiBubyB3b3JrZXJzIHdlcmUgc3VjY2Vzc2Z1bGx5IGxhdW5jaGVkLCBiYWNr IG91dCAoZG8gc2VyaWFsIGJ1aWxkKSAqLworCWlmIChwY3h0LT5ud29ya2Vyc19sYXVuY2hl ZCA9PSAwKQorCXsKKwkJX2JyaW5fZW5kX3BhcmFsbGVsKGJyaW5sZWFkZXIsIE5VTEwpOwor CQlyZXR1cm47CisJfQorCisJLyogU2F2ZSBsZWFkZXIgc3RhdGUgbm93IHRoYXQgaXQncyBj bGVhciBidWlsZCB3aWxsIGJlIHBhcmFsbGVsICovCisJYnVpbGRzdGF0ZS0+YnNfbGVhZGVy ID0gYnJpbmxlYWRlcjsKKworCS8qIEpvaW4gaGVhcCBzY2FuIG91cnNlbHZlcyAqLworCWlm IChsZWFkZXJwYXJ0aWNpcGF0ZXMpCisJCV9icmluX2xlYWRlcl9wYXJ0aWNpcGF0ZV9hc193 b3JrZXIoYnVpbGRzdGF0ZSwgaGVhcCwgaW5kZXgpOworCisJLyoKKwkgKiBDYWxsZXIgbmVl ZHMgdG8gd2FpdCBmb3IgYWxsIGxhdW5jaGVkIHdvcmtlcnMgd2hlbiB3ZSByZXR1cm4uICBN YWtlCisJICogc3VyZSB0aGF0IHRoZSBmYWlsdXJlLXRvLXN0YXJ0IGNhc2Ugd2lsbCBub3Qg aGFuZyBmb3JldmVyLgorCSAqLworCVdhaXRGb3JQYXJhbGxlbFdvcmtlcnNUb0F0dGFjaChw Y3h0KTsKK30KKworLyoKKyAqIFNodXQgZG93biB3b3JrZXJzLCBkZXN0cm95IHBhcmFsbGVs IGNvbnRleHQsIGFuZCBlbmQgcGFyYWxsZWwgbW9kZS4KKyAqLworc3RhdGljIHZvaWQKK19i cmluX2VuZF9wYXJhbGxlbChCcmluTGVhZGVyICpicmlubGVhZGVyLCBCcmluQnVpbGRTdGF0 ZSAqc3RhdGUpCit7CisJaW50CQkJaTsKKwlCcmluVHVwbGUgICpidHVwOworCUJyaW5NZW1U dXBsZSAqbWVtdHVwbGUgPSBOVUxMOworCVNpemUJCXR1cGxlbjsKKwlCcmluU2hhcmVkICpi cmluc2hhcmVkID0gYnJpbmxlYWRlci0+YnJpbnNoYXJlZDsKKwlCbG9ja051bWJlcglwcmV2 Ymxrbm8gPSBJbnZhbGlkQmxvY2tOdW1iZXI7CisJQnJpblR1cGxlICAqZW1wdHlUdXBsZSA9 IE5VTEw7CisJU2l6ZQkJZW1wdHlTaXplOworCUJyaW5TcG9vbCAgKnNwb29sOworCisJLyog U2h1dGRvd24gd29ya2VyIHByb2Nlc3NlcyAqLworCVdhaXRGb3JQYXJhbGxlbFdvcmtlcnNU b0ZpbmlzaChicmlubGVhZGVyLT5wY3h0KTsKKworCWlmICghc3RhdGUpCisJCXJldHVybjsK KworCS8qIGNvcHkgdGhlIGRhdGEgaW50byBsZWFkZXIgc3RhdGUgKHdlIGhhdmUgdG8gd2Fp dCBmb3IgdGhlIHdvcmtlcnMgKSAqLworCXN0YXRlLT5ic19yZWx0dXBsZXMgPSBicmluc2hh cmVkLT5yZWx0dXBsZXM7CisJc3RhdGUtPmJzX251bXR1cGxlcyA9IGJyaW5zaGFyZWQtPmlu ZHR1cGxlczsKKworCS8qIGRvIHRoZSBhY3R1YWwgc29ydCBpbiB0aGUgbGVhZGVyICovCisJ c3Bvb2wgPSBzdGF0ZS0+YnNfc3Bvb2w7CisJdHVwbGVzb3J0X3BlcmZvcm1zb3J0KHNwb29s LT5zb3J0c3RhdGUpOworCisJLyoKKwkgKiBJbml0aWFsaXplIEJyaW5NZW1UdXBsZSB3ZSds bCB1c2UgdG8gdW5pb24gc3VtbWFyaWVzIGZyb20gd29ya2VycworCSAqIChpbiBjYXNlIHRo ZXkgaGFwcGVuZWQgdG8gcHJvZHVjZSBwYXJ0cyBvZiB0aGUgc2FtZSBwYWdhIHJhbmdlKS4K KwkgKi8KKwltZW10dXBsZSA9IGJyaW5fbmV3X21lbXR1cGxlKHN0YXRlLT5ic19iZGVzYyk7 CisKKwkvKgorCSAqIFJlYWQgdGhlIEJSSU4gdHVwbGVzIGZyb20gdGhlIHNoYXJlZCB0dXBs ZXNvcnQsIHNvcnRlZCBieSBibG9jayBudW1iZXIuCisJICogVGhhdCBwcm9iYWJseSBnaXZl cyB1cyBhbiBpbmRleCB0aGF0IGlzIGNoZWFwZXIgdG8gc2NhbiwgdGhhbmtzIHRvIG1vc3Rs eQorCSAqIGdldHRpbmcgZGF0YSBmcm9tIHRoZSBzYW1lIGluZGV4IHBhZ2UgYXMgYmVmb3Jl LgorCSAqLworCXdoaWxlICgoYnR1cCA9IHR1cGxlc29ydF9nZXRicmludHVwbGUoc3Bvb2wt PnNvcnRzdGF0ZSwgJnR1cGxlbiwgdHJ1ZSkpICE9IE5VTEwpCisJeworCQkvKiBSYW5nZXMg c2hvdWxkIGJlIG11bHRpcGxlcyBvZiBwYWdlc19wZXJfcmFuZ2UgZm9yIHRoZSBpbmRleC4g Ki8KKwkJQXNzZXJ0KGJ0dXAtPmJ0X2Jsa25vICUgYnJpbnNoYXJlZC0+cGFnZXNQZXJSYW5n ZSA9PSAwKTsKKworCQkvKgorCQkgKiBEbyB3ZSBuZWVkIHRvIHVuaW9uIHN1bW1hcmllcyBm b3IgdGhlIHNhbWUgcGFnZSByYW5nZT8KKwkJICoKKwkJICogSWYgdGhpcyBpcyB0aGUgZmly c3QgYnJpbiB0dXBsZSB3ZSByZWFkLCB0aGVuIGp1c3QgZGVmb3JtIGl0IGludG8KKwkJICog dGhlIG1lbXR1cGxlLCBhbmQgY29udGludWUgd2l0aCB0aGUgbmV4dCBvbmUgZnJvbSB0dXBs ZXNvcnQuIFdlCisJCSAqIGhvd2V2ZXIgbWF5IG5lZWQgdG8gaW5zZXJ0IGVtcHR5IHN1bW1h cmllcyBpbnRvIHRoZSBpbmRleC4KKwkJICoKKwkJICogSWYgaXQncyB0aGUgc2FtZSBibG9j ayBhcyB0aGUgbGFzdCB3ZSBzYXcsIHdlIHNpbXBseSB1bmlvbiB0aGUKKwkJICogYnJpbiB0 dXBsZSBpbnRvIGl0LCBhbmQgd2UncmUgZG9uZSAtIHdlIGRvbid0IGV2ZW4gbmVlZCB0byBp bnNlcnQKKwkJICogZW1wdHkgcmFuZ2VzLCBiZWNhdXNlIHRoYXQgd2FzIGRvbmUgZWFybGll ciB3aGVuIHdlIHNhdyB0aGUgZmlyc3QKKwkJICogYnJpbiB0dXBsZSAoZm9yIHRoaXMgcmFu Z2UpLgorCQkgKgorCQkgKiBGaW5hbGx5LCBpZiBpdCdzIG5vdCB0aGUgZmlyc3QgYnJpbiB0 dXBsZSwgYW5kIGl0J3Mgbm90IHRoZSBzYW1lCisJCSAqIHBhZ2UgcmFuZ2UsIHdlIG5lZWQg dG8gZG8gdGhlIGluc2VydCBhbmQgdGhlbiBkZWZvcm0gdGhlIHR1cGxlCisJCSAqIGludG8g dGhlIG1lbXR1cGxlLiBUaGVuIHdlJ2xsIGluc2VydCBlbXB0eSByYW5nZXMgYmVmb3JlIHRo ZQorCQkgKiBuZXcgYnJpbiB0dXBsZSwgaWYgbmVlZGVkLgorCQkgKi8KKwkJaWYgKHByZXZi bGtubyA9PSBJbnZhbGlkQmxvY2tOdW1iZXIpCisJCXsKKwkJCS8qIEZpcnN0IGJyaW4gdHVw bGVzLCBqdXN0IGRlZm9ybSBpbnRvIG1lbXR1cGxlLiAqLworCQkJbWVtdHVwbGUgPSBicmlu X2RlZm9ybV90dXBsZShzdGF0ZS0+YnNfYmRlc2MsIGJ0dXAsIG1lbXR1cGxlKTsKKworCQkJ LyogY29udGludWUgdG8gaW5zZXJ0IGVtcHR5IHBhZ2VzIGJlZm9yZSB0aGlzYmxvY2sgKi8K KwkJfQorCQllbHNlIGlmIChtZW10dXBsZS0+YnRfYmxrbm8gPT0gYnR1cC0+YnRfYmxrbm8p CisJCXsKKwkJCS8qCisJCQkgKiBOb3QgdGhlIGZpcnN0IGJyaW4gdHVwbGUsIGJ1dCBzYW1l IHBhZ2UgcmFuZ2UgYXMgdGhlIHByZXZpb3VzCisJCQkgKiBvbmUsIHNvIHdlIGNhbiBtZXJn ZSBpdCBpbnRvIHRoZSBtZW10dXBsZS4KKwkJCSAqLworCQkJdW5pb25fdHVwbGVzKHN0YXRl LT5ic19iZGVzYywgbWVtdHVwbGUsIGJ0dXApOworCQkJY29udGludWU7CisJCX0KKwkJZWxz ZQorCQl7CisJCQlCcmluVHVwbGUgICp0bXA7CisJCQlTaXplCQlsZW47CisKKwkJCS8qCisJ CQkgKiBXZSBnb3QgYnJpbiB0dXBsZSBmb3IgYSBkaWZmZXJlbnQgcGFnZSByYW5nZSwgc28g Zm9ybSBhIGJyaW4KKwkJCSAqIHR1cGxlIGZyb20gdGhlIG1lbXR1cGxlLCBpbnNlcnQgaXQs IGFuZCByZS1pbml0IHRoZSBtZW10dXBsZQorCQkJICogZnJvbSB0aGUgbmV3IGJyaW4gdHVw bGUuCisJCQkgKi8KKwkJCXRtcCA9IGJyaW5fZm9ybV90dXBsZShzdGF0ZS0+YnNfYmRlc2Ms IG1lbXR1cGxlLT5idF9ibGtubywKKwkJCQkJCQkJICBtZW10dXBsZSwgJmxlbik7CisKKwkJ CWJyaW5fZG9pbnNlcnQoc3RhdGUtPmJzX2lyZWwsIHN0YXRlLT5ic19wYWdlc1BlclJhbmdl LCBzdGF0ZS0+YnNfcm1BY2Nlc3MsCisJCQkJCQkgICZzdGF0ZS0+YnNfY3VycmVudEluc2Vy dEJ1ZiwgdG1wLT5idF9ibGtubywgdG1wLCBsZW4pOworCisJCQkvKiBmcmVlIHRoZSBmb3Jt ZWQgb24tZGlzayB0dXBsZSAqLworCQkJcGZyZWUodG1wKTsKKworCQkJbWVtdHVwbGUgPSBi cmluX2RlZm9ybV90dXBsZShzdGF0ZS0+YnNfYmRlc2MsIGJ0dXAsIG1lbXR1cGxlKTsKKwor CQkJLyogY29udGludWUgdG8gaW5zZXJ0IGVtcHR5IHBhZ2VzIGJlZm9yZSB0aGlzYmxvY2sg Ki8KKwkJfQorCisJCS8qIEZpbGwgZW1wdHkgcmFuZ2VzIGZvciBhbGwgcmFuZ2VzIG1pc3Np bmcgaW4gdGhlIHR1cGxlc29ydC4gKi8KKwkJcHJldmJsa25vID0gKHByZXZibGtubyA9PSBJ bnZhbGlkQmxvY2tOdW1iZXIpID8gMCA6IHByZXZibGtubzsKKwkJd2hpbGUgKHByZXZibGtu byArIHN0YXRlLT5ic19wYWdlc1BlclJhbmdlIDwgYnR1cC0+YnRfYmxrbm8pCisJCXsKKwkJ CS8qIHRoZSBtaXNzaW5nIHJhbmdlICovCisJCQlwcmV2Ymxrbm8gKz0gc3RhdGUtPmJzX3Bh Z2VzUGVyUmFuZ2U7CisKKwkJCS8qIERpZCB3ZSBhbHJlYWR5IGJ1aWxkIHRoZSBlbXB0eSBy YW5nZT8gSWYgbm90LCBkbyBpdCBub3cuICovCisJCQlpZiAoZW1wdHlUdXBsZSA9PSBOVUxM KQorCQkJeworCQkJCUJyaW5NZW1UdXBsZSAqZHR1cGxlID0gYnJpbl9uZXdfbWVtdHVwbGUo c3RhdGUtPmJzX2JkZXNjKTsKKworCQkJCWVtcHR5VHVwbGUgPSBicmluX2Zvcm1fdHVwbGUo c3RhdGUtPmJzX2JkZXNjLCBwcmV2Ymxrbm8sIGR0dXBsZSwgJmVtcHR5U2l6ZSk7CisJCQl9 CisJCQllbHNlCisJCQl7CisJCQkJLyogd2UgYWxyZWFkeSBoYXZlIGFtICJlbXB0eSByYW5n ZSIgdHVwbGUsIGp1c3Qgc2V0IHRoZSBibG9jayAqLworCQkJCWVtcHR5VHVwbGUtPmJ0X2Js a25vID0gcHJldmJsa25vOworCQkJfQorCisJCQlicmluX2RvaW5zZXJ0KHN0YXRlLT5ic19p cmVsLCBzdGF0ZS0+YnNfcGFnZXNQZXJSYW5nZSwgc3RhdGUtPmJzX3JtQWNjZXNzLAorCQkJ CQkJICAmc3RhdGUtPmJzX2N1cnJlbnRJbnNlcnRCdWYsCisJCQkJCQkgIGVtcHR5VHVwbGUt PmJ0X2Jsa25vLCBlbXB0eVR1cGxlLCBlbXB0eVNpemUpOworCQl9CisKKwkJcHJldmJsa25v ID0gYnR1cC0+YnRfYmxrbm87CisJfQorCisJdHVwbGVzb3J0X2VuZChzcG9vbC0+c29ydHN0 YXRlKTsKKworCS8qIEZpbGwgZW1wdHkgcmFuZ2VzIGZvciBhbGwgcmFuZ2VzIG1pc3Npbmcg aW4gdGhlIHR1cGxlc29ydC4gKi8KKwlwcmV2Ymxrbm8gPSAocHJldmJsa25vID09IEludmFs aWRCbG9ja051bWJlcikgPyAwIDogcHJldmJsa25vOworCXdoaWxlIChwcmV2Ymxrbm8gKyBz dGF0ZS0+YnNfcGFnZXNQZXJSYW5nZSA8IG1lbXR1cGxlLT5idF9ibGtubykKKwl7CisJCS8q IHRoZSBtaXNzaW5nIHJhbmdlICovCisJCXByZXZibGtubyArPSBzdGF0ZS0+YnNfcGFnZXNQ ZXJSYW5nZTsKKworCQkvKiBEaWQgd2UgYWxyZWFkeSBidWlsZCB0aGUgZW1wdHkgcmFuZ2U/ IElmIG5vdCwgZG8gaXQgbm93LiAqLworCQlpZiAoZW1wdHlUdXBsZSA9PSBOVUxMKQorCQl7 CisJCQlCcmluTWVtVHVwbGUgKmR0dXBsZSA9IGJyaW5fbmV3X21lbXR1cGxlKHN0YXRlLT5i c19iZGVzYyk7CisKKwkJCWVtcHR5VHVwbGUgPSBicmluX2Zvcm1fdHVwbGUoc3RhdGUtPmJz X2JkZXNjLCBwcmV2Ymxrbm8sIGR0dXBsZSwgJmVtcHR5U2l6ZSk7CisJCX0KKwkJZWxzZQor CQl7CisJCQkvKiB3ZSBhbHJlYWR5IGhhdmUgYW0gImVtcHR5IHJhbmdlIiB0dXBsZSwganVz dCBzZXQgdGhlIGJsb2NrICovCisJCQllbXB0eVR1cGxlLT5idF9ibGtubyA9IHByZXZibGtu bzsKKwkJfQorCisJCWJyaW5fZG9pbnNlcnQoc3RhdGUtPmJzX2lyZWwsIHN0YXRlLT5ic19w YWdlc1BlclJhbmdlLCBzdGF0ZS0+YnNfcm1BY2Nlc3MsCisJCQkJCSAgJnN0YXRlLT5ic19j dXJyZW50SW5zZXJ0QnVmLAorCQkJCQkgIGVtcHR5VHVwbGUtPmJ0X2Jsa25vLCBlbXB0eVR1 cGxlLCBlbXB0eVNpemUpOworCX0KKworCS8qKi8KKwlpZiAocHJldmJsa25vICE9IEludmFs aWRCbG9ja051bWJlcikKKwl7CisJCUJyaW5UdXBsZSAgKnRtcDsKKwkJU2l6ZQkJbGVuOwor CisJCXRtcCA9IGJyaW5fZm9ybV90dXBsZShzdGF0ZS0+YnNfYmRlc2MsIG1lbXR1cGxlLT5i dF9ibGtubywKKwkJCQkJCQkgIG1lbXR1cGxlLCAmbGVuKTsKKworCQlicmluX2RvaW5zZXJ0 KHN0YXRlLT5ic19pcmVsLCBzdGF0ZS0+YnNfcGFnZXNQZXJSYW5nZSwgc3RhdGUtPmJzX3Jt QWNjZXNzLAorCQkJCQkgICZzdGF0ZS0+YnNfY3VycmVudEluc2VydEJ1ZiwgdG1wLT5idF9i bGtubywgdG1wLCBsZW4pOworCisJCXBmcmVlKHRtcCk7CisJfQorCisJLyoKKwkgKiBOZXh0 LCBhY2N1bXVsYXRlIFdBTCB1c2FnZS4gIChUaGlzIG11c3Qgd2FpdCBmb3IgdGhlIHdvcmtl cnMgdG8gZmluaXNoLAorCSAqIG9yIHdlIG1pZ2h0IGdldCBpbmNvbXBsZXRlIGRhdGEuKQor CSAqLworCWZvciAoaSA9IDA7IGkgPCBicmlubGVhZGVyLT5wY3h0LT5ud29ya2Vyc19sYXVu Y2hlZDsgaSsrKQorCQlJbnN0ckFjY3VtUGFyYWxsZWxRdWVyeSgmYnJpbmxlYWRlci0+YnVm ZmVydXNhZ2VbaV0sICZicmlubGVhZGVyLT53YWx1c2FnZVtpXSk7CisKKwkvKiBGcmVlIGxh c3QgcmVmZXJlbmNlIHRvIE1WQ0Mgc25hcHNob3QsIGlmIG9uZSB3YXMgdXNlZCAqLworCWlm IChJc01WQ0NTbmFwc2hvdChicmlubGVhZGVyLT5zbmFwc2hvdCkpCisJCVVucmVnaXN0ZXJT bmFwc2hvdChicmlubGVhZGVyLT5zbmFwc2hvdCk7CisJRGVzdHJveVBhcmFsbGVsQ29udGV4 dChicmlubGVhZGVyLT5wY3h0KTsKKwlFeGl0UGFyYWxsZWxNb2RlKCk7Cit9CisKKy8qCisg KiBSZXR1cm5zIHNpemUgb2Ygc2hhcmVkIG1lbW9yeSByZXF1aXJlZCB0byBzdG9yZSBzdGF0 ZSBmb3IgYSBwYXJhbGxlbAorICogYnJpbiBpbmRleCBidWlsZCBiYXNlZCBvbiB0aGUgc25h cHNob3QgaXRzIHBhcmFsbGVsIHNjYW4gd2lsbCB1c2UuCisgKi8KK3N0YXRpYyBTaXplCitf YnJpbl9wYXJhbGxlbF9lc3RpbWF0ZV9zaGFyZWQoUmVsYXRpb24gaGVhcCwgU25hcHNob3Qg c25hcHNob3QpCit7CisJLyogYy5mLiBzaG1fdG9jX2FsbG9jYXRlIGFzIHRvIHdoeSBCVUZG RVJBTElHTiBpcyB1c2VkICovCisJcmV0dXJuIGFkZF9zaXplKEJVRkZFUkFMSUdOKHNpemVv ZihCcmluU2hhcmVkKSksCisJCQkJCXRhYmxlX3BhcmFsbGVsc2Nhbl9lc3RpbWF0ZShoZWFw LCBzbmFwc2hvdCkpOworfQorCisvKgorICogV2l0aGluIGxlYWRlciwgcGFydGljaXBhdGUg YXMgYSBwYXJhbGxlbCB3b3JrZXIuCisgKi8KK3N0YXRpYyB2b2lkCitfYnJpbl9sZWFkZXJf cGFydGljaXBhdGVfYXNfd29ya2VyKEJyaW5CdWlsZFN0YXRlICpidWlsZHN0YXRlLCBSZWxh dGlvbiBoZWFwLCBSZWxhdGlvbiBpbmRleCkKK3sKKwlCcmluTGVhZGVyICpicmlubGVhZGVy ID0gYnVpbGRzdGF0ZS0+YnNfbGVhZGVyOworCWludAkJCXNvcnRtZW07CisKKwkvKiBBbGxv Y2F0ZSBtZW1vcnkgYW5kIGluaXRpYWxpemUgcHJpdmF0ZSBzcG9vbCAqLworCWJ1aWxkc3Rh dGUtPmJzX3Nwb29sID0gKEJyaW5TcG9vbCAqKSBwYWxsb2MwKHNpemVvZihCcmluU3Bvb2wp KTsKKwlidWlsZHN0YXRlLT5ic19zcG9vbC0+aGVhcCA9IGJ1aWxkc3RhdGUtPmJzX3Nwb29s LT5oZWFwOworCWJ1aWxkc3RhdGUtPmJzX3Nwb29sLT5pbmRleCA9IGJ1aWxkc3RhdGUtPmJz X3Nwb29sLT5pbmRleDsKKworCS8qCisJICogTWlnaHQgYXMgd2VsbCB1c2UgcmVsaWFibGUg ZmlndXJlIHdoZW4gZG9saW5nIG91dCBtYWludGVuYW5jZV93b3JrX21lbQorCSAqICh3aGVu IHJlcXVlc3RlZCBudW1iZXIgb2Ygd29ya2VycyB3ZXJlIG5vdCBsYXVuY2hlZCwgdGhpcyB3 aWxsIGJlCisJICogc29tZXdoYXQgaGlnaGVyIHRoYW4gaXQgaXMgZm9yIG90aGVyIHdvcmtl cnMpLgorCSAqLworCXNvcnRtZW0gPSBtYWludGVuYW5jZV93b3JrX21lbSAvIGJyaW5sZWFk ZXItPm5wYXJ0aWNpcGFudHR1cGxlc29ydHM7CisKKwkvKiBQZXJmb3JtIHdvcmsgY29tbW9u IHRvIGFsbCBwYXJ0aWNpcGFudHMgKi8KKwlfYnJpbl9wYXJhbGxlbF9zY2FuX2FuZF9idWls ZChidWlsZHN0YXRlLCBidWlsZHN0YXRlLT5ic19zcG9vbCwgYnJpbmxlYWRlci0+YnJpbnNo YXJlZCwKKwkJCQkJCQkJICBicmlubGVhZGVyLT5zaGFyZWRzb3J0LCBoZWFwLCBpbmRleCwg c29ydG1lbSwgdHJ1ZSk7Cit9CisKKy8qCisgKiBQZXJmb3JtIGEgd29ya2VyJ3MgcG9ydGlv biBvZiBhIHBhcmFsbGVsIHNvcnQuCisgKgorICogVGhpcyBnZW5lcmF0ZXMgYSB0dXBsZXNv cnQgZm9yIHBhc3NlZCBidHNwb29sLCBhbmQgYSBzZWNvbmQgdHVwbGVzb3J0CisgKiBzdGF0 ZSBpZiBhIHNlY29uZCBidHNwb29sIGlzIG5lZWQgKGkuZS4gZm9yIHVuaXF1ZSBpbmRleCBi dWlsZHMpLiAgQWxsCisgKiBvdGhlciBzcG9vbCBmaWVsZHMgc2hvdWxkIGFscmVhZHkgYmUg c2V0IHdoZW4gdGhpcyBpcyBjYWxsZWQuCisgKgorICogc29ydG1lbSBpcyB0aGUgYW1vdW50 IG9mIHdvcmtpbmcgbWVtb3J5IHRvIHVzZSB3aXRoaW4gZWFjaCB3b3JrZXIsCisgKiBleHBy ZXNzZWQgaW4gS0JzLgorICoKKyAqIFdoZW4gdGhpcyByZXR1cm5zLCB3b3JrZXJzIGFyZSBk b25lLCBhbmQgbmVlZCBvbmx5IHJlbGVhc2UgcmVzb3VyY2VzLgorICovCitzdGF0aWMgdm9p ZAorX2JyaW5fcGFyYWxsZWxfc2Nhbl9hbmRfYnVpbGQoQnJpbkJ1aWxkU3RhdGUgKnN0YXRl LCBCcmluU3Bvb2wgKmJyaW5zcG9vbCwKKwkJCQkJCQkgIEJyaW5TaGFyZWQgKmJyaW5zaGFy ZWQsIFNoYXJlZHNvcnQgKnNoYXJlZHNvcnQsCisJCQkJCQkJICBSZWxhdGlvbiBoZWFwLCBS ZWxhdGlvbiBpbmRleCwgaW50IHNvcnRtZW0sCisJCQkJCQkJICBib29sIHByb2dyZXNzKQor eworCVNvcnRDb29yZGluYXRlIGNvb3JkaW5hdGU7CisJVGFibGVTY2FuRGVzYwlzY2FuOwor CWRvdWJsZQkJcmVsdHVwbGVzOworCUluZGV4SW5mbyAgKmluZGV4SW5mbzsKKworCS8qIElu aXRpYWxpemUgbG9jYWwgdHVwbGVzb3J0IGNvb3JkaW5hdGlvbiBzdGF0ZSAqLworCWNvb3Jk aW5hdGUgPSBwYWxsb2MwKHNpemVvZihTb3J0Q29vcmRpbmF0ZURhdGEpKTsKKwljb29yZGlu YXRlLT5pc1dvcmtlciA9IHRydWU7CisJY29vcmRpbmF0ZS0+blBhcnRpY2lwYW50cyA9IC0x OworCWNvb3JkaW5hdGUtPnNoYXJlZHNvcnQgPSBzaGFyZWRzb3J0OworCisJLyogQmVnaW4g InBhcnRpYWwiIHR1cGxlc29ydCAqLworCWJyaW5zcG9vbC0+c29ydHN0YXRlID0gdHVwbGVz b3J0X2JlZ2luX2luZGV4X2JyaW4oYnJpbnNwb29sLT5oZWFwLAorCQkJCQkJCQkJCQkJCSAg YnJpbnNwb29sLT5pbmRleCwKKwkJCQkJCQkJCQkJCQkgIHNvcnRtZW0sIGNvb3JkaW5hdGUs CisJCQkJCQkJCQkJCQkJICBUVVBMRVNPUlRfTk9ORSk7CisKKwkvKiBKb2luIHBhcmFsbGVs IHNjYW4gKi8KKwlpbmRleEluZm8gPSBCdWlsZEluZGV4SW5mbyhpbmRleCk7CisJaW5kZXhJ bmZvLT5paV9Db25jdXJyZW50ID0gYnJpbnNoYXJlZC0+aXNjb25jdXJyZW50OworCisJc2Nh biA9IHRhYmxlX2JlZ2luc2Nhbl9wYXJhbGxlbChoZWFwLAorCQkJCQkJCQkJUGFyYWxsZWxU YWJsZVNjYW5Gcm9tQnJpblNoYXJlZChicmluc2hhcmVkKSk7CisKKwlyZWx0dXBsZXMgPSB0 YWJsZV9pbmRleF9idWlsZF9zY2FuKGhlYXAsIGluZGV4LCBpbmRleEluZm8sIHRydWUsIHRy dWUsCisJCQkJCQkJCQkgICBicmluYnVpbGRDYWxsYmFja1BhcmFsbGVsLCBzdGF0ZSwgc2Nh bik7CisKKwkvKiBpbnNlcnQgdGhlIGxhc3QgaXRlbSAqLworCWZvcm1fYW5kX3NwaWxsX3R1 cGxlKHN0YXRlKTsKKworCS8qIHNvcnQgdGhlIEJSSU4gcmFuZ2VzIGJ1aWx0IGJ5IHRoaXMg d29ya2VyICovCisJdHVwbGVzb3J0X3BlcmZvcm1zb3J0KGJyaW5zcG9vbC0+c29ydHN0YXRl KTsKKworCXN0YXRlLT5ic19yZWx0dXBsZXMgKz0gcmVsdHVwbGVzOworCisJLyoKKwkgKiBE b25lLiAgUmVjb3JkIGFtYnVpbGQgc3RhdGlzdGljcy4KKwkgKi8KKwlTcGluTG9ja0FjcXVp cmUoJmJyaW5zaGFyZWQtPm11dGV4KTsKKwlicmluc2hhcmVkLT5ucGFydGljaXBhbnRzZG9u ZSsrOworCWJyaW5zaGFyZWQtPnJlbHR1cGxlcyArPSBzdGF0ZS0+YnNfcmVsdHVwbGVzOwor CWJyaW5zaGFyZWQtPmluZHR1cGxlcyArPSBzdGF0ZS0+YnNfbnVtdHVwbGVzOworCVNwaW5M b2NrUmVsZWFzZSgmYnJpbnNoYXJlZC0+bXV0ZXgpOworCisJLyogTm90aWZ5IGxlYWRlciAq LworCUNvbmRpdGlvblZhcmlhYmxlU2lnbmFsKCZicmluc2hhcmVkLT53b3JrZXJzZG9uZWN2 KTsKKworCXR1cGxlc29ydF9lbmQoYnJpbnNwb29sLT5zb3J0c3RhdGUpOworfQorCisvKgor ICogUGVyZm9ybSB3b3JrIHdpdGhpbiBhIGxhdW5jaGVkIHBhcmFsbGVsIHByb2Nlc3MuCisg Ki8KK3ZvaWQKK19icmluX3BhcmFsbGVsX2J1aWxkX21haW4oZHNtX3NlZ21lbnQgKnNlZywg c2htX3RvYyAqdG9jKQoreworCWNoYXIJICAgKnNoYXJlZHF1ZXJ5OworCUJyaW5TaGFyZWQg KmJyaW5zaGFyZWQ7CisJU2hhcmVkc29ydCAqc2hhcmVkc29ydDsKKwlCcmluQnVpbGRTdGF0 ZSAqYnVpbGRzdGF0ZTsKKwlSZWxhdGlvbgloZWFwUmVsOworCVJlbGF0aW9uCWluZGV4UmVs OworCUxPQ0tNT0RFCWhlYXBMb2NrbW9kZTsKKwlMT0NLTU9ERQlpbmRleExvY2ttb2RlOwor CVdhbFVzYWdlICAgKndhbHVzYWdlOworCUJ1ZmZlclVzYWdlICpidWZmZXJ1c2FnZTsKKwlp bnQJCQlzb3J0bWVtOworCisJLyoKKwkgKiBUaGUgb25seSBwb3NzaWJsZSBzdGF0dXMgZmxh ZyB0aGF0IGNhbiBiZSBzZXQgdG8gdGhlIHBhcmFsbGVsIHdvcmtlciBpcworCSAqIFBST0Nf SU5fU0FGRV9JQy4KKwkgKi8KKwlBc3NlcnQoKE15UHJvYy0+c3RhdHVzRmxhZ3MgPT0gMCkg fHwKKwkJICAgKE15UHJvYy0+c3RhdHVzRmxhZ3MgPT0gUFJPQ19JTl9TQUZFX0lDKSk7CisK KwkvKiBTZXQgZGVidWdfcXVlcnlfc3RyaW5nIGZvciBpbmRpdmlkdWFsIHdvcmtlcnMgZmly c3QgKi8KKwlzaGFyZWRxdWVyeSA9IHNobV90b2NfbG9va3VwKHRvYywgUEFSQUxMRUxfS0VZ X1FVRVJZX1RFWFQsIHRydWUpOworCWRlYnVnX3F1ZXJ5X3N0cmluZyA9IHNoYXJlZHF1ZXJ5 OworCisJLyogUmVwb3J0IHRoZSBxdWVyeSBzdHJpbmcgZnJvbSBsZWFkZXIgKi8KKwlwZ3N0 YXRfcmVwb3J0X2FjdGl2aXR5KFNUQVRFX1JVTk5JTkcsIGRlYnVnX3F1ZXJ5X3N0cmluZyk7 CisKKwkvKiBMb29rIHVwIGJyaW4gc2hhcmVkIHN0YXRlICovCisJYnJpbnNoYXJlZCA9IHNo bV90b2NfbG9va3VwKHRvYywgUEFSQUxMRUxfS0VZX0JSSU5fU0hBUkVELCBmYWxzZSk7CisK KwkvKiBPcGVuIHJlbGF0aW9ucyB1c2luZyBsb2NrIG1vZGVzIGtub3duIHRvIGJlIG9idGFp bmVkIGJ5IGluZGV4LmMgKi8KKwlpZiAoIWJyaW5zaGFyZWQtPmlzY29uY3VycmVudCkKKwl7 CisJCWhlYXBMb2NrbW9kZSA9IFNoYXJlTG9jazsKKwkJaW5kZXhMb2NrbW9kZSA9IEFjY2Vz c0V4Y2x1c2l2ZUxvY2s7CisJfQorCWVsc2UKKwl7CisJCWhlYXBMb2NrbW9kZSA9IFNoYXJl VXBkYXRlRXhjbHVzaXZlTG9jazsKKwkJaW5kZXhMb2NrbW9kZSA9IFJvd0V4Y2x1c2l2ZUxv Y2s7CisJfQorCisJLyogT3BlbiByZWxhdGlvbnMgd2l0aGluIHdvcmtlciAqLworCWhlYXBS ZWwgPSB0YWJsZV9vcGVuKGJyaW5zaGFyZWQtPmhlYXByZWxpZCwgaGVhcExvY2ttb2RlKTsK KwlpbmRleFJlbCA9IGluZGV4X29wZW4oYnJpbnNoYXJlZC0+aW5kZXhyZWxpZCwgaW5kZXhM b2NrbW9kZSk7CisKKwlidWlsZHN0YXRlID0gaW5pdGlhbGl6ZV9icmluX2J1aWxkc3RhdGUo aW5kZXhSZWwsIE5VTEwsIGJyaW5zaGFyZWQtPnBhZ2VzUGVyUmFuZ2UpOworCisJLyogSW5p dGlhbGl6ZSB3b3JrZXIncyBvd24gc3Bvb2wgKi8KKwlidWlsZHN0YXRlLT5ic19zcG9vbCA9 IChCcmluU3Bvb2wgKikgcGFsbG9jMChzaXplb2YoQnJpblNwb29sKSk7CisJYnVpbGRzdGF0 ZS0+YnNfc3Bvb2wtPmhlYXAgPSBoZWFwUmVsOworCWJ1aWxkc3RhdGUtPmJzX3Nwb29sLT5p bmRleCA9IGluZGV4UmVsOworCisJLyogTG9vayB1cCBzaGFyZWQgc3RhdGUgcHJpdmF0ZSB0 byB0dXBsZXNvcnQuYyAqLworCXNoYXJlZHNvcnQgPSBzaG1fdG9jX2xvb2t1cCh0b2MsIFBB UkFMTEVMX0tFWV9UVVBMRVNPUlQsIGZhbHNlKTsKKwl0dXBsZXNvcnRfYXR0YWNoX3NoYXJl ZChzaGFyZWRzb3J0LCBzZWcpOworCisJLyogUHJlcGFyZSB0byB0cmFjayBidWZmZXIgdXNh Z2UgZHVyaW5nIHBhcmFsbGVsIGV4ZWN1dGlvbiAqLworCUluc3RyU3RhcnRQYXJhbGxlbFF1 ZXJ5KCk7CisKKwkvKgorCSAqIE1pZ2h0IGFzIHdlbGwgdXNlIHJlbGlhYmxlIGZpZ3VyZSB3 aGVuIGRvbGluZyBvdXQgbWFpbnRlbmFuY2Vfd29ya19tZW0KKwkgKiAod2hlbiByZXF1ZXN0 ZWQgbnVtYmVyIG9mIHdvcmtlcnMgd2VyZSBub3QgbGF1bmNoZWQsIHRoaXMgd2lsbCBiZQor CSAqIHNvbWV3aGF0IGhpZ2hlciB0aGFuIGl0IGlzIGZvciBvdGhlciB3b3JrZXJzKS4KKwkg Ki8KKwlzb3J0bWVtID0gbWFpbnRlbmFuY2Vfd29ya19tZW0gLyBicmluc2hhcmVkLT5zY2Fu dHVwbGVzb3J0c3RhdGVzOworCisJX2JyaW5fcGFyYWxsZWxfc2Nhbl9hbmRfYnVpbGQoYnVp bGRzdGF0ZSwgYnVpbGRzdGF0ZS0+YnNfc3Bvb2wsCisJCQkJCQkJCSAgYnJpbnNoYXJlZCwg c2hhcmVkc29ydCwKKwkJCQkJCQkJICBoZWFwUmVsLCBpbmRleFJlbCwgc29ydG1lbSwgZmFs c2UpOworCisJLyogUmVwb3J0IFdBTC9idWZmZXIgdXNhZ2UgZHVyaW5nIHBhcmFsbGVsIGV4 ZWN1dGlvbiAqLworCWJ1ZmZlcnVzYWdlID0gc2htX3RvY19sb29rdXAodG9jLCBQQVJBTExF TF9LRVlfQlVGRkVSX1VTQUdFLCBmYWxzZSk7CisJd2FsdXNhZ2UgPSBzaG1fdG9jX2xvb2t1 cCh0b2MsIFBBUkFMTEVMX0tFWV9XQUxfVVNBR0UsIGZhbHNlKTsKKwlJbnN0ckVuZFBhcmFs bGVsUXVlcnkoJmJ1ZmZlcnVzYWdlW1BhcmFsbGVsV29ya2VyTnVtYmVyXSwKKwkJCQkJCSAg JndhbHVzYWdlW1BhcmFsbGVsV29ya2VyTnVtYmVyXSk7CisKKwlpbmRleF9jbG9zZShpbmRl eFJlbCwgaW5kZXhMb2NrbW9kZSk7CisJdGFibGVfY2xvc2UoaGVhcFJlbCwgaGVhcExvY2tt b2RlKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5j IGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW51dGlsLmMKaW5kZXggYTg3NWM1ZDNkN2Eu LjliMWEwYWMzNDVkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbnV0 aWwuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbnV0aWwuYwpAQCAtNTQsNiAr NTQsNyBAQCBnaW5oYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJYW1yb3V0aW5lLT5hbWNs dXN0ZXJhYmxlID0gZmFsc2U7CiAJYW1yb3V0aW5lLT5hbXByZWRsb2NrcyA9IHRydWU7CiAJ YW1yb3V0aW5lLT5hbWNhbnBhcmFsbGVsID0gZmFsc2U7CisJYW1yb3V0aW5lLT5hbWNhbmJ1 aWxkcGFyYWxsZWwgPSBmYWxzZTsKIAlhbXJvdXRpbmUtPmFtY2FuaW5jbHVkZSA9IGZhbHNl OwogCWFtcm91dGluZS0+YW11c2VtYWludGVuYW5jZXdvcmttZW0gPSB0cnVlOwogCWFtcm91 dGluZS0+YW1zdW1tYXJpemluZyA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv YWNjZXNzL2dpc3QvZ2lzdC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5jCmlu ZGV4IDlhMWJmOGY2NmNiLi5lMDUyYmE4YmRhMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv YWNjZXNzL2dpc3QvZ2lzdC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3Qu YwpAQCAtNzYsNiArNzYsNyBAQCBnaXN0aGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCWFt cm91dGluZS0+YW1jbHVzdGVyYWJsZSA9IHRydWU7CiAJYW1yb3V0aW5lLT5hbXByZWRsb2Nr cyA9IHRydWU7CiAJYW1yb3V0aW5lLT5hbWNhbnBhcmFsbGVsID0gZmFsc2U7CisJYW1yb3V0 aW5lLT5hbWNhbmJ1aWxkcGFyYWxsZWwgPSBmYWxzZTsKIAlhbXJvdXRpbmUtPmFtY2FuaW5j bHVkZSA9IHRydWU7CiAJYW1yb3V0aW5lLT5hbXVzZW1haW50ZW5hbmNld29ya21lbSA9IGZh bHNlOwogCWFtcm91dGluZS0+YW1zdW1tYXJpemluZyA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hh c2gvaGFzaC5jCmluZGV4IDY0NDNmZjIxYmRhLi45MDU1MTk2OTJjNiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9oYXNoL2hhc2guYwpAQCAtNzMsNiArNzMsNyBAQCBoYXNoaGFuZGxlcihQR19GVU5DVElP Tl9BUkdTKQogCWFtcm91dGluZS0+YW1jbHVzdGVyYWJsZSA9IGZhbHNlOwogCWFtcm91dGlu ZS0+YW1wcmVkbG9ja3MgPSB0cnVlOwogCWFtcm91dGluZS0+YW1jYW5wYXJhbGxlbCA9IGZh bHNlOworCWFtcm91dGluZS0+YW1jYW5idWlsZHBhcmFsbGVsID0gZmFsc2U7CiAJYW1yb3V0 aW5lLT5hbWNhbmluY2x1ZGUgPSBmYWxzZTsKIAlhbXJvdXRpbmUtPmFtdXNlbWFpbnRlbmFu Y2V3b3JrbWVtID0gZmFsc2U7CiAJYW1yb3V0aW5lLT5hbXN1bW1hcml6aW5nID0gZmFsc2U7 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYwppbmRleCAwOTMwZjliMzdlMy4uNmM4 Y2Q5M2ZhMGEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVl LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYwpAQCAtMTEyLDYg KzExMiw3IEBAIGJ0aGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCWFtcm91dGluZS0+YW1j bHVzdGVyYWJsZSA9IHRydWU7CiAJYW1yb3V0aW5lLT5hbXByZWRsb2NrcyA9IHRydWU7CiAJ YW1yb3V0aW5lLT5hbWNhbnBhcmFsbGVsID0gdHJ1ZTsKKwlhbXJvdXRpbmUtPmFtY2FuYnVp bGRwYXJhbGxlbCA9IHRydWU7CiAJYW1yb3V0aW5lLT5hbWNhbmluY2x1ZGUgPSB0cnVlOwog CWFtcm91dGluZS0+YW11c2VtYWludGVuYW5jZXdvcmttZW0gPSBmYWxzZTsKIAlhbXJvdXRp bmUtPmFtc3VtbWFyaXppbmcgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9zcGdpc3Qvc3BndXRpbHMuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3Bn dXRpbHMuYwppbmRleCAzMGMwMDg3NmE1Ni4uZmQ0YjYxNTcxMDEgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndXRpbHMuYworKysgYi9zcmMvYmFja2VuZC9h Y2Nlc3Mvc3BnaXN0L3NwZ3V0aWxzLmMKQEAgLTYwLDYgKzYwLDcgQEAgc3BnaGFuZGxlcihQ R19GVU5DVElPTl9BUkdTKQogCWFtcm91dGluZS0+YW1jbHVzdGVyYWJsZSA9IGZhbHNlOwog CWFtcm91dGluZS0+YW1wcmVkbG9ja3MgPSBmYWxzZTsKIAlhbXJvdXRpbmUtPmFtY2FucGFy YWxsZWwgPSBmYWxzZTsKKwlhbXJvdXRpbmUtPmFtY2FuYnVpbGRwYXJhbGxlbCA9IGZhbHNl OwogCWFtcm91dGluZS0+YW1jYW5pbmNsdWRlID0gdHJ1ZTsKIAlhbXJvdXRpbmUtPmFtdXNl bWFpbnRlbmFuY2V3b3JrbWVtID0gZmFsc2U7CiAJYW1yb3V0aW5lLT5hbXN1bW1hcml6aW5n ID0gZmFsc2U7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9wYXJh bGxlbC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vcGFyYWxsZWwuYwppbmRleCAx OTRhMTIwN2JlNi4uZDc4MzE0MDYyZTAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vz cy90cmFuc2FtL3BhcmFsbGVsLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0v cGFyYWxsZWwuYwpAQCAtMTQsNiArMTQsNyBAQAogCiAjaW5jbHVkZSAicG9zdGdyZXMuaCIK IAorI2luY2x1ZGUgImFjY2Vzcy9icmluLmgiCiAjaW5jbHVkZSAiYWNjZXNzL25idHJlZS5o IgogI2luY2x1ZGUgImFjY2Vzcy9wYXJhbGxlbC5oIgogI2luY2x1ZGUgImFjY2Vzcy9zZXNz aW9uLmgiCkBAIC0xNDUsNiArMTQ2LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdAogCXsKIAkJ Il9idF9wYXJhbGxlbF9idWlsZF9tYWluIiwgX2J0X3BhcmFsbGVsX2J1aWxkX21haW4KIAl9 LAorCXsKKwkJIl9icmluX3BhcmFsbGVsX2J1aWxkX21haW4iLCBfYnJpbl9wYXJhbGxlbF9i dWlsZF9tYWluCisJfSwKIAl7CiAJCSJwYXJhbGxlbF92YWN1dW1fbWFpbiIsIHBhcmFsbGVs X3ZhY3V1bV9tYWluCiAJfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRl eC5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jCmluZGV4IDE0M2ZhZTAxZWJkLi40 MGFiYmFmNDc2YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jCisr KyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYwpAQCAtMjk4Miw3ICsyOTgyLDcgQEAg aW5kZXhfYnVpbGQoUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCSAqIE5vdGUgdGhhdCBwbGFu bmVyIGNvbnNpZGVycyBwYXJhbGxlbCBzYWZldHkgZm9yIHVzLgogCSAqLwogCWlmIChwYXJh bGxlbCAmJiBJc05vcm1hbFByb2Nlc3NpbmdNb2RlKCkgJiYKLQkJaW5kZXhSZWxhdGlvbi0+ cmRfcmVsLT5yZWxhbSA9PSBCVFJFRV9BTV9PSUQpCisJCWluZGV4UmVsYXRpb24tPnJkX2lu ZGFtLT5hbWNhbmJ1aWxkcGFyYWxsZWwpCiAJCWluZGV4SW5mby0+aWlfUGFyYWxsZWxXb3Jr ZXJzID0KIAkJCXBsYW5fY3JlYXRlX2luZGV4X3dvcmtlcnMoUmVsYXRpb25HZXRSZWxpZCho ZWFwUmVsYXRpb24pLAogCQkJCQkJCQkJICBSZWxhdGlvbkdldFJlbGlkKGluZGV4UmVsYXRp b24pKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL3NvcnQvdHVwbGVzb3J0dmFy aWFudHMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL3NvcnQvdHVwbGVzb3J0dmFyaWFudHMuYwpp bmRleCAyY2Q1MDhlNTEzMC4uOWIzYTcwZTZjY2YgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3V0aWxzL3NvcnQvdHVwbGVzb3J0dmFyaWFudHMuYworKysgYi9zcmMvYmFja2VuZC91dGls cy9zb3J0L3R1cGxlc29ydHZhcmlhbnRzLmMKQEAgLTE5LDYgKzE5LDcgQEAKIAogI2luY2x1 ZGUgInBvc3RncmVzLmgiCiAKKyNpbmNsdWRlICJhY2Nlc3MvYnJpbl90dXBsZS5oIgogI2lu Y2x1ZGUgImFjY2Vzcy9oYXNoLmgiCiAjaW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0YWlscy5o IgogI2luY2x1ZGUgImFjY2Vzcy9uYnRyZWUuaCIKQEAgLTQzLDYgKzQ0LDggQEAgc3RhdGlj IHZvaWQgcmVtb3ZlYWJicmV2X2NsdXN0ZXIoVHVwbGVzb3J0c3RhdGUgKnN0YXRlLCBTb3J0 VHVwbGUgKnN0dXBzLAogCQkJCQkJCQkgaW50IGNvdW50KTsKIHN0YXRpYyB2b2lkIHJlbW92 ZWFiYnJldl9pbmRleChUdXBsZXNvcnRzdGF0ZSAqc3RhdGUsIFNvcnRUdXBsZSAqc3R1cHMs CiAJCQkJCQkJICAgaW50IGNvdW50KTsKK3N0YXRpYyB2b2lkIHJlbW92ZWFiYnJldl9pbmRl eF9icmluKFR1cGxlc29ydHN0YXRlICpzdGF0ZSwgU29ydFR1cGxlICpzdHVwcywKKwkJCQkJ CQkJCWludCBjb3VudCk7CiBzdGF0aWMgdm9pZCByZW1vdmVhYmJyZXZfZGF0dW0oVHVwbGVz b3J0c3RhdGUgKnN0YXRlLCBTb3J0VHVwbGUgKnN0dXBzLAogCQkJCQkJCSAgIGludCBjb3Vu dCk7CiBzdGF0aWMgaW50CWNvbXBhcmV0dXBfaGVhcChjb25zdCBTb3J0VHVwbGUgKmEsIGNv bnN0IFNvcnRUdXBsZSAqYiwKQEAgLTY5LDEwICs3MiwxNiBAQCBzdGF0aWMgaW50CWNvbXBh cmV0dXBfaW5kZXhfaGFzaChjb25zdCBTb3J0VHVwbGUgKmEsIGNvbnN0IFNvcnRUdXBsZSAq YiwKIAkJCQkJCQkJICBUdXBsZXNvcnRzdGF0ZSAqc3RhdGUpOwogc3RhdGljIGludAljb21w YXJldHVwX2luZGV4X2hhc2hfdGllYnJlYWsoY29uc3QgU29ydFR1cGxlICphLCBjb25zdCBT b3J0VHVwbGUgKmIsCiAJCQkJCQkJCQkJICAgVHVwbGVzb3J0c3RhdGUgKnN0YXRlKTsKK3N0 YXRpYyBpbnQJY29tcGFyZXR1cF9pbmRleF9icmluKGNvbnN0IFNvcnRUdXBsZSAqYSwgY29u c3QgU29ydFR1cGxlICpiLAorCQkJCQkJCQkgIFR1cGxlc29ydHN0YXRlICpzdGF0ZSk7CiBz dGF0aWMgdm9pZCB3cml0ZXR1cF9pbmRleChUdXBsZXNvcnRzdGF0ZSAqc3RhdGUsIExvZ2lj YWxUYXBlICp0YXBlLAogCQkJCQkJICAgU29ydFR1cGxlICpzdHVwKTsKIHN0YXRpYyB2b2lk IHJlYWR0dXBfaW5kZXgoVHVwbGVzb3J0c3RhdGUgKnN0YXRlLCBTb3J0VHVwbGUgKnN0dXAs CiAJCQkJCQkgIExvZ2ljYWxUYXBlICp0YXBlLCB1bnNpZ25lZCBpbnQgbGVuKTsKK3N0YXRp YyB2b2lkIHdyaXRldHVwX2luZGV4X2JyaW4oVHVwbGVzb3J0c3RhdGUgKnN0YXRlLCBMb2dp Y2FsVGFwZSAqdGFwZSwKKwkJCQkJCQkJU29ydFR1cGxlICpzdHVwKTsKK3N0YXRpYyB2b2lk IHJlYWR0dXBfaW5kZXhfYnJpbihUdXBsZXNvcnRzdGF0ZSAqc3RhdGUsIFNvcnRUdXBsZSAq c3R1cCwKKwkJCQkJCQkgICBMb2dpY2FsVGFwZSAqdGFwZSwgdW5zaWduZWQgaW50IGxlbik7 CiBzdGF0aWMgaW50CWNvbXBhcmV0dXBfZGF0dW0oY29uc3QgU29ydFR1cGxlICphLCBjb25z dCBTb3J0VHVwbGUgKmIsCiAJCQkJCQkJIFR1cGxlc29ydHN0YXRlICpzdGF0ZSk7CiBzdGF0 aWMgaW50CWNvbXBhcmV0dXBfZGF0dW1fdGllYnJlYWsoY29uc3QgU29ydFR1cGxlICphLCBj b25zdCBTb3J0VHVwbGUgKmIsCkBAIC0xMjgsNiArMTM3LDE2IEBAIHR5cGVkZWYgc3RydWN0 CiAJdWludDMyCQltYXhfYnVja2V0czsKIH0gVHVwbGVzb3J0SW5kZXhIYXNoQXJnOwogCisv KgorICogRGF0YSBzdHJ1dHVyZSBwb2ludGVkIGJ5ICJUdXBsZXNvcnRQdWJsaWMuYXJnIiBm b3IgdGhlIGluZGV4X2JyaW4gc3ViY2FzZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlU dXBsZXNvcnRJbmRleEFyZyBpbmRleDsKKworCS8qIFhYWCBkbyB3ZSBuZWVkIHNvbWV0aGlu ZyBoZXJlPyAqLworfSBUdXBsZXNvcnRJbmRleEJyaW5Bcmc7CisKIC8qCiAgKiBEYXRhIHN0 cnV0dXJlIHBvaW50ZWQgYnkgIlR1cGxlc29ydFB1YmxpYy5hcmciIGZvciB0aGUgRGF0dW0g Y2FzZS4KICAqIFNldCBieSB0dXBsZXNvcnRfYmVnaW5fZGF0dW0gYW5kIHVzZWQgb25seSBi eSB0aGUgRGF0dW1UdXBsZSByb3V0aW5lcy4KQEAgLTE0MCw2ICsxNTksMjEgQEAgdHlwZWRl ZiBzdHJ1Y3QKIAlpbnQJCQlkYXR1bVR5cGVMZW47CiB9IFR1cGxlc29ydERhdHVtQXJnOwog CisvKgorICogQ29tcHV0aW5nIEJyaW5UdXBsZSBzaXplIHdpdGggb25seSB0aGUgdHVwbGUg aXMgZGlmZmljdWx0LCBzbyB3ZSB3YW50IHRvIHRyYWNrCisgKiB0aGUgbGVuZ3RoIHJlZmVy ZW5jZWQgYnkgdGhlIFNvcnRUdXBsZS4gVGhhdCdzIHdoYXQgQnJpblNvcnRUdXBsZSBpcyBt ZWFudAorICogdG8gZG8gLSBpdCdzIGVzc2VudGlhbGx5IGEgQnJpblR1cGxlIHByZWZpeGVk IGJ5IGl0cyBsZW5ndGguCisgKi8KK3R5cGVkZWYgc3RydWN0IEJyaW5Tb3J0VHVwbGUKK3sK KwlTaXplCQl0dXBsZW47CisJQnJpblR1cGxlCXR1cGxlOworfSBCcmluU29ydFR1cGxlOwor CisvKiBTaXplIG9mIHRoZSBCcmluU29ydFR1cGxlLCBnaXZlbiBsZW5ndGggb2YgdGhlIEJy aW5UdXBsZS4gKi8KKyNkZWZpbmUgQlJJTlNPUlRUVVBMRV9TSVpFKGxlbikJCShvZmZzZXRv ZihCcmluU29ydFR1cGxlLCB0dXBsZSkgKyAobGVuKSkKKworCiBUdXBsZXNvcnRzdGF0ZSAq CiB0dXBsZXNvcnRfYmVnaW5faGVhcChUdXBsZURlc2MgdHVwRGVzYywKIAkJCQkJIGludCBu a2V5cywgQXR0ck51bWJlciAqYXR0TnVtcywKQEAgLTUyNyw2ICs1NjEsNDcgQEAgdHVwbGVz b3J0X2JlZ2luX2luZGV4X2dpc3QoUmVsYXRpb24gaGVhcFJlbCwKIAlyZXR1cm4gc3RhdGU7 CiB9CiAKK1R1cGxlc29ydHN0YXRlICoKK3R1cGxlc29ydF9iZWdpbl9pbmRleF9icmluKFJl bGF0aW9uIGhlYXBSZWwsCisJCQkJCQkgICBSZWxhdGlvbiBpbmRleFJlbCwKKwkJCQkJCSAg IGludCB3b3JrTWVtLAorCQkJCQkJICAgU29ydENvb3JkaW5hdGUgY29vcmRpbmF0ZSwKKwkJ CQkJCSAgIGludCBzb3J0b3B0KQoreworCVR1cGxlc29ydHN0YXRlICpzdGF0ZSA9IHR1cGxl c29ydF9iZWdpbl9jb21tb24od29ya01lbSwgY29vcmRpbmF0ZSwKKwkJCQkJCQkJCQkJCSAg IHNvcnRvcHQpOworCVR1cGxlc29ydFB1YmxpYyAqYmFzZSA9IFR1cGxlc29ydHN0YXRlR2V0 UHVibGljKHN0YXRlKTsKKwlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisJVHVwbGVzb3J0 SW5kZXhCcmluQXJnICphcmc7CisKKwlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRj aFRvKGJhc2UtPm1haW5jb250ZXh0KTsKKwlhcmcgPSAoVHVwbGVzb3J0SW5kZXhCcmluQXJn ICopIHBhbGxvYyhzaXplb2YoVHVwbGVzb3J0SW5kZXhCcmluQXJnKSk7CisKKyNpZmRlZiBU UkFDRV9TT1JUCisJaWYgKHRyYWNlX3NvcnQpCisJCWVsb2coTE9HLAorCQkJICJiZWdpbiBp bmRleCBzb3J0OiB3b3JrTWVtID0gJWQsIHJhbmRvbUFjY2VzcyA9ICVjIiwKKwkJCSB3b3Jr TWVtLAorCQkJIHNvcnRvcHQgJiBUVVBMRVNPUlRfUkFORE9NQUNDRVNTID8gJ3QnIDogJ2Yn KTsKKyNlbmRpZgorCisJYmFzZS0+bktleXMgPSAxOwkJCS8qIE9ubHkgb25lIHNvcnQgY29s dW1uLCB0aGUgYmxvY2sgbnVtYmVyICovCisKKwliYXNlLT5yZW1vdmVhYmJyZXYgPSByZW1v dmVhYmJyZXZfaW5kZXhfYnJpbjsKKwliYXNlLT5jb21wYXJldHVwID0gY29tcGFyZXR1cF9p bmRleF9icmluOworCWJhc2UtPndyaXRldHVwID0gd3JpdGV0dXBfaW5kZXhfYnJpbjsKKwli YXNlLT5yZWFkdHVwID0gcmVhZHR1cF9pbmRleF9icmluOworCWJhc2UtPmhhdmVEYXR1bTEg PSB0cnVlOworCWJhc2UtPmFyZyA9IGFyZzsKKworCWFyZy0+aW5kZXguaGVhcFJlbCA9IGhl YXBSZWw7CisJYXJnLT5pbmRleC5pbmRleFJlbCA9IGluZGV4UmVsOworCisJTWVtb3J5Q29u dGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCisJcmV0dXJuIHN0YXRlOworfQorCiBUdXBs ZXNvcnRzdGF0ZSAqCiB0dXBsZXNvcnRfYmVnaW5fZGF0dW0oT2lkIGRhdHVtVHlwZSwgT2lk IHNvcnRPcGVyYXRvciwgT2lkIHNvcnRDb2xsYXRpb24sCiAJCQkJCSAgYm9vbCBudWxsc0Zp cnN0RmxhZywgaW50IHdvcmtNZW0sCkBAIC03MDcsNiArNzgyLDM1IEBAIHR1cGxlc29ydF9w dXRpbmRleHR1cGxldmFsdWVzKFR1cGxlc29ydHN0YXRlICpzdGF0ZSwgUmVsYXRpb24gcmVs LAogCQkJCQkJCSAgIXN0dXAuaXNudWxsMSk7CiB9CiAKKy8qCisgKiBDb2xsZWN0IG9uZSBC UklOIHR1cGxlIHdoaWxlIGNvbGxlY3RpbmcgaW5wdXQgZGF0YSBmb3Igc29ydC4KKyAqLwor dm9pZAordHVwbGVzb3J0X3B1dGJyaW50dXBsZShUdXBsZXNvcnRzdGF0ZSAqc3RhdGUsIEJy aW5UdXBsZSAqdHVwbGUsIFNpemUgc2l6ZSkKK3sKKwlTb3J0VHVwbGUJc3R1cDsKKwlCcmlu U29ydFR1cGxlICpic3R1cDsKKwlUdXBsZXNvcnRQdWJsaWMgKmJhc2UgPSBUdXBsZXNvcnRz dGF0ZUdldFB1YmxpYyhzdGF0ZSk7CisJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0ID0gTWVt b3J5Q29udGV4dFN3aXRjaFRvKGJhc2UtPnR1cGxlY29udGV4dCk7CisKKwkvKiBhbGxvY2F0 ZSBzcGFjZSBmb3IgdGhlIHdob2xlIEJSSU4gc29ydCB0dXBsZSAqLworCWJzdHVwID0gcGFs bG9jKEJSSU5TT1JUVFVQTEVfU0laRShzaXplKSk7CisKKwlic3R1cC0+dHVwbGVuID0gc2l6 ZTsKKwltZW1jcHkoJmJzdHVwLT50dXBsZSwgdHVwbGUsIHNpemUpOworCisJc3R1cC50dXBs ZSA9IGJzdHVwOworCXN0dXAuZGF0dW0xID0gdHVwbGUtPmJ0X2Jsa25vOworCXN0dXAuaXNu dWxsMSA9IGZhbHNlOworCisJdHVwbGVzb3J0X3B1dHR1cGxlX2NvbW1vbihzdGF0ZSwgJnN0 dXAsCisJCQkJCQkJICBiYXNlLT5zb3J0S2V5cyAmJgorCQkJCQkJCSAgYmFzZS0+c29ydEtl eXMtPmFiYnJldl9jb252ZXJ0ZXIgJiYKKwkJCQkJCQkgICFzdHVwLmlzbnVsbDEpOworCisJ TWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworfQorCiAvKgogICogQWNjZXB0 IG9uZSBEYXR1bSB3aGlsZSBjb2xsZWN0aW5nIGlucHV0IGRhdGEgZm9yIHNvcnQuCiAgKgpA QCAtODUwLDYgKzk1NCwzNSBAQCB0dXBsZXNvcnRfZ2V0aW5kZXh0dXBsZShUdXBsZXNvcnRz dGF0ZSAqc3RhdGUsIGJvb2wgZm9yd2FyZCkKIAlyZXR1cm4gKEluZGV4VHVwbGUpIHN0dXAu dHVwbGU7CiB9CiAKKy8qCisgKiBGZXRjaCB0aGUgbmV4dCBCUklOIHR1cGxlIGluIGVpdGhl ciBmb3J3YXJkIG9yIGJhY2sgZGlyZWN0aW9uLgorICogUmV0dXJucyBOVUxMIGlmIG5vIG1v cmUgdHVwbGVzLiAgUmV0dXJuZWQgdHVwbGUgYmVsb25ncyB0byB0dXBsZXNvcnQgbWVtb3J5 CisgKiBjb250ZXh0LCBhbmQgbXVzdCBub3QgYmUgZnJlZWQgYnkgY2FsbGVyLiAgQ2FsbGVy IG1heSBub3QgcmVseSBvbiB0dXBsZQorICogcmVtYWluaW5nIHZhbGlkIGFmdGVyIGFueSBm dXJ0aGVyIG1hbmlwdWxhdGlvbiBvZiB0dXBsZXNvcnQuCisgKi8KK0JyaW5UdXBsZSAqCit0 dXBsZXNvcnRfZ2V0YnJpbnR1cGxlKFR1cGxlc29ydHN0YXRlICpzdGF0ZSwgU2l6ZSAqbGVu LCBib29sIGZvcndhcmQpCit7CisJVHVwbGVzb3J0UHVibGljICpiYXNlID0gVHVwbGVzb3J0 c3RhdGVHZXRQdWJsaWMoc3RhdGUpOworCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dCA9IE1l bW9yeUNvbnRleHRTd2l0Y2hUbyhiYXNlLT5zb3J0Y29udGV4dCk7CisJU29ydFR1cGxlCQlz dHVwOworCUJyaW5Tb3J0VHVwbGUgICpidHVwOworCisJaWYgKCF0dXBsZXNvcnRfZ2V0dHVw bGVfY29tbW9uKHN0YXRlLCBmb3J3YXJkLCAmc3R1cCkpCisJCXN0dXAudHVwbGUgPSBOVUxM OworCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCisJaWYgKCFzdHVw LnR1cGxlKQorCQlyZXR1cm4gTlVMTDsKKworCWJ0dXAgPSAoQnJpblNvcnRUdXBsZSAqKSBz dHVwLnR1cGxlOworCisJKmxlbiA9IGJ0dXAtPnR1cGxlbjsKKworCXJldHVybiAmYnR1cC0+ dHVwbGU7Cit9CisKIC8qCiAgKiBGZXRjaCB0aGUgbmV4dCBEYXR1bSBpbiBlaXRoZXIgZm9y d2FyZCBvciBiYWNrIGRpcmVjdGlvbi4KICAqIFJldHVybnMgZmFsc2UgaWYgbm8gbW9yZSBk YXR1bXMuCkBAIC0xNTY0LDYgKzE2OTcsODAgQEAgcmVhZHR1cF9pbmRleChUdXBsZXNvcnRz dGF0ZSAqc3RhdGUsIFNvcnRUdXBsZSAqc3R1cCwKIAkJCQkJCQkJICZzdHVwLT5pc251bGwx KTsKIH0KIAorLyoKKyAqIFJvdXRpbmVzIHNwZWNpYWxpemVkIGZvciBCcmluVHVwbGUgY2Fz ZQorICovCisKK3N0YXRpYyB2b2lkCityZW1vdmVhYmJyZXZfaW5kZXhfYnJpbihUdXBsZXNv cnRzdGF0ZSAqc3RhdGUsIFNvcnRUdXBsZSAqc3R1cHMsIGludCBjb3VudCkKK3sKKwlpbnQJ CQlpOworCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCisJeworCQlCcmluU29ydFR1 cGxlICAgKnR1cGxlOworCisJCXR1cGxlID0gc3R1cHNbaV0udHVwbGU7CisJCXN0dXBzW2ld LmRhdHVtMSA9IHR1cGxlLT50dXBsZS5idF9ibGtubzsKKwl9Cit9CisKK3N0YXRpYyBpbnQK K2NvbXBhcmV0dXBfaW5kZXhfYnJpbihjb25zdCBTb3J0VHVwbGUgKmEsIGNvbnN0IFNvcnRU dXBsZSAqYiwKKwkJCQkJICBUdXBsZXNvcnRzdGF0ZSAqc3RhdGUpCit7CisJQXNzZXJ0KFR1 cGxlc29ydHN0YXRlR2V0UHVibGljKHN0YXRlKS0+aGF2ZURhdHVtMSk7CisKKwlpZiAoRGF0 dW1HZXRVSW50MzIoYS0+ZGF0dW0xKSA+IERhdHVtR2V0VUludDMyKGItPmRhdHVtMSkpCisJ CXJldHVybiAxOworCisJaWYgKERhdHVtR2V0VUludDMyKGEtPmRhdHVtMSkgPCBEYXR1bUdl dFVJbnQzMihiLT5kYXR1bTEpKQorCQlyZXR1cm4gLTE7CisKKwkvKiBzaWxlbmNlIGNvbXBp bGVycyAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAord3JpdGV0dXBfaW5kZXhf YnJpbihUdXBsZXNvcnRzdGF0ZSAqc3RhdGUsIExvZ2ljYWxUYXBlICp0YXBlLCBTb3J0VHVw bGUgKnN0dXApCit7CisJVHVwbGVzb3J0UHVibGljICpiYXNlID0gVHVwbGVzb3J0c3RhdGVH ZXRQdWJsaWMoc3RhdGUpOworCUJyaW5Tb3J0VHVwbGUgICp0dXBsZSA9IChCcmluU29ydFR1 cGxlICopIHN0dXAtPnR1cGxlOworCXVuc2lnbmVkIGludAl0dXBsZW4gPSB0dXBsZS0+dHVw bGVuOworCisJdHVwbGVuID0gdHVwbGVuICsgc2l6ZW9mKHR1cGxlbik7CisJTG9naWNhbFRh cGVXcml0ZSh0YXBlLCAmdHVwbGVuLCBzaXplb2YodHVwbGVuKSk7CisJTG9naWNhbFRhcGVX cml0ZSh0YXBlLCAmdHVwbGUtPnR1cGxlLCB0dXBsZS0+dHVwbGVuKTsKKwlpZiAoYmFzZS0+ c29ydG9wdCAmIFRVUExFU09SVF9SQU5ET01BQ0NFU1MpIC8qIG5lZWQgdHJhaWxpbmcgbGVu Z3RoIHdvcmQ/ICovCisJCUxvZ2ljYWxUYXBlV3JpdGUodGFwZSwgJnR1cGxlbiwgc2l6ZW9m KHR1cGxlbikpOworfQorCitzdGF0aWMgdm9pZAorcmVhZHR1cF9pbmRleF9icmluKFR1cGxl c29ydHN0YXRlICpzdGF0ZSwgU29ydFR1cGxlICpzdHVwLAorCQkJCSAgIExvZ2ljYWxUYXBl ICp0YXBlLCB1bnNpZ25lZCBpbnQgbGVuKQoreworCVR1cGxlc29ydFB1YmxpYyAqYmFzZSA9 IFR1cGxlc29ydHN0YXRlR2V0UHVibGljKHN0YXRlKTsKKwl1bnNpZ25lZCBpbnQgdHVwbGVu ID0gbGVuIC0gc2l6ZW9mKHVuc2lnbmVkIGludCk7CisKKwkvKgorCSAqIEFsbG9jYXRlIHNw YWNlIGZvciB0aGUgQlJJTiBzb3J0IHR1cGxlLCB3aGljaCBpcyBCcmluVHVwbGUgd2l0aCBh bgorCSAqIGV4dHJhIGxlbmd0aCBmaWVsZC4KKwkgKi8KKwlCcmluU29ydFR1cGxlICp0dXBs ZQorCQk9IChCcmluU29ydFR1cGxlICopIHR1cGxlc29ydF9yZWFkdHVwX2FsbG9jKHN0YXRl LAorCQkJCQkJCQkJCQkJCUJSSU5TT1JUVFVQTEVfU0laRSh0dXBsZW4pKTsKKworCXR1cGxl LT50dXBsZW4gPSB0dXBsZW47CisKKwlMb2dpY2FsVGFwZVJlYWRFeGFjdCh0YXBlLCAmdHVw bGUtPnR1cGxlLCB0dXBsZW4pOworCWlmIChiYXNlLT5zb3J0b3B0ICYgVFVQTEVTT1JUX1JB TkRPTUFDQ0VTUykgLyogbmVlZCB0cmFpbGluZyBsZW5ndGggd29yZD8gKi8KKwkJTG9naWNh bFRhcGVSZWFkRXhhY3QodGFwZSwgJnR1cGxlbiwgc2l6ZW9mKHR1cGxlbikpOworCXN0dXAt PnR1cGxlID0gKHZvaWQgKikgdHVwbGU7CisKKwkvKiBzZXQgdXAgZmlyc3QtY29sdW1uIGtl eSB2YWx1ZSwgd2hpY2ggaXMgYmxvY2sgbnVtYmVyICovCisJc3R1cC0+ZGF0dW0xID0gdHVw bGUtPnR1cGxlLmJ0X2Jsa25vOworfQorCiAvKgogICogUm91dGluZXMgc3BlY2lhbGl6ZWQg Zm9yIERhdHVtVHVwbGUgY2FzZQogICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nl c3MvYW1hcGkuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5oCmluZGV4IDI0NDQ1OTU4 N2ZjLi5kZjg1YWUzYWFjZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2FtYXBp LmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2FtYXBpLmgKQEAgLTI0Myw2ICsyNDMsOCBA QCB0eXBlZGVmIHN0cnVjdCBJbmRleEFtUm91dGluZQogCWJvb2wJCWFtcHJlZGxvY2tzOwog CS8qIGRvZXMgQU0gc3VwcG9ydCBwYXJhbGxlbCBzY2FuPyAqLwogCWJvb2wJCWFtY2FucGFy YWxsZWw7CisJLyogZG9lcyBBTSBzdXBwb3J0IHBhcmFsbGVsIGJ1aWxkPyAqLworCWJvb2wJ CWFtY2FuYnVpbGRwYXJhbGxlbDsKIAkvKiBkb2VzIEFNIHN1cHBvcnQgY29sdW1ucyBpbmNs dWRlZCB3aXRoIGNsYXVzZSBJTkNMVURFPyAqLwogCWJvb2wJCWFtY2FuaW5jbHVkZTsKIAkv KiBkb2VzIEFNIHVzZSBtYWludGVuYW5jZV93b3JrX21lbT8gKi8KZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9icmluLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvYnJpbi5oCmlu ZGV4IGVkNjZmMWIzZDUxLi4zNDUxZWNiMjExZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv YWNjZXNzL2JyaW4uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvYnJpbi5oCkBAIC0xMSw2 ICsxMSw3IEBACiAjZGVmaW5lIEJSSU5fSAogCiAjaW5jbHVkZSAibm9kZXMvZXhlY25vZGVz LmgiCisjaW5jbHVkZSAic3RvcmFnZS9zaG1fdG9jLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVs Y2FjaGUuaCIKIAogCkBAIC01Miw0ICs1Myw2IEBAIHR5cGVkZWYgc3RydWN0IEJyaW5TdGF0 c0RhdGEKIAogZXh0ZXJuIHZvaWQgYnJpbkdldFN0YXRzKFJlbGF0aW9uIGluZGV4LCBCcmlu U3RhdHNEYXRhICpzdGF0cyk7CiAKK2V4dGVybiB2b2lkIF9icmluX3BhcmFsbGVsX2J1aWxk X21haW4oZHNtX3NlZ21lbnQgKnNlZywgc2htX3RvYyAqdG9jKTsKKwogI2VuZGlmCQkJCQkJ CS8qIEJSSU5fSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvdHVwbGVzb3J0 LmggYi9zcmMvaW5jbHVkZS91dGlscy90dXBsZXNvcnQuaAppbmRleCA5ZWQyZGU3NmNkNi4u MzU3ZWIzNTMxMWQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL3R1cGxlc29ydC5o CisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL3R1cGxlc29ydC5oCkBAIC0yMSw2ICsyMSw3IEBA CiAjaWZuZGVmIFRVUExFU09SVF9ICiAjZGVmaW5lIFRVUExFU09SVF9ICiAKKyNpbmNsdWRl ICJhY2Nlc3MvYnJpbl90dXBsZS5oIgogI2luY2x1ZGUgImFjY2Vzcy9pdHVwLmgiCiAjaW5j bHVkZSAiZXhlY3V0b3IvdHVwdGFibGUuaCIKICNpbmNsdWRlICJzdG9yYWdlL2RzbS5oIgpA QCAtMjgyLDYgKzI4Myw5IEBAIHR5cGVkZWYgc3RydWN0CiAgKiBUaGUgImluZGV4X2hhc2gi IEFQSSBpcyBzaW1pbGFyIHRvIGluZGV4X2J0cmVlLCBidXQgdGhlIHR1cGxlcyBhcmUKICAq IGFjdHVhbGx5IHNvcnRlZCBieSB0aGVpciBoYXNoIGNvZGVzIG5vdCB0aGUgcmF3IGRhdGEu CiAgKgorICogVGhlICJpbmRleF9icmluIiBBUEkgaXMgc2ltaWxhciB0byBpbmRleF9idHJl ZSwgYnV0IHRoZSB0dXBsZXMgYXJlCisgKiBCcmluVHVwbGUgYW5kIGFyZSBzb3J0ZWQgYnkg dGhlaXIgYmxvY2sgbnVtYmVyIG5vdCB0aGUgcmF3IGRhdGEuCisgKgogICogUGFyYWxsZWwg c29ydCBjYWxsZXJzIGFyZSByZXF1aXJlZCB0byBjb29yZGluYXRlIG11bHRpcGxlIHR1cGxl c29ydCBzdGF0ZXMKICAqIGluIGEgbGVhZGVyIHByb2Nlc3MgYW5kIG9uZSBvciBtb3JlIHdv cmtlciBwcm9jZXNzZXMuICBUaGUgbGVhZGVyIHByb2Nlc3MKICAqIG11c3QgbGF1bmNoIHdv cmtlcnMsIGFuZCBoYXZlIGVhY2ggcGVyZm9ybSBhbiBpbmRlcGVuZGVudCAicGFydGlhbCIK QEAgLTQyNiw2ICs0MzAsMTAgQEAgZXh0ZXJuIFR1cGxlc29ydHN0YXRlICp0dXBsZXNvcnRf YmVnaW5faW5kZXhfZ2lzdChSZWxhdGlvbiBoZWFwUmVsLAogCQkJCQkJCQkJCQkJICBSZWxh dGlvbiBpbmRleFJlbCwKIAkJCQkJCQkJCQkJCSAgaW50IHdvcmtNZW0sIFNvcnRDb29yZGlu YXRlIGNvb3JkaW5hdGUsCiAJCQkJCQkJCQkJCQkgIGludCBzb3J0b3B0KTsKK2V4dGVybiBU dXBsZXNvcnRzdGF0ZSAqdHVwbGVzb3J0X2JlZ2luX2luZGV4X2JyaW4oUmVsYXRpb24gaGVh cFJlbCwKKwkJCQkJCQkJCQkJCSAgUmVsYXRpb24gaW5kZXhSZWwsCisJCQkJCQkJCQkJCQkg IGludCB3b3JrTWVtLCBTb3J0Q29vcmRpbmF0ZSBjb29yZGluYXRlLAorCQkJCQkJCQkJCQkJ ICBpbnQgc29ydG9wdCk7CiBleHRlcm4gVHVwbGVzb3J0c3RhdGUgKnR1cGxlc29ydF9iZWdp bl9kYXR1bShPaWQgZGF0dW1UeXBlLAogCQkJCQkJCQkJCQkgT2lkIHNvcnRPcGVyYXRvciwg T2lkIHNvcnRDb2xsYXRpb24sCiAJCQkJCQkJCQkJCSBib29sIG51bGxzRmlyc3RGbGFnLApA QCAtNDM4LDYgKzQ0Niw3IEBAIGV4dGVybiB2b2lkIHR1cGxlc29ydF9wdXRoZWFwdHVwbGUo VHVwbGVzb3J0c3RhdGUgKnN0YXRlLCBIZWFwVHVwbGUgdHVwKTsKIGV4dGVybiB2b2lkIHR1 cGxlc29ydF9wdXRpbmRleHR1cGxldmFsdWVzKFR1cGxlc29ydHN0YXRlICpzdGF0ZSwKIAkJ CQkJCQkJCQkgIFJlbGF0aW9uIHJlbCwgSXRlbVBvaW50ZXIgc2VsZiwKIAkJCQkJCQkJCQkg IGNvbnN0IERhdHVtICp2YWx1ZXMsIGNvbnN0IGJvb2wgKmlzbnVsbCk7CitleHRlcm4gdm9p ZCB0dXBsZXNvcnRfcHV0YnJpbnR1cGxlKFR1cGxlc29ydHN0YXRlICpzdGF0ZSwgQnJpblR1 cGxlICp0dXAsIFNpemUgbGVuKTsKIGV4dGVybiB2b2lkIHR1cGxlc29ydF9wdXRkYXR1bShU dXBsZXNvcnRzdGF0ZSAqc3RhdGUsIERhdHVtIHZhbCwKIAkJCQkJCQkgICBib29sIGlzTnVs bCk7CiAKQEAgLTQ0NSw2ICs0NTQsOCBAQCBleHRlcm4gYm9vbCB0dXBsZXNvcnRfZ2V0dHVw bGVzbG90KFR1cGxlc29ydHN0YXRlICpzdGF0ZSwgYm9vbCBmb3J3YXJkLAogCQkJCQkJCQkg ICBib29sIGNvcHksIFR1cGxlVGFibGVTbG90ICpzbG90LCBEYXR1bSAqYWJicmV2KTsKIGV4 dGVybiBIZWFwVHVwbGUgdHVwbGVzb3J0X2dldGhlYXB0dXBsZShUdXBsZXNvcnRzdGF0ZSAq c3RhdGUsIGJvb2wgZm9yd2FyZCk7CiBleHRlcm4gSW5kZXhUdXBsZSB0dXBsZXNvcnRfZ2V0 aW5kZXh0dXBsZShUdXBsZXNvcnRzdGF0ZSAqc3RhdGUsIGJvb2wgZm9yd2FyZCk7CitleHRl cm4gQnJpblR1cGxlICp0dXBsZXNvcnRfZ2V0YnJpbnR1cGxlKFR1cGxlc29ydHN0YXRlICpz dGF0ZSwgU2l6ZSAqbGVuLAorCQkJCQkJCQkJCSBib29sIGZvcndhcmQpOwogZXh0ZXJuIGJv b2wgdHVwbGVzb3J0X2dldGRhdHVtKFR1cGxlc29ydHN0YXRlICpzdGF0ZSwgYm9vbCBmb3J3 YXJkLCBib29sIGNvcHksCiAJCQkJCQkJICAgRGF0dW0gKnZhbCwgYm9vbCAqaXNOdWxsLCBE YXR1bSAqYWJicmV2KTsKIApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9kdW1teV9p bmRleF9hbS9kdW1teV9pbmRleF9hbS5jIGIvc3JjL3Rlc3QvbW9kdWxlcy9kdW1teV9pbmRl eF9hbS9kdW1teV9pbmRleF9hbS5jCmluZGV4IGNiZGFlN2FiN2E1Li5lYWEwYzQ4M2I3ZSAx MDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9kdW1teV9pbmRleF9hbS9kdW1teV9pbmRl eF9hbS5jCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvZHVtbXlfaW5kZXhfYW0vZHVtbXlfaW5k ZXhfYW0uYwpAQCAtMjk0LDYgKzI5NCw3IEBAIGRpaGFuZGxlcihQR19GVU5DVElPTl9BUkdT KQogCWFtcm91dGluZS0+YW1jbHVzdGVyYWJsZSA9IGZhbHNlOwogCWFtcm91dGluZS0+YW1w cmVkbG9ja3MgPSBmYWxzZTsKIAlhbXJvdXRpbmUtPmFtY2FucGFyYWxsZWwgPSBmYWxzZTsK KwlhbXJvdXRpbmUtPmFtY2FuYnVpbGRwYXJhbGxlbCA9IGZhbHNlOwogCWFtcm91dGluZS0+ YW1jYW5pbmNsdWRlID0gZmFsc2U7CiAJYW1yb3V0aW5lLT5hbXVzZW1haW50ZW5hbmNld29y a21lbSA9IGZhbHNlOwogCWFtcm91dGluZS0+YW1zdW1tYXJpemluZyA9IGZhbHNlOwotLSAK Mi40Mi4wCgo= --------------K4A0wOAng8JatwEd4NvqL3mz Content-Type: text/x-patch; charset=UTF-8; name="v20231128-0002-add-docs-for-amcanbuildparallel.patch" Content-Disposition: attachment; filename="v20231128-0002-add-docs-for-amcanbuildparallel.patch" Content-Transfer-Encoding: base64 RnJvbSBlM2Y0MmM3MTFjMDQyNmI4NWVkZjNhODhhNTM4ZTU4YmMwNTg4YjZlIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzLnZvbmRyYUBwb3N0 Z3Jlc3FsLm9yZz4KRGF0ZTogVHVlLCAyOCBOb3YgMjAyMyAxODozNzo0MiArMDEwMApTdWJq ZWN0OiBbUEFUQ0ggdjIwMjMxMTI4IDIvNF0gYWRkIGRvY3MgZm9yIGFtY2FuYnVpbGRwYXJh bGxlbAoKLS0tCiBkb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sIHwgNyArKysrKysrCiAxIGZp bGUgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21s L2luZGV4YW0uc2dtbCBiL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwKaW5kZXggZjEwN2M0 M2Q2YTYuLmNjNDEzNWUzOTQwIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvaW5kZXhhbS5z Z21sCisrKyBiL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwKQEAgLTEyMyw2ICsxMjMsOCBA QCB0eXBlZGVmIHN0cnVjdCBJbmRleEFtUm91dGluZQogICAgIGJvb2wgICAgICAgIGFtcHJl ZGxvY2tzOwogICAgIC8qIGRvZXMgQU0gc3VwcG9ydCBwYXJhbGxlbCBzY2FuPyAqLwogICAg IGJvb2wgICAgICAgIGFtY2FucGFyYWxsZWw7CisgICAgLyogZG9lcyBBTSBzdXBwb3J0IHBh cmFsbGVsIGJ1aWxkPyAqLworICAgIGJvb2wgICAgICAgIGFtY2FuYnVpbGRwYXJhbGxlbDsK ICAgICAvKiBkb2VzIEFNIHN1cHBvcnQgY29sdW1ucyBpbmNsdWRlZCB3aXRoIGNsYXVzZSBJ TkNMVURFPyAqLwogICAgIGJvb2wgICAgICAgIGFtY2FuaW5jbHVkZTsKICAgICAvKiBkb2Vz IEFNIHVzZSBtYWludGVuYW5jZV93b3JrX21lbT8gKi8KQEAgLTI4Niw2ICsyODgsMTEgQEAg YW1idWlsZCAoUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogICAgYW5kIGNvbXB1dGUgdGhlIGtl eXMgdGhhdCBuZWVkIHRvIGJlIGluc2VydGVkIGludG8gdGhlIGluZGV4LgogICAgVGhlIGZ1 bmN0aW9uIG11c3QgcmV0dXJuIGEgcGFsbG9jJ2Qgc3RydWN0IGNvbnRhaW5pbmcgc3RhdGlz dGljcyBhYm91dAogICAgdGhlIG5ldyBpbmRleC4KKyAgIFRoZSA8c3RydWN0ZmllbGQ+YW1j YW5idWlsZHBhcmFsbGVsPC9zdHJ1Y3RmaWVsZD4gZmxhZyBpbmRpY2F0ZXMgd2hldGhlcgor ICAgdGhlIGFjY2VzcyBtZXRob2Qgc3VwcG9ydHMgcGFyYWxsZWwgaW5kZXggYnVpbGRzLiBX aGVuIHNldCB0byA8bGl0ZXJhbD50cnVlPC9saXRlcmFsPiwKKyAgIHRoZSBzeXN0ZW0gd2ls bCBhdHRlbXB0IHRvIGFsbG9jYXRlIHBhcmFsbGVsIHdvcmtlcnMgZm9yIHRoZSBidWlsZC4K KyAgIEFjY2VzcyBtZXRob2RzIHN1cHBvcnRpbmcgb25seSBub24tcGFyYWxsZWwgaW5kZXgg YnVpbGRzIHNob3VsZCBsZWF2ZQorICAgdGhpcyBmbGFnIHNldCB0byA8bGl0ZXJhbD5mYWxz ZTwvbGl0ZXJhbD4uCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KLS0gCjIuNDIuMAoK --------------K4A0wOAng8JatwEd4NvqL3mz Content-Type: text/x-patch; charset=UTF-8; name="v20231128-0003-use-per-range-memory-context-for-merging-i.patch" Content-Disposition: attachment; filename*0="v20231128-0003-use-per-range-memory-context-for-merging-i.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSAwYjQzMWVjODM3ZjAwZjg1MmUyOGI3YjVlOGU1OWRiZGY2MWFmMjdmIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzLnZvbmRyYUBwb3N0 Z3Jlc3FsLm9yZz4KRGF0ZTogVHVlLCAyOCBOb3YgMjAyMyAxODozODozMiArMDEwMApTdWJq ZWN0OiBbUEFUQ0ggdjIwMjMxMTI4IDMvNF0gdXNlIHBlci1yYW5nZSBtZW1vcnkgY29udGV4 dCBmb3IgbWVyZ2luZyBpbgogbGVhZGVyCgotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9icmlu L2JyaW4uYyB8IDM0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0KIDEgZmls ZSBjaGFuZ2VkLCAzMCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9icmluL2JyaW4uYwppbmRleCAwYzZjYTFhYzE4Yy4uOGQ5NmQyYWM5YmUgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYworKysgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvYnJpbi9icmluLmMKQEAgLTI0NzUsNiArMjQ3NSw4IEBAIF9icmluX2VuZF9wYXJh bGxlbChCcmluTGVhZGVyICpicmlubGVhZGVyLCBCcmluQnVpbGRTdGF0ZSAqc3RhdGUpCiAJ QnJpblR1cGxlICAqZW1wdHlUdXBsZSA9IE5VTEw7CiAJU2l6ZQkJZW1wdHlTaXplOwogCUJy aW5TcG9vbCAgKnNwb29sOworCU1lbW9yeUNvbnRleHQJcmFuZ2VDeHQsCisJCQkJCW9sZEN4 dDsKIAogCS8qIFNodXRkb3duIHdvcmtlciBwcm9jZXNzZXMgKi8KIAlXYWl0Rm9yUGFyYWxs ZWxXb3JrZXJzVG9GaW5pc2goYnJpbmxlYWRlci0+cGN4dCk7CkBAIC0yNDk2LDYgKzI0OTgs MTkgQEAgX2JyaW5fZW5kX3BhcmFsbGVsKEJyaW5MZWFkZXIgKmJyaW5sZWFkZXIsIEJyaW5C dWlsZFN0YXRlICpzdGF0ZSkKIAkgKi8KIAltZW10dXBsZSA9IGJyaW5fbmV3X21lbXR1cGxl KHN0YXRlLT5ic19iZGVzYyk7CiAKKwkvKgorCSAqIENyZWF0ZSBhIG1lbW9yeSBjb250ZXh0 IHdlJ2xsIHJlc2V0IHRvIGNvbWJpbmUgcmVzdWx0cyBmb3IgYSBzaW5nbGUKKwkgKiBwYWdl IHJhbmdlIChyZWNlaXZlZCBmcm9tIHRoZSB3b3JrZXJzKS4gV2UgZG9uJ3QgZXhwZWN0IGh1 Z2UgbnVtYmVyCisJICogb2Ygb3ZlcmxhcHMgdW5kZXIgcmVndWxhciBjaXJjdW1zdGFuY2Vz LCBiZWNhdXNlIGZvciBsYXJnZSB0YWJsZXMKKwkgKiB0aGUgY2h1bmsgc2l6ZSBpcyBsaWtl bHkgbGFyZ2VyIHRoYW4gdGhlIEJSSU4gcGFnZSByYW5nZSksIGJ1dCBpdAorCSAqIGNhbiBo YXBwZW4sIGFuZCB0aGUgdW5pb24gZnVuY3Rpb25zIG1heSBkbyBhbGwga2luZHMgb2Ygc3R1 ZmYuIFNvCisJICogd2UgYmV0dGVyIHJlc2V0IHRoZSBjb250ZXh0IG9uY2UgaW4gYSB3aGls ZS4KKwkgKi8KKwlyYW5nZUN4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShDdXJyZW50TWVt b3J5Q29udGV4dCwKKwkJCQkJCQkJCSAiYnJpbiB1bmlvbiIsCisJCQkJCQkJCQkgQUxMT0NT RVRfREVGQVVMVF9TSVpFUyk7CisJb2xkQ3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHJh bmdlQ3h0KTsKKwogCS8qCiAJICogUmVhZCB0aGUgQlJJTiB0dXBsZXMgZnJvbSB0aGUgc2hh cmVkIHR1cGxlc29ydCwgc29ydGVkIGJ5IGJsb2NrIG51bWJlci4KIAkgKiBUaGF0IHByb2Jh Ymx5IGdpdmVzIHVzIGFuIGluZGV4IHRoYXQgaXMgY2hlYXBlciB0byBzY2FuLCB0aGFua3Mg dG8gbW9zdGx5CkBAIC0yNTU1LDggKzI1NzAsMTIgQEAgX2JyaW5fZW5kX3BhcmFsbGVsKEJy aW5MZWFkZXIgKmJyaW5sZWFkZXIsIEJyaW5CdWlsZFN0YXRlICpzdGF0ZSkKIAkJCWJyaW5f ZG9pbnNlcnQoc3RhdGUtPmJzX2lyZWwsIHN0YXRlLT5ic19wYWdlc1BlclJhbmdlLCBzdGF0 ZS0+YnNfcm1BY2Nlc3MsCiAJCQkJCQkgICZzdGF0ZS0+YnNfY3VycmVudEluc2VydEJ1Ziwg dG1wLT5idF9ibGtubywgdG1wLCBsZW4pOwogCi0JCQkvKiBmcmVlIHRoZSBmb3JtZWQgb24t ZGlzayB0dXBsZSAqLwotCQkJcGZyZWUodG1wKTsKKwkJCS8qCisJCQkgKiBSZXNldCB0aGUg cGVyLW91dHB1dC1yYW5nZSBjb250ZXh0LiBUaGlzIGZyZWVzIGFsbCB0aGUgbWVtb3J5CisJ CQkgKiBwb3NzaWJseSBhbGxvY2F0ZWQgYnkgdGhlIHVuaW9uIGZ1bmN0aW9ucywgYW5kIGFs c28gdGhlIEJSSU4KKwkJCSAqIHR1cGxlIHdlIGp1c3QgZm9ybWVkIGFuZCBpbnNlcnRlZC4K KwkJCSAqLworCQkJTWVtb3J5Q29udGV4dFJlc2V0KHJhbmdlQ3h0KTsKIAogCQkJbWVtdHVw bGUgPSBicmluX2RlZm9ybV90dXBsZShzdGF0ZS0+YnNfYmRlc2MsIGJ0dXAsIG1lbXR1cGxl KTsKIApAQCAtMjU5Myw3ICsyNjEyLDcgQEAgX2JyaW5fZW5kX3BhcmFsbGVsKEJyaW5MZWFk ZXIgKmJyaW5sZWFkZXIsIEJyaW5CdWlsZFN0YXRlICpzdGF0ZSkKIAogCXR1cGxlc29ydF9l bmQoc3Bvb2wtPnNvcnRzdGF0ZSk7CiAKLQkvKiBGaWxsIGVtcHR5IHJhbmdlcyBmb3IgYWxs IHJhbmdlcyBtaXNzaW5nIGluIHRoZSB0dXBsZXNvcnQuICovCisJLyogRmlsbCBlbXB0eSBy YW5nZXMgYXQgdGhlIGVuZCwgZm9yIGFsbCByYW5nZXMgbWlzc2luZyBpbiB0aGUgdHVwbGVz b3J0LiAqLwogCXByZXZibGtubyA9IChwcmV2Ymxrbm8gPT0gSW52YWxpZEJsb2NrTnVtYmVy KSA/IDAgOiBwcmV2Ymxrbm87CiAJd2hpbGUgKHByZXZibGtubyArIHN0YXRlLT5ic19wYWdl c1BlclJhbmdlIDwgbWVtdHVwbGUtPmJ0X2Jsa25vKQogCXsKQEAgLTI2MTgsNyArMjYzNyw3 IEBAIF9icmluX2VuZF9wYXJhbGxlbChCcmluTGVhZGVyICpicmlubGVhZGVyLCBCcmluQnVp bGRTdGF0ZSAqc3RhdGUpCiAJCQkJCSAgZW1wdHlUdXBsZS0+YnRfYmxrbm8sIGVtcHR5VHVw bGUsIGVtcHR5U2l6ZSk7CiAJfQogCi0JLyoqLworCS8qIEZpbGwgdGhlIEJSSU4gdHVwbGUg Zm9yIHRoZSBsYXN0IHBhZ2UgcmFuZ2UuICovCiAJaWYgKHByZXZibGtubyAhPSBJbnZhbGlk QmxvY2tOdW1iZXIpCiAJewogCQlCcmluVHVwbGUgICp0bXA7CkBAIC0yNjMzLDYgKzI2NTIs MTMgQEAgX2JyaW5fZW5kX3BhcmFsbGVsKEJyaW5MZWFkZXIgKmJyaW5sZWFkZXIsIEJyaW5C dWlsZFN0YXRlICpzdGF0ZSkKIAkJcGZyZWUodG1wKTsKIAl9CiAKKwkvKgorCSAqIFN3aXRj aCBiYWNrIHRvIHRoZSBvcmlnaW5hbSBtZW1vcnkgY29udGV4dCwgYW5kIGRlc3Ryb3kgdGhl IG9uZSB3ZQorCSAqIGNyZWF0ZWQgdG8gaXNvbGF0ZSB0aGUgdW5pb25fdHVwbGUgY2FsbHMu CisJICovCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZEN4dCk7CisJTWVtb3J5Q29udGV4 dERlbGV0ZShyYW5nZUN4dCk7CisKIAkvKgogCSAqIE5leHQsIGFjY3VtdWxhdGUgV0FMIHVz YWdlLiAgKFRoaXMgbXVzdCB3YWl0IGZvciB0aGUgd29ya2VycyB0byBmaW5pc2gsCiAJICog b3Igd2UgbWlnaHQgZ2V0IGluY29tcGxldGUgZGF0YS4pCi0tIAoyLjQyLjAKCg== --------------K4A0wOAng8JatwEd4NvqL3mz Content-Type: text/x-patch; charset=UTF-8; name="v20231128-0004-pgindent.patch" Content-Disposition: attachment; filename="v20231128-0004-pgindent.patch" Content-Transfer-Encoding: base64 RnJvbSBkNmMwOGE4NDI2OTA3MjkyYTM1MmQ4NWI4ZmVjYzEyZDNhZGM4Y2JjIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzLnZvbmRyYUBwb3N0 Z3Jlc3FsLm9yZz4KRGF0ZTogVHVlLCAyOCBOb3YgMjAyMyAxODo0ODoyMSArMDEwMApTdWJq ZWN0OiBbUEFUQ0ggdjIwMjMxMTI4IDQvNF0gcGdpbmRlbnQKCi0tLQogc3JjL2JhY2tlbmQv YWNjZXNzL2JyaW4vYnJpbi5jICAgICAgICAgICAgIHwgOTYgKysrKysrKysrKystLS0tLS0t LS0tLQogc3JjL2JhY2tlbmQvdXRpbHMvc29ydC90dXBsZXNvcnR2YXJpYW50cy5jIHwgMTYg KystLQogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAgICAgIHwgIDUg KysKIDMgZmlsZXMgY2hhbmdlZCwgNjIgaW5zZXJ0aW9ucygrKSwgNTUgZGVsZXRpb25zKC0p CgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jCmluZGV4IDhkOTZkMmFjOWJlLi4wMDFjZjA0YWFj NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jCisrKyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYwpAQCAtNjcsMTQgKzY3LDE0IEBAIHR5cGVk ZWYgc3RydWN0IEJyaW5TcG9vbAogdHlwZWRlZiBzdHJ1Y3QgQnJpblNoYXJlZAogewogCS8q Ci0JICogVGhlc2UgZmllbGRzIGFyZSBub3QgbW9kaWZpZWQgZHVyaW5nIHRoZSBidWlsZC4g IFRoZXkgcHJpbWFyaWx5IGV4aXN0IGZvcgotCSAqIHRoZSBiZW5lZml0IG9mIHdvcmtlciBw cm9jZXNzZXMgdGhhdCBuZWVkIHRvIGNyZWF0ZSBzdGF0ZSBjb3JyZXNwb25kaW5nCi0JICog dG8gdGhhdCB1c2VkIGJ5IHRoZSBsZWFkZXIuCisJICogVGhlc2UgZmllbGRzIGFyZSBub3Qg bW9kaWZpZWQgZHVyaW5nIHRoZSBidWlsZC4gIFRoZXkgcHJpbWFyaWx5IGV4aXN0CisJICog Zm9yIHRoZSBiZW5lZml0IG9mIHdvcmtlciBwcm9jZXNzZXMgdGhhdCBuZWVkIHRvIGNyZWF0 ZSBzdGF0ZQorCSAqIGNvcnJlc3BvbmRpbmcgdG8gdGhhdCB1c2VkIGJ5IHRoZSBsZWFkZXIu CiAJICovCiAJT2lkCQkJaGVhcHJlbGlkOwogCU9pZAkJCWluZGV4cmVsaWQ7CiAJYm9vbAkJ aXNjb25jdXJyZW50OwotCUJsb2NrTnVtYmVyCXBhZ2VzUGVyUmFuZ2U7CisJQmxvY2tOdW1i ZXIgcGFnZXNQZXJSYW5nZTsKIAlpbnQJCQlzY2FudHVwbGVzb3J0c3RhdGVzOwogCiAJLyoK QEAgLTE0NSw5ICsxNDUsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgQnJpbkxlYWRlcgogCSAqCiAJ ICogYnJpbnNoYXJlZCBpcyB0aGUgc2hhcmVkIHN0YXRlIGZvciBlbnRpcmUgYnVpbGQuICBz aGFyZWRzb3J0IGlzIHRoZQogCSAqIHNoYXJlZCwgdHVwbGVzb3J0LW1hbmFnZWQgc3RhdGUg cGFzc2VkIHRvIGVhY2ggcHJvY2VzcyB0dXBsZXNvcnQuCi0JICogc25hcHNob3QgaXMgdGhl IHNuYXBzaG90IHVzZWQgYnkgdGhlIHNjYW4gaWZmIGFuIE1WQ0Mgc25hcHNob3QgaXMgcmVx dWlyZWQuCisJICogc25hcHNob3QgaXMgdGhlIHNuYXBzaG90IHVzZWQgYnkgdGhlIHNjYW4g aWZmIGFuIE1WQ0Mgc25hcHNob3QgaXMKKwkgKiByZXF1aXJlZC4KIAkgKi8KLQlCcmluU2hh cmVkCSAgICpicmluc2hhcmVkOworCUJyaW5TaGFyZWQgKmJyaW5zaGFyZWQ7CiAJU2hhcmVk c29ydCAqc2hhcmVkc29ydDsKIAlTbmFwc2hvdAlzbmFwc2hvdDsKIAlXYWxVc2FnZSAgICp3 YWx1c2FnZTsKQEAgLTEwMzUsOCArMTAzNiw4IEBAIGJyaW5idWlsZENhbGxiYWNrUGFyYWxs ZWwoUmVsYXRpb24gaW5kZXgsCiAJLyoKIAkgKiBJZiB3ZSdyZSBpbiBhIGJsb2NrIHRoYXQg YmVsb25ncyB0byBhIGZ1dHVyZSByYW5nZSwgc3VtbWFyaXplIHdoYXQKIAkgKiB3ZSd2ZSBn b3QgYW5kIHN0YXJ0IGFmcmVzaC4gIE5vdGUgdGhlIHNjYW4gbWlnaHQgaGF2ZSBza2lwcGVk IG1hbnkKLQkgKiBwYWdlcywgaWYgdGhleSB3ZXJlIGRldm9pZCBvZiBsaXZlIHR1cGxlczsg d2UgZG8gbm90IGNyZWF0ZSBlbXB0cnkKLQkgKiBCUklOIHJhbmdlcyBoZXJlIC0gdGhlIGxl YWRlciBpcyByZXNwb25zaWJsZSBmb3IgZmlsbGluZyB0aGVtIGluLgorCSAqIHBhZ2VzLCBp ZiB0aGV5IHdlcmUgZGV2b2lkIG9mIGxpdmUgdHVwbGVzOyB3ZSBkbyBub3QgY3JlYXRlIGVt cHRyeSBCUklOCisJICogcmFuZ2VzIGhlcmUgLSB0aGUgbGVhZGVyIGlzIHJlc3BvbnNpYmxl IGZvciBmaWxsaW5nIHRoZW0gaW4uCiAJICovCiAJaWYgKHRoaXNibG9jayA+IHN0YXRlLT5i c19jdXJyUmFuZ2VTdGFydCArIHN0YXRlLT5ic19wYWdlc1BlclJhbmdlIC0gMSkKIAl7CkBA IC0xMTY5LDIzICsxMTcwLDI0IEBAIGJyaW5idWlsZChSZWxhdGlvbiBoZWFwLCBSZWxhdGlv biBpbmRleCwgSW5kZXhJbmZvICppbmRleEluZm8pCiAJCS8qCiAJCSAqIEJlZ2luIHNlcmlh bC9sZWFkZXIgdHVwbGVzb3J0LgogCQkgKgotCQkgKiBJbiBjYXNlcyB3aGVyZSBwYXJhbGxl bGlzbSBpcyBpbnZvbHZlZCwgdGhlIGxlYWRlciByZWNlaXZlcyB0aGUgc2FtZQotCQkgKiBz aGFyZSBvZiBtYWludGVuYW5jZV93b3JrX21lbSBhcyBhIHNlcmlhbCBzb3J0IChpdCBpcyBn ZW5lcmFsbHkgdHJlYXRlZAotCQkgKiBpbiB0aGUgc2FtZSB3YXkgYXMgYSBzZXJpYWwgc29y dCBvbmNlIHdlIHJldHVybikuICBQYXJhbGxlbCB3b3JrZXIKLQkJICogVHVwbGVzb3J0c3Rh dGVzIHdpbGwgaGF2ZSByZWNlaXZlZCBvbmx5IGEgZnJhY3Rpb24gb2YKLQkJICogbWFpbnRl bmFuY2Vfd29ya19tZW0sIHRob3VnaC4KKwkJICogSW4gY2FzZXMgd2hlcmUgcGFyYWxsZWxp c20gaXMgaW52b2x2ZWQsIHRoZSBsZWFkZXIgcmVjZWl2ZXMgdGhlCisJCSAqIHNhbWUgc2hh cmUgb2YgbWFpbnRlbmFuY2Vfd29ya19tZW0gYXMgYSBzZXJpYWwgc29ydCAoaXQgaXMKKwkJ ICogZ2VuZXJhbGx5IHRyZWF0ZWQgaW4gdGhlIHNhbWUgd2F5IGFzIGEgc2VyaWFsIHNvcnQg b25jZSB3ZSByZXR1cm4pLgorCQkgKiBQYXJhbGxlbCB3b3JrZXIgVHVwbGVzb3J0c3RhdGVz IHdpbGwgaGF2ZSByZWNlaXZlZCBvbmx5IGEgZnJhY3Rpb24KKwkJICogb2YgbWFpbnRlbmFu Y2Vfd29ya19tZW0sIHRob3VnaC4KIAkJICoKIAkJICogV2UgcmVseSBvbiB0aGUgbGlmZXRp bWUgb2YgdGhlIExlYWRlciBUdXBsZXNvcnRzdGF0ZSBhbG1vc3Qgbm90Ci0JCSAqIG92ZXJs YXBwaW5nIHdpdGggYW55IHdvcmtlciBUdXBsZXNvcnRzdGF0ZSdzIGxpZmV0aW1lLiAgVGhl cmUgbWF5IGJlCi0JCSAqIHNvbWUgc21hbGwgb3ZlcmxhcCwgYnV0IHRoYXQncyBva2F5IGJl Y2F1c2Ugd2UgcmVseSBvbiBsZWFkZXIKLQkJICogVHVwbGVzb3J0c3RhdGUgb25seSBhbGxv Y2F0aW5nIGEgc21hbGwsIGZpeGVkIGFtb3VudCBvZiBtZW1vcnkgaGVyZS4KLQkJICogV2hl biBpdHMgdHVwbGVzb3J0X3BlcmZvcm1zb3J0KCkgaXMgY2FsbGVkIChieSBvdXIgY2FsbGVy KSwgYW5kCi0JCSAqIHNpZ25pZmljYW50IGFtb3VudHMgb2YgbWVtb3J5IGFyZSBsaWtlbHkg dG8gYmUgdXNlZCwgYWxsIHdvcmtlcnMgbXVzdAotCQkgKiBoYXZlIGFscmVhZHkgZnJlZWQg YWxtb3N0IGFsbCBtZW1vcnkgaGVsZCBieSB0aGVpciBUdXBsZXNvcnRzdGF0ZXMKLQkJICog KHRoZXkgYXJlIGFib3V0IHRvIGdvIGF3YXkgY29tcGxldGVseSwgdG9vKS4gIFRoZSBvdmVy YWxsIGVmZmVjdCBpcwotCQkgKiB0aGF0IG1haW50ZW5hbmNlX3dvcmtfbWVtIGFsd2F5cyBy ZXByZXNlbnRzIGFuIGFic29sdXRlIGhpZ2ggd2F0ZXJtYXJrCi0JCSAqIG9uIHRoZSBhbW91 bnQgb2YgbWVtb3J5IHVzZWQgYnkgYSBDUkVBVEUgSU5ERVggb3BlcmF0aW9uLCByZWdhcmRs ZXNzIG9mCi0JCSAqIHRoZSB1c2Ugb2YgcGFyYWxsZWxpc20gb3IgYW55IG90aGVyIGZhY3Rv ci4KKwkJICogb3ZlcmxhcHBpbmcgd2l0aCBhbnkgd29ya2VyIFR1cGxlc29ydHN0YXRlJ3Mg bGlmZXRpbWUuICBUaGVyZSBtYXkKKwkJICogYmUgc29tZSBzbWFsbCBvdmVybGFwLCBidXQg dGhhdCdzIG9rYXkgYmVjYXVzZSB3ZSByZWx5IG9uIGxlYWRlcgorCQkgKiBUdXBsZXNvcnRz dGF0ZSBvbmx5IGFsbG9jYXRpbmcgYSBzbWFsbCwgZml4ZWQgYW1vdW50IG9mIG1lbW9yeQor CQkgKiBoZXJlLiBXaGVuIGl0cyB0dXBsZXNvcnRfcGVyZm9ybXNvcnQoKSBpcyBjYWxsZWQg KGJ5IG91ciBjYWxsZXIpLAorCQkgKiBhbmQgc2lnbmlmaWNhbnQgYW1vdW50cyBvZiBtZW1v cnkgYXJlIGxpa2VseSB0byBiZSB1c2VkLCBhbGwKKwkJICogd29ya2VycyBtdXN0IGhhdmUg YWxyZWFkeSBmcmVlZCBhbG1vc3QgYWxsIG1lbW9yeSBoZWxkIGJ5IHRoZWlyCisJCSAqIFR1 cGxlc29ydHN0YXRlcyAodGhleSBhcmUgYWJvdXQgdG8gZ28gYXdheSBjb21wbGV0ZWx5LCB0 b28pLiAgVGhlCisJCSAqIG92ZXJhbGwgZWZmZWN0IGlzIHRoYXQgbWFpbnRlbmFuY2Vfd29y a19tZW0gYWx3YXlzIHJlcHJlc2VudHMgYW4KKwkJICogYWJzb2x1dGUgaGlnaCB3YXRlcm1h cmsgb24gdGhlIGFtb3VudCBvZiBtZW1vcnkgdXNlZCBieSBhIENSRUFURQorCQkgKiBJTkRF WCBvcGVyYXRpb24sIHJlZ2FyZGxlc3Mgb2YgdGhlIHVzZSBvZiBwYXJhbGxlbGlzbSBvciBh bnkgb3RoZXIKKwkJICogZmFjdG9yLgogCQkgKi8KIAkJc3RhdGUtPmJzX3Nwb29sLT5zb3J0 c3RhdGUgPQogCQkJdHVwbGVzb3J0X2JlZ2luX2luZGV4X2JyaW4oaGVhcCwgaW5kZXgsCkBA IC0xMTk4LDcgKzEyMDAsNyBAQCBicmluYnVpbGQoUmVsYXRpb24gaGVhcCwgUmVsYXRpb24g aW5kZXgsIEluZGV4SW5mbyAqaW5kZXhJbmZvKQogCQkgKi8KIAkJX2JyaW5fZW5kX3BhcmFs bGVsKHN0YXRlLT5ic19sZWFkZXIsIHN0YXRlKTsKIAl9Ci0JZWxzZQkvKiBubyBwYXJhbGxl bCBpbmRleCBidWlsZCwganVzdCBkbyB0aGUgdXN1YWwgdGhpbmcgKi8KKwllbHNlCQkJCQkJ Lyogbm8gcGFyYWxsZWwgaW5kZXggYnVpbGQgKi8KIAl7CiAJCXJlbHR1cGxlcyA9IHRhYmxl X2luZGV4X2J1aWxkX3NjYW4oaGVhcCwgaW5kZXgsIGluZGV4SW5mbywgZmFsc2UsIHRydWUs CiAJCQkJCQkJCQkJICAgYnJpbmJ1aWxkQ2FsbGJhY2ssICh2b2lkICopIHN0YXRlLCBOVUxM KTsKQEAgLTIyODgsOSArMjI5MCw5IEBAIF9icmluX2JlZ2luX3BhcmFsbGVsKEJyaW5CdWls ZFN0YXRlICpidWlsZHN0YXRlLCBSZWxhdGlvbiBoZWFwLCBSZWxhdGlvbiBpbmRleCwKIAlT bmFwc2hvdAlzbmFwc2hvdDsKIAlTaXplCQllc3Ricmluc2hhcmVkOwogCVNpemUJCWVzdHNv cnQ7Ci0JQnJpblNoYXJlZCAgICpicmluc2hhcmVkOwotCVNoYXJlZHNvcnQgICAqc2hhcmVk c29ydDsKLQlCcmluTGVhZGVyICAgKmJyaW5sZWFkZXIgPSAoQnJpbkxlYWRlciAqKSBwYWxs b2MwKHNpemVvZihCcmluTGVhZGVyKSk7CisJQnJpblNoYXJlZCAqYnJpbnNoYXJlZDsKKwlT aGFyZWRzb3J0ICpzaGFyZWRzb3J0OworCUJyaW5MZWFkZXIgKmJyaW5sZWFkZXIgPSAoQnJp bkxlYWRlciAqKSBwYWxsb2MwKHNpemVvZihCcmluTGVhZGVyKSk7CiAJV2FsVXNhZ2UgICAq d2FsdXNhZ2U7CiAJQnVmZmVyVXNhZ2UgKmJ1ZmZlcnVzYWdlOwogCWJvb2wJCWxlYWRlcnBh cnRpY2lwYXRlcyA9IHRydWU7CkBAIC0yNDcxLDEyICsyNDczLDEyIEBAIF9icmluX2VuZF9w YXJhbGxlbChCcmluTGVhZGVyICpicmlubGVhZGVyLCBCcmluQnVpbGRTdGF0ZSAqc3RhdGUp CiAJQnJpbk1lbVR1cGxlICptZW10dXBsZSA9IE5VTEw7CiAJU2l6ZQkJdHVwbGVuOwogCUJy aW5TaGFyZWQgKmJyaW5zaGFyZWQgPSBicmlubGVhZGVyLT5icmluc2hhcmVkOwotCUJsb2Nr TnVtYmVyCXByZXZibGtubyA9IEludmFsaWRCbG9ja051bWJlcjsKKwlCbG9ja051bWJlciBw cmV2Ymxrbm8gPSBJbnZhbGlkQmxvY2tOdW1iZXI7CiAJQnJpblR1cGxlICAqZW1wdHlUdXBs ZSA9IE5VTEw7CiAJU2l6ZQkJZW1wdHlTaXplOwogCUJyaW5TcG9vbCAgKnNwb29sOwotCU1l bW9yeUNvbnRleHQJcmFuZ2VDeHQsCi0JCQkJCW9sZEN4dDsKKwlNZW1vcnlDb250ZXh0IHJh bmdlQ3h0LAorCQkJCW9sZEN4dDsKIAogCS8qIFNodXRkb3duIHdvcmtlciBwcm9jZXNzZXMg Ki8KIAlXYWl0Rm9yUGFyYWxsZWxXb3JrZXJzVG9GaW5pc2goYnJpbmxlYWRlci0+cGN4dCk7 CkBAIC0yNDkzLDE4ICsyNDk1LDE4IEBAIF9icmluX2VuZF9wYXJhbGxlbChCcmluTGVhZGVy ICpicmlubGVhZGVyLCBCcmluQnVpbGRTdGF0ZSAqc3RhdGUpCiAJdHVwbGVzb3J0X3BlcmZv cm1zb3J0KHNwb29sLT5zb3J0c3RhdGUpOwogCiAJLyoKLQkgKiBJbml0aWFsaXplIEJyaW5N ZW1UdXBsZSB3ZSdsbCB1c2UgdG8gdW5pb24gc3VtbWFyaWVzIGZyb20gd29ya2VycwotCSAq IChpbiBjYXNlIHRoZXkgaGFwcGVuZWQgdG8gcHJvZHVjZSBwYXJ0cyBvZiB0aGUgc2FtZSBw YWdhIHJhbmdlKS4KKwkgKiBJbml0aWFsaXplIEJyaW5NZW1UdXBsZSB3ZSdsbCB1c2UgdG8g dW5pb24gc3VtbWFyaWVzIGZyb20gd29ya2VycyAoaW4KKwkgKiBjYXNlIHRoZXkgaGFwcGVu ZWQgdG8gcHJvZHVjZSBwYXJ0cyBvZiB0aGUgc2FtZSBwYWdhIHJhbmdlKS4KIAkgKi8KIAlt ZW10dXBsZSA9IGJyaW5fbmV3X21lbXR1cGxlKHN0YXRlLT5ic19iZGVzYyk7CiAKIAkvKgog CSAqIENyZWF0ZSBhIG1lbW9yeSBjb250ZXh0IHdlJ2xsIHJlc2V0IHRvIGNvbWJpbmUgcmVz dWx0cyBmb3IgYSBzaW5nbGUKLQkgKiBwYWdlIHJhbmdlIChyZWNlaXZlZCBmcm9tIHRoZSB3 b3JrZXJzKS4gV2UgZG9uJ3QgZXhwZWN0IGh1Z2UgbnVtYmVyCi0JICogb2Ygb3ZlcmxhcHMg dW5kZXIgcmVndWxhciBjaXJjdW1zdGFuY2VzLCBiZWNhdXNlIGZvciBsYXJnZSB0YWJsZXMK LQkgKiB0aGUgY2h1bmsgc2l6ZSBpcyBsaWtlbHkgbGFyZ2VyIHRoYW4gdGhlIEJSSU4gcGFn ZSByYW5nZSksIGJ1dCBpdAotCSAqIGNhbiBoYXBwZW4sIGFuZCB0aGUgdW5pb24gZnVuY3Rp b25zIG1heSBkbyBhbGwga2luZHMgb2Ygc3R1ZmYuIFNvCi0JICogd2UgYmV0dGVyIHJlc2V0 IHRoZSBjb250ZXh0IG9uY2UgaW4gYSB3aGlsZS4KKwkgKiBwYWdlIHJhbmdlIChyZWNlaXZl ZCBmcm9tIHRoZSB3b3JrZXJzKS4gV2UgZG9uJ3QgZXhwZWN0IGh1Z2UgbnVtYmVyIG9mCisJ ICogb3ZlcmxhcHMgdW5kZXIgcmVndWxhciBjaXJjdW1zdGFuY2VzLCBiZWNhdXNlIGZvciBs YXJnZSB0YWJsZXMgdGhlCisJICogY2h1bmsgc2l6ZSBpcyBsaWtlbHkgbGFyZ2VyIHRoYW4g dGhlIEJSSU4gcGFnZSByYW5nZSksIGJ1dCBpdCBjYW4KKwkgKiBoYXBwZW4sIGFuZCB0aGUg dW5pb24gZnVuY3Rpb25zIG1heSBkbyBhbGwga2luZHMgb2Ygc3R1ZmYuIFNvIHdlIGJldHRl cgorCSAqIHJlc2V0IHRoZSBjb250ZXh0IG9uY2UgaW4gYSB3aGlsZS4KIAkgKi8KIAlyYW5n ZUN4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwKIAkJ CQkJCQkJCSAiYnJpbiB1bmlvbiIsCkBAIC0yNTEzLDggKzI1MTUsOCBAQCBfYnJpbl9lbmRf cGFyYWxsZWwoQnJpbkxlYWRlciAqYnJpbmxlYWRlciwgQnJpbkJ1aWxkU3RhdGUgKnN0YXRl KQogCiAJLyoKIAkgKiBSZWFkIHRoZSBCUklOIHR1cGxlcyBmcm9tIHRoZSBzaGFyZWQgdHVw bGVzb3J0LCBzb3J0ZWQgYnkgYmxvY2sgbnVtYmVyLgotCSAqIFRoYXQgcHJvYmFibHkgZ2l2 ZXMgdXMgYW4gaW5kZXggdGhhdCBpcyBjaGVhcGVyIHRvIHNjYW4sIHRoYW5rcyB0byBtb3N0 bHkKLQkgKiBnZXR0aW5nIGRhdGEgZnJvbSB0aGUgc2FtZSBpbmRleCBwYWdlIGFzIGJlZm9y ZS4KKwkgKiBUaGF0IHByb2JhYmx5IGdpdmVzIHVzIGFuIGluZGV4IHRoYXQgaXMgY2hlYXBl ciB0byBzY2FuLCB0aGFua3MgdG8KKwkgKiBtb3N0bHkgZ2V0dGluZyBkYXRhIGZyb20gdGhl IHNhbWUgaW5kZXggcGFnZSBhcyBiZWZvcmUuCiAJICovCiAJd2hpbGUgKChidHVwID0gdHVw bGVzb3J0X2dldGJyaW50dXBsZShzcG9vbC0+c29ydHN0YXRlLCAmdHVwbGVuLCB0cnVlKSkg IT0gTlVMTCkKIAl7CkBAIC0yNTI4LDE1ICsyNTMwLDE1IEBAIF9icmluX2VuZF9wYXJhbGxl bChCcmluTGVhZGVyICpicmlubGVhZGVyLCBCcmluQnVpbGRTdGF0ZSAqc3RhdGUpCiAJCSAq IHRoZSBtZW10dXBsZSwgYW5kIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgb25lIGZyb20gdHVw bGVzb3J0LiBXZQogCQkgKiBob3dldmVyIG1heSBuZWVkIHRvIGluc2VydCBlbXB0eSBzdW1t YXJpZXMgaW50byB0aGUgaW5kZXguCiAJCSAqCi0JCSAqIElmIGl0J3MgdGhlIHNhbWUgYmxv Y2sgYXMgdGhlIGxhc3Qgd2Ugc2F3LCB3ZSBzaW1wbHkgdW5pb24gdGhlCi0JCSAqIGJyaW4g dHVwbGUgaW50byBpdCwgYW5kIHdlJ3JlIGRvbmUgLSB3ZSBkb24ndCBldmVuIG5lZWQgdG8g aW5zZXJ0Ci0JCSAqIGVtcHR5IHJhbmdlcywgYmVjYXVzZSB0aGF0IHdhcyBkb25lIGVhcmxp ZXIgd2hlbiB3ZSBzYXcgdGhlIGZpcnN0Ci0JCSAqIGJyaW4gdHVwbGUgKGZvciB0aGlzIHJh bmdlKS4KKwkJICogSWYgaXQncyB0aGUgc2FtZSBibG9jayBhcyB0aGUgbGFzdCB3ZSBzYXcs IHdlIHNpbXBseSB1bmlvbiB0aGUgYnJpbgorCQkgKiB0dXBsZSBpbnRvIGl0LCBhbmQgd2Un cmUgZG9uZSAtIHdlIGRvbid0IGV2ZW4gbmVlZCB0byBpbnNlcnQgZW1wdHkKKwkJICogcmFu Z2VzLCBiZWNhdXNlIHRoYXQgd2FzIGRvbmUgZWFybGllciB3aGVuIHdlIHNhdyB0aGUgZmly c3QgYnJpbgorCQkgKiB0dXBsZSAoZm9yIHRoaXMgcmFuZ2UpLgogCQkgKgogCQkgKiBGaW5h bGx5LCBpZiBpdCdzIG5vdCB0aGUgZmlyc3QgYnJpbiB0dXBsZSwgYW5kIGl0J3Mgbm90IHRo ZSBzYW1lCi0JCSAqIHBhZ2UgcmFuZ2UsIHdlIG5lZWQgdG8gZG8gdGhlIGluc2VydCBhbmQg dGhlbiBkZWZvcm0gdGhlIHR1cGxlCi0JCSAqIGludG8gdGhlIG1lbXR1cGxlLiBUaGVuIHdl J2xsIGluc2VydCBlbXB0eSByYW5nZXMgYmVmb3JlIHRoZQotCQkgKiBuZXcgYnJpbiB0dXBs ZSwgaWYgbmVlZGVkLgorCQkgKiBwYWdlIHJhbmdlLCB3ZSBuZWVkIHRvIGRvIHRoZSBpbnNl cnQgYW5kIHRoZW4gZGVmb3JtIHRoZSB0dXBsZSBpbnRvCisJCSAqIHRoZSBtZW10dXBsZS4g VGhlbiB3ZSdsbCBpbnNlcnQgZW1wdHkgcmFuZ2VzIGJlZm9yZSB0aGUgbmV3IGJyaW4KKwkJ ICogdHVwbGUsIGlmIG5lZWRlZC4KIAkJICovCiAJCWlmIChwcmV2Ymxrbm8gPT0gSW52YWxp ZEJsb2NrTnVtYmVyKQogCQl7CkBAIC0yNzMwLDcgKzI3MzIsNyBAQCBfYnJpbl9wYXJhbGxl bF9zY2FuX2FuZF9idWlsZChCcmluQnVpbGRTdGF0ZSAqc3RhdGUsIEJyaW5TcG9vbCAqYnJp bnNwb29sLAogCQkJCQkJCSAgYm9vbCBwcm9ncmVzcykKIHsKIAlTb3J0Q29vcmRpbmF0ZSBj b29yZGluYXRlOwotCVRhYmxlU2NhbkRlc2MJc2NhbjsKKwlUYWJsZVNjYW5EZXNjIHNjYW47 CiAJZG91YmxlCQlyZWx0dXBsZXM7CiAJSW5kZXhJbmZvICAqaW5kZXhJbmZvOwogCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9zb3J0L3R1cGxlc29ydHZhcmlhbnRzLmMgYi9z cmMvYmFja2VuZC91dGlscy9zb3J0L3R1cGxlc29ydHZhcmlhbnRzLmMKaW5kZXggOWIzYTcw ZTZjY2YuLjkwZmM2MDVmMWNhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9zb3J0 L3R1cGxlc29ydHZhcmlhbnRzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvc29ydC90dXBs ZXNvcnR2YXJpYW50cy5jCkBAIC05NjUsOCArOTY1LDggQEAgdHVwbGVzb3J0X2dldGJyaW50 dXBsZShUdXBsZXNvcnRzdGF0ZSAqc3RhdGUsIFNpemUgKmxlbiwgYm9vbCBmb3J3YXJkKQog ewogCVR1cGxlc29ydFB1YmxpYyAqYmFzZSA9IFR1cGxlc29ydHN0YXRlR2V0UHVibGljKHN0 YXRlKTsKIAlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNo VG8oYmFzZS0+c29ydGNvbnRleHQpOwotCVNvcnRUdXBsZQkJc3R1cDsKLQlCcmluU29ydFR1 cGxlICAqYnR1cDsKKwlTb3J0VHVwbGUJc3R1cDsKKwlCcmluU29ydFR1cGxlICpidHVwOwog CiAJaWYgKCF0dXBsZXNvcnRfZ2V0dHVwbGVfY29tbW9uKHN0YXRlLCBmb3J3YXJkLCAmc3R1 cCkpCiAJCXN0dXAudHVwbGUgPSBOVUxMOwpAQCAtMTcwOCw3ICsxNzA4LDcgQEAgcmVtb3Zl YWJicmV2X2luZGV4X2JyaW4oVHVwbGVzb3J0c3RhdGUgKnN0YXRlLCBTb3J0VHVwbGUgKnN0 dXBzLCBpbnQgY291bnQpCiAKIAlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKIAl7Ci0J CUJyaW5Tb3J0VHVwbGUgICAqdHVwbGU7CisJCUJyaW5Tb3J0VHVwbGUgKnR1cGxlOwogCiAJ CXR1cGxlID0gc3R1cHNbaV0udHVwbGU7CiAJCXN0dXBzW2ldLmRhdHVtMSA9IHR1cGxlLT50 dXBsZS5idF9ibGtubzsKQEAgLTE3MzUsOCArMTczNSw4IEBAIHN0YXRpYyB2b2lkCiB3cml0 ZXR1cF9pbmRleF9icmluKFR1cGxlc29ydHN0YXRlICpzdGF0ZSwgTG9naWNhbFRhcGUgKnRh cGUsIFNvcnRUdXBsZSAqc3R1cCkKIHsKIAlUdXBsZXNvcnRQdWJsaWMgKmJhc2UgPSBUdXBs ZXNvcnRzdGF0ZUdldFB1YmxpYyhzdGF0ZSk7Ci0JQnJpblNvcnRUdXBsZSAgKnR1cGxlID0g KEJyaW5Tb3J0VHVwbGUgKikgc3R1cC0+dHVwbGU7Ci0JdW5zaWduZWQgaW50CXR1cGxlbiA9 IHR1cGxlLT50dXBsZW47CisJQnJpblNvcnRUdXBsZSAqdHVwbGUgPSAoQnJpblNvcnRUdXBs ZSAqKSBzdHVwLT50dXBsZTsKKwl1bnNpZ25lZCBpbnQgdHVwbGVuID0gdHVwbGUtPnR1cGxl bjsKIAogCXR1cGxlbiA9IHR1cGxlbiArIHNpemVvZih0dXBsZW4pOwogCUxvZ2ljYWxUYXBl V3JpdGUodGFwZSwgJnR1cGxlbiwgc2l6ZW9mKHR1cGxlbikpOwpAQCAtMTc0OSw2ICsxNzQ5 LDcgQEAgc3RhdGljIHZvaWQKIHJlYWR0dXBfaW5kZXhfYnJpbihUdXBsZXNvcnRzdGF0ZSAq c3RhdGUsIFNvcnRUdXBsZSAqc3R1cCwKIAkJCQkgICBMb2dpY2FsVGFwZSAqdGFwZSwgdW5z aWduZWQgaW50IGxlbikKIHsKKwlCcmluU29ydFR1cGxlICp0dXBsZTsKIAlUdXBsZXNvcnRQ dWJsaWMgKmJhc2UgPSBUdXBsZXNvcnRzdGF0ZUdldFB1YmxpYyhzdGF0ZSk7CiAJdW5zaWdu ZWQgaW50IHR1cGxlbiA9IGxlbiAtIHNpemVvZih1bnNpZ25lZCBpbnQpOwogCkBAIC0xNzU2 LDkgKzE3NTcsOCBAQCByZWFkdHVwX2luZGV4X2JyaW4oVHVwbGVzb3J0c3RhdGUgKnN0YXRl LCBTb3J0VHVwbGUgKnN0dXAsCiAJICogQWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBCUklOIHNv cnQgdHVwbGUsIHdoaWNoIGlzIEJyaW5UdXBsZSB3aXRoIGFuCiAJICogZXh0cmEgbGVuZ3Ro IGZpZWxkLgogCSAqLwotCUJyaW5Tb3J0VHVwbGUgKnR1cGxlCi0JCT0gKEJyaW5Tb3J0VHVw bGUgKikgdHVwbGVzb3J0X3JlYWR0dXBfYWxsb2Moc3RhdGUsCi0JCQkJCQkJCQkJCQkJQlJJ TlNPUlRUVVBMRV9TSVpFKHR1cGxlbikpOworCXR1cGxlID0gKEJyaW5Tb3J0VHVwbGUgKikg dHVwbGVzb3J0X3JlYWR0dXBfYWxsb2Moc3RhdGUsCisJCQkJCQkJCQkJCQkJICBCUklOU09S VFRVUExFX1NJWkUodHVwbGVuKSk7CiAKIAl0dXBsZS0+dHVwbGVuID0gdHVwbGVuOwogCmRp ZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29s cy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDg2YTk4ODZkNGY3Li4wMDFmZWY1ODY1 MiAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIv c3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTI5NywxMyArMjk3LDE3IEBA IEJwQ2hhcgogQnJpbkJ1aWxkU3RhdGUKIEJyaW5EZXNjCiBCcmluSW5zZXJ0U3RhdGUKK0Jy aW5MZWFkZXIKIEJyaW5NZW1UdXBsZQogQnJpbk1ldGFQYWdlRGF0YQogQnJpbk9wYXF1ZQog QnJpbk9wY0luZm8KIEJyaW5PcHRpb25zCiBCcmluUmV2bWFwCitCcmluU2hhcmVkCitCcmlu U29ydFR1cGxlCiBCcmluU3BlY2lhbFNwYWNlCitCcmluU3Bvb2wKIEJyaW5TdGF0c0RhdGEK IEJyaW5UdXBsZQogQnJpblZhbHVlcwpAQCAtMjg3OSw2ICsyODgzLDcgQEAgVHVwbGVUYWJs ZVNsb3RPcHMKIFR1cGxlc29ydENsdXN0ZXJBcmcKIFR1cGxlc29ydERhdHVtQXJnCiBUdXBs ZXNvcnRJbmRleEFyZworVHVwbGVzb3J0SW5kZXhCcmluQXJnCiBUdXBsZXNvcnRJbmRleEJU cmVlQXJnCiBUdXBsZXNvcnRJbmRleEhhc2hBcmcKIFR1cGxlc29ydEluc3RydW1lbnRhdGlv bgotLSAKMi40Mi4wCgo= --------------K4A0wOAng8JatwEd4NvqL3mz--