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 1uSK4X-006BVY-6d for pgsql-hackers@arkaria.postgresql.org; Thu, 19 Jun 2025 18:33:13 +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 1uSK4V-00Dvva-89 for pgsql-hackers@arkaria.postgresql.org; Thu, 19 Jun 2025 18:33:11 +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 1uSK4U-00DvvR-BU for pgsql-hackers@lists.postgresql.org; Thu, 19 Jun 2025 18:33:11 +0000 Received: from mail-yb1-xb29.google.com ([2607:f8b0:4864:20::b29]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1uSK4Q-002w2p-0r for pgsql-hackers@lists.postgresql.org; Thu, 19 Jun 2025 18:33:10 +0000 Received: by mail-yb1-xb29.google.com with SMTP id 3f1490d57ef6-e8275f110c6so916061276.2 for ; Thu, 19 Jun 2025 11:33:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1750357985; x=1750962785; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=hgyTcNdOLCIkvK6gin1m8C0hw8WHFHB6WREL88uWRzA=; b=csDqjtEPWRtkRZOirymb+a9ngW2U0NOu++hcJoB6KrrI2vAbIBZJO+fHGNsVDFNZWb EfMuHenavecuD6rk6fqswXnW9d2IwwihKLF0brpdRbZWtToSmSGXYxNyDg68Yn7DcI+m +wbT9MhnWSgiwwuhyz9qvsDyVvrj8HUlSYO6fbVm4mIXtcxlzWmr7RR/QDqLsveVHhwz ghCI+YI01RY5AUSh0ZgbAgM24DGsMpXleX9Ibyn2neSXPVMUSE/KHY/MkBm2oPqtcKYi wGquz0v/k9nn0mcz8b/sRimhn6i5htOkS2mb7ri0AdVFoilneIlSm4kjh3k37iaud51R knDA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750357985; x=1750962785; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=hgyTcNdOLCIkvK6gin1m8C0hw8WHFHB6WREL88uWRzA=; b=dwe8FbA5gIJVwLdGFp9Uvl74hq0LmV2vM6QGWm0nbID+Xr9MX2CNjDUAYx+k+6AWvC QwxZWmrV6GhA+cxQ26ANr3pp0C+kqXGL43oZcLaXcCsBexIUnUHvEEeP7GT0+7zbN8Mi St85ea89ma1jS07o6rIF2xD+loBxeQciTtuJZSvBHj05MnAkuk71J3YUFeBqhwUmpSfc Ab9k37CWc1cBhoO5tYNWlysv2Z7dvGTBaPvCCu8EI7fLKYn2NZJKmQbBvWAJEKB3Hcsj 5KyflTe8C25jiPltgJsYCHmagXol/ioOypp0oCpZ/sfhFFnZUX8FbMKxPPAb77iEYAIV 9tJg== X-Gm-Message-State: AOJu0Yxfxy67jU2onn4vzeqO0WAoYPFULwjqNtAcASmqqnv405Nnv7ar d2RSpkvhpqfXWr24l7JO0CwhpVeBF8ip+Ynbf9pQ2hXhLlO2F0xLucWA67OUdQKN73yFvZWlfFR Fqty6vI38oKNSSouBkbOL5+5OC08VgvA= X-Gm-Gg: ASbGncsKFDqyoLUmNKixYsV5HpbqkTJrdIJhvnY4gvSfxnTpcoMWMuHBUq2kCzk5GIl wMVhG59iw4o11x8yKLE3QXfiuHgVEz15nr59DRtsa3Nn78LutmDoDqb+9EEjzLXJCFqDG8Qv33m 5JqbCp8svcLZy/MR5j0sNRsBvB5bkRu0GVjaTHqIl+ONN2 X-Google-Smtp-Source: AGHT+IEpweUlKUWu/xOI0WrtjweRPfcECU6eLoz23SMVtP0DdGCmJZpLPx7PPQZXrMTqEke157I22TFMCPHHTZKSSvA= X-Received: by 2002:a05:690c:881:b0:70e:2d1a:82b8 with SMTP id 00721157ae682-712c675416dmr3876067b3.34.1750357985380; Thu, 19 Jun 2025 11:33:05 -0700 (PDT) MIME-Version: 1.0 References: <0C842FA2-8ACF-4C81-9F0E-F0BDB479AC28@yandex-team.ru> <14D6E2AE-3813-4AC7-B42F-6D0E765D551C@yandex-team.ru> In-Reply-To: <14D6E2AE-3813-4AC7-B42F-6D0E765D551C@yandex-team.ru> From: Arseniy Mukhin Date: Thu, 19 Jun 2025 21:32:54 +0300 X-Gm-Features: AX0GCFtuTi7pNwpwCSYmKjahKtkv4X9IOaiQCXugcNrNfNe2yv2_jufHIl_4tF0 Message-ID: Subject: Re: amcheck support for BRIN indexes To: Andrey Borodin Cc: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000f32bf40637f0f912" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000f32bf40637f0f912 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Jun 18, 2025 at 2:39=E2=80=AFPM Andrey Borodin wrote: > > > > > On 18 Jun 2025, at 11:33, Arseniy Mukhin = wrote: > > > > Interesting, I used btree check as reference when started > > writing brin check, and in btree check there 53 > > ERRCODE_INDEX_CORRUPTED ereports and only 1 ERRCODE_DATA_CORRUPTED > > ereport. So it was very hard to do, but I managed to pick the wrong > > one. I wonder if this btree check ereport should also be changed to > > ERRCODE_INDEX_CORRUPTED? > > It's there in a case of heapallindexes failure. I concur that ERRCODE_IND= EX_CORRUPTED is more appropriate in that case in verify_nbtree.c. > But I recollect Peter explained this code before somewhere in pgsql-hacke= rs. And the reasoning was something like "if you lack a tuple in unquie con= straints - it's almost certainly subsequent constrain violation and data lo= ss". But I'm not sure. > And I could not find this discussion in archives. > There is a thread about heapallindexed feature [1], I guess this is a one you mentioned? Also it turned out that this error code is explained in the code comment: * Since the overall structure of the index has already been verified, the m= ost * likely explanation for error here is a corrupt heap page (could be logica= l * or physical corruption). ... Now I wonder if we need to use ERRCODE_DATA_CORRUPTED in the 'heap all consistent' part? It's similar to btree heapallindexed check. We have a structurally consistent index, but for some reason it is not consistent with the heap. It seems to me it's impossible to say who we should blame here. I leave ERRCODE_INDEX_CORRUPTED for now. I noticed that fixes about year and error codes didn't get to the last version for some reason, so there is a new version with fixes. Also I changed the 'heap all consistent' error message "Index %s is corrupted" -> "Index %s is not consistent with the heap". New message looks less misleading as we don't know where the problem is. Thanks! [1] https://www.postgresql.org/message-id/CAH2-WzmVKiwcNrhYFH9CTLLcmQTMH_xj= W%3DAvxfDKAftmY47QKw%40mail.gmail.com Best regards, Arseniy Mukhin --000000000000f32bf40637f0f912 Content-Type: text/x-patch; charset="US-ASCII"; name="v4-0002-amcheck-brin_index_check-index-structure-check.patch" Content-Disposition: attachment; filename="v4-0002-amcheck-brin_index_check-index-structure-check.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mc3ptos61 RnJvbSA2Y2IyZTVmNDIzMjZkMDc5NjQ1ZjQ3ODczYjM3Y2NkOTU0OWJjODE4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBcnNlbml5IE11a2hpbiA8YXJzZW5peS5tdWtoaW4uZGV2QGdt YWlsLmNvbT4KRGF0ZTogTW9uLCAxNiBKdW4gMjAyNSAxODoxMToyNyArMDMwMApTdWJqZWN0OiBb UEFUQ0ggdjQgMi8zXSBhbWNoZWNrOiBicmluX2luZGV4X2NoZWNrKCkgLSBpbmRleCBzdHJ1Y3R1 cmUgY2hlY2sKCkFkZHMgYSBuZXcgZnVuY3Rpb24gYnJpbl9pbmRleF9jaGVjaygpIGZvciB2YWxp ZGF0aW5nIEJSSU4gaW5kZXhlcy4KSXQgaW5jdWRlcyBuZXh0IGNoZWNrczoKLSBtZXRhIHBhZ2Ug Y2hlY2tzCi0gcmV2bWFwIHBvaW50ZXJzIGlzIHZhbGlkIGFuZCBwb2ludHMgdG8gaW5kZXggdHVw bGVzIHdpdGggZXhwZWN0ZWQgcmFuZ2UgYmxrbm8KLSBpbmRleCB0dXBsZXMgaGF2ZSBleHBlY3Rl ZCBmb3JtYXQKLSBzb21lIHNwZWNpYWwgY2hlY2tzIGZvciBlbXB0eV9yYW5nZXMKLSBldmVyeSBp bmRleCB0dXBsZSBoYXMgY29ycmVzcG9uZGluZyByZXZtYXAgaXRlbSB0aGF0IHBvaW50cyB0byBp dCAob3B0aW9uYWwpCi0tLQogY29udHJpYi9hbWNoZWNrL01ha2VmaWxlICAgICAgICAgICAgICAg IHwgICA1ICstCiBjb250cmliL2FtY2hlY2svYW1jaGVjay0tMS41LS0xLjYuc3FsICAgfCAgMTgg KwogY29udHJpYi9hbWNoZWNrL2FtY2hlY2suY29udHJvbCAgICAgICAgIHwgICAyICstCiBjb250 cmliL2FtY2hlY2svZXhwZWN0ZWQvY2hlY2tfYnJpbi5vdXQgfCAxMzQgKysrKwogY29udHJpYi9h bWNoZWNrL21lc29uLmJ1aWxkICAgICAgICAgICAgIHwgICA0ICsKIGNvbnRyaWIvYW1jaGVjay9z cWwvY2hlY2tfYnJpbi5zcWwgICAgICB8IDEwMiArKysKIGNvbnRyaWIvYW1jaGVjay90LzAwN192 ZXJpZnlfYnJpbi5wbCAgICB8IDI5MSArKysrKysrKysKIGNvbnRyaWIvYW1jaGVjay92ZXJpZnlf YnJpbi5jICAgICAgICAgICB8IDgwNyArKysrKysrKysrKysrKysrKysrKysrKysKIDggZmlsZXMg Y2hhbmdlZCwgMTM2MCBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUg MTAwNjQ0IGNvbnRyaWIvYW1jaGVjay9hbWNoZWNrLS0xLjUtLTEuNi5zcWwKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBjb250cmliL2FtY2hlY2svZXhwZWN0ZWQvY2hlY2tfYnJpbi5vdXQKIGNyZWF0ZSBt b2RlIDEwMDY0NCBjb250cmliL2FtY2hlY2svc3FsL2NoZWNrX2JyaW4uc3FsCiBjcmVhdGUgbW9k ZSAxMDA2NDQgY29udHJpYi9hbWNoZWNrL3QvMDA3X3ZlcmlmeV9icmluLnBsCiBjcmVhdGUgbW9k ZSAxMDA2NDQgY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9icmluLmMKCmRpZmYgLS1naXQgYS9jb250 cmliL2FtY2hlY2svTWFrZWZpbGUgYi9jb250cmliL2FtY2hlY2svTWFrZWZpbGUKaW5kZXggMWI3 YTYzY2JhYTQuLmJkZmIyNzRjODljIDEwMDY0NAotLS0gYS9jb250cmliL2FtY2hlY2svTWFrZWZp bGUKKysrIGIvY29udHJpYi9hbWNoZWNrL01ha2VmaWxlCkBAIC02LDExICs2LDEyIEBAIE9CSlMg PSBcCiAJdmVyaWZ5X2NvbW1vbi5vIFwKIAl2ZXJpZnlfZ2luLm8gXAogCXZlcmlmeV9oZWFwYW0u byBcCi0JdmVyaWZ5X25idHJlZS5vCisJdmVyaWZ5X25idHJlZS5vIFwKKwl2ZXJpZnlfYnJpbi5v CiAKIEVYVEVOU0lPTiA9IGFtY2hlY2sKIERBVEEgPSBhbWNoZWNrLS0xLjItLTEuMy5zcWwgYW1j aGVjay0tMS4xLS0xLjIuc3FsIGFtY2hlY2stLTEuMC0tMS4xLnNxbCBhbWNoZWNrLS0xLjAuc3Fs IFwKLQkJYW1jaGVjay0tMS4zLS0xLjQuc3FsIGFtY2hlY2stLTEuNC0tMS41LnNxbAorCQlhbWNo ZWNrLS0xLjMtLTEuNC5zcWwgYW1jaGVjay0tMS40LS0xLjUuc3FsIGFtY2hlY2stLTEuNS0tMS42 LnNxbAogUEdGSUxFREVTQyA9ICJhbWNoZWNrIC0gZnVuY3Rpb24gZm9yIHZlcmlmeWluZyByZWxh dGlvbiBpbnRlZ3JpdHkiCiAKIFJFR1JFU1MgPSBjaGVjayBjaGVja19idHJlZSBjaGVja19naW4g Y2hlY2tfaGVhcApkaWZmIC0tZ2l0IGEvY29udHJpYi9hbWNoZWNrL2FtY2hlY2stLTEuNS0tMS42 LnNxbCBiL2NvbnRyaWIvYW1jaGVjay9hbWNoZWNrLS0xLjUtLTEuNi5zcWwKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjllYzA0NmJiMWNmCi0tLSAvZGV2L251bGwKKysr IGIvY29udHJpYi9hbWNoZWNrL2FtY2hlY2stLTEuNS0tMS42LnNxbApAQCAtMCwwICsxLDE4IEBA CisvKiBjb250cmliL2FtY2hlY2svYW1jaGVjay0tMS41LS0xLjYuc3FsICovCisKKy0tIGNvbXBs YWluIGlmIHNjcmlwdCBpcyBzb3VyY2VkIGluIHBzcWwsIHJhdGhlciB0aGFuIHZpYSBDUkVBVEUg RVhURU5TSU9OCitcZWNobyBVc2UgIkFMVEVSIEVYVEVOU0lPTiBhbWNoZWNrIFVQREFURSBUTyAn MS42JyIgdG8gbG9hZCB0aGlzIGZpbGUuIFxxdWl0CisKKworLS0KKy0tIGJyaW5faW5kZXhfY2hl Y2soKQorLS0KK0NSRUFURSBGVU5DVElPTiBicmluX2luZGV4X2NoZWNrKGluZGV4IHJlZ2NsYXNz LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVndWxhcl9wYWdlc19jaGVjayBi b29sZWFuIGRlZmF1bHQgZmFsc2UKKykKKyAgICBSRVRVUk5TIFZPSUQKK0FTICdNT0RVTEVfUEFU SE5BTUUnLCAnYnJpbl9pbmRleF9jaGVjaycKK0xBTkdVQUdFIEMgU1RSSUNUIFBBUkFMTEVMIFJF U1RSSUNURUQ7CisKKy0tIFdlIGRvbid0IHdhbnQgdGhpcyB0byBiZSBhdmFpbGFibGUgdG8gcHVi bGljCitSRVZPS0UgQUxMIE9OIEZVTkNUSU9OIGJyaW5faW5kZXhfY2hlY2socmVnY2xhc3MsIGJv b2xlYW4pIEZST00gUFVCTElDOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdp dCBhL2NvbnRyaWIvYW1jaGVjay9hbWNoZWNrLmNvbnRyb2wgYi9jb250cmliL2FtY2hlY2svYW1j aGVjay5jb250cm9sCmluZGV4IGM4YmE2ZDdjOWJjLi4yZjMyOWVmMmNmNCAxMDA2NDQKLS0tIGEv Y29udHJpYi9hbWNoZWNrL2FtY2hlY2suY29udHJvbAorKysgYi9jb250cmliL2FtY2hlY2svYW1j aGVjay5jb250cm9sCkBAIC0xLDUgKzEsNSBAQAogIyBhbWNoZWNrIGV4dGVuc2lvbgogY29tbWVu dCA9ICdmdW5jdGlvbnMgZm9yIHZlcmlmeWluZyByZWxhdGlvbiBpbnRlZ3JpdHknCi1kZWZhdWx0 X3ZlcnNpb24gPSAnMS41JworZGVmYXVsdF92ZXJzaW9uID0gJzEuNicKIG1vZHVsZV9wYXRobmFt ZSA9ICckbGliZGlyL2FtY2hlY2snCiByZWxvY2F0YWJsZSA9IHRydWUKZGlmZiAtLWdpdCBhL2Nv bnRyaWIvYW1jaGVjay9leHBlY3RlZC9jaGVja19icmluLm91dCBiL2NvbnRyaWIvYW1jaGVjay9l eHBlY3RlZC9jaGVja19icmluLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMC4uYmViY2E5M2QzMmYKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2FtY2hlY2svZXhw ZWN0ZWQvY2hlY2tfYnJpbi5vdXQKQEAgLTAsMCArMSwxMzQgQEAKKy0tIGhlbHBlciBmdW5jCitD UkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiAgcmFuZG9tX3N0cmluZyggSU5UICkgUkVUVVJOUyBU RVhUIEFTICQkCitTRUxFQ1Qgc3RyaW5nX2FnZyhzdWJzdHJpbmcoJzAxMjM0NTY3ODlhYmNkZWZn aGlqa2xtbm9wcXJzdHV2d3h5eicsIGNlaWwocmFuZG9tKCkgKiAzNik6OklOVEVHRVIsIDEpLCAn JykgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgJDEpOworJCQgTEFOR1VBR0Ugc3FsOworLS0gZW1w dHkgdGFibGUgaW5kZXggc2hvdWxkIGJlIHZhbGlkCitDUkVBVEUgVEFCTEUgYnJpbnRlc3QgKGEg QklHSU5UKSBXSVRIIChGSUxMRkFDVE9SID0gMTApOworQ1JFQVRFIElOREVYIGJyaW50ZXN0X2lk eCBPTiBicmludGVzdCBVU0lORyBCUklOIChhKTsKK1NFTEVDVCBicmluX2luZGV4X2NoZWNrKCdi cmludGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSk7CisgYnJpbl9pbmRleF9jaGVjayAKKy0tLS0t LS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCistLSBjbGVhbnVwCitEUk9QIFRBQkxFIGJyaW50 ZXN0OworLS0gbXVsdGkgYXR0cmlidXRlcyB3aXRoIHZhcmxlbmEgYXR0cmlidXRlIHRlc3QKK0NS RUFURSBUQUJMRSBicmludGVzdCAoaWQgQklHU0VSSUFMLCBhIFRFWFQpIFdJVEggKEZJTExGQUNU T1IgPSAxMCk7CitDUkVBVEUgSU5ERVggYnJpbnRlc3RfaWR4IE9OIGJyaW50ZXN0IFVTSU5HIEJS SU4gKGEgVEVYVF9taW5tYXhfb3BzLCBpZCBpbnQ4X21pbm1heF9vcHMpIFdJVEggKFBBR0VTX1BF Ul9SQU5HRSA9IDIpOworSU5TRVJUIElOVE8gYnJpbnRlc3QgKGEpIFNFTEVDVCByYW5kb21fc3Ry aW5nKCh4ICUgMTAwKSkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSw1MDAwKSB4OworLS0gY3JlYXRl IHNvbWUgZW1wdHkgcmFuZ2VzCitERUxFVEUgRlJPTSBicmludGVzdCBXSEVSRSBpZCA+IDIwMDAg QU5EIGlkIDwgNDAwMDsKK1NFTEVDVCBicmluX2luZGV4X2NoZWNrKCdicmludGVzdF9pZHgnOjpS RUdDTEFTUyk7CisgYnJpbl9pbmRleF9jaGVjayAKKy0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEg cm93KQorCistLSByZWJ1aWxkIGluZGV4CitEUk9QIElOREVYIGJyaW50ZXN0X2lkeDsKK0NSRUFU RSBJTkRFWCBicmludGVzdF9pZHggT04gYnJpbnRlc3QgVVNJTkcgQlJJTiAoYSBURVhUX21pbm1h eF9vcHMpIFdJVEggKFBBR0VTX1BFUl9SQU5HRSA9IDIpOworU0VMRUNUIGJyaW5faW5kZXhfY2hl Y2soJ2JyaW50ZXN0X2lkeCc6OlJFR0NMQVNTKTsKKyBicmluX2luZGV4X2NoZWNrIAorLS0tLS0t LS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKKy0tIGNsZWFudXAKK0RST1AgVEFCTEUgYnJpbnRl c3Q7CistLSBtaW5fbWF4IG9wY2xhc3MKK0NSRUFURSBUQUJMRSBicmludGVzdCAoYSBCSUdJTlQp IFdJVEggKEZJTExGQUNUT1IgPSAxMCk7CitDUkVBVEUgSU5ERVggYnJpbnRlc3RfaWR4IE9OIGJy aW50ZXN0IFVTSU5HIEJSSU4gKGEgaW50OF9taW5tYXhfb3BzKSBXSVRIIChQQUdFU19QRVJfUkFO R0UgPSAyKTsKK0lOU0VSVCBJTlRPIGJyaW50ZXN0IChhKSBTRUxFQ1QgeCBGUk9NIGdlbmVyYXRl X3NlcmllcygxLDEwMDAwMCkgeDsKKy0tIGNyZWF0ZSBzb21lIGVtcHR5IHJhbmdlcworREVMRVRF IEZST00gYnJpbnRlc3QgV0hFUkUgYSA+IDIwMDAwIEFORCBhIDwgNDAwMDA7CitTRUxFQ1QgYnJp bl9pbmRleF9jaGVjaygnYnJpbnRlc3RfaWR4Jzo6UkVHQ0xBU1MsIHRydWUpOworIGJyaW5faW5k ZXhfY2hlY2sgCistLS0tLS0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworLS0gcmVidWlsZCBp bmRleAorRFJPUCBJTkRFWCBicmludGVzdF9pZHg7CitDUkVBVEUgSU5ERVggYnJpbnRlc3RfaWR4 IE9OIGJyaW50ZXN0IFVTSU5HIEJSSU4gKGEgaW50OF9taW5tYXhfb3BzKSBXSVRIIChQQUdFU19Q RVJfUkFOR0UgPSAyKTsKK1NFTEVDVCBicmluX2luZGV4X2NoZWNrKCdicmludGVzdF9pZHgnOjpS RUdDTEFTUywgdHJ1ZSk7CisgYnJpbl9pbmRleF9jaGVjayAKKy0tLS0tLS0tLS0tLS0tLS0tLQor IAorKDEgcm93KQorCistLSBjbGVhbnVwCitEUk9QIFRBQkxFIGJyaW50ZXN0OworLS0gbXVsdGlf bWluX21heCBvcGNsYXNzCitDUkVBVEUgVEFCTEUgYnJpbnRlc3QgKGEgQklHSU5UKSBXSVRIIChG SUxMRkFDVE9SID0gMTApOworQ1JFQVRFIElOREVYIGJyaW50ZXN0X2lkeCBPTiBicmludGVzdCBV U0lORyBCUklOIChhIGludDhfbWlubWF4X211bHRpX29wcykgV0lUSCAoUEFHRVNfUEVSX1JBTkdF ID0gMik7CitJTlNFUlQgSU5UTyBicmludGVzdCAoYSkgU0VMRUNUIHggRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoMSwxMDAwMDApIHg7CistLSBjcmVhdGUgc29tZSBlbXB0eSByYW5nZXMKK0RFTEVURSBG Uk9NIGJyaW50ZXN0IFdIRVJFIGEgPiAyMDAwMCBBTkQgYSA8IDQwMDAwOworU0VMRUNUIGJyaW5f aW5kZXhfY2hlY2soJ2JyaW50ZXN0X2lkeCc6OlJFR0NMQVNTLCB0cnVlKTsKKyBicmluX2luZGV4 X2NoZWNrIAorLS0tLS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKKy0tIHJlYnVpbGQgaW5k ZXgKK0RST1AgSU5ERVggYnJpbnRlc3RfaWR4OworQ1JFQVRFIElOREVYIGJyaW50ZXN0X2lkeCBP TiBicmludGVzdCBVU0lORyBCUklOIChhIGludDhfbWlubWF4X211bHRpX29wcykgV0lUSCAoUEFH RVNfUEVSX1JBTkdFID0gMik7CitTRUxFQ1QgYnJpbl9pbmRleF9jaGVjaygnYnJpbnRlc3RfaWR4 Jzo6UkVHQ0xBU1MsIHRydWUpOworIGJyaW5faW5kZXhfY2hlY2sgCistLS0tLS0tLS0tLS0tLS0t LS0KKyAKKygxIHJvdykKKworLS0gY2xlYW51cAorRFJPUCBUQUJMRSBicmludGVzdDsKKy0tIGJs b29tIG9wY2xhc3MKK0NSRUFURSBUQUJMRSBicmludGVzdCAoYSBCSUdJTlQpIFdJVEggKEZJTExG QUNUT1IgPSAxMCk7CitDUkVBVEUgSU5ERVggYnJpbnRlc3RfaWR4IE9OIGJyaW50ZXN0IFVTSU5H IEJSSU4gKGEgaW50OF9ibG9vbV9vcHMpIFdJVEggKFBBR0VTX1BFUl9SQU5HRSA9IDIpOworSU5T RVJUIElOVE8gYnJpbnRlc3QgKGEpIFNFTEVDVCB4IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAw MDAwKSB4OworLS0gY3JlYXRlIHNvbWUgZW1wdHkgcmFuZ2VzCitERUxFVEUgRlJPTSBicmludGVz dCBXSEVSRSBhID4gMjAwMDAgQU5EIGEgPCA0MDAwMDsKK1NFTEVDVCBicmluX2luZGV4X2NoZWNr KCdicmludGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSk7CisgYnJpbl9pbmRleF9jaGVjayAKKy0t LS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCistLSByZWJ1aWxkIGluZGV4CitEUk9QIElO REVYIGJyaW50ZXN0X2lkeDsKK0NSRUFURSBJTkRFWCBicmludGVzdF9pZHggT04gYnJpbnRlc3Qg VVNJTkcgQlJJTiAoYSBpbnQ4X2Jsb29tX29wcykgV0lUSCAoUEFHRVNfUEVSX1JBTkdFID0gMik7 CitTRUxFQ1QgYnJpbl9pbmRleF9jaGVjaygnYnJpbnRlc3RfaWR4Jzo6UkVHQ0xBU1MsIHRydWUp OworIGJyaW5faW5kZXhfY2hlY2sgCistLS0tLS0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKwor LS0gY2xlYW51cAorRFJPUCBUQUJMRSBicmludGVzdDsKKy0tIGluY2x1c2lvbiBvcGNsYXNzCitD UkVBVEUgVEFCTEUgYnJpbnRlc3QgKGlkIFNFUklBTCBQUklNQVJZIEtFWSwgYSBCT1gpOworQ1JF QVRFIElOREVYIGJyaW50ZXN0X2lkeCBPTiBicmludGVzdCBVU0lORyBCUklOIChhIEJPWF9JTkNM VVNJT05fT1BTKSBXSVRIIChQQUdFU19QRVJfUkFOR0UgPSAyKTsKK0lOU0VSVCBJTlRPIGJyaW50 ZXN0IChhKQorU0VMRUNUIEJPWChwb2ludChyYW5kb20oKSAqIDEwMDAsIHJhbmRvbSgpICogMTAw MCksIHBvaW50KHJhbmRvbSgpICogMTAwMCwgcmFuZG9tKCkgKiAxMDAwKSkKK0ZST00gZ2VuZXJh dGVfc2VyaWVzKDEsIDEwMDAwKTsKKy0tIGNyZWF0ZSBzb21lIGVtcHR5IHJhbmdlcworREVMRVRF IEZST00gYnJpbnRlc3QgV0hFUkUgaWQgPiAyMDAwIEFORCBpZCA8IDQwMDA7CitTRUxFQ1QgYnJp bl9pbmRleF9jaGVjaygnYnJpbnRlc3RfaWR4Jzo6UkVHQ0xBU1MsIHRydWUpOworIGJyaW5faW5k ZXhfY2hlY2sgCistLS0tLS0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworLS0gcmVidWlsZCBp bmRleAorRFJPUCBJTkRFWCBicmludGVzdF9pZHg7CitDUkVBVEUgSU5ERVggYnJpbnRlc3RfaWR4 IE9OIGJyaW50ZXN0IFVTSU5HIEJSSU4gKGEgQk9YX0lOQ0xVU0lPTl9PUFMpIFdJVEggKFBBR0VT X1BFUl9SQU5HRSA9IDIpOworU0VMRUNUIGJyaW5faW5kZXhfY2hlY2soJ2JyaW50ZXN0X2lkeCc6 OlJFR0NMQVNTLCB0cnVlKTsKKyBicmluX2luZGV4X2NoZWNrIAorLS0tLS0tLS0tLS0tLS0tLS0t CisgCisoMSByb3cpCisKKy0tIGNsZWFudXAKK0RST1AgVEFCTEUgYnJpbnRlc3Q7CistLSBjbGVh bnVwCitEUk9QIEZVTkNUSU9OIHJhbmRvbV9zdHJpbmc7CmRpZmYgLS1naXQgYS9jb250cmliL2Ft Y2hlY2svbWVzb24uYnVpbGQgYi9jb250cmliL2FtY2hlY2svbWVzb24uYnVpbGQKaW5kZXggMWYw YzM0N2VkNTQuLmJhODE2YzJmYWYwIDEwMDY0NAotLS0gYS9jb250cmliL2FtY2hlY2svbWVzb24u YnVpbGQKKysrIGIvY29udHJpYi9hbWNoZWNrL21lc29uLmJ1aWxkCkBAIC01LDYgKzUsNyBAQCBh bWNoZWNrX3NvdXJjZXMgPSBmaWxlcygKICAgJ3ZlcmlmeV9naW4uYycsCiAgICd2ZXJpZnlfaGVh cGFtLmMnLAogICAndmVyaWZ5X25idHJlZS5jJywKKyAgJ3ZlcmlmeV9icmluLmMnCiApCiAKIGlm IGhvc3Rfc3lzdGVtID09ICd3aW5kb3dzJwpAQCAtMjcsNiArMjgsNyBAQCBpbnN0YWxsX2RhdGEo CiAgICdhbWNoZWNrLS0xLjItLTEuMy5zcWwnLAogICAnYW1jaGVjay0tMS4zLS0xLjQuc3FsJywK ICAgJ2FtY2hlY2stLTEuNC0tMS41LnNxbCcsCisgICdhbWNoZWNrLS0xLjUtLTEuNi5zcWwnLAog ICBrd2FyZ3M6IGNvbnRyaWJfZGF0YV9hcmdzLAogKQogCkBAIC00MCw2ICs0Miw3IEBAIHRlc3Rz ICs9IHsKICAgICAgICdjaGVja19idHJlZScsCiAgICAgICAnY2hlY2tfZ2luJywKICAgICAgICdj aGVja19oZWFwJywKKyAgICAgICdjaGVja19icmluJwogICAgIF0sCiAgIH0sCiAgICd0YXAnOiB7 CkBAIC01MCw2ICs1Myw3IEBAIHRlc3RzICs9IHsKICAgICAgICd0LzAwNF92ZXJpZnlfbmJ0cmVl X3VuaXF1ZS5wbCcsCiAgICAgICAndC8wMDVfcGl0ci5wbCcsCiAgICAgICAndC8wMDZfdmVyaWZ5 X2dpbi5wbCcsCisgICAgICAndC8wMDdfdmVyaWZ5X2JyaW4ucGwnLAogICAgIF0sCiAgIH0sCiB9 CmRpZmYgLS1naXQgYS9jb250cmliL2FtY2hlY2svc3FsL2NoZWNrX2JyaW4uc3FsIGIvY29udHJp Yi9hbWNoZWNrL3NxbC9jaGVja19icmluLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMC4uMGE1ZTI2ZWE4ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2FtY2hl Y2svc3FsL2NoZWNrX2JyaW4uc3FsCkBAIC0wLDAgKzEsMTAyIEBACistLSBoZWxwZXIgZnVuYwor Q1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gIHJhbmRvbV9zdHJpbmcoIElOVCApIFJFVFVSTlMg VEVYVCBBUyAkJAorU0VMRUNUIHN0cmluZ19hZ2coc3Vic3RyaW5nKCcwMTIzNDU2Nzg5YWJjZGVm Z2hpamtsbW5vcHFyc3R1dnd4eXonLCBjZWlsKHJhbmRvbSgpICogMzYpOjpJTlRFR0VSLCAxKSwg JycpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsICQxKTsKKyQkIExBTkdVQUdFIHNxbDsKKworCist LSBlbXB0eSB0YWJsZSBpbmRleCBzaG91bGQgYmUgdmFsaWQKK0NSRUFURSBUQUJMRSBicmludGVz dCAoYSBCSUdJTlQpIFdJVEggKEZJTExGQUNUT1IgPSAxMCk7CitDUkVBVEUgSU5ERVggYnJpbnRl c3RfaWR4IE9OIGJyaW50ZXN0IFVTSU5HIEJSSU4gKGEpOworU0VMRUNUIGJyaW5faW5kZXhfY2hl Y2soJ2JyaW50ZXN0X2lkeCc6OlJFR0NMQVNTLCB0cnVlKTsKKy0tIGNsZWFudXAKK0RST1AgVEFC TEUgYnJpbnRlc3Q7CisKKworLS0gbXVsdGkgYXR0cmlidXRlcyB3aXRoIHZhcmxlbmEgYXR0cmli dXRlIHRlc3QKK0NSRUFURSBUQUJMRSBicmludGVzdCAoaWQgQklHU0VSSUFMLCBhIFRFWFQpIFdJ VEggKEZJTExGQUNUT1IgPSAxMCk7CitDUkVBVEUgSU5ERVggYnJpbnRlc3RfaWR4IE9OIGJyaW50 ZXN0IFVTSU5HIEJSSU4gKGEgVEVYVF9taW5tYXhfb3BzLCBpZCBpbnQ4X21pbm1heF9vcHMpIFdJ VEggKFBBR0VTX1BFUl9SQU5HRSA9IDIpOworSU5TRVJUIElOVE8gYnJpbnRlc3QgKGEpIFNFTEVD VCByYW5kb21fc3RyaW5nKCh4ICUgMTAwKSkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSw1MDAwKSB4 OworLS0gY3JlYXRlIHNvbWUgZW1wdHkgcmFuZ2VzCitERUxFVEUgRlJPTSBicmludGVzdCBXSEVS RSBpZCA+IDIwMDAgQU5EIGlkIDwgNDAwMDsKK1NFTEVDVCBicmluX2luZGV4X2NoZWNrKCdicmlu dGVzdF9pZHgnOjpSRUdDTEFTUyk7CisKKy0tIHJlYnVpbGQgaW5kZXgKK0RST1AgSU5ERVggYnJp bnRlc3RfaWR4OworQ1JFQVRFIElOREVYIGJyaW50ZXN0X2lkeCBPTiBicmludGVzdCBVU0lORyBC UklOIChhIFRFWFRfbWlubWF4X29wcykgV0lUSCAoUEFHRVNfUEVSX1JBTkdFID0gMik7CitTRUxF Q1QgYnJpbl9pbmRleF9jaGVjaygnYnJpbnRlc3RfaWR4Jzo6UkVHQ0xBU1MpOworLS0gY2xlYW51 cAorRFJPUCBUQUJMRSBicmludGVzdDsKKworCisKKy0tIG1pbl9tYXggb3BjbGFzcworQ1JFQVRF IFRBQkxFIGJyaW50ZXN0IChhIEJJR0lOVCkgV0lUSCAoRklMTEZBQ1RPUiA9IDEwKTsKK0NSRUFU RSBJTkRFWCBicmludGVzdF9pZHggT04gYnJpbnRlc3QgVVNJTkcgQlJJTiAoYSBpbnQ4X21pbm1h eF9vcHMpIFdJVEggKFBBR0VTX1BFUl9SQU5HRSA9IDIpOworSU5TRVJUIElOVE8gYnJpbnRlc3Qg KGEpIFNFTEVDVCB4IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDAwKSB4OworLS0gY3JlYXRl IHNvbWUgZW1wdHkgcmFuZ2VzCitERUxFVEUgRlJPTSBicmludGVzdCBXSEVSRSBhID4gMjAwMDAg QU5EIGEgPCA0MDAwMDsKK1NFTEVDVCBicmluX2luZGV4X2NoZWNrKCdicmludGVzdF9pZHgnOjpS RUdDTEFTUywgdHJ1ZSk7CisKKy0tIHJlYnVpbGQgaW5kZXgKK0RST1AgSU5ERVggYnJpbnRlc3Rf aWR4OworQ1JFQVRFIElOREVYIGJyaW50ZXN0X2lkeCBPTiBicmludGVzdCBVU0lORyBCUklOIChh IGludDhfbWlubWF4X29wcykgV0lUSCAoUEFHRVNfUEVSX1JBTkdFID0gMik7CitTRUxFQ1QgYnJp bl9pbmRleF9jaGVjaygnYnJpbnRlc3RfaWR4Jzo6UkVHQ0xBU1MsIHRydWUpOworLS0gY2xlYW51 cAorRFJPUCBUQUJMRSBicmludGVzdDsKKworCisKKy0tIG11bHRpX21pbl9tYXggb3BjbGFzcwor Q1JFQVRFIFRBQkxFIGJyaW50ZXN0IChhIEJJR0lOVCkgV0lUSCAoRklMTEZBQ1RPUiA9IDEwKTsK K0NSRUFURSBJTkRFWCBicmludGVzdF9pZHggT04gYnJpbnRlc3QgVVNJTkcgQlJJTiAoYSBpbnQ4 X21pbm1heF9tdWx0aV9vcHMpIFdJVEggKFBBR0VTX1BFUl9SQU5HRSA9IDIpOworSU5TRVJUIElO VE8gYnJpbnRlc3QgKGEpIFNFTEVDVCB4IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDAwKSB4 OworLS0gY3JlYXRlIHNvbWUgZW1wdHkgcmFuZ2VzCitERUxFVEUgRlJPTSBicmludGVzdCBXSEVS RSBhID4gMjAwMDAgQU5EIGEgPCA0MDAwMDsKK1NFTEVDVCBicmluX2luZGV4X2NoZWNrKCdicmlu dGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSk7CisKKy0tIHJlYnVpbGQgaW5kZXgKK0RST1AgSU5E RVggYnJpbnRlc3RfaWR4OworQ1JFQVRFIElOREVYIGJyaW50ZXN0X2lkeCBPTiBicmludGVzdCBV U0lORyBCUklOIChhIGludDhfbWlubWF4X211bHRpX29wcykgV0lUSCAoUEFHRVNfUEVSX1JBTkdF ID0gMik7CitTRUxFQ1QgYnJpbl9pbmRleF9jaGVjaygnYnJpbnRlc3RfaWR4Jzo6UkVHQ0xBU1Ms IHRydWUpOworLS0gY2xlYW51cAorRFJPUCBUQUJMRSBicmludGVzdDsKKworCisKKy0tIGJsb29t IG9wY2xhc3MKK0NSRUFURSBUQUJMRSBicmludGVzdCAoYSBCSUdJTlQpIFdJVEggKEZJTExGQUNU T1IgPSAxMCk7CitDUkVBVEUgSU5ERVggYnJpbnRlc3RfaWR4IE9OIGJyaW50ZXN0IFVTSU5HIEJS SU4gKGEgaW50OF9ibG9vbV9vcHMpIFdJVEggKFBBR0VTX1BFUl9SQU5HRSA9IDIpOworSU5TRVJU IElOVE8gYnJpbnRlc3QgKGEpIFNFTEVDVCB4IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDAw KSB4OworLS0gY3JlYXRlIHNvbWUgZW1wdHkgcmFuZ2VzCitERUxFVEUgRlJPTSBicmludGVzdCBX SEVSRSBhID4gMjAwMDAgQU5EIGEgPCA0MDAwMDsKK1NFTEVDVCBicmluX2luZGV4X2NoZWNrKCdi cmludGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSk7CisKKy0tIHJlYnVpbGQgaW5kZXgKK0RST1Ag SU5ERVggYnJpbnRlc3RfaWR4OworQ1JFQVRFIElOREVYIGJyaW50ZXN0X2lkeCBPTiBicmludGVz dCBVU0lORyBCUklOIChhIGludDhfYmxvb21fb3BzKSBXSVRIIChQQUdFU19QRVJfUkFOR0UgPSAy KTsKK1NFTEVDVCBicmluX2luZGV4X2NoZWNrKCdicmludGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1 ZSk7CistLSBjbGVhbnVwCitEUk9QIFRBQkxFIGJyaW50ZXN0OworCisKKy0tIGluY2x1c2lvbiBv cGNsYXNzCitDUkVBVEUgVEFCTEUgYnJpbnRlc3QgKGlkIFNFUklBTCBQUklNQVJZIEtFWSwgYSBC T1gpOworQ1JFQVRFIElOREVYIGJyaW50ZXN0X2lkeCBPTiBicmludGVzdCBVU0lORyBCUklOIChh IEJPWF9JTkNMVVNJT05fT1BTKSBXSVRIIChQQUdFU19QRVJfUkFOR0UgPSAyKTsKK0lOU0VSVCBJ TlRPIGJyaW50ZXN0IChhKQorU0VMRUNUIEJPWChwb2ludChyYW5kb20oKSAqIDEwMDAsIHJhbmRv bSgpICogMTAwMCksIHBvaW50KHJhbmRvbSgpICogMTAwMCwgcmFuZG9tKCkgKiAxMDAwKSkKK0ZS T00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMDAwKTsKKy0tIGNyZWF0ZSBzb21lIGVtcHR5IHJhbmdl cworREVMRVRFIEZST00gYnJpbnRlc3QgV0hFUkUgaWQgPiAyMDAwIEFORCBpZCA8IDQwMDA7CisK K1NFTEVDVCBicmluX2luZGV4X2NoZWNrKCdicmludGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSk7 CisKKy0tIHJlYnVpbGQgaW5kZXgKK0RST1AgSU5ERVggYnJpbnRlc3RfaWR4OworQ1JFQVRFIElO REVYIGJyaW50ZXN0X2lkeCBPTiBicmludGVzdCBVU0lORyBCUklOIChhIEJPWF9JTkNMVVNJT05f T1BTKSBXSVRIIChQQUdFU19QRVJfUkFOR0UgPSAyKTsKK1NFTEVDVCBicmluX2luZGV4X2NoZWNr KCdicmludGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSk7CistLSBjbGVhbnVwCitEUk9QIFRBQkxF IGJyaW50ZXN0OworCisKKy0tIGNsZWFudXAKK0RST1AgRlVOQ1RJT04gcmFuZG9tX3N0cmluZzsK XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb250cmliL2FtY2hlY2sv dC8wMDdfdmVyaWZ5X2JyaW4ucGwgYi9jb250cmliL2FtY2hlY2svdC8wMDdfdmVyaWZ5X2JyaW4u cGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjJjNjJiNzZjYzcwCi0t LSAvZGV2L251bGwKKysrIGIvY29udHJpYi9hbWNoZWNrL3QvMDA3X3ZlcmlmeV9icmluLnBsCkBA IC0wLDAgKzEsMjkxIEBACisjIENvcHlyaWdodCAoYykgMjAyMS0yMDI1LCBQb3N0Z3JlU1FMIEds b2JhbCBEZXZlbG9wbWVudCBHcm91cAorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzIEZBVEFM ID0+ICdhbGwnOworCit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3Jl U1FMOjpUZXN0OjpVdGlsczsKKwordXNlIFRlc3Q6Ok1vcmU7CisKK215ICRub2RlOworbXkgJGJs a3NpemU7CitteSAkbWV0YV9wYWdlX2Jsa25vID0gMDsKKworIworIyBUZXN0IHNldC11cAorIwor JG5vZGUgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3Rlc3QnKTsKKyRub2RlLT5p bml0KG5vX2RhdGFfY2hlY2tzdW1zID0+IDEpOworJG5vZGUtPmFwcGVuZF9jb25mKCdwb3N0Z3Jl c3FsLmNvbmYnLCAnYXV0b3ZhY3V1bT1vZmYnKTsKKyRub2RlLT5zdGFydDsKKyRibGtzaXplID0g aW50KCRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJ1NIT1cgYmxvY2tfc2l6ZTsnKSk7Cisk bm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHEoQ1JFQVRFIEVYVEVOU0lPTiBhbWNoZWNrKSk7 CisKKyMgVGVzdHMKK215IEB0ZXN0cyA9ICgKKyAgICB7CisgICAgICAgICMgaW52YWxpZCBtZXRh IHBhZ2UgdHlwZQorCisgICAgICAgIGZpbmQgICAgID0+IHBhY2soJ1MnLCAweEYwOTEpLAorICAg ICAgICByZXBsYWNlICA9PiBwYWNrKCdTJywgMHhBQUFBKSwKKyAgICAgICAgYmxrbm8gICAgPT4g JG1ldGFfcGFnZV9ibGtubywKKyAgICAgICAgZXhwZWN0ZWQgPT4gd3JhcCgnbWV0YXBhZ2UgaXMg Y29ycnVwdGVkJykKKyAgICB9LAorICAgIHsKKyAgICAgICAgIyBpbnZhbGlkIG1ldGEgcGFnZSBt YWdpYyB3b3JkCisKKyAgICAgICAgZmluZCAgICAgPT4gcGFjaygnTCcsIDB4QTgxMDlDRkEpLAor ICAgICAgICByZXBsYWNlICA9PiBwYWNrKCdMJywgMHhCQjEwOUNGQiksCisgICAgICAgIGJsa25v ICAgID0+ICRtZXRhX3BhZ2VfYmxrbm8sCisgICAgICAgIGV4cGVjdGVkID0+IHdyYXAoJ21ldGFw YWdlIGlzIGNvcnJ1cHRlZCcpLAorICAgIH0sCisgICAgeworICAgICAgICAjIGludmFsaWQgbWV0 YSBwYWdlIGluZGV4IHZlcnNpb24KKworICAgICAgICBmaW5kICAgICA9PiBwYWNrKCdMKicsIDB4 QTgxMDlDRkEsIDEpLAorICAgICAgICByZXBsYWNlICA9PiBwYWNrKCdMKicsIDB4QTgxMDlDRkEs IDIpLAorICAgICAgICBibGtubyAgICA9PiAkbWV0YV9wYWdlX2Jsa25vLAorICAgICAgICBleHBl Y3RlZCA9PiB3cmFwKCdtZXRhcGFnZSBpcyBjb3JydXB0ZWQnKQorICAgIH0sCisgICAgeworICAg ICAgICAjIHBhZ2VzX3Blcl9yYW5nZSBiZWxvdyBsb3dlciBsaW1pdAorCisgICAgICAgIGZpbmQg ICAgID0+IHBhY2soJ0wqJywgMHhBODEwOUNGQSwgMSwgMTI4KSwKKyAgICAgICAgcmVwbGFjZSAg PT4gcGFjaygnTConLCAweEE4MTA5Q0ZBLCAxLCAwKSwKKyAgICAgICAgYmxrbm8gICAgPT4gJG1l dGFfcGFnZV9ibGtubywKKyAgICAgICAgZXhwZWN0ZWQgPT4gd3JhcCgnbWV0YXBhZ2UgaXMgY29y cnVwdGVkJykKKyAgICB9LAorICAgIHsKKyAgICAgICAgIyBwYWdlc19wZXJfcmFuZ2UgYWJvdmUg dXBwZXIgbGltaXQKKworICAgICAgICBmaW5kICAgICA9PiBwYWNrKCdMKicsIDB4QTgxMDlDRkEs IDEsIDEyOCksCisgICAgICAgIHJlcGxhY2UgID0+IHBhY2soJ0wqJywgMHhBODEwOUNGQSwgMSwg MTMxMDczKSwKKyAgICAgICAgYmxrbm8gICAgPT4gJG1ldGFfcGFnZV9ibGtubywKKyAgICAgICAg ZXhwZWN0ZWQgPT4gd3JhcCgnbWV0YXBhZ2UgaXMgY29ycnVwdGVkJykKKyAgICB9LAorICAgIHsK KyAgICAgICAgIyBsYXN0X3Jldm1hcF9wYWdlIGJlbG93IGxvd2VyIGxpbWl0CisKKyAgICAgICAg ZmluZCAgICAgPT4gcGFjaygnTConLCAweEE4MTA5Q0ZBLCAxLCAxMjgsIDEpLAorICAgICAgICBy ZXBsYWNlICA9PiBwYWNrKCdMKicsIDB4QTgxMDlDRkEsIDEsIDEyOCwgMCksCisgICAgICAgIGJs a25vICAgID0+ICRtZXRhX3BhZ2VfYmxrbm8sCisgICAgICAgIGV4cGVjdGVkID0+IHdyYXAoJ21l dGFwYWdlIGlzIGNvcnJ1cHRlZCcpLAorICAgIH0sCisgICAgeworCisgICAgICAgICMgbGFzdF9y ZXZtYXBfcGFnZSBiZXlvbmQgaW5kZXggcmVsYXRpb24gc2l6ZQorCisgICAgICAgIGZpbmQgICAg ID0+IHBhY2soJ0wqJywgMHhBODEwOUNGQSwgMSwgMTI4LCAxKSwKKyAgICAgICAgcmVwbGFjZSAg PT4gcGFjaygnTConLCAweEE4MTA5Q0ZBLCAxLCAxMjgsIDEwMCksCisgICAgICAgIGJsa25vICAg ID0+ICRtZXRhX3BhZ2VfYmxrbm8sCisgICAgICAgIGV4cGVjdGVkID0+IHdyYXAoJ21ldGFwYWdl IGlzIGNvcnJ1cHRlZCcpLAorICAgIH0sCisgICAgeworICAgICAgICAjIGludmFsaWQgcmV2bWFw IHBhZ2UgdHlwZQorCisgICAgICAgIGZpbmQgICAgID0+IHBhY2soJ1MnLCAweEYwOTIpLAorICAg ICAgICByZXBsYWNlICA9PiBwYWNrKCdTJywgMHhBQUFBKSwKKyAgICAgICAgYmxrbm8gICAgPT4g MSwgIyByZXZtYXAgcGFnZQorICAgICAgICBleHBlY3RlZCA9PiB3cmFwKCdyZXZtYXAgcGFnZSBp cyBleHBlY3RlZCBhdCBibG9jayAxLCBsYXN0IHJldm1hcCBwYWdlIDEnKSwKKyAgICB9LAorICAg IHsKKyAgICAgICAgIyByZXZtYXAgaXRlbSBwb2ludHMgYmV5b25kIGluZGV4IHJlbGF0aW9uIHNp emUKKyAgICAgICAgIyByZXBsYWNlICgyLDEpIHdpdGggKDEwMCwxKQorCisgICAgICAgIGZpbmQg ICAgID0+IHBhY2soJ1MqJywgMCwgMiwgMSksCisgICAgICAgIHJlcGxhY2UgID0+IHBhY2soJ1Mq JywgMCwgMTAwLCAxKSwKKyAgICAgICAgYmxrbm8gICAgPT4gMSwgIyByZXZtYXAgcGFnZQorICAg ICAgICBleHBlY3RlZCA9PiB3cmFwKCdyZXZtYXAgaXRlbSBwb2ludHMgdG8gYSBub24gZXhpc3Rp bmcgYmxvY2sgMTAwLCAnCisgICAgICAgICAgICAuICdpbmRleCBtYXggYmxvY2sgMi4gUmFuZ2Ug Ymxrbm86IDAsIHJldm1hcCBpdGVtOiAoMSwwKScpCisgICAgfSwKKyAgICB7CisgICAgICAgICMg aW52YWxpZCByZWd1bGFyIHBhZ2UgdHlwZQorCisgICAgICAgIGZpbmQgICAgID0+IHBhY2soJ1Mn LCAweEYwOTMpLAorICAgICAgICByZXBsYWNlICA9PiBwYWNrKCdTJywgMHhBQUFBKSwKKyAgICAg ICAgYmxrbm8gICAgPT4gMiwgIyByZWd1bGFyIHBhZ2UKKyAgICAgICAgZXhwZWN0ZWQgPT4gd3Jh cCgncmV2bWFwIGl0ZW0gcG9pbnRzIHRvIHRoZSBwYWdlIHdoaWNoIGlzIG5vdCByZWd1bGFyIChi bGtubzogMikuICcKKyAgICAgICAgICAgIC4gJ1JhbmdlIGJsa25vOiAwLCByZXZtYXAgaXRlbTog KDEsMCknKQorICAgIH0sCisgICAgeworICAgICAgICAjIHJldm1hcCBpdGVtIHBvaW50cyBiZXlv bmQgcmVndWxhciBwYWdlIG1heCBvZmZzZXQKKyAgICAgICAgIyByZXBsYWNlICgyLDEpIHdpdGgg KDIsMikKKworICAgICAgICBmaW5kICAgICA9PiBwYWNrKCdTKicsIDAsIDIsIDEpLAorICAgICAg ICByZXBsYWNlICA9PiBwYWNrKCdTKicsIDAsIDIsIDIpLAorICAgICAgICBibGtubyAgICA9PiAx LCAjIHJldm1hcCBwYWdlCisgICAgICAgIGV4cGVjdGVkID0+IHdyYXAoJ3Jldm1hcCBpdGVtIG9m ZnNldCBudW1iZXIgMiBpcyBncmVhdGVyIHRoYW4gcmVndWxhciBwYWdlIDIgbWF4IG9mZnNldCAx LiAnCisgICAgICAgICAgICAuICdSYW5nZSBibGtubzogMCwgcmV2bWFwIGl0ZW06ICgxLDApJykK KyAgICB9LAorICAgIHsKKyAgICAgICAgIyBpbnZhbGlkIGluZGV4IHR1cGxlIHJhbmdlIGJsa25v CisKKyAgICAgICAgZmluZCAgICAgPT4gcGFjaygnTENDJywgMCwgMHhBOCwgMHgwMSksCisgICAg ICAgIHJlcGxhY2UgID0+IHBhY2soJ0xDQycsIDEsIDB4QTgsIDB4MDEpLAorICAgICAgICBibGtu byAgICA9PiAyLCAjIHJlZ3VsYXIgcGFnZQorICAgICAgICBleHBlY3RlZCA9PiB3cmFwKCdpbmRl eCB0dXBsZSBoYXMgaW52YWxpZCBibGtubyAxLiBSYW5nZSBibGtubzogMCwgcmV2bWFwIGl0ZW06 ICgxLDApLCBpbmRleCB0dXBsZTogKDIsMSknKQorICAgIH0sCisgICAgeworICAgICAgICAjIHJh bmdlIGJleW9uZCB0aGUgdGFibGUgc2l6ZSBhbmQgaXMgbm90IGVtcHR5CisKKyAgICAgICAgZmlu ZCAgICAgPT4gcGFjaygnTENDJywgMCwgMHhBOCwgMHgwMSksCisgICAgICAgIHJlcGxhY2UgID0+ IHBhY2soJ0xDQycsIDAsIDB4ODgsIDB4MDEpLAorICAgICAgICBibGtubyAgICA9PiAyLCAjIHJl Z3VsYXIgcGFnZQorICAgICAgICBleHBlY3RlZCA9PiB3cmFwKCd0aGUgcmFuZ2UgaXMgYmV5b25k IHRoZSB0YWJsZSBzaXplLCBidXQgaXMgbm90IG1hcmtlZCBhcyBlbXB0eSwgdGFibGUgc2l6ZTog MCBibG9ja3MuICcKKyAgICAgICAgICAgIC4gJ1JhbmdlIGJsa25vOiAwLCByZXZtYXAgaXRlbTog KDEsMCksIGluZGV4IHR1cGxlOiAoMiwxKScpCisgICAgfSwKKyAgICB7CisgICAgICAgICMgY29y cnVwdCBpbmRleCB0dXBsZSBkYXRhIG9mZnNldAorICAgICAgICAjIGhlcmUgIDB4MDAsIDB4MDAs IDB4MDAgaXMgcGFkZGluZyBhbmQgJy4nIGlzIHZhcmxlbmEgbGVuIGJ5dGUKKworICAgICAgICBm aW5kICAgICAgID0+IHBhY2soJ0xDQ0NDJywgMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCkgLiAn KC4pJyAuICdhYWFhYScsCisgICAgICAgIHJlcGxhY2UgICAgPT4gcGFjaygnTENDQ0MnLCAwLCAw eDFGLCAweDAwLCAweDAwLCAweDAwKSAuICckMScgLiAnYWFhYWEnLAorICAgICAgICBibGtubyAg ICAgID0+IDIsICMgcmVndWxhciBwYWdlCisgICAgICAgIHRhYmxlX2RhdGEgPT4gc3ViIHsKKyAg ICAgICAgICAgIG15ICgkdGVzdF9zdHJ1Y3QpID0gQF87CisgICAgICAgICAgICByZXR1cm4gcXEo SU5TRVJUIElOVE8gJHRlc3Rfc3RydWN0LT57dGFibGVfbmFtZX0gKGEpIFZBTFVFUyAoJ2FhYWFh Jyk7KTsKKyAgICAgICAgfSwKKyAgICAgICAgZXhwZWN0ZWQgICA9PiBxci9pbmRleCB0dXBsZSBo ZWFkZXIgbGVuZ3RoIDMxIGlzIGdyZWF0ZXIgdGhhbiB0dXBsZSBsZW4gLi5cLiBcUVJhbmdlIGJs a25vOiAwLCByZXZtYXAgaXRlbTogKDEsMCksIGluZGV4IHR1cGxlOiAoMiwxKVxFLworICAgIH0s CisgICAgeworICAgICAgICAjIGVtcHR5IHJhbmdlIGluZGV4IHR1cGxlIGRvZXNuJ3QgaGF2ZSBu dWxsIGJpdG1hcAorCisgICAgICAgIGZpbmQgICAgID0+IHBhY2soJ0xDQycsIDAsIDB4QTgsIDB4 MDEpLAorICAgICAgICByZXBsYWNlICA9PiBwYWNrKCdMQ0MnLCAwLCAweDI4LCAweDAxKSwKKyAg ICAgICAgYmxrbm8gICAgPT4gMiwgIyByZWd1bGFyIHBhZ2UKKyAgICAgICAgZXhwZWN0ZWQgPT4g d3JhcCgnZW1wdHkgcmFuZ2UgaW5kZXggdHVwbGUgZG9lc25cJ3QgaGF2ZSBudWxsIGJpdG1hcC4g JworICAgICAgICAgICAgLiAnUmFuZ2UgYmxrbm86IDAsIHJldm1hcCBpdGVtOiAoMSwwKSwgaW5k ZXggdHVwbGU6ICgyLDEpJykKKyAgICB9LAorICAgIHsKKyAgICAgICAgIyBlbXB0eSByYW5nZSBp bmRleCB0dXBsZSBhbGxfbnVsbHMgLT4gZmFsc2UKKworICAgICAgICBmaW5kICAgICA9PiBwYWNr KCdMQ0MnLCAwLCAweEE4LCAweDAxKSwKKyAgICAgICAgcmVwbGFjZSAgPT4gcGFjaygnTENDJywg MCwgMHhBOCwgMHgwMCksCisgICAgICAgIGJsa25vICAgID0+IDIsICMgcmVndWxhciBwYWdlCisg ICAgICAgIGV4cGVjdGVkID0+IHdyYXAoJ2VtcHR5IHJhbmdlIGluZGV4IHR1cGxlIGF0dHJpYnV0 ZSAwIHdpdGggYWxsbnVsbHMgaXMgZmFsc2UuICcKKyAgICAgICAgICAgIC4gJ1JhbmdlIGJsa25v OiAwLCByZXZtYXAgaXRlbTogKDEsMCksIGluZGV4IHR1cGxlOiAoMiwxKScpCisgICAgfSwKKyAg ICB7CisgICAgICAgICMgZW1wdHkgcmFuZ2UgaW5kZXggdHVwbGUgaGFzX251bGxzIC0+IHRydWUK KworICAgICAgICBmaW5kICAgICA9PiBwYWNrKCdMQ0MnLCAwLCAweEE4LCAweDAxKSwKKyAgICAg ICAgcmVwbGFjZSAgPT4gcGFjaygnTENDJywgMCwgMHhBOCwgMHgwMyksCisgICAgICAgIGJsa25v ICAgID0+IDIsICMgcmVndWxhciBwYWdlCisgICAgICAgIGV4cGVjdGVkID0+IHdyYXAoJ2VtcHR5 IHJhbmdlIGluZGV4IHR1cGxlIGF0dHJpYnV0ZSAwIHdpdGggaGFzbnVsbHMgaXMgdHJ1ZS4gJwor ICAgICAgICAgICAgLiAnUmFuZ2UgYmxrbm86IDAsIHJldm1hcCBpdGVtOiAoMSwwKSwgaW5kZXgg dHVwbGU6ICgyLDEpJykKKyAgICB9LAorICAgIHsKKyAgICAgICAgIyBpbnZhbGlkIGluZGV4IHR1 cGxlIGRhdGEKKyAgICAgICAgIyByZXBsYWNlIHZhcmxlbmEgbGVuIHdpdGggRkYgLSBzaG91bGQg d29yayB3aXRoIGFueSBlbmRpYW5uZXNzCisKKyAgICAgICAgZmluZCAgICAgICA9PiBwYWNrKCdM Q0NDQycsIDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDApIC4gJy4nIC4gJ2FhYWFhJywKKyAgICAg ICAgcmVwbGFjZSAgICA9PiBwYWNrKCdMQ0NDQ0MnLCAwLCAweDA4LCAweDAwLCAweDAwLCAweDAw LCAweEZGKSAuICdhYWFhYScsCisgICAgICAgIGJsa25vICAgICAgPT4gMiwgIyByZWd1bGFyIHBh Z2UKKyAgICAgICAgdGFibGVfZGF0YSA9PiBzdWIgeworICAgICAgICAgICAgbXkgKCR0ZXN0X3N0 cnVjdCkgPSBAXzsKKyAgICAgICAgICAgIHJldHVybiBxcShJTlNFUlQgSU5UTyAkdGVzdF9zdHJ1 Y3QtPnt0YWJsZV9uYW1lfSAoYSkgVkFMVUVTICgnYWFhYWEnKTspOworICAgICAgICB9LAorICAg ICAgICBleHBlY3RlZCAgID0+IHFyL2F0dHJpYnV0ZSAwIHN0b3JlZCB2YWx1ZSAwIHdpdGggbGVu Z3RoIC0xIGVuZHMgYXQgb2Zmc2V0IDEyNyBiZXlvbmQgdG90YWwgdHVwbGUgbGVuZ3RoIC4uXC5c USBSYW5nZSBibGtubzogMCwgcmV2bWFwIGl0ZW06ICgxLDApLCBpbmRleCB0dXBsZTogKDIsMSlc RS8KKyAgICB9LAorICAgIHsKKyAgICAgICAgIyBvcnBoYW4gaW5kZXggdHVwbGUKKyAgICAgICAg IyByZXBsYWNlIHZhbGlkIHJldm1hcCBpdGVtIHdpdGggKDAsMCkKKworICAgICAgICBmaW5kICAg ICAgID0+IHBhY2soJ1MqJywgMCwgMiwgMSksCisgICAgICAgIHJlcGxhY2UgICAgPT4gcGFjaygn UyonLCAwLCAwLCAwKSwKKyAgICAgICAgYmxrbm8gICAgICA9PiAxLCAjIHJldm1hcCBwYWdlCisg ICAgICAgIHRhYmxlX2RhdGEgPT4gc3ViIHsKKyAgICAgICAgICAgIG15ICgkdGVzdF9zdHJ1Y3Qp ID0gQF87CisgICAgICAgICAgICByZXR1cm4gcXEoSU5TRVJUIElOVE8gJHRlc3Rfc3RydWN0LT57 dGFibGVfbmFtZX0gKGEpIFZBTFVFUyAoJ2FhYWFhJyk7KTsKKyAgICAgICAgfSwKKyAgICAgICAg ZXhwZWN0ZWQgICA9PiB3cmFwKCJyZXZtYXAgZG9lc24ndCBwb2ludCB0byBpbmRleCB0dXBsZS4g UmFuZ2UgYmxrbm86IDAsIHJldm1hcCBpdGVtOiAoMSwwKSwgaW5kZXggdHVwbGU6ICgyLDEpIikK KyAgICB9CispOworCisKKyMgaW5pdCB0ZXN0IGRhdGEKK215ICRpID0gMTsKK2ZvcmVhY2ggbXkg JHRlc3Rfc3RydWN0IChAdGVzdHMpIHsKKworICAgICR0ZXN0X3N0cnVjdC0+e3RhYmxlX25hbWV9 ID0gJ3QnIC4gJGkrKzsKKyAgICAkdGVzdF9zdHJ1Y3QtPntpbmRleF9uYW1lfSA9ICR0ZXN0X3N0 cnVjdC0+e3RhYmxlX25hbWV9IC4gJ19icmluX2lkeCc7CisKKyAgICBteSAkdGVzdF9kYXRhX3Nx bCA9ICcnOworICAgIGlmIChleGlzdHMgJHRlc3Rfc3RydWN0LT57dGFibGVfZGF0YX0pIHsKKyAg ICAgICAgJHRlc3RfZGF0YV9zcWwgPSAkdGVzdF9zdHJ1Y3QtPnt0YWJsZV9kYXRhfS0+KCR0ZXN0 X3N0cnVjdCk7CisgICAgfQorCisgICAgJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgK KyAgICAgICAgQ1JFQVRFIFRBQkxFICR0ZXN0X3N0cnVjdC0+e3RhYmxlX25hbWV9IChhIFRFWFQp OworICAgICAgICAkdGVzdF9kYXRhX3NxbAorICAgICAgICBDUkVBVEUgSU5ERVggJHRlc3Rfc3Ry dWN0LT57aW5kZXhfbmFtZX0gT04gJHRlc3Rfc3RydWN0LT57dGFibGVfbmFtZX0gVVNJTkcgQlJJ TiAoYSk7CisgICAgKSk7CisKKyAgICAkdGVzdF9zdHJ1Y3QtPntyZWxwYXRofSA9IHJlbGF0aW9u X2ZpbGVwYXRoKCR0ZXN0X3N0cnVjdC0+e2luZGV4X25hbWV9KTsKK30KKworIyBjb3JydXB0IGlu ZGV4Ciskbm9kZS0+c3RvcDsKKworZm9yZWFjaCBteSAkdGVzdF9zdHJ1Y3QgKEB0ZXN0cykgewor ICAgIHN0cmluZ19yZXBsYWNlX2Jsb2NrKAorICAgICAgICAkdGVzdF9zdHJ1Y3QtPntyZWxwYXRo fSwKKyAgICAgICAgJHRlc3Rfc3RydWN0LT57ZmluZH0sCisgICAgICAgICR0ZXN0X3N0cnVjdC0+ e3JlcGxhY2V9LAorICAgICAgICAkdGVzdF9zdHJ1Y3QtPntibGtub30KKyAgICApOworfQorCisj IGFzc2VydGlvbnMKKyRub2RlLT5zdGFydDsKKworZm9yZWFjaCBteSAkdGVzdF9zdHJ1Y3QgKEB0 ZXN0cykgeworICAgIG15ICgkcmVzdWx0LCAkc3Rkb3V0LCAkc3RkZXJyKSA9ICRub2RlLT5wc3Fs KCdwb3N0Z3JlcycsIHFxKFNFTEVDVCBicmluX2luZGV4X2NoZWNrKCckdGVzdF9zdHJ1Y3QtPntp bmRleF9uYW1lfScsIHRydWUpKSk7CisgICAgbGlrZSgkc3RkZXJyLCAkdGVzdF9zdHJ1Y3QtPntl eHBlY3RlZH0pOworfQorCisKKyMgSGVscGVycworCisjIFJldHVybnMgdGhlIGZpbGVzeXN0ZW0g cGF0aCBmb3IgdGhlIG5hbWVkIHJlbGF0aW9uLgorc3ViIHJlbGF0aW9uX2ZpbGVwYXRoIHsKKyAg ICBteSAoJHJlbG5hbWUpID0gQF87CisKKyAgICBteSAkcGdkYXRhID0gJG5vZGUtPmRhdGFfZGly OworICAgIG15ICRyZWwgPSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisgICAgICAgIHFx KFNFTEVDVCBwZ19yZWxhdGlvbl9maWxlcGF0aCgnJHJlbG5hbWUnKSkpOworICAgIGRpZSAicGF0 aCBub3QgZm91bmQgZm9yIHJlbGF0aW9uICRyZWxuYW1lIiB1bmxlc3MgZGVmaW5lZCAkcmVsOwor ICAgIHJldHVybiAiJHBnZGF0YS8kcmVsIjsKK30KKworc3ViIHN0cmluZ19yZXBsYWNlX2Jsb2Nr IHsKKyAgICBteSAoJGZpbGVuYW1lLCAkZmluZCwgJHJlcGxhY2UsICRibGtubykgPSBAXzsKKwor ICAgIG15ICRmaDsKKyAgICBvcGVuKCRmaCwgJys8JywgJGZpbGVuYW1lKSBvciBCQUlMX09VVCgi b3BlbiBmYWlsZWQ6ICQhIik7CisgICAgYmlubW9kZSAkZmg7CisKKyAgICBteSAkb2Zmc2V0ID0g JGJsa25vICogJGJsa3NpemU7CisgICAgbXkgJGJ1ZmZlcjsKKworICAgIHN5c3NlZWsoJGZoLCAk b2Zmc2V0LCAwKSBvciBCQUlMX09VVCgic2VlayBmYWlsZWQ6ICQhIik7CisgICAgc3lzcmVhZCgk ZmgsICRidWZmZXIsICRibGtzaXplKSBvciBCQUlMX09VVCgicmVhZCBmYWlsZWQ6ICQhIik7CisK KyAgICAkYnVmZmVyID1+IHMvJGZpbmQvJyInIC4gJHJlcGxhY2UgLiAnIicvZ2VlOworCisgICAg c3lzc2VlaygkZmgsICRvZmZzZXQsIDApIG9yIEJBSUxfT1VUKCJzZWVrIGZhaWxlZDogJCEiKTsK KyAgICBzeXN3cml0ZSgkZmgsICRidWZmZXIpIG9yIEJBSUxfT1VUKCJ3cml0ZSBmYWlsZWQ6ICQh Iik7CisKKyAgICBjbG9zZSgkZmgpIG9yIEJBSUxfT1VUKCJjbG9zZSBmYWlsZWQ6ICQhIik7CisK KyAgICByZXR1cm47Cit9CisKK3N1YiB3cmFwCit7CisgICAgbXkgJGlucHV0ID0gQF87CisgICAg cmV0dXJuIHFyL1xRJGlucHV0XEUvCit9CisKK2RvbmVfdGVzdGluZygpOwpcIE5vIG5ld2xpbmUg YXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvbnRyaWIvYW1jaGVjay92ZXJpZnlfYnJpbi5j IGIvY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9icmluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAuLjlkNWExY2FlYmY2Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9h bWNoZWNrL3ZlcmlmeV9icmluLmMKQEAgLTAsMCArMSw4MDcgQEAKKy8qLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICoKKyAqIHZlcmlmeV9icmluLmMKKyAqCSAgRnVuY3Rpb25zIHRvIGNoZWNrIHBvc3RncmVz cWwgYnJpbiBpbmRleGVzIGZvciBjb3JydXB0aW9uCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2 LTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250 cmliL2FtY2hlY2svdmVyaWZ5X2JyaW4uYworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNs dWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0YWlscy5oIgorI2lu Y2x1ZGUgImFjY2Vzcy90YWJsZS5oIgorI2luY2x1ZGUgImFjY2Vzcy90YWJsZWFtLmgiCisjaW5j bHVkZSAiYWNjZXNzL3RyYW5zYW0uaCIKKyNpbmNsdWRlICJhY2Nlc3MvYnJpbi5oIgorI2luY2x1 ZGUgImNhdGFsb2cvaW5kZXguaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2FtX2QuaCIKKyNpbmNs dWRlICJjYXRhbG9nL3BnX29wZXJhdG9yLmgiCisjaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5j bHVkZSAic3RvcmFnZS9sbWdyLmgiCisjaW5jbHVkZSAic3RvcmFnZS9zbWdyLmgiCisjaW5jbHVk ZSAidXRpbHMvZ3VjLmgiCisjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKKyNpbmNsdWRlICJh Y2Nlc3MvYnJpbl9wYWdlLmgiCisjaW5jbHVkZSAiYWNjZXNzL2JyaW5fcmV2bWFwLmgiCisjaW5j bHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCisjaW5jbHVkZSAidmVyaWZ5X2NvbW1vbi5oIgorI2lu Y2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvYXJyYXkuaCIKKworCitQ R19GVU5DVElPTl9JTkZPX1YxKGJyaW5faW5kZXhfY2hlY2spOworCit0eXBlZGVmIHN0cnVjdCBC cmluQ2hlY2tTdGF0ZQoreworCisJLyogQ2hlY2sgYXJndW1lbnRzICovCisKKwlib29sCQlyZWd1 bGFyX3BhZ2VzX2NoZWNrOworCisJLyogQlJJTiBjaGVjayBjb21tb24gZmllbGRzICovCisKKwlS ZWxhdGlvbglpZHhyZWw7CisJUmVsYXRpb24JaGVhcHJlbDsKKwlCcmluRGVzYyAgICpiZGVzYzsK KwlpbnQJCQluYXR0czsKKwlCbG9ja051bWJlciBwYWdlc1BlclJhbmdlOworCisJLyogSW5kZXgg c3RydWN0dXJlIGNoZWNrIGZpZWxkcyAqLworCisJQnVmZmVyQWNjZXNzU3RyYXRlZ3kgY2hlY2tz dHJhdGVneTsKKwlCbG9ja051bWJlciBpZHhuYmxvY2tzOworCUJsb2NrTnVtYmVyIGhlYXBuYmxv Y2tzOworCUJsb2NrTnVtYmVyIGxhc3RSZXZtYXBQYWdlOworCS8qIEN1cnJlbnQgcmFuZ2UgYmxr bm8gKi8KKwlCbG9ja051bWJlciByYW5nZUJsa25vOworCS8qIEN1cnJlbnQgcmV2bWFwIGl0ZW0g Ki8KKwlCbG9ja051bWJlciByZXZtYXBCbGs7CisJQnVmZmVyCQlyZXZtYXBidWY7CisJUGFnZQkJ cmV2bWFwcGFnZTsKKwl1aW50MzIJCXJldm1hcGlkeDsKKwkvKiBDdXJyZW50IGluZGV4IHR1cGxl ICovCisJQmxvY2tOdW1iZXIgcmVncGFnZUJsazsKKwlCdWZmZXIJCXJlZ3BhZ2VidWY7CisJUGFn ZQkJcmVncGFnZTsKKwlPZmZzZXROdW1iZXIgcmVncGFnZW9mZnNldDsKKworfQkJCUJyaW5DaGVj a1N0YXRlOworCitzdGF0aWMgdm9pZCBicmluX2NoZWNrKFJlbGF0aW9uIGlkeHJlbCwgUmVsYXRp b24gaGVhcHJlbCwgdm9pZCAqY2FsbGJhY2tfc3RhdGUsIGJvb2wgcmVhZG9ubHkpOworCitzdGF0 aWMgdm9pZCBjaGVja19icmluX2luZGV4X3N0cnVjdHVyZShCcmluQ2hlY2tTdGF0ZSAqIHBTdGF0 ZSk7CisKK3N0YXRpYyB2b2lkIGNoZWNrX21ldGEoQnJpbkNoZWNrU3RhdGUgKiBzdGF0ZSk7CisK K3N0YXRpYyB2b2lkIGNoZWNrX3Jldm1hcChCcmluQ2hlY2tTdGF0ZSAqIHN0YXRlKTsKKworc3Rh dGljIHZvaWQgY2hlY2tfcmV2bWFwX2l0ZW0oQnJpbkNoZWNrU3RhdGUgKiBzdGF0ZSk7CisKK3N0 YXRpYyB2b2lkIGNoZWNrX2luZGV4X3R1cGxlKEJyaW5DaGVja1N0YXRlICogc3RhdGUsIEJyaW5U dXBsZSAqdHVwbGUsIEl0ZW1JZCBscCk7CisKK3N0YXRpYyB2b2lkIGNoZWNrX3JlZ3VsYXJfcGFn ZXMoQnJpbkNoZWNrU3RhdGUgKiBzdGF0ZSk7CisKK3N0YXRpYyBib29sIHJldm1hcF9wb2ludHNf dG9faW5kZXhfdHVwbGUoQnJpbkNoZWNrU3RhdGUgKiBzdGF0ZSk7CisKK3N0YXRpYyBJdGVtSWQg UGFnZUdldEl0ZW1JZENhcmVmdWwoQnJpbkNoZWNrU3RhdGUgKiBzdGF0ZSk7CisKK3N0YXRpYyB2 b2lkIGJyaW5fY2hlY2tfZXJlcG9ydChCcmluQ2hlY2tTdGF0ZSAqIHN0YXRlLCBjb25zdCBjaGFy ICpmbXQpOworCitzdGF0aWMgdm9pZCByZXZtYXBfaXRlbV9lcmVwb3J0KEJyaW5DaGVja1N0YXRl ICogc3RhdGUsIGNvbnN0IGNoYXIgKmZtdCk7CisKK3N0YXRpYyB2b2lkIGluZGV4X3R1cGxlX2Vy ZXBvcnQoQnJpbkNoZWNrU3RhdGUgKiBzdGF0ZSwgY29uc3QgY2hhciAqZm10KTsKKworc3RhdGlj IHZvaWQgaW5kZXhfdHVwbGVfb25seV9lcmVwb3J0KEJyaW5DaGVja1N0YXRlICogc3RhdGUsIGNv bnN0IGNoYXIgKmZtdCk7CisKKworRGF0dW0KK2JyaW5faW5kZXhfY2hlY2soUEdfRlVOQ1RJT05f QVJHUykKK3sKKwlPaWQJCQlpbmRyZWxpZCA9IFBHX0dFVEFSR19PSUQoMCk7CisJQnJpbkNoZWNr U3RhdGUgKnN0YXRlID0gcGFsbG9jMChzaXplb2YoQnJpbkNoZWNrU3RhdGUpKTsKKworCXN0YXRl LT5yZWd1bGFyX3BhZ2VzX2NoZWNrID0gUEdfR0VUQVJHX0JPT0woMSk7CisKKwlhbWNoZWNrX2xv Y2tfcmVsYXRpb25fYW5kX2NoZWNrKGluZHJlbGlkLAorCQkJCQkJCQkJQlJJTl9BTV9PSUQsCisJ CQkJCQkJCQlicmluX2NoZWNrLAorCQkJCQkJCQkJU2hhcmVVcGRhdGVFeGNsdXNpdmVMb2NrLAor CQkJCQkJCQkJc3RhdGUpOworCisJUEdfUkVUVVJOX1ZPSUQoKTsKK30KKworLyoKKyAqIE1haW4g Y2hlY2sgZnVuY3Rpb24KKyAqLworc3RhdGljIHZvaWQKK2JyaW5fY2hlY2soUmVsYXRpb24gaWR4 cmVsLCBSZWxhdGlvbiBoZWFwcmVsLCB2b2lkICpjYWxsYmFja19zdGF0ZSwgYm9vbCByZWFkb25s eSkKK3sKKwlCcmluQ2hlY2tTdGF0ZSAqc3RhdGUgPSAoQnJpbkNoZWNrU3RhdGUgKikgY2FsbGJh Y2tfc3RhdGU7CisKKwkvKiBJbml0aWFsaXplIGNoZWNrIGNvbW1vbiBmaWVsZHMgKi8KKwlzdGF0 ZS0+aWR4cmVsID0gaWR4cmVsOworCXN0YXRlLT5oZWFwcmVsID0gaGVhcHJlbDsKKwlzdGF0ZS0+ YmRlc2MgPSBicmluX2J1aWxkX2Rlc2MoaWR4cmVsKTsKKwlzdGF0ZS0+bmF0dHMgPSBzdGF0ZS0+ YmRlc2MtPmJkX3R1cGRlc2MtPm5hdHRzOworCisKKwljaGVja19icmluX2luZGV4X3N0cnVjdHVy ZShzdGF0ZSk7CisKKworCWJyaW5fZnJlZV9kZXNjKHN0YXRlLT5iZGVzYyk7Cit9CisKKy8qCisg KiBDaGVjayB0aGF0IGluZGV4IGhhcyBleHBlY3RlZCBzdHJ1Y3R1cmUKKyAqCisgKiAgU29tZSBj aGVjayBleHBlY3RhdGlvbnM6CisgKiAtIHdlIGhvbGQgU2hhcmVVcGRhdGVFeGNsdXNpdmVMb2Nr LCBzbyByZXZtYXAgY291bGQgbm90IGJlIGV4dGVuZGVkIChpLmUuIG5vIGV2YWN1YXRpb24pIHdo aWxlIGNoZWNrIGFzIHdlbGwgYXMKKyAqICAgYWxsIHJlZ3VsYXIgcGFnZXMgc2hvdWxkIHN0YXkg cmVndWxhciBhbmQgcmFuZ2VzIGNvdWxkIG5vdCBiZSBzdW1tYXJpemVkIGFuZCBkZXN1bW1hcml6 ZWQuCisgKiAgIE5ldmVydGhlbGVzcywgY29uY3VycmVudCB1cGRhdGVzIGNvdWxkIGxlYWQgdG8g bmV3IHJlZ3VsYXIgcGFnZSBhbGxvY2F0aW9ucworICogICBhbmQgbW92aW5nIG9mIGluZGV4IHR1 cGxlcy4KKyAqIC0gaWYgcmV2bWFwIHBvaW50ZXIgaXMgdmFsaWQgdGhlcmUgc2hvdWxkIGJlIHZh bGlkIGluZGV4IHR1cGxlIGl0IHBvaW50cyB0by4KKyAqIC0gdGhlcmUgYXJlIG5vIG9ycGhhbiBp bmRleCB0dXBsZXMgKGlmIHRoZXJlIGlzIGFuIGluZGV4IHR1cGxlLCB0aGUgcmV2bWFwIGl0ZW0g cG9pbnRzIHRvIHRoaXMgdHVwbGUgYWxzbyBtdXN0IGV4aXN0KQorICogLSBpdCdzIHBvc3NpYmxl IHRvIGVuY291bnRlciBwbGFjZWhvbGRlciB0dXBsZXMgKGFzIGEgcmVzdWx0IG9mIGNyYXNoKQor ICogLSBpdCdzIHBvc3NpYmxlIHRvIGVuY291bnRlciBuZXcgcGFnZXMgaW5zdGVhZCBvZiByZWd1 bGFyIChhcyBhIHJlc3VsdCBvZiBjcmFzaCkKKyAqIC0gaXQncyBwb3NzaWJsZSB0byBlbmNvdW50 ZXIgcGFnZXMgd2l0aCBldmFjdWF0aW9uIGJpdCAoYXMgYSByZXN1bHQgb2YgY3Jhc2gpCisgKgor ICovCitzdGF0aWMgdm9pZAorY2hlY2tfYnJpbl9pbmRleF9zdHJ1Y3R1cmUoQnJpbkNoZWNrU3Rh dGUgKiBzdGF0ZSkKK3sKKwkvKiBJbmRleCBzdHJ1Y3R1cmUgY2hlY2sgZmllbGRzIGluaXRpYWxp emF0aW9uICovCisJc3RhdGUtPmNoZWNrc3RyYXRlZ3kgPSBHZXRBY2Nlc3NTdHJhdGVneShCQVNf QlVMS1JFQUQpOworCisJY2hlY2tfbWV0YShzdGF0ZSk7CisKKwkvKiBDaGVjayByZXZtYXAgZmly c3QsIGJsb2NrczogWzEsIGxhc3RSZXZtYXBQYWdlXSAqLworCWNoZWNrX3Jldm1hcChzdGF0ZSk7 CisKKwkvKiBDaGVjayByZWd1bGFyIHBhZ2VzLCBibG9ja3M6IFtsYXN0UmV2bWFwUGFnZSArIDEs IGlkeG5ibG9ja3NdICovCisJY2hlY2tfcmVndWxhcl9wYWdlcyhzdGF0ZSk7Cit9CisKKy8qIE1l dGEgcGFnZSBjaGVjayBhbmQgc2F2ZSBzb21lIGRhdGEgZm9yIHRoZSBmdXJ0aGVyIGNoZWNrICov CitzdGF0aWMgdm9pZAorY2hlY2tfbWV0YShCcmluQ2hlY2tTdGF0ZSAqIHN0YXRlKQoreworCUJ1 ZmZlcgkJbWV0YWJ1ZjsKKwlQYWdlCQltZXRhcGFnZTsKKwlCcmluTWV0YVBhZ2VEYXRhICptZXRh ZGF0YTsKKworCS8qIE1ldGEgcGFnZSBjaGVjayAqLworCW1ldGFidWYgPSBSZWFkQnVmZmVyRXh0 ZW5kZWQoc3RhdGUtPmlkeHJlbCwgTUFJTl9GT1JLTlVNLCBCUklOX01FVEFQQUdFX0JMS05PLCBS Qk1fTk9STUFMLAorCQkJCQkJCQkgc3RhdGUtPmNoZWNrc3RyYXRlZ3kpOworCUxvY2tCdWZmZXIo bWV0YWJ1ZiwgQlVGRkVSX0xPQ0tfU0hBUkUpOworCW1ldGFwYWdlID0gQnVmZmVyR2V0UGFnZSht ZXRhYnVmKTsKKwltZXRhZGF0YSA9IChCcmluTWV0YVBhZ2VEYXRhICopIFBhZ2VHZXRDb250ZW50 cyhtZXRhcGFnZSk7CisJc3RhdGUtPmlkeG5ibG9ja3MgPSBSZWxhdGlvbkdldE51bWJlck9mQmxv Y2tzKHN0YXRlLT5pZHhyZWwpOworCisKKwlpZiAoIUJSSU5fSVNfTUVUQV9QQUdFKG1ldGFwYWdl KSB8fAorCQltZXRhZGF0YS0+YnJpbk1hZ2ljICE9IEJSSU5fTUVUQV9NQUdJQyB8fAorCQltZXRh ZGF0YS0+YnJpblZlcnNpb24gIT0gQlJJTl9DVVJSRU5UX1ZFUlNJT04gfHwKKwkJbWV0YWRhdGEt PnBhZ2VzUGVyUmFuZ2UgPCAxIHx8IG1ldGFkYXRhLT5wYWdlc1BlclJhbmdlID4gQlJJTl9NQVhf UEFHRVNfUEVSX1JBTkdFIHx8CisJCW1ldGFkYXRhLT5sYXN0UmV2bWFwUGFnZSA8PSBCUklOX01F VEFQQUdFX0JMS05PIHx8IG1ldGFkYXRhLT5sYXN0UmV2bWFwUGFnZSA+PSBzdGF0ZS0+aWR4bmJs b2NrcykKKwl7CisJCWJyaW5fY2hlY2tfZXJlcG9ydChzdGF0ZSwgIm1ldGFwYWdlIGlzIGNvcnJ1 cHRlZCIpOworCX0KKworCXN0YXRlLT5sYXN0UmV2bWFwUGFnZSA9IG1ldGFkYXRhLT5sYXN0UmV2 bWFwUGFnZTsKKwlzdGF0ZS0+cGFnZXNQZXJSYW5nZSA9IG1ldGFkYXRhLT5wYWdlc1BlclJhbmdl OworCVVubG9ja1JlbGVhc2VCdWZmZXIobWV0YWJ1Zik7Cit9CisKKy8qCisgKiBXYWxrIHJldm1h cCBwYWdlIGJ5IHBhZ2UgZnJvbSB0aGUgYmVnaW5uaW5nIGFuZCBjaGVjayBldmVyeSByZXZtYXAg aXRlbS4KKyAqIEFsc28gY2hlY2sgdGhhdCBhbGwgcGFnZXMgd2l0aGluIFsxLCBsYXN0UmV2bWFw UGFnZV0gYXJlIHJldm1hcCBwYWdlcy4KKyAqLworc3RhdGljIHZvaWQKK2NoZWNrX3Jldm1hcChC cmluQ2hlY2tTdGF0ZSAqIHN0YXRlKQoreworCVJlbGF0aW9uCWlkeHJlbCA9IHN0YXRlLT5pZHhy ZWw7CisJQmxvY2tOdW1iZXIgbGFzdFJldm1hcFBhZ2UgPSBzdGF0ZS0+bGFzdFJldm1hcFBhZ2U7 CisKKwlzdGF0ZS0+cmFuZ2VCbGtubyA9IDA7CisJc3RhdGUtPnJlZ3BhZ2VidWYgPSBJbnZhbGlk QnVmZmVyOworCXN0YXRlLT5oZWFwbmJsb2NrcyA9IFJlbGF0aW9uR2V0TnVtYmVyT2ZCbG9ja3Mo c3RhdGUtPmhlYXByZWwpOworCisJLyogV2FsayBlYWNoIHJldm1hcCBwYWdlICovCisJZm9yIChz dGF0ZS0+cmV2bWFwQmxrID0gQlJJTl9NRVRBUEFHRV9CTEtOTyArIDE7IHN0YXRlLT5yZXZtYXBC bGsgPD0gbGFzdFJldm1hcFBhZ2U7IHN0YXRlLT5yZXZtYXBCbGsrKykKKwl7CisKKwkJc3RhdGUt PnJldm1hcGJ1ZiA9IFJlYWRCdWZmZXJFeHRlbmRlZChpZHhyZWwsIE1BSU5fRk9SS05VTSwgc3Rh dGUtPnJldm1hcEJsaywgUkJNX05PUk1BTCwKKwkJCQkJCQkJCQkJICBzdGF0ZS0+Y2hlY2tzdHJh dGVneSk7CisJCUxvY2tCdWZmZXIoc3RhdGUtPnJldm1hcGJ1ZiwgQlVGRkVSX0xPQ0tfU0hBUkUp OworCQlzdGF0ZS0+cmV2bWFwcGFnZSA9IEJ1ZmZlckdldFBhZ2Uoc3RhdGUtPnJldm1hcGJ1Zik7 CisKKwkJLyoKKwkJICogUGFnZXMgd2l0aCBibG9jayBudW1iZXJzIGluIFsxLCBsYXN0UmV2bWFw UGFnZV0gc2hvdWxkIGJlIHJldm1hcAorCQkgKiBwYWdlcworCQkgKi8KKwkJaWYgKCFCUklOX0lT X1JFVk1BUF9QQUdFKHN0YXRlLT5yZXZtYXBwYWdlKSkKKwkJeworCQkJYnJpbl9jaGVja19lcmVw b3J0KHN0YXRlLCBwc3ByaW50ZigicmV2bWFwIHBhZ2UgaXMgZXhwZWN0ZWQgYXQgYmxvY2sgJXUs IGxhc3QgcmV2bWFwIHBhZ2UgJXUiLAorCQkJCQkJCQkJCQkgICBzdGF0ZS0+cmV2bWFwQmxrLAor CQkJCQkJCQkJCQkgICBsYXN0UmV2bWFwUGFnZSkpOworCQl9CisJCUxvY2tCdWZmZXIoc3RhdGUt PnJldm1hcGJ1ZiwgQlVGRkVSX0xPQ0tfVU5MT0NLKTsKKworCQkvKiBXYWxrIGFuZCBjaGVjayBh bGwgYnJpbiB0dXBsZXMgZnJvbSB0aGUgY3VycmVudCByZXZtYXAgcGFnZSAqLworCQlzdGF0ZS0+ cmV2bWFwaWR4ID0gMDsKKwkJd2hpbGUgKHN0YXRlLT5yZXZtYXBpZHggPCBSRVZNQVBfUEFHRV9N QVhJVEVNUykKKwkJeworCQkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKworCQkJLyogQ2hlY2sg cmV2bWFwIGl0ZW0gKi8KKwkJCWNoZWNrX3Jldm1hcF9pdGVtKHN0YXRlKTsKKworCQkJc3RhdGUt PnJhbmdlQmxrbm8gKz0gc3RhdGUtPnBhZ2VzUGVyUmFuZ2U7CisJCQlzdGF0ZS0+cmV2bWFwaWR4 Kys7CisJCX0KKworCQllbG9nKERFQlVHMywgIkNvbXBsZXRlIHJldm1hcCBwYWdlIGNoZWNrOiAl ZCIsIHN0YXRlLT5yZXZtYXBCbGspOworCisJCVJlbGVhc2VCdWZmZXIoc3RhdGUtPnJldm1hcGJ1 Zik7CisJfQorCisJaWYgKEJ1ZmZlcklzVmFsaWQoc3RhdGUtPnJlZ3BhZ2VidWYpKQorCXsKKwkJ UmVsZWFzZUJ1ZmZlcihzdGF0ZS0+cmVncGFnZWJ1Zik7CisJfQorfQorCisvKgorICogQ2hlY2sg cmV2bWFwIGl0ZW0uCisgKgorICogV2UgY2hlY2sgcmV2bWFwIGl0ZW0gcG9pbnRlciBpdHNlbGYg YW5kIGlmIGl0IGlzIG9rIHdlIGNoZWNrIHRoZSBpbmRleCB0dXBsZSBpdCBwb2ludHMgdG8uCisg KgorICogVG8gYXZvaWQgZGVhZGxvY2sgd2UgbmVlZCB0byB1bmxvY2sgcmV2bWFwIHBhZ2UgYmVm b3JlIGxvY2tpbmcgcmVndWxhciBwYWdlLAorICogc28gd2hlbiB3ZSBnZXQgdGhlIGxvY2sgb24g dGhlIHJlZ3VsYXIgcGFnZSBvdXIgaW5kZXggdHVwbGUgcG9pbnRlciBtYXkgbm8gbG9uZ2VyIGJl IHJlbGV2YW50LgorICogU28gZm9yIHNvbWUgY2hlY2tzIGJlZm9yZSByZXBvcnRpbmcgYW4gZXJy b3Igd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBvdXIgcG9pbnRlciBpcyBzdGlsbCByZWxldmFu dCBhbmQgaWYgaXQncyBub3QgLSByZXRyeS4KKyAqLworc3RhdGljIHZvaWQKK2NoZWNrX3Jldm1h cF9pdGVtKEJyaW5DaGVja1N0YXRlICogc3RhdGUpCit7CisJSXRlbVBvaW50ZXJEYXRhICpyZXZt YXB0aWRzOworCVJldm1hcENvbnRlbnRzICpjb250ZW50czsKKwlJdGVtUG9pbnRlckRhdGEgKmlw dHI7CisJSXRlbUlkCQlscDsKKwlCcmluVHVwbGUgICp0dXA7CisJUmVsYXRpb24JaWR4cmVsID0g c3RhdGUtPmlkeHJlbDsKKworCS8qIExvb3AgdG8gcmV0cnkgcmV2bWFwIGl0ZW0gY2hlY2sgaWYg dGhlcmUgd2FzIGEgY29uY3VycmVudCB1cGRhdGUuICovCisJZm9yICg7OykKKwl7CisJCUxvY2tC dWZmZXIoc3RhdGUtPnJldm1hcGJ1ZiwgQlVGRkVSX0xPQ0tfU0hBUkUpOworCisJCWNvbnRlbnRz ID0gKFJldm1hcENvbnRlbnRzICopIFBhZ2VHZXRDb250ZW50cyhCdWZmZXJHZXRQYWdlKHN0YXRl LT5yZXZtYXBidWYpKTsKKwkJcmV2bWFwdGlkcyA9IGNvbnRlbnRzLT5ybV90aWRzOworCQkvKiBQ b2ludGVyIGZvciB0aGUgcmFuZ2Ugd2l0aCBzdGFydCBhdCBzdGF0ZS0+cmFuZ2VCbGtubyAqLwor CQlpcHRyID0gcmV2bWFwdGlkcyArIHN0YXRlLT5yZXZtYXBpZHg7CisKKwkJLyogQXQgZmlyc3Qg Y2hlY2sgcmV2bWFwIGl0ZW0gcG9pbnRlciAqLworCisJCS8qCisJCSAqIFR1cGxlIHBvaW50ZXIg aXMgaW52YWxpZCBtZWFucyByYW5nZSBpc24ndCBzdW1tYXJpemVkLCBqdXN0IG1vdmUKKwkJICog ZnVydGhlcgorCQkgKi8KKwkJaWYgKCFJdGVtUG9pbnRlcklzVmFsaWQoaXB0cikpCisJCXsKKwkJ CWVsb2coREVCVUczLCAiUmFuZ2UgJXUgaXMgbm90IHN1bW1hcml6ZWQiLCBzdGF0ZS0+cmFuZ2VC bGtubyk7CisJCQlMb2NrQnVmZmVyKHN0YXRlLT5yZXZtYXBidWYsIEJVRkZFUl9MT0NLX1VOTE9D Syk7CisJCQlicmVhazsKKwkJfQorCisJCS8qCisJCSAqIFBvaW50ZXIgaXMgdmFsaWQsIGl0IHNo b3VsZCBwb2ludHMgdG8gaW5kZXggdHVwbGUgZm9yIHRoZSByYW5nZQorCQkgKiB3aXRoIGJsa25v IHJhbmdlQmxrbm8uIFJlbWVtYmVyIGl0IGFuZCB1bmxvY2sgcmV2bWFwIHBhZ2UgdG8gYXZvaWQK KwkJICogZGVhZGxvY2sKKwkJICovCisJCXN0YXRlLT5yZWdwYWdlQmxrID0gSXRlbVBvaW50ZXJH ZXRCbG9ja051bWJlcihpcHRyKTsKKwkJc3RhdGUtPnJlZ3BhZ2VvZmZzZXQgPSBJdGVtUG9pbnRl ckdldE9mZnNldE51bWJlcihpcHRyKTsKKworCQlMb2NrQnVmZmVyKHN0YXRlLT5yZXZtYXBidWYs IEJVRkZFUl9MT0NLX1VOTE9DSyk7CisKKwkJLyoKKwkJICogQ2hlY2sgaWYgdGhlIHJlZ3BhZ2Ug YmxvY2sgbnVtYmVyIGlzIGdyZWF0ZXIgdGhhbiB0aGUgcmVsYXRpb24KKwkJICogc2l6ZS4gVG8g YXZvaWQgZmV0Y2hpbmcgdGhlIG51bWJlciBvZiBibG9ja3MgZm9yIGVhY2ggdHVwbGUsIHVzZQor CQkgKiBjYWNoZWQgdmFsdWUgZmlyc3QKKwkJICovCisJCWlmIChzdGF0ZS0+cmVncGFnZUJsayA+ PSBzdGF0ZS0+aWR4bmJsb2NrcykKKwkJeworCQkJLyoKKwkJCSAqIFJlZ3VsYXIgcGFnZXMgbWF5 IGhhdmUgYmVlbiBhZGRlZCwgc28gcmVmcmVzaCBpZHhuYmxvY2tzIGFuZAorCQkJICogcmVjaGVj aworCQkJICovCisJCQlzdGF0ZS0+aWR4bmJsb2NrcyA9IFJlbGF0aW9uR2V0TnVtYmVyT2ZCbG9j a3MoaWR4cmVsKTsKKwkJCWlmIChzdGF0ZS0+cmVncGFnZUJsayA+PSBzdGF0ZS0+aWR4bmJsb2Nr cykKKwkJCXsKKwkJCQlyZXZtYXBfaXRlbV9lcmVwb3J0KHN0YXRlLAorCQkJCQkJCQkJcHNwcmlu dGYoInJldm1hcCBpdGVtIHBvaW50cyB0byBhIG5vbiBleGlzdGluZyBibG9jayAldSwgaW5kZXgg bWF4IGJsb2NrICV1IiwKKwkJCQkJCQkJCQkJIHN0YXRlLT5yZWdwYWdlQmxrLAorCQkJCQkJCQkJ CQkgc3RhdGUtPmlkeG5ibG9ja3MgLSAxKSk7CisJCQl9CisJCX0KKworCQkvKgorCQkgKiBUbyBh dm9pZCBzb21lIHBpbi91bnBpbiBjeWNsZXMgd2UgY2FjaGUgbGFzdCB1c2VkIHJlZ3VsYXIgcGFn ZS4KKwkJICogQ2hlY2sgaWYgd2UgbmVlZCBkaWZmZXJlbnQgcmVndWxhciBwYWdlIGFuZCBmZXRj aCBpdC4KKwkJICovCisJCWlmICghQnVmZmVySXNWYWxpZChzdGF0ZS0+cmVncGFnZWJ1ZikgfHwg QnVmZmVyR2V0QmxvY2tOdW1iZXIoc3RhdGUtPnJlZ3BhZ2VidWYpICE9IHN0YXRlLT5yZWdwYWdl QmxrKQorCQl7CisJCQlpZiAoQnVmZmVySXNWYWxpZChzdGF0ZS0+cmVncGFnZWJ1ZikpCisJCQl7 CisJCQkJUmVsZWFzZUJ1ZmZlcihzdGF0ZS0+cmVncGFnZWJ1Zik7CisJCQl9CisJCQlzdGF0ZS0+ cmVncGFnZWJ1ZiA9IFJlYWRCdWZmZXJFeHRlbmRlZChpZHhyZWwsIE1BSU5fRk9SS05VTSwgc3Rh dGUtPnJlZ3BhZ2VCbGssIFJCTV9OT1JNQUwsCisJCQkJCQkJCQkJCQkgICBzdGF0ZS0+Y2hlY2tz dHJhdGVneSk7CisJCX0KKworCQlMb2NrQnVmZmVyKHN0YXRlLT5yZWdwYWdlYnVmLCBCVUZGRVJf TE9DS19TSEFSRSk7CisJCXN0YXRlLT5yZWdwYWdlID0gQnVmZmVyR2V0UGFnZShzdGF0ZS0+cmVn cGFnZWJ1Zik7CisKKwkJLyogUmV2bWFwIHNob3VsZCBhbHdheXMgcG9pbnQgdG8gYSByZWd1bGFy IHBhZ2UgKi8KKwkJaWYgKCFCUklOX0lTX1JFR1VMQVJfUEFHRShzdGF0ZS0+cmVncGFnZSkpCisJ CXsKKwkJCXJldm1hcF9pdGVtX2VyZXBvcnQoc3RhdGUsCisJCQkJCQkJCXBzcHJpbnRmKCJyZXZt YXAgaXRlbSBwb2ludHMgdG8gdGhlIHBhZ2Ugd2hpY2ggaXMgbm90IHJlZ3VsYXIgKGJsa25vOiAl dSkiLAorCQkJCQkJCQkJCSBzdGF0ZS0+cmVncGFnZUJsaykpOworCisJCX0KKworCQkvKiBDaGVj ayBpdGVtIG9mZnNldCBpcyB2YWxpZCAqLworCQlpZiAoc3RhdGUtPnJlZ3BhZ2VvZmZzZXQgPiBQ YWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHN0YXRlLT5yZWdwYWdlKSkKKwkJeworCisJCQkvKiBJZiBj b25jdXJyZW50IHVwZGF0ZSBtb3ZlZCBvdXIgdHVwbGUgd2UgbmVlZCB0byByZXRyeSAqLworCQkJ aWYgKCFyZXZtYXBfcG9pbnRzX3RvX2luZGV4X3R1cGxlKHN0YXRlKSkKKwkJCXsKKwkJCQlMb2Nr QnVmZmVyKHN0YXRlLT5yZWdwYWdlYnVmLCBCVUZGRVJfTE9DS19VTkxPQ0spOworCQkJCWNvbnRp bnVlOworCQkJfQorCisJCQlyZXZtYXBfaXRlbV9lcmVwb3J0KHN0YXRlLAorCQkJCQkJCQlwc3By aW50ZigicmV2bWFwIGl0ZW0gb2Zmc2V0IG51bWJlciAldSBpcyBncmVhdGVyIHRoYW4gcmVndWxh ciBwYWdlICV1IG1heCBvZmZzZXQgJXUiLAorCQkJCQkJCQkJCSBzdGF0ZS0+cmVncGFnZW9mZnNl dCwKKwkJCQkJCQkJCQkgc3RhdGUtPnJlZ3BhZ2VCbGssCisJCQkJCQkJCQkJIFBhZ2VHZXRNYXhP ZmZzZXROdW1iZXIoc3RhdGUtPnJlZ3BhZ2UpKSk7CisJCX0KKworCQllbG9nKERFQlVHMywgIlBy b2Nlc3MgcmFuZ2U6ICV1LCBpcHRyOiAoJXUsJXUpIiwgc3RhdGUtPnJhbmdlQmxrbm8sIHN0YXRl LT5yZWdwYWdlQmxrLCBzdGF0ZS0+cmVncGFnZW9mZnNldCk7CisKKwkJLyoKKwkJICogUmV2bWFw IHBvaW50ZXIgaXMgT0suIEl0IHBvaW50cyB0byBleGlzdGluZyByZWd1bGFyIHBhZ2UsIG9mZnNl dAorCQkgKiBhbHNvIGlzIG9rLiBMZXQncyBjaGVjayBpbmRleCB0dXBsZSBpdCBwb2ludHMgdG8u CisJCSAqLworCisJCWxwID0gUGFnZUdldEl0ZW1JZENhcmVmdWwoc3RhdGUpOworCisJCS8qIFJl dm1hcCBzaG91bGQgcG9pbnQgdG8gTk9STUFMIHR1cGxlcyBvbmx5ICovCisJCWlmICghSXRlbUlk SXNVc2VkKGxwKSkKKwkJeworCisJCQkvKiBJZiBjb25jdXJyZW50IHVwZGF0ZSBtb3ZlZCBvdXIg dHVwbGUgd2UgbmVlZCB0byByZXRyeSAqLworCQkJaWYgKCFyZXZtYXBfcG9pbnRzX3RvX2luZGV4 X3R1cGxlKHN0YXRlKSkKKwkJCXsKKwkJCQlMb2NrQnVmZmVyKHN0YXRlLT5yZWdwYWdlYnVmLCBC VUZGRVJfTE9DS19VTkxPQ0spOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlpbmRleF90dXBs ZV9lcmVwb3J0KHN0YXRlLCAicmV2bWFwIGl0ZW0gcG9pbnRzIHRvIHVudXNlZCBpbmRleCB0dXBs ZSIpOworCQl9CisKKworCQl0dXAgPSAoQnJpblR1cGxlICopIFBhZ2VHZXRJdGVtKHN0YXRlLT5y ZWdwYWdlLCBscCk7CisKKwkJLyogQ2hlY2sgaWYgcmFuZ2UgYmxvY2sgbnVtYmVyIGlzIGFzIGV4 cGVjdGVkICovCisJCWlmICh0dXAtPmJ0X2Jsa25vICE9IHN0YXRlLT5yYW5nZUJsa25vKQorCQl7 CisKKwkJCS8qIElmIGNvbmN1cnJlbnQgdXBkYXRlIG1vdmVkIG91ciB0dXBsZSB3ZSBuZWVkIHRv IHJldHJ5ICovCisJCQlpZiAoIXJldm1hcF9wb2ludHNfdG9faW5kZXhfdHVwbGUoc3RhdGUpKQor CQkJeworCQkJCUxvY2tCdWZmZXIoc3RhdGUtPnJlZ3BhZ2VidWYsIEJVRkZFUl9MT0NLX1VOTE9D Syk7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWluZGV4X3R1cGxlX2VyZXBvcnQoc3RhdGUs IHBzcHJpbnRmKCJpbmRleCB0dXBsZSBoYXMgaW52YWxpZCBibGtubyAldSIsIHR1cC0+YnRfYmxr bm8pKTsKKwkJfQorCisJCS8qCisJCSAqIElmIHRoZSByYW5nZSBpcyBiZXlvbmQgdGhlIHRhYmxl IHNpemUgLSB0aGUgcmFuZ2UgbXVzdCBiZSBlbXB0eS4KKwkJICogSXQncyB2YWxpZCBzaXR1YXRp b24gZm9yIGVtcHR5IHRhYmxlIG5vdy4KKwkJICovCisJCWlmIChzdGF0ZS0+cmFuZ2VCbGtubyA+ PSBzdGF0ZS0+aGVhcG5ibG9ja3MpCisJCXsKKwkJCWlmICghQnJpblR1cGxlSXNFbXB0eVJhbmdl KHR1cCkpCisJCQl7CisJCQkJaW5kZXhfdHVwbGVfZXJlcG9ydChzdGF0ZSwKKwkJCQkJCQkJCXBz cHJpbnRmKCJ0aGUgcmFuZ2UgaXMgYmV5b25kIHRoZSB0YWJsZSBzaXplLCAiCisJCQkJCQkJCQkJ CSAiYnV0IGlzIG5vdCBtYXJrZWQgYXMgZW1wdHksIHRhYmxlIHNpemU6ICV1IGJsb2NrcyIsCisJ CQkJCQkJCQkJCSBzdGF0ZS0+aGVhcG5ibG9ja3MpKTsKKwkJCX0KKwkJfQorCisJCS8qIENoZWNr IGluZGV4IHR1cGxlIGl0c2VsZiAqLworCQljaGVja19pbmRleF90dXBsZShzdGF0ZSwgdHVwLCBs cCk7CisKKwkJTG9ja0J1ZmZlcihzdGF0ZS0+cmVncGFnZWJ1ZiwgQlVGRkVSX0xPQ0tfVU5MT0NL KTsKKwkJYnJlYWs7CisJfQorfQorCisvKgorICogQ2hlY2sgdGhhdCBpbmRleCB0dXBsZSBoYXMg ZXhwZWN0ZWQgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZm9sbG93cyB0aGUgbG9n aWMgcGVyZm9ybWVkIGJ5IGJyaW5fZGVmb3JtX3R1cGxlKCkuCisgKiBBZnRlciB0aGlzIGNoZWNr IGlzIGNvbXBsZXRlIHdlIGFyZSBzdXJlIHRoYXQgYnJpbl9kZWZvcm1fdHVwbGUgY2FuIHByb2Nl c3MgaXQuCisgKgorICogSW4gY2FzZSBvZiBlbXB0eSByYW5nZSBjaGVjayB0aGF0IGZvciBhbGwg YXR0cmlidXRlcyBhbGxudWxscyBhcmUgdHJ1ZSwgaGFzbnVsbHMgYXJlIGZhbHNlIGFuZAorICog dGhlcmUgaXMgbm8gZGF0YS4gQWxsIGNvcmUgb3BjbGFzc2VzIGV4cGVjdCBhbGxudWxscyBpcyB0 cnVlIGZvciBlbXB0eSByYW5nZS4KKyAqLworc3RhdGljIHZvaWQKK2NoZWNrX2luZGV4X3R1cGxl KEJyaW5DaGVja1N0YXRlICogc3RhdGUsIEJyaW5UdXBsZSAqdHVwbGUsIEl0ZW1JZCBscCkKK3sK KworCWNoYXIJICAgKnRwOwkJCQkvKiB0dXBsZSBkYXRhICovCisJdWludDE2CQlvZmY7CisJYml0 czgJICAgKm51bGxiaXRzOworCVR1cGxlRGVzYwlkaXNrdGRlc2M7CisJaW50CQkJc3RvcmVkOwor CWJvb2wJCWVtcHR5X3JhbmdlID0gQnJpblR1cGxlSXNFbXB0eVJhbmdlKHR1cGxlKTsKKwlib29s CQloYXNudWxsYml0bWFwID0gQnJpblR1cGxlSGFzTnVsbHModHVwbGUpOworCXVpbnQ4CQlob2Zm ID0gQnJpblR1cGxlRGF0YU9mZnNldCh0dXBsZSk7CisJdWludDE2CQl0dXBsZW4gPSBJdGVtSWRH ZXRMZW5ndGgobHApOworCisKKwkvKiBDaGVjayB0aGF0IGhlYWRlciBsZW5ndGggaXMgbm90IGdy ZWF0ZXIgdGhhbiB0dXBsZSBsZW5ndGggKi8KKwlpZiAoaG9mZiA+IHR1cGxlbikKKwl7CisJCWlu ZGV4X3R1cGxlX2VyZXBvcnQoc3RhdGUsIHBzcHJpbnRmKCJpbmRleCB0dXBsZSBoZWFkZXIgbGVu Z3RoICV1IGlzIGdyZWF0ZXIgdGhhbiB0dXBsZSBsZW4gJXUiLCBob2ZmLCB0dXBsZW4pKTsKKwl9 CisKKwkvKiBJZiB0dXBsZSBoYXMgbnVsbCBiaXRtYXAgLSBpbml0aWFsaXplIGl0ICovCisJaWYg KGhhc251bGxiaXRtYXApCisJeworCQludWxsYml0cyA9IChiaXRzOCAqKSAoKGNoYXIgKikgdHVw bGUgKyBTaXplT2ZCcmluVHVwbGUpOworCX0KKwllbHNlCisJeworCQludWxsYml0cyA9IE5VTEw7 CisJfQorCisJLyogRW1wdHkgcmFuZ2UgaW5kZXggdHVwbGUgY2hlY2tzICovCisJaWYgKGVtcHR5 X3JhbmdlKQorCXsKKwkJLyogRW1wdHkgcmFuZ2UgdHVwbGUgc2hvdWxkIGhhdmUgbnVsbCBiaXRt YXAgKi8KKwkJaWYgKCFoYXNudWxsYml0bWFwKQorCQl7CisJCQlpbmRleF90dXBsZV9lcmVwb3J0 KHN0YXRlLCAiZW1wdHkgcmFuZ2UgaW5kZXggdHVwbGUgZG9lc24ndCBoYXZlIG51bGwgYml0bWFw Iik7CisJCX0KKworCQlBc3NlcnQobnVsbGJpdHMgIT0gTlVMTCk7CisKKwkJLyogQ2hlY2sgZXZl cnkgYXR0cmlidXRlIGhhcyBhbGxudWxscyBpcyB0cnVlIGFuZCBoYXNudWxscyBpcyBmYWxzZSAq LworCQlmb3IgKGludCBhdHRpbmRleCA9IDA7IGF0dGluZGV4IDwgc3RhdGUtPm5hdHRzOyArK2F0 dGluZGV4KQorCQl7CisKKwkJCS8qIEF0dHJpYnV0ZSBhbGxudWxscyBzaG91bGQgYmUgdHJ1ZSBm b3IgZW1wdHkgcmFuZ2UgKi8KKwkJCWlmIChhdHRfaXNudWxsKGF0dGluZGV4LCBudWxsYml0cykp CisJCQl7CisJCQkJaW5kZXhfdHVwbGVfZXJlcG9ydChzdGF0ZSwKKwkJCQkJCQkJCXBzcHJpbnRm KCJlbXB0eSByYW5nZSBpbmRleCB0dXBsZSBhdHRyaWJ1dGUgJWQgd2l0aCBhbGxudWxscyBpcyBm YWxzZSIsCisJCQkJCQkJCQkJCSBhdHRpbmRleCkpOworCQkJfQorCisJCQkvKiBBdHRyaWJ1dGUg aGFzbnVsbHMgc2hvdWxkIGJlIGZhbHNlIGZvciBlbXB0eSByYW5nZSAqLworCQkJaWYgKCFhdHRf aXNudWxsKHN0YXRlLT5uYXR0cyArIGF0dGluZGV4LCBudWxsYml0cykpCisJCQl7CisJCQkJaW5k ZXhfdHVwbGVfZXJlcG9ydChzdGF0ZSwKKwkJCQkJCQkJCXBzcHJpbnRmKCJlbXB0eSByYW5nZSBp bmRleCB0dXBsZSBhdHRyaWJ1dGUgJWQgd2l0aCBoYXNudWxscyBpcyB0cnVlIiwKKwkJCQkJCQkJ CQkJIGF0dGluZGV4KSk7CisJCQl9CisJCX0KKworCQkvKiBXZSBhcmUgZG9uZSB3aXRoIGVtcHR5 IHJhbmdlIHR1cGxlICovCisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIFJhbmdlIGlzIG1hcmtl ZCBhcyBub3QgZW1wdHkgc28gd2UgY2FuIGhhdmUgc29tZSBkYXRhIGluIHRoZSB0dXBsZS4KKwkg KiBXYWxrIGFsbCBhdHRyaWJ1dGVzIGFuZCBjaGVja3MgdGhhdCBhbGwgc3RvcmVkIHZhbHVlcyBm aXQgaW50byB0aGUKKwkgKiB0dXBsZQorCSAqLworCisJdHAgPSAoY2hhciAqKSB0dXBsZSArIEJy aW5UdXBsZURhdGFPZmZzZXQodHVwbGUpOworCXN0b3JlZCA9IDA7CisJb2ZmID0gMDsKKworCWRp c2t0ZGVzYyA9IGJydHVwbGVfZGlza190dXBkZXNjKHN0YXRlLT5iZGVzYyk7CisKKwlmb3IgKGlu dCBhdHRpbmRleCA9IDA7IGF0dGluZGV4IDwgc3RhdGUtPm5hdHRzOyArK2F0dGluZGV4KQorCXsK KwkJQnJpbk9wY0luZm8gKm9wY2xhc3MgPSBzdGF0ZS0+YmRlc2MtPmJkX2luZm9bYXR0aW5kZXhd OworCisJCS8qCisJCSAqIGlmIGFsbG51bGxzIGlzIHNldCB3ZSBoYXZlIG5vIGRhdGEgZm9yIHRo aXMgYXR0cmlidXRlLCBtb3ZlIHRvIHRoZQorCQkgKiBuZXh0CisJCSAqLworCQlpZiAoaGFzbnVs bGJpdG1hcCAmJiAhYXR0X2lzbnVsbChhdHRpbmRleCwgbnVsbGJpdHMpKQorCQl7CisJCQlzdG9y ZWQgKz0gb3BjbGFzcy0+b2lfbnN0b3JlZDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogV2Fs ayBhbGwgc3RvcmVkIHZhbHVlcyBmb3IgdGhlIGN1cnJlbnQgYXR0cmlidXRlICovCisJCWZvciAo aW50IGRhdHVtbm8gPSAwOyBkYXR1bW5vIDwgb3BjbGFzcy0+b2lfbnN0b3JlZDsgZGF0dW1ubysr KQorCQl7CisJCQlDb21wYWN0QXR0cmlidXRlICp0aGlzYXR0ID0gVHVwbGVEZXNjQ29tcGFjdEF0 dHIoZGlza3RkZXNjLCBzdG9yZWQpOworCisJCQlpZiAodGhpc2F0dC0+YXR0bGVuID09IC0xKQor CQkJeworCQkJCW9mZiA9IGF0dF9wb2ludGVyX2FsaWduYnkob2ZmLAorCQkJCQkJCQkJCSAgdGhp c2F0dC0+YXR0YWxpZ25ieSwKKwkJCQkJCQkJCQkgIC0xLAorCQkJCQkJCQkJCSAgdHAgKyBvZmYp OworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCW9mZiA9IGF0dF9ub21pbmFsX2FsaWduYnkob2Zm LCB0aGlzYXR0LT5hdHRhbGlnbmJ5KTsKKwkJCX0KKworCQkJLyogQ2hlY2sgdGhhdCB3ZSBhcmUg c3RpbGwgaW4gdGhlIHR1cGxlICovCisJCQlpZiAoaG9mZiArIG9mZiA+IHR1cGxlbikKKwkJCXsK KwkJCQlpbmRleF90dXBsZV9lcmVwb3J0KHN0YXRlLAorCQkJCQkJCQkJcHNwcmludGYoImF0dHJp YnV0ZSAldSBzdG9yZWQgdmFsdWUgJXUgd2l0aCBsZW5ndGggJWQgIgorCQkJCQkJCQkJCQkgInN0 YXJ0cyBhdCBvZmZzZXQgJXUgYmV5b25kIHRvdGFsIHR1cGxlIGxlbmd0aCAldSIsCisJCQkJCQkJ CQkJCSBhdHRpbmRleCwgZGF0dW1ubywgdGhpc2F0dC0+YXR0bGVuLCBvZmYsIHR1cGxlbikpOwor CQkJfQorCisJCQlvZmYgPSBhdHRfYWRkbGVuZ3RoX3BvaW50ZXIob2ZmLCB0aGlzYXR0LT5hdHRs ZW4sIHRwICsgb2ZmKTsKKworCQkJLyogQ2hlY2sgdGhhdCB3ZSBhcmUgc3RpbGwgaW4gdGhlIHR1 cGxlICovCisJCQlpZiAoaG9mZiArIG9mZiA+IHR1cGxlbikKKwkJCXsKKwkJCQlpbmRleF90dXBs ZV9lcmVwb3J0KHN0YXRlLAorCQkJCQkJCQkJcHNwcmludGYoImF0dHJpYnV0ZSAldSBzdG9yZWQg dmFsdWUgJXUgd2l0aCBsZW5ndGggJWQgIgorCQkJCQkJCQkJCQkgImVuZHMgYXQgb2Zmc2V0ICV1 IGJleW9uZCB0b3RhbCB0dXBsZSBsZW5ndGggJXUiLAorCQkJCQkJCQkJCQkgYXR0aW5kZXgsIGRh dHVtbm8sIHRoaXNhdHQtPmF0dGxlbiwgb2ZmLCB0dXBsZW4pKTsKKwkJCX0KKwkJCXN0b3JlZCsr OworCQl9CisKKwl9CisKK30KKworLyoKKyAqIENoZWNrIGFsbCBwYWdlcyB3aXRoaW4gdGhlIHJh bmdlIFtsYXN0UmV2bWFwUGFnZSArIDEsIGluZGV4bmJsb2Nrc10gYXJlIHJlZ3VsYXIgcGFnZXMg b3IgbmV3CisgKiBhbmQgdGhlcmUgaXMgYSBwb2ludGVyIGluIHJldm1hcCB0byBlYWNoIE5PUk1B TCBpbmRleCB0dXBsZS4KKyAqLworc3RhdGljIHZvaWQKK2NoZWNrX3JlZ3VsYXJfcGFnZXMoQnJp bkNoZWNrU3RhdGUgKiBzdGF0ZSkKK3sKKwlpZiAoIXN0YXRlLT5yZWd1bGFyX3BhZ2VzX2NoZWNr KQorCXsKKwkJcmV0dXJuOworCX0KKworCS8qIHJlc2V0IHN0YXRlICovCisJc3RhdGUtPnJldm1h cEJsayA9IEludmFsaWRCbG9ja051bWJlcjsKKwlzdGF0ZS0+cmV2bWFwYnVmID0gSW52YWxpZEJ1 ZmZlcjsKKwlzdGF0ZS0+cmV2bWFwaWR4ID0gLTE7CisJc3RhdGUtPnJlZ3BhZ2VCbGsgPSBJbnZh bGlkQmxvY2tOdW1iZXI7CisJc3RhdGUtPnJlZ3BhZ2VidWYgPSBJbnZhbGlkQnVmZmVyOworCXN0 YXRlLT5yZWdwYWdlb2Zmc2V0ID0gSW52YWxpZE9mZnNldE51bWJlcjsKKwlzdGF0ZS0+aWR4bmJs b2NrcyA9IFJlbGF0aW9uR2V0TnVtYmVyT2ZCbG9ja3Moc3RhdGUtPmlkeHJlbCk7CisKKwlmb3Ig KHN0YXRlLT5yZWdwYWdlQmxrID0gc3RhdGUtPmxhc3RSZXZtYXBQYWdlICsgMTsgc3RhdGUtPnJl Z3BhZ2VCbGsgPCBzdGF0ZS0+aWR4bmJsb2Nrczsgc3RhdGUtPnJlZ3BhZ2VCbGsrKykKKwl7CisJ CU9mZnNldE51bWJlciBtYXhvZmY7CisKKwkJc3RhdGUtPnJlZ3BhZ2VidWYgPSBSZWFkQnVmZmVy RXh0ZW5kZWQoc3RhdGUtPmlkeHJlbCwgTUFJTl9GT1JLTlVNLCBzdGF0ZS0+cmVncGFnZUJsaywg UkJNX05PUk1BTCwKKwkJCQkJCQkJCQkJICAgc3RhdGUtPmNoZWNrc3RyYXRlZ3kpOworCQlMb2Nr QnVmZmVyKHN0YXRlLT5yZWdwYWdlYnVmLCBCVUZGRVJfTE9DS19TSEFSRSk7CisJCXN0YXRlLT5y ZWdwYWdlID0gQnVmZmVyR2V0UGFnZShzdGF0ZS0+cmVncGFnZWJ1Zik7CisKKwkJLyogU2tpcCBu ZXcgcGFnZXMgKi8KKwkJaWYgKFBhZ2VJc05ldyhzdGF0ZS0+cmVncGFnZSkpCisJCXsKKwkJCVVu bG9ja1JlbGVhc2VCdWZmZXIoc3RhdGUtPnJlZ3BhZ2VidWYpOworCQkJY29udGludWU7CisJCX0K KworCQlpZiAoIUJSSU5fSVNfUkVHVUxBUl9QQUdFKHN0YXRlLT5yZWdwYWdlKSkKKwkJeworCQkJ YnJpbl9jaGVja19lcmVwb3J0KHN0YXRlLCBwc3ByaW50ZigiZXhwZWN0ZWQgbmV3IG9yIHJlZ3Vs YXIgcGFnZSBhdCBibG9jayAldSIsIHN0YXRlLT5yZWdwYWdlQmxrKSk7CisJCX0KKworCQkvKiBD aGVjayB0aGF0IGFsbCBOT1JNQUwgaW5kZXggdHVwbGVzIHdpdGhpbiB0aGUgcGFnZSBhcmUgbm90 IG9ycGhhbnMgKi8KKwkJbWF4b2ZmID0gUGFnZUdldE1heE9mZnNldE51bWJlcihzdGF0ZS0+cmVn cGFnZSk7CisJCWZvciAoc3RhdGUtPnJlZ3BhZ2VvZmZzZXQgPSBGaXJzdE9mZnNldE51bWJlcjsg c3RhdGUtPnJlZ3BhZ2VvZmZzZXQgPD0gbWF4b2ZmOyBzdGF0ZS0+cmVncGFnZW9mZnNldCsrKQor CQl7CisJCQlJdGVtSWQJCWxwOworCQkJQnJpblR1cGxlICAqdHVwOworCQkJQmxvY2tOdW1iZXIg cmV2bWFwQmxrOworCisJCQlscCA9IFBhZ2VHZXRJdGVtSWRDYXJlZnVsKHN0YXRlKTsKKworCQkJ aWYgKEl0ZW1JZElzVXNlZChscCkpCisJCQl7CisJCQkJdHVwID0gKEJyaW5UdXBsZSAqKSBQYWdl R2V0SXRlbShzdGF0ZS0+cmVncGFnZSwgbHApOworCisJCQkJLyogR2V0IHJldm1hcCBibG9jayBu dW1iZXIgZm9yIGluZGV4IHR1cGxlIGJsa25vICovCisJCQkJcmV2bWFwQmxrID0gKCh0dXAtPmJ0 X2Jsa25vIC8gc3RhdGUtPnBhZ2VzUGVyUmFuZ2UpIC8gUkVWTUFQX1BBR0VfTUFYSVRFTVMpICsg MTsKKwkJCQlpZiAocmV2bWFwQmxrID4gc3RhdGUtPmxhc3RSZXZtYXBQYWdlKQorCQkJCXsKKwkJ CQkJaW5kZXhfdHVwbGVfb25seV9lcmVwb3J0KHN0YXRlLCBwc3ByaW50Zigibm8gcmV2bWFwIHBh Z2UgZm9yIHRoZSBpbmRleCB0dXBsZSB3aXRoIGJsa25vICV1IiwKKwkJCQkJCQkJCQkJCQkJCSB0 dXAtPmJ0X2Jsa25vKSk7CisJCQkJfQorCisJCQkJLyogRmV0Y2ggYW5vdGhlciByZXZtYXAgcGFn ZSBpZiBuZWVkZWQgKi8KKwkJCQlpZiAoc3RhdGUtPnJldm1hcEJsayAhPSByZXZtYXBCbGspCisJ CQkJeworCQkJCQlpZiAoQmxvY2tOdW1iZXJJc1ZhbGlkKHN0YXRlLT5yZXZtYXBCbGspKQorCQkJ CQl7CisJCQkJCQlSZWxlYXNlQnVmZmVyKHN0YXRlLT5yZXZtYXBidWYpOworCQkJCQl9CisJCQkJ CXN0YXRlLT5yZXZtYXBCbGsgPSByZXZtYXBCbGs7CisJCQkJCXN0YXRlLT5yZXZtYXBidWYgPSBS ZWFkQnVmZmVyRXh0ZW5kZWQoc3RhdGUtPmlkeHJlbCwgTUFJTl9GT1JLTlVNLCBzdGF0ZS0+cmV2 bWFwQmxrLCBSQk1fTk9STUFMLAorCQkJCQkJCQkJCQkJCQkgIHN0YXRlLT5jaGVja3N0cmF0ZWd5 KTsKKwkJCQl9CisKKwkJCQlzdGF0ZS0+cmV2bWFwaWR4ID0gKHR1cC0+YnRfYmxrbm8gLyBzdGF0 ZS0+cGFnZXNQZXJSYW5nZSkgJSBSRVZNQVBfUEFHRV9NQVhJVEVNUzsKKwkJCQlzdGF0ZS0+cmFu Z2VCbGtubyA9IHR1cC0+YnRfYmxrbm87CisKKwkJCQkvKiBjaGVjayB0aGF0IHJldm1hcCBpdGVt IHBvaW50cyB0byBpbmRleCB0dXBsZSAqLworCQkJCWlmICghcmV2bWFwX3BvaW50c190b19pbmRl eF90dXBsZShzdGF0ZSkpCisJCQkJeworCQkJCQlpbmRleF90dXBsZV9lcmVwb3J0KHN0YXRlLCBw c3ByaW50ZigicmV2bWFwIGRvZXNuJ3QgcG9pbnQgdG8gaW5kZXggdHVwbGUiKSk7CisJCQkJfQor CisJCQl9CisJCX0KKworCQlVbmxvY2tSZWxlYXNlQnVmZmVyKHN0YXRlLT5yZWdwYWdlYnVmKTsK Kwl9CisKKwlpZiAoc3RhdGUtPnJldm1hcGJ1ZiAhPSBJbnZhbGlkQnVmZmVyKQorCXsKKwkJUmVs ZWFzZUJ1ZmZlcihzdGF0ZS0+cmV2bWFwYnVmKTsKKwl9Cit9CisKKy8qCisgKiBDaGVjayBpZiB0 aGUgcmV2bWFwIGl0ZW0gcG9pbnRzIHRvIHRoZSBpbmRleCB0dXBsZSAocmVncGFnZUJsaywgcmVn cGFnZW9mZnNldCkuCisgKiBXZSBoYXZlIGxvY2tlZCByZWcgcGFnZSwgYW5kIGxvY2sgcmV2bWFw IHBhZ2UgaGVyZS4KKyAqIEl0J3MgYSB2YWxpZCBsb2NrIG9yZGVyaW5nLCBzbyBubyBkZWFkbG9j ayBpcyBwb3NzaWJsZS4KKyAqLworc3RhdGljIGJvb2wKK3Jldm1hcF9wb2ludHNfdG9faW5kZXhf dHVwbGUoQnJpbkNoZWNrU3RhdGUgKiBzdGF0ZSkKK3sKKwlJdGVtUG9pbnRlckRhdGEgKnJldm1h cHRpZHM7CisJUmV2bWFwQ29udGVudHMgKmNvbnRlbnRzOworCUl0ZW1Qb2ludGVyRGF0YSAqdGlk OworCWJvb2wJCXBvaW50czsKKworCUxvY2tCdWZmZXIoc3RhdGUtPnJldm1hcGJ1ZiwgQlVGRkVS X0xPQ0tfU0hBUkUpOworCWNvbnRlbnRzID0gKFJldm1hcENvbnRlbnRzICopIFBhZ2VHZXRDb250 ZW50cyhCdWZmZXJHZXRQYWdlKHN0YXRlLT5yZXZtYXBidWYpKTsKKwlyZXZtYXB0aWRzID0gY29u dGVudHMtPnJtX3RpZHM7CisJdGlkID0gcmV2bWFwdGlkcyArIHN0YXRlLT5yZXZtYXBpZHg7CisK Kwlwb2ludHMgPSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyTm9DaGVjayh0aWQpID09IHN0YXRl LT5yZWdwYWdlQmxrICYmCisJCUl0ZW1Qb2ludGVyR2V0T2Zmc2V0TnVtYmVyTm9DaGVjayh0aWQp ID09IHN0YXRlLT5yZWdwYWdlb2Zmc2V0OworCisJTG9ja0J1ZmZlcihzdGF0ZS0+cmV2bWFwYnVm LCBCVUZGRVJfTE9DS19VTkxPQ0spOworCXJldHVybiBwb2ludHM7Cit9CisKKy8qCisgKiBQYWdl R2V0SXRlbUlkKCkgd3JhcHBlciB0aGF0IHZhbGlkYXRlcyByZXR1cm5lZCBsaW5lIHBvaW50ZXIu CisgKgorICogaXRlbUlkIGluIGJyaW4gaW5kZXggY291bGQgYmUgVU5VU0VEIG9yIE5PUk1BTC4K KyAqLworc3RhdGljIEl0ZW1JZAorUGFnZUdldEl0ZW1JZENhcmVmdWwoQnJpbkNoZWNrU3RhdGUg KiBzdGF0ZSkKK3sKKwlQYWdlCQlwYWdlID0gc3RhdGUtPnJlZ3BhZ2U7CisJT2Zmc2V0TnVtYmVy IG9mZnNldCA9IHN0YXRlLT5yZWdwYWdlb2Zmc2V0OworCUl0ZW1JZAkJaXRlbWlkID0gUGFnZUdl dEl0ZW1JZChwYWdlLCBvZmZzZXQpOworCisJaWYgKEl0ZW1JZEdldE9mZnNldChpdGVtaWQpICsg SXRlbUlkR2V0TGVuZ3RoKGl0ZW1pZCkgPgorCQlCTENLU1ogLSBNQVhBTElHTihzaXplb2YoQnJp blNwZWNpYWxTcGFjZSkpKQorCQlpbmRleF90dXBsZV9lcmVwb3J0KHN0YXRlLAorCQkJCQkJCXBz cHJpbnRmKCJsaW5lIHBvaW50ZXIgcG9pbnRzIHBhc3QgZW5kIG9mIHR1cGxlIHNwYWNlIGluIGlu ZGV4LiAiCisJCQkJCQkJCQkgImxwX29mZj0ldSwgbHBfbGVuPSV1IGxwX2ZsYWdzPSV1IiwKKwkJ CQkJCQkJCSBJdGVtSWRHZXRPZmZzZXQoaXRlbWlkKSwKKwkJCQkJCQkJCSBJdGVtSWRHZXRMZW5n dGgoaXRlbWlkKSwKKwkJCQkJCQkJCSBJdGVtSWRHZXRGbGFncyhpdGVtaWQpCisJCQkJCQkJCQkg KQorCQkJKTsKKworCS8qIFZlcmlmeSB0aGF0IGxpbmUgcG9pbnRlciBpcyBMUF9OT1JNQUwgb3Ig TFBfVU5VU0VEICovCisJaWYgKCEoKEl0ZW1JZElzTm9ybWFsKGl0ZW1pZCkgJiYgSXRlbUlkSGFz U3RvcmFnZShpdGVtaWQpKSB8fAorCQkgICghSXRlbUlkSXNVc2VkKGl0ZW1pZCkgJiYgIUl0ZW1J ZEhhc1N0b3JhZ2UoaXRlbWlkKSkpKQorCXsKKwkJaW5kZXhfdHVwbGVfZXJlcG9ydChzdGF0ZSwK KwkJCQkJCQlwc3ByaW50ZigiaW52YWxpZCBsaW5lIHBvaW50ZXIgc3RvcmFnZSBpbiBpbmRleC4g IgorCQkJCQkJCQkJICJscF9vZmY9JXUsIGxwX2xlbj0ldSBscF9mbGFncz0ldSIsCisJCQkJCQkJ CQkgSXRlbUlkR2V0T2Zmc2V0KGl0ZW1pZCksCisJCQkJCQkJCQkgSXRlbUlkR2V0TGVuZ3RoKGl0 ZW1pZCksCisJCQkJCQkJCQkgSXRlbUlkR2V0RmxhZ3MoaXRlbWlkKQorCQkJCQkJCQkJICkpOwor CX0KKworCXJldHVybiBpdGVtaWQ7Cit9CisKKworLyogUmVwb3J0IHdpdGhvdXQgYW55IGFkZGl0 aW9uYWwgaW5mbyAqLworc3RhdGljIHZvaWQKK2JyaW5fY2hlY2tfZXJlcG9ydChCcmluQ2hlY2tT dGF0ZSAqIHN0YXRlLCBjb25zdCBjaGFyICpmbXQpCit7CisJZXJlcG9ydChFUlJPUiwKKwkJCShl cnJjb2RlKEVSUkNPREVfSU5ERVhfQ09SUlVQVEVEKSwKKwkJCSBlcnJtc2coIkluZGV4ICVzIGlz IGNvcnJ1cHRlZCAtICVzIiwgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoc3RhdGUtPmlkeHJlbCks IGZtdCkpKTsKK30KKworLyogUmVwb3J0IHdpdGggcmFuZ2UgYmxrbm8sIHJldm1hcCBpdGVtIGlu Zm8sIGluZGV4IHR1cGxlIGluZm8gKi8KK3ZvaWQKK2luZGV4X3R1cGxlX2VyZXBvcnQoQnJpbkNo ZWNrU3RhdGUgKiBzdGF0ZSwgY29uc3QgY2hhciAqZm10KQoreworCUFzc2VydChzdGF0ZS0+cmFu Z2VCbGtubyAhPSBJbnZhbGlkQmxvY2tOdW1iZXIpOworCUFzc2VydChzdGF0ZS0+cmV2bWFwQmxr ICE9IEludmFsaWRCbG9ja051bWJlcik7CisJQXNzZXJ0KHN0YXRlLT5yZXZtYXBpZHggPj0gMCAm JiBzdGF0ZS0+cmV2bWFwaWR4IDwgUkVWTUFQX1BBR0VfTUFYSVRFTVMpOworCUFzc2VydChzdGF0 ZS0+cmVncGFnZUJsayAhPSBJbnZhbGlkQmxvY2tOdW1iZXIpOworCUFzc2VydChzdGF0ZS0+cmVn cGFnZW9mZnNldCAhPSBJbnZhbGlkT2Zmc2V0TnVtYmVyKTsKKworCWVyZXBvcnQoRVJST1IsCisJ CQkoZXJyY29kZShFUlJDT0RFX0lOREVYX0NPUlJVUFRFRCksCisJCQkgZXJybXNnKCJJbmRleCAl cyBpcyBjb3JydXB0ZWQgLSAlcy4gUmFuZ2UgYmxrbm86ICV1LCByZXZtYXAgaXRlbTogKCV1LCV1 KSwgaW5kZXggdHVwbGU6ICgldSwldSkiLAorCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShz dGF0ZS0+aWR4cmVsKSwKKwkJCQkJZm10LAorCQkJCQlzdGF0ZS0+cmFuZ2VCbGtubywKKwkJCQkJ c3RhdGUtPnJldm1hcEJsaywKKwkJCQkJc3RhdGUtPnJldm1hcGlkeCwKKwkJCQkJc3RhdGUtPnJl Z3BhZ2VCbGssCisJCQkJCXN0YXRlLT5yZWdwYWdlb2Zmc2V0KSkpOworfQorCisvKiBSZXBvcnQg d2l0aCBpbmRleCB0dXBsZSBpbmZvICovCit2b2lkCitpbmRleF90dXBsZV9vbmx5X2VyZXBvcnQo QnJpbkNoZWNrU3RhdGUgKiBzdGF0ZSwgY29uc3QgY2hhciAqZm10KQoreworCUFzc2VydChzdGF0 ZS0+cmVncGFnZUJsayAhPSBJbnZhbGlkQmxvY2tOdW1iZXIpOworCUFzc2VydChzdGF0ZS0+cmVn cGFnZW9mZnNldCAhPSBJbnZhbGlkT2Zmc2V0TnVtYmVyKTsKKworCWVyZXBvcnQoRVJST1IsCisJ CQkoZXJyY29kZShFUlJDT0RFX0lOREVYX0NPUlJVUFRFRCksCisJCQkgZXJybXNnKCJJbmRleCAl cyBpcyBjb3JydXB0ZWQgLSAlcy4gSW5kZXggdHVwbGU6ICgldSwldSkiLAorCQkJCQlSZWxhdGlv bkdldFJlbGF0aW9uTmFtZShzdGF0ZS0+aWR4cmVsKSwKKwkJCQkJZm10LAorCQkJCQlzdGF0ZS0+ cmVncGFnZUJsaywKKwkJCQkJc3RhdGUtPnJlZ3BhZ2VvZmZzZXQpKSk7Cit9CisKKy8qIFJlcG9y dCB3aXRoIHJhbmdlIGJsa25vLCByZXZtYXAgaXRlbSBpbmZvICovCit2b2lkCityZXZtYXBfaXRl bV9lcmVwb3J0KEJyaW5DaGVja1N0YXRlICogc3RhdGUsIGNvbnN0IGNoYXIgKmZtdCkKK3sKKwlB c3NlcnQoc3RhdGUtPnJhbmdlQmxrbm8gIT0gSW52YWxpZEJsb2NrTnVtYmVyKTsKKwlBc3NlcnQo c3RhdGUtPnJldm1hcEJsayAhPSBJbnZhbGlkQmxvY2tOdW1iZXIpOworCUFzc2VydChzdGF0ZS0+ cmV2bWFwaWR4ID49IDAgJiYgc3RhdGUtPnJldm1hcGlkeCA8IFJFVk1BUF9QQUdFX01BWElURU1T KTsKKworCWVyZXBvcnQoRVJST1IsCisJCQkoZXJyY29kZShFUlJDT0RFX0lOREVYX0NPUlJVUFRF RCksCisJCQkgZXJybXNnKCJJbmRleCAlcyBpcyBjb3JydXB0ZWQgLSAlcy4gUmFuZ2UgYmxrbm86 ICV1LCByZXZtYXAgaXRlbTogKCV1LCV1KS4iLAorCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFt ZShzdGF0ZS0+aWR4cmVsKSwKKwkJCQkJZm10LAorCQkJCQlzdGF0ZS0+cmFuZ2VCbGtubywKKwkJ CQkJc3RhdGUtPnJldm1hcEJsaywKKwkJCQkJc3RhdGUtPnJldm1hcGlkeCkpKTsKK30KLS0gCjIu NDMuMAoK --000000000000f32bf40637f0f912 Content-Type: text/x-patch; charset="US-ASCII"; name="v4-0003-amcheck-brin_index_check-heap-all-consistent.patch" Content-Disposition: attachment; filename="v4-0003-amcheck-brin_index_check-heap-all-consistent.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mc3ptos72 RnJvbSBjOTMzNzE2NDkzZWU0Nzc0MmMwNDdiNjk5N2Y3NDJkY2M1MWQ1MzM0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBcnNlbml5IE11a2hpbiA8YXJzZW5peS5tdWtoaW4uZGV2QGdt YWlsLmNvbT4KRGF0ZTogTW9uLCAxNiBKdW4gMjAyNSAxODo0MTozNCArMDMwMApTdWJqZWN0OiBb UEFUQ0ggdjQgMy8zXSBhbWNoZWNrOiBicmluX2luZGV4X2NoZWNrKCkgLSBoZWFwIGFsbCBjb25z aXN0ZW50CgpUaGlzIGNvbW1pdCBleHRlbmRzIGZ1bmN0aW9uYWxpdHkgb2YgYnJpbl9pbmRleF9j aGVjaygpIHdpdGgKaGVhcF9hbGxfY29uc2lzdGVudCBjaGVjazogd2UgdmFsaWRhdGUgZXZlcnkg aW5kZXggcmFuZ2UgdHVwbGUKYWdhaW5zdCBldmVyeSBoZWFwIHR1cGxlIHdpdGhpbiB0aGUgcmFu Z2UgdXNpbmcgY29uc2lzdGVudEZuLgpBbHNvLCB3ZSBjaGVjayBoZXJlIHRoYXQgZmllbGRzICdo YXNfbnVsbHMnLCAnYWxsX251bGxzJyBhbmQKJ2VtcHR5X3JhbmdlJyBhcmUgY29uc2lzdGVudCB3 aXRoIHRoZSByYW5nZSBoZWFwIGRhdGEuIEl0J3MgdGhlIG1vc3QKZXhwZW5zaXZlIHBhcnQgb2Yg dGhlIGJyaW5faW5kZXhfY2hlY2soKSwgc28gaXQncyBvcHRpb25hbC4KLS0tCiBjb250cmliL2Ft Y2hlY2svYW1jaGVjay0tMS41LS0xLjYuc3FsICAgfCAgIDYgKy0KIGNvbnRyaWIvYW1jaGVjay9l eHBlY3RlZC9jaGVja19icmluLm91dCB8ICAxOCArLQogY29udHJpYi9hbWNoZWNrL3NxbC9jaGVj a19icmluLnNxbCAgICAgIHwgIDE4ICstCiBjb250cmliL2FtY2hlY2svdC8wMDdfdmVyaWZ5X2Jy aW4ucGwgICAgfCAgNTEgKystCiBjb250cmliL2FtY2hlY2svdmVyaWZ5X2JyaW4uYyAgICAgICAg ICAgfCA0ODIgKysrKysrKysrKysrKysrKysrKysrKysrCiA1IGZpbGVzIGNoYW5nZWQsIDU1NCBp bnNlcnRpb25zKCspLCAyMSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9jb250cmliL2FtY2hl Y2svYW1jaGVjay0tMS41LS0xLjYuc3FsIGIvY29udHJpYi9hbWNoZWNrL2FtY2hlY2stLTEuNS0t MS42LnNxbAppbmRleCA5ZWMwNDZiYjFjZi4uMGM4NTBhOTdkMTYgMTAwNjQ0Ci0tLSBhL2NvbnRy aWIvYW1jaGVjay9hbWNoZWNrLS0xLjUtLTEuNi5zcWwKKysrIGIvY29udHJpYi9hbWNoZWNrL2Ft Y2hlY2stLTEuNS0tMS42LnNxbApAQCAtOCwxMSArOCwxMyBAQAogLS0gYnJpbl9pbmRleF9jaGVj aygpCiAtLQogQ1JFQVRFIEZVTkNUSU9OIGJyaW5faW5kZXhfY2hlY2soaW5kZXggcmVnY2xhc3Ms Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWd1bGFyX3BhZ2VzX2NoZWNrIGJv b2xlYW4gZGVmYXVsdCBmYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVn dWxhcl9wYWdlc19jaGVjayBib29sZWFuIGRlZmF1bHQgZmFsc2UsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBoZWFwX2FsbF9jb25zaXN0ZW50IGJvb2xlYW4gZGVmYXVsdCBmYWxz ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNpc3RlbnRfb3BlcmF0b3Jf bmFtZXMgdGV4dFtdIGRlZmF1bHQgJ3t9JwogKQogICAgIFJFVFVSTlMgVk9JRAogQVMgJ01PRFVM RV9QQVRITkFNRScsICdicmluX2luZGV4X2NoZWNrJwogTEFOR1VBR0UgQyBTVFJJQ1QgUEFSQUxM RUwgUkVTVFJJQ1RFRDsKIAogLS0gV2UgZG9uJ3Qgd2FudCB0aGlzIHRvIGJlIGF2YWlsYWJsZSB0 byBwdWJsaWMKLVJFVk9LRSBBTEwgT04gRlVOQ1RJT04gYnJpbl9pbmRleF9jaGVjayhyZWdjbGFz cywgYm9vbGVhbikgRlJPTSBQVUJMSUM7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorUkVW T0tFIEFMTCBPTiBGVU5DVElPTiBicmluX2luZGV4X2NoZWNrKHJlZ2NsYXNzLCBib29sZWFuLCBi b29sZWFuLCB0ZXh0W10pIEZST00gUFVCTElDOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK ZGlmZiAtLWdpdCBhL2NvbnRyaWIvYW1jaGVjay9leHBlY3RlZC9jaGVja19icmluLm91dCBiL2Nv bnRyaWIvYW1jaGVjay9leHBlY3RlZC9jaGVja19icmluLm91dAppbmRleCBiZWJjYTkzZDMyZi4u MGFhOTBkYWZhMjAgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYW1jaGVjay9leHBlY3RlZC9jaGVja19i cmluLm91dAorKysgYi9jb250cmliL2FtY2hlY2svZXhwZWN0ZWQvY2hlY2tfYnJpbi5vdXQKQEAg LTUsNyArNSw3IEBAICQkIExBTkdVQUdFIHNxbDsKIC0tIGVtcHR5IHRhYmxlIGluZGV4IHNob3Vs ZCBiZSB2YWxpZAogQ1JFQVRFIFRBQkxFIGJyaW50ZXN0IChhIEJJR0lOVCkgV0lUSCAoRklMTEZB Q1RPUiA9IDEwKTsKIENSRUFURSBJTkRFWCBicmludGVzdF9pZHggT04gYnJpbnRlc3QgVVNJTkcg QlJJTiAoYSk7Ci1TRUxFQ1QgYnJpbl9pbmRleF9jaGVjaygnYnJpbnRlc3RfaWR4Jzo6UkVHQ0xB U1MsIHRydWUpOworU0VMRUNUIGJyaW5faW5kZXhfY2hlY2soJ2JyaW50ZXN0X2lkeCc6OlJFR0NM QVNTLCB0cnVlLCB0cnVlKTsKICBicmluX2luZGV4X2NoZWNrIAogLS0tLS0tLS0tLS0tLS0tLS0t CiAgCkBAIC00Miw3ICs0Miw3IEBAIENSRUFURSBJTkRFWCBicmludGVzdF9pZHggT04gYnJpbnRl c3QgVVNJTkcgQlJJTiAoYSBpbnQ4X21pbm1heF9vcHMpIFdJVEggKFBBR0VTCiBJTlNFUlQgSU5U TyBicmludGVzdCAoYSkgU0VMRUNUIHggRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMDApIHg7 CiAtLSBjcmVhdGUgc29tZSBlbXB0eSByYW5nZXMKIERFTEVURSBGUk9NIGJyaW50ZXN0IFdIRVJF IGEgPiAyMDAwMCBBTkQgYSA8IDQwMDAwOwotU0VMRUNUIGJyaW5faW5kZXhfY2hlY2soJ2JyaW50 ZXN0X2lkeCc6OlJFR0NMQVNTLCB0cnVlKTsKK1NFTEVDVCBicmluX2luZGV4X2NoZWNrKCdicmlu dGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSwgdHJ1ZSk7CiAgYnJpbl9pbmRleF9jaGVjayAKIC0t LS0tLS0tLS0tLS0tLS0tLQogIApAQCAtNTEsNyArNTEsNyBAQCBTRUxFQ1QgYnJpbl9pbmRleF9j aGVjaygnYnJpbnRlc3RfaWR4Jzo6UkVHQ0xBU1MsIHRydWUpOwogLS0gcmVidWlsZCBpbmRleAog RFJPUCBJTkRFWCBicmludGVzdF9pZHg7CiBDUkVBVEUgSU5ERVggYnJpbnRlc3RfaWR4IE9OIGJy aW50ZXN0IFVTSU5HIEJSSU4gKGEgaW50OF9taW5tYXhfb3BzKSBXSVRIIChQQUdFU19QRVJfUkFO R0UgPSAyKTsKLVNFTEVDVCBicmluX2luZGV4X2NoZWNrKCdicmludGVzdF9pZHgnOjpSRUdDTEFT UywgdHJ1ZSk7CitTRUxFQ1QgYnJpbl9pbmRleF9jaGVjaygnYnJpbnRlc3RfaWR4Jzo6UkVHQ0xB U1MsIHRydWUsIHRydWUpOwogIGJyaW5faW5kZXhfY2hlY2sgCiAtLS0tLS0tLS0tLS0tLS0tLS0K ICAKQEAgLTY1LDcgKzY1LDcgQEAgQ1JFQVRFIElOREVYIGJyaW50ZXN0X2lkeCBPTiBicmludGVz dCBVU0lORyBCUklOIChhIGludDhfbWlubWF4X211bHRpX29wcykgV0lUSAogSU5TRVJUIElOVE8g YnJpbnRlc3QgKGEpIFNFTEVDVCB4IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDAwKSB4Owog LS0gY3JlYXRlIHNvbWUgZW1wdHkgcmFuZ2VzCiBERUxFVEUgRlJPTSBicmludGVzdCBXSEVSRSBh ID4gMjAwMDAgQU5EIGEgPCA0MDAwMDsKLVNFTEVDVCBicmluX2luZGV4X2NoZWNrKCdicmludGVz dF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSk7CitTRUxFQ1QgYnJpbl9pbmRleF9jaGVjaygnYnJpbnRl c3RfaWR4Jzo6UkVHQ0xBU1MsIHRydWUsIHRydWUpOwogIGJyaW5faW5kZXhfY2hlY2sgCiAtLS0t LS0tLS0tLS0tLS0tLS0KICAKQEAgLTc0LDcgKzc0LDcgQEAgU0VMRUNUIGJyaW5faW5kZXhfY2hl Y2soJ2JyaW50ZXN0X2lkeCc6OlJFR0NMQVNTLCB0cnVlKTsKIC0tIHJlYnVpbGQgaW5kZXgKIERS T1AgSU5ERVggYnJpbnRlc3RfaWR4OwogQ1JFQVRFIElOREVYIGJyaW50ZXN0X2lkeCBPTiBicmlu dGVzdCBVU0lORyBCUklOIChhIGludDhfbWlubWF4X211bHRpX29wcykgV0lUSCAoUEFHRVNfUEVS X1JBTkdFID0gMik7Ci1TRUxFQ1QgYnJpbl9pbmRleF9jaGVjaygnYnJpbnRlc3RfaWR4Jzo6UkVH Q0xBU1MsIHRydWUpOworU0VMRUNUIGJyaW5faW5kZXhfY2hlY2soJ2JyaW50ZXN0X2lkeCc6OlJF R0NMQVNTLCB0cnVlLCB0cnVlKTsKICBicmluX2luZGV4X2NoZWNrIAogLS0tLS0tLS0tLS0tLS0t LS0tCiAgCkBAIC04OCw3ICs4OCw3IEBAIENSRUFURSBJTkRFWCBicmludGVzdF9pZHggT04gYnJp bnRlc3QgVVNJTkcgQlJJTiAoYSBpbnQ4X2Jsb29tX29wcykgV0lUSCAoUEFHRVNfCiBJTlNFUlQg SU5UTyBicmludGVzdCAoYSkgU0VMRUNUIHggRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMDAp IHg7CiAtLSBjcmVhdGUgc29tZSBlbXB0eSByYW5nZXMKIERFTEVURSBGUk9NIGJyaW50ZXN0IFdI RVJFIGEgPiAyMDAwMCBBTkQgYSA8IDQwMDAwOwotU0VMRUNUIGJyaW5faW5kZXhfY2hlY2soJ2Jy aW50ZXN0X2lkeCc6OlJFR0NMQVNTLCB0cnVlKTsKK1NFTEVDVCBicmluX2luZGV4X2NoZWNrKCdi cmludGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSwgdHJ1ZSk7CiAgYnJpbl9pbmRleF9jaGVjayAK IC0tLS0tLS0tLS0tLS0tLS0tLQogIApAQCAtOTcsNyArOTcsNyBAQCBTRUxFQ1QgYnJpbl9pbmRl eF9jaGVjaygnYnJpbnRlc3RfaWR4Jzo6UkVHQ0xBU1MsIHRydWUpOwogLS0gcmVidWlsZCBpbmRl eAogRFJPUCBJTkRFWCBicmludGVzdF9pZHg7CiBDUkVBVEUgSU5ERVggYnJpbnRlc3RfaWR4IE9O IGJyaW50ZXN0IFVTSU5HIEJSSU4gKGEgaW50OF9ibG9vbV9vcHMpIFdJVEggKFBBR0VTX1BFUl9S QU5HRSA9IDIpOwotU0VMRUNUIGJyaW5faW5kZXhfY2hlY2soJ2JyaW50ZXN0X2lkeCc6OlJFR0NM QVNTLCB0cnVlKTsKK1NFTEVDVCBicmluX2luZGV4X2NoZWNrKCdicmludGVzdF9pZHgnOjpSRUdD TEFTUywgdHJ1ZSwgdHJ1ZSk7CiAgYnJpbl9pbmRleF9jaGVjayAKIC0tLS0tLS0tLS0tLS0tLS0t LQogIApAQCAtMTEzLDcgKzExMyw3IEBAIFNFTEVDVCBCT1gocG9pbnQocmFuZG9tKCkgKiAxMDAw LCByYW5kb20oKSAqIDEwMDApLCBwb2ludChyYW5kb20oKSAqIDEwMDAsIHJhbmRvCiBGUk9NIGdl bmVyYXRlX3NlcmllcygxLCAxMDAwMCk7CiAtLSBjcmVhdGUgc29tZSBlbXB0eSByYW5nZXMKIERF TEVURSBGUk9NIGJyaW50ZXN0IFdIRVJFIGlkID4gMjAwMCBBTkQgaWQgPCA0MDAwOwotU0VMRUNU IGJyaW5faW5kZXhfY2hlY2soJ2JyaW50ZXN0X2lkeCc6OlJFR0NMQVNTLCB0cnVlKTsKK1NFTEVD VCBicmluX2luZGV4X2NoZWNrKCdicmludGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSwgdHJ1ZSwg J3siQD4ifScpOwogIGJyaW5faW5kZXhfY2hlY2sgCiAtLS0tLS0tLS0tLS0tLS0tLS0KICAKQEAg LTEyMiw3ICsxMjIsNyBAQCBTRUxFQ1QgYnJpbl9pbmRleF9jaGVjaygnYnJpbnRlc3RfaWR4Jzo6 UkVHQ0xBU1MsIHRydWUpOwogLS0gcmVidWlsZCBpbmRleAogRFJPUCBJTkRFWCBicmludGVzdF9p ZHg7CiBDUkVBVEUgSU5ERVggYnJpbnRlc3RfaWR4IE9OIGJyaW50ZXN0IFVTSU5HIEJSSU4gKGEg Qk9YX0lOQ0xVU0lPTl9PUFMpIFdJVEggKFBBR0VTX1BFUl9SQU5HRSA9IDIpOwotU0VMRUNUIGJy aW5faW5kZXhfY2hlY2soJ2JyaW50ZXN0X2lkeCc6OlJFR0NMQVNTLCB0cnVlKTsKK1NFTEVDVCBi cmluX2luZGV4X2NoZWNrKCdicmludGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSwgdHJ1ZSwgJ3si QD4ifScpOwogIGJyaW5faW5kZXhfY2hlY2sgCiAtLS0tLS0tLS0tLS0tLS0tLS0KICAKZGlmZiAt LWdpdCBhL2NvbnRyaWIvYW1jaGVjay9zcWwvY2hlY2tfYnJpbi5zcWwgYi9jb250cmliL2FtY2hl Y2svc3FsL2NoZWNrX2JyaW4uc3FsCmluZGV4IDBhNWUyNmVhOGY1Li4wZjU4NTY3Zjc2ZiAxMDA2 NDQKLS0tIGEvY29udHJpYi9hbWNoZWNrL3NxbC9jaGVja19icmluLnNxbAorKysgYi9jb250cmli L2FtY2hlY2svc3FsL2NoZWNrX2JyaW4uc3FsCkBAIC03LDcgKzcsNyBAQCAkJCBMQU5HVUFHRSBz cWw7CiAtLSBlbXB0eSB0YWJsZSBpbmRleCBzaG91bGQgYmUgdmFsaWQKIENSRUFURSBUQUJMRSBi cmludGVzdCAoYSBCSUdJTlQpIFdJVEggKEZJTExGQUNUT1IgPSAxMCk7CiBDUkVBVEUgSU5ERVgg YnJpbnRlc3RfaWR4IE9OIGJyaW50ZXN0IFVTSU5HIEJSSU4gKGEpOwotU0VMRUNUIGJyaW5faW5k ZXhfY2hlY2soJ2JyaW50ZXN0X2lkeCc6OlJFR0NMQVNTLCB0cnVlKTsKK1NFTEVDVCBicmluX2lu ZGV4X2NoZWNrKCdicmludGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSwgdHJ1ZSk7CiAtLSBjbGVh bnVwCiBEUk9QIFRBQkxFIGJyaW50ZXN0OwogCkBAIC0zNSwxMiArMzUsMTIgQEAgQ1JFQVRFIElO REVYIGJyaW50ZXN0X2lkeCBPTiBicmludGVzdCBVU0lORyBCUklOIChhIGludDhfbWlubWF4X29w cykgV0lUSCAoUEFHRVMKIElOU0VSVCBJTlRPIGJyaW50ZXN0IChhKSBTRUxFQ1QgeCBGUk9NIGdl bmVyYXRlX3NlcmllcygxLDEwMDAwMCkgeDsKIC0tIGNyZWF0ZSBzb21lIGVtcHR5IHJhbmdlcwog REVMRVRFIEZST00gYnJpbnRlc3QgV0hFUkUgYSA+IDIwMDAwIEFORCBhIDwgNDAwMDA7Ci1TRUxF Q1QgYnJpbl9pbmRleF9jaGVjaygnYnJpbnRlc3RfaWR4Jzo6UkVHQ0xBU1MsIHRydWUpOworU0VM RUNUIGJyaW5faW5kZXhfY2hlY2soJ2JyaW50ZXN0X2lkeCc6OlJFR0NMQVNTLCB0cnVlLCB0cnVl KTsKIAogLS0gcmVidWlsZCBpbmRleAogRFJPUCBJTkRFWCBicmludGVzdF9pZHg7CiBDUkVBVEUg SU5ERVggYnJpbnRlc3RfaWR4IE9OIGJyaW50ZXN0IFVTSU5HIEJSSU4gKGEgaW50OF9taW5tYXhf b3BzKSBXSVRIIChQQUdFU19QRVJfUkFOR0UgPSAyKTsKLVNFTEVDVCBicmluX2luZGV4X2NoZWNr KCdicmludGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSk7CitTRUxFQ1QgYnJpbl9pbmRleF9jaGVj aygnYnJpbnRlc3RfaWR4Jzo6UkVHQ0xBU1MsIHRydWUsIHRydWUpOwogLS0gY2xlYW51cAogRFJP UCBUQUJMRSBicmludGVzdDsKIApAQCAtNTIsMTIgKzUyLDEyIEBAIENSRUFURSBJTkRFWCBicmlu dGVzdF9pZHggT04gYnJpbnRlc3QgVVNJTkcgQlJJTiAoYSBpbnQ4X21pbm1heF9tdWx0aV9vcHMp IFdJVEgKIElOU0VSVCBJTlRPIGJyaW50ZXN0IChhKSBTRUxFQ1QgeCBGUk9NIGdlbmVyYXRlX3Nl cmllcygxLDEwMDAwMCkgeDsKIC0tIGNyZWF0ZSBzb21lIGVtcHR5IHJhbmdlcwogREVMRVRFIEZS T00gYnJpbnRlc3QgV0hFUkUgYSA+IDIwMDAwIEFORCBhIDwgNDAwMDA7Ci1TRUxFQ1QgYnJpbl9p bmRleF9jaGVjaygnYnJpbnRlc3RfaWR4Jzo6UkVHQ0xBU1MsIHRydWUpOworU0VMRUNUIGJyaW5f aW5kZXhfY2hlY2soJ2JyaW50ZXN0X2lkeCc6OlJFR0NMQVNTLCB0cnVlLCB0cnVlKTsKIAogLS0g cmVidWlsZCBpbmRleAogRFJPUCBJTkRFWCBicmludGVzdF9pZHg7CiBDUkVBVEUgSU5ERVggYnJp bnRlc3RfaWR4IE9OIGJyaW50ZXN0IFVTSU5HIEJSSU4gKGEgaW50OF9taW5tYXhfbXVsdGlfb3Bz KSBXSVRIIChQQUdFU19QRVJfUkFOR0UgPSAyKTsKLVNFTEVDVCBicmluX2luZGV4X2NoZWNrKCdi cmludGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSk7CitTRUxFQ1QgYnJpbl9pbmRleF9jaGVjaygn YnJpbnRlc3RfaWR4Jzo6UkVHQ0xBU1MsIHRydWUsIHRydWUpOwogLS0gY2xlYW51cAogRFJPUCBU QUJMRSBicmludGVzdDsKIApAQCAtNjksMTIgKzY5LDEyIEBAIENSRUFURSBJTkRFWCBicmludGVz dF9pZHggT04gYnJpbnRlc3QgVVNJTkcgQlJJTiAoYSBpbnQ4X2Jsb29tX29wcykgV0lUSCAoUEFH RVNfCiBJTlNFUlQgSU5UTyBicmludGVzdCAoYSkgU0VMRUNUIHggRlJPTSBnZW5lcmF0ZV9zZXJp ZXMoMSwxMDAwMDApIHg7CiAtLSBjcmVhdGUgc29tZSBlbXB0eSByYW5nZXMKIERFTEVURSBGUk9N IGJyaW50ZXN0IFdIRVJFIGEgPiAyMDAwMCBBTkQgYSA8IDQwMDAwOwotU0VMRUNUIGJyaW5faW5k ZXhfY2hlY2soJ2JyaW50ZXN0X2lkeCc6OlJFR0NMQVNTLCB0cnVlKTsKK1NFTEVDVCBicmluX2lu ZGV4X2NoZWNrKCdicmludGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSwgdHJ1ZSk7CiAKIC0tIHJl YnVpbGQgaW5kZXgKIERST1AgSU5ERVggYnJpbnRlc3RfaWR4OwogQ1JFQVRFIElOREVYIGJyaW50 ZXN0X2lkeCBPTiBicmludGVzdCBVU0lORyBCUklOIChhIGludDhfYmxvb21fb3BzKSBXSVRIIChQ QUdFU19QRVJfUkFOR0UgPSAyKTsKLVNFTEVDVCBicmluX2luZGV4X2NoZWNrKCdicmludGVzdF9p ZHgnOjpSRUdDTEFTUywgdHJ1ZSk7CitTRUxFQ1QgYnJpbl9pbmRleF9jaGVjaygnYnJpbnRlc3Rf aWR4Jzo6UkVHQ0xBU1MsIHRydWUsIHRydWUpOwogLS0gY2xlYW51cAogRFJPUCBUQUJMRSBicmlu dGVzdDsKIApAQCAtODgsMTIgKzg4LDEyIEBAIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMDAw KTsKIC0tIGNyZWF0ZSBzb21lIGVtcHR5IHJhbmdlcwogREVMRVRFIEZST00gYnJpbnRlc3QgV0hF UkUgaWQgPiAyMDAwIEFORCBpZCA8IDQwMDA7CiAKLVNFTEVDVCBicmluX2luZGV4X2NoZWNrKCdi cmludGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSk7CitTRUxFQ1QgYnJpbl9pbmRleF9jaGVjaygn YnJpbnRlc3RfaWR4Jzo6UkVHQ0xBU1MsIHRydWUsIHRydWUsICd7IkA+In0nKTsKIAogLS0gcmVi dWlsZCBpbmRleAogRFJPUCBJTkRFWCBicmludGVzdF9pZHg7CiBDUkVBVEUgSU5ERVggYnJpbnRl c3RfaWR4IE9OIGJyaW50ZXN0IFVTSU5HIEJSSU4gKGEgQk9YX0lOQ0xVU0lPTl9PUFMpIFdJVEgg KFBBR0VTX1BFUl9SQU5HRSA9IDIpOwotU0VMRUNUIGJyaW5faW5kZXhfY2hlY2soJ2JyaW50ZXN0 X2lkeCc6OlJFR0NMQVNTLCB0cnVlKTsKK1NFTEVDVCBicmluX2luZGV4X2NoZWNrKCdicmludGVz dF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSwgdHJ1ZSwgJ3siQD4ifScpOwogLS0gY2xlYW51cAogRFJP UCBUQUJMRSBicmludGVzdDsKIApkaWZmIC0tZ2l0IGEvY29udHJpYi9hbWNoZWNrL3QvMDA3X3Zl cmlmeV9icmluLnBsIGIvY29udHJpYi9hbWNoZWNrL3QvMDA3X3ZlcmlmeV9icmluLnBsCmluZGV4 IDJjNjJiNzZjYzcwLi41MWJmZWQ3ZTI3MyAxMDA2NDQKLS0tIGEvY29udHJpYi9hbWNoZWNrL3Qv MDA3X3ZlcmlmeV9icmluLnBsCisrKyBiL2NvbnRyaWIvYW1jaGVjay90LzAwN192ZXJpZnlfYnJp bi5wbApAQCAtMjAwLDYgKzIwMCw1NSBAQCBteSBAdGVzdHMgPSAoCiAgICAgICAgICAgICByZXR1 cm4gcXEoSU5TRVJUIElOVE8gJHRlc3Rfc3RydWN0LT57dGFibGVfbmFtZX0gKGEpIFZBTFVFUyAo J2FhYWFhJyk7KTsKICAgICAgICAgfSwKICAgICAgICAgZXhwZWN0ZWQgICA9PiB3cmFwKCJyZXZt YXAgZG9lc24ndCBwb2ludCB0byBpbmRleCB0dXBsZS4gUmFuZ2UgYmxrbm86IDAsIHJldm1hcCBp dGVtOiAoMSwwKSwgaW5kZXggdHVwbGU6ICgyLDEpIikKKyAgICB9LAorICAgIHsKKyAgICAgICAg IyByYW5nZSBpcyBtYXJrZWQgYXMgZW1wdHlfcmFuZ2UsIGJ1dCBoZWFwIGhhcyBzb21lIGRhdGEg Zm9yIHRoZSByYW5nZQorCisgICAgICAgIGZpbmQgICAgID0+IHBhY2soJ0xDQycsIDAsIDB4ODgs IDB4MDMpLAorICAgICAgICByZXBsYWNlICA9PiBwYWNrKCdMQ0MnLCAwLCAweEE4LCAweDAxKSwK KyAgICAgICAgYmxrbm8gICAgICA9PiAyLCAjIHJlZ3VsYXIgcGFnZQorICAgICAgICB0YWJsZV9k YXRhID0+IHN1YiB7CisgICAgICAgICAgICBteSAoJHRlc3Rfc3RydWN0KSA9IEBfOworICAgICAg ICAgICAgcmV0dXJuIHFxKElOU0VSVCBJTlRPICR0ZXN0X3N0cnVjdC0+e3RhYmxlX25hbWV9IChh KSBWQUxVRVMgKG51bGwpOyk7CisgICAgICAgIH0sCisgICAgICAgIGV4cGVjdGVkICAgPT4gd3Jh cCgncmFuZ2UgaXMgbWFya2VkIGFzIGVtcHR5IGJ1dCBjb250YWlucyBxdWFsaWZpZWQgbGl2ZSB0 dXBsZXMuIFJhbmdlIGJsa25vOiAwLCBoZWFwIHRpZCAoMCwxKScpCisgICAgfSwKKyAgICB7Cisg ICAgICAgICMgcmFuZ2UgaGFzbnVsbHMgJiBhbGxudWxscyBhcmUgZmFsc2UsIGJ1dCBoZWFwIGNv bnRhaW5zIG51bGwgdmFsdWVzIGZvciB0aGUgcmFuZ2UKKworICAgICAgICBmaW5kICAgICA9PiBw YWNrKCdMQ0MnLCAwLCAweDg4LCAweDAyKSwKKyAgICAgICAgcmVwbGFjZSAgPT4gcGFjaygnTEND JywgMCwgMHg4OCwgMHgwMCksCisgICAgICAgIGJsa25vICAgICAgPT4gMiwgIyByZWd1bGFyIHBh Z2UKKyAgICAgICAgdGFibGVfZGF0YSA9PiBzdWIgeworICAgICAgICAgICAgbXkgKCR0ZXN0X3N0 cnVjdCkgPSBAXzsKKyAgICAgICAgICAgIHJldHVybiBxcShJTlNFUlQgSU5UTyAkdGVzdF9zdHJ1 Y3QtPnt0YWJsZV9uYW1lfSAoYSkgVkFMVUVTIChudWxsKSwgKCdhYWFhYScpOyk7CisgICAgICAg IH0sCisgICAgICAgIGV4cGVjdGVkICAgPT4gd3JhcCgncmFuZ2UgaGFzbnVsbHMgYW5kIGFsbG51 bGxzIGFyZSBmYWxzZSwgYnV0IGNvbnRhaW5zIGEgbnVsbCB2YWx1ZS4gUmFuZ2UgYmxrbm86IDAs IGhlYXAgdGlkICgwLDEpJykKKyAgICB9LAorICAgIHsKKyAgICAgICAgIyByYW5nZSBhbGxudWxs cyBpcyB0cnVlLCBidXQgaGVhcCBjb250YWlucyBub24tbnVsbCB2YWx1ZXMgZm9yIHRoZSByYW5n ZQorCisgICAgICAgIGZpbmQgICAgID0+IHBhY2soJ0xDQycsIDAsIDB4ODgsIDB4MDIpLAorICAg ICAgICByZXBsYWNlICA9PiBwYWNrKCdMQ0MnLCAwLCAweDg4LCAweDAxKSwKKyAgICAgICAgYmxr bm8gICAgICA9PiAyLCAjIHJlZ3VsYXIgcGFnZQorICAgICAgICB0YWJsZV9kYXRhID0+IHN1YiB7 CisgICAgICAgICAgICBteSAoJHRlc3Rfc3RydWN0KSA9IEBfOworICAgICAgICAgICAgcmV0dXJu IHFxKElOU0VSVCBJTlRPICR0ZXN0X3N0cnVjdC0+e3RhYmxlX25hbWV9IChhKSBWQUxVRVMgKG51 bGwpLCAoJ2FhYWFhJyk7KTsKKyAgICAgICAgfSwKKyAgICAgICAgZXhwZWN0ZWQgICA9PiB3cmFw KCdyYW5nZSBhbGxudWxscyBpcyB0cnVlLCBidXQgY29udGFpbnMgbm9ubnVsbCB2YWx1ZS4gUmFu Z2UgYmxrbm86IDAsIGhlYXAgdGlkICgwLDIpJykKKyAgICB9LAorICAgIHsKKyAgICAgICAgIyBj b25zaXN0ZW50IGZ1bmN0aW9uIHJldHVybiBGQUxTRSBmb3IgdGhlIHZhbGlkIGhlYXAgdmFsdWUK KyAgICAgICAgIyByZXBsYWNlICJjY2NjYyIgd2l0aCAiYmJiYmIiIHNvIHRoYXQgbWluX21heCBp bmRleCB3YXMgdG9vIG5hcnJvdworCisgICAgICAgIGZpbmQgICAgICAgPT4gJ2NjY2NjJywKKyAg ICAgICAgcmVwbGFjZSAgICA9PiAnYmJiYmInLAorICAgICAgICBibGtubyAgICAgID0+IDIsICMg cmVndWxhciBwYWdlCisgICAgICAgIHRhYmxlX2RhdGEgPT4gc3ViIHsKKyAgICAgICAgICAgIG15 ICgkdGVzdF9zdHJ1Y3QpID0gQF87CisgICAgICAgICAgICByZXR1cm4gcXEoSU5TRVJUIElOVE8g JHRlc3Rfc3RydWN0LT57dGFibGVfbmFtZX0gKGEpIFZBTFVFUyAoJ2FhYWFhJyksICgnY2NjY2Mn KTspOworICAgICAgICB9LAorICAgICAgICBleHBlY3RlZCAgID0+IHdyYXAoJ2hlYXAgdHVwbGUg aW5jb25zaXN0ZW50IHdpdGggaW5kZXguIFJhbmdlIGJsa25vOiAwLCBoZWFwIHRpZCAoMCwyKScp CiAgICAgfQogKTsKIApAQCAtMjQxLDcgKzI5MCw3IEBAIGZvcmVhY2ggbXkgJHRlc3Rfc3RydWN0 IChAdGVzdHMpIHsKICRub2RlLT5zdGFydDsKIAogZm9yZWFjaCBteSAkdGVzdF9zdHJ1Y3QgKEB0 ZXN0cykgewotICAgIG15ICgkcmVzdWx0LCAkc3Rkb3V0LCAkc3RkZXJyKSA9ICRub2RlLT5wc3Fs KCdwb3N0Z3JlcycsIHFxKFNFTEVDVCBicmluX2luZGV4X2NoZWNrKCckdGVzdF9zdHJ1Y3QtPntp bmRleF9uYW1lfScsIHRydWUpKSk7CisgICAgbXkgKCRyZXN1bHQsICRzdGRvdXQsICRzdGRlcnIp ID0gJG5vZGUtPnBzcWwoJ3Bvc3RncmVzJywgcXEoU0VMRUNUIGJyaW5faW5kZXhfY2hlY2soJyR0 ZXN0X3N0cnVjdC0+e2luZGV4X25hbWV9JywgdHJ1ZSwgdHJ1ZSkpKTsKICAgICBsaWtlKCRzdGRl cnIsICR0ZXN0X3N0cnVjdC0+e2V4cGVjdGVkfSk7CiB9CiAKZGlmZiAtLWdpdCBhL2NvbnRyaWIv YW1jaGVjay92ZXJpZnlfYnJpbi5jIGIvY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9icmluLmMKaW5k ZXggOWQ1YTFjYWViZjYuLjAyMGNiYTUwNjM4IDEwMDY0NAotLS0gYS9jb250cmliL2FtY2hlY2sv dmVyaWZ5X2JyaW4uYworKysgYi9jb250cmliL2FtY2hlY2svdmVyaWZ5X2JyaW4uYwpAQCAtMzks NiArMzksOCBAQCB0eXBlZGVmIHN0cnVjdCBCcmluQ2hlY2tTdGF0ZQogCS8qIENoZWNrIGFyZ3Vt ZW50cyAqLwogCiAJYm9vbAkJcmVndWxhcl9wYWdlc19jaGVjazsKKwlib29sCQloZWFwX2FsbF9j b25zaXN0ZW50OworCUFycmF5VHlwZSAgKmhlYXBfYWxsX2NvbnNpc3RlbnRfb3Blcl9uYW1lczsK IAogCS8qIEJSSU4gY2hlY2sgY29tbW9uIGZpZWxkcyAqLwogCkBAIC02Nyw2ICs2OSwzMCBAQCB0 eXBlZGVmIHN0cnVjdCBCcmluQ2hlY2tTdGF0ZQogCVBhZ2UJCXJlZ3BhZ2U7CiAJT2Zmc2V0TnVt YmVyIHJlZ3BhZ2VvZmZzZXQ7CiAKKwkvKiBIZWFwIGFsbCBjb25zaXN0ZW50IGNoZWNrIGZpZWxk cyAqLworCisJU3RyaW5nCSAgKipvcGVyYXRvck5hbWVzOworCUJyaW5SZXZtYXAgKnJldm1hcDsK KwlCdWZmZXIJCWJ1ZjsKKwlGbWdySW5mbyAgICpjb25zaXN0ZW50Rm47CisJLyogU2NhbiBrZXlz IGZvciByZWd1bGFyIHZhbHVlcyAqLworCVNjYW5LZXkgICAgKm5vbm51bGxfc2s7CisJLyogU2Nh biBrZXlzIGZvciBudWxsIHZhbHVlcyAqLworCVNjYW5LZXkgICAgKmlzbnVsbF9zazsKKwlkb3Vi bGUJCXJhbmdlX2NudDsKKwkvKiBmaXJzdCBibG9jayBvZiB0aGUgbmV4dCByYW5nZSAqLworCUJs b2NrTnVtYmVyIG5leHRyYW5nZUJsazsKKworCS8qCisJICogY2hlY2thYmxlX3JhbmdlIHNob3dz IGlmIGN1cnJlbnQgcmFuZ2UgY291bGQgYmUgY2hlY2tlZCBhbmQgZHR1cAorCSAqIGNvbnRhaW5z IHZhbGlkIGluZGV4IHR1cGxlIGZvciB0aGUgcmFuZ2UuIEl0IGNvdWxkIGJlIGZhbHNlIGlmIHRo ZQorCSAqIGN1cnJlbnQgcmFuZ2UgaXMgbm90IHN1bW1hcml6ZWQsIG9yIGl0J3MgcGxhY2Vob2xk ZXIsIG9yIGl0J3MganVzdCBhCisJICogYmVnaW5uaW5nIG9mIHRoZSBjaGVjaworCSAqLworCWJv b2wJCWNoZWNrYWJsZV9yYW5nZTsKKwlCcmluTWVtVHVwbGUgKmR0dXA7CisJTWVtb3J5Q29udGV4 dCByYW5nZUN0eDsKKwlNZW1vcnlDb250ZXh0IGhlYXB0dXBsZUN0eDsKIH0JCQlCcmluQ2hlY2tT dGF0ZTsKIAogc3RhdGljIHZvaWQgYnJpbl9jaGVjayhSZWxhdGlvbiBpZHhyZWwsIFJlbGF0aW9u IGhlYXByZWwsIHZvaWQgKmNhbGxiYWNrX3N0YXRlLCBib29sIHJlYWRvbmx5KTsKQEAgLTg3LDYg KzExMywyMyBAQCBzdGF0aWMgYm9vbCByZXZtYXBfcG9pbnRzX3RvX2luZGV4X3R1cGxlKEJyaW5D aGVja1N0YXRlICogc3RhdGUpOwogCiBzdGF0aWMgSXRlbUlkIFBhZ2VHZXRJdGVtSWRDYXJlZnVs KEJyaW5DaGVja1N0YXRlICogc3RhdGUpOwogCitzdGF0aWMgdm9pZCBjaGVja19oZWFwX2FsbF9j b25zaXN0ZW50KEJyaW5DaGVja1N0YXRlICogc3RhdGUpOworCitzdGF0aWMgdm9pZCBjaGVja19h bmRfcHJlcGFyZV9vcGVyYXRvcl9uYW1lcyhCcmluQ2hlY2tTdGF0ZSAqIHN0YXRlKTsKKworc3Rh dGljIHZvaWQgYnJpbl9jaGVja19jYWxsYmFjayhSZWxhdGlvbiBpbmRleCwKKwkJCQkJCQkJSXRl bVBvaW50ZXIgdGlkLAorCQkJCQkJCQlEYXR1bSAqdmFsdWVzLAorCQkJCQkJCQlib29sICppc251 bGwsCisJCQkJCQkJCWJvb2wgdHVwbGVJc0FsaXZlLAorCQkJCQkJCQl2b2lkICpicnN0YXRlKTsK Kworc3RhdGljIHZvaWQgY2hlY2tfaGVhcF90dXBsZShCcmluQ2hlY2tTdGF0ZSAqIHN0YXRlLCBj b25zdCBEYXR1bSAqdmFsdWVzLCBjb25zdCBib29sICpudWxscywgSXRlbVBvaW50ZXIgdGlkKTsK Kworc3RhdGljIFNjYW5LZXkgcHJlcGFyZV9ub25udWxsX3NjYW5fa2V5KGNvbnN0IEJyaW5DaGVj a1N0YXRlICogc3RhdGUsIEF0dHJOdW1iZXIgYXR0bm8pOworCitzdGF0aWMgU2NhbktleSBwcmVw YXJlX2lzbnVsbF9zY2FuX2tleShBdHRyTnVtYmVyIGF0dG5vKTsKKwogc3RhdGljIHZvaWQgYnJp bl9jaGVja19lcmVwb3J0KEJyaW5DaGVja1N0YXRlICogc3RhdGUsIGNvbnN0IGNoYXIgKmZtdCk7 CiAKIHN0YXRpYyB2b2lkIHJldm1hcF9pdGVtX2VyZXBvcnQoQnJpbkNoZWNrU3RhdGUgKiBzdGF0 ZSwgY29uc3QgY2hhciAqZm10KTsKQEAgLTk1LDYgKzEzOCw3IEBAIHN0YXRpYyB2b2lkIGluZGV4 X3R1cGxlX2VyZXBvcnQoQnJpbkNoZWNrU3RhdGUgKiBzdGF0ZSwgY29uc3QgY2hhciAqZm10KTsK IAogc3RhdGljIHZvaWQgaW5kZXhfdHVwbGVfb25seV9lcmVwb3J0KEJyaW5DaGVja1N0YXRlICog c3RhdGUsIGNvbnN0IGNoYXIgKmZtdCk7CiAKK3N0YXRpYyB2b2lkIGFsbF9jb25zaXN0X2VyZXBv cnQoY29uc3QgQnJpbkNoZWNrU3RhdGUgKiBzdGF0ZSwgY29uc3QgSXRlbVBvaW50ZXJEYXRhICp0 aWQsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOwogCiBEYXR1bQogYnJpbl9pbmRleF9jaGVjayhQR19G VU5DVElPTl9BUkdTKQpAQCAtMTAzLDYgKzE0Nyw4IEBAIGJyaW5faW5kZXhfY2hlY2soUEdfRlVO Q1RJT05fQVJHUykKIAlCcmluQ2hlY2tTdGF0ZSAqc3RhdGUgPSBwYWxsb2MwKHNpemVvZihCcmlu Q2hlY2tTdGF0ZSkpOwogCiAJc3RhdGUtPnJlZ3VsYXJfcGFnZXNfY2hlY2sgPSBQR19HRVRBUkdf Qk9PTCgxKTsKKwlzdGF0ZS0+aGVhcF9hbGxfY29uc2lzdGVudCA9IFBHX0dFVEFSR19CT09MKDIp OworCXN0YXRlLT5oZWFwX2FsbF9jb25zaXN0ZW50X29wZXJfbmFtZXMgPSBQR19HRVRBUkdfQVJS QVlUWVBFX1AoMyk7CiAKIAlhbWNoZWNrX2xvY2tfcmVsYXRpb25fYW5kX2NoZWNrKGluZHJlbGlk LAogCQkJCQkJCQkJQlJJTl9BTV9PSUQsCkBAIC0xMjcsOSArMTczLDIxIEBAIGJyaW5fY2hlY2so UmVsYXRpb24gaWR4cmVsLCBSZWxhdGlvbiBoZWFwcmVsLCB2b2lkICpjYWxsYmFja19zdGF0ZSwg Ym9vbCByZWFkb25sCiAJc3RhdGUtPmJkZXNjID0gYnJpbl9idWlsZF9kZXNjKGlkeHJlbCk7CiAJ c3RhdGUtPm5hdHRzID0gc3RhdGUtPmJkZXNjLT5iZF90dXBkZXNjLT5uYXR0czsKIAorCS8qCisJ ICogV2Uga25vdyBob3cgbWFueSBhdHRyaWJ1dGVzIGluZGV4IGhhcywgc28gbGV0J3MgcHJvY2Vz cyBvcGVyYXRvciBuYW1lcworCSAqIGFycmF5CisJICovCisJaWYgKHN0YXRlLT5oZWFwX2FsbF9j b25zaXN0ZW50KQorCXsKKwkJY2hlY2tfYW5kX3ByZXBhcmVfb3BlcmF0b3JfbmFtZXMoc3RhdGUp OworCX0KIAogCWNoZWNrX2JyaW5faW5kZXhfc3RydWN0dXJlKHN0YXRlKTsKIAorCWlmIChzdGF0 ZS0+aGVhcF9hbGxfY29uc2lzdGVudCkKKwl7CisJCWNoZWNrX2hlYXBfYWxsX2NvbnNpc3RlbnQo c3RhdGUpOworCX0KIAogCWJyaW5fZnJlZV9kZXNjKHN0YXRlLT5iZGVzYyk7CiB9CkBAIC03NDAs NiArNzk4LDQxNCBAQCBQYWdlR2V0SXRlbUlkQ2FyZWZ1bChCcmluQ2hlY2tTdGF0ZSAqIHN0YXRl KQogCXJldHVybiBpdGVtaWQ7CiB9CiAKKy8qCisgKiBDaGVjayB0aGF0IGV2ZXJ5IGhlYXAgdHVw bGUgYXJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgaW5kZXguCisgKgorICogSGVyZSB3ZSBnZW5lcmF0 ZSBTY2FuS2V5IGZvciBldmVyeSBoZWFwIHR1cGxlIGFuZCB0ZXN0IGl0IGFnYWluc3QKKyAqIGFw cHJvcHJpYXRlIHJhbmdlIHVzaW5nIGNvbnNpc3RlbnRGbiAoZm9yIFNjYW5LZXkgZ2VuZXJhdGlv biBsb2dpYyBsb29rICdwcmVwYXJlX25vbm51bGxfc2Nhbl9rZXknKQorICoKKyAqIEFsc28sIHdl IGNoZWNrIHRoYXQgZmllbGRzICdlbXB0eV9yYW5nZScsICdhbGxfbnVsbHMnIGFuZCAnaGFzX251 bGxzJworICogYXJlIG5vdCB0b28gIm5hcnJvdyIgZm9yIGVhY2ggcmFuZ2UsIHdoaWNoIG1lYW5z OgorICogMSkgaGFzX251bGxzID0gZmFsc2UsIGJ1dCB3ZSBzZWUgbnVsbCB2YWx1ZSAob25seSBm b3Igb2lfcmVndWxhcl9udWxscyBpcyB0cnVlKQorICogMikgYWxsX251bGxzID0gdHJ1ZSwgYnV0 IHdlIHNlZSBub25udWxsIHZhbHVlLgorICogMykgZW1wdHlfcmFuZ2UgPSB0cnVlLCBidXQgd2Ug c2VlIHR1cGxlIHdpdGhpbiB0aGUgcmFuZ2UuCisgKgorICogV2UgdXNlIGFsbG93U3luYyA9IGZh bHNlLCBiZWNhdXNlIHRoaXMgd2F5CisgKiB3ZSBwcm9jZXNzIGZ1bGwgcmFuZ2VzIG9uZSBieSBv bmUgZnJvbSB0aGUgZmlyc3QgcmFuZ2UuCisgKiBJdCdzIG5vdCBuZWNlc3NhcnksIGJ1dCBtYWtl cyB0aGUgY29kZSBzaW1wbGVyIGFuZCB0aGlzIHdheQorICogd2UgbmVlZCB0byBmZXRjaCBldmVy eSBpbmRleCB0dXBsZSBvbmx5IG9uY2UuCisgKi8KK3N0YXRpYyB2b2lkCitjaGVja19oZWFwX2Fs bF9jb25zaXN0ZW50KEJyaW5DaGVja1N0YXRlICogc3RhdGUpCit7CisJUmVsYXRpb24JaWR4cmVs ID0gc3RhdGUtPmlkeHJlbDsKKwlSZWxhdGlvbgloZWFwcmVsID0gc3RhdGUtPmhlYXByZWw7CisJ ZG91YmxlCQlyZWx0dXBsZXM7CisJSW5kZXhJbmZvICAqaW5kZXhJbmZvOworCisJLyogSGVhcCBh bGwgY29uc2lzdGVudCBjaGVjayBmaWVsZHMgaW5pdGlhbGl6YXRpb24gKi8KKworCXN0YXRlLT5y ZXZtYXAgPSBicmluUmV2bWFwSW5pdGlhbGl6ZShpZHhyZWwsICZzdGF0ZS0+cGFnZXNQZXJSYW5n ZSk7CisJc3RhdGUtPmR0dXAgPSBicmluX25ld19tZW10dXBsZShzdGF0ZS0+YmRlc2MpOworCXN0 YXRlLT5jaGVja2FibGVfcmFuZ2UgPSBmYWxzZTsKKwlzdGF0ZS0+Y29uc2lzdGVudEZuID0gcGFs bG9jMF9hcnJheShGbWdySW5mbywgc3RhdGUtPm5hdHRzKTsKKwlzdGF0ZS0+cmFuZ2VfY250ID0g MDsKKwkvKiBuZXh0IHJhbmdlIGlzIHRoZSBmaXJzdCByYW5nZSBpbiB0aGUgYmVnaW5uaW5nICov CisJc3RhdGUtPm5leHRyYW5nZUJsayA9IDA7CisJc3RhdGUtPm5vbm51bGxfc2sgPSBwYWxsb2Mw X2FycmF5KFNjYW5LZXksIHN0YXRlLT5uYXR0cyk7CisJc3RhdGUtPmlzbnVsbF9zayA9IHBhbGxv YzBfYXJyYXkoU2NhbktleSwgc3RhdGUtPm5hdHRzKTsKKwlzdGF0ZS0+cmFuZ2VDdHggPSBBbGxv Y1NldENvbnRleHRDcmVhdGUoQ3VycmVudE1lbW9yeUNvbnRleHQsCisJCQkJCQkJCQkJCSJicmlu IGNoZWNrIHJhbmdlIGNvbnRleHQiLAorCQkJCQkJCQkJCQlBTExPQ1NFVF9ERUZBVUxUX1NJWkVT KTsKKwlzdGF0ZS0+aGVhcHR1cGxlQ3R4ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKEN1cnJlbnRN ZW1vcnlDb250ZXh0LAorCQkJCQkJCQkJCQkJImJyaW4gY2hlY2sgdHVwbGUgY29udGV4dCIsCisJ CQkJCQkJCQkJCQlBTExPQ1NFVF9ERUZBVUxUX1NJWkVTKTsKKworCS8qCisJICogUHJlcGFyZSAi bm9uLW51bGwiIGFuZCAiaXNfbnVsbCIgc2NhbiBrZXlzIGFuZCBjb25zaXN0ZW50IGZuIGZvciBl YWNoCisJICogYXR0cmlidXRlCisJICovCisJZm9yIChBdHRyTnVtYmVyIGF0dG5vID0gMTsgYXR0 bm8gPD0gc3RhdGUtPm5hdHRzOyBhdHRubysrKQorCXsKKwkJRm1nckluZm8gICAqdG1wOworCisJ CXRtcCA9IGluZGV4X2dldHByb2NpbmZvKGlkeHJlbCwgYXR0bm8sIEJSSU5fUFJPQ05VTV9DT05T SVNURU5UKTsKKwkJZm1ncl9pbmZvX2NvcHkoJnN0YXRlLT5jb25zaXN0ZW50Rm5bYXR0bm8gLSAx XSwgdG1wLCBDdXJyZW50TWVtb3J5Q29udGV4dCk7CisKKwkJc3RhdGUtPm5vbm51bGxfc2tbYXR0 bm8gLSAxXSA9IHByZXBhcmVfbm9ubnVsbF9zY2FuX2tleShzdGF0ZSwgYXR0bm8pOworCQlzdGF0 ZS0+aXNudWxsX3NrW2F0dG5vIC0gMV0gPSBwcmVwYXJlX2lzbnVsbF9zY2FuX2tleShhdHRubyk7 CisJfQorCisJaW5kZXhJbmZvID0gQnVpbGRJbmRleEluZm8oaWR4cmVsKTsKKworCS8qCisJICog VXNlIHNuYXBzaG90IHRvIGNoZWNrIG9ubHkgdGhvc2UgdHVwbGVzIHRoYXQgYXJlIGd1YXJhbnRl ZWQgdG8gYmUKKwkgKiBpbmRleGVkIGFscmVhZHkuIFVzaW5nIFNuYXBzaG90QW55IHdvdWxkIG1h a2UgaXQgbW9yZSBkaWZmaWN1bHQgdG8gc2F5CisJICogaWYgdGhlcmUgaXMgYSBjb3JydXB0aW9u IG9yIGNoZWNrZWQgdHVwbGUganVzdCBoYXZlbid0IGJlZW4gaW5kZXhlZAorCSAqIHlldC4KKwkg Ki8KKwlpbmRleEluZm8tPmlpX0NvbmN1cnJlbnQgPSB0cnVlOworCXJlbHR1cGxlcyA9IHRhYmxl X2luZGV4X2J1aWxkX3NjYW4oaGVhcHJlbCwgaWR4cmVsLCBpbmRleEluZm8sIGZhbHNlLCB0cnVl LAorCQkJCQkJCQkJICAgYnJpbl9jaGVja19jYWxsYmFjaywgKHZvaWQgKikgc3RhdGUsIE5VTEwp OworCisJZWxvZyhERUJVRzMsICJyYW5nZXMgd2VyZSBjaGVja2VkOiAlZiIsIHN0YXRlLT5yYW5n ZV9jbnQpOworCWVsb2coREVCVUczLCAic2NhbiB0b3RhbCB0dXBsZXM6ICVmIiwgcmVsdHVwbGVz KTsKKworCWlmIChzdGF0ZS0+YnVmICE9IEludmFsaWRCdWZmZXIpCisJCVJlbGVhc2VCdWZmZXIo c3RhdGUtPmJ1Zik7CisKKwlicmluUmV2bWFwVGVybWluYXRlKHN0YXRlLT5yZXZtYXApOworCU1l bW9yeUNvbnRleHREZWxldGUoc3RhdGUtPnJhbmdlQ3R4KTsKKwlNZW1vcnlDb250ZXh0RGVsZXRl KHN0YXRlLT5oZWFwdHVwbGVDdHgpOworfQorCisvKgorICogQ2hlY2sgb3BlcmF0b3IgbmFtZXMg YXJyYXkgaW5wdXQgcGFyYW1ldGVyIGFuZCBjb252ZXJ0IGl0IHRvIGFycmF5IG9mIHN0cmluZ3MK KyAqIEVtcHR5IGlucHV0IGFycmF5IG1lYW5zIHdlIHVzZSAiPSIgb3BlcmF0b3IgZm9yIGV2ZXJ5 IGF0dHJpYnV0ZQorICovCitzdGF0aWMgdm9pZAorY2hlY2tfYW5kX3ByZXBhcmVfb3BlcmF0b3Jf bmFtZXMoQnJpbkNoZWNrU3RhdGUgKiBzdGF0ZSkKK3sKKwlPaWQJCQllbGVtZW50X3R5cGUgPSBB UlJfRUxFTVRZUEUoc3RhdGUtPmhlYXBfYWxsX2NvbnNpc3RlbnRfb3Blcl9uYW1lcyk7CisJaW50 MTYJCXR5cGxlbjsKKwlib29sCQl0eXBieXZhbDsKKwljaGFyCQl0eXBhbGlnbjsKKwlEYXR1bQkg ICAqdmFsdWVzOworCWJvb2wJICAgKmVsZW1fbnVsbHM7CisJaW50CQkJbnVtX2VsZW1zOworCisJ c3RhdGUtPm9wZXJhdG9yTmFtZXMgPSBwYWxsb2Moc2l6ZW9mKFN0cmluZykgKiBzdGF0ZS0+bmF0 dHMpOworCisJZ2V0X3R5cGxlbmJ5dmFsYWxpZ24oZWxlbWVudF90eXBlLCAmdHlwbGVuLCAmdHlw Ynl2YWwsICZ0eXBhbGlnbik7CisJZGVjb25zdHJ1Y3RfYXJyYXkoc3RhdGUtPmhlYXBfYWxsX2Nv bnNpc3RlbnRfb3Blcl9uYW1lcywgZWxlbWVudF90eXBlLCB0eXBsZW4sIHR5cGJ5dmFsLCB0eXBh bGlnbiwKKwkJCQkJICAmdmFsdWVzLCAmZWxlbV9udWxscywgJm51bV9lbGVtcyk7CisKKwkvKiBJ ZiB3ZSBoYXZlIHNvbWUgaW5wdXQgY2hlY2sgaXQgYW5kIGNvbnZlcnQgdG8gU3RyaW5nKiogKi8K KwlpZiAobnVtX2VsZW1zICE9IDApCisJeworCQlpZiAobnVtX2VsZW1zICE9IHN0YXRlLT5uYXR0 cykKKwkJeworCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElE X1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCSBlcnJtc2coIk9wZXJhdG9yIG5hbWVzIGFycmF5IGxl bmd0aCAldSwgYnV0IGluZGV4IGhhcyAldSBhdHRyaWJ1dGVzIiwKKwkJCQkJCQludW1fZWxlbXMs IHN0YXRlLT5uYXR0cykpKTsKKwkJfQorCisJCWZvciAoaW50IGkgPSAwOyBpIDwgbnVtX2VsZW1z OyBpKyspCisJCXsKKwkJCWlmIChlbGVtX251bGxzW2ldKQorCQkJeworCQkJCWVyZXBvcnQoRVJS T1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJ CQkJCSBlcnJtc2coIk9wZXJhdG9yIG5hbWVzIGFycmF5IGNvbnRhaW5zIE5VTEwiKSkpOworCQkJ fQorCQkJc3RhdGUtPm9wZXJhdG9yTmFtZXNbaV0gPSBtYWtlU3RyaW5nKFRleHREYXR1bUdldENT dHJpbmcodmFsdWVzW2ldKSk7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJLyogSWYgdGhlcmUgaXMg bm8gaW5wdXQganVzdCB1c2UgIj0iIG9wZXJhdG9yIGZvciBhbGwgYXR0cmlidXRlcyAqLworCQlm b3IgKGludCBpID0gMDsgaSA8IHN0YXRlLT5uYXR0czsgaSsrKQorCQl7CisJCQlzdGF0ZS0+b3Bl cmF0b3JOYW1lc1tpXSA9IG1ha2VTdHJpbmcoIj0iKTsKKwkJfQorCX0KK30KKworLyoKKyAqIFBy ZXBhcmUgU2NhbktleSBmb3IgaW5kZXggYXR0cmlidXRlLgorICoKKyAqIENvbnNpc3RlbnRGbiBy ZXF1aXJlcyBTY2FuS2V5LCBzbyB3ZSBuZWVkIHRvIGdlbmVyYXRlIFNjYW5LZXkgZm9yIGV2ZXJ5 CisgKiBhdHRyaWJ1dGUgc29tZWhvdy4gV2Ugd2FudCBTY2FuS2V5IHRoYXQgd291bGQgcmVzdWx0 IGluIFRSVUUgZm9yIGV2ZXJ5IGhlYXAKKyAqIHR1cGxlIHdpdGhpbiB0aGUgcmFuZ2Ugd2hlbiB3 ZSB1c2UgaXRzIGluZGV4ZWQgdmFsdWUgYXMgc2tfYXJndW1lbnQuCisgKiBUbyBnZW5lcmF0ZSBz dWNoIGEgU2NhbktleSB3ZSBuZWVkIHRvIGRlZmluZSB0aGUgcmlnaHQgb3BlcmFuZCB0eXBlIGFu ZCB0aGUgc3RyYXRlZ3kgbnVtYmVyLgorICogUmlnaHQgb3BlcmFuZCB0eXBlIGlzIGEgdHlwZSBv ZiBkYXRhIHRoYXQgaW5kZXggaXMgYnVpbHQgb24sIHNvIGl0J3MgJ29wY2ludHlwZScuCisgKiBU aGVyZSBpcyBubyBzdHJhdGVneSBudW1iZXIgdGhhdCB3ZSBjYW4gYWx3YXlzIHVzZSwKKyAqIGJl Y2F1c2UgZXZlcnkgb3BjbGFzcyBkZWZpbmVzIGl0cyBvd24gc2V0IG9mIG9wZXJhdG9ycyBpdCBz dXBwb3J0cyBhbmQgc3RyYXRlZ3kgbnVtYmVyCisgKiBmb3IgdGhlIHNhbWUgb3BlcmF0b3IgY2Fu IGRpZmZlciBmcm9tIG9wY2xhc3MgdG8gb3BjbGFzcy4KKyAqIFNvIHRvIGdldCBzdHJhdGVneSBu dW1iZXIgd2UgbG9vayB1cCBhbiBvcGVyYXRvciB0aGF0IGdpdmVzIHVzIGRlc2lyZWQgYmVoYXZp b3IKKyAqIGFuZCB3aGljaCBib3RoIG9wZXJhbmQgdHlwZXMgYXJlICdvcGNpbnR5cGUnIGFuZCB0 aGVuIHJldHJpZXZlIHRoZSBzdHJhdGVneSBudW1iZXIgZm9yIGl0LgorICogTW9zdCBvZiB0aGUg dGltZSB3ZSBjYW4gdXNlICc9Jy4gV2UgbGV0IHVzZXIgZGVmaW5lIG9wZXJhdG9yIG5hbWUgaW4g Y2FzZSBvcGNsYXNzIGRvZXNuJ3QKKyAqIHN1cHBvcnQgJz0nIG9wZXJhdG9yLiBBbHNvLCBpZiBz dWNoIG9wZXJhdG9yIGRvZXNuJ3QgZXhpc3QsIHdlIGNhbid0IHByb2NlZWQgd2l0aCB0aGUgY2hl Y2suCisgKgorICogR2VuZXJhdGVkIG9uY2UsIGFuZCB3aWxsIGJlIHJldXNlZCBmb3IgYWxsIGhl YXAgdHVwbGVzLgorICogQXJndW1lbnQgZmllbGQgd2lsbCBiZSBmaWxsZWQgZm9yIGV2ZXJ5IGhl YXAgdHVwbGUgYmVmb3JlCisgKiBjb25zaXN0ZW50IGZ1bmN0aW9uIGludm9jYXRpb24sIHNvIGxl YXZlIGl0IE5VTEwgZm9yIGEgd2hpbGUuCisgKgorICovCitzdGF0aWMgU2NhbktleQorcHJlcGFy ZV9ub25udWxsX3NjYW5fa2V5KGNvbnN0IEJyaW5DaGVja1N0YXRlICogc3RhdGUsIEF0dHJOdW1i ZXIgYXR0bm8pCit7CisJU2NhbktleQkJc2NhbktleTsKKwlPaWQJCQlvcE9pZDsKKwlPaWQJCQlv cEZhbWlseU9pZDsKKwlib29sCQlkZWZpbmVkOworCVN0cmF0ZWd5TnVtYmVyIHN0cmF0ZWd5Owor CVJlZ1Byb2NlZHVyZSBvcFJlZ1Byb2M7CisJTGlzdAkgICAqb3Blck5hbWVMaXN0OworCWludAkJ CWF0dGluZGV4ID0gYXR0bm8gLSAxOworCUZvcm1fcGdfYXR0cmlidXRlIGF0dHIgPSBUdXBsZURl c2NBdHRyKHN0YXRlLT5iZGVzYy0+YmRfdHVwZGVzYywgYXR0aW5kZXgpOworCU9pZAkJCXR5cGUg PSBzdGF0ZS0+aWR4cmVsLT5yZF9vcGNpbnR5cGVbYXR0aW5kZXhdOworCVN0cmluZwkgICAqb3Bu YW1lID0gc3RhdGUtPm9wZXJhdG9yTmFtZXNbYXR0bm8gLSAxXTsKKworCW9wRmFtaWx5T2lkID0g c3RhdGUtPmlkeHJlbC0+cmRfb3BmYW1pbHlbYXR0aW5kZXhdOworCW9wZXJOYW1lTGlzdCA9IGxp c3RfbWFrZTEob3BuYW1lKTsKKwlvcE9pZCA9IE9wZXJhdG9yTG9va3VwKG9wZXJOYW1lTGlzdCwg dHlwZSwgdHlwZSwgJmRlZmluZWQpOworCisJaWYgKG9wT2lkID09IEludmFsaWRPaWQpCisJewor CQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfVU5ERUZJTkVEX0ZVTkNUSU9O KSwKKwkJCQkgZXJybXNnKCJUaGVyZSBpcyBubyBvcGVyYXRvciAlcyBmb3IgdHlwZSAldSIsCisJ CQkJCQlvcG5hbWUtPnN2YWwsIHR5cGUpKSk7CisJfQorCisJc3RyYXRlZ3kgPSBnZXRfb3Bfb3Bm YW1pbHlfc3RyYXRlZ3kob3BPaWQsIG9wRmFtaWx5T2lkKTsKKworCWlmIChzdHJhdGVneSA9PSAw KQorCXsKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX1dST05HX09CSkVD VF9UWVBFKSwKKwkJCQkgZXJybXNnKCJvcGVyYXRvciAlcyBpcyBub3QgYSBtZW1iZXIgb2Ygb3Bl cmF0b3IgZmFtaWx5IFwiJXNcIiIsCisJCQkJCQlvcG5hbWUtPnN2YWwsCisJCQkJCQlnZXRfb3Bm YW1pbHlfbmFtZShvcEZhbWlseU9pZCwgZmFsc2UpKSkpOworCX0KKworCW9wUmVnUHJvYyA9IGdl dF9vcGNvZGUob3BPaWQpOworCXNjYW5LZXkgPSBwYWxsb2MwKHNpemVvZihTY2FuS2V5RGF0YSkp OworCVNjYW5LZXlFbnRyeUluaXRpYWxpemUoCisJCQkJCQkgICBzY2FuS2V5LAorCQkJCQkJICAg MCwKKwkJCQkJCSAgIGF0dG5vLAorCQkJCQkJICAgc3RyYXRlZ3ksCisJCQkJCQkgICB0eXBlLAor CQkJCQkJICAgYXR0ci0+YXR0Y29sbGF0aW9uLAorCQkJCQkJICAgb3BSZWdQcm9jLAorCQkJCQkJ ICAgKERhdHVtKSBOVUxMCisJCSk7CisJcGZyZWUob3Blck5hbWVMaXN0KTsKKworCXJldHVybiBz Y2FuS2V5OworfQorCitzdGF0aWMgU2NhbktleQorcHJlcGFyZV9pc251bGxfc2Nhbl9rZXkoQXR0 ck51bWJlciBhdHRubykKK3sKKwlTY2FuS2V5CQlzY2FuS2V5OworCisJc2NhbktleSA9IHBhbGxv YzAoc2l6ZW9mKFNjYW5LZXlEYXRhKSk7CisJU2NhbktleUVudHJ5SW5pdGlhbGl6ZShzY2FuS2V5 LAorCQkJCQkJICAgU0tfSVNOVUxMIHwgU0tfU0VBUkNITlVMTCwKKwkJCQkJCSAgIGF0dG5vLAor CQkJCQkJICAgSW52YWxpZFN0cmF0ZWd5LAorCQkJCQkJICAgSW52YWxpZE9pZCwKKwkJCQkJCSAg IEludmFsaWRPaWQsCisJCQkJCQkgICBJbnZhbGlkT2lkLAorCQkJCQkJICAgKERhdHVtKSAwKTsK KwlyZXR1cm4gc2NhbktleTsKK30KKworLyoKKyAqIFdlIHdhbGsgZnJvbSB0aGUgZmlyc3QgcmFu Z2UgKGJsa25vID0gMCkgdG8gdGhlIGxhc3QgYXMgdGhlIHNjYW4gcHJvY2VlZC4KKyAqIEZvciBl dmVyeSBoZWFwIHR1cGxlIHdlIGNoZWNrIGlmIHdlIGFyZSBkb25lIHdpdGggdGhlIGN1cnJlbnQg cmFuZ2UsIGFuZCB3ZSBuZWVkIHRvIG1vdmUgZnVydGhlcgorICogdG8gdGhlIGN1cnJlbnQgaGVh cCB0dXBsZSdzIHJhbmdlLiBXaGlsZSBtb3ZpbmcgdG8gdGhlIG5leHQgcmFuZ2Ugd2UgY2hlY2sg dGhhdCBpdCdzIG5vdCBlbXB0eSAoYmVjYXVzZQorICogd2UgaGF2ZSBhdCBsZWFzdCBvbmUgdHVw bGUgZm9yIHRoaXMgcmFuZ2UpLgorICogRXZlcnkgaGVhcCB0dXBsZSBhcmUgY2hlY2tlZCB0byBi ZSBjb25zaXN0ZW50IHdpdGggdGhlIHJhbmdlIGl0IGJlbG9uZ3MgdG8uCisgKiBJbiBjYXNlIG9m IHVuc3VtbWFyaXplZCByYW5nZXMgYW5kIHBsYWNlaG9sZGVycyB3ZSBza2lwIGFsbCBjaGVja3Mu CisgKgorICogV2hpbGUgbW92aW5nLCB3ZSBtYXkganVtcCBvdmVyIHNvbWUgcmFuZ2VzLAorICog YnV0IGl0J3Mgb2theSBiZWNhdXNlIHdlIHdvdWxkIG5vdCBiZSBhYmxlIHRvIGNoZWNrIHRoZW0g YW55d2F5LgorICogV2UgYWxzbyBjYW4ndCBzYXkgd2hldGhlciBza2lwcGVkIHJhbmdlcyBzaG91 bGQgYmUgbWFya2VkIGFzIGVtcHR5IG9yIG5vdCwKKyAqIHNpbmNlIGl0J3MgcG9zc2libGUgdGhh dCB0aGVyZSB3ZXJlIHNvbWUgdHVwbGVzIGJlZm9yZSB0aGF0IGFyZSBub3cgZGVsZXRlZC4KKyAq CisgKi8KK3N0YXRpYyB2b2lkCiticmluX2NoZWNrX2NhbGxiYWNrKFJlbGF0aW9uIGluZGV4LCBJ dGVtUG9pbnRlciB0aWQsIERhdHVtICp2YWx1ZXMsIGJvb2wgKmlzbnVsbCwgYm9vbCB0dXBsZUlz QWxpdmUsIHZvaWQgKmJyc3RhdGUpCit7CisJQnJpbkNoZWNrU3RhdGUgKnN0YXRlOworCUJsb2Nr TnVtYmVyIGhlYXBibGs7CisKKwlzdGF0ZSA9IChCcmluQ2hlY2tTdGF0ZSAqKSBicnN0YXRlOwor CWhlYXBibGsgPSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCk7CisKKwkvKiBJZiB3ZSB3 ZW50IGJleW9uZCB0aGUgY3VycmVudCByYW5nZSBsZXQncyBmZXRjaCBuZXcgcmFuZ2UgKi8KKwlp ZiAoaGVhcGJsayA+PSBzdGF0ZS0+bmV4dHJhbmdlQmxrKQorCXsKKwkJQnJpblR1cGxlICAqdHVw OworCQlCcmluVHVwbGUgICp0dXBjb3B5ID0gTlVMTDsKKwkJTWVtb3J5Q29udGV4dCBvbGRDdHg7 CisJCU9mZnNldE51bWJlciBvZmY7CisJCVNpemUJCXNpemU7CisJCVNpemUJCWJ0dXBzeiA9IDA7 CisKKwkJTWVtb3J5Q29udGV4dFJlc2V0KHN0YXRlLT5yYW5nZUN0eCk7CisJCW9sZEN0eCA9IE1l bW9yeUNvbnRleHRTd2l0Y2hUbyhzdGF0ZS0+cmFuZ2VDdHgpOworCisJCXN0YXRlLT5yYW5nZV9j bnQrKzsKKworCQkvKiBNb3ZlIHRvIHRoZSByYW5nZSB0aGF0IGNvbnRhaW5zIGN1cnJlbnQgaGVh cCB0dXBsZSAqLworCQl0dXAgPSBicmluR2V0VHVwbGVGb3JIZWFwQmxvY2soc3RhdGUtPnJldm1h cCwgaGVhcGJsaywgJnN0YXRlLT5idWYsCisJCQkJCQkJCQkgICAmb2ZmLCAmc2l6ZSwgQlVGRkVS X0xPQ0tfU0hBUkUpOworCisJCWlmICh0dXApCisJCXsKKwkJCXR1cGNvcHkgPSBicmluX2NvcHlf dHVwbGUodHVwLCBzaXplLCB0dXBjb3B5LCAmYnR1cHN6KTsKKwkJCUxvY2tCdWZmZXIoc3RhdGUt PmJ1ZiwgQlVGRkVSX0xPQ0tfVU5MT0NLKTsKKwkJCXN0YXRlLT5kdHVwID0gYnJpbl9kZWZvcm1f dHVwbGUoc3RhdGUtPmJkZXNjLCB0dXBjb3B5LCBzdGF0ZS0+ZHR1cCk7CisKKwkJCS8qIFdlIGNh bid0IGNoZWNrIHBsYWNlaG9sZGVyIHJhbmdlcyAqLworCQkJc3RhdGUtPmNoZWNrYWJsZV9yYW5n ZSA9ICFzdGF0ZS0+ZHR1cC0+YnRfcGxhY2Vob2xkZXI7CisJCX0KKwkJZWxzZQorCQl7CisJCQkv KiBXZSBjYW4ndCBjaGVjayB1bnN1bW1hcml6ZWQgcmFuZ2VzLiAqLworCQkJc3RhdGUtPmNoZWNr YWJsZV9yYW5nZSA9IGZhbHNlOworCQl9CisKKwkJLyoKKwkJICogVXBkYXRlIG5leHRyYW5nZUJs ayBzbyB3ZSBrbm93IHdoZW4gd2UgYXJlIGRvbmUgd2l0aCB0aGUgY3VycmVudAorCQkgKiByYW5n ZQorCQkgKi8KKwkJc3RhdGUtPm5leHRyYW5nZUJsayA9IChoZWFwYmxrIC8gc3RhdGUtPnBhZ2Vz UGVyUmFuZ2UgKyAxKSAqIHN0YXRlLT5wYWdlc1BlclJhbmdlOworCisJCU1lbW9yeUNvbnRleHRT d2l0Y2hUbyhvbGRDdHgpOworCisJCS8qIFJhbmdlIG11c3Qgbm90IGJlIGVtcHR5ICovCisJCWlm IChzdGF0ZS0+Y2hlY2thYmxlX3JhbmdlICYmIHN0YXRlLT5kdHVwLT5idF9lbXB0eV9yYW5nZSkK KwkJeworCQkJYWxsX2NvbnNpc3RfZXJlcG9ydChzdGF0ZSwgdGlkLCAicmFuZ2UgaXMgbWFya2Vk IGFzIGVtcHR5IGJ1dCBjb250YWlucyBxdWFsaWZpZWQgbGl2ZSB0dXBsZXMiKTsKKwkJfQorCisJ fQorCisJLyogQ2hlY2sgdHVwbGUgaXMgY29uc2lzdGVudCB3aXRoIHRoZSBpbmRleCAqLworCWlm IChzdGF0ZS0+Y2hlY2thYmxlX3JhbmdlKQorCXsKKwkJY2hlY2tfaGVhcF90dXBsZShzdGF0ZSwg dmFsdWVzLCBpc251bGwsIHRpZCk7CisJfQorCit9CisKKy8qCisgKiBXZSBjaGVjayBoYXNudWxs cyBmbGFncyBmb3IgbnVsbCB2YWx1ZXMgYW5kIG9pX3JlZ3VsYXJfbnVsbHMgPSB0cnVlLAorICog Y2hlY2sgYWxsbnVsbHMgaXMgZmFsc2UgZm9yIGFsbCBub25udWxsIHZhbHVlcyBub3QgbWF0dGVy IG9pX3JlZ3VsYXJfbnVsbHMgaXMgc2V0IG9yIG5vdCwKKyAqIEZvciBhbGwgb3RoZXIgY2FzZXMg d2UgY2FsbCBjb25zaXN0ZW50Rm4gd2l0aCBhcHByb3ByaWF0ZSBzY2FuS2V5OgorICogLSBmb3Ig b2lfcmVndWxhcl9udWxscyA9IGZhbHNlIGFuZCBudWxsIHZhbHVlcyB3ZSB1c2UgJ2lzTnVsbCcg c2NhbktleSwKKyAqIC0gZm9yIG5vbm51bGwgdmFsdWVzIHdlIHVzZSAnbm9ubnVsbCcgc2Nhbktl eQorICovCitzdGF0aWMgdm9pZAorY2hlY2tfaGVhcF90dXBsZShCcmluQ2hlY2tTdGF0ZSAqIHN0 YXRlLCBjb25zdCBEYXR1bSAqdmFsdWVzLCBjb25zdCBib29sICpudWxscywgSXRlbVBvaW50ZXIg dGlkKQoreworCWludAkJCWF0dGluZGV4OworCUJyaW5NZW1UdXBsZSAqZHR1cCA9IHN0YXRlLT5k dHVwOworCUJyaW5EZXNjICAgKmJkZXNjID0gc3RhdGUtPmJkZXNjOworCU1lbW9yeUNvbnRleHQg b2xkQ3R4OworCisJQXNzZXJ0KHN0YXRlLT5jaGVja2FibGVfcmFuZ2UpOworCisJTWVtb3J5Q29u dGV4dFJlc2V0KHN0YXRlLT5oZWFwdHVwbGVDdHgpOworCW9sZEN0eCA9IE1lbW9yeUNvbnRleHRT d2l0Y2hUbyhzdGF0ZS0+aGVhcHR1cGxlQ3R4KTsKKworCS8qIGNoZWNrIGV2ZXJ5IGluZGV4IGF0 dHJpYnV0ZSAqLworCWZvciAoYXR0aW5kZXggPSAwOyBhdHRpbmRleCA8IHN0YXRlLT5uYXR0czsg YXR0aW5kZXgrKykKKwl7CisJCUJyaW5WYWx1ZXMgKmJ2YWw7CisJCURhdHVtCQljb25zaXN0ZW50 Rm5SZXN1bHQ7CisJCWJvb2wJCWNvbnNpc3RlbnQ7CisJCVNjYW5LZXkJCXNjYW5LZXk7CisJCWJv b2wJCW9pX3JlZ3VsYXJfbnVsbHMgPSBiZGVzYy0+YmRfaW5mb1thdHRpbmRleF0tPm9pX3JlZ3Vs YXJfbnVsbHM7CisKKwkJYnZhbCA9ICZkdHVwLT5idF9jb2x1bW5zW2F0dGluZGV4XTsKKworCQlp ZiAobnVsbHNbYXR0aW5kZXhdKQorCQl7CisJCQkvKgorCQkJICogVXNlIGhhc251bGxzIGZsYWcg Zm9yIG9pX3JlZ3VsYXJfbnVsbHMgaXMgdHJ1ZS4gT3RoZXJ3aXNlLAorCQkJICogZGVsZWdhdGUg Y2hlY2sgdG8gY29uc2lzdGVudEZuCisJCQkgKi8KKwkJCWlmIChvaV9yZWd1bGFyX251bGxzKQor CQkJeworCQkJCS8qIFdlIGhhdmUgbnVsbCB2YWx1ZSwgc28gaGFzbnVsbHMgb3IgYWxsbnVsbHMg bXVzdCBiZSB0cnVlICovCisJCQkJaWYgKCEoYnZhbC0+YnZfaGFzbnVsbHMgfHwgYnZhbC0+YnZf YWxsbnVsbHMpKQorCQkJCXsKKwkJCQkJYWxsX2NvbnNpc3RfZXJlcG9ydChzdGF0ZSwgdGlkLCAi cmFuZ2UgaGFzbnVsbHMgYW5kIGFsbG51bGxzIGFyZSBmYWxzZSwgYnV0IGNvbnRhaW5zIGEgbnVs bCB2YWx1ZSIpOworCQkJCX0KKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJLyoKKwkJCSAqIElu IGNhc2Ugb2YgbnVsbCBhbmQgb2lfcmVndWxhcl9udWxscyA9IGZhbHNlIHdlIHVzZSBpc051bGwK KwkJCSAqIHNjYW5LZXkgZm9yIGludm9jYXRpb24gb2YgY29uc2lzdGVudEZuCisJCQkgKi8KKwkJ CXNjYW5LZXkgPSBzdGF0ZS0+aXNudWxsX3NrW2F0dGluZGV4XTsKKwkJfQorCQllbHNlCisJCXsK KwkJCS8qIFdlIGhhdmUgYSBub25udWxsIHZhbHVlLCBzbyBhbGxudWxscyBzaG91bGQgYmUgZmFs c2UgKi8KKwkJCWlmIChidmFsLT5idl9hbGxudWxscykKKwkJCXsKKwkJCQlhbGxfY29uc2lzdF9l cmVwb3J0KHN0YXRlLCB0aWQsICJyYW5nZSBhbGxudWxscyBpcyB0cnVlLCBidXQgY29udGFpbnMg bm9ubnVsbCB2YWx1ZSIpOworCQkJfQorCisJCQkvKiB1c2UgImF0dHIgPSB2YWx1ZSIgc2NhbiBr ZXkgZm9yIG5vbm51bGwgdmFsdWVzICovCisJCQlzY2FuS2V5ID0gc3RhdGUtPm5vbm51bGxfc2tb YXR0aW5kZXhdOworCQkJc2NhbktleS0+c2tfYXJndW1lbnQgPSB2YWx1ZXNbYXR0aW5kZXhdOwor CQl9CisKKwkJLyogSWYgb2lfcmVndWxhcl9udWxscyA9IHRydWUgd2Ugc2hvdWxkIG5ldmVyIGdl dCB0aGVyZSB3aXRoIG51bGwgKi8KKwkJQXNzZXJ0KCFvaV9yZWd1bGFyX251bGxzIHx8ICFudWxs c1thdHRpbmRleF0pOworCisJCWlmIChzdGF0ZS0+Y29uc2lzdGVudEZuW2F0dGluZGV4XS5mbl9u YXJncyA+PSA0KQorCQl7CisJCQljb25zaXN0ZW50Rm5SZXN1bHQgPSBGdW5jdGlvbkNhbGw0Q29s bCgmc3RhdGUtPmNvbnNpc3RlbnRGblthdHRpbmRleF0sCisJCQkJCQkJCQkJCQkgICBzdGF0ZS0+ aWR4cmVsLT5yZF9pbmRjb2xsYXRpb25bYXR0aW5kZXhdLAorCQkJCQkJCQkJCQkJICAgUG9pbnRl ckdldERhdHVtKHN0YXRlLT5iZGVzYyksCisJCQkJCQkJCQkJCQkgICBQb2ludGVyR2V0RGF0dW0o YnZhbCksCisJCQkJCQkJCQkJCQkgICBQb2ludGVyR2V0RGF0dW0oJnNjYW5LZXkpLAorCQkJCQkJ CQkJCQkJICAgSW50MzJHZXREYXR1bSgxKQorCQkJCSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlj b25zaXN0ZW50Rm5SZXN1bHQgPSBGdW5jdGlvbkNhbGwzQ29sbCgmc3RhdGUtPmNvbnNpc3RlbnRG blthdHRpbmRleF0sCisJCQkJCQkJCQkJCQkgICBzdGF0ZS0+aWR4cmVsLT5yZF9pbmRjb2xsYXRp b25bYXR0aW5kZXhdLAorCQkJCQkJCQkJCQkJICAgUG9pbnRlckdldERhdHVtKHN0YXRlLT5iZGVz YyksCisJCQkJCQkJCQkJCQkgICBQb2ludGVyR2V0RGF0dW0oYnZhbCksCisJCQkJCQkJCQkJCQkg ICBQb2ludGVyR2V0RGF0dW0oc2NhbktleSkKKwkJCQkpOworCQl9CisKKwkJY29uc2lzdGVudCA9 IERhdHVtR2V0Qm9vbChjb25zaXN0ZW50Rm5SZXN1bHQpOworCisJCWlmICghY29uc2lzdGVudCkK KwkJeworCQkJYWxsX2NvbnNpc3RfZXJlcG9ydChzdGF0ZSwgdGlkLCAiaGVhcCB0dXBsZSBpbmNv bnNpc3RlbnQgd2l0aCBpbmRleCIpOworCQl9CisKKwl9CisKKwlNZW1vcnlDb250ZXh0U3dpdGNo VG8ob2xkQ3R4KTsKK30KIAogLyogUmVwb3J0IHdpdGhvdXQgYW55IGFkZGl0aW9uYWwgaW5mbyAq Lwogc3RhdGljIHZvaWQKQEAgLTgwNSwzICsxMjcxLDE5IEBAIHJldm1hcF9pdGVtX2VyZXBvcnQo QnJpbkNoZWNrU3RhdGUgKiBzdGF0ZSwgY29uc3QgY2hhciAqZm10KQogCQkJCQlzdGF0ZS0+cmV2 bWFwQmxrLAogCQkJCQlzdGF0ZS0+cmV2bWFwaWR4KSkpOwogfQorCisvKiBSZXBvcnQgd2l0aCBy YW5nZSBibGtubywgaGVhcCB0dXBsZSBpbmZvICovCitzdGF0aWMgdm9pZAorYWxsX2NvbnNpc3Rf ZXJlcG9ydChjb25zdCBCcmluQ2hlY2tTdGF0ZSAqIHN0YXRlLCBjb25zdCBJdGVtUG9pbnRlckRh dGEgKnRpZCwgY29uc3QgY2hhciAqbWVzc2FnZSkKK3sKKwlBc3NlcnQoc3RhdGUtPnJhbmdlQmxr bm8gIT0gSW52YWxpZEJsb2NrTnVtYmVyKTsKKworCWVyZXBvcnQoRVJST1IsCisJCQkoZXJyY29k ZShFUlJDT0RFX0lOREVYX0NPUlJVUFRFRCksCisJCQkgZXJybXNnKCJJbmRleCAlcyBpcyBub3Qg Y29uc2lzdGVudCB3aXRoIHRoZSBoZWFwIC0gJXMuIFJhbmdlIGJsa25vOiAldSwgaGVhcCB0aWQg KCV1LCV1KSIsCisJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHN0YXRlLT5pZHhyZWwpLAor CQkJCQltZXNzYWdlLAorCQkJCQlzdGF0ZS0+ZHR1cC0+YnRfYmxrbm8sCisJCQkJCUl0ZW1Qb2lu dGVyR2V0QmxvY2tOdW1iZXIodGlkKSwKKwkJCQkJSXRlbVBvaW50ZXJHZXRPZmZzZXROdW1iZXIo dGlkKSkpKTsKK30KLS0gCjIuNDMuMAoK --000000000000f32bf40637f0f912 Content-Type: text/x-patch; charset="US-ASCII"; name="v4-0001-brin-refactoring.patch" Content-Disposition: attachment; filename="v4-0001-brin-refactoring.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mc3ptory0 RnJvbSA4OTQ1MjA4NjVjNGZhNjk3YmE2MTA0YmViNzlkNjRhNjMwZjAzYjNhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBcnNlbml5IE11a2hpbiA8YXJzZW5peS5tdWtoaW4uZGV2QGdt YWlsLmNvbT4KRGF0ZTogV2VkLCAxNiBBcHIgMjAyNSAxMToyNjo0NSArMDMwMApTdWJqZWN0OiBb UEFUQ0ggdjQgMS8zXSBicmluIHJlZmFjdG9yaW5nCgpGb3IgYWRkaW5nIEJSSU4gaW5kZXggc3Vw cG9ydCBpbiBhbWNoZWNrIHdlIG5lZWQgc29tZSB0aW55IGNoYW5nZXMgaW4gQlJJTgpjb3JlIGNv ZGU6CgoqIFdlIG5lZWQgdG8gaGF2ZSB0dXBsZSBkZXNjcmlwdG9yIGZvciBvbi1kaXNrIHN0b3Jh Z2Ugb2YgQlJJTiB0dXBsZXMuCiAgSXQgaXMgYSBwdWJsaWMgZmllbGQgJ2JkX2Rpc2t0ZGVzYycg aW4gQnJpbkRlc2MsIGJ1dCB0byBhY2Nlc3MgaXQgd2UKICBuZWVkIGZ1bmN0aW9uICdicnR1cGxl X2Rpc2tfdHVwZGVzYycgd2hpY2ggaXMgaW50ZXJuYWwuIFRoaXMgY29tbWl0CiAgbWFrZXMgaXQg ZXh0ZXJuLgoKKiBGb3IgbWV0YSBwYWdlIGNoZWNrIHdlIG5lZWQgdG8ga25vdyBwYWdlc19wZXJf cmFuZ2UgdXBwZXIgbGltaXQuIEl0J3MKICBoYXJkY29kZWQgbm93LiBUaGlzIGNvbW1pdCBtb3Zl cyBpdHMgdmFsdWUgdG8gbWFjcm9zIEJSSU5fTUFYX1BBR0VTX1BFUl9SQU5HRQogIHNvIHRoYXQg d2UgY2FuIHVzZSBpdCBpbiBhbWNoZWNrIHRvby4KLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvYnJp bi9icmluX3R1cGxlLmMgICB8IDIgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vcmVsb3B0 aW9ucy5jIHwgMyArKy0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9icmluLmggICAgICAgICAgICAgIHwg MSArCiBzcmMvaW5jbHVkZS9hY2Nlc3MvYnJpbl90dXBsZS5oICAgICAgICB8IDIgKysKIDQgZmls ZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW5fdHVwbGUuYyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9icmluL2JyaW5fdHVwbGUuYwppbmRleCA4NjFmMzk3ZTZkYi4uNGQxZDhkOWFkZGQgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW5fdHVwbGUuYworKysgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvYnJpbi9icmluX3R1cGxlLmMKQEAgLTU3LDcgKzU3LDcgQEAgc3RhdGljIGlu bGluZSB2b2lkIGJyaW5fZGVjb25zdHJ1Y3RfdHVwbGUoQnJpbkRlc2MgKmJyZGVzYywKIC8qCiAg KiBSZXR1cm4gYSB0dXBsZSBkZXNjcmlwdG9yIHVzZWQgZm9yIG9uLWRpc2sgc3RvcmFnZSBvZiBC UklOIHR1cGxlcy4KICAqLwotc3RhdGljIFR1cGxlRGVzYworVHVwbGVEZXNjCiBicnR1cGxlX2Rp c2tfdHVwZGVzYyhCcmluRGVzYyAqYnJkZXNjKQogewogCS8qIFdlIGNhY2hlIHRoZXNlIGluIHRo ZSBCcmluRGVzYyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9yZWxv cHRpb25zLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL3JlbG9wdGlvbnMuYwppbmRleCA1 MDc0N2MxNjM5Ni4uYmM0OTQ4NDczNDEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9j b21tb24vcmVsb3B0aW9ucy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vcmVsb3B0 aW9ucy5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAiYWNjZXNzL2hlYXB0b2FzdC5oIgog I2luY2x1ZGUgImFjY2Vzcy9odHVwX2RldGFpbHMuaCIKICNpbmNsdWRlICJhY2Nlc3MvbmJ0cmVl LmgiCisjaW5jbHVkZSAiYWNjZXNzL2JyaW4uaCIKICNpbmNsdWRlICJhY2Nlc3MvcmVsb3B0aW9u cy5oIgogI2luY2x1ZGUgImFjY2Vzcy9zcGdpc3RfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImNhdGFs b2cvcGdfdHlwZS5oIgpAQCAtMzQzLDcgKzM0NCw3IEBAIHN0YXRpYyByZWxvcHRfaW50IGludFJl bE9wdHNbXSA9CiAJCQkiTnVtYmVyIG9mIHBhZ2VzIHRoYXQgZWFjaCBwYWdlIHJhbmdlIGNvdmVy cyBpbiBhIEJSSU4gaW5kZXgiLAogCQkJUkVMT1BUX0tJTkRfQlJJTiwKIAkJCUFjY2Vzc0V4Y2x1 c2l2ZUxvY2sKLQkJfSwgMTI4LCAxLCAxMzEwNzIKKwkJfSwgMTI4LCAxLCBCUklOX01BWF9QQUdF U19QRVJfUkFOR0UKIAl9LAogCXsKIAkJewpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNz L2JyaW4uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9icmluLmgKaW5kZXggODIxZjFlMDI4MDYuLjMz NGNlOTczYjY3IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvYnJpbi5oCisrKyBiL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9icmluLmgKQEAgLTM3LDYgKzM3LDcgQEAgdHlwZWRlZiBzdHJ1Y3Qg QnJpblN0YXRzRGF0YQogCiAKICNkZWZpbmUgQlJJTl9ERUZBVUxUX1BBR0VTX1BFUl9SQU5HRQkx MjgKKyNkZWZpbmUgQlJJTl9NQVhfUEFHRVNfUEVSX1JBTkdFCTEzMTA3MgogI2RlZmluZSBCcmlu R2V0UGFnZXNQZXJSYW5nZShyZWxhdGlvbikgXAogCShBc3NlcnRNYWNybyhyZWxhdGlvbi0+cmRf cmVsLT5yZWxraW5kID09IFJFTEtJTkRfSU5ERVggJiYgXAogCQkJCSByZWxhdGlvbi0+cmRfcmVs LT5yZWxhbSA9PSBCUklOX0FNX09JRCksIFwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vz cy9icmluX3R1cGxlLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvYnJpbl90dXBsZS5oCmluZGV4IDAx MGJhNGVhM2MwLi45NDcyY2E2MzhkZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2Jy aW5fdHVwbGUuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvYnJpbl90dXBsZS5oCkBAIC0xMDks NCArMTA5LDYgQEAgZXh0ZXJuIEJyaW5NZW1UdXBsZSAqYnJpbl9tZW10dXBsZV9pbml0aWFsaXpl KEJyaW5NZW1UdXBsZSAqZHR1cGxlLAogZXh0ZXJuIEJyaW5NZW1UdXBsZSAqYnJpbl9kZWZvcm1f dHVwbGUoQnJpbkRlc2MgKmJyZGVzYywKIAkJCQkJCQkJCSAgIEJyaW5UdXBsZSAqdHVwbGUsIEJy aW5NZW1UdXBsZSAqZE1lbXR1cGxlKTsKIAorZXh0ZXJuIFR1cGxlRGVzYyBicnR1cGxlX2Rpc2tf dHVwZGVzYyhCcmluRGVzYyAqYnJkZXNjKTsKKwogI2VuZGlmCQkJCQkJCS8qIEJSSU5fVFVQTEVf SCAqLwotLSAKMi40My4wCgo= --000000000000f32bf40637f0f912--