Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1qHPkE-0001Qg-FU for pgsql-hackers@arkaria.postgresql.org; Thu, 06 Jul 2023 14:14:06 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1qHPkD-000222-0r for pgsql-hackers@arkaria.postgresql.org; Thu, 06 Jul 2023 14:14:05 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1qHPkC-00021t-AY for pgsql-hackers@lists.postgresql.org; Thu, 06 Jul 2023 14:14:04 +0000 Received: from mail-ed1-x529.google.com ([2a00:1450:4864:20::529]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1qHPk6-002MkW-DB for pgsql-hackers@lists.postgresql.org; Thu, 06 Jul 2023 14:14:02 +0000 Received: by mail-ed1-x529.google.com with SMTP id 4fb4d7f45d1cf-51d93425853so1040220a12.1 for ; Thu, 06 Jul 2023 07:13:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; t=1688652836; x=1691244836; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=9+JpFRW+Nojiks8cUgU9fgn4yhHM5VvZLEyufwu+iP8=; b=D+XYTRaToXpnxf9lcWz7y9Gx8J/peVBeLejZyAAXI+zPQNOwJIe0DPwAx15SLibWLP bq5W6eHgpBNhA3A4dwyRqdrWhznbxD+SDn/FbVlCeBX3K1h9NxE3uMi1xCGizqKPT59Y 0L5QBBKROfOUIBC1taaTyZMfCCyBo4nVdDN0SBJlcz68V9fWsQcObzLO14YpPA6sun75 mq0xA/I360k6ccGJZQmerHrOgG1BpbvyQrUsKl63hajI8RFZpL5bshIDXRKXAjczGWs0 jI8K5ouboWjArpGrAkG56pEFljYpBYa+Zsr1VDobRMPcvBSfO3Pc96Oy/CKJ02YUFdWf XnPQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1688652836; x=1691244836; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=9+JpFRW+Nojiks8cUgU9fgn4yhHM5VvZLEyufwu+iP8=; b=M9nmGUF94dIwD6Z61VvXehFghyR+VfU+T+wf7sGdTLnWgYBFa1ES/utpQHo5EAN3iW 77NCnOfZ7TyhkcES0XpayqSKibhVruypxp8IufvvP5wJjDt1rtqrECTEfViBdvidqQN8 vCSHQl869+fh5XbQWVDupw03g4YqLc3vO8VS6Edk2ox0VMwaiLhDuAEsfODcEnp/57bb FNyQ7Zwfdi/2RDa+8XXxOZC1coCcH9ViO+mlddtXvVBnnU3MqPoNqUvHEfjjcx0l112a SPAxj2PI5Cng0tEJ6wZ5zqhwLxsyAbD8We4UEuyWPd6T0wxWpsbgxkVhYICZldq1kmCD V5qg== X-Gm-Message-State: ABy/qLZ5hvLp181zdScA3zQN5j2Z61ltG4Sx+lqENQ+Pka4mwgmpGqcD +n3JG01haBBt7zEIAHvfLlnWbA== X-Google-Smtp-Source: APBJJlGYXXRh3RipfyKQdIpy/vBoK8sjxuNNZeSu/WnwoP9KPyG0Zlm6KmGmVhduUQKYwhGsdaI5jQ== X-Received: by 2002:a17:906:7046:b0:992:b9f4:85db with SMTP id r6-20020a170906704600b00992b9f485dbmr1449350ejj.39.1688652835915; Thu, 06 Jul 2023 07:13:55 -0700 (PDT) Received: from [10.137.0.17] (ip-86-49-228-220.bb.vodafone.cz. [86.49.228.220]) by smtp.gmail.com with ESMTPSA id jt18-20020a170906ca1200b009930c80b87csm889610ejb.142.2023.07.06.07.13.54 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 06 Jul 2023 07:13:55 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------swWrb07tJ05mQArJkjtLjLk2" Message-ID: <2d7c64de-716e-346e-b01e-03db0c2bc5ac@enterprisedb.com> Date: Thu, 6 Jul 2023 16:13:52 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.12.0 Subject: Re: Parallel CREATE INDEX for BRIN indexes To: Matthias van de Meent Cc: PostgreSQL Hackers References: Content-Language: en-US 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. --------------swWrb07tJ05mQArJkjtLjLk2 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 7/5/23 16:33, Matthias van de Meent wrote: > ... > >> Maybe. I wasn't that familiar with what parallel tuplesort can and can't >> do, and the little I knew I managed to forget since I wrote this patch. >> Which similar features do you have in mind? > > I was referring to the feature that is "emitting a single sorted run > of tuples at the leader backend based on data gathered in parallel > worker backends". It manages the sort state, on-disk runs etc. so that > you don't have to manage that yourself. > > Adding a new storage format for what is effectively a logical tape > (logtape.{c,h}) and manually merging it seems like a lot of changes if > that functionality is readily available, standardized and optimized in > sortsupport; and adds an additional place to manually go through for > disk-related changes like TDE. > Here's a new version of the patch, with three main changes: 1) Adoption of the parallel scan approach, instead of the homegrown solution with a sequence of TID scans. This is mostly what the 0002 patch did, except for fixing a bug - parallel scan has a "rampdown" close to the end, and this needs to consider the chunk size too. 2) Switches to the parallel tuplesort, as proposed. This turned out to be easier than I expected - most of the work was in adding methods to tuplesortvariants.c to allow reading/writing BrinTuple items. The main limitation is that we need to pass around the length of the tuple (AFAICS it's not in the BrinTuple itself). I'm not entirely sure about the memory management aspect of this, and maybe there's a more elegant solution. Overall it seems to work - the brin.c code is heavily based on how nbtsearch.c does parallel builds for btree, so hopefully it's fine. At some point I got a bit confused about which spool to create/use, but it seems to work. 3) Handling of empty ranges - I ended up ignoring empty ranges in workers (i.e. those are not written to the tuplesort), and instead the leader fills them in when reading data from the shared tuplesort. One thing I was wondering about is whether it might be better to allow the workers to process overlapping ranges, and then let the leader to merge the summaries. That would mean we might not need the tableam.c changes at all, but the leader would need to do more work (although the BRIN indexes tend to be fairly small). The main reason that got me thinking about this is that we have pretty much no tests for the union procedures, because triggering that is really difficult. But for parallel index builds that'd be much more common. regards -- Tomas Vondra EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company --------------swWrb07tJ05mQArJkjtLjLk2 Content-Type: text/x-patch; charset=UTF-8; name="0001-parallel-CREATE-INDEX-for-BRIN-20230706.patch" Content-Disposition: attachment; filename="0001-parallel-CREATE-INDEX-for-BRIN-20230706.patch" Content-Transfer-Encoding: base64 RnJvbSA2NDg1YzI2ZDA1NDZlYzM1ZDgxYmFkMzNmMzg5M2VjNWVlNDIxZjg3IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzLnZvbmRyYUBwb3N0 Z3Jlc3FsLm9yZz4KRGF0ZTogU3VuLCAyNiBNYXIgMjAyMyAwMDo0NDowMSArMDEwMApTdWJq ZWN0OiBbUEFUQ0hdIHBhcmFsbGVsIENSRUFURSBJTkRFWCBmb3IgQlJJTgoKLS0tCiBzcmMv YmFja2VuZC9hY2Nlc3MvYnJpbi9icmluLmMgICAgICAgICAgICAgfCA3ODEgKysrKysrKysr KysrKysrKysrKystCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNvcnQuYyAgICAg ICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtLmMgICAgICAg ICB8ICA0OSArLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vcGFyYWxsZWwuYyAgICAg IHwgICA0ICsKIHNyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYyAgICAgICAgICAgICAgICB8 ICAgMyArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVNlcXNjYW4uYyAgICAgICAgIHwg ICAzICstCiBzcmMvYmFja2VuZC91dGlscy9zb3J0L3R1cGxlc29ydC5jICAgICAgICAgfCAg IDMgKwogc3JjL2JhY2tlbmQvdXRpbHMvc29ydC90dXBsZXNvcnR2YXJpYW50cy5jIHwgMjEx ICsrKysrKwogc3JjL2luY2x1ZGUvYWNjZXNzL2JyaW4uaCAgICAgICAgICAgICAgICAgIHwg ICAzICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmggICAgICAgICAgICAgICB8ICAg MSArCiBzcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oICAgICAgICAgICAgICAgfCAgIDkg Ky0KIHNyYy9pbmNsdWRlL3V0aWxzL3R1cGxlc29ydC5oICAgICAgICAgICAgICB8ICAxMSAr CiAxMiBmaWxlcyBjaGFuZ2VkLCAxMDY1IGluc2VydGlvbnMoKyksIDE1IGRlbGV0aW9ucygt KQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYwppbmRleCAzYzZhOTU2ZWFhLi45ZTcyYzU0NTcy IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluLmMKKysrIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVk ZSAicG9zdG1hc3Rlci9hdXRvdmFjdXVtLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9idWZtZ3Iu aCIKICNpbmNsdWRlICJzdG9yYWdlL2ZyZWVzcGFjZS5oIgorI2luY2x1ZGUgInRjb3AvdGNv cHByb3QuaCIJCS8qIHBncm1pbmNsdWRlIGlnbm9yZSAqLwogI2luY2x1ZGUgInV0aWxzL2Fj bC5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvZGF0 dW0uaCIKQEAgLTQwLDcgKzQxLDExOCBAQAogI2luY2x1ZGUgInV0aWxzL2luZGV4X3NlbGZ1 bmNzLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKICNpbmNsdWRlICJ1dGlscy9y ZWwuaCIKKyNpbmNsdWRlICJ1dGlscy90dXBsZXNvcnQuaCIKIAorLyogTWFnaWMgbnVtYmVy cyBmb3IgcGFyYWxsZWwgc3RhdGUgc2hhcmluZyAqLworI2RlZmluZSBQQVJBTExFTF9LRVlf QlJJTl9TSEFSRUQJCVVJTlQ2NENPTlNUKDB4QTAwMDAwMDAwMDAwMDAwMSkKKyNkZWZpbmUg UEFSQUxMRUxfS0VZX1RVUExFU09SVAkJCVVJTlQ2NENPTlNUKDB4QTAwMDAwMDAwMDAwMDAw MikKKyNkZWZpbmUgUEFSQUxMRUxfS0VZX1FVRVJZX1RFWFQJCQlVSU5UNjRDT05TVCgweEEw MDAwMDAwMDAwMDAwMDMpCisjZGVmaW5lIFBBUkFMTEVMX0tFWV9XQUxfVVNBR0UJCQlVSU5U NjRDT05TVCgweEEwMDAwMDAwMDAwMDAwMDQpCisjZGVmaW5lIFBBUkFMTEVMX0tFWV9CVUZG RVJfVVNBR0UJCVVJTlQ2NENPTlNUKDB4QTAwMDAwMDAwMDAwMDAwNSkKKworLyoKKyAqIFN0 YXR1cyByZWNvcmQgZm9yIHNwb29saW5nL3NvcnRpbmcgcGhhc2UuCisgKi8KK3R5cGVkZWYg c3RydWN0IEJyaW5TcG9vbAoreworCVR1cGxlc29ydHN0YXRlICpzb3J0c3RhdGU7CS8qIHN0 YXRlIGRhdGEgZm9yIHR1cGxlc29ydC5jICovCisJUmVsYXRpb24JaGVhcDsKKwlSZWxhdGlv bglpbmRleDsKK30gQnJpblNwb29sOworCisvKgorICogU3RhdHVzIGZvciBpbmRleCBidWls ZHMgcGVyZm9ybWVkIGluIHBhcmFsbGVsLiAgVGhpcyBpcyBhbGxvY2F0ZWQgaW4gYQorICog ZHluYW1pYyBzaGFyZWQgbWVtb3J5IHNlZ21lbnQuCisgKi8KK3R5cGVkZWYgc3RydWN0IEJy aW5TaGFyZWQKK3sKKwkvKgorCSAqIFRoZXNlIGZpZWxkcyBhcmUgbm90IG1vZGlmaWVkIGR1 cmluZyB0aGUgYnVpbGQuICBUaGV5IHByaW1hcmlseSBleGlzdCBmb3IKKwkgKiB0aGUgYmVu ZWZpdCBvZiB3b3JrZXIgcHJvY2Vzc2VzIHRoYXQgbmVlZCB0byBjcmVhdGUgc3RhdGUgY29y cmVzcG9uZGluZworCSAqIHRvIHRoYXQgdXNlZCBieSB0aGUgbGVhZGVyLgorCSAqLworCU9p ZAkJCWhlYXByZWxpZDsKKwlPaWQJCQlpbmRleHJlbGlkOworCWJvb2wJCWlzY29uY3VycmVu dDsKKwlCbG9ja051bWJlcglwYWdlc1BlclJhbmdlOworCWludAkJCXNjYW50dXBsZXNvcnRz dGF0ZXM7CisKKwkvKgorCSAqIHdvcmtlcnNkb25lY3YgaXMgdXNlZCB0byBtb25pdG9yIHRo ZSBwcm9ncmVzcyBvZiB3b3JrZXJzLiAgQWxsIHBhcmFsbGVsCisJICogcGFydGljaXBhbnRz IG11c3QgaW5kaWNhdGUgdGhhdCB0aGV5IGFyZSBkb25lIGJlZm9yZSBsZWFkZXIgY2FuIHVz ZQorCSAqIHJlc3VsdHMgYnVpbHQgYnkgdGhlIHdvcmtlcnMgKGFuZCBiZWZvcmUgbGVhZGVy IGNhbiB3cml0ZSB0aGUgZGF0YSBpbnRvCisJICogdGhlIGluZGV4KS4KKwkgKi8KKwlDb25k aXRpb25WYXJpYWJsZSB3b3JrZXJzZG9uZWN2OworCisJLyoKKwkgKiBtdXRleCBwcm90ZWN0 cyBhbGwgZmllbGRzIGJlZm9yZSBoZWFwZGVzYy4KKwkgKgorCSAqIFRoZXNlIGZpZWxkcyBj b250YWluIHN0YXR1cyBpbmZvcm1hdGlvbiBvZiBpbnRlcmVzdCB0byBCUklOIGluZGV4CisJ ICogYnVpbGRzIHRoYXQgbXVzdCB3b3JrIGp1c3QgdGhlIHNhbWUgd2hlbiBhbiBpbmRleCBp cyBidWlsdCBpbiBwYXJhbGxlbC4KKwkgKi8KKwlzbG9ja190CQltdXRleDsKKworCS8qCisJ ICogTXV0YWJsZSBzdGF0ZSB0aGF0IGlzIG1haW50YWluZWQgYnkgd29ya2VycywgYW5kIHJl cG9ydGVkIGJhY2sgdG8KKwkgKiBsZWFkZXIgYXQgZW5kIG9mIHRoZSBzY2Fucy4KKwkgKgor CSAqIG5wYXJ0aWNpcGFudHNkb25lIGlzIG51bWJlciBvZiB3b3JrZXIgcHJvY2Vzc2VzIGZp bmlzaGVkLgorCSAqCisJICogcmVsdHVwbGVzIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgaW5w dXQgaGVhcCB0dXBsZXMuCisJICoKKwkgKiBpbmR0dXBsZXMgaXMgdGhlIHRvdGFsIG51bWJl ciBvZiB0dXBsZXMgdGhhdCBtYWRlIGl0IGludG8gdGhlIGluZGV4LgorCSAqLworCWludAkJ CW5wYXJ0aWNpcGFudHNkb25lOworCWRvdWJsZQkJcmVsdHVwbGVzOworCWRvdWJsZQkJaW5k dHVwbGVzOworCisJLyoKKwkgKiBQYXJhbGxlbFRhYmxlU2NhbkRlc2NEYXRhIGRhdGEgZm9s bG93cy4gQ2FuJ3QgZGlyZWN0bHkgZW1iZWQgaGVyZSwgYXMKKwkgKiBpbXBsZW1lbnRhdGlv bnMgb2YgdGhlIHBhcmFsbGVsIHRhYmxlIHNjYW4gZGVzYyBpbnRlcmZhY2UgbWlnaHQgbmVl ZAorCSAqIHN0cm9uZ2VyIGFsaWdubWVudC4KKwkgKi8KK30gQnJpblNoYXJlZDsKKworLyoK KyAqIFJldHVybiBwb2ludGVyIHRvIGEgQnJpblNoYXJlZCdzIHBhcmFsbGVsIHRhYmxlIHNj YW4uCisgKgorICogYy5mLiBzaG1fdG9jX2FsbG9jYXRlIGFzIHRvIHdoeSBCVUZGRVJBTElH TiBpcyB1c2VkLCByYXRoZXIgdGhhbiBqdXN0CisgKiBNQVhBTElHTi4KKyAqLworI2RlZmlu ZSBQYXJhbGxlbFRhYmxlU2NhbkZyb21CcmluU2hhcmVkKHNoYXJlZCkgXAorCShQYXJhbGxl bFRhYmxlU2NhbkRlc2MpICgoY2hhciAqKSAoc2hhcmVkKSArIEJVRkZFUkFMSUdOKHNpemVv ZihCcmluU2hhcmVkKSkpCisKKy8qCisgKiBTdGF0dXMgZm9yIGxlYWRlciBpbiBwYXJhbGxl bCBpbmRleCBidWlsZC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgQnJpbkxlYWRlcgoreworCS8q IHBhcmFsbGVsIGNvbnRleHQgaXRzZWxmICovCisJUGFyYWxsZWxDb250ZXh0ICpwY3h0Owor CisJLyoKKwkgKiBucGFydGljaXBhbnR0dXBsZXNvcnRzIGlzIHRoZSBleGFjdCBudW1iZXIg b2Ygd29ya2VyIHByb2Nlc3NlcworCSAqIHN1Y2Nlc3NmdWxseSBsYXVuY2hlZCwgcGx1cyBv bmUgbGVhZGVyIHByb2Nlc3MgaWYgaXQgcGFydGljaXBhdGVzIGFzIGEKKwkgKiB3b3JrZXIg KG9ubHkgRElTQUJMRV9MRUFERVJfUEFSVElDSVBBVElPTiBidWlsZHMgYXZvaWQgbGVhZGVy CisJICogcGFydGljaXBhdGluZyBhcyBhIHdvcmtlcikuCisJICovCisJaW50CQkJbnBhcnRp Y2lwYW50dHVwbGVzb3J0czsKKworCS8qCisJICogTGVhZGVyIHByb2Nlc3MgY29udmVuaWVu Y2UgcG9pbnRlcnMgdG8gc2hhcmVkIHN0YXRlIChsZWFkZXIgYXZvaWRzIFRPQworCSAqIGxv b2t1cHMpLgorCSAqCisJICogYnJpbnNoYXJlZCBpcyB0aGUgc2hhcmVkIHN0YXRlIGZvciBl bnRpcmUgYnVpbGQuICBzaGFyZWRzb3J0IGlzIHRoZQorCSAqIHNoYXJlZCwgdHVwbGVzb3J0 LW1hbmFnZWQgc3RhdGUgcGFzc2VkIHRvIGVhY2ggcHJvY2VzcyB0dXBsZXNvcnQuCisJICog c25hcHNob3QgaXMgdGhlIHNuYXBzaG90IHVzZWQgYnkgdGhlIHNjYW4gaWZmIGFuIE1WQ0Mg c25hcHNob3QgaXMgcmVxdWlyZWQuCisJICovCisJQnJpblNoYXJlZAkgICAqYnJpbnNoYXJl ZDsKKwlTaGFyZWRzb3J0ICpzaGFyZWRzb3J0OworCVNuYXBzaG90CXNuYXBzaG90OworCVdh bFVzYWdlICAgKndhbHVzYWdlOworCUJ1ZmZlclVzYWdlICpidWZmZXJ1c2FnZTsKK30gQnJp bkxlYWRlcjsKIAogLyoKICAqIFdlIHVzZSBhIEJyaW5CdWlsZFN0YXRlIGR1cmluZyBpbml0 aWFsIGNvbnN0cnVjdGlvbiBvZiBhIEJSSU4gaW5kZXguCkBAIC01MCwxMiArMTYyLDIzIEBA IHR5cGVkZWYgc3RydWN0IEJyaW5CdWlsZFN0YXRlCiB7CiAJUmVsYXRpb24JYnNfaXJlbDsK IAlpbnQJCQlic19udW10dXBsZXM7CisJaW50CQkJYnNfcmVsdHVwbGVzOwogCUJ1ZmZlcgkJ YnNfY3VycmVudEluc2VydEJ1ZjsKIAlCbG9ja051bWJlciBic19wYWdlc1BlclJhbmdlOwog CUJsb2NrTnVtYmVyIGJzX2N1cnJSYW5nZVN0YXJ0OwogCUJyaW5SZXZtYXAgKmJzX3JtQWNj ZXNzOwogCUJyaW5EZXNjICAgKmJzX2JkZXNjOwogCUJyaW5NZW1UdXBsZSAqYnNfZHR1cGxl OworCisJLyoKKwkgKiBic19sZWFkZXIgaXMgb25seSBwcmVzZW50IHdoZW4gYSBwYXJhbGxl bCBpbmRleCBidWlsZCBpcyBwZXJmb3JtZWQsIGFuZAorCSAqIG9ubHkgaW4gdGhlIGxlYWRl ciBwcm9jZXNzLiAoQWN0dWFsbHksIG9ubHkgdGhlIGxlYWRlciBoYXMgYQorCSAqIEJyaW5C dWlsZFN0YXRlLikKKwkgKi8KKwlCcmluTGVhZGVyICpic19sZWFkZXI7CisJaW50CQkJYnNf d29ya2VyX2lkOworCUJyaW5TcG9vbCAgKmJzX3Nwb29sOworCUJyaW5TcG9vbCAgKmJzX3Nw b29sX291dDsKIH0gQnJpbkJ1aWxkU3RhdGU7CiAKIC8qCkBAIC03Niw2ICsxOTksNyBAQCBz dGF0aWMgdm9pZCB0ZXJtaW5hdGVfYnJpbl9idWlsZHN0YXRlKEJyaW5CdWlsZFN0YXRlICpz dGF0ZSk7CiBzdGF0aWMgdm9pZCBicmluc3VtbWFyaXplKFJlbGF0aW9uIGluZGV4LCBSZWxh dGlvbiBoZWFwUmVsLCBCbG9ja051bWJlciBwYWdlUmFuZ2UsCiAJCQkJCQkgIGJvb2wgaW5j bHVkZV9wYXJ0aWFsLCBkb3VibGUgKm51bVN1bW1hcml6ZWQsIGRvdWJsZSAqbnVtRXhpc3Rp bmcpOwogc3RhdGljIHZvaWQgZm9ybV9hbmRfaW5zZXJ0X3R1cGxlKEJyaW5CdWlsZFN0YXRl ICpzdGF0ZSk7CitzdGF0aWMgdm9pZCBmb3JtX2FuZF9zcGlsbF90dXBsZShCcmluQnVpbGRT dGF0ZSAqc3RhdGUpOwogc3RhdGljIHZvaWQgdW5pb25fdHVwbGVzKEJyaW5EZXNjICpiZGVz YywgQnJpbk1lbVR1cGxlICphLAogCQkJCQkJIEJyaW5UdXBsZSAqYik7CiBzdGF0aWMgdm9p ZCBicmluX3ZhY3V1bV9zY2FuKFJlbGF0aW9uIGlkeHJlbCwgQnVmZmVyQWNjZXNzU3RyYXRl Z3kgc3RyYXRlZ3kpOwpAQCAtODMsNiArMjA3LDIwIEBAIHN0YXRpYyBib29sIGFkZF92YWx1 ZXNfdG9fcmFuZ2UoUmVsYXRpb24gaWR4UmVsLCBCcmluRGVzYyAqYmRlc2MsCiAJCQkJCQkJ CUJyaW5NZW1UdXBsZSAqZHR1cCwgRGF0dW0gKnZhbHVlcywgYm9vbCAqbnVsbHMpOwogc3Rh dGljIGJvb2wgY2hlY2tfbnVsbF9rZXlzKEJyaW5WYWx1ZXMgKmJ2YWwsIFNjYW5LZXkgKm51 bGxrZXlzLCBpbnQgbm51bGxrZXlzKTsKIAorLyogcGFyYWxsZWwgaW5kZXggYnVpbGRzICov CitzdGF0aWMgdm9pZCBfYnJpbl9iZWdpbl9wYXJhbGxlbChCcmluQnVpbGRTdGF0ZSAqYnVp bGRzdGF0ZSwgUmVsYXRpb24gaGVhcCwgUmVsYXRpb24gaW5kZXgsCisJCQkJCQkJCSBib29s IGlzY29uY3VycmVudCwgaW50IHJlcXVlc3QpOworc3RhdGljIHZvaWQgX2JyaW5fZW5kX3Bh cmFsbGVsKEJyaW5MZWFkZXIgKmJ0bGVhZGVyLCBCcmluQnVpbGRTdGF0ZSAqc3RhdGUpOwor c3RhdGljIFNpemUgX2JyaW5fcGFyYWxsZWxfZXN0aW1hdGVfc2hhcmVkKFJlbGF0aW9uIGhl YXAsIFNuYXBzaG90IHNuYXBzaG90KTsKK3N0YXRpYyB2b2lkIF9icmluX2xlYWRlcl9wYXJ0 aWNpcGF0ZV9hc193b3JrZXIoQnJpbkJ1aWxkU3RhdGUgKmJ1aWxkc3RhdGUsCisJCQkJCQkJ CQkJCSAgIFJlbGF0aW9uIGhlYXAsIFJlbGF0aW9uIGluZGV4KTsKK3N0YXRpYyB2b2lkIF9i cmluX3BhcmFsbGVsX3NjYW5fYW5kX2J1aWxkKEJyaW5CdWlsZFN0YXRlICpidWlsZHN0YXRl LAorCQkJCQkJCQkJCSAgQnJpblNwb29sICpicmluc3Bvb2wsCisJCQkJCQkJCQkJICBCcmlu U2hhcmVkICpicmluc2hhcmVkLAorCQkJCQkJCQkJCSAgU2hhcmVkc29ydCAqc2hhcmVkc29y dCwKKwkJCQkJCQkJCQkgIFJlbGF0aW9uIGhlYXAsIFJlbGF0aW9uIGluZGV4LAorCQkJCQkJ CQkJCSAgaW50IHNvcnRtZW0sIGJvb2wgcHJvZ3Jlc3MpOworCiAvKgogICogQlJJTiBoYW5k bGVyIGZ1bmN0aW9uOiByZXR1cm4gSW5kZXhBbVJvdXRpbmUgd2l0aCBhY2Nlc3MgbWV0aG9k IHBhcmFtZXRlcnMKICAqIGFuZCBjYWxsYmFja3MuCkBAIC04MjIsNiArOTYwLDY3IEBAIGJy aW5idWlsZENhbGxiYWNrKFJlbGF0aW9uIGluZGV4LAogCQkJCQkJCSAgIHZhbHVlcywgaXNu dWxsKTsKIH0KIAorLyoKKyAqIEEgdmVyc2lvbiBvZiB0aGUgY2FsbGJhY2ssIHVzZWQgYnkg cGFyYWxsZWwgaW5kZXggYnVpbGRzLiBUaGUgbWFpbiBkaWZmZXJlbmNlCisgKiBpcyB0aGF0 IGluc3RlYWQgb2Ygd3JpdGluZyB0aGUgQlJJTiB0dXBsZXMgaW50byB0aGUgaW5kZXgsIHdl IHdyaXRlIHRoZW0gaW50bworICogYSBzaGFyZWQgdHVwbGVzdG9yZSBmaWxlLCBhbmQgbGVh dmUgdGhlIGluc2VydGlvbiB1cCB0byB0aGUgbGVhZGVyICh3aGljaCBtYXkKKyAqIHJlb3Jk ZXIgdGhlbSBhIGJpdCBldGMuKS4gVGhlIGNhbGxiYWNrIGFsc28gZG9lcyBub3QgZ2VuZXJh dGUgZW1wdHkgcmFuZ2VzLAorICogdGhvc2UgbWF5IGJlIGFkZGVkIGJ5IHRoZSBsZWFkZXIg d2hlbiBtZXJnaW5nIHJlc3VsdHMgZnJvbSB3b3JrZXJzLgorICovCitzdGF0aWMgdm9pZAor YnJpbmJ1aWxkQ2FsbGJhY2tQYXJhbGxlbChSZWxhdGlvbiBpbmRleCwKKwkJCQkJCSAgSXRl bVBvaW50ZXIgdGlkLAorCQkJCQkJICBEYXR1bSAqdmFsdWVzLAorCQkJCQkJICBib29sICpp c251bGwsCisJCQkJCQkgIGJvb2wgdHVwbGVJc0FsaXZlLAorCQkJCQkJICB2b2lkICpicnN0 YXRlKQoreworCUJyaW5CdWlsZFN0YXRlICpzdGF0ZSA9IChCcmluQnVpbGRTdGF0ZSAqKSBi cnN0YXRlOworCUJsb2NrTnVtYmVyIHRoaXNibG9jazsKKworCXRoaXNibG9jayA9IEl0ZW1Q b2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKTsKKworCS8qCisJICogSWYgd2UncmUgaW4gYSBi bG9jayB0aGF0IGJlbG9uZ3MgdG8gYSBmdXR1cmUgcmFuZ2UsIHN1bW1hcml6ZSB3aGF0CisJ ICogd2UndmUgZ290IGFuZCBzdGFydCBhZnJlc2guICBOb3RlIHRoZSBzY2FuIG1pZ2h0IGhh dmUgc2tpcHBlZCBtYW55CisJICogcGFnZXMsIGlmIHRoZXkgd2VyZSBkZXZvaWQgb2YgbGl2 ZSB0dXBsZXM7IG1ha2Ugc3VyZSB0byBpbnNlcnQgaW5kZXgKKwkgKiB0dXBsZXMgZm9yIHRo b3NlIHRvby4KKwkgKi8KKwl3aGlsZSAodGhpc2Jsb2NrID4gc3RhdGUtPmJzX2N1cnJSYW5n ZVN0YXJ0ICsgc3RhdGUtPmJzX3BhZ2VzUGVyUmFuZ2UgLSAxKQorCXsKKworCQlCUklOX2Vs b2coKERFQlVHMiwKKwkJCQkgICAiYnJpbmJ1aWxkQ2FsbGJhY2s6IGNvbXBsZXRlZCBhIHJh bmdlOiAldS0tJXUiLAorCQkJCSAgIHN0YXRlLT5ic19jdXJyUmFuZ2VTdGFydCwKKwkJCQkg ICBzdGF0ZS0+YnNfY3VyclJhbmdlU3RhcnQgKyBzdGF0ZS0+YnNfcGFnZXNQZXJSYW5nZSkp OworCisJCS8qIGNyZWF0ZSB0aGUgaW5kZXggdHVwbGUgYW5kIHdyaXRlIGl0IGludG8gdGhl IHR1cGxlc29ydCAqLworCQlmb3JtX2FuZF9zcGlsbF90dXBsZShzdGF0ZSk7CisKKwkJLyoK KwkJICogc2V0IHN0YXRlIHRvIGNvcnJlc3BvbmQgdG8gdGhlIG5leHQgcmFuZ2UKKwkJICoK KwkJICogWFhYIFRoaXMgaGFzIHRoZSBpc3N1ZSB0aGF0IGl0IHNraXBzIHJhbmdlcyBzdW1t YXJpemVkIGJ5IG90aGVyCisJCSAqIHdvcmtlcnMsIGJ1dCBpdCBhbHNvIHNraXBzIGVtcHR5 IHJhbmdlcyB0aGF0IHNob3VsZCBoYXZlIGJlZW4KKwkJICogc3VtbWFyaXplZC4gV2UnZCBu ZWVkIHRvIGVpdGhlciBtYWtlIHRoZSB3b3JrZXJzIGF3YXJlIHdoaWNoCisJCSAqIGNodW5r IHRoZXkgYXJlIGFjdHVhbGx5IHByb2Nlc3NpbmcgKHdoaWNoIGlzIGN1cnJlbnRseSBrbm93 bgorCQkgKiBvbmx5IGluIHRoZSBQYXJhbGxlbEJsb2NrVGFibGVTY2FuIGJpdCkuIE9yIHdl IGNvdWxkIGlnbm9yZSBpdAorCQkgKiBoZXJlLCBhbmQgdGhlbiBkZWNpZGUgaXQgd2hpbGUg Im1lcmdpbmciIHJlc3VsdHMgZnJvbSB3b3JrZXJzCisJCSAqIChpZiB0aGVyZSdzIG5vIGVu dHJ5IGZvciB0aGUgcmFuZ2UsIGl0IGhhZCB0byBiZSBlbXB0eSBzbyB3ZQorCQkgKiBqdXN0 IGFkZCBhbiBlbXB0eSBvbmUpLgorCQkgKi8KKwkJd2hpbGUgKHRoaXNibG9jayA+IHN0YXRl LT5ic19jdXJyUmFuZ2VTdGFydCArIHN0YXRlLT5ic19wYWdlc1BlclJhbmdlIC0gMSkKKwkJ CXN0YXRlLT5ic19jdXJyUmFuZ2VTdGFydCArPSBzdGF0ZS0+YnNfcGFnZXNQZXJSYW5nZTsK KworCQkvKiByZS1pbml0aWFsaXplIHN0YXRlIGZvciBpdCAqLworCQlicmluX21lbXR1cGxl X2luaXRpYWxpemUoc3RhdGUtPmJzX2R0dXBsZSwgc3RhdGUtPmJzX2JkZXNjKTsKKwl9CisK KwkvKiBBY2N1bXVsYXRlIHRoZSBjdXJyZW50IHR1cGxlIGludG8gdGhlIHJ1bm5pbmcgc3Rh dGUgKi8KKwkodm9pZCkgYWRkX3ZhbHVlc190b19yYW5nZShpbmRleCwgc3RhdGUtPmJzX2Jk ZXNjLCBzdGF0ZS0+YnNfZHR1cGxlLAorCQkJCQkJCSAgIHZhbHVlcywgaXNudWxsKTsKK30K KwogLyoKICAqIGJyaW5idWlsZCgpIC0tIGJ1aWxkIGEgbmV3IEJSSU4gaW5kZXguCiAgKi8K QEAgLTg4MywxOCArMTA4Miw5MyBAQCBicmluYnVpbGQoUmVsYXRpb24gaGVhcCwgUmVsYXRp b24gaW5kZXgsIEluZGV4SW5mbyAqaW5kZXhJbmZvKQogCXJldm1hcCA9IGJyaW5SZXZtYXBJ bml0aWFsaXplKGluZGV4LCAmcGFnZXNQZXJSYW5nZSwgTlVMTCk7CiAJc3RhdGUgPSBpbml0 aWFsaXplX2JyaW5fYnVpbGRzdGF0ZShpbmRleCwgcmV2bWFwLCBwYWdlc1BlclJhbmdlKTsK IAorCXN0YXRlLT5ic19zcG9vbCA9IChCcmluU3Bvb2wgKikgcGFsbG9jMChzaXplb2YoQnJp blNwb29sKSk7CisJc3RhdGUtPmJzX3Nwb29sLT5oZWFwID0gaGVhcDsKKwlzdGF0ZS0+YnNf c3Bvb2wtPmluZGV4ID0gaW5kZXg7CisKKwkvKgorCSAqIEF0dGVtcHQgdG8gbGF1bmNoIHBh cmFsbGVsIHdvcmtlciBzY2FuIHdoZW4gcmVxdWlyZWQKKwkgKgorCSAqIFhYWCBwbGFuX2Ny ZWF0ZV9pbmRleF93b3JrZXJzIG1ha2VzIHRoZSBudW1iZXIgb2Ygd29ya2VycyBkZXBlbmRl bnQgb24KKwkgKiBtYWludGVuYW5jZV93b3JrX21lbSwgcmVxdWlyaW5nIDMyTUIgZm9yIGVh Y2ggd29ya2VyLiBUaGF0IG1ha2VzIHNlbnNlCisJICogZm9yIGJ0cmVlLCBidXQgbm90IGZv ciBCUklOLCB3aGljaCBjYW4gZG8gYXdheSB3aXRoIG11Y2ggbGVzcyBtZW1vcnkuCisJICog U28gbWF5YmUgbWFrZSB0aGF0IHNvbWVob3cgbGVzcyBzdHJpY3QsIG9wdGlvbmFsbHk/CisJ ICovCisJaWYgKGluZGV4SW5mby0+aWlfUGFyYWxsZWxXb3JrZXJzID4gMCkKKwkJX2JyaW5f YmVnaW5fcGFyYWxsZWwoc3RhdGUsIGhlYXAsIGluZGV4LCBpbmRleEluZm8tPmlpX0NvbmN1 cnJlbnQsCisJCQkJCQkJIGluZGV4SW5mby0+aWlfUGFyYWxsZWxXb3JrZXJzKTsKKwogCS8q CiAJICogTm93IHNjYW4gdGhlIHJlbGF0aW9uLiAgTm8gc3luY3NjYW4gYWxsb3dlZCBoZXJl IGJlY2F1c2Ugd2Ugd2FudCB0aGUKIAkgKiBoZWFwIGJsb2NrcyBpbiBwaHlzaWNhbCBvcmRl ci4KIAkgKi8KLQlyZWx0dXBsZXMgPSB0YWJsZV9pbmRleF9idWlsZF9zY2FuKGhlYXAsIGlu ZGV4LCBpbmRleEluZm8sIGZhbHNlLCB0cnVlLAotCQkJCQkJCQkJICAgYnJpbmJ1aWxkQ2Fs bGJhY2ssICh2b2lkICopIHN0YXRlLCBOVUxMKTsKIAotCS8qIHByb2Nlc3MgdGhlIGZpbmFs IGJhdGNoICovCi0JZm9ybV9hbmRfaW5zZXJ0X3R1cGxlKHN0YXRlKTsKKwkvKgorCSAqIElm IHBhcmFsbGVsIGJ1aWxkIHJlcXVlc3RlZCBhbmQgYXQgbGVhc3Qgb25lIHdvcmtlciBwcm9j ZXNzIHdhcworCSAqIHN1Y2Nlc3NmdWxseSBsYXVuY2hlZCwgc2V0IHVwIGNvb3JkaW5hdGlv biBzdGF0ZQorCSAqLworCWlmIChzdGF0ZS0+YnNfbGVhZGVyKQorCXsKKwkJU29ydENvb3Jk aW5hdGUgY29vcmRpbmF0ZTsKKworCQljb29yZGluYXRlID0gKFNvcnRDb29yZGluYXRlKSBw YWxsb2MwKHNpemVvZihTb3J0Q29vcmRpbmF0ZURhdGEpKTsKKwkJY29vcmRpbmF0ZS0+aXNX b3JrZXIgPSBmYWxzZTsKKwkJY29vcmRpbmF0ZS0+blBhcnRpY2lwYW50cyA9CisJCQlzdGF0 ZS0+YnNfbGVhZGVyLT5ucGFydGljaXBhbnR0dXBsZXNvcnRzOworCQljb29yZGluYXRlLT5z aGFyZWRzb3J0ID0gc3RhdGUtPmJzX2xlYWRlci0+c2hhcmVkc29ydDsKKworCisJCS8qCisJ CSAqIEJlZ2luIHNlcmlhbC9sZWFkZXIgdHVwbGVzb3J0LgorCQkgKgorCQkgKiBJbiBjYXNl cyB3aGVyZSBwYXJhbGxlbGlzbSBpcyBpbnZvbHZlZCwgdGhlIGxlYWRlciByZWNlaXZlcyB0 aGUgc2FtZQorCQkgKiBzaGFyZSBvZiBtYWludGVuYW5jZV93b3JrX21lbSBhcyBhIHNlcmlh bCBzb3J0IChpdCBpcyBnZW5lcmFsbHkgdHJlYXRlZAorCQkgKiBpbiB0aGUgc2FtZSB3YXkg YXMgYSBzZXJpYWwgc29ydCBvbmNlIHdlIHJldHVybikuICBQYXJhbGxlbCB3b3JrZXIKKwkJ ICogVHVwbGVzb3J0c3RhdGVzIHdpbGwgaGF2ZSByZWNlaXZlZCBvbmx5IGEgZnJhY3Rpb24g b2YKKwkJICogbWFpbnRlbmFuY2Vfd29ya19tZW0sIHRob3VnaC4KKwkJICoKKwkJICogV2Ug cmVseSBvbiB0aGUgbGlmZXRpbWUgb2YgdGhlIExlYWRlciBUdXBsZXNvcnRzdGF0ZSBhbG1v c3Qgbm90CisJCSAqIG92ZXJsYXBwaW5nIHdpdGggYW55IHdvcmtlciBUdXBsZXNvcnRzdGF0 ZSdzIGxpZmV0aW1lLiAgVGhlcmUgbWF5IGJlCisJCSAqIHNvbWUgc21hbGwgb3ZlcmxhcCwg YnV0IHRoYXQncyBva2F5IGJlY2F1c2Ugd2UgcmVseSBvbiBsZWFkZXIKKwkJICogVHVwbGVz b3J0c3RhdGUgb25seSBhbGxvY2F0aW5nIGEgc21hbGwsIGZpeGVkIGFtb3VudCBvZiBtZW1v cnkgaGVyZS4KKwkJICogV2hlbiBpdHMgdHVwbGVzb3J0X3BlcmZvcm1zb3J0KCkgaXMgY2Fs bGVkIChieSBvdXIgY2FsbGVyKSwgYW5kCisJCSAqIHNpZ25pZmljYW50IGFtb3VudHMgb2Yg bWVtb3J5IGFyZSBsaWtlbHkgdG8gYmUgdXNlZCwgYWxsIHdvcmtlcnMgbXVzdAorCQkgKiBo YXZlIGFscmVhZHkgZnJlZWQgYWxtb3N0IGFsbCBtZW1vcnkgaGVsZCBieSB0aGVpciBUdXBs ZXNvcnRzdGF0ZXMKKwkJICogKHRoZXkgYXJlIGFib3V0IHRvIGdvIGF3YXkgY29tcGxldGVs eSwgdG9vKS4gIFRoZSBvdmVyYWxsIGVmZmVjdCBpcworCQkgKiB0aGF0IG1haW50ZW5hbmNl X3dvcmtfbWVtIGFsd2F5cyByZXByZXNlbnRzIGFuIGFic29sdXRlIGhpZ2ggd2F0ZXJtYXJr CisJCSAqIG9uIHRoZSBhbW91bnQgb2YgbWVtb3J5IHVzZWQgYnkgYSBDUkVBVEUgSU5ERVgg b3BlcmF0aW9uLCByZWdhcmRsZXNzIG9mCisJCSAqIHRoZSB1c2Ugb2YgcGFyYWxsZWxpc20g b3IgYW55IG90aGVyIGZhY3Rvci4KKwkJICovCisJCXN0YXRlLT5ic19zcG9vbF9vdXQgPSAo QnJpblNwb29sICopIHBhbGxvYzAoc2l6ZW9mKEJyaW5TcG9vbCkpOworCQlzdGF0ZS0+YnNf c3Bvb2xfb3V0LT5oZWFwID0gaGVhcDsKKwkJc3RhdGUtPmJzX3Nwb29sX291dC0+aW5kZXgg PSBpbmRleDsKKworCQlzdGF0ZS0+YnNfc3Bvb2xfb3V0LT5zb3J0c3RhdGUgPQorCQkJdHVw bGVzb3J0X2JlZ2luX2luZGV4X2JyaW4oaGVhcCwgaW5kZXgsCisJCQkJCQkJCQkgICBtYWlu dGVuYW5jZV93b3JrX21lbSwgY29vcmRpbmF0ZSwKKwkJCQkJCQkJCSAgIFRVUExFU09SVF9O T05FKTsKKworCQkvKgorCQkgKiBJbiBwYXJhbGxlbCBtb2RlLCB3YWl0IGZvciB3b3JrZXJz IHRvIGNvbXBsZXRlLCBhbmQgdGhlbiByZWFkIGFsbAorCQkgKiB0dXBsZXMgZnJvbSB0aGUg c2hhcmVkIHR1cGxlc29ydCBhbmQgaW5zZXJ0IHRoZW0gaW50byB0aGUgaW5kZXguCisJCSAq LworCQlfYnJpbl9lbmRfcGFyYWxsZWwoc3RhdGUtPmJzX2xlYWRlciwgc3RhdGUpOworCX0K KwllbHNlCS8qIG5vIHBhcmFsbGVsIGluZGV4IGJ1aWxkLCBqdXN0IGRvIHRoZSB1c3VhbCB0 aGluZyAqLworCXsKKwkJcmVsdHVwbGVzID0gdGFibGVfaW5kZXhfYnVpbGRfc2NhbihoZWFw LCBpbmRleCwgaW5kZXhJbmZvLCBmYWxzZSwgdHJ1ZSwKKwkJCQkJCQkJCQkgICBicmluYnVp bGRDYWxsYmFjaywgKHZvaWQgKikgc3RhdGUsIE5VTEwpOworCisJCS8qIHByb2Nlc3MgdGhl IGZpbmFsIGJhdGNoICovCisJCWZvcm1fYW5kX2luc2VydF90dXBsZShzdGF0ZSk7CisKKwkJ LyogdHJhY2sgdGhlIG51bWJlciBvZiByZWxhdGlvbiB0dXBsZXMgKi8KKwkJc3RhdGUtPmJz X3JlbHR1cGxlcyA9IHJlbHR1cGxlczsKKwl9CiAKIAkvKiByZWxlYXNlIHJlc291cmNlcyAq LwogCWlkeHR1cGxlcyA9IHN0YXRlLT5ic19udW10dXBsZXM7CisJcmVsdHVwbGVzID0gc3Rh dGUtPmJzX3JlbHR1cGxlczsKIAlicmluUmV2bWFwVGVybWluYXRlKHN0YXRlLT5ic19ybUFj Y2Vzcyk7CiAJdGVybWluYXRlX2JyaW5fYnVpbGRzdGF0ZShzdGF0ZSk7CiAKQEAgLTEyOTks MTIgKzE1NzMsMTYgQEAgaW5pdGlhbGl6ZV9icmluX2J1aWxkc3RhdGUoUmVsYXRpb24gaWR4 UmVsLCBCcmluUmV2bWFwICpyZXZtYXAsCiAKIAlzdGF0ZS0+YnNfaXJlbCA9IGlkeFJlbDsK IAlzdGF0ZS0+YnNfbnVtdHVwbGVzID0gMDsKKwlzdGF0ZS0+YnNfcmVsdHVwbGVzID0gMDsK IAlzdGF0ZS0+YnNfY3VycmVudEluc2VydEJ1ZiA9IEludmFsaWRCdWZmZXI7CiAJc3RhdGUt PmJzX3BhZ2VzUGVyUmFuZ2UgPSBwYWdlc1BlclJhbmdlOwogCXN0YXRlLT5ic19jdXJyUmFu Z2VTdGFydCA9IDA7CiAJc3RhdGUtPmJzX3JtQWNjZXNzID0gcmV2bWFwOwogCXN0YXRlLT5i c19iZGVzYyA9IGJyaW5fYnVpbGRfZGVzYyhpZHhSZWwpOwogCXN0YXRlLT5ic19kdHVwbGUg PSBicmluX25ld19tZW10dXBsZShzdGF0ZS0+YnNfYmRlc2MpOworCXN0YXRlLT5ic19sZWFk ZXIgPSBOVUxMOworCXN0YXRlLT5ic193b3JrZXJfaWQgPSAwOworCXN0YXRlLT5ic19zcG9v bCA9IE5VTEw7CiAKIAlyZXR1cm4gc3RhdGU7CiB9CkBAIC0xNTk3LDYgKzE4NzUsMzIgQEAg Zm9ybV9hbmRfaW5zZXJ0X3R1cGxlKEJyaW5CdWlsZFN0YXRlICpzdGF0ZSkKIAlwZnJlZSh0 dXApOwogfQogCisvKgorICogR2l2ZW4gYSBkZWZvcm1lZCB0dXBsZSBpbiB0aGUgYnVpbGQg c3RhdGUsIGNvbnZlcnQgaXQgaW50byB0aGUgb24tZGlzaworICogZm9ybWF0IGFuZCB3cml0 ZSBpdCB0byBhIChzaGFyZWQpIHR1cGxlc3RvcmUgKHRoZSBsZWFkZXIgd2lsbCBpbnNlcnQg aXQKKyAqIGludG8gdGhlIGluZGV4IGxhdGVyKS4KKyAqLworc3RhdGljIHZvaWQKK2Zvcm1f YW5kX3NwaWxsX3R1cGxlKEJyaW5CdWlsZFN0YXRlICpzdGF0ZSkKK3sKKwlCcmluVHVwbGUg ICp0dXA7CisJU2l6ZQkJc2l6ZTsKKworCS8qIGRvbid0IGluc2VydCBlbXB0eSB0dXBsZXMg aW4gcGFyYWxsZWwgYnVpbGQgKi8KKwlpZiAoc3RhdGUtPmJzX2R0dXBsZS0+YnRfZW1wdHlf cmFuZ2UpCisJCXJldHVybjsKKworCXR1cCA9IGJyaW5fZm9ybV90dXBsZShzdGF0ZS0+YnNf YmRlc2MsIHN0YXRlLT5ic19jdXJyUmFuZ2VTdGFydCwKKwkJCQkJCSAgc3RhdGUtPmJzX2R0 dXBsZSwgJnNpemUpOworCisJLyogd3JpdGUgdGhlIEJSSU4gdHVwbGUgdG8gdGhlIHR1cGxl c29ydCAqLworCXR1cGxlc29ydF9wdXRicmludHVwbGUoc3RhdGUtPmJzX3Nwb29sLT5zb3J0 c3RhdGUsIHR1cCwgc2l6ZSk7CisKKwlzdGF0ZS0+YnNfbnVtdHVwbGVzKys7CisKKwlwZnJl ZSh0dXApOworfQorCiAvKgogICogR2l2ZW4gdHdvIGRlZm9ybWVkIHR1cGxlcywgYWRqdXN0 IHRoZSBmaXJzdCBvbmUgc28gdGhhdCBpdCdzIGNvbnNpc3RlbnQKICAqIHdpdGggdGhlIHN1 bW1hcnkgdmFsdWVzIGluIGJvdGguCkBAIC0xOTE2LDMgKzIyMjAsNDcyIEBAIGNoZWNrX251 bGxfa2V5cyhCcmluVmFsdWVzICpidmFsLCBTY2FuS2V5ICpudWxsa2V5cywgaW50IG5udWxs a2V5cykKIAogCXJldHVybiB0cnVlOwogfQorCitzdGF0aWMgdm9pZAorX2JyaW5fYmVnaW5f cGFyYWxsZWwoQnJpbkJ1aWxkU3RhdGUgKmJ1aWxkc3RhdGUsIFJlbGF0aW9uIGhlYXAsIFJl bGF0aW9uIGluZGV4LAorCQkJCQkgYm9vbCBpc2NvbmN1cnJlbnQsIGludCByZXF1ZXN0KQor eworCVBhcmFsbGVsQ29udGV4dCAqcGN4dDsKKwlpbnQJCQlzY2FudHVwbGVzb3J0c3RhdGVz OworCVNuYXBzaG90CXNuYXBzaG90OworCVNpemUJCWVzdGJyaW5zaGFyZWQ7CisJU2l6ZQkJ ZXN0c29ydDsKKwlCcmluU2hhcmVkICAgKmJyaW5zaGFyZWQ7CisJU2hhcmVkc29ydCAgICpz aGFyZWRzb3J0OworCUJyaW5MZWFkZXIgICAqYnJpbmxlYWRlciA9IChCcmluTGVhZGVyICop IHBhbGxvYzAoc2l6ZW9mKEJyaW5MZWFkZXIpKTsKKwlXYWxVc2FnZSAgICp3YWx1c2FnZTsK KwlCdWZmZXJVc2FnZSAqYnVmZmVydXNhZ2U7CisJYm9vbAkJbGVhZGVycGFydGljaXBhdGVz ID0gdHJ1ZTsKKwlpbnQJCQlxdWVyeWxlbjsKKworI2lmZGVmIERJU0FCTEVfTEVBREVSX1BB UlRJQ0lQQVRJT04KKwlsZWFkZXJwYXJ0aWNpcGF0ZXMgPSBmYWxzZTsKKyNlbmRpZgorCisJ LyoKKwkgKiBFbnRlciBwYXJhbGxlbCBtb2RlLCBhbmQgY3JlYXRlIGNvbnRleHQgZm9yIHBh cmFsbGVsIGJ1aWxkIG9mIGJyaW4KKwkgKiBpbmRleAorCSAqLworCUVudGVyUGFyYWxsZWxN b2RlKCk7CisJQXNzZXJ0KHJlcXVlc3QgPiAwKTsKKwlwY3h0ID0gQ3JlYXRlUGFyYWxsZWxD b250ZXh0KCJwb3N0Z3JlcyIsICJfYnJpbl9wYXJhbGxlbF9idWlsZF9tYWluIiwKKwkJCQkJ CQkJIHJlcXVlc3QpOworCisJc2NhbnR1cGxlc29ydHN0YXRlcyA9IGxlYWRlcnBhcnRpY2lw YXRlcyA/IHJlcXVlc3QgKyAxIDogcmVxdWVzdDsKKworCS8qCisJICogUHJlcGFyZSBmb3Ig c2NhbiBvZiB0aGUgYmFzZSByZWxhdGlvbi4gIEluIGEgbm9ybWFsIGluZGV4IGJ1aWxkLCB3 ZSB1c2UKKwkgKiBTbmFwc2hvdEFueSBiZWNhdXNlIHdlIG11c3QgcmV0cmlldmUgYWxsIHR1 cGxlcyBhbmQgZG8gb3VyIG93biB0aW1lCisJICogcXVhbCBjaGVja3MgKGJlY2F1c2Ugd2Ug aGF2ZSB0byBpbmRleCBSRUNFTlRMWV9ERUFEIHR1cGxlcykuICBJbiBhCisJICogY29uY3Vy cmVudCBidWlsZCwgd2UgdGFrZSBhIHJlZ3VsYXIgTVZDQyBzbmFwc2hvdCBhbmQgaW5kZXgg d2hhdGV2ZXIncworCSAqIGxpdmUgYWNjb3JkaW5nIHRvIHRoYXQuCisJICovCisJaWYgKCFp c2NvbmN1cnJlbnQpCisJCXNuYXBzaG90ID0gU25hcHNob3RBbnk7CisJZWxzZQorCQlzbmFw c2hvdCA9IFJlZ2lzdGVyU25hcHNob3QoR2V0VHJhbnNhY3Rpb25TbmFwc2hvdCgpKTsKKwor CS8qCisJICogRXN0aW1hdGUgc2l6ZSBmb3Igb3VyIG93biBQQVJBTExFTF9LRVlfQlJJTl9T SEFSRUQgd29ya3NwYWNlLgorCSAqLworCWVzdGJyaW5zaGFyZWQgPSBfYnJpbl9wYXJhbGxl bF9lc3RpbWF0ZV9zaGFyZWQoaGVhcCwgc25hcHNob3QpOworCXNobV90b2NfZXN0aW1hdGVf Y2h1bmsoJnBjeHQtPmVzdGltYXRvciwgZXN0YnJpbnNoYXJlZCk7CisJZXN0c29ydCA9IHR1 cGxlc29ydF9lc3RpbWF0ZV9zaGFyZWQoc2NhbnR1cGxlc29ydHN0YXRlcyk7CisJc2htX3Rv Y19lc3RpbWF0ZV9jaHVuaygmcGN4dC0+ZXN0aW1hdG9yLCBlc3Rzb3J0KTsKKworCXNobV90 b2NfZXN0aW1hdGVfa2V5cygmcGN4dC0+ZXN0aW1hdG9yLCAyKTsKKworCS8qCisJICogRXN0 aW1hdGUgc3BhY2UgZm9yIFdhbFVzYWdlIGFuZCBCdWZmZXJVc2FnZSAtLSBQQVJBTExFTF9L RVlfV0FMX1VTQUdFCisJICogYW5kIFBBUkFMTEVMX0tFWV9CVUZGRVJfVVNBR0UuCisJICoK KwkgKiBJZiB0aGVyZSBhcmUgbm8gZXh0ZW5zaW9ucyBsb2FkZWQgdGhhdCBjYXJlLCB3ZSBj b3VsZCBza2lwIHRoaXMuICBXZQorCSAqIGhhdmUgbm8gd2F5IG9mIGtub3dpbmcgd2hldGhl ciBhbnlvbmUncyBsb29raW5nIGF0IHBnV2FsVXNhZ2Ugb3IKKwkgKiBwZ0J1ZmZlclVzYWdl LCBzbyBkbyBpdCB1bmNvbmRpdGlvbmFsbHkuCisJICovCisJc2htX3RvY19lc3RpbWF0ZV9j aHVuaygmcGN4dC0+ZXN0aW1hdG9yLAorCQkJCQkJICAgbXVsX3NpemUoc2l6ZW9mKFdhbFVz YWdlKSwgcGN4dC0+bndvcmtlcnMpKTsKKwlzaG1fdG9jX2VzdGltYXRlX2tleXMoJnBjeHQt PmVzdGltYXRvciwgMSk7CisJc2htX3RvY19lc3RpbWF0ZV9jaHVuaygmcGN4dC0+ZXN0aW1h dG9yLAorCQkJCQkJICAgbXVsX3NpemUoc2l6ZW9mKEJ1ZmZlclVzYWdlKSwgcGN4dC0+bndv cmtlcnMpKTsKKwlzaG1fdG9jX2VzdGltYXRlX2tleXMoJnBjeHQtPmVzdGltYXRvciwgMSk7 CisKKwkvKiBGaW5hbGx5LCBlc3RpbWF0ZSBQQVJBTExFTF9LRVlfUVVFUllfVEVYVCBzcGFj ZSAqLworCWlmIChkZWJ1Z19xdWVyeV9zdHJpbmcpCisJeworCQlxdWVyeWxlbiA9IHN0cmxl bihkZWJ1Z19xdWVyeV9zdHJpbmcpOworCQlzaG1fdG9jX2VzdGltYXRlX2NodW5rKCZwY3h0 LT5lc3RpbWF0b3IsIHF1ZXJ5bGVuICsgMSk7CisJCXNobV90b2NfZXN0aW1hdGVfa2V5cygm cGN4dC0+ZXN0aW1hdG9yLCAxKTsKKwl9CisJZWxzZQorCQlxdWVyeWxlbiA9IDA7CQkJLyog a2VlcCBjb21waWxlciBxdWlldCAqLworCisJLyogRXZlcnlvbmUncyBoYWQgYSBjaGFuY2Ug dG8gYXNrIGZvciBzcGFjZSwgc28gbm93IGNyZWF0ZSB0aGUgRFNNICovCisJSW5pdGlhbGl6 ZVBhcmFsbGVsRFNNKHBjeHQpOworCisJLyogSWYgbm8gRFNNIHNlZ21lbnQgd2FzIGF2YWls YWJsZSwgYmFjayBvdXQgKGRvIHNlcmlhbCBidWlsZCkgKi8KKwlpZiAocGN4dC0+c2VnID09 IE5VTEwpCisJeworCQlpZiAoSXNNVkNDU25hcHNob3Qoc25hcHNob3QpKQorCQkJVW5yZWdp c3RlclNuYXBzaG90KHNuYXBzaG90KTsKKwkJRGVzdHJveVBhcmFsbGVsQ29udGV4dChwY3h0 KTsKKwkJRXhpdFBhcmFsbGVsTW9kZSgpOworCQlyZXR1cm47CisJfQorCisJLyogU3RvcmUg c2hhcmVkIGJ1aWxkIHN0YXRlLCBmb3Igd2hpY2ggd2UgcmVzZXJ2ZWQgc3BhY2UgKi8KKwli cmluc2hhcmVkID0gKEJyaW5TaGFyZWQgKikgc2htX3RvY19hbGxvY2F0ZShwY3h0LT50b2Ms IGVzdGJyaW5zaGFyZWQpOworCS8qIEluaXRpYWxpemUgaW1tdXRhYmxlIHN0YXRlICovCisJ YnJpbnNoYXJlZC0+aGVhcHJlbGlkID0gUmVsYXRpb25HZXRSZWxpZChoZWFwKTsKKwlicmlu c2hhcmVkLT5pbmRleHJlbGlkID0gUmVsYXRpb25HZXRSZWxpZChpbmRleCk7CisJYnJpbnNo YXJlZC0+aXNjb25jdXJyZW50ID0gaXNjb25jdXJyZW50OworCWJyaW5zaGFyZWQtPnNjYW50 dXBsZXNvcnRzdGF0ZXMgPSBzY2FudHVwbGVzb3J0c3RhdGVzOworCWJyaW5zaGFyZWQtPnBh Z2VzUGVyUmFuZ2UgPSBidWlsZHN0YXRlLT5ic19wYWdlc1BlclJhbmdlOworCUNvbmRpdGlv blZhcmlhYmxlSW5pdCgmYnJpbnNoYXJlZC0+d29ya2Vyc2RvbmVjdik7CisJU3BpbkxvY2tJ bml0KCZicmluc2hhcmVkLT5tdXRleCk7CisKKwkvKiBJbml0aWFsaXplIG11dGFibGUgc3Rh dGUgKi8KKwlicmluc2hhcmVkLT5ucGFydGljaXBhbnRzZG9uZSA9IDA7CisJYnJpbnNoYXJl ZC0+cmVsdHVwbGVzID0gMC4wOworCWJyaW5zaGFyZWQtPmluZHR1cGxlcyA9IDAuMDsKKwor CXRhYmxlX3BhcmFsbGVsc2Nhbl9pbml0aWFsaXplKGhlYXAsCisJCQkJCQkJCSAgUGFyYWxs ZWxUYWJsZVNjYW5Gcm9tQnJpblNoYXJlZChicmluc2hhcmVkKSwKKwkJCQkJCQkJICBzbmFw c2hvdCwgYnJpbnNoYXJlZC0+cGFnZXNQZXJSYW5nZSk7CisKKwkvKgorCSAqIFN0b3JlIHNo YXJlZCB0dXBsZXNvcnQtcHJpdmF0ZSBzdGF0ZSwgZm9yIHdoaWNoIHdlIHJlc2VydmVkIHNw YWNlLgorCSAqIFRoZW4sIGluaXRpYWxpemUgb3BhcXVlIHN0YXRlIHVzaW5nIHR1cGxlc29y dCByb3V0aW5lLgorCSAqLworCXNoYXJlZHNvcnQgPSAoU2hhcmVkc29ydCAqKSBzaG1fdG9j X2FsbG9jYXRlKHBjeHQtPnRvYywgZXN0c29ydCk7CisJdHVwbGVzb3J0X2luaXRpYWxpemVf c2hhcmVkKHNoYXJlZHNvcnQsIHNjYW50dXBsZXNvcnRzdGF0ZXMsCisJCQkJCQkJCXBjeHQt PnNlZyk7CisKKwkvKgorCSAqIFN0b3JlIHNoYXJlZCB0dXBsZXNvcnQtcHJpdmF0ZSBzdGF0 ZSwgZm9yIHdoaWNoIHdlIHJlc2VydmVkIHNwYWNlLgorCSAqIFRoZW4sIGluaXRpYWxpemUg b3BhcXVlIHN0YXRlIHVzaW5nIHR1cGxlc29ydCByb3V0aW5lLgorCSAqLworCXNobV90b2Nf aW5zZXJ0KHBjeHQtPnRvYywgUEFSQUxMRUxfS0VZX0JSSU5fU0hBUkVELCBicmluc2hhcmVk KTsKKwlzaG1fdG9jX2luc2VydChwY3h0LT50b2MsIFBBUkFMTEVMX0tFWV9UVVBMRVNPUlQs IHNoYXJlZHNvcnQpOworCisJLyogU3RvcmUgcXVlcnkgc3RyaW5nIGZvciB3b3JrZXJzICov CisJaWYgKGRlYnVnX3F1ZXJ5X3N0cmluZykKKwl7CisJCWNoYXIJICAgKnNoYXJlZHF1ZXJ5 OworCisJCXNoYXJlZHF1ZXJ5ID0gKGNoYXIgKikgc2htX3RvY19hbGxvY2F0ZShwY3h0LT50 b2MsIHF1ZXJ5bGVuICsgMSk7CisJCW1lbWNweShzaGFyZWRxdWVyeSwgZGVidWdfcXVlcnlf c3RyaW5nLCBxdWVyeWxlbiArIDEpOworCQlzaG1fdG9jX2luc2VydChwY3h0LT50b2MsIFBB UkFMTEVMX0tFWV9RVUVSWV9URVhULCBzaGFyZWRxdWVyeSk7CisJfQorCisJLyoKKwkgKiBB bGxvY2F0ZSBzcGFjZSBmb3IgZWFjaCB3b3JrZXIncyBXYWxVc2FnZSBhbmQgQnVmZmVyVXNh Z2U7IG5vIG5lZWQgdG8KKwkgKiBpbml0aWFsaXplLgorCSAqLworCXdhbHVzYWdlID0gc2ht X3RvY19hbGxvY2F0ZShwY3h0LT50b2MsCisJCQkJCQkJCW11bF9zaXplKHNpemVvZihXYWxV c2FnZSksIHBjeHQtPm53b3JrZXJzKSk7CisJc2htX3RvY19pbnNlcnQocGN4dC0+dG9jLCBQ QVJBTExFTF9LRVlfV0FMX1VTQUdFLCB3YWx1c2FnZSk7CisJYnVmZmVydXNhZ2UgPSBzaG1f dG9jX2FsbG9jYXRlKHBjeHQtPnRvYywKKwkJCQkJCQkJICAgbXVsX3NpemUoc2l6ZW9mKEJ1 ZmZlclVzYWdlKSwgcGN4dC0+bndvcmtlcnMpKTsKKwlzaG1fdG9jX2luc2VydChwY3h0LT50 b2MsIFBBUkFMTEVMX0tFWV9CVUZGRVJfVVNBR0UsIGJ1ZmZlcnVzYWdlKTsKKworCS8qIExh dW5jaCB3b3JrZXJzLCBzYXZpbmcgc3RhdHVzIGZvciBsZWFkZXIvY2FsbGVyICovCisJTGF1 bmNoUGFyYWxsZWxXb3JrZXJzKHBjeHQpOworCWJyaW5sZWFkZXItPnBjeHQgPSBwY3h0Owor CWJyaW5sZWFkZXItPm5wYXJ0aWNpcGFudHR1cGxlc29ydHMgPSBwY3h0LT5ud29ya2Vyc19s YXVuY2hlZDsKKwlpZiAobGVhZGVycGFydGljaXBhdGVzKQorCQlicmlubGVhZGVyLT5ucGFy dGljaXBhbnR0dXBsZXNvcnRzKys7CisJYnJpbmxlYWRlci0+YnJpbnNoYXJlZCA9IGJyaW5z aGFyZWQ7CisJYnJpbmxlYWRlci0+c2hhcmVkc29ydCA9IHNoYXJlZHNvcnQ7CisJYnJpbmxl YWRlci0+c25hcHNob3QgPSBzbmFwc2hvdDsKKwlicmlubGVhZGVyLT53YWx1c2FnZSA9IHdh bHVzYWdlOworCWJyaW5sZWFkZXItPmJ1ZmZlcnVzYWdlID0gYnVmZmVydXNhZ2U7CisKKwkv KiBJZiBubyB3b3JrZXJzIHdlcmUgc3VjY2Vzc2Z1bGx5IGxhdW5jaGVkLCBiYWNrIG91dCAo ZG8gc2VyaWFsIGJ1aWxkKSAqLworCWlmIChwY3h0LT5ud29ya2Vyc19sYXVuY2hlZCA9PSAw KQorCXsKKwkJX2JyaW5fZW5kX3BhcmFsbGVsKGJyaW5sZWFkZXIsIE5VTEwpOworCQlyZXR1 cm47CisJfQorCisJLyogU2F2ZSBsZWFkZXIgc3RhdGUgbm93IHRoYXQgaXQncyBjbGVhciBi dWlsZCB3aWxsIGJlIHBhcmFsbGVsICovCisJYnVpbGRzdGF0ZS0+YnNfbGVhZGVyID0gYnJp bmxlYWRlcjsKKworCS8qIEpvaW4gaGVhcCBzY2FuIG91cnNlbHZlcyAqLworCWlmIChsZWFk ZXJwYXJ0aWNpcGF0ZXMpCisJCV9icmluX2xlYWRlcl9wYXJ0aWNpcGF0ZV9hc193b3JrZXIo YnVpbGRzdGF0ZSwgaGVhcCwgaW5kZXgpOworCisJLyoKKwkgKiBDYWxsZXIgbmVlZHMgdG8g d2FpdCBmb3IgYWxsIGxhdW5jaGVkIHdvcmtlcnMgd2hlbiB3ZSByZXR1cm4uICBNYWtlCisJ ICogc3VyZSB0aGF0IHRoZSBmYWlsdXJlLXRvLXN0YXJ0IGNhc2Ugd2lsbCBub3QgaGFuZyBm b3JldmVyLgorCSAqLworCVdhaXRGb3JQYXJhbGxlbFdvcmtlcnNUb0F0dGFjaChwY3h0KTsK K30KKworLyoKKyAqIFNodXQgZG93biB3b3JrZXJzLCBkZXN0cm95IHBhcmFsbGVsIGNvbnRl eHQsIGFuZCBlbmQgcGFyYWxsZWwgbW9kZS4KKyAqLworc3RhdGljIHZvaWQKK19icmluX2Vu ZF9wYXJhbGxlbChCcmluTGVhZGVyICpicmlubGVhZGVyLCBCcmluQnVpbGRTdGF0ZSAqc3Rh dGUpCit7CisJaW50CQkJaTsKKwlCcmluVHVwbGUgICpidHVwOworCVNpemUJCXR1cGxlbjsK KwlCcmluU2hhcmVkICpicmluc2hhcmVkID0gYnJpbmxlYWRlci0+YnJpbnNoYXJlZDsKKwlC bG9ja051bWJlcglwcmV2Ymxrbm8gPSBJbnZhbGlkQmxvY2tOdW1iZXI7CisJQnJpblR1cGxl ICAqZW1wdHlUdXBsZSA9IE5VTEw7CisJU2l6ZQkJZW1wdHlTaXplOworCisJLyogU2h1dGRv d24gd29ya2VyIHByb2Nlc3NlcyAqLworCVdhaXRGb3JQYXJhbGxlbFdvcmtlcnNUb0Zpbmlz aChicmlubGVhZGVyLT5wY3h0KTsKKworCWlmICghc3RhdGUpCisJCXJldHVybjsKKworCS8q IGNvcHkgdGhlIGRhdGEgaW50byBsZWFkZXIgc3RhdGUgKHdlIGhhdmUgdG8gd2FpdCBmb3Ig dGhlIHdvcmtlcnMgKSAqLworCXN0YXRlLT5ic19yZWx0dXBsZXMgPSBicmluc2hhcmVkLT5y ZWx0dXBsZXM7CisJc3RhdGUtPmJzX251bXR1cGxlcyA9IGJyaW5zaGFyZWQtPmluZHR1cGxl czsKKworCXR1cGxlc29ydF9wZXJmb3Jtc29ydChzdGF0ZS0+YnNfc3Bvb2xfb3V0LT5zb3J0 c3RhdGUpOworCisJLyoKKwkgKiBSZWFkIHRoZSBCUklOIHR1cGxlcyBmcm9tIHRoZSBzaGFy ZWQgdHVwbGVzb3J0LCBzb3J0ZWQgYnkgYmxvY2sgbnVtYmVyLgorCSAqIFRoYXQgcHJvYmFi bHkgZ2l2ZXMgdXMgYW4gaW5kZXggdGhhdCBpcyBjaGVhcGVyIHRvIHNjYW4sIHRoYW5rcyB0 byBtb3N0bHkKKwkgKiBnZXR0aW5nIGRhdGEgZnJvbSB0aGUgc2FtZSBpbmRleCBwYWdlIGFz IGJlZm9yZS4KKwkgKgorCSAqIEZJWE1FIFRoaXMgcHJvYmFibHkgbmVlZHMgc29tZSBtZW1v cnkgbWFuYWdlbWVudCBmaXhlcyAtIHdlJ3JlIHJlYWRpbmcKKwkgKiB0dXBsZXMgZnJvbSB0 aGUgdHVwbGVzb3J0LCB3ZSdyZSBhbGxvY2F0aW5nIGFuIGVtdHkgdHVwbGUsIGFuZCBzbyBv bi4KKwkgKiBQcm9iYWJseSBiZXR0ZXIgdG8gcmVsZWFzZSB0aGlzIG1lbW9yeS4KKwkgKgor CSAqIFhYWCBXZSBjYW4ndCBxdWl0ZSBmcmVlIHRoZSBCcmluVHVwbGUsIHRob3VnaCwgYmVj YXVzZSB0aGF0J3MgYSBmaWVsZAorCSAqIGluIEJyaW5Tb3J0VHVwbGUuCisJICovCisJd2hp bGUgKChidHVwID0gdHVwbGVzb3J0X2dldGJyaW50dXBsZShzdGF0ZS0+YnNfc3Bvb2xfb3V0 LT5zb3J0c3RhdGUsICZ0dXBsZW4sIHRydWUpKSAhPSBOVUxMKQorCXsKKwkJLyoKKwkJICog V2Ugc2hvdWxkIG5vdCBnZXQgdHdvIHN1bW1hcmllcyBmb3IgdGhlIHNhbWUgcmFuZ2UuIFRo ZSB3b3JrZXJzCisJCSAqIGFyZSBwcm9kdWNpbmcgcmFuZ2VzIGZvciBub24tb3ZlcmxhcHBp bmcgc2VjdGlvbnMgb2YgdGhlIHRhYmxlLgorCQkgKi8KKwkJQXNzZXJ0KGJ0dXAtPmJ0X2Js a25vICE9IHByZXZibGtubyk7CisKKwkJLyogUmFuZ2VzIHNob3VsZCBiZSBtdWx0aXBsZXMg b2YgcGFnZXNfcGVyX3JhbmdlIGZvciB0aGUgaW5kZXguICovCisJCUFzc2VydChidHVwLT5i dF9ibGtubyAlIGJyaW5zaGFyZWQtPnBhZ2VzUGVyUmFuZ2UgPT0gMCk7CisKKwkJLyogRmls bCBlbXB0eSByYW5nZXMgZm9yIGFsbCByYW5nZXMgbWlzc2luZyBpbiB0aGUgdHVwbGVzb3J0 LiAqLworCQlwcmV2Ymxrbm8gPSAocHJldmJsa25vID09IEludmFsaWRCbG9ja051bWJlcikg PyAwIDogcHJldmJsa25vOworCQl3aGlsZSAocHJldmJsa25vICsgc3RhdGUtPmJzX3BhZ2Vz UGVyUmFuZ2UgPCBidHVwLT5idF9ibGtubykKKwkJeworCQkJLyogdGhlIG1pc3NpbmcgcmFu Z2UgKi8KKwkJCXByZXZibGtubyArPSBzdGF0ZS0+YnNfcGFnZXNQZXJSYW5nZTsKKworCQkJ LyogRGlkIHdlIGFscmVhZHkgYnVpbGQgdGhlIGVtcHR5IHJhbmdlPyBJZiBub3QsIGRvIGl0 IG5vdy4gKi8KKwkJCWlmIChlbXB0eVR1cGxlID09IE5VTEwpCisJCQl7CisJCQkJQnJpbk1l bVR1cGxlICpkdHVwbGUgPSBicmluX25ld19tZW10dXBsZShzdGF0ZS0+YnNfYmRlc2MpOwor CisJCQkJZW1wdHlUdXBsZSA9IGJyaW5fZm9ybV90dXBsZShzdGF0ZS0+YnNfYmRlc2MsIHBy ZXZibGtubywgZHR1cGxlLCAmZW1wdHlTaXplKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJ CQkvKiB3ZSBhbHJlYWR5IGhhdmUgYW0gImVtcHR5IHJhbmdlIiB0dXBsZSwganVzdCBzZXQg dGhlIGJsb2NrICovCisJCQkJZW1wdHlUdXBsZS0+YnRfYmxrbm8gPSBwcmV2Ymxrbm87CisJ CQl9CisKKwkJCWJyaW5fZG9pbnNlcnQoc3RhdGUtPmJzX2lyZWwsIHN0YXRlLT5ic19wYWdl c1BlclJhbmdlLCBzdGF0ZS0+YnNfcm1BY2Nlc3MsCisJCQkJCQkgICZzdGF0ZS0+YnNfY3Vy cmVudEluc2VydEJ1ZiwKKwkJCQkJCSAgZW1wdHlUdXBsZS0+YnRfYmxrbm8sIGVtcHR5VHVw bGUsIGVtcHR5U2l6ZSk7CisJCX0KKworCQlicmluX2RvaW5zZXJ0KHN0YXRlLT5ic19pcmVs LCBzdGF0ZS0+YnNfcGFnZXNQZXJSYW5nZSwgc3RhdGUtPmJzX3JtQWNjZXNzLAorCQkJCQkg ICZzdGF0ZS0+YnNfY3VycmVudEluc2VydEJ1ZiwgYnR1cC0+YnRfYmxrbm8sIGJ0dXAsIHR1 cGxlbik7CisKKwkJcHJldmJsa25vID0gYnR1cC0+YnRfYmxrbm87CisJfQorCisJdHVwbGVz b3J0X2VuZChzdGF0ZS0+YnNfc3Bvb2xfb3V0LT5zb3J0c3RhdGUpOworCisJLyoKKwkgKiBO ZXh0LCBhY2N1bXVsYXRlIFdBTCB1c2FnZS4gIChUaGlzIG11c3Qgd2FpdCBmb3IgdGhlIHdv cmtlcnMgdG8gZmluaXNoLAorCSAqIG9yIHdlIG1pZ2h0IGdldCBpbmNvbXBsZXRlIGRhdGEu KQorCSAqLworCWZvciAoaSA9IDA7IGkgPCBicmlubGVhZGVyLT5wY3h0LT5ud29ya2Vyc19s YXVuY2hlZDsgaSsrKQorCQlJbnN0ckFjY3VtUGFyYWxsZWxRdWVyeSgmYnJpbmxlYWRlci0+ YnVmZmVydXNhZ2VbaV0sICZicmlubGVhZGVyLT53YWx1c2FnZVtpXSk7CisKKwkvKiBGcmVl IGxhc3QgcmVmZXJlbmNlIHRvIE1WQ0Mgc25hcHNob3QsIGlmIG9uZSB3YXMgdXNlZCAqLwor CWlmIChJc01WQ0NTbmFwc2hvdChicmlubGVhZGVyLT5zbmFwc2hvdCkpCisJCVVucmVnaXN0 ZXJTbmFwc2hvdChicmlubGVhZGVyLT5zbmFwc2hvdCk7CisJRGVzdHJveVBhcmFsbGVsQ29u dGV4dChicmlubGVhZGVyLT5wY3h0KTsKKwlFeGl0UGFyYWxsZWxNb2RlKCk7Cit9CisKKy8q CisgKiBSZXR1cm5zIHNpemUgb2Ygc2hhcmVkIG1lbW9yeSByZXF1aXJlZCB0byBzdG9yZSBz dGF0ZSBmb3IgYSBwYXJhbGxlbAorICogYnJpbiBpbmRleCBidWlsZCBiYXNlZCBvbiB0aGUg c25hcHNob3QgaXRzIHBhcmFsbGVsIHNjYW4gd2lsbCB1c2UuCisgKi8KK3N0YXRpYyBTaXpl CitfYnJpbl9wYXJhbGxlbF9lc3RpbWF0ZV9zaGFyZWQoUmVsYXRpb24gaGVhcCwgU25hcHNo b3Qgc25hcHNob3QpCit7CisJLyogYy5mLiBzaG1fdG9jX2FsbG9jYXRlIGFzIHRvIHdoeSBC VUZGRVJBTElHTiBpcyB1c2VkICovCisJcmV0dXJuIGFkZF9zaXplKEJVRkZFUkFMSUdOKHNp emVvZihCcmluU2hhcmVkKSksCisJCQkJCXRhYmxlX3BhcmFsbGVsc2Nhbl9lc3RpbWF0ZSho ZWFwLCBzbmFwc2hvdCkpOworfQorCisvKgorICogV2l0aGluIGxlYWRlciwgcGFydGljaXBh dGUgYXMgYSBwYXJhbGxlbCB3b3JrZXIuCisgKi8KK3N0YXRpYyB2b2lkCitfYnJpbl9sZWFk ZXJfcGFydGljaXBhdGVfYXNfd29ya2VyKEJyaW5CdWlsZFN0YXRlICpidWlsZHN0YXRlLCBS ZWxhdGlvbiBoZWFwLCBSZWxhdGlvbiBpbmRleCkKK3sKKwlCcmluTGVhZGVyICpicmlubGVh ZGVyID0gYnVpbGRzdGF0ZS0+YnNfbGVhZGVyOworCWludAkJCXNvcnRtZW07CisKKwkvKiBB bGxvY2F0ZSBtZW1vcnkgYW5kIGluaXRpYWxpemUgcHJpdmF0ZSBzcG9vbCAqLworCWJ1aWxk c3RhdGUtPmJzX3Nwb29sID0gKEJyaW5TcG9vbCAqKSBwYWxsb2MwKHNpemVvZihCcmluU3Bv b2wpKTsKKwlidWlsZHN0YXRlLT5ic19zcG9vbC0+aGVhcCA9IGJ1aWxkc3RhdGUtPmJzX3Nw b29sLT5oZWFwOworCWJ1aWxkc3RhdGUtPmJzX3Nwb29sLT5pbmRleCA9IGJ1aWxkc3RhdGUt PmJzX3Nwb29sLT5pbmRleDsKKworCS8qCisJICogTWlnaHQgYXMgd2VsbCB1c2UgcmVsaWFi bGUgZmlndXJlIHdoZW4gZG9saW5nIG91dCBtYWludGVuYW5jZV93b3JrX21lbQorCSAqICh3 aGVuIHJlcXVlc3RlZCBudW1iZXIgb2Ygd29ya2VycyB3ZXJlIG5vdCBsYXVuY2hlZCwgdGhp cyB3aWxsIGJlCisJICogc29tZXdoYXQgaGlnaGVyIHRoYW4gaXQgaXMgZm9yIG90aGVyIHdv cmtlcnMpLgorCSAqLworCXNvcnRtZW0gPSBtYWludGVuYW5jZV93b3JrX21lbSAvIGJyaW5s ZWFkZXItPm5wYXJ0aWNpcGFudHR1cGxlc29ydHM7CisKKwkvKiBQZXJmb3JtIHdvcmsgY29t bW9uIHRvIGFsbCBwYXJ0aWNpcGFudHMgKi8KKwlfYnJpbl9wYXJhbGxlbF9zY2FuX2FuZF9i dWlsZChidWlsZHN0YXRlLCBidWlsZHN0YXRlLT5ic19zcG9vbCwgYnJpbmxlYWRlci0+YnJp bnNoYXJlZCwKKwkJCQkJCQkJICBicmlubGVhZGVyLT5zaGFyZWRzb3J0LCBoZWFwLCBpbmRl eCwgc29ydG1lbSwgdHJ1ZSk7Cit9CisKKy8qCisgKiBQZXJmb3JtIGEgd29ya2VyJ3MgcG9y dGlvbiBvZiBhIHBhcmFsbGVsIHNvcnQuCisgKgorICogVGhpcyBnZW5lcmF0ZXMgYSB0dXBs ZXNvcnQgZm9yIHBhc3NlZCBidHNwb29sLCBhbmQgYSBzZWNvbmQgdHVwbGVzb3J0CisgKiBz dGF0ZSBpZiBhIHNlY29uZCBidHNwb29sIGlzIG5lZWQgKGkuZS4gZm9yIHVuaXF1ZSBpbmRl eCBidWlsZHMpLiAgQWxsCisgKiBvdGhlciBzcG9vbCBmaWVsZHMgc2hvdWxkIGFscmVhZHkg YmUgc2V0IHdoZW4gdGhpcyBpcyBjYWxsZWQuCisgKgorICogc29ydG1lbSBpcyB0aGUgYW1v dW50IG9mIHdvcmtpbmcgbWVtb3J5IHRvIHVzZSB3aXRoaW4gZWFjaCB3b3JrZXIsCisgKiBl eHByZXNzZWQgaW4gS0JzLgorICoKKyAqIFdoZW4gdGhpcyByZXR1cm5zLCB3b3JrZXJzIGFy ZSBkb25lLCBhbmQgbmVlZCBvbmx5IHJlbGVhc2UgcmVzb3VyY2VzLgorICovCitzdGF0aWMg dm9pZAorX2JyaW5fcGFyYWxsZWxfc2Nhbl9hbmRfYnVpbGQoQnJpbkJ1aWxkU3RhdGUgKnN0 YXRlLCBCcmluU3Bvb2wgKmJyaW5zcG9vbCwKKwkJCQkJCQkgIEJyaW5TaGFyZWQgKmJyaW5z aGFyZWQsIFNoYXJlZHNvcnQgKnNoYXJlZHNvcnQsCisJCQkJCQkJICBSZWxhdGlvbiBoZWFw LCBSZWxhdGlvbiBpbmRleCwgaW50IHNvcnRtZW0sCisJCQkJCQkJICBib29sIHByb2dyZXNz KQoreworCVNvcnRDb29yZGluYXRlIGNvb3JkaW5hdGU7CisJVGFibGVTY2FuRGVzYwlzY2Fu OworCWRvdWJsZQkJcmVsdHVwbGVzOworCUluZGV4SW5mbyAgKmluZGV4SW5mbzsKKworCS8q IEluaXRpYWxpemUgbG9jYWwgdHVwbGVzb3J0IGNvb3JkaW5hdGlvbiBzdGF0ZSAqLworCWNv b3JkaW5hdGUgPSBwYWxsb2MwKHNpemVvZihTb3J0Q29vcmRpbmF0ZURhdGEpKTsKKwljb29y ZGluYXRlLT5pc1dvcmtlciA9IHRydWU7CisJY29vcmRpbmF0ZS0+blBhcnRpY2lwYW50cyA9 IC0xOworCWNvb3JkaW5hdGUtPnNoYXJlZHNvcnQgPSBzaGFyZWRzb3J0OworCisJLyogQmVn aW4gInBhcnRpYWwiIHR1cGxlc29ydCAqLworCWJyaW5zcG9vbC0+c29ydHN0YXRlID0gdHVw bGVzb3J0X2JlZ2luX2luZGV4X2JyaW4oYnJpbnNwb29sLT5oZWFwLAorCQkJCQkJCQkJCQkJ CSAgYnJpbnNwb29sLT5pbmRleCwKKwkJCQkJCQkJCQkJCQkgIHNvcnRtZW0sIGNvb3JkaW5h dGUsCisJCQkJCQkJCQkJCQkJICBUVVBMRVNPUlRfTk9ORSk7CisKKwkvKiBKb2luIHBhcmFs bGVsIHNjYW4gKi8KKwlpbmRleEluZm8gPSBCdWlsZEluZGV4SW5mbyhpbmRleCk7CisJaW5k ZXhJbmZvLT5paV9Db25jdXJyZW50ID0gYnJpbnNoYXJlZC0+aXNjb25jdXJyZW50OworCisJ c2NhbiA9IHRhYmxlX2JlZ2luc2Nhbl9wYXJhbGxlbChoZWFwLAorCQkJCQkJCQkJUGFyYWxs ZWxUYWJsZVNjYW5Gcm9tQnJpblNoYXJlZChicmluc2hhcmVkKSk7CisKKwlyZWx0dXBsZXMg PSB0YWJsZV9pbmRleF9idWlsZF9zY2FuKGhlYXAsIGluZGV4LCBpbmRleEluZm8sIHRydWUs IHRydWUsCisJCQkJCQkJCQkgICBicmluYnVpbGRDYWxsYmFja1BhcmFsbGVsLCBzdGF0ZSwg c2Nhbik7CisKKwkvKiBpbnNlcnQgdGhlIGxhc3QgaXRlbSAqLworCWZvcm1fYW5kX3NwaWxs X3R1cGxlKHN0YXRlKTsKKworCS8qIHNvcnQgdGhlIEJSSU4gcmFuZ2VzIGJ1aWx0IGJ5IHRo aXMgd29ya2VyICovCisJdHVwbGVzb3J0X3BlcmZvcm1zb3J0KGJyaW5zcG9vbC0+c29ydHN0 YXRlKTsKKworCXN0YXRlLT5ic19yZWx0dXBsZXMgKz0gcmVsdHVwbGVzOworCisJLyoKKwkg KiBEb25lLiAgUmVjb3JkIGFtYnVpbGQgc3RhdGlzdGljcy4KKwkgKi8KKwlTcGluTG9ja0Fj cXVpcmUoJmJyaW5zaGFyZWQtPm11dGV4KTsKKwlicmluc2hhcmVkLT5ucGFydGljaXBhbnRz ZG9uZSsrOworCWJyaW5zaGFyZWQtPnJlbHR1cGxlcyArPSBzdGF0ZS0+YnNfcmVsdHVwbGVz OworCWJyaW5zaGFyZWQtPmluZHR1cGxlcyArPSBzdGF0ZS0+YnNfbnVtdHVwbGVzOworCVNw aW5Mb2NrUmVsZWFzZSgmYnJpbnNoYXJlZC0+bXV0ZXgpOworCisJLyogTm90aWZ5IGxlYWRl ciAqLworCUNvbmRpdGlvblZhcmlhYmxlU2lnbmFsKCZicmluc2hhcmVkLT53b3JrZXJzZG9u ZWN2KTsKKworCXR1cGxlc29ydF9lbmQoYnJpbnNwb29sLT5zb3J0c3RhdGUpOworfQorCisv KgorICogUGVyZm9ybSB3b3JrIHdpdGhpbiBhIGxhdW5jaGVkIHBhcmFsbGVsIHByb2Nlc3Mu CisgKi8KK3ZvaWQKK19icmluX3BhcmFsbGVsX2J1aWxkX21haW4oZHNtX3NlZ21lbnQgKnNl Zywgc2htX3RvYyAqdG9jKQoreworCWNoYXIJICAgKnNoYXJlZHF1ZXJ5OworCUJyaW5TaGFy ZWQgKmJyaW5zaGFyZWQ7CisJU2hhcmVkc29ydCAqc2hhcmVkc29ydDsKKwlCcmluQnVpbGRT dGF0ZSAqYnVpbGRzdGF0ZTsKKwlSZWxhdGlvbgloZWFwUmVsOworCVJlbGF0aW9uCWluZGV4 UmVsOworCUxPQ0tNT0RFCWhlYXBMb2NrbW9kZTsKKwlMT0NLTU9ERQlpbmRleExvY2ttb2Rl OworCVdhbFVzYWdlICAgKndhbHVzYWdlOworCUJ1ZmZlclVzYWdlICpidWZmZXJ1c2FnZTsK KwlpbnQJCQlzb3J0bWVtOworCisJLyoKKwkgKiBUaGUgb25seSBwb3NzaWJsZSBzdGF0dXMg ZmxhZyB0aGF0IGNhbiBiZSBzZXQgdG8gdGhlIHBhcmFsbGVsIHdvcmtlciBpcworCSAqIFBS T0NfSU5fU0FGRV9JQy4KKwkgKi8KKwlBc3NlcnQoKE15UHJvYy0+c3RhdHVzRmxhZ3MgPT0g MCkgfHwKKwkJICAgKE15UHJvYy0+c3RhdHVzRmxhZ3MgPT0gUFJPQ19JTl9TQUZFX0lDKSk7 CisKKwkvKiBTZXQgZGVidWdfcXVlcnlfc3RyaW5nIGZvciBpbmRpdmlkdWFsIHdvcmtlcnMg Zmlyc3QgKi8KKwlzaGFyZWRxdWVyeSA9IHNobV90b2NfbG9va3VwKHRvYywgUEFSQUxMRUxf S0VZX1FVRVJZX1RFWFQsIHRydWUpOworCWRlYnVnX3F1ZXJ5X3N0cmluZyA9IHNoYXJlZHF1 ZXJ5OworCisJLyogUmVwb3J0IHRoZSBxdWVyeSBzdHJpbmcgZnJvbSBsZWFkZXIgKi8KKwlw Z3N0YXRfcmVwb3J0X2FjdGl2aXR5KFNUQVRFX1JVTk5JTkcsIGRlYnVnX3F1ZXJ5X3N0cmlu Zyk7CisKKwkvKiBMb29rIHVwIGJyaW4gc2hhcmVkIHN0YXRlICovCisJYnJpbnNoYXJlZCA9 IHNobV90b2NfbG9va3VwKHRvYywgUEFSQUxMRUxfS0VZX0JSSU5fU0hBUkVELCBmYWxzZSk7 CisKKwkvKiBPcGVuIHJlbGF0aW9ucyB1c2luZyBsb2NrIG1vZGVzIGtub3duIHRvIGJlIG9i dGFpbmVkIGJ5IGluZGV4LmMgKi8KKwlpZiAoIWJyaW5zaGFyZWQtPmlzY29uY3VycmVudCkK Kwl7CisJCWhlYXBMb2NrbW9kZSA9IFNoYXJlTG9jazsKKwkJaW5kZXhMb2NrbW9kZSA9IEFj Y2Vzc0V4Y2x1c2l2ZUxvY2s7CisJfQorCWVsc2UKKwl7CisJCWhlYXBMb2NrbW9kZSA9IFNo YXJlVXBkYXRlRXhjbHVzaXZlTG9jazsKKwkJaW5kZXhMb2NrbW9kZSA9IFJvd0V4Y2x1c2l2 ZUxvY2s7CisJfQorCisJLyogT3BlbiByZWxhdGlvbnMgd2l0aGluIHdvcmtlciAqLworCWhl YXBSZWwgPSB0YWJsZV9vcGVuKGJyaW5zaGFyZWQtPmhlYXByZWxpZCwgaGVhcExvY2ttb2Rl KTsKKwlpbmRleFJlbCA9IGluZGV4X29wZW4oYnJpbnNoYXJlZC0+aW5kZXhyZWxpZCwgaW5k ZXhMb2NrbW9kZSk7CisKKwlidWlsZHN0YXRlID0gaW5pdGlhbGl6ZV9icmluX2J1aWxkc3Rh dGUoaW5kZXhSZWwsIE5VTEwsIGJyaW5zaGFyZWQtPnBhZ2VzUGVyUmFuZ2UpOworCisJLyog SW5pdGlhbGl6ZSB3b3JrZXIncyBvd24gc3Bvb2wgKi8KKwlidWlsZHN0YXRlLT5ic19zcG9v bCA9IChCcmluU3Bvb2wgKikgcGFsbG9jMChzaXplb2YoQnJpblNwb29sKSk7CisJYnVpbGRz dGF0ZS0+YnNfc3Bvb2wtPmhlYXAgPSBoZWFwUmVsOworCWJ1aWxkc3RhdGUtPmJzX3Nwb29s LT5pbmRleCA9IGluZGV4UmVsOworCisJLyogTG9vayB1cCBzaGFyZWQgc3RhdGUgcHJpdmF0 ZSB0byB0dXBsZXNvcnQuYyAqLworCXNoYXJlZHNvcnQgPSBzaG1fdG9jX2xvb2t1cCh0b2Ms IFBBUkFMTEVMX0tFWV9UVVBMRVNPUlQsIGZhbHNlKTsKKwl0dXBsZXNvcnRfYXR0YWNoX3No YXJlZChzaGFyZWRzb3J0LCBzZWcpOworCisJLyogUHJlcGFyZSB0byB0cmFjayBidWZmZXIg dXNhZ2UgZHVyaW5nIHBhcmFsbGVsIGV4ZWN1dGlvbiAqLworCUluc3RyU3RhcnRQYXJhbGxl bFF1ZXJ5KCk7CisKKwkvKgorCSAqIE1pZ2h0IGFzIHdlbGwgdXNlIHJlbGlhYmxlIGZpZ3Vy ZSB3aGVuIGRvbGluZyBvdXQgbWFpbnRlbmFuY2Vfd29ya19tZW0KKwkgKiAod2hlbiByZXF1 ZXN0ZWQgbnVtYmVyIG9mIHdvcmtlcnMgd2VyZSBub3QgbGF1bmNoZWQsIHRoaXMgd2lsbCBi ZQorCSAqIHNvbWV3aGF0IGhpZ2hlciB0aGFuIGl0IGlzIGZvciBvdGhlciB3b3JrZXJzKS4K KwkgKi8KKwlzb3J0bWVtID0gbWFpbnRlbmFuY2Vfd29ya19tZW0gLyBicmluc2hhcmVkLT5z Y2FudHVwbGVzb3J0c3RhdGVzOworCisJX2JyaW5fcGFyYWxsZWxfc2Nhbl9hbmRfYnVpbGQo YnVpbGRzdGF0ZSwgYnVpbGRzdGF0ZS0+YnNfc3Bvb2wsCisJCQkJCQkJCSAgYnJpbnNoYXJl ZCwgc2hhcmVkc29ydCwKKwkJCQkJCQkJICBoZWFwUmVsLCBpbmRleFJlbCwgc29ydG1lbSwg ZmFsc2UpOworCisJLyogUmVwb3J0IFdBTC9idWZmZXIgdXNhZ2UgZHVyaW5nIHBhcmFsbGVs IGV4ZWN1dGlvbiAqLworCWJ1ZmZlcnVzYWdlID0gc2htX3RvY19sb29rdXAodG9jLCBQQVJB TExFTF9LRVlfQlVGRkVSX1VTQUdFLCBmYWxzZSk7CisJd2FsdXNhZ2UgPSBzaG1fdG9jX2xv b2t1cCh0b2MsIFBBUkFMTEVMX0tFWV9XQUxfVVNBR0UsIGZhbHNlKTsKKwlJbnN0ckVuZFBh cmFsbGVsUXVlcnkoJmJ1ZmZlcnVzYWdlW1BhcmFsbGVsV29ya2VyTnVtYmVyXSwKKwkJCQkJ CSAgJndhbHVzYWdlW1BhcmFsbGVsV29ya2VyTnVtYmVyXSk7CisKKwlpbmRleF9jbG9zZShp bmRleFJlbCwgaW5kZXhMb2NrbW9kZSk7CisJdGFibGVfY2xvc2UoaGVhcFJlbCwgaGVhcExv Y2ttb2RlKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0 c29ydC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzb3J0LmMKaW5kZXggYzI2 NjVmY2U0MS4uNjI0MWJhZWVhOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25i dHJlZS9uYnRzb3J0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzb3J0 LmMKQEAgLTE1NzUsNyArMTU3NSw3IEBAIF9idF9iZWdpbl9wYXJhbGxlbChCVEJ1aWxkU3Rh dGUgKmJ1aWxkc3RhdGUsIGJvb2wgaXNjb25jdXJyZW50LCBpbnQgcmVxdWVzdCkKIAlidHNo YXJlZC0+YnJva2VuaG90Y2hhaW4gPSBmYWxzZTsKIAl0YWJsZV9wYXJhbGxlbHNjYW5faW5p dGlhbGl6ZShidHNwb29sLT5oZWFwLAogCQkJCQkJCQkgIFBhcmFsbGVsVGFibGVTY2FuRnJv bUJUU2hhcmVkKGJ0c2hhcmVkKSwKLQkJCQkJCQkJICBzbmFwc2hvdCk7CisJCQkJCQkJCSAg c25hcHNob3QsIEludmFsaWRCbG9ja051bWJlcik7CiAKIAkvKgogCSAqIFN0b3JlIHNoYXJl ZCB0dXBsZXNvcnQtcHJpdmF0ZSBzdGF0ZSwgZm9yIHdoaWNoIHdlIHJlc2VydmVkIHNwYWNl LgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW0uYyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtLmMKaW5kZXggYzZiZGI3ZTFjNi4uNGFm MGQ0MzNlOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW0u YworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5jCkBAIC0xNTMsOSAr MTUzLDkgQEAgdGFibGVfcGFyYWxsZWxzY2FuX2VzdGltYXRlKFJlbGF0aW9uIHJlbCwgU25h cHNob3Qgc25hcHNob3QpCiAKIHZvaWQKIHRhYmxlX3BhcmFsbGVsc2Nhbl9pbml0aWFsaXpl KFJlbGF0aW9uIHJlbCwgUGFyYWxsZWxUYWJsZVNjYW5EZXNjIHBzY2FuLAotCQkJCQkJCSAg U25hcHNob3Qgc25hcHNob3QpCisJCQkJCQkJICBTbmFwc2hvdCBzbmFwc2hvdCwgQmxvY2tO dW1iZXIgY2h1bmtfZmFjdG9yKQogewotCVNpemUJCXNuYXBzaG90X29mZiA9IHJlbC0+cmRf dGFibGVhbS0+cGFyYWxsZWxzY2FuX2luaXRpYWxpemUocmVsLCBwc2Nhbik7CisJU2l6ZQkJ c25hcHNob3Rfb2ZmID0gcmVsLT5yZF90YWJsZWFtLT5wYXJhbGxlbHNjYW5faW5pdGlhbGl6 ZShyZWwsIHBzY2FuLCBjaHVua19mYWN0b3IpOwogCiAJcHNjYW4tPnBoc19zbmFwc2hvdF9v ZmYgPSBzbmFwc2hvdF9vZmY7CiAKQEAgLTM5NSwxNiArMzk1LDIxIEBAIHRhYmxlX2Jsb2Nr X3BhcmFsbGVsc2Nhbl9lc3RpbWF0ZShSZWxhdGlvbiByZWwpCiB9CiAKIFNpemUKLXRhYmxl X2Jsb2NrX3BhcmFsbGVsc2Nhbl9pbml0aWFsaXplKFJlbGF0aW9uIHJlbCwgUGFyYWxsZWxU YWJsZVNjYW5EZXNjIHBzY2FuKQordGFibGVfYmxvY2tfcGFyYWxsZWxzY2FuX2luaXRpYWxp emUoUmVsYXRpb24gcmVsLCBQYXJhbGxlbFRhYmxlU2NhbkRlc2MgcHNjYW4sIEJsb2NrTnVt YmVyIGNodW5rX2ZhY3RvcikKIHsKIAlQYXJhbGxlbEJsb2NrVGFibGVTY2FuRGVzYyBicHNj YW4gPSAoUGFyYWxsZWxCbG9ja1RhYmxlU2NhbkRlc2MpIHBzY2FuOwogCiAJYnBzY2FuLT5i YXNlLnBoc19yZWxpZCA9IFJlbGF0aW9uR2V0UmVsaWQocmVsKTsKIAlicHNjYW4tPnBoc19u YmxvY2tzID0gUmVsYXRpb25HZXROdW1iZXJPZkJsb2NrcyhyZWwpOwotCS8qIGNvbXBhcmUg cGhzX3N5bmNzY2FuIGluaXRpYWxpemF0aW9uIHRvIHNpbWlsYXIgbG9naWMgaW4gaW5pdHNj YW4gKi8KKwlicHNjYW4tPnBoc19jaHVua19mYWN0b3IgPSBjaHVua19mYWN0b3I7CisJLyog Y29tcGFyZSBwaHNfc3luY3NjYW4gaW5pdGlhbGl6YXRpb24gdG8gc2ltaWxhciBsb2dpYyBp biBpbml0c2NhbgorCSAqCisJICogRGlzYWJsZSBzeW5jIHNjYW5zIGlmIHRoZSBjaHVuayBm YWN0b3IgaXMgc2V0ICh2YWxpZCBibG9jayBudW1iZXIpLgorCSAqLwogCWJwc2Nhbi0+YmFz ZS5waHNfc3luY3NjYW4gPSBzeW5jaHJvbml6ZV9zZXFzY2FucyAmJgogCQkhUmVsYXRpb25V c2VzTG9jYWxCdWZmZXJzKHJlbCkgJiYKLQkJYnBzY2FuLT5waHNfbmJsb2NrcyA+IE5CdWZm ZXJzIC8gNDsKKwkJKGJwc2Nhbi0+cGhzX25ibG9ja3MgPiBOQnVmZmVycyAvIDQpICYmCisJ CSFCbG9ja051bWJlcklzVmFsaWQoYnBzY2FuLT5waHNfY2h1bmtfZmFjdG9yKTsKIAlTcGlu TG9ja0luaXQoJmJwc2Nhbi0+cGhzX211dGV4KTsKIAlicHNjYW4tPnBoc19zdGFydGJsb2Nr ID0gSW52YWxpZEJsb2NrTnVtYmVyOwogCXBnX2F0b21pY19pbml0X3U2NCgmYnBzY2FuLT5w aHNfbmFsbG9jYXRlZCwgMCk7CkBAIC00NTksNiArNDY0LDI1IEBAIHRhYmxlX2Jsb2NrX3Bh cmFsbGVsc2Nhbl9zdGFydGJsb2NrX2luaXQoUmVsYXRpb24gcmVsLAogCXBic2Nhbndvcmst PnBoc3dfY2h1bmtfc2l6ZSA9IE1pbihwYnNjYW53b3JrLT5waHN3X2NodW5rX3NpemUsCiAJ CQkJCQkJCQkgIFBBUkFMTEVMX1NFUVNDQU5fTUFYX0NIVU5LX1NJWkUpOwogCisJLyoKKwkg KiBJZiB0aGUgY2h1bmsgc2l6ZSBmYWN0b3IgaXMgc2V0LCB3ZSBuZWVkIHRvIG1ha2Ugc3Vy ZSB0aGUgY2h1bmsgc2l6ZSBpcworCSAqIGEgbXVsdGlwbGUgb2YgdGhhdCB2YWx1ZS4gV2Ug cm91bmQgdGhlIGNodW5rIHNpemUgdG8gdGhlIG5lYXJlc3QgY2h1bmsKKwkgKiBmYWN0b3Ig bXVsdGlwbGUsIGF0IGxlYXN0IG9uZSBjaHVua19mYWN0b3IuCisJICoKKwkgKiBYWFggTm90 ZSB0aGlzIG1heSBvdmVycmlkZSBQQVJBTExFTF9TRVFTQ0FOX01BWF9DSFVOS19TSVpFLCBp biBjYXNlIHRoZQorCSAqIGNodW5rIGZhY3RvciAoZS5nLiBCUklOIHBhZ2VzX3Blcl9yYW5n ZSkgaXMgbGFyZ2VyLgorCSAqLworCWlmIChwYnNjYW4tPnBoc19jaHVua19mYWN0b3IgIT0g SW52YWxpZEJsb2NrTnVtYmVyKQorCXsKKwkJLyogbmVhcmVzdCAoc21hbGxlcikgbXVsdGlw bGUgb2YgY2h1bmtfZmFjdG9yICovCisJCXBic2NhbndvcmstPnBoc3dfY2h1bmtfc2l6ZQor CQkJPSBwYnNjYW4tPnBoc19jaHVua19mYWN0b3IgKiAocGJzY2Fud29yay0+cGhzd19jaHVu a19zaXplIC8gcGJzY2FuLT5waHNfY2h1bmtfZmFjdG9yKTsKKworCQkvKiBidXQgYXQgbGVh c3Qgb25lIGNodW5rX2ZhY3RvciAqLworCQlwYnNjYW53b3JrLT5waHN3X2NodW5rX3NpemUg PSBNYXgocGJzY2Fud29yay0+cGhzd19jaHVua19zaXplLAorCQkJCQkJCQkJCSAgcGJzY2Fu LT5waHNfY2h1bmtfZmFjdG9yKTsKKwl9CisKIHJldHJ5OgogCS8qIEdyYWIgdGhlIHNwaW5s b2NrLiAqLwogCVNwaW5Mb2NrQWNxdWlyZSgmcGJzY2FuLT5waHNfbXV0ZXgpOwpAQCAtNTc1 LDYgKzU5OSwyMSBAQCB0YWJsZV9ibG9ja19wYXJhbGxlbHNjYW5fbmV4dHBhZ2UoUmVsYXRp b24gcmVsLAogCQkJKHBic2NhbndvcmstPnBoc3dfY2h1bmtfc2l6ZSAqIFBBUkFMTEVMX1NF UVNDQU5fUkFNUERPV05fQ0hVTktTKSkKIAkJCXBic2NhbndvcmstPnBoc3dfY2h1bmtfc2l6 ZSA+Pj0gMTsKIAorCQkvKgorCQkgKiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgbmV3IGNo dW5rX3NpemUgaXMgc3RpbGwgYSBzdWl0YWJsZSBtdWx0aXBsZQorCQkgKiBvZiBjaHVua19m YWN0b3IuCisJCSAqLworCQlpZiAocGJzY2FuLT5waHNfY2h1bmtfZmFjdG9yICE9IEludmFs aWRCbG9ja051bWJlcikKKwkJeworCQkJLyogbmVhcmVzdCAoc21hbGxlcikgbXVsdGlwbGUg b2YgY2h1bmtfZmFjdG9yICovCisJCQlwYnNjYW53b3JrLT5waHN3X2NodW5rX3NpemUKKwkJ CQk9IHBic2Nhbi0+cGhzX2NodW5rX2ZhY3RvciAqIChwYnNjYW53b3JrLT5waHN3X2NodW5r X3NpemUgLyBwYnNjYW4tPnBoc19jaHVua19mYWN0b3IpOworCisJCQkvKiBidXQgYXQgbGVh c3Qgb25lIGNodW5rX2ZhY3RvciAqLworCQkJcGJzY2Fud29yay0+cGhzd19jaHVua19zaXpl ID0gTWF4KHBic2NhbndvcmstPnBoc3dfY2h1bmtfc2l6ZSwKKwkJCQkJCQkJCQkJICBwYnNj YW4tPnBoc19jaHVua19mYWN0b3IpOworCQl9CisKIAkJbmFsbG9jYXRlZCA9IHBic2Nhbndv cmstPnBoc3dfbmFsbG9jYXRlZCA9CiAJCQlwZ19hdG9taWNfZmV0Y2hfYWRkX3U2NCgmcGJz Y2FuLT5waHNfbmFsbG9jYXRlZCwKIAkJCQkJCQkJCXBic2NhbndvcmstPnBoc3dfY2h1bmtf c2l6ZSk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9wYXJhbGxl bC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vcGFyYWxsZWwuYwppbmRleCAyYjhi YzJmNThkLi43MjA4NjIxMmY0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJh bnNhbS9wYXJhbGxlbC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3BhcmFs bGVsLmMKQEAgLTE0LDYgKzE0LDcgQEAKIAogI2luY2x1ZGUgInBvc3RncmVzLmgiCiAKKyNp bmNsdWRlICJhY2Nlc3MvYnJpbi5oIgogI2luY2x1ZGUgImFjY2Vzcy9uYnRyZWUuaCIKICNp bmNsdWRlICJhY2Nlc3MvcGFyYWxsZWwuaCIKICNpbmNsdWRlICJhY2Nlc3Mvc2Vzc2lvbi5o IgpAQCAtMTQ0LDYgKzE0NSw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QKIAl7CiAJCSJfYnRf cGFyYWxsZWxfYnVpbGRfbWFpbiIsIF9idF9wYXJhbGxlbF9idWlsZF9tYWluCiAJfSwKKwl7 CisJCSJfYnJpbl9wYXJhbGxlbF9idWlsZF9tYWluIiwgX2JyaW5fcGFyYWxsZWxfYnVpbGRf bWFpbgorCX0sCiAJewogCQkicGFyYWxsZWxfdmFjdXVtX21haW4iLCBwYXJhbGxlbF92YWN1 dW1fbWFpbgogCX0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYyBi L3NyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYwppbmRleCAzNTJlNDNkMGU2Li41YmRkMDI1 YmIyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMKKysrIGIvc3Jj L2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jCkBAIC0yOTgwLDcgKzI5ODAsOCBAQCBpbmRleF9i dWlsZChSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJICogTm90ZSB0aGF0IHBsYW5uZXIgY29u c2lkZXJzIHBhcmFsbGVsIHNhZmV0eSBmb3IgdXMuCiAJICovCiAJaWYgKHBhcmFsbGVsICYm IElzTm9ybWFsUHJvY2Vzc2luZ01vZGUoKSAmJgotCQlpbmRleFJlbGF0aW9uLT5yZF9yZWwt PnJlbGFtID09IEJUUkVFX0FNX09JRCkKKwkJKGluZGV4UmVsYXRpb24tPnJkX3JlbC0+cmVs YW0gPT0gQlRSRUVfQU1fT0lEIHx8CisJCSBpbmRleFJlbGF0aW9uLT5yZF9yZWwtPnJlbGFt ID09IEJSSU5fQU1fT0lEKSkKIAkJaW5kZXhJbmZvLT5paV9QYXJhbGxlbFdvcmtlcnMgPQog CQkJcGxhbl9jcmVhdGVfaW5kZXhfd29ya2VycyhSZWxhdGlvbkdldFJlbGlkKGhlYXBSZWxh dGlvbiksCiAJCQkJCQkJCQkgIFJlbGF0aW9uR2V0UmVsaWQoaW5kZXhSZWxhdGlvbikpOwpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVNlcXNjYW4uYyBiL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL25vZGVTZXFzY2FuLmMKaW5kZXggNGRhMGYyOGY3Yi4uZTAxN2Yw NWY3OCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVNlcXNjYW4uYwor KysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlU2Vxc2Nhbi5jCkBAIC0yNzQsNyArMjc0 LDggQEAgRXhlY1NlcVNjYW5Jbml0aWFsaXplRFNNKFNlcVNjYW5TdGF0ZSAqbm9kZSwKIAlw c2NhbiA9IHNobV90b2NfYWxsb2NhdGUocGN4dC0+dG9jLCBub2RlLT5wc2Nhbl9sZW4pOwog CXRhYmxlX3BhcmFsbGVsc2Nhbl9pbml0aWFsaXplKG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxh dGlvbiwKIAkJCQkJCQkJICBwc2NhbiwKLQkJCQkJCQkJICBlc3RhdGUtPmVzX3NuYXBzaG90 KTsKKwkJCQkJCQkJICBlc3RhdGUtPmVzX3NuYXBzaG90LAorCQkJCQkJCQkgIEludmFsaWRC bG9ja051bWJlcik7CiAJc2htX3RvY19pbnNlcnQocGN4dC0+dG9jLCBub2RlLT5zcy5wcy5w bGFuLT5wbGFuX25vZGVfaWQsIHBzY2FuKTsKIAlub2RlLT5zcy5zc19jdXJyZW50U2NhbkRl c2MgPQogCQl0YWJsZV9iZWdpbnNjYW5fcGFyYWxsZWwobm9kZS0+c3Muc3NfY3VycmVudFJl bGF0aW9uLCBwc2Nhbik7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9zb3J0L3R1 cGxlc29ydC5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvc29ydC90dXBsZXNvcnQuYwppbmRleCBl NWE0ZTViMzcxLi43YjM0ODE5NWJlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9z b3J0L3R1cGxlc29ydC5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL3NvcnQvdHVwbGVzb3J0 LmMKQEAgLTEzMzEsNiArMTMzMSw3IEBAIHR1cGxlc29ydF9wdXR0dXBsZV9jb21tb24oVHVw bGVzb3J0c3RhdGUgKnN0YXRlLCBTb3J0VHVwbGUgKnR1cGxlLCBib29sIHVzZUFiYnJlCiAJ CQlicmVhazsKIAogCQlkZWZhdWx0OgorCQkJQXNzZXJ0KGZhbHNlKTsKIAkJCWVsb2coRVJS T1IsICJpbnZhbGlkIHR1cGxlc29ydCBzdGF0ZSIpOwogCQkJYnJlYWs7CiAJfQpAQCAtMTQ2 NSw2ICsxNDY2LDcgQEAgdHVwbGVzb3J0X3BlcmZvcm1zb3J0KFR1cGxlc29ydHN0YXRlICpz dGF0ZSkKIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6CisJCQlBc3NlcnQoZmFsc2UpOwogCQkJ ZWxvZyhFUlJPUiwgImludmFsaWQgdHVwbGVzb3J0IHN0YXRlIik7CiAJCQlicmVhazsKIAl9 CkBAIC0xNzIxLDYgKzE3MjMsNyBAQCB0dXBsZXNvcnRfZ2V0dHVwbGVfY29tbW9uKFR1cGxl c29ydHN0YXRlICpzdGF0ZSwgYm9vbCBmb3J3YXJkLAogCQkJcmV0dXJuIGZhbHNlOwogCiAJ CWRlZmF1bHQ6CisJCQlBc3NlcnQoZmFsc2UpOwogCQkJZWxvZyhFUlJPUiwgImludmFsaWQg dHVwbGVzb3J0IHN0YXRlIik7CiAJCQlyZXR1cm4gZmFsc2U7CQkvKiBrZWVwIGNvbXBpbGVy IHF1aWV0ICovCiAJfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvc29ydC90dXBs ZXNvcnR2YXJpYW50cy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvc29ydC90dXBsZXNvcnR2YXJp YW50cy5jCmluZGV4IGViNmNmY2ZkMDAuLjcxOWVjNTcxMjMgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3V0aWxzL3NvcnQvdHVwbGVzb3J0dmFyaWFudHMuYworKysgYi9zcmMvYmFja2Vu ZC91dGlscy9zb3J0L3R1cGxlc29ydHZhcmlhbnRzLmMKQEAgLTE5LDYgKzE5LDcgQEAKIAog I2luY2x1ZGUgInBvc3RncmVzLmgiCiAKKyNpbmNsdWRlICJhY2Nlc3MvYnJpbl90dXBsZS5o IgogI2luY2x1ZGUgImFjY2Vzcy9oYXNoLmgiCiAjaW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0 YWlscy5oIgogI2luY2x1ZGUgImFjY2Vzcy9uYnRyZWUuaCIKQEAgLTQzLDYgKzQ0LDggQEAg c3RhdGljIHZvaWQgcmVtb3ZlYWJicmV2X2NsdXN0ZXIoVHVwbGVzb3J0c3RhdGUgKnN0YXRl LCBTb3J0VHVwbGUgKnN0dXBzLAogCQkJCQkJCQkgaW50IGNvdW50KTsKIHN0YXRpYyB2b2lk IHJlbW92ZWFiYnJldl9pbmRleChUdXBsZXNvcnRzdGF0ZSAqc3RhdGUsIFNvcnRUdXBsZSAq c3R1cHMsCiAJCQkJCQkJICAgaW50IGNvdW50KTsKK3N0YXRpYyB2b2lkIHJlbW92ZWFiYnJl dl9pbmRleF9icmluKFR1cGxlc29ydHN0YXRlICpzdGF0ZSwgU29ydFR1cGxlICpzdHVwcywK KwkJCQkJCQkJCWludCBjb3VudCk7CiBzdGF0aWMgdm9pZCByZW1vdmVhYmJyZXZfZGF0dW0o VHVwbGVzb3J0c3RhdGUgKnN0YXRlLCBTb3J0VHVwbGUgKnN0dXBzLAogCQkJCQkJCSAgIGlu dCBjb3VudCk7CiBzdGF0aWMgaW50CWNvbXBhcmV0dXBfaGVhcChjb25zdCBTb3J0VHVwbGUg KmEsIGNvbnN0IFNvcnRUdXBsZSAqYiwKQEAgLTYxLDEwICs2NCwxNiBAQCBzdGF0aWMgaW50 CWNvbXBhcmV0dXBfaW5kZXhfYnRyZWUoY29uc3QgU29ydFR1cGxlICphLCBjb25zdCBTb3J0 VHVwbGUgKmIsCiAJCQkJCQkJCSAgIFR1cGxlc29ydHN0YXRlICpzdGF0ZSk7CiBzdGF0aWMg aW50CWNvbXBhcmV0dXBfaW5kZXhfaGFzaChjb25zdCBTb3J0VHVwbGUgKmEsIGNvbnN0IFNv cnRUdXBsZSAqYiwKIAkJCQkJCQkJICBUdXBsZXNvcnRzdGF0ZSAqc3RhdGUpOworc3RhdGlj IGludAljb21wYXJldHVwX2luZGV4X2JyaW4oY29uc3QgU29ydFR1cGxlICphLCBjb25zdCBT b3J0VHVwbGUgKmIsCisJCQkJCQkJCSAgVHVwbGVzb3J0c3RhdGUgKnN0YXRlKTsKIHN0YXRp YyB2b2lkIHdyaXRldHVwX2luZGV4KFR1cGxlc29ydHN0YXRlICpzdGF0ZSwgTG9naWNhbFRh cGUgKnRhcGUsCiAJCQkJCQkgICBTb3J0VHVwbGUgKnN0dXApOwogc3RhdGljIHZvaWQgcmVh ZHR1cF9pbmRleChUdXBsZXNvcnRzdGF0ZSAqc3RhdGUsIFNvcnRUdXBsZSAqc3R1cCwKIAkJ CQkJCSAgTG9naWNhbFRhcGUgKnRhcGUsIHVuc2lnbmVkIGludCBsZW4pOworc3RhdGljIHZv aWQgd3JpdGV0dXBfaW5kZXhfYnJpbihUdXBsZXNvcnRzdGF0ZSAqc3RhdGUsIExvZ2ljYWxU YXBlICp0YXBlLAorCQkJCQkJCQlTb3J0VHVwbGUgKnN0dXApOworc3RhdGljIHZvaWQgcmVh ZHR1cF9pbmRleF9icmluKFR1cGxlc29ydHN0YXRlICpzdGF0ZSwgU29ydFR1cGxlICpzdHVw LAorCQkJCQkJCSAgIExvZ2ljYWxUYXBlICp0YXBlLCB1bnNpZ25lZCBpbnQgbGVuKTsKIHN0 YXRpYyBpbnQJY29tcGFyZXR1cF9kYXR1bShjb25zdCBTb3J0VHVwbGUgKmEsIGNvbnN0IFNv cnRUdXBsZSAqYiwKIAkJCQkJCQkgVHVwbGVzb3J0c3RhdGUgKnN0YXRlKTsKIHN0YXRpYyB2 b2lkIHdyaXRldHVwX2RhdHVtKFR1cGxlc29ydHN0YXRlICpzdGF0ZSwgTG9naWNhbFRhcGUg KnRhcGUsCkBAIC0xMTgsNiArMTI3LDE2IEBAIHR5cGVkZWYgc3RydWN0CiAJdWludDMyCQlt YXhfYnVja2V0czsKIH0gVHVwbGVzb3J0SW5kZXhIYXNoQXJnOwogCisvKgorICogRGF0YSBz dHJ1dHVyZSBwb2ludGVkIGJ5ICJUdXBsZXNvcnRQdWJsaWMuYXJnIiBmb3IgdGhlIGluZGV4 X2JyaW4gc3ViY2FzZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlUdXBsZXNvcnRJbmRl eEFyZyBpbmRleDsKKworCS8qIFhYWCBkbyB3ZSBuZWVkIHNvbWV0aGluZyBoZXJlPyAqLwor fSBUdXBsZXNvcnRJbmRleEJyaW5Bcmc7CisKIC8qCiAgKiBEYXRhIHN0cnV0dXJlIHBvaW50 ZWQgYnkgIlR1cGxlc29ydFB1YmxpYy5hcmciIGZvciB0aGUgRGF0dW0gY2FzZS4KICAqIFNl dCBieSB0dXBsZXNvcnRfYmVnaW5fZGF0dW0gYW5kIHVzZWQgb25seSBieSB0aGUgRGF0dW1U dXBsZSByb3V0aW5lcy4KQEAgLTEzMCw2ICsxNDksMjIgQEAgdHlwZWRlZiBzdHJ1Y3QKIAlp bnQJCQlkYXR1bVR5cGVMZW47CiB9IFR1cGxlc29ydERhdHVtQXJnOwogCisvKgorICogQ29t cHV0aW5nIEJyaW5UdXBsZSBzaXplIHdpdGggb25seSB0aGUgdHVwbGUgaXMgZGlmZmljdWx0 LCBzbyB3ZSB3YW50IHRvIHRyYWNrCisgKiB0aGUgbGVuZ3RoIGZvciByIHJlZmVyZW5jZWQg YnkgU29ydFR1cGxlLiBUaGF0J3Mgd2hhdCBCcmluU29ydFR1cGxlIGlzIG1lYW50CisgKiB0 byBkbyAtIGl0J3MgZXNzZW50aWFsbHkgYSBCcmluVHVwbGUgcHJlZml4ZWQgYnkgbGVuZ3Ro LiBXZSBvbmx5IHdyaXRlIHRoZQorICogQnJpblR1cGxlIHRvIHRoZSBsb2d0YXBlcywgdGhv dWdoLgorICovCit0eXBlZGVmIHN0cnVjdCBCcmluU29ydFR1cGxlCit7CisJU2l6ZQkJdHVw bGVuOworCUJyaW5UdXBsZQl0dXBsZTsKK30gQnJpblNvcnRUdXBsZTsKKworLyogU2l6ZSBv ZiB0aGUgQnJpblNvcnRUdXBsZSwgZ2l2ZW4gbGVuZ3RoIG9mIHRoZSBCcmluVHVwbGUuICov CisjZGVmaW5lIEJSSU5TT1JUVFVQTEVfU0laRShsZW4pCQkob2Zmc2V0b2YoQnJpblNvcnRU dXBsZSwgdHVwbGUpICsgKGxlbikpCisKKwogVHVwbGVzb3J0c3RhdGUgKgogdHVwbGVzb3J0 X2JlZ2luX2hlYXAoVHVwbGVEZXNjIHR1cERlc2MsCiAJCQkJCSBpbnQgbmtleXMsIEF0dHJO dW1iZXIgKmF0dE51bXMsCkBAIC01MTIsNiArNTQ3LDQ3IEBAIHR1cGxlc29ydF9iZWdpbl9p bmRleF9naXN0KFJlbGF0aW9uIGhlYXBSZWwsCiAJcmV0dXJuIHN0YXRlOwogfQogCitUdXBs ZXNvcnRzdGF0ZSAqCit0dXBsZXNvcnRfYmVnaW5faW5kZXhfYnJpbihSZWxhdGlvbiBoZWFw UmVsLAorCQkJCQkJICAgUmVsYXRpb24gaW5kZXhSZWwsCisJCQkJCQkgICBpbnQgd29ya01l bSwKKwkJCQkJCSAgIFNvcnRDb29yZGluYXRlIGNvb3JkaW5hdGUsCisJCQkJCQkgICBpbnQg c29ydG9wdCkKK3sKKwlUdXBsZXNvcnRzdGF0ZSAqc3RhdGUgPSB0dXBsZXNvcnRfYmVnaW5f Y29tbW9uKHdvcmtNZW0sIGNvb3JkaW5hdGUsCisJCQkJCQkJCQkJCQkgICBzb3J0b3B0KTsK KwlUdXBsZXNvcnRQdWJsaWMgKmJhc2UgPSBUdXBsZXNvcnRzdGF0ZUdldFB1YmxpYyhzdGF0 ZSk7CisJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCVR1cGxlc29ydEluZGV4QnJpbkFy ZyAqYXJnOworCisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhiYXNlLT5t YWluY29udGV4dCk7CisJYXJnID0gKFR1cGxlc29ydEluZGV4QnJpbkFyZyAqKSBwYWxsb2Mo c2l6ZW9mKFR1cGxlc29ydEluZGV4QnJpbkFyZykpOworCisjaWZkZWYgVFJBQ0VfU09SVAor CWlmICh0cmFjZV9zb3J0KQorCQllbG9nKExPRywKKwkJCSAiYmVnaW4gaW5kZXggc29ydDog d29ya01lbSA9ICVkLCByYW5kb21BY2Nlc3MgPSAlYyIsCisJCQkgd29ya01lbSwKKwkJCSBz b3J0b3B0ICYgVFVQTEVTT1JUX1JBTkRPTUFDQ0VTUyA/ICd0JyA6ICdmJyk7CisjZW5kaWYK KworCWJhc2UtPm5LZXlzID0gMTsJCQkvKiBPbmx5IG9uZSBzb3J0IGNvbHVtbiwgdGhlIGJs b2NrIG51bWJlciAqLworCisJYmFzZS0+cmVtb3ZlYWJicmV2ID0gcmVtb3ZlYWJicmV2X2lu ZGV4X2JyaW47CisJYmFzZS0+Y29tcGFyZXR1cCA9IGNvbXBhcmV0dXBfaW5kZXhfYnJpbjsK KwliYXNlLT53cml0ZXR1cCA9IHdyaXRldHVwX2luZGV4X2JyaW47CisJYmFzZS0+cmVhZHR1 cCA9IHJlYWR0dXBfaW5kZXhfYnJpbjsKKwliYXNlLT5oYXZlRGF0dW0xID0gdHJ1ZTsKKwli YXNlLT5hcmcgPSBhcmc7CisKKwlhcmctPmluZGV4LmhlYXBSZWwgPSBoZWFwUmVsOworCWFy Zy0+aW5kZXguaW5kZXhSZWwgPSBpbmRleFJlbDsKKworCU1lbW9yeUNvbnRleHRTd2l0Y2hU byhvbGRjb250ZXh0KTsKKworCXJldHVybiBzdGF0ZTsKK30KKwogVHVwbGVzb3J0c3RhdGUg KgogdHVwbGVzb3J0X2JlZ2luX2RhdHVtKE9pZCBkYXR1bVR5cGUsIE9pZCBzb3J0T3BlcmF0 b3IsIE9pZCBzb3J0Q29sbGF0aW9uLAogCQkJCQkgIGJvb2wgbnVsbHNGaXJzdEZsYWcsIGlu dCB3b3JrTWVtLApAQCAtNjkxLDYgKzc2NywzNSBAQCB0dXBsZXNvcnRfcHV0aW5kZXh0dXBs ZXZhbHVlcyhUdXBsZXNvcnRzdGF0ZSAqc3RhdGUsIFJlbGF0aW9uIHJlbCwKIAkJCQkJCQkg ICFzdHVwLmlzbnVsbDEpOwogfQogCisvKgorICogQ29sbGVjdCBvbmUgQlJJTiB0dXBsZSB3 aGlsZSBjb2xsZWN0aW5nIGlucHV0IGRhdGEgZm9yIHNvcnQuCisgKi8KK3ZvaWQKK3R1cGxl c29ydF9wdXRicmludHVwbGUoVHVwbGVzb3J0c3RhdGUgKnN0YXRlLCBCcmluVHVwbGUgKnR1 cGxlLCBTaXplIHNpemUpCit7CisJU29ydFR1cGxlCXN0dXA7CisJQnJpblNvcnRUdXBsZSAq YnN0dXA7CisJVHVwbGVzb3J0UHVibGljICpiYXNlID0gVHVwbGVzb3J0c3RhdGVHZXRQdWJs aWMoc3RhdGUpOworCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRT d2l0Y2hUbyhiYXNlLT50dXBsZWNvbnRleHQpOworCisJLyogYWxsb2NhdGUgc3BhY2UgZm9y IHRoZSB3aG9sZSBCUklOIHNvcnQgdHVwbGUgKi8KKwlic3R1cCA9IHBhbGxvYyhCUklOU09S VFRVUExFX1NJWkUoc2l6ZSkpOworCXN0dXAudHVwbGUgPSBic3R1cDsKKworCWJzdHVwLT50 dXBsZW4gPSBzaXplOworCW1lbWNweSgmYnN0dXAtPnR1cGxlLCB0dXBsZSwgc2l6ZSk7CisK KwlzdHVwLmRhdHVtMSA9IHR1cGxlLT5idF9ibGtubzsKKwlzdHVwLmlzbnVsbDEgPSBmYWxz ZTsKKworCXR1cGxlc29ydF9wdXR0dXBsZV9jb21tb24oc3RhdGUsICZzdHVwLAorCQkJCQkJ CSAgYmFzZS0+c29ydEtleXMgJiYKKwkJCQkJCQkgIGJhc2UtPnNvcnRLZXlzLT5hYmJyZXZf Y29udmVydGVyICYmCisJCQkJCQkJICAhc3R1cC5pc251bGwxKTsKKworCU1lbW9yeUNvbnRl eHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKK30KKwogLyoKICAqIEFjY2VwdCBvbmUgRGF0dW0g d2hpbGUgY29sbGVjdGluZyBpbnB1dCBkYXRhIGZvciBzb3J0LgogICoKQEAgLTgzNCw2ICs5 MzksMzUgQEAgdHVwbGVzb3J0X2dldGluZGV4dHVwbGUoVHVwbGVzb3J0c3RhdGUgKnN0YXRl LCBib29sIGZvcndhcmQpCiAJcmV0dXJuIChJbmRleFR1cGxlKSBzdHVwLnR1cGxlOwogfQog CisvKgorICogRmV0Y2ggdGhlIG5leHQgQlJJTiB0dXBsZSBpbiBlaXRoZXIgZm9yd2FyZCBv ciBiYWNrIGRpcmVjdGlvbi4KKyAqIFJldHVybnMgTlVMTCBpZiBubyBtb3JlIHR1cGxlcy4g IFJldHVybmVkIHR1cGxlIGJlbG9uZ3MgdG8gdHVwbGVzb3J0IG1lbW9yeQorICogY29udGV4 dCwgYW5kIG11c3Qgbm90IGJlIGZyZWVkIGJ5IGNhbGxlci4gIENhbGxlciBtYXkgbm90IHJl bHkgb24gdHVwbGUKKyAqIHJlbWFpbmluZyB2YWxpZCBhZnRlciBhbnkgZnVydGhlciBtYW5p cHVsYXRpb24gb2YgdHVwbGVzb3J0LgorICovCitCcmluVHVwbGUgKgordHVwbGVzb3J0X2dl dGJyaW50dXBsZShUdXBsZXNvcnRzdGF0ZSAqc3RhdGUsIFNpemUgKmxlbiwgYm9vbCBmb3J3 YXJkKQoreworCVR1cGxlc29ydFB1YmxpYyAqYmFzZSA9IFR1cGxlc29ydHN0YXRlR2V0UHVi bGljKHN0YXRlKTsKKwlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0 U3dpdGNoVG8oYmFzZS0+c29ydGNvbnRleHQpOworCVNvcnRUdXBsZQkJc3R1cDsKKwlCcmlu U29ydFR1cGxlICAqYnR1cDsKKworCWlmICghdHVwbGVzb3J0X2dldHR1cGxlX2NvbW1vbihz dGF0ZSwgZm9yd2FyZCwgJnN0dXApKQorCQlzdHVwLnR1cGxlID0gTlVMTDsKKworCU1lbW9y eUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKworCWlmICghc3R1cC50dXBsZSkKKwkJ cmV0dXJuIE5VTEw7CisKKwlidHVwID0gKEJyaW5Tb3J0VHVwbGUgKikgc3R1cC50dXBsZTsK KworCSpsZW4gPSBidHVwLT50dXBsZW47CisKKwlyZXR1cm4gJmJ0dXAtPnR1cGxlOworfQor CiAvKgogICogRmV0Y2ggdGhlIG5leHQgRGF0dW0gaW4gZWl0aGVyIGZvcndhcmQgb3IgYmFj ayBkaXJlY3Rpb24uCiAgKiBSZXR1cm5zIGZhbHNlIGlmIG5vIG1vcmUgZGF0dW1zLgpAQCAt MTUwMSw2ICsxNjM1LDgzIEBAIHJlYWR0dXBfaW5kZXgoVHVwbGVzb3J0c3RhdGUgKnN0YXRl LCBTb3J0VHVwbGUgKnN0dXAsCiAJCQkJCQkJCSAmc3R1cC0+aXNudWxsMSk7CiB9CiAKKy8q CisgKiBSb3V0aW5lcyBzcGVjaWFsaXplZCBmb3IgQnJpblR1cGxlIGNhc2UKKyAqLworCitz dGF0aWMgdm9pZAorcmVtb3ZlYWJicmV2X2luZGV4X2JyaW4oVHVwbGVzb3J0c3RhdGUgKnN0 YXRlLCBTb3J0VHVwbGUgKnN0dXBzLCBpbnQgY291bnQpCit7CisJaW50CQkJaTsKKworCWZv ciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorCXsKKwkJQnJpblNvcnRUdXBsZSAgICp0dXBs ZTsKKworCQl0dXBsZSA9IHN0dXBzW2ldLnR1cGxlOworCQlzdHVwc1tpXS5kYXR1bTEgPSB0 dXBsZS0+dHVwbGUuYnRfYmxrbm87CisJfQorfQorCitzdGF0aWMgaW50Citjb21wYXJldHVw X2luZGV4X2JyaW4oY29uc3QgU29ydFR1cGxlICphLCBjb25zdCBTb3J0VHVwbGUgKmIsCisJ CQkJCSAgVHVwbGVzb3J0c3RhdGUgKnN0YXRlKQoreworCUJyaW5UdXBsZSAgKnR1cGxlMTsK KwlCcmluVHVwbGUgICp0dXBsZTI7CisKKwl0dXBsZTEgPSAmKChCcmluU29ydFR1cGxlICop IGEpLT50dXBsZTsKKwl0dXBsZTIgPSAmKChCcmluU29ydFR1cGxlICopIGIpLT50dXBsZTsK KworCWlmICh0dXBsZTEtPmJ0X2Jsa25vID4gdHVwbGUyLT5idF9ibGtubykKKwkJcmV0dXJu IDE7CisJZWxzZSBpZiAodHVwbGUxLT5idF9ibGtubyA8IHR1cGxlMi0+YnRfYmxrbm8pCisJ CXJldHVybiAtMTsKKworCS8qIHNpbGVuY2UgY29tcGlsZXJzICovCisJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyB2b2lkCit3cml0ZXR1cF9pbmRleF9icmluKFR1cGxlc29ydHN0YXRlICpz dGF0ZSwgTG9naWNhbFRhcGUgKnRhcGUsIFNvcnRUdXBsZSAqc3R1cCkKK3sKKwlUdXBsZXNv cnRQdWJsaWMgKmJhc2UgPSBUdXBsZXNvcnRzdGF0ZUdldFB1YmxpYyhzdGF0ZSk7CisJQnJp blNvcnRUdXBsZSAgKnR1cGxlID0gKEJyaW5Tb3J0VHVwbGUgKikgc3R1cC0+dHVwbGU7CisJ dW5zaWduZWQgaW50CXR1cGxlbiA9IHR1cGxlLT50dXBsZW47CisKKwl0dXBsZW4gPSB0dXBs ZW4gKyBzaXplb2YodHVwbGVuKTsKKwlMb2dpY2FsVGFwZVdyaXRlKHRhcGUsICZ0dXBsZW4s IHNpemVvZih0dXBsZW4pKTsKKwlMb2dpY2FsVGFwZVdyaXRlKHRhcGUsICZ0dXBsZS0+dHVw bGUsIHR1cGxlLT50dXBsZW4pOworCWlmIChiYXNlLT5zb3J0b3B0ICYgVFVQTEVTT1JUX1JB TkRPTUFDQ0VTUykgLyogbmVlZCB0cmFpbGluZyBsZW5ndGggd29yZD8gKi8KKwkJTG9naWNh bFRhcGVXcml0ZSh0YXBlLCAmdHVwbGVuLCBzaXplb2YodHVwbGVuKSk7Cit9CisKK3N0YXRp YyB2b2lkCityZWFkdHVwX2luZGV4X2JyaW4oVHVwbGVzb3J0c3RhdGUgKnN0YXRlLCBTb3J0 VHVwbGUgKnN0dXAsCisJCQkJICAgTG9naWNhbFRhcGUgKnRhcGUsIHVuc2lnbmVkIGludCBs ZW4pCit7CisJVHVwbGVzb3J0UHVibGljICpiYXNlID0gVHVwbGVzb3J0c3RhdGVHZXRQdWJs aWMoc3RhdGUpOworCXVuc2lnbmVkIGludCB0dXBsZW4gPSBsZW4gLSBzaXplb2YodW5zaWdu ZWQgaW50KTsKKworCS8qCisJICogQWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBCUklOIHNvcnQg dHVwbGUsIHdoaWNoIGlzIEJyaW5UdXBsZSB3aXRoIGFuCisJICogZXh0cmEgbGVuZ3RoIGZp ZWxkLgorCSAqLworCUJyaW5Tb3J0VHVwbGUgKnR1cGxlCisJCT0gKEJyaW5Tb3J0VHVwbGUg KikgdHVwbGVzb3J0X3JlYWR0dXBfYWxsb2Moc3RhdGUsCisJCQkJCQkJCQkJCQkJQlJJTlNP UlRUVVBMRV9TSVpFKHR1cGxlbikpOworCisJdHVwbGUtPnR1cGxlbiA9IHR1cGxlbjsKKwor CUxvZ2ljYWxUYXBlUmVhZEV4YWN0KHRhcGUsICZ0dXBsZS0+dHVwbGUsIHR1cGxlbik7CisJ aWYgKGJhc2UtPnNvcnRvcHQgJiBUVVBMRVNPUlRfUkFORE9NQUNDRVNTKSAvKiBuZWVkIHRy YWlsaW5nIGxlbmd0aCB3b3JkPyAqLworCQlMb2dpY2FsVGFwZVJlYWRFeGFjdCh0YXBlLCAm dHVwbGVuLCBzaXplb2YodHVwbGVuKSk7CisJc3R1cC0+dHVwbGUgPSAodm9pZCAqKSB0dXBs ZTsKKworCS8qIHNldCB1cCBmaXJzdC1jb2x1bW4ga2V5IHZhbHVlLCB3aGljaCBpcyBibG9j ayBudW1iZXIgKi8KKwlzdHVwLT5kYXR1bTEgPSB0dXBsZS0+dHVwbGUuYnRfYmxrbm87Cit9 CisKIC8qCiAgKiBSb3V0aW5lcyBzcGVjaWFsaXplZCBmb3IgRGF0dW1UdXBsZSBjYXNlCiAg Ki8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9icmluLmggYi9zcmMvaW5jbHVk ZS9hY2Nlc3MvYnJpbi5oCmluZGV4IGVkNjZmMWIzZDUuLjM0NTFlY2IyMTEgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9icmluLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNz L2JyaW4uaApAQCAtMTEsNiArMTEsNyBAQAogI2RlZmluZSBCUklOX0gKIAogI2luY2x1ZGUg Im5vZGVzL2V4ZWNub2Rlcy5oIgorI2luY2x1ZGUgInN0b3JhZ2Uvc2htX3RvYy5oIgogI2lu Y2x1ZGUgInV0aWxzL3JlbGNhY2hlLmgiCiAKIApAQCAtNTIsNCArNTMsNiBAQCB0eXBlZGVm IHN0cnVjdCBCcmluU3RhdHNEYXRhCiAKIGV4dGVybiB2b2lkIGJyaW5HZXRTdGF0cyhSZWxh dGlvbiBpbmRleCwgQnJpblN0YXRzRGF0YSAqc3RhdHMpOwogCitleHRlcm4gdm9pZCBfYnJp bl9wYXJhbGxlbF9idWlsZF9tYWluKGRzbV9zZWdtZW50ICpzZWcsIHNobV90b2MgKnRvYyk7 CisKICNlbmRpZgkJCQkJCQkvKiBCUklOX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L2FjY2Vzcy9yZWxzY2FuLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCmluZGV4 IGQwMzM2MGVhYzAuLjcyYTIwZDg4MmYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vz cy9yZWxzY2FuLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaApAQCAtNzks NiArNzksNyBAQCB0eXBlZGVmIHN0cnVjdCBQYXJhbGxlbEJsb2NrVGFibGVTY2FuRGVzY0Rh dGEKIAlCbG9ja051bWJlciBwaHNfbmJsb2NrczsJLyogIyBibG9ja3MgaW4gcmVsYXRpb24g YXQgc3RhcnQgb2Ygc2NhbiAqLwogCXNsb2NrX3QJCXBoc19tdXRleDsJCS8qIG11dHVhbCBl eGNsdXNpb24gZm9yIHNldHRpbmcgc3RhcnRibG9jayAqLwogCUJsb2NrTnVtYmVyIHBoc19z dGFydGJsb2NrOyAvKiBzdGFydGluZyBibG9jayBudW1iZXIgKi8KKwlCbG9ja051bWJlciBw aHNfY2h1bmtfZmFjdG9yOyAvKiBjaHVua3MgbmVlZCB0byBiZSBhIG11bHRpcGxlIG9mIHRo aXMgKi8KIAlwZ19hdG9taWNfdWludDY0IHBoc19uYWxsb2NhdGVkOwkvKiBudW1iZXIgb2Yg YmxvY2tzIGFsbG9jYXRlZCB0bwogCQkJCQkJCQkJCSAqIHdvcmtlcnMgc28gZmFyLiAqLwog fQkJCVBhcmFsbGVsQmxvY2tUYWJsZVNjYW5EZXNjRGF0YTsKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL2FjY2Vzcy90YWJsZWFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5o CmluZGV4IDIzMGJjMzljYzAuLjgyMjk3NTQ2ZTIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L2FjY2Vzcy90YWJsZWFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaApA QCAtMzkwLDcgKzM5MCw4IEBAIHR5cGVkZWYgc3RydWN0IFRhYmxlQW1Sb3V0aW5lCiAJICog cmVsYXRpb24uCiAJICovCiAJU2l6ZQkJKCpwYXJhbGxlbHNjYW5faW5pdGlhbGl6ZSkgKFJl bGF0aW9uIHJlbCwKLQkJCQkJCQkJCQkJUGFyYWxsZWxUYWJsZVNjYW5EZXNjIHBzY2FuKTsK KwkJCQkJCQkJCQkJUGFyYWxsZWxUYWJsZVNjYW5EZXNjIHBzY2FuLAorCQkJCQkJCQkJCQlC bG9ja051bWJlciBjaHVua19mYWN0b3IpOwogCiAJLyoKIAkgKiBSZWluaXRpYWxpemUgYHBz Y2FuYCBmb3IgYSBuZXcgc2Nhbi4gYHJlbGAgd2lsbCBiZSB0aGUgc2FtZSByZWxhdGlvbiBh cwpAQCAtMTE0OCw3ICsxMTQ5LDggQEAgZXh0ZXJuIFNpemUgdGFibGVfcGFyYWxsZWxzY2Fu X2VzdGltYXRlKFJlbGF0aW9uIHJlbCwgU25hcHNob3Qgc25hcHNob3QpOwogICovCiBleHRl cm4gdm9pZCB0YWJsZV9wYXJhbGxlbHNjYW5faW5pdGlhbGl6ZShSZWxhdGlvbiByZWwsCiAJ CQkJCQkJCQkJICBQYXJhbGxlbFRhYmxlU2NhbkRlc2MgcHNjYW4sCi0JCQkJCQkJCQkJICBT bmFwc2hvdCBzbmFwc2hvdCk7CisJCQkJCQkJCQkJICBTbmFwc2hvdCBzbmFwc2hvdCwKKwkJ CQkJCQkJCQkgIEJsb2NrTnVtYmVyIGNodW5rX2ZhY3Rvcik7CiAKIC8qCiAgKiBCZWdpbiBh IHBhcmFsbGVsIHNjYW4uIGBwc2NhbmAgbmVlZHMgdG8gaGF2ZSBiZWVuIGluaXRpYWxpemVk IHdpdGgKQEAgLTIwNjQsNyArMjA2Niw4IEBAIGV4dGVybiB2b2lkIHNpbXBsZV90YWJsZV90 dXBsZV91cGRhdGUoUmVsYXRpb24gcmVsLCBJdGVtUG9pbnRlciBvdGlkLAogCiBleHRlcm4g U2l6ZSB0YWJsZV9ibG9ja19wYXJhbGxlbHNjYW5fZXN0aW1hdGUoUmVsYXRpb24gcmVsKTsK IGV4dGVybiBTaXplIHRhYmxlX2Jsb2NrX3BhcmFsbGVsc2Nhbl9pbml0aWFsaXplKFJlbGF0 aW9uIHJlbCwKLQkJCQkJCQkJCQkJCVBhcmFsbGVsVGFibGVTY2FuRGVzYyBwc2Nhbik7CisJ CQkJCQkJCQkJCQlQYXJhbGxlbFRhYmxlU2NhbkRlc2MgcHNjYW4sCisJCQkJCQkJCQkJCQlC bG9ja051bWJlciBjaHVua19mYWN0b3IpOwogZXh0ZXJuIHZvaWQgdGFibGVfYmxvY2tfcGFy YWxsZWxzY2FuX3JlaW5pdGlhbGl6ZShSZWxhdGlvbiByZWwsCiAJCQkJCQkJCQkJCQkgIFBh cmFsbGVsVGFibGVTY2FuRGVzYyBwc2Nhbik7CiBleHRlcm4gQmxvY2tOdW1iZXIgdGFibGVf YmxvY2tfcGFyYWxsZWxzY2FuX25leHRwYWdlKFJlbGF0aW9uIHJlbCwKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL3V0aWxzL3R1cGxlc29ydC5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvdHVw bGVzb3J0LmgKaW5kZXggYWYwNTdiNjM1OC4uZDZhYTYyOTIzMyAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvdXRpbHMvdHVwbGVzb3J0LmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvdHVw bGVzb3J0LmgKQEAgLTIxLDYgKzIxLDcgQEAKICNpZm5kZWYgVFVQTEVTT1JUX0gKICNkZWZp bmUgVFVQTEVTT1JUX0gKIAorI2luY2x1ZGUgImFjY2Vzcy9icmluX3R1cGxlLmgiCiAjaW5j bHVkZSAiYWNjZXNzL2l0dXAuaCIKICNpbmNsdWRlICJleGVjdXRvci90dXB0YWJsZS5oIgog I2luY2x1ZGUgInN0b3JhZ2UvZHNtLmgiCkBAIC0yNzUsNiArMjc2LDkgQEAgdHlwZWRlZiBz dHJ1Y3QKICAqIFRoZSAiaW5kZXhfaGFzaCIgQVBJIGlzIHNpbWlsYXIgdG8gaW5kZXhfYnRy ZWUsIGJ1dCB0aGUgdHVwbGVzIGFyZQogICogYWN0dWFsbHkgc29ydGVkIGJ5IHRoZWlyIGhh c2ggY29kZXMgbm90IHRoZSByYXcgZGF0YS4KICAqCisgKiBUaGUgImluZGV4X2JyaW4iIEFQ SSBpcyBzaW1pbGFyIHRvIGluZGV4X2J0cmVlLCBidXQgdGhlIHR1cGxlcyBhcmUKKyAqIEJy aW5UdXBsZSBhbmQgYXJlIHNvcnRlZCBieSB0aGVpciBibG9jayBudW1iZXIgbm90IHRoZSBy YXcgZGF0YS4KKyAqCiAgKiBQYXJhbGxlbCBzb3J0IGNhbGxlcnMgYXJlIHJlcXVpcmVkIHRv IGNvb3JkaW5hdGUgbXVsdGlwbGUgdHVwbGVzb3J0IHN0YXRlcwogICogaW4gYSBsZWFkZXIg cHJvY2VzcyBhbmQgb25lIG9yIG1vcmUgd29ya2VyIHByb2Nlc3Nlcy4gIFRoZSBsZWFkZXIg cHJvY2VzcwogICogbXVzdCBsYXVuY2ggd29ya2VycywgYW5kIGhhdmUgZWFjaCBwZXJmb3Jt IGFuIGluZGVwZW5kZW50ICJwYXJ0aWFsIgpAQCAtNDE5LDYgKzQyMywxMCBAQCBleHRlcm4g VHVwbGVzb3J0c3RhdGUgKnR1cGxlc29ydF9iZWdpbl9pbmRleF9naXN0KFJlbGF0aW9uIGhl YXBSZWwsCiAJCQkJCQkJCQkJCQkgIFJlbGF0aW9uIGluZGV4UmVsLAogCQkJCQkJCQkJCQkJ ICBpbnQgd29ya01lbSwgU29ydENvb3JkaW5hdGUgY29vcmRpbmF0ZSwKIAkJCQkJCQkJCQkJ CSAgaW50IHNvcnRvcHQpOworZXh0ZXJuIFR1cGxlc29ydHN0YXRlICp0dXBsZXNvcnRfYmVn aW5faW5kZXhfYnJpbihSZWxhdGlvbiBoZWFwUmVsLAorCQkJCQkJCQkJCQkJICBSZWxhdGlv biBpbmRleFJlbCwKKwkJCQkJCQkJCQkJCSAgaW50IHdvcmtNZW0sIFNvcnRDb29yZGluYXRl IGNvb3JkaW5hdGUsCisJCQkJCQkJCQkJCQkgIGludCBzb3J0b3B0KTsKIGV4dGVybiBUdXBs ZXNvcnRzdGF0ZSAqdHVwbGVzb3J0X2JlZ2luX2RhdHVtKE9pZCBkYXR1bVR5cGUsCiAJCQkJ CQkJCQkJCSBPaWQgc29ydE9wZXJhdG9yLCBPaWQgc29ydENvbGxhdGlvbiwKIAkJCQkJCQkJ CQkJIGJvb2wgbnVsbHNGaXJzdEZsYWcsCkBAIC00MzEsNiArNDM5LDcgQEAgZXh0ZXJuIHZv aWQgdHVwbGVzb3J0X3B1dGhlYXB0dXBsZShUdXBsZXNvcnRzdGF0ZSAqc3RhdGUsIEhlYXBU dXBsZSB0dXApOwogZXh0ZXJuIHZvaWQgdHVwbGVzb3J0X3B1dGluZGV4dHVwbGV2YWx1ZXMo VHVwbGVzb3J0c3RhdGUgKnN0YXRlLAogCQkJCQkJCQkJCSAgUmVsYXRpb24gcmVsLCBJdGVt UG9pbnRlciBzZWxmLAogCQkJCQkJCQkJCSAgRGF0dW0gKnZhbHVlcywgYm9vbCAqaXNudWxs KTsKK2V4dGVybiB2b2lkIHR1cGxlc29ydF9wdXRicmludHVwbGUoVHVwbGVzb3J0c3RhdGUg KnN0YXRlLCBCcmluVHVwbGUgKnR1cCwgU2l6ZSBsZW4pOwogZXh0ZXJuIHZvaWQgdHVwbGVz b3J0X3B1dGRhdHVtKFR1cGxlc29ydHN0YXRlICpzdGF0ZSwgRGF0dW0gdmFsLAogCQkJCQkJ CSAgIGJvb2wgaXNOdWxsKTsKIApAQCAtNDM4LDYgKzQ0Nyw4IEBAIGV4dGVybiBib29sIHR1 cGxlc29ydF9nZXR0dXBsZXNsb3QoVHVwbGVzb3J0c3RhdGUgKnN0YXRlLCBib29sIGZvcndh cmQsCiAJCQkJCQkJCSAgIGJvb2wgY29weSwgVHVwbGVUYWJsZVNsb3QgKnNsb3QsIERhdHVt ICphYmJyZXYpOwogZXh0ZXJuIEhlYXBUdXBsZSB0dXBsZXNvcnRfZ2V0aGVhcHR1cGxlKFR1 cGxlc29ydHN0YXRlICpzdGF0ZSwgYm9vbCBmb3J3YXJkKTsKIGV4dGVybiBJbmRleFR1cGxl IHR1cGxlc29ydF9nZXRpbmRleHR1cGxlKFR1cGxlc29ydHN0YXRlICpzdGF0ZSwgYm9vbCBm b3J3YXJkKTsKK2V4dGVybiBCcmluVHVwbGUgKnR1cGxlc29ydF9nZXRicmludHVwbGUoVHVw bGVzb3J0c3RhdGUgKnN0YXRlLCBTaXplICpsZW4sCisJCQkJCQkJCQkJIGJvb2wgZm9yd2Fy ZCk7CiBleHRlcm4gYm9vbCB0dXBsZXNvcnRfZ2V0ZGF0dW0oVHVwbGVzb3J0c3RhdGUgKnN0 YXRlLCBib29sIGZvcndhcmQsIGJvb2wgY29weSwKIAkJCQkJCQkgICBEYXR1bSAqdmFsLCBi b29sICppc051bGwsIERhdHVtICphYmJyZXYpOwogCi0tIAoyLjQxLjAKCg== --------------swWrb07tJ05mQArJkjtLjLk2--