Received: from malur.postgresql.org ([2a02:16a8:dc51::56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.89) (envelope-from ) id 1fKkaf-0002zY-8m for pgsql-hackers@arkaria.postgresql.org; Mon, 21 May 2018 13:11:06 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1fKkae-0006SZ-0I for pgsql-hackers@arkaria.postgresql.org; Mon, 21 May 2018 13:11:04 +0000 Received: from makus.postgresql.org ([2001:4800:1501:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.89) (envelope-from ) id 1fKkac-0006SO-UR for pgsql-hackers@lists.postgresql.org; Mon, 21 May 2018 13:11:03 +0000 Received: from mail.postgrespro.ru ([93.174.131.138]) by makus.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1fKkaO-00032Z-CL for pgsql-hackers@postgresql.org; Mon, 21 May 2018 13:11:01 +0000 Received: from localhost (localhost [127.0.0.1]) by mail.postgrespro.ru (Postfix) with ESMTP id 318D621C23F0; Mon, 21 May 2018 16:10:45 +0300 (MSK) X-Virus-Scanned: Debian amavisd-new at postgrespro.ru X-Spam-Flag: NO X-Spam-Score: 0 X-Spam-Level: X-Spam-Status: No, score=x tagged_above=-99 required=4 WHITELISTED tests=[] autolearn=unavailable Received: from mail.postgrespro.ru (cyclops.l.postgrespro.ru [192.168.27.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mail.postgrespro.ru (Postfix) with ESMTPSA id BABB821C23DD; Mon, 21 May 2018 16:10:44 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mail; t=1526908244; bh=Km+Xh1cdaivkEgKCE6NWAD9Ugl6HbO+PCW0iquVow3o=; h=Date:From:To:Cc:Subject:In-Reply-To:References; b=gKDrJ0nAyXRY5XlQ67jZvMFTTrpWFeC0LwHxUF1SgtrZR2cTL+HjcuKTdkhqX7/sc UnKf096cbsu7ZbtFUXUM7PzO2RHVmTa5xveidQwFc62trtDgMcycZyVIEGsWSX9jvB L9gUw9SMo2MHuMVbR868QbltCeJmNcoruF6IPEGY= MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_248aa227bbc4adf7e425934f1ce7af28" Date: Mon, 21 May 2018 16:10:44 +0300 From: Marina Polyakova To: Fabien COELHO , Alvaro Herrera , pgsql-hackers@postgresql.org Cc: Ildus Kurbangaliev , Teodor Sigaev Subject: Re: [HACKERS] WIP Patch: Pgbench Serialization and deadlock errors Organization: Postgres Professional In-Reply-To: <20180508193621.dphlgwrd5yz67o2z@alvherre.pgsql> References: <20180508193621.dphlgwrd5yz67o2z@alvherre.pgsql> Message-ID: <0569c5309cf536a839e2a3a1433bd113@postgrespro.ru> X-Sender: m.polyakova@postgrespro.ru User-Agent: Roundcube Webmail/1.2.4 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --=_248aa227bbc4adf7e425934f1ce7af28 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed Hello! Fabien and Alvaro, thank you very much! And sorry for such a late reply (I was a bit busy and making of ereport took some time..) :-( Below is a rebased version of the patch (commit 9effb63e0dd12b0704cd8e11106fe08ff5c9d685) divided into several smaller patches: v9-0001-Pgbench-errors-use-the-RandomState-structure-for-.patch - a patch for the RandomState structure (this is used to reset a client's random seed during the repeating of transactions after serialization/deadlock failures). v9-0002-Pgbench-errors-use-the-Variables-structure-for-cl.patch - a patch for the Variables structure (this is used to reset client variables during the repeating of transactions after serialization/deadlock failures). v9-0003-Pgbench-errors-use-the-ereport-macro-to-report-de.patch - a patch for the ereport() macro (this is used to report client failures that do not cause an aborts and this depends on the level of debugging). - implementation: if possible, use the local ErrorData structure during the errstart()/errmsg()/errfinish() calls. Otherwise use a static variable protected by a mutex if necessary. To do all of this export the function appendPQExpBufferVA from libpq. v9-0004-Pgbench-errors-and-serialization-deadlock-retries.patch - the main patch for handling client errors and repetition of transactions with serialization/deadlock failures (see the detailed description in the file). Any suggestions are welcome! On 08-05-2018 9:00, Fabien COELHO wrote: > Hello Marina, > > FYI the v8 patch does not apply anymore, mostly because of a recent > perl reindentation. > > I think that I'll have time for a round of review in the first half of > July. Providing a rebased patch before then would be nice. They are attached, but a little delayed due to testing.. On 08-05-2018 13:58, Alvaro Herrera wrote: > Looking over the diff, I find that this patch tries to do too much and > needs to be split up. At a minimum there is a preliminary patch that > introduces the error reporting stuff (errstart etc); there are other > thread-related changes (for example to the random generation functions) > that probably belong in a separate one too. Not sure if there are > other > smaller patches hidden inside the rest. Here is a try to do it.. > On elog/errstart: we already have a convention for what ereport() calls > look like; I suggest to use that instead of inventing your own. With > that, is there a need for elog()? In the backend we have it because > $HISTORY but there's no need for that here -- I propose to lose elog() > and use only ereport everywhere. Also, I don't see that you need > errmsg_internal() at all; let's lose it too. I agree, done. But there're some changes to make such a design thread-safe.. -- Marina Polyakova Postgres Professional: http://www.postgrespro.com The Russian Postgres Company --=_248aa227bbc4adf7e425934f1ce7af28 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v9-0001-Pgbench-errors-use-the-RandomState-structure-for-.patch Content-Disposition: attachment; filename=v9-0001-Pgbench-errors-use-the-RandomState-structure-for-.patch; size=10251 RnJvbSBiNWI4Y2E0MmEzMjk5YTc1YzgwYjg5ZGNhYmY1MTJhOGI0ZjM2MWYzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbmEgUG9seWFrb3ZhIDxtLnBvbHlha292YUBwb3N0Z3Jl c3Byby5ydT4KRGF0ZTogTW9uLCAyMSBNYXkgMjAxOCAxMzowMzoxMSArMDMwMApTdWJqZWN0OiBb UEFUQ0ggdjldIFBnYmVuY2ggZXJyb3JzOiB1c2UgdGhlIFJhbmRvbVN0YXRlIHN0cnVjdHVyZSBm b3IKIHRocmVhZC9jbGllbnQgcmFuZG9tIHNlZWQuCgpUaGlzIGlzIG1vc3QgaW1wb3J0YW50IHdo ZW4gaXQgaXMgdXNlZCB0byByZXNldCBhIGNsaWVudCdzIHJhbmRvbSBzZWVkIGR1cmluZwp0aGUg cmVwZWF0aW5nIG9mIHRyYW5zYWN0aW9ucyBhZnRlciBzZXJpYWxpemF0aW9uL2RlYWRsb2NrIGZh aWx1cmVzLgoKVXNlIHRoZSByYW5kb20gc3RhdGUgb2YgdGhlIGNsaWVudCBkdXJpbmcgdGhlIHBy b2Nlc3NpbmcgaXRzIGNvbW1hbmRzIGFuZCB0aGUKcmFuZG9tIHN0YXRlIG9mIHRoZSB0aHJlYWQg dG8gY2hvb3NlIHRoZSBzY3JpcHQgLyBnZXQgdGhlIHRocm90dGxlIGRlbGF5IC8gdG8KbG9nIHdp dGggYSBzYW1wbGUgcmF0ZS4KLS0tCiBzcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5jIHwgODUgKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFu Z2VkLCA1NiBpbnNlcnRpb25zKCspLCAyOSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMv YmluL3BnYmVuY2gvcGdiZW5jaC5jIGIvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYwppbmRleCBm MGM1MTQ5Li43YjhmMzU3IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5jCisr KyBiL3NyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMKQEAgLTI1MSw2ICsyNTEsMTQgQEAgdHlwZWRl ZiBzdHJ1Y3QgU3RhdHNEYXRhCiB9IFN0YXRzRGF0YTsKIAogLyoKKyAqIERhdGEgc3RydWN0dXJl IGZvciB0aHJlYWQvY2xpZW50IHJhbmRvbSBzZWVkLgorICovCit0eXBlZGVmIHN0cnVjdCBSYW5k b21TdGF0ZQoreworCXVuc2lnbmVkIHNob3J0IGRhdGFbM107Cit9IFJhbmRvbVN0YXRlOworCisv KgogICogQ29ubmVjdGlvbiBzdGF0ZSBtYWNoaW5lIHN0YXRlcy4KICAqLwogdHlwZWRlZiBlbnVt CkBAIC0zMzAsNiArMzM4LDcgQEAgdHlwZWRlZiBzdHJ1Y3QKIAlpbnQJCQlpZDsJCQkJLyogY2xp ZW50IE5vLiAqLwogCUNvbm5lY3Rpb25TdGF0ZUVudW0gc3RhdGU7CS8qIHN0YXRlIG1hY2hpbmUn cyBjdXJyZW50IHN0YXRlLiAqLwogCUNvbmRpdGlvbmFsU3RhY2sgY3N0YWNrOwkvKiBlbmNsb3Np bmcgY29uZGl0aW9uYWxzIHN0YXRlICovCisJUmFuZG9tU3RhdGUgcmFuZG9tX3N0YXRlOwkvKiBz ZXBhcmF0ZSByYW5kb21uZXNzIGZvciBlYWNoIGNsaWVudCAqLwogCiAJaW50CQkJdXNlX2ZpbGU7 CQkvKiBpbmRleCBpbiBzcWxfc2NyaXB0IGZvciB0aGlzIGNsaWVudCAqLwogCWludAkJCWNvbW1h bmQ7CQkvKiBjb21tYW5kIG51bWJlciBpbiBzY3JpcHQgKi8KQEAgLTM5MCw3ICszOTksNyBAQCB0 eXBlZGVmIHN0cnVjdAogCXB0aHJlYWRfdAl0aHJlYWQ7CQkJLyogdGhyZWFkIGhhbmRsZSAqLwog CUNTdGF0ZQkgICAqc3RhdGU7CQkJLyogYXJyYXkgb2YgQ1N0YXRlICovCiAJaW50CQkJbnN0YXRl OwkJCS8qIGxlbmd0aCBvZiBzdGF0ZVtdICovCi0JdW5zaWduZWQgc2hvcnQgcmFuZG9tX3N0YXRl WzNdOyAvKiBzZXBhcmF0ZSByYW5kb21uZXNzIGZvciBlYWNoIHRocmVhZCAqLworCVJhbmRvbVN0 YXRlIHJhbmRvbV9zdGF0ZTsgCS8qIHNlcGFyYXRlIHJhbmRvbW5lc3MgZm9yIGVhY2ggdGhyZWFk ICovCiAJaW50NjQJCXRocm90dGxlX3RyaWdnZXI7CS8qIHByZXZpb3VzL25leHQgdGhyb3R0bGlu ZyAodXMpICovCiAJRklMRQkgICAqbG9nZmlsZTsJCS8qIHdoZXJlIHRvIGxvZywgb3IgTlVMTCAq LwogCVppcGZDYWNoZQl6aXBmX2NhY2hlOwkJLyogZm9yIHRocmVhZC1zYWZlICB6aXBmaWFuIHJh bmRvbSBudW1iZXIKQEAgLTY5NCw3ICs3MDMsNyBAQCBnb3RkaWdpdHM6CiAKIC8qIHJhbmRvbSBu dW1iZXIgZ2VuZXJhdG9yOiB1bmlmb3JtIGRpc3RyaWJ1dGlvbiBmcm9tIG1pbiB0byBtYXggaW5j bHVzaXZlICovCiBzdGF0aWMgaW50NjQKLWdldHJhbmQoVFN0YXRlICp0aHJlYWQsIGludDY0IG1p biwgaW50NjQgbWF4KQorZ2V0cmFuZChSYW5kb21TdGF0ZSAqcmFuZG9tX3N0YXRlLCBpbnQ2NCBt aW4sIGludDY0IG1heCkKIHsKIAkvKgogCSAqIE9kZCBjb2RpbmcgaXMgc28gdGhhdCBtaW4gYW5k IG1heCBoYXZlIGFwcHJveGltYXRlbHkgdGhlIHNhbWUgY2hhbmNlIG9mCkBAIC03MDUsNyArNzE0 LDcgQEAgZ2V0cmFuZChUU3RhdGUgKnRocmVhZCwgaW50NjQgbWluLCBpbnQ2NCBtYXgpCiAJICog cHJvdGVjdGVkIGJ5IGEgbXV0ZXgsIGFuZCB0aGVyZWZvcmUgYSBib3R0bGVuZWNrIG9uIG1hY2hp bmVzIHdpdGggbWFueQogCSAqIENQVXMuCiAJICovCi0JcmV0dXJuIG1pbiArIChpbnQ2NCkgKCht YXggLSBtaW4gKyAxKSAqIHBnX2VyYW5kNDgodGhyZWFkLT5yYW5kb21fc3RhdGUpKTsKKwlyZXR1 cm4gbWluICsgKGludDY0KSAoKG1heCAtIG1pbiArIDEpICogcGdfZXJhbmQ0OChyYW5kb21fc3Rh dGUtPmRhdGEpKTsKIH0KIAogLyoKQEAgLTcxNCw3ICs3MjMsOCBAQCBnZXRyYW5kKFRTdGF0ZSAq dGhyZWFkLCBpbnQ2NCBtaW4sIGludDY0IG1heCkKICAqIHZhbHVlIGlzIGV4cCgtcGFyYW1ldGVy KS4KICAqLwogc3RhdGljIGludDY0Ci1nZXRFeHBvbmVudGlhbFJhbmQoVFN0YXRlICp0aHJlYWQs IGludDY0IG1pbiwgaW50NjQgbWF4LCBkb3VibGUgcGFyYW1ldGVyKQorZ2V0RXhwb25lbnRpYWxS YW5kKFJhbmRvbVN0YXRlICpyYW5kb21fc3RhdGUsIGludDY0IG1pbiwgaW50NjQgbWF4LAorCQkJ CSAgIGRvdWJsZSBwYXJhbWV0ZXIpCiB7CiAJZG91YmxlCQljdXQsCiAJCQkJdW5pZm9ybSwKQEAg LTcyNCw3ICs3MzQsNyBAQCBnZXRFeHBvbmVudGlhbFJhbmQoVFN0YXRlICp0aHJlYWQsIGludDY0 IG1pbiwgaW50NjQgbWF4LCBkb3VibGUgcGFyYW1ldGVyKQogCUFzc2VydChwYXJhbWV0ZXIgPiAw LjApOwogCWN1dCA9IGV4cCgtcGFyYW1ldGVyKTsKIAkvKiBlcmFuZCBpbiBbMCwgMSksIHVuaWZv cm0gaW4gKDAsIDFdICovCi0JdW5pZm9ybSA9IDEuMCAtIHBnX2VyYW5kNDgodGhyZWFkLT5yYW5k b21fc3RhdGUpOworCXVuaWZvcm0gPSAxLjAgLSBwZ19lcmFuZDQ4KHJhbmRvbV9zdGF0ZS0+ZGF0 YSk7CiAKIAkvKgogCSAqIGlubmVyIGV4cHJlc3Npb24gaW4gKGN1dCwgMV0gKGlmIHBhcmFtZXRl ciA+IDApLCByYW5kIGluIFswLCAxKQpAQCAtNzM3LDcgKzc0Nyw4IEBAIGdldEV4cG9uZW50aWFs UmFuZChUU3RhdGUgKnRocmVhZCwgaW50NjQgbWluLCBpbnQ2NCBtYXgsIGRvdWJsZSBwYXJhbWV0 ZXIpCiAKIC8qIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yOiBnYXVzc2lhbiBkaXN0cmlidXRpb24g ZnJvbSBtaW4gdG8gbWF4IGluY2x1c2l2ZSAqLwogc3RhdGljIGludDY0Ci1nZXRHYXVzc2lhblJh bmQoVFN0YXRlICp0aHJlYWQsIGludDY0IG1pbiwgaW50NjQgbWF4LCBkb3VibGUgcGFyYW1ldGVy KQorZ2V0R2F1c3NpYW5SYW5kKFJhbmRvbVN0YXRlICpyYW5kb21fc3RhdGUsIGludDY0IG1pbiwg aW50NjQgbWF4LAorCQkJCWRvdWJsZSBwYXJhbWV0ZXIpCiB7CiAJZG91YmxlCQlzdGRldjsKIAlk b3VibGUJCXJhbmQ7CkBAIC03NjUsOCArNzc2LDggQEAgZ2V0R2F1c3NpYW5SYW5kKFRTdGF0ZSAq dGhyZWFkLCBpbnQ2NCBtaW4sIGludDY0IG1heCwgZG91YmxlIHBhcmFtZXRlcikKIAkJICogYXJl IGV4cGVjdGVkIGluICgwLCAxXSAoc2VlCiAJCSAqIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dp a2kvQm94X211bGxlcikKIAkJICovCi0JCWRvdWJsZQkJcmFuZDEgPSAxLjAgLSBwZ19lcmFuZDQ4 KHRocmVhZC0+cmFuZG9tX3N0YXRlKTsKLQkJZG91YmxlCQlyYW5kMiA9IDEuMCAtIHBnX2VyYW5k NDgodGhyZWFkLT5yYW5kb21fc3RhdGUpOworCQlkb3VibGUJCXJhbmQxID0gMS4wIC0gcGdfZXJh bmQ0OChyYW5kb21fc3RhdGUtPmRhdGEpOworCQlkb3VibGUJCXJhbmQyID0gMS4wIC0gcGdfZXJh bmQ0OChyYW5kb21fc3RhdGUtPmRhdGEpOwogCiAJCS8qIEJveC1NdWxsZXIgYmFzaWMgZm9ybSB0 cmFuc2Zvcm0gKi8KIAkJZG91YmxlCQl2YXJfc3FydCA9IHNxcnQoLTIuMCAqIGxvZyhyYW5kMSkp OwpAQCAtNzkzLDcgKzgwNCw3IEBAIGdldEdhdXNzaWFuUmFuZChUU3RhdGUgKnRocmVhZCwgaW50 NjQgbWluLCBpbnQ2NCBtYXgsIGRvdWJsZSBwYXJhbWV0ZXIpCiAgKiB3aWxsIGFwcHJveGltYXRl IGEgUG9pc3NvbiBkaXN0cmlidXRpb24gY2VudGVyZWQgb24gdGhlIGdpdmVuIHZhbHVlLgogICov CiBzdGF0aWMgaW50NjQKLWdldFBvaXNzb25SYW5kKFRTdGF0ZSAqdGhyZWFkLCBpbnQ2NCBjZW50 ZXIpCitnZXRQb2lzc29uUmFuZChSYW5kb21TdGF0ZSAqcmFuZG9tX3N0YXRlLCBpbnQ2NCBjZW50 ZXIpCiB7CiAJLyoKIAkgKiBVc2UgaW52ZXJzZSB0cmFuc2Zvcm0gc2FtcGxpbmcgdG8gZ2VuZXJh dGUgYSB2YWx1ZSA+IDAsIHN1Y2ggdGhhdCB0aGUKQEAgLTgwMiw3ICs4MTMsNyBAQCBnZXRQb2lz c29uUmFuZChUU3RhdGUgKnRocmVhZCwgaW50NjQgY2VudGVyKQogCWRvdWJsZQkJdW5pZm9ybTsK IAogCS8qIGVyYW5kIGluIFswLCAxKSwgdW5pZm9ybSBpbiAoMCwgMV0gKi8KLQl1bmlmb3JtID0g MS4wIC0gcGdfZXJhbmQ0OCh0aHJlYWQtPnJhbmRvbV9zdGF0ZSk7CisJdW5pZm9ybSA9IDEuMCAt IHBnX2VyYW5kNDgocmFuZG9tX3N0YXRlLT5kYXRhKTsKIAogCXJldHVybiAoaW50NjQpICgtbG9n KHVuaWZvcm0pICogKChkb3VibGUpIGNlbnRlcikgKyAwLjUpOwogfQpAQCAtODgwLDcgKzg5MSw3 IEBAIHppcGZGaW5kT3JDcmVhdGVDYWNoZUNlbGwoWmlwZkNhY2hlICpjYWNoZSwgaW50NjQgbiwg ZG91YmxlIHMpCiAgKiBMdWMgRGV2cm95ZSwgcC4gNTUwLTU1MSwgU3ByaW5nZXIgMTk4Ni4KICAq Lwogc3RhdGljIGludDY0Ci1jb21wdXRlSXRlcmF0aXZlWmlwZmlhbihUU3RhdGUgKnRocmVhZCwg aW50NjQgbiwgZG91YmxlIHMpCitjb21wdXRlSXRlcmF0aXZlWmlwZmlhbihSYW5kb21TdGF0ZSAq cmFuZG9tX3N0YXRlLCBpbnQ2NCBuLCBkb3VibGUgcykKIHsKIAlkb3VibGUJCWIgPSBwb3coMi4w LCBzIC0gMS4wKTsKIAlkb3VibGUJCXgsCkBAIC04OTEsOCArOTAyLDggQEAgY29tcHV0ZUl0ZXJh dGl2ZVppcGZpYW4oVFN0YXRlICp0aHJlYWQsIGludDY0IG4sIGRvdWJsZSBzKQogCXdoaWxlICh0 cnVlKQogCXsKIAkJLyogcmFuZG9tIHZhcmlhdGVzICovCi0JCXUgPSBwZ19lcmFuZDQ4KHRocmVh ZC0+cmFuZG9tX3N0YXRlKTsKLQkJdiA9IHBnX2VyYW5kNDgodGhyZWFkLT5yYW5kb21fc3RhdGUp OworCQl1ID0gcGdfZXJhbmQ0OChyYW5kb21fc3RhdGUtPmRhdGEpOworCQl2ID0gcGdfZXJhbmQ0 OChyYW5kb21fc3RhdGUtPmRhdGEpOwogCiAJCXggPSBmbG9vcihwb3codSwgLTEuMCAvIChzIC0g MS4wKSkpOwogCkBAIC05MTAsMTAgKzkyMSwxMSBAQCBjb21wdXRlSXRlcmF0aXZlWmlwZmlhbihU U3RhdGUgKnRocmVhZCwgaW50NjQgbiwgZG91YmxlIHMpCiAgKiBKaW0gR3JheSBldCBhbCwgU0lH TU9EIDE5OTQKICAqLwogc3RhdGljIGludDY0Ci1jb21wdXRlSGFybW9uaWNaaXBmaWFuKFRTdGF0 ZSAqdGhyZWFkLCBpbnQ2NCBuLCBkb3VibGUgcykKK2NvbXB1dGVIYXJtb25pY1ppcGZpYW4oVFN0 YXRlICp0aHJlYWQsIFJhbmRvbVN0YXRlICpyYW5kb21fc3RhdGUsIGludDY0IG4sCisJCQkJCSAg IGRvdWJsZSBzKQogewogCVppcGZDZWxsICAgKmNlbGwgPSB6aXBmRmluZE9yQ3JlYXRlQ2FjaGVD ZWxsKCZ0aHJlYWQtPnppcGZfY2FjaGUsIG4sIHMpOwotCWRvdWJsZQkJdW5pZm9ybSA9IHBnX2Vy YW5kNDgodGhyZWFkLT5yYW5kb21fc3RhdGUpOworCWRvdWJsZQkJdW5pZm9ybSA9IHBnX2VyYW5k NDgocmFuZG9tX3N0YXRlLT5kYXRhKTsKIAlkb3VibGUJCXV6ID0gdW5pZm9ybSAqIGNlbGwtPmhh cm1vbmljbjsKIAogCWlmICh1eiA8IDEuMCkKQEAgLTkyNSw3ICs5MzcsOCBAQCBjb21wdXRlSGFy bW9uaWNaaXBmaWFuKFRTdGF0ZSAqdGhyZWFkLCBpbnQ2NCBuLCBkb3VibGUgcykKIAogLyogcmFu ZG9tIG51bWJlciBnZW5lcmF0b3I6IHppcGZpYW4gZGlzdHJpYnV0aW9uIGZyb20gbWluIHRvIG1h eCBpbmNsdXNpdmUgKi8KIHN0YXRpYyBpbnQ2NAotZ2V0WmlwZmlhblJhbmQoVFN0YXRlICp0aHJl YWQsIGludDY0IG1pbiwgaW50NjQgbWF4LCBkb3VibGUgcykKK2dldFppcGZpYW5SYW5kKFRTdGF0 ZSAqdGhyZWFkLCBSYW5kb21TdGF0ZSAqcmFuZG9tX3N0YXRlLCBpbnQ2NCBtaW4sCisJCQkgICBp bnQ2NCBtYXgsIGRvdWJsZSBzKQogewogCWludDY0CQluID0gbWF4IC0gbWluICsgMTsKIApAQCAt OTM0LDggKzk0Nyw4IEBAIGdldFppcGZpYW5SYW5kKFRTdGF0ZSAqdGhyZWFkLCBpbnQ2NCBtaW4s IGludDY0IG1heCwgZG91YmxlIHMpCiAKIAogCXJldHVybiBtaW4gLSAxICsgKChzID4gMSkKLQkJ CQkJICA/IGNvbXB1dGVJdGVyYXRpdmVaaXBmaWFuKHRocmVhZCwgbiwgcykKLQkJCQkJICA6IGNv bXB1dGVIYXJtb25pY1ppcGZpYW4odGhyZWFkLCBuLCBzKSk7CisJCQkJCSAgPyBjb21wdXRlSXRl cmF0aXZlWmlwZmlhbihyYW5kb21fc3RhdGUsIG4sIHMpCisJCQkJCSAgOiBjb21wdXRlSGFybW9u aWNaaXBmaWFuKHRocmVhZCwgcmFuZG9tX3N0YXRlLCBuLCBzKSk7CiB9CiAKIC8qCkBAIC0yMjA5 LDcgKzIyMjIsNyBAQCBldmFsU3RhbmRhcmRGdW5jKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0 LAogCQkJCWlmIChmdW5jID09IFBHQkVOQ0hfUkFORE9NKQogCQkJCXsKIAkJCQkJQXNzZXJ0KG5h cmdzID09IDIpOwotCQkJCQlzZXRJbnRWYWx1ZShyZXR2YWwsIGdldHJhbmQodGhyZWFkLCBpbWlu LCBpbWF4KSk7CisJCQkJCXNldEludFZhbHVlKHJldHZhbCwgZ2V0cmFuZCgmc3QtPnJhbmRvbV9z dGF0ZSwgaW1pbiwgaW1heCkpOwogCQkJCX0KIAkJCQllbHNlCQkJLyogZ2F1c3NpYW4gJiBleHBv bmVudGlhbCAqLwogCQkJCXsKQEAgLTIyMzEsNyArMjI0NCw4IEBAIGV2YWxTdGFuZGFyZEZ1bmMo VFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsCiAJCQkJCQl9CiAKIAkJCQkJCXNldEludFZhbHVl KHJldHZhbCwKLQkJCQkJCQkJCWdldEdhdXNzaWFuUmFuZCh0aHJlYWQsIGltaW4sIGltYXgsIHBh cmFtKSk7CisJCQkJCQkJCQlnZXRHYXVzc2lhblJhbmQoJnN0LT5yYW5kb21fc3RhdGUsIGltaW4s CisJCQkJCQkJCQkJCQkJaW1heCwgcGFyYW0pKTsKIAkJCQkJfQogCQkJCQllbHNlIGlmIChmdW5j ID09IFBHQkVOQ0hfUkFORE9NX1pJUEZJQU4pCiAJCQkJCXsKQEAgLTIyNDMsNyArMjI1Nyw4IEBA IGV2YWxTdGFuZGFyZEZ1bmMoVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsCiAJCQkJCQkJcmV0 dXJuIGZhbHNlOwogCQkJCQkJfQogCQkJCQkJc2V0SW50VmFsdWUocmV0dmFsLAotCQkJCQkJCQkJ Z2V0WmlwZmlhblJhbmQodGhyZWFkLCBpbWluLCBpbWF4LCBwYXJhbSkpOworCQkJCQkJCQkJZ2V0 WmlwZmlhblJhbmQodGhyZWFkLCAmc3QtPnJhbmRvbV9zdGF0ZSwKKwkJCQkJCQkJCQkJCSAgIGlt aW4sIGltYXgsIHBhcmFtKSk7CiAJCQkJCX0KIAkJCQkJZWxzZQkJLyogZXhwb25lbnRpYWwgKi8K IAkJCQkJewpAQCAtMjI1Niw3ICsyMjcxLDggQEAgZXZhbFN0YW5kYXJkRnVuYyhUU3RhdGUgKnRo cmVhZCwgQ1N0YXRlICpzdCwKIAkJCQkJCX0KIAogCQkJCQkJc2V0SW50VmFsdWUocmV0dmFsLAot CQkJCQkJCQkJZ2V0RXhwb25lbnRpYWxSYW5kKHRocmVhZCwgaW1pbiwgaW1heCwgcGFyYW0pKTsK KwkJCQkJCQkJCWdldEV4cG9uZW50aWFsUmFuZCgmc3QtPnJhbmRvbV9zdGF0ZSwgaW1pbiwKKwkJ CQkJCQkJCQkJCQkgICBpbWF4LCBwYXJhbSkpOwogCQkJCQl9CiAJCQkJfQogCkBAIC0yNTUxLDcg KzI1NjcsNyBAQCBjaG9vc2VTY3JpcHQoVFN0YXRlICp0aHJlYWQpCiAJaWYgKG51bV9zY3JpcHRz ID09IDEpCiAJCXJldHVybiAwOwogCi0JdyA9IGdldHJhbmQodGhyZWFkLCAwLCB0b3RhbF93ZWln aHQgLSAxKTsKKwl3ID0gZ2V0cmFuZCgmdGhyZWFkLT5yYW5kb21fc3RhdGUsIDAsIHRvdGFsX3dl aWdodCAtIDEpOwogCWRvCiAJewogCQl3IC09IHNxbF9zY3JpcHRbaSsrXS53ZWlnaHQ7CkBAIC0y NzQ1LDcgKzI3NjEsNyBAQCBkb0N1c3RvbShUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwgU3Rh dHNEYXRhICphZ2cpCiAJCQkJICogYXdheS4KIAkJCQkgKi8KIAkJCQlBc3NlcnQodGhyb3R0bGVf ZGVsYXkgPiAwKTsKLQkJCQl3YWl0ID0gZ2V0UG9pc3NvblJhbmQodGhyZWFkLCB0aHJvdHRsZV9k ZWxheSk7CisJCQkJd2FpdCA9IGdldFBvaXNzb25SYW5kKCZ0aHJlYWQtPnJhbmRvbV9zdGF0ZSwg dGhyb3R0bGVfZGVsYXkpOwogCiAJCQkJdGhyZWFkLT50aHJvdHRsZV90cmlnZ2VyICs9IHdhaXQ7 CiAJCQkJc3QtPnR4bl9zY2hlZHVsZWQgPSB0aHJlYWQtPnRocm90dGxlX3RyaWdnZXI7CkBAIC0y Nzc5LDcgKzI3OTUsOCBAQCBkb0N1c3RvbShUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwgU3Rh dHNEYXRhICphZ2cpCiAJCQkJCXsKIAkJCQkJCXByb2Nlc3NYYWN0U3RhdHModGhyZWFkLCBzdCwg Jm5vdywgdHJ1ZSwgYWdnKTsKIAkJCQkJCS8qIG5leHQgcmVuZGV6LXZvdXMgKi8KLQkJCQkJCXdh aXQgPSBnZXRQb2lzc29uUmFuZCh0aHJlYWQsIHRocm90dGxlX2RlbGF5KTsKKwkJCQkJCXdhaXQg PSBnZXRQb2lzc29uUmFuZCgmdGhyZWFkLT5yYW5kb21fc3RhdGUsCisJCQkJCQkJCQkJCSAgdGhy b3R0bGVfZGVsYXkpOwogCQkJCQkJdGhyZWFkLT50aHJvdHRsZV90cmlnZ2VyICs9IHdhaXQ7CiAJ CQkJCQlzdC0+dHhuX3NjaGVkdWxlZCA9IHRocmVhZC0+dGhyb3R0bGVfdHJpZ2dlcjsKIAkJCQkJ fQpAQCAtMzMyMiw3ICszMzM5LDcgQEAgZG9Mb2coVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3Qs CiAJICogdG8gdGhlIHJhbmRvbSBzYW1wbGUuCiAJICovCiAJaWYgKHNhbXBsZV9yYXRlICE9IDAu MCAmJgotCQlwZ19lcmFuZDQ4KHRocmVhZC0+cmFuZG9tX3N0YXRlKSA+IHNhbXBsZV9yYXRlKQor CQlwZ19lcmFuZDQ4KHRocmVhZC0+cmFuZG9tX3N0YXRlLmRhdGEpID4gc2FtcGxlX3JhdGUpCiAJ CXJldHVybjsKIAogCS8qIHNob3VsZCB3ZSBhZ2dyZWdhdGUgdGhlIHJlc3VsdHMgb3Igbm90PyAq LwpAQCAtNDc1MCw2ICs0NzY3LDE3IEBAIHNldF9yYW5kb21fc2VlZChjb25zdCBjaGFyICpzZWVk KQogCXJldHVybiB0cnVlOwogfQogCisvKgorICogSW5pdGlhbGl6ZSB0aGUgcmFuZG9tIHN0YXRl IG9mIHRoZSBjbGllbnQvdGhyZWFkLgorICovCitzdGF0aWMgdm9pZAoraW5pdFJhbmRvbVN0YXRl KFJhbmRvbVN0YXRlICpyYW5kb21fc3RhdGUpCit7CisJcmFuZG9tX3N0YXRlLT5kYXRhWzBdID0g cmFuZG9tKCk7CisJcmFuZG9tX3N0YXRlLT5kYXRhWzFdID0gcmFuZG9tKCk7CisJcmFuZG9tX3N0 YXRlLT5kYXRhWzJdID0gcmFuZG9tKCk7Cit9CisKIAogaW50CiBtYWluKGludCBhcmdjLCBjaGFy ICoqYXJndikKQEAgLTUzNTgsNiArNTM4Niw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2 KQogCWZvciAoaSA9IDA7IGkgPCBuY2xpZW50czsgaSsrKQogCXsKIAkJc3RhdGVbaV0uY3N0YWNr ID0gY29uZGl0aW9uYWxfc3RhY2tfY3JlYXRlKCk7CisJCWluaXRSYW5kb21TdGF0ZSgmc3RhdGVb aV0ucmFuZG9tX3N0YXRlKTsKIAl9CiAKIAlpZiAoZGVidWcpCkBAIC01NDkxLDkgKzU1MjAsNyBA QCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJdGhyZWFkLT5zdGF0ZSA9ICZzdGF0ZVtu Y2xpZW50c19kZWFsdF07CiAJCXRocmVhZC0+bnN0YXRlID0KIAkJCShuY2xpZW50cyAtIG5jbGll bnRzX2RlYWx0ICsgbnRocmVhZHMgLSBpIC0gMSkgLyAobnRocmVhZHMgLSBpKTsKLQkJdGhyZWFk LT5yYW5kb21fc3RhdGVbMF0gPSByYW5kb20oKTsKLQkJdGhyZWFkLT5yYW5kb21fc3RhdGVbMV0g PSByYW5kb20oKTsKLQkJdGhyZWFkLT5yYW5kb21fc3RhdGVbMl0gPSByYW5kb20oKTsKKwkJaW5p dFJhbmRvbVN0YXRlKCZ0aHJlYWQtPnJhbmRvbV9zdGF0ZSk7CiAJCXRocmVhZC0+bG9nZmlsZSA9 IE5VTEw7IC8qIGZpbGxlZCBpbiBsYXRlciAqLwogCQl0aHJlYWQtPmxhdGVuY3lfbGF0ZSA9IDA7 CiAJCXRocmVhZC0+emlwZl9jYWNoZS5uYl9jZWxscyA9IDA7Ci0tIAoyLjcuNAoK --=_248aa227bbc4adf7e425934f1ce7af28 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v9-0002-Pgbench-errors-use-the-Variables-structure-for-cl.patch Content-Disposition: attachment; filename=v9-0002-Pgbench-errors-use-the-Variables-structure-for-cl.patch; size=13865 RnJvbSA4OWFmNTZhYTdiZWFhNjQwM2VhMmIwMTI5MDcxMGY2NGVlM2Q0NTcwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbmEgUG9seWFrb3ZhIDxtLnBvbHlha292YUBwb3N0Z3Jl c3Byby5ydT4KRGF0ZTogTW9uLCAyMSBNYXkgMjAxOCAxMzowNDo1MCArMDMwMApTdWJqZWN0OiBb UEFUQ0ggdjldIFBnYmVuY2ggZXJyb3JzOiB1c2UgdGhlIFZhcmlhYmxlcyBzdHJ1Y3R1cmUgZm9y IGNsaWVudAogdmFyaWFibGVzCgpUaGlzIGlzIG1vc3QgaW1wb3J0YW50IHdoZW4gaXQgaXMgdXNl ZCB0byByZXNldCBjbGllbnQgdmFyaWFibGVzIGR1cmluZyB0aGUKcmVwZWF0aW5nIG9mIHRyYW5z YWN0aW9ucyBhZnRlciBzZXJpYWxpemF0aW9uL2RlYWRsb2NrIGZhaWx1cmVzLgotLS0KIHNyYy9i aW4vcGdiZW5jaC9wZ2JlbmNoLmMgfCAxMzMgKysrKysrKysrKysrKysrKysrKysrKysrKystLS0t LS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDc1IGluc2VydGlvbnMoKyksIDU4IGRl bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMgYi9zcmMv YmluL3BnYmVuY2gvcGdiZW5jaC5jCmluZGV4IDdiOGYzNTcuLjI1NGYxMjUgMTAwNjQ0Ci0tLSBh L3NyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMKKysrIGIvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2gu YwpAQCAtMjUxLDYgKzI1MSwxNiBAQCB0eXBlZGVmIHN0cnVjdCBTdGF0c0RhdGEKIH0gU3RhdHNE YXRhOwogCiAvKgorICogRGF0YSBzdHJ1Y3R1cmUgZm9yIGNsaWVudCB2YXJpYWJsZXMuCisgKi8K K3R5cGVkZWYgc3RydWN0IFZhcmlhYmxlcworeworCVZhcmlhYmxlICAgKmFycmF5OwkJCS8qIGFy cmF5IG9mIHZhcmlhYmxlIGRlZmluaXRpb25zICovCisJaW50CQkJbnZhcmlhYmxlczsJCS8qIG51 bWJlciBvZiB2YXJpYWJsZXMgKi8KKwlib29sCQl2YXJzX3NvcnRlZDsJLyogYXJlIHZhcmlhYmxl cyBzb3J0ZWQgYnkgbmFtZT8gKi8KK30gVmFyaWFibGVzOworCisvKgogICogRGF0YSBzdHJ1Y3R1 cmUgZm9yIHRocmVhZC9jbGllbnQgcmFuZG9tIHNlZWQuCiAgKi8KIHR5cGVkZWYgc3RydWN0IFJh bmRvbVN0YXRlCkBAIC0zNDQsOSArMzU0LDcgQEAgdHlwZWRlZiBzdHJ1Y3QKIAlpbnQJCQljb21t YW5kOwkJLyogY29tbWFuZCBudW1iZXIgaW4gc2NyaXB0ICovCiAKIAkvKiBjbGllbnQgdmFyaWFi bGVzICovCi0JVmFyaWFibGUgICAqdmFyaWFibGVzOwkJLyogYXJyYXkgb2YgdmFyaWFibGUgZGVm aW5pdGlvbnMgKi8KLQlpbnQJCQludmFyaWFibGVzOwkJLyogbnVtYmVyIG9mIHZhcmlhYmxlcyAq LwotCWJvb2wJCXZhcnNfc29ydGVkOwkvKiBhcmUgdmFyaWFibGVzIHNvcnRlZCBieSBuYW1lPyAq LworCVZhcmlhYmxlcyAgIHZhcmlhYmxlczsKIAogCS8qIHZhcmlvdXMgdGltZXMgYWJvdXQgY3Vy cmVudCB0cmFuc2FjdGlvbiAqLwogCWludDY0CQl0eG5fc2NoZWR1bGVkOwkvKiBzY2hlZHVsZWQg c3RhcnQgdGltZSBvZiB0cmFuc2FjdGlvbiAodXNlYykgKi8KQEAgLTExOTgsMzkgKzEyMDYsMzkg QEAgY29tcGFyZVZhcmlhYmxlTmFtZXMoY29uc3Qgdm9pZCAqdjEsIGNvbnN0IHZvaWQgKnYyKQog CiAvKiBMb2NhdGUgYSB2YXJpYWJsZSBieSBuYW1lOyByZXR1cm5zIE5VTEwgaWYgdW5rbm93biAq Lwogc3RhdGljIFZhcmlhYmxlICoKLWxvb2t1cFZhcmlhYmxlKENTdGF0ZSAqc3QsIGNoYXIgKm5h bWUpCitsb29rdXBWYXJpYWJsZShWYXJpYWJsZXMgKnZhcmlhYmxlcywgY2hhciAqbmFtZSkKIHsK IAlWYXJpYWJsZQlrZXk7CiAKIAkvKiBPbiBzb21lIHZlcnNpb25zIG9mIFNvbGFyaXMsIGJzZWFy Y2ggb2YgemVybyBpdGVtcyBkdW1wcyBjb3JlICovCi0JaWYgKHN0LT5udmFyaWFibGVzIDw9IDAp CisJaWYgKHZhcmlhYmxlcy0+bnZhcmlhYmxlcyA8PSAwKQogCQlyZXR1cm4gTlVMTDsKIAogCS8q IFNvcnQgaWYgd2UgaGF2ZSB0byAqLwotCWlmICghc3QtPnZhcnNfc29ydGVkKQorCWlmICghdmFy aWFibGVzLT52YXJzX3NvcnRlZCkKIAl7Ci0JCXFzb3J0KCh2b2lkICopIHN0LT52YXJpYWJsZXMs IHN0LT5udmFyaWFibGVzLCBzaXplb2YoVmFyaWFibGUpLAotCQkJICBjb21wYXJlVmFyaWFibGVO YW1lcyk7Ci0JCXN0LT52YXJzX3NvcnRlZCA9IHRydWU7CisJCXFzb3J0KCh2b2lkICopIHZhcmlh Ymxlcy0+YXJyYXksIHZhcmlhYmxlcy0+bnZhcmlhYmxlcywKKwkJCSAgc2l6ZW9mKFZhcmlhYmxl KSwgY29tcGFyZVZhcmlhYmxlTmFtZXMpOworCQl2YXJpYWJsZXMtPnZhcnNfc29ydGVkID0gdHJ1 ZTsKIAl9CiAKIAkvKiBOb3cgd2UgY2FuIHNlYXJjaCAqLwogCWtleS5uYW1lID0gbmFtZTsKIAly ZXR1cm4gKFZhcmlhYmxlICopIGJzZWFyY2goKHZvaWQgKikgJmtleSwKLQkJCQkJCQkJKHZvaWQg Kikgc3QtPnZhcmlhYmxlcywKLQkJCQkJCQkJc3QtPm52YXJpYWJsZXMsCisJCQkJCQkJCSh2b2lk ICopIHZhcmlhYmxlcy0+YXJyYXksCisJCQkJCQkJCXZhcmlhYmxlcy0+bnZhcmlhYmxlcywKIAkJ CQkJCQkJc2l6ZW9mKFZhcmlhYmxlKSwKIAkJCQkJCQkJY29tcGFyZVZhcmlhYmxlTmFtZXMpOwog fQogCiAvKiBHZXQgdGhlIHZhbHVlIG9mIGEgdmFyaWFibGUsIGluIHN0cmluZyBmb3JtOyByZXR1 cm5zIE5VTEwgaWYgdW5rbm93biAqLwogc3RhdGljIGNoYXIgKgotZ2V0VmFyaWFibGUoQ1N0YXRl ICpzdCwgY2hhciAqbmFtZSkKK2dldFZhcmlhYmxlKFZhcmlhYmxlcyAqdmFyaWFibGVzLCBjaGFy ICpuYW1lKQogewogCVZhcmlhYmxlICAgKnZhcjsKIAljaGFyCQlzdHJpbmdmb3JtWzY0XTsKIAot CXZhciA9IGxvb2t1cFZhcmlhYmxlKHN0LCBuYW1lKTsKKwl2YXIgPSBsb29rdXBWYXJpYWJsZSh2 YXJpYWJsZXMsIG5hbWUpOwogCWlmICh2YXIgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CQkJLyog bm90IGZvdW5kICovCiAKQEAgLTEzNTQsMTEgKzEzNjIsMTEgQEAgdmFsaWRfdmFyaWFibGVfbmFt ZShjb25zdCBjaGFyICpuYW1lKQogICogUmV0dXJucyBOVUxMIG9uIGZhaWx1cmUgKGJhZCBuYW1l KS4KICAqLwogc3RhdGljIFZhcmlhYmxlICoKLWxvb2t1cENyZWF0ZVZhcmlhYmxlKENTdGF0ZSAq c3QsIGNvbnN0IGNoYXIgKmNvbnRleHQsIGNoYXIgKm5hbWUpCitsb29rdXBDcmVhdGVWYXJpYWJs ZShWYXJpYWJsZXMgKnZhcmlhYmxlcywgY29uc3QgY2hhciAqY29udGV4dCwgY2hhciAqbmFtZSkK IHsKIAlWYXJpYWJsZSAgICp2YXI7CiAKLQl2YXIgPSBsb29rdXBWYXJpYWJsZShzdCwgbmFtZSk7 CisJdmFyID0gbG9va3VwVmFyaWFibGUodmFyaWFibGVzLCBuYW1lKTsKIAlpZiAodmFyID09IE5V TEwpCiAJewogCQlWYXJpYWJsZSAgICpuZXd2YXJzOwpAQCAtMTM3NSwyMyArMTM4MywyMyBAQCBs b29rdXBDcmVhdGVWYXJpYWJsZShDU3RhdGUgKnN0LCBjb25zdCBjaGFyICpjb250ZXh0LCBjaGFy ICpuYW1lKQogCQl9CiAKIAkJLyogQ3JlYXRlIHZhcmlhYmxlIGF0IHRoZSBlbmQgb2YgdGhlIGFy cmF5ICovCi0JCWlmIChzdC0+dmFyaWFibGVzKQotCQkJbmV3dmFycyA9IChWYXJpYWJsZSAqKSBw Z19yZWFsbG9jKHN0LT52YXJpYWJsZXMsCi0JCQkJCQkJCQkJCSAgKHN0LT5udmFyaWFibGVzICsg MSkgKiBzaXplb2YoVmFyaWFibGUpKTsKKwkJaWYgKHZhcmlhYmxlcy0+YXJyYXkpCisJCQluZXd2 YXJzID0gKFZhcmlhYmxlICopIHBnX3JlYWxsb2ModmFyaWFibGVzLT5hcnJheSwKKwkJCQkJCQkJ KHZhcmlhYmxlcy0+bnZhcmlhYmxlcyArIDEpICogc2l6ZW9mKFZhcmlhYmxlKSk7CiAJCWVsc2UK IAkJCW5ld3ZhcnMgPSAoVmFyaWFibGUgKikgcGdfbWFsbG9jKHNpemVvZihWYXJpYWJsZSkpOwog Ci0JCXN0LT52YXJpYWJsZXMgPSBuZXd2YXJzOworCQl2YXJpYWJsZXMtPmFycmF5ID0gbmV3dmFy czsKIAotCQl2YXIgPSAmbmV3dmFyc1tzdC0+bnZhcmlhYmxlc107CisJCXZhciA9ICZuZXd2YXJz W3ZhcmlhYmxlcy0+bnZhcmlhYmxlc107CiAKIAkJdmFyLT5uYW1lID0gcGdfc3RyZHVwKG5hbWUp OwogCQl2YXItPnN2YWx1ZSA9IE5VTEw7CiAJCS8qIGNhbGxlciBpcyBleHBlY3RlZCB0byBpbml0 aWFsaXplIHJlbWFpbmluZyBmaWVsZHMgKi8KIAotCQlzdC0+bnZhcmlhYmxlcysrOworCQl2YXJp YWJsZXMtPm52YXJpYWJsZXMrKzsKIAkJLyogd2UgZG9uJ3QgcmUtc29ydCB0aGUgYXJyYXkgdGls bCB3ZSBoYXZlIHRvICovCi0JCXN0LT52YXJzX3NvcnRlZCA9IGZhbHNlOworCQl2YXJpYWJsZXMt PnZhcnNfc29ydGVkID0gZmFsc2U7CiAJfQogCiAJcmV0dXJuIHZhcjsKQEAgLTE0MDAsMTIgKzE0 MDgsMTMgQEAgbG9va3VwQ3JlYXRlVmFyaWFibGUoQ1N0YXRlICpzdCwgY29uc3QgY2hhciAqY29u dGV4dCwgY2hhciAqbmFtZSkKIC8qIEFzc2lnbiBhIHN0cmluZyB2YWx1ZSB0byBhIHZhcmlhYmxl LCBjcmVhdGluZyBpdCBpZiBuZWVkIGJlICovCiAvKiBSZXR1cm5zIGZhbHNlIG9uIGZhaWx1cmUg KGJhZCBuYW1lKSAqLwogc3RhdGljIGJvb2wKLXB1dFZhcmlhYmxlKENTdGF0ZSAqc3QsIGNvbnN0 IGNoYXIgKmNvbnRleHQsIGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQorcHV0VmFyaWFi bGUoVmFyaWFibGVzICp2YXJpYWJsZXMsIGNvbnN0IGNoYXIgKmNvbnRleHQsIGNoYXIgKm5hbWUs CisJCQljb25zdCBjaGFyICp2YWx1ZSkKIHsKIAlWYXJpYWJsZSAgICp2YXI7CiAJY2hhcgkgICAq dmFsOwogCi0JdmFyID0gbG9va3VwQ3JlYXRlVmFyaWFibGUoc3QsIGNvbnRleHQsIG5hbWUpOwor CXZhciA9IGxvb2t1cENyZWF0ZVZhcmlhYmxlKHZhcmlhYmxlcywgY29udGV4dCwgbmFtZSk7CiAJ aWYgKCF2YXIpCiAJCXJldHVybiBmYWxzZTsKIApAQCAtMTQyMywxMiArMTQzMiwxMiBAQCBwdXRW YXJpYWJsZShDU3RhdGUgKnN0LCBjb25zdCBjaGFyICpjb250ZXh0LCBjaGFyICpuYW1lLCBjb25z dCBjaGFyICp2YWx1ZSkKIC8qIEFzc2lnbiBhIHZhbHVlIHRvIGEgdmFyaWFibGUsIGNyZWF0aW5n IGl0IGlmIG5lZWQgYmUgKi8KIC8qIFJldHVybnMgZmFsc2Ugb24gZmFpbHVyZSAoYmFkIG5hbWUp ICovCiBzdGF0aWMgYm9vbAotcHV0VmFyaWFibGVWYWx1ZShDU3RhdGUgKnN0LCBjb25zdCBjaGFy ICpjb250ZXh0LCBjaGFyICpuYW1lLAorcHV0VmFyaWFibGVWYWx1ZShWYXJpYWJsZXMgKnZhcmlh YmxlcywgY29uc3QgY2hhciAqY29udGV4dCwgY2hhciAqbmFtZSwKIAkJCQkgY29uc3QgUGdCZW5j aFZhbHVlICp2YWx1ZSkKIHsKIAlWYXJpYWJsZSAgICp2YXI7CiAKLQl2YXIgPSBsb29rdXBDcmVh dGVWYXJpYWJsZShzdCwgY29udGV4dCwgbmFtZSk7CisJdmFyID0gbG9va3VwQ3JlYXRlVmFyaWFi bGUodmFyaWFibGVzLCBjb250ZXh0LCBuYW1lKTsKIAlpZiAoIXZhcikKIAkJcmV0dXJuIGZhbHNl OwogCkBAIC0xNDQzLDEyICsxNDUyLDEzIEBAIHB1dFZhcmlhYmxlVmFsdWUoQ1N0YXRlICpzdCwg Y29uc3QgY2hhciAqY29udGV4dCwgY2hhciAqbmFtZSwKIC8qIEFzc2lnbiBhbiBpbnRlZ2VyIHZh bHVlIHRvIGEgdmFyaWFibGUsIGNyZWF0aW5nIGl0IGlmIG5lZWQgYmUgKi8KIC8qIFJldHVybnMg ZmFsc2Ugb24gZmFpbHVyZSAoYmFkIG5hbWUpICovCiBzdGF0aWMgYm9vbAotcHV0VmFyaWFibGVJ bnQoQ1N0YXRlICpzdCwgY29uc3QgY2hhciAqY29udGV4dCwgY2hhciAqbmFtZSwgaW50NjQgdmFs dWUpCitwdXRWYXJpYWJsZUludChWYXJpYWJsZXMgKnZhcmlhYmxlcywgY29uc3QgY2hhciAqY29u dGV4dCwgY2hhciAqbmFtZSwKKwkJCSAgIGludDY0IHZhbHVlKQogewogCVBnQmVuY2hWYWx1ZSB2 YWw7CiAKIAlzZXRJbnRWYWx1ZSgmdmFsLCB2YWx1ZSk7Ci0JcmV0dXJuIHB1dFZhcmlhYmxlVmFs dWUoc3QsIGNvbnRleHQsIG5hbWUsICZ2YWwpOworCXJldHVybiBwdXRWYXJpYWJsZVZhbHVlKHZh cmlhYmxlcywgY29udGV4dCwgbmFtZSwgJnZhbCk7CiB9CiAKIC8qCkBAIC0xNTAzLDcgKzE1MTMs NyBAQCByZXBsYWNlVmFyaWFibGUoY2hhciAqKnNxbCwgY2hhciAqcGFyYW0sIGludCBsZW4sIGNo YXIgKnZhbHVlKQogfQogCiBzdGF0aWMgY2hhciAqCi1hc3NpZ25WYXJpYWJsZXMoQ1N0YXRlICpz dCwgY2hhciAqc3FsKQorYXNzaWduVmFyaWFibGVzKFZhcmlhYmxlcyAqdmFyaWFibGVzLCBjaGFy ICpzcWwpCiB7CiAJY2hhcgkgICAqcCwKIAkJCSAgICpuYW1lLApAQCAtMTUyNCw3ICsxNTM0LDcg QEAgYXNzaWduVmFyaWFibGVzKENTdGF0ZSAqc3QsIGNoYXIgKnNxbCkKIAkJCWNvbnRpbnVlOwog CQl9CiAKLQkJdmFsID0gZ2V0VmFyaWFibGUoc3QsIG5hbWUpOworCQl2YWwgPSBnZXRWYXJpYWJs ZSh2YXJpYWJsZXMsIG5hbWUpOwogCQlmcmVlKG5hbWUpOwogCQlpZiAodmFsID09IE5VTEwpCiAJ CXsKQEAgLTE1MzksMTIgKzE1NDksMTMgQEAgYXNzaWduVmFyaWFibGVzKENTdGF0ZSAqc3QsIGNo YXIgKnNxbCkKIH0KIAogc3RhdGljIHZvaWQKLWdldFF1ZXJ5UGFyYW1zKENTdGF0ZSAqc3QsIGNv bnN0IENvbW1hbmQgKmNvbW1hbmQsIGNvbnN0IGNoYXIgKipwYXJhbXMpCitnZXRRdWVyeVBhcmFt cyhWYXJpYWJsZXMgKnZhcmlhYmxlcywgY29uc3QgQ29tbWFuZCAqY29tbWFuZCwKKwkJCSAgIGNv bnN0IGNoYXIgKipwYXJhbXMpCiB7CiAJaW50CQkJaTsKIAogCWZvciAoaSA9IDA7IGkgPCBjb21t YW5kLT5hcmdjIC0gMTsgaSsrKQotCQlwYXJhbXNbaV0gPSBnZXRWYXJpYWJsZShzdCwgY29tbWFu ZC0+YXJndltpICsgMV0pOworCQlwYXJhbXNbaV0gPSBnZXRWYXJpYWJsZSh2YXJpYWJsZXMsIGNv bW1hbmQtPmFyZ3ZbaSArIDFdKTsKIH0KIAogc3RhdGljIGNoYXIgKgpAQCAtMjM3NSw3ICsyMzg2 LDcgQEAgZXZhbHVhdGVFeHByKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LCBQZ0JlbmNoRXhw ciAqZXhwciwgUGdCZW5jaFZhbHVlICpyZXR2YWwKIAkJCXsKIAkJCQlWYXJpYWJsZSAgICp2YXI7 CiAKLQkJCQlpZiAoKHZhciA9IGxvb2t1cFZhcmlhYmxlKHN0LCBleHByLT51LnZhcmlhYmxlLnZh cm5hbWUpKSA9PSBOVUxMKQorCQkJCWlmICgodmFyID0gbG9va3VwVmFyaWFibGUoJnN0LT52YXJp YWJsZXMsIGV4cHItPnUudmFyaWFibGUudmFybmFtZSkpID09IE5VTEwpCiAJCQkJewogCQkJCQlm cHJpbnRmKHN0ZGVyciwgInVuZGVmaW5lZCB2YXJpYWJsZSBcIiVzXCJcbiIsCiAJCQkJCQkJZXhw ci0+dS52YXJpYWJsZS52YXJuYW1lKTsKQEAgLTI0MzksNyArMjQ1MCw3IEBAIGdldE1ldGFDb21t YW5kKGNvbnN0IGNoYXIgKmNtZCkKICAqIFJldHVybiB0cnVlIGlmIHN1Y2NlZWRlZCwgb3IgZmFs c2Ugb24gZXJyb3IuCiAgKi8KIHN0YXRpYyBib29sCi1ydW5TaGVsbENvbW1hbmQoQ1N0YXRlICpz dCwgY2hhciAqdmFyaWFibGUsIGNoYXIgKiphcmd2LCBpbnQgYXJnYykKK3J1blNoZWxsQ29tbWFu ZChWYXJpYWJsZXMgKnZhcmlhYmxlcywgY2hhciAqdmFyaWFibGUsIGNoYXIgKiphcmd2LCBpbnQg YXJnYykKIHsKIAljaGFyCQljb21tYW5kW1NIRUxMX0NPTU1BTkRfU0laRV07CiAJaW50CQkJaSwK QEAgLTI0NzAsNyArMjQ4MSw3IEBAIHJ1blNoZWxsQ29tbWFuZChDU3RhdGUgKnN0LCBjaGFyICp2 YXJpYWJsZSwgY2hhciAqKmFyZ3YsIGludCBhcmdjKQogCQl7CiAJCQlhcmcgPSBhcmd2W2ldICsg MTsJLyogYSBzdHJpbmcgbGl0ZXJhbCBzdGFydGluZyB3aXRoIGNvbG9ucyAqLwogCQl9Ci0JCWVs c2UgaWYgKChhcmcgPSBnZXRWYXJpYWJsZShzdCwgYXJndltpXSArIDEpKSA9PSBOVUxMKQorCQll bHNlIGlmICgoYXJnID0gZ2V0VmFyaWFibGUodmFyaWFibGVzLCBhcmd2W2ldICsgMSkpID09IE5V TEwpCiAJCXsKIAkJCWZwcmludGYoc3RkZXJyLCAiJXM6IHVuZGVmaW5lZCB2YXJpYWJsZSBcIiVz XCJcbiIsCiAJCQkJCWFyZ3ZbMF0sIGFyZ3ZbaV0pOwpAQCAtMjUzMyw3ICsyNTQ0LDcgQEAgcnVu U2hlbGxDb21tYW5kKENTdGF0ZSAqc3QsIGNoYXIgKnZhcmlhYmxlLCBjaGFyICoqYXJndiwgaW50 IGFyZ2MpCiAJCQkJYXJndlswXSwgcmVzKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KLQlpZiAoIXB1 dFZhcmlhYmxlSW50KHN0LCAic2V0c2hlbGwiLCB2YXJpYWJsZSwgcmV0dmFsKSkKKwlpZiAoIXB1 dFZhcmlhYmxlSW50KHZhcmlhYmxlcywgInNldHNoZWxsIiwgdmFyaWFibGUsIHJldHZhbCkpCiAJ CXJldHVybiBmYWxzZTsKIAogI2lmZGVmIERFQlVHCkBAIC0yNTg3LDcgKzI1OTgsNyBAQCBzZW5k Q29tbWFuZChDU3RhdGUgKnN0LCBDb21tYW5kICpjb21tYW5kKQogCQljaGFyCSAgICpzcWw7CiAK IAkJc3FsID0gcGdfc3RyZHVwKGNvbW1hbmQtPmFyZ3ZbMF0pOwotCQlzcWwgPSBhc3NpZ25WYXJp YWJsZXMoc3QsIHNxbCk7CisJCXNxbCA9IGFzc2lnblZhcmlhYmxlcygmc3QtPnZhcmlhYmxlcywg c3FsKTsKIAogCQlpZiAoZGVidWcpCiAJCQlmcHJpbnRmKHN0ZGVyciwgImNsaWVudCAlZCBzZW5k aW5nICVzXG4iLCBzdC0+aWQsIHNxbCk7CkBAIC0yNTk5LDcgKzI2MTAsNyBAQCBzZW5kQ29tbWFu ZChDU3RhdGUgKnN0LCBDb21tYW5kICpjb21tYW5kKQogCQljb25zdCBjaGFyICpzcWwgPSBjb21t YW5kLT5hcmd2WzBdOwogCQljb25zdCBjaGFyICpwYXJhbXNbTUFYX0FSR1NdOwogCi0JCWdldFF1 ZXJ5UGFyYW1zKHN0LCBjb21tYW5kLCBwYXJhbXMpOworCQlnZXRRdWVyeVBhcmFtcygmc3QtPnZh cmlhYmxlcywgY29tbWFuZCwgcGFyYW1zKTsKIAogCQlpZiAoZGVidWcpCiAJCQlmcHJpbnRmKHN0 ZGVyciwgImNsaWVudCAlZCBzZW5kaW5nICVzXG4iLCBzdC0+aWQsIHNxbCk7CkBAIC0yNjMzLDcg KzI2NDQsNyBAQCBzZW5kQ29tbWFuZChDU3RhdGUgKnN0LCBDb21tYW5kICpjb21tYW5kKQogCQkJ c3QtPnByZXBhcmVkW3N0LT51c2VfZmlsZV0gPSB0cnVlOwogCQl9CiAKLQkJZ2V0UXVlcnlQYXJh bXMoc3QsIGNvbW1hbmQsIHBhcmFtcyk7CisJCWdldFF1ZXJ5UGFyYW1zKCZzdC0+dmFyaWFibGVz LCBjb21tYW5kLCBwYXJhbXMpOwogCQlwcmVwYXJlZFN0YXRlbWVudE5hbWUobmFtZSwgc3QtPnVz ZV9maWxlLCBzdC0+Y29tbWFuZCk7CiAKIAkJaWYgKGRlYnVnKQpAQCAtMjY2MSwxNCArMjY3Miwx NCBAQCBzZW5kQ29tbWFuZChDU3RhdGUgKnN0LCBDb21tYW5kICpjb21tYW5kKQogICogb2YgZGVs YXksIGluIG1pY3Jvc2Vjb25kcy4gIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvbiBl cnJvci4KICAqLwogc3RhdGljIGJvb2wKLWV2YWx1YXRlU2xlZXAoQ1N0YXRlICpzdCwgaW50IGFy Z2MsIGNoYXIgKiphcmd2LCBpbnQgKnVzZWNzKQorZXZhbHVhdGVTbGVlcChWYXJpYWJsZXMgKnZh cmlhYmxlcywgaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBpbnQgKnVzZWNzKQogewogCWNoYXIJICAg KnZhcjsKIAlpbnQJCQl1c2VjOwogCiAJaWYgKCphcmd2WzFdID09ICc6JykKIAl7Ci0JCWlmICgo dmFyID0gZ2V0VmFyaWFibGUoc3QsIGFyZ3ZbMV0gKyAxKSkgPT0gTlVMTCkKKwkJaWYgKCh2YXIg PSBnZXRWYXJpYWJsZSh2YXJpYWJsZXMsIGFyZ3ZbMV0gKyAxKSkgPT0gTlVMTCkKIAkJewogCQkJ ZnByaW50ZihzdGRlcnIsICIlczogdW5kZWZpbmVkIHZhcmlhYmxlIFwiJXNcIlxuIiwKIAkJCQkJ YXJndlswXSwgYXJndlsxXSk7CkBAIC0yOTQxLDcgKzI5NTIsNyBAQCBkb0N1c3RvbShUU3RhdGUg KnRocmVhZCwgQ1N0YXRlICpzdCwgU3RhdHNEYXRhICphZ2cpCiAJCQkJCQkgKi8KIAkJCQkJCWlu dAkJCXVzZWM7CiAKLQkJCQkJCWlmICghZXZhbHVhdGVTbGVlcChzdCwgYXJnYywgYXJndiwgJnVz ZWMpKQorCQkJCQkJaWYgKCFldmFsdWF0ZVNsZWVwKCZzdC0+dmFyaWFibGVzLCBhcmdjLCBhcmd2 LCAmdXNlYykpCiAJCQkJCQl7CiAJCQkJCQkJY29tbWFuZEZhaWxlZChzdCwgInNsZWVwIiwgImV4 ZWN1dGlvbiBvZiBtZXRhLWNvbW1hbmQgZmFpbGVkIik7CiAJCQkJCQkJc3QtPnN0YXRlID0gQ1NU QVRFX0FCT1JURUQ7CkBAIC0yOTgyLDcgKzI5OTMsOCBAQCBkb0N1c3RvbShUU3RhdGUgKnRocmVh ZCwgQ1N0YXRlICpzdCwgU3RhdHNEYXRhICphZ2cpCiAKIAkJCQkJCWlmIChjb21tYW5kLT5tZXRh ID09IE1FVEFfU0VUKQogCQkJCQkJewotCQkJCQkJCWlmICghcHV0VmFyaWFibGVWYWx1ZShzdCwg YXJndlswXSwgYXJndlsxXSwgJnJlc3VsdCkpCisJCQkJCQkJaWYgKCFwdXRWYXJpYWJsZVZhbHVl KCZzdC0+dmFyaWFibGVzLCAgYXJndlswXSwKKwkJCQkJCQkJCQkJCSAgYXJndlsxXSwgJnJlc3Vs dCkpCiAJCQkJCQkJewogCQkJCQkJCQljb21tYW5kRmFpbGVkKHN0LCAic2V0IiwgImFzc2lnbm1l bnQgb2YgbWV0YS1jb21tYW5kIGZhaWxlZCIpOwogCQkJCQkJCQlzdC0+c3RhdGUgPSBDU1RBVEVf QUJPUlRFRDsKQEAgLTMwMzUsNyArMzA0Nyw5IEBAIGRvQ3VzdG9tKFRTdGF0ZSAqdGhyZWFkLCBD U3RhdGUgKnN0LCBTdGF0c0RhdGEgKmFnZykKIAkJCQkJfQogCQkJCQllbHNlIGlmIChjb21tYW5k LT5tZXRhID09IE1FVEFfU0VUU0hFTEwpCiAJCQkJCXsKLQkJCQkJCWJvb2wJCXJldCA9IHJ1blNo ZWxsQ29tbWFuZChzdCwgYXJndlsxXSwgYXJndiArIDIsIGFyZ2MgLSAyKTsKKwkJCQkJCWJvb2wJ CXJldCA9IHJ1blNoZWxsQ29tbWFuZCgmc3QtPnZhcmlhYmxlcywKKwkJCQkJCQkJCQkJCQkJICBh cmd2WzFdLCBhcmd2ICsgMiwKKwkJCQkJCQkJCQkJCQkJICBhcmdjIC0gMik7CiAKIAkJCQkJCWlm ICh0aW1lcl9leGNlZWRlZCkgLyogdGltZW91dCAqLwogCQkJCQkJewpAQCAtMzA1NSw3ICszMDY5 LDggQEAgZG9DdXN0b20oVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsIFN0YXRzRGF0YSAqYWdn KQogCQkJCQl9CiAJCQkJCWVsc2UgaWYgKGNvbW1hbmQtPm1ldGEgPT0gTUVUQV9TSEVMTCkKIAkJ CQkJewotCQkJCQkJYm9vbAkJcmV0ID0gcnVuU2hlbGxDb21tYW5kKHN0LCBOVUxMLCBhcmd2ICsg MSwgYXJnYyAtIDEpOworCQkJCQkJYm9vbAkJcmV0ID0gcnVuU2hlbGxDb21tYW5kKCZzdC0+dmFy aWFibGVzLCBOVUxMLAorCQkJCQkJCQkJCQkJCQkgIGFyZ3YgKyAxLCBhcmdjIC0gMSk7CiAKIAkJ CQkJCWlmICh0aW1lcl9leGNlZWRlZCkgLyogdGltZW91dCAqLwogCQkJCQkJewpAQCAtNTA2MCw3 ICs1MDc1LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJCX0KIAogCQkJCQkq cCsrID0gJ1wwJzsKLQkJCQkJaWYgKCFwdXRWYXJpYWJsZSgmc3RhdGVbMF0sICJvcHRpb24iLCBv cHRhcmcsIHApKQorCQkJCQlpZiAoIXB1dFZhcmlhYmxlKCZzdGF0ZVswXS52YXJpYWJsZXMsICJv cHRpb24iLCBvcHRhcmcsIHApKQogCQkJCQkJZXhpdCgxKTsKIAkJCQl9CiAJCQkJYnJlYWs7CkBA IC01MzYyLDE5ICs1Mzc3LDE5IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJaW50 CQkJajsKIAogCQkJc3RhdGVbaV0uaWQgPSBpOwotCQkJZm9yIChqID0gMDsgaiA8IHN0YXRlWzBd Lm52YXJpYWJsZXM7IGorKykKKwkJCWZvciAoaiA9IDA7IGogPCBzdGF0ZVswXS52YXJpYWJsZXMu bnZhcmlhYmxlczsgaisrKQogCQkJewotCQkJCVZhcmlhYmxlICAgKnZhciA9ICZzdGF0ZVswXS52 YXJpYWJsZXNbal07CisJCQkJVmFyaWFibGUgICAqdmFyID0gJnN0YXRlWzBdLnZhcmlhYmxlcy5h cnJheVtqXTsKIAogCQkJCWlmICh2YXItPnZhbHVlLnR5cGUgIT0gUEdCVF9OT19WQUxVRSkKIAkJ CQl7Ci0JCQkJCWlmICghcHV0VmFyaWFibGVWYWx1ZSgmc3RhdGVbaV0sICJzdGFydHVwIiwKKwkJ CQkJaWYgKCFwdXRWYXJpYWJsZVZhbHVlKCZzdGF0ZVtpXS52YXJpYWJsZXMsICJzdGFydHVwIiwK IAkJCQkJCQkJCQkgIHZhci0+bmFtZSwgJnZhci0+dmFsdWUpKQogCQkJCQkJZXhpdCgxKTsKIAkJ CQl9CiAJCQkJZWxzZQogCQkJCXsKLQkJCQkJaWYgKCFwdXRWYXJpYWJsZSgmc3RhdGVbaV0sICJz dGFydHVwIiwKKwkJCQkJaWYgKCFwdXRWYXJpYWJsZSgmc3RhdGVbaV0udmFyaWFibGVzLCAic3Rh cnR1cCIsCiAJCQkJCQkJCQkgdmFyLT5uYW1lLCB2YXItPnN2YWx1ZSkpCiAJCQkJCQlleGl0KDEp OwogCQkJCX0KQEAgLTU0NTAsMTEgKzU0NjUsMTEgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFy Z3YpCiAJICogOnNjYWxlIHZhcmlhYmxlcyBub3JtYWxseSBnZXQgLXMgb3IgZGF0YWJhc2Ugc2Nh bGUsIGJ1dCBkb24ndCBvdmVycmlkZQogCSAqIGFuIGV4cGxpY2l0IC1EIHN3aXRjaAogCSAqLwot CWlmIChsb29rdXBWYXJpYWJsZSgmc3RhdGVbMF0sICJzY2FsZSIpID09IE5VTEwpCisJaWYgKGxv b2t1cFZhcmlhYmxlKCZzdGF0ZVswXS52YXJpYWJsZXMsICJzY2FsZSIpID09IE5VTEwpCiAJewog CQlmb3IgKGkgPSAwOyBpIDwgbmNsaWVudHM7IGkrKykKIAkJewotCQkJaWYgKCFwdXRWYXJpYWJs ZUludCgmc3RhdGVbaV0sICJzdGFydHVwIiwgInNjYWxlIiwgc2NhbGUpKQorCQkJaWYgKCFwdXRW YXJpYWJsZUludCgmc3RhdGVbaV0udmFyaWFibGVzLCAic3RhcnR1cCIsICJzY2FsZSIsIHNjYWxl KSkKIAkJCQlleGl0KDEpOwogCQl9CiAJfQpAQCAtNTQ2MywxNSArNTQ3OCwxNSBAQCBtYWluKGlu dCBhcmdjLCBjaGFyICoqYXJndikKIAkgKiBEZWZpbmUgYSA6Y2xpZW50X2lkIHZhcmlhYmxlIHRo YXQgaXMgdW5pcXVlIHBlciBjb25uZWN0aW9uLiBCdXQgZG9uJ3QKIAkgKiBvdmVycmlkZSBhbiBl eHBsaWNpdCAtRCBzd2l0Y2guCiAJICovCi0JaWYgKGxvb2t1cFZhcmlhYmxlKCZzdGF0ZVswXSwg ImNsaWVudF9pZCIpID09IE5VTEwpCisJaWYgKGxvb2t1cFZhcmlhYmxlKCZzdGF0ZVswXS52YXJp YWJsZXMsICJjbGllbnRfaWQiKSA9PSBOVUxMKQogCXsKIAkJZm9yIChpID0gMDsgaSA8IG5jbGll bnRzOyBpKyspCi0JCQlpZiAoIXB1dFZhcmlhYmxlSW50KCZzdGF0ZVtpXSwgInN0YXJ0dXAiLCAi Y2xpZW50X2lkIiwgaSkpCisJCQlpZiAoIXB1dFZhcmlhYmxlSW50KCZzdGF0ZVtpXS52YXJpYWJs ZXMsICJzdGFydHVwIiwgImNsaWVudF9pZCIsIGkpKQogCQkJCWV4aXQoMSk7CiAJfQogCiAJLyog c2V0IGRlZmF1bHQgc2VlZCBmb3IgaGFzaCBmdW5jdGlvbnMgKi8KLQlpZiAobG9va3VwVmFyaWFi bGUoJnN0YXRlWzBdLCAiZGVmYXVsdF9zZWVkIikgPT0gTlVMTCkKKwlpZiAobG9va3VwVmFyaWFi bGUoJnN0YXRlWzBdLnZhcmlhYmxlcywgImRlZmF1bHRfc2VlZCIpID09IE5VTEwpCiAJewogCQl1 aW50NjQJCXNlZWQgPSAoKHVpbnQ2NCkgKHJhbmRvbSgpICYgMHhGRkZGKSA8PCA0OCkgfAogCQko KHVpbnQ2NCkgKHJhbmRvbSgpICYgMHhGRkZGKSA8PCAzMikgfApAQCAtNTQ3OSwxNSArNTQ5NCwx NyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJKHVpbnQ2NCkgKHJhbmRvbSgpICYg MHhGRkZGKTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgbmNsaWVudHM7IGkrKykKLQkJCWlmICghcHV0 VmFyaWFibGVJbnQoJnN0YXRlW2ldLCAic3RhcnR1cCIsICJkZWZhdWx0X3NlZWQiLCAoaW50NjQp IHNlZWQpKQorCQkJaWYgKCFwdXRWYXJpYWJsZUludCgmc3RhdGVbaV0udmFyaWFibGVzLCAic3Rh cnR1cCIsICJkZWZhdWx0X3NlZWQiLAorCQkJCQkJCQkoaW50NjQpIHNlZWQpKQogCQkJCWV4aXQo MSk7CiAJfQogCiAJLyogc2V0IHJhbmRvbSBzZWVkIHVubGVzcyBvdmVyd3JpdHRlbiAqLwotCWlm IChsb29rdXBWYXJpYWJsZSgmc3RhdGVbMF0sICJyYW5kb21fc2VlZCIpID09IE5VTEwpCisJaWYg KGxvb2t1cFZhcmlhYmxlKCZzdGF0ZVswXS52YXJpYWJsZXMsICJyYW5kb21fc2VlZCIpID09IE5V TEwpCiAJewogCQlmb3IgKGkgPSAwOyBpIDwgbmNsaWVudHM7IGkrKykKLQkJCWlmICghcHV0VmFy aWFibGVJbnQoJnN0YXRlW2ldLCAic3RhcnR1cCIsICJyYW5kb21fc2VlZCIsIHJhbmRvbV9zZWVk KSkKKwkJCWlmICghcHV0VmFyaWFibGVJbnQoJnN0YXRlW2ldLnZhcmlhYmxlcywgInN0YXJ0dXAi LCAicmFuZG9tX3NlZWQiLAorCQkJCQkJCQlyYW5kb21fc2VlZCkpCiAJCQkJZXhpdCgxKTsKIAl9 CiAKLS0gCjIuNy40Cgo= --=_248aa227bbc4adf7e425934f1ce7af28 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v9-0003-Pgbench-errors-use-the-ereport-macro-to-report-de.patch Content-Disposition: attachment; filename=v9-0003-Pgbench-errors-use-the-ereport-macro-to-report-de.patch; size=63783 RnJvbSAzNzIxZTZiMmE5OGRkNjgwMTQ1MjEyNjlkNGQ2MDE2OTM3ZmE0ZTZkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbmEgUG9seWFrb3ZhIDxtLnBvbHlha292YUBwb3N0Z3Jl c3Byby5ydT4KRGF0ZTogTW9uLCAyMSBNYXkgMjAxOCAxNDozMTo1MyArMDMwMApTdWJqZWN0OiBb UEFUQ0ggdjldIFBnYmVuY2ggZXJyb3JzOiB1c2UgdGhlIGVyZXBvcnQoKSBtYWNybyB0byByZXBv cnQKIGRlYnVnL2xvZy9lcnJvciBtZXNzYWdlcwoKVGhpcyBpcyBtb3N0IGltcG9ydGFudCB3aGVu IGl0IGlzIHVzZWQgdG8gcmVwb3J0IGNsaWVudCBmYWlsdXJlcyB0aGF0IGRvIG5vdApjYXVzZSBh biBhYm9ydHMgYW5kIHRoaXMgZGVwZW5kcyBvbiB0aGUgbGV2ZWwgb2YgZGVidWdnaW5nLgoKSWYg cG9zc2libGUsIHVzZSB0aGUgbG9jYWwgRXJvcnJEYXRhIHN0cnVjdHVyZSBkdXJpbmcgdGhlCmVy cnN0YXJ0KCkvZXJybXNnKCkvZXJyZmluaXNoKCkgY2FsbHMuIE90aGVyd2lzZSB1c2UgYSBzdGF0 aWMgdmFyaWFibGUgcHJvdGVjdGVkCmJ5IGEgbXV0ZXggaWYgbmVjZXNzYXJ5LiBUbyBkbyBhbGwg b2YgdGhpcyBleHBvcnQgdGhlIGZ1bmN0aW9uCmFwcGVuZFBRRXhwQnVmZmVyVkEgZnJvbSBsaWJw cS4KLS0tCiBzcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5jICAgICAgICAgIHwgMTAxMSArKysrKysr KysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0KIHNyYy9pbnRlcmZhY2VzL2xpYnBxL2V4cG9y dHMudHh0ICAgfCAgICAxICsKIHNyYy9pbnRlcmZhY2VzL2xpYnBxL3BxZXhwYnVmZmVyLmMgfCAg ICA0ICstCiBzcmMvaW50ZXJmYWNlcy9saWJwcS9wcWV4cGJ1ZmZlci5oIHwgICAgOCArCiA0IGZp bGVzIGNoYW5nZWQsIDY5MiBpbnNlcnRpb25zKCspLCAzMzIgZGVsZXRpb25zKC0pCgpkaWZmIC0t Z2l0IGEvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYyBiL3NyYy9iaW4vcGdiZW5jaC9wZ2JlbmNo LmMKaW5kZXggMjU0ZjEyNS4uZDEwMGNlZSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ2JlbmNoL3Bn YmVuY2guYworKysgYi9zcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5jCkBAIC01MjYsNiArNTI2LDkz IEBAIHN0YXRpYyBjb25zdCBCdWlsdGluU2NyaXB0IGJ1aWx0aW5fc2NyaXB0W10gPQogCX0KIH07 CiAKK3R5cGVkZWYgZW51bSBFcnJvckxldmVsCit7CisJLyoKKwkgKiBUbyByZXBvcnQgdGhyb3R0 bGluZywgZXhlY3V0ZWQvc2VudC9yZWNlaXZlZCBjb21tYW5kcyBldGMuCisJICovCisJRUxFVkVM X0RFQlVHLAorCisJLyoKKwkgKiBUbyByZXBvcnQgdGhlIGVycm9yL2xvZyBtZXNzYWdlcyBhbmQv b3IgUEdCRU5DSF9ERUJVRy4KKwkgKi8KKwlFTEVWRUxfTE9HLAorCisJLyoKKwkgKiBUbyByZXBv cnQgdGhlIGVycm9yIG1lc3NhZ2VzIG9mIHRoZSBtYWluIHByb2dyYW0gYW5kIHRvIGV4aXQgaW1t ZWRpYXRlbHkuCisJICovCisJRUxFVkVMX0ZBVEFMCit9IEVycm9yTGV2ZWw7CisKK3R5cGVkZWYg c3RydWN0IEVycm9yRGF0YQoreworCUVycm9yTGV2ZWwJZWxldmVsOworCVBRRXhwQnVmZmVyRGF0 YSBtZXNzYWdlOworfSBFcnJvckRhdGE7CisKK3R5cGVkZWYgRXJyb3JEYXRhICpFcnJvcjsKKwor I2lmIGRlZmluZWQoRU5BQkxFX1RIUkVBRF9TQUZFVFkpICYmIGRlZmluZWQoSEFWRV9fVkFfQVJH UykKKy8qIHVzZSB0aGUgbG9jYWwgRXJyb3JEYXRhIGluIGVyZXBvcnQgKi8KKyNkZWZpbmUgTE9D QUxfRVJST1JfREFUQSgpCUVycm9yRGF0YSBlZGF0YTsKKworI2RlZmluZSBlcnJzdGFydChlbGV2 ZWwpCWVycnN0YXJ0SW1wbCgmZWRhdGEsIGVsZXZlbCkKKyNkZWZpbmUgZXJybXNnKC4uLikJCQll cnJtc2dJbXBsKCZlZGF0YSwgX19WQV9BUkdTX18pCisjZGVmaW5lIGVycmZpbmlzaCguLi4pCQll cnJmaW5pc2hJbXBsKCZlZGF0YSwgX19WQV9BUkdTX18pCisjZWxzZQkJCQkJCQkvKiAhKEVOQUJM RV9USFJFQURfU0FGRVRZICYmIEhBVkVfX1ZBX0FSR1MpICovCisvKiB1c2UgdGhlIGdsb2JhbCBF cnJvckRhdGEgaW4gZXJlcG9ydC4uLiAqLworI2RlZmluZSBMT0NBTF9FUlJPUl9EQVRBKCkKK3N0 YXRpYyBFcnJvckRhdGEgZWRhdGE7CitzdGF0aWMgRXJyb3IgZXJyb3IgPSAmZWRhdGE7CisKKy8q IC4uLmFuZCBwcm90ZWN0IGl0IHdpdGggYSBtdXRleCBpZiBuZWNlc3NhcnkgKi8KKyNpZmRlZiBF TkFCTEVfVEhSRUFEX1NBRkVUWQorc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBlcnJvcl9tdXRleCA9 IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7CisjZW5kaWYJCQkJCQkJLyogRU5BQkxFX1RIUkVB RF9TQUZFVFkgKi8KKworI2RlZmluZSBlcnJzdGFydAllcnJzdGFydEltcGwKKyNkZWZpbmUgZXJy bXNnCQllcnJtc2dJbXBsCisjZGVmaW5lIGVycmZpbmlzaAllcnJmaW5pc2hJbXBsCisjZW5kaWYJ CQkJCQkJLyogRU5BQkxFX1RIUkVBRF9TQUZFVFkgJiYgSEFWRV9fVkFfQVJHUyAqLworCisvKgor ICogRXJyb3IgcmVwb3J0aW5nIEFQSTogdG8gYmUgdXNlZCBpbiB0aGlzIHdheToKKyAqCQllcmVw b3J0KEVMRVZFTF9MT0csCisgKgkJCQkoZXJybXNnKCJjb25uZWN0aW9uIHRvIGRhdGFiYXNlIFwi JXNcIiBmYWlsZWRcbiIsIGRiTmFtZSksCisgKgkJCQkuLi4gb3RoZXIgZXJyeHh4KCkgZmllbGRz IGFzIG5lZWRlZCAuLi4pKTsKKyAqCisgKiBUaGUgZXJyb3IgbGV2ZWwgaXMgcmVxdWlyZWQsIGFu ZCBzbyBpcyBhIHByaW1hcnkgZXJyb3IgbWVzc2FnZS4gQWxsIGVsc2UgaXMKKyAqIG9wdGlvbmFs LgorICoKKyAqIElmIGVsZXZlbCA+PSBFTEVWRUxfRkFUQUwsIHRoZSBjYWxsIHdpbGwgbm90IHJl dHVybjsgd2UgdHJ5IHRvIGluZm9ybSB0aGUKKyAqIGNvbXBpbGVyIG9mIHRoYXQgdmlhIGFib3J0 KCkuIEhvd2V2ZXIsIG5vIHVzZWZ1bCBvcHRpbWl6YXRpb24gZWZmZWN0IGlzCisgKiBvYnRhaW5l ZCB1bmxlc3MgdGhlIGNvbXBpbGVyIHNlZXMgZWxldmVsIGFzIGEgY29tcGlsZS10aW1lIGNvbnN0 YW50LCBlbHNlCisgKiB3ZSdyZSBqdXN0IGFkZGluZyBjb2RlIGJsb2F0LiBTbywgaWYgX19idWls dGluX2NvbnN0YW50X3AgaXMgYXZhaWxhYmxlLCB1c2UKKyAqIHRoYXQgdG8gY2F1c2UgdGhlIHNl Y29uZCBpZigpIHRvIHZhbmlzaCBjb21wbGV0ZWx5IGZvciBub24tY29uc3RhbnQgY2FzZXMuIFdl CisgKiBhdm9pZCB1c2luZyBhIGxvY2FsIHZhcmlhYmxlIGJlY2F1c2UgaXQncyBub3QgbmVjZXNz YXJ5IGFuZCBwcmV2ZW50cyBnY2MgZnJvbQorICogbWFraW5nIHRoZSB1bnJlYWNoYWJpbGl0eSBk ZWR1Y3Rpb24gYXQgb3B0bGV2ZWwgLU8wLgorICovCisjaWZkZWYgSEFWRV9fQlVJTFRJTl9DT05T VEFOVF9QCisjZGVmaW5lIGVyZXBvcnQoZWxldmVsLCByZXN0KSBcCisJZG8geyBcCisJCUxPQ0FM X0VSUk9SX0RBVEEoKSBcCisJCWlmIChlcnJzdGFydChlbGV2ZWwpKSBcCisJCQllcnJmaW5pc2gg cmVzdDsgXAorCQlpZiAoX19idWlsdGluX2NvbnN0YW50X3AoZWxldmVsKSAmJiAoZWxldmVsKSA+ PSBFTEVWRUxfRkFUQUwpIFwKKwkJCWFib3J0KCk7IFwKKwl9IHdoaWxlKDApCisjZWxzZQkJCQkJ CQkvKiAhSEFWRV9fQlVJTFRJTl9DT05TVEFOVF9QICovCisjZGVmaW5lIGVyZXBvcnQoZWxldmVs LCByZXN0KSBcCisJZG8geyBcCisJCWNvbnN0IGludCBlbGV2ZWxfID0gKGVsZXZlbCk7IFwKKwkJ TE9DQUxfRVJST1JfREFUQSgpIFwKKwkJaWYgKGVycnN0YXJ0KGVsZXZlbF8pKSBcCisJCQllcnJm aW5pc2ggcmVzdDsgXAorCQlpZiAoZWxldmVsXyA+PSBFTEVWRUxfRkFUQUwpIFwKKwkJCWFib3J0 KCk7IFwKKwl9IHdoaWxlKDApCisjZW5kaWYJCQkJCQkJLyogSEFWRV9fQlVJTFRJTl9DT05TVEFO VF9QICovCisKIAogLyogRnVuY3Rpb24gcHJvdG90eXBlcyAqLwogc3RhdGljIHZvaWQgc2V0TnVs bFZhbHVlKFBnQmVuY2hWYWx1ZSAqcHYpOwpAQCAtNTQzLDYgKzYzMCwxNyBAQCBzdGF0aWMgdm9p ZCAqdGhyZWFkUnVuKHZvaWQgKmFyZyk7CiBzdGF0aWMgdm9pZCBzZXRhbGFybShpbnQgc2Vjb25k cyk7CiBzdGF0aWMgdm9pZCBmaW5pc2hDb24oQ1N0YXRlICpzdCk7CiAKKyNpZiBkZWZpbmVkKEVO QUJMRV9USFJFQURfU0FGRVRZKSAmJiBkZWZpbmVkKEhBVkVfX1ZBX0FSR1MpCitzdGF0aWMgYm9v bCBlcnJzdGFydEltcGwoRXJyb3IgZXJyb3IsIEVycm9yTGV2ZWwgZWxldmVsKTsKK3N0YXRpYyBp bnQgIGVycm1zZ0ltcGwoRXJyb3IgZXJyb3IsCisJCQkJCSAgIGNvbnN0IGNoYXIgKmZtdCwuLi4p IHBnX2F0dHJpYnV0ZV9wcmludGYoMiwgMyk7CitzdGF0aWMgdm9pZCBlcnJmaW5pc2hJbXBsKEVy cm9yIGVycm9yLCBpbnQgZHVtbXksLi4uKTsKKyNlbHNlCQkJCQkJCS8qICEoRU5BQkxFX1RIUkVB RF9TQUZFVFkgJiYgSEFWRV9fVkFfQVJHUykgKi8KK3N0YXRpYyBib29sIGVycnN0YXJ0SW1wbChF cnJvckxldmVsIGVsZXZlbCk7CitzdGF0aWMgaW50ICBlcnJtc2dJbXBsKGNvbnN0IGNoYXIgKmZt dCwuLi4pIHBnX2F0dHJpYnV0ZV9wcmludGYoMSwgMik7CitzdGF0aWMgdm9pZCBlcnJmaW5pc2hJ bXBsKGludCBkdW1teSwuLi4pOworI2VuZGlmCQkJCQkJCS8qIEVOQUJMRV9USFJFQURfU0FGRVRZ ICYmIEhBVkVfX1ZBX0FSR1MgKi8KKwogCiAvKiBjYWxsYmFjayBmdW5jdGlvbnMgZm9yIG91ciBm bGV4IGxleGVyICovCiBzdGF0aWMgY29uc3QgUHNxbFNjYW5DYWxsYmFja3MgcGdiZW5jaF9jYWxs YmFja3MgPSB7CkBAIC02ODUsNyArNzgzLDEwIEBAIHN0cnRvaW50NjQoY29uc3QgY2hhciAqc3Ry KQogCiAJLyogcmVxdWlyZSBhdCBsZWFzdCBvbmUgZGlnaXQgKi8KIAlpZiAoIWlzZGlnaXQoKHVu c2lnbmVkIGNoYXIpICpwdHIpKQotCQlmcHJpbnRmKHN0ZGVyciwgImludmFsaWQgaW5wdXQgc3lu dGF4IGZvciBpbnRlZ2VyOiBcIiVzXCJcbiIsIHN0cik7CisJeworCQllcmVwb3J0KEVMRVZFTF9M T0csCisJCQkJKGVycm1zZygiaW52YWxpZCBpbnB1dCBzeW50YXggZm9yIGludGVnZXI6IFwiJXNc IlxuIiwgc3RyKSkpOworCX0KIAogCS8qIHByb2Nlc3MgZGlnaXRzICovCiAJd2hpbGUgKCpwdHIg JiYgaXNkaWdpdCgodW5zaWduZWQgY2hhcikgKnB0cikpCkBAIC02OTMsNyArNzk0LDExIEBAIHN0 cnRvaW50NjQoY29uc3QgY2hhciAqc3RyKQogCQlpbnQ2NAkJdG1wID0gcmVzdWx0ICogMTAgKyAo KnB0cisrIC0gJzAnKTsKIAogCQlpZiAoKHRtcCAvIDEwKSAhPSByZXN1bHQpCS8qIG92ZXJmbG93 PyAqLwotCQkJZnByaW50ZihzdGRlcnIsICJ2YWx1ZSBcIiVzXCIgaXMgb3V0IG9mIHJhbmdlIGZv ciB0eXBlIGJpZ2ludFxuIiwgc3RyKTsKKwkJeworCQkJZXJlcG9ydChFTEVWRUxfTE9HLAorCQkJ CQkoZXJybXNnKCJ2YWx1ZSBcIiVzXCIgaXMgb3V0IG9mIHJhbmdlIGZvciB0eXBlIGJpZ2ludFxu IiwKKwkJCQkJCQlzdHIpKSk7CisJCX0KIAkJcmVzdWx0ID0gdG1wOwogCX0KIApAQCAtNzA0LDcg KzgwOSwxMCBAQCBnb3RkaWdpdHM6CiAJCXB0cisrOwogCiAJaWYgKCpwdHIgIT0gJ1wwJykKLQkJ ZnByaW50ZihzdGRlcnIsICJpbnZhbGlkIGlucHV0IHN5bnRheCBmb3IgaW50ZWdlcjogXCIlc1wi XG4iLCBzdHIpOworCXsKKwkJZXJlcG9ydChFTEVWRUxfTE9HLAorCQkJCShlcnJtc2coImludmFs aWQgaW5wdXQgc3ludGF4IGZvciBpbnRlZ2VyOiBcIiVzXCJcbiIsIHN0cikpKTsKKwl9CiAKIAly ZXR1cm4gKChzaWduIDwgMCkgPyAtcmVzdWx0IDogcmVzdWx0KTsKIH0KQEAgLTEwOTEsMTAgKzEx OTksNyBAQCBleGVjdXRlU3RhdGVtZW50KFBHY29ubiAqY29uLCBjb25zdCBjaGFyICpzcWwpCiAK IAlyZXMgPSBQUWV4ZWMoY29uLCBzcWwpOwogCWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpICE9IFBH UkVTX0NPTU1BTkRfT0spCi0JewotCQlmcHJpbnRmKHN0ZGVyciwgIiVzIiwgUFFlcnJvck1lc3Nh Z2UoY29uKSk7Ci0JCWV4aXQoMSk7Ci0JfQorCQllcmVwb3J0KEVMRVZFTF9GQVRBTCwgKGVycm1z ZygiJXMiLCBQUWVycm9yTWVzc2FnZShjb24pKSkpOwogCVBRY2xlYXIocmVzKTsKIH0KIApAQCAt MTEwNyw4ICsxMjEyLDkgQEAgdHJ5RXhlY3V0ZVN0YXRlbWVudChQR2Nvbm4gKmNvbiwgY29uc3Qg Y2hhciAqc3FsKQogCXJlcyA9IFBRZXhlYyhjb24sIHNxbCk7CiAJaWYgKFBRcmVzdWx0U3RhdHVz KHJlcykgIT0gUEdSRVNfQ09NTUFORF9PSykKIAl7Ci0JCWZwcmludGYoc3RkZXJyLCAiJXMiLCBQ UWVycm9yTWVzc2FnZShjb24pKTsKLQkJZnByaW50ZihzdGRlcnIsICIoaWdub3JpbmcgdGhpcyBl cnJvciBhbmQgY29udGludWluZyBhbnl3YXkpXG4iKTsKKwkJZXJlcG9ydChFTEVWRUxfTE9HLAor CQkJCShlcnJtc2coIiVzKGlnbm9yaW5nIHRoaXMgZXJyb3IgYW5kIGNvbnRpbnVpbmcgYW55d2F5 KVxuIiwKKwkJCQkJCVBRZXJyb3JNZXNzYWdlKGNvbikpKSk7CiAJfQogCVBRY2xlYXIocmVzKTsK IH0KQEAgLTExNTQsOCArMTI2MCw4IEBAIGRvQ29ubmVjdCh2b2lkKQogCiAJCWlmICghY29ubikK IAkJewotCQkJZnByaW50ZihzdGRlcnIsICJjb25uZWN0aW9uIHRvIGRhdGFiYXNlIFwiJXNcIiBm YWlsZWRcbiIsCi0JCQkJCWRiTmFtZSk7CisJCQllcmVwb3J0KEVMRVZFTF9MT0csCisJCQkJCShl cnJtc2coImNvbm5lY3Rpb24gdG8gZGF0YWJhc2UgXCIlc1wiIGZhaWxlZFxuIiwgZGJOYW1lKSkp OwogCQkJcmV0dXJuIE5VTEw7CiAJCX0KIApAQCAtMTE3Myw4ICsxMjc5LDkgQEAgZG9Db25uZWN0 KHZvaWQpCiAJLyogY2hlY2sgdG8gc2VlIHRoYXQgdGhlIGJhY2tlbmQgY29ubmVjdGlvbiB3YXMg c3VjY2Vzc2Z1bGx5IG1hZGUgKi8KIAlpZiAoUFFzdGF0dXMoY29ubikgPT0gQ09OTkVDVElPTl9C QUQpCiAJewotCQlmcHJpbnRmKHN0ZGVyciwgImNvbm5lY3Rpb24gdG8gZGF0YWJhc2UgXCIlc1wi IGZhaWxlZDpcbiVzIiwKLQkJCQlkYk5hbWUsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKwkJZXJl cG9ydChFTEVWRUxfTE9HLAorCQkJCShlcnJtc2coImNvbm5lY3Rpb24gdG8gZGF0YWJhc2UgXCIl c1wiIGZhaWxlZDpcbiVzIiwKKwkJCQkJCWRiTmFtZSwgUFFlcnJvck1lc3NhZ2UoY29ubikpKSk7 CiAJCVBRZmluaXNoKGNvbm4pOwogCQlyZXR1cm4gTlVMTDsKIAl9CkBAIC0xMzEyLDkgKzE0MTks OSBAQCBtYWtlVmFyaWFibGVWYWx1ZShWYXJpYWJsZSAqdmFyKQogCiAJCWlmIChzc2NhbmYodmFy LT5zdmFsdWUsICIlbGYlYyIsICZkdiwgJnhzKSAhPSAxKQogCQl7Ci0JCQlmcHJpbnRmKHN0ZGVy ciwKLQkJCQkJIm1hbGZvcm1lZCB2YXJpYWJsZSBcIiVzXCIgdmFsdWU6IFwiJXNcIlxuIiwKLQkJ CQkJdmFyLT5uYW1lLCB2YXItPnN2YWx1ZSk7CisJCQllcmVwb3J0KEVMRVZFTF9MT0csCisJCQkJ CShlcnJtc2coIm1hbGZvcm1lZCB2YXJpYWJsZSBcIiVzXCIgdmFsdWU6IFwiJXNcIlxuIiwKKwkJ CQkJCQl2YXItPm5hbWUsIHZhci0+c3ZhbHVlKSkpOwogCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAJ CXNldERvdWJsZVZhbHVlKCZ2YXItPnZhbHVlLCBkdik7CkBAIC0xMzU5LDEwICsxNDY2LDEyIEBA IHZhbGlkX3ZhcmlhYmxlX25hbWUoY29uc3QgY2hhciAqbmFtZSkKIC8qCiAgKiBMb29rdXAgYSB2 YXJpYWJsZSBieSBuYW1lLCBjcmVhdGluZyBpdCBpZiBuZWVkIGJlLgogICogQ2FsbGVyIGlzIGV4 cGVjdGVkIHRvIGFzc2lnbiBhIHZhbHVlIHRvIHRoZSB2YXJpYWJsZS4KLSAqIFJldHVybnMgTlVM TCBvbiBmYWlsdXJlIChiYWQgbmFtZSkuCisgKiBPbiBmYWlsdXJlIChiYWQgbmFtZSk6IGlmIHRo aXMgaXMgYSBjbGllbnQgcnVuIHJldHVybnMgTlVMTDsgZXhpdHMgdGhlCisgKiBwcm9ncmFtIG90 aGVyd2lzZS4KICAqLwogc3RhdGljIFZhcmlhYmxlICoKLWxvb2t1cENyZWF0ZVZhcmlhYmxlKFZh cmlhYmxlcyAqdmFyaWFibGVzLCBjb25zdCBjaGFyICpjb250ZXh0LCBjaGFyICpuYW1lKQorbG9v a3VwQ3JlYXRlVmFyaWFibGUoVmFyaWFibGVzICp2YXJpYWJsZXMsIGNvbnN0IGNoYXIgKmNvbnRl eHQsIGNoYXIgKm5hbWUsCisJCQkJCSBib29sIGNsaWVudCkKIHsKIAlWYXJpYWJsZSAgICp2YXI7 CiAKQEAgLTEzNzcsOCArMTQ4NiwxMyBAQCBsb29rdXBDcmVhdGVWYXJpYWJsZShWYXJpYWJsZXMg KnZhcmlhYmxlcywgY29uc3QgY2hhciAqY29udGV4dCwgY2hhciAqbmFtZSkKIAkJICovCiAJCWlm ICghdmFsaWRfdmFyaWFibGVfbmFtZShuYW1lKSkKIAkJewotCQkJZnByaW50ZihzdGRlcnIsICIl czogaW52YWxpZCB2YXJpYWJsZSBuYW1lOiBcIiVzXCJcbiIsCi0JCQkJCWNvbnRleHQsIG5hbWUp OworCQkJLyoKKwkJCSAqIEFib3V0IHRoZSBlcnJvciBsZXZlbCB1c2VkOiBpZiB3ZSBwcm9jZXNz IGNsaWVudCBjb21tYW5kcywgaXQgYQorCQkJICogbm9ybWFsIGZhaWx1cmU7IG90aGVyd2lzZSBp dCBpcyBub3QgYW5kIHdlIGV4aXQgdGhlIHByb2dyYW0uCisJCQkgKi8KKwkJCWVyZXBvcnQoY2xp ZW50ID8gRUxFVkVMX0xPRyA6IEVMRVZFTF9GQVRBTCwKKwkJCQkJKGVycm1zZygiJXM6IGludmFs aWQgdmFyaWFibGUgbmFtZTogXCIlc1wiXG4iLAorCQkJCQkJCWNvbnRleHQsIG5hbWUpKSk7CiAJ CQlyZXR1cm4gTlVMTDsKIAkJfQogCkBAIC0xNDA2LDE3ICsxNTIwLDE1IEBAIGxvb2t1cENyZWF0 ZVZhcmlhYmxlKFZhcmlhYmxlcyAqdmFyaWFibGVzLCBjb25zdCBjaGFyICpjb250ZXh0LCBjaGFy ICpuYW1lKQogfQogCiAvKiBBc3NpZ24gYSBzdHJpbmcgdmFsdWUgdG8gYSB2YXJpYWJsZSwgY3Jl YXRpbmcgaXQgaWYgbmVlZCBiZSAqLwotLyogUmV0dXJucyBmYWxzZSBvbiBmYWlsdXJlIChiYWQg bmFtZSkgKi8KLXN0YXRpYyBib29sCisvKiBFeGl0cyBvbiBmYWlsdXJlIChiYWQgbmFtZSkgKi8K K3N0YXRpYyB2b2lkCiBwdXRWYXJpYWJsZShWYXJpYWJsZXMgKnZhcmlhYmxlcywgY29uc3QgY2hh ciAqY29udGV4dCwgY2hhciAqbmFtZSwKIAkJCWNvbnN0IGNoYXIgKnZhbHVlKQogewogCVZhcmlh YmxlICAgKnZhcjsKIAljaGFyCSAgICp2YWw7CiAKLQl2YXIgPSBsb29rdXBDcmVhdGVWYXJpYWJs ZSh2YXJpYWJsZXMsIGNvbnRleHQsIG5hbWUpOwotCWlmICghdmFyKQotCQlyZXR1cm4gZmFsc2U7 CisJdmFyID0gbG9va3VwQ3JlYXRlVmFyaWFibGUodmFyaWFibGVzLCBjb250ZXh0LCBuYW1lLCBm YWxzZSk7CiAKIAkvKiBkdXAgdGhlbiBmcmVlLCBpbiBjYXNlIHZhbHVlIGlzIHBvaW50aW5nIGF0 IHRoaXMgdmFyaWFibGUgKi8KIAl2YWwgPSBwZ19zdHJkdXAodmFsdWUpOwpAQCAtMTQyNSwxOSAr MTUzNywyMCBAQCBwdXRWYXJpYWJsZShWYXJpYWJsZXMgKnZhcmlhYmxlcywgY29uc3QgY2hhciAq Y29udGV4dCwgY2hhciAqbmFtZSwKIAkJZnJlZSh2YXItPnN2YWx1ZSk7CiAJdmFyLT5zdmFsdWUg PSB2YWw7CiAJdmFyLT52YWx1ZS50eXBlID0gUEdCVF9OT19WQUxVRTsKLQotCXJldHVybiB0cnVl OwogfQogCi0vKiBBc3NpZ24gYSB2YWx1ZSB0byBhIHZhcmlhYmxlLCBjcmVhdGluZyBpdCBpZiBu ZWVkIGJlICovCi0vKiBSZXR1cm5zIGZhbHNlIG9uIGZhaWx1cmUgKGJhZCBuYW1lKSAqLworLyoK KyAqIEFzc2lnbiBhIHZhbHVlIHRvIGEgdmFyaWFibGUsIGNyZWF0aW5nIGl0IGlmIG5lZWQgYmUu CisgKiBPbiBmYWlsdXJlIChiYWQgbmFtZSk6IGlmIHRoaXMgaXMgYSBjbGllbnQgcnVuIHJldHVy bnMgZmFsc2U7IGV4aXRzIHRoZQorICogcHJvZ3JhbSBvdGhlcndpc2UuCisgKi8KIHN0YXRpYyBi b29sCiBwdXRWYXJpYWJsZVZhbHVlKFZhcmlhYmxlcyAqdmFyaWFibGVzLCBjb25zdCBjaGFyICpj b250ZXh0LCBjaGFyICpuYW1lLAotCQkJCSBjb25zdCBQZ0JlbmNoVmFsdWUgKnZhbHVlKQorCQkJ CSBjb25zdCBQZ0JlbmNoVmFsdWUgKnZhbHVlLCBib29sIGNsaWVudCkKIHsKIAlWYXJpYWJsZSAg ICp2YXI7CiAKLQl2YXIgPSBsb29rdXBDcmVhdGVWYXJpYWJsZSh2YXJpYWJsZXMsIGNvbnRleHQs IG5hbWUpOworCXZhciA9IGxvb2t1cENyZWF0ZVZhcmlhYmxlKHZhcmlhYmxlcywgY29udGV4dCwg bmFtZSwgY2xpZW50KTsKIAlpZiAoIXZhcikKIAkJcmV0dXJuIGZhbHNlOwogCkBAIC0xNDQ5LDE2 ICsxNTYyLDE5IEBAIHB1dFZhcmlhYmxlVmFsdWUoVmFyaWFibGVzICp2YXJpYWJsZXMsIGNvbnN0 IGNoYXIgKmNvbnRleHQsIGNoYXIgKm5hbWUsCiAJcmV0dXJuIHRydWU7CiB9CiAKLS8qIEFzc2ln biBhbiBpbnRlZ2VyIHZhbHVlIHRvIGEgdmFyaWFibGUsIGNyZWF0aW5nIGl0IGlmIG5lZWQgYmUg Ki8KLS8qIFJldHVybnMgZmFsc2Ugb24gZmFpbHVyZSAoYmFkIG5hbWUpICovCisvKgorICogQXNz aWduIGFuIGludGVnZXIgdmFsdWUgdG8gYSB2YXJpYWJsZSwgY3JlYXRpbmcgaXQgaWYgbmVlZCBi ZS4KKyAqIE9uIGZhaWx1cmUgKGJhZCBuYW1lKTogaWYgdGhpcyBpcyBhIGNsaWVudCBydW4gcmV0 dXJucyBmYWxzZTsgZXhpdHMgdGhlCisgKiBwcm9ncmFtIG90aGVyd2lzZS4KKyAqLwogc3RhdGlj IGJvb2wKIHB1dFZhcmlhYmxlSW50KFZhcmlhYmxlcyAqdmFyaWFibGVzLCBjb25zdCBjaGFyICpj b250ZXh0LCBjaGFyICpuYW1lLAotCQkJICAgaW50NjQgdmFsdWUpCisJCQkgICBpbnQ2NCB2YWx1 ZSwgYm9vbCBjbGllbnQpCiB7CiAJUGdCZW5jaFZhbHVlIHZhbDsKIAogCXNldEludFZhbHVlKCZ2 YWwsIHZhbHVlKTsKLQlyZXR1cm4gcHV0VmFyaWFibGVWYWx1ZSh2YXJpYWJsZXMsIGNvbnRleHQs IG5hbWUsICZ2YWwpOworCXJldHVybiBwdXRWYXJpYWJsZVZhbHVlKHZhcmlhYmxlcywgY29udGV4 dCwgbmFtZSwgJnZhbCwgY2xpZW50KTsKIH0KIAogLyoKQEAgLTE1OTAsNyArMTcwNiw4IEBAIGNv ZXJjZVRvQm9vbChQZ0JlbmNoVmFsdWUgKnB2YWwsIGJvb2wgKmJ2YWwpCiAJfQogCWVsc2UJCQkJ CQkvKiBOVUxMLCBJTlQgb3IgRE9VQkxFICovCiAJewotCQlmcHJpbnRmKHN0ZGVyciwgImNhbm5v dCBjb2VyY2UgJXMgdG8gYm9vbGVhblxuIiwgdmFsdWVUeXBlTmFtZShwdmFsKSk7CisJCWVyZXBv cnQoRUxFVkVMX0xPRywKKwkJCQkoZXJybXNnKCJjYW5ub3QgY29lcmNlICVzIHRvIGJvb2xlYW5c biIsIHZhbHVlVHlwZU5hbWUocHZhbCkpKSk7CiAJCSpidmFsID0gZmFsc2U7CQkJLyogc3VwcHJl c3MgdW5pbml0aWFsaXplZC12YXJpYWJsZSB3YXJuaW5ncyAqLwogCQlyZXR1cm4gZmFsc2U7CiAJ fQpAQCAtMTYzNSw3ICsxNzUyLDggQEAgY29lcmNlVG9JbnQoUGdCZW5jaFZhbHVlICpwdmFsLCBp bnQ2NCAqaXZhbCkKIAogCQlpZiAoZHZhbCA8IFBHX0lOVDY0X01JTiB8fCBQR19JTlQ2NF9NQVgg PCBkdmFsKQogCQl7Ci0JCQlmcHJpbnRmKHN0ZGVyciwgImRvdWJsZSB0byBpbnQgb3ZlcmZsb3cg Zm9yICVmXG4iLCBkdmFsKTsKKwkJCWVyZXBvcnQoRUxFVkVMX0xPRywKKwkJCQkJKGVycm1zZygi ZG91YmxlIHRvIGludCBvdmVyZmxvdyBmb3IgJWZcbiIsIGR2YWwpKSk7CiAJCQlyZXR1cm4gZmFs c2U7CiAJCX0KIAkJKml2YWwgPSAoaW50NjQpIGR2YWw7CkBAIC0xNjQzLDcgKzE3NjEsOCBAQCBj b2VyY2VUb0ludChQZ0JlbmNoVmFsdWUgKnB2YWwsIGludDY0ICppdmFsKQogCX0KIAllbHNlCQkJ CQkJLyogQk9PTEVBTiBvciBOVUxMICovCiAJewotCQlmcHJpbnRmKHN0ZGVyciwgImNhbm5vdCBj b2VyY2UgJXMgdG8gaW50XG4iLCB2YWx1ZVR5cGVOYW1lKHB2YWwpKTsKKwkJZXJlcG9ydChFTEVW RUxfTE9HLAorCQkJCShlcnJtc2coImNhbm5vdCBjb2VyY2UgJXMgdG8gaW50XG4iLCB2YWx1ZVR5 cGVOYW1lKHB2YWwpKSkpOwogCQlyZXR1cm4gZmFsc2U7CiAJfQogfQpAQCAtMTY2NCw3ICsxNzgz LDggQEAgY29lcmNlVG9Eb3VibGUoUGdCZW5jaFZhbHVlICpwdmFsLCBkb3VibGUgKmR2YWwpCiAJ fQogCWVsc2UJCQkJCQkvKiBCT09MRUFOIG9yIE5VTEwgKi8KIAl7Ci0JCWZwcmludGYoc3RkZXJy LCAiY2Fubm90IGNvZXJjZSAlcyB0byBkb3VibGVcbiIsIHZhbHVlVHlwZU5hbWUocHZhbCkpOwor CQllcmVwb3J0KEVMRVZFTF9MT0csCisJCQkJKGVycm1zZygiY2Fubm90IGNvZXJjZSAlcyB0byBk b3VibGVcbiIsIHZhbHVlVHlwZU5hbWUocHZhbCkpKSk7CiAJCXJldHVybiBmYWxzZTsKIAl9CiB9 CkBAIC0xODQ1LDggKzE5NjUsOSBAQCBldmFsU3RhbmRhcmRGdW5jKFRTdGF0ZSAqdGhyZWFkLCBD U3RhdGUgKnN0LAogCiAJaWYgKGwgIT0gTlVMTCkKIAl7Ci0JCWZwcmludGYoc3RkZXJyLAotCQkJ CSJ0b28gbWFueSBmdW5jdGlvbiBhcmd1bWVudHMsIG1heGltdW0gaXMgJWRcbiIsIE1BWF9GQVJH Uyk7CisJCWVyZXBvcnQoRUxFVkVMX0xPRywKKwkJCQkoZXJybXNnKCJ0b28gbWFueSBmdW5jdGlv biBhcmd1bWVudHMsIG1heGltdW0gaXMgJWRcbiIsCisJCQkJCSAgIE1BWF9GQVJHUykpKTsKIAkJ cmV0dXJuIGZhbHNlOwogCX0KIApAQCAtMTk2OSw3ICsyMDkwLDggQEAgZXZhbFN0YW5kYXJkRnVu YyhUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwKIAkJCQkJCWNhc2UgUEdCRU5DSF9NT0Q6CiAJ CQkJCQkJaWYgKHJpID09IDApCiAJCQkJCQkJewotCQkJCQkJCQlmcHJpbnRmKHN0ZGVyciwgImRp dmlzaW9uIGJ5IHplcm9cbiIpOworCQkJCQkJCQllcmVwb3J0KEVMRVZFTF9MT0csCisJCQkJCQkJ CQkJKGVycm1zZygiZGl2aXNpb24gYnkgemVyb1xuIikpKTsKIAkJCQkJCQkJcmV0dXJuIGZhbHNl OwogCQkJCQkJCX0KIAkJCQkJCQkvKiBzcGVjaWFsIGhhbmRsaW5nIG9mIC0xIGRpdmlzb3IgKi8K QEAgLTE5ODAsNyArMjEwMiw5IEBAIGV2YWxTdGFuZGFyZEZ1bmMoVFN0YXRlICp0aHJlYWQsIENT dGF0ZSAqc3QsCiAJCQkJCQkJCQkvKiBvdmVyZmxvdyBjaGVjayAobmVlZGVkIGZvciBJTlQ2NF9N SU4pICovCiAJCQkJCQkJCQlpZiAobGkgPT0gUEdfSU5UNjRfTUlOKQogCQkJCQkJCQkJewotCQkJ CQkJCQkJCWZwcmludGYoc3RkZXJyLCAiYmlnaW50IG91dCBvZiByYW5nZVxuIik7CisJCQkJCQkJ CQkJZXJlcG9ydCgKKwkJCQkJCQkJCQkJRUxFVkVMX0xPRywKKwkJCQkJCQkJCQkJKGVycm1zZygi YmlnaW50IG91dCBvZiByYW5nZVxuIikpKTsKIAkJCQkJCQkJCQlyZXR1cm4gZmFsc2U7CiAJCQkJ CQkJCQl9CiAJCQkJCQkJCQllbHNlCkBAIC0yMDgxLDIyICsyMjA1LDQyIEBAIGV2YWxTdGFuZGFy ZEZ1bmMoVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsCiAJCWNhc2UgUEdCRU5DSF9ERUJVRzoK IAkJCXsKIAkJCQlQZ0JlbmNoVmFsdWUgKnZhcmcgPSAmdmFyZ3NbMF07CisJCQkJUFFFeHBCdWZm ZXJEYXRhIGVycm9ybXNnX2J1ZjsKIAogCQkJCUFzc2VydChuYXJncyA9PSAxKTsKIAotCQkJCWZw cmludGYoc3RkZXJyLCAiZGVidWcoc2NyaXB0PSVkLGNvbW1hbmQ9JWQpOiAiLAotCQkJCQkJc3Qt PnVzZV9maWxlLCBzdC0+Y29tbWFuZCArIDEpOworCQkJCWluaXRQUUV4cEJ1ZmZlcigmZXJyb3Jt c2dfYnVmKTsKKwkJCQlwcmludGZQUUV4cEJ1ZmZlcigmZXJyb3Jtc2dfYnVmLAorCQkJCQkJCQkg ICJkZWJ1ZyhzY3JpcHQ9JWQsY29tbWFuZD0lZCk6ICIsCisJCQkJCQkJCSAgc3QtPnVzZV9maWxl LCBzdC0+Y29tbWFuZCArIDEpOwogCiAJCQkJaWYgKHZhcmctPnR5cGUgPT0gUEdCVF9OVUxMKQot CQkJCQlmcHJpbnRmKHN0ZGVyciwgIm51bGxcbiIpOworCQkJCXsKKwkJCQkJYXBwZW5kUFFFeHBC dWZmZXIoJmVycm9ybXNnX2J1ZiwgIm51bGxcbiIpOworCQkJCX0KIAkJCQllbHNlIGlmICh2YXJn LT50eXBlID09IFBHQlRfQk9PTEVBTikKLQkJCQkJZnByaW50ZihzdGRlcnIsICJib29sZWFuICVz XG4iLCB2YXJnLT51LmJ2YWwgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKKwkJCQl7CisJCQkJCWFwcGVu ZFBRRXhwQnVmZmVyKCZlcnJvcm1zZ19idWYsCisJCQkJCQkJCQkgICJib29sZWFuICVzXG4iLAor CQkJCQkJCQkJICB2YXJnLT51LmJ2YWwgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKKwkJCQl9CiAJCQkJ ZWxzZSBpZiAodmFyZy0+dHlwZSA9PSBQR0JUX0lOVCkKLQkJCQkJZnByaW50ZihzdGRlcnIsICJp bnQgIiBJTlQ2NF9GT1JNQVQgIlxuIiwgdmFyZy0+dS5pdmFsKTsKKwkJCQl7CisJCQkJCWFwcGVu ZFBRRXhwQnVmZmVyKCZlcnJvcm1zZ19idWYsCisJCQkJCQkJCQkgICJpbnQgIiBJTlQ2NF9GT1JN QVQgIlxuIiwgdmFyZy0+dS5pdmFsKTsKKwkJCQl9CiAJCQkJZWxzZSBpZiAodmFyZy0+dHlwZSA9 PSBQR0JUX0RPVUJMRSkKLQkJCQkJZnByaW50ZihzdGRlcnIsICJkb3VibGUgJS4qZ1xuIiwgREJM X0RJRywgdmFyZy0+dS5kdmFsKTsKKwkJCQl7CisJCQkJCWFwcGVuZFBRRXhwQnVmZmVyKCZlcnJv cm1zZ19idWYsCisJCQkJCQkJCQkgICJkb3VibGUgJS4qZ1xuIiwgREJMX0RJRywgdmFyZy0+dS5k dmFsKTsKKwkJCQl9CiAJCQkJZWxzZQkJCS8qIGludGVybmFsIGVycm9yLCB1bmV4cGVjdGVkIHR5 cGUgKi8KKwkJCQl7CiAJCQkJCUFzc2VydCgwKTsKKwkJCQl9CisKKwkJCQllcmVwb3J0KEVMRVZF TF9MT0csIChlcnJtc2coIiVzIiwgZXJyb3Jtc2dfYnVmLmRhdGEpKSk7CisJCQkJdGVybVBRRXhw QnVmZmVyKCZlcnJvcm1zZ19idWYpOwogCiAJCQkJKnJldHZhbCA9ICp2YXJnOwogCkBAIC0yMjIw LDEzICsyMzY0LDE1IEBAIGV2YWxTdGFuZGFyZEZ1bmMoVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAq c3QsCiAJCQkJLyogY2hlY2sgcmFuZG9tIHJhbmdlICovCiAJCQkJaWYgKGltaW4gPiBpbWF4KQog CQkJCXsKLQkJCQkJZnByaW50ZihzdGRlcnIsICJlbXB0eSByYW5nZSBnaXZlbiB0byByYW5kb21c biIpOworCQkJCQllcmVwb3J0KEVMRVZFTF9MT0csCisJCQkJCQkJKGVycm1zZygiZW1wdHkgcmFu Z2UgZ2l2ZW4gdG8gcmFuZG9tXG4iKSkpOwogCQkJCQlyZXR1cm4gZmFsc2U7CiAJCQkJfQogCQkJ CWVsc2UgaWYgKGltYXggLSBpbWluIDwgMCB8fCAoaW1heCAtIGltaW4pICsgMSA8IDApCiAJCQkJ ewogCQkJCQkvKiBwcmV2ZW50IGludCBvdmVyZmxvd3MgaW4gcmFuZG9tIGZ1bmN0aW9ucyAqLwot CQkJCQlmcHJpbnRmKHN0ZGVyciwgInJhbmRvbSByYW5nZSBpcyB0b28gbGFyZ2VcbiIpOworCQkJ CQllcmVwb3J0KEVMRVZFTF9MT0csCisJCQkJCQkJKGVycm1zZygicmFuZG9tIHJhbmdlIGlzIHRv byBsYXJnZVxuIikpKTsKIAkJCQkJcmV0dXJuIGZhbHNlOwogCQkJCX0KIApAQCAtMjI0OCw5ICsy Mzk0LDkgQEAgZXZhbFN0YW5kYXJkRnVuYyhUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwKIAkJ CQkJewogCQkJCQkJaWYgKHBhcmFtIDwgTUlOX0dBVVNTSUFOX1BBUkFNKQogCQkJCQkJewotCQkJ CQkJCWZwcmludGYoc3RkZXJyLAotCQkJCQkJCQkJImdhdXNzaWFuIHBhcmFtZXRlciBtdXN0IGJl IGF0IGxlYXN0ICVmICIKLQkJCQkJCQkJCSIobm90ICVmKVxuIiwgTUlOX0dBVVNTSUFOX1BBUkFN LCBwYXJhbSk7CisJCQkJCQkJZXJlcG9ydChFTEVWRUxfTE9HLAorCQkJCQkJCQkJKGVycm1zZygi Z2F1c3NpYW4gcGFyYW1ldGVyIG11c3QgYmUgYXQgbGVhc3QgJWYgKG5vdCAlZilcbiIsCisJCQkJ CQkJCQkJCU1JTl9HQVVTU0lBTl9QQVJBTSwgcGFyYW0pKSk7CiAJCQkJCQkJcmV0dXJuIGZhbHNl OwogCQkJCQkJfQogCkBAIC0yMjYyLDkgKzI0MDgsOSBAQCBldmFsU3RhbmRhcmRGdW5jKFRTdGF0 ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LAogCQkJCQl7CiAJCQkJCQlpZiAocGFyYW0gPD0gMC4wIHx8 IHBhcmFtID09IDEuMCB8fCBwYXJhbSA+IE1BWF9aSVBGSUFOX1BBUkFNKQogCQkJCQkJewotCQkJ CQkJCWZwcmludGYoc3RkZXJyLAotCQkJCQkJCQkJInppcGZpYW4gcGFyYW1ldGVyIG11c3QgYmUg aW4gcmFuZ2UgKDAsIDEpIFUgKDEsICVkXSIKLQkJCQkJCQkJCSIgKGdvdCAlZilcbiIsIE1BWF9a SVBGSUFOX1BBUkFNLCBwYXJhbSk7CisJCQkJCQkJZXJlcG9ydChFTEVWRUxfTE9HLAorCQkJCQkJ CQkJKGVycm1zZygiemlwZmlhbiBwYXJhbWV0ZXIgbXVzdCBiZSBpbiByYW5nZSAoMCwgMSkgVSAo MSwgJWRdIChnb3QgJWYpXG4iLAorCQkJCQkJCQkJCQlNQVhfWklQRklBTl9QQVJBTSwgcGFyYW0p KSk7CiAJCQkJCQkJcmV0dXJuIGZhbHNlOwogCQkJCQkJfQogCQkJCQkJc2V0SW50VmFsdWUocmV0 dmFsLApAQCAtMjI3NSw5ICsyNDIxLDkgQEAgZXZhbFN0YW5kYXJkRnVuYyhUU3RhdGUgKnRocmVh ZCwgQ1N0YXRlICpzdCwKIAkJCQkJewogCQkJCQkJaWYgKHBhcmFtIDw9IDAuMCkKIAkJCQkJCXsK LQkJCQkJCQlmcHJpbnRmKHN0ZGVyciwKLQkJCQkJCQkJCSJleHBvbmVudGlhbCBwYXJhbWV0ZXIg bXVzdCBiZSBncmVhdGVyIHRoYW4gemVybyIKLQkJCQkJCQkJCSIgKGdvdCAlZilcbiIsIHBhcmFt KTsKKwkJCQkJCQllcmVwb3J0KEVMRVZFTF9MT0csCisJCQkJCQkJCQkoZXJybXNnKCJleHBvbmVu dGlhbCBwYXJhbWV0ZXIgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVybyAoZ290ICVmKVxuIiwKKwkJ CQkJCQkJCQkJcGFyYW0pKSk7CiAJCQkJCQkJcmV0dXJuIGZhbHNlOwogCQkJCQkJfQogCkBAIC0y Mzg4LDggKzI1MzQsOSBAQCBldmFsdWF0ZUV4cHIoVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3Qs IFBnQmVuY2hFeHByICpleHByLCBQZ0JlbmNoVmFsdWUgKnJldHZhbAogCiAJCQkJaWYgKCh2YXIg PSBsb29rdXBWYXJpYWJsZSgmc3QtPnZhcmlhYmxlcywgZXhwci0+dS52YXJpYWJsZS52YXJuYW1l KSkgPT0gTlVMTCkKIAkJCQl7Ci0JCQkJCWZwcmludGYoc3RkZXJyLCAidW5kZWZpbmVkIHZhcmlh YmxlIFwiJXNcIlxuIiwKLQkJCQkJCQlleHByLT51LnZhcmlhYmxlLnZhcm5hbWUpOworCQkJCQll cmVwb3J0KEVMRVZFTF9MT0csCisJCQkJCQkJKGVycm1zZygidW5kZWZpbmVkIHZhcmlhYmxlIFwi JXNcIlxuIiwKKwkJCQkJCQkJCWV4cHItPnUudmFyaWFibGUudmFybmFtZSkpKTsKIAkJCQkJcmV0 dXJuIGZhbHNlOwogCQkJCX0KIApAQCAtMjQwOCw5ICsyNTU1LDkgQEAgZXZhbHVhdGVFeHByKFRT dGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LCBQZ0JlbmNoRXhwciAqZXhwciwgUGdCZW5jaFZhbHVl ICpyZXR2YWwKIAogCQlkZWZhdWx0OgogCQkJLyogaW50ZXJuYWwgZXJyb3Igd2hpY2ggc2hvdWxk IG5ldmVyIG9jY3VyICovCi0JCQlmcHJpbnRmKHN0ZGVyciwgInVuZXhwZWN0ZWQgZW5vZGUgdHlw ZSBpbiBldmFsdWF0aW9uOiAlZFxuIiwKLQkJCQkJZXhwci0+ZXR5cGUpOwotCQkJZXhpdCgxKTsK KwkJCWVyZXBvcnQoRUxFVkVMX0ZBVEFMLAorCQkJCQkoZXJybXNnKCJ1bmV4cGVjdGVkIGVub2Rl IHR5cGUgaW4gZXZhbHVhdGlvbjogJWRcbiIsCisJCQkJCQkJZXhwci0+ZXR5cGUpKSk7CiAJfQog fQogCkBAIC0yNDgzLDE1ICsyNjMwLDE3IEBAIHJ1blNoZWxsQ29tbWFuZChWYXJpYWJsZXMgKnZh cmlhYmxlcywgY2hhciAqdmFyaWFibGUsIGNoYXIgKiphcmd2LCBpbnQgYXJnYykKIAkJfQogCQll bHNlIGlmICgoYXJnID0gZ2V0VmFyaWFibGUodmFyaWFibGVzLCBhcmd2W2ldICsgMSkpID09IE5V TEwpCiAJCXsKLQkJCWZwcmludGYoc3RkZXJyLCAiJXM6IHVuZGVmaW5lZCB2YXJpYWJsZSBcIiVz XCJcbiIsCi0JCQkJCWFyZ3ZbMF0sIGFyZ3ZbaV0pOworCQkJZXJlcG9ydChFTEVWRUxfTE9HLAor CQkJCQkoZXJybXNnKCIlczogdW5kZWZpbmVkIHZhcmlhYmxlIFwiJXNcIlxuIiwKKwkJCQkJCQlh cmd2WzBdLCBhcmd2W2ldKSkpOwogCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAKIAkJYXJnbGVuID0g c3RybGVuKGFyZyk7CiAJCWlmIChsZW4gKyBhcmdsZW4gKyAoaSA+IDAgPyAxIDogMCkgPj0gU0hF TExfQ09NTUFORF9TSVpFIC0gMSkKIAkJewotCQkJZnByaW50ZihzdGRlcnIsICIlczogc2hlbGwg Y29tbWFuZCBpcyB0b28gbG9uZ1xuIiwgYXJndlswXSk7CisJCQllcmVwb3J0KEVMRVZFTF9MT0cs CisJCQkJCShlcnJtc2coIiVzOiBzaGVsbCBjb21tYW5kIGlzIHRvbyBsb25nXG4iLCBhcmd2WzBd KSkpOwogCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAKQEAgLTI1MDksNyArMjY1OCwxMSBAQCBydW5T aGVsbENvbW1hbmQoVmFyaWFibGVzICp2YXJpYWJsZXMsIGNoYXIgKnZhcmlhYmxlLCBjaGFyICoq YXJndiwgaW50IGFyZ2MpCiAJCWlmIChzeXN0ZW0oY29tbWFuZCkpCiAJCXsKIAkJCWlmICghdGlt ZXJfZXhjZWVkZWQpCi0JCQkJZnByaW50ZihzdGRlcnIsICIlczogY291bGQgbm90IGxhdW5jaCBz aGVsbCBjb21tYW5kXG4iLCBhcmd2WzBdKTsKKwkJCXsKKwkJCQllcmVwb3J0KEVMRVZFTF9MT0cs CisJCQkJCQkoZXJybXNnKCIlczogY291bGQgbm90IGxhdW5jaCBzaGVsbCBjb21tYW5kXG4iLAor CQkJCQkJCQlhcmd2WzBdKSkpOworCQkJfQogCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAJCXJldHVy biB0cnVlOwpAQCAtMjUxOCwxOSArMjY3MSwyNSBAQCBydW5TaGVsbENvbW1hbmQoVmFyaWFibGVz ICp2YXJpYWJsZXMsIGNoYXIgKnZhcmlhYmxlLCBjaGFyICoqYXJndiwgaW50IGFyZ2MpCiAJLyog RXhlY3V0ZSB0aGUgY29tbWFuZCB3aXRoIHBpcGUgYW5kIHJlYWQgdGhlIHN0YW5kYXJkIG91dHB1 dC4gKi8KIAlpZiAoKGZwID0gcG9wZW4oY29tbWFuZCwgInIiKSkgPT0gTlVMTCkKIAl7Ci0JCWZw cmludGYoc3RkZXJyLCAiJXM6IGNvdWxkIG5vdCBsYXVuY2ggc2hlbGwgY29tbWFuZFxuIiwgYXJn dlswXSk7CisJCWVyZXBvcnQoRUxFVkVMX0xPRywKKwkJCQkoZXJybXNnKCIlczogY291bGQgbm90 IGxhdW5jaCBzaGVsbCBjb21tYW5kXG4iLCBhcmd2WzBdKSkpOwogCQlyZXR1cm4gZmFsc2U7CiAJ fQogCWlmIChmZ2V0cyhyZXMsIHNpemVvZihyZXMpLCBmcCkgPT0gTlVMTCkKIAl7CiAJCWlmICgh dGltZXJfZXhjZWVkZWQpCi0JCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBjb3VsZCBub3QgcmVhZCBy ZXN1bHQgb2Ygc2hlbGwgY29tbWFuZFxuIiwgYXJndlswXSk7CisJCXsKKwkJCWVyZXBvcnQoRUxF VkVMX0xPRywKKwkJCQkJKGVycm1zZygiJXM6IGNvdWxkIG5vdCByZWFkIHJlc3VsdCBvZiBzaGVs bCBjb21tYW5kXG4iLAorCQkJCQkJCWFyZ3ZbMF0pKSk7CisJCX0KIAkJKHZvaWQpIHBjbG9zZShm cCk7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAJaWYgKHBjbG9zZShmcCkgPCAwKQogCXsKLQkJZnBy aW50ZihzdGRlcnIsICIlczogY291bGQgbm90IGNsb3NlIHNoZWxsIGNvbW1hbmRcbiIsIGFyZ3Zb MF0pOworCQllcmVwb3J0KEVMRVZFTF9MT0csCisJCQkJKGVycm1zZygiJXM6IGNvdWxkIG5vdCBj bG9zZSBzaGVsbCBjb21tYW5kXG4iLCBhcmd2WzBdKSkpOwogCQlyZXR1cm4gZmFsc2U7CiAJfQog CkBAIC0yNTQwLDExICsyNjk5LDEyIEBAIHJ1blNoZWxsQ29tbWFuZChWYXJpYWJsZXMgKnZhcmlh YmxlcywgY2hhciAqdmFyaWFibGUsIGNoYXIgKiphcmd2LCBpbnQgYXJnYykKIAkJZW5kcHRyKys7 CiAJaWYgKCpyZXMgPT0gJ1wwJyB8fCAqZW5kcHRyICE9ICdcMCcpCiAJewotCQlmcHJpbnRmKHN0 ZGVyciwgIiVzOiBzaGVsbCBjb21tYW5kIG11c3QgcmV0dXJuIGFuIGludGVnZXIgKG5vdCBcIiVz XCIpXG4iLAotCQkJCWFyZ3ZbMF0sIHJlcyk7CisJCWVyZXBvcnQoRUxFVkVMX0xPRywKKwkJCQko ZXJybXNnKCIlczogc2hlbGwgY29tbWFuZCBtdXN0IHJldHVybiBhbiBpbnRlZ2VyIChub3QgXCIl c1wiKVxuIiwKKwkJCQkJCWFyZ3ZbMF0sIHJlcykpKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KLQlp ZiAoIXB1dFZhcmlhYmxlSW50KHZhcmlhYmxlcywgInNldHNoZWxsIiwgdmFyaWFibGUsIHJldHZh bCkpCisJaWYgKCFwdXRWYXJpYWJsZUludCh2YXJpYWJsZXMsICJzZXRzaGVsbCIsIHZhcmlhYmxl LCByZXR2YWwsIHRydWUpKQogCQlyZXR1cm4gZmFsc2U7CiAKICNpZmRlZiBERUJVRwpAQCAtMjU2 Myw5ICsyNzIzLDkgQEAgcHJlcGFyZWRTdGF0ZW1lbnROYW1lKGNoYXIgKmJ1ZmZlciwgaW50IGZp bGUsIGludCBzdGF0ZSkKIHN0YXRpYyB2b2lkCiBjb21tYW5kRmFpbGVkKENTdGF0ZSAqc3QsIGNv bnN0IGNoYXIgKmNtZCwgY29uc3QgY2hhciAqbWVzc2FnZSkKIHsKLQlmcHJpbnRmKHN0ZGVyciwK LQkJCSJjbGllbnQgJWQgYWJvcnRlZCBpbiBjb21tYW5kICVkICglcykgb2Ygc2NyaXB0ICVkOyAl c1xuIiwKLQkJCXN0LT5pZCwgc3QtPmNvbW1hbmQsIGNtZCwgc3QtPnVzZV9maWxlLCBtZXNzYWdl KTsKKwllcmVwb3J0KEVMRVZFTF9MT0csCisJCQkoZXJybXNnKCJjbGllbnQgJWQgYWJvcnRlZCBp biBjb21tYW5kICVkICglcykgb2Ygc2NyaXB0ICVkOyAlc1xuIiwKKwkJCQkJc3QtPmlkLCBzdC0+ Y29tbWFuZCwgY21kLCBzdC0+dXNlX2ZpbGUsIG1lc3NhZ2UpKSk7CiB9CiAKIC8qIHJldHVybiBh IHNjcmlwdCBudW1iZXIgd2l0aCBhIHdlaWdodGVkIGNob2ljZS4gKi8KQEAgLTI2MDAsOCArMjc2 MCw3IEBAIHNlbmRDb21tYW5kKENTdGF0ZSAqc3QsIENvbW1hbmQgKmNvbW1hbmQpCiAJCXNxbCA9 IHBnX3N0cmR1cChjb21tYW5kLT5hcmd2WzBdKTsKIAkJc3FsID0gYXNzaWduVmFyaWFibGVzKCZz dC0+dmFyaWFibGVzLCBzcWwpOwogCi0JCWlmIChkZWJ1ZykKLQkJCWZwcmludGYoc3RkZXJyLCAi Y2xpZW50ICVkIHNlbmRpbmcgJXNcbiIsIHN0LT5pZCwgc3FsKTsKKwkJZXJlcG9ydChFTEVWRUxf REVCVUcsIChlcnJtc2coImNsaWVudCAlZCBzZW5kaW5nICVzXG4iLCBzdC0+aWQsIHNxbCkpKTsK IAkJciA9IFBRc2VuZFF1ZXJ5KHN0LT5jb24sIHNxbCk7CiAJCWZyZWUoc3FsKTsKIAl9CkBAIC0y NjEyLDggKzI3NzEsNyBAQCBzZW5kQ29tbWFuZChDU3RhdGUgKnN0LCBDb21tYW5kICpjb21tYW5k KQogCiAJCWdldFF1ZXJ5UGFyYW1zKCZzdC0+dmFyaWFibGVzLCBjb21tYW5kLCBwYXJhbXMpOwog Ci0JCWlmIChkZWJ1ZykKLQkJCWZwcmludGYoc3RkZXJyLCAiY2xpZW50ICVkIHNlbmRpbmcgJXNc biIsIHN0LT5pZCwgc3FsKTsKKwkJZXJlcG9ydChFTEVWRUxfREVCVUcsIChlcnJtc2coImNsaWVu dCAlZCBzZW5kaW5nICVzXG4iLCBzdC0+aWQsIHNxbCkpKTsKIAkJciA9IFBRc2VuZFF1ZXJ5UGFy YW1zKHN0LT5jb24sIHNxbCwgY29tbWFuZC0+YXJnYyAtIDEsCiAJCQkJCQkJICBOVUxMLCBwYXJh bXMsIE5VTEwsIE5VTEwsIDApOwogCX0KQEAgLTI2MzgsNyArMjc5NiwxMCBAQCBzZW5kQ29tbWFu ZChDU3RhdGUgKnN0LCBDb21tYW5kICpjb21tYW5kKQogCQkJCXJlcyA9IFBRcHJlcGFyZShzdC0+ Y29uLCBuYW1lLAogCQkJCQkJCQljb21tYW5kc1tqXS0+YXJndlswXSwgY29tbWFuZHNbal0tPmFy Z2MgLSAxLCBOVUxMKTsKIAkJCQlpZiAoUFFyZXN1bHRTdGF0dXMocmVzKSAhPSBQR1JFU19DT01N QU5EX09LKQotCQkJCQlmcHJpbnRmKHN0ZGVyciwgIiVzIiwgUFFlcnJvck1lc3NhZ2Uoc3QtPmNv bikpOworCQkJCXsKKwkJCQkJZXJlcG9ydChFTEVWRUxfTE9HLAorCQkJCQkJCShlcnJtc2coIiVz IiwgUFFlcnJvck1lc3NhZ2Uoc3QtPmNvbikpKSk7CisJCQkJfQogCQkJCVBRY2xlYXIocmVzKTsK IAkJCX0KIAkJCXN0LT5wcmVwYXJlZFtzdC0+dXNlX2ZpbGVdID0gdHJ1ZTsKQEAgLTI2NDcsOCAr MjgwOCw3IEBAIHNlbmRDb21tYW5kKENTdGF0ZSAqc3QsIENvbW1hbmQgKmNvbW1hbmQpCiAJCWdl dFF1ZXJ5UGFyYW1zKCZzdC0+dmFyaWFibGVzLCBjb21tYW5kLCBwYXJhbXMpOwogCQlwcmVwYXJl ZFN0YXRlbWVudE5hbWUobmFtZSwgc3QtPnVzZV9maWxlLCBzdC0+Y29tbWFuZCk7CiAKLQkJaWYg KGRlYnVnKQotCQkJZnByaW50ZihzdGRlcnIsICJjbGllbnQgJWQgc2VuZGluZyAlc1xuIiwgc3Qt PmlkLCBuYW1lKTsKKwkJZXJlcG9ydChFTEVWRUxfREVCVUcsIChlcnJtc2coImNsaWVudCAlZCBz ZW5kaW5nICVzXG4iLCBzdC0+aWQsIG5hbWUpKSk7CiAJCXIgPSBQUXNlbmRRdWVyeVByZXBhcmVk KHN0LT5jb24sIG5hbWUsIGNvbW1hbmQtPmFyZ2MgLSAxLAogCQkJCQkJCQlwYXJhbXMsIE5VTEws IE5VTEwsIDApOwogCX0KQEAgLTI2NTcsOSArMjgxNyw5IEBAIHNlbmRDb21tYW5kKENTdGF0ZSAq c3QsIENvbW1hbmQgKmNvbW1hbmQpCiAKIAlpZiAociA9PSAwKQogCXsKLQkJaWYgKGRlYnVnKQot CQkJZnByaW50ZihzdGRlcnIsICJjbGllbnQgJWQgY291bGQgbm90IHNlbmQgJXNcbiIsCi0JCQkJ CXN0LT5pZCwgY29tbWFuZC0+YXJndlswXSk7CisJCWVyZXBvcnQoRUxFVkVMX0RFQlVHLAorCQkJ CShlcnJtc2coImNsaWVudCAlZCBjb3VsZCBub3Qgc2VuZCAlc1xuIiwKKwkJCQkJCXN0LT5pZCwg Y29tbWFuZC0+YXJndlswXSkpKTsKIAkJc3QtPmVjbnQrKzsKIAkJcmV0dXJuIGZhbHNlOwogCX0K QEAgLTI2ODEsOCArMjg0MSw5IEBAIGV2YWx1YXRlU2xlZXAoVmFyaWFibGVzICp2YXJpYWJsZXMs IGludCBhcmdjLCBjaGFyICoqYXJndiwgaW50ICp1c2VjcykKIAl7CiAJCWlmICgodmFyID0gZ2V0 VmFyaWFibGUodmFyaWFibGVzLCBhcmd2WzFdICsgMSkpID09IE5VTEwpCiAJCXsKLQkJCWZwcmlu dGYoc3RkZXJyLCAiJXM6IHVuZGVmaW5lZCB2YXJpYWJsZSBcIiVzXCJcbiIsCi0JCQkJCWFyZ3Zb MF0sIGFyZ3ZbMV0pOworCQkJZXJlcG9ydChFTEVWRUxfTE9HLAorCQkJCQkoZXJybXNnKCIlczog dW5kZWZpbmVkIHZhcmlhYmxlIFwiJXNcIlxuIiwKKwkJCQkJCQlhcmd2WzBdLCBhcmd2WzFdKSkp OwogCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAJCXVzZWMgPSBhdG9pKHZhcik7CkBAIC0yNzQ1LDkg KzI5MDYsOSBAQCBkb0N1c3RvbShUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwgU3RhdHNEYXRh ICphZ2cpCiAKIAkJCQlzdC0+dXNlX2ZpbGUgPSBjaG9vc2VTY3JpcHQodGhyZWFkKTsKIAotCQkJ CWlmIChkZWJ1ZykKLQkJCQkJZnByaW50ZihzdGRlcnIsICJjbGllbnQgJWQgZXhlY3V0aW5nIHNj cmlwdCBcIiVzXCJcbiIsIHN0LT5pZCwKLQkJCQkJCQlzcWxfc2NyaXB0W3N0LT51c2VfZmlsZV0u ZGVzYyk7CisJCQkJZXJlcG9ydChFTEVWRUxfREVCVUcsCisJCQkJCQkoZXJybXNnKCJjbGllbnQg JWQgZXhlY3V0aW5nIHNjcmlwdCBcIiVzXCJcbiIsCisJCQkJCQkJCXN0LT5pZCwgc3FsX3Njcmlw dFtzdC0+dXNlX2ZpbGVdLmRlc2MpKSk7CiAKIAkJCQlpZiAodGhyb3R0bGVfZGVsYXkgPiAwKQog CQkJCQlzdC0+c3RhdGUgPSBDU1RBVEVfU1RBUlRfVEhST1RUTEU7CkBAIC0yODIwLDkgKzI5ODEs OSBAQCBkb0N1c3RvbShUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwgU3RhdHNEYXRhICphZ2cp CiAJCQkJfQogCiAJCQkJc3QtPnN0YXRlID0gQ1NUQVRFX1RIUk9UVExFOwotCQkJCWlmIChkZWJ1 ZykKLQkJCQkJZnByaW50ZihzdGRlcnIsICJjbGllbnQgJWQgdGhyb3R0bGluZyAiIElOVDY0X0ZP Uk1BVCAiIHVzXG4iLAotCQkJCQkJCXN0LT5pZCwgd2FpdCk7CisJCQkJZXJlcG9ydChFTEVWRUxf REVCVUcsCisJCQkJCQkoZXJybXNnKCJjbGllbnQgJWQgdGhyb3R0bGluZyAiIElOVDY0X0ZPUk1B VCAiIHVzXG4iLAorCQkJCQkJCQlzdC0+aWQsIHdhaXQpKSk7CiAJCQkJYnJlYWs7CiAKIAkJCQkv KgpAQCAtMjg1NCw4ICszMDE1LDkgQEAgZG9DdXN0b20oVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAq c3QsIFN0YXRzRGF0YSAqYWdnKQogCQkJCQlzdGFydCA9IG5vdzsKIAkJCQkJaWYgKChzdC0+Y29u ID0gZG9Db25uZWN0KCkpID09IE5VTEwpCiAJCQkJCXsKLQkJCQkJCWZwcmludGYoc3RkZXJyLCAi Y2xpZW50ICVkIGFib3J0ZWQgd2hpbGUgZXN0YWJsaXNoaW5nIGNvbm5lY3Rpb25cbiIsCi0JCQkJ CQkJCXN0LT5pZCk7CisJCQkJCQllcmVwb3J0KEVMRVZFTF9MT0csCisJCQkJCQkJCShlcnJtc2co ImNsaWVudCAlZCBhYm9ydGVkIHdoaWxlIGVzdGFibGlzaGluZyBjb25uZWN0aW9uXG4iLAorCQkJ CQkJCQkJCXN0LT5pZCkpKTsKIAkJCQkJCXN0LT5zdGF0ZSA9IENTVEFURV9BQk9SVEVEOwogCQkJ CQkJYnJlYWs7CiAJCQkJCX0KQEAgLTI5MzIsMTQgKzMwOTQsMTYgQEAgZG9DdXN0b20oVFN0YXRl ICp0aHJlYWQsIENTdGF0ZSAqc3QsIFN0YXRzRGF0YSAqYWdnKQogCQkJCQlpbnQJCQlhcmdjID0g Y29tbWFuZC0+YXJnYywKIAkJCQkJCQkJaTsKIAkJCQkJY2hhcgkgICoqYXJndiA9IGNvbW1hbmQt PmFyZ3Y7CisJCQkJCVBRRXhwQnVmZmVyRGF0YSBlcnJtc2dfYnVmOwogCi0JCQkJCWlmIChkZWJ1 ZykKLQkJCQkJewotCQkJCQkJZnByaW50ZihzdGRlcnIsICJjbGllbnQgJWQgZXhlY3V0aW5nIFxc JXMiLCBzdC0+aWQsIGFyZ3ZbMF0pOwotCQkJCQkJZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykK LQkJCQkJCQlmcHJpbnRmKHN0ZGVyciwgIiAlcyIsIGFyZ3ZbaV0pOwotCQkJCQkJZnByaW50Zihz dGRlcnIsICJcbiIpOwotCQkJCQl9CisJCQkJCWluaXRQUUV4cEJ1ZmZlcigmZXJybXNnX2J1Zik7 CisJCQkJCXByaW50ZlBRRXhwQnVmZmVyKCZlcnJtc2dfYnVmLCAiY2xpZW50ICVkIGV4ZWN1dGlu ZyBcXCVzIiwKKwkJCQkJCQkJCSAgc3QtPmlkLCBhcmd2WzBdKTsKKwkJCQkJZm9yIChpID0gMTsg aSA8IGFyZ2M7IGkrKykKKwkJCQkJCWFwcGVuZFBRRXhwQnVmZmVyKCZlcnJtc2dfYnVmLCAiICVz IiwgYXJndltpXSk7CisJCQkJCWFwcGVuZFBRRXhwQnVmZmVyQ2hhcigmZXJybXNnX2J1ZiwgJ1xu Jyk7CisJCQkJCWVyZXBvcnQoRUxFVkVMX0RFQlVHLCAoZXJybXNnKCIlcyIsIGVycm1zZ19idWYu ZGF0YSkpKTsKKwkJCQkJdGVybVBRRXhwQnVmZmVyKCZlcnJtc2dfYnVmKTsKIAogCQkJCQlpZiAo Y29tbWFuZC0+bWV0YSA9PSBNRVRBX1NMRUVQKQogCQkJCQl7CkBAIC0yOTk0LDcgKzMxNTgsNyBA QCBkb0N1c3RvbShUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwgU3RhdHNEYXRhICphZ2cpCiAJ CQkJCQlpZiAoY29tbWFuZC0+bWV0YSA9PSBNRVRBX1NFVCkKIAkJCQkJCXsKIAkJCQkJCQlpZiAo IXB1dFZhcmlhYmxlVmFsdWUoJnN0LT52YXJpYWJsZXMsICBhcmd2WzBdLAotCQkJCQkJCQkJCQkJ ICBhcmd2WzFdLCAmcmVzdWx0KSkKKwkJCQkJCQkJCQkJCSAgYXJndlsxXSwgJnJlc3VsdCwgdHJ1 ZSkpCiAJCQkJCQkJewogCQkJCQkJCQljb21tYW5kRmFpbGVkKHN0LCAic2V0IiwgImFzc2lnbm1l bnQgb2YgbWV0YS1jb21tYW5kIGZhaWxlZCIpOwogCQkJCQkJCQlzdC0+c3RhdGUgPSBDU1RBVEVf QUJPUlRFRDsKQEAgLTMxOTcsOCArMzM2MSw4IEBAIGRvQ3VzdG9tKFRTdGF0ZSAqdGhyZWFkLCBD U3RhdGUgKnN0LCBTdGF0c0RhdGEgKmFnZykKIAkJCQkgKi8KIAkJCWNhc2UgQ1NUQVRFX1dBSVRf UkVTVUxUOgogCQkJCWNvbW1hbmQgPSBzcWxfc2NyaXB0W3N0LT51c2VfZmlsZV0uY29tbWFuZHNb c3QtPmNvbW1hbmRdOwotCQkJCWlmIChkZWJ1ZykKLQkJCQkJZnByaW50ZihzdGRlcnIsICJjbGll bnQgJWQgcmVjZWl2aW5nXG4iLCBzdC0+aWQpOworCQkJCWVyZXBvcnQoRUxFVkVMX0RFQlVHLAor CQkJCQkJKGVycm1zZygiY2xpZW50ICVkIHJlY2VpdmluZ1xuIiwgc3QtPmlkKSkpOwogCQkJCWlm ICghUFFjb25zdW1lSW5wdXQoc3QtPmNvbikpCiAJCQkJewkJCQkvKiB0aGVyZSdzIHNvbWV0aGlu ZyB3cm9uZyAqLwogCQkJCQljb21tYW5kRmFpbGVkKHN0LCAiU1FMIiwgInBlcmhhcHMgdGhlIGJh Y2tlbmQgZGllZCB3aGlsZSBwcm9jZXNzaW5nIik7CkBAIC0zMjg0LDggKzM0NDgsOCBAQCBkb0N1 c3RvbShUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwgU3RhdHNEYXRhICphZ2cpCiAJCQkJLyog Y29uZGl0aW9uYWwgc3RhY2sgbXVzdCBiZSBlbXB0eSAqLwogCQkJCWlmICghY29uZGl0aW9uYWxf c3RhY2tfZW1wdHkoc3QtPmNzdGFjaykpCiAJCQkJewotCQkJCQlmcHJpbnRmKHN0ZGVyciwgImVu ZCBvZiBzY3JpcHQgcmVhY2hlZCB3aXRoaW4gYSBjb25kaXRpb25hbCwgbWlzc2luZyBcXGVuZGlm XG4iKTsKLQkJCQkJZXhpdCgxKTsKKwkJCQkJZXJlcG9ydChFTEVWRUxfRkFUQUwsCisJCQkJCQkJ KGVycm1zZygiZW5kIG9mIHNjcmlwdCByZWFjaGVkIHdpdGhpbiBhIGNvbmRpdGlvbmFsLCBtaXNz aW5nIFxcZW5kaWZcbiIpKSk7CiAJCQkJfQogCiAJCQkJaWYgKGlzX2Nvbm5lY3QpCkBAIC0zNDg0 LDcgKzM2NDgsNyBAQCBkaXNjb25uZWN0X2FsbChDU3RhdGUgKnN0YXRlLCBpbnQgbGVuZ3RoKQog c3RhdGljIHZvaWQKIGluaXREcm9wVGFibGVzKFBHY29ubiAqY29uKQogewotCWZwcmludGYoc3Rk ZXJyLCAiZHJvcHBpbmcgb2xkIHRhYmxlcy4uLlxuIik7CisJZXJlcG9ydChFTEVWRUxfTE9HLCAo ZXJybXNnKCJkcm9wcGluZyBvbGQgdGFibGVzLi4uXG4iKSkpOwogCiAJLyoKIAkgKiBXZSBkcm9w IGFsbCB0aGUgdGFibGVzIGluIG9uZSBjb21tYW5kLCBzbyB0aGF0IHdoZXRoZXIgdGhlcmUgYXJl CkBAIC0zNTU5LDcgKzM3MjMsNyBAQCBpbml0Q3JlYXRlVGFibGVzKFBHY29ubiAqY29uKQogCX07 CiAJaW50CQkJaTsKIAotCWZwcmludGYoc3RkZXJyLCAiY3JlYXRpbmcgdGFibGVzLi4uXG4iKTsK KwllcmVwb3J0KEVMRVZFTF9MT0csIChlcnJtc2coImNyZWF0aW5nIHRhYmxlcy4uLlxuIikpKTsK IAogCWZvciAoaSA9IDA7IGkgPCBsZW5ndGhvZihERExzKTsgaSsrKQogCXsKQEAgLTM2MTIsNyAr Mzc3Niw3IEBAIGluaXRHZW5lcmF0ZURhdGEoUEdjb25uICpjb24pCiAJCQkJcmVtYWluaW5nX3Nl YzsKIAlpbnQJCQlsb2dfaW50ZXJ2YWwgPSAxOwogCi0JZnByaW50ZihzdGRlcnIsICJnZW5lcmF0 aW5nIGRhdGEuLi5cbiIpOworCWVyZXBvcnQoRUxFVkVMX0xPRywgKGVycm1zZygiZ2VuZXJhdGlu ZyBkYXRhLi4uXG4iKSkpOwogCiAJLyoKIAkgKiB3ZSBkbyBhbGwgb2YgdGhpcyBpbiBvbmUgdHJh bnNhY3Rpb24gdG8gZW5hYmxlIHRoZSBiYWNrZW5kJ3MKQEAgLTM2NTcsMTAgKzM4MjEsNyBAQCBp bml0R2VuZXJhdGVEYXRhKFBHY29ubiAqY29uKQogCSAqLwogCXJlcyA9IFBRZXhlYyhjb24sICJj b3B5IHBnYmVuY2hfYWNjb3VudHMgZnJvbSBzdGRpbiIpOwogCWlmIChQUXJlc3VsdFN0YXR1cyhy ZXMpICE9IFBHUkVTX0NPUFlfSU4pCi0JewotCQlmcHJpbnRmKHN0ZGVyciwgIiVzIiwgUFFlcnJv ck1lc3NhZ2UoY29uKSk7Ci0JCWV4aXQoMSk7Ci0JfQorCQllcmVwb3J0KEVMRVZFTF9GQVRBTCwg KGVycm1zZygiJXMiLCBQUWVycm9yTWVzc2FnZShjb24pKSkpOwogCVBRY2xlYXIocmVzKTsKIAog CUlOU1RSX1RJTUVfU0VUX0NVUlJFTlQoc3RhcnQpOwpAQCAtMzY3NCwxMCArMzgzNSw3IEBAIGlu aXRHZW5lcmF0ZURhdGEoUEdjb25uICpjb24pCiAJCQkJIElOVDY0X0ZPUk1BVCAiXHQiIElOVDY0 X0ZPUk1BVCAiXHQlZFx0XG4iLAogCQkJCSBqLCBrIC8gbmFjY291bnRzICsgMSwgMCk7CiAJCWlm IChQUXB1dGxpbmUoY29uLCBzcWwpKQotCQl7Ci0JCQlmcHJpbnRmKHN0ZGVyciwgIlBRcHV0bGlu ZSBmYWlsZWRcbiIpOwotCQkJZXhpdCgxKTsKLQkJfQorCQkJZXJlcG9ydChFTEVWRUxfRkFUQUws IChlcnJtc2coIlBRcHV0bGluZSBmYWlsZWRcbiIpKSk7CiAKIAkJLyoKIAkJICogSWYgd2Ugd2Fu dCB0byBzdGljayB3aXRoIHRoZSBvcmlnaW5hbCBsb2dnaW5nLCBwcmludCBhIG1lc3NhZ2UgZWFj aApAQCAtMzY5MSwxMCArMzg0OSwxMiBAQCBpbml0R2VuZXJhdGVEYXRhKFBHY29ubiAqY29uKQog CQkJZWxhcHNlZF9zZWMgPSBJTlNUUl9USU1FX0dFVF9ET1VCTEUoZGlmZik7CiAJCQlyZW1haW5p bmdfc2VjID0gKChkb3VibGUpIHNjYWxlICogbmFjY291bnRzIC0gaikgKiBlbGFwc2VkX3NlYyAv IGo7CiAKLQkJCWZwcmludGYoc3RkZXJyLCBJTlQ2NF9GT1JNQVQgIiBvZiAiIElOVDY0X0ZPUk1B VCAiIHR1cGxlcyAoJWQlJSkgZG9uZSAoZWxhcHNlZCAlLjJmIHMsIHJlbWFpbmluZyAlLjJmIHMp XG4iLAotCQkJCQlqLCAoaW50NjQpIG5hY2NvdW50cyAqIHNjYWxlLAotCQkJCQkoaW50KSAoKChp bnQ2NCkgaiAqIDEwMCkgLyAobmFjY291bnRzICogKGludDY0KSBzY2FsZSkpLAotCQkJCQllbGFw c2VkX3NlYywgcmVtYWluaW5nX3NlYyk7CisJCQllcmVwb3J0KEVMRVZFTF9MT0csCisJCQkJCShl cnJtc2coSU5UNjRfRk9STUFUICIgb2YgIiBJTlQ2NF9GT1JNQVQgIiB0dXBsZXMgKCVkJSUpIGRv bmUgKGVsYXBzZWQgJS4yZiBzLCByZW1haW5pbmcgJS4yZiBzKVxuIiwKKwkJCQkJCQlqLCAoaW50 NjQpIG5hY2NvdW50cyAqIHNjYWxlLAorCQkJCQkJCShpbnQpICgoKGludDY0KSBqICogMTAwKSAv CisJCQkJCQkJCSAgIChuYWNjb3VudHMgKiAoaW50NjQpIHNjYWxlKSksCisJCQkJCQkJZWxhcHNl ZF9zZWMsIHJlbWFpbmluZ19zZWMpKSk7CiAJCX0KIAkJLyogbGV0J3Mgbm90IGNhbGwgdGhlIHRp bWluZyBmb3IgZWFjaCByb3csIGJ1dCBvbmx5IGVhY2ggMTAwIHJvd3MgKi8KIAkJZWxzZSBpZiAo dXNlX3F1aWV0ICYmIChqICUgMTAwID09IDApKQpAQCAtMzcwOCw5ICszODY4LDEyIEBAIGluaXRH ZW5lcmF0ZURhdGEoUEdjb25uICpjb24pCiAJCQkvKiBoYXZlIHdlIHJlYWNoZWQgdGhlIG5leHQg aW50ZXJ2YWwgKG9yIGVuZCk/ICovCiAJCQlpZiAoKGogPT0gc2NhbGUgKiBuYWNjb3VudHMpIHx8 IChlbGFwc2VkX3NlYyA+PSBsb2dfaW50ZXJ2YWwgKiBMT0dfU1RFUF9TRUNPTkRTKSkKIAkJCXsK LQkJCQlmcHJpbnRmKHN0ZGVyciwgSU5UNjRfRk9STUFUICIgb2YgIiBJTlQ2NF9GT1JNQVQgIiB0 dXBsZXMgKCVkJSUpIGRvbmUgKGVsYXBzZWQgJS4yZiBzLCByZW1haW5pbmcgJS4yZiBzKVxuIiwK LQkJCQkJCWosIChpbnQ2NCkgbmFjY291bnRzICogc2NhbGUsCi0JCQkJCQkoaW50KSAoKChpbnQ2 NCkgaiAqIDEwMCkgLyAobmFjY291bnRzICogKGludDY0KSBzY2FsZSkpLCBlbGFwc2VkX3NlYywg cmVtYWluaW5nX3NlYyk7CisJCQkJZXJlcG9ydChFTEVWRUxfTE9HLAorCQkJCQkJKGVycm1zZyhJ TlQ2NF9GT1JNQVQgIiBvZiAiIElOVDY0X0ZPUk1BVCAiIHR1cGxlcyAoJWQlJSkgZG9uZSAoZWxh cHNlZCAlLjJmIHMsIHJlbWFpbmluZyAlLjJmIHMpXG4iLAorCQkJCQkJCQlqLCAoaW50NjQpIG5h Y2NvdW50cyAqIHNjYWxlLAorCQkJCQkJCQkoaW50KSAoKChpbnQ2NCkgaiAqIDEwMCkgLworCQkJ CQkJCQkJICAgKG5hY2NvdW50cyAqIChpbnQ2NCkgc2NhbGUpKSwKKwkJCQkJCQkJZWxhcHNlZF9z ZWMsIHJlbWFpbmluZ19zZWMpKSk7CiAKIAkJCQkvKiBza2lwIHRvIHRoZSBuZXh0IGludGVydmFs ICovCiAJCQkJbG9nX2ludGVydmFsID0gKGludCkgY2VpbChlbGFwc2VkX3NlYyAvIExPR19TVEVQ X1NFQ09ORFMpOwpAQCAtMzcxOSwxNSArMzg4Miw5IEBAIGluaXRHZW5lcmF0ZURhdGEoUEdjb25u ICpjb24pCiAKIAl9CiAJaWYgKFBRcHV0bGluZShjb24sICJcXC5cbiIpKQotCXsKLQkJZnByaW50 ZihzdGRlcnIsICJ2ZXJ5IGxhc3QgUFFwdXRsaW5lIGZhaWxlZFxuIik7Ci0JCWV4aXQoMSk7Ci0J fQorCQllcmVwb3J0KEVMRVZFTF9GQVRBTCwgKGVycm1zZygidmVyeSBsYXN0IFBRcHV0bGluZSBm YWlsZWRcbiIpKSk7CiAJaWYgKFBRZW5kY29weShjb24pKQotCXsKLQkJZnByaW50ZihzdGRlcnIs ICJQUWVuZGNvcHkgZmFpbGVkXG4iKTsKLQkJZXhpdCgxKTsKLQl9CisJCWVyZXBvcnQoRUxFVkVM X0ZBVEFMLCAoZXJybXNnKCJQUWVuZGNvcHkgZmFpbGVkXG4iKSkpOwogCiAJZXhlY3V0ZVN0YXRl bWVudChjb24sICJjb21taXQiKTsKIH0KQEAgLTM3MzgsNyArMzg5NSw3IEBAIGluaXRHZW5lcmF0 ZURhdGEoUEdjb25uICpjb24pCiBzdGF0aWMgdm9pZAogaW5pdFZhY3V1bShQR2Nvbm4gKmNvbikK IHsKLQlmcHJpbnRmKHN0ZGVyciwgInZhY3V1bWluZy4uLlxuIik7CisJZXJlcG9ydChFTEVWRUxf TE9HLCAoZXJybXNnKCJ2YWN1dW1pbmcuLi5cbiIpKSk7CiAJZXhlY3V0ZVN0YXRlbWVudChjb24s ICJ2YWN1dW0gYW5hbHl6ZSBwZ2JlbmNoX2JyYW5jaGVzIik7CiAJZXhlY3V0ZVN0YXRlbWVudChj b24sICJ2YWN1dW0gYW5hbHl6ZSBwZ2JlbmNoX3RlbGxlcnMiKTsKIAlleGVjdXRlU3RhdGVtZW50 KGNvbiwgInZhY3V1bSBhbmFseXplIHBnYmVuY2hfYWNjb3VudHMiKTsKQEAgLTM3NTgsNyArMzkx NSw3IEBAIGluaXRDcmVhdGVQS2V5cyhQR2Nvbm4gKmNvbikKIAl9OwogCWludAkJCWk7CiAKLQlm cHJpbnRmKHN0ZGVyciwgImNyZWF0aW5nIHByaW1hcnkga2V5cy4uLlxuIik7CisJZXJlcG9ydChF TEVWRUxfTE9HLCAoZXJybXNnKCJjcmVhdGluZyBwcmltYXJ5IGtleXMuLi5cbiIpKSk7CiAJZm9y IChpID0gMDsgaSA8IGxlbmd0aG9mKERETElOREVYZXMpOyBpKyspCiAJewogCQljaGFyCQlidWZm ZXJbMjU2XTsKQEAgLTM3OTUsNyArMzk1Miw3IEBAIGluaXRDcmVhdGVGS2V5cyhQR2Nvbm4gKmNv bikKIAl9OwogCWludAkJCWk7CiAKLQlmcHJpbnRmKHN0ZGVyciwgImNyZWF0aW5nIGZvcmVpZ24g a2V5cy4uLlxuIik7CisJZXJlcG9ydChFTEVWRUxfTE9HLCAoZXJybXNnKCJjcmVhdGluZyBmb3Jl aWduIGtleXMuLi5cbiIpKSk7CiAJZm9yIChpID0gMDsgaSA8IGxlbmd0aG9mKERETEtFWXMpOyBp KyspCiAJewogCQlleGVjdXRlU3RhdGVtZW50KGNvbiwgRERMS0VZc1tpXSk7CkBAIC0zODE1LDE5 ICszOTcyLDE2IEBAIGNoZWNrSW5pdFN0ZXBzKGNvbnN0IGNoYXIgKmluaXRpYWxpemVfc3RlcHMp CiAJY29uc3QgY2hhciAqc3RlcDsKIAogCWlmIChpbml0aWFsaXplX3N0ZXBzWzBdID09ICdcMCcp Ci0JewotCQlmcHJpbnRmKHN0ZGVyciwgIm5vIGluaXRpYWxpemF0aW9uIHN0ZXBzIHNwZWNpZmll ZFxuIik7Ci0JCWV4aXQoMSk7Ci0JfQorCQllcmVwb3J0KEVMRVZFTF9GQVRBTCwgKGVycm1zZygi bm8gaW5pdGlhbGl6YXRpb24gc3RlcHMgc3BlY2lmaWVkXG4iKSkpOwogCiAJZm9yIChzdGVwID0g aW5pdGlhbGl6ZV9zdGVwczsgKnN0ZXAgIT0gJ1wwJzsgc3RlcCsrKQogCXsKIAkJaWYgKHN0cmNo cigiZHRndnBmICIsICpzdGVwKSA9PSBOVUxMKQogCQl7Ci0JCQlmcHJpbnRmKHN0ZGVyciwgInVu cmVjb2duaXplZCBpbml0aWFsaXphdGlvbiBzdGVwIFwiJWNcIlxuIiwKLQkJCQkJKnN0ZXApOwot CQkJZnByaW50ZihzdGRlcnIsICJhbGxvd2VkIHN0ZXBzIGFyZTogXCJkXCIsIFwidFwiLCBcImdc IiwgXCJ2XCIsIFwicFwiLCBcImZcIlxuIik7Ci0JCQlleGl0KDEpOworCQkJZXJlcG9ydChFTEVW RUxfRkFUQUwsCisJCQkJCShlcnJtc2coInVucmVjb2duaXplZCBpbml0aWFsaXphdGlvbiBzdGVw IFwiJWNcIlxuIgorCQkJCQkJCSJhbGxvd2VkIHN0ZXBzIGFyZTogXCJkXCIsIFwidFwiLCBcImdc IiwgXCJ2XCIsIFwicFwiLCBcImZcIlxuIiwKKwkJCQkJCQkqc3RlcCkpKTsKIAkJfQogCX0KIH0K QEAgLTM4NjksMTQgKzQwMjMsMTUgQEAgcnVuSW5pdFN0ZXBzKGNvbnN0IGNoYXIgKmluaXRpYWxp emVfc3RlcHMpCiAJCQljYXNlICcgJzoKIAkJCQlicmVhazsJCQkvKiBpZ25vcmUgKi8KIAkJCWRl ZmF1bHQ6Ci0JCQkJZnByaW50ZihzdGRlcnIsICJ1bnJlY29nbml6ZWQgaW5pdGlhbGl6YXRpb24g c3RlcCBcIiVjXCJcbiIsCi0JCQkJCQkqc3RlcCk7CisJCQkJZXJlcG9ydChFTEVWRUxfTE9HLAor CQkJCQkJKGVycm1zZygidW5yZWNvZ25pemVkIGluaXRpYWxpemF0aW9uIHN0ZXAgXCIlY1wiXG4i LAorCQkJCQkJCQkqc3RlcCkpKTsKIAkJCQlQUWZpbmlzaChjb24pOwogCQkJCWV4aXQoMSk7CiAJ CX0KIAl9CiAKLQlmcHJpbnRmKHN0ZGVyciwgImRvbmUuXG4iKTsKKwllcmVwb3J0KEVMRVZFTF9M T0csIChlcnJtc2coImRvbmUuXG4iKSkpOwogCVBRZmluaXNoKGNvbik7CiB9CiAKQEAgLTM5MTQs OCArNDA2OSw5IEBAIHBhcnNlUXVlcnkoQ29tbWFuZCAqY21kKQogCiAJCWlmIChjbWQtPmFyZ2Mg Pj0gTUFYX0FSR1MpCiAJCXsKLQkJCWZwcmludGYoc3RkZXJyLCAic3RhdGVtZW50IGhhcyB0b28g bWFueSBhcmd1bWVudHMgKG1heGltdW0gaXMgJWQpOiAlc1xuIiwKLQkJCQkJTUFYX0FSR1MgLSAx LCBjbWQtPmFyZ3ZbMF0pOworCQkJZXJlcG9ydChFTEVWRUxfTE9HLAorCQkJCQkoZXJybXNnKCJz dGF0ZW1lbnQgaGFzIHRvbyBtYW55IGFyZ3VtZW50cyAobWF4aW11bSBpcyAlZCk6ICVzXG4iLAor CQkJCQkJCU1BWF9BUkdTIC0gMSwgY21kLT5hcmd2WzBdKSkpOwogCQkJcGdfZnJlZShuYW1lKTsK IAkJCXJldHVybiBmYWxzZTsKIAkJfQpAQCAtMzkzOSwxMSArNDA5NSwyMiBAQCBzdGF0aWMgdm9p ZAogcGdiZW5jaF9lcnJvcihjb25zdCBjaGFyICpmbXQsLi4uKQogewogCXZhX2xpc3QJCWFwOwor CVBRRXhwQnVmZmVyRGF0YSBlcnJtc2dfYnVmOworCWJvb2wJCWRvbmU7CiAKIAlmZmx1c2goc3Rk b3V0KTsKLQl2YV9zdGFydChhcCwgZm10KTsKLQl2ZnByaW50ZihzdGRlcnIsIF8oZm10KSwgYXAp OwotCXZhX2VuZChhcCk7CisJaW5pdFBRRXhwQnVmZmVyKCZlcnJtc2dfYnVmKTsKKworCS8qIExv b3AgaW4gY2FzZSB3ZSBoYXZlIHRvIHJldHJ5IGFmdGVyIGVubGFyZ2luZyB0aGUgYnVmZmVyLiAq LworCWRvCisJeworCQl2YV9zdGFydChhcCwgZm10KTsKKwkJZG9uZSA9IGFwcGVuZFBRRXhwQnVm ZmVyVkEoJmVycm1zZ19idWYsIGZtdCwgYXApOworCQl2YV9lbmQoYXApOworCX0gd2hpbGUgKCFk b25lKTsKKworCWVyZXBvcnQoRUxFVkVMX0xPRywgKGVycm1zZygiJXMiLCBlcnJtc2dfYnVmLmRh dGEpKSk7CisJdGVybVBRRXhwQnVmZmVyKCZlcnJtc2dfYnVmKTsKIH0KIAogLyoKQEAgLTM5NjMs MjYgKzQxMzAsMzIgQEAgc3ludGF4X2Vycm9yKGNvbnN0IGNoYXIgKnNvdXJjZSwgaW50IGxpbmVu bywKIAkJCSBjb25zdCBjaGFyICpsaW5lLCBjb25zdCBjaGFyICpjb21tYW5kLAogCQkJIGNvbnN0 IGNoYXIgKm1zZywgY29uc3QgY2hhciAqbW9yZSwgaW50IGNvbHVtbikKIHsKLQlmcHJpbnRmKHN0 ZGVyciwgIiVzOiVkOiAlcyIsIHNvdXJjZSwgbGluZW5vLCBtc2cpOworCVBRRXhwQnVmZmVyRGF0 YSBlcnJtc2dfYnVmOworCisJaW5pdFBRRXhwQnVmZmVyKCZlcnJtc2dfYnVmKTsKKwlwcmludGZQ UUV4cEJ1ZmZlcigmZXJybXNnX2J1ZiwgIiVzOiVkOiAlcyIsIHNvdXJjZSwgbGluZW5vLCBtc2cp OwogCWlmIChtb3JlICE9IE5VTEwpCi0JCWZwcmludGYoc3RkZXJyLCAiICglcykiLCBtb3JlKTsK KwkJYXBwZW5kUFFFeHBCdWZmZXIoJmVycm1zZ19idWYsICIgKCVzKSIsIG1vcmUpOwogCWlmIChj b2x1bW4gPj0gMCAmJiBsaW5lID09IE5VTEwpCi0JCWZwcmludGYoc3RkZXJyLCAiIGF0IGNvbHVt biAlZCIsIGNvbHVtbiArIDEpOworCQlhcHBlbmRQUUV4cEJ1ZmZlcigmZXJybXNnX2J1ZiwgIiBh dCBjb2x1bW4gJWQiLCBjb2x1bW4gKyAxKTsKIAlpZiAoY29tbWFuZCAhPSBOVUxMKQotCQlmcHJp bnRmKHN0ZGVyciwgIiBpbiBjb21tYW5kIFwiJXNcIiIsIGNvbW1hbmQpOwotCWZwcmludGYoc3Rk ZXJyLCAiXG4iKTsKKwkJYXBwZW5kUFFFeHBCdWZmZXIoJmVycm1zZ19idWYsICIgaW4gY29tbWFu ZCBcIiVzXCIiLCBjb21tYW5kKTsKKwlhcHBlbmRQUUV4cEJ1ZmZlckNoYXIoJmVycm1zZ19idWYs ICdcbicpOwogCWlmIChsaW5lICE9IE5VTEwpCiAJewotCQlmcHJpbnRmKHN0ZGVyciwgIiVzXG4i LCBsaW5lKTsKKwkJYXBwZW5kUFFFeHBCdWZmZXIoJmVycm1zZ19idWYsICIlc1xuIiwgbGluZSk7 CiAJCWlmIChjb2x1bW4gPj0gMCkKIAkJewogCQkJaW50CQkJaTsKIAogCQkJZm9yIChpID0gMDsg aSA8IGNvbHVtbjsgaSsrKQotCQkJCWZwcmludGYoc3RkZXJyLCAiICIpOwotCQkJZnByaW50Zihz dGRlcnIsICJeIGVycm9yIGZvdW5kIGhlcmVcbiIpOworCQkJCWFwcGVuZFBRRXhwQnVmZmVyQ2hh cigmZXJybXNnX2J1ZiwgJyAnKTsKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZlcnJtc2dfYnVm LCAiXiBlcnJvciBmb3VuZCBoZXJlXG4iKTsKIAkJfQogCX0KKworCWVyZXBvcnQoRUxFVkVMX0xP RywgKGVycm1zZygiJXMiLCBlcnJtc2dfYnVmLmRhdGEpKSk7CisJdGVybVBRRXhwQnVmZmVyKCZl cnJtc2dfYnVmKTsKIAlleGl0KDEpOwogfQogCkBAIC00MjMyLDEwICs0NDA1LDkgQEAgcHJvY2Vz c19iYWNrc2xhc2hfY29tbWFuZChQc3FsU2NhblN0YXRlIHNzdGF0ZSwgY29uc3QgY2hhciAqc291 cmNlKQogc3RhdGljIHZvaWQKIENvbmRpdGlvbkVycm9yKGNvbnN0IGNoYXIgKmRlc2MsIGludCBj bWRuLCBjb25zdCBjaGFyICptc2cpCiB7Ci0JZnByaW50ZihzdGRlcnIsCi0JCQkiY29uZGl0aW9u IGVycm9yIGluIHNjcmlwdCBcIiVzXCIgY29tbWFuZCAlZDogJXNcbiIsCi0JCQlkZXNjLCBjbWRu LCBtc2cpOwotCWV4aXQoMSk7CisJZXJlcG9ydChFTEVWRUxfRkFUQUwsCisJCQkoZXJybXNnKCJj b25kaXRpb24gZXJyb3IgaW4gc2NyaXB0IFwiJXNcIiBjb21tYW5kICVkOiAlc1xuIiwKKwkJCQkJ ZGVzYywgY21kbiwgbXNnKSkpOwogfQogCiAvKgpAQCAtNDQzNCwxOCArNDYwNiwxOCBAQCBwcm9j ZXNzX2ZpbGUoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCB3ZWlnaHQpCiAJCWZkID0gc3RkaW47 CiAJZWxzZSBpZiAoKGZkID0gZm9wZW4oZmlsZW5hbWUsICJyIikpID09IE5VTEwpCiAJewotCQlm cHJpbnRmKHN0ZGVyciwgImNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiOiAlc1xuIiwKLQkJCQlm aWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKLQkJZXhpdCgxKTsKKwkJZXJlcG9ydChFTEVWRUxf RkFUQUwsCisJCQkJKGVycm1zZygiY291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCI6ICVzXG4iLAor CQkJCQkJZmlsZW5hbWUsIHN0cmVycm9yKGVycm5vKSkpKTsKIAl9CiAKIAlidWYgPSByZWFkX2Zp bGVfY29udGVudHMoZmQpOwogCiAJaWYgKGZlcnJvcihmZCkpCiAJewotCQlmcHJpbnRmKHN0ZGVy ciwgImNvdWxkIG5vdCByZWFkIGZpbGUgXCIlc1wiOiAlc1xuIiwKLQkJCQlmaWxlbmFtZSwgc3Ry ZXJyb3IoZXJybm8pKTsKLQkJZXhpdCgxKTsKKwkJZXJlcG9ydChFTEVWRUxfRkFUQUwsCisJCQkJ KGVycm1zZygiY291bGQgbm90IHJlYWQgZmlsZSBcIiVzXCI6ICVzXG4iLAorCQkJCQkJZmlsZW5h bWUsIHN0cmVycm9yKGVycm5vKSkpKTsKIAl9CiAKIAlpZiAoZmQgIT0gc3RkaW4pCkBAIC00NDY4 LDExICs0NjQwLDE2IEBAIHN0YXRpYyB2b2lkCiBsaXN0QXZhaWxhYmxlU2NyaXB0cyh2b2lkKQog ewogCWludAkJCWk7CisJUFFFeHBCdWZmZXJEYXRhIGVycm1zZ19idWY7CiAKLQlmcHJpbnRmKHN0 ZGVyciwgIkF2YWlsYWJsZSBidWlsdGluIHNjcmlwdHM6XG4iKTsKKwlpbml0UFFFeHBCdWZmZXIo JmVycm1zZ19idWYpOworCXByaW50ZlBRRXhwQnVmZmVyKCZlcnJtc2dfYnVmLCAiQXZhaWxhYmxl IGJ1aWx0aW4gc2NyaXB0czpcbiIpOwogCWZvciAoaSA9IDA7IGkgPCBsZW5ndGhvZihidWlsdGlu X3NjcmlwdCk7IGkrKykKLQkJZnByaW50ZihzdGRlcnIsICJcdCVzXG4iLCBidWlsdGluX3Njcmlw dFtpXS5uYW1lKTsKLQlmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisJCWFwcGVuZFBRRXhwQnVmZmVy KCZlcnJtc2dfYnVmLCAiXHQlc1xuIiwgYnVpbHRpbl9zY3JpcHRbaV0ubmFtZSk7CisJYXBwZW5k UFFFeHBCdWZmZXJDaGFyKCZlcnJtc2dfYnVmLCAnXG4nKTsKKworCWVyZXBvcnQoRUxFVkVMX0xP RywgKGVycm1zZygiJXMiLCBlcnJtc2dfYnVmLmRhdGEpKSk7CisJdGVybVBRRXhwQnVmZmVyKCZl cnJtc2dfYnVmKTsKIH0KIAogLyogcmV0dXJuIGJ1aWx0aW4gc2NyaXB0ICJuYW1lIiBpZiB1bmFt YmlndW91cywgZmFpbHMgaWYgbm90IGZvdW5kICovCkBAIC00NDk5LDEwICs0Njc2LDE2IEBAIGZp bmRCdWlsdGluKGNvbnN0IGNoYXIgKm5hbWUpCiAKIAkvKiBlcnJvciBjYXNlcyAqLwogCWlmIChm b3VuZCA9PSAwKQotCQlmcHJpbnRmKHN0ZGVyciwgIm5vIGJ1aWx0aW4gc2NyaXB0IGZvdW5kIGZv ciBuYW1lIFwiJXNcIlxuIiwgbmFtZSk7Ci0JZWxzZQkJCQkJCS8qIGZvdW5kID4gMSAqLwotCQlm cHJpbnRmKHN0ZGVyciwKLQkJCQkiYW1iaWd1b3VzIGJ1aWx0aW4gbmFtZTogJWQgYnVpbHRpbiBz Y3JpcHRzIGZvdW5kIGZvciBwcmVmaXggXCIlc1wiXG4iLCBmb3VuZCwgbmFtZSk7CisJeworCQll cmVwb3J0KEVMRVZFTF9MT0csCisJCQkJKGVycm1zZygibm8gYnVpbHRpbiBzY3JpcHQgZm91bmQg Zm9yIG5hbWUgXCIlc1wiXG4iLCBuYW1lKSkpOworCX0KKwllbHNlCisJewkJCQkJCS8qIGZvdW5k ID4gMSAqLworCQllcmVwb3J0KEVMRVZFTF9MT0csCisJCQkJKGVycm1zZygiYW1iaWd1b3VzIGJ1 aWx0aW4gbmFtZTogJWQgYnVpbHRpbiBzY3JpcHRzIGZvdW5kIGZvciBwcmVmaXggXCIlc1wiXG4i LAorCQkJCQkJZm91bmQsIG5hbWUpKSk7CisJfQogCiAJbGlzdEF2YWlsYWJsZVNjcmlwdHMoKTsK IAlleGl0KDEpOwpAQCAtNDUzNSwxNSArNDcxOCwxNCBAQCBwYXJzZVNjcmlwdFdlaWdodChjb25z dCBjaGFyICpvcHRpb24sIGNoYXIgKipzY3JpcHQpCiAJCXd0bXAgPSBzdHJ0b2woc2VwICsgMSwg JmJhZHAsIDEwKTsKIAkJaWYgKGVycm5vICE9IDAgfHwgYmFkcCA9PSBzZXAgKyAxIHx8ICpiYWRw ICE9ICdcMCcpCiAJCXsKLQkJCWZwcmludGYoc3RkZXJyLCAiaW52YWxpZCB3ZWlnaHQgc3BlY2lm aWNhdGlvbjogJXNcbiIsIHNlcCk7Ci0JCQlleGl0KDEpOworCQkJZXJlcG9ydChFTEVWRUxfRkFU QUwsCisJCQkJCShlcnJtc2coImludmFsaWQgd2VpZ2h0IHNwZWNpZmljYXRpb246ICVzXG4iLCBz ZXApKSk7CiAJCX0KIAkJaWYgKHd0bXAgPiBJTlRfTUFYIHx8IHd0bXAgPCAwKQogCQl7Ci0JCQlm cHJpbnRmKHN0ZGVyciwKLQkJCQkJIndlaWdodCBzcGVjaWZpY2F0aW9uIG91dCBvZiByYW5nZSAo MCAuLiAldSk6ICIgSU5UNjRfRk9STUFUICJcbiIsCi0JCQkJCUlOVF9NQVgsIChpbnQ2NCkgd3Rt cCk7Ci0JCQlleGl0KDEpOworCQkJZXJlcG9ydChFTEVWRUxfRkFUQUwsCisJCQkJCShlcnJtc2co IndlaWdodCBzcGVjaWZpY2F0aW9uIG91dCBvZiByYW5nZSAoMCAuLiAldSk6ICIgSU5UNjRfRk9S TUFUICJcbiIsCisJCQkJCQkJSU5UX01BWCwgKGludDY0KSB3dG1wKSkpOwogCQl9CiAJCXdlaWdo dCA9IHd0bXA7CiAJfQpAQCAtNDU2MiwxNCArNDc0NCwxNSBAQCBhZGRTY3JpcHQoUGFyc2VkU2Ny aXB0IHNjcmlwdCkKIHsKIAlpZiAoc2NyaXB0LmNvbW1hbmRzID09IE5VTEwgfHwgc2NyaXB0LmNv bW1hbmRzWzBdID09IE5VTEwpCiAJewotCQlmcHJpbnRmKHN0ZGVyciwgImVtcHR5IGNvbW1hbmQg bGlzdCBmb3Igc2NyaXB0IFwiJXNcIlxuIiwgc2NyaXB0LmRlc2MpOwotCQlleGl0KDEpOworCQll cmVwb3J0KEVMRVZFTF9GQVRBTCwKKwkJCQkoZXJybXNnKCJlbXB0eSBjb21tYW5kIGxpc3QgZm9y IHNjcmlwdCBcIiVzXCJcbiIsCisJCQkJCQlzY3JpcHQuZGVzYykpKTsKIAl9CiAKIAlpZiAobnVt X3NjcmlwdHMgPj0gTUFYX1NDUklQVFMpCiAJewotCQlmcHJpbnRmKHN0ZGVyciwgImF0IG1vc3Qg JWQgU1FMIHNjcmlwdHMgYXJlIGFsbG93ZWRcbiIsIE1BWF9TQ1JJUFRTKTsKLQkJZXhpdCgxKTsK KwkJZXJlcG9ydChFTEVWRUxfRkFUQUwsCisJCQkJKGVycm1zZygiYXQgbW9zdCAlZCBTUUwgc2Ny aXB0cyBhcmUgYWxsb3dlZFxuIiwgTUFYX1NDUklQVFMpKSk7CiAJfQogCiAJQ2hlY2tDb25kaXRp b25hbChzY3JpcHQpOwpAQCAtNDc1NCw5ICs0OTM3LDggQEAgc2V0X3JhbmRvbV9zZWVkKGNvbnN0 IGNoYXIgKnNlZWQpCiAJCWlmICghcGdfc3Ryb25nX3JhbmRvbSgmaXNlZWQsIHNpemVvZihpc2Vl ZCkpKQogI2VuZGlmCiAJCXsKLQkJCWZwcmludGYoc3RkZXJyLAotCQkJCQkiY2Fubm90IHNlZWQg cmFuZG9tIGZyb20gYSBzdHJvbmcgc291cmNlLCBub25lIGF2YWlsYWJsZTogIgotCQkJCQkidXNl IFwidGltZVwiIG9yIGFuIHVuc2lnbmVkIGludGVnZXIgdmFsdWUuXG4iKTsKKwkJCWVyZXBvcnQo RUxFVkVMX0xPRywKKwkJCQkJKGVycm1zZygiY2Fubm90IHNlZWQgcmFuZG9tIGZyb20gYSBzdHJv bmcgc291cmNlLCBub25lIGF2YWlsYWJsZTogdXNlIFwidGltZVwiIG9yIGFuIHVuc2lnbmVkIGlu dGVnZXIgdmFsdWUuXG4iKSkpOwogCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAJfQpAQCAtNDc2Nywx NSArNDk0OSwxOCBAQCBzZXRfcmFuZG9tX3NlZWQoY29uc3QgY2hhciAqc2VlZCkKIAogCQlpZiAo c3NjYW5mKHNlZWQsICIldSVjIiwgJmlzZWVkLCAmZ2FyYmFnZSkgIT0gMSkKIAkJewotCQkJZnBy aW50ZihzdGRlcnIsCi0JCQkJCSJ1bnJlY29nbml6ZWQgcmFuZG9tIHNlZWQgb3B0aW9uIFwiJXNc IjogZXhwZWN0aW5nIGFuIHVuc2lnbmVkIGludGVnZXIsIFwidGltZVwiIG9yIFwicmFuZFwiXG4i LAotCQkJCQlzZWVkKTsKKwkJCWVyZXBvcnQoRUxFVkVMX0xPRywKKwkJCQkJKGVycm1zZygidW5y ZWNvZ25pemVkIHJhbmRvbSBzZWVkIG9wdGlvbiBcIiVzXCI6IGV4cGVjdGluZyBhbiB1bnNpZ25l ZCBpbnRlZ2VyLCBcInRpbWVcIiBvciBcInJhbmRcIlxuIiwKKwkJCQkJCQlzZWVkKSkpOwogCQkJ cmV0dXJuIGZhbHNlOwogCQl9CiAJfQogCiAJaWYgKHNlZWQgIT0gTlVMTCkKLQkJZnByaW50Zihz dGRlcnIsICJzZXR0aW5nIHJhbmRvbSBzZWVkIHRvICV1XG4iLCBpc2VlZCk7CisJeworCQllcmVw b3J0KEVMRVZFTF9MT0csCisJCQkJKGVycm1zZygic2V0dGluZyByYW5kb20gc2VlZCB0byAldVxu IiwgaXNlZWQpKSk7CisJfQogCXNyYW5kb20oaXNlZWQpOwogCS8qIG5vIHByZWNpc2lvbiBsb3Nz OiAzMiBiaXQgdW5zaWduZWQgaW50IGNhc3QgdG8gNjQgYml0IGludCAqLwogCXJhbmRvbV9zZWVk ID0gaXNlZWQ7CkBAIC00OTA3LDggKzUwOTIsOCBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJn dikKIAkvKiBzZXQgcmFuZG9tIHNlZWQgZWFybHksIGJlY2F1c2UgaXQgbWF5IGJlIHVzZWQgd2hp bGUgcGFyc2luZyBzY3JpcHRzLiAqLwogCWlmICghc2V0X3JhbmRvbV9zZWVkKGdldGVudigiUEdC RU5DSF9SQU5ET01fU0VFRCIpKSkKIAl7Ci0JCWZwcmludGYoc3RkZXJyLCAiZXJyb3Igd2hpbGUg c2V0dGluZyByYW5kb20gc2VlZCBmcm9tIFBHQkVOQ0hfUkFORE9NX1NFRUQgZW52aXJvbm1lbnQg dmFyaWFibGVcbiIpOwotCQlleGl0KDEpOworCQllcmVwb3J0KEVMRVZFTF9GQVRBTCwKKwkJCQko ZXJybXNnKCJlcnJvciB3aGlsZSBzZXR0aW5nIHJhbmRvbSBzZWVkIGZyb20gUEdCRU5DSF9SQU5E T01fU0VFRCBlbnZpcm9ubWVudCB2YXJpYWJsZVxuIikpKTsKIAl9CiAKIAl3aGlsZSAoKGMgPSBn ZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAiaUk6aDpudnA6ZHFiOlNOYzpqOkNyczp0OlQ6VTpsZjpE OkY6TTpQOlI6TDoiLCBsb25nX29wdGlvbnMsICZvcHRpbmRleCkpICE9IC0xKQpAQCAtNDk0OCw5 ICs1MTMzLDkgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJbmNsaWVudHMgPSBh dG9pKG9wdGFyZyk7CiAJCQkJaWYgKG5jbGllbnRzIDw9IDAgfHwgbmNsaWVudHMgPiBNQVhDTElF TlRTKQogCQkJCXsKLQkJCQkJZnByaW50ZihzdGRlcnIsICJpbnZhbGlkIG51bWJlciBvZiBjbGll bnRzOiBcIiVzXCJcbiIsCi0JCQkJCQkJb3B0YXJnKTsKLQkJCQkJZXhpdCgxKTsKKwkJCQkJZXJl cG9ydChFTEVWRUxfRkFUQUwsCisJCQkJCQkJKGVycm1zZygiaW52YWxpZCBudW1iZXIgb2YgY2xp ZW50czogXCIlc1wiXG4iLAorCQkJCQkJCQkJb3B0YXJnKSkpOwogCQkJCX0KICNpZmRlZiBIQVZF X0dFVFJMSU1JVAogI2lmZGVmIFJMSU1JVF9OT0ZJTEUJCQkvKiBtb3N0IHBsYXRmb3JtcyB1c2Ug UkxJTUlUX05PRklMRSAqLwpAQCAtNDk1OSwxNSArNTE0NCwxNiBAQCBtYWluKGludCBhcmdjLCBj aGFyICoqYXJndikKIAkJCQlpZiAoZ2V0cmxpbWl0KFJMSU1JVF9PRklMRSwgJnJsaW0pID09IC0x KQogI2VuZGlmCQkJCQkJCS8qIFJMSU1JVF9OT0ZJTEUgKi8KIAkJCQl7Ci0JCQkJCWZwcmludGYo c3RkZXJyLCAiZ2V0cmxpbWl0IGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7Ci0JCQkJ CWV4aXQoMSk7CisJCQkJCWVyZXBvcnQoRUxFVkVMX0ZBVEFMLAorCQkJCQkJCShlcnJtc2coImdl dHJsaW1pdCBmYWlsZWQ6ICVzXG4iLAorCQkJCQkJCQkJc3RyZXJyb3IoZXJybm8pKSkpOwogCQkJ CX0KIAkJCQlpZiAocmxpbS5ybGltX2N1ciA8IG5jbGllbnRzICsgMykKIAkJCQl7Ci0JCQkJCWZw cmludGYoc3RkZXJyLCAibmVlZCBhdCBsZWFzdCAlZCBvcGVuIGZpbGVzLCBidXQgc3lzdGVtIGxp bWl0IGlzICVsZFxuIiwKLQkJCQkJCQluY2xpZW50cyArIDMsIChsb25nKSBybGltLnJsaW1fY3Vy KTsKLQkJCQkJZnByaW50ZihzdGRlcnIsICJSZWR1Y2UgbnVtYmVyIG9mIGNsaWVudHMsIG9yIHVz ZSBsaW1pdC91bGltaXQgdG8gaW5jcmVhc2UgdGhlIHN5c3RlbSBsaW1pdC5cbiIpOwotCQkJCQll eGl0KDEpOworCQkJCQllcmVwb3J0KEVMRVZFTF9GQVRBTCwKKwkJCQkJCQkoZXJybXNnKCJuZWVk IGF0IGxlYXN0ICVkIG9wZW4gZmlsZXMsIGJ1dCBzeXN0ZW0gbGltaXQgaXMgJWxkXG4iCisJCQkJ CQkJCQkiUmVkdWNlIG51bWJlciBvZiBjbGllbnRzLCBvciB1c2UgbGltaXQvdWxpbWl0IHRvIGlu Y3JlYXNlIHRoZSBzeXN0ZW0gbGltaXQuXG4iLAorCQkJCQkJCQkJbmNsaWVudHMgKyAzLCAobG9u ZykgcmxpbS5ybGltX2N1cikpKTsKIAkJCQl9CiAjZW5kaWYJCQkJCQkJLyogSEFWRV9HRVRSTElN SVQgKi8KIAkJCQlicmVhazsKQEAgLTQ5NzYsMTUgKzUxNjIsMTUgQEAgbWFpbihpbnQgYXJnYywg Y2hhciAqKmFyZ3YpCiAJCQkJbnRocmVhZHMgPSBhdG9pKG9wdGFyZyk7CiAJCQkJaWYgKG50aHJl YWRzIDw9IDApCiAJCQkJewotCQkJCQlmcHJpbnRmKHN0ZGVyciwgImludmFsaWQgbnVtYmVyIG9m IHRocmVhZHM6IFwiJXNcIlxuIiwKLQkJCQkJCQlvcHRhcmcpOwotCQkJCQlleGl0KDEpOworCQkJ CQllcmVwb3J0KEVMRVZFTF9GQVRBTCwKKwkJCQkJCQkoZXJybXNnKCJpbnZhbGlkIG51bWJlciBv ZiB0aHJlYWRzOiBcIiVzXCJcbiIsCisJCQkJCQkJCQlvcHRhcmcpKSk7CiAJCQkJfQogI2lmbmRl ZiBFTkFCTEVfVEhSRUFEX1NBRkVUWQogCQkJCWlmIChudGhyZWFkcyAhPSAxKQogCQkJCXsKLQkJ CQkJZnByaW50ZihzdGRlcnIsICJ0aHJlYWRzIGFyZSBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxh dGZvcm07IHVzZSAtajFcbiIpOwotCQkJCQlleGl0KDEpOworCQkJCQllcmVwb3J0KEVMRVZFTF9G QVRBTCwKKwkJCQkJCQkoZXJybXNnKCJ0aHJlYWRzIGFyZSBub3Qgc3VwcG9ydGVkIG9uIHRoaXMg cGxhdGZvcm07IHVzZSAtajFcbiIpKSk7CiAJCQkJfQogI2VuZGlmCQkJCQkJCS8qICFFTkFCTEVf VEhSRUFEX1NBRkVUWSAqLwogCQkJCWJyZWFrOwpAQCAtNTAwMSw4ICs1MTg3LDkgQEAgbWFpbihp bnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJc2NhbGUgPSBhdG9pKG9wdGFyZyk7CiAJCQkJaWYg KHNjYWxlIDw9IDApCiAJCQkJewotCQkJCQlmcHJpbnRmKHN0ZGVyciwgImludmFsaWQgc2NhbGlu ZyBmYWN0b3I6IFwiJXNcIlxuIiwgb3B0YXJnKTsKLQkJCQkJZXhpdCgxKTsKKwkJCQkJZXJlcG9y dChFTEVWRUxfRkFUQUwsCisJCQkJCQkJKGVycm1zZygiaW52YWxpZCBzY2FsaW5nIGZhY3Rvcjog XCIlc1wiXG4iLAorCQkJCQkJCQkJb3B0YXJnKSkpOwogCQkJCX0KIAkJCQlicmVhazsKIAkJCWNh c2UgJ3QnOgpAQCAtNTAxMCw5ICs1MTk3LDkgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3Yp CiAJCQkJbnhhY3RzID0gYXRvaShvcHRhcmcpOwogCQkJCWlmIChueGFjdHMgPD0gMCkKIAkJCQl7 Ci0JCQkJCWZwcmludGYoc3RkZXJyLCAiaW52YWxpZCBudW1iZXIgb2YgdHJhbnNhY3Rpb25zOiBc IiVzXCJcbiIsCi0JCQkJCQkJb3B0YXJnKTsKLQkJCQkJZXhpdCgxKTsKKwkJCQkJZXJlcG9ydChF TEVWRUxfRkFUQUwsCisJCQkJCQkJKGVycm1zZygiaW52YWxpZCBudW1iZXIgb2YgdHJhbnNhY3Rp b25zOiBcIiVzXCJcbiIsCisJCQkJCQkJCQlvcHRhcmcpKSk7CiAJCQkJfQogCQkJCWJyZWFrOwog CQkJY2FzZSAnVCc6CkBAIC01MDIwLDggKzUyMDcsOCBAQCBtYWluKGludCBhcmdjLCBjaGFyICoq YXJndikKIAkJCQlkdXJhdGlvbiA9IGF0b2kob3B0YXJnKTsKIAkJCQlpZiAoZHVyYXRpb24gPD0g MCkKIAkJCQl7Ci0JCQkJCWZwcmludGYoc3RkZXJyLCAiaW52YWxpZCBkdXJhdGlvbjogXCIlc1wi XG4iLCBvcHRhcmcpOwotCQkJCQlleGl0KDEpOworCQkJCQllcmVwb3J0KEVMRVZFTF9GQVRBTCwK KwkJCQkJCQkoZXJybXNnKCJpbnZhbGlkIGR1cmF0aW9uOiBcIiVzXCJcbiIsIG9wdGFyZykpKTsK IAkJCQl9CiAJCQkJYnJlYWs7CiAJCQljYXNlICdVJzoKQEAgLTUwNjksMTQgKzUyNTYsMTMgQEAg bWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAKIAkJCQkJaWYgKChwID0gc3RyY2hyKG9wdGFy ZywgJz0nKSkgPT0gTlVMTCB8fCBwID09IG9wdGFyZyB8fCAqKHAgKyAxKSA9PSAnXDAnKQogCQkJ CQl7Ci0JCQkJCQlmcHJpbnRmKHN0ZGVyciwgImludmFsaWQgdmFyaWFibGUgZGVmaW5pdGlvbjog XCIlc1wiXG4iLAotCQkJCQkJCQlvcHRhcmcpOwotCQkJCQkJZXhpdCgxKTsKKwkJCQkJCWVyZXBv cnQoRUxFVkVMX0ZBVEFMLAorCQkJCQkJCQkoZXJybXNnKCJpbnZhbGlkIHZhcmlhYmxlIGRlZmlu aXRpb246IFwiJXNcIlxuIiwKKwkJCQkJCQkJCQlvcHRhcmcpKSk7CiAJCQkJCX0KIAogCQkJCQkq cCsrID0gJ1wwJzsKLQkJCQkJaWYgKCFwdXRWYXJpYWJsZSgmc3RhdGVbMF0udmFyaWFibGVzLCAi b3B0aW9uIiwgb3B0YXJnLCBwKSkKLQkJCQkJCWV4aXQoMSk7CisJCQkJCXB1dFZhcmlhYmxlKCZz dGF0ZVswXS52YXJpYWJsZXMsICJvcHRpb24iLCBvcHRhcmcsIHApOwogCQkJCX0KIAkJCQlicmVh azsKIAkJCWNhc2UgJ0YnOgpAQCAtNTA4NCw4ICs1MjcwLDggQEAgbWFpbihpbnQgYXJnYywgY2hh ciAqKmFyZ3YpCiAJCQkJZmlsbGZhY3RvciA9IGF0b2kob3B0YXJnKTsKIAkJCQlpZiAoZmlsbGZh Y3RvciA8IDEwIHx8IGZpbGxmYWN0b3IgPiAxMDApCiAJCQkJewotCQkJCQlmcHJpbnRmKHN0ZGVy ciwgImludmFsaWQgZmlsbGZhY3RvcjogXCIlc1wiXG4iLCBvcHRhcmcpOwotCQkJCQlleGl0KDEp OworCQkJCQllcmVwb3J0KEVMRVZFTF9GQVRBTCwKKwkJCQkJCQkoZXJybXNnKCJpbnZhbGlkIGZp bGxmYWN0b3I6IFwiJXNcIlxuIiwgb3B0YXJnKSkpOwogCQkJCX0KIAkJCQlicmVhazsKIAkJCWNh c2UgJ00nOgpAQCAtNTA5NSw5ICs1MjgxLDkgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3Yp CiAJCQkJCQlicmVhazsKIAkJCQlpZiAocXVlcnltb2RlID49IE5VTV9RVUVSWU1PREUpCiAJCQkJ ewotCQkJCQlmcHJpbnRmKHN0ZGVyciwgImludmFsaWQgcXVlcnkgbW9kZSAoLU0pOiBcIiVzXCJc biIsCi0JCQkJCQkJb3B0YXJnKTsKLQkJCQkJZXhpdCgxKTsKKwkJCQkJZXJlcG9ydChFTEVWRUxf RkFUQUwsCisJCQkJCQkJKGVycm1zZygiaW52YWxpZCBxdWVyeSBtb2RlICgtTSk6IFwiJXNcIlxu IiwKKwkJCQkJCQkJCW9wdGFyZykpKTsKIAkJCQl9CiAJCQkJYnJlYWs7CiAJCQljYXNlICdQJzoK QEAgLTUxMDUsOSArNTI5MSw5IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCXBy b2dyZXNzID0gYXRvaShvcHRhcmcpOwogCQkJCWlmIChwcm9ncmVzcyA8PSAwKQogCQkJCXsKLQkJ CQkJZnByaW50ZihzdGRlcnIsICJpbnZhbGlkIHRocmVhZCBwcm9ncmVzcyBkZWxheTogXCIlc1wi XG4iLAotCQkJCQkJCW9wdGFyZyk7Ci0JCQkJCWV4aXQoMSk7CisJCQkJCWVyZXBvcnQoRUxFVkVM X0ZBVEFMLAorCQkJCQkJCShlcnJtc2coImludmFsaWQgdGhyZWFkIHByb2dyZXNzIGRlbGF5OiBc IiVzXCJcbiIsCisJCQkJCQkJCQlvcHRhcmcpKSk7CiAJCQkJfQogCQkJCWJyZWFrOwogCQkJY2Fz ZSAnUic6CkBAIC01MTE5LDggKzUzMDUsOSBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikK IAogCQkJCQlpZiAodGhyb3R0bGVfdmFsdWUgPD0gMC4wKQogCQkJCQl7Ci0JCQkJCQlmcHJpbnRm KHN0ZGVyciwgImludmFsaWQgcmF0ZSBsaW1pdDogXCIlc1wiXG4iLCBvcHRhcmcpOwotCQkJCQkJ ZXhpdCgxKTsKKwkJCQkJCWVyZXBvcnQoRUxFVkVMX0ZBVEFMLAorCQkJCQkJCQkoZXJybXNnKCJp bnZhbGlkIHJhdGUgbGltaXQ6IFwiJXNcIlxuIiwKKwkJCQkJCQkJCQlvcHRhcmcpKSk7CiAJCQkJ CX0KIAkJCQkJLyogSW52ZXJ0IHJhdGUgbGltaXQgaW50byBhIHRpbWUgb2Zmc2V0ICovCiAJCQkJ CXRocm90dGxlX2RlbGF5ID0gKGludDY0KSAoMTAwMDAwMC4wIC8gdGhyb3R0bGVfdmFsdWUpOwpA QCAtNTEzMiw5ICs1MzE5LDkgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAKIAkJCQkJ aWYgKGxpbWl0X21zIDw9IDAuMCkKIAkJCQkJewotCQkJCQkJZnByaW50ZihzdGRlcnIsICJpbnZh bGlkIGxhdGVuY3kgbGltaXQ6IFwiJXNcIlxuIiwKLQkJCQkJCQkJb3B0YXJnKTsKLQkJCQkJCWV4 aXQoMSk7CisJCQkJCQllcmVwb3J0KEVMRVZFTF9GQVRBTCwKKwkJCQkJCQkJKGVycm1zZygiaW52 YWxpZCBsYXRlbmN5IGxpbWl0OiBcIiVzXCJcbiIsCisJCQkJCQkJCQkJb3B0YXJnKSkpOwogCQkJ CQl9CiAJCQkJCWJlbmNobWFya2luZ19vcHRpb25fc2V0ID0gdHJ1ZTsKIAkJCQkJbGF0ZW5jeV9s aW1pdCA9IChpbnQ2NCkgKGxpbWl0X21zICogMTAwMCk7CkBAIC01MTU3LDggKzUzNDQsOSBAQCBt YWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCQlzYW1wbGVfcmF0ZSA9IGF0b2Yob3B0YXJn KTsKIAkJCQlpZiAoc2FtcGxlX3JhdGUgPD0gMC4wIHx8IHNhbXBsZV9yYXRlID4gMS4wKQogCQkJ CXsKLQkJCQkJZnByaW50ZihzdGRlcnIsICJpbnZhbGlkIHNhbXBsaW5nIHJhdGU6IFwiJXNcIlxu Iiwgb3B0YXJnKTsKLQkJCQkJZXhpdCgxKTsKKwkJCQkJZXJlcG9ydChFTEVWRUxfRkFUQUwsCisJ CQkJCQkJKGVycm1zZygiaW52YWxpZCBzYW1wbGluZyByYXRlOiBcIiVzXCJcbiIsCisJCQkJCQkJ CQlvcHRhcmcpKSk7CiAJCQkJfQogCQkJCWJyZWFrOwogCQkJY2FzZSA1OgkJCQkvKiBhZ2dyZWdh dGUtaW50ZXJ2YWwgKi8KQEAgLTUxNjYsOSArNTM1NCw5IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIg Kiphcmd2KQogCQkJCWFnZ19pbnRlcnZhbCA9IGF0b2kob3B0YXJnKTsKIAkJCQlpZiAoYWdnX2lu dGVydmFsIDw9IDApCiAJCQkJewotCQkJCQlmcHJpbnRmKHN0ZGVyciwgImludmFsaWQgbnVtYmVy IG9mIHNlY29uZHMgZm9yIGFnZ3JlZ2F0aW9uOiBcIiVzXCJcbiIsCi0JCQkJCQkJb3B0YXJnKTsK LQkJCQkJZXhpdCgxKTsKKwkJCQkJZXJlcG9ydChFTEVWRUxfRkFUQUwsCisJCQkJCQkJKGVycm1z ZygiaW52YWxpZCBudW1iZXIgb2Ygc2Vjb25kcyBmb3IgYWdncmVnYXRpb246IFwiJXNcIlxuIiwK KwkJCQkJCQkJCW9wdGFyZykpKTsKIAkJCQl9CiAJCQkJYnJlYWs7CiAJCQljYXNlIDY6CQkJCS8q IHByb2dyZXNzLXRpbWVzdGFtcCAqLwpAQCAtNTE4NywxMyArNTM3NSwxNCBAQCBtYWluKGludCBh cmdjLCBjaGFyICoqYXJndikKIAkJCQliZW5jaG1hcmtpbmdfb3B0aW9uX3NldCA9IHRydWU7CiAJ CQkJaWYgKCFzZXRfcmFuZG9tX3NlZWQob3B0YXJnKSkKIAkJCQl7Ci0JCQkJCWZwcmludGYoc3Rk ZXJyLCAiZXJyb3Igd2hpbGUgc2V0dGluZyByYW5kb20gc2VlZCBmcm9tIC0tcmFuZG9tLXNlZWQg b3B0aW9uXG4iKTsKLQkJCQkJZXhpdCgxKTsKKwkJCQkJZXJlcG9ydChFTEVWRUxfRkFUQUwsCisJ CQkJCQkJKGVycm1zZygiZXJyb3Igd2hpbGUgc2V0dGluZyByYW5kb20gc2VlZCBmcm9tIC0tcmFu ZG9tLXNlZWQgb3B0aW9uXG4iKSkpOwogCQkJCX0KIAkJCQlicmVhazsKIAkJCWRlZmF1bHQ6Ci0J CQkJZnByaW50ZihzdGRlcnIsIF8oIlRyeSBcIiVzIC0taGVscFwiIGZvciBtb3JlIGluZm9ybWF0 aW9uLlxuIiksIHByb2duYW1lKTsKLQkJCQlleGl0KDEpOworCQkJCWVyZXBvcnQoRUxFVkVMX0ZB VEFMLAorCQkJCQkJKGVycm1zZyhfKCJUcnkgXCIlcyAtLWhlbHBcIiBmb3IgbW9yZSBpbmZvcm1h dGlvbi5cbiIpLAorCQkJCQkJCQlwcm9nbmFtZSkpKTsKIAkJCQlicmVhazsKIAkJfQogCX0KQEAg LTUyMzEsOCArNTQyMCw4IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCiAJaWYgKHRv dGFsX3dlaWdodCA9PSAwICYmICFpc19pbml0X21vZGUpCiAJewotCQlmcHJpbnRmKHN0ZGVyciwg InRvdGFsIHNjcmlwdCB3ZWlnaHQgbXVzdCBub3QgYmUgemVyb1xuIik7Ci0JCWV4aXQoMSk7CisJ CWVyZXBvcnQoRUxFVkVMX0ZBVEFMLAorCQkJCShlcnJtc2coInRvdGFsIHNjcmlwdCB3ZWlnaHQg bXVzdCBub3QgYmUgemVyb1xuIikpKTsKIAl9CiAKIAkvKiBzaG93IHBlciBzY3JpcHQgc3RhdHMg aWYgc2V2ZXJhbCBzY3JpcHRzIGFyZSB1c2VkICovCkBAIC01MjY2LDggKzU0NTUsOCBAQCBtYWlu KGludCBhcmdjLCBjaGFyICoqYXJndikKIAl7CiAJCWlmIChiZW5jaG1hcmtpbmdfb3B0aW9uX3Nl dCkKIAkJewotCQkJZnByaW50ZihzdGRlcnIsICJzb21lIG9mIHRoZSBzcGVjaWZpZWQgb3B0aW9u cyBjYW5ub3QgYmUgdXNlZCBpbiBpbml0aWFsaXphdGlvbiAoLWkpIG1vZGVcbiIpOwotCQkJZXhp dCgxKTsKKwkJCWVyZXBvcnQoRUxFVkVMX0ZBVEFMLAorCQkJCQkoZXJybXNnKCJzb21lIG9mIHRo ZSBzcGVjaWZpZWQgb3B0aW9ucyBjYW5ub3QgYmUgdXNlZCBpbiBpbml0aWFsaXphdGlvbiAoLWkp IG1vZGVcbiIpKSk7CiAJCX0KIAogCQlpZiAoaW5pdGlhbGl6ZV9zdGVwcyA9PSBOVUxMKQpAQCAt NTMwMSwxNSArNTQ5MCwxNSBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAl7CiAJCWlm IChpbml0aWFsaXphdGlvbl9vcHRpb25fc2V0KQogCQl7Ci0JCQlmcHJpbnRmKHN0ZGVyciwgInNv bWUgb2YgdGhlIHNwZWNpZmllZCBvcHRpb25zIGNhbm5vdCBiZSB1c2VkIGluIGJlbmNobWFya2lu ZyBtb2RlXG4iKTsKLQkJCWV4aXQoMSk7CisJCQllcmVwb3J0KEVMRVZFTF9GQVRBTCwKKwkJCQkJ KGVycm1zZygic29tZSBvZiB0aGUgc3BlY2lmaWVkIG9wdGlvbnMgY2Fubm90IGJlIHVzZWQgaW4g YmVuY2htYXJraW5nIG1vZGVcbiIpKSk7CiAJCX0KIAl9CiAKIAlpZiAobnhhY3RzID4gMCAmJiBk dXJhdGlvbiA+IDApCiAJewotCQlmcHJpbnRmKHN0ZGVyciwgInNwZWNpZnkgZWl0aGVyIGEgbnVt YmVyIG9mIHRyYW5zYWN0aW9ucyAoLXQpIG9yIGEgZHVyYXRpb24gKC1UKSwgbm90IGJvdGhcbiIp OwotCQlleGl0KDEpOworCQllcmVwb3J0KEVMRVZFTF9GQVRBTCwKKwkJCQkoZXJybXNnKCJzcGVj aWZ5IGVpdGhlciBhIG51bWJlciBvZiB0cmFuc2FjdGlvbnMgKC10KSBvciBhIGR1cmF0aW9uICgt VCksIG5vdCBib3RoXG4iKSkpOwogCX0KIAogCS8qIFVzZSBERUZBVUxUX05YQUNUUyBpZiBuZWl0 aGVyIG54YWN0cyBub3IgZHVyYXRpb24gaXMgc3BlY2lmaWVkLiAqLwpAQCAtNTMxOSw0NSArNTUw OCw0NyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkvKiAtLXNhbXBsaW5nLXJhdGUg bWF5IGJlIHVzZWQgb25seSB3aXRoIC1sICovCiAJaWYgKHNhbXBsZV9yYXRlID4gMC4wICYmICF1 c2VfbG9nKQogCXsKLQkJZnByaW50ZihzdGRlcnIsICJsb2cgc2FtcGxpbmcgKC0tc2FtcGxpbmct cmF0ZSkgaXMgYWxsb3dlZCBvbmx5IHdoZW4gbG9nZ2luZyB0cmFuc2FjdGlvbnMgKC1sKVxuIik7 Ci0JCWV4aXQoMSk7CisJCWVyZXBvcnQoRUxFVkVMX0ZBVEFMLAorCQkJCShlcnJtc2coImxvZyBz YW1wbGluZyAoLS1zYW1wbGluZy1yYXRlKSBpcyBhbGxvd2VkIG9ubHkgd2hlbiBsb2dnaW5nIHRy YW5zYWN0aW9ucyAoLWwpXG4iKSkpOwogCX0KIAogCS8qIC0tc2FtcGxpbmctcmF0ZSBtYXkgbm90 IGJlIHVzZWQgd2l0aCAtLWFnZ3JlZ2F0ZS1pbnRlcnZhbCAqLwogCWlmIChzYW1wbGVfcmF0ZSA+ IDAuMCAmJiBhZ2dfaW50ZXJ2YWwgPiAwKQogCXsKLQkJZnByaW50ZihzdGRlcnIsICJsb2cgc2Ft cGxpbmcgKC0tc2FtcGxpbmctcmF0ZSkgYW5kIGFnZ3JlZ2F0aW9uICgtLWFnZ3JlZ2F0ZS1pbnRl cnZhbCkgY2Fubm90IGJlIHVzZWQgYXQgdGhlIHNhbWUgdGltZVxuIik7Ci0JCWV4aXQoMSk7CisJ CWVyZXBvcnQoRUxFVkVMX0ZBVEFMLAorCQkJCShlcnJtc2coImxvZyBzYW1wbGluZyAoLS1zYW1w bGluZy1yYXRlKSBhbmQgYWdncmVnYXRpb24gKC0tYWdncmVnYXRlLWludGVydmFsKSBjYW5ub3Qg YmUgdXNlZCBhdCB0aGUgc2FtZSB0aW1lXG4iKSkpOwogCX0KIAogCWlmIChhZ2dfaW50ZXJ2YWwg PiAwICYmICF1c2VfbG9nKQogCXsKLQkJZnByaW50ZihzdGRlcnIsICJsb2cgYWdncmVnYXRpb24g aXMgYWxsb3dlZCBvbmx5IHdoZW4gYWN0dWFsbHkgbG9nZ2luZyB0cmFuc2FjdGlvbnNcbiIpOwot CQlleGl0KDEpOworCQllcmVwb3J0KEVMRVZFTF9GQVRBTCwKKwkJCQkoZXJybXNnKCJsb2cgYWdn cmVnYXRpb24gaXMgYWxsb3dlZCBvbmx5IHdoZW4gYWN0dWFsbHkgbG9nZ2luZyB0cmFuc2FjdGlv bnNcbiIpKSk7CiAJfQogCiAJaWYgKCF1c2VfbG9nICYmIGxvZ2ZpbGVfcHJlZml4KQogCXsKLQkJ ZnByaW50ZihzdGRlcnIsICJsb2cgZmlsZSBwcmVmaXggKC0tbG9nLXByZWZpeCkgaXMgYWxsb3dl ZCBvbmx5IHdoZW4gbG9nZ2luZyB0cmFuc2FjdGlvbnMgKC1sKVxuIik7Ci0JCWV4aXQoMSk7CisJ CWVyZXBvcnQoRUxFVkVMX0ZBVEFMLAorCQkJCShlcnJtc2coImxvZyBmaWxlIHByZWZpeCAoLS1s b2ctcHJlZml4KSBpcyBhbGxvd2VkIG9ubHkgd2hlbiBsb2dnaW5nIHRyYW5zYWN0aW9ucyAoLWwp XG4iKSkpOwogCX0KIAogCWlmIChkdXJhdGlvbiA+IDAgJiYgYWdnX2ludGVydmFsID4gZHVyYXRp b24pCiAJewotCQlmcHJpbnRmKHN0ZGVyciwgIm51bWJlciBvZiBzZWNvbmRzIGZvciBhZ2dyZWdh dGlvbiAoJWQpIG11c3Qgbm90IGJlIGhpZ2hlciB0aGFuIHRlc3QgZHVyYXRpb24gKCVkKVxuIiwg YWdnX2ludGVydmFsLCBkdXJhdGlvbik7Ci0JCWV4aXQoMSk7CisJCWVyZXBvcnQoRUxFVkVMX0ZB VEFMLAorCQkJCShlcnJtc2coIm51bWJlciBvZiBzZWNvbmRzIGZvciBhZ2dyZWdhdGlvbiAoJWQp IG11c3Qgbm90IGJlIGhpZ2hlciB0aGFuIHRlc3QgZHVyYXRpb24gKCVkKVxuIiwKKwkJCQkJCWFn Z19pbnRlcnZhbCwgZHVyYXRpb24pKSk7CiAJfQogCiAJaWYgKGR1cmF0aW9uID4gMCAmJiBhZ2df aW50ZXJ2YWwgPiAwICYmIGR1cmF0aW9uICUgYWdnX2ludGVydmFsICE9IDApCiAJewotCQlmcHJp bnRmKHN0ZGVyciwgImR1cmF0aW9uICglZCkgbXVzdCBiZSBhIG11bHRpcGxlIG9mIGFnZ3JlZ2F0 aW9uIGludGVydmFsICglZClcbiIsIGR1cmF0aW9uLCBhZ2dfaW50ZXJ2YWwpOwotCQlleGl0KDEp OworCQllcmVwb3J0KEVMRVZFTF9GQVRBTCwKKwkJCQkoZXJybXNnKCJkdXJhdGlvbiAoJWQpIG11 c3QgYmUgYSBtdWx0aXBsZSBvZiBhZ2dyZWdhdGlvbiBpbnRlcnZhbCAoJWQpXG4iLAorCQkJCQkJ ZHVyYXRpb24sIGFnZ19pbnRlcnZhbCkpKTsKIAl9CiAKIAlpZiAocHJvZ3Jlc3NfdGltZXN0YW1w ICYmIHByb2dyZXNzID09IDApCiAJewotCQlmcHJpbnRmKHN0ZGVyciwgIi0tcHJvZ3Jlc3MtdGlt ZXN0YW1wIGlzIGFsbG93ZWQgb25seSB1bmRlciAtLXByb2dyZXNzXG4iKTsKLQkJZXhpdCgxKTsK KwkJZXJlcG9ydChFTEVWRUxfRkFUQUwsCisJCQkJKGVycm1zZygiLS1wcm9ncmVzcy10aW1lc3Rh bXAgaXMgYWxsb3dlZCBvbmx5IHVuZGVyIC0tcHJvZ3Jlc3NcbiIpKSk7CiAJfQogCiAJLyoKQEAg LTUzODMsMTUgKzU1NzQsMTMgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAKIAkJCQlp ZiAodmFyLT52YWx1ZS50eXBlICE9IFBHQlRfTk9fVkFMVUUpCiAJCQkJewotCQkJCQlpZiAoIXB1 dFZhcmlhYmxlVmFsdWUoJnN0YXRlW2ldLnZhcmlhYmxlcywgInN0YXJ0dXAiLAotCQkJCQkJCQkJ CSAgdmFyLT5uYW1lLCAmdmFyLT52YWx1ZSkpCi0JCQkJCQlleGl0KDEpOworCQkJCQlwdXRWYXJp YWJsZVZhbHVlKCZzdGF0ZVtpXS52YXJpYWJsZXMsICJzdGFydHVwIiwgdmFyLT5uYW1lLAorCQkJ CQkJCQkJICZ2YXItPnZhbHVlLCBmYWxzZSk7CiAJCQkJfQogCQkJCWVsc2UKIAkJCQl7Ci0JCQkJ CWlmICghcHV0VmFyaWFibGUoJnN0YXRlW2ldLnZhcmlhYmxlcywgInN0YXJ0dXAiLAotCQkJCQkJ CQkJIHZhci0+bmFtZSwgdmFyLT5zdmFsdWUpKQotCQkJCQkJZXhpdCgxKTsKKwkJCQkJcHV0VmFy aWFibGUoJnN0YXRlW2ldLnZhcmlhYmxlcywgInN0YXJ0dXAiLCB2YXItPm5hbWUsCisJCQkJCQkJ CXZhci0+c3ZhbHVlKTsKIAkJCQl9CiAJCQl9CiAJCX0KQEAgLTU0MDQsMTUgKzU1OTMsMTQgQEAg bWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCWluaXRSYW5kb21TdGF0ZSgmc3RhdGVbaV0u cmFuZG9tX3N0YXRlKTsKIAl9CiAKLQlpZiAoZGVidWcpCi0JewotCQlpZiAoZHVyYXRpb24gPD0g MCkKLQkJCXByaW50ZigicGdob3N0OiAlcyBwZ3BvcnQ6ICVzIG5jbGllbnRzOiAlZCBueGFjdHM6 ICVkIGRiTmFtZTogJXNcbiIsCi0JCQkJICAgcGdob3N0LCBwZ3BvcnQsIG5jbGllbnRzLCBueGFj dHMsIGRiTmFtZSk7Ci0JCWVsc2UKLQkJCXByaW50ZigicGdob3N0OiAlcyBwZ3BvcnQ6ICVzIG5j bGllbnRzOiAlZCBkdXJhdGlvbjogJWQgZGJOYW1lOiAlc1xuIiwKLQkJCQkgICBwZ2hvc3QsIHBn cG9ydCwgbmNsaWVudHMsIGR1cmF0aW9uLCBkYk5hbWUpOwotCX0KKwlpZiAoZHVyYXRpb24gPD0g MCkKKwkJZXJlcG9ydChFTEVWRUxfREVCVUcsCisJCQkJKGVycm1zZygicGdob3N0OiAlcyBwZ3Bv cnQ6ICVzIG5jbGllbnRzOiAlZCBueGFjdHM6ICVkIGRiTmFtZTogJXNcbiIsCisJCQkJCQlwZ2hv c3QsIHBncG9ydCwgbmNsaWVudHMsIG54YWN0cywgZGJOYW1lKSkpOworCWVsc2UKKwkJZXJlcG9y dChFTEVWRUxfREVCVUcsCisJCQkJKGVycm1zZygicGdob3N0OiAlcyBwZ3BvcnQ6ICVzIG5jbGll bnRzOiAlZCBkdXJhdGlvbjogJWQgZGJOYW1lOiAlc1xuIiwKKwkJCQkJCXBnaG9zdCwgcGdwb3J0 LCBuY2xpZW50cywgZHVyYXRpb24sIGRiTmFtZSkpKTsKIAogCS8qIG9wZW5pbmcgY29ubmVjdGlv bi4uLiAqLwogCWNvbiA9IGRvQ29ubmVjdCgpOwpAQCAtNTQyMSw5ICs1NjA5LDkgQEAgbWFpbihp bnQgYXJnYywgY2hhciAqKmFyZ3YpCiAKIAlpZiAoUFFzdGF0dXMoY29uKSA9PSBDT05ORUNUSU9O X0JBRCkKIAl7Ci0JCWZwcmludGYoc3RkZXJyLCAiY29ubmVjdGlvbiB0byBkYXRhYmFzZSBcIiVz XCIgZmFpbGVkXG4iLCBkYk5hbWUpOwotCQlmcHJpbnRmKHN0ZGVyciwgIiVzIiwgUFFlcnJvck1l c3NhZ2UoY29uKSk7Ci0JCWV4aXQoMSk7CisJCWVyZXBvcnQoRUxFVkVMX0ZBVEFMLAorCQkJCShl cnJtc2coImNvbm5lY3Rpb24gdG8gZGF0YWJhc2UgXCIlc1wiIGZhaWxlZFxuJXMiLAorCQkJCQkJ ZGJOYW1lLCBQUWVycm9yTWVzc2FnZShjb24pKSkpOwogCX0KIAogCWlmIChpbnRlcm5hbF9zY3Jp cHRfdXNlZCkKQEAgLTU0MzYsMjkgKzU2MjQsMzUgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFy Z3YpCiAJCWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpICE9IFBHUkVTX1RVUExFU19PSykKIAkJewog CQkJY2hhcgkgICAqc3FsU3RhdGUgPSBQUXJlc3VsdEVycm9yRmllbGQocmVzLCBQR19ESUFHX1NR TFNUQVRFKTsKKwkJCVBRRXhwQnVmZmVyRGF0YSBlcnJtc2dfYnVmOwogCi0JCQlmcHJpbnRmKHN0 ZGVyciwgIiVzIiwgUFFlcnJvck1lc3NhZ2UoY29uKSk7CisJCQlpbml0UFFFeHBCdWZmZXIoJmVy cm1zZ19idWYpOworCQkJcHJpbnRmUFFFeHBCdWZmZXIoJmVycm1zZ19idWYsICIlcyIsIFBRZXJy b3JNZXNzYWdlKGNvbikpOwogCQkJaWYgKHNxbFN0YXRlICYmIHN0cmNtcChzcWxTdGF0ZSwgRVJS Q09ERV9VTkRFRklORURfVEFCTEUpID09IDApCiAJCQl7Ci0JCQkJZnByaW50ZihzdGRlcnIsICJQ ZXJoYXBzIHlvdSBuZWVkIHRvIGRvIGluaXRpYWxpemF0aW9uIChcInBnYmVuY2ggLWlcIikgaW4g ZGF0YWJhc2UgXCIlc1wiXG4iLCBQUWRiKGNvbikpOworCQkJCWFwcGVuZFBRRXhwQnVmZmVyKCZl cnJtc2dfYnVmLAorCQkJCQkJCQkgICJQZXJoYXBzIHlvdSBuZWVkIHRvIGRvIGluaXRpYWxpemF0 aW9uIChcInBnYmVuY2ggLWlcIikgaW4gZGF0YWJhc2UgXCIlc1wiXG4iLAorCQkJCQkJCQkgIFBR ZGIoY29uKSk7CiAJCQl9CiAKKwkJCWVyZXBvcnQoRUxFVkVMX0xPRywgKGVycm1zZygiJXMiLCBl cnJtc2dfYnVmLmRhdGEpKSk7CisJCQl0ZXJtUFFFeHBCdWZmZXIoJmVycm1zZ19idWYpOwogCQkJ ZXhpdCgxKTsKIAkJfQogCQlzY2FsZSA9IGF0b2koUFFnZXR2YWx1ZShyZXMsIDAsIDApKTsKIAkJ aWYgKHNjYWxlIDwgMCkKIAkJewotCQkJZnByaW50ZihzdGRlcnIsICJpbnZhbGlkIGNvdW50KCop IGZyb20gcGdiZW5jaF9icmFuY2hlczogXCIlc1wiXG4iLAotCQkJCQlQUWdldHZhbHVlKHJlcywg MCwgMCkpOwotCQkJZXhpdCgxKTsKKwkJCWVyZXBvcnQoRUxFVkVMX0ZBVEFMLAorCQkJCQkoZXJy bXNnKCJpbnZhbGlkIGNvdW50KCopIGZyb20gcGdiZW5jaF9icmFuY2hlczogXCIlc1wiXG4iLAor CQkJCQkJCVBRZ2V0dmFsdWUocmVzLCAwLCAwKSkpKTsKIAkJfQogCQlQUWNsZWFyKHJlcyk7CiAK IAkJLyogd2FybiBpZiB3ZSBvdmVycmlkZSB1c2VyLWdpdmVuIC1zIHN3aXRjaCAqLwogCQlpZiAo c2NhbGVfZ2l2ZW4pCi0JCQlmcHJpbnRmKHN0ZGVyciwKLQkJCQkJInNjYWxlIG9wdGlvbiBpZ25v cmVkLCB1c2luZyBjb3VudCBmcm9tIHBnYmVuY2hfYnJhbmNoZXMgdGFibGUgKCVkKVxuIiwKLQkJ CQkJc2NhbGUpOworCQkJZXJlcG9ydChFTEVWRUxfTE9HLAorCQkJCQkoZXJybXNnKCJzY2FsZSBv cHRpb24gaWdub3JlZCwgdXNpbmcgY291bnQgZnJvbSBwZ2JlbmNoX2JyYW5jaGVzIHRhYmxlICgl ZClcbiIsCisJCQkJCQkJc2NhbGUpKSk7CiAJfQogCiAJLyoKQEAgLTU0NjksOCArNTY2Myw4IEBA IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCXsKIAkJZm9yIChpID0gMDsgaSA8IG5jbGll bnRzOyBpKyspCiAJCXsKLQkJCWlmICghcHV0VmFyaWFibGVJbnQoJnN0YXRlW2ldLnZhcmlhYmxl cywgInN0YXJ0dXAiLCAic2NhbGUiLCBzY2FsZSkpCi0JCQkJZXhpdCgxKTsKKwkJCXB1dFZhcmlh YmxlSW50KCZzdGF0ZVtpXS52YXJpYWJsZXMsICJzdGFydHVwIiwgInNjYWxlIiwgc2NhbGUsCisJ CQkJCQkgICBmYWxzZSk7CiAJCX0KIAl9CiAKQEAgLTU0ODEsOCArNTY3NSw4IEBAIG1haW4oaW50 IGFyZ2MsIGNoYXIgKiphcmd2KQogCWlmIChsb29rdXBWYXJpYWJsZSgmc3RhdGVbMF0udmFyaWFi bGVzLCAiY2xpZW50X2lkIikgPT0gTlVMTCkKIAl7CiAJCWZvciAoaSA9IDA7IGkgPCBuY2xpZW50 czsgaSsrKQotCQkJaWYgKCFwdXRWYXJpYWJsZUludCgmc3RhdGVbaV0udmFyaWFibGVzLCAic3Rh cnR1cCIsICJjbGllbnRfaWQiLCBpKSkKLQkJCQlleGl0KDEpOworCQkJcHV0VmFyaWFibGVJbnQo JnN0YXRlW2ldLnZhcmlhYmxlcywgInN0YXJ0dXAiLCAiY2xpZW50X2lkIiwgaSwKKwkJCQkJCSAg IGZhbHNlKTsKIAl9CiAKIAkvKiBzZXQgZGVmYXVsdCBzZWVkIGZvciBoYXNoIGZ1bmN0aW9ucyAq LwpAQCAtNTQ5NCwzMyArNTY4OCwzMiBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJ KHVpbnQ2NCkgKHJhbmRvbSgpICYgMHhGRkZGKTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgbmNsaWVu dHM7IGkrKykKLQkJCWlmICghcHV0VmFyaWFibGVJbnQoJnN0YXRlW2ldLnZhcmlhYmxlcywgInN0 YXJ0dXAiLCAiZGVmYXVsdF9zZWVkIiwKLQkJCQkJCQkJKGludDY0KSBzZWVkKSkKLQkJCQlleGl0 KDEpOworCQkJcHV0VmFyaWFibGVJbnQoJnN0YXRlW2ldLnZhcmlhYmxlcywgInN0YXJ0dXAiLCAi ZGVmYXVsdF9zZWVkIiwKKwkJCQkJCSAgIChpbnQ2NCkgc2VlZCwgZmFsc2UpOwogCX0KIAogCS8q IHNldCByYW5kb20gc2VlZCB1bmxlc3Mgb3ZlcndyaXR0ZW4gKi8KIAlpZiAobG9va3VwVmFyaWFi bGUoJnN0YXRlWzBdLnZhcmlhYmxlcywgInJhbmRvbV9zZWVkIikgPT0gTlVMTCkKIAl7CiAJCWZv ciAoaSA9IDA7IGkgPCBuY2xpZW50czsgaSsrKQotCQkJaWYgKCFwdXRWYXJpYWJsZUludCgmc3Rh dGVbaV0udmFyaWFibGVzLCAic3RhcnR1cCIsICJyYW5kb21fc2VlZCIsCi0JCQkJCQkJCXJhbmRv bV9zZWVkKSkKLQkJCQlleGl0KDEpOworCQkJcHV0VmFyaWFibGVJbnQoJnN0YXRlW2ldLnZhcmlh YmxlcywgInN0YXJ0dXAiLCAicmFuZG9tX3NlZWQiLAorCQkJCQkJICAgcmFuZG9tX3NlZWQsIGZh bHNlKTsKIAl9CiAKIAlpZiAoIWlzX25vX3ZhY3V1bSkKIAl7Ci0JCWZwcmludGYoc3RkZXJyLCAi c3RhcnRpbmcgdmFjdXVtLi4uIik7CisJCWVyZXBvcnQoRUxFVkVMX0xPRywgKGVycm1zZygic3Rh cnRpbmcgdmFjdXVtLi4uIikpKTsKIAkJdHJ5RXhlY3V0ZVN0YXRlbWVudChjb24sICJ2YWN1dW0g cGdiZW5jaF9icmFuY2hlcyIpOwogCQl0cnlFeGVjdXRlU3RhdGVtZW50KGNvbiwgInZhY3V1bSBw Z2JlbmNoX3RlbGxlcnMiKTsKIAkJdHJ5RXhlY3V0ZVN0YXRlbWVudChjb24sICJ0cnVuY2F0ZSBw Z2JlbmNoX2hpc3RvcnkiKTsKLQkJZnByaW50ZihzdGRlcnIsICJlbmQuXG4iKTsKKwkJZXJlcG9y dChFTEVWRUxfTE9HLCAoZXJybXNnKCJlbmQuXG4iKSkpOwogCiAJCWlmIChkb192YWN1dW1fYWNj b3VudHMpCiAJCXsKLQkJCWZwcmludGYoc3RkZXJyLCAic3RhcnRpbmcgdmFjdXVtIHBnYmVuY2hf YWNjb3VudHMuLi4iKTsKKwkJCWVyZXBvcnQoRUxFVkVMX0xPRywKKwkJCQkJKGVycm1zZygic3Rh cnRpbmcgdmFjdXVtIHBnYmVuY2hfYWNjb3VudHMuLi4iKSkpOwogCQkJdHJ5RXhlY3V0ZVN0YXRl bWVudChjb24sICJ2YWN1dW0gYW5hbHl6ZSBwZ2JlbmNoX2FjY291bnRzIik7Ci0JCQlmcHJpbnRm KHN0ZGVyciwgImVuZC5cbiIpOworCQkJZXJlcG9ydChFTEVWRUxfTE9HLCAoZXJybXNnKCJlbmQu XG4iKSkpOwogCQl9CiAJfQogCVBRZmluaXNoKGNvbik7CkBAIC01NTc4LDggKzU3NzEsOSBAQCBt YWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAogCQkJaWYgKGVyciAhPSAwIHx8IHRocmVhZC0+ dGhyZWFkID09IElOVkFMSURfVEhSRUFEKQogCQkJewotCQkJCWZwcmludGYoc3RkZXJyLCAiY291 bGQgbm90IGNyZWF0ZSB0aHJlYWQ6ICVzXG4iLCBzdHJlcnJvcihlcnIpKTsKLQkJCQlleGl0KDEp OworCQkJCWVyZXBvcnQoRUxFVkVMX0ZBVEFMLAorCQkJCQkJKGVycm1zZygiY291bGQgbm90IGNy ZWF0ZSB0aHJlYWQ6ICVzXG4iLAorCQkJCQkJCQlzdHJlcnJvcihlcnIpKSkpOwogCQkJfQogCQl9 CiAJCWVsc2UKQEAgLTU2ODgsOCArNTg4Miw5IEBAIHRocmVhZFJ1bih2b2lkICphcmcpCiAKIAkJ aWYgKHRocmVhZC0+bG9nZmlsZSA9PSBOVUxMKQogCQl7Ci0JCQlmcHJpbnRmKHN0ZGVyciwgImNv dWxkIG5vdCBvcGVuIGxvZ2ZpbGUgXCIlc1wiOiAlc1xuIiwKLQkJCQkJbG9ncGF0aCwgc3RyZXJy b3IoZXJybm8pKTsKKwkJCWVyZXBvcnQoRUxFVkVMX0xPRywKKwkJCQkJKGVycm1zZygiY291bGQg bm90IG9wZW4gbG9nZmlsZSBcIiVzXCI6ICVzXG4iLAorCQkJCQkJCWxvZ3BhdGgsIHN0cmVycm9y KGVycm5vKSkpKTsKIAkJCWdvdG8gZG9uZTsKIAkJfQogCX0KQEAgLTU3NjcsOCArNTk2Miw5IEBA IHRocmVhZFJ1bih2b2lkICphcmcpCiAKIAkJCQlpZiAoc29jayA8IDApCiAJCQkJewotCQkJCQlm cHJpbnRmKHN0ZGVyciwgImludmFsaWQgc29ja2V0OiAlcyIsCi0JCQkJCQkJUFFlcnJvck1lc3Nh Z2Uoc3QtPmNvbikpOworCQkJCQllcmVwb3J0KEVMRVZFTF9MT0csCisJCQkJCQkJKGVycm1zZygi aW52YWxpZCBzb2NrZXQ6ICVzIiwKKwkJCQkJCQkJCVBRZXJyb3JNZXNzYWdlKHN0LT5jb24pKSkp OwogCQkJCQlnb3RvIGRvbmU7CiAJCQkJfQogCkBAIC01ODQ0LDcgKzYwNDAsOCBAQCB0aHJlYWRS dW4odm9pZCAqYXJnKQogCQkJCQljb250aW51ZTsKIAkJCQl9CiAJCQkJLyogbXVzdCBiZSBzb21l dGhpbmcgd3JvbmcgKi8KLQkJCQlmcHJpbnRmKHN0ZGVyciwgInNlbGVjdCgpIGZhaWxlZDogJXNc biIsIHN0cmVycm9yKGVycm5vKSk7CisJCQkJZXJlcG9ydChFTEVWRUxfTE9HLAorCQkJCQkJKGVy cm1zZygic2VsZWN0KCkgZmFpbGVkOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKSkpOwogCQkJCWdv dG8gZG9uZTsKIAkJCX0KIAkJfQpAQCAtNTg2OCw4ICs2MDY1LDkgQEAgdGhyZWFkUnVuKHZvaWQg KmFyZykKIAogCQkJCWlmIChzb2NrIDwgMCkKIAkJCQl7Ci0JCQkJCWZwcmludGYoc3RkZXJyLCAi aW52YWxpZCBzb2NrZXQ6ICVzIiwKLQkJCQkJCQlQUWVycm9yTWVzc2FnZShzdC0+Y29uKSk7CisJ CQkJCWVyZXBvcnQoRUxFVkVMX0xPRywKKwkJCQkJCQkoZXJybXNnKCJpbnZhbGlkIHNvY2tldDog JXMiLAorCQkJCQkJCQkJUFFlcnJvck1lc3NhZ2Uoc3QtPmNvbikpKSk7CiAJCQkJCWdvdG8gZG9u ZTsKIAkJCQl9CiAKQEAgLTU5MTEsNiArNjEwOSw3IEBAIHRocmVhZFJ1bih2b2lkICphcmcpCiAJ CQkJCQkJbGFnLAogCQkJCQkJCXN0ZGV2OwogCQkJCWNoYXIJCXRidWZbMzE1XTsKKwkJCQlQUUV4 cEJ1ZmZlckRhdGEgcHJvZ3Jlc3NfYnVmOwogCiAJCQkJLyoKIAkJCQkgKiBBZGQgdXAgdGhlIHN0 YXRpc3RpY3Mgb2YgYWxsIHRocmVhZHMuCkBAIC01OTY4LDE4ICs2MTY3LDIzIEBAIHRocmVhZFJ1 bih2b2lkICphcmcpCiAJCQkJCXNucHJpbnRmKHRidWYsIHNpemVvZih0YnVmKSwgIiUuMWYgcyIs IHRvdGFsX3J1bik7CiAJCQkJfQogCi0JCQkJZnByaW50ZihzdGRlcnIsCi0JCQkJCQkicHJvZ3Jl c3M6ICVzLCAlLjFmIHRwcywgbGF0ICUuM2YgbXMgc3RkZGV2ICUuM2YiLAotCQkJCQkJdGJ1Ziwg dHBzLCBsYXRlbmN5LCBzdGRldik7CisJCQkJaW5pdFBRRXhwQnVmZmVyKCZwcm9ncmVzc19idWYp OworCQkJCXByaW50ZlBRRXhwQnVmZmVyKCZwcm9ncmVzc19idWYsCisJCQkJCQkJCSAgInByb2dy ZXNzOiAlcywgJS4xZiB0cHMsIGxhdCAlLjNmIG1zIHN0ZGRldiAlLjNmIiwKKwkJCQkJCQkJICB0 YnVmLCB0cHMsIGxhdGVuY3ksIHN0ZGV2KTsKIAogCQkJCWlmICh0aHJvdHRsZV9kZWxheSkKIAkJ CQl7Ci0JCQkJCWZwcmludGYoc3RkZXJyLCAiLCBsYWcgJS4zZiBtcyIsIGxhZyk7CisJCQkJCWFw cGVuZFBRRXhwQnVmZmVyKCZwcm9ncmVzc19idWYsICIsIGxhZyAlLjNmIG1zIiwgbGFnKTsKIAkJ CQkJaWYgKGxhdGVuY3lfbGltaXQpCi0JCQkJCQlmcHJpbnRmKHN0ZGVyciwgIiwgIiBJTlQ2NF9G T1JNQVQgIiBza2lwcGVkIiwKLQkJCQkJCQkJY3VyLnNraXBwZWQgLSBsYXN0LnNraXBwZWQpOwor CQkJCQkJYXBwZW5kUFFFeHBCdWZmZXIoJnByb2dyZXNzX2J1ZiwKKwkJCQkJCQkJCQkgICIsICIg SU5UNjRfRk9STUFUICIgc2tpcHBlZCIsCisJCQkJCQkJCQkJICBjdXIuc2tpcHBlZCAtIGxhc3Qu c2tpcHBlZCk7CiAJCQkJfQotCQkJCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKKwkJCQlhcHBlbmRQ UUV4cEJ1ZmZlckNoYXIoJnByb2dyZXNzX2J1ZiwgJ1xuJyk7CisKKwkJCQllcmVwb3J0KEVMRVZF TF9MT0csIChlcnJtc2coIiVzIiwgcHJvZ3Jlc3NfYnVmLmRhdGEpKSk7CisJCQkJdGVybVBRRXhw QnVmZmVyKCZwcm9ncmVzc19idWYpOwogCiAJCQkJbGFzdCA9IGN1cjsKIAkJCQlsYXN0X3JlcG9y dCA9IG5vdzsKQEAgLTYwNjMsMTAgKzYyNjcsNyBAQCBzZXRhbGFybShpbnQgc2Vjb25kcykKIAkJ IUNyZWF0ZVRpbWVyUXVldWVUaW1lcigmdGltZXIsIHF1ZXVlLAogCQkJCQkJCSAgIHdpbjMyX3Rp bWVyX2NhbGxiYWNrLCBOVUxMLCBzZWNvbmRzICogMTAwMCwgMCwKIAkJCQkJCQkgICBXVF9FWEVD VVRFSU5USU1FUlRIUkVBRCB8IFdUX0VYRUNVVEVPTkxZT05DRSkpCi0JewotCQlmcHJpbnRmKHN0 ZGVyciwgImZhaWxlZCB0byBzZXQgdGltZXJcbiIpOwotCQlleGl0KDEpOwotCX0KKwkJZXJlcG9y dChFTEVWRUxfRkFUQUwsIChlcnJtc2coImZhaWxlZCB0byBzZXQgdGltZXJcbiIpKSk7CiB9CiAK IC8qIHBhcnRpYWwgcHRocmVhZCBpbXBsZW1lbnRhdGlvbiBmb3IgV2luZG93cyAqLwpAQCAtNjEz NiwzICs2MzM3LDE1NSBAQCBwdGhyZWFkX2pvaW4ocHRocmVhZF90IHRoLCB2b2lkICoqdGhyZWFk X3JldHVybikKIH0KIAogI2VuZGlmCQkJCQkJCS8qIFdJTjMyICovCisKKy8qCisgKiBlcnJzdGFy dEltcGwgLS0tIGJlZ2luIGFuIGVycm9yLXJlcG9ydGluZyBjeWNsZQorICoKKyAqIEluaXRpYWxp emUgdGhlIGVycm9yIGRhdGEgYW5kIHN0b3JlIHRoZSBnaXZlbiBwYXJhbWV0ZXJzIGluIGl0Lgor ICogU3Vic2VxdWVudGx5LCBlcnJtc2coKSBhbmQgcGVyaGFwcyBvdGhlciByb3V0aW5lcyB3aWxs IGJlIGNhbGxlZCB0byBmdXJ0aGVyCisgKiBwb3B1bGF0ZSB0aGUgZXJyb3IgZGF0YS4gIEZpbmFs bHksIGVycmZpbmlzaCgpIHdpbGwgYmUgY2FsbGVkIHRvIGFjdHVhbGx5CisgKiBwcm9jZXNzIHRo ZSBlcnJvciByZXBvcnQuICBJZiBtdWx0aXBsZSB0aHJlYWRzIGNhbiB1c2UgdGhlIHNhbWUgZXJy b3IgZGF0YSwKKyAqIHRoZSBlcnJvciBtdXRleCBpcyBsb2NrZWQgYmVmb3JlIHRoZSBlcnJvciBk YXRhIGlzIGluaXRpYWxpemVkIGFuZCB3aWxsIGJlCisgKiB1bmxvY2tlZCBpbiB0aGUgZW5kIG9m IHRoZSBlcnJmaW5pc2goKSBjYWxsLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpbiBub3JtYWwgY2Fz ZS4gIFJldHVybnMgZmFsc2UgdG8gc2hvcnQtY2lyY3VpdCB0aGUgZXJyb3IKKyAqIHJlcG9ydCAo aWYgdGhlIGRlYnVnZ2luZyBsZXZlbCBkb2VzIG5vdCByZXNvbHZlIHRoaXMgZXJyb3IvbG9nZ2lu ZyBsZXZlbCkuCisgKi8KK3N0YXRpYyBib29sCisjaWYgZGVmaW5lZChFTkFCTEVfVEhSRUFEX1NB RkVUWSkgJiYgZGVmaW5lZChIQVZFX19WQV9BUkdTKQorZXJyc3RhcnRJbXBsKEVycm9yIGVycm9y LCBFcnJvckxldmVsIGVsZXZlbCkKKyNlbHNlCQkJCQkJCS8qICEoRU5BQkxFX1RIUkVBRF9TQUZF VFkgJiYgSEFWRV9fVkFfQVJHUykgKi8KK2VycnN0YXJ0SW1wbChFcnJvckxldmVsIGVsZXZlbCkK KyNlbmRpZgkJCQkJCQkvKiBFTkFCTEVfVEhSRUFEX1NBRkVUWSAmJiBIQVZFX19WQV9BUkdTICov Cit7CisJYm9vbAkJc3RhcnRfZXJyb3JfcmVwb3J0aW5nOworCisJLyogQ2hlY2sgaWYgd2UgaGF2 ZSB0aGUgYXBwcm9wcmlhdGUgZGVidWdnaW5nIGxldmVsICovCisJc3dpdGNoIChlbGV2ZWwpCisJ eworCQljYXNlIEVMRVZFTF9ERUJVRzoKKwkJCS8qCisJCQkgKiBQcmludCB0aGUgbWVzc2FnZSBv bmx5IGlmIHRoZXJlJ3MgYSBkZWJ1Z2dpbmcgbW9kZSBmb3IgYWxsIHR5cGVzCisJCQkgKiBvZiBt ZXNzYWdlcy4KKwkJCSAqLworCQkJc3RhcnRfZXJyb3JfcmVwb3J0aW5nID0gZGVidWc7CisJCQli cmVhazsKKwkJY2FzZSBFTEVWRUxfTE9HOgorCQljYXNlIEVMRVZFTF9GQVRBTDoKKwkJCS8qCisJ CQkgKiBBbHdheXMgcHJpbnQgdGhlIGVycm9yL2xvZyBtZXNzYWdlLgorCQkJICovCisJCQlzdGFy dF9lcnJvcl9yZXBvcnRpbmcgPSB0cnVlOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQkvKiBp bnRlcm5hbCBlcnJvciB3aGljaCBzaG91bGQgbmV2ZXIgb2NjdXIgKi8KKwkJCWVyZXBvcnQoRUxF VkVMX0ZBVEFMLAorCQkJCQkoZXJybXNnKCJ1bmV4cGVjdGVkIGVycm9yIGxldmVsOiAlZFxuIiwg ZWxldmVsKSkpOworCQkJYnJlYWs7CisJfQorCisJLyogSW5pdGlhbGl6ZSB0aGUgZXJyb3IgZGF0 YSAqLworCWlmIChzdGFydF9lcnJvcl9yZXBvcnRpbmcpCisJeworCQlBc3NlcnQoZXJyb3IpOwor CisjaWYgZGVmaW5lZChFTkFCTEVfVEhSRUFEX1NBRkVUWSkgJiYgIWRlZmluZWQoSEFWRV9fVkFf QVJHUykKKwkJcHRocmVhZF9tdXRleF9sb2NrKCZlcnJvcl9tdXRleCk7CisjZW5kaWYJCQkJCQkJ LyogRU5BQkxFX1RIUkVBRF9TQUZFVFkgJiYgIUhBVkVfX1ZBX0FSR1MgKi8KKworCQllcnJvci0+ ZWxldmVsID0gZWxldmVsOworCQlpbml0UFFFeHBCdWZmZXIoJmVycm9yLT5tZXNzYWdlKTsKKwl9 CisKKwlyZXR1cm4gc3RhcnRfZXJyb3JfcmVwb3J0aW5nOworfQorCisvKgorICogZXJybXNnSW1w bCAtLS0gYWRkIGEgcHJpbWFyeSBlcnJvciBtZXNzYWdlIHRleHQgdG8gdGhlIGN1cnJlbnQgZXJy b3IKKyAqLworc3RhdGljIGludAorI2lmIGRlZmluZWQoRU5BQkxFX1RIUkVBRF9TQUZFVFkpICYm IGRlZmluZWQoSEFWRV9fVkFfQVJHUykKK2Vycm1zZ0ltcGwoRXJyb3IgZXJyb3IsIGNvbnN0IGNo YXIgKmZtdCwuLi4pCisjZWxzZQkJCQkJCQkvKiAhKEVOQUJMRV9USFJFQURfU0FGRVRZICYmIEhB VkVfX1ZBX0FSR1MpICovCitlcnJtc2dJbXBsKGNvbnN0IGNoYXIgKmZtdCwuLi4pCisjZW5kaWYJ CQkJCQkJLyogRU5BQkxFX1RIUkVBRF9TQUZFVFkgJiYgSEFWRV9fVkFfQVJHUyAqLworeworCXZh X2xpc3QJCWFwOworCWJvb2wJCWRvbmU7CisKKwlBc3NlcnQoZXJyb3IpOworCisJaWYgKFBRRXhw QnVmZmVyQnJva2VuKCZlcnJvci0+bWVzc2FnZSkpCisJeworCQkvKiBBbHJlYWR5IGZhaWxlZC4g Ki8KKwkJLyogUmV0dXJuIHZhbHVlIGRvZXMgbm90IG1hdHRlci4gKi8KKwkJcmV0dXJuIDA7CisJ fQorCisJLyogTG9vcCBpbiBjYXNlIHdlIGhhdmUgdG8gcmV0cnkgYWZ0ZXIgZW5sYXJnaW5nIHRo ZSBidWZmZXIuICovCisJZG8KKwl7CisJCXZhX3N0YXJ0KGFwLCBmbXQpOworCQlkb25lID0gYXBw ZW5kUFFFeHBCdWZmZXJWQSgmZXJyb3ItPm1lc3NhZ2UsIGZtdCwgYXApOworCQl2YV9lbmQoYXAp OworCX0gd2hpbGUgKCFkb25lKTsKKworCS8qIFJldHVybiB2YWx1ZSBkb2VzIG5vdCBtYXR0ZXIu ICovCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBlcnJmaW5pc2hJbXBsIC0tLSBlbmQgYW4gZXJy b3ItcmVwb3J0aW5nIGN5Y2xlCisgKgorICogUHJpbnQgdGhlIGFwcHJvcHJpYXRlIGVycm9yIHJl cG9ydCB0byBzdGRlcnIuCisgKgorICogSWYgZWxldmVsIGlzIEVMRVZFTF9GQVRBTCBvciB3b3Jz ZSwgY29udHJvbCBkb2VzIG5vdCByZXR1cm4gdG8gdGhlIGNhbGxlci4KKyAqIFNlZSBFcnJvckxl dmVsIGVudW1lcmF0aW9uIGZvciB0aGUgZXJyb3IgbGV2ZWwgZGVmaW5pdGlvbnMuCisgKgorICog SWYgdGhlIGVycm9yIG1lc3NhZ2UgYnVmZmVyIGlzIGVtcHR5IG9yIGJyb2tlbiwgcHJpbnRzIGEg Y29ycmVzcG9uZGluZyBlcnJvcgorICogbWVzc2FnZSBhbmQgZXhpdHMgdGhlIHByb2dyYW0uCisg Ki8KK3N0YXRpYyB2b2lkCisjaWYgZGVmaW5lZChFTkFCTEVfVEhSRUFEX1NBRkVUWSkgJiYgZGVm aW5lZChIQVZFX19WQV9BUkdTKQorZXJyZmluaXNoSW1wbChFcnJvciBlcnJvciwgaW50IGR1bW15 LC4uLikKKyNlbHNlCQkJCQkJCS8qICEoRU5BQkxFX1RIUkVBRF9TQUZFVFkgJiYgSEFWRV9fVkFf QVJHUykgKi8KK2VycmZpbmlzaEltcGwoaW50IGR1bW15LC4uLikKKyNlbmRpZgkJCQkJCQkvKiBF TkFCTEVfVEhSRUFEX1NBRkVUWSAmJiBIQVZFX19WQV9BUkdTICovCit7CisJYm9vbAkJZXJyb3Jf ZHVyaW5nX3JlcG9ydGluZyA9IGZhbHNlOworCUVycm9yTGV2ZWwgIGVsZXZlbDsKKworCUFzc2Vy dChlcnJvcik7CisJZWxldmVsID0gZXJyb3ItPmVsZXZlbDsKKworCS8qCisJICogSW1tZWRpYXRl bHkgcHJpbnQgdGhlIG1lc3NhZ2UgdG8gc3RkZXJyIHNvIGFzIG5vdCB0byBnZXQgYW4gZW5kbGVz cyBjeWNsZQorCSAqIG9mIGVycm9ycy4uLgorCSAqLworCWlmIChQUUV4cEJ1ZmZlckRhdGFCcm9r ZW4oZXJyb3ItPm1lc3NhZ2UpKQorCXsKKwkJZXJyb3JfZHVyaW5nX3JlcG9ydGluZyA9IHRydWU7 CisJCWZwcmludGYoc3RkZXJyLCAib3V0IG9mIG1lbW9yeVxuIik7CisJfQorCWVsc2UgaWYgKCoo ZXJyb3ItPm1lc3NhZ2UuZGF0YSkgPT0gJ1wwJykKKwl7CisJCS8qIGludGVybmFsIGVycm9yIHdo aWNoIHNob3VsZCBuZXZlciBvY2N1ciAqLworCQllcnJvcl9kdXJpbmdfcmVwb3J0aW5nID0gdHJ1 ZTsKKwkJZnByaW50ZihzdGRlcnIsICJlbXB0eSBlcnJvciBtZXNzYWdlIGNhbm5vdCBiZSByZXBv cnRlZFxuIik7CisJfQorCWVsc2UKKwl7CisJCWZwcmludGYoc3RkZXJyLCAiJXMiLCBlcnJvci0+ bWVzc2FnZS5kYXRhKTsKKwl9CisKKwkvKiBSZWxlYXNlIHRoZSBlcnJvciBkYXRhIGFuZCBleGl0 IGlmIG5lZWRlZCAqLworCisJdGVybVBRRXhwQnVmZmVyKCZlcnJvci0+bWVzc2FnZSk7CisKKyNp ZiBkZWZpbmVkKEVOQUJMRV9USFJFQURfU0FGRVRZKSAmJiAhZGVmaW5lZChIQVZFX19WQV9BUkdT KQorCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZlcnJvcl9tdXRleCk7CisjZW5kaWYJCQkJCQkJLyog RU5BQkxFX1RIUkVBRF9TQUZFVFkgJiYgIUhBVkVfX1ZBX0FSR1MgKi8KKworCWlmIChlbGV2ZWwg Pj0gRUxFVkVMX0ZBVEFMIHx8IGVycm9yX2R1cmluZ19yZXBvcnRpbmcpCisJCWV4aXQoMSk7Cit9 CmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9leHBvcnRzLnR4dCBiL3NyYy9pbnRl cmZhY2VzL2xpYnBxL2V4cG9ydHMudHh0CmluZGV4IGQ2YTM4ZDAuLmU5ODNhYmMgMTAwNjQ0Ci0t LSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2V4cG9ydHMudHh0CisrKyBiL3NyYy9pbnRlcmZhY2Vz L2xpYnBxL2V4cG9ydHMudHh0CkBAIC0xNzIsMyArMTcyLDQgQEAgUFFzc2xBdHRyaWJ1dGUgICAg ICAgICAgICAxNjkKIFBRc2V0RXJyb3JDb250ZXh0VmlzaWJpbGl0eSAxNzAKIFBRcmVzdWx0VmVy Ym9zZUVycm9yTWVzc2FnZSAxNzEKIFBRZW5jcnlwdFBhc3N3b3JkQ29ubiAgICAgMTcyCithcHBl bmRQUUV4cEJ1ZmZlclZBICAgICAgIDE3MwpkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGli cHEvcHFleHBidWZmZXIuYyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL3BxZXhwYnVmZmVyLmMKaW5k ZXggODZiMTZlNi4uM2RiMmQ0YyAxMDA2NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMvbGlicHEvcHFl eHBidWZmZXIuYworKysgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9wcWV4cGJ1ZmZlci5jCkBAIC0z Nyw4ICszNyw2IEBACiAvKiBBbGwgImJyb2tlbiIgUFFFeHBCdWZmZXJzIHBvaW50IHRvIHRoaXMg c3RyaW5nLiAqLwogc3RhdGljIGNvbnN0IGNoYXIgb29tX2J1ZmZlclsxXSA9ICIiOwogCi1zdGF0 aWMgYm9vbCBhcHBlbmRQUUV4cEJ1ZmZlclZBKFBRRXhwQnVmZmVyIHN0ciwgY29uc3QgY2hhciAq Zm10LCB2YV9saXN0IGFyZ3MpIHBnX2F0dHJpYnV0ZV9wcmludGYoMiwgMCk7Ci0KIAogLyoKICAq IG1hcmtQUUV4cEJ1ZmZlckJyb2tlbgpAQCAtMjgyLDcgKzI4MCw3IEBAIGFwcGVuZFBRRXhwQnVm ZmVyKFBRRXhwQnVmZmVyIHN0ciwgY29uc3QgY2hhciAqZm10LC4uLikKICAqIEF0dGVtcHQgdG8g Zm9ybWF0IGRhdGEgYW5kIGFwcGVuZCBpdCB0byBzdHIuICBSZXR1cm5zIHRydWUgaWYgZG9uZQog ICogKGVpdGhlciBzdWNjZXNzZnVsIG9yIGhhcmQgZmFpbHVyZSksIGZhbHNlIGlmIG5lZWQgdG8g cmV0cnkuCiAgKi8KLXN0YXRpYyBib29sCitib29sCiBhcHBlbmRQUUV4cEJ1ZmZlclZBKFBRRXhw QnVmZmVyIHN0ciwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZ3MpCiB7CiAJc2l6ZV90CQlh dmFpbDsKZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL3BxZXhwYnVmZmVyLmggYi9z cmMvaW50ZXJmYWNlcy9saWJwcS9wcWV4cGJ1ZmZlci5oCmluZGV4IDc3MTYwMmEuLmI3MGI4Njgg MTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL3BxZXhwYnVmZmVyLmgKKysrIGIvc3Jj L2ludGVyZmFjZXMvbGlicHEvcHFleHBidWZmZXIuaApAQCAtMTU4LDYgKzE1OCwxNCBAQCBleHRl cm4gdm9pZCBwcmludGZQUUV4cEJ1ZmZlcihQUUV4cEJ1ZmZlciBzdHIsIGNvbnN0IGNoYXIgKmZt dCwuLi4pIHBnX2F0dHJpYnV0ZQogZXh0ZXJuIHZvaWQgYXBwZW5kUFFFeHBCdWZmZXIoUFFFeHBC dWZmZXIgc3RyLCBjb25zdCBjaGFyICpmbXQsLi4uKSBwZ19hdHRyaWJ1dGVfcHJpbnRmKDIsIDMp OwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogYXBwZW5kUFFFeHBCdWZmZXJWQQor ICogU2hhcmVkIGd1dHMgb2YgcHJpbnRmUFFFeHBCdWZmZXIvYXBwZW5kUFFFeHBCdWZmZXIuCisg KiBBdHRlbXB0IHRvIGZvcm1hdCBkYXRhIGFuZCBhcHBlbmQgaXQgdG8gc3RyLiAgUmV0dXJucyB0 cnVlIGlmIGRvbmUKKyAqIChlaXRoZXIgc3VjY2Vzc2Z1bCBvciBoYXJkIGZhaWx1cmUpLCBmYWxz ZSBpZiBuZWVkIHRvIHJldHJ5LgorICovCitleHRlcm4gYm9vbCBhcHBlbmRQUUV4cEJ1ZmZlclZB KFBRRXhwQnVmZmVyIHN0ciwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZ3MpIHBnX2F0dHJp YnV0ZV9wcmludGYoMiwgMCk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBhcHBl bmRQUUV4cEJ1ZmZlclN0cgogICogQXBwZW5kIHRoZSBnaXZlbiBzdHJpbmcgdG8gYSBQUUV4cEJ1 ZmZlciwgYWxsb2NhdGluZyBtb3JlIHNwYWNlCiAgKiBpZiBuZWNlc3NhcnkuCi0tIAoyLjcuNAoK --=_248aa227bbc4adf7e425934f1ce7af28 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v9-0004-Pgbench-errors-and-serialization-deadlock-retries.patch Content-Disposition: attachment; filename=v9-0004-Pgbench-errors-and-serialization-deadlock-retries.patch; size=121086 RnJvbSBiM2Q3MWIwMmQwYWQ3Mjc3ZTJjMThlMGQyMDczNzIyODcxZjE1NTJmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbmEgUG9seWFrb3ZhIDxtLnBvbHlha292YUBwb3N0Z3Jl c3Byby5ydT4KRGF0ZTogTW9uLCAyMSBNYXkgMjAxOCAxNToyNjowNiArMDMwMApTdWJqZWN0OiBb UEFUQ0ggdjldIFBnYmVuY2ggZXJyb3JzIGFuZCBzZXJpYWxpemF0aW9uL2RlYWRsb2NrIHJldHJp ZXMKCkNsaWVudCdzIHJ1biBpcyBhYm9ydGVkIG9ubHkgaW4gY2FzZSBvZiBhIHNlcmlvdXMgZXJy b3IsIGZvciBleGFtcGxlLCB0aGUKY29ubmVjdGlvbiB3aXRoIHRoZSBiYWNrZW5kIHdhcyBsb3N0 LiBPdGhlcndpc2UgaWYgdGhlIGV4ZWN1dGlvbiBvZiBTUUwgb3IgbWV0YQpjb21tYW5kIGZhaWxz LCB0aGUgY2xpZW50J3MgcnVuIGNvbnRpbnVlcyBub3JtYWxseSB1bnRpbCB0aGUgZW5kIG9mIHRo ZSBjdXJyZW50CnNjcmlwdCBleGVjdXRpb24gKGl0IGlzIGFzc3VtZWQgdGhhdCBvbmUgdHJhbnNh Y3Rpb24gc2NyaXB0IGNvbnRhaW5zIG9ubHkgb25lCnRyYW5zYWN0aW9uKS4KClRyYW5zYWN0aW9u cyB3aXRoIHNlcmlhbGl6YXRpb24gb3IgZGVhZGxvY2sgZmFpbHVyZXMgYXJlIHJvbGxlZCBiYWNr IGFuZApyZXBlYXRlZCB1bnRpbCB0aGV5IGNvbXBsZXRlIHN1Y2Nlc3NmdWxseSBvciByZWFjaCB0 aGUgbWF4aW11bSBudW1iZXIgb2YgdHJpZXMKKHNwZWNpZmllZCBieSB0aGUgLS1tYXgtdHJpZXMg b3B0aW9uKSAvIHRoZSBtYXhpbXVtIHRpbWUgb2YgdHJpZXMgKHNwZWNpZmllZCBieQp0aGUgLS1s YXRlbmN5LWxpbWl0IG9wdGlvbikuIFRoZXNlIG9wdGlvbnMgY2FuIGJlIGNvbWJpbmVkIHRvZ2V0 aGVyOyBidXQgaWYKbm9uZSBvZiB0aGVtIGFyZSB1c2VkLCBmYWlsZWQgdHJhbnNhY3Rpb25zIGFy ZSBub3QgcmV0cmllZCBhdCBhbGwuIElmIHRoZSBsYXN0CnRyYW5zYWN0aW9uIHJ1biBmYWlscywg dGhpcyB0cmFuc2FjdGlvbiB3aWxsIGJlIHJlcG9ydGVkIGFzIGZhaWxlZCwgYW5kIHRoZQpjbGll bnQgdmFyaWFibGVzIHdpbGwgYmUgc2V0IGFzIHRoZXkgd2VyZSBiZWZvcmUgdGhlIGZpcnN0IHJ1 biBvZiB0aGlzCnRyYW5zYWN0aW9uLgoKSWYgdGhlcmUncmUgcmV0cmllcyBhbmQvb3IgZXJyb3Jz IHRoZWlyIHN0YXRpc3RpY3MgYXJlIHByaW50ZWQgaW4gdGhlIHByb2dyZXNzLAppbiB0aGUgdHJh bnNhY3Rpb24gLyBhZ2dyZWdhdGlvbiBsb2dzIGFuZCBpbiB0aGUgZW5kIHdpdGggb3RoZXIgcmVz dWx0cyAoYWxsIGFuZApmb3IgZWFjaCBzY3JpcHQpLiBBIHRyYW5zYWN0aW9uIGVycm9yIGlzIHJl cG9ydGVkIGhlcmUgb25seSBpZiB0aGUgbGFzdCB0cnkgb2YKdGhpcyB0cmFuc2FjdGlvbiBmYWls cy4gQWxzbyByZXRyaWVzIGFuZC9vciBlcnJvcnMgYXJlIHByaW50ZWQgcGVyLWNvbW1hbmQgd2l0 aAphdmVyYWdlIGxhdGVuY2llcyBpZiB5b3UgdXNlIHRoZSBhcHByb3ByaWF0ZSBiZW5jaG1hcmtp bmcgb3B0aW9uCigtLXJlcG9ydC1wZXItY29tbWFuZCwgLXIpIGFuZCB0aGUgdG90YWwgbnVtYmVy IG9mIHJldHJpZXMgYW5kL29yIGVycm9ycyBpcyBub3QKemVyby4KCklmIGEgZmFpbGVkIHRyYW5z YWN0aW9uIGJsb2NrIGRvZXMgbm90IHRlcm1pbmF0ZSBpbiB0aGUgY3VycmVudCBzY3JpcHQsIHRo ZQpjb21tYW5kcyBvZiB0aGUgZm9sbG93aW5nIHNjcmlwdHMgYXJlIHByb2Nlc3NlZCBhcyB1c3Vh bCBzbyB5b3UgY2FuIGdldCBhIGxvdCBvZgplcnJvcnMgb2YgdHlwZSAiaW4gZmFpbGVkIFNRTCB0 cmFuc2FjdGlvbiIgKHdoZW4gdGhlIGN1cnJlbnQgU1FMIHRyYW5zYWN0aW9uIGlzCmFib3J0ZWQg YW5kIGNvbW1hbmRzIGlnbm9yZWQgdW50aWwgZW5kIG9mIHRyYW5zYWN0aW9uIGJsb2NrKS4gSW4g c3VjaCBjYXNlcyB5b3UKY2FuIHVzZSBzZXBhcmF0ZSBzdGF0aXN0aWNzIG9mIHRoZXNlIGVycm9y cyBpbiBhbGwgcmVwb3J0cy4KCklmIHlvdSB3YW50IHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gZmFp bHVyZXMgb3IgZXJyb3JzIGJ5IHR5cGUgKGluY2x1ZGluZyB3aGljaApsaW1pdCBmb3IgcmV0cmll cyB3YXMgdmlvbGF0ZWQgYW5kIGhvdyBmYXIgaXQgd2FzIGV4Y2VlZGVkIGZvciB0aGUKc2VyaWFs aXphdGlvbi9kZWFkbG9jayBlcnJvcnMpLCB1c2UgdGhlIHBnYmVuY2ggZGVidWdnaW5nIG91dHB1 dCBjcmVhdGVkIHdpdGgKdGhlIG9wdGlvbiAtLWRlYnVnIGFuZCB3aXRoIHRoZSBkZWJ1Z2dpbmcg bGV2ZWwgImZhaWxzIiBvciAiYWxsIi4gVGhlIGZpcnN0CnZhcmlhbnQgaXMgcmVjb21tZW5kZWQg Zm9yIHRoaXMgcHVycG9zZSBiZWNhdXNlIHdpdGggaW4gdGhlIHNlY29uZCBjYXNlIHRoZQpkZWJ1 Z2dpbmcgb3V0cHV0IGNhbiBiZSB2ZXJ5IGxhcmdlLgotLS0KIGRvYy9zcmMvc2dtbC9yZWYvcGdi ZW5jaC5zZ21sICAgICAgICAgICAgICAgICAgICAgIHwgIDMyMSArKysrKy0KIHNyYy9iaW4vcGdi ZW5jaC9wZ2JlbmNoLmMgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTEwOSArKysrKysrKysr KysrKysrLS0tLQogc3JjL2Jpbi9wZ2JlbmNoL3QvMDAxX3BnYmVuY2hfd2l0aF9zZXJ2ZXIucGwg ICAgICAgfCAgIDQ0ICstCiBzcmMvYmluL3BnYmVuY2gvdC8wMDJfcGdiZW5jaF9ub19zZXJ2ZXIu cGwgICAgICAgICB8ICAgIDcgKy0KIC4uLi90LzAwM19zZXJpYWxpemF0aW9uX2FuZF9kZWFkbG9j a19mYWlscy5wbCAgICAgIHwgIDc2MSArKysrKysrKysrKysrKwogNSBmaWxlcyBjaGFuZ2VkLCAy MDI1IGluc2VydGlvbnMoKyksIDIxNyBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBz cmMvYmluL3BnYmVuY2gvdC8wMDNfc2VyaWFsaXphdGlvbl9hbmRfZGVhZGxvY2tfZmFpbHMucGwK CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL3BnYmVuY2guc2dtbCBiL2RvYy9zcmMvc2dt bC9yZWYvcGdiZW5jaC5zZ21sCmluZGV4IGU0YjM3ZGQuLmY4OTQzOTAgMTAwNjQ0Ci0tLSBhL2Rv Yy9zcmMvc2dtbC9yZWYvcGdiZW5jaC5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvcGdiZW5j aC5zZ21sCkBAIC01NSwxNiArNTUsMTkgQEAgbnVtYmVyIG9mIGNsaWVudHM6IDEwCiBudW1iZXIg b2YgdGhyZWFkczogMQogbnVtYmVyIG9mIHRyYW5zYWN0aW9ucyBwZXIgY2xpZW50OiAxMDAwCiBu dW1iZXIgb2YgdHJhbnNhY3Rpb25zIGFjdHVhbGx5IHByb2Nlc3NlZDogMTAwMDAvMTAwMDAKK21h eGltdW0gbnVtYmVyIG9mIHRyaWVzOiAxCiB0cHMgPSA4NS4xODQ4NzEgKGluY2x1ZGluZyBjb25u ZWN0aW9ucyBlc3RhYmxpc2hpbmcpCiB0cHMgPSA4NS4yOTYzNDYgKGV4Y2x1ZGluZyBjb25uZWN0 aW9ucyBlc3RhYmxpc2hpbmcpCiA8L3NjcmVlbj4KIAotICBUaGUgZmlyc3Qgc2l4IGxpbmVzIHJl cG9ydCBzb21lIG9mIHRoZSBtb3N0IGltcG9ydGFudCBwYXJhbWV0ZXIKLSAgc2V0dGluZ3MuICBU aGUgbmV4dCBsaW5lIHJlcG9ydHMgdGhlIG51bWJlciBvZiB0cmFuc2FjdGlvbnMgY29tcGxldGVk Ci0gIGFuZCBpbnRlbmRlZCAodGhlIGxhdHRlciBiZWluZyBqdXN0IHRoZSBwcm9kdWN0IG9mIG51 bWJlciBvZiBjbGllbnRzCisgIFRoZSBmaXJzdCBzaXggbGluZXMgYW5kIHRoZSBlaWdodGggbGlu ZSByZXBvcnQgc29tZSBvZiB0aGUgbW9zdCBpbXBvcnRhbnQKKyAgcGFyYW1ldGVyIHNldHRpbmdz LiAgVGhlIHNldmVudGggbGluZSByZXBvcnRzIHRoZSBudW1iZXIgb2YgdHJhbnNhY3Rpb25zCisg IGNvbXBsZXRlZCBhbmQgaW50ZW5kZWQgKHRoZSBsYXR0ZXIgYmVpbmcganVzdCB0aGUgcHJvZHVj dCBvZiBudW1iZXIgb2YgY2xpZW50cwogICBhbmQgbnVtYmVyIG9mIHRyYW5zYWN0aW9ucyBwZXIg Y2xpZW50KTsgdGhlc2Ugd2lsbCBiZSBlcXVhbCB1bmxlc3MgdGhlIHJ1bgotICBmYWlsZWQgYmVm b3JlIGNvbXBsZXRpb24uICAoSW4gPG9wdGlvbj4tVDwvb3B0aW9uPiBtb2RlLCBvbmx5IHRoZSBh Y3R1YWwKLSAgbnVtYmVyIG9mIHRyYW5zYWN0aW9ucyBpcyBwcmludGVkLikKKyAgZmFpbGVkIGJl Zm9yZSBjb21wbGV0aW9uIG9yIHNvbWUgU1FML21ldGEgY29tbWFuZChzKSBmYWlsZWQuICAoSW4K KyAgPG9wdGlvbj4tVDwvb3B0aW9uPiBtb2RlLCBvbmx5IHRoZSBhY3R1YWwgbnVtYmVyIG9mIHRy YW5zYWN0aW9ucyBpcyBwcmludGVkLikKKyAgKHNlZSA8eHJlZiBsaW5rZW5kPSJlcnJvcnMtYW5k LXJldHJpZXMiIGVuZHRlcm09ImVycm9ycy1hbmQtcmV0cmllcy10aXRsZSIvPgorICBmb3IgbW9y ZSBpbmZvcm1hdGlvbikKICAgVGhlIGxhc3QgdHdvIGxpbmVzIHJlcG9ydCB0aGUgbnVtYmVyIG9m IHRyYW5zYWN0aW9ucyBwZXIgc2Vjb25kLAogICBmaWd1cmVkIHdpdGggYW5kIHdpdGhvdXQgY291 bnRpbmcgdGhlIHRpbWUgdG8gc3RhcnQgZGF0YWJhc2Ugc2Vzc2lvbnMuCiAgPC9wYXJhPgpAQCAt MzgwLDExICszODMsMjggQEAgcGdiZW5jaCA8b3B0aW9uYWw+IDxyZXBsYWNlYWJsZT5vcHRpb25z PC9yZXBsYWNlYWJsZT4gPC9vcHRpb25hbD4gPHJlcGxhY2VhYmxlPmQKICAgICAgPC92YXJsaXN0 ZW50cnk+CiAKICAgICAgPHZhcmxpc3RlbnRyeT4KLSAgICAgIDx0ZXJtPjxvcHRpb24+LWQ8L29w dGlvbj48L3Rlcm0+Ci0gICAgICA8dGVybT48b3B0aW9uPi0tZGVidWc8L29wdGlvbj48L3Rlcm0+ CisgICAgICA8dGVybT48b3B0aW9uPi1kPC9vcHRpb24+IDxyZXBsYWNlYWJsZT5kZWJ1Z19sZXZl bDwvcmVwbGFjZWFibGU+PC90ZXJtPgorICAgICAgPHRlcm0+PG9wdGlvbj4tLWRlYnVnPTwvb3B0 aW9uPjxyZXBsYWNlYWJsZT5kZWJ1Z19sZXZlbDwvcmVwbGFjZWFibGU+PC90ZXJtPgogICAgICAg PGxpc3RpdGVtPgogICAgICAgIDxwYXJhPgotICAgICAgICBQcmludCBkZWJ1Z2dpbmcgb3V0cHV0 LgorICAgICAgICBQcmludCBkZWJ1Z2dpbmcgb3V0cHV0LiBZb3UgY2FuIHVzZSB0aGUgZm9sbG93 aW5nIGRlYnVnZ2luZyBsZXZlbHM6CisgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAg ICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgPHBhcmE+PGxpdGVyYWw+bm88L2xpdGVyYWw+OiBu byBkZWJ1Z2dpbmcgb3V0cHV0IChleGNlcHQgYnVpbHQtaW4KKyAgICAgICAgICAgIGZ1bmN0aW9u IDxmdW5jdGlvbj5kZWJ1ZzwvZnVuY3Rpb24+LCBzZWUgPHhyZWYKKyAgICAgICAgICAgIGxpbmtl bmQ9InBnYmVuY2gtZnVuY3Rpb25zIi8+KS48L3BhcmE+CisgICAgICAgICAgIDwvbGlzdGl0ZW0+ CisgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgIDxwYXJhPjxsaXRlcmFsPmZhaWxz PC9saXRlcmFsPjogcHJpbnQgb25seSBmYWlsdXJlIG1lc3NhZ2VzLCBlcnJvcnMKKyAgICAgICAg ICAgIGFuZCByZXRyaWVzIChzZWUgPHhyZWYgbGlua2VuZD0iZXJyb3JzLWFuZC1yZXRyaWVzIgor ICAgICAgICAgICAgZW5kdGVybT0iZXJyb3JzLWFuZC1yZXRyaWVzLXRpdGxlIi8+IGZvciBtb3Jl IGluZm9ybWF0aW9uKS48L3BhcmE+CisgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAg IDxsaXN0aXRlbT4KKyAgICAgICAgICAgIDxwYXJhPjxsaXRlcmFsPmFsbDwvbGl0ZXJhbD46IHBy aW50IGFsbCBkZWJ1Z2dpbmcgb3V0cHV0CisgICAgICAgICAgICAodGhyb3R0bGluZywgZXhlY3V0 ZWQvc2VudC9yZWNlaXZlZCBjb21tYW5kcyBldGMuKS48L3BhcmE+CisgICAgICAgICAgIDwvbGlz dGl0ZW0+CisgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIFRoZSBkZWZhdWx0IGlz IG5vIGRlYnVnZ2luZyBvdXRwdXQuCiAgICAgICAgPC9wYXJhPgogICAgICAgPC9saXN0aXRlbT4K ICAgICAgPC92YXJsaXN0ZW50cnk+CkBAIC00NTMsNiArNDczLDE2IEBAIHBnYmVuY2ggPG9wdGlv bmFsPiA8cmVwbGFjZWFibGU+b3B0aW9uczwvcmVwbGFjZWFibGU+IDwvb3B0aW9uYWw+IDxyZXBs YWNlYWJsZT5kCiAgICAgICAgIGF0IGFsbC4gVGhleSBhcmUgY291bnRlZCBhbmQgcmVwb3J0ZWQg c2VwYXJhdGVseSBhcwogICAgICAgICA8Zmlyc3R0ZXJtPnNraXBwZWQ8L2ZpcnN0dGVybT4uCiAg ICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBUaGUgdHJhbnNhY3Rpb24gd2l0 aCBzZXJpYWxpemF0aW9uIG9yIGRlYWRsb2NrIGZhaWx1cmUgY2FuIGJlIHJldHJpZWQgaWYKKyAg ICAgICAgdGhlIHRvdGFsIHRpbWUgb2YgYWxsIGl0cyB0cmllcyBpcyBsZXNzIHRoYW4KKyAgICAg ICAgPHJlcGxhY2VhYmxlPmxpbWl0PC9yZXBsYWNlYWJsZT4gbXMuIFRoaXMgb3B0aW9uIGNhbiBi ZSBjb21iaW5lZCB3aXRoCisgICAgICAgIHRoZSBvcHRpb24gPG9wdGlvbj4tLW1heC10cmllczwv b3B0aW9uPiB3aGljaCBsaW1pdHMgdGhlIHRvdGFsIG51bWJlciBvZgorICAgICAgICB0cmFuc2Fj dGlvbiB0cmllcy4gQnV0IGlmIG5vbmUgb2YgdGhlbSBhcmUgdXNlZCwgZmFpbGVkIHRyYW5zYWN0 aW9ucyBhcmUKKyAgICAgICAgbm90IHJldHJpZWQgYXQgYWxsLiBTZWUKKyAgICAgICAgPHhyZWYg bGlua2VuZD0iZXJyb3JzLWFuZC1yZXRyaWVzIiBlbmR0ZXJtPSJlcnJvcnMtYW5kLXJldHJpZXMt dGl0bGUiLz4KKyAgICAgICAgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcmV0cnlpbmcgZmFp bGVkIHRyYW5zYWN0aW9ucy4KKyAgICAgICA8L3BhcmE+CiAgICAgICAgPC9saXN0aXRlbT4KICAg ICAgPC92YXJsaXN0ZW50cnk+CiAKQEAgLTUxMywyMiArNTQzLDM4IEBAIHBnYmVuY2ggPG9wdGlv bmFsPiA8cmVwbGFjZWFibGU+b3B0aW9uczwvcmVwbGFjZWFibGU+IDwvb3B0aW9uYWw+IDxyZXBs YWNlYWJsZT5kCiAgICAgICAgIFNob3cgcHJvZ3Jlc3MgcmVwb3J0IGV2ZXJ5IDxyZXBsYWNlYWJs ZT5zZWM8L3JlcGxhY2VhYmxlPiBzZWNvbmRzLiAgVGhlIHJlcG9ydAogICAgICAgICBpbmNsdWRl cyB0aGUgdGltZSBzaW5jZSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBydW4sIHRoZSB0cHMgc2luY2Ug dGhlCiAgICAgICAgIGxhc3QgcmVwb3J0LCBhbmQgdGhlIHRyYW5zYWN0aW9uIGxhdGVuY3kgYXZl cmFnZSBhbmQgc3RhbmRhcmQKLSAgICAgICAgZGV2aWF0aW9uIHNpbmNlIHRoZSBsYXN0IHJlcG9y dC4gIFVuZGVyIHRocm90dGxpbmcgKDxvcHRpb24+LVI8L29wdGlvbj4pLAotICAgICAgICB0aGUg bGF0ZW5jeSBpcyBjb21wdXRlZCB3aXRoIHJlc3BlY3QgdG8gdGhlIHRyYW5zYWN0aW9uIHNjaGVk dWxlZAotICAgICAgICBzdGFydCB0aW1lLCBub3QgdGhlIGFjdHVhbCB0cmFuc2FjdGlvbiBiZWdp bm5pbmcgdGltZSwgdGh1cyBpdCBhbHNvCi0gICAgICAgIGluY2x1ZGVzIHRoZSBhdmVyYWdlIHNj aGVkdWxlIGxhZyB0aW1lLgorICAgICAgICBkZXZpYXRpb24gc2luY2UgdGhlIGxhc3QgcmVwb3J0 LiAgSWYgYW55IHRyYW5zYWN0aW9ucyBlbmRlZCB3aXRoIGEKKyAgICAgICAgZmFpbGVkIFNRTCBv ciBtZXRhIGNvbW1hbmQgc2luY2UgdGhlIGxhc3QgcmVwb3J0LCB0aGV5IGFyZSBhbHNvIHJlcG9y dGVkCisgICAgICAgIGFzIGZhaWxlZC4gIElmIGFueSB0cmFuc2FjdGlvbnMgZW5kZWQgd2l0aCBh biBlcnJvciAiaW4gZmFpbGVkIFNRTAorICAgICAgICB0cmFuc2FjdGlvbiBibG9jayIsIHRoZXkg YXJlIHJlcG9ydGVkIHNlcGFyYXRseSBhcyA8bGl0ZXJhbD5pbiBmYWlsZWQKKyAgICAgICAgdHg8 L2xpdGVyYWw+IChzZWUgPHhyZWYgbGlua2VuZD0iZXJyb3JzLWFuZC1yZXRyaWVzIgorICAgICAg ICBlbmR0ZXJtPSJlcnJvcnMtYW5kLXJldHJpZXMtdGl0bGUiLz4gZm9yIG1vcmUgaW5mb3JtYXRp b24pLiAgVW5kZXIKKyAgICAgICAgdGhyb3R0bGluZyAoPG9wdGlvbj4tUjwvb3B0aW9uPiksIHRo ZSBsYXRlbmN5IGlzIGNvbXB1dGVkIHdpdGggcmVzcGVjdAorICAgICAgICB0byB0aGUgdHJhbnNh Y3Rpb24gc2NoZWR1bGVkIHN0YXJ0IHRpbWUsIG5vdCB0aGUgYWN0dWFsIHRyYW5zYWN0aW9uCisg ICAgICAgIGJlZ2lubmluZyB0aW1lLCB0aHVzIGl0IGFsc28gaW5jbHVkZXMgdGhlIGF2ZXJhZ2Ug c2NoZWR1bGUgbGFnIHRpbWUuICBJZgorICAgICAgICBhbnkgdHJhbnNhY3Rpb25zIGhhdmUgYmVl biByb2xsZWQgYmFjayBhbmQgcmV0cmllZCBhZnRlciBhCisgICAgICAgIHNlcmlhbGl6YXRpb24v ZGVhZGxvY2sgZmFpbHVyZSBzaW5jZSB0aGUgbGFzdCByZXBvcnQsIHRoZSByZXBvcnQKKyAgICAg ICAgaW5jbHVkZXMgdGhlIG51bWJlciBvZiBzdWNoIHRyYW5zYWN0aW9ucyBhbmQgdGhlIHN1bSBv ZiBhbGwgcmV0cmllcy4gVXNlCisgICAgICAgIHRoZSBvcHRpb25zIDxvcHRpb24+LS1tYXgtdHJp ZXM8L29wdGlvbj4gYW5kL29yCisgICAgICAgIDxvcHRpb24+LS1sYXRlbmN5LWxpbWl0PC9vcHRp b24+IHRvIGVuYWJsZSB0cmFuc2FjdGlvbnMgcmV0cmllcyBhZnRlcgorICAgICAgICBzZXJpYWxp emF0aW9uL2RlYWRsb2NrIGZhaWx1cmVzLgogICAgICAgIDwvcGFyYT4KICAgICAgIDwvbGlzdGl0 ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5PgogCiAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICA8 dGVybT48b3B0aW9uPi1yPC9vcHRpb24+PC90ZXJtPgotICAgICAgPHRlcm0+PG9wdGlvbj4tLXJl cG9ydC1sYXRlbmNpZXM8L29wdGlvbj48L3Rlcm0+CisgICAgICA8dGVybT48b3B0aW9uPi0tcmVw b3J0LXBlci1jb21tYW5kPC9vcHRpb24+PC90ZXJtPgogICAgICAgPGxpc3RpdGVtPgogICAgICAg IDxwYXJhPgotICAgICAgICBSZXBvcnQgdGhlIGF2ZXJhZ2UgcGVyLXN0YXRlbWVudCBsYXRlbmN5 IChleGVjdXRpb24gdGltZSBmcm9tIHRoZQotICAgICAgICBwZXJzcGVjdGl2ZSBvZiB0aGUgY2xp ZW50KSBvZiBlYWNoIGNvbW1hbmQgYWZ0ZXIgdGhlIGJlbmNobWFyawotICAgICAgICBmaW5pc2hl cy4gIFNlZSBiZWxvdyBmb3IgZGV0YWlscy4KKyAgICAgICAgUmVwb3J0IHRoZSBmb2xsb3dpbmcg c3RhdGlzdGljcyBmb3IgZWFjaCBjb21tYW5kIGFmdGVyIHRoZSBiZW5jaG1hcmsKKyAgICAgICAg ZmluaXNoZXM6IHRoZSBhdmVyYWdlIHBlci1zdGF0ZW1lbnQgbGF0ZW5jeSAoZXhlY3V0aW9uIHRp bWUgZnJvbSB0aGUKKyAgICAgICAgcGVyc3BlY3RpdmUgb2YgdGhlIGNsaWVudCksIHRoZSBudW1i ZXIgb2YgYWxsIGVycm9ycywgdGhlIG51bWJlciBvZgorICAgICAgICBlcnJvcnMgImluIGZhaWxl ZCBTUUwgdHJhbnNhY3Rpb24gYmxvY2siLCBhbmQgdGhlIG51bWJlciBvZiByZXRyaWVzCisgICAg ICAgIGFmdGVyIHNlcmlhbGl6YXRpb24gb3IgZGVhZGxvY2sgZmFpbHVyZXMuICBUaGUgcmVwb3J0 IGRpc3BsYXlzIHRoZQorICAgICAgICBjb2x1bW5zIHdpdGggc3RhdGlzdGljcyBvbiBlcnJvcnMg YW5kIHJldHJpZXMgb25seSBpZiB0aGUgY3VycmVudAorICAgICAgICA8YXBwbGljYXRpb24+cGdi ZW5jaDwvYXBwbGljYXRpb24+IHJ1biBoYXMgYW4gZXJyb3Igb2YgdGhlIGNvcnJlc3BvbmRpbmcK KyAgICAgICAgdHlwZSBvciByZXRyeSwgcmVzcGVjdGl2ZWx5LiBTZWUgYmVsb3cgZm9yIGRldGFp bHMuCiAgICAgICAgPC9wYXJhPgogICAgICAgPC9saXN0aXRlbT4KICAgICAgPC92YXJsaXN0ZW50 cnk+CkBAIC02NjcsNiArNzEzLDIxIEBAIHBnYmVuY2ggPG9wdGlvbmFsPiA8cmVwbGFjZWFibGU+ b3B0aW9uczwvcmVwbGFjZWFibGU+IDwvb3B0aW9uYWw+IDxyZXBsYWNlYWJsZT5kCiAgICAgIDwv dmFybGlzdGVudHJ5PgogCiAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT48b3B0aW9u Pi0tbWF4LXRyaWVzPTxyZXBsYWNlYWJsZT5udW1iZXJfb2ZfdHJpZXM8L3JlcGxhY2VhYmxlPjwv b3B0aW9uPjwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAg U2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiB0cmllcyBmb3IgdHJhbnNhY3Rpb25zIHdpdGgKKyAg ICAgICAgc2VyaWFsaXphdGlvbi9kZWFkbG9jayBmYWlsdXJlcy4gVGhpcyBvcHRpb24gY2FuIGJl IGNvbWJpbmVkIHdpdGggdGhlCisgICAgICAgIG9wdGlvbiA8b3B0aW9uPi0tbGF0ZW5jeS1saW1p dDwvb3B0aW9uPiB3aGljaCBsaW1pdHMgdGhlIHRvdGFsIHRpbWUgb2YKKyAgICAgICAgdHJhbnNh Y3Rpb24gdHJpZXMuIEJ1dCBpZiBub25lIG9mIHRoZW0gYXJlIHVzZWQsIGZhaWxlZCB0cmFuc2Fj dGlvbnMgYXJlCisgICAgICAgIG5vdCByZXRyaWVkIGF0IGFsbC4gU2VlCisgICAgICAgIDx4cmVm IGxpbmtlbmQ9ImVycm9ycy1hbmQtcmV0cmllcyIgZW5kdGVybT0iZXJyb3JzLWFuZC1yZXRyaWVz LXRpdGxlIi8+CisgICAgICAgIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHJldHJ5aW5nIGZh aWxlZCB0cmFuc2FjdGlvbnMuCisgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAg ICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgIDx0ZXJtPjxv cHRpb24+LS1wcm9ncmVzcy10aW1lc3RhbXA8L29wdGlvbj48L3Rlcm0+CiAgICAgICA8bGlzdGl0 ZW0+CiAgICAgICAgPHBhcmE+CkBAIC04MDcsOCArODY4LDggQEAgcGdiZW5jaCA8b3B0aW9uYWw+ IDxyZXBsYWNlYWJsZT5vcHRpb25zPC9yZXBsYWNlYWJsZT4gPC9vcHRpb25hbD4gPHJlcGxhY2Vh YmxlPmQKICA8cmVmc2VjdDE+CiAgIDx0aXRsZT5Ob3RlczwvdGl0bGU+CiAKLSA8cmVmc2VjdDI+ Ci0gIDx0aXRsZT5XaGF0IGlzIHRoZSA8cXVvdGU+VHJhbnNhY3Rpb248L3F1b3RlPiBBY3R1YWxs eSBQZXJmb3JtZWQgaW4gPGFwcGxpY2F0aW9uPnBnYmVuY2g8L2FwcGxpY2F0aW9uPj88L3RpdGxl PgorIDxyZWZzZWN0MiBpZD0idHJhbnNhY3Rpb25zLWFuZC1zY3JpcHRzIj4KKyAgPHRpdGxlIGlk PSJ0cmFuc2FjdGlvbnMtYW5kLXNjcmlwdHMtdGl0bGUiPldoYXQgaXMgdGhlIDxxdW90ZT5UcmFu c2FjdGlvbjwvcXVvdGU+IEFjdHVhbGx5IFBlcmZvcm1lZCBpbiA8YXBwbGljYXRpb24+cGdiZW5j aDwvYXBwbGljYXRpb24+PzwvdGl0bGU+CiAKICAgPHBhcmE+CiAgICA8YXBwbGljYXRpb24+cGdi ZW5jaDwvYXBwbGljYXRpb24+IGV4ZWN1dGVzIHRlc3Qgc2NyaXB0cyBjaG9zZW4gcmFuZG9tbHkK QEAgLTE1ODMsNyArMTY0NCw3IEBAIEVORDsKICAgIFRoZSBmb3JtYXQgb2YgdGhlIGxvZyBpczoK IAogPHN5bm9wc2lzPgotPHJlcGxhY2VhYmxlPmNsaWVudF9pZDwvcmVwbGFjZWFibGU+IDxyZXBs YWNlYWJsZT50cmFuc2FjdGlvbl9ubzwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT50aW1lPC9y ZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPnNjcmlwdF9ubzwvcmVwbGFjZWFibGU+IDxyZXBsYWNl YWJsZT50aW1lX2Vwb2NoPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPnRpbWVfdXM8L3JlcGxh Y2VhYmxlPiA8b3B0aW9uYWw+IDxyZXBsYWNlYWJsZT5zY2hlZHVsZV9sYWc8L3JlcGxhY2VhYmxl PiA8L29wdGlvbmFsPgorPHJlcGxhY2VhYmxlPmNsaWVudF9pZDwvcmVwbGFjZWFibGU+IDxyZXBs YWNlYWJsZT50cmFuc2FjdGlvbl9ubzwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT50aW1lPC9y ZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPnNjcmlwdF9ubzwvcmVwbGFjZWFibGU+IDxyZXBsYWNl YWJsZT50aW1lX2Vwb2NoPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPnRpbWVfdXM8L3JlcGxh Y2VhYmxlPiA8b3B0aW9uYWw+IDxyZXBsYWNlYWJsZT5zY2hlZHVsZV9sYWc8L3JlcGxhY2VhYmxl PiA8L29wdGlvbmFsPiA8b3B0aW9uYWw+IDxyZXBsYWNlYWJsZT5yZXRyaWVzPC9yZXBsYWNlYWJs ZT4gPC9vcHRpb25hbD4KIDwvc3lub3BzaXM+CiAKICAgIHdoZXJlCkBAIC0xNjA0LDYgKzE2NjUs MTcgQEAgRU5EOwogICAgV2hlbiBib3RoIDxvcHRpb24+LS1yYXRlPC9vcHRpb24+IGFuZCA8b3B0 aW9uPi0tbGF0ZW5jeS1saW1pdDwvb3B0aW9uPiBhcmUgdXNlZCwKICAgIHRoZSA8cmVwbGFjZWFi bGU+dGltZTwvcmVwbGFjZWFibGU+IGZvciBhIHNraXBwZWQgdHJhbnNhY3Rpb24gd2lsbCBiZSBy ZXBvcnRlZCBhcwogICAgPGxpdGVyYWw+c2tpcHBlZDwvbGl0ZXJhbD4uCisgICA8cmVwbGFjZWFi bGU+cmV0cmllczwvcmVwbGFjZWFibGU+IGlzIHRoZSBzdW0gb2YgYWxsIHRoZSByZXRyaWVzIGFm dGVyIHRoZQorICAgc2VyaWFsaXphdGlvbiBvciBkZWFkbG9jayBmYWlsdXJlcyBkdXJpbmcgdGhl IGN1cnJlbnQgc2NyaXB0IGV4ZWN1dGlvbi4gSXQgaXMKKyAgIG9ubHkgcHJlc2VudCB3aGVuIHRo ZSBtYXhpbXVtIG51bWJlciBvZiB0cmllcyBmb3IgdHJhbnNhY3Rpb25zIGlzIG1vcmUgdGhhbiAx CisgICAoPG9wdGlvbj4tLW1heC10cmllczwvb3B0aW9uPikgYW5kL29yIHRoZSBtYXhpbXVtIHRp bWUgb2YgdHJpZXMgZm9yCisgICB0cmFuc2FjdGlvbnMgaXMgdXNlZCAoPG9wdGlvbj4tLWxhdGVu Y3ktbGltaXQ8L29wdGlvbj4pLiBJZiB0aGUgdHJhbnNhY3Rpb24KKyAgIGVuZGVkIHdpdGggYW4g ZXJyb3IgImluIGZhaWxlZCBTUUwgdHJhbnNhY3Rpb24iLCBpdHMKKyAgIDxyZXBsYWNlYWJsZT50 aW1lPC9yZXBsYWNlYWJsZT4gd2lsbCBiZSByZXBvcnRlZCBhcworICAgPGxpdGVyYWw+aW5fZmFp bGVkX3R4PC9saXRlcmFsPi4gSWYgdGhlIHRyYW5zYWN0aW9uIGVuZGVkIHdpdGggb3RoZXIgZXJy b3IsCisgICBpdHMgPHJlcGxhY2VhYmxlPnRpbWU8L3JlcGxhY2VhYmxlPiB3aWxsIGJlIHJlcG9y dGVkIGFzCisgICA8bGl0ZXJhbD5mYWlsZWQ8L2xpdGVyYWw+IChzZWUgPHhyZWYgbGlua2VuZD0i ZXJyb3JzLWFuZC1yZXRyaWVzIgorICAgZW5kdGVybT0iZXJyb3JzLWFuZC1yZXRyaWVzLXRpdGxl Ii8+IGZvciBtb3JlIGluZm9ybWF0aW9uKS4KICAgPC9wYXJhPgogCiAgIDxwYXJhPgpAQCAtMTYz Myw2ICsxNzA1LDI0IEBAIEVORDsKICAgPC9wYXJhPgogCiAgIDxwYXJhPgorICAgVGhlIGZvbGxv d2luZyBleGFtcGxlIHNob3dzIGEgc25pcHBldCBvZiBhIGxvZyBmaWxlIHdpdGggZXJyb3JzIGFu ZCByZXRyaWVzLAorICAgd2l0aCB0aGUgbWF4aW11bSBudW1iZXIgb2YgdHJpZXMgc2V0IHRvIDEw IChub3RlIHRoZSBhZGRpdGlvbmFsCisgICA8cmVwbGFjZWFibGU+cmV0cmllczwvcmVwbGFjZWFi bGU+IGNvbHVtbik6Cis8c2NyZWVuPgorMyAwIDQ3NDIzIDAgMTQ5OTQxNDQ5OCAzNDUwMSA0Cisz IDEgODMzMyAwIDE0OTk0MTQ0OTggNDI4NDggMQorMyAyIDgzNTggMCAxNDk5NDE0NDk4IDUxMjE5 IDEKKzQgMCA3MjM0NSAwIDE0OTk0MTQ0OTggNTk0MzMgNworMSAzIDQxNzE4IDAgMTQ5OTQxNDQ5 OCA2Nzg3OSA1CisxIDQgODQxNiAwIDE0OTk0MTQ0OTggNzYzMTEgMQorMyAzIDMzMjM1IDAgMTQ5 OTQxNDQ5OCA4NDQ2OSA0CiswIDAgZmFpbGVkIDAgMTQ5OTQxNDQ5OCA4NDkwNSAxMAorMiAwIGZh aWxlZCAwIDE0OTk0MTQ0OTggODYyNDggMTAKKzMgNCA4MzA3IDAgMTQ5OTQxNDQ5OCA5Mjc4OCAx Cis8L3NjcmVlbj4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgogICAgV2hlbiBydW5uaW5nIGEgbG9u ZyB0ZXN0IG9uIGhhcmR3YXJlIHRoYXQgY2FuIGhhbmRsZSBhIGxvdCBvZiB0cmFuc2FjdGlvbnMs CiAgICB0aGUgbG9nIGZpbGVzIGNhbiBiZWNvbWUgdmVyeSBsYXJnZS4gIFRoZSA8b3B0aW9uPi0t c2FtcGxpbmctcmF0ZTwvb3B0aW9uPiBvcHRpb24KICAgIGNhbiBiZSB1c2VkIHRvIGxvZyBvbmx5 IGEgcmFuZG9tIHNhbXBsZSBvZiB0cmFuc2FjdGlvbnMuCkBAIC0xNjQ3LDcgKzE3MzcsNyBAQCBF TkQ7CiAgICBmb3JtYXQgaXMgdXNlZCBmb3IgdGhlIGxvZyBmaWxlczoKIAogPHN5bm9wc2lzPgot PHJlcGxhY2VhYmxlPmludGVydmFsX3N0YXJ0PC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPm51 bV90cmFuc2FjdGlvbnM8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+c3VtX2xhdGVuY3k8L3Jl cGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+c3VtX2xhdGVuY3lfMjwvcmVwbGFjZWFibGU+IDxyZXBs YWNlYWJsZT5taW5fbGF0ZW5jeTwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT5tYXhfbGF0ZW5j eTwvcmVwbGFjZWFibGU+IDxvcHRpb25hbD4gPHJlcGxhY2VhYmxlPnN1bV9sYWc8L3JlcGxhY2Vh YmxlPiA8cmVwbGFjZWFibGU+c3VtX2xhZ18yPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPm1p bl9sYWc8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+bWF4X2xhZzwvcmVwbGFjZWFibGU+IDxv cHRpb25hbD4gPHJlcGxhY2VhYmxlPnNraXBwZWQ8L3JlcGxhY2VhYmxlPiA8L29wdGlvbmFsPiA8 L29wdGlvbmFsPgorPHJlcGxhY2VhYmxlPmludGVydmFsX3N0YXJ0PC9yZXBsYWNlYWJsZT4gPHJl cGxhY2VhYmxlPm51bV90cmFuc2FjdGlvbnM8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+c3Vt X2xhdGVuY3k8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+c3VtX2xhdGVuY3lfMjwvcmVwbGFj ZWFibGU+IDxyZXBsYWNlYWJsZT5taW5fbGF0ZW5jeTwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJs ZT5tYXhfbGF0ZW5jeTwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT5mYWlsZWRfdHg8L3JlcGxh Y2VhYmxlPiA8cmVwbGFjZWFibGU+aW5fZmFpbGVkX3R4PC9yZXBsYWNlYWJsZT4gPG9wdGlvbmFs PiA8cmVwbGFjZWFibGU+c3VtX2xhZzwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT5zdW1fbGFn XzI8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+bWluX2xhZzwvcmVwbGFjZWFibGU+IDxyZXBs YWNlYWJsZT5tYXhfbGFnPC9yZXBsYWNlYWJsZT4gPG9wdGlvbmFsPiA8cmVwbGFjZWFibGU+c2tp cHBlZDwvcmVwbGFjZWFibGU+IDwvb3B0aW9uYWw+IDwvb3B0aW9uYWw+IDxvcHRpb25hbD4gPHJl cGxhY2VhYmxlPnJldHJpZWRfdHg8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+cmV0cmllczwv cmVwbGFjZWFibGU+IDwvb3B0aW9uYWw+CiA8L3N5bm9wc2lzPgogCiAgICB3aGVyZQpAQCAtMTY2 MSw3ICsxNzUxLDEzIEBAIEVORDsKICAgIHRyYW5zYWN0aW9uIGxhdGVuY2llcyB3aXRoaW4gdGhl IGludGVydmFsLAogICAgPHJlcGxhY2VhYmxlPm1pbl9sYXRlbmN5PC9yZXBsYWNlYWJsZT4gaXMg dGhlIG1pbmltdW0gbGF0ZW5jeSB3aXRoaW4gdGhlIGludGVydmFsLAogICAgYW5kCi0gICA8cmVw bGFjZWFibGU+bWF4X2xhdGVuY3k8L3JlcGxhY2VhYmxlPiBpcyB0aGUgbWF4aW11bSBsYXRlbmN5 IHdpdGhpbiB0aGUgaW50ZXJ2YWwuCisgICA8cmVwbGFjZWFibGU+bWF4X2xhdGVuY3k8L3JlcGxh Y2VhYmxlPiBpcyB0aGUgbWF4aW11bSBsYXRlbmN5IHdpdGhpbiB0aGUgaW50ZXJ2YWwsCisgICA8 cmVwbGFjZWFibGU+ZmFpbGVkX3R4PC9yZXBsYWNlYWJsZT4gaXMgdGhlIG51bWJlciBvZiB0cmFu c2FjdGlvbnMgdGhhdCBlbmRlZAorICAgd2l0aCBhIGZhaWxlZCBTUUwgb3IgbWV0YSBjb21tYW5k IHdpdGhpbiB0aGUgaW50ZXJ2YWwsCisgICA8cmVwbGFjZWFibGU+aW5fZmFpbGVkX3R4PC9yZXBs YWNlYWJsZT4gaXMgdGhlIG51bWJlciBvZiB0cmFuc2FjdGlvbnMgdGhhdAorICAgZW5kZWQgd2l0 aCBhbiBlcnJvciAiaW4gZmFpbGVkIFNRTCB0cmFuc2FjdGlvbiBibG9jayIgKHNlZQorICAgPHhy ZWYgbGlua2VuZD0iZXJyb3JzLWFuZC1yZXRyaWVzIiBlbmR0ZXJtPSJlcnJvcnMtYW5kLXJldHJp ZXMtdGl0bGUiLz4KKyAgIGZvciBtb3JlIGluZm9ybWF0aW9uKS4KICAgIFRoZSBuZXh0IGZpZWxk cywKICAgIDxyZXBsYWNlYWJsZT5zdW1fbGFnPC9yZXBsYWNlYWJsZT4sIDxyZXBsYWNlYWJsZT5z dW1fbGFnXzI8L3JlcGxhY2VhYmxlPiwgPHJlcGxhY2VhYmxlPm1pbl9sYWc8L3JlcGxhY2VhYmxl PiwKICAgIGFuZCA8cmVwbGFjZWFibGU+bWF4X2xhZzwvcmVwbGFjZWFibGU+LCBhcmUgb25seSBw cmVzZW50IGlmIHRoZSA8b3B0aW9uPi0tcmF0ZTwvb3B0aW9uPgpAQCAtMTY2OSwyMSArMTc2NSwy OCBAQCBFTkQ7CiAgICBUaGV5IHByb3ZpZGUgc3RhdGlzdGljcyBhYm91dCB0aGUgdGltZSBlYWNo IHRyYW5zYWN0aW9uIGhhZCB0byB3YWl0IGZvciB0aGUKICAgIHByZXZpb3VzIG9uZSB0byBmaW5p c2gsIGkuZS4gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBlYWNoIHRyYW5zYWN0aW9uJ3MKICAgIHNj aGVkdWxlZCBzdGFydCB0aW1lIGFuZCB0aGUgdGltZSBpdCBhY3R1YWxseSBzdGFydGVkLgotICAg VGhlIHZlcnkgbGFzdCBmaWVsZCwgPHJlcGxhY2VhYmxlPnNraXBwZWQ8L3JlcGxhY2VhYmxlPiwK KyAgIFRoZSBuZXh0IGZpZWxkLCA8cmVwbGFjZWFibGU+c2tpcHBlZDwvcmVwbGFjZWFibGU+LAog ICAgaXMgb25seSBwcmVzZW50IGlmIHRoZSA8b3B0aW9uPi0tbGF0ZW5jeS1saW1pdDwvb3B0aW9u PiBvcHRpb24gaXMgdXNlZCwgdG9vLgogICAgSXQgY291bnRzIHRoZSBudW1iZXIgb2YgdHJhbnNh Y3Rpb25zIHNraXBwZWQgYmVjYXVzZSB0aGV5IHdvdWxkIGhhdmUKICAgIHN0YXJ0ZWQgdG9vIGxh dGUuCisgICBUaGUgPHJlcGxhY2VhYmxlPnJldHJpZWRfdHg8L3JlcGxhY2VhYmxlPiBhbmQKKyAg IDxyZXBsYWNlYWJsZT5yZXRyaWVzPC9yZXBsYWNlYWJsZT4gZmllbGRzIGFyZSBvbmx5IHByZXNl bnQgaWYgdGhlIG1heGltdW0KKyAgIG51bWJlciBvZiB0cmllcyBmb3IgdHJhbnNhY3Rpb25zIGlz IG1vcmUgdGhhbiAxCisgICAoPG9wdGlvbj4tLW1heC10cmllczwvb3B0aW9uPikgYW5kL29yIHRo ZSBtYXhpbXVtIHRpbWUgb2YgdHJpZXMgZm9yCisgICB0cmFuc2FjdGlvbnMgaXMgdXNlZCAoPG9w dGlvbj4tLWxhdGVuY3ktbGltaXQ8L29wdGlvbj4pLiBUaGV5IHJlcG9ydCB0aGUKKyAgIG51bWJl ciBvZiByZXRyaWVkIHRyYW5zYWN0aW9ucyBhbmQgdGhlIHN1bSBvZiBhbGwgdGhlIHJldHJpZXMg YWZ0ZXIKKyAgIHNlcmlhbGl6YXRpb24gb3IgZGVhZGxvY2sgZmFpbHVyZXMgd2l0aGluIHRoZSBp bnRlcnZhbC4KICAgIEVhY2ggdHJhbnNhY3Rpb24gaXMgY291bnRlZCBpbiB0aGUgaW50ZXJ2YWwg d2hlbiBpdCB3YXMgY29tbWl0dGVkLgogICA8L3BhcmE+CiAKICAgPHBhcmE+CiAgICBIZXJlIGlz IHNvbWUgZXhhbXBsZSBvdXRwdXQ6CiA8c2NyZWVuPgotMTM0NTgyODUwMSA1NjAxIDE1NDI3NDQg NDgzNTUyNDE2IDYxIDI1NzMKLTEzNDU4Mjg1MDMgNzg4NCAxOTc5ODEyIDU2NTgwNjczNiA2MCAx NDc5Ci0xMzQ1ODI4NTA1IDcyMDggMTk3OTQyMiA1NjcyNzc1NTIgNTkgMTM5MQotMTM0NTgyODUw NyA3Njg1IDE5ODAyNjggNTY5Nzg0NzE0IDYwIDEzOTgKLTEzNDU4Mjg1MDkgNzA3MyAxOTc5Nzc5 IDU3MzQ4OTk0MSAyMzYgMTQxMQorMTM0NTgyODUwMSA1NjAxIDE1NDI3NDQgNDgzNTUyNDE2IDYx IDI1NzMgMCAwCisxMzQ1ODI4NTAzIDc4ODQgMTk3OTgxMiA1NjU4MDY3MzYgNjAgMTQ3OSAwIDAK KzEzNDU4Mjg1MDUgNzIwOCAxOTc5NDIyIDU2NzI3NzU1MiA1OSAxMzkxIDAgMAorMTM0NTgyODUw NyA3Njg1IDE5ODAyNjggNTY5Nzg0NzE0IDYwIDEzOTggMCAwCisxMzQ1ODI4NTA5IDcwNzMgMTk3 OTc3OSA1NzM0ODk5NDEgMjM2IDE0MTEgMCAwCiA8L3NjcmVlbj48L3BhcmE+CiAKICAgPHBhcmE+ CkBAIC0xNjk1LDE1ICsxNzk4LDU0IEBAIEVORDsKICA8L3JlZnNlY3QyPgogCiAgPHJlZnNlY3Qy PgotICA8dGl0bGU+UGVyLVN0YXRlbWVudCBMYXRlbmNpZXM8L3RpdGxlPgorICA8dGl0bGU+UGVy LVN0YXRlbWVudCBSZXBvcnQ8L3RpdGxlPgorCisgIDxwYXJhPgorICAgV2l0aCB0aGUgPG9wdGlv bj4tcjwvb3B0aW9uPiBvcHRpb24sIDxhcHBsaWNhdGlvbj5wZ2JlbmNoPC9hcHBsaWNhdGlvbj4K KyAgIGNvbGxlY3RzIHRoZSBmb2xsb3dpbmcgc3RhdGlzdGljcyBmb3IgZWFjaCBzdGF0ZW1lbnQ6 CisgICA8aXRlbWl6ZWRsaXN0PgorICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAg ICAgICA8bGl0ZXJhbD5sYXRlbmN5PC9saXRlcmFsPiAmbWRhc2g7IGVsYXBzZWQgdHJhbnNhY3Rp b24gdGltZSBmb3IgZWFjaAorICAgICAgICAgc3RhdGVtZW50LiA8YXBwbGljYXRpb24+cGdiZW5j aDwvYXBwbGljYXRpb24+IHJlcG9ydHMgYW4gYXZlcmFnZSB2YWx1ZQorICAgICAgICAgb2YgYWxs IHN1Y2Nlc3NmdWwgcnVucyBvZiB0aGUgc3RhdGVtZW50LgorICAgICAgIDwvcGFyYT4KKyAgICAg PC9saXN0aXRlbT4KKyAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICAgVGhl IG51bWJlciBvZiBlcnJvcnMgaW4gdGhpcyBzdGF0ZW1lbnQuIFNlZQorICAgICAgICAgPHhyZWYg bGlua2VuZD0iZXJyb3JzLWFuZC1yZXRyaWVzIiBlbmR0ZXJtPSJlcnJvcnMtYW5kLXJldHJpZXMt dGl0bGUiLz4KKyAgICAgICAgIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgIDwvcGFyYT4K KyAgICAgPC9saXN0aXRlbT4KKyAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAg ICAgVGhlIG51bWJlciBvZiBlcnJvcnMgImluIGZhaWxlZCBTUUwgdHJhbnNhY3Rpb24iIGluIHRo aXMgc3RhdGVtZW50LiBTZWUKKyAgICAgICAgIDx4cmVmIGxpbmtlbmQ9ImVycm9ycy1hbmQtcmV0 cmllcyIgZW5kdGVybT0iZXJyb3JzLWFuZC1yZXRyaWVzLXRpdGxlIi8+CisgICAgICAgICBmb3Ig bW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICA8L3BhcmE+CisgICAgIDwvbGlzdGl0ZW0+CisgICAg IDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgIFRoZSBudW1iZXIgb2YgcmV0cmll cyBhZnRlciBhIHNlcmlhbGl6YXRpb24gb3IgYSBkZWFkbG9jayBmYWlsdXJlIGluCisgICAgICAg ICB0aGlzIHN0YXRlbWVudC4gU2VlIDx4cmVmIGxpbmtlbmQ9ImVycm9ycy1hbmQtcmV0cmllcyIK KyAgICAgICAgIGVuZHRlcm09ImVycm9ycy1hbmQtcmV0cmllcy10aXRsZSIvPiBmb3IgbW9yZSBp bmZvcm1hdGlvbi4KKyAgICAgICA8L3BhcmE+CisgICAgIDwvbGlzdGl0ZW0+CisgICA8L2l0ZW1p emVkbGlzdD4KKyAgPC9wYXJhPgogCiAgIDxwYXJhPgotICAgV2l0aCB0aGUgPG9wdGlvbj4tcjwv b3B0aW9uPiBvcHRpb24sIDxhcHBsaWNhdGlvbj5wZ2JlbmNoPC9hcHBsaWNhdGlvbj4gY29sbGVj dHMKLSAgIHRoZSBlbGFwc2VkIHRyYW5zYWN0aW9uIHRpbWUgb2YgZWFjaCBzdGF0ZW1lbnQgZXhl Y3V0ZWQgYnkgZXZlcnkKLSAgIGNsaWVudC4gIEl0IHRoZW4gcmVwb3J0cyBhbiBhdmVyYWdlIG9m IHRob3NlIHZhbHVlcywgcmVmZXJyZWQgdG8KLSAgIGFzIHRoZSBsYXRlbmN5IGZvciBlYWNoIHN0 YXRlbWVudCwgYWZ0ZXIgdGhlIGJlbmNobWFyayBoYXMgZmluaXNoZWQuCisgICBUaGUgcmVwb3J0 IGRpc3BsYXlzIHRoZSBjb2x1bW5zIHdpdGggc3RhdGlzdGljcyBvbiBlcnJvcnMgYW5kIHJldHJp ZXMgb25seSBpZgorICAgdGhlIGN1cnJlbnQgPGFwcGxpY2F0aW9uPnBnYmVuY2g8L2FwcGxpY2F0 aW9uPiBydW4gaGFzIGFuIGVycm9yIG9yIHJldHJ5LAorICAgcmVzcGVjdGl2ZWx5LgogICA8L3Bh cmE+CiAKKyAgIDxwYXJhPgorICAgQWxsIHZhbHVlcyBhcmUgY29tcHV0ZWQgZm9yIGVhY2ggc3Rh dGVtZW50IGV4ZWN1dGVkIGJ5IGV2ZXJ5IGNsaWVudCBhbmQgYXJlCisgICByZXBvcnRlZCBhZnRl ciB0aGUgYmVuY2htYXJrIGhhcyBmaW5pc2hlZC4KKyAgIDwvcGFyYT4KKwogICA8cGFyYT4KICAg IEZvciB0aGUgZGVmYXVsdCBzY3JpcHQsIHRoZSBvdXRwdXQgd2lsbCBsb29rIHNpbWlsYXIgdG8g dGhpczoKIDxzY3JlZW4+CkBAIC0xNzE1LDYgKzE4NTcsNyBAQCBudW1iZXIgb2YgY2xpZW50czog MTAKIG51bWJlciBvZiB0aHJlYWRzOiAxCiBudW1iZXIgb2YgdHJhbnNhY3Rpb25zIHBlciBjbGll bnQ6IDEwMDAKIG51bWJlciBvZiB0cmFuc2FjdGlvbnMgYWN0dWFsbHkgcHJvY2Vzc2VkOiAxMDAw MC8xMDAwMAorbWF4aW11bSBudW1iZXIgb2YgdHJpZXM6IDEKIGxhdGVuY3kgYXZlcmFnZSA9IDE1 Ljg0NCBtcwogbGF0ZW5jeSBzdGRkZXYgPSAyLjcxNSBtcwogdHBzID0gNjE4Ljc2NDU1NSAoaW5j bHVkaW5nIGNvbm5lY3Rpb25zIGVzdGFibGlzaGluZykKQEAgLTE3MzIsMTAgKzE4NzUsNTAgQEAg c3RhdGVtZW50IGxhdGVuY2llcyBpbiBtaWxsaXNlY29uZHM6CiAgICAgICAgIDAuMzcxICBJTlNF UlQgSU5UTyBwZ2JlbmNoX2hpc3RvcnkgKHRpZCwgYmlkLCBhaWQsIGRlbHRhLCBtdGltZSkgVkFM VUVTICg6dGlkLCA6YmlkLCA6YWlkLCA6ZGVsdGEsIENVUlJFTlRfVElNRVNUQU1QKTsKICAgICAg ICAgMS4yMTIgIEVORDsKIDwvc2NyZWVuPgorCisgICBBbm90aGVyIGV4YW1wbGUgb2Ygb3V0cHV0 IGZvciB0aGUgZGVmYXVsdCBzY3JpcHQgdXNpbmcgc2VyaWFsaXphYmxlIGRlZmF1bHQKKyAgIHRy YW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbCAoPGNvbW1hbmQ+UEdPUFRJT05TPSctYworICAgZGVm YXVsdF90cmFuc2FjdGlvbl9pc29sYXRpb249c2VyaWFsaXphYmxlJyBwZ2JlbmNoIC4uLjwvY29t bWFuZD4pOgorPHNjcmVlbj4KK3N0YXJ0aW5nIHZhY3V1bS4uLmVuZC4KK3RyYW5zYWN0aW9uIHR5 cGU6ICZsdDtidWlsdGluOiBUUEMtQiAoc29ydCBvZikmZ3Q7CitzY2FsaW5nIGZhY3RvcjogMQor cXVlcnkgbW9kZTogc2ltcGxlCitudW1iZXIgb2YgY2xpZW50czogMTAKK251bWJlciBvZiB0aHJl YWRzOiAxCitudW1iZXIgb2YgdHJhbnNhY3Rpb25zIHBlciBjbGllbnQ6IDEwMDAKK251bWJlciBv ZiB0cmFuc2FjdGlvbnMgYWN0dWFsbHkgcHJvY2Vzc2VkOiA0NDczLzEwMDAwCitudW1iZXIgb2Yg ZXJyb3JzOiA1NTI3ICg1NS4yNzAlKQorbnVtYmVyIG9mIHJldHJpZWQ6IDc0NjcgKDc0LjY3MCUp CitudW1iZXIgb2YgcmV0cmllczogMjU3MjQ0CittYXhpbXVtIG51bWJlciBvZiB0cmllczogMTAw CitudW1iZXIgb2YgdHJhbnNhY3Rpb25zIGFib3ZlIHRoZSAxMDAuMCBtcyBsYXRlbmN5IGxpbWl0 OiA1NzY2LzEwMDAwICg1Ny42NjAgJSkgKGluY2x1ZGluZyBlcnJvcnMpCitsYXRlbmN5IGF2ZXJh Z2UgPSA0MS4xNjkgbXMKK2xhdGVuY3kgc3RkZGV2ID0gNTEuNzgzIG1zCit0cHMgPSA1MC4zMjI0 OTQgKGluY2x1ZGluZyBjb25uZWN0aW9ucyBlc3RhYmxpc2hpbmcpCit0cHMgPSA1MC4zMjQ1OTUg KGV4Y2x1ZGluZyBjb25uZWN0aW9ucyBlc3RhYmxpc2hpbmcpCitzdGF0ZW1lbnQgbGF0ZW5jaWVz IGluIG1pbGxpc2Vjb25kcywgZXJyb3JzIGFuZCByZXRyaWVzOgorICAwLjAwNCAgICAgMCAgICAg ICAwICBcc2V0IGFpZCByYW5kb20oMSwgMTAwMDAwICogOnNjYWxlKQorICAwLjAwMCAgICAgMCAg ICAgICAwICBcc2V0IGJpZCByYW5kb20oMSwgMSAqIDpzY2FsZSkKKyAgMC4wMDAgICAgIDAgICAg ICAgMCAgXHNldCB0aWQgcmFuZG9tKDEsIDEwICogOnNjYWxlKQorICAwLjAwMCAgICAgMCAgICAg ICAwICBcc2V0IGRlbHRhIHJhbmRvbSgtNTAwMCwgNTAwMCkKKyAgMC4yMTMgICAgIDAgICAgICAg MCAgQkVHSU47CisgIDAuMzkzICAgICAwICAgICAgIDAgIFVQREFURSBwZ2JlbmNoX2FjY291bnRz CisgICAgICAgICAgICAgICAgICAgICAgIFNFVCBhYmFsYW5jZSA9IGFiYWxhbmNlICsgOmRlbHRh IFdIRVJFIGFpZCA9IDphaWQ7CisgIDAuMzMyICAgICAwICAgICAgIDAgIFNFTEVDVCBhYmFsYW5j ZSBGUk9NIHBnYmVuY2hfYWNjb3VudHMgV0hFUkUgYWlkID0gOmFpZDsKKyAgMC40MDkgIDQ5NzEg IDI1MDI2NSAgVVBEQVRFIHBnYmVuY2hfdGVsbGVycworICAgICAgICAgICAgICAgICAgICAgICBT RVQgdGJhbGFuY2UgPSB0YmFsYW5jZSArIDpkZWx0YSBXSEVSRSB0aWQgPSA6dGlkOworICAwLjMx MSAgIDU1NiAgICA2OTc1ICBVUERBVEUgcGdiZW5jaF9icmFuY2hlcworICAgICAgICAgICAgICAg ICAgICAgICBTRVQgYmJhbGFuY2UgPSBiYmFsYW5jZSArIDpkZWx0YSBXSEVSRSBiaWQgPSA6Ymlk OworICAwLjI5OSAgICAgMCAgICAgICAwICBJTlNFUlQgSU5UTyBwZ2JlbmNoX2hpc3RvcnkKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aWQsIGJpZCwgYWlkLCBkZWx0YSwgbXRpbWUp CisgICAgICAgICAgICAgICAgICAgICAgIFZBTFVFUyAoOnRpZCwgOmJpZCwgOmFpZCwgOmRlbHRh LCBDVVJSRU5UX1RJTUVTVEFNUCk7CisgIDAuNTIwICAgICAwICAgICAgIDQgIEVORDsKKzwvc2Ny ZWVuPgogICA8L3BhcmE+CiAKICAgPHBhcmE+Ci0gICBJZiBtdWx0aXBsZSBzY3JpcHQgZmlsZXMg YXJlIHNwZWNpZmllZCwgdGhlIGF2ZXJhZ2VzIGFyZSByZXBvcnRlZAorICAgSWYgbXVsdGlwbGUg c2NyaXB0IGZpbGVzIGFyZSBzcGVjaWZpZWQsIGFsbCBzdGF0aXN0aWNzIGFyZSByZXBvcnRlZAog ICAgc2VwYXJhdGVseSBmb3IgZWFjaCBzY3JpcHQgZmlsZS4KICAgPC9wYXJhPgogCkBAIC0xNzQ5 LDYgKzE5MzIsNzggQEAgc3RhdGVtZW50IGxhdGVuY2llcyBpbiBtaWxsaXNlY29uZHM6CiAgIDwv cGFyYT4KICA8L3JlZnNlY3QyPgogCisgPHJlZnNlY3QyIGlkPSJlcnJvcnMtYW5kLXJldHJpZXMi PgorICA8dGl0bGUgaWQ9ImVycm9ycy1hbmQtcmV0cmllcy10aXRsZSI+RXJyb3JzIGFuZCBTZXJp YWxpemF0aW9uL0RlYWRsb2NrIFJldHJpZXM8L3RpdGxlPgorCisgIDxwYXJhPgorICAgQ2xpZW50 J3MgcnVuIGlzIGFib3J0ZWQgb25seSBpbiBjYXNlIG9mIGEgc2VyaW91cyBlcnJvciwgZm9yIGV4 YW1wbGUsIHRoZQorICAgY29ubmVjdGlvbiB3aXRoIHRoZSBiYWNrZW5kIHdhcyBsb3N0LiBPdGhl cndpc2UgaWYgdGhlIGV4ZWN1dGlvbiBvZiBTUUwgb3IKKyAgIG1ldGEgY29tbWFuZCBmYWlscywg dGhlIGNsaWVudCdzIHJ1biBjb250aW51ZXMgbm9ybWFsbHkgdW50aWwgdGhlIGVuZCBvZiB0aGUK KyAgIGN1cnJlbnQgc2NyaXB0IGV4ZWN1dGlvbiAoaXQgaXMgYXNzdW1lZCB0aGF0IG9uZSB0cmFu c2FjdGlvbiBzY3JpcHQgY29udGFpbnMKKyAgIG9ubHkgb25lIHRyYW5zYWN0aW9uOyBzZWUgPHhy ZWYgbGlua2VuZD0idHJhbnNhY3Rpb25zLWFuZC1zY3JpcHRzIgorICAgZW5kdGVybT0idHJhbnNh Y3Rpb25zLWFuZC1zY3JpcHRzLXRpdGxlIi8+IGZvciBtb3JlIGluZm9ybWF0aW9uKS4KKyAgIFRy YW5zYWN0aW9ucyB3aXRoIHNlcmlhbGl6YXRpb24gb3IgZGVhZGxvY2sgZmFpbHVyZXMgYXJlIHJv bGxlZCBiYWNrIGFuZAorICAgcmVwZWF0ZWQgdW50aWwgdGhleSBjb21wbGV0ZSBzdWNjZXNzZnVs bHkgb3IgcmVhY2ggdGhlIG1heGltdW0gbnVtYmVyIG9mCisgICB0cmllcyAoc3BlY2lmaWVkIGJ5 IHRoZSA8b3B0aW9uPi0tbWF4LXRyaWVzPC9vcHRpb24+IG9wdGlvbikgLyB0aGUgbWF4aW11bQor ICAgdGltZSBvZiB0cmllcyAoc3BlY2lmaWVkIGJ5IHRoZSA8b3B0aW9uPi0tbGF0ZW5jeS1saW1p dDwvb3B0aW9uPiBvcHRpb24pLiBJZgorICAgdGhlIGxhc3QgdHJhbnNhY3Rpb24gcnVuIGZhaWxz LCB0aGlzIHRyYW5zYWN0aW9uIHdpbGwgYmUgcmVwb3J0ZWQgYXMgZmFpbGVkLAorICAgYW5kIHRo ZSBjbGllbnQgdmFyaWFibGVzIHdpbGwgYmUgc2V0IGFzIHRoZXkgd2VyZSBiZWZvcmUgdGhlIGZp cnN0IHJ1biBvZgorICAgdGhpcyB0cmFuc2FjdGlvbi4KKyAgPC9wYXJhPgorCisgIDxub3RlPgor ICAgPHBhcmE+CisgICAgQmUgY2FyZWZ1bCB3aGVuIHJlcGVhdGluZyBzY3JpcHRzIHRoYXQgY29u dGFpbiBtdWx0aXBsZSB0cmFuc2FjdGlvbnM6IHRoZQorICAgIHNjcmlwdCBpcyBhbHdheXMgcmV0 cmllZCBjb21wbGV0ZWx5LCBzbyB0aGUgc3VjY2Vzc2Z1bCB0cmFuc2FjdGlvbnMgY2FuIGJlCisg ICAgcGVyZm9ybWVkIHNldmVyYWwgdGltZXMuCisgICA8L3BhcmE+CisgICA8cGFyYT4KKyAgICBC ZSBjYXJlZnVsIHdoZW4gcmVwZWF0aW5nIHRyYW5zYWN0aW9ucyB3aXRoIHNoZWxsIGNvbW1hbmRz LiBVbmxpa2UgdGhlCisgICAgcmVzdWx0cyBvZiBTUUwgY29tbWFuZHMsIHRoZSByZXN1bHRzIG9m IHNoZWxsIGNvbW1hbmRzIGFyZSBub3Qgcm9sbGVkIGJhY2ssCisgICAgZXhjZXB0IGZvciB0aGUg dmFyaWFibGUgdmFsdWUgb2YgdGhlIDxjb21tYW5kPlxzZXRzaGVsbDwvY29tbWFuZD4gY29tbWFu ZC4KKyAgIDwvcGFyYT4KKyAgIDxwYXJhPgorICAgIElmIGEgZmFpbGVkIHRyYW5zYWN0aW9uIGJs b2NrIGRvZXMgbm90IHRlcm1pbmF0ZSBpbiB0aGUgY3VycmVudCBzY3JpcHQsIHRoZQorICAgIGNv bW1hbmRzIG9mIHRoZSBmb2xsb3dpbmcgc2NyaXB0cyBhcmUgcHJvY2Vzc2VkIGFzIHVzdWFsIHNv IHlvdSBjYW4gZ2V0IGEKKyAgICBsb3Qgb2YgZXJyb3JzIG9mIHR5cGUgImluIGZhaWxlZCBTUUwg dHJhbnNhY3Rpb24iICh3aGVuIHRoZSBjdXJyZW50IFNRTAorICAgIHRyYW5zYWN0aW9uIGlzIGFi b3J0ZWQgYW5kIGNvbW1hbmRzIGlnbm9yZWQgdW50aWwgZW5kIG9mIHRyYW5zYWN0aW9uIGJsb2Nr KS4KKyAgICBJbiBzdWNoIGNhc2VzIHlvdSBjYW4gdXNlIHNlcGFyYXRlIHN0YXRpc3RpY3Mgb2Yg dGhlc2UgZXJyb3JzIGluIGFsbAorICAgIHJlcG9ydHMuCisgICA8L3BhcmE+CisgIDwvbm90ZT4K KworICA8cGFyYT4KKyAgIFRoZSBsYXRlbmN5IG9mIGEgc3VjY2Vzc2Z1bCB0cmFuc2FjdGlvbiBp bmNsdWRlcyB0aGUgZW50aXJlIHRpbWUgb2YKKyAgIHRyYW5zYWN0aW9uIGV4ZWN1dGlvbiB3aXRo IHJvbGxiYWNrcyBhbmQgcmV0cmllcy4gVGhlIGxhdGVuY3kgZm9yIGZhaWxlZAorICAgdHJhbnNh Y3Rpb25zIGFuZCBjb21tYW5kcyBpcyBub3QgY29tcHV0ZWQgc2VwYXJhdGVseS4KKyAgPC9wYXJh PgorCisgIDxwYXJhPgorICAgVGhlIG1haW4gcmVwb3J0IGNvbnRhaW5zIHRoZSBudW1iZXIgb2Yg ZmFpbGVkIHRyYW5zYWN0aW9ucyBpZiBpdCBpcyBub24temVyby4KKyAgIElmIHRoZSB0b3RhbCBu dW1iZXIgb2YgdHJhbnNhY3Rpb25zIGVuZGVkIHdpdGggYW4gZXJyb3IgImluIGZhaWxlZCBTUUwK KyAgIHRyYW5zYWN0aW9uIGJsb2NrIiBpcyBub24temVybywgdGhlIG1haW4gcmVwb3J0IGFsc28g Y29udGFpbnMgaXQuIElmIHRoZQorICAgdG90YWwgbnVtYmVyIG9mIHJldHJpZWQgdHJhbnNhY3Rp b25zIGlzIG5vbi16ZXJvLCB0aGUgbWFpbiByZXBvcnQgYWxzbworICAgY29udGFpbnMgdGhlIHN0 YXRpc3RpY3MgcmVsYXRlZCB0byByZXRyaWVzOiB0aGUgdG90YWwgbnVtYmVyIG9mIHJldHJpZWQK KyAgIHRyYW5zYWN0aW9ucyBhbmQgdG90YWwgbnVtYmVyIG9mIHJldHJpZXMgKHVzZSB0aGUgb3B0 aW9ucworICAgPG9wdGlvbj4tLW1heC10cmllczwvb3B0aW9uPiBhbmQvb3IgPG9wdGlvbj4tLWxh dGVuY3ktbGltaXQ8L29wdGlvbj4gdG8gbWFrZQorICAgaXQgcG9zc2libGUpLiBUaGUgcGVyLXN0 YXRlbWVudCByZXBvcnQgaW5oZXJpdHMgYWxsIGNvbHVtbnMgZnJvbSB0aGUgbWFpbgorICAgcmVw b3J0LiBOb3RlIHRoYXQgaWYgYSBmYWlsdXJlL2Vycm9yIG9jY3VycywgdGhlIGZvbGxvd2luZyBm YWlsdXJlcy9lcnJvcnMgaW4KKyAgIHRoZSBjdXJyZW50IHNjcmlwdCBleGVjdXRpb24gYXJlIG5v dCBzaG93biBpbiB0aGUgcmVwb3J0cy4gVGhlIHJldHJ5IGlzIG9ubHkKKyAgIHJlcG9ydGVkIGZv ciB0aGUgZmlyc3QgY29tbWFuZCB3aGVyZSB0aGUgZmFpbHVyZSBvY2N1cmVkIGR1cmluZyB0aGUg Y3VycmVudAorICAgc2NyaXB0IGV4ZWN1dGlvbi4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAg SWYgeW91IHdhbnQgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBmYWlsdXJlcyBvciBlcnJvcnMgYnkg dHlwZSAoaW5jbHVkaW5nCisgICB3aGljaCBsaW1pdCBmb3IgcmV0cmllcyB3YXMgdmlvbGF0ZWQg YW5kIGhvdyBmYXIgaXQgd2FzIGV4Y2VlZGVkIGZvciB0aGUKKyAgIHNlcmlhbGl6YXRpb24vZGVh ZGxvY2sgZXJyb3JzKSwgdXNlIHRoZSA8YXBwbGljYXRpb24+cGdiZW5jaDwvYXBwbGljYXRpb24+ CisgICBkZWJ1Z2dpbmcgb3V0cHV0IGNyZWF0ZWQgd2l0aCB0aGUgb3B0aW9uIDxvcHRpb24+LS1k ZWJ1Zzwvb3B0aW9uPiBhbmQgd2l0aAorICAgdGhlIGRlYnVnZ2luZyBsZXZlbCA8bGl0ZXJhbD5m YWlsczwvbGl0ZXJhbD4gb3IgPGxpdGVyYWw+YWxsPC9saXRlcmFsPi4gVGhlCisgICBmaXJzdCB2 YXJpYW50IGlzIHJlY29tbWVuZGVkIGZvciB0aGlzIHB1cnBvc2UgYmVjYXVzZSB3aXRoIGluIHRo ZSBzZWNvbmQgY2FzZQorICAgdGhlIGRlYnVnZ2luZyBvdXRwdXQgY2FuIGJlIHZlcnkgbGFyZ2Uu CisgIDwvcGFyYT4KKyA8L3JlZnNlY3QyPgorCiAgPHJlZnNlY3QyPgogICA8dGl0bGU+R29vZCBQ cmFjdGljZXM8L3RpdGxlPgogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5j IGIvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYwppbmRleCBkMTAwY2VlLi41NzQ5NWQ2IDEwMDY0 NAotLS0gYS9zcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5jCisrKyBiL3NyYy9iaW4vcGdiZW5jaC9w Z2JlbmNoLmMKQEAgLTU5LDYgKzU5LDkgQEAKIAogI2luY2x1ZGUgInBnYmVuY2guaCIKIAorI2Rl ZmluZSBFUlJDT0RFX0lOX0ZBSUxFRF9TUUxfVFJBTlNBQ1RJT04gICIyNVAwMiIKKyNkZWZpbmUg RVJSQ09ERV9UX1JfU0VSSUFMSVpBVElPTl9GQUlMVVJFICAiNDAwMDEiCisjZGVmaW5lIEVSUkNP REVfVF9SX0RFQURMT0NLX0RFVEVDVEVEICAiNDBQMDEiCiAjZGVmaW5lIEVSUkNPREVfVU5ERUZJ TkVEX1RBQkxFICAiNDJQMDEiCiAKIC8qCkBAIC0xODcsOSArMTkwLDI1IEBAIGJvb2wJCXByb2dy ZXNzX3RpbWVzdGFtcCA9IGZhbHNlOyAvKiBwcm9ncmVzcyByZXBvcnQgd2l0aCBVbml4IHRpbWUg Ki8KIGludAkJCW5jbGllbnRzID0gMTsJCS8qIG51bWJlciBvZiBjbGllbnRzICovCiBpbnQJCQlu dGhyZWFkcyA9IDE7CQkvKiBudW1iZXIgb2YgdGhyZWFkcyAqLwogYm9vbAkJaXNfY29ubmVjdDsJ CQkvKiBlc3RhYmxpc2ggY29ubmVjdGlvbiBmb3IgZWFjaCB0cmFuc2FjdGlvbiAqLwotYm9vbAkJ aXNfbGF0ZW5jaWVzOwkJLyogcmVwb3J0IHBlci1jb21tYW5kIGxhdGVuY2llcyAqLworYm9vbAkJ cmVwb3J0X3Blcl9jb21tYW5kID0gZmFsc2U7CS8qIHJlcG9ydCBwZXItY29tbWFuZCBsYXRlbmNp ZXMsIHJldHJpZXMKKwkJCQkJCQkJCQkgKiBhZnRlciB0aGUgZmFpbHVyZXMgYW5kIGVycm9ycwor CQkJCQkJCQkJCSAqIChmYWlsdXJlcyB3aXRob3V0IHJldHJ5aW5nKSAqLwogaW50CQkJbWFpbl9w aWQ7CQkJLyogbWFpbiBwcm9jZXNzIGlkIHVzZWQgaW4gbG9nIGZpbGVuYW1lICovCiAKKy8qCisg KiBUaGVyZSdyZSBkaWZmZXJlbnQgdHlwZXMgb2YgcmVzdHJpY3Rpb25zIGZvciBkZWNpZGluZyB0 aGF0IHRoZSBjdXJyZW50IGZhaWxlZAorICogdHJhbnNhY3Rpb24gY2FuIG5vIGxvbmdlciBiZSBy ZXRyaWVkIGFuZCBzaG91bGQgYmUgcmVwb3J0ZWQgYXMgZmFpbGVkOgorICogLSBtYXhfdHJpZXMg Y2FuIGJlIHVzZWQgdG8gbGltaXQgdGhlIG51bWJlciBvZiB0cmllczsKKyAqIC0gbGF0ZW5jeV9s aW1pdCBjYW4gYmUgdXNlZCB0byBsaW1pdCB0aGUgdG90YWwgdGltZSBvZiB0cmllcy4KKyAqCisg KiBUaGV5IGNhbiBiZSBjb21iaW5lZCB0b2dldGhlciwgYW5kIHlvdSBuZWVkIHRvIHVzZSBhdCBs ZWFzdCBvbmUgb2YgdGhlbSB0bworICogcmV0cnkgdGhlIGZhaWxlZCB0cmFuc2FjdGlvbnMuIEJ5 IGRlZmF1bHQsIGZhaWxlZCB0cmFuc2FjdGlvbnMgYXJlIG5vdAorICogcmV0cmllZCBhdCBhbGwu CisgKi8KK3VpbnQzMgkJbWF4X3RyaWVzID0gMDsJCS8qIHdlIGNhbm5vdCByZXRyeSBhIGZhaWxl ZCB0cmFuc2FjdGlvbiBpZiBpdHMKKwkJCQkJCQkJICogbnVtYmVyIG9mIHRyaWVzIHJlYWNoZXMg dGhpcyBtYXhpbXVtOyBpZiBpdHMKKwkJCQkJCQkJICogdmFsdWUgaXMgemVybywgaXQgaXMgbm90 IHVzZWQgKi8KKwogY2hhcgkgICAqcGdob3N0ID0gIiI7CiBjaGFyCSAgICpwZ3BvcnQgPSAiIjsK IGNoYXIJICAgKmxvZ2luID0gTlVMTDsKQEAgLTI0Myw5ICsyNjIsMjEgQEAgdHlwZWRlZiBzdHJ1 Y3QgU2ltcGxlU3RhdHMKIHR5cGVkZWYgc3RydWN0IFN0YXRzRGF0YQogewogCXRpbWVfdAkJc3Rh cnRfdGltZTsJCS8qIGludGVydmFsIHN0YXJ0IHRpbWUsIGZvciBhZ2dyZWdhdGVzICovCi0JaW50 NjQJCWNudDsJCQkvKiBudW1iZXIgb2YgdHJhbnNhY3Rpb25zLCBpbmNsdWRpbmcgc2tpcHBlZCAq LworCWludDY0CQljbnQ7CQkJLyogbnVtYmVyIG9mIHN1Y2Vzc2Z1bGwgdHJhbnNhY3Rpb25zLCBp bmNsdWRpbmcKKwkJCQkJCQkJICogc2tpcHBlZCAqLwogCWludDY0CQlza2lwcGVkOwkJLyogbnVt YmVyIG9mIHRyYW5zYWN0aW9ucyBza2lwcGVkIHVuZGVyIC0tcmF0ZQogCQkJCQkJCQkgKiBhbmQg LS1sYXRlbmN5LWxpbWl0ICovCisJaW50NjQJCXJldHJpZXM7CisJaW50NjQJCXJldHJpZWQ7CQkv KiBudW1iZXIgb2YgdHJhbnNhY3Rpb25zIHRoYXQgd2VyZSByZXRyaWVkCisJCQkJCQkJCSAqIGFm dGVyIGEgc2VyaWFsaXphdGlvbiBvciBhIGRlYWRsb2NrCisJCQkJCQkJCSAqIGZhaWx1cmUgKi8K KwlpbnQ2NAkJZXJyb3JzOwkJCS8qIG51bWJlciBvZiB0cmFuc2FjdGlvbnMgdGhhdCB3ZXJlIG5v dCByZXRyaWVkCisJCQkJCQkJCSAqIGFmdGVyIGEgc2VyaWFsaXphdGlvbiBvciBhIGRlYWRsb2Nr CisJCQkJCQkJCSAqIGZhaWx1cmUgb3IgaGFkIGFub3RoZXIgZXJyb3IgKGluY2x1ZGluZyBtZXRh CisJCQkJCQkJCSAqIGNvbW1hbmRzIGVycm9ycykgKi8KKwlpbnQ2NAkJZXJyb3JzX2luX2ZhaWxl ZF90eDsJLyogbnVtYmVyIG9mIHRyYW5zYWN0aW9ucyB0aGF0IGZhaWxlZCBpbgorCQkJCQkJCQkJ CSAqIGEgZXJyb3IKKwkJCQkJCQkJCQkgKiBFUlJDT0RFX0lOX0ZBSUxFRF9TUUxfVFJBTlNBQ1RJ T04gKi8KIAlTaW1wbGVTdGF0cyBsYXRlbmN5OwogCVNpbXBsZVN0YXRzIGxhZzsKIH0gU3RhdHNE YXRhOwpAQCAtMjY5LDYgKzMwMCwzNiBAQCB0eXBlZGVmIHN0cnVjdCBSYW5kb21TdGF0ZQogfSBS YW5kb21TdGF0ZTsKIAogLyoKKyAqIERhdGEgc3RydWN0dXJlIGZvciByZXBlYXRpbmcgYSB0cmFu c2FjdGlvbiBmcm9tIHRoZSBiZWdpbm5uaW5nIHdpdGggdGhlIHNhbWUKKyAqIHBhcmFtZXRlcnMu CisgKi8KK3R5cGVkZWYgc3RydWN0IFJldHJ5U3RhdGUKK3sKKwlSYW5kb21TdGF0ZSByYW5kb21f c3RhdGU7CS8qIHJhbmRvbSBzZWVkICovCisJVmFyaWFibGVzICAgdmFyaWFibGVzOwkJLyogY2xp ZW50IHZhcmlhYmxlcyAqLworfSBSZXRyeVN0YXRlOworCisvKgorICogRm9yIHRoZSBmYWlsdXJl cyBkdXJpbmcgc2NyaXB0IGV4ZWN1dGlvbi4KKyAqLwordHlwZWRlZiBlbnVtIEZhaWx1cmVTdGF0 dXMKK3sKKwlOT19GQUlMVVJFID0gMCwKKwlBTk9USEVSX0ZBSUxVUkUsCQkJLyogb3RoZXIgZmFp bHVyZXMgdGhhdCBhcmUgbm90IGxpc3RlZCBieQorCQkJCQkJCQkgKiB0aGVtc2VsdmVzIGJlbG93 ICovCisJU0VSSUFMSVpBVElPTl9GQUlMVVJFLAorCURFQURMT0NLX0ZBSUxVUkUsCisJSU5fRkFJ TEVEX1NRTF9UUkFOU0FDVElPTgorfSBGYWlsdXJlU3RhdHVzOworCit0eXBlZGVmIHN0cnVjdCBG YWlsdXJlCit7CisJRmFpbHVyZVN0YXR1cyBzdGF0dXM7CQkvKiB0eXBlIG9mIHRoZSBmYWlsdXJl ICovCisJaW50CQkJY29tbWFuZDsJCS8qIGNvbW1hbmQgbnVtYmVyIGluIHNjcmlwdCB3aGVyZSB0 aGUgZmFpbHVyZQorCQkJCQkJCQkgKiBvY2N1cnJlZCAqLworfSBGYWlsdXJlOworCisvKgogICog Q29ubmVjdGlvbiBzdGF0ZSBtYWNoaW5lIHN0YXRlcy4KICAqLwogdHlwZWRlZiBlbnVtCkBAIC0z MjMsNiArMzg0LDIyIEBAIHR5cGVkZWYgZW51bQogCUNTVEFURV9FTkRfQ09NTUFORCwKIAogCS8q CisJICogU3RhdGVzIGZvciB0cmFuc2FjdGlvbnMgd2l0aCBzZXJpYWxpemF0aW9uIG9yIGRlYWRs b2NrIGZhaWx1cmVzLgorCSAqCisJICogRmlyc3QsIHJlbWVtYmVyIHRoZSBmYWlsdXJlIGluIENT VEFURV9GQUlMVVJFLiBUaGVuIHByb2Nlc3Mgb3RoZXIKKwkgKiBjb21tYW5kcyBvZiB0aGUgZmFp bGVkIHRyYW5zYWN0aW9uIGlmIGFueSBhbmQgZ28gdG8gQ1NUQVRFX1JFVFJZLiBJZiB3ZQorCSAq IGNhbiByZS1leGVjdXRlIHRoZSB0cmFuc2FjdGlvbiBmcm9tIHRoZSB2ZXJ5IGJlZ2lubmluZywg cmVwb3J0IHRoaXMgYXMgYQorCSAqIGZhaWx1cmUsIHNldCB0aGUgc2FtZSBwYXJhbWV0ZXJzIGZv ciB0aGUgdHJhbnNhY3Rpb24gZXhlY3V0aW9uIGFzIGluIHRoZQorCSAqIHByZXZpb3VzIHRyaWVz IGFuZCBwcm9jZXNzIHRoZSBmaXJzdCB0cmFuc2FjdGlvbiBjb21tYW5kIGluCisJICogQ1NUQVRF X1NUQVJUX0NPTU1BTkQuIE90aGVyd2lzZSwgcmVwb3J0IHRoaXMgYXMgYW4gZXJyb3IsIHNldCB0 aGUKKwkgKiBwYXJhbWV0ZXJzIGZvciB0aGUgdHJhbnNhY3Rpb24gZXhlY3V0aW9uIGFzIHRoZXkg d2VyZSBiZWZvcmUgdGhlIGZpcnN0CisJICogcnVuIG9mIHRoaXMgdHJhbnNhY3Rpb24gKGV4Y2Vw dCBmb3IgYSByYW5kb20gc3RhdGUpIGFuZCBnbyB0bworCSAqIENTVEFURV9FTkRfVFggdG8gY29t cGxldGUgdGhpcyB0cmFuc2FjdGlvbi4KKwkgKi8KKwlDU1RBVEVfRkFJTFVSRSwKKwlDU1RBVEVf UkVUUlksCisKKwkvKgogCSAqIENTVEFURV9FTkRfVFggcGVyZm9ybXMgZW5kLW9mLXRyYW5zYWN0 aW9uIHByb2Nlc3NpbmcuICBDYWxjdWxhdGVzCiAJICogbGF0ZW5jeSwgYW5kIGxvZ3MgdGhlIHRy YW5zYWN0aW9uLiAgSW4gLS1jb25uZWN0IG1vZGUsIGNsb3NlcyB0aGUKIAkgKiBjdXJyZW50IGNv bm5lY3Rpb24uICBDaG9vc2VzIHRoZSBuZXh0IHNjcmlwdCB0byBleGVjdXRlIGFuZCBzdGFydHMg b3ZlcgpAQCAtMzY0LDYgKzQ0MSwxOCBAQCB0eXBlZGVmIHN0cnVjdAogCiAJYm9vbAkJcHJlcGFy ZWRbTUFYX1NDUklQVFNdOwkvKiB3aGV0aGVyIGNsaWVudCBwcmVwYXJlZCB0aGUgc2NyaXB0ICov CiAKKwkvKgorCSAqIEZvciBwcm9jZXNzaW5nIGVycm9ycyBhbmQgcmVwZWF0aW5nIHRyYW5zYWN0 aW9ucyB3aXRoIHNlcmlhbGl6YXRpb24gb3IKKwkgKiBkZWFkbG9jayBmYWlsdXJlczoKKwkgKi8K KwlGYWlsdXJlCQlmaXJzdF9mYWlsdXJlOwkvKiBzdGF0dXMgYW5kIGNvbW1hbmQgbnVtYmVyIG9m IHRoZSBmaXJzdAorCQkJCQkJCQkgKiBmYWlsdXJlIGluIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9u IGV4ZWN1dGlvbjsKKwkJCQkJCQkJICogc3RhdHVzIE5PX0ZBSUxVUkUgaWYgdGhlcmUgd2VyZSBu byBmYWlsdXJlcworCQkJCQkJCQkgKiBvciBlcnJvcnMgKi8KKwlSZXRyeVN0YXRlICByZXRyeV9z dGF0ZTsKKwl1aW50MzIJCQlyZXRyaWVzOwkvKiBob3cgbWFueSB0aW1lcyBoYXZlIHdlIGFscmVh ZHkgcmV0cmllZCB0aGUKKwkJCQkJCQkJICogY3VycmVudCB0cmFuc2FjdGlvbj8gKi8KKwogCS8q IHBlciBjbGllbnQgY29sbGVjdGVkIHN0YXRzICovCiAJaW50NjQJCWNudDsJCQkvKiBjbGllbnQg dHJhbnNhY3Rpb24gY291bnQsIGZvciAtdCAqLwogCWludAkJCWVjbnQ7CQkJLyogZXJyb3IgY291 bnQgKi8KQEAgLTQxNyw3ICs1MDYsOCBAQCB0eXBlZGVmIHN0cnVjdAogCWluc3RyX3RpbWUJc3Rh cnRfdGltZTsJCS8qIHRocmVhZCBzdGFydCB0aW1lICovCiAJaW5zdHJfdGltZQljb25uX3RpbWU7 CiAJU3RhdHNEYXRhCXN0YXRzOwotCWludDY0CQlsYXRlbmN5X2xhdGU7CS8qIGV4ZWN1dGVkIGJ1 dCBsYXRlIHRyYW5zYWN0aW9ucyAqLworCWludDY0CQlsYXRlbmN5X2xhdGU7CS8qIGV4ZWN1dGVk IGJ1dCBsYXRlIHRyYW5zYWN0aW9ucyAoaW5jbHVkaW5nCisJCQkJCQkJCSAqIGVycm9ycykgKi8K IH0gVFN0YXRlOwogCiAjZGVmaW5lIElOVkFMSURfVEhSRUFECQkoKHB0aHJlYWRfdCkgMCkKQEAg LTQ2Myw2ICs1NTMsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QKIAljaGFyCSAgICphcmd2W01BWF9BUkdT XTsgLyogY29tbWFuZCB3b3JkIGxpc3QgKi8KIAlQZ0JlbmNoRXhwciAqZXhwcjsJCQkvKiBwYXJz ZWQgZXhwcmVzc2lvbiwgaWYgbmVlZGVkICovCiAJU2ltcGxlU3RhdHMgc3RhdHM7CQkJLyogdGlt ZSBzcGVudCBpbiB0aGlzIGNvbW1hbmQgKi8KKwlpbnQ2NAkJcmV0cmllczsKKwlpbnQ2NAkJZXJy b3JzOwkJCS8qIG51bWJlciBvZiBmYWlsdXJlcyB0aGF0IHdlcmUgbm90IHJldHJpZWQgKi8KKwlp bnQ2NAkJZXJyb3JzX2luX2ZhaWxlZF90eDsJLyogbnVtYmVyIG9mIGVycm9ycworCQkJCQkJCQkJ CSAqIEVSUkNPREVfSU5fRkFJTEVEX1NRTF9UUkFOU0FDVElPTiAqLwogfSBDb21tYW5kOwogCiB0 eXBlZGVmIHN0cnVjdCBQYXJzZWRTY3JpcHQKQEAgLTQ3OCw3ICs1NzIsMTggQEAgc3RhdGljIGlu dAludW1fc2NyaXB0czsJCS8qIG51bWJlciBvZiBzY3JpcHRzIGluIHNxbF9zY3JpcHRbXSAqLwog c3RhdGljIGludAludW1fY29tbWFuZHMgPSAwOwkvKiB0b3RhbCBudW1iZXIgb2YgQ29tbWFuZCBz dHJ1Y3RzICovCiBzdGF0aWMgaW50NjQgdG90YWxfd2VpZ2h0ID0gMDsKIAotc3RhdGljIGludAlk ZWJ1ZyA9IDA7CQkJLyogZGVidWcgZmxhZyAqLwordHlwZWRlZiBlbnVtIERlYnVnTGV2ZWwKK3sK KwlOT19ERUJVRyA9IDAsCQkJCS8qIG5vIGRlYnVnZ2luZyBvdXRwdXQgKGV4Y2VwdCBQR0JFTkNI X0RFQlVHKSAqLworCURFQlVHX0ZBSUxTLAkJCQkvKiBwcmludCBvbmx5IGZhaWx1cmUgbWVzc2Fn ZXMsIGVycm9ycyBhbmQKKwkJCQkJCQkJICogcmV0cmllcyAqLworCURFQlVHX0FMTCwJCQkJCS8q IHByaW50IGFsbCBkZWJ1Z2dpbmcgb3V0cHV0ICh0aHJvdHRsaW5nLAorCQkJCQkJCQkgKiBleGVj dXRlZC9zZW50L3JlY2VpdmVkIGNvbW1hbmRzIGV0Yy4pICovCisJTlVNX0RFQlVHTEVWRUwKK30g RGVidWdMZXZlbDsKKworc3RhdGljIERlYnVnTGV2ZWwgZGVidWdfbGV2ZWwgPSBOT19ERUJVRzsJ LyogZGVidWcgZmxhZyAqLworc3RhdGljIGNvbnN0IGNoYXIgKkRFQlVHTEVWRUxbXSA9IHsibm8i LCAiZmFpbHMiLCAiYWxsIn07CiAKIC8qIEJ1aWx0aW4gdGVzdCBzY3JpcHRzICovCiB0eXBlZGVm IHN0cnVjdCBCdWlsdGluU2NyaXB0CkBAIC01MzQsOSArNjM5LDIyIEBAIHR5cGVkZWYgZW51bSBF cnJvckxldmVsCiAJRUxFVkVMX0RFQlVHLAogCiAJLyoKLQkgKiBUbyByZXBvcnQgdGhlIGVycm9y L2xvZyBtZXNzYWdlcyBhbmQvb3IgUEdCRU5DSF9ERUJVRy4KKwkgKiBOb3JtYWwgZmFpbHVyZSBv ZiB0aGUgU1FML21ldGEgY29tbWFuZCwgb3IgcHJvY2Vzc2luZyBvZiB0aGUgZmFpbGVkCisJICog dHJhbnNhY3Rpb24gKGl0cyBlbmQvcmV0cnkpLgorCSAqLworCUVMRVZFTF9MT0dfQ0xJRU5UX0ZB SUwsCisKKwkvKgorCSAqIFNvbWV0aGluZyBzZXJpb3VzIGUuZy4gY29ubmVjdGlvbiB3aXRoIHRo ZSBiYWNrZW5kIHdhcyBsb3N0Li4gdGhlcmVmb3JlCisJICogYWJvcnQgdGhlIGNsaWVudC4KIAkg Ki8KLQlFTEVWRUxfTE9HLAorCUVMRVZFTF9MT0dfQ0xJRU5UX0FCT1JURUQsCisKKwkvKgorCSAq IFRvIHJlcG9ydCB0aGUgZXJyb3IvbG9nIG1lc3NhZ2VzIG9mIHRoZSBtYWluIHByb2dyYW0gYW5k L29yCisJICogUEdCRU5DSF9ERUJVRy4KKwkgKi8KKwlFTEVWRUxfTE9HX01BSU4sCiAKIAkvKgog CSAqIFRvIHJlcG9ydCB0aGUgZXJyb3IgbWVzc2FnZXMgb2YgdGhlIG1haW4gcHJvZ3JhbSBhbmQg dG8gZXhpdCBpbW1lZGlhdGVseS4KQEAgLTY0MSw3ICs3NTksNiBAQCBzdGF0aWMgaW50ICBlcnJt c2dJbXBsKGNvbnN0IGNoYXIgKmZtdCwuLi4pIHBnX2F0dHJpYnV0ZV9wcmludGYoMSwgMik7CiBz dGF0aWMgdm9pZCBlcnJmaW5pc2hJbXBsKGludCBkdW1teSwuLi4pOwogI2VuZGlmCQkJCQkJCS8q IEVOQUJMRV9USFJFQURfU0FGRVRZICYmIEhBVkVfX1ZBX0FSR1MgKi8KIAotCiAvKiBjYWxsYmFj ayBmdW5jdGlvbnMgZm9yIG91ciBmbGV4IGxleGVyICovCiBzdGF0aWMgY29uc3QgUHNxbFNjYW5D YWxsYmFja3MgcGdiZW5jaF9jYWxsYmFja3MgPSB7CiAJTlVMTCwJCQkJCQkvKiBkb24ndCBuZWVk IGdldF92YXJpYWJsZSBmdW5jdGlvbmFsaXR5ICovCkBAIC02ODgsNyArODA1LDcgQEAgdXNhZ2Uo dm9pZCkKIAkJICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvY29sIGZvciBzdWJt aXR0aW5nIHF1ZXJpZXMgKGRlZmF1bHQ6IHNpbXBsZSlcbiIKIAkJICAgIiAgLW4sIC0tbm8tdmFj dXVtICAgICAgICAgIGRvIG5vdCBydW4gVkFDVVVNIGJlZm9yZSB0ZXN0c1xuIgogCQkgICAiICAt UCwgLS1wcm9ncmVzcz1OVU0gICAgICAgc2hvdyB0aHJlYWQgcHJvZ3Jlc3MgcmVwb3J0IGV2ZXJ5 IE5VTSBzZWNvbmRzXG4iCi0JCSAgICIgIC1yLCAtLXJlcG9ydC1sYXRlbmNpZXMgICByZXBvcnQg YXZlcmFnZSBsYXRlbmN5IHBlciBjb21tYW5kXG4iCisJCSAgICIgIC1yLCAtLXJlcG9ydC1wZXIt Y29tbWFuZCByZXBvcnQgbGF0ZW5jaWVzLCBlcnJvcnMgYW5kIHJldHJpZXMgcGVyIGNvbW1hbmRc biIKIAkJICAgIiAgLVIsIC0tcmF0ZT1OVU0gICAgICAgICAgIHRhcmdldCByYXRlIGluIHRyYW5z YWN0aW9ucyBwZXIgc2Vjb25kXG4iCiAJCSAgICIgIC1zLCAtLXNjYWxlPU5VTSAgICAgICAgICBy ZXBvcnQgdGhpcyBzY2FsZSBmYWN0b3IgaW4gb3V0cHV0XG4iCiAJCSAgICIgIC10LCAtLXRyYW5z YWN0aW9ucz1OVU0gICBudW1iZXIgb2YgdHJhbnNhY3Rpb25zIGVhY2ggY2xpZW50IHJ1bnMgKGRl ZmF1bHQ6IDEwKVxuIgpAQCAtNjk3LDExICs4MTQsMTIgQEAgdXNhZ2Uodm9pZCkKIAkJICAgIiAg LS1hZ2dyZWdhdGUtaW50ZXJ2YWw9TlVNIGFnZ3JlZ2F0ZSBkYXRhIG92ZXIgTlVNIHNlY29uZHNc biIKIAkJICAgIiAgLS1sb2ctcHJlZml4PVBSRUZJWCAgICAgIHByZWZpeCBmb3IgdHJhbnNhY3Rp b24gdGltZSBsb2cgZmlsZVxuIgogCQkgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRl ZmF1bHQ6IFwicGdiZW5jaF9sb2dcIilcbiIKKwkJICAgIiAgLS1tYXgtdHJpZXM9TlVNICAgICAg ICAgIG1heCBudW1iZXIgb2YgdHJpZXMgdG8gcnVuIHRyYW5zYWN0aW9uXG4iCiAJCSAgICIgIC0t cHJvZ3Jlc3MtdGltZXN0YW1wICAgICB1c2UgVW5peCBlcG9jaCB0aW1lc3RhbXBzIGZvciBwcm9n cmVzc1xuIgogCQkgICAiICAtLXJhbmRvbS1zZWVkPVNFRUQgICAgICAgc2V0IHJhbmRvbSBzZWVk IChcInRpbWVcIiwgXCJyYW5kXCIsIGludGVnZXIpXG4iCiAJCSAgICIgIC0tc2FtcGxpbmctcmF0 ZT1OVU0gICAgICBmcmFjdGlvbiBvZiB0cmFuc2FjdGlvbnMgdG8gbG9nIChlLmcuLCAwLjAxIGZv ciAxJSUpXG4iCiAJCSAgICJcbkNvbW1vbiBvcHRpb25zOlxuIgotCQkgICAiICAtZCwgLS1kZWJ1 ZyAgICAgICAgICAgICAgcHJpbnQgZGVidWdnaW5nIG91dHB1dFxuIgorCQkgICAiICAtZCwgLS1k ZWJ1Zz1ub3xmYWlsc3xhbGwgcHJpbnQgZGVidWdnaW5nIG91dHB1dCAoZGVmYXVsdDogbm8pXG4i CiAJCSAgICIgIC1oLCAtLWhvc3Q9SE9TVE5BTUUgICAgICBkYXRhYmFzZSBzZXJ2ZXIgaG9zdCBv ciBzb2NrZXQgZGlyZWN0b3J5XG4iCiAJCSAgICIgIC1wLCAtLXBvcnQ9UE9SVCAgICAgICAgICBk YXRhYmFzZSBzZXJ2ZXIgcG9ydCBudW1iZXJcbiIKIAkJICAgIiAgLVUsIC0tdXNlcm5hbWU9VVNF Uk5BTUUgIGNvbm5lY3QgYXMgc3BlY2lmaWVkIGRhdGFiYXNlIHVzZXJcbiIKQEAgLTc4NCw3ICs5 MDIsNyBAQCBzdHJ0b2ludDY0KGNvbnN0IGNoYXIgKnN0cikKIAkvKiByZXF1aXJlIGF0IGxlYXN0 IG9uZSBkaWdpdCAqLwogCWlmICghaXNkaWdpdCgodW5zaWduZWQgY2hhcikgKnB0cikpCiAJewot CQllcmVwb3J0KEVMRVZFTF9MT0csCisJCWVyZXBvcnQoRUxFVkVMX0xPR19NQUlOLAogCQkJCShl cnJtc2coImludmFsaWQgaW5wdXQgc3ludGF4IGZvciBpbnRlZ2VyOiBcIiVzXCJcbiIsIHN0cikp KTsKIAl9CiAKQEAgLTc5NSw3ICs5MTMsNyBAQCBzdHJ0b2ludDY0KGNvbnN0IGNoYXIgKnN0cikK IAogCQlpZiAoKHRtcCAvIDEwKSAhPSByZXN1bHQpCS8qIG92ZXJmbG93PyAqLwogCQl7Ci0JCQll cmVwb3J0KEVMRVZFTF9MT0csCisJCQllcmVwb3J0KEVMRVZFTF9MT0dfTUFJTiwKIAkJCQkJKGVy cm1zZygidmFsdWUgXCIlc1wiIGlzIG91dCBvZiByYW5nZSBmb3IgdHlwZSBiaWdpbnRcbiIsCiAJ CQkJCQkJc3RyKSkpOwogCQl9CkBAIC04MTAsNyArOTI4LDcgQEAgZ290ZGlnaXRzOgogCiAJaWYg KCpwdHIgIT0gJ1wwJykKIAl7Ci0JCWVyZXBvcnQoRUxFVkVMX0xPRywKKwkJZXJlcG9ydChFTEVW RUxfTE9HX01BSU4sCiAJCQkJKGVycm1zZygiaW52YWxpZCBpbnB1dCBzeW50YXggZm9yIGludGVn ZXI6IFwiJXNcIlxuIiwgc3RyKSkpOwogCX0KIApAQCAtMTE2NCw2ICsxMjgyLDEwIEBAIGluaXRT dGF0cyhTdGF0c0RhdGEgKnNkLCB0aW1lX3Qgc3RhcnRfdGltZSkKIAlzZC0+c3RhcnRfdGltZSA9 IHN0YXJ0X3RpbWU7CiAJc2QtPmNudCA9IDA7CiAJc2QtPnNraXBwZWQgPSAwOworCXNkLT5yZXRy aWVzID0gMDsKKwlzZC0+cmV0cmllZCA9IDA7CisJc2QtPmVycm9ycyA9IDA7CisJc2QtPmVycm9y c19pbl9mYWlsZWRfdHggPSAwOwogCWluaXRTaW1wbGVTdGF0cygmc2QtPmxhdGVuY3kpOwogCWlu aXRTaW1wbGVTdGF0cygmc2QtPmxhZyk7CiB9CkBAIC0xMTcyLDggKzEyOTQsMzAgQEAgaW5pdFN0 YXRzKFN0YXRzRGF0YSAqc2QsIHRpbWVfdCBzdGFydF90aW1lKQogICogQWNjdW11bGF0ZSBvbmUg YWRkaXRpb25hbCBpdGVtIGludG8gdGhlIGdpdmVuIHN0YXRzIG9iamVjdC4KICAqLwogc3RhdGlj IHZvaWQKLWFjY3VtU3RhdHMoU3RhdHNEYXRhICpzdGF0cywgYm9vbCBza2lwcGVkLCBkb3VibGUg bGF0LCBkb3VibGUgbGFnKQorYWNjdW1TdGF0cyhTdGF0c0RhdGEgKnN0YXRzLCBib29sIHNraXBw ZWQsIGRvdWJsZSBsYXQsIGRvdWJsZSBsYWcsCisJCSAgIEZhaWx1cmVTdGF0dXMgZmlyc3RfZXJy b3IsIGludDY0IHJldHJpZXMpCiB7CisJLyoKKwkgKiBSZWNvcmQgdGhlIG51bWJlciBvZiByZXRy aWVzIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgdHJhbnNhY3Rpb24gd2FzCisJICogc3VjY2Vz c2Z1bCBvciBmYWlsZWQuCisJICovCisJc3RhdHMtPnJldHJpZXMgKz0gcmV0cmllczsKKwlpZiAo cmV0cmllcyA+IDApCisJCXN0YXRzLT5yZXRyaWVkKys7CisKKwkvKiBSZWNvcmQgdGhlIGZhaWxl ZCB0cmFuc2FjdGlvbiAqLworCWlmIChmaXJzdF9lcnJvciAhPSBOT19GQUlMVVJFKQorCXsKKwkJ c3RhdHMtPmVycm9ycysrOworCisJCWlmIChmaXJzdF9lcnJvciA9PSBJTl9GQUlMRURfU1FMX1RS QU5TQUNUSU9OKQorCQkJc3RhdHMtPmVycm9yc19pbl9mYWlsZWRfdHgrKzsKKworCQlyZXR1cm47 CisJfQorCisJLyogUmVjb3JkIHRoZSBzdWNjZXNzZnVsIHRyYW5zYWN0aW9uICovCisKIAlzdGF0 cy0+Y250Kys7CiAKIAlpZiAoc2tpcHBlZCkKQEAgLTEyMTIsNyArMTM1Niw3IEBAIHRyeUV4ZWN1 dGVTdGF0ZW1lbnQoUEdjb25uICpjb24sIGNvbnN0IGNoYXIgKnNxbCkKIAlyZXMgPSBQUWV4ZWMo Y29uLCBzcWwpOwogCWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpICE9IFBHUkVTX0NPTU1BTkRfT0sp CiAJewotCQllcmVwb3J0KEVMRVZFTF9MT0csCisJCWVyZXBvcnQoRUxFVkVMX0xPR19NQUlOLAog CQkJCShlcnJtc2coIiVzKGlnbm9yaW5nIHRoaXMgZXJyb3IgYW5kIGNvbnRpbnVpbmcgYW55d2F5 KVxuIiwKIAkJCQkJCVBRZXJyb3JNZXNzYWdlKGNvbikpKSk7CiAJfQpAQCAtMTI2MCw3ICsxNDA0 LDcgQEAgZG9Db25uZWN0KHZvaWQpCiAKIAkJaWYgKCFjb25uKQogCQl7Ci0JCQllcmVwb3J0KEVM RVZFTF9MT0csCisJCQllcmVwb3J0KEVMRVZFTF9MT0dfTUFJTiwKIAkJCQkJKGVycm1zZygiY29u bmVjdGlvbiB0byBkYXRhYmFzZSBcIiVzXCIgZmFpbGVkXG4iLCBkYk5hbWUpKSk7CiAJCQlyZXR1 cm4gTlVMTDsKIAkJfQpAQCAtMTI3OSw3ICsxNDIzLDcgQEAgZG9Db25uZWN0KHZvaWQpCiAJLyog Y2hlY2sgdG8gc2VlIHRoYXQgdGhlIGJhY2tlbmQgY29ubmVjdGlvbiB3YXMgc3VjY2Vzc2Z1bGx5 IG1hZGUgKi8KIAlpZiAoUFFzdGF0dXMoY29ubikgPT0gQ09OTkVDVElPTl9CQUQpCiAJewotCQll cmVwb3J0KEVMRVZFTF9MT0csCisJCWVyZXBvcnQoRUxFVkVMX0xPR19NQUlOLAogCQkJCShlcnJt c2coImNvbm5lY3Rpb24gdG8gZGF0YWJhc2UgXCIlc1wiIGZhaWxlZDpcbiVzIiwKIAkJCQkJCWRi TmFtZSwgUFFlcnJvck1lc3NhZ2UoY29ubikpKSk7CiAJCVBRZmluaXNoKGNvbm4pOwpAQCAtMTQx OSw3ICsxNTYzLDcgQEAgbWFrZVZhcmlhYmxlVmFsdWUoVmFyaWFibGUgKnZhcikKIAogCQlpZiAo c3NjYW5mKHZhci0+c3ZhbHVlLCAiJWxmJWMiLCAmZHYsICZ4cykgIT0gMSkKIAkJewotCQkJZXJl cG9ydChFTEVWRUxfTE9HLAorCQkJZXJlcG9ydChFTEVWRUxfTE9HX0NMSUVOVF9GQUlMLAogCQkJ CQkoZXJybXNnKCJtYWxmb3JtZWQgdmFyaWFibGUgXCIlc1wiIHZhbHVlOiBcIiVzXCJcbiIsCiAJ CQkJCQkJdmFyLT5uYW1lLCB2YXItPnN2YWx1ZSkpKTsKIAkJCXJldHVybiBmYWxzZTsKQEAgLTE0 OTAsNyArMTYzNCw3IEBAIGxvb2t1cENyZWF0ZVZhcmlhYmxlKFZhcmlhYmxlcyAqdmFyaWFibGVz LCBjb25zdCBjaGFyICpjb250ZXh0LCBjaGFyICpuYW1lLAogCQkJICogQWJvdXQgdGhlIGVycm9y IGxldmVsIHVzZWQ6IGlmIHdlIHByb2Nlc3MgY2xpZW50IGNvbW1hbmRzLCBpdCBhCiAJCQkgKiBu b3JtYWwgZmFpbHVyZTsgb3RoZXJ3aXNlIGl0IGlzIG5vdCBhbmQgd2UgZXhpdCB0aGUgcHJvZ3Jh bS4KIAkJCSAqLwotCQkJZXJlcG9ydChjbGllbnQgPyBFTEVWRUxfTE9HIDogRUxFVkVMX0ZBVEFM LAorCQkJZXJlcG9ydChjbGllbnQgPyBFTEVWRUxfTE9HX0NMSUVOVF9GQUlMIDogRUxFVkVMX0ZB VEFMLAogCQkJCQkoZXJybXNnKCIlczogaW52YWxpZCB2YXJpYWJsZSBuYW1lOiBcIiVzXCJcbiIs CiAJCQkJCQkJY29udGV4dCwgbmFtZSkpKTsKIAkJCXJldHVybiBOVUxMOwpAQCAtMTcwNiw3ICsx ODUwLDcgQEAgY29lcmNlVG9Cb29sKFBnQmVuY2hWYWx1ZSAqcHZhbCwgYm9vbCAqYnZhbCkKIAl9 CiAJZWxzZQkJCQkJCS8qIE5VTEwsIElOVCBvciBET1VCTEUgKi8KIAl7Ci0JCWVyZXBvcnQoRUxF VkVMX0xPRywKKwkJZXJlcG9ydChFTEVWRUxfTE9HX0NMSUVOVF9GQUlMLAogCQkJCShlcnJtc2co ImNhbm5vdCBjb2VyY2UgJXMgdG8gYm9vbGVhblxuIiwgdmFsdWVUeXBlTmFtZShwdmFsKSkpKTsK IAkJKmJ2YWwgPSBmYWxzZTsJCQkvKiBzdXBwcmVzcyB1bmluaXRpYWxpemVkLXZhcmlhYmxlIHdh cm5pbmdzICovCiAJCXJldHVybiBmYWxzZTsKQEAgLTE3NTIsNyArMTg5Niw3IEBAIGNvZXJjZVRv SW50KFBnQmVuY2hWYWx1ZSAqcHZhbCwgaW50NjQgKml2YWwpCiAKIAkJaWYgKGR2YWwgPCBQR19J TlQ2NF9NSU4gfHwgUEdfSU5UNjRfTUFYIDwgZHZhbCkKIAkJewotCQkJZXJlcG9ydChFTEVWRUxf TE9HLAorCQkJZXJlcG9ydChFTEVWRUxfTE9HX0NMSUVOVF9GQUlMLAogCQkJCQkoZXJybXNnKCJk b3VibGUgdG8gaW50IG92ZXJmbG93IGZvciAlZlxuIiwgZHZhbCkpKTsKIAkJCXJldHVybiBmYWxz ZTsKIAkJfQpAQCAtMTc2MSw3ICsxOTA1LDcgQEAgY29lcmNlVG9JbnQoUGdCZW5jaFZhbHVlICpw dmFsLCBpbnQ2NCAqaXZhbCkKIAl9CiAJZWxzZQkJCQkJCS8qIEJPT0xFQU4gb3IgTlVMTCAqLwog CXsKLQkJZXJlcG9ydChFTEVWRUxfTE9HLAorCQllcmVwb3J0KEVMRVZFTF9MT0dfQ0xJRU5UX0ZB SUwsCiAJCQkJKGVycm1zZygiY2Fubm90IGNvZXJjZSAlcyB0byBpbnRcbiIsIHZhbHVlVHlwZU5h bWUocHZhbCkpKSk7CiAJCXJldHVybiBmYWxzZTsKIAl9CkBAIC0xNzgzLDcgKzE5MjcsNyBAQCBj b2VyY2VUb0RvdWJsZShQZ0JlbmNoVmFsdWUgKnB2YWwsIGRvdWJsZSAqZHZhbCkKIAl9CiAJZWxz ZQkJCQkJCS8qIEJPT0xFQU4gb3IgTlVMTCAqLwogCXsKLQkJZXJlcG9ydChFTEVWRUxfTE9HLAor CQllcmVwb3J0KEVMRVZFTF9MT0dfQ0xJRU5UX0ZBSUwsCiAJCQkJKGVycm1zZygiY2Fubm90IGNv ZXJjZSAlcyB0byBkb3VibGVcbiIsIHZhbHVlVHlwZU5hbWUocHZhbCkpKSk7CiAJCXJldHVybiBm YWxzZTsKIAl9CkBAIC0xOTY1LDcgKzIxMDksNyBAQCBldmFsU3RhbmRhcmRGdW5jKFRTdGF0ZSAq dGhyZWFkLCBDU3RhdGUgKnN0LAogCiAJaWYgKGwgIT0gTlVMTCkKIAl7Ci0JCWVyZXBvcnQoRUxF VkVMX0xPRywKKwkJZXJlcG9ydChFTEVWRUxfTE9HX0NMSUVOVF9GQUlMLAogCQkJCShlcnJtc2co InRvbyBtYW55IGZ1bmN0aW9uIGFyZ3VtZW50cywgbWF4aW11bSBpcyAlZFxuIiwKIAkJCQkJICAg TUFYX0ZBUkdTKSkpOwogCQlyZXR1cm4gZmFsc2U7CkBAIC0yMDkwLDcgKzIyMzQsNyBAQCBldmFs U3RhbmRhcmRGdW5jKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LAogCQkJCQkJY2FzZSBQR0JF TkNIX01PRDoKIAkJCQkJCQlpZiAocmkgPT0gMCkKIAkJCQkJCQl7Ci0JCQkJCQkJCWVyZXBvcnQo RUxFVkVMX0xPRywKKwkJCQkJCQkJZXJlcG9ydChFTEVWRUxfTE9HX0NMSUVOVF9GQUlMLAogCQkJ CQkJCQkJCShlcnJtc2coImRpdmlzaW9uIGJ5IHplcm9cbiIpKSk7CiAJCQkJCQkJCXJldHVybiBm YWxzZTsKIAkJCQkJCQl9CkBAIC0yMTAzLDcgKzIyNDcsNyBAQCBldmFsU3RhbmRhcmRGdW5jKFRT dGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LAogCQkJCQkJCQkJaWYgKGxpID09IFBHX0lOVDY0X01J TikKIAkJCQkJCQkJCXsKIAkJCQkJCQkJCQllcmVwb3J0KAotCQkJCQkJCQkJCQlFTEVWRUxfTE9H LAorCQkJCQkJCQkJCQlFTEVWRUxfTE9HX0NMSUVOVF9GQUlMLAogCQkJCQkJCQkJCQkoZXJybXNn KCJiaWdpbnQgb3V0IG9mIHJhbmdlXG4iKSkpOwogCQkJCQkJCQkJCXJldHVybiBmYWxzZTsKIAkJ CQkJCQkJCX0KQEAgLTIyMzksNyArMjM4Myw3IEBAIGV2YWxTdGFuZGFyZEZ1bmMoVFN0YXRlICp0 aHJlYWQsIENTdGF0ZSAqc3QsCiAJCQkJCUFzc2VydCgwKTsKIAkJCQl9CiAKLQkJCQllcmVwb3J0 KEVMRVZFTF9MT0csIChlcnJtc2coIiVzIiwgZXJyb3Jtc2dfYnVmLmRhdGEpKSk7CisJCQkJZXJl cG9ydChFTEVWRUxfTE9HX01BSU4sIChlcnJtc2coIiVzIiwgZXJyb3Jtc2dfYnVmLmRhdGEpKSk7 CiAJCQkJdGVybVBRRXhwQnVmZmVyKCZlcnJvcm1zZ19idWYpOwogCiAJCQkJKnJldHZhbCA9ICp2 YXJnOwpAQCAtMjM2NCwxNCArMjUwOCwxNCBAQCBldmFsU3RhbmRhcmRGdW5jKFRTdGF0ZSAqdGhy ZWFkLCBDU3RhdGUgKnN0LAogCQkJCS8qIGNoZWNrIHJhbmRvbSByYW5nZSAqLwogCQkJCWlmIChp bWluID4gaW1heCkKIAkJCQl7Ci0JCQkJCWVyZXBvcnQoRUxFVkVMX0xPRywKKwkJCQkJZXJlcG9y dChFTEVWRUxfTE9HX0NMSUVOVF9GQUlMLAogCQkJCQkJCShlcnJtc2coImVtcHR5IHJhbmdlIGdp dmVuIHRvIHJhbmRvbVxuIikpKTsKIAkJCQkJcmV0dXJuIGZhbHNlOwogCQkJCX0KIAkJCQllbHNl IGlmIChpbWF4IC0gaW1pbiA8IDAgfHwgKGltYXggLSBpbWluKSArIDEgPCAwKQogCQkJCXsKIAkJ CQkJLyogcHJldmVudCBpbnQgb3ZlcmZsb3dzIGluIHJhbmRvbSBmdW5jdGlvbnMgKi8KLQkJCQkJ ZXJlcG9ydChFTEVWRUxfTE9HLAorCQkJCQllcmVwb3J0KEVMRVZFTF9MT0dfQ0xJRU5UX0ZBSUws CiAJCQkJCQkJKGVycm1zZygicmFuZG9tIHJhbmdlIGlzIHRvbyBsYXJnZVxuIikpKTsKIAkJCQkJ cmV0dXJuIGZhbHNlOwogCQkJCX0KQEAgLTIzOTQsNyArMjUzOCw3IEBAIGV2YWxTdGFuZGFyZEZ1 bmMoVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsCiAJCQkJCXsKIAkJCQkJCWlmIChwYXJhbSA8 IE1JTl9HQVVTU0lBTl9QQVJBTSkKIAkJCQkJCXsKLQkJCQkJCQllcmVwb3J0KEVMRVZFTF9MT0cs CisJCQkJCQkJZXJlcG9ydChFTEVWRUxfTE9HX0NMSUVOVF9GQUlMLAogCQkJCQkJCQkJKGVycm1z ZygiZ2F1c3NpYW4gcGFyYW1ldGVyIG11c3QgYmUgYXQgbGVhc3QgJWYgKG5vdCAlZilcbiIsCiAJ CQkJCQkJCQkJCU1JTl9HQVVTU0lBTl9QQVJBTSwgcGFyYW0pKSk7CiAJCQkJCQkJcmV0dXJuIGZh bHNlOwpAQCAtMjQwOCw3ICsyNTUyLDcgQEAgZXZhbFN0YW5kYXJkRnVuYyhUU3RhdGUgKnRocmVh ZCwgQ1N0YXRlICpzdCwKIAkJCQkJewogCQkJCQkJaWYgKHBhcmFtIDw9IDAuMCB8fCBwYXJhbSA9 PSAxLjAgfHwgcGFyYW0gPiBNQVhfWklQRklBTl9QQVJBTSkKIAkJCQkJCXsKLQkJCQkJCQllcmVw b3J0KEVMRVZFTF9MT0csCisJCQkJCQkJZXJlcG9ydChFTEVWRUxfTE9HX0NMSUVOVF9GQUlMLAog CQkJCQkJCQkJKGVycm1zZygiemlwZmlhbiBwYXJhbWV0ZXIgbXVzdCBiZSBpbiByYW5nZSAoMCwg MSkgVSAoMSwgJWRdIChnb3QgJWYpXG4iLAogCQkJCQkJCQkJCQlNQVhfWklQRklBTl9QQVJBTSwg cGFyYW0pKSk7CiAJCQkJCQkJcmV0dXJuIGZhbHNlOwpAQCAtMjQyMSw3ICsyNTY1LDcgQEAgZXZh bFN0YW5kYXJkRnVuYyhUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwKIAkJCQkJewogCQkJCQkJ aWYgKHBhcmFtIDw9IDAuMCkKIAkJCQkJCXsKLQkJCQkJCQllcmVwb3J0KEVMRVZFTF9MT0csCisJ CQkJCQkJZXJlcG9ydChFTEVWRUxfTE9HX0NMSUVOVF9GQUlMLAogCQkJCQkJCQkJKGVycm1zZygi ZXhwb25lbnRpYWwgcGFyYW1ldGVyIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8gKGdvdCAlZilc biIsCiAJCQkJCQkJCQkJCXBhcmFtKSkpOwogCQkJCQkJCXJldHVybiBmYWxzZTsKQEAgLTI1MzQs NyArMjY3OCw3IEBAIGV2YWx1YXRlRXhwcihUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwgUGdC ZW5jaEV4cHIgKmV4cHIsIFBnQmVuY2hWYWx1ZSAqcmV0dmFsCiAKIAkJCQlpZiAoKHZhciA9IGxv b2t1cFZhcmlhYmxlKCZzdC0+dmFyaWFibGVzLCBleHByLT51LnZhcmlhYmxlLnZhcm5hbWUpKSA9 PSBOVUxMKQogCQkJCXsKLQkJCQkJZXJlcG9ydChFTEVWRUxfTE9HLAorCQkJCQllcmVwb3J0KEVM RVZFTF9MT0dfQ0xJRU5UX0ZBSUwsCiAJCQkJCQkJKGVycm1zZygidW5kZWZpbmVkIHZhcmlhYmxl IFwiJXNcIlxuIiwKIAkJCQkJCQkJCWV4cHItPnUudmFyaWFibGUudmFybmFtZSkpKTsKIAkJCQkJ cmV0dXJuIGZhbHNlOwpAQCAtMjYzMCw3ICsyNzc0LDcgQEAgcnVuU2hlbGxDb21tYW5kKFZhcmlh YmxlcyAqdmFyaWFibGVzLCBjaGFyICp2YXJpYWJsZSwgY2hhciAqKmFyZ3YsIGludCBhcmdjKQog CQl9CiAJCWVsc2UgaWYgKChhcmcgPSBnZXRWYXJpYWJsZSh2YXJpYWJsZXMsIGFyZ3ZbaV0gKyAx KSkgPT0gTlVMTCkKIAkJewotCQkJZXJlcG9ydChFTEVWRUxfTE9HLAorCQkJZXJlcG9ydChFTEVW RUxfTE9HX0NMSUVOVF9GQUlMLAogCQkJCQkoZXJybXNnKCIlczogdW5kZWZpbmVkIHZhcmlhYmxl IFwiJXNcIlxuIiwKIAkJCQkJCQlhcmd2WzBdLCBhcmd2W2ldKSkpOwogCQkJcmV0dXJuIGZhbHNl OwpAQCAtMjYzOSw3ICsyNzgzLDcgQEAgcnVuU2hlbGxDb21tYW5kKFZhcmlhYmxlcyAqdmFyaWFi bGVzLCBjaGFyICp2YXJpYWJsZSwgY2hhciAqKmFyZ3YsIGludCBhcmdjKQogCQlhcmdsZW4gPSBz dHJsZW4oYXJnKTsKIAkJaWYgKGxlbiArIGFyZ2xlbiArIChpID4gMCA/IDEgOiAwKSA+PSBTSEVM TF9DT01NQU5EX1NJWkUgLSAxKQogCQl7Ci0JCQllcmVwb3J0KEVMRVZFTF9MT0csCisJCQllcmVw b3J0KEVMRVZFTF9MT0dfQ0xJRU5UX0ZBSUwsCiAJCQkJCShlcnJtc2coIiVzOiBzaGVsbCBjb21t YW5kIGlzIHRvbyBsb25nXG4iLCBhcmd2WzBdKSkpOwogCQkJcmV0dXJuIGZhbHNlOwogCQl9CkBA IC0yNjU5LDcgKzI4MDMsNyBAQCBydW5TaGVsbENvbW1hbmQoVmFyaWFibGVzICp2YXJpYWJsZXMs IGNoYXIgKnZhcmlhYmxlLCBjaGFyICoqYXJndiwgaW50IGFyZ2MpCiAJCXsKIAkJCWlmICghdGlt ZXJfZXhjZWVkZWQpCiAJCQl7Ci0JCQkJZXJlcG9ydChFTEVWRUxfTE9HLAorCQkJCWVyZXBvcnQo RUxFVkVMX0xPR19DTElFTlRfRkFJTCwKIAkJCQkJCShlcnJtc2coIiVzOiBjb3VsZCBub3QgbGF1 bmNoIHNoZWxsIGNvbW1hbmRcbiIsCiAJCQkJCQkJCWFyZ3ZbMF0pKSk7CiAJCQl9CkBAIC0yNjcx LDcgKzI4MTUsNyBAQCBydW5TaGVsbENvbW1hbmQoVmFyaWFibGVzICp2YXJpYWJsZXMsIGNoYXIg KnZhcmlhYmxlLCBjaGFyICoqYXJndiwgaW50IGFyZ2MpCiAJLyogRXhlY3V0ZSB0aGUgY29tbWFu ZCB3aXRoIHBpcGUgYW5kIHJlYWQgdGhlIHN0YW5kYXJkIG91dHB1dC4gKi8KIAlpZiAoKGZwID0g cG9wZW4oY29tbWFuZCwgInIiKSkgPT0gTlVMTCkKIAl7Ci0JCWVyZXBvcnQoRUxFVkVMX0xPRywK KwkJZXJlcG9ydChFTEVWRUxfTE9HX0NMSUVOVF9GQUlMLAogCQkJCShlcnJtc2coIiVzOiBjb3Vs ZCBub3QgbGF1bmNoIHNoZWxsIGNvbW1hbmRcbiIsIGFyZ3ZbMF0pKSk7CiAJCXJldHVybiBmYWxz ZTsKIAl9CkBAIC0yNjc5LDcgKzI4MjMsNyBAQCBydW5TaGVsbENvbW1hbmQoVmFyaWFibGVzICp2 YXJpYWJsZXMsIGNoYXIgKnZhcmlhYmxlLCBjaGFyICoqYXJndiwgaW50IGFyZ2MpCiAJewogCQlp ZiAoIXRpbWVyX2V4Y2VlZGVkKQogCQl7Ci0JCQllcmVwb3J0KEVMRVZFTF9MT0csCisJCQllcmVw b3J0KEVMRVZFTF9MT0dfQ0xJRU5UX0ZBSUwsCiAJCQkJCShlcnJtc2coIiVzOiBjb3VsZCBub3Qg cmVhZCByZXN1bHQgb2Ygc2hlbGwgY29tbWFuZFxuIiwKIAkJCQkJCQlhcmd2WzBdKSkpOwogCQl9 CkBAIC0yNjg4LDcgKzI4MzIsNyBAQCBydW5TaGVsbENvbW1hbmQoVmFyaWFibGVzICp2YXJpYWJs ZXMsIGNoYXIgKnZhcmlhYmxlLCBjaGFyICoqYXJndiwgaW50IGFyZ2MpCiAJfQogCWlmIChwY2xv c2UoZnApIDwgMCkKIAl7Ci0JCWVyZXBvcnQoRUxFVkVMX0xPRywKKwkJZXJlcG9ydChFTEVWRUxf TE9HX0NMSUVOVF9GQUlMLAogCQkJCShlcnJtc2coIiVzOiBjb3VsZCBub3QgY2xvc2Ugc2hlbGwg Y29tbWFuZFxuIiwgYXJndlswXSkpKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KQEAgLTI2OTksNyAr Mjg0Myw3IEBAIHJ1blNoZWxsQ29tbWFuZChWYXJpYWJsZXMgKnZhcmlhYmxlcywgY2hhciAqdmFy aWFibGUsIGNoYXIgKiphcmd2LCBpbnQgYXJnYykKIAkJZW5kcHRyKys7CiAJaWYgKCpyZXMgPT0g J1wwJyB8fCAqZW5kcHRyICE9ICdcMCcpCiAJewotCQllcmVwb3J0KEVMRVZFTF9MT0csCisJCWVy ZXBvcnQoRUxFVkVMX0xPR19DTElFTlRfRkFJTCwKIAkJCQkoZXJybXNnKCIlczogc2hlbGwgY29t bWFuZCBtdXN0IHJldHVybiBhbiBpbnRlZ2VyIChub3QgXCIlc1wiKVxuIiwKIAkJCQkJCWFyZ3Zb MF0sIHJlcykpKTsKIAkJcmV0dXJuIGZhbHNlOwpAQCAtMjcyMSwxMSArMjg2NSw1MCBAQCBwcmVw YXJlZFN0YXRlbWVudE5hbWUoY2hhciAqYnVmZmVyLCBpbnQgZmlsZSwgaW50IHN0YXRlKQogfQog CiBzdGF0aWMgdm9pZAotY29tbWFuZEZhaWxlZChDU3RhdGUgKnN0LCBjb25zdCBjaGFyICpjbWQs IGNvbnN0IGNoYXIgKm1lc3NhZ2UpCitjb21tYW5kRmFpbGVkKENTdGF0ZSAqc3QsIGNvbnN0IGNo YXIgKmNtZCwgY29uc3QgY2hhciAqbWVzc2FnZSwKKwkJCSAgRXJyb3JMZXZlbCBlbGV2ZWwpCiB7 Ci0JZXJlcG9ydChFTEVWRUxfTE9HLAotCQkJKGVycm1zZygiY2xpZW50ICVkIGFib3J0ZWQgaW4g Y29tbWFuZCAlZCAoJXMpIG9mIHNjcmlwdCAlZDsgJXNcbiIsCi0JCQkJCXN0LT5pZCwgc3QtPmNv bW1hbmQsIGNtZCwgc3QtPnVzZV9maWxlLCBtZXNzYWdlKSkpOworCXN3aXRjaCAoZWxldmVsKQor CXsKKwkJY2FzZSBFTEVWRUxfTE9HX0NMSUVOVF9GQUlMOgorCQkJaWYgKHN0LT5maXJzdF9mYWls dXJlLnN0YXR1cyA9PSBOT19GQUlMVVJFKQorCQkJeworCQkJCS8qCisJCQkJICogVGhpcyBpcyB0 aGUgZmlyc3QgZmFpbHVyZSBkdXJpbmcgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgY3VycmVudAorCQkJ CSAqIHNjcmlwdC4KKwkJCQkgKi8KKwkJCQllcmVwb3J0KEVMRVZFTF9MT0dfQ0xJRU5UX0ZBSUws CisJCQkJCQkoZXJybXNnKCJjbGllbnQgJWQgZ290IGEgZmFpbHVyZSBpbiBjb21tYW5kICVkICgl cykgb2Ygc2NyaXB0ICVkOyAlc1xuIiwKKwkJCQkJCQkJc3QtPmlkLCBzdC0+Y29tbWFuZCwgY21k LCBzdC0+dXNlX2ZpbGUsCisJCQkJCQkJCW1lc3NhZ2UpKSk7CisJCQl9CisJCQllbHNlCisJCQl7 CisJCQkJLyoKKwkJCQkgKiBUaGlzIGlzIG5vdCB0aGUgZmlyc3QgZmFpbHVyZSBkdXJpbmcgdGhl IGV4ZWN1dGlvbiBvZiB0aGUKKwkJCQkgKiBjdXJyZW50IHNjcmlwdC4KKwkJCQkgKi8KKwkJCQll cmVwb3J0KEVMRVZFTF9MT0dfQ0xJRU5UX0ZBSUwsCisJCQkJCQkoZXJybXNnKCJjbGllbnQgJWQg Y29udGludWVzIGEgZmFpbGVkIHRyYW5zYWN0aW9uIGluIGNvbW1hbmQgJWQgKCVzKSBvZiBzY3Jp cHQgJWQ7ICVzXG4iLAorCQkJCQkJCQlzdC0+aWQsIHN0LT5jb21tYW5kLCBjbWQsIHN0LT51c2Vf ZmlsZSwKKwkJCQkJCQkJbWVzc2FnZSkpKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIEVMRVZF TF9MT0dfQ0xJRU5UX0FCT1JURUQ6CisJCQllcmVwb3J0KEVMRVZFTF9MT0dfQ0xJRU5UX0FCT1JU RUQsCisJCQkJCShlcnJtc2coImNsaWVudCAlZCBhYm9ydGVkIGluIGNvbW1hbmQgJWQgKCVzKSBv ZiBzY3JpcHQgJWQ7ICVzXG4iLAorCQkJCQkJCXN0LT5pZCwgc3QtPmNvbW1hbmQsIGNtZCwgc3Qt PnVzZV9maWxlLCBtZXNzYWdlKSkpOworCQkJYnJlYWs7CisJCWNhc2UgRUxFVkVMX0RFQlVHOgor CQljYXNlIEVMRVZFTF9MT0dfTUFJTjoKKwkJY2FzZSBFTEVWRUxfRkFUQUw6CisJCWRlZmF1bHQ6 CisJCQkvKiBpbnRlcm5hbCBlcnJvciB3aGljaCBzaG91bGQgbmV2ZXIgb2NjdXIgKi8KKwkJCWVy ZXBvcnQoRUxFVkVMX0ZBVEFMLAorCQkJCQkoZXJybXNnKCJ1bmV4cGVjdGVkIGVycm9yIGxldmVs IHdoZW4gdGhlIGNvbW1hbmQgZmFpbGVkOiAlZFxuIiwKKwkJCQkJCQllbGV2ZWwpKSk7CisJCQli cmVhazsKKwl9CiB9CiAKIC8qIHJldHVybiBhIHNjcmlwdCBudW1iZXIgd2l0aCBhIHdlaWdodGVk IGNob2ljZS4gKi8KQEAgLTI3OTcsNyArMjk4MCw3IEBAIHNlbmRDb21tYW5kKENTdGF0ZSAqc3Qs IENvbW1hbmQgKmNvbW1hbmQpCiAJCQkJCQkJCWNvbW1hbmRzW2pdLT5hcmd2WzBdLCBjb21tYW5k c1tqXS0+YXJnYyAtIDEsIE5VTEwpOwogCQkJCWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpICE9IFBH UkVTX0NPTU1BTkRfT0spCiAJCQkJewotCQkJCQllcmVwb3J0KEVMRVZFTF9MT0csCisJCQkJCWVy ZXBvcnQoRUxFVkVMX0xPR19NQUlOLAogCQkJCQkJCShlcnJtc2coIiVzIiwgUFFlcnJvck1lc3Nh Z2Uoc3QtPmNvbikpKSk7CiAJCQkJfQogCQkJCVBRY2xlYXIocmVzKTsKQEAgLTI4MjAsNyArMzAw Myw2IEBAIHNlbmRDb21tYW5kKENTdGF0ZSAqc3QsIENvbW1hbmQgKmNvbW1hbmQpCiAJCWVyZXBv cnQoRUxFVkVMX0RFQlVHLAogCQkJCShlcnJtc2coImNsaWVudCAlZCBjb3VsZCBub3Qgc2VuZCAl c1xuIiwKIAkJCQkJCXN0LT5pZCwgY29tbWFuZC0+YXJndlswXSkpKTsKLQkJc3QtPmVjbnQrKzsK IAkJcmV0dXJuIGZhbHNlOwogCX0KIAllbHNlCkBAIC0yODQxLDcgKzMwMjMsNyBAQCBldmFsdWF0 ZVNsZWVwKFZhcmlhYmxlcyAqdmFyaWFibGVzLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YsIGludCAq dXNlY3MpCiAJewogCQlpZiAoKHZhciA9IGdldFZhcmlhYmxlKHZhcmlhYmxlcywgYXJndlsxXSAr IDEpKSA9PSBOVUxMKQogCQl7Ci0JCQllcmVwb3J0KEVMRVZFTF9MT0csCisJCQllcmVwb3J0KEVM RVZFTF9MT0dfQ0xJRU5UX0ZBSUwsCiAJCQkJCShlcnJtc2coIiVzOiB1bmRlZmluZWQgdmFyaWFi bGUgXCIlc1wiXG4iLAogCQkJCQkJCWFyZ3ZbMF0sIGFyZ3ZbMV0pKSk7CiAJCQlyZXR1cm4gZmFs c2U7CkBAIC0yODY2LDYgKzMwNDgsMTg2IEBAIGV2YWx1YXRlU2xlZXAoVmFyaWFibGVzICp2YXJp YWJsZXMsIGludCBhcmdjLCBjaGFyICoqYXJndiwgaW50ICp1c2VjcykKIH0KIAogLyoKKyAqIEdl dCB0aGUgbnVtYmVyIG9mIGFsbCBwcm9jZXNzZWQgdHJhbnNhY3Rpb25zIGluY2x1ZGluZyBza2lw cGVkIG9uZXMgYW5kCisgKiBlcnJvcnMuCisgKi8KK3N0YXRpYyBpbnQ2NAorZ2V0VG90YWxDbnQo Y29uc3QgQ1N0YXRlICpzdCkKK3sKKwlyZXR1cm4gc3QtPmNudCArIHN0LT5lY250OworfQorCisv KgorICogQ29weSBhbiBhcnJheSBvZiByYW5kb20gc3RhdGUuCisgKi8KK3N0YXRpYyB2b2lkCitj b3B5UmFuZG9tU3RhdGUoUmFuZG9tU3RhdGUgKmRlc3RpbmF0aW9uLCBjb25zdCBSYW5kb21TdGF0 ZSAqc291cmNlKQoreworCW1lbWNweShkZXN0aW5hdGlvbi0+ZGF0YSwgc291cmNlLT5kYXRhLCBz aXplb2YodW5zaWduZWQgc2hvcnQpICogMyk7Cit9CisKKy8qCisgKiBNYWtlIGEgZGVlcCBjb3B5 IG9mIHZhcmlhYmxlcyBhcnJheS4KKyAqLworc3RhdGljIHZvaWQKK2NvcHlWYXJpYWJsZXMoVmFy aWFibGVzICpkZXN0aW5hdGlvbl92YXJzLCBjb25zdCBWYXJpYWJsZXMgKnNvdXJjZV92YXJzKQor eworCVZhcmlhYmxlICAgKmRlc3RpbmF0aW9uOworCVZhcmlhYmxlICAgKmN1cnJlbnRfZGVzdGlu YXRpb247CisJY29uc3QgVmFyaWFibGUgKnNvdXJjZTsKKwljb25zdCBWYXJpYWJsZSAqY3VycmVu dF9zb3VyY2U7CisJaW50CQkJbnZhcmlhYmxlczsKKworCWlmICghZGVzdGluYXRpb25fdmFycyB8 fCAhc291cmNlX3ZhcnMpCisJCXJldHVybjsKKworCWRlc3RpbmF0aW9uID0gZGVzdGluYXRpb25f dmFycy0+YXJyYXk7CisJc291cmNlID0gc291cmNlX3ZhcnMtPmFycmF5OworCW52YXJpYWJsZXMg PSBzb3VyY2VfdmFycy0+bnZhcmlhYmxlczsKKworCWZvciAoY3VycmVudF9kZXN0aW5hdGlvbiA9 IGRlc3RpbmF0aW9uOworCQkgY3VycmVudF9kZXN0aW5hdGlvbiAtIGRlc3RpbmF0aW9uIDwgZGVz dGluYXRpb25fdmFycy0+bnZhcmlhYmxlczsKKwkJICsrY3VycmVudF9kZXN0aW5hdGlvbikKKwl7 CisJCXBnX2ZyZWUoY3VycmVudF9kZXN0aW5hdGlvbi0+bmFtZSk7CisJCXBnX2ZyZWUoY3VycmVu dF9kZXN0aW5hdGlvbi0+c3ZhbHVlKTsKKwl9CisKKwlkZXN0aW5hdGlvbl92YXJzLT5hcnJheSA9 IHBnX3JlYWxsb2MoZGVzdGluYXRpb25fdmFycy0+YXJyYXksCisJCQkJCQkJCQkJIHNpemVvZihW YXJpYWJsZSkgKiBudmFyaWFibGVzKTsKKwlkZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uX3ZhcnMt PmFycmF5OworCisJZm9yIChjdXJyZW50X3NvdXJjZSA9IHNvdXJjZSwgY3VycmVudF9kZXN0aW5h dGlvbiA9IGRlc3RpbmF0aW9uOworCQkgY3VycmVudF9zb3VyY2UgLSBzb3VyY2UgPCBudmFyaWFi bGVzOworCQkgKytjdXJyZW50X3NvdXJjZSwgKytjdXJyZW50X2Rlc3RpbmF0aW9uKQorCXsKKwkJ Y3VycmVudF9kZXN0aW5hdGlvbi0+bmFtZSA9IHBnX3N0cmR1cChjdXJyZW50X3NvdXJjZS0+bmFt ZSk7CisJCWlmIChjdXJyZW50X3NvdXJjZS0+c3ZhbHVlKQorCQkJY3VycmVudF9kZXN0aW5hdGlv bi0+c3ZhbHVlID0gcGdfc3RyZHVwKGN1cnJlbnRfc291cmNlLT5zdmFsdWUpOworCQllbHNlCisJ CQljdXJyZW50X2Rlc3RpbmF0aW9uLT5zdmFsdWUgPSBOVUxMOworCQljdXJyZW50X2Rlc3RpbmF0 aW9uLT52YWx1ZSA9IGN1cnJlbnRfc291cmNlLT52YWx1ZTsKKwl9CisKKwlkZXN0aW5hdGlvbl92 YXJzLT5udmFyaWFibGVzID0gbnZhcmlhYmxlczsKKwlkZXN0aW5hdGlvbl92YXJzLT52YXJzX3Nv cnRlZCA9IHNvdXJjZV92YXJzLT52YXJzX3NvcnRlZDsKK30KKworLyoKKyAqIFJldHVybnMgdHJ1 ZSBpZiB0aGlzIHR5cGUgb2YgZmFpbHVyZSBjYW4gYmUgcmV0cmllZC4KKyAqLworc3RhdGljIGJv b2wKK2NhblJldHJ5RmFpbHVyZShGYWlsdXJlU3RhdHVzIGZhaWx1cmVfc3RhdHVzKQoreworCXJl dHVybiAoZmFpbHVyZV9zdGF0dXMgPT0gU0VSSUFMSVpBVElPTl9GQUlMVVJFIHx8CisJCQlmYWls dXJlX3N0YXR1cyA9PSBERUFETE9DS19GQUlMVVJFKTsKK30KKworLyoKKyAqIFJldHVybnMgdHJ1 ZSBpZiB0aGUgZmFpbHVyZSBjYW4gYmUgcmV0cmllZC4KKyAqLworc3RhdGljIGJvb2wKK2NhblJl dHJ5KENTdGF0ZSAqc3QsIGluc3RyX3RpbWUgKm5vdykKK3sKKwlGYWlsdXJlU3RhdHVzIGZhaWx1 cmVfc3RhdHVzID0gc3QtPmZpcnN0X2ZhaWx1cmUuc3RhdHVzOworCisJQXNzZXJ0KGZhaWx1cmVf c3RhdHVzICE9IE5PX0ZBSUxVUkUpOworCisJLyogV2UgY2FuIG9ubHkgcmV0cnkgc2VyaWFsaXph dGlvbiBvciBkZWFkbG9jayBmYWlsdXJlcy4gKi8KKwlpZiAoIWNhblJldHJ5RmFpbHVyZShmYWls dXJlX3N0YXR1cykpCisJCXJldHVybiBmYWxzZTsKKworCS8qCisJICogV2UgbXVzdCBoYXZlIGF0 IGxlYXN0IG9uZSBvcHRpb24gdG8gbGltaXQgdGhlIHJldHJ5aW5nIG9mIGZhaWxlZAorCSAqIHRy YW5zYWN0aW9ucy4KKwkgKi8KKwlBc3NlcnQobWF4X3RyaWVzIHx8IGxhdGVuY3lfbGltaXQpOwor CisJLyoKKwkgKiBXZSBjYW5ub3QgcmV0cnkgdGhlIGZhaWx1cmUgaWYgd2UgaGF2ZSByZWFjaGVk IHRoZSBtYXhpbXVtIG51bWJlciBvZgorCSAqIHRyaWVzLgorCSAqLworCWlmIChtYXhfdHJpZXMg JiYgc3QtPnJldHJpZXMgKyAxID49IG1heF90cmllcykKKwkJcmV0dXJuIGZhbHNlOworCisJLyoK KwkgKiBXZSBjYW5ub3QgcmV0cnkgdGhlIGZhaWx1cmUgaWYgd2Ugc3BlbnQgdG9vIG11Y2ggdGlt ZSBvbiB0aGlzCisJICogdHJhbnNhY3Rpb24uCisJICovCisJaWYgKGxhdGVuY3lfbGltaXQpCisJ eworCQlpZiAoSU5TVFJfVElNRV9JU19aRVJPKCpub3cpKQorCQkJSU5TVFJfVElNRV9TRVRfQ1VS UkVOVCgqbm93KTsKKworCQlpZiAoSU5TVFJfVElNRV9HRVRfTUlDUk9TRUMoKm5vdykgLSBzdC0+ dHhuX3NjaGVkdWxlZCA+PSBsYXRlbmN5X2xpbWl0KQorCQkJcmV0dXJuIGZhbHNlOworCX0KKwor CS8qIE9LICovCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBQcm9jZXNzIHRoZSBjb25kaXRp b25hbCBzdGFjayBkZXBlbmRpbmcgb24gdGhlIGNvbmRpdGlvbiB2YWx1ZTsgaXMgdXNlZCBmb3IK KyAqIHRoZSBtZXRhIGNvbW1hbmRzIFxpZiBhbmQgXGVsaWYuCisgKi8KK3N0YXRpYyB2b2lkCitl eGVjdXRlQ29uZGl0aW9uKENTdGF0ZSAqc3QsIGJvb2wgY29uZGl0aW9uKQoreworCUNvbW1hbmQg ICAgKmNvbW1hbmQgPSBzcWxfc2NyaXB0W3N0LT51c2VfZmlsZV0uY29tbWFuZHNbc3QtPmNvbW1h bmRdOworCisJLyogZXhlY3V0ZSBvciBub3QgZGVwZW5kaW5nIG9uIGV2YWx1YXRlZCBjb25kaXRp b24gKi8KKwlpZiAoY29tbWFuZC0+bWV0YSA9PSBNRVRBX0lGKQorCXsKKwkJY29uZGl0aW9uYWxf c3RhY2tfcHVzaChzdC0+Y3N0YWNrLAorCQkJCQkJCSAgIGNvbmRpdGlvbiA/IElGU1RBVEVfVFJV RSA6IElGU1RBVEVfRkFMU0UpOworCX0KKwllbHNlIGlmIChjb21tYW5kLT5tZXRhID09IE1FVEFf RUxJRikKKwl7CisJCS8qIHdlIHNob3VsZCBnZXQgaGVyZSBvbmx5IGlmIHRoZSAiZWxpZiIgbmVl ZGVkIGV2YWx1YXRpb24gKi8KKwkJQXNzZXJ0KGNvbmRpdGlvbmFsX3N0YWNrX3BlZWsoc3QtPmNz dGFjaykgPT0gSUZTVEFURV9GQUxTRSk7CisJCWNvbmRpdGlvbmFsX3N0YWNrX3Bva2Uoc3QtPmNz dGFjaywKKwkJCQkJCQkgICBjb25kaXRpb24gPyBJRlNUQVRFX1RSVUUgOiBJRlNUQVRFX0ZBTFNF KTsKKwl9Cit9CisKKy8qCisgKiBHZXQgdGhlIGZhaWx1cmUgc3RhdHVzIGZyb20gdGhlIGVycm9y IGNvZGUuCisgKi8KK3N0YXRpYyBGYWlsdXJlU3RhdHVzCitnZXRGYWlsdXJlU3RhdHVzKGNoYXIg KnNxbFN0YXRlKQoreworCWlmIChzcWxTdGF0ZSkKKwl7CisJCWlmIChzdHJjbXAoc3FsU3RhdGUs IEVSUkNPREVfVF9SX1NFUklBTElaQVRJT05fRkFJTFVSRSkgPT0gMCkKKwkJCXJldHVybiBTRVJJ QUxJWkFUSU9OX0ZBSUxVUkU7CisJCWVsc2UgaWYgKHN0cmNtcChzcWxTdGF0ZSwgRVJSQ09ERV9U X1JfREVBRExPQ0tfREVURUNURUQpID09IDApCisJCQlyZXR1cm4gREVBRExPQ0tfRkFJTFVSRTsK KwkJZWxzZSBpZiAoc3RyY21wKHNxbFN0YXRlLCBFUlJDT0RFX0lOX0ZBSUxFRF9TUUxfVFJBTlNB Q1RJT04pID09IDApCisJCQlyZXR1cm4gSU5fRkFJTEVEX1NRTF9UUkFOU0FDVElPTjsKKwl9CisK KwlyZXR1cm4gQU5PVEhFUl9GQUlMVVJFOworfQorCisvKgorICogSWYgdGhlIGxhdGVuY3kgbGlt aXQgaXMgdXNlZCwgcmV0dXJuIGEgcGVyY2VudGFnZSBvZiB0aGUgY3VycmVudCB0cmFuc2FjdGlv bgorICogbGF0ZW5jeSBmcm9tIHRoZSBsYXRlbmN5IGxpbWl0LiBPdGhlcndpc2UgcmV0dXJuIHpl cm8uCisgKi8KK3N0YXRpYyBkb3VibGUKK2dldExhdGVuY3lVc2VkKENTdGF0ZSAqc3QsIGluc3Ry X3RpbWUgKm5vdykKK3sKKwlpZiAoIWxhdGVuY3lfbGltaXQpCisJCXJldHVybiAwOworCisJaWYg KElOU1RSX1RJTUVfSVNfWkVSTygqbm93KSkKKwkJSU5TVFJfVElNRV9TRVRfQ1VSUkVOVCgqbm93 KTsKKworCXJldHVybiAoMTAwLjAgKiAoSU5TVFJfVElNRV9HRVRfTUlDUk9TRUMoKm5vdykgLSBz dC0+dHhuX3NjaGVkdWxlZCkgLworCQkJbGF0ZW5jeV9saW1pdCk7Cit9CisKKy8qCiAgKiBBZHZh bmNlIHRoZSBzdGF0ZSBtYWNoaW5lIG9mIGEgY29ubmVjdGlvbiwgaWYgcG9zc2libGUuCiAgKi8K IHN0YXRpYyB2b2lkCkBAIC0yODc2LDYgKzMyMzgsNyBAQCBkb0N1c3RvbShUU3RhdGUgKnRocmVh ZCwgQ1N0YXRlICpzdCwgU3RhdHNEYXRhICphZ2cpCiAJaW5zdHJfdGltZQlub3c7CiAJYm9vbAkJ ZW5kX3R4X3Byb2Nlc3NlZCA9IGZhbHNlOwogCWludDY0CQl3YWl0OworCUZhaWx1cmVTdGF0dXMg ZmFpbHVyZV9zdGF0dXMgPSBOT19GQUlMVVJFOwogCiAJLyoKIAkgKiBnZXR0aW1lb2ZkYXkoKSBp c24ndCBmcmVlLCBzbyB3ZSBnZXQgdGhlIGN1cnJlbnQgdGltZXN0YW1wIGxhemlseSB0aGUKQEAg LTI5MTYsNiArMzI3OSwxMSBAQCBkb0N1c3RvbShUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwg U3RhdHNEYXRhICphZ2cpCiAJCQkJCXN0LT5zdGF0ZSA9IENTVEFURV9TVEFSVF9UWDsKIAkJCQkv KiBjaGVjayBjb25zaXN0ZW5jeSAqLwogCQkJCUFzc2VydChjb25kaXRpb25hbF9zdGFja19lbXB0 eShzdC0+Y3N0YWNrKSk7CisKKwkJCQkvKiByZXNldCB0cmFuc2FjdGlvbiB2YXJpYWJsZXMgdG8g ZGVmYXVsdCB2YWx1ZXMgKi8KKwkJCQlzdC0+Zmlyc3RfZmFpbHVyZS5zdGF0dXMgPSBOT19GQUlM VVJFOworCQkJCXN0LT5yZXRyaWVzID0gMDsKKwogCQkJCWJyZWFrOwogCiAJCQkJLyoKQEAgLTI5 NjMsNyArMzMzMSw3IEBAIGRvQ3VzdG9tKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LCBTdGF0 c0RhdGEgKmFnZykKIAkJCQkJCUlOU1RSX1RJTUVfU0VUX0NVUlJFTlQobm93KTsKIAkJCQkJbm93 X3VzID0gSU5TVFJfVElNRV9HRVRfTUlDUk9TRUMobm93KTsKIAkJCQkJd2hpbGUgKHRocmVhZC0+ dGhyb3R0bGVfdHJpZ2dlciA8IG5vd191cyAtIGxhdGVuY3lfbGltaXQgJiYKLQkJCQkJCSAgIChu eGFjdHMgPD0gMCB8fCBzdC0+Y250IDwgbnhhY3RzKSkKKwkJCQkJCSAgIChueGFjdHMgPD0gMCB8 fCBnZXRUb3RhbENudChzdCkgPCBueGFjdHMpKQogCQkJCQl7CiAJCQkJCQlwcm9jZXNzWGFjdFN0 YXRzKHRocmVhZCwgc3QsICZub3csIHRydWUsIGFnZyk7CiAJCQkJCQkvKiBuZXh0IHJlbmRlei12 b3VzICovCkBAIC0yOTczLDcgKzMzNDEsNyBAQCBkb0N1c3RvbShUU3RhdGUgKnRocmVhZCwgQ1N0 YXRlICpzdCwgU3RhdHNEYXRhICphZ2cpCiAJCQkJCQlzdC0+dHhuX3NjaGVkdWxlZCA9IHRocmVh ZC0+dGhyb3R0bGVfdHJpZ2dlcjsKIAkJCQkJfQogCQkJCQkvKiBzdG9wIGNsaWVudCBpZiAtdCBl eGNlZWRlZCAqLwotCQkJCQlpZiAobnhhY3RzID4gMCAmJiBzdC0+Y250ID49IG54YWN0cykKKwkJ CQkJaWYgKG54YWN0cyA+IDAgJiYgZ2V0VG90YWxDbnQoc3QpID49IG54YWN0cykKIAkJCQkJewog CQkJCQkJc3QtPnN0YXRlID0gQ1NUQVRFX0ZJTklTSEVEOwogCQkJCQkJYnJlYWs7CkBAIC0zMDE1 LDcgKzMzODMsNyBAQCBkb0N1c3RvbShUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwgU3RhdHNE YXRhICphZ2cpCiAJCQkJCXN0YXJ0ID0gbm93OwogCQkJCQlpZiAoKHN0LT5jb24gPSBkb0Nvbm5l Y3QoKSkgPT0gTlVMTCkKIAkJCQkJewotCQkJCQkJZXJlcG9ydChFTEVWRUxfTE9HLAorCQkJCQkJ ZXJlcG9ydChFTEVWRUxfTE9HX0NMSUVOVF9BQk9SVEVELAogCQkJCQkJCQkoZXJybXNnKCJjbGll bnQgJWQgYWJvcnRlZCB3aGlsZSBlc3RhYmxpc2hpbmcgY29ubmVjdGlvblxuIiwKIAkJCQkJCQkJ CQlzdC0+aWQpKSk7CiAJCQkJCQlzdC0+c3RhdGUgPSBDU1RBVEVfQUJPUlRFRDsKQEAgLTMwMjks NiArMzM5NywxNSBAQCBkb0N1c3RvbShUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwgU3RhdHNE YXRhICphZ2cpCiAJCQkJfQogCiAJCQkJLyoKKwkJCQkgKiBJdCBpcyB0aGUgZmlyc3QgdHJ5IHRv IHJ1biB0aGlzIHRyYW5zYWN0aW9uLiBSZW1lbWJlciBpdHMKKwkJCQkgKiBwYXJhbWV0ZXJzIGp1 c3QgaW4gY2FzZSBpZiBpdCBmYWlscyBvciB3ZSBzaG91bGQgcmVwZWF0IGl0IGluCisJCQkJICog ZnV0dXJlLgorCQkJCSAqLworCQkJCWNvcHlSYW5kb21TdGF0ZSgmc3QtPnJldHJ5X3N0YXRlLnJh bmRvbV9zdGF0ZSwKKwkJCQkJCQkJJnN0LT5yYW5kb21fc3RhdGUpOworCQkJCWNvcHlWYXJpYWJs ZXMoJnN0LT5yZXRyeV9zdGF0ZS52YXJpYWJsZXMsICZzdC0+dmFyaWFibGVzKTsKKworCQkJCS8q CiAJCQkJICogUmVjb3JkIHRyYW5zYWN0aW9uIHN0YXJ0IHRpbWUgdW5kZXIgbG9nZ2luZywgcHJv Z3Jlc3Mgb3IKIAkJCQkgKiB0aHJvdHRsaW5nLgogCQkJCSAqLwpAQCAtMzA2NCw3ICszNDQxLDE1 IEBAIGRvQ3VzdG9tKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LCBTdGF0c0RhdGEgKmFnZykK IAkJCQkgKi8KIAkJCQlpZiAoY29tbWFuZCA9PSBOVUxMKQogCQkJCXsKLQkJCQkJc3QtPnN0YXRl ID0gQ1NUQVRFX0VORF9UWDsKKwkJCQkJaWYgKHN0LT5maXJzdF9mYWlsdXJlLnN0YXR1cyA9PSBO T19GQUlMVVJFKQorCQkJCQl7CisJCQkJCQlzdC0+c3RhdGUgPSBDU1RBVEVfRU5EX1RYOworCQkJ CQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJLyogY2hlY2sgaWYgd2UgY2FuIHJldHJ5IHRo ZSBmYWlsdXJlICovCisJCQkJCQlzdC0+c3RhdGUgPSBDU1RBVEVfUkVUUlk7CisJCQkJCX0KIAkJ CQkJYnJlYWs7CiAJCQkJfQogCkBAIC0zMDcyLDcgKzM0NTcsNyBAQCBkb0N1c3RvbShUU3RhdGUg KnRocmVhZCwgQ1N0YXRlICpzdCwgU3RhdHNEYXRhICphZ2cpCiAJCQkJICogUmVjb3JkIHN0YXRl bWVudCBzdGFydCB0aW1lIGlmIHBlci1jb21tYW5kIGxhdGVuY2llcyBhcmUKIAkJCQkgKiByZXF1 ZXN0ZWQKIAkJCQkgKi8KLQkJCQlpZiAoaXNfbGF0ZW5jaWVzKQorCQkJCWlmIChyZXBvcnRfcGVy X2NvbW1hbmQpCiAJCQkJewogCQkJCQlpZiAoSU5TVFJfVElNRV9JU19aRVJPKG5vdykpCiAJCQkJ CQlJTlNUUl9USU1FX1NFVF9DVVJSRU5UKG5vdyk7CkBAIC0zMDgzLDcgKzM0NjgsOCBAQCBkb0N1 c3RvbShUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwgU3RhdHNEYXRhICphZ2cpCiAJCQkJewog CQkJCQlpZiAoIXNlbmRDb21tYW5kKHN0LCBjb21tYW5kKSkKIAkJCQkJewotCQkJCQkJY29tbWFu ZEZhaWxlZChzdCwgIlNRTCIsICJTUUwgY29tbWFuZCBzZW5kIGZhaWxlZCIpOworCQkJCQkJY29t bWFuZEZhaWxlZChzdCwgIlNRTCIsICJTUUwgY29tbWFuZCBzZW5kIGZhaWxlZCIsCisJCQkJCQkJ CQkgIEVMRVZFTF9MT0dfQ0xJRU5UX0FCT1JURUQpOwogCQkJCQkJc3QtPnN0YXRlID0gQ1NUQVRF X0FCT1JURUQ7CiAJCQkJCX0KIAkJCQkJZWxzZQpAQCAtMzEwNSw2ICszNDkxLDkgQEAgZG9DdXN0 b20oVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsIFN0YXRzRGF0YSAqYWdnKQogCQkJCQllcmVw b3J0KEVMRVZFTF9ERUJVRywgKGVycm1zZygiJXMiLCBlcnJtc2dfYnVmLmRhdGEpKSk7CiAJCQkJ CXRlcm1QUUV4cEJ1ZmZlcigmZXJybXNnX2J1Zik7CiAKKwkJCQkJLyogY2hhbmdlIGl0IGlmIHRo ZSBtZXRhIGNvbW1hbmQgZmFpbHMgKi8KKwkJCQkJZmFpbHVyZV9zdGF0dXMgPSBOT19GQUlMVVJF OworCiAJCQkJCWlmIChjb21tYW5kLT5tZXRhID09IE1FVEFfU0xFRVApCiAJCQkJCXsKIAkJCQkJ CS8qCkBAIC0zMTE4LDggKzM1MDcsMTEgQEAgZG9DdXN0b20oVFN0YXRlICp0aHJlYWQsIENTdGF0 ZSAqc3QsIFN0YXRzRGF0YSAqYWdnKQogCiAJCQkJCQlpZiAoIWV2YWx1YXRlU2xlZXAoJnN0LT52 YXJpYWJsZXMsIGFyZ2MsIGFyZ3YsICZ1c2VjKSkKIAkJCQkJCXsKLQkJCQkJCQljb21tYW5kRmFp bGVkKHN0LCAic2xlZXAiLCAiZXhlY3V0aW9uIG9mIG1ldGEtY29tbWFuZCBmYWlsZWQiKTsKLQkJ CQkJCQlzdC0+c3RhdGUgPSBDU1RBVEVfQUJPUlRFRDsKKwkJCQkJCQljb21tYW5kRmFpbGVkKHN0 LCAic2xlZXAiLAorCQkJCQkJCQkJCSAgImV4ZWN1dGlvbiBvZiBtZXRhLWNvbW1hbmQgZmFpbGVk IiwKKwkJCQkJCQkJCQkgIEVMRVZFTF9MT0dfQ0xJRU5UX0ZBSUwpOworCQkJCQkJCWZhaWx1cmVf c3RhdHVzID0gQU5PVEhFUl9GQUlMVVJFOworCQkJCQkJCXN0LT5zdGF0ZSA9IENTVEFURV9GQUlM VVJFOwogCQkJCQkJCWJyZWFrOwogCQkJCQkJfQogCkBAIC0zMTUwLDggKzM1NDIsMTggQEAgZG9D dXN0b20oVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsIFN0YXRzRGF0YSAqYWdnKQogCiAJCQkJ CQlpZiAoIWV2YWx1YXRlRXhwcih0aHJlYWQsIHN0LCBleHByLCAmcmVzdWx0KSkKIAkJCQkJCXsK LQkJCQkJCQljb21tYW5kRmFpbGVkKHN0LCBhcmd2WzBdLCAiZXZhbHVhdGlvbiBvZiBtZXRhLWNv bW1hbmQgZmFpbGVkIik7Ci0JCQkJCQkJc3QtPnN0YXRlID0gQ1NUQVRFX0FCT1JURUQ7CisJCQkJ CQkJY29tbWFuZEZhaWxlZChzdCwgYXJndlswXSwKKwkJCQkJCQkJCQkgICJldmFsdWF0aW9uIG9m IG1ldGEtY29tbWFuZCBmYWlsZWQiLAorCQkJCQkJCQkJCSAgRUxFVkVMX0xPR19DTElFTlRfRkFJ TCk7CisKKwkJCQkJCQkvKgorCQkJCQkJCSAqIERvIG5vdCBydWluIHRoZSBmb2xsb3dpbmcgY29u ZGl0aW9uYWwgY29tbWFuZHMsCisJCQkJCQkJICogaWYgYW55LgorCQkJCQkJCSAqLworCQkJCQkJ CWV4ZWN1dGVDb25kaXRpb24oc3QsIGZhbHNlKTsKKworCQkJCQkJCWZhaWx1cmVfc3RhdHVzID0g QU5PVEhFUl9GQUlMVVJFOworCQkJCQkJCXN0LT5zdGF0ZSA9IENTVEFURV9GQUlMVVJFOwogCQkJ CQkJCWJyZWFrOwogCQkJCQkJfQogCkBAIC0zMTYwLDI5ICszNTYyLDE3IEBAIGRvQ3VzdG9tKFRT dGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LCBTdGF0c0RhdGEgKmFnZykKIAkJCQkJCQlpZiAoIXB1 dFZhcmlhYmxlVmFsdWUoJnN0LT52YXJpYWJsZXMsICBhcmd2WzBdLAogCQkJCQkJCQkJCQkJICBh cmd2WzFdLCAmcmVzdWx0LCB0cnVlKSkKIAkJCQkJCQl7Ci0JCQkJCQkJCWNvbW1hbmRGYWlsZWQo c3QsICJzZXQiLCAiYXNzaWdubWVudCBvZiBtZXRhLWNvbW1hbmQgZmFpbGVkIik7Ci0JCQkJCQkJ CXN0LT5zdGF0ZSA9IENTVEFURV9BQk9SVEVEOworCQkJCQkJCQljb21tYW5kRmFpbGVkKHN0LCAi c2V0IiwKKwkJCQkJCQkJCQkJICAiYXNzaWdubWVudCBvZiBtZXRhLWNvbW1hbmQgZmFpbGVkIiwK KwkJCQkJCQkJCQkJICBFTEVWRUxfTE9HX0NMSUVOVF9GQUlMKTsKKwkJCQkJCQkJZmFpbHVyZV9z dGF0dXMgPSBBTk9USEVSX0ZBSUxVUkU7CisJCQkJCQkJCXN0LT5zdGF0ZSA9IENTVEFURV9GQUlM VVJFOwogCQkJCQkJCQlicmVhazsKIAkJCQkJCQl9CiAJCQkJCQl9CiAJCQkJCQllbHNlCS8qIGlm IGFuZCBlbGlmIGV2YWx1YXRlZCBjYXNlcyAqLwogCQkJCQkJewotCQkJCQkJCWJvb2wJCWNvbmQg PSB2YWx1ZVRydXRoKCZyZXN1bHQpOwotCi0JCQkJCQkJLyogZXhlY3V0ZSBvciBub3QgZGVwZW5k aW5nIG9uIGV2YWx1YXRlZCBjb25kaXRpb24gKi8KLQkJCQkJCQlpZiAoY29tbWFuZC0+bWV0YSA9 PSBNRVRBX0lGKQotCQkJCQkJCXsKLQkJCQkJCQkJY29uZGl0aW9uYWxfc3RhY2tfcHVzaChzdC0+ Y3N0YWNrLCBjb25kID8gSUZTVEFURV9UUlVFIDogSUZTVEFURV9GQUxTRSk7Ci0JCQkJCQkJfQot CQkJCQkJCWVsc2UJLyogZWxpZiAqLwotCQkJCQkJCXsKLQkJCQkJCQkJLyoKLQkJCQkJCQkJICog d2Ugc2hvdWxkIGdldCBoZXJlIG9ubHkgaWYgdGhlICJlbGlmIgotCQkJCQkJCQkgKiBuZWVkZWQg ZXZhbHVhdGlvbgotCQkJCQkJCQkgKi8KLQkJCQkJCQkJQXNzZXJ0KGNvbmRpdGlvbmFsX3N0YWNr X3BlZWsoc3QtPmNzdGFjaykgPT0gSUZTVEFURV9GQUxTRSk7Ci0JCQkJCQkJCWNvbmRpdGlvbmFs X3N0YWNrX3Bva2Uoc3QtPmNzdGFjaywgY29uZCA/IElGU1RBVEVfVFJVRSA6IElGU1RBVEVfRkFM U0UpOwotCQkJCQkJCX0KKwkJCQkJCQlleGVjdXRlQ29uZGl0aW9uKHN0LCB2YWx1ZVRydXRoKCZy ZXN1bHQpKTsKIAkJCQkJCX0KIAkJCQkJfQogCQkJCQllbHNlIGlmIChjb21tYW5kLT5tZXRhID09 IE1FVEFfRUxTRSkKQEAgLTMyMjIsOCArMzYxMiwxMSBAQCBkb0N1c3RvbShUU3RhdGUgKnRocmVh ZCwgQ1N0YXRlICpzdCwgU3RhdHNEYXRhICphZ2cpCiAJCQkJCQl9CiAJCQkJCQllbHNlIGlmICgh cmV0KQkvKiBvbiBlcnJvciAqLwogCQkJCQkJewotCQkJCQkJCWNvbW1hbmRGYWlsZWQoc3QsICJz ZXRzaGVsbCIsICJleGVjdXRpb24gb2YgbWV0YS1jb21tYW5kIGZhaWxlZCIpOwotCQkJCQkJCXN0 LT5zdGF0ZSA9IENTVEFURV9BQk9SVEVEOworCQkJCQkJCWNvbW1hbmRGYWlsZWQoc3QsICJzZXRz aGVsbCIsCisJCQkJCQkJCQkJICAiZXhlY3V0aW9uIG9mIG1ldGEtY29tbWFuZCBmYWlsZWQiLAor CQkJCQkJCQkJCSAgRUxFVkVMX0xPR19DTElFTlRfRkFJTCk7CisJCQkJCQkJZmFpbHVyZV9zdGF0 dXMgPSBBTk9USEVSX0ZBSUxVUkU7CisJCQkJCQkJc3QtPnN0YXRlID0gQ1NUQVRFX0ZBSUxVUkU7 CiAJCQkJCQkJYnJlYWs7CiAJCQkJCQl9CiAJCQkJCQllbHNlCkBAIC0zMjQzLDggKzM2MzYsMTEg QEAgZG9DdXN0b20oVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsIFN0YXRzRGF0YSAqYWdnKQog CQkJCQkJfQogCQkJCQkJZWxzZSBpZiAoIXJldCkJLyogb24gZXJyb3IgKi8KIAkJCQkJCXsKLQkJ CQkJCQljb21tYW5kRmFpbGVkKHN0LCAic2hlbGwiLCAiZXhlY3V0aW9uIG9mIG1ldGEtY29tbWFu ZCBmYWlsZWQiKTsKLQkJCQkJCQlzdC0+c3RhdGUgPSBDU1RBVEVfQUJPUlRFRDsKKwkJCQkJCQlj b21tYW5kRmFpbGVkKHN0LCAic2hlbGwiLAorCQkJCQkJCQkJCSAgImV4ZWN1dGlvbiBvZiBtZXRh LWNvbW1hbmQgZmFpbGVkIiwKKwkJCQkJCQkJCQkgIEVMRVZFTF9MT0dfQ0xJRU5UX0ZBSUwpOwor CQkJCQkJCWZhaWx1cmVfc3RhdHVzID0gQU5PVEhFUl9GQUlMVVJFOworCQkJCQkJCXN0LT5zdGF0 ZSA9IENTVEFURV9GQUlMVVJFOwogCQkJCQkJCWJyZWFrOwogCQkJCQkJfQogCQkJCQkJZWxzZQpA QCAtMzM2MCwzNyArMzc1Niw1NSBAQCBkb0N1c3RvbShUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpz dCwgU3RhdHNEYXRhICphZ2cpCiAJCQkJICogV2FpdCBmb3IgdGhlIGN1cnJlbnQgU1FMIGNvbW1h bmQgdG8gY29tcGxldGUKIAkJCQkgKi8KIAkJCWNhc2UgQ1NUQVRFX1dBSVRfUkVTVUxUOgotCQkJ CWNvbW1hbmQgPSBzcWxfc2NyaXB0W3N0LT51c2VfZmlsZV0uY29tbWFuZHNbc3QtPmNvbW1hbmRd OwotCQkJCWVyZXBvcnQoRUxFVkVMX0RFQlVHLAotCQkJCQkJKGVycm1zZygiY2xpZW50ICVkIHJl Y2VpdmluZ1xuIiwgc3QtPmlkKSkpOwotCQkJCWlmICghUFFjb25zdW1lSW5wdXQoc3QtPmNvbikp Ci0JCQkJewkJCQkvKiB0aGVyZSdzIHNvbWV0aGluZyB3cm9uZyAqLwotCQkJCQljb21tYW5kRmFp bGVkKHN0LCAiU1FMIiwgInBlcmhhcHMgdGhlIGJhY2tlbmQgZGllZCB3aGlsZSBwcm9jZXNzaW5n Iik7Ci0JCQkJCXN0LT5zdGF0ZSA9IENTVEFURV9BQk9SVEVEOwotCQkJCQlicmVhazsKLQkJCQl9 Ci0JCQkJaWYgKFBRaXNCdXN5KHN0LT5jb24pKQotCQkJCQlyZXR1cm47CQkvKiBkb24ndCBoYXZl IHRoZSB3aG9sZSByZXN1bHQgeWV0ICovCi0KLQkJCQkvKgotCQkJCSAqIFJlYWQgYW5kIGRpc2Nh cmQgdGhlIHF1ZXJ5IHJlc3VsdDsKLQkJCQkgKi8KLQkJCQlyZXMgPSBQUWdldFJlc3VsdChzdC0+ Y29uKTsKLQkJCQlzd2l0Y2ggKFBRcmVzdWx0U3RhdHVzKHJlcykpCiAJCQkJewotCQkJCQljYXNl IFBHUkVTX0NPTU1BTkRfT0s6Ci0JCQkJCWNhc2UgUEdSRVNfVFVQTEVTX09LOgotCQkJCQljYXNl IFBHUkVTX0VNUFRZX1FVRVJZOgotCQkJCQkJLyogT0sgKi8KLQkJCQkJCVBRY2xlYXIocmVzKTsK LQkJCQkJCWRpc2NhcmRfcmVzcG9uc2Uoc3QpOwotCQkJCQkJc3QtPnN0YXRlID0gQ1NUQVRFX0VO RF9DT01NQU5EOwotCQkJCQkJYnJlYWs7Ci0JCQkJCWRlZmF1bHQ6Ci0JCQkJCQljb21tYW5kRmFp bGVkKHN0LCAiU1FMIiwgUFFlcnJvck1lc3NhZ2Uoc3QtPmNvbikpOwotCQkJCQkJUFFjbGVhcihy ZXMpOworCQkJCQljaGFyCSAgICpzcWxTdGF0ZTsKKworCQkJCQljb21tYW5kID0gc3FsX3Njcmlw dFtzdC0+dXNlX2ZpbGVdLmNvbW1hbmRzW3N0LT5jb21tYW5kXTsKKwkJCQkJZXJlcG9ydChFTEVW RUxfREVCVUcsCisJCQkJCQkJKGVycm1zZygiY2xpZW50ICVkIHJlY2VpdmluZ1xuIiwgc3QtPmlk KSkpOworCQkJCQlpZiAoIVBRY29uc3VtZUlucHV0KHN0LT5jb24pKQorCQkJCQl7CQkJCS8qIHRo ZXJlJ3Mgc29tZXRoaW5nIHdyb25nICovCisJCQkJCQljb21tYW5kRmFpbGVkKHN0LCAiU1FMIiwK KwkJCQkJCQkJCSAgInBlcmhhcHMgdGhlIGJhY2tlbmQgZGllZCB3aGlsZSBwcm9jZXNzaW5nIiwK KwkJCQkJCQkJCSAgRUxFVkVMX0xPR19DTElFTlRfQUJPUlRFRCk7CiAJCQkJCQlzdC0+c3RhdGUg PSBDU1RBVEVfQUJPUlRFRDsKIAkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWlmIChQUWlzQnVz eShzdC0+Y29uKSkKKwkJCQkJCXJldHVybjsJCS8qIGRvbid0IGhhdmUgdGhlIHdob2xlIHJlc3Vs dCB5ZXQgKi8KKworCQkJCQkvKgorCQkJCQkgKiBSZWFkIGFuZCBkaXNjYXJkIHRoZSBxdWVyeSBy ZXN1bHQ7CisJCQkJCSAqLworCQkJCQlyZXMgPSBQUWdldFJlc3VsdChzdC0+Y29uKTsKKwkJCQkJ c3FsU3RhdGUgPSBQUXJlc3VsdEVycm9yRmllbGQocmVzLCBQR19ESUFHX1NRTFNUQVRFKTsKKwkJ CQkJc3dpdGNoIChQUXJlc3VsdFN0YXR1cyhyZXMpKQorCQkJCQl7CisJCQkJCQljYXNlIFBHUkVT X0NPTU1BTkRfT0s6CisJCQkJCQljYXNlIFBHUkVTX1RVUExFU19PSzoKKwkJCQkJCWNhc2UgUEdS RVNfRU1QVFlfUVVFUlk6CisJCQkJCQkJLyogT0sgKi8KKwkJCQkJCQlQUWNsZWFyKHJlcyk7CisJ CQkJCQkJZGlzY2FyZF9yZXNwb25zZShzdCk7CisJCQkJCQkJZmFpbHVyZV9zdGF0dXMgPSBOT19G QUlMVVJFOworCQkJCQkJCXN0LT5zdGF0ZSA9IENTVEFURV9FTkRfQ09NTUFORDsKKwkJCQkJCQli cmVhazsKKwkJCQkJCWNhc2UgUEdSRVNfTk9ORkFUQUxfRVJST1I6CisJCQkJCQljYXNlIFBHUkVT X0ZBVEFMX0VSUk9SOgorCQkJCQkJCWZhaWx1cmVfc3RhdHVzID0gZ2V0RmFpbHVyZVN0YXR1cyhz cWxTdGF0ZSk7CisJCQkJCQkJY29tbWFuZEZhaWxlZChzdCwgIlNRTCIsIFBRZXJyb3JNZXNzYWdl KHN0LT5jb24pLAorCQkJCQkJCQkJCSAgRUxFVkVMX0xPR19DTElFTlRfRkFJTCk7CisJCQkJCQkJ UFFjbGVhcihyZXMpOworCQkJCQkJCWRpc2NhcmRfcmVzcG9uc2Uoc3QpOworCQkJCQkJCXN0LT5z dGF0ZSA9IENTVEFURV9GQUlMVVJFOworCQkJCQkJCWJyZWFrOworCQkJCQkJZGVmYXVsdDoKKwkJ CQkJCQljb21tYW5kRmFpbGVkKHN0LCAiU1FMIiwgUFFlcnJvck1lc3NhZ2Uoc3QtPmNvbiksCisJ CQkJCQkJCQkJICBFTEVWRUxfTE9HX0NMSUVOVF9BQk9SVEVEKTsKKwkJCQkJCQlQUWNsZWFyKHJl cyk7CisJCQkJCQkJc3QtPnN0YXRlID0gQ1NUQVRFX0FCT1JURUQ7CisJCQkJCQkJYnJlYWs7CisJ CQkJCX0KIAkJCQl9CiAJCQkJYnJlYWs7CiAKQEAgLTM0MTksNyArMzgzMyw3IEBAIGRvQ3VzdG9t KFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LCBTdGF0c0RhdGEgKmFnZykKIAkJCQkgKiBpbiB0 aHJlYWQtbG9jYWwgZGF0YSBzdHJ1Y3R1cmUsIGlmIHBlci1jb21tYW5kIGxhdGVuY2llcwogCQkJ CSAqIGFyZSByZXF1ZXN0ZWQuCiAJCQkJICovCi0JCQkJaWYgKGlzX2xhdGVuY2llcykKKwkJCQlp ZiAocmVwb3J0X3Blcl9jb21tYW5kKQogCQkJCXsKIAkJCQkJaWYgKElOU1RSX1RJTUVfSVNfWkVS Tyhub3cpKQogCQkJCQkJSU5TVFJfVElNRV9TRVRfQ1VSUkVOVChub3cpOwpAQCAtMzQzOCw2ICsz ODUyLDEzOSBAQCBkb0N1c3RvbShUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwgU3RhdHNEYXRh ICphZ2cpCiAJCQkJYnJlYWs7CiAKIAkJCQkvKgorCQkJCSAqIFJlbWVtYmVyIHRoZSBmYWlsdXJl IGFuZCBnbyBhaGVhZCB3aXRoIG5leHQgY29tbWFuZC4KKwkJCQkgKi8KKwkJCWNhc2UgQ1NUQVRF X0ZBSUxVUkU6CisKKwkJCQlBc3NlcnQoZmFpbHVyZV9zdGF0dXMgIT0gTk9fRkFJTFVSRSk7CisK KwkJCQkvKgorCQkJCSAqIEFsbCBzdWJzZXF1ZW50IGZhaWx1cmVzIHdpbGwgYmUgInJldHJpZWQi LyJmYWlsZWQiIGlmIHRoZQorCQkJCSAqIGZpcnN0IGZhaWx1cmUgb2YgdGhpcyB0cmFuc2FjdGlv biBjYW4gYmUvY2Fubm90IGJlIHJldHJpZWQuCisJCQkJICogVGhlcmVmb3JlIHJlbWVtYmVyIG9u bHkgdGhlIGZpcnN0IGZhaWx1cmUuCisJCQkJICovCisJCQkJaWYgKHN0LT5maXJzdF9mYWlsdXJl LnN0YXR1cyA9PSBOT19GQUlMVVJFKQorCQkJCXsKKwkJCQkJc3QtPmZpcnN0X2ZhaWx1cmUuc3Rh dHVzID0gZmFpbHVyZV9zdGF0dXM7CisJCQkJCXN0LT5maXJzdF9mYWlsdXJlLmNvbW1hbmQgPSBz dC0+Y29tbWFuZDsKKwkJCQl9CisKKwkJCQkvKiBHbyBhaGVhZCB3aXRoIG5leHQgY29tbWFuZCwg dG8gYmUgZXhlY3V0ZWQgb3Igc2tpcHBlZCAqLworCQkJCXN0LT5jb21tYW5kKys7CisJCQkJc3Qt PnN0YXRlID0gY29uZGl0aW9uYWxfYWN0aXZlKHN0LT5jc3RhY2spID8KKwkJCQkJQ1NUQVRFX1NU QVJUX0NPTU1BTkQgOiBDU1RBVEVfU0tJUF9DT01NQU5EOworCQkJCWJyZWFrOworCisJCQkvKgor CQkJICogUmV0cnkgdGhlIGZhaWxlZCB0cmFuc2FjdGlvbiBpZiBwb3NzaWJsZS4KKwkJCSAqLwor CQkJY2FzZSBDU1RBVEVfUkVUUlk6CisJCQkJeworCQkJCQlQUUV4cEJ1ZmZlckRhdGEgZXJybXNn X2J1ZjsKKworCQkJCQljb21tYW5kID0gc3FsX3NjcmlwdFtzdC0+dXNlX2ZpbGVdLmNvbW1hbmRz W3N0LT5maXJzdF9mYWlsdXJlLmNvbW1hbmRdOworCisJCQkJCWlmIChjYW5SZXRyeShzdCwgJm5v dykpCisJCQkJCXsKKwkJCQkJCS8qCisJCQkJCQkgKiBUaGUgZmFpbGVkIHRyYW5zYWN0aW9uIHdp bGwgYmUgcmV0cmllZC4gU28gYWNjdW11bGF0ZQorCQkJCQkJICogdGhlIHJldHJ5LgorCQkJCQkJ ICovCisJCQkJCQlzdC0+cmV0cmllcysrOworCQkJCQkJY29tbWFuZC0+cmV0cmllcysrOworCisJ CQkJCQkvKgorCQkJCQkJICogUmVwb3J0IHRoaXMgd2l0aCBmYWlsdXJlcyB0byBpbmRpY2F0ZSB0 aGF0IHRoZSBmYWlsZWQKKwkJCQkJCSAqIHRyYW5zYWN0aW9uIHdpbGwgYmUgcmV0cmllZC4KKwkJ CQkJCSAqLworCQkJCQkJaW5pdFBRRXhwQnVmZmVyKCZlcnJtc2dfYnVmKTsKKwkJCQkJCXByaW50 ZlBRRXhwQnVmZmVyKCZlcnJtc2dfYnVmLAorCQkJCQkJCQkJCSAgImNsaWVudCAlZCByZXBlYXRz IHRoZSBmYWlsZWQgdHJhbnNhY3Rpb24gKHRyeSAlZCIsCisJCQkJCQkJCQkJICBzdC0+aWQsIHN0 LT5yZXRyaWVzICsgMSk7CisJCQkJCQlpZiAobWF4X3RyaWVzKQorCQkJCQkJCWFwcGVuZFBRRXhw QnVmZmVyKCZlcnJtc2dfYnVmLCAiLyVkIiwgbWF4X3RyaWVzKTsKKwkJCQkJCWlmIChsYXRlbmN5 X2xpbWl0KQorCQkJCQkJeworCQkJCQkJCWFwcGVuZFBRRXhwQnVmZmVyKCZlcnJtc2dfYnVmLAor CQkJCQkJCQkJCQkgICIsICUuM2YlJSBvZiB0aGUgbWF4aW11bSB0aW1lIG9mIHRyaWVzIHdhcyB1 c2VkIiwKKwkJCQkJCQkJCQkJICBnZXRMYXRlbmN5VXNlZChzdCwgJm5vdykpOworCQkJCQkJfQor CQkJCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmVycm1zZ19idWYsICIpXG4iKTsKKwkJCQkJCWVy ZXBvcnQoRUxFVkVMX0xPR19DTElFTlRfRkFJTCwKKwkJCQkJCQkJKGVycm1zZygiJXMiLCBlcnJt c2dfYnVmLmRhdGEpKSk7CisJCQkJCQl0ZXJtUFFFeHBCdWZmZXIoJmVycm1zZ19idWYpOworCisJ CQkJCQkvKgorCQkJCQkJICogUmVzZXQgdGhlIGV4ZWN1dGlvbiBwYXJhbWV0ZXJzIGFzIHRoZXkg d2VyZSBhdCB0aGUKKwkJCQkJCSAqIGJlZ2lubmluZyBvZiB0aGUgdHJhbnNhY3Rpb24uCisJCQkJ CQkgKi8KKwkJCQkJCWNvcHlSYW5kb21TdGF0ZSgmc3QtPnJhbmRvbV9zdGF0ZSwKKwkJCQkJCQkJ CQkmc3QtPnJldHJ5X3N0YXRlLnJhbmRvbV9zdGF0ZSk7CisJCQkJCQljb3B5VmFyaWFibGVzKCZz dC0+dmFyaWFibGVzLCAmc3QtPnJldHJ5X3N0YXRlLnZhcmlhYmxlcyk7CisKKwkJCQkJCS8qIFBy b2Nlc3MgdGhlIGZpcnN0IHRyYW5zYWN0aW9uIGNvbW1hbmQgKi8KKwkJCQkJCXN0LT5jb21tYW5k ID0gMDsKKwkJCQkJCXN0LT5maXJzdF9mYWlsdXJlLnN0YXR1cyA9IE5PX0ZBSUxVUkU7CisJCQkJ CQlzdC0+c3RhdGUgPSBDU1RBVEVfU1RBUlRfQ09NTUFORDsKKwkJCQkJfQorCQkJCQllbHNlCisJ CQkJCXsKKwkJCQkJCS8qCisJCQkJCQkgKiBXZSB3aWxsIG5vdCBiZSBhYmxlIHRvIHJldHJ5IHRo aXMgZmFpbGVkIHRyYW5zYWN0aW9uLgorCQkJCQkJICogU28gYWNjdW11bGF0ZSB0aGUgZXJyb3Iu CisJCQkJCQkgKi8KKwkJCQkJCWNvbW1hbmQtPmVycm9ycysrOworCQkJCQkJaWYgKHN0LT5maXJz dF9mYWlsdXJlLnN0YXR1cyA9PQorCQkJCQkJCUlOX0ZBSUxFRF9TUUxfVFJBTlNBQ1RJT04pCisJ CQkJCQkJY29tbWFuZC0+ZXJyb3JzX2luX2ZhaWxlZF90eCsrOworCisJCQkJCQkvKgorCQkJCQkJ ICogUmVwb3J0IHRoaXMgd2l0aCBmYWlsdXJlcyB0byBpbmRpY2F0ZSB0aGF0IHRoZSBmYWlsZWQK KwkJCQkJCSAqIHRyYW5zYWN0aW9uIHdpbGwgbm90IGJlIHJldHJpZWQuCisJCQkJCQkgKi8KKwkJ CQkJCWluaXRQUUV4cEJ1ZmZlcigmZXJybXNnX2J1Zik7CisJCQkJCQlwcmludGZQUUV4cEJ1ZmZl cigmZXJybXNnX2J1ZiwKKwkJCQkJCQkJCQkgICJjbGllbnQgJWQgZW5kcyB0aGUgZmFpbGVkIHRy YW5zYWN0aW9uICh0cnkgJWQiLAorCQkJCQkJCQkJCSAgc3QtPmlkLCBzdC0+cmV0cmllcyArIDEp OworCisJCQkJCQkvKgorCQkJCQkJICogUmVwb3J0IHRoZSBhY3R1YWwgbnVtYmVyIGFuZC9vciB0 aW1lIG9mIHRyaWVzLiBXZSBkbworCQkJCQkJICogbm90IG5lZWQgdGhpcyBpbmZvcm1hdGlvbiBp ZiB0aGlzIHR5cGUgb2YgZmFpbHVyZSBjYW4KKwkJCQkJCSAqIGJlIG5ldmVyIHJldHJpZWQuCisJ CQkJCQkgKi8KKwkJCQkJCWlmIChjYW5SZXRyeUZhaWx1cmUoc3QtPmZpcnN0X2ZhaWx1cmUuc3Rh dHVzKSkKKwkJCQkJCXsKKwkJCQkJCQlpZiAobWF4X3RyaWVzKQorCQkJCQkJCXsKKwkJCQkJCQkJ YXBwZW5kUFFFeHBCdWZmZXIoJmVycm1zZ19idWYsICIvJWQiLAorCQkJCQkJCQkJCQkJICBtYXhf dHJpZXMpOworCQkJCQkJCX0KKwkJCQkJCQlpZiAobGF0ZW5jeV9saW1pdCkKKwkJCQkJCQl7CisJ CQkJCQkJCWFwcGVuZFBRRXhwQnVmZmVyKCZlcnJtc2dfYnVmLAorCQkJCQkJCQkJCQkJICAiLCAl LjNmJSUgb2YgdGhlIG1heGltdW0gdGltZSBvZiB0cmllcyB3YXMgdXNlZCIsCisJCQkJCQkJCQkJ CQkgIGdldExhdGVuY3lVc2VkKHN0LCAmbm93KSk7CisJCQkJCQkJfQorCQkJCQkJfQorCQkJCQkJ YXBwZW5kUFFFeHBCdWZmZXJTdHIoJmVycm1zZ19idWYsICIpXG4iKTsKKwkJCQkJCWVyZXBvcnQo RUxFVkVMX0xPR19DTElFTlRfRkFJTCwKKwkJCQkJCQkJKGVycm1zZygiJXMiLCBlcnJtc2dfYnVm LmRhdGEpKSk7CisJCQkJCQl0ZXJtUFFFeHBCdWZmZXIoJmVycm1zZ19idWYpOworCisJCQkJCQkv KgorCQkJCQkJICogUmVzZXQgdGhlIGV4ZWN1dGlvbiBwYXJhbWV0ZXJzIGFzIHRoZXkgd2VyZSBh dCB0aGUKKwkJCQkJCSAqIGJlZ2lubmluZyBvZiB0aGUgdHJhbnNhY3Rpb24gZXhjZXB0IGZvciBh IHJhbmRvbQorCQkJCQkJICogc3RhdGUuCisJCQkJCQkgKi8KKwkJCQkJCWNvcHlWYXJpYWJsZXMo JnN0LT52YXJpYWJsZXMsICZzdC0+cmV0cnlfc3RhdGUudmFyaWFibGVzKTsKKworCQkJCQkJLyog RW5kIHRoZSBmYWlsZWQgdHJhbnNhY3Rpb24gKi8KKwkJCQkJCXN0LT5zdGF0ZSA9IENTVEFURV9F TkRfVFg7CisJCQkJCX0KKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCQkvKgogCQkJCSAqIEVuZCBv ZiB0cmFuc2FjdGlvbi4KIAkJCQkgKi8KIAkJCWNhc2UgQ1NUQVRFX0VORF9UWDoKQEAgLTM0NTgs NyArNDAwNSw4IEBAIGRvQ3VzdG9tKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LCBTdGF0c0Rh dGEgKmFnZykKIAkJCQkJSU5TVFJfVElNRV9TRVRfWkVSTyhub3cpOwogCQkJCX0KIAotCQkJCWlm ICgoc3QtPmNudCA+PSBueGFjdHMgJiYgZHVyYXRpb24gPD0gMCkgfHwgdGltZXJfZXhjZWVkZWQp CisJCQkJaWYgKChnZXRUb3RhbENudChzdCkgPj0gbnhhY3RzICYmIGR1cmF0aW9uIDw9IDApIHx8 CisJCQkJCXRpbWVyX2V4Y2VlZGVkKQogCQkJCXsKIAkJCQkJLyogZXhpdCBzdWNjZXNzICovCiAJ CQkJCXN0LT5zdGF0ZSA9IENTVEFURV9GSU5JU0hFRDsKQEAgLTM1MzQsMTMgKzQwODIsMTUgQEAg ZG9Mb2coVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsCiAJCXdoaWxlIChhZ2ctPnN0YXJ0X3Rp bWUgKyBhZ2dfaW50ZXJ2YWwgPD0gbm93KQogCQl7CiAJCQkvKiBwcmludCBhZ2dyZWdhdGVkIHJl cG9ydCB0byBsb2dmaWxlICovCi0JCQlmcHJpbnRmKGxvZ2ZpbGUsICIlbGQgIiBJTlQ2NF9GT1JN QVQgIiAlLjBmICUuMGYgJS4wZiAlLjBmIiwKKwkJCWZwcmludGYobG9nZmlsZSwgIiVsZCAiIElO VDY0X0ZPUk1BVCAiICUuMGYgJS4wZiAlLjBmICUuMGYgIiBJTlQ2NF9GT1JNQVQgIiAiIElOVDY0 X0ZPUk1BVCwKIAkJCQkJKGxvbmcpIGFnZy0+c3RhcnRfdGltZSwKIAkJCQkJYWdnLT5jbnQsCiAJ CQkJCWFnZy0+bGF0ZW5jeS5zdW0sCiAJCQkJCWFnZy0+bGF0ZW5jeS5zdW0yLAogCQkJCQlhZ2ct PmxhdGVuY3kubWluLAotCQkJCQlhZ2ctPmxhdGVuY3kubWF4KTsKKwkJCQkJYWdnLT5sYXRlbmN5 Lm1heCwKKwkJCQkJYWdnLT5lcnJvcnMsCisJCQkJCWFnZy0+ZXJyb3JzX2luX2ZhaWxlZF90eCk7 CiAJCQlpZiAodGhyb3R0bGVfZGVsYXkpCiAJCQl7CiAJCQkJZnByaW50Zihsb2dmaWxlLCAiICUu MGYgJS4wZiAlLjBmICUuMGYiLApAQCAtMzU1MSw2ICs0MTAxLDEwIEBAIGRvTG9nKFRTdGF0ZSAq dGhyZWFkLCBDU3RhdGUgKnN0LAogCQkJCWlmIChsYXRlbmN5X2xpbWl0KQogCQkJCQlmcHJpbnRm KGxvZ2ZpbGUsICIgIiBJTlQ2NF9GT1JNQVQsIGFnZy0+c2tpcHBlZCk7CiAJCQl9CisJCQlpZiAo bWF4X3RyaWVzID4gMSB8fCBsYXRlbmN5X2xpbWl0KQorCQkJCWZwcmludGYobG9nZmlsZSwgIiAi IElOVDY0X0ZPUk1BVCAiICIgSU5UNjRfRk9STUFULAorCQkJCQkJYWdnLT5yZXRyaWVkLAorCQkJ CQkJYWdnLT5yZXRyaWVzKTsKIAkJCWZwdXRjKCdcbicsIGxvZ2ZpbGUpOwogCiAJCQkvKiByZXNl dCBkYXRhIGFuZCBtb3ZlIHRvIG5leHQgaW50ZXJ2YWwgKi8KQEAgLTM1NTgsNyArNDExMiw4IEBA IGRvTG9nKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LAogCQl9CiAKIAkJLyogYWNjdW11bGF0 ZSB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiAqLwotCQlhY2N1bVN0YXRzKGFnZywgc2tpcHBlZCwg bGF0ZW5jeSwgbGFnKTsKKwkJYWNjdW1TdGF0cyhhZ2csIHNraXBwZWQsIGxhdGVuY3ksIGxhZywg c3QtPmZpcnN0X2ZhaWx1cmUuc3RhdHVzLAorCQkJCSAgIHN0LT5yZXRyaWVzKTsKIAl9CiAJZWxz ZQogCXsKQEAgLTM1NjgsMTQgKzQxMjMsMjUgQEAgZG9Mb2coVFN0YXRlICp0aHJlYWQsIENTdGF0 ZSAqc3QsCiAJCWdldHRpbWVvZmRheSgmdHYsIE5VTEwpOwogCQlpZiAoc2tpcHBlZCkKIAkJCWZw cmludGYobG9nZmlsZSwgIiVkICIgSU5UNjRfRk9STUFUICIgc2tpcHBlZCAlZCAlbGQgJWxkIiwK LQkJCQkJc3QtPmlkLCBzdC0+Y250LCBzdC0+dXNlX2ZpbGUsCisJCQkJCXN0LT5pZCwgZ2V0VG90 YWxDbnQoc3QpLCBzdC0+dXNlX2ZpbGUsCiAJCQkJCShsb25nKSB0di50dl9zZWMsIChsb25nKSB0 di50dl91c2VjKTsKLQkJZWxzZQorCQllbHNlIGlmIChzdC0+Zmlyc3RfZmFpbHVyZS5zdGF0dXMg PT0gTk9fRkFJTFVSRSkKIAkJCWZwcmludGYobG9nZmlsZSwgIiVkICIgSU5UNjRfRk9STUFUICIg JS4wZiAlZCAlbGQgJWxkIiwKLQkJCQkJc3QtPmlkLCBzdC0+Y250LCBsYXRlbmN5LCBzdC0+dXNl X2ZpbGUsCisJCQkJCXN0LT5pZCwgZ2V0VG90YWxDbnQoc3QpLCBsYXRlbmN5LCBzdC0+dXNlX2Zp bGUsCisJCQkJCShsb25nKSB0di50dl9zZWMsIChsb25nKSB0di50dl91c2VjKTsKKwkJZWxzZSBp ZiAoc3QtPmZpcnN0X2ZhaWx1cmUuc3RhdHVzID09IElOX0ZBSUxFRF9TUUxfVFJBTlNBQ1RJT04p CisJCQlmcHJpbnRmKGxvZ2ZpbGUsICIlZCAiIElOVDY0X0ZPUk1BVCAiIGluX2ZhaWxlZF90eCAl ZCAlbGQgJWxkIiwKKwkJCQkJc3QtPmlkLCBnZXRUb3RhbENudChzdCksIHN0LT51c2VfZmlsZSwK IAkJCQkJKGxvbmcpIHR2LnR2X3NlYywgKGxvbmcpIHR2LnR2X3VzZWMpOworCQllbHNlCisJCQlm cHJpbnRmKGxvZ2ZpbGUsICIlZCAiIElOVDY0X0ZPUk1BVCAiIGZhaWxlZCAlZCAlbGQgJWxkIiwK KwkJCQkJc3QtPmlkLCBnZXRUb3RhbENudChzdCksIHN0LT51c2VfZmlsZSwKKwkJCQkJKGxvbmcp IHR2LnR2X3NlYywgKGxvbmcpIHR2LnR2X3VzZWMpOworCiAJCWlmICh0aHJvdHRsZV9kZWxheSkK IAkJCWZwcmludGYobG9nZmlsZSwgIiAlLjBmIiwgbGFnKTsKKwkJaWYgKG1heF90cmllcyA+IDEg fHwgbGF0ZW5jeV9saW1pdCkKKwkJCWZwcmludGYobG9nZmlsZSwgIiAlZCIsIHN0LT5yZXRyaWVz KTsKIAkJZnB1dGMoJ1xuJywgbG9nZmlsZSk7CiAJfQogfQpAQCAtMzU5NSw3ICs0MTYxLDggQEAg cHJvY2Vzc1hhY3RTdGF0cyhUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwgaW5zdHJfdGltZSAq bm93LAogCWJvb2wJCXRocmVhZF9kZXRhaWxzID0gcHJvZ3Jlc3MgfHwgdGhyb3R0bGVfZGVsYXkg fHwgbGF0ZW5jeV9saW1pdCwKIAkJCQlkZXRhaWxlZCA9IHRocmVhZF9kZXRhaWxzIHx8IHVzZV9s b2cgfHwgcGVyX3NjcmlwdF9zdGF0czsKIAotCWlmIChkZXRhaWxlZCAmJiAhc2tpcHBlZCkKKwlp ZiAoZGV0YWlsZWQgJiYgIXNraXBwZWQgJiYKKwkJKHN0LT5maXJzdF9mYWlsdXJlLnN0YXR1cyA9 PSBOT19GQUlMVVJFIHx8IGxhdGVuY3lfbGltaXQpKQogCXsKIAkJaWYgKElOU1RSX1RJTUVfSVNf WkVSTygqbm93KSkKIAkJCUlOU1RSX1RJTUVfU0VUX0NVUlJFTlQoKm5vdyk7CkBAIC0zNjA4LDcg KzQxNzUsOCBAQCBwcm9jZXNzWGFjdFN0YXRzKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LCBp bnN0cl90aW1lICpub3csCiAJaWYgKHRocmVhZF9kZXRhaWxzKQogCXsKIAkJLyoga2VlcCBkZXRh aWxlZCB0aHJlYWQgc3RhdHMgKi8KLQkJYWNjdW1TdGF0cygmdGhyZWFkLT5zdGF0cywgc2tpcHBl ZCwgbGF0ZW5jeSwgbGFnKTsKKwkJYWNjdW1TdGF0cygmdGhyZWFkLT5zdGF0cywgc2tpcHBlZCwg bGF0ZW5jeSwgbGFnLAorCQkJCSAgIHN0LT5maXJzdF9mYWlsdXJlLnN0YXR1cywgc3QtPnJldHJp ZXMpOwogCiAJCS8qIGNvdW50IHRyYW5zYWN0aW9ucyBvdmVyIHRoZSBsYXRlbmN5IGxpbWl0LCBp ZiBuZWVkZWQgKi8KIAkJaWYgKGxhdGVuY3lfbGltaXQgJiYgbGF0ZW5jeSA+IGxhdGVuY3lfbGlt aXQpCkBAIC0zNjE2LDE5ICs0MTg0LDI0IEBAIHByb2Nlc3NYYWN0U3RhdHMoVFN0YXRlICp0aHJl YWQsIENTdGF0ZSAqc3QsIGluc3RyX3RpbWUgKm5vdywKIAl9CiAJZWxzZQogCXsKLQkJLyogbm8g ZGV0YWlsZWQgc3RhdHMsIGp1c3QgY291bnQgKi8KLQkJdGhyZWFkLT5zdGF0cy5jbnQrKzsKKwkJ Lyogbm8gZGV0YWlsZWQgc3RhdHMgKi8KKwkJYWNjdW1TdGF0cygmdGhyZWFkLT5zdGF0cywgc2tp cHBlZCwgMCwgMCwgc3QtPmZpcnN0X2ZhaWx1cmUuc3RhdHVzLAorCQkJCSAgIHN0LT5yZXRyaWVz KTsKIAl9CiAKIAkvKiBjbGllbnQgc3RhdCBpcyBqdXN0IGNvdW50aW5nICovCi0Jc3QtPmNudCsr OworCWlmIChzdC0+Zmlyc3RfZmFpbHVyZS5zdGF0dXMgPT0gTk9fRkFJTFVSRSkKKwkJc3QtPmNu dCsrOworCWVsc2UKKwkJc3QtPmVjbnQrKzsKIAogCWlmICh1c2VfbG9nKQogCQlkb0xvZyh0aHJl YWQsIHN0LCBhZ2csIHNraXBwZWQsIGxhdGVuY3ksIGxhZyk7CiAKIAkvKiBYWFggY291bGQgdXNl IGEgbXV0ZXggaGVyZSwgYnV0IHdlIGNob29zZSBub3QgdG8gKi8KIAlpZiAocGVyX3NjcmlwdF9z dGF0cykKLQkJYWNjdW1TdGF0cygmc3FsX3NjcmlwdFtzdC0+dXNlX2ZpbGVdLnN0YXRzLCBza2lw cGVkLCBsYXRlbmN5LCBsYWcpOworCQlhY2N1bVN0YXRzKCZzcWxfc2NyaXB0W3N0LT51c2VfZmls ZV0uc3RhdHMsIHNraXBwZWQsIGxhdGVuY3ksIGxhZywKKwkJCQkgICBzdC0+Zmlyc3RfZmFpbHVy ZS5zdGF0dXMsIHN0LT5yZXRyaWVzKTsKIH0KIAogCkBAIC0zNjQ4LDcgKzQyMjEsNyBAQCBkaXNj b25uZWN0X2FsbChDU3RhdGUgKnN0YXRlLCBpbnQgbGVuZ3RoKQogc3RhdGljIHZvaWQKIGluaXRE cm9wVGFibGVzKFBHY29ubiAqY29uKQogewotCWVyZXBvcnQoRUxFVkVMX0xPRywgKGVycm1zZygi ZHJvcHBpbmcgb2xkIHRhYmxlcy4uLlxuIikpKTsKKwllcmVwb3J0KEVMRVZFTF9MT0dfTUFJTiwg KGVycm1zZygiZHJvcHBpbmcgb2xkIHRhYmxlcy4uLlxuIikpKTsKIAogCS8qCiAJICogV2UgZHJv cCBhbGwgdGhlIHRhYmxlcyBpbiBvbmUgY29tbWFuZCwgc28gdGhhdCB3aGV0aGVyIHRoZXJlIGFy ZQpAQCAtMzcyMyw3ICs0Mjk2LDcgQEAgaW5pdENyZWF0ZVRhYmxlcyhQR2Nvbm4gKmNvbikKIAl9 OwogCWludAkJCWk7CiAKLQllcmVwb3J0KEVMRVZFTF9MT0csIChlcnJtc2coImNyZWF0aW5nIHRh Ymxlcy4uLlxuIikpKTsKKwllcmVwb3J0KEVMRVZFTF9MT0dfTUFJTiwgKGVycm1zZygiY3JlYXRp bmcgdGFibGVzLi4uXG4iKSkpOwogCiAJZm9yIChpID0gMDsgaSA8IGxlbmd0aG9mKERETHMpOyBp KyspCiAJewpAQCAtMzc3Niw3ICs0MzQ5LDcgQEAgaW5pdEdlbmVyYXRlRGF0YShQR2Nvbm4gKmNv bikKIAkJCQlyZW1haW5pbmdfc2VjOwogCWludAkJCWxvZ19pbnRlcnZhbCA9IDE7CiAKLQllcmVw b3J0KEVMRVZFTF9MT0csIChlcnJtc2coImdlbmVyYXRpbmcgZGF0YS4uLlxuIikpKTsKKwllcmVw b3J0KEVMRVZFTF9MT0dfTUFJTiwgKGVycm1zZygiZ2VuZXJhdGluZyBkYXRhLi4uXG4iKSkpOwog CiAJLyoKIAkgKiB3ZSBkbyBhbGwgb2YgdGhpcyBpbiBvbmUgdHJhbnNhY3Rpb24gdG8gZW5hYmxl IHRoZSBiYWNrZW5kJ3MKQEAgLTM4NDksNyArNDQyMiw3IEBAIGluaXRHZW5lcmF0ZURhdGEoUEdj b25uICpjb24pCiAJCQllbGFwc2VkX3NlYyA9IElOU1RSX1RJTUVfR0VUX0RPVUJMRShkaWZmKTsK IAkJCXJlbWFpbmluZ19zZWMgPSAoKGRvdWJsZSkgc2NhbGUgKiBuYWNjb3VudHMgLSBqKSAqIGVs YXBzZWRfc2VjIC8gajsKIAotCQkJZXJlcG9ydChFTEVWRUxfTE9HLAorCQkJZXJlcG9ydChFTEVW RUxfTE9HX01BSU4sCiAJCQkJCShlcnJtc2coSU5UNjRfRk9STUFUICIgb2YgIiBJTlQ2NF9GT1JN QVQgIiB0dXBsZXMgKCVkJSUpIGRvbmUgKGVsYXBzZWQgJS4yZiBzLCByZW1haW5pbmcgJS4yZiBz KVxuIiwKIAkJCQkJCQlqLCAoaW50NjQpIG5hY2NvdW50cyAqIHNjYWxlLAogCQkJCQkJCShpbnQp ICgoKGludDY0KSBqICogMTAwKSAvCkBAIC0zODY4LDcgKzQ0NDEsNyBAQCBpbml0R2VuZXJhdGVE YXRhKFBHY29ubiAqY29uKQogCQkJLyogaGF2ZSB3ZSByZWFjaGVkIHRoZSBuZXh0IGludGVydmFs IChvciBlbmQpPyAqLwogCQkJaWYgKChqID09IHNjYWxlICogbmFjY291bnRzKSB8fCAoZWxhcHNl ZF9zZWMgPj0gbG9nX2ludGVydmFsICogTE9HX1NURVBfU0VDT05EUykpCiAJCQl7Ci0JCQkJZXJl cG9ydChFTEVWRUxfTE9HLAorCQkJCWVyZXBvcnQoRUxFVkVMX0xPR19NQUlOLAogCQkJCQkJKGVy cm1zZyhJTlQ2NF9GT1JNQVQgIiBvZiAiIElOVDY0X0ZPUk1BVCAiIHR1cGxlcyAoJWQlJSkgZG9u ZSAoZWxhcHNlZCAlLjJmIHMsIHJlbWFpbmluZyAlLjJmIHMpXG4iLAogCQkJCQkJCQlqLCAoaW50 NjQpIG5hY2NvdW50cyAqIHNjYWxlLAogCQkJCQkJCQkoaW50KSAoKChpbnQ2NCkgaiAqIDEwMCkg LwpAQCAtMzg5NSw3ICs0NDY4LDcgQEAgaW5pdEdlbmVyYXRlRGF0YShQR2Nvbm4gKmNvbikKIHN0 YXRpYyB2b2lkCiBpbml0VmFjdXVtKFBHY29ubiAqY29uKQogewotCWVyZXBvcnQoRUxFVkVMX0xP RywgKGVycm1zZygidmFjdXVtaW5nLi4uXG4iKSkpOworCWVyZXBvcnQoRUxFVkVMX0xPR19NQUlO LCAoZXJybXNnKCJ2YWN1dW1pbmcuLi5cbiIpKSk7CiAJZXhlY3V0ZVN0YXRlbWVudChjb24sICJ2 YWN1dW0gYW5hbHl6ZSBwZ2JlbmNoX2JyYW5jaGVzIik7CiAJZXhlY3V0ZVN0YXRlbWVudChjb24s ICJ2YWN1dW0gYW5hbHl6ZSBwZ2JlbmNoX3RlbGxlcnMiKTsKIAlleGVjdXRlU3RhdGVtZW50KGNv biwgInZhY3V1bSBhbmFseXplIHBnYmVuY2hfYWNjb3VudHMiKTsKQEAgLTM5MTUsNyArNDQ4OCw3 IEBAIGluaXRDcmVhdGVQS2V5cyhQR2Nvbm4gKmNvbikKIAl9OwogCWludAkJCWk7CiAKLQllcmVw b3J0KEVMRVZFTF9MT0csIChlcnJtc2coImNyZWF0aW5nIHByaW1hcnkga2V5cy4uLlxuIikpKTsK KwllcmVwb3J0KEVMRVZFTF9MT0dfTUFJTiwgKGVycm1zZygiY3JlYXRpbmcgcHJpbWFyeSBrZXlz Li4uXG4iKSkpOwogCWZvciAoaSA9IDA7IGkgPCBsZW5ndGhvZihERExJTkRFWGVzKTsgaSsrKQog CXsKIAkJY2hhcgkJYnVmZmVyWzI1Nl07CkBAIC0zOTUyLDcgKzQ1MjUsNyBAQCBpbml0Q3JlYXRl RktleXMoUEdjb25uICpjb24pCiAJfTsKIAlpbnQJCQlpOwogCi0JZXJlcG9ydChFTEVWRUxfTE9H LCAoZXJybXNnKCJjcmVhdGluZyBmb3JlaWduIGtleXMuLi5cbiIpKSk7CisJZXJlcG9ydChFTEVW RUxfTE9HX01BSU4sIChlcnJtc2coImNyZWF0aW5nIGZvcmVpZ24ga2V5cy4uLlxuIikpKTsKIAlm b3IgKGkgPSAwOyBpIDwgbGVuZ3Rob2YoRERMS0VZcyk7IGkrKykKIAl7CiAJCWV4ZWN1dGVTdGF0 ZW1lbnQoY29uLCBERExLRVlzW2ldKTsKQEAgLTQwMjMsNyArNDU5Niw3IEBAIHJ1bkluaXRTdGVw cyhjb25zdCBjaGFyICppbml0aWFsaXplX3N0ZXBzKQogCQkJY2FzZSAnICc6CiAJCQkJYnJlYWs7 CQkJLyogaWdub3JlICovCiAJCQlkZWZhdWx0OgotCQkJCWVyZXBvcnQoRUxFVkVMX0xPRywKKwkJ CQllcmVwb3J0KEVMRVZFTF9MT0dfTUFJTiwKIAkJCQkJCShlcnJtc2coInVucmVjb2duaXplZCBp bml0aWFsaXphdGlvbiBzdGVwIFwiJWNcIlxuIiwKIAkJCQkJCQkJKnN0ZXApKSk7CiAJCQkJUFFm aW5pc2goY29uKTsKQEAgLTQwMzEsNyArNDYwNCw3IEBAIHJ1bkluaXRTdGVwcyhjb25zdCBjaGFy ICppbml0aWFsaXplX3N0ZXBzKQogCQl9CiAJfQogCi0JZXJlcG9ydChFTEVWRUxfTE9HLCAoZXJy bXNnKCJkb25lLlxuIikpKTsKKwllcmVwb3J0KEVMRVZFTF9MT0dfTUFJTiwgKGVycm1zZygiZG9u ZS5cbiIpKSk7CiAJUFFmaW5pc2goY29uKTsKIH0KIApAQCAtNDA2OSw3ICs0NjQyLDcgQEAgcGFy c2VRdWVyeShDb21tYW5kICpjbWQpCiAKIAkJaWYgKGNtZC0+YXJnYyA+PSBNQVhfQVJHUykKIAkJ ewotCQkJZXJlcG9ydChFTEVWRUxfTE9HLAorCQkJZXJlcG9ydChFTEVWRUxfTE9HX01BSU4sCiAJ CQkJCShlcnJtc2coInN0YXRlbWVudCBoYXMgdG9vIG1hbnkgYXJndW1lbnRzIChtYXhpbXVtIGlz ICVkKTogJXNcbiIsCiAJCQkJCQkJTUFYX0FSR1MgLSAxLCBjbWQtPmFyZ3ZbMF0pKSk7CiAJCQlw Z19mcmVlKG5hbWUpOwpAQCAtNDEwOSw3ICs0NjgyLDcgQEAgcGdiZW5jaF9lcnJvcihjb25zdCBj aGFyICpmbXQsLi4uKQogCQl2YV9lbmQoYXApOwogCX0gd2hpbGUgKCFkb25lKTsKIAotCWVyZXBv cnQoRUxFVkVMX0xPRywgKGVycm1zZygiJXMiLCBlcnJtc2dfYnVmLmRhdGEpKSk7CisJZXJlcG9y dChFTEVWRUxfTE9HX01BSU4sIChlcnJtc2coIiVzIiwgZXJybXNnX2J1Zi5kYXRhKSkpOwogCXRl cm1QUUV4cEJ1ZmZlcigmZXJybXNnX2J1Zik7CiB9CiAKQEAgLTQxNTQsNyArNDcyNyw3IEBAIHN5 bnRheF9lcnJvcihjb25zdCBjaGFyICpzb3VyY2UsIGludCBsaW5lbm8sCiAJCX0KIAl9CiAKLQll cmVwb3J0KEVMRVZFTF9MT0csIChlcnJtc2coIiVzIiwgZXJybXNnX2J1Zi5kYXRhKSkpOworCWVy ZXBvcnQoRUxFVkVMX0xPR19NQUlOLCAoZXJybXNnKCIlcyIsIGVycm1zZ19idWYuZGF0YSkpKTsK IAl0ZXJtUFFFeHBCdWZmZXIoJmVycm1zZ19idWYpOwogCWV4aXQoMSk7CiB9CkBAIC00NjQ4LDcg KzUyMjEsNyBAQCBsaXN0QXZhaWxhYmxlU2NyaXB0cyh2b2lkKQogCQlhcHBlbmRQUUV4cEJ1ZmZl cigmZXJybXNnX2J1ZiwgIlx0JXNcbiIsIGJ1aWx0aW5fc2NyaXB0W2ldLm5hbWUpOwogCWFwcGVu ZFBRRXhwQnVmZmVyQ2hhcigmZXJybXNnX2J1ZiwgJ1xuJyk7CiAKLQllcmVwb3J0KEVMRVZFTF9M T0csIChlcnJtc2coIiVzIiwgZXJybXNnX2J1Zi5kYXRhKSkpOworCWVyZXBvcnQoRUxFVkVMX0xP R19NQUlOLCAoZXJybXNnKCIlcyIsIGVycm1zZ19idWYuZGF0YSkpKTsKIAl0ZXJtUFFFeHBCdWZm ZXIoJmVycm1zZ19idWYpOwogfQogCkBAIC00Njc3LDEyICs1MjUwLDEyIEBAIGZpbmRCdWlsdGlu KGNvbnN0IGNoYXIgKm5hbWUpCiAJLyogZXJyb3IgY2FzZXMgKi8KIAlpZiAoZm91bmQgPT0gMCkK IAl7Ci0JCWVyZXBvcnQoRUxFVkVMX0xPRywKKwkJZXJlcG9ydChFTEVWRUxfTE9HX01BSU4sCiAJ CQkJKGVycm1zZygibm8gYnVpbHRpbiBzY3JpcHQgZm91bmQgZm9yIG5hbWUgXCIlc1wiXG4iLCBu YW1lKSkpOwogCX0KIAllbHNlCiAJewkJCQkJCS8qIGZvdW5kID4gMSAqLwotCQllcmVwb3J0KEVM RVZFTF9MT0csCisJCWVyZXBvcnQoRUxFVkVMX0xPR19NQUlOLAogCQkJCShlcnJtc2coImFtYmln dW91cyBidWlsdGluIG5hbWU6ICVkIGJ1aWx0aW4gc2NyaXB0cyBmb3VuZCBmb3IgcHJlZml4IFwi JXNcIlxuIiwKIAkJCQkJCWZvdW5kLCBuYW1lKSkpOwogCX0KQEAgLTQ3ODIsNyArNTM1NSw4IEBA IHByaW50UmVzdWx0cyhUU3RhdGUgKnRocmVhZHMsIFN0YXRzRGF0YSAqdG90YWwsIGluc3RyX3Rp bWUgdG90YWxfdGltZSwKIAlkb3VibGUJCXRpbWVfaW5jbHVkZSwKIAkJCQl0cHNfaW5jbHVkZSwK IAkJCQl0cHNfZXhjbHVkZTsKLQlpbnQ2NAkJbnR4ID0gdG90YWwtPmNudCAtIHRvdGFsLT5za2lw cGVkOworCWludDY0CQludHggPSB0b3RhbC0+Y250IC0gdG90YWwtPnNraXBwZWQsCisJCQkJdG90 YWxfbnR4ID0gdG90YWwtPmNudCArIHRvdGFsLT5lcnJvcnM7CiAJaW50CQkJaSwKIAkJCQl0b3Rh bENhY2hlT3ZlcmZsb3dzID0gMDsKIApAQCAtNDgwMyw4ICs1Mzc3LDggQEAgcHJpbnRSZXN1bHRz KFRTdGF0ZSAqdGhyZWFkcywgU3RhdHNEYXRhICp0b3RhbCwgaW5zdHJfdGltZSB0b3RhbF90aW1l LAogCWlmIChkdXJhdGlvbiA8PSAwKQogCXsKIAkJcHJpbnRmKCJudW1iZXIgb2YgdHJhbnNhY3Rp b25zIHBlciBjbGllbnQ6ICVkXG4iLCBueGFjdHMpOwotCQlwcmludGYoIm51bWJlciBvZiB0cmFu c2FjdGlvbnMgYWN0dWFsbHkgcHJvY2Vzc2VkOiAiIElOVDY0X0ZPUk1BVCAiLyVkXG4iLAotCQkJ ICAgbnR4LCBueGFjdHMgKiBuY2xpZW50cyk7CisJCXByaW50ZigibnVtYmVyIG9mIHRyYW5zYWN0 aW9ucyBhY3R1YWxseSBwcm9jZXNzZWQ6ICIgSU5UNjRfRk9STUFUICIvIiBJTlQ2NF9GT1JNQVQg IlxuIiwKKwkJCSAgIG50eCwgdG90YWxfbnR4KTsKIAl9CiAJZWxzZQogCXsKQEAgLTQ4MTIsNiAr NTM4Niw0MyBAQCBwcmludFJlc3VsdHMoVFN0YXRlICp0aHJlYWRzLCBTdGF0c0RhdGEgKnRvdGFs LCBpbnN0cl90aW1lIHRvdGFsX3RpbWUsCiAJCXByaW50ZigibnVtYmVyIG9mIHRyYW5zYWN0aW9u cyBhY3R1YWxseSBwcm9jZXNzZWQ6ICIgSU5UNjRfRk9STUFUICJcbiIsCiAJCQkgICBudHgpOwog CX0KKworCWlmICh0b3RhbC0+ZXJyb3JzID4gMCkKKwkJcHJpbnRmKCJudW1iZXIgb2YgZXJyb3Jz OiAiIElOVDY0X0ZPUk1BVCAiICglLjNmJSUpXG4iLAorCQkJICAgdG90YWwtPmVycm9ycywgMTAw LjAgKiB0b3RhbC0+ZXJyb3JzIC8gdG90YWxfbnR4KTsKKworCWlmICh0b3RhbC0+ZXJyb3JzX2lu X2ZhaWxlZF90eCA+IDApCisJCXByaW50ZigibnVtYmVyIG9mIGVycm9ycyBcImluIGZhaWxlZCBT UUwgdHJhbnNhY3Rpb25cIjogIiBJTlQ2NF9GT1JNQVQgIiAoJS4zZiUlKVxuIiwKKwkJCSAgIHRv dGFsLT5lcnJvcnNfaW5fZmFpbGVkX3R4LAorCQkJICAgMTAwLjAgKiB0b3RhbC0+ZXJyb3JzX2lu X2ZhaWxlZF90eCAvIHRvdGFsX250eCk7CisKKwkvKgorCSAqIEl0IGNhbiBiZSBub24temVybyBv bmx5IGlmIG1heF90cmllcyBpcyBncmVhdGVyIHRoYW4gb25lIG9yCisJICogbGF0ZW5jeV9saW1p dCBpcyB1c2VkLgorCSAqLworCWlmICh0b3RhbC0+cmV0cmllZCA+IDApCisJeworCQlwcmludGYo Im51bWJlciBvZiByZXRyaWVkOiAiIElOVDY0X0ZPUk1BVCAiICglLjNmJSUpXG4iLAorCQkJICAg dG90YWwtPnJldHJpZWQsIDEwMC4wICogdG90YWwtPnJldHJpZWQgLyB0b3RhbF9udHgpOworCQlw cmludGYoIm51bWJlciBvZiByZXRyaWVzOiAiIElOVDY0X0ZPUk1BVCAiXG4iLCB0b3RhbC0+cmV0 cmllcyk7CisJfQorCisJaWYgKG1heF90cmllcykKKwkJcHJpbnRmKCJtYXhpbXVtIG51bWJlciBv ZiB0cmllczogJWRcbiIsIG1heF90cmllcyk7CisKKwlpZiAobGF0ZW5jeV9saW1pdCkKKwl7CisJ CXByaW50ZigibnVtYmVyIG9mIHRyYW5zYWN0aW9ucyBhYm92ZSB0aGUgJS4xZiBtcyBsYXRlbmN5 IGxpbWl0OiAiIElOVDY0X0ZPUk1BVCAiLyIgSU5UNjRfRk9STUFUICIgKCUuM2YgJSUpIiwKKwkJ CSAgIGxhdGVuY3lfbGltaXQgLyAxMDAwLjAsIGxhdGVuY3lfbGF0ZSwgdG90YWxfbnR4LAorCQkJ ICAgKHRvdGFsX250eCA+IDApID8gMTAwLjAgKiBsYXRlbmN5X2xhdGUgLyB0b3RhbF9udHggOiAw LjApOworCisJCS8qIHRoaXMgc3RhdGlzdGljcyBpbmNsdWRlcyBib3RoIHN1Y2Nlc3NmdWwgYW5k IGZhaWxlZCB0cmFuc2FjdGlvbnMgKi8KKwkJaWYgKHRvdGFsLT5lcnJvcnMgPiAwKQorCQkJcHJp bnRmKCIgKGluY2x1ZGluZyBlcnJvcnMpIik7CisKKwkJcHJpbnRmKCJcbiIpOworCX0KKwogCS8q IFJlcG9ydCB6aXBmaWFuIGNhY2hlIG92ZXJmbG93ICovCiAJZm9yIChpID0gMDsgaSA8IG50aHJl YWRzOyBpKyspCiAJewpAQCAtNDgzMSwxOCArNTQ0MiwxOSBAQCBwcmludFJlc3VsdHMoVFN0YXRl ICp0aHJlYWRzLCBTdGF0c0RhdGEgKnRvdGFsLCBpbnN0cl90aW1lIHRvdGFsX3RpbWUsCiAJCQkg ICB0b3RhbC0+c2tpcHBlZCwKIAkJCSAgIDEwMC4wICogdG90YWwtPnNraXBwZWQgLyB0b3RhbC0+ Y250KTsKIAotCWlmIChsYXRlbmN5X2xpbWl0KQotCQlwcmludGYoIm51bWJlciBvZiB0cmFuc2Fj dGlvbnMgYWJvdmUgdGhlICUuMWYgbXMgbGF0ZW5jeSBsaW1pdDogIiBJTlQ2NF9GT1JNQVQgIi8i IElOVDY0X0ZPUk1BVCAiICglLjNmICUlKVxuIiwKLQkJCSAgIGxhdGVuY3lfbGltaXQgLyAxMDAw LjAsIGxhdGVuY3lfbGF0ZSwgbnR4LAotCQkJICAgKG50eCA+IDApID8gMTAwLjAgKiBsYXRlbmN5 X2xhdGUgLyBudHggOiAwLjApOwotCiAJaWYgKHRocm90dGxlX2RlbGF5IHx8IHByb2dyZXNzIHx8 IGxhdGVuY3lfbGltaXQpCiAJCXByaW50U2ltcGxlU3RhdHMoImxhdGVuY3kiLCAmdG90YWwtPmxh dGVuY3kpOwogCWVsc2UKIAl7CiAJCS8qIG5vIG1lYXN1cmVtZW50LCBzaG93IGF2ZXJhZ2UgbGF0 ZW5jeSBjb21wdXRlZCBmcm9tIHJ1biB0aW1lICovCi0JCXByaW50ZigibGF0ZW5jeSBhdmVyYWdl ID0gJS4zZiBtc1xuIiwKLQkJCSAgIDEwMDAuMCAqIHRpbWVfaW5jbHVkZSAqIG5jbGllbnRzIC8g dG90YWwtPmNudCk7CisJCXByaW50ZigibGF0ZW5jeSBhdmVyYWdlID0gJS4zZiBtcyIsCisJCQkg ICAxMDAwLjAgKiB0aW1lX2luY2x1ZGUgKiBuY2xpZW50cyAvIHRvdGFsX250eCk7CisKKwkJLyog dGhpcyBzdGF0aXN0aWNzIGluY2x1ZGVzIGJvdGggc3VjY2Vzc2Z1bCBhbmQgZmFpbGVkIHRyYW5z YWN0aW9ucyAqLworCQlpZiAodG90YWwtPmVycm9ycyA+IDApCisJCQlwcmludGYoIiAoaW5jbHVk aW5nIGVycm9ycykiKTsKKworCQlwcmludGYoIlxuIik7CiAJfQogCiAJaWYgKHRocm90dGxlX2Rl bGF5KQpAQCAtNDg2MSw3ICs1NDczLDcgQEAgcHJpbnRSZXN1bHRzKFRTdGF0ZSAqdGhyZWFkcywg U3RhdHNEYXRhICp0b3RhbCwgaW5zdHJfdGltZSB0b3RhbF90aW1lLAogCXByaW50ZigidHBzID0g JWYgKGV4Y2x1ZGluZyBjb25uZWN0aW9ucyBlc3RhYmxpc2hpbmcpXG4iLCB0cHNfZXhjbHVkZSk7 CiAKIAkvKiBSZXBvcnQgcGVyLXNjcmlwdC9jb21tYW5kIHN0YXRpc3RpY3MgKi8KLQlpZiAocGVy X3NjcmlwdF9zdGF0cyB8fCBpc19sYXRlbmNpZXMpCisJaWYgKHBlcl9zY3JpcHRfc3RhdHMgfHwg cmVwb3J0X3Blcl9jb21tYW5kKQogCXsKIAkJaW50CQkJaTsKIApAQCAtNDg3MCw2ICs1NDgyLDcg QEAgcHJpbnRSZXN1bHRzKFRTdGF0ZSAqdGhyZWFkcywgU3RhdHNEYXRhICp0b3RhbCwgaW5zdHJf dGltZSB0b3RhbF90aW1lLAogCQkJaWYgKHBlcl9zY3JpcHRfc3RhdHMpCiAJCQl7CiAJCQkJU3Rh dHNEYXRhICAqc3N0YXRzID0gJnNxbF9zY3JpcHRbaV0uc3RhdHM7CisJCQkJaW50NjQJCXNjcmlw dF90b3RhbF9udHggPSBzc3RhdHMtPmNudCArIHNzdGF0cy0+ZXJyb3JzOwogCiAJCQkJcHJpbnRm KCJTUUwgc2NyaXB0ICVkOiAlc1xuIgogCQkJCQkgICAiIC0gd2VpZ2h0OiAlZCAodGFyZ2V0cyAl LjFmJSUgb2YgdG90YWwpXG4iCkBAIC00ODc4LDkgKzU0OTEsMzMgQEAgcHJpbnRSZXN1bHRzKFRT dGF0ZSAqdGhyZWFkcywgU3RhdHNEYXRhICp0b3RhbCwgaW5zdHJfdGltZSB0b3RhbF90aW1lLAog CQkJCQkgICBzcWxfc2NyaXB0W2ldLndlaWdodCwKIAkJCQkJICAgMTAwLjAgKiBzcWxfc2NyaXB0 W2ldLndlaWdodCAvIHRvdGFsX3dlaWdodCwKIAkJCQkJICAgc3N0YXRzLT5jbnQsCi0JCQkJCSAg IDEwMC4wICogc3N0YXRzLT5jbnQgLyB0b3RhbC0+Y250LAorCQkJCQkgICAxMDAuMCAqIHNzdGF0 cy0+Y250IC8gc2NyaXB0X3RvdGFsX250eCwKIAkJCQkJICAgKHNzdGF0cy0+Y250IC0gc3N0YXRz LT5za2lwcGVkKSAvIHRpbWVfaW5jbHVkZSk7CiAKKwkJCQlpZiAodG90YWwtPmVycm9ycyA+IDAp CisJCQkJCXByaW50ZigiIC0gbnVtYmVyIG9mIGVycm9yczogIiBJTlQ2NF9GT1JNQVQgIiAoJS4z ZiUlKVxuIiwKKwkJCQkJCSAgIHNzdGF0cy0+ZXJyb3JzLAorCQkJCQkJICAgMTAwLjAgKiBzc3Rh dHMtPmVycm9ycyAvIHNjcmlwdF90b3RhbF9udHgpOworCisJCQkJaWYgKHRvdGFsLT5lcnJvcnNf aW5fZmFpbGVkX3R4ID4gMCkKKwkJCQkJcHJpbnRmKCIgLSBudW1iZXIgb2YgZXJyb3JzIFwiaW4g ZmFpbGVkIFNRTCB0cmFuc2FjdGlvblwiOiAiIElOVDY0X0ZPUk1BVCAiICglLjNmJSUpXG4iLAor CQkJCQkJICAgc3N0YXRzLT5lcnJvcnNfaW5fZmFpbGVkX3R4LAorCQkJCQkJICAgKDEwMC4wICog c3N0YXRzLT5lcnJvcnNfaW5fZmFpbGVkX3R4IC8KKwkJCQkJCQlzY3JpcHRfdG90YWxfbnR4KSk7 CisKKwkJCQkvKgorCQkJCSAqIEl0IGNhbiBiZSBub24temVybyBvbmx5IGlmIG1heF90cmllcyBp cyBncmVhdGVyIHRoYW4gb25lIG9yCisJCQkJICogbGF0ZW5jeV9saW1pdCBpcyB1c2VkLgorCQkJ CSAqLworCQkJCWlmICh0b3RhbC0+cmV0cmllZCA+IDApCisJCQkJeworCQkJCQlwcmludGYoIiAt IG51bWJlciBvZiByZXRyaWVkOiAiIElOVDY0X0ZPUk1BVCAiICglLjNmJSUpXG4iLAorCQkJCQkJ ICAgc3N0YXRzLT5yZXRyaWVkLAorCQkJCQkJICAgMTAwLjAgKiBzc3RhdHMtPnJldHJpZWQgLyBz Y3JpcHRfdG90YWxfbnR4KTsKKwkJCQkJcHJpbnRmKCIgLSBudW1iZXIgb2YgcmV0cmllczogIiBJ TlQ2NF9GT1JNQVQgIlxuIiwKKwkJCQkJCSAgIHNzdGF0cy0+cmV0cmllcyk7CisJCQkJfQorCiAJ CQkJaWYgKHRocm90dGxlX2RlbGF5ICYmIGxhdGVuY3lfbGltaXQgJiYgc3N0YXRzLT5jbnQgPiAw KQogCQkJCQlwcmludGYoIiAtIG51bWJlciBvZiB0cmFuc2FjdGlvbnMgc2tpcHBlZDogIiBJTlQ2 NF9GT1JNQVQgIiAoJS4zZiUlKVxuIiwKIAkJCQkJCSAgIHNzdGF0cy0+c2tpcHBlZCwKQEAgLTQ4 ODksMTUgKzU1MjYsMzMgQEAgcHJpbnRSZXN1bHRzKFRTdGF0ZSAqdGhyZWFkcywgU3RhdHNEYXRh ICp0b3RhbCwgaW5zdHJfdGltZSB0b3RhbF90aW1lLAogCQkJCXByaW50U2ltcGxlU3RhdHMoIiAt IGxhdGVuY3kiLCAmc3N0YXRzLT5sYXRlbmN5KTsKIAkJCX0KIAotCQkJLyogUmVwb3J0IHBlci1j b21tYW5kIGxhdGVuY2llcyAqLwotCQkJaWYgKGlzX2xhdGVuY2llcykKKwkJCS8qIFJlcG9ydCBw ZXItY29tbWFuZCBsYXRlbmNpZXMgYW5kIGVycm9ycyAqLworCQkJaWYgKHJlcG9ydF9wZXJfY29t bWFuZCkKIAkJCXsKIAkJCQlDb21tYW5kICAgKipjb21tYW5kczsKIAogCQkJCWlmIChwZXJfc2Ny aXB0X3N0YXRzKQotCQkJCQlwcmludGYoIiAtIHN0YXRlbWVudCBsYXRlbmNpZXMgaW4gbWlsbGlz ZWNvbmRzOlxuIik7CisJCQkJCXByaW50ZigiIC0gc3RhdGVtZW50IGxhdGVuY2llcyBpbiBtaWxs aXNlY29uZHMiKTsKIAkJCQllbHNlCi0JCQkJCXByaW50Zigic3RhdGVtZW50IGxhdGVuY2llcyBp biBtaWxsaXNlY29uZHM6XG4iKTsKKwkJCQkJcHJpbnRmKCJzdGF0ZW1lbnQgbGF0ZW5jaWVzIGlu IG1pbGxpc2Vjb25kcyIpOworCisJCQkJaWYgKHRvdGFsLT5lcnJvcnMgPiAwKQorCQkJCXsKKwkJ CQkJcHJpbnRmKCIlcyBlcnJvcnMiLAorCQkJCQkJICAgKCh0b3RhbC0+ZXJyb3JzX2luX2ZhaWxl ZF90eCA9PSAwICYmCisJCQkJCQkJdG90YWwtPnJldHJpZWQgPT0gMCkgPworCQkJCQkJCSIgYW5k IiA6ICIsIikpOworCQkJCX0KKwkJCQlpZiAodG90YWwtPmVycm9yc19pbl9mYWlsZWRfdHggPiAw KQorCQkJCXsKKwkJCQkJcHJpbnRmKCIlcyBlcnJvcnMgXCJpbiBmYWlsZWQgU1FMIHRyYW5zYWN0 aW9uXCIiLAorCQkJCQkJICAgdG90YWwtPnJldHJpZWQgPT0gMCA/ICIgYW5kIiA6ICIsIik7CisJ CQkJfQorCQkJCWlmICh0b3RhbC0+cmV0cmllZCA+IDApCisJCQkJeworCQkJCQlwcmludGYoIiBh bmQgcmV0cmllcyIpOworCQkJCX0KKwkJCQlwcmludGYoIjpcbiIpOwogCiAJCQkJZm9yIChjb21t YW5kcyA9IHNxbF9zY3JpcHRbaV0uY29tbWFuZHM7CiAJCQkJCSAqY29tbWFuZHMgIT0gTlVMTDsK QEAgLTQ5MDUsMTAgKzU1NjAsMjUgQEAgcHJpbnRSZXN1bHRzKFRTdGF0ZSAqdGhyZWFkcywgU3Rh dHNEYXRhICp0b3RhbCwgaW5zdHJfdGltZSB0b3RhbF90aW1lLAogCQkJCXsKIAkJCQkJU2ltcGxl U3RhdHMgKmNzdGF0cyA9ICYoKmNvbW1hbmRzKS0+c3RhdHM7CiAKLQkJCQkJcHJpbnRmKCIgICAl MTEuM2YgICVzXG4iLAorCQkJCQlwcmludGYoIiAgICUxMS4zZiIsCiAJCQkJCQkgICAoY3N0YXRz LT5jb3VudCA+IDApID8KLQkJCQkJCSAgIDEwMDAuMCAqIGNzdGF0cy0+c3VtIC8gY3N0YXRzLT5j b3VudCA6IDAuMCwKLQkJCQkJCSAgICgqY29tbWFuZHMpLT5saW5lKTsKKwkJCQkJCSAgIDEwMDAu MCAqIGNzdGF0cy0+c3VtIC8gY3N0YXRzLT5jb3VudCA6IDAuMCk7CisJCQkJCWlmICh0b3RhbC0+ ZXJyb3JzID4gMCkKKwkJCQkJeworCQkJCQkJcHJpbnRmKCIgICUyMCIgSU5UNjRfTU9ESUZJRVIg ImQiLAorCQkJCQkJCSAgICgqY29tbWFuZHMpLT5lcnJvcnMpOworCQkJCQl9CisJCQkJCWlmICh0 b3RhbC0+ZXJyb3JzX2luX2ZhaWxlZF90eCA+IDApCisJCQkJCXsKKwkJCQkJCXByaW50ZigiICAl MjAiIElOVDY0X01PRElGSUVSICJkIiwKKwkJCQkJCQkgICAoKmNvbW1hbmRzKS0+ZXJyb3JzX2lu X2ZhaWxlZF90eCk7CisJCQkJCX0KKwkJCQkJaWYgKHRvdGFsLT5yZXRyaWVkID4gMCkKKwkJCQkJ eworCQkJCQkJcHJpbnRmKCIgICUyMCIgSU5UNjRfTU9ESUZJRVIgImQiLAorCQkJCQkJCSAgICgq Y29tbWFuZHMpLT5yZXRyaWVzKTsKKwkJCQkJfQorCQkJCQlwcmludGYoIiAgJXNcbiIsICgqY29t bWFuZHMpLT5saW5lKTsKIAkJCQl9CiAJCQl9CiAJCX0KQEAgLTQ5MzcsNyArNTYwNyw3IEBAIHNl dF9yYW5kb21fc2VlZChjb25zdCBjaGFyICpzZWVkKQogCQlpZiAoIXBnX3N0cm9uZ19yYW5kb20o JmlzZWVkLCBzaXplb2YoaXNlZWQpKSkKICNlbmRpZgogCQl7Ci0JCQllcmVwb3J0KEVMRVZFTF9M T0csCisJCQllcmVwb3J0KEVMRVZFTF9MT0dfTUFJTiwKIAkJCQkJKGVycm1zZygiY2Fubm90IHNl ZWQgcmFuZG9tIGZyb20gYSBzdHJvbmcgc291cmNlLCBub25lIGF2YWlsYWJsZTogdXNlIFwidGlt ZVwiIG9yIGFuIHVuc2lnbmVkIGludGVnZXIgdmFsdWUuXG4iKSkpOwogCQkJcmV0dXJuIGZhbHNl OwogCQl9CkBAIC00OTQ5LDcgKzU2MTksNyBAQCBzZXRfcmFuZG9tX3NlZWQoY29uc3QgY2hhciAq c2VlZCkKIAogCQlpZiAoc3NjYW5mKHNlZWQsICIldSVjIiwgJmlzZWVkLCAmZ2FyYmFnZSkgIT0g MSkKIAkJewotCQkJZXJlcG9ydChFTEVWRUxfTE9HLAorCQkJZXJlcG9ydChFTEVWRUxfTE9HX01B SU4sCiAJCQkJCShlcnJtc2coInVucmVjb2duaXplZCByYW5kb20gc2VlZCBvcHRpb24gXCIlc1wi OiBleHBlY3RpbmcgYW4gdW5zaWduZWQgaW50ZWdlciwgXCJ0aW1lXCIgb3IgXCJyYW5kXCJcbiIs CiAJCQkJCQkJc2VlZCkpKTsKIAkJCXJldHVybiBmYWxzZTsKQEAgLTQ5NTgsNyArNTYyOCw3IEBA IHNldF9yYW5kb21fc2VlZChjb25zdCBjaGFyICpzZWVkKQogCiAJaWYgKHNlZWQgIT0gTlVMTCkK IAl7Ci0JCWVyZXBvcnQoRUxFVkVMX0xPRywKKwkJZXJlcG9ydChFTEVWRUxfTE9HX01BSU4sCiAJ CQkJKGVycm1zZygic2V0dGluZyByYW5kb20gc2VlZCB0byAldVxuIiwgaXNlZWQpKSk7CiAJfQog CXNyYW5kb20oaXNlZWQpOwpAQCAtNDk4Nyw3ICs1NjU3LDcgQEAgbWFpbihpbnQgYXJnYywgY2hh ciAqKmFyZ3YpCiAJCXsiYnVpbHRpbiIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAnYid9LAog CQl7ImNsaWVudCIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAnYyd9LAogCQl7ImNvbm5lY3Qi LCBub19hcmd1bWVudCwgTlVMTCwgJ0MnfSwKLQkJeyJkZWJ1ZyIsIG5vX2FyZ3VtZW50LCBOVUxM LCAnZCd9LAorCQl7ImRlYnVnIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdkJ30sCiAJCXsi ZGVmaW5lIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdEJ30sCiAJCXsiZmlsZSIsIHJlcXVp cmVkX2FyZ3VtZW50LCBOVUxMLCAnZid9LAogCQl7ImZpbGxmYWN0b3IiLCByZXF1aXJlZF9hcmd1 bWVudCwgTlVMTCwgJ0YnfSwKQEAgLTUwMDIsNyArNTY3Miw3IEBAIG1haW4oaW50IGFyZ2MsIGNo YXIgKiphcmd2KQogCQl7InByb2dyZXNzIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdQJ30s CiAJCXsicHJvdG9jb2wiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ00nfSwKIAkJeyJxdWll dCIsIG5vX2FyZ3VtZW50LCBOVUxMLCAncSd9LAotCQl7InJlcG9ydC1sYXRlbmNpZXMiLCBub19h cmd1bWVudCwgTlVMTCwgJ3InfSwKKwkJeyJyZXBvcnQtcGVyLWNvbW1hbmQiLCBub19hcmd1bWVu dCwgTlVMTCwgJ3InfSwKIAkJeyJyYXRlIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdSJ30s CiAJCXsic2NhbGUiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ3MnfSwKIAkJeyJzZWxlY3Qt b25seSIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnUyd9LApAQCAtNTAyMSw2ICs1NjkxLDcgQEAgbWFp bihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCXsibG9nLXByZWZpeCIsIHJlcXVpcmVkX2FyZ3Vt ZW50LCBOVUxMLCA3fSwKIAkJeyJmb3JlaWduLWtleXMiLCBub19hcmd1bWVudCwgTlVMTCwgOH0s CiAJCXsicmFuZG9tLXNlZWQiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgOX0sCisJCXsibWF4 LXRyaWVzIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDEwfSwKIAkJe05VTEwsIDAsIE5VTEws IDB9CiAJfTsKIApAQCAtNTA5Niw3ICs1NzY3LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFy Z3YpCiAJCQkJKGVycm1zZygiZXJyb3Igd2hpbGUgc2V0dGluZyByYW5kb20gc2VlZCBmcm9tIFBH QkVOQ0hfUkFORE9NX1NFRUQgZW52aXJvbm1lbnQgdmFyaWFibGVcbiIpKSk7CiAJfQogCi0Jd2hp bGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImlJOmg6bnZwOmRxYjpTTmM6ajpDcnM6 dDpUOlU6bGY6RDpGOk06UDpSOkw6IiwgbG9uZ19vcHRpb25zLCAmb3B0aW5kZXgpKSAhPSAtMSkK Kwl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAiaUk6aDpudnA6ZDpxYjpTTmM6 ajpDcnM6dDpUOlU6bGY6RDpGOk06UDpSOkw6IiwgbG9uZ19vcHRpb25zLCAmb3B0aW5kZXgpKSAh PSAtMSkKIAl7CiAJCWNoYXIJICAgKnNjcmlwdDsKIApAQCAtNTEyNiw4ICs1Nzk3LDIyIEBAIG1h aW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCXBncG9ydCA9IHBnX3N0cmR1cChvcHRhcmcp OwogCQkJCWJyZWFrOwogCQkJY2FzZSAnZCc6Ci0JCQkJZGVidWcrKzsKLQkJCQlicmVhazsKKwkJ CQl7CisJCQkJCWZvciAoZGVidWdfbGV2ZWwgPSAwOworCQkJCQkJIGRlYnVnX2xldmVsIDwgTlVN X0RFQlVHTEVWRUw7CisJCQkJCQkgZGVidWdfbGV2ZWwrKykKKwkJCQkJeworCQkJCQkJaWYgKHN0 cmNtcChvcHRhcmcsIERFQlVHTEVWRUxbZGVidWdfbGV2ZWxdKSA9PSAwKQorCQkJCQkJCWJyZWFr OworCQkJCQl9CisJCQkJCWlmIChkZWJ1Z19sZXZlbCA+PSBOVU1fREVCVUdMRVZFTCkKKwkJCQkJ eworCQkJCQkJZXJlcG9ydChFTEVWRUxfRkFUQUwsCisJCQkJCQkJCShlcnJtc2coImludmFsaWQg ZGVidWcgbGV2ZWwgKC1kKTogXCIlc1wiXG4iLAorCQkJCQkJCQkJCW9wdGFyZykpKTsKKwkJCQkJ fQorCQkJCQlicmVhazsKKwkJCQl9CiAJCQljYXNlICdjJzoKIAkJCQliZW5jaG1hcmtpbmdfb3B0 aW9uX3NldCA9IHRydWU7CiAJCQkJbmNsaWVudHMgPSBhdG9pKG9wdGFyZyk7CkBAIC01MTgwLDcg KzU4NjUsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCQlicmVhazsKIAkJCWNh c2UgJ3InOgogCQkJCWJlbmNobWFya2luZ19vcHRpb25fc2V0ID0gdHJ1ZTsKLQkJCQlpc19sYXRl bmNpZXMgPSB0cnVlOworCQkJCXJlcG9ydF9wZXJfY29tbWFuZCA9IHRydWU7CiAJCQkJYnJlYWs7 CiAJCQljYXNlICdzJzoKIAkJCQlzY2FsZV9naXZlbiA9IHRydWU7CkBAIC01Mzc5LDYgKzYwNjQs MjAgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJCQkJKGVycm1zZygiZXJyb3Ig d2hpbGUgc2V0dGluZyByYW5kb20gc2VlZCBmcm9tIC0tcmFuZG9tLXNlZWQgb3B0aW9uXG4iKSkp OwogCQkJCX0KIAkJCQlicmVhazsKKwkJCWNhc2UgMTA6CQkJLyogbWF4LXRyaWVzICovCisJCQkJ eworCQkJCQlpbnQzMgkJbWF4X3RyaWVzX2FyZyA9IGF0b2kob3B0YXJnKTsKKworCQkJCQlpZiAo bWF4X3RyaWVzX2FyZyA8PSAwKQorCQkJCQl7CisJCQkJCQllcmVwb3J0KEVMRVZFTF9GQVRBTCwK KwkJCQkJCQkJKGVycm1zZygiaW52YWxpZCBudW1iZXIgb2YgbWF4aW11bSB0cmllczogXCIlc1wi XG4iLAorCQkJCQkJCQkJCW9wdGFyZykpKTsKKwkJCQkJfQorCQkJCQliZW5jaG1hcmtpbmdfb3B0 aW9uX3NldCA9IHRydWU7CisJCQkJCW1heF90cmllcyA9ICh1aW50MzIpIG1heF90cmllc19hcmc7 CisJCQkJfQorCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKIAkJCQllcmVwb3J0KEVMRVZFTF9GQVRB TCwKIAkJCQkJCShlcnJtc2coXygiVHJ5IFwiJXMgLS1oZWxwXCIgZm9yIG1vcmUgaW5mb3JtYXRp b24uXG4iKSwKQEAgLTU1NTEsNiArNjI1MCwxMCBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJn dikKIAkJCQkoZXJybXNnKCItLXByb2dyZXNzLXRpbWVzdGFtcCBpcyBhbGxvd2VkIG9ubHkgdW5k ZXIgLS1wcm9ncmVzc1xuIikpKTsKIAl9CiAKKwkvKiBJZiBuZWNlc3Nhcnkgc2V0IHRoZSBkZWZh dWx0IHRyaWVzIGxpbWl0ICAqLworCWlmICghbWF4X3RyaWVzICYmICFsYXRlbmN5X2xpbWl0KQor CQltYXhfdHJpZXMgPSAxOworCiAJLyoKIAkgKiBzYXZlIG1haW4gcHJvY2VzcyBpZCBpbiB0aGUg Z2xvYmFsIHZhcmlhYmxlIGJlY2F1c2UgcHJvY2VzcyBpZCB3aWxsIGJlCiAJICogY2hhbmdlZCBh ZnRlciBmb3JrLgpAQCAtNTYzNSw3ICs2MzM4LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFy Z3YpCiAJCQkJCQkJCSAgUFFkYihjb24pKTsKIAkJCX0KIAotCQkJZXJlcG9ydChFTEVWRUxfTE9H LCAoZXJybXNnKCIlcyIsIGVycm1zZ19idWYuZGF0YSkpKTsKKwkJCWVyZXBvcnQoRUxFVkVMX0xP R19NQUlOLCAoZXJybXNnKCIlcyIsIGVycm1zZ19idWYuZGF0YSkpKTsKIAkJCXRlcm1QUUV4cEJ1 ZmZlcigmZXJybXNnX2J1Zik7CiAJCQlleGl0KDEpOwogCQl9CkBAIC01NjUwLDcgKzYzNTMsNyBA QCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAogCQkvKiB3YXJuIGlmIHdlIG92ZXJyaWRl IHVzZXItZ2l2ZW4gLXMgc3dpdGNoICovCiAJCWlmIChzY2FsZV9naXZlbikKLQkJCWVyZXBvcnQo RUxFVkVMX0xPRywKKwkJCWVyZXBvcnQoRUxFVkVMX0xPR19NQUlOLAogCQkJCQkoZXJybXNnKCJz Y2FsZSBvcHRpb24gaWdub3JlZCwgdXNpbmcgY291bnQgZnJvbSBwZ2JlbmNoX2JyYW5jaGVzIHRh YmxlICglZClcbiIsCiAJCQkJCQkJc2NhbGUpKSk7CiAJfQpAQCAtNTcwMiwxOCArNjQwNSwxOCBA QCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAogCWlmICghaXNfbm9fdmFjdXVtKQogCXsK LQkJZXJlcG9ydChFTEVWRUxfTE9HLCAoZXJybXNnKCJzdGFydGluZyB2YWN1dW0uLi4iKSkpOwor CQllcmVwb3J0KEVMRVZFTF9MT0dfTUFJTiwgKGVycm1zZygic3RhcnRpbmcgdmFjdXVtLi4uIikp KTsKIAkJdHJ5RXhlY3V0ZVN0YXRlbWVudChjb24sICJ2YWN1dW0gcGdiZW5jaF9icmFuY2hlcyIp OwogCQl0cnlFeGVjdXRlU3RhdGVtZW50KGNvbiwgInZhY3V1bSBwZ2JlbmNoX3RlbGxlcnMiKTsK IAkJdHJ5RXhlY3V0ZVN0YXRlbWVudChjb24sICJ0cnVuY2F0ZSBwZ2JlbmNoX2hpc3RvcnkiKTsK LQkJZXJlcG9ydChFTEVWRUxfTE9HLCAoZXJybXNnKCJlbmQuXG4iKSkpOworCQllcmVwb3J0KEVM RVZFTF9MT0dfTUFJTiwgKGVycm1zZygiZW5kLlxuIikpKTsKIAogCQlpZiAoZG9fdmFjdXVtX2Fj Y291bnRzKQogCQl7Ci0JCQllcmVwb3J0KEVMRVZFTF9MT0csCisJCQllcmVwb3J0KEVMRVZFTF9M T0dfTUFJTiwKIAkJCQkJKGVycm1zZygic3RhcnRpbmcgdmFjdXVtIHBnYmVuY2hfYWNjb3VudHMu Li4iKSkpOwogCQkJdHJ5RXhlY3V0ZVN0YXRlbWVudChjb24sICJ2YWN1dW0gYW5hbHl6ZSBwZ2Jl bmNoX2FjY291bnRzIik7Ci0JCQllcmVwb3J0KEVMRVZFTF9MT0csIChlcnJtc2coImVuZC5cbiIp KSk7CisJCQllcmVwb3J0KEVMRVZFTF9MT0dfTUFJTiwgKGVycm1zZygiZW5kLlxuIikpKTsKIAkJ fQogCX0KIAlQUWZpbmlzaChjb24pOwpAQCAtNTgxMyw2ICs2NTE2LDEwIEBAIG1haW4oaW50IGFy Z2MsIGNoYXIgKiphcmd2KQogCQltZXJnZVNpbXBsZVN0YXRzKCZzdGF0cy5sYWcsICZ0aHJlYWQt PnN0YXRzLmxhZyk7CiAJCXN0YXRzLmNudCArPSB0aHJlYWQtPnN0YXRzLmNudDsKIAkJc3RhdHMu c2tpcHBlZCArPSB0aHJlYWQtPnN0YXRzLnNraXBwZWQ7CisJCXN0YXRzLnJldHJpZXMgKz0gdGhy ZWFkLT5zdGF0cy5yZXRyaWVzOworCQlzdGF0cy5yZXRyaWVkICs9IHRocmVhZC0+c3RhdHMucmV0 cmllZDsKKwkJc3RhdHMuZXJyb3JzICs9IHRocmVhZC0+c3RhdHMuZXJyb3JzOworCQlzdGF0cy5l cnJvcnNfaW5fZmFpbGVkX3R4ICs9IHRocmVhZC0+c3RhdHMuZXJyb3JzX2luX2ZhaWxlZF90eDsK IAkJbGF0ZW5jeV9sYXRlICs9IHRocmVhZC0+bGF0ZW5jeV9sYXRlOwogCQlJTlNUUl9USU1FX0FE RChjb25uX3RvdGFsX3RpbWUsIHRocmVhZC0+Y29ubl90aW1lKTsKIAl9CkBAIC01ODgyLDcgKzY1 ODksNyBAQCB0aHJlYWRSdW4odm9pZCAqYXJnKQogCiAJCWlmICh0aHJlYWQtPmxvZ2ZpbGUgPT0g TlVMTCkKIAkJewotCQkJZXJlcG9ydChFTEVWRUxfTE9HLAorCQkJZXJlcG9ydChFTEVWRUxfTE9H X01BSU4sCiAJCQkJCShlcnJtc2coImNvdWxkIG5vdCBvcGVuIGxvZ2ZpbGUgXCIlc1wiOiAlc1xu IiwKIAkJCQkJCQlsb2dwYXRoLCBzdHJlcnJvcihlcnJubykpKSk7CiAJCQlnb3RvIGRvbmU7CkBA IC01OTYyLDcgKzY2NjksNyBAQCB0aHJlYWRSdW4odm9pZCAqYXJnKQogCiAJCQkJaWYgKHNvY2sg PCAwKQogCQkJCXsKLQkJCQkJZXJlcG9ydChFTEVWRUxfTE9HLAorCQkJCQllcmVwb3J0KEVMRVZF TF9MT0dfTUFJTiwKIAkJCQkJCQkoZXJybXNnKCJpbnZhbGlkIHNvY2tldDogJXMiLAogCQkJCQkJ CQkJUFFlcnJvck1lc3NhZ2Uoc3QtPmNvbikpKSk7CiAJCQkJCWdvdG8gZG9uZTsKQEAgLTYwNDAs NyArNjc0Nyw3IEBAIHRocmVhZFJ1bih2b2lkICphcmcpCiAJCQkJCWNvbnRpbnVlOwogCQkJCX0K IAkJCQkvKiBtdXN0IGJlIHNvbWV0aGluZyB3cm9uZyAqLwotCQkJCWVyZXBvcnQoRUxFVkVMX0xP RywKKwkJCQllcmVwb3J0KEVMRVZFTF9MT0dfTUFJTiwKIAkJCQkJCShlcnJtc2coInNlbGVjdCgp IGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSkpKTsKIAkJCQlnb3RvIGRvbmU7CiAJCQl9 CkBAIC02MDY1LDcgKzY3NzIsNyBAQCB0aHJlYWRSdW4odm9pZCAqYXJnKQogCiAJCQkJaWYgKHNv Y2sgPCAwKQogCQkJCXsKLQkJCQkJZXJlcG9ydChFTEVWRUxfTE9HLAorCQkJCQllcmVwb3J0KEVM RVZFTF9MT0dfTUFJTiwKIAkJCQkJCQkoZXJybXNnKCJpbnZhbGlkIHNvY2tldDogJXMiLAogCQkJ CQkJCQkJUFFlcnJvck1lc3NhZ2Uoc3QtPmNvbikpKSk7CiAJCQkJCWdvdG8gZG9uZTsKQEAgLTYx MDEsNyArNjgwOCwxMSBAQCB0aHJlYWRSdW4odm9pZCAqYXJnKQogCQkJCS8qIGdlbmVyYXRlIGFu ZCBzaG93IHJlcG9ydCAqLwogCQkJCVN0YXRzRGF0YQljdXI7CiAJCQkJaW50NjQJCXJ1biA9IG5v dyAtIGxhc3RfcmVwb3J0LAotCQkJCQkJCW50eDsKKwkJCQkJCQludHgsCisJCQkJCQkJcmV0cmll cywKKwkJCQkJCQlyZXRyaWVkLAorCQkJCQkJCWVycm9ycywKKwkJCQkJCQllcnJvcnNfaW5fZmFp bGVkX3R4OwogCQkJCWRvdWJsZQkJdHBzLAogCQkJCQkJCXRvdGFsX3J1biwKIAkJCQkJCQlsYXRl bmN5LApAQCAtNjEyOSw2ICs2ODQwLDExIEBAIHRocmVhZFJ1bih2b2lkICphcmcpCiAJCQkJCW1l cmdlU2ltcGxlU3RhdHMoJmN1ci5sYWcsICZ0aHJlYWRbaV0uc3RhdHMubGFnKTsKIAkJCQkJY3Vy LmNudCArPSB0aHJlYWRbaV0uc3RhdHMuY250OwogCQkJCQljdXIuc2tpcHBlZCArPSB0aHJlYWRb aV0uc3RhdHMuc2tpcHBlZDsKKwkJCQkJY3VyLnJldHJpZXMgKz0gdGhyZWFkW2ldLnN0YXRzLnJl dHJpZXM7CisJCQkJCWN1ci5yZXRyaWVkICs9IHRocmVhZFtpXS5zdGF0cy5yZXRyaWVkOworCQkJ CQljdXIuZXJyb3JzICs9IHRocmVhZFtpXS5zdGF0cy5lcnJvcnM7CisJCQkJCWN1ci5lcnJvcnNf aW5fZmFpbGVkX3R4ICs9CisJCQkJCQl0aHJlYWRbaV0uc3RhdHMuZXJyb3JzX2luX2ZhaWxlZF90 eDsKIAkJCQl9CiAKIAkJCQkvKiB3ZSBjb3VudCBvbmx5IGFjdHVhbGx5IGV4ZWN1dGVkIHRyYW5z YWN0aW9ucyAqLwpAQCAtNjE0Niw2ICs2ODYyLDExIEBAIHRocmVhZFJ1bih2b2lkICphcmcpCiAJ CQkJewogCQkJCQlsYXRlbmN5ID0gc3FsYXQgPSBzdGRldiA9IGxhZyA9IDA7CiAJCQkJfQorCQkJ CXJldHJpZXMgPSBjdXIucmV0cmllcyAtIGxhc3QucmV0cmllczsKKwkJCQlyZXRyaWVkID0gY3Vy LnJldHJpZWQgLSBsYXN0LnJldHJpZWQ7CisJCQkJZXJyb3JzID0gY3VyLmVycm9ycyAtIGxhc3Qu ZXJyb3JzOworCQkJCWVycm9yc19pbl9mYWlsZWRfdHggPSBjdXIuZXJyb3JzX2luX2ZhaWxlZF90 eCAtCisJCQkJCWxhc3QuZXJyb3JzX2luX2ZhaWxlZF90eDsKIAogCQkJCWlmIChwcm9ncmVzc190 aW1lc3RhbXApCiAJCQkJewpAQCAtNjE3Miw2ICs2ODkzLDE2IEBAIHRocmVhZFJ1bih2b2lkICph cmcpCiAJCQkJCQkJCSAgInByb2dyZXNzOiAlcywgJS4xZiB0cHMsIGxhdCAlLjNmIG1zIHN0ZGRl diAlLjNmIiwKIAkJCQkJCQkJICB0YnVmLCB0cHMsIGxhdGVuY3ksIHN0ZGV2KTsKIAorCQkJCWlm IChlcnJvcnMgPiAwKQorCQkJCXsKKwkJCQkJYXBwZW5kUFFFeHBCdWZmZXIoJnByb2dyZXNzX2J1 ZiwKKwkJCQkJCQkJCSAgIiwgIiBJTlQ2NF9GT1JNQVQgIiBmYWlsZWQiICwgZXJyb3JzKTsKKwkJ CQkJaWYgKGVycm9yc19pbl9mYWlsZWRfdHggPiAwKQorCQkJCQkJYXBwZW5kUFFFeHBCdWZmZXIo JnByb2dyZXNzX2J1ZiwKKwkJCQkJCQkJCQkgICIgKCIgSU5UNjRfRk9STUFUICIgaW4gZmFpbGVk IHR4KSIsCisJCQkJCQkJCQkJICBlcnJvcnNfaW5fZmFpbGVkX3R4KTsKKwkJCQl9CisKIAkJCQlp ZiAodGhyb3R0bGVfZGVsYXkpCiAJCQkJewogCQkJCQlhcHBlbmRQUUV4cEJ1ZmZlcigmcHJvZ3Jl c3NfYnVmLCAiLCBsYWcgJS4zZiBtcyIsIGxhZyk7CkBAIC02MTgwLDkgKzY5MTEsMjAgQEAgdGhy ZWFkUnVuKHZvaWQgKmFyZykKIAkJCQkJCQkJCQkgICIsICIgSU5UNjRfRk9STUFUICIgc2tpcHBl ZCIsCiAJCQkJCQkJCQkJICBjdXIuc2tpcHBlZCAtIGxhc3Quc2tpcHBlZCk7CiAJCQkJfQorCisJ CQkJLyoKKwkJCQkgKiBJdCBjYW4gYmUgbm9uLXplcm8gb25seSBpZiBtYXhfdHJpZXMgaXMgZ3Jl YXRlciB0aGFuIG9uZSBvcgorCQkJCSAqIGxhdGVuY3lfbGltaXQgaXMgdXNlZC4KKwkJCQkgKi8K KwkJCQlpZiAocmV0cmllZCA+IDApCisJCQkJeworCQkJCQlhcHBlbmRQUUV4cEJ1ZmZlcigmcHJv Z3Jlc3NfYnVmLAorCQkJCQkJCQkJICAiLCAiIElOVDY0X0ZPUk1BVCAiIHJldHJpZWQsICIgSU5U NjRfRk9STUFUICIgcmV0cmllcyIsCisJCQkJCQkJCQkgIHJldHJpZWQsIHJldHJpZXMpOworCQkJ CX0KIAkJCQlhcHBlbmRQUUV4cEJ1ZmZlckNoYXIoJnByb2dyZXNzX2J1ZiwgJ1xuJyk7CiAKLQkJ CQllcmVwb3J0KEVMRVZFTF9MT0csIChlcnJtc2coIiVzIiwgcHJvZ3Jlc3NfYnVmLmRhdGEpKSk7 CisJCQkJZXJlcG9ydChFTEVWRUxfTE9HX01BSU4sIChlcnJtc2coIiVzIiwgcHJvZ3Jlc3NfYnVm LmRhdGEpKSk7CiAJCQkJdGVybVBRRXhwQnVmZmVyKCZwcm9ncmVzc19idWYpOwogCiAJCQkJbGFz dCA9IGN1cjsKQEAgLTYzNjgsMTIgKzcxMTAsMjEgQEAgZXJyc3RhcnRJbXBsKEVycm9yTGV2ZWwg ZWxldmVsKQogCQkJICogUHJpbnQgdGhlIG1lc3NhZ2Ugb25seSBpZiB0aGVyZSdzIGEgZGVidWdn aW5nIG1vZGUgZm9yIGFsbCB0eXBlcwogCQkJICogb2YgbWVzc2FnZXMuCiAJCQkgKi8KLQkJCXN0 YXJ0X2Vycm9yX3JlcG9ydGluZyA9IGRlYnVnOworCQkJc3RhcnRfZXJyb3JfcmVwb3J0aW5nID0g ZGVidWdfbGV2ZWwgPj0gREVCVUdfQUxMOworCQkJYnJlYWs7CisJCWNhc2UgRUxFVkVMX0xPR19D TElFTlRfRkFJTDoKKwkJCS8qCisJCQkgKiBQcmludCBhIGZhaWx1cmUgbWVzc2FnZSBvbmx5IGlm IHRoZXJlJ3MgYXQgbGVhc3QgYSBkZWJ1Z2dpbmcgbW9kZQorCQkJICogZm9yIGZhaWxzLgorCQkJ ICovCisJCQlzdGFydF9lcnJvcl9yZXBvcnRpbmcgPSBkZWJ1Z19sZXZlbCA+PSBERUJVR19GQUlM UzsKIAkJCWJyZWFrOwotCQljYXNlIEVMRVZFTF9MT0c6CisJCWNhc2UgRUxFVkVMX0xPR19DTElF TlRfQUJPUlRFRDoKKwkJY2FzZSBFTEVWRUxfTE9HX01BSU46CiAJCWNhc2UgRUxFVkVMX0ZBVEFM OgogCQkJLyoKLQkJCSAqIEFsd2F5cyBwcmludCB0aGUgZXJyb3IvbG9nIG1lc3NhZ2UuCisJCQkg KiBBbHdheXMgcHJpbnQgYW4gZXJyb3IgbWVzc2FnZSBpZiB0aGUgY2xpZW50IGlzIGFib3J0ZWQg b3IgdGhpcyBpcworCQkJICogdGhlIG1haW4gcHJvZ3JhbSBlcnJvci9sb2cgbWVzc2FnZS4KIAkJ CSAqLwogCQkJc3RhcnRfZXJyb3JfcmVwb3J0aW5nID0gdHJ1ZTsKIAkJCWJyZWFrOwpkaWZmIC0t Z2l0IGEvc3JjL2Jpbi9wZ2JlbmNoL3QvMDAxX3BnYmVuY2hfd2l0aF9zZXJ2ZXIucGwgYi9zcmMv YmluL3BnYmVuY2gvdC8wMDFfcGdiZW5jaF93aXRoX3NlcnZlci5wbAppbmRleCAwMGZiMDRmLi45 YTBlYTAwIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnYmVuY2gvdC8wMDFfcGdiZW5jaF93aXRoX3Nl cnZlci5wbAorKysgYi9zcmMvYmluL3BnYmVuY2gvdC8wMDFfcGdiZW5jaF93aXRoX3NlcnZlci5w bApAQCAtMTMyLDcgKzEzMiw4IEBAIHBnYmVuY2goCiAJCXFye2J1aWx0aW46IFRQQy1CfSwKIAkJ cXJ7Y2xpZW50czogMlxifSwKIAkJcXJ7cHJvY2Vzc2VkOiAxMC8xMH0sCi0JCXFye21vZGU6IHNp bXBsZX0KKwkJcXJ7bW9kZTogc2ltcGxlfSwKKwkJcXJ7bWF4aW11bSBudW1iZXIgb2YgdHJpZXM6 IDF9CiAJXSwKIAlbcXJ7XiR9XSwKIAkncGdiZW5jaCB0cGNiLWxpa2UnKTsKQEAgLTE1MSw3ICsx NTIsNyBAQCBwZ2JlbmNoKAogCSdwZ2JlbmNoIHNpbXBsZSB1cGRhdGUnKTsKIAogcGdiZW5jaCgK LQknLXQgMTAwIC1jIDcgLU0gcHJlcGFyZWQgLWIgc2UgLS1kZWJ1ZycsCisJJy10IDEwMCAtYyA3 IC1NIHByZXBhcmVkIC1iIHNlIC0tZGVidWcgYWxsJywKIAkwLAogCVsKIAkJcXJ7YnVpbHRpbjog c2VsZWN0IG9ubHl9LApAQCAtNTQ2LDYgKzU0NywxMSBAQCBteSBAZXJyb3JzID0gKAogU0VMRUNU IExFQVNUKDppLCA6aSwgOmksIDppLCA6aSwgOmksIDppLCA6aSwgOmksIDppLCA6aSk7CiB9CiAJ XSwKKwlbICAgJ3NxbCBkaXZpc2lvbiBieSB6ZXJvJywgMCwgW3Fye0VSUk9SOiAgZGl2aXNpb24g YnkgemVyb31dLAorCQlxey0tIFNRTCBkaXZpc2lvbiBieSB6ZXJvCitTRUxFQ1QgMSAvIDA7Cit9 CisJXSwKIAogCSMgU0hFTEwKIAlbCkBAIC03MTgsNiArNzI0LDE3IEBAIFNFTEVDVCBMRUFTVCg6 aSwgOmksIDppLCA6aSwgOmksIDppLCA6aSwgOmksIDppLCA6aSwgOmkpOwogCQlbcXJ7dW5yZWNv Z25pemVkIHRpbWUgdW5pdH1dLCBxe1xzbGVlcCAxIHdlZWt9CiAJXSwKIAorCSMgQ09ORElUSU9O QUwgQkxPQ0tTCisJWyAgICdpZiBlbGlmIGZhaWxlZCBjb25kaXRpb25zJywgMCwKKwkJW3Fye2Rp dmlzaW9uIGJ5IHplcm99XSwKKwkJcXstLSBmYWlsZWQgY29uZGl0aW9ucworXGlmIDEgLyAwCitc ZWxpZiAxIC8gMAorXGVsc2UKK1xlbmRpZgorfQorCV0sCisKIAkjIE1JU0MKIAlbCiAJCSdtaXNj IGludmFsaWQgYmFja3NsYXNoIGNvbW1hbmQnLCAgICAgICAgIDEsCkBAIC03MzYsMTQgKzc1Mywz MyBAQCBmb3IgbXkgJGUgKEBlcnJvcnMpCiAJbXkgJG4gPSAnMDAxX3BnYmVuY2hfZXJyb3JfJyAu ICRuYW1lOwogCSRuID1+IHMvIC9fL2c7CiAJcGdiZW5jaCgKLQkJJy1uIC10IDEgLURmb289Ymxh IC1EbnVsbD1udWxsIC1EdHJ1ZT10cnVlIC1Eb25lPTEgLUR6ZXJvPTAuMCAtRGJhZHRydWU9dHJ1 ZVhYWCAtTSBwcmVwYXJlZCcsCisJCSctbiAtdCAxIC1EZm9vPWJsYSAtRG51bGw9bnVsbCAtRHRy dWU9dHJ1ZSAtRG9uZT0xIC1EemVybz0wLjAgLURiYWR0cnVlPXRydWVYWFggLU0gcHJlcGFyZWQg LWQgZmFpbHMnLAogCQkkc3RhdHVzLAotCQlbICRzdGF0dXMgPyBxcnteJH0gOiBxcntwcm9jZXNz ZWQ6IDAvMX0gXSwKKwkJKCRzdGF0dXMgPworCQkgWyBxcnteJH0gXSA6CisJCSBbIHFye3Byb2Nl c3NlZDogMC8xfSwgcXJ7bnVtYmVyIG9mIGVycm9yczogMSBcKDEwMC4wMDAlXCl9LAorCQkgICBx cnteKCg/IW51bWJlciBvZiByZXRyaWVkKSgufFxuKSkqJH0gXSksCiAJCSRyZSwKIAkJJ3BnYmVu Y2ggc2NyaXB0IGVycm9yOiAnIC4gJG5hbWUsCiAJCXsgJG4gPT4gJHNjcmlwdCB9KTsKIH0KIAor IyByZXNldCBjbGllbnQgdmFyaWFibGVzIGluIGNhc2Ugb2YgZmFpbHVyZQorcGdiZW5jaCgKKwkn LW4gLXQgMiAtZCBmYWlscycsIDAsCisJWyBxcntwcm9jZXNzZWQ6IDAvMn0sIHFye251bWJlciBv ZiBlcnJvcnM6IDIgXCgxMDAuMDAwJVwpfSwKKwkgIHFye14oKD8hbnVtYmVyIG9mIHJldHJpZWQp KC58XG4pKSokfSBdLAorCVsgcXJ7KGNsaWVudCAwIGdvdCBhIGZhaWx1cmUgaW4gY29tbWFuZCAx IFwoU1FMXCkgb2Ygc2NyaXB0IDA7IEVSUk9SOiAgc3ludGF4IGVycm9yIGF0IG9yIG5lYXIgIjoi KC58XG4pKil7Mn19IF0sCisJJ3BnYmVuY2ggcmVzZXQgY2xpZW50IHZhcmlhYmxlcyBpbiBjYXNl IG9mIGZhaWx1cmUnLAorCXsJJzAwMV9wZ2JlbmNoX3Jlc2V0X2NsaWVudF92YXJpYWJsZXMnID0+ IHF7CitCRUdJTjsKKy0tIHNlbGVjdCBhbiB1bmFzc2lnbmVkIHZhcmlhYmxlCitTRUxFQ1QgOnVu YXNzaWduZWRfdmFyOworXHNldCB1bmFzc2lnbmVkX3ZhciAxCitFTkQ7Cit9CisJfSk7CisKICMg emlwZmlhbiBjYWNoZSBhcnJheSBvdmVyZmxvdwogcGdiZW5jaCgKIAknLXQgMScsIDAsCmRpZmYg LS1naXQgYS9zcmMvYmluL3BnYmVuY2gvdC8wMDJfcGdiZW5jaF9ub19zZXJ2ZXIucGwgYi9zcmMv YmluL3BnYmVuY2gvdC8wMDJfcGdiZW5jaF9ub19zZXJ2ZXIucGwKaW5kZXggYTllMDY3Yi4uYjI2 MmQ1ZCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ2JlbmNoL3QvMDAyX3BnYmVuY2hfbm9fc2VydmVy LnBsCisrKyBiL3NyYy9iaW4vcGdiZW5jaC90LzAwMl9wZ2JlbmNoX25vX3NlcnZlci5wbApAQCAt NTksNyArNTksNyBAQCBteSBAb3B0aW9ucyA9ICgKIAkjIG5hbWUsIG9wdGlvbnMsIHN0ZGVyciBj aGVja3MKIAlbCiAJCSdiYWQgb3B0aW9uJywKLQkJJy1oIGhvbWUgLXAgNTQzMiAtVSBjYWx2aW4g LWQgLS1iYWQtb3B0aW9uJywKKwkJJy1oIGhvbWUgLXAgNTQzMiAtVSBjYWx2aW4gLWQgYWxsIC0t YmFkLW9wdGlvbicsCiAJCVsgcXJ7KHVucmVjb2duaXplZHxpbGxlZ2FsKSBvcHRpb259LCBxcnst LWhlbHAuKm1vcmUgaW5mb3JtYXRpb259IF0KIAldLAogCVsKQEAgLTE1MSw2ICsxNTEsMTEgQEAg bXkgQG9wdGlvbnMgPSAoCiAJCQlxcntlcnJvciB3aGlsZSBzZXR0aW5nIHJhbmRvbSBzZWVkIGZy b20gLS1yYW5kb20tc2VlZCBvcHRpb259CiAJCV0KIAldLAorCVsKKwkJJ2JhZCBtYXhpbXVtIG51 bWJlciBvZiB0cmllcycsCisJCSctLW1heC10cmllcyAtMTAnLAorCQlbIHFye2ludmFsaWQgbnVt YmVyIG9mIG1heGltdW0gdHJpZXM6ICItMTAifSBdCisJXSwKIAogCSMgbG9naW5nIHN1Yi1vcHRp b25zCiAJWwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ2JlbmNoL3QvMDAzX3NlcmlhbGl6YXRpb25f YW5kX2RlYWRsb2NrX2ZhaWxzLnBsIGIvc3JjL2Jpbi9wZ2JlbmNoL3QvMDAzX3NlcmlhbGl6YXRp b25fYW5kX2RlYWRsb2NrX2ZhaWxzLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLjVlNDVjYjEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3BnYmVuY2gvdC8wMDNfc2Vy aWFsaXphdGlvbl9hbmRfZGVhZGxvY2tfZmFpbHMucGwKQEAgLTAsMCArMSw3NjEgQEAKK3VzZSBz dHJpY3Q7Cit1c2Ugd2FybmluZ3M7CisKK3VzZSBDb25maWc7Cit1c2UgUG9zdGdyZXNOb2RlOwor dXNlIFRlc3RMaWI7Cit1c2UgVGVzdDo6TW9yZSB0ZXN0cyA9PiAzNDsKKwordXNlIGNvbnN0YW50 Cit7CisJUkVBRF9DT01NSVRURUQgICA9PiAwLAorCVJFUEVBVEFCTEVfUkVBRCAgPT4gMSwKKwlT RVJJQUxJWkFCTEUgICAgID0+IDIsCit9OworCitteSBAaXNvbGF0aW9uX2xldmVsX3NoZWxsID0g KAorCSdyZWFkXFwgY29tbWl0dGVkJywKKwkncmVwZWF0YWJsZVxcIHJlYWQnLAorCSdzZXJpYWxp emFibGUnKTsKKworIyBUaGUga2V5cyBvZiBhZHZpc29yeSBsb2NrcyBmb3IgdGVzdGluZyBkZWFk bG9jayBmYWlsdXJlczoKK3VzZSBjb25zdGFudAoreworCURFQURMT0NLXzEgICAgICAgICA9PiAz LAorCVdBSVRfUEdCRU5DSF8yICAgICA9PiA0LAorCURFQURMT0NLXzIgICAgICAgICA9PiA1LAor CVRSQU5TQUNUSU9OX0VORFNfMSA9PiA2LAorCVRSQU5TQUNUSU9OX0VORFNfMiA9PiA3LAorfTsK KworIyBUZXN0IGNvbmN1cnJlbnQgdXBkYXRlIGluIHRhYmxlIHJvdy4KK215ICRub2RlID0gZ2V0 X25ld19ub2RlKCdtYWluJyk7Ciskbm9kZS0+aW5pdDsKKyRub2RlLT5zdGFydDsKKyRub2RlLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywKKyAgICAnQ1JFQVRFIFVOTE9HR0VEIFRBQkxFIHh5ICh4IGlu dGVnZXIsIHkgaW50ZWdlcik7ICcKKyAgLiAnSU5TRVJUIElOVE8geHkgVkFMVUVTICgxLCAyKSwg KDIsIDMpOycpOworCitteSAkc2NyaXB0X3NlcmlhbGl6YXRpb24gPSAkbm9kZS0+YmFzZWRpciAu ICcvcGdiZW5jaF9zY3JpcHRfc2VyaWFsaXphdGlvbic7CithcHBlbmRfdG9fZmlsZSgkc2NyaXB0 X3NlcmlhbGl6YXRpb24sCisJCSJcXHNldCBkZWx0YSByYW5kb20oLTUwMDAsIDUwMDApXG4iCisJ ICAuICJCRUdJTjtcbiIKKwkgIC4gIlNFTEVDVCBwZ19zbGVlcCgxKTtcbiIKKwkgIC4gIlVQREFU RSB4eSBTRVQgeSA9IHkgKyA6ZGVsdGEgIgorCSAgLiAiV0hFUkUgeCA9IDEgQU5EIHBnX2Fkdmlz b3J5X2xvY2soMCkgSVMgTk9UIE5VTEw7XG4iCisJICAuICJTRUxFQ1QgcGdfYWR2aXNvcnlfdW5s b2NrX2FsbCgpO1xuIgorCSAgLiAiRU5EO1xuIik7CisKK215ICRzY3JpcHRfZGVhZGxvY2tzMSA9 ICRub2RlLT5iYXNlZGlyIC4gJy9wZ2JlbmNoX3NjcmlwdF9kZWFkbG9ja3MxJzsKK2FwcGVuZF90 b19maWxlKCRzY3JpcHRfZGVhZGxvY2tzMSwKKwkJIkJFR0lOO1xuIgorCSAgLiAiU0VMRUNUIHBn X2Fkdmlzb3J5X2xvY2soIiAuIERFQURMT0NLXzEgLiAiKTtcbiIKKwkgIC4gIlNFTEVDVCBwZ19h ZHZpc29yeV9sb2NrKCIgLiBXQUlUX1BHQkVOQ0hfMiAuICIpO1xuIgorCSAgLiAiU0VMRUNUIHBn X2Fkdmlzb3J5X2xvY2soIiAuIERFQURMT0NLXzIgLiAiKTtcbiIKKwkgIC4gIkVORDtcbiIKKwkg IC4gIlNFTEVDVCBwZ19hZHZpc29yeV91bmxvY2tfYWxsKCk7XG4iCisJICAuICJTRUxFQ1QgcGdf YWR2aXNvcnlfbG9jaygiIC4gVFJBTlNBQ1RJT05fRU5EU18xIC4gIik7XG4iCisJICAuICJTRUxF Q1QgcGdfYWR2aXNvcnlfdW5sb2NrX2FsbCgpOyIpOworCitteSAkc2NyaXB0X2RlYWRsb2NrczIg PSAkbm9kZS0+YmFzZWRpciAuICcvcGdiZW5jaF9zY3JpcHRfZGVhZGxvY2tzMic7CithcHBlbmRf dG9fZmlsZSgkc2NyaXB0X2RlYWRsb2NrczIsCisJCSJCRUdJTjtcbiIKKwkgIC4gIlNFTEVDVCBw Z19hZHZpc29yeV9sb2NrKCIgLiBERUFETE9DS18yIC4gIik7XG4iCisJICAuICJTRUxFQ1QgcGdf YWR2aXNvcnlfbG9jaygiIC4gREVBRExPQ0tfMSAuICIpO1xuIgorCSAgLiAiRU5EO1xuIgorCSAg LiAiU0VMRUNUIHBnX2Fkdmlzb3J5X3VubG9ja19hbGwoKTtcbiIKKwkgIC4gIlNFTEVDVCBwZ19h ZHZpc29yeV9sb2NrKCIgLiBUUkFOU0FDVElPTl9FTkRTXzIgLiAiKTtcbiIKKwkgIC4gIlNFTEVD VCBwZ19hZHZpc29yeV91bmxvY2tfYWxsKCk7Iik7CisKK3N1YiB0ZXN0X3BnYmVuY2hfc2VyaWFs aXphdGlvbl9lcnJvcnMKK3sKKwlteSAoJG1heF90cmllcywgJGxhdGVuY3lfbGltaXQsICR0ZXN0 X25hbWUpID0gQF87CisKKwlteSAkaXNvbGF0aW9uX2xldmVsID0gUkVQRUFUQUJMRV9SRUFEOwor CW15ICRpc29sYXRpb25fbGV2ZWxfc2hlbGwgPSAkaXNvbGF0aW9uX2xldmVsX3NoZWxsWyRpc29s YXRpb25fbGV2ZWxdOworCisJbG9jYWwgJEVOVntQR1BPUlR9ID0gJG5vZGUtPnBvcnQ7CisJbG9j YWwgJEVOVntQR09QVElPTlN9ID0KKwkJIi1jIGRlZmF1bHRfdHJhbnNhY3Rpb25faXNvbGF0aW9u PSIgLiAkaXNvbGF0aW9uX2xldmVsX3NoZWxsOworCXByaW50ICIjIFBHT1BUSU9OUzogIiAuICRF TlZ7UEdPUFRJT05TfSAuICJcbiI7CisKKwlteSAoJGhfcHNxbCwgJGluX3BzcWwsICRvdXRfcHNx bCk7CisJbXkgKCRoX3BnYmVuY2gsICRpbl9wZ2JlbmNoLCAkb3V0X3BnYmVuY2gsICRlcnJfcGdi ZW5jaCk7CisKKwkjIE9wZW4gYSBwc3FsIHNlc3Npb24sIHJ1biBhIHBhcmFsbGVsIHRyYW5zYWN0 aW9uIGFuZCBhcXVpcmUgYW4gYWR2aXNvcnkKKwkjIGxvY2s6CisJcHJpbnQgIiMgU3RhcnRpbmcg cHNxbFxuIjsKKwkkaF9wc3FsID0gSVBDOjpSdW46OnN0YXJ0IFsgJ3BzcWwnIF0sIFwkaW5fcHNx bCwgXCRvdXRfcHNxbDsKKworCSRpbl9wc3FsID0gImJlZ2luO1xuIjsKKwlwcmludCAiIyBSdW5u aW5nIGluIHBzcWw6ICIgLiBqb2luKCIgIiwgJGluX3BzcWwpOworCSRoX3BzcWwtPnB1bXAoKSB1 bnRpbCAkb3V0X3BzcWwgPX4gL0JFR0lOLzsKKworCSRpbl9wc3FsID0KKwkJInVwZGF0ZSB4eSBz ZXQgeSA9IHkgKyAxICIKKwkgIC4gIndoZXJlIHggPSAxIGFuZCBwZ19hZHZpc29yeV9sb2NrKDAp IGlzIG5vdCBudWxsO1xuIjsKKwlwcmludCAiIyBSdW5uaW5nIGluIHBzcWw6ICIgLiBqb2luKCIg IiwgJGluX3BzcWwpOworCSRoX3BzcWwtPnB1bXAoKSB1bnRpbCAkb3V0X3BzcWwgPX4gL1VQREFU RSAxLzsKKworCW15ICRyZXRyeV9vcHRpb25zID0KKwkJKCRtYXhfdHJpZXMgPyAiLS1tYXgtdHJp ZXMgJG1heF90cmllcyIgOiAiIikKKwkgIC4gKCRsYXRlbmN5X2xpbWl0ID8gIi0tbGF0ZW5jeS1s aW1pdCAkbGF0ZW5jeV9saW1pdCIgOiAiIik7CisKKwkjIFN0YXJ0IHBnYmVuY2g6CisJbXkgQGNv bW1hbmQgPSAoCisJCXF3KHBnYmVuY2ggLS1uby12YWN1dW0gLS10cmFuc2FjdGlvbnMgMSAtLWRl YnVnIGZhaWxzIC0tZmlsZSksCisJCSRzY3JpcHRfc2VyaWFsaXphdGlvbiwKKwkJc3BsaXQgL1xz Ky8sICRyZXRyeV9vcHRpb25zKTsKKwlwcmludCAiIyBSdW5uaW5nOiAiIC4gam9pbigiICIsIEBj b21tYW5kKSAuICJcbiI7CisJJGhfcGdiZW5jaCA9IElQQzo6UnVuOjpzdGFydCBcQGNvbW1hbmQs IFwkaW5fcGdiZW5jaCwgXCRvdXRfcGdiZW5jaCwKKwkgIFwkZXJyX3BnYmVuY2g7CisKKwkjIFdh aXQgdW50aWwgcGdiZW5jaCBhbHNvIHRyaWVzIHRvIGFjcXVpcmUgdGhlIHNhbWUgYWR2aXNvcnkg bG9jazoKKwlkbworCXsKKwkJJGluX3BzcWwgPQorCQkJInNlbGVjdCAqIGZyb20gcGdfbG9ja3Mg d2hlcmUgIgorCQkgIC4gImxvY2t0eXBlID0gJ2Fkdmlzb3J5JyBhbmQgIgorCQkgIC4gIm9ianN1 YmlkID0gMSBhbmQgIgorCQkgIC4gIigoY2xhc3NpZDo6YmlnaW50IDw8IDMyKSB8IG9iamlkOjpi aWdpbnQgPSAwOjpiaWdpbnQpIGFuZCAiCisJCSAgLiAibm90IGdyYW50ZWQ7XG4iOworCQlwcmlu dCAiIyBSdW5uaW5nIGluIHBzcWw6ICIgLiBqb2luKCIgIiwgJGluX3BzcWwpOworCQkkaF9wc3Fs LT5wdW1wKCkgd2hpbGUgbGVuZ3RoICRpbl9wc3FsOworCX0gd2hpbGUgKCRvdXRfcHNxbCAhfiAv MSByb3cvKTsKKworCSMgSW4gcHNxbCwgY29tbWl0IHRoZSB0cmFuc2FjdGlvbiwgcmVsZWFzZSBh ZHZpc29yeSBsb2NrcyBhbmQgZW5kIHRoZQorCSMgc2Vzc2lvbjoKKwkkaW5fcHNxbCA9ICJlbmQ7 XG4iOworCXByaW50ICIjIFJ1bm5pbmcgaW4gcHNxbDogIiAuIGpvaW4oIiAiLCAkaW5fcHNxbCk7 CisJJGhfcHNxbC0+cHVtcCgpIHVudGlsICRvdXRfcHNxbCA9fiAvQ09NTUlULzsKKworCSRpbl9w c3FsID0gInNlbGVjdCBwZ19hZHZpc29yeV91bmxvY2tfYWxsKCk7XG4iOworCXByaW50ICIjIFJ1 bm5pbmcgaW4gcHNxbDogIiAuIGpvaW4oIiAiLCAkaW5fcHNxbCk7CisJJGhfcHNxbC0+cHVtcCgp IHVudGlsICRvdXRfcHNxbCA9fiAvcGdfYWR2aXNvcnlfdW5sb2NrX2FsbC87CisKKwkkaW5fcHNx bCA9ICJcXHFcbiI7CisJcHJpbnQgIiMgUnVubmluZyBpbiBwc3FsOiAiIC4gam9pbigiICIsICRp bl9wc3FsKTsKKwkkaF9wc3FsLT5wdW1wKCkgd2hpbGUgbGVuZ3RoICRpbl9wc3FsOworCisJJGhf cHNxbC0+ZmluaXNoKCk7CisKKwkjIEdldCBwZ2JlbmNoIHJlc3VsdHMKKwkkaF9wZ2JlbmNoLT5w dW1wKCkgdW50aWwgbGVuZ3RoICRvdXRfcGdiZW5jaDsKKwkkaF9wZ2JlbmNoLT5maW5pc2goKTsK KworCSMgT24gV2luZG93cywgdGhlIGV4aXQgc3RhdHVzIG9mIHRoZSBwcm9jZXNzIGlzIHJldHVy bmVkIGRpcmVjdGx5IGFzIHRoZQorCSMgcHJvY2VzcydzIGV4aXQgY29kZSwgd2hpbGUgb24gVW5p eCwgaXQncyByZXR1cm5lZCBpbiB0aGUgaGlnaCBiaXRzCisJIyBvZiB0aGUgZXhpdCBjb2RlIChz ZWUgV0VYSVRTVEFUVVMgbWFjcm8gaW4gdGhlIHN0YW5kYXJkIDxzeXMvd2FpdC5oPgorCSMgaGVh ZGVyIGZpbGUpLiBJUEM6OlJ1bidzIHJlc3VsdCBmdW5jdGlvbiBhbHdheXMgcmV0dXJucyBleGl0 IGNvZGUgPj4gOCwKKwkjIGFzc3VtaW5nIHRoZSBVbml4IGNvbnZlbnRpb24sIHdoaWNoIHdpbGwg YWx3YXlzIHJldHVybiAwIG9uIFdpbmRvd3MgYXMKKwkjIGxvbmcgYXMgdGhlIHByb2Nlc3Mgd2Fz IG5vdCB0ZXJtaW5hdGVkIGJ5IGFuIGV4Y2VwdGlvbi4gVG8gd29yayBhcm91bmQKKwkjIHRoYXQs IHVzZSAkaC0+ZnVsbF9yZXN1bHQgb24gV2luZG93cyBpbnN0ZWFkLgorCW15ICRyZXN1bHQgPQor CSAgICAoJENvbmZpZ3tvc25hbWV9IGVxICJNU1dpbjMyIikKKwkgID8gKCRoX3BnYmVuY2gtPmZ1 bGxfcmVzdWx0cylbMF0KKwkgIDogJGhfcGdiZW5jaC0+cmVzdWx0KDApOworCisJIyBDaGVjayBw Z2JlbmNoIHJlc3VsdHMKKwlvayghJHJlc3VsdCwgIkBjb21tYW5kIGV4aXQgY29kZSAwIik7CisK KwlsaWtlKCRvdXRfcGdiZW5jaCwKKwkJcXJ7cHJvY2Vzc2VkOiAwLzF9LAorCQkiJHRlc3RfbmFt ZTogY2hlY2sgcHJvY2Vzc2VkIHRyYW5zYWN0aW9ucyIpOworCisJbGlrZSgkb3V0X3BnYmVuY2gs CisJCXFye251bWJlciBvZiBlcnJvcnM6IDEgXCgxMDBcLjAwMCVcKX0sCisJCSIkdGVzdF9uYW1l OiBjaGVjayBlcnJvcnMiKTsKKworCWxpa2UoJG91dF9wZ2JlbmNoLAorCQlxcnteKCg/IW51bWJl ciBvZiByZXRyaWVkKSgufFxuKSkqJH0sCisJCSIkdGVzdF9uYW1lOiBjaGVjayByZXRyaWVkIik7 CisKKwlpZiAoJG1heF90cmllcykKKwl7CisJCWxpa2UoJG91dF9wZ2JlbmNoLAorCQkJcXJ7bWF4 aW11bSBudW1iZXIgb2YgdHJpZXM6ICRtYXhfdHJpZXN9LAorCQkJIiR0ZXN0X25hbWU6IGNoZWNr IHRoZSBtYXhpbXVtIG51bWJlciBvZiB0cmllcyIpOworCX0KKwllbHNlCisJeworCQlsaWtlKCRv dXRfcGdiZW5jaCwKKwkJCXFye14oKD8hbWF4aW11bSBudW1iZXIgb2YgdHJpZXMpKC58XG4pKSok fSwKKwkJCSIkdGVzdF9uYW1lOiBjaGVjayB0aGUgbWF4aW11bSBudW1iZXIgb2YgdHJpZXMiKTsK Kwl9CisKKwlpZiAoJGxhdGVuY3lfbGltaXQpCisJeworCQlsaWtlKCRvdXRfcGdiZW5jaCwKKwkJ CXFye251bWJlciBvZiB0cmFuc2FjdGlvbnMgYWJvdmUgdGhlICRsYXRlbmN5X2xpbWl0XC4wIG1z IGxhdGVuY3kgbGltaXQ6IDEvMSBcKDEwMC4wMDAgXCVcKSBcKGluY2x1ZGluZyBlcnJvcnNcKX0s CisJCQkiJHRlc3RfbmFtZTogY2hlY2sgdHJhbnNhY3Rpb25zIGFib3ZlIGxhdGVuY3kgbGltaXQi KTsKKwl9CisJZWxzZQorCXsKKwkJbGlrZSgkb3V0X3BnYmVuY2gsCisJCQlxcnteKCg/IWxhdGVu Y3kgbGltaXQpKC58XG4pKSokfSwKKwkJCSIkdGVzdF9uYW1lOiBjaGVjayB0cmFuc2FjdGlvbnMg YWJvdmUgbGF0ZW5jeSBsaW1pdCIpOworCX0KKworCW15ICRwYXR0ZXJuID0KKwkJImNsaWVudCAw IGdvdCBhIGZhaWx1cmUgaW4gY29tbWFuZCAzIFxcKFNRTFxcKSBvZiBzY3JpcHQgMDsgIgorCSAg LiAiRVJST1I6ICBjb3VsZCBub3Qgc2VyaWFsaXplIGFjY2VzcyBkdWUgdG8gY29uY3VycmVudCB1 cGRhdGUiOworCisJbGlrZSgkZXJyX3BnYmVuY2gsCisJCXFyeyRwYXR0ZXJufSwKKwkJIiR0ZXN0 X25hbWU6IGNoZWNrIHNlcmlhbGl6YXRpb24gZmFpbHVyZSIpOworfQorCitzdWIgdGVzdF9wZ2Jl bmNoX3NlcmlhbGl6YXRpb25fZmFpbHVyZXMKK3sKKwlteSAkaXNvbGF0aW9uX2xldmVsID0gUkVQ RUFUQUJMRV9SRUFEOworCW15ICRpc29sYXRpb25fbGV2ZWxfc2hlbGwgPSAkaXNvbGF0aW9uX2xl dmVsX3NoZWxsWyRpc29sYXRpb25fbGV2ZWxdOworCisJbG9jYWwgJEVOVntQR1BPUlR9ID0gJG5v ZGUtPnBvcnQ7CisJbG9jYWwgJEVOVntQR09QVElPTlN9ID0KKwkJIi1jIGRlZmF1bHRfdHJhbnNh Y3Rpb25faXNvbGF0aW9uPSIgLiAkaXNvbGF0aW9uX2xldmVsX3NoZWxsOworCXByaW50ICIjIFBH T1BUSU9OUzogIiAuICRFTlZ7UEdPUFRJT05TfSAuICJcbiI7CisKKwlteSAoJGhfcHNxbCwgJGlu X3BzcWwsICRvdXRfcHNxbCk7CisJbXkgKCRoX3BnYmVuY2gsICRpbl9wZ2JlbmNoLCAkb3V0X3Bn YmVuY2gsICRlcnJfcGdiZW5jaCk7CisKKwkjIE9wZW4gYSBwc3FsIHNlc3Npb24sIHJ1biBhIHBh cmFsbGVsIHRyYW5zYWN0aW9uIGFuZCBhcXVpcmUgYW4gYWR2aXNvcnkKKwkjIGxvY2s6CisJcHJp bnQgIiMgU3RhcnRpbmcgcHNxbFxuIjsKKwkkaF9wc3FsID0gSVBDOjpSdW46OnN0YXJ0IFsgJ3Bz cWwnIF0sIFwkaW5fcHNxbCwgXCRvdXRfcHNxbDsKKworCSRpbl9wc3FsID0gImJlZ2luO1xuIjsK KwlwcmludCAiIyBSdW5uaW5nIGluIHBzcWw6ICIgLiBqb2luKCIgIiwgJGluX3BzcWwpOworCSRo X3BzcWwtPnB1bXAoKSB1bnRpbCAkb3V0X3BzcWwgPX4gL0JFR0lOLzsKKworCSRpbl9wc3FsID0K KwkJInVwZGF0ZSB4eSBzZXQgeSA9IHkgKyAxICIKKwkgIC4gIndoZXJlIHggPSAxIGFuZCBwZ19h ZHZpc29yeV9sb2NrKDApIGlzIG5vdCBudWxsO1xuIjsKKwlwcmludCAiIyBSdW5uaW5nIGluIHBz cWw6ICIgLiBqb2luKCIgIiwgJGluX3BzcWwpOworCSRoX3BzcWwtPnB1bXAoKSB1bnRpbCAkb3V0 X3BzcWwgPX4gL1VQREFURSAxLzsKKworCSMgU3RhcnQgcGdiZW5jaDoKKwlteSBAY29tbWFuZCA9 ICgKKwkJcXcocGdiZW5jaCAtLW5vLXZhY3V1bSAtLXRyYW5zYWN0aW9ucyAxIC0tZGVidWcgYWxs IC0tbWF4LXRyaWVzIDIpLAorCQkiLS1maWxlIiwKKwkJJHNjcmlwdF9zZXJpYWxpemF0aW9uKTsK KwlwcmludCAiIyBSdW5uaW5nOiAiIC4gam9pbigiICIsIEBjb21tYW5kKSAuICJcbiI7CisJJGhf cGdiZW5jaCA9IElQQzo6UnVuOjpzdGFydCBcQGNvbW1hbmQsIFwkaW5fcGdiZW5jaCwgXCRvdXRf cGdiZW5jaCwKKwkgIFwkZXJyX3BnYmVuY2g7CisKKwkjIFdhaXQgdW50aWwgcGdiZW5jaCBhbHNv IHRyaWVzIHRvIGFjcXVpcmUgdGhlIHNhbWUgYWR2aXNvcnkgbG9jazoKKwlkbworCXsKKwkJJGlu X3BzcWwgPQorCQkJInNlbGVjdCAqIGZyb20gcGdfbG9ja3Mgd2hlcmUgIgorCQkgIC4gImxvY2t0 eXBlID0gJ2Fkdmlzb3J5JyBhbmQgIgorCQkgIC4gIm9ianN1YmlkID0gMSBhbmQgIgorCQkgIC4g IigoY2xhc3NpZDo6YmlnaW50IDw8IDMyKSB8IG9iamlkOjpiaWdpbnQgPSAwOjpiaWdpbnQpIGFu ZCAiCisJCSAgLiAibm90IGdyYW50ZWQ7XG4iOworCQlwcmludCAiIyBSdW5uaW5nIGluIHBzcWw6 ICIgLiBqb2luKCIgIiwgJGluX3BzcWwpOworCQkkaF9wc3FsLT5wdW1wKCkgd2hpbGUgbGVuZ3Ro ICRpbl9wc3FsOworCX0gd2hpbGUgKCRvdXRfcHNxbCAhfiAvMSByb3cvKTsKKworCSMgSW4gcHNx bCwgY29tbWl0IHRoZSB0cmFuc2FjdGlvbiwgcmVsZWFzZSBhZHZpc29yeSBsb2NrcyBhbmQgZW5k IHRoZQorCSMgc2Vzc2lvbjoKKwkkaW5fcHNxbCA9ICJlbmQ7XG4iOworCXByaW50ICIjIFJ1bm5p bmcgaW4gcHNxbDogIiAuIGpvaW4oIiAiLCAkaW5fcHNxbCk7CisJJGhfcHNxbC0+cHVtcCgpIHVu dGlsICRvdXRfcHNxbCA9fiAvQ09NTUlULzsKKworCSRpbl9wc3FsID0gInNlbGVjdCBwZ19hZHZp c29yeV91bmxvY2tfYWxsKCk7XG4iOworCXByaW50ICIjIFJ1bm5pbmcgaW4gcHNxbDogIiAuIGpv aW4oIiAiLCAkaW5fcHNxbCk7CisJJGhfcHNxbC0+cHVtcCgpIHVudGlsICRvdXRfcHNxbCA9fiAv cGdfYWR2aXNvcnlfdW5sb2NrX2FsbC87CisKKwkkaW5fcHNxbCA9ICJcXHFcbiI7CisJcHJpbnQg IiMgUnVubmluZyBpbiBwc3FsOiAiIC4gam9pbigiICIsICRpbl9wc3FsKTsKKwkkaF9wc3FsLT5w dW1wKCkgd2hpbGUgbGVuZ3RoICRpbl9wc3FsOworCisJJGhfcHNxbC0+ZmluaXNoKCk7CisKKwkj IEdldCBwZ2JlbmNoIHJlc3VsdHMKKwkkaF9wZ2JlbmNoLT5wdW1wKCkgdW50aWwgbGVuZ3RoICRv dXRfcGdiZW5jaDsKKwkkaF9wZ2JlbmNoLT5maW5pc2goKTsKKworCSMgT24gV2luZG93cywgdGhl IGV4aXQgc3RhdHVzIG9mIHRoZSBwcm9jZXNzIGlzIHJldHVybmVkIGRpcmVjdGx5IGFzIHRoZQor CSMgcHJvY2VzcydzIGV4aXQgY29kZSwgd2hpbGUgb24gVW5peCwgaXQncyByZXR1cm5lZCBpbiB0 aGUgaGlnaCBiaXRzCisJIyBvZiB0aGUgZXhpdCBjb2RlIChzZWUgV0VYSVRTVEFUVVMgbWFjcm8g aW4gdGhlIHN0YW5kYXJkIDxzeXMvd2FpdC5oPgorCSMgaGVhZGVyIGZpbGUpLiBJUEM6OlJ1bidz IHJlc3VsdCBmdW5jdGlvbiBhbHdheXMgcmV0dXJucyBleGl0IGNvZGUgPj4gOCwKKwkjIGFzc3Vt aW5nIHRoZSBVbml4IGNvbnZlbnRpb24sIHdoaWNoIHdpbGwgYWx3YXlzIHJldHVybiAwIG9uIFdp bmRvd3MgYXMKKwkjIGxvbmcgYXMgdGhlIHByb2Nlc3Mgd2FzIG5vdCB0ZXJtaW5hdGVkIGJ5IGFu IGV4Y2VwdGlvbi4gVG8gd29yayBhcm91bmQKKwkjIHRoYXQsIHVzZSAkaC0+ZnVsbF9yZXN1bHQg b24gV2luZG93cyBpbnN0ZWFkLgorCW15ICRyZXN1bHQgPQorCSAgICAoJENvbmZpZ3tvc25hbWV9 IGVxICJNU1dpbjMyIikKKwkgID8gKCRoX3BnYmVuY2gtPmZ1bGxfcmVzdWx0cylbMF0KKwkgIDog JGhfcGdiZW5jaC0+cmVzdWx0KDApOworCisJIyBDaGVjayBwZ2JlbmNoIHJlc3VsdHMKKwlvaygh JHJlc3VsdCwgIkBjb21tYW5kIGV4aXQgY29kZSAwIik7CisKKwlsaWtlKCRvdXRfcGdiZW5jaCwK KwkJcXJ7cHJvY2Vzc2VkOiAxLzF9LAorCQkiY29uY3VycmVudCB1cGRhdGUgd2l0aCByZXRyeWlu ZzogY2hlY2sgcHJvY2Vzc2VkIHRyYW5zYWN0aW9ucyIpOworCisJbGlrZSgkb3V0X3BnYmVuY2gs CisJCXFye14oKD8hbnVtYmVyIG9mIGVycm9ycykoLnxcbikpKiR9LAorCQkiY29uY3VycmVudCB1 cGRhdGUgd2l0aCByZXRyeWluZzogY2hlY2sgZXJyb3JzIik7CisKKwlsaWtlKCRvdXRfcGdiZW5j aCwKKwkJcXJ7bnVtYmVyIG9mIHJldHJpZWQ6IDEgXCgxMDBcLjAwMCVcKX0sCisJCSJjb25jdXJy ZW50IHVwZGF0ZSB3aXRoIHJldHJ5aW5nOiBjaGVjayByZXRyaWVkIik7CisKKwlsaWtlKCRvdXRf cGdiZW5jaCwKKwkJcXJ7bnVtYmVyIG9mIHJldHJpZXM6IDF9LAorCQkiY29uY3VycmVudCB1cGRh dGUgd2l0aCByZXRyeWluZzogY2hlY2sgcmV0cmllcyIpOworCisJbGlrZSgkb3V0X3BnYmVuY2gs CisJCXFye2xhdGVuY3kgYXZlcmFnZSA9IFxkK1wuXGR7M30gbXNcbn0sCisJCSJjb25jdXJyZW50 IHVwZGF0ZSB3aXRoIHJldHJ5aW5nOiBjaGVjayBsYXRlbmN5IGF2ZXJhZ2UiKTsKKworCW15ICRw YXR0ZXJuID0KKwkJImNsaWVudCAwIHNlbmRpbmcgVVBEQVRFIHh5IFNFVCB5ID0geSBcXCsgKC0/ XFxkKykgIgorCSAgLiAiV0hFUkUgeCA9IDEgQU5EIHBnX2Fkdmlzb3J5X2xvY2tcXCgwXFwpIElT IE5PVCBOVUxMO1xuIgorCSAgLiAiKGNsaWVudCAwIHJlY2VpdmluZ1xuKSsiCisJICAuICJjbGll bnQgMCBnb3QgYSBmYWlsdXJlIGluIGNvbW1hbmQgMyBcXChTUUxcXCkgb2Ygc2NyaXB0IDA7ICIK KwkgIC4gIkVSUk9SOiAgY291bGQgbm90IHNlcmlhbGl6ZSBhY2Nlc3MgZHVlIHRvIGNvbmN1cnJl bnQgdXBkYXRlXG5cbiIKKwkgIC4gImNsaWVudCAwIHNlbmRpbmcgU0VMRUNUIHBnX2Fkdmlzb3J5 X3VubG9ja19hbGxcXChcXCk7XG4iCisJICAuICJcXGcyKyIKKwkgIC4gImNsaWVudCAwIGNvbnRp bnVlcyBhIGZhaWxlZCB0cmFuc2FjdGlvbiBpbiBjb21tYW5kIDQgXFwoU1FMXFwpIG9mIHNjcmlw dCAwOyAiCisJICAuICJFUlJPUjogIGN1cnJlbnQgdHJhbnNhY3Rpb24gaXMgYWJvcnRlZCwgY29t bWFuZHMgaWdub3JlZCB1bnRpbCBlbmQgb2YgdHJhbnNhY3Rpb24gYmxvY2tcblxuIgorCSAgLiAi Y2xpZW50IDAgc2VuZGluZyBFTkQ7XG4iCisJICAuICJcXGcyKyIKKwkgIC4gImNsaWVudCAwIHJl cGVhdHMgdGhlIGZhaWxlZCB0cmFuc2FjdGlvbiBcXCh0cnkgMi8yXFwpXG4iCisJICAuICJjbGll bnQgMCBleGVjdXRpbmcgXFxcXHNldCBkZWx0YVxuIgorCSAgLiAiY2xpZW50IDAgc2VuZGluZyBC RUdJTjtcbiIKKwkgIC4gIlxcZzIrIgorCSAgLiAiY2xpZW50IDAgc2VuZGluZyBTRUxFQ1QgcGdf c2xlZXBcXCgxXFwpO1xuIgorCSAgLiAiXFxnMisiCisJICAuICJjbGllbnQgMCBzZW5kaW5nIFVQ REFURSB4eSBTRVQgeSA9IHkgXFwrIFxcZzEgIgorCSAgLiAiV0hFUkUgeCA9IDEgQU5EIHBnX2Fk dmlzb3J5X2xvY2tcXCgwXFwpIElTIE5PVCBOVUxMOyI7CisKKwlsaWtlKCRlcnJfcGdiZW5jaCwK KwkJcXJ7JHBhdHRlcm59LAorCQkiY29uY3VycmVudCB1cGRhdGUgd2l0aCByZXRyeWluZzogY2hl Y2sgdGhlIHJldHJpZWQgdHJhbnNhY3Rpb24iKTsKK30KKworc3ViIHRlc3RfcGdiZW5jaF9kZWFk bG9ja19lcnJvcnMKK3sKKwlteSAkaXNvbGF0aW9uX2xldmVsID0gUkVBRF9DT01NSVRURUQ7CisJ bXkgJGlzb2xhdGlvbl9sZXZlbF9zaGVsbCA9ICRpc29sYXRpb25fbGV2ZWxfc2hlbGxbJGlzb2xh dGlvbl9sZXZlbF07CisKKwlsb2NhbCAkRU5We1BHUE9SVH0gPSAkbm9kZS0+cG9ydDsKKwlsb2Nh bCAkRU5We1BHT1BUSU9OU30gPQorCQkiLWMgZGVmYXVsdF90cmFuc2FjdGlvbl9pc29sYXRpb249 IiAuICRpc29sYXRpb25fbGV2ZWxfc2hlbGw7CisJcHJpbnQgIiMgUEdPUFRJT05TOiAiIC4gJEVO VntQR09QVElPTlN9IC4gIlxuIjsKKworCW15ICgkaF9wc3FsLCAkaW5fcHNxbCwgJG91dF9wc3Fs KTsKKwlteSAoJGgxLCAkaW4xLCAkb3V0MSwgJGVycjEpOworCW15ICgkaDIsICRpbjIsICRvdXQy LCAkZXJyMik7CisKKwkjIE9wZW4gYSBwc3FsIHNlc3Npb24gYW5kIGFxdWlyZSBhbiBhZHZpc29y eSBsb2NrOgorCXByaW50ICIjIFN0YXJ0aW5nIHBzcWxcbiI7CisJJGhfcHNxbCA9IElQQzo6UnVu OjpzdGFydCBbICdwc3FsJyBdLCBcJGluX3BzcWwsIFwkb3V0X3BzcWw7CisKKwkkaW5fcHNxbCA9 CisJCSJzZWxlY3QgcGdfYWR2aXNvcnlfbG9jaygiIC4gV0FJVF9QR0JFTkNIXzIgLiAiKSAiCisJ ICAuICJhcyBwZ19hZHZpc29yeV9sb2NrXyIgLiBXQUlUX1BHQkVOQ0hfMiAuICI7XG4iOworCXBy aW50ICIjIFJ1bm5pbmcgaW4gcHNxbDogIiAuIGpvaW4oIiAiLCAkaW5fcHNxbCk7CisJJGhfcHNx bC0+cHVtcCgpIHVudGlsICRvdXRfcHNxbCA9fiAvcGdfYWR2aXNvcnlfbG9ja19Ae1sgV0FJVF9Q R0JFTkNIXzIgXX0vOworCisJIyBSdW4gdGhlIGZpcnN0IHBnYmVuY2g6CisJbXkgQGNvbW1hbmQx ID0gKAorCQlxdyhwZ2JlbmNoIC0tbm8tdmFjdXVtIC0tdHJhbnNhY3Rpb25zIDEgLS1kZWJ1ZyBm YWlscyAtLWZpbGUpLAorCQkkc2NyaXB0X2RlYWRsb2NrczEpOworCXByaW50ICIjIFJ1bm5pbmc6 ICIgLiBqb2luKCIgIiwgQGNvbW1hbmQxKSAuICJcbiI7CisJJGgxID0gSVBDOjpSdW46OnN0YXJ0 IFxAY29tbWFuZDEsIFwkaW4xLCBcJG91dDEsIFwkZXJyMTsKKworCSMgV2FpdCB1bnRpbCB0aGUg Zmlyc3QgcGdiZW5jaCBhbHNvIHRyaWVzIHRvIGFjcXVpcmUgdGhlIHNhbWUgYWR2aXNvcnkgbG9j azoKKwlkbworCXsKKwkJJGluX3BzcWwgPQorCQkJInNlbGVjdCBjYXNlIGNvdW50KCopICIKKwkJ ICAuICJ3aGVuIDAgdGhlbiAnIiAuIFdBSVRfUEdCRU5DSF8yIC4gIl96ZXJvJyAiCisJCSAgLiAi ZWxzZSAnIiAuIFdBSVRfUEdCRU5DSF8yIC4gIl9ub3RfemVybycgZW5kICIKKwkJICAuICJmcm9t IHBnX2xvY2tzIHdoZXJlICIKKwkJICAuICJsb2NrdHlwZSA9ICdhZHZpc29yeScgYW5kICIKKwkJ ICAuICJvYmpzdWJpZCA9IDEgYW5kICIKKwkJICAuICIoKGNsYXNzaWQ6OmJpZ2ludCA8PCAzMikg fCBvYmppZDo6YmlnaW50ID0gIgorCQkgIC4gV0FJVF9QR0JFTkNIXzIKKwkJICAuICI6OmJpZ2lu dCkgYW5kICIKKwkJICAuICJub3QgZ3JhbnRlZDtcbiI7CisJCXByaW50ICIjIFJ1bm5pbmcgaW4g cHNxbDogIiAuIGpvaW4oIiAiLCAkaW5fcHNxbCk7CisJCSRoX3BzcWwtPnB1bXAoKSB3aGlsZSBs ZW5ndGggJGluX3BzcWw7CisJfSB3aGlsZSAoJG91dF9wc3FsICF+IC9Ae1sgV0FJVF9QR0JFTkNI XzIgXX1fbm90X3plcm8vKTsKKworCSMgUnVuIHRoZSBzZWNvbmQgcGdiZW5jaDoKKwlteSBAY29t bWFuZDIgPSAoCisJCXF3KHBnYmVuY2ggLS1uby12YWN1dW0gLS10cmFuc2FjdGlvbnMgMSAtLWRl YnVnIGZhaWxzIC0tZmlsZSksCisJCSRzY3JpcHRfZGVhZGxvY2tzMik7CisJcHJpbnQgIiMgUnVu bmluZzogIiAuIGpvaW4oIiAiLCBAY29tbWFuZDIpIC4gIlxuIjsKKwkkaDIgPSBJUEM6OlJ1bjo6 c3RhcnQgXEBjb21tYW5kMiwgXCRpbjIsIFwkb3V0MiwgXCRlcnIyOworCisJIyBXYWl0IHVudGls IHRoZSBzZWNvbmQgcGdiZW5jaCB0cmllcyB0byBhY3F1aXJlIHRoZSBsb2NrIGhlbGQgYnkgdGhl IGZpcnN0CisJIyBwZ2JlbmNoOgorCWRvCisJeworCQkkaW5fcHNxbCA9CisJCQkic2VsZWN0IGNh c2UgY291bnQoKikgIgorCQkgIC4gIndoZW4gMCB0aGVuICciIC4gREVBRExPQ0tfMSAuICJfemVy bycgIgorCQkgIC4gImVsc2UgJyIgLiBERUFETE9DS18xIC4gIl9ub3RfemVybycgZW5kICIKKwkJ ICAuICJmcm9tIHBnX2xvY2tzIHdoZXJlICIKKwkJICAuICJsb2NrdHlwZSA9ICdhZHZpc29yeScg YW5kICIKKwkJICAuICJvYmpzdWJpZCA9IDEgYW5kICIKKwkJICAuICIoKGNsYXNzaWQ6OmJpZ2lu dCA8PCAzMikgfCBvYmppZDo6YmlnaW50ID0gIgorCQkgIC4gREVBRExPQ0tfMQorCQkgIC4gIjo6 YmlnaW50KSBhbmQgIgorCQkgIC4gIm5vdCBncmFudGVkO1xuIjsKKwkJcHJpbnQgIiMgUnVubmlu ZyBpbiBwc3FsOiAiIC4gam9pbigiICIsICRpbl9wc3FsKTsKKwkJJGhfcHNxbC0+cHVtcCgpIHdo aWxlIGxlbmd0aCAkaW5fcHNxbDsKKwl9IHdoaWxlICgkb3V0X3BzcWwgIX4gL0B7WyBERUFETE9D S18xIF19X25vdF96ZXJvLyk7CisKKwkjIEluIHRoZSBwc3FsIHNlc3Npb24sIHJlbGVhc2UgdGhl IGxvY2sgdGhhdCB0aGUgZmlyc3QgcGdiZW5jaCBpcyB3YWl0aW5nCisJIyBmb3IgYW5kIGVuZCB0 aGUgc2Vzc2lvbjoKKwkkaW5fcHNxbCA9CisJCSJzZWxlY3QgcGdfYWR2aXNvcnlfdW5sb2NrKCIg LiBXQUlUX1BHQkVOQ0hfMiAuICIpICIKKwkgIC4gImFzIHBnX2Fkdmlzb3J5X3VubG9ja18iIC4g V0FJVF9QR0JFTkNIXzIgLiAiO1xuIjsKKwlwcmludCAiIyBSdW5uaW5nIGluIHBzcWw6ICIgLiBq b2luKCIgIiwgJGluX3BzcWwpOworCSRoX3BzcWwtPnB1bXAoKSB1bnRpbCAkb3V0X3BzcWwgPX4g L3BnX2Fkdmlzb3J5X3VubG9ja19Ae1sgV0FJVF9QR0JFTkNIXzIgXX0vOworCisJJGluX3BzcWwg PSAiXFxxXG4iOworCXByaW50ICIjIFJ1bm5pbmcgaW4gcHNxbDogIiAuIGpvaW4oIiAiLCAkaW5f cHNxbCk7CisJJGhfcHNxbC0+cHVtcCgpIHdoaWxlIGxlbmd0aCAkaW5fcHNxbDsKKworCSRoX3Bz cWwtPmZpbmlzaCgpOworCisJIyBHZXQgcmVzdWx0cyBmcm9tIGFsbCBwZ2JlbmNoZXM6CisJJGgx LT5wdW1wKCkgdW50aWwgbGVuZ3RoICRvdXQxOworCSRoMS0+ZmluaXNoKCk7CisKKwkkaDItPnB1 bXAoKSB1bnRpbCBsZW5ndGggJG91dDI7CisJJGgyLT5maW5pc2goKTsKKworCSMgT24gV2luZG93 cywgdGhlIGV4aXQgc3RhdHVzIG9mIHRoZSBwcm9jZXNzIGlzIHJldHVybmVkIGRpcmVjdGx5IGFz IHRoZQorCSMgcHJvY2VzcydzIGV4aXQgY29kZSwgd2hpbGUgb24gVW5peCwgaXQncyByZXR1cm5l ZCBpbiB0aGUgaGlnaCBiaXRzCisJIyBvZiB0aGUgZXhpdCBjb2RlIChzZWUgV0VYSVRTVEFUVVMg bWFjcm8gaW4gdGhlIHN0YW5kYXJkIDxzeXMvd2FpdC5oPgorCSMgaGVhZGVyIGZpbGUpLiBJUEM6 OlJ1bidzIHJlc3VsdCBmdW5jdGlvbiBhbHdheXMgcmV0dXJucyBleGl0IGNvZGUgPj4gOCwKKwkj IGFzc3VtaW5nIHRoZSBVbml4IGNvbnZlbnRpb24sIHdoaWNoIHdpbGwgYWx3YXlzIHJldHVybiAw IG9uIFdpbmRvd3MgYXMKKwkjIGxvbmcgYXMgdGhlIHByb2Nlc3Mgd2FzIG5vdCB0ZXJtaW5hdGVk IGJ5IGFuIGV4Y2VwdGlvbi4gVG8gd29yayBhcm91bmQKKwkjIHRoYXQsIHVzZSAkaC0+ZnVsbF9y ZXN1bHQgb24gV2luZG93cyBpbnN0ZWFkLgorCW15ICRyZXN1bHQxID0KKwkgICAgKCRDb25maWd7 b3NuYW1lfSBlcSAiTVNXaW4zMiIpCisJICA/ICgkaDEtPmZ1bGxfcmVzdWx0cylbMF0KKwkgIDog JGgxLT5yZXN1bHQoMCk7CisKKwlteSAkcmVzdWx0MiA9CisJICAgICgkQ29uZmlne29zbmFtZX0g ZXEgIk1TV2luMzIiKQorCSAgPyAoJGgyLT5mdWxsX3Jlc3VsdHMpWzBdCisJICA6ICRoMi0+cmVz dWx0KDApOworCisJIyBDaGVjayBhbGwgcGdiZW5jaCByZXN1bHRzCisJb2soISRyZXN1bHQxLCAi QGNvbW1hbmQxIGV4aXQgY29kZSAwIik7CisJb2soISRyZXN1bHQyLCAiQGNvbW1hbmQyIGV4aXQg Y29kZSAwIik7CisKKwkjIFRoZSBmaXJzdCBvciBzZWNvbmQgcGdiZW5jaCBzaG91bGQgZ2V0IGEg ZGVhZGxvY2sgZXJyb3IKKwlvaygoKCRvdXQxID1+IC9wcm9jZXNzZWQ6IDBcLzEvIGFuZCAkb3V0 MiA9fiAvcHJvY2Vzc2VkOiAxXC8xLykgb3IKKwkJKCRvdXQyID1+IC9wcm9jZXNzZWQ6IDBcLzEv IGFuZCAkb3V0MSA9fiAvcHJvY2Vzc2VkOiAxXC8xLykpLAorCQkiY29uY3VycmVudCBkZWFkbG9j ayB1cGRhdGU6IGNoZWNrIHByb2Nlc3NlZCB0cmFuc2FjdGlvbnMiKTsKKworCW9rKCgoJG91dDEg PX4gL251bWJlciBvZiBlcnJvcnM6IDEgXCgxMDBcLjAwMCVcKS8gYW5kCisJCSAkb3V0MiA9fiAv XigoPyFudW1iZXIgb2YgZXJyb3JzKSgufFxuKSkqJC8pIG9yCisJCSgkb3V0MiA9fiAvbnVtYmVy IG9mIGVycm9yczogMSBcKDEwMFwuMDAwJVwpLyBhbmQKKwkJICRvdXQxID1+IC9eKCg/IW51bWJl ciBvZiBlcnJvcnMpKC58XG4pKSokLykpLAorCQkiY29uY3VycmVudCBkZWFkbG9jayB1cGRhdGU6 IGNoZWNrIGVycm9ycyIpOworCisJb2soKCRlcnIxID1+IC9jbGllbnQgMCBnb3QgYSBmYWlsdXJl IGluIGNvbW1hbmQgMyBcKFNRTFwpIG9mIHNjcmlwdCAwOyBFUlJPUjogIGRlYWRsb2NrIGRldGVj dGVkLyBvcgorCQkkZXJyMiA9fiAvY2xpZW50IDAgZ290IGEgZmFpbHVyZSBpbiBjb21tYW5kIDIg XChTUUxcKSBvZiBzY3JpcHQgMDsgRVJST1I6ICBkZWFkbG9jayBkZXRlY3RlZC8pLAorCQkiY29u Y3VycmVudCBkZWFkbG9jayB1cGRhdGU6IGNoZWNrIGRlYWRsb2NrIGZhaWx1cmUiKTsKKworCSMg Qm90aCBwZ2JlbmNoZXMgZG8gbm90IGhhdmUgcmV0cmllZCB0cmFuc2FjdGlvbnMKKwlsaWtlKCRv dXQxIC4gJG91dDIsCisJCXFye14oKD8hbnVtYmVyIG9mIHJldHJpZWQpKC58XG4pKSokfSwKKwkJ ImNvbmN1cnJlbnQgZGVhZGxvY2sgdXBkYXRlOiBjaGVjayByZXRyaWVkIik7Cit9CisKK3N1YiB0 ZXN0X3BnYmVuY2hfZGVhZGxvY2tfZmFpbHVyZXMKK3sKKwlteSAkaXNvbGF0aW9uX2xldmVsID0g UkVBRF9DT01NSVRURUQ7CisJbXkgJGlzb2xhdGlvbl9sZXZlbF9zaGVsbCA9ICRpc29sYXRpb25f bGV2ZWxfc2hlbGxbJGlzb2xhdGlvbl9sZXZlbF07CisKKwlsb2NhbCAkRU5We1BHUE9SVH0gPSAk bm9kZS0+cG9ydDsKKwlsb2NhbCAkRU5We1BHT1BUSU9OU30gPQorCQkiLWMgZGVmYXVsdF90cmFu c2FjdGlvbl9pc29sYXRpb249IiAuICRpc29sYXRpb25fbGV2ZWxfc2hlbGw7CisJcHJpbnQgIiMg UEdPUFRJT05TOiAiIC4gJEVOVntQR09QVElPTlN9IC4gIlxuIjsKKworCW15ICgkaF9wc3FsLCAk aW5fcHNxbCwgJG91dF9wc3FsKTsKKwlteSAoJGgxLCAkaW4xLCAkb3V0MSwgJGVycjEpOworCW15 ICgkaDIsICRpbjIsICRvdXQyLCAkZXJyMik7CisKKwkjIE9wZW4gYSBwc3FsIHNlc3Npb24gYW5k IGFxdWlyZSBhbiBhZHZpc29yeSBsb2NrOgorCXByaW50ICIjIFN0YXJ0aW5nIHBzcWxcbiI7CisJ JGhfcHNxbCA9IElQQzo6UnVuOjpzdGFydCBbICdwc3FsJyBdLCBcJGluX3BzcWwsIFwkb3V0X3Bz cWw7CisKKwkkaW5fcHNxbCA9CisJCSJzZWxlY3QgcGdfYWR2aXNvcnlfbG9jaygiIC4gV0FJVF9Q R0JFTkNIXzIgLiAiKSAiCisJICAuICJhcyBwZ19hZHZpc29yeV9sb2NrXyIgLiBXQUlUX1BHQkVO Q0hfMiAuICI7XG4iOworCXByaW50ICIjIFJ1bm5pbmcgaW4gcHNxbDogIiAuIGpvaW4oIiAiLCAk aW5fcHNxbCk7CisJJGhfcHNxbC0+cHVtcCgpIHVudGlsICRvdXRfcHNxbCA9fiAvcGdfYWR2aXNv cnlfbG9ja19Ae1sgV0FJVF9QR0JFTkNIXzIgXX0vOworCisJIyBSdW4gdGhlIGZpcnN0IHBnYmVu Y2g6CisJbXkgQGNvbW1hbmQxID0gKAorCQlxdyhwZ2JlbmNoIC0tbm8tdmFjdXVtIC0tdHJhbnNh Y3Rpb25zIDEgLS1kZWJ1ZyBhbGwgLS1tYXgtdHJpZXMgMiksCisJCSItLWZpbGUiLAorCQkkc2Ny aXB0X2RlYWRsb2NrczEpOworCXByaW50ICIjIFJ1bm5pbmc6ICIgLiBqb2luKCIgIiwgQGNvbW1h bmQxKSAuICJcbiI7CisJJGgxID0gSVBDOjpSdW46OnN0YXJ0IFxAY29tbWFuZDEsIFwkaW4xLCBc JG91dDEsIFwkZXJyMTsKKworCSMgV2FpdCB1bnRpbCB0aGUgZmlyc3QgcGdiZW5jaCBhbHNvIHRy aWVzIHRvIGFjcXVpcmUgdGhlIHNhbWUgYWR2aXNvcnkgbG9jazoKKwlkbworCXsKKwkJJGluX3Bz cWwgPQorCQkJInNlbGVjdCBjYXNlIGNvdW50KCopICIKKwkJICAuICJ3aGVuIDAgdGhlbiAnIiAu IFdBSVRfUEdCRU5DSF8yIC4gIl96ZXJvJyAiCisJCSAgLiAiZWxzZSAnIiAuIFdBSVRfUEdCRU5D SF8yIC4gIl9ub3RfemVybycgZW5kICIKKwkJICAuICJmcm9tIHBnX2xvY2tzIHdoZXJlICIKKwkJ ICAuICJsb2NrdHlwZSA9ICdhZHZpc29yeScgYW5kICIKKwkJICAuICJvYmpzdWJpZCA9IDEgYW5k ICIKKwkJICAuICIoKGNsYXNzaWQ6OmJpZ2ludCA8PCAzMikgfCBvYmppZDo6YmlnaW50ID0gIgor CQkgIC4gV0FJVF9QR0JFTkNIXzIKKwkJICAuICI6OmJpZ2ludCkgYW5kICIKKwkJICAuICJub3Qg Z3JhbnRlZDtcbiI7CisJCXByaW50ICIjIFJ1bm5pbmcgaW4gcHNxbDogIiAuIGpvaW4oIiAiLCAk aW5fcHNxbCk7CisJCSRoX3BzcWwtPnB1bXAoKSB3aGlsZSBsZW5ndGggJGluX3BzcWw7CisJfSB3 aGlsZSAoJG91dF9wc3FsICF+IC9Ae1sgV0FJVF9QR0JFTkNIXzIgXX1fbm90X3plcm8vKTsKKwor CSMgUnVuIHRoZSBzZWNvbmQgcGdiZW5jaDoKKwlteSBAY29tbWFuZDIgPSAoCisJCXF3KHBnYmVu Y2ggLS1uby12YWN1dW0gLS10cmFuc2FjdGlvbnMgMSAtLWRlYnVnIGFsbCAtLW1heC10cmllcyAy KSwKKwkJIi0tZmlsZSIsCisJCSRzY3JpcHRfZGVhZGxvY2tzMik7CisJcHJpbnQgIiMgUnVubmlu ZzogIiAuIGpvaW4oIiAiLCBAY29tbWFuZDIpIC4gIlxuIjsKKwkkaDIgPSBJUEM6OlJ1bjo6c3Rh cnQgXEBjb21tYW5kMiwgXCRpbjIsIFwkb3V0MiwgXCRlcnIyOworCisJIyBXYWl0IHVudGlsIHRo ZSBzZWNvbmQgcGdiZW5jaCB0cmllcyB0byBhY3F1aXJlIHRoZSBsb2NrIGhlbGQgYnkgdGhlIGZp cnN0CisJIyBwZ2JlbmNoOgorCWRvCisJeworCQkkaW5fcHNxbCA9CisJCQkic2VsZWN0IGNhc2Ug Y291bnQoKikgIgorCQkgIC4gIndoZW4gMCB0aGVuICciIC4gREVBRExPQ0tfMSAuICJfemVybycg IgorCQkgIC4gImVsc2UgJyIgLiBERUFETE9DS18xIC4gIl9ub3RfemVybycgZW5kICIKKwkJICAu ICJmcm9tIHBnX2xvY2tzIHdoZXJlICIKKwkJICAuICJsb2NrdHlwZSA9ICdhZHZpc29yeScgYW5k ICIKKwkJICAuICJvYmpzdWJpZCA9IDEgYW5kICIKKwkJICAuICIoKGNsYXNzaWQ6OmJpZ2ludCA8 PCAzMikgfCBvYmppZDo6YmlnaW50ID0gIgorCQkgIC4gREVBRExPQ0tfMQorCQkgIC4gIjo6Ymln aW50KSBhbmQgIgorCQkgIC4gIm5vdCBncmFudGVkO1xuIjsKKwkJcHJpbnQgIiMgUnVubmluZyBp biBwc3FsOiAiIC4gam9pbigiICIsICRpbl9wc3FsKTsKKwkJJGhfcHNxbC0+cHVtcCgpIHdoaWxl IGxlbmd0aCAkaW5fcHNxbDsKKwl9IHdoaWxlICgkb3V0X3BzcWwgIX4gL0B7WyBERUFETE9DS18x IF19X25vdF96ZXJvLyk7CisKKwkjIEluIHRoZSBwc3FsIHNlc3Npb24sIGFjcXVpcmUgdGhlIGxv Y2tzIHRoYXQgcGdiZW5jaGVzIHdpbGwgd2FpdCBmb3I6CisJJGluX3BzcWwgPQorCQkic2VsZWN0 IHBnX2Fkdmlzb3J5X2xvY2soIiAuIFRSQU5TQUNUSU9OX0VORFNfMSAuICIpICIKKwkgIC4gImFz IHBnX2Fkdmlzb3J5X2xvY2tfIiAuIFRSQU5TQUNUSU9OX0VORFNfMSAuICI7XG4iOworCXByaW50 ICIjIFJ1bm5pbmcgaW4gcHNxbDogIiAuIGpvaW4oIiAiLCAkaW5fcHNxbCk7CisJJGhfcHNxbC0+ cHVtcCgpIHVudGlsICRvdXRfcHNxbCA9fiAvcGdfYWR2aXNvcnlfbG9ja19Ae1sgVFJBTlNBQ1RJ T05fRU5EU18xIF19LzsKKworCSRpbl9wc3FsID0KKwkJInNlbGVjdCBwZ19hZHZpc29yeV9sb2Nr KCIgLiBUUkFOU0FDVElPTl9FTkRTXzIgLiAiKSAiCisJICAuICJhcyBwZ19hZHZpc29yeV9sb2Nr XyIgLiBUUkFOU0FDVElPTl9FTkRTXzIgLiAiO1xuIjsKKwlwcmludCAiIyBSdW5uaW5nIGluIHBz cWw6ICIgLiBqb2luKCIgIiwgJGluX3BzcWwpOworCSRoX3BzcWwtPnB1bXAoKSB1bnRpbCAkb3V0 X3BzcWwgPX4gL3BnX2Fkdmlzb3J5X2xvY2tfQHtbIFRSQU5TQUNUSU9OX0VORFNfMiBdfS87CisK KwkjIEluIHRoZSBwc3FsIHNlc3Npb24sIHJlbGVhc2UgdGhlIGxvY2sgdGhhdCB0aGUgZmlyc3Qg cGdiZW5jaCBpcyB3YWl0aW5nCisJIyBmb3I6CisJJGluX3BzcWwgPQorCQkic2VsZWN0IHBnX2Fk dmlzb3J5X3VubG9jaygiIC4gV0FJVF9QR0JFTkNIXzIgLiAiKSAiCisJICAuICJhcyBwZ19hZHZp c29yeV91bmxvY2tfIiAuIFdBSVRfUEdCRU5DSF8yIC4gIjtcbiI7CisJcHJpbnQgIiMgUnVubmlu ZyBpbiBwc3FsOiAiIC4gam9pbigiICIsICRpbl9wc3FsKTsKKwkkaF9wc3FsLT5wdW1wKCkgdW50 aWwgJG91dF9wc3FsID1+IC9wZ19hZHZpc29yeV91bmxvY2tfQHtbIFdBSVRfUEdCRU5DSF8yIF19 LzsKKworCSMgV2FpdCB1bnRpbCBwZ2JlbmNoZXMgdHJ5IHRvIGFjcXVpcmUgdGhlIGxvY2tzIGhl bGQgYnkgdGhlIHBzcWwgc2Vzc2lvbjoKKwlkbworCXsKKwkJJGluX3BzcWwgPQorCQkJInNlbGVj dCBjYXNlIGNvdW50KCopICIKKwkJICAuICJ3aGVuIDAgdGhlbiAnIiAuIFRSQU5TQUNUSU9OX0VO RFNfMSAuICJfemVybycgIgorCQkgIC4gImVsc2UgJyIgLiBUUkFOU0FDVElPTl9FTkRTXzEgLiAi X25vdF96ZXJvJyBlbmQgIgorCQkgIC4gImZyb20gcGdfbG9ja3Mgd2hlcmUgIgorCQkgIC4gImxv Y2t0eXBlID0gJ2Fkdmlzb3J5JyBhbmQgIgorCQkgIC4gIm9ianN1YmlkID0gMSBhbmQgIgorCQkg IC4gIigoY2xhc3NpZDo6YmlnaW50IDw8IDMyKSB8IG9iamlkOjpiaWdpbnQgPSAiCisJCSAgLiBU UkFOU0FDVElPTl9FTkRTXzEKKwkJICAuICI6OmJpZ2ludCkgYW5kICIKKwkJICAuICJub3QgZ3Jh bnRlZDtcbiI7CisJCXByaW50ICIjIFJ1bm5pbmcgaW4gcHNxbDogIiAuIGpvaW4oIiAiLCAkaW5f cHNxbCk7CisJCSRoX3BzcWwtPnB1bXAoKSB3aGlsZSBsZW5ndGggJGluX3BzcWw7CisJfSB3aGls ZSAoJG91dF9wc3FsICF+IC9Ae1sgVFJBTlNBQ1RJT05fRU5EU18xIF19X25vdF96ZXJvLyk7CisK KwlkbworCXsKKwkJJGluX3BzcWwgPQorCQkJInNlbGVjdCBjYXNlIGNvdW50KCopICIKKwkJICAu ICJ3aGVuIDAgdGhlbiAnIiAuIFRSQU5TQUNUSU9OX0VORFNfMiAuICJfemVybycgIgorCQkgIC4g ImVsc2UgJyIgLiBUUkFOU0FDVElPTl9FTkRTXzIgLiAiX25vdF96ZXJvJyBlbmQgIgorCQkgIC4g ImZyb20gcGdfbG9ja3Mgd2hlcmUgIgorCQkgIC4gImxvY2t0eXBlID0gJ2Fkdmlzb3J5JyBhbmQg IgorCQkgIC4gIm9ianN1YmlkID0gMSBhbmQgIgorCQkgIC4gIigoY2xhc3NpZDo6YmlnaW50IDw8 IDMyKSB8IG9iamlkOjpiaWdpbnQgPSAiCisJCSAgLiBUUkFOU0FDVElPTl9FTkRTXzIKKwkJICAu ICI6OmJpZ2ludCkgYW5kICIKKwkJICAuICJub3QgZ3JhbnRlZDtcbiI7CisJCXByaW50ICIjIFJ1 bm5pbmcgaW4gcHNxbDogIiAuIGpvaW4oIiAiLCAkaW5fcHNxbCk7CisJCSRoX3BzcWwtPnB1bXAo KSB3aGlsZSBsZW5ndGggJGluX3BzcWw7CisJfSB3aGlsZSAoJG91dF9wc3FsICF+IC9Ae1sgVFJB TlNBQ1RJT05fRU5EU18yIF19X25vdF96ZXJvLyk7CisKKwkjIEluIHRoZSBwc3FsIHNlc3Npb24s IHJlbGVhc2UgYWR2aXNvcnkgbG9ja3MgYW5kIGVuZCB0aGUgc2Vzc2lvbjoKKwkkaW5fcHNxbCA9 ICJzZWxlY3QgcGdfYWR2aXNvcnlfdW5sb2NrX2FsbCgpIGFzIHBnX2Fkdmlzb3J5X3VubG9ja19h bGw7XG4iOworCXByaW50ICIjIFJ1bm5pbmcgaW4gcHNxbDogIiAuIGpvaW4oIiAiLCAkaW5fcHNx bCk7CisJJGhfcHNxbC0+cHVtcCgpIHVudGlsICRvdXRfcHNxbCA9fiAvcGdfYWR2aXNvcnlfdW5s b2NrX2FsbC87CisKKwkkaW5fcHNxbCA9ICJcXHFcbiI7CisJcHJpbnQgIiMgUnVubmluZyBpbiBw c3FsOiAiIC4gam9pbigiICIsICRpbl9wc3FsKTsKKwkkaF9wc3FsLT5wdW1wKCkgd2hpbGUgbGVu Z3RoICRpbl9wc3FsOworCisJJGhfcHNxbC0+ZmluaXNoKCk7CisKKwkjIEdldCByZXN1bHRzIGZy b20gYWxsIHBnYmVuY2hlczoKKwkkaDEtPnB1bXAoKSB1bnRpbCBsZW5ndGggJG91dDE7CisJJGgx LT5maW5pc2goKTsKKworCSRoMi0+cHVtcCgpIHVudGlsIGxlbmd0aCAkb3V0MjsKKwkkaDItPmZp bmlzaCgpOworCisJIyBPbiBXaW5kb3dzLCB0aGUgZXhpdCBzdGF0dXMgb2YgdGhlIHByb2Nlc3Mg aXMgcmV0dXJuZWQgZGlyZWN0bHkgYXMgdGhlCisJIyBwcm9jZXNzJ3MgZXhpdCBjb2RlLCB3aGls ZSBvbiBVbml4LCBpdCdzIHJldHVybmVkIGluIHRoZSBoaWdoIGJpdHMKKwkjIG9mIHRoZSBleGl0 IGNvZGUgKHNlZSBXRVhJVFNUQVRVUyBtYWNybyBpbiB0aGUgc3RhbmRhcmQgPHN5cy93YWl0Lmg+ CisJIyBoZWFkZXIgZmlsZSkuIElQQzo6UnVuJ3MgcmVzdWx0IGZ1bmN0aW9uIGFsd2F5cyByZXR1 cm5zIGV4aXQgY29kZSA+PiA4LAorCSMgYXNzdW1pbmcgdGhlIFVuaXggY29udmVudGlvbiwgd2hp Y2ggd2lsbCBhbHdheXMgcmV0dXJuIDAgb24gV2luZG93cyBhcworCSMgbG9uZyBhcyB0aGUgcHJv Y2VzcyB3YXMgbm90IHRlcm1pbmF0ZWQgYnkgYW4gZXhjZXB0aW9uLiBUbyB3b3JrIGFyb3VuZAor CSMgdGhhdCwgdXNlICRoLT5mdWxsX3Jlc3VsdCBvbiBXaW5kb3dzIGluc3RlYWQuCisJbXkgJHJl c3VsdDEgPQorCSAgICAoJENvbmZpZ3tvc25hbWV9IGVxICJNU1dpbjMyIikKKwkgID8gKCRoMS0+ ZnVsbF9yZXN1bHRzKVswXQorCSAgOiAkaDEtPnJlc3VsdCgwKTsKKworCW15ICRyZXN1bHQyID0K KwkgICAgKCRDb25maWd7b3NuYW1lfSBlcSAiTVNXaW4zMiIpCisJICA/ICgkaDItPmZ1bGxfcmVz dWx0cylbMF0KKwkgIDogJGgyLT5yZXN1bHQoMCk7CisKKwkjIENoZWNrIGFsbCBwZ2JlbmNoIHJl c3VsdHMKKwlvayghJHJlc3VsdDEsICJAY29tbWFuZDEgZXhpdCBjb2RlIDAiKTsKKwlvayghJHJl c3VsdDIsICJAY29tbWFuZDIgZXhpdCBjb2RlIDAiKTsKKworCWxpa2UoJG91dDEsCisJCXFye3By b2Nlc3NlZDogMS8xfSwKKwkJImNvbmN1cnJlbnQgZGVhZGxvY2sgdXBkYXRlIHdpdGggcmV0cnlp bmc6IHBnYmVuY2ggMTogIgorCSAgLiAiY2hlY2sgcHJvY2Vzc2VkIHRyYW5zYWN0aW9ucyIpOwor CWxpa2UoJG91dDIsCisJCXFye3Byb2Nlc3NlZDogMS8xfSwKKwkJImNvbmN1cnJlbnQgZGVhZGxv Y2sgdXBkYXRlIHdpdGggcmV0cnlpbmc6IHBnYmVuY2ggMjogIgorCSAgLiAiY2hlY2sgcHJvY2Vz c2VkIHRyYW5zYWN0aW9ucyIpOworCisJIyBUaGUgZmlyc3Qgb3Igc2Vjb25kIHBnYmVuY2ggc2hv dWxkIGdldCBhIGRlYWRsb2NrIGVycm9yIHdoaWNoIHdhcyByZXRyaWVkOgorCWxpa2UoJG91dDEg LiAkb3V0MiwKKwkJcXJ7XigoPyFudW1iZXIgb2YgZXJyb3JzKSgufFxuKSkqJH0sCisJCSJjb25j dXJyZW50IGRlYWRsb2NrIHVwZGF0ZSB3aXRoIHJldHJ5aW5nOiBjaGVjayBlcnJvcnMiKTsKKwor CW9rKCgoJG91dDEgPX4gL251bWJlciBvZiByZXRyaWVkOiAxIFwoMTAwXC4wMDAlXCkvIGFuZAor CQkgJG91dDIgPX4gL14oKD8hbnVtYmVyIG9mIHJldHJpZWQpKC58XG4pKSokLykgb3IKKwkJKCRv dXQyID1+IC9udW1iZXIgb2YgcmV0cmllZDogMSBcKDEwMFwuMDAwJVwpLyBhbmQKKwkJICRvdXQx ID1+IC9eKCg/IW51bWJlciBvZiByZXRyaWVkKSgufFxuKSkqJC8pKSwKKwkJImNvbmN1cnJlbnQg ZGVhZGxvY2sgdXBkYXRlIHdpdGggcmV0cnlpbmc6IGNoZWNrIHJldHJpZXMiKTsKKworCW15ICRw YXR0ZXJuMSA9CisJCSJjbGllbnQgMCBzZW5kaW5nIEJFR0lOO1xuIgorCSAgLiAiKGNsaWVudCAw IHJlY2VpdmluZ1xuKSsiCisJICAuICJjbGllbnQgMCBzZW5kaW5nIFNFTEVDVCBwZ19hZHZpc29y eV9sb2NrXFwoIiAuIERFQURMT0NLXzEgLiAiXFwpO1xuIgorCSAgLiAiXFxnMSsiCisJICAuICJj bGllbnQgMCBzZW5kaW5nIFNFTEVDVCBwZ19hZHZpc29yeV9sb2NrXFwoIiAuIFdBSVRfUEdCRU5D SF8yIC4gIlxcKTtcbiIKKwkgIC4gIlxcZzErIgorCSAgLiAiY2xpZW50IDAgc2VuZGluZyBTRUxF Q1QgcGdfYWR2aXNvcnlfbG9ja1xcKCIgLiBERUFETE9DS18yIC4gIlxcKTtcbiIKKwkgIC4gIlxc ZzErIgorCSAgLiAiY2xpZW50IDAgZ290IGEgZmFpbHVyZSBpbiBjb21tYW5kIDMgXFwoU1FMXFwp IG9mIHNjcmlwdCAwOyAiCisJICAuICJFUlJPUjogIGRlYWRsb2NrIGRldGVjdGVkXG4iCisJICAu ICIoKD8hY2xpZW50IDApKC58XG4pKSoiCisJICAuICJjbGllbnQgMCBzZW5kaW5nIEVORDtcbiIK KwkgIC4gIlxcZzErIgorCSAgLiAiY2xpZW50IDAgc2VuZGluZyBTRUxFQ1QgcGdfYWR2aXNvcnlf dW5sb2NrX2FsbFxcKFxcKTtcbiIKKwkgIC4gIlxcZzErIgorCSAgLiAiY2xpZW50IDAgc2VuZGlu ZyBTRUxFQ1QgcGdfYWR2aXNvcnlfbG9ja1xcKCIgLiBUUkFOU0FDVElPTl9FTkRTXzEgLiAiXFwp O1xuIgorCSAgLiAiXFxnMSsiCisJICAuICJjbGllbnQgMCBzZW5kaW5nIFNFTEVDVCBwZ19hZHZp c29yeV91bmxvY2tfYWxsXFwoXFwpO1xuIgorCSAgLiAiXFxnMSsiCisJICAuICJjbGllbnQgMCBy ZXBlYXRzIHRoZSBmYWlsZWQgdHJhbnNhY3Rpb24gXFwodHJ5IDIvMlxcKVxuIgorCSAgLiAiY2xp ZW50IDAgc2VuZGluZyBCRUdJTjtcbiIKKwkgIC4gIlxcZzErIgorCSAgLiAiY2xpZW50IDAgc2Vu ZGluZyBTRUxFQ1QgcGdfYWR2aXNvcnlfbG9ja1xcKCIgLiBERUFETE9DS18xIC4gIlxcKTtcbiIK KwkgIC4gIlxcZzErIgorCSAgLiAiY2xpZW50IDAgc2VuZGluZyBTRUxFQ1QgcGdfYWR2aXNvcnlf bG9ja1xcKCIgLiBXQUlUX1BHQkVOQ0hfMiAuICJcXCk7XG4iCisJICAuICJcXGcxKyIKKwkgIC4g ImNsaWVudCAwIHNlbmRpbmcgU0VMRUNUIHBnX2Fkdmlzb3J5X2xvY2tcXCgiIC4gREVBRExPQ0tf MiAuICJcXCk7XG4iCisJICAuICJcXGcxKyIKKwkgIC4gImNsaWVudCAwIHNlbmRpbmcgRU5EO1xu IgorCSAgLiAiXFxnMSsiCisJICAuICJjbGllbnQgMCBzZW5kaW5nIFNFTEVDVCBwZ19hZHZpc29y eV91bmxvY2tfYWxsXFwoXFwpO1xuIgorCSAgLiAiXFxnMSsiCisJICAuICJjbGllbnQgMCBzZW5k aW5nIFNFTEVDVCBwZ19hZHZpc29yeV9sb2NrXFwoIiAuIFRSQU5TQUNUSU9OX0VORFNfMSAuICJc XCk7XG4iCisJICAuICJcXGcxKyIKKwkgIC4gImNsaWVudCAwIHNlbmRpbmcgU0VMRUNUIHBnX2Fk dmlzb3J5X3VubG9ja19hbGxcXChcXCk7XG4iCisJICAuICJcXGcxKyI7CisKKwlteSAkcGF0dGVy bjIgPQorCQkiY2xpZW50IDAgc2VuZGluZyBCRUdJTjtcbiIKKwkgIC4gIihjbGllbnQgMCByZWNl aXZpbmdcbikrIgorCSAgLiAiY2xpZW50IDAgc2VuZGluZyBTRUxFQ1QgcGdfYWR2aXNvcnlfbG9j a1xcKCIgLiBERUFETE9DS18yIC4gIlxcKTtcbiIKKwkgIC4gIlxcZzErIgorCSAgLiAiY2xpZW50 IDAgc2VuZGluZyBTRUxFQ1QgcGdfYWR2aXNvcnlfbG9ja1xcKCIgLiBERUFETE9DS18xIC4gIlxc KTtcbiIKKwkgIC4gIlxcZzErIgorCSAgLiAiY2xpZW50IDAgZ290IGEgZmFpbHVyZSBpbiBjb21t YW5kIDIgXFwoU1FMXFwpIG9mIHNjcmlwdCAwOyAiCisJICAuICJFUlJPUjogIGRlYWRsb2NrIGRl dGVjdGVkXG4iCisJICAuICIoKD8hY2xpZW50IDApKC58XG4pKSoiCisJICAuICJjbGllbnQgMCBz ZW5kaW5nIEVORDtcbiIKKwkgIC4gIlxcZzErIgorCSAgLiAiY2xpZW50IDAgc2VuZGluZyBTRUxF Q1QgcGdfYWR2aXNvcnlfdW5sb2NrX2FsbFxcKFxcKTtcbiIKKwkgIC4gIlxcZzErIgorCSAgLiAi Y2xpZW50IDAgc2VuZGluZyBTRUxFQ1QgcGdfYWR2aXNvcnlfbG9ja1xcKCIgLiBUUkFOU0FDVElP Tl9FTkRTXzIgLiAiXFwpO1xuIgorCSAgLiAiXFxnMSsiCisJICAuICJjbGllbnQgMCBzZW5kaW5n IFNFTEVDVCBwZ19hZHZpc29yeV91bmxvY2tfYWxsXFwoXFwpO1xuIgorCSAgLiAiXFxnMSsiCisJ ICAuICJjbGllbnQgMCByZXBlYXRzIHRoZSBmYWlsZWQgdHJhbnNhY3Rpb24gXFwodHJ5IDIvMlxc KVxuIgorCSAgLiAiY2xpZW50IDAgc2VuZGluZyBCRUdJTjtcbiIKKwkgIC4gIlxcZzErIgorCSAg LiAiY2xpZW50IDAgc2VuZGluZyBTRUxFQ1QgcGdfYWR2aXNvcnlfbG9ja1xcKCIgLiBERUFETE9D S18yIC4gIlxcKTtcbiIKKwkgIC4gIlxcZzErIgorCSAgLiAiY2xpZW50IDAgc2VuZGluZyBTRUxF Q1QgcGdfYWR2aXNvcnlfbG9ja1xcKCIgLiBERUFETE9DS18xIC4gIlxcKTtcbiIKKwkgIC4gIlxc ZzErIgorCSAgLiAiY2xpZW50IDAgc2VuZGluZyBFTkQ7XG4iCisJICAuICJcXGcxKyIKKwkgIC4g ImNsaWVudCAwIHNlbmRpbmcgU0VMRUNUIHBnX2Fkdmlzb3J5X3VubG9ja19hbGxcXChcXCk7XG4i CisJICAuICJcXGcxKyIKKwkgIC4gImNsaWVudCAwIHNlbmRpbmcgU0VMRUNUIHBnX2Fkdmlzb3J5 X2xvY2tcXCgiIC4gVFJBTlNBQ1RJT05fRU5EU18yIC4gIlxcKTtcbiIKKwkgIC4gIlxcZzErIgor CSAgLiAiY2xpZW50IDAgc2VuZGluZyBTRUxFQ1QgcGdfYWR2aXNvcnlfdW5sb2NrX2FsbFxcKFxc KTtcbiIKKwkgIC4gIlxcZzErIjsKKworCW9rKCgkZXJyMSA9fiAvJHBhdHRlcm4xLyBvciAkZXJy MiA9fiAvJHBhdHRlcm4yLyksCisJCSJjb25jdXJyZW50IGRlYWRsb2NrIHVwZGF0ZSB3aXRoIHJl dHJ5aW5nOiAiCisJICAuICJjaGVjayB0aGUgcmV0cmllZCB0cmFuc2FjdGlvbiIpOworfQorCit0 ZXN0X3BnYmVuY2hfc2VyaWFsaXphdGlvbl9lcnJvcnMoCisJCQkJCQkJCTEsICAgICAgIyAtLW1h eC10cmllcworCQkJCQkJCQkwLCAgICAgICMgLS1sYXRlbmN5LWxpbWl0ICh3aWxsIG5vdCBiZSB1 c2VkKQorCQkJCQkJCQkiY29uY3VycmVudCB1cGRhdGUiKTsKK3Rlc3RfcGdiZW5jaF9zZXJpYWxp emF0aW9uX2Vycm9ycygKKwkJCQkJCQkJMCwJICAgICMgLS1tYXgtdHJpZXMgKHdpbGwgbm90IGJl IHVzZWQpCisJCQkJCQkJCTkwMCwgICAgIyAtLWxhdGVuY3ktbGltaXQKKwkJCQkJCQkJImNvbmN1 cnJlbnQgdXBkYXRlIHdpdGggbWF4aW11bSB0aW1lIG9mIHRyaWVzIik7CisKK3Rlc3RfcGdiZW5j aF9zZXJpYWxpemF0aW9uX2ZhaWx1cmVzKCk7CisKK3Rlc3RfcGdiZW5jaF9kZWFkbG9ja19lcnJv cnMoKTsKK3Rlc3RfcGdiZW5jaF9kZWFkbG9ja19mYWlsdXJlcygpOworCisjZG9uZQorJG5vZGUt PnN0b3A7Ci0tIAoyLjcuNAoK --=_248aa227bbc4adf7e425934f1ce7af28--