From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 113634 invoked by alias); 17 Mar 2015 21:37:34 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 113620 invoked by uid 89); 17 Mar 2015 21:37:33 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_LOW,SPF_PASS,T_RP_MATCHES_RCVD autolearn=ham version=3.3.2 X-HELO: mail-ie0-f178.google.com Received: from mail-ie0-f178.google.com (HELO mail-ie0-f178.google.com) (209.85.223.178) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Tue, 17 Mar 2015 21:37:27 +0000 Received: by iegc3 with SMTP id c3so23216320ieg.3 for ; Tue, 17 Mar 2015 14:37:24 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc:content-type; bh=VeiZrUhXbXEJ/HibAkxDe6XoK6PAqjQj/PqDkEIddTw=; b=KfEnmJpZ/gNpTA8dU/am5Bp6GGdrgeUI/7R5jyH0vvDFkdf2rsVLejmXJZ21oux89Z 5XkPO5ZaEbREG7ZYlyYoANW+UE2cc9wyh5XO1q2qzqb/TepxwqW68JJEw0/YczYCUu90 ix+InXCWA7EYoErvTW33Eg8OOcZfzGamFiR9sVIf8JDltFl4q9TLo/O70x+YxC7MDY4N ChjREm4IFJ8Bu71Zy6OVhU7kREjguH+9xfIPu2emRuFXDVZ6UNYKKAvFOGHn0nteBrbF xD6rfDbt0TFhSvIIAC5BCN2SAqSevZgJF27HmlQNF6s1ZFqhAhFP0EMRWD3GiSvpRKxE aVtA== X-Gm-Message-State: ALoCoQkjDWwKODPgHmlF7nq6xmii/p5RUlqpHjBdbLZTsXJlzeYJZTKzoD2o4WFfmkvJXz9CO04P MIME-Version: 1.0 X-Received: by 10.50.143.42 with SMTP id sb10mr1426191igb.49.1426628244493; Tue, 17 Mar 2015 14:37:24 -0700 (PDT) Received: by 10.64.98.103 with HTTP; Tue, 17 Mar 2015 14:37:24 -0700 (PDT) In-Reply-To: References: <21714.40641.510825.30998@ruffy2.mtv.corp.google.com> <54E71694.1080304@redhat.com> <87ioei31uj.fsf@igalia.com> <87d24p19tt.fsf@igalia.com> <54FD7DAA.7010603@redhat.com> <87twxrncld.fsf@igalia.com> <87ioe1dvu2.fsf@igalia.com> <87sid4atms.fsf@igalia.com> Date: Tue, 17 Mar 2015 21:37:00 -0000 Message-ID: Subject: Re: [RFC] [PATCH] Provide the ability to write the frame unwinder in Python From: Alexander Smundak To: Andy Wingo Cc: Doug Evans , gdb-patches Content-Type: multipart/mixed; boundary=001a1134b3cebe008a051182c58d X-SW-Source: 2015-03/txt/msg00527.txt.bz2 --001a1134b3cebe008a051182c58d Content-Type: text/plain; charset=UTF-8 Content-length: 2784 Here is the updated revision of the patch, synced with upstream and with new API (the input to a sniffer is still named SnifferInfo, and the output is named UnwindInfo). gdb/ChangeLog: 2015-02-30 Sasha Smundak * Makefile.in (SUBDIR_PYTHON_OBJS): Add py-unwind.o. (SUBDIR_PYTHON_SRCS): Add py-unwind.c. (py-unwind.o): New recipe. * NEWS: mention Python frame unwinding. * data-directory/Makefile.in (PYTHON_FILE_LIST): Add sniffers.py. * doc/python.texi (Writing a Frame Unwinder in Python): Add section. * python/lib/gdb/__init__.py (packages): Add frame_sniffers list. * python/lib/gdb/command/sniffers.py: New file, implements GDB commands to list/enable/disable Python sniffers. * python/lib/gdb/function/sniffers.py: New file, implements execute_sniffers function. * python/lib/gdb/sniffer.py: New file, contains Sniffer class and register_sniffer function. * python/py-objfile.c (objfile_object): Add frame_sniffers field. (objfpy_dealloc): Decrement frame_sniffers reference count. (objfpy_initialize): Create frame_sniffers list. (objfpy_get_frame_sniffers): Implement Objfile.frame_sniffers getter. (objfpy_set_frame_sniffers): Implement Objfile.frame_sniffers setter. (objfile_getset): Add frame_sniffers attribute to Objfile. * python/py-progspace.c (pspace_object): Add frame_sniffers field. (pspy_dealloc): Decrement frame_sniffers reference count. (pspy_initialize): Create frame_sniffers list. (pspy_get_frame_sniffers): Implement gdb.Progspace.frame_sniffers getter. (pspy_set_frame_sniffers): Implement gdb.Progspace.frame_sniffers setter. (pspy_getset): Add frame_sniffers attribute to gdb.Progspace. * python/py-unwind.c: New file, implements Python frame sniffers interface. * python/python-internal.h (pspy_get_name_sniffers): New prototype. (objpy_get_frame_sniffers): New prototype. (gdbpy_initialize_unwind): New prototype. * python/python.c (gdbpy_apply_type_printers): Call gdbpy_initialize_unwind. gdb/testsuite/ChangeLog: 2014-02-30 Sasha Smundak * gdb.python/py-unwind-maint.c: Test program for py-unwind-maint. * gdb.python/py-unwind-maint.exp: Tests sniffer-related GDB commands. * gdb.python/py-unwind-maint.py: Pythons sniffers for the test. * gdb.python/py-unwind.c: Test program for the py-unwind test. * gdb.python/py-unwind.exp: Python frame sniffers test. * gdb.python/py-unwind.py: Frame sniffer in Python tested by py-unwind test. --001a1134b3cebe008a051182c58d Content-Type: text/plain; charset=US-ASCII; name="patch7.diff" Content-Disposition: attachment; filename="patch7.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_i7dtm9jf0 Content-length: 94054 ZGlmZiAtLWdpdCBhL2dkYi9NYWtlZmlsZS5pbiBiL2dkYi9NYWtlZmlsZS5p bgppbmRleCBkYmFjZTJkLi4wYmQzNzM4IDEwMDY0NAotLS0gYS9nZGIvTWFr ZWZpbGUuaW4KKysrIGIvZ2RiL01ha2VmaWxlLmluCkBAIC0zOTgsNiArMzk4 LDcgQEAgU1VCRElSX1BZVEhPTl9PQlMgPSBcCiAJcHktc3ltdGFiLm8gXAog CXB5LXRocmVhZGV2ZW50Lm8gXAogCXB5LXR5cGUubyBcCisJcHktdW53aW5k Lm8gXAogCXB5LXV0aWxzLm8gXAogCXB5LXZhbHVlLm8gXAogCXB5LXZhcm9i ai5vCkBAIC00MzcsNiArNDM4LDcgQEAgU1VCRElSX1BZVEhPTl9TUkNTID0g XAogCXB5dGhvbi9weS1zeW10YWIuYyBcCiAJcHl0aG9uL3B5LXRocmVhZGV2 ZW50LmMgXAogCXB5dGhvbi9weS10eXBlLmMgXAorCXB5dGhvbi9weS11bndp bmQuYyBcCiAJcHl0aG9uL3B5LXV0aWxzLmMgXAogCXB5dGhvbi9weS12YWx1 ZS5jIFwKIAlweXRob24vcHktdmFyb2JqLmMKQEAgLTI2MjIsNiArMjYyNCwx MCBAQCBweS10eXBlLm86ICQoc3JjZGlyKS9weXRob24vcHktdHlwZS5jCiAJ JChDT01QSUxFKSAkKFBZVEhPTl9DRkxBR1MpICQoc3JjZGlyKS9weXRob24v cHktdHlwZS5jCiAJJChQT1NUQ09NUElMRSkKIAorcHktdW53aW5kLm86ICQo c3JjZGlyKS9weXRob24vcHktdW53aW5kLmMKKwkkKENPTVBJTEUpICQoUFlU SE9OX0NGTEFHUykgJChzcmNkaXIpL3B5dGhvbi9weS11bndpbmQuYworCSQo UE9TVENPTVBJTEUpCisKIHB5LXV0aWxzLm86ICQoc3JjZGlyKS9weXRob24v cHktdXRpbHMuYwogCSQoQ09NUElMRSkgJChQWVRIT05fQ0ZMQUdTKSAkKHNy Y2RpcikvcHl0aG9uL3B5LXV0aWxzLmMKIAkkKFBPU1RDT01QSUxFKQpkaWZm IC0tZ2l0IGEvZ2RiL05FV1MgYi9nZGIvTkVXUwppbmRleCBiZGE0YTM1Li5h Yzk5NGQ5IDEwMDY0NAotLS0gYS9nZGIvTkVXUworKysgYi9nZGIvTkVXUwpA QCAtMTIsNiArMTIsNyBAQAogICAqKiBnZGIuT2JqZmlsZSBvYmplY3RzIGhh dmUgYSBuZXcgYXR0cmlidXRlICJ1c2VybmFtZSIsCiAgICAgIHdoaWNoIGlz IHRoZSBuYW1lIG9mIHRoZSBvYmpmaWxlIGFzIHNwZWNpZmllZCBieSB0aGUg dXNlciwKICAgICAgd2l0aG91dCwgZm9yIGV4YW1wbGUsIHJlc29sdmluZyBz eW1saW5rcy4KKyAgKiogWW91IGNhbiBub3cgd3JpdGUgZnJhbWUgdW53aW5k ZXJzIGluIFB5dGhvbi4KIAogKiBOZXcgY29tbWFuZHMKIApkaWZmIC0tZ2l0 IGEvZ2RiL2RhdGEtZGlyZWN0b3J5L01ha2VmaWxlLmluIGIvZ2RiL2RhdGEt ZGlyZWN0b3J5L01ha2VmaWxlLmluCmluZGV4IGMwMWI4NmQuLjQ3YjQ5NTcg MTAwNjQ0Ci0tLSBhL2dkYi9kYXRhLWRpcmVjdG9yeS9NYWtlZmlsZS5pbgor KysgYi9nZGIvZGF0YS1kaXJlY3RvcnkvTWFrZWZpbGUuaW4KQEAgLTYyLDE3 ICs2MiwyMCBAQCBQWVRIT05fRklMRV9MSVNUID0gXAogCWdkYi9GcmFtZURl Y29yYXRvci5weSBcCiAJZ2RiL3R5cGVzLnB5IFwKIAlnZGIvcHJpbnRpbmcu cHkgXAorCWdkYi9zbmlmZmVyLnB5IFwKIAlnZGIvcHJvbXB0LnB5IFwKIAln ZGIveG1ldGhvZC5weSBcCiAJZ2RiL2NvbW1hbmQvX19pbml0X18ucHkgXAog CWdkYi9jb21tYW5kL3htZXRob2RzLnB5IFwKIAlnZGIvY29tbWFuZC9mcmFt ZV9maWx0ZXJzLnB5IFwKKwlnZGIvY29tbWFuZC9zbmlmZmVycy5weSBcCiAJ Z2RiL2NvbW1hbmQvdHlwZV9wcmludGVycy5weSBcCiAJZ2RiL2NvbW1hbmQv cHJldHR5X3ByaW50ZXJzLnB5IFwKIAlnZGIvY29tbWFuZC9wcm9tcHQucHkg XAogCWdkYi9jb21tYW5kL2V4cGxvcmUucHkgXAogCWdkYi9mdW5jdGlvbi9f X2luaXRfXy5weSBcCiAJZ2RiL2Z1bmN0aW9uL2NhbGxlcl9pcy5weSBcCisg ICAgICAgIGdkYi9mdW5jdGlvbi9zbmlmZmVycy5weSBcCiAJZ2RiL2Z1bmN0 aW9uL3N0cmZucy5weSBcCiAJZ2RiL3ByaW50ZXIvX19pbml0X18ucHkgXAog CWdkYi9wcmludGVyL2JvdW5kX3JlZ2lzdGVycy5weQpkaWZmIC0tZ2l0IGEv Z2RiL2RvYy9weXRob24udGV4aSBiL2dkYi9kb2MvcHl0aG9uLnRleGkKaW5k ZXggZDcyNWViMC4uNmNmMzZjOSAxMDA2NDQKLS0tIGEvZ2RiL2RvYy9weXRo b24udGV4aQorKysgYi9nZGIvZG9jL3B5dGhvbi50ZXhpCkBAIC0xNDQsNiAr MTQ0LDcgQEAgb3B0aW9uYWwgYXJndW1lbnRzIHdoaWxlIHNraXBwaW5nIG90 aGVycy4gIEV4YW1wbGU6CiAqIEZyYW1lIEZpbHRlciBBUEk6OiAgICAgICAg ICAgIEZpbHRlcmluZyBGcmFtZXMuCiAqIEZyYW1lIERlY29yYXRvciBBUEk6 OiAgICAgICAgIERlY29yYXRpbmcgRnJhbWVzLgogKiBXcml0aW5nIGEgRnJh bWUgRmlsdGVyOjogICAgICBXcml0aW5nIGEgRnJhbWUgRmlsdGVyLgorKiBV bndpbmRpbmcgRnJhbWVzIGluIFB5dGhvbjo6ICBXcml0aW5nIGEgZnJhbWUg dW53aW5kZXIgaW4gUHl0aG9uLgogKiBYbWV0aG9kcyBJbiBQeXRob246OiAg ICAgICAgICBBZGRpbmcgYW5kIHJlcGxhY2luZyBtZXRob2RzIG9mIEMrKyBj bGFzc2VzLgogKiBYbWV0aG9kIEFQSTo6ICAgICAgICAgICAgICAgICBYbWV0 aG9kIHR5cGVzLgogKiBXcml0aW5nIGFuIFhtZXRob2Q6OiAgICAgICAgICBX cml0aW5nIGFuIHhtZXRob2QuCkBAIC0yMTc4LDYgKzIxNzksMTI1IEBAIHBy aW50ZWQgaGllcmFyY2hpY2FsbHkuICBBbm90aGVyIGFwcHJvYWNoIHdvdWxk IGJlIHRvIGNvbWJpbmUgdGhlCiBtYXJrZXIgaW4gdGhlIGlubGluZWQgZnJh bWUsIGFuZCBhbHNvIHNob3cgdGhlIGhpZXJhcmNoaWNhbAogcmVsYXRpb25z aGlwLgogCitAbm9kZSBVbndpbmRpbmcgRnJhbWVzIGluIFB5dGhvbgorQHN1 YnN1YnNlY3Rpb24gVW53aW5kaW5nIEZyYW1lcyBpbiBQeXRob24KK0BjaW5k ZXggVW53aW5kaW5nIGZyYW1lcyBpbiBQeXRob24uCisKK0luIEdEQiB0ZXJt aW5vbG9neSBgYHVud2luZGluZycnIGlzIHRoZSBwcm9jZXNzIG9mIGZpbmRp bmcgdGhlCitwcmV2aW91cyBmcmFtZSAodGhhdCBpcywgY2FsbGVyJ3MpIGZy b20gdGhlIGN1cnJlbnQgb25lLiBBIHJ1bm5pbmcgR0RCCittYW50YWlucyBh IGxpc3Qgb2YgdGhlIHVud2luZGVycyBhbmQgY2FsbHMgZWFjaCB1bndpbmRl cidzIHNuaWZmZXIgaW4KK3R1cm4gdW50aWwgaXQgZmluZHMgdGhlIG9uZSB0 aGF0IHJlY29nbml6ZXMgdGhlIGN1cnJlbnQgZnJhbWUuIFRoZXJlCitpcyBh biBBUEkgdG8gcmVnaXN0ZXIgYW4gdW53aW5kZXIuCisKK1RoZSB1bndpbmRl cnMgdGhhdCBjb21lIHdpdGggR0RCIGhhbmRsZSBzdGFuZGFyZCBmcmFtZXMg Zm9yIGVhY2gKK3BsYXRmb3JtIHdoZXJlIEdEQiBpcyBydW5uaW5nLiBIb3dl dmVyLCBtaXhlZCBsYW5ndWFnZSBhcHBsaWNhdGlvbnMKKyhmb3IgZXhhbXBs ZSwgYW5kIGFwcGxpY2F0aW9uIHJ1bm5pbmcgSmF2YSBWaXJ0dWFsIE1hY2hp bmUpIHNvbWV0aW1lcwordXNlIGZyYW1lIGxheW91dHMgdGhhdCBjYW5ub3Qg YmUgaGFuZGxlZCBieSB0aGUgR0RCIHVud2luZGVycy4gWW91IGNhbgord3Jp dGUgUHl0aG9uIGNvZGUgdGhhdCBjYW4gaGFuZGxlIHN1Y2ggY3VzdG9tIGZy YW1lcy4KKworWW91IGltcGxlbWVudCBhIHNuaWZmZXIgYXMgYSBjbGFzcyB3 aXRoIHdoaWNoIGhhcyB0d28gYXR0cmlidXRlcywKK0Bjb2Rle25hbWV9IGFu ZCBAY29kZXtlbmFibGVkfSwgd2l0aCBvYnZpb3VzIG1lYW5pbmdzLCBhbmQg YSBzaW5nbGUKK21ldGhvZCBAY29kZXtfX2NhbGxfX30sIHdoaWNoIGV4YW1p bmVzIGEgZ2l2ZW4gZnJhbWUgYW5kIHJldHVybnMgYW4KK29iamVjdCAoYW4g aW5zdGFuY2Ugb2YgZ2RiLlVud2luZEluZm8gY2xhc3MpIGRlc2NyaWJpbmcg aXQuIElmIGEKK3NuaWZmZXIgZG9lcyBub3QgcmVjb2duaXplIGEgZnJhbWUs IGl0IHNob3VsZCByZXR1cm4gQGNvZGV7Tm9uZX0uCisKK0BzdWJoZWFkaW5n IFNuaWZmZXIgSW5wdXQKKworQW4gb2JqZWN0IHBhc3NlZCB0byBhIHNuaWZm ZXIgKGEgQGNvZGV7U25pZmZlckluZm99IGluc3RhbmNlIHByb3ZpZGVzCith IG1ldGhvZCB0byByZWFkIGZyYW1lJ3MgcmVnaXN0ZXJzOgorCitAZGVmdW4g U25pZmZlckluZm8ucmVhZF9yZWdpc3RlciAocmVnKQorVGhpcyBtZXRob2Qg cmV0dXJucyB0aGUgY29udGVudHMgb2YgdGhlIHJlZ2lzdGVyIEB2YXJ7cmVn bn0gaW4gdGhlCitmcmFtZSBhcyBhIEBjb2Rle2dkYi5WYWx1ZX0gb2JqZWN0 LiBAdmFye3JlZ30gY2FuIGJlIGVpdGhlciBhIHJlZ2lzdGVyCitudW1iZXIg b3IgYSByZWdpc3RlciBuYW1lOyB2YWx1ZXMgYXJlIHBsYXRmb3JtLXNwZWNp ZmljLiBUaGV5IGFyZQordXN1YWxseSBmb3VuZCBpbiB0aGUgY29ycmVzcG9u ZGluZyB4eHgtQGNvZGV7dGRlcC5ofSBmaWxlIGluIHRoZSBnZGIKK3NvdXJj ZSB0cmVlLgorQGVuZCBkZWZ1bgorCitJdCBhbHNvIHByb3ZpZGVzIHNldmVy YWwgZmFjdG9yeSBtZXRob2RzLiBJZiBhIHNuaWZmZXIgcmVjb2duaXplcyB0 aGUKK2ZyYW1lLCBpdCBzaG91bGQgaW52b2tlIG9uZSBvZiB0aGVtIHRvIGNy ZWF0ZSBhIGdkYi5VbndpbmRJbmZvCitpbnN0YW5jZSB0byBiZSByZXR1cm5l ZCB0byBHREI6CisKK0BkZWZ1biBTbmlmZmVySW5mby51bndpbmRfaW5mb193 aXRoX2lkKHNwLCBwYykKK1JldHVybnMgYSBuZXcgQGNvZGV7Z2RiLlVud2lu ZEluZm99IGluc3RhbmNlIGlkZW50aWZpZWQgYnkgZ2l2ZW4KK0B2YXJ7c3B9 IGFuZCBAdmFye3BjfSB2YWx1ZXMuIFRoaXMgaXMgdGhlIG1vc3QgY29tbW9u IHdheSBvZiBjcmVhdGluZworaW5zdGFuY2UgcmVzdWx0LgorQGVuZCBkZWZ1 bgorCitAZGVmdW4gU25pZmZlckluZm8uZnJhbWVfaWRfYnVpbGRfc3BlY2lh bChzcCwgcGMsIHNwZWNpYWwpCitSZXR1cm5zIGEgbmV3IEBjb2Rle2dkYi5V bndpbmRJbmZvfSBpbnN0YW5jZSBpZGVudGl0aWZpZWQgYnkgZ2l2ZW4KK0B2 YXJ7c3B9LCBAdmFye3BjfSwgYW5kIEB2YXJ7c3BlY2lhbH0gdmFsdWVzLgor QGVuZCBkZWZ1bgorCitAZGVmdW4gZ2RiLlVud2luZEluZm8uZnJhbWVfaWRf YnVpbGRfd2lsZChzcCkKK1JldHVybnMgYSBuZXcgQGNvZGV7Z2RiLlVud2lu ZEluZm99IGluc3RhbmNlIGlkZW50aWZpZWQgYnkgZ2l2ZW4KK0B2YXJ7c3B9 IHZhbHVlLgorQGVuZCBkZWZ1bgorCitAc3ViaGVhZGluZyBTbmlmZmVyIE91 dHB1dDogVW53aW5kSW5mbworCitBIEBjb2Rle2dkYi5VbndpbmRJbmZvfSBv YmplY3QgY2FuIGJlIGNvbnN0cnVjdGVkIGJ5IG9uZSBvZiB0aGUKK21ldGhv ZHMgZGVzY3JpYmVkIGFib3ZlLiBVc2UgdGhlIGZvbGxvd2luZyBtZXRob2Qg dG8gc2V0IHRoZSBjYWxsZXIKK2ZyYW1lJ3MgcmVnaXN0ZXJzOgorCitAZGVm dW4gZ2RiLlVud2luZEluZm8uc2V0X3ByZXZpb3VzX2ZyYW1lX3JlZ2lzdGVy KHJlZywgdmFsdWUpCitAdmFye3JlZ30gaWRlbnRpZmllcyB0aGUgcmVnaXN0 ZXIuIEl0IGNhbiBiZSBhIG51bWJlciBvciBhIG5hbWUsIGp1c3QKK2FzIGZv ciB0aGUgQGNvZGV7U25pZmZlckluZm8ucmVhZF9yZWdpc3Rlcn0gbWV0aG9k IGFib3ZlLiBAdmFye3ZhbHVlfQoraXMgYSByZWdpc3RlciB2YWx1ZSAoYSBA Y29kZXtnZGIuVmFsdWV9IG9iamVjdCkuCisKK0BzdWJoZWFkaW5nIFNuaWZm ZXIgU2tlbGV0b24gQ29kZQorCitHREIgY29tZXMgd2l0aCB0aGUgbW9kdWxl IGNvbnRhaW5pbmcgdGhlIGJhc2UgQGNvZGV7U25pZmZlcn0gY2xhc3MuCitE ZXJpdmUgeW91ciBzbmlmZmVyIGNsYXNzIGZyb20gaXQgYW5kIHN0cnVjdHVy ZSB0aGUgY29kZSBhcyBmb2xsb3dzOgorCitAc21hbGxleGFtcGxlCitmcm9t IGdkYi5zbmlmZmVycyBpbXBvcnQgU25pZmZlcgorCitjbGFzcyBNeVNuaWZm ZXIoU25pZmZlcik6CisgICAgZGVmIF9faW5pdF9fKC4uLi4pOgorICAgICAg ICBzdXBlcihNeVNuaWZmZXIsIHNlbGYpLl9faW5pdF9fXyg8ZXhwZWN0cyBz bmlmZmVyIG5hbWUgYXJndW1lbnQ+KQorICAgIGRlZiBfX2NhbGxfXyhzbmlm ZmVyX2luZm8pOgorICAgICAgICBpZiBub3QgPHdlIHJlY29nbml6ZSBmcmFt ZT46CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAjIENyZWF0 ZSBzbmlmZmVyIHJlc3VsdC4gVGhlIG1vc3QgY29tbW9uIHdheSB0byBhY2hp ZXZlIHRoaXMgaXMKKyAgICAgICAgIyB0byBmaW5kIFNQIChzdGFjayBwb2lu dGVyKSBhbmQgUEMgKHByb2dyYW0gY291bnRlcikgdmFsdWVzCisgICAgICAg ICMgaW4gdGhlIGN1cnJlbnQgZnJhbWUgYW5kIHRoZW4gY2FsbCB1bndpbmRf aW5mb193aXRoX2lkIG1ldGhvZDoKKyAgICAgICAgdW53aW5kX2luZm8gPSBz bmlmZmVyX2luZm8udW53aW5kX2luZm9fd2l0aF9pZChzcCwgcGMpCisKKyAg ICAgICAgIyBGaW5kIHRoZSB2YWx1ZXMgb2YgdGhlIHJlZ2lzdGVycyBpbiB0 aGUgY2FsbGVyJ3MgZnJhbWUgYW5kIAorICAgICAgICAjIHNhdmUgdGhlbSBp biB0aGUgcmVzdWx0OgorICAgICAgICB1bndpbmRfaW5mby5zZXRfcHJldmlv dXNfZnJhbWVfcmVnaXN0ZXIoPHJlZ2lzdGVyPiwgPHZhbHVlPikKKworICAg ICAgICAjIFJldHVybiB0aGUgcmVzdWx0OgorICAgICAgICByZXR1cm4gdW53 aW5kX2luc3RhbmNlCisKK0BlbmQgc21hbGxleGFtcGxlCisKK0BzdWJoZWFk aW5nIFJlZ2lzdGVyaW5nIGEgU25pZmZlcgorCitBbiBvYmplY3QgZmlsZSwg YSBwcm9ncmFtIHNwYWNlLCBhbmQgdGhlIEB2YWx1ZXtHREJOfSBwcm9wZXIg Y2FuIGhhdmUKK3NuaWZmZXJzIHJlZ2lzdGVyZWQgd2l0aCBpdC4KKworVGhl IEBjb2Rle2dkYi5zbmlmZmVyc30gbW9kdWxlIHByb3ZpZGVzIHRoZSBmdW5j dGlvbiB0byByZWdpc3RlciBhCitzbmlmZmVyOgorCitAZGVmdW4gZ2RiLnNu aWZmZXIucmVnaXN0ZXJfc25pZmZlciAobG9jdXMsIHNuaWZmZXIsIHJlcGxh Y2U9RmFsc2UpCitAdmFye2xvY3VzfSBpcyBzcGVjaWZpZXMgYW4gb2JqZWN0 IGZpbGUgb3IgYSBwcm9ncmFtIHNwYWNlIHRvIHdoaWNoCitAdmFye3NuaWZm ZXJ9IGlzIGFkZGVkLiBQYXNzaW5nIEBjb2Rle05vbmV9IG9yIEBjb2Rle2dk Yn0gYWRkcworQHZhcntzbmlmZmVyfSB0byB0aGUgQHZhbHVle0dEQk59J3Mg Z2xvYmFsIHNuaWZmZXIgbGlzdC4gIFRoZSBuZXdseQorYWRkZWQgQHZhcntz bmlmZmVyfSB3aWxsIGJlIGNhbGxlZCBiZWZvcmUgYW55IG90aGVyIHNuaWZm ZXIgZnJvbSB0aGUKK3NhbWUgbG9jdXMuICBUd28gc25pZmZlcnMgaW4gdGhl IHNhbWUgbG9jdXMgY2Fubm90IGhhdmUgdGhlIHNhbWUKK25hbWUuIEFuIGF0 dGVtcHQgdG8gYWRkIGEgc25pZmZlciB3aXRoIGFscmVhZHkgZXhpc3Rpbmcg bmFtZSByYWlzZXMgYW4KK2V4Y2VwdGlvbiB1bmxlc3MgQHZhcntyZXBsYWNl fSBpcyBAY29kZXtUcnVlfSwgaW4gd2hpY2ggY2FzZSB0aGUgb2xkCitzbmlm ZmVyIGlzIGRlbGV0ZWQuCitAZW5kIGRlZnVuCisKK0BzdWJoZWFkaW5nIFNu aWZmZXIgUHJlY2VkZW5jZQorCitAdmFsdWV7R0RCTn0gZmlyc3QgY2FsbHMg dGhlIHNuaWZmZXJzIGZyb20gYWxsIHRoZSBvYmplY3QgZmlsZXMgaW4gbm8K K3BhcnRpY3VsYXIgb3JkZXIsIHRoZW4gdGhlIHNuaWZmZXJzIGZyb20gdGhl IGN1cnJlbnQgcHJvZ3JhbSBzcGFjZSwKK2FuZCBmaW5hbGx5IHRoZSBzbmlm ZmVycyBmcm9tIEB2YWx1ZXtHREJOfS4KKwogQG5vZGUgWG1ldGhvZHMgSW4g UHl0aG9uCiBAc3Vic3Vic2VjdGlvbiBYbWV0aG9kcyBJbiBQeXRob24KIEBj aW5kZXggeG1ldGhvZHMgaW4gUHl0aG9uCmRpZmYgLS1naXQgYS9nZGIvcHl0 aG9uL2xpYi9nZGIvX19pbml0X18ucHkgYi9nZGIvcHl0aG9uL2xpYi9nZGIv X19pbml0X18ucHkKaW5kZXggOTJiMDZmMi4uOGQ3ZjY1MSAxMDA2NDQKLS0t IGEvZ2RiL3B5dGhvbi9saWIvZ2RiL19faW5pdF9fLnB5CisrKyBiL2dkYi9w eXRob24vbGliL2dkYi9fX2luaXRfXy5weQpAQCAtNzEsNiArNzEsOCBAQCB0 eXBlX3ByaW50ZXJzID0gW10KIHhtZXRob2RzID0gW10KICMgSW5pdGlhbCBm cmFtZSBmaWx0ZXJzLgogZnJhbWVfZmlsdGVycyA9IHt9CisjIEluaXRpYWwg ZnJhbWUgc25pZmZlcnMuCitmcmFtZV9zbmlmZmVycyA9IFtdCiAKICMgQ29u dmVuaWVuY2UgdmFyaWFibGUgdG8gR0RCJ3MgcHl0aG9uIGRpcmVjdG9yeQog UFlUSE9ORElSID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShf X2ZpbGVfXykpCmRpZmYgLS1naXQgYS9nZGIvcHl0aG9uL2xpYi9nZGIvY29t bWFuZC9zbmlmZmVycy5weSBiL2dkYi9weXRob24vbGliL2dkYi9jb21tYW5k L3NuaWZmZXJzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLmFkN2Y2OTMKLS0tIC9kZXYvbnVsbAorKysgYi9nZGIvcHl0aG9uL2xp Yi9nZGIvY29tbWFuZC9zbmlmZmVycy5weQpAQCAtMCwwICsxLDE5OCBAQAor IyBTbmlmZmVyIGNvbW1hbmRzLgorIyBDb3B5cmlnaHQgMjAxNSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRo ZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2 ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhP VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hv dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElm IG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKwor aW1wb3J0IGdkYgoraW1wb3J0IHJlCisKKworZGVmIHZhbGlkYXRlX3JlZ2V4 cChleHAsIGlkc3RyaW5nKToKKyAgICB0cnk6CisgICAgICAgIHJldHVybiBy ZS5jb21waWxlKGV4cCkKKyAgICBleGNlcHQgU3ludGF4RXJyb3I6CisgICAg ICAgIHJhaXNlIFN5bnRheEVycm9yKCJJbnZhbGlkICVzIHJlZ2V4cDogJXMu IiAlIChpZHN0cmluZywgZXhwKSkKKworCitkZWYgcGFyc2Vfc25pZmZlcl9j b21tYW5kX2FyZ3MoYXJnKToKKyAgICAiIiJJbnRlcm5hbCB1dGlsaXR5IHRv IHBhcnNlIHNuaWZmZXIgY29tbWFuZCBhcmd2LgorCisgICAgQXJndW1lbnRz OgorICAgICAgICBhcmc6IFRoZSBhcmd1bWVudHMgdG8gdGhlIGNvbW1hbmQu IFRoZSBmb3JtYXQgaXM6CisgICAgICAgICAgICAgW2xvY3VzLXJlZ2V4cCBb bmFtZS1yZWdleHBdXQorCisgICAgUmV0dXJuczoKKyAgICAgICAgQSAyLXR1 cGxlIG9mIGNvbXBpbGVkIHJlZ3VsYXIgZXhwcmVzc2lvbnMuCisKKyAgICBS YWlzZXM6CisgICAgICAgIFN5bnRheEVycm9yOiBhbiBlcnJvciBwcm9jZXNz aW5nIEFSRworICAgICIiIgorCisgICAgYXJndiA9IGdkYi5zdHJpbmdfdG9f YXJndihhcmcpCisgICAgYXJnYyA9IGxlbihhcmd2KQorICAgIGlmIGFyZ2Mg PiAyOgorICAgICAgICByYWlzZSBTeW50YXhFcnJvcigiVG9vIG1hbnkgYXJn dW1lbnRzLiIpCisgICAgbG9jdXNfcmVnZXhwID0gIiIKKyAgICBuYW1lX3Jl Z2V4cCA9ICIiCisgICAgaWYgYXJnYyA+PSAxOgorICAgICAgICBsb2N1c19y ZWdleHAgPSBhcmd2WzBdCisgICAgICAgIGlmIGFyZ2MgPj0gMjoKKyAgICAg ICAgICAgIG5hbWVfcmVnZXhwID0gYXJndlsxXQorICAgIHJldHVybiAodmFs aWRhdGVfcmVnZXhwKGxvY3VzX3JlZ2V4cCwgImxvY3VzIiksCisgICAgICAg ICAgICB2YWxpZGF0ZV9yZWdleHAobmFtZV9yZWdleHAsICJzbmlmZmVyIikp CisKKworY2xhc3MgSW5mb1NuaWZmZXIoZ2RiLkNvbW1hbmQpOgorICAgICIi IkdEQiBjb21tYW5kIHRvIGxpc3Qgc25pZmZlcnMuCisKKyAgICBVc2FnZTog aW5mbyBzbmlmZmVyIFtsb2N1cy1yZWdleHAgW25hbWUtcmVnZXhwXV0KKwor ICAgIExPQ1VTLVJFR0VYUCBpcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRj aGluZyB0aGUgbG9jYXRpb24gb2YgdGhlCisgICAgc25pZmZlci4gIElmIGl0 IGlzIG9taXR0ZWQsIGFsbCByZWdpc3RlcmVkIHNuaWZmZXJzIGZyb20gYWxs IGxvY2kKKyAgICBhcmUgbGlzdGVkLiAgQSBsb2N1cyBjb3VsZCBiZSAnZ2xv YmFsJywgYSByZWd1bGFyIGV4cHJlc3Npb24KKyAgICBtYXRjaGluZyB0aGUg Y3VycmVudCBwcm9ncmFtIHNwYWNlJ3MgZmlsZW5hbWUsIG9yIGEgcmVndWxh cgorICAgIGV4cHJlc3Npb24gbWF0Y2hpbmcgZmlsZW5hbWVzIG9mIG9iamZp bGVzLiAgTG9jdXMgY291bGQgYmUKKyAgICAncHJvZ3NwYWNlJyB0byBzcGVj aWZ5IHRoYXQgb25seSBzbmlmZmVycyBmcm9tIHRoZSBjdXJyZW50CisgICAg cHJvZ3NwYWNlIHNob3VsZCBiZSBsaXN0ZWQuCisKKyAgICBOQU1FLVJFR0VY UCBpcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBmaWx0ZXIgc25pZmZlciBu YW1lcy4KKyAgICBJZiB0aGlzIG9taXR0ZWQgZm9yIGEgc3BlY2lmaWVkIGxv Y3VzLCB0aGVuIGFsbCByZWdpc3RlcmVkCisgICAgc25pZmZlcnMgaW4gdGhl IGxvY3VzIGFyZSBsaXN0ZWQuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0 X18oc2VsZik6CisgICAgICAgIHN1cGVyKEluZm9TbmlmZmVyLCBzZWxmKS5f X2luaXRfXygiaW5mbyBzbmlmZmVyIiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGdkYi5DT01NQU5EX0RBVEEpCisKKyAg ICBkZWYgbGlzdF9zbmlmZmVycyhzZWxmLCB0aXRsZSwgc25pZmZlcnMsIG5h bWVfcmUpOgorICAgICAgICAiIiJMaXN0cyB0aGUgc25pZmZlcnMgd2hvc2Ug bmFtZSBtYXRjaGVzIHJlZ2V4cC4KKworICAgICAgICBBcmd1bWVudHM6Cisg ICAgICAgICAgICB0aXRsZTogVGhlIGxpbmUgdG8gcHJpbnQgYmVmb3JlIHRo ZSBsaXN0LgorICAgICAgICAgICAgc25pZmZlcnM6IFRoZSBsaXN0IG9mIHRo ZSBzbmlmZmVycy4KKyAgICAgICAgICAgIG5hbWVfcmU6IHNuaWZmZXIgbmFt ZSBmaWx0ZXIuCisgICAgICAgICIiIgorICAgICAgICBpZiBub3Qgc25pZmZl cnM6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgcHJpbnQgdGl0bGUK KyAgICAgICAgZm9yIHNuaWZmZXIgaW4gc25pZmZlcnM6CisgICAgICAgICAg ICBpZiBuYW1lX3JlLm1hdGNoKHNuaWZmZXIubmFtZSk6CisgICAgICAgICAg ICAgICAgcHJpbnQoIiAgJXMlcyIgJSAoc25pZmZlci5uYW1lLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiIGlmIHNuaWZmZXIuZW5h YmxlZCBlbHNlICJbZGlzYWJsZWRdIikpCisKKyAgICBkZWYgaW52b2tlKHNl bGYsIGFyZywgZnJvbV90dHkpOgorICAgICAgICBsb2N1c19yZSwgbmFtZV9y ZSA9IHBhcnNlX3NuaWZmZXJfY29tbWFuZF9hcmdzKGFyZykKKyAgICAgICAg aWYgbG9jdXNfcmUubWF0Y2goImdsb2JhbCIpOgorICAgICAgICAgICAgc2Vs Zi5saXN0X3NuaWZmZXJzKCJnbG9iYWwgc25pZmZlcnM6IiwgZ2RiLmZyYW1l X3NuaWZmZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5h bWVfcmUpCisgICAgICAgIGlmIGxvY3VzX3JlLm1hdGNoKCJwcm9nc3BhY2Ui KToKKyAgICAgICAgICAgIGNwID0gZ2RiLmN1cnJlbnRfcHJvZ3NwYWNlKCkK KyAgICAgICAgICAgIHNlbGYubGlzdF9zbmlmZmVycygicHJvZ3NwYWNlICVz IHNuaWZmZXJzOiIgJSBjcC5maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjcC5mcmFtZV9zbmlmZmVycywgbmFtZV9yZSkKKyAg ICAgICAgZm9yIG9iamZpbGUgaW4gZ2RiLm9iamZpbGVzKCk6CisgICAgICAg ICAgICBpZiBsb2N1c19yZS5tYXRjaChvYmpmaWxlLmZpbGVuYW1lKToKKyAg ICAgICAgICAgICAgICBzZWxmLmxpc3Rfc25pZmZlcnMoIm9iamZpbGUgJXMg c25pZmZlcnM6IiAlIG9iamZpbGUuZmlsZW5hbWUsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG9iamZpbGUuZnJhbWVfc25pZmZlcnMs IG5hbWVfcmUpCisKKworZGVmIGRvX2VuYWJsZV9zbmlmZmVyMShzbmlmZmVy cywgbmFtZV9yZSwgZmxhZyk6CisgICAgIiIiRW5hYmxlL2Rpc2FibGUgc25p ZmZlcnMgd2hvc2UgbmFtZXMgbWF0Y2ggZ2l2ZW4gcmVnZXguCisKKyAgICBB cmd1bWVudHM6CisgICAgICAgIHNuaWZmZXJzOiBUaGUgbGlzdCBvZiBzbmlm ZmVycy4KKyAgICAgICAgbmFtZV9yZTogU25pZmZlciBuYW1lIGZpbHRlci4K KyAgICAgICAgZmxhZzogRW5hYmxlL2Rpc2FibGUuCisKKyAgICBSZXR1cm5z OgorICAgICAgICBUaGUgbnVtYmVyIG9mIHNuaWZmZXJzIGFmZmVjdGVkLgor ICAgICIiIgorICAgIHRvdGFsID0gMAorICAgIGZvciBzbmlmZmVyIGluIHNu aWZmZXJzOgorICAgICAgICBpZiBuYW1lX3JlLm1hdGNoKHNuaWZmZXIubmFt ZSk6CisgICAgICAgICAgICBzbmlmZmVyLmVuYWJsZWQgPSBmbGFnCisgICAg ICAgICAgICB0b3RhbCArPSAxCisgICAgcmV0dXJuIHRvdGFsCisKKworZGVm IGRvX2VuYWJsZV9zbmlmZmVyKGFyZywgZmxhZyk6CisgICAgIiIiRW5hYmxl L2Rpc2FibGUgc25pZmZlcihzKS4iIiIKKyAgICAobG9jdXNfcmUsIG5hbWVf cmUpID0gcGFyc2Vfc25pZmZlcl9jb21tYW5kX2FyZ3MoYXJnKQorICAgIHRv dGFsID0gMAorICAgIGlmIGxvY3VzX3JlLm1hdGNoKCJnbG9iYWwiKToKKyAg ICAgICAgdG90YWwgKz0gZG9fZW5hYmxlX3NuaWZmZXIxKGdkYi5mcmFtZV9z bmlmZmVycywgbmFtZV9yZSwgZmxhZykKKyAgICBpZiBsb2N1c19yZS5tYXRj aCgicHJvZ3NwYWNlIik6CisgICAgICAgIHRvdGFsICs9IGRvX2VuYWJsZV9z bmlmZmVyMShnZGIuY3VycmVudF9wcm9nc3BhY2UoKS5mcmFtZV9zbmlmZmVy cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVf cmUsIGZsYWcpCisgICAgZm9yIG9iamZpbGUgaW4gZ2RiLm9iamZpbGVzKCk6 CisgICAgICAgIGlmIGxvY3VzX3JlLm1hdGNoKG9iamZpbGUuZmlsZW5hbWUp OgorICAgICAgICAgICAgdG90YWwgKz0gZG9fZW5hYmxlX3NuaWZmZXIxKG9i amZpbGUuZnJhbWVfc25pZmZlcnMsIG5hbWVfcmUsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZykKKyAgICBwcmludCgi JWQgc25pZmZlciVzICVzIiAlICh0b3RhbCwgIiIgaWYgdG90YWwgPT0gMSBl bHNlICJzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZW5h YmxlZCIgaWYgZmxhZyBlbHNlICJkaXNhYmxlZCIpKQorCisKK2NsYXNzIEVu YWJsZVNuaWZmZXIoZ2RiLkNvbW1hbmQpOgorICAgICIiIkdEQiBjb21tYW5k IHRvIGVuYWJsZSBzbmlmZmVycy4KKworICAgIFVzYWdlOiBlbmFibGUgc25p ZmZlciBbbG9jdXMtcmVnZXhwIFtuYW1lLXJlZ2V4cF1dCisKKyAgICBMT0NV Uy1SRUdFWFAgaXMgYSByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2hpbmcgdGhl IG9iamVjdHMgdG8gZXhhbWluZS4KKyAgICBMb2NpIGFyZSAiZ2xvYmFsIiwg dGhlIHByb2dyYW0gc3BhY2UncyBmaWxlLCBhbmQgdGhlIG9iamZpbGVzIHdp dGhpbgorICAgIHRoYXQgcHJvZ3JhbSBzcGFjZS4KKworICAgIE5BTUVfUkVH RVhQIGlzIGEgcmVndWxhciBleHByZXNzaW9uIHRvIGZpbHRlciBzbmlmZmVy IG5hbWVzLgorICAgIElmIHRoaXMgb21pdHRlZCBmb3IgYSBzcGVjaWZpZWQg bG9jdXMsIHRoZW4gYWxsIHJlZ2lzdGVyZWQKKyAgICBzbmlmZmVycyBpbiB0 aGUgbG9jdXMgYXJlIGFmZmVjdGVkLgorICAgICIiIgorCisgICAgZGVmIF9f aW5pdF9fKHNlbGYpOgorICAgICAgICBzdXBlcihFbmFibGVTbmlmZmVyLCBz ZWxmKS5fX2luaXRfXygiZW5hYmxlIHNuaWZmZXIiLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGIuQ09NTUFORF9E QVRBKQorCisgICAgZGVmIGludm9rZShzZWxmLCBhcmcsIGZyb21fdHR5KToK KyAgICAgICAgIiIiR0RCIGNhbGxzIHRoaXMgdG8gcGVyZm9ybSB0aGUgY29t bWFuZC4iIiIKKyAgICAgICAgZG9fZW5hYmxlX3NuaWZmZXIoYXJnLCBUcnVl KQorCisKK2NsYXNzIERpc2FibGVTbmlmZmVyKGdkYi5Db21tYW5kKToKKyAg ICAiIiJHREIgY29tbWFuZCB0byBkaXNhYmxlIHRoZSBzcGVjaWZpZWQgc25p ZmZlci4KKworICAgIFVzYWdlOiBkaXNhYmxlIHNuaWZmZXIgW2xvY3VzLXJl Z2V4cCBbbmFtZS1yZWdleHBdXQorCisgICAgTE9DVVMtUkVHRVhQIGlzIGEg cmVndWxhciBleHByZXNzaW9uIG1hdGNoaW5nIHRoZSBvYmplY3RzIHRvIGV4 YW1pbmUuCisgICAgTG9jaSBhcmUgImdsb2JhbCIsIHRoZSBwcm9ncmFtIHNw YWNlJ3MgZmlsZSwgYW5kIHRoZSBvYmpmaWxlcyB3aXRoaW4KKyAgICB0aGF0 IHByb2dyYW0gc3BhY2UuCisKKyAgICBOQU1FX1JFR0VYUCBpcyBhIHJlZ3Vs YXIgZXhwcmVzc2lvbiB0byBmaWx0ZXIgc25pZmZlciBuYW1lcy4KKyAgICBJ ZiB0aGlzIG9taXR0ZWQgZm9yIGEgc3BlY2lmaWVkIGxvY3VzLCB0aGVuIGFs bCByZWdpc3RlcmVkCisgICAgc25pZmZlcnMgaW4gdGhlIGxvY3VzIGFyZSBh ZmZlY3RlZC4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToK KyAgICAgICAgc3VwZXIoRGlzYWJsZVNuaWZmZXIsIHNlbGYpLl9faW5pdF9f KCJkaXNhYmxlIHNuaWZmZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZ2RiLkNPTU1BTkRfREFUQSkKKworICAg IGRlZiBpbnZva2Uoc2VsZiwgYXJnLCBmcm9tX3R0eSk6CisgICAgICAgICIi IkdEQiBjYWxscyB0aGlzIHRvIHBlcmZvcm0gdGhlIGNvbW1hbmQuIiIiCisg ICAgICAgIGRvX2VuYWJsZV9zbmlmZmVyKGFyZywgRmFsc2UpCisKKworZGVm IHJlZ2lzdGVyX3NuaWZmZXJfY29tbWFuZHMoKToKKyAgICAiIiJJbnN0YWxs cyB0aGUgc25pZmZlciBjb21tYW5kcy4iIiIKKyAgICBJbmZvU25pZmZlcigp CisgICAgRW5hYmxlU25pZmZlcigpCisgICAgRGlzYWJsZVNuaWZmZXIoKQor CisKK3JlZ2lzdGVyX3NuaWZmZXJfY29tbWFuZHMoKQpkaWZmIC0tZ2l0IGEv Z2RiL3B5dGhvbi9saWIvZ2RiL2Z1bmN0aW9uL3NuaWZmZXJzLnB5IGIvZ2Ri L3B5dGhvbi9saWIvZ2RiL2Z1bmN0aW9uL3NuaWZmZXJzLnB5Cm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliZGNhNjIKLS0tIC9kZXYv bnVsbAorKysgYi9nZGIvcHl0aG9uL2xpYi9nZGIvZnVuY3Rpb24vc25pZmZl cnMucHkKQEAgLTAsMCArMSw1MyBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9n cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24g MyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkg bGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMg WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dy YW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2Vz Lz4uCisKKyIiIkludGVybmFsIGZ1bmN0aW9ucyBmb3Igd29ya2luZyB3aXRo IGZyYW1lIHNuaWZmZXJzLiIiIgorCitpbXBvcnQgZ2RiCisKKworZGVmIGV4 ZWN1dGVfc25pZmZlcnMoc25pZmZlcl9pbmZvKToKKyAgICAiIiJJbnRlcm5h bCBmdW5jdGlvbiBjYWxsZWQgZnJvbSBHREIgdG8gZXhlY3V0ZSBhbGwgc25p ZmZlcnMuCisKKyAgICBSdW5zIGVhY2ggY3VycmVudGx5IGVuYWJsZWQgc25p ZmZlciB1bnRpbCBpdCBmaW5kcyB0aGUgb25lIHRoYXQgY2FuCisgICAgdW53 aW5kIGdpdmVuIGZyYW1lLgorCisgICAgQXJndW1lbnRzOgorICAgICAgICBz bmlmZmVyX2luZm86IGFuIGluc3RhbmNlIG9mIGdkYi5TbmlmZmVySW5mby4K KyAgICBSZXR1cm5zOgorICAgICAgICBVbndpbmQgaW5mbyBvciBOb25lLiBT ZWUgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSB2YWx1ZSByZXR1cm5lZAorICAg ICAgICBieSBTbmlmZmVyLl9fY2FsbF9fIGJlbG93LgorICAgICIiIgorICAg IGZvciBvYmpmaWxlIGluIGdkYi5vYmpmaWxlcygpOgorICAgICAgICBmb3Ig c25pZmZlciBpbiBvYmpmaWxlLmZyYW1lX3NuaWZmZXJzOgorICAgICAgICAg ICAgaWYgc25pZmZlci5lbmFibGVkOgorICAgICAgICAgICAgICAgIHVud2lu ZF9pbmZvID0gc25pZmZlci5fX2NhbGxfXyhzbmlmZmVyX2luZm8pCisgICAg ICAgICAgICAgICAgaWYgdW53aW5kX2luZm8gaXMgbm90IE5vbmU6CisgICAg ICAgICAgICAgICAgICAgIHJldHVybiB1bndpbmRfaW5mbworCisgICAgY3Vy cmVudF9wcm9nc3BhY2UgPSBnZGIuY3VycmVudF9wcm9nc3BhY2UoKQorICAg IGZvciBzbmlmZmVyIGluIGN1cnJlbnRfcHJvZ3NwYWNlLmZyYW1lX3NuaWZm ZXJzOgorICAgICAgICBpZiBzbmlmZmVyLmVuYWJsZWQ6CisgICAgICAgICAg ICB1bndpbmRfaW5mbyA9IHNuaWZmZXIuX19jYWxsX18oc25pZmZlcl9pbmZv KQorICAgICAgICAgICAgaWYgdW53aW5kX2luZm8gaXMgbm90IE5vbmU6Cisg ICAgICAgICAgICAgICAgcmV0dXJuIHVud2luZF9pbmZvCisKKyAgICBmb3Ig c25pZmZlciBpbiBnZGIuZnJhbWVfc25pZmZlcnM6CisgICAgICAgIGlmIHNu aWZmZXIuZW5hYmxlZDoKKyAgICAgICAgICAgIHVud2luZF9pbmZvID0gc25p ZmZlci5fX2NhbGxfXyhzbmlmZmVyX2luZm8pCisgICAgICAgICAgICBpZiB1 bndpbmRfaW5mbyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICByZXR1 cm4gdW53aW5kX2luZm8KKworICAgIHJldHVybiBOb25lCmRpZmYgLS1naXQg YS9nZGIvcHl0aG9uL2xpYi9nZGIvc25pZmZlci5weSBiL2dkYi9weXRob24v bGliL2dkYi9zbmlmZmVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLmZiZDUxOWQKLS0tIC9kZXYvbnVsbAorKysgYi9nZGIvcHl0 aG9uL2xpYi9nZGIvc25pZmZlci5weQpAQCAtMCwwICsxLDg5IEBACisjIENv cHlyaWdodCAoQykgMjAxNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu Yy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFz IHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u OyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQg eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHBy b2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y ZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj b3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9u ZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3 LmdudS5vcmcvbGljZW5zZXMvPi4KKworIiIiU25pZmZlciBjbGFzcyBhbmQg cmVnaXN0ZXJfc25pZmZlciBmdW5jdGlvbi4iIiIKKworaW1wb3J0IGdkYgor CisKK2NsYXNzIFNuaWZmZXIob2JqZWN0KToKKyAgICAiIiJCYXNlIGNsYXNz IChvciBhIHRlbXBsYXRlKSBmb3IgZnJhbWUgc25pZmZlcnMgd3JpdHRlbiBp biBQeXRob24uCisKKyAgICBBIHNuaWZmZXIgaGFzIGEgc2luZ2xlIG1ldGhv ZCBfX2NhbGxfXyBhbmQgdGhlIGF0dHJpYnV0ZXMgZGVzY3JpYmVkIGJlbG93 LgorCisgICAgQXR0cmlidXRlczoKKyAgICAgICAgbmFtZTogVGhlIG5hbWUg b2YgdGhlIHNuaWZmZXIuCisgICAgICAgIGVuYWJsZWQ6IEEgYm9vbGVhbiBp bmRpY2F0aW5nIHdoZXRoZXIgdGhlIHNuaWZmZXIgaXMgZW5hYmxlZC4KKyAg ICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lKToKKyAgICAg ICAgIiIiQ29uc3RydWN0b3IuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAg ICAgIG5hbWU6IEFuIGlkZW50aWZ5aW5nIG5hbWUgZm9yIHRoZSBzbmlmZmVy LgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAg ICAgICBzZWxmLmVuYWJsZWQgPSBUcnVlCisKKyAgICBkZWYgX19jYWxsX18o c2VsZiwgc25pZmZlcl9pbmZvKToKKyAgICAgICAgIiIiR0RCIGNhbGxzIHRo aXMgbWV0aG9kIHRvIHVud2luZCBhIGZyYW1lLgorCisgICAgICAgIEFyZ3Vt ZW50czoKKyAgICAgICAgICAgIHNuaWZmZXJfaW5mbzogQW4gaW5zdGFuY2Ug b2YgZ2RiLlNuaWZmZXJJbmZvIGRlc2NyaWJpbmcgdGhlIGZyYW1lLgorCisg ICAgICAgIFJldHVybnM6CisJICAgIGdkYi5VbndpbmRJbmZvIGluc3RhbmNl LgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRF cnJvcigiU25pZmZlciBfX2NhbGxfXy4iKQorCisKK2RlZiByZWdpc3Rlcl9z bmlmZmVyKGxvY3VzLCBzbmlmZmVyLCByZXBsYWNlPUZhbHNlKToKKyAgICAi IiJSZWdpc3RlciBzbmlmZmVyIGluIGdpdmVuIGxvY3VzLgorCisgICAgVGhl IHNuaWZmZXIgaXMgcHJlcGVuZGVkIHRvIHRoZSBsb2N1cydzIHNuaWZmZXJz IGxpc3QuIFNuaWZmZXIKKyAgICBuYW1lIHNob3VsZCBiZSB1bmlxdWUuCisK KyAgICBBcmd1bWVudHM6CisgICAgICAgIGxvY3VzOiBFaXRoZXIgYW4gb2Jq ZmlsZSwgcHJvZ3NwYWNlLCBvciBOb25lIChpbiB3aGljaCBjYXNlCisgICAg ICAgICAgICAgICB0aGUgc25pZmZlciBpcyByZWdpc3RlcmVkIGdsb2JhbGx5 KS4KKyAgICAgICAgc25pZmZlcjogQW4gb2JqZWN0IG9mIGEgZ2RiLlNuaWZm ZXIgc3ViY2xhc3MKKyAgICAgICAgcmVwbGFjZTogSWYgVHJ1ZSwgcmVwbGFj ZXMgZXhpc3Rpbmcgc25pZmZlciB3aXRoIHRoZSBzYW1lIG5hbWUuCisgICAg ICAgICAgICAgICAgIE90aGVyd2lzZSwgcmFpc2VzIGV4Y2VwdGlvbiBpZiBz bmlmZmVyIHdpdGggdGhlIHNhbWUKKyAgICAgICAgICAgICAgICAgbmFtZSBh bHJlYWR5IGV4aXN0cy4KKworICAgIFJldHVybnM6CisgICAgICAgIE5vdGhp bmcuCisKKyAgICBSYWlzZXM6CisgICAgICAgIFJ1bnRpbWVFcnJvcjogU25p ZmZlciBuYW1lIGlzIG5vdCB1bmlxdWUuCisKKyAgICAiIiIKKyAgICBpZiBs b2N1cyBpcyBOb25lOgorICAgICAgICBpZiBnZGIucGFyYW1ldGVyKCJ2ZXJi b3NlIik6CisgICAgICAgICAgICBnZGIud3JpdGUoIlJlZ2lzdGVyaW5nIGds b2JhbCAlcyBzbmlmZmVyIC4uLlxuIiAlIHNuaWZmZXIubmFtZSkKKyAgICAg ICAgbG9jdXMgPSBnZGIKKyAgICBlbHNlOgorICAgICAgICBpZiBnZGIucGFy YW1ldGVyKCJ2ZXJib3NlIik6CisgICAgICAgICAgICBnZGIud3JpdGUoIlJl Z2lzdGVyaW5nICVzIHNuaWZmZXIgZm9yICVzIC4uLlxuIiAlCisgICAgICAg ICAgICAgICAgICAgICAgKHNuaWZmZXIubmFtZSwgbG9jdXMuZmlsZW5hbWUp KQorICAgIGkgPSAwCisgICAgZm9yIG5lZWRsZSBpbiBsb2N1cy5mcmFtZV9z bmlmZmVyczoKKyAgICAgICAgaWYgbmVlZGxlLm5hbWUgPT0gc25pZmZlci5u YW1lOgorICAgICAgICAgICAgaWYgcmVwbGFjZToKKyAgICAgICAgICAgICAg ICBkZWwgbG9jdXMuZnJhbWVfc25pZmZlcnNbaV0KKyAgICAgICAgICAgIGVs c2U6CisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJTbmlm ZmVyICVzIGFscmVhZHkgZXhpc3RzLiIgJSBzbmlmZmVyLm5hbWUpCisgICAg ICAgIGkgKz0gMQorICAgIGxvY3VzLmZyYW1lX3NuaWZmZXJzLmluc2VydCgw LCBzbmlmZmVyKQpkaWZmIC0tZ2l0IGEvZ2RiL3B5dGhvbi9weS1vYmpmaWxl LmMgYi9nZGIvcHl0aG9uL3B5LW9iamZpbGUuYwppbmRleCAxNTdkMjAwLi40 OGU2NDY4IDEwMDY0NAotLS0gYS9nZGIvcHl0aG9uL3B5LW9iamZpbGUuYwor KysgYi9nZGIvcHl0aG9uL3B5LW9iamZpbGUuYwpAQCAtNDIsNiArNDIsMTAg QEAgdHlwZWRlZiBzdHJ1Y3QKIAogICAvKiBUaGUgZnJhbWUgZmlsdGVyIGxp c3Qgb2YgZnVuY3Rpb25zLiAgKi8KICAgUHlPYmplY3QgKmZyYW1lX2ZpbHRl cnM7CisKKyAgLyogVGhlIGZyYW1lIHNuaWZmZXJzIGxpc3Qgb2YgZnVuY3Rp b25zLiAgKi8KKyAgUHlPYmplY3QgKmZyYW1lX3NuaWZmZXJzOworCiAgIC8q IFRoZSB0eXBlLXByaW50ZXIgbGlzdC4gICovCiAgIFB5T2JqZWN0ICp0eXBl X3ByaW50ZXJzOwogCkBAIC0xODQsNiArMTg4LDcgQEAgb2JqZnB5X2RlYWxs b2MgKFB5T2JqZWN0ICpvKQogICBQeV9YREVDUkVGIChzZWxmLT5kaWN0KTsK ICAgUHlfWERFQ1JFRiAoc2VsZi0+cHJpbnRlcnMpOwogICBQeV9YREVDUkVG IChzZWxmLT5mcmFtZV9maWx0ZXJzKTsKKyAgUHlfWERFQ1JFRiAoc2VsZi0+ ZnJhbWVfc25pZmZlcnMpOwogICBQeV9YREVDUkVGIChzZWxmLT50eXBlX3By aW50ZXJzKTsKICAgUHlfWERFQ1JFRiAoc2VsZi0+eG1ldGhvZHMpOwogICBQ eV9UWVBFIChzZWxmKS0+dHBfZnJlZSAoc2VsZik7CkBAIC0yMDYsNiArMjEx LDEwIEBAIG9iamZweV9pbml0aWFsaXplIChvYmpmaWxlX29iamVjdCAqc2Vs ZikKICAgaWYgKHNlbGYtPmZyYW1lX2ZpbHRlcnMgPT0gTlVMTCkKICAgICBy ZXR1cm4gMDsKIAorICBzZWxmLT5mcmFtZV9zbmlmZmVycyA9IFB5TGlzdF9O ZXcgKDApOworICBpZiAoc2VsZi0+ZnJhbWVfc25pZmZlcnMgPT0gTlVMTCkK KyAgICByZXR1cm4gMDsKKwogICBzZWxmLT50eXBlX3ByaW50ZXJzID0gUHlM aXN0X05ldyAoMCk7CiAgIGlmIChzZWxmLT50eXBlX3ByaW50ZXJzID09IE5V TEwpCiAgICAgcmV0dXJuIDA7CkBAIC0zMTMsNiArMzIyLDQ4IEBAIG9iamZw eV9zZXRfZnJhbWVfZmlsdGVycyAoUHlPYmplY3QgKm8sIFB5T2JqZWN0ICpm aWx0ZXJzLCB2b2lkICppZ25vcmUpCiAgIHJldHVybiAwOwogfQogCisvKiBS ZXR1cm4gdGhlIGZyYW1lIHNuaWZmZXJzIGF0dHJpYnV0ZSBmb3IgdGhpcyBv YmplY3QgZmlsZS4gICovCisKK1B5T2JqZWN0ICoKK29iamZweV9nZXRfZnJh bWVfc25pZmZlcnMgKFB5T2JqZWN0ICpvLCB2b2lkICppZ25vcmUpCit7Cisg IG9iamZpbGVfb2JqZWN0ICpzZWxmID0gKG9iamZpbGVfb2JqZWN0ICopIG87 CisKKyAgUHlfSU5DUkVGIChzZWxmLT5mcmFtZV9zbmlmZmVycyk7CisgIHJl dHVybiBzZWxmLT5mcmFtZV9zbmlmZmVyczsKK30KKworLyogU2V0IHRoaXMg b2JqZWN0IGZpbGUncyBmcmFtZSBzbmlmZmVycyBsaXN0IHRvIFNOSUZGRVJT LiAgKi8KKworc3RhdGljIGludAorb2JqZnB5X3NldF9mcmFtZV9zbmlmZmVy cyAoUHlPYmplY3QgKm8sIFB5T2JqZWN0ICpzbmlmZmVycywgdm9pZCAqaWdu b3JlKQoreworICBQeU9iamVjdCAqdG1wOworICBvYmpmaWxlX29iamVjdCAq c2VsZiA9IChvYmpmaWxlX29iamVjdCAqKSBvOworCisgIGlmICghc25pZmZl cnMpCisgICAgeworICAgICAgUHlFcnJfU2V0U3RyaW5nIChQeUV4Y19UeXBl RXJyb3IsCisJCSAgICAgICBfKCJDYW5ub3QgZGVsZXRlIHRoZSBmcmFtZSBz bmlmZmVycyBhdHRyaWJ1dGUuIikpOworICAgICAgcmV0dXJuIC0xOworICAg IH0KKworICBpZiAoIVB5TGlzdF9DaGVjayAoc25pZmZlcnMpKQorICAgIHsK KyAgICAgIFB5RXJyX1NldFN0cmluZyAoUHlFeGNfVHlwZUVycm9yLAorCQkg ICAgICAgXygiVGhlIGZyYW1lX3NuaWZmZXJzIGF0dHJpYnV0ZSBtdXN0IGJl IGEgbGlzdC4iKSk7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgIC8q IFRha2UgY2FyZSBpbiBjYXNlIHRoZSBMSFMgYW5kIFJIUyBhcmUgcmVsYXRl ZCBzb21laG93LiAgKi8KKyAgdG1wID0gc2VsZi0+ZnJhbWVfc25pZmZlcnM7 CisgIFB5X0lOQ1JFRiAoc25pZmZlcnMpOworICBzZWxmLT5mcmFtZV9zbmlm ZmVycyA9IHNuaWZmZXJzOworICBQeV9YREVDUkVGICh0bXApOworCisgIHJl dHVybiAwOworfQorCiAvKiBHZXQgdGhlICd0eXBlX3ByaW50ZXJzJyBhdHRy aWJ1dGUuICAqLwogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtNjUxLDYgKzcw Miw4IEBAIHN0YXRpYyBQeUdldFNldERlZiBvYmpmaWxlX2dldHNldFtdID0K ICAgICAiUHJldHR5IHByaW50ZXJzLiIsIE5VTEwgfSwKICAgeyAiZnJhbWVf ZmlsdGVycyIsIG9iamZweV9nZXRfZnJhbWVfZmlsdGVycywKICAgICBvYmpm cHlfc2V0X2ZyYW1lX2ZpbHRlcnMsICJGcmFtZSBGaWx0ZXJzLiIsIE5VTEwg fSwKKyAgeyAiZnJhbWVfc25pZmZlcnMiLCBvYmpmcHlfZ2V0X2ZyYW1lX3Nu aWZmZXJzLAorICAgIG9iamZweV9zZXRfZnJhbWVfc25pZmZlcnMsICJGcmFt ZSBTbmlmZmVycyIsIE5VTEwgfSwKICAgeyAidHlwZV9wcmludGVycyIsIG9i amZweV9nZXRfdHlwZV9wcmludGVycywgb2JqZnB5X3NldF90eXBlX3ByaW50 ZXJzLAogICAgICJUeXBlIHByaW50ZXJzLiIsIE5VTEwgfSwKICAgeyAieG1l dGhvZHMiLCBvYmpmcHlfZ2V0X3htZXRob2RzLCBOVUxMLApkaWZmIC0tZ2l0 IGEvZ2RiL3B5dGhvbi9weS1wcm9nc3BhY2UuYyBiL2dkYi9weXRob24vcHkt cHJvZ3NwYWNlLmMKaW5kZXggOTNmYmMxNC4uZDU5ZmY0ZCAxMDA2NDQKLS0t IGEvZ2RiL3B5dGhvbi9weS1wcm9nc3BhY2UuYworKysgYi9nZGIvcHl0aG9u L3B5LXByb2dzcGFjZS5jCkBAIC00MSw2ICs0MSwxMCBAQCB0eXBlZGVmIHN0 cnVjdAogCiAgIC8qIFRoZSBmcmFtZSBmaWx0ZXIgbGlzdCBvZiBmdW5jdGlv bnMuICAqLwogICBQeU9iamVjdCAqZnJhbWVfZmlsdGVyczsKKworICAvKiBU aGUgZnJhbWUgc25pZmZlciBsaXN0LiAgKi8KKyAgUHlPYmplY3QgKmZyYW1l X3NuaWZmZXJzOworCiAgIC8qIFRoZSB0eXBlLXByaW50ZXIgbGlzdC4gICov CiAgIFB5T2JqZWN0ICp0eXBlX3ByaW50ZXJzOwogCkBAIC04Miw2ICs4Niw3 IEBAIHBzcHlfZGVhbGxvYyAoUHlPYmplY3QgKnNlbGYpCiAgIFB5X1hERUNS RUYgKHBzX3NlbGYtPmRpY3QpOwogICBQeV9YREVDUkVGIChwc19zZWxmLT5w cmludGVycyk7CiAgIFB5X1hERUNSRUYgKHBzX3NlbGYtPmZyYW1lX2ZpbHRl cnMpOworICBQeV9YREVDUkVGIChwc19zZWxmLT5mcmFtZV9zbmlmZmVycyk7 CiAgIFB5X1hERUNSRUYgKHBzX3NlbGYtPnR5cGVfcHJpbnRlcnMpOwogICBQ eV9YREVDUkVGIChwc19zZWxmLT54bWV0aG9kcyk7CiAgIFB5X1RZUEUgKHNl bGYpLT50cF9mcmVlIChzZWxmKTsKQEAgLTEwNCw2ICsxMDksMTAgQEAgcHNw eV9pbml0aWFsaXplIChwc3BhY2Vfb2JqZWN0ICpzZWxmKQogICBpZiAoc2Vs Zi0+ZnJhbWVfZmlsdGVycyA9PSBOVUxMKQogICAgIHJldHVybiAwOwogCisg IHNlbGYtPmZyYW1lX3NuaWZmZXJzID0gUHlMaXN0X05ldyAoMCk7CisgIGlm IChzZWxmLT5mcmFtZV9zbmlmZmVycyA9PSBOVUxMKQorICAgIHJldHVybiAw OworCiAgIHNlbGYtPnR5cGVfcHJpbnRlcnMgPSBQeUxpc3RfTmV3ICgwKTsK ICAgaWYgKHNlbGYtPnR5cGVfcHJpbnRlcnMgPT0gTlVMTCkKICAgICByZXR1 cm4gMDsKQEAgLTIxMSw2ICsyMjAsNDggQEAgcHNweV9zZXRfZnJhbWVfZmls dGVycyAoUHlPYmplY3QgKm8sIFB5T2JqZWN0ICpmcmFtZSwgdm9pZCAqaWdu b3JlKQogICByZXR1cm4gMDsKIH0KIAorLyogUmV0dXJuIHRoZSBsaXN0IG9m IHRoZSBmcmFtZSBzbmlmZmVycyBmb3IgdGhpcyBwcm9ncmFtIHNwYWNlLiAg Ki8KKworUHlPYmplY3QgKgorcHNweV9nZXRfZnJhbWVfc25pZmZlcnMgKFB5 T2JqZWN0ICpvLCB2b2lkICppZ25vcmUpCit7CisgIHBzcGFjZV9vYmplY3Qg KnNlbGYgPSAocHNwYWNlX29iamVjdCAqKSBvOworCisgIFB5X0lOQ1JFRiAo c2VsZi0+ZnJhbWVfc25pZmZlcnMpOworICByZXR1cm4gc2VsZi0+ZnJhbWVf c25pZmZlcnM7Cit9CisKKy8qIFNldCB0aGlzIHByb2dyYW0gc3BhY2UncyBs aXN0IG9mIHRoZSBzbmlmZmVycyB0byBTTklGRkVSUy4gICovCisKK3N0YXRp YyBpbnQKK3BzcHlfc2V0X2ZyYW1lX3NuaWZmZXJzIChQeU9iamVjdCAqbywg UHlPYmplY3QgKnNuaWZmZXJzLCB2b2lkICppZ25vcmUpCit7CisgIFB5T2Jq ZWN0ICp0bXA7CisgIHBzcGFjZV9vYmplY3QgKnNlbGYgPSAocHNwYWNlX29i amVjdCAqKSBvOworCisgIGlmICghc25pZmZlcnMpCisgICAgeworICAgICAg UHlFcnJfU2V0U3RyaW5nIChQeUV4Y19UeXBlRXJyb3IsCisJCSAgICAgICAi Y2Fubm90IGRlbGV0ZSB0aGUgZnJhbWUgc25pZmZlcnMgbGlzdCIpOworICAg ICAgcmV0dXJuIC0xOworICAgIH0KKworICBpZiAoIVB5TGlzdF9DaGVjayAo c25pZmZlcnMpKQorICAgIHsKKyAgICAgIFB5RXJyX1NldFN0cmluZyAoUHlF eGNfVHlwZUVycm9yLAorCQkgICAgICAgInRoZSBmcmFtZSBzbmlmZmVycyBh dHRyaWJ1dGUgbXVzdCBiZSBhIGxpc3QiKTsKKyAgICAgIHJldHVybiAtMTsK KyAgICB9CisKKyAgLyogVGFrZSBjYXJlIGluIGNhc2UgdGhlIExIUyBhbmQg UkhTIGFyZSByZWxhdGVkIHNvbWVob3cuICAqLworICB0bXAgPSBzZWxmLT5m cmFtZV9zbmlmZmVyczsKKyAgUHlfSU5DUkVGIChzbmlmZmVycyk7CisgIHNl bGYtPmZyYW1lX3NuaWZmZXJzID0gc25pZmZlcnM7CisgIFB5X1hERUNSRUYg KHRtcCk7CisKKyAgcmV0dXJuIDA7Cit9CisKIC8qIEdldCB0aGUgJ3R5cGVf cHJpbnRlcnMnIGF0dHJpYnV0ZS4gICovCiAKIHN0YXRpYyBQeU9iamVjdCAq CkBAIC0zNDUsNiArMzk2LDggQEAgc3RhdGljIFB5R2V0U2V0RGVmIHBzcGFj ZV9nZXRzZXRbXSA9CiAgICAgIlByZXR0eSBwcmludGVycy4iLCBOVUxMIH0s CiAgIHsgImZyYW1lX2ZpbHRlcnMiLCBwc3B5X2dldF9mcmFtZV9maWx0ZXJz LCBwc3B5X3NldF9mcmFtZV9maWx0ZXJzLAogICAgICJGcmFtZSBmaWx0ZXJz LiIsIE5VTEwgfSwKKyAgeyAiZnJhbWVfc25pZmZlcnMiLCBwc3B5X2dldF9m cmFtZV9zbmlmZmVycywgcHNweV9zZXRfZnJhbWVfc25pZmZlcnMsCisgICAg IkZyYW1lIHNuaWZmZXJzLiIsIE5VTEwgfSwKICAgeyAidHlwZV9wcmludGVy cyIsIHBzcHlfZ2V0X3R5cGVfcHJpbnRlcnMsIHBzcHlfc2V0X3R5cGVfcHJp bnRlcnMsCiAgICAgIlR5cGUgcHJpbnRlcnMuIiwgTlVMTCB9LAogICB7ICJ4 bWV0aG9kcyIsIHBzcHlfZ2V0X3htZXRob2RzLCBOVUxMLApkaWZmIC0tZ2l0 IGEvZ2RiL3B5dGhvbi9weS11bndpbmQuYyBiL2dkYi9weXRob24vcHktdW53 aW5kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYx YzcyZQotLS0gL2Rldi9udWxsCisrKyBiL2dkYi9weXRob24vcHktdW53aW5k LmMKQEAgLTAsMCArMSw4MzEgQEAKKy8qIFB5dGhvbiBmcmFtZSB1bndpbmRl ciBpbnRlcmZhY2UuCisKKyAgIENvcHlyaWdodCAoQykgMjAxNSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBmaWxlIGlzIHBh cnQgb2YgR0RCLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAg aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2Us IG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor CisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m CisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3Qs IHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisj aW5jbHVkZSAiZGVmcy5oIgorI2luY2x1ZGUgImFyY2gtdXRpbHMuaCIKKyNp bmNsdWRlICJmcmFtZS11bndpbmQuaCIKKyNpbmNsdWRlICJnZGJfb2JzdGFj ay5oIgorI2luY2x1ZGUgImdkYmNtZC5oIgorI2luY2x1ZGUgImxhbmd1YWdl LmgiCisjaW5jbHVkZSAib2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJweXRob24t aW50ZXJuYWwuaCIKKyNpbmNsdWRlICJyZWdjYWNoZS5oIgorI2luY2x1ZGUg InZhbHByaW50LmgiCisjaW5jbHVkZSAidXNlci1yZWdzLmgiCisKKyNkZWZp bmUgVFJBQ0VfUFlfVU5XSU5EKGxldmVsLCBhcmdzLi4uKSBpZiAocHl1d19k ZWJ1ZyA+PSBsZXZlbCkgIFwKKyAgeyBmcHJpbnRmX3VuZmlsdGVyZWQgKGdk Yl9zdGRsb2csIGFyZ3MpOyB9CisKK3R5cGVkZWYgc3RydWN0Cit7CisgIFB5 T2JqZWN0X0hFQUQKKworICAvKiBGcmFtZSB3ZSBhcmUgdW53aW5kaW5nLiAg Ki8KKyAgc3RydWN0IGZyYW1lX2luZm8gKmZyYW1lX2luZm87CisKKyAgLyog SXRzIGFyY2hpdGVjdHVyZSwgcGFzc2VkIGJ5IHRoZSBzbmlmZmVyIGNhbGxl ci4gICovCisgIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoOworfSBzbmlmZmVy X2luZm9fb2JqZWN0OworCisvKiBUaGUgZGF0YSB3ZSBrZWVwIGZvciB0aGUg UHlVbndpbmRJbmZvOiBzbmlmZmVyX2luZm8sIHByZXZpb3VzCisgKiBmcmFt ZSdzIHJlZ2lzdGVyIHNldCBhbmQgZnJhbWUgSUQuICAqLworCit0eXBlZGVm IHN0cnVjdAoreworICBQeU9iamVjdF9IRUFECisKKyAgLyogZ2RiLlNuaWZm ZXJJbmZvIGZvciB0aGUgZnJhbWUgd2UgYXJlIHVud2luZGluZy4gICovCisg IFB5T2JqZWN0ICpzbmlmZmVyX2luZm87CisKKyAgLyogSXRzIElELiAgKi8K KyAgc3RydWN0IGZyYW1lX2lkIGZyYW1lX2lkOworCisgIC8qIFByZXZpb3Vz IGZyYW1lIHJlZ2lzdGVycyBhcnJheS4gICovCisgIHN0cnVjdCByZWdfcHlk YXRhCisgIHsKKyAgICBpbnQgbnVtYmVyOworICAgIFB5T2JqZWN0ICp2YWx1 ZTsKKyAgfSAqcHJldl9mcmFtZV9yZWdzOworCisgIC8qIFRoZSBjdXJyZW50 IHNpemUgb2YgdGhlIGFycmF5IGFib3ZlLiAgKi8KKyAgaW50IHByZXZfZnJh bWVfcmVnc19zaXplOworCisgIC8qIEFuZCBpdHMgY2FwYWNpdHkuICAqLwor ICBpbnQgcHJldl9mcmFtZV9yZWdzX2NhcGFjaXR5OworCit9IHVud2luZF9p bmZvX29iamVjdDsKKworLyogVGhlIGRhdGEgd2Uga2VlcCBmb3IgYSBmcmFt ZSB3ZSBjYW4gdW53aW5kOiBmcmFtZSBJRCBhbmQgYW4gYXJyYXkgb2YKKyAg IChyZWdpc3Rlcl9udW1iZXIsIHJlZ2lzdGVyX3ZhbHVlKSBwYWlycy4gICov CisKK3R5cGVkZWYgc3RydWN0Cit7CisgIC8qIEZyYW1lIElELiAgKi8KKyAg c3RydWN0IGZyYW1lX2lkIGZyYW1lX2lkOworCisgIC8qIEdEQiBBcmNoaXRl Y3R1cmUuICAqLworICBzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaDsKKworICAv KiBMZW5ndGggb2YgdGhlIGByZWcnIGFycmF5IGJlbG93LiAgKi8KKyAgaW50 IHJlZ19jb3VudDsKKworICBzdHJ1Y3QgcmVnX2luZm8KKyAgeworICAgIC8q IFJlZ2lzdGVyIG51bWJlci4gICovCisgICAgaW50IG51bWJlcjsKKworICAg IC8qIFJlZ2lzdGVyIGRhdGEgYnl0ZXMgcG9pbnRlci4gICovCisgICAgZ2Ri X2J5dGUgKmRhdGE7CisgIH0gcmVnW107Cit9IGNhY2hlZF9mcmFtZV9pbmZv OworCitzdGF0aWMgUHlUeXBlT2JqZWN0IHNuaWZmZXJfaW5mb19vYmplY3Rf dHlwZQorICAgIENQWUNIRUNLRVJfVFlQRV9PQkpFQ1RfRk9SX1RZUEVERUYg KCJzbmlmZmVyX2luZm9fb2JqZWN0Iik7CisKK3N0YXRpYyBQeVR5cGVPYmpl Y3QgdW53aW5kX2luZm9fb2JqZWN0X3R5cGUKKyAgICBDUFlDSEVDS0VSX1RZ UEVfT0JKRUNUX0ZPUl9UWVBFREVGICgidW53aW5kX2luZm9fb2JqZWN0Iik7 CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcHl1d19kZWJ1ZyA9IDA7CisKK3N0 YXRpYyBzdHJ1Y3QgZ2RiYXJjaF9kYXRhICpweXV3X2dkYmFyY2hfZGF0YTsK KworLyogUGFyc2UgUHl0aG9uIEludCwgc2F2aW5nIGl0IGF0IHRoZSBnaXZl biBhZGRyZXNzLiBSZXR1cm5zIDEgb24gc3VjY2VzcywKKyAgIDAgb3RoZXJ3 aXNlLiAgKi8KKworc3RhdGljIGludAorcHl1d19wYXJzZV9pbnQgKFB5T2Jq ZWN0ICpweW9faW50LCBpbnQgKnZhbHVlcCkKK3sKKyAgbG9uZyBsb25nX3Zh bHVlOworCisgIGlmIChweW9faW50ID09IE5VTEwpCisgICAgcmV0dXJuIDA7 CisKKyAgLyogTWFrZSBhIGxvbmcgbG9naWMgY2hlY2sgZmlyc3QuICBJbiBQ eXRob24gMy54LCBpbnRlcm5hbGx5LCBhbGwKKyAgICAgaW50ZWdlcnMgYXJl IHJlcHJlc2VudGVkIGFzIGxvbmdzLiAgSW4gUHl0aG9uIDIueCwgdGhlcmUg aXMgc3RpbGwKKyAgICAgYSBkaWZmZXJlbnRpYXRpb24gaW50ZXJuYWxseSBi ZXR3ZWVuIGEgUHlJbnQgYW5kIGEgUHlMb25nLgorICAgICBFeHBsaWNpdGx5 IGRvIHRoaXMgbG9uZyBjaGVjayBjb252ZXJzaW9uIGZpcnN0LiBJbiBHREIs IGZvcgorICAgICBQeXRob24gMy54LCB3ZSAjaWZkZWYgUHlJbnQgPSBQeUxv bmcuICBUaGlzIGNoZWNrIGhhcyB0byBiZSBkb25lCisgICAgIGZpcnN0IHRv IGVuc3VyZSB3ZSBkbyBub3QgbG9zZSBpbmZvcm1hdGlvbiBpbiB0aGUgY29u dmVyc2lvbgorICAgICBwcm9jZXNzLiAgKi8KKyAgZWxzZSBpZiAoUHlMb25n X0NoZWNrIChweW9faW50KSkKKyAgICB7CisgICAgICBMT05HRVNUIGwgPSBQ eUxvbmdfQXNMb25nTG9uZyAocHlvX2ludCk7CisKKyAgICAgIGlmIChQeUVy cl9PY2N1cnJlZCAoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICBsb25n X3ZhbHVlID0gKGxvbmcpbDsKKyAgICAgIGlmIChsICE9IGxvbmdfdmFsdWUp CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgZWxzZSBpZiAoUHlJbnRf Q2hlY2sgKHB5b19pbnQpKQorICAgIHsKKyAgICAgIGxvbmdfdmFsdWUgPSBQ eUludF9Bc0xvbmcgKHB5b19pbnQpOworICAgICAgaWYgKFB5RXJyX09jY3Vy cmVkICgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgIGVsc2UKKyAg ICByZXR1cm4gMDsKKyAgaWYgKGxvbmdfdmFsdWUgIT0gKGludCkgbG9uZ192 YWx1ZSkKKyAgICByZXR1cm4gMDsKKyAgKnZhbHVlcCA9IChpbnQpIGxvbmdf dmFsdWU7CisgIHJldHVybiAxOworfQorCisvKiBQYXJzZXMgcmVnaXN0ZXIg aWQsIHdoaWNoIGNhbiBiZSBlaXRoZXIgYSBudW1iZXIgb3IgYSBuYW1lLgor ICAgUmV0dXJucyAxIG9uIHN1Y2Nlc3MsIDAgb3RoZXJ3aXNlLiAgKi8KKwor c3RhdGljIGludAorcHl1d19wYXJzZV9yZWdpc3Rlcl9pZCAoc3RydWN0IGdk YmFyY2ggKmdkYmFyY2gsIFB5T2JqZWN0ICpweW9fcmVnX2lkLAorICAgICAg ICAgICAgICAgICAgICAgICAgaW50ICpyZWdfbnVtKQoreworICBpZiAocHlv X3JlZ19pZCA9PSBOVUxMKQorICAgIHJldHVybiAwOworICBpZiAoUHlTdHJp bmdfQ2hlY2sgKHB5b19yZWdfaWQpKQorICAgIHsKKyAgICAgIGNvbnN0IGNo YXIgKnJlZ19uYW1lID0gUHlTdHJpbmdfQVNfU1RSSU5HIChweW9fcmVnX2lk KTsKKyAgICAgIGlmIChyZWdfbmFtZSA9PSBOVUxMKQorICAgICAgICByZXR1 cm4gMDsKKyAgICAgICpyZWdfbnVtID0gdXNlcl9yZWdfbWFwX25hbWVfdG9f cmVnbnVtIChnZGJhcmNoLCByZWdfbmFtZSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4gKHJlZ19uYW1l KSk7CisgICAgICByZXR1cm4gKnJlZ19udW0gPj0gMDsKKyAgICB9CisgIGVs c2UgaWYgKHB5dXdfcGFyc2VfaW50IChweW9fcmVnX2lkLCByZWdfbnVtKSkK KyAgICByZXR1cm4gdXNlcl9yZWdfbWFwX3JlZ251bV90b19uYW1lIChnZGJh cmNoLCAqcmVnX251bSkgIT0gTlVMTDsKKyAgZWxzZQorICAgIHJldHVybiAw OworfQorCisvKiBDb252ZXJ0IGdkYi5WYWx1ZSBvYmplY3QgdG8gQ09SRUFE RFIuICAqLworCitzdGF0aWMgaW50CitweXV3X3ZhbHVlX29ial90b19wb2lu dGVyIChQeU9iamVjdCAqcHlvX3ZhbHVlLCBDT1JFX0FERFIgKmFkZHIpCit7 CisgIHN0cnVjdCB2YWx1ZSAqdmFsdWUgPSB2YWx1ZV9vYmplY3RfdG9fdmFs dWUgKHB5b192YWx1ZSk7CisKKyAgaWYgKHZhbHVlID09IE5VTEwpCisgICAg cmV0dXJuIDA7CisgICphZGRyID0gdW5wYWNrX3BvaW50ZXIgKHZhbHVlX3R5 cGUgKHZhbHVlKSwgdmFsdWVfY29udGVudHMgKHZhbHVlKSk7CisgIHJldHVy biAxOworfQorCisvKiBDYWxsZWQgYnkgdGhlIFB5dGhvbiBpbnRlcnByZXRl ciB0byBvYnRhaW4gc3RyaW5nIHJlcHJlc2VudGF0aW9uCisgICBvZiB0aGUg VW53aW5kSW5mbyBvYmplY3QuICAqLworCitzdGF0aWMgUHlPYmplY3QgKgor dW53aW5kX2luZm9weV9zdHIgKFB5T2JqZWN0ICpzZWxmKQoreworICBQeU9i amVjdCAqcmVzdWx0OworICBzdHJ1Y3QgdWlfZmlsZSAqc3RyZmlsZSA9IG1l bV9maWxlb3BlbiAoKTsKKyAgdW53aW5kX2luZm9fb2JqZWN0ICp1bndpbmRf aW5mbyA9ICh1bndpbmRfaW5mb19vYmplY3QgKikgc2VsZjsKKyAgc25pZmZl cl9pbmZvX29iamVjdCAqc25pZmZlcl9pbmZvCisgICAgICA9IChzbmlmZmVy X2luZm9fb2JqZWN0ICopICh1bndpbmRfaW5mby0+c25pZmZlcl9pbmZvKTsK KworICBmcHJpbnRmX3VuZmlsdGVyZWQgKHN0cmZpbGUsICJGcmFtZSBJRDog Iik7CisgIGZwcmludF9mcmFtZV9pZCAoc3RyZmlsZSwgdW53aW5kX2luZm8t PmZyYW1lX2lkKTsKKyAgeworICAgIGludCBpOworICAgIGNoYXIgKnNlcCA9 ICIiOworICAgIHN0cnVjdCB2YWx1ZV9wcmludF9vcHRpb25zIG9wdHM7CisK KyAgICBnZXRfdXNlcl9wcmludF9vcHRpb25zICgmb3B0cyk7CisgICAgZnBy aW50Zl91bmZpbHRlcmVkIChzdHJmaWxlLCAiXG5QcmV2aW91cyBmcmFtZSBy ZWdpc3RlcnM6ICgiKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgdW53aW5kX2lu Zm8tPnByZXZfZnJhbWVfcmVnc19zaXplOyBpKyspCisgICAgICB7CisgICAg ICAgIHN0cnVjdCB2YWx1ZSAqdmFsdWUKKyAgICAgICAgICAgID0gdmFsdWVf b2JqZWN0X3RvX3ZhbHVlICh1bndpbmRfaW5mby0+cHJldl9mcmFtZV9yZWdz W2ldLnZhbHVlKTsKKworICAgICAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKHN0 cmZpbGUsICIlcyglZCwgIiwgc2VwLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHVud2luZF9pbmZvLT5wcmV2X2ZyYW1lX3JlZ3NbaV0ubnVtYmVy KTsKKyAgICAgICAgaWYgKHZhbHVlICE9IE5VTEwpCisgICAgICAgICAgewor ICAgICAgICAgICAgdmFsdWVfcHJpbnQgKHZhbHVlLCBzdHJmaWxlLCAmb3B0 cyk7CisgICAgICAgICAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKHN0cmZpbGUs ICIpIik7CisgICAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAg ZnByaW50Zl91bmZpbHRlcmVkIChzdHJmaWxlLCAiPEJBRD4pIik7CisgICAg ICAgIHNlcCA9ICIsICI7CisgICAgICB9CisgICAgZnByaW50Zl91bmZpbHRl cmVkIChzdHJmaWxlLCAiKSIpOworICB9CisgIHsKKyAgICBjaGFyICpzID0g dWlfZmlsZV94c3RyZHVwIChzdHJmaWxlLCBOVUxMKTsKKworICAgIHJlc3Vs dCA9IFB5U3RyaW5nX0Zyb21TdHJpbmcgKHMpOworICAgIHhmcmVlIChzKTsK KyAgfQorICB1aV9maWxlX2RlbGV0ZSAoc3RyZmlsZSk7CisgIHJldHVybiBy ZXN1bHQ7Cit9CisKKy8qIENyZWF0ZSBVbndpbmRJbmZvIGluc3RhbmNlIGZv ciBnaXZlbiBTbmlmZmVySW5mbyBhbmQgZnJhbWUgSUQuICAqLworCitzdGF0 aWMgUHlPYmplY3QgKgorcHl1d19jcmVhdGVfdW53aW5kX2luZm8gKFB5T2Jq ZWN0ICpweW9fc25pZmZlcl9pbmZvLAorICAgICAgICAgICAgICAgICAgICAg ICAgIHN0cnVjdCBmcmFtZV9pZCBmcmFtZV9pZCkKK3sKKyAgdW53aW5kX2lu Zm9fb2JqZWN0ICp1bndpbmRfaW5mbworICAgICAgPSBQeU9iamVjdF9OZXcg KHVud2luZF9pbmZvX29iamVjdCwgJnVud2luZF9pbmZvX29iamVjdF90eXBl KTsKKworICBpZiAoKChzbmlmZmVyX2luZm9fb2JqZWN0ICopIHB5b19zbmlm ZmVyX2luZm8pLT5mcmFtZV9pbmZvID09IE5VTEwpCisgICAgeworICAgICAg UHlFcnJfU2V0U3RyaW5nIChQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAg ICAgICAgICAgICAgICAiQXR0ZW1wdGluZyB0byB1c2Ugc3RhbGUgU25pZmZl ckluZm8iKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgdW53aW5k X2luZm8tPmZyYW1lX2lkID0gZnJhbWVfaWQ7CisgIFB5X0lOQ1JFRiAocHlv X3NuaWZmZXJfaW5mbyk7CisgIHVud2luZF9pbmZvLT5zbmlmZmVyX2luZm8g PSBweW9fc25pZmZlcl9pbmZvOworICB1bndpbmRfaW5mby0+cHJldl9mcmFt ZV9yZWdzX3NpemUgPSAwOworICB1bndpbmRfaW5mby0+cHJldl9mcmFtZV9y ZWdzX2NhcGFjaXR5ID0gNDsKKyAgdW53aW5kX2luZm8tPnByZXZfZnJhbWVf cmVncyA9CisgICAgICB4bWFsbG9jICh1bndpbmRfaW5mby0+cHJldl9mcmFt ZV9yZWdzX2NhcGFjaXR5ICoKKyAgICAgICAgICAgICAgIHNpemVvZiAodW53 aW5kX2luZm8tPnByZXZfZnJhbWVfcmVnc1swXSkpOworICByZXR1cm4gKFB5 T2JqZWN0ICopIHVud2luZF9pbmZvOworfQorCisvKiBUaGUgaW1wbGVtZW50 YXRpb24gb2YKKyAgIGdkYi5VbndpbmRJbmZvLnNldF9wcmV2aW91c19mcmFt ZV9yZWdpc3RlciAoUkVHLCBWQUxVRSkgLT4gTm9uZS4gICovCisKK3N0YXRp YyBQeU9iamVjdCAqCit1bndpbmRfaW5mb3B5X3NldF9wcmV2aW91c19mcmFt ZV9yZWdpc3RlciAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQor eworICB1bndpbmRfaW5mb19vYmplY3QgKnVud2luZF9pbmZvID0gKHVud2lu ZF9pbmZvX29iamVjdCAqKSBzZWxmOworICBzbmlmZmVyX2luZm9fb2JqZWN0 ICpzbmlmZmVyX2luZm8KKyAgICAgID0gKHNuaWZmZXJfaW5mb19vYmplY3Qg KikgKHVud2luZF9pbmZvLT5zbmlmZmVyX2luZm8pOworICBQeU9iamVjdCAq cHlvX3JlZ19pZDsKKyAgUHlPYmplY3QgKnB5b19yZWdfdmFsdWU7CisgIGlu dCByZWdudW07CisKKyAgaWYgKHNuaWZmZXJfaW5mby0+ZnJhbWVfaW5mbyA9 PSBOVUxMKQorICAgIHsKKyAgICAgIFB5RXJyX1NldFN0cmluZyAoUHlFeGNf VmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgIkF0dGVtcHRp bmcgdG8gcmVhZCByZWdpc3RlciBmcm9tIHN0YWxlIFNuaWZmZXJJbmZvIik7 CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgIGlmICghUHlBcmdfVW5w YWNrVHVwbGUgKGFyZ3MsICJwcmV2aW91c19mcmFtZV9yZWdpc3RlciIsIDIs IDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZweW9fcmVnX2lkLCAm cHlvX3JlZ192YWx1ZSkpCisgICAgcmV0dXJuIE5VTEw7CisgIGlmICghcHl1 d19wYXJzZV9yZWdpc3Rlcl9pZCAoc25pZmZlcl9pbmZvLT5nZGJhcmNoLCBw eW9fcmVnX2lkLCAmcmVnbnVtKSkKKyAgICB7CisgICAgICBQeUVycl9TZXRT dHJpbmcgKFB5RXhjX1ZhbHVlRXJyb3IsICJCYWQgcmVnaXN0ZXIiKTsKKyAg ICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgeworICAgIHN0cnVjdCB2YWx1 ZSAqdmFsdWU7CisgICAgc2l6ZV90IGRhdGFfc2l6ZTsKKworICAgIGlmIChw eW9fcmVnX3ZhbHVlID09IE5VTEwKKyAgICAgIHx8ICh2YWx1ZSA9IHZhbHVl X29iamVjdF90b192YWx1ZSAocHlvX3JlZ192YWx1ZSkpID09IE5VTEwpCisg ICAgICB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyAoUHlFeGNfVmFsdWVF cnJvciwgIkJhZCByZWdpc3RlciB2YWx1ZSIpOworICAgICAgICByZXR1cm4g TlVMTDsKKyAgICAgIH0KKyAgICBkYXRhX3NpemUgPSByZWdpc3Rlcl9zaXpl IChzbmlmZmVyX2luZm8tPmdkYmFyY2gsIHJlZ251bSk7CisgICAgaWYgKGRh dGFfc2l6ZSAhPSBUWVBFX0xFTkdUSCAodmFsdWVfZW5jbG9zaW5nX3R5cGUg KHZhbHVlKSkpCisgICAgICB7CisgICAgICAgIFB5RXJyX0Zvcm1hdCAoCisg ICAgICAgICAgICBQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgIlRo ZSB2YWx1ZSBvZiB0aGUgcmVnaXN0ZXIgcmV0dXJuZWQgYnkgdGhlIFB5dGhv biAiCisgICAgICAgICAgICAic25pZmZlciBoYXMgdW5leHBlY3RlZCBzaXpl OiAldSBpbnN0ZWFkIG9mICV1LiIsCisgICAgICAgICAgICAodW5zaWduZWQp IChUWVBFX0xFTkdUSCAodmFsdWVfZW5jbG9zaW5nX3R5cGUgKHZhbHVlKSkp LAorICAgICAgICAgICAgKHVuc2lnbmVkKSBkYXRhX3NpemUpOworICAgICAg ICByZXR1cm4gTlVMTDsKKyAgICAgIH0KKyAgfQorICB7CisgICAgaW50IGk7 CisKKyAgICBmb3IgKGkgPSAwOworICAgICAgICAgKGkgPCB1bndpbmRfaW5m by0+cHJldl9mcmFtZV9yZWdzX3NpemUpCisgICAgICAgICAgICAgJiYgcmVn bnVtICE9IHVud2luZF9pbmZvLT5wcmV2X2ZyYW1lX3JlZ3NbaV0ubnVtYmVy OyBpKyspCisgICAgICA7CisgICAgaWYgKGkgPCB1bndpbmRfaW5mby0+cHJl dl9mcmFtZV9yZWdzX3NpemUpCisgICAgICBQeV9ERUNSRUYgKHVud2luZF9p bmZvLT5wcmV2X2ZyYW1lX3JlZ3NbaV0udmFsdWUpOworICAgIGVsc2UKKyAg ICAgIHsKKyAgICAgICAgaWYgKGkgPj0gdW53aW5kX2luZm8tPnByZXZfZnJh bWVfcmVnc19jYXBhY2l0eSkKKyAgICAgICAgICB7CisgICAgICAgICAgICB1 bndpbmRfaW5mby0+cHJldl9mcmFtZV9yZWdzX2NhcGFjaXR5ICo9IDI7Cisg ICAgICAgICAgICB1bndpbmRfaW5mby0+cHJldl9mcmFtZV9yZWdzID0geHJl YWxsb2MKKyAgICAgICAgICAgICAgICAodW53aW5kX2luZm8tPnByZXZfZnJh bWVfcmVncywKKyAgICAgICAgICAgICAgICAgdW53aW5kX2luZm8tPnByZXZf ZnJhbWVfcmVnc19jYXBhY2l0eQorICAgICAgICAgICAgICAgICAqIHNpemVv ZiAodW53aW5kX2luZm8tPnByZXZfZnJhbWVfcmVnc1swXSkpOworICAgICAg ICAgIH0KKyAgICAgICAgdW53aW5kX2luZm8tPnByZXZfZnJhbWVfcmVnc19z aXplKys7CisgICAgICAgIHVud2luZF9pbmZvLT5wcmV2X2ZyYW1lX3JlZ3Nb aV0ubnVtYmVyID0gcmVnbnVtOworICAgICAgfQorICAgIFB5X0lOQ1JFRiAo cHlvX3JlZ192YWx1ZSk7CisgICAgdW53aW5kX2luZm8tPnByZXZfZnJhbWVf cmVnc1tpXS52YWx1ZSA9IHB5b19yZWdfdmFsdWU7CisgIH0KKyAgUHlfSU5D UkVGIChQeV9Ob25lKTsKKyAgcmV0dXJuIFB5X05vbmU7Cit9CisKKy8qIFVu d2luZEluZm8gY2xlYW51cC4gICovCisKK3N0YXRpYyB2b2lkCit1bndpbmRf aW5mb3B5X2RlYWxsb2MgKFB5T2JqZWN0ICpzZWxmKQoreworICB1bndpbmRf aW5mb19vYmplY3QgKnVud2luZF9pbmZvID0gKHVud2luZF9pbmZvX29iamVj dCAqKSBzZWxmOworICBpbnQgaTsKKworICBQeV9YREVDUkVGICh1bndpbmRf aW5mby0+c25pZmZlcl9pbmZvKTsKKyAgZm9yIChpID0gMDsgaSA8IHVud2lu ZF9pbmZvLT5wcmV2X2ZyYW1lX3JlZ3Nfc2l6ZTsgaSsrKQorICAgICAgUHlf REVDUkVGICh1bndpbmRfaW5mby0+cHJldl9mcmFtZV9yZWdzW2ldLnZhbHVl KTsKKyAgeGZyZWUgKHVud2luZF9pbmZvLT5wcmV2X2ZyYW1lX3JlZ3MpOwor ICBQeV9UWVBFIChzZWxmKS0+dHBfZnJlZSAoc2VsZik7Cit9CisKKy8qIENh bGxlZCBieSB0aGUgUHl0aG9uIGludGVycHJldGVyIHRvIG9idGFpbiBzdHJp bmcgcmVwcmVzZW50YXRpb24KKyAgIG9mIHRoZSBTbmlmZmVySW5mbyBvYmpl Y3QuICAqLworCitzdGF0aWMgUHlPYmplY3QgKgorc25pZmZlcl9pbmZvcHlf c3RyIChQeU9iamVjdCAqc2VsZikKK3sKKyAgc3RydWN0IGZyYW1lX2luZm8g KmZyYW1lID0gKChzbmlmZmVyX2luZm9fb2JqZWN0ICopIHNlbGYpLT5mcmFt ZV9pbmZvOworCisgIGlmIChmcmFtZSA9PSBOVUxMKQorICAgIHJldHVybiBQ eVN0cmluZ19Gcm9tU3RyaW5nICgiU3RhbGUgU25pZmZlckluZm8gaW5zdGFu Y2UiKTsKKyAgcmV0dXJuIFB5U3RyaW5nX0Zyb21Gb3JtYXQgKCJTUD0lcyxQ Qz0lcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlX2Fk ZHJfdG9fc3RyaW5nX256IChnZXRfZnJhbWVfc3AgKGZyYW1lKSksCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlX2FkZHJfdG9fc3RyaW5n X256IChnZXRfZnJhbWVfcGMgKGZyYW1lKSkpOworfQorCisvKiBJbXBsZW1l bnRhdGlvbiBvZiBnZGIuU25pZmZlckluZm8ucmVhZF9yZWdpc3RlciAoc2Vs ZiwgcmVnbnVtKSAtPiBnZGIuVmFsdWUuCisgICBSZXR1cm5zIHRoZSB2YWx1 ZSBvZiByZWdpc3RlciBSRUdOVU0gYXMgZ2RiLlZhbHVlIGluc3RhbmNlLiAg Ki8KKworc3RhdGljIFB5T2JqZWN0ICoKK3NuaWZmZXJfaW5mb3B5X3JlYWRf cmVnaXN0ZXIgKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sK KyAgdm9sYXRpbGUgc3RydWN0IGdkYl9leGNlcHRpb24gZXhjZXB0OworICBp bnQgcmVnbnVtOworICBzdHJ1Y3QgdmFsdWUgKnZhbCA9IE5VTEw7CisgIHNu aWZmZXJfaW5mb19vYmplY3QgKnNuaWZmZXJfaW5mbyA9IChzbmlmZmVyX2lu Zm9fb2JqZWN0ICopIHNlbGY7CisgIFB5T2JqZWN0ICpweW9fcmVnX2lkOwor CisgIGlmIChzbmlmZmVyX2luZm8tPmZyYW1lX2luZm8gPT0gTlVMTCkKKyAg ICB7CisgICAgICBQeUVycl9TZXRTdHJpbmcgKFB5RXhjX1ZhbHVlRXJyb3Is CisgICAgICAgICAgICAgICAgICAgICAgICJBdHRlbXB0aW5nIHRvIHJlYWQg cmVnaXN0ZXIgZnJvbSBzdGFsZSBTbmlmZmVySW5mbyIpOworICAgICAgcmV0 dXJuIE5VTEw7CisgICAgfQorCisgIGlmICghUHlBcmdfVW5wYWNrVHVwbGUg KGFyZ3MsICJyZWFkX3JlZ2lzdGVyIiwgMSwgMSwgJnB5b19yZWdfaWQpKQor ICAgIHJldHVybiBOVUxMOworICBpZiAoIXB5dXdfcGFyc2VfcmVnaXN0ZXJf aWQgKHNuaWZmZXJfaW5mby0+Z2RiYXJjaCwgcHlvX3JlZ19pZCwgJnJlZ251 bSkpCisgICAgeworICAgICAgUHlFcnJfU2V0U3RyaW5nIChQeUV4Y19WYWx1 ZUVycm9yLCAiQmFkIHJlZ2lzdGVyIik7CisgICAgICByZXR1cm4gTlVMTDsK KyAgICB9CisgIFRSWQorICAgIHsKKyAgICAgIGdkYl9ieXRlIGJ1ZmZlcltN QVhfUkVHSVNURVJfU0laRV07CisKKyAgICAgIHZhbCA9IGdldF9mcmFtZV9y ZWdpc3Rlcl92YWx1ZSAoCisgICAgICAgICAgKChzbmlmZmVyX2luZm9fb2Jq ZWN0ICopIHNlbGYpLT5mcmFtZV9pbmZvLCByZWdudW0pOworICAgICAgaWYg KHZhbCA9PSBOVUxMKQorICAgICAgICBQeUVycl9Gb3JtYXQgKFB5RXhjX1Zh bHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgIkNhbm5vdCByZWFk IHJlZ2lzdGVyICVkIGZyb20gZnJhbWUuIiwKKyAgICAgICAgICAgICAgICAg ICAgICByZWdudW0pOworICAgIH0KKyAgQ0FUQ0ggKGV4Y2VwdCwgUkVUVVJO X01BU0tfQUxMKQorICAgIHsKKyAgICAgIEdEQl9QWV9IQU5ETEVfRVhDRVBU SU9OIChleGNlcHQpOworICAgIH0KKyAgRU5EX0NBVENICisKKyAgcmV0dXJu IHZhbCA9PSBOVUxMID8gTlVMTCA6IHZhbHVlX3RvX3ZhbHVlX29iamVjdCAo dmFsKTsKK30KKworLyogSW1wbGVtZW50YXRpb24gb2YKKyAgIGdkYi5Tbmlm ZmVySW5mby51bndpbmRfaW5mb193aXRoX2lkIChzZWxmLCBTUCwgUEMpIC0+ IE5vbmUuICAqLworCitzdGF0aWMgUHlPYmplY3QgKgorc25pZmZlcl9pbmZv cHlfdW53aW5kX2luZm9fd2l0aF9pZCAoUHlPYmplY3QgKnNlbGYsIFB5T2Jq ZWN0ICphcmdzKQoreworICBQeU9iamVjdCAqcHlvX3NwOworICBQeU9iamVj dCAqcHlvX3BjOworICBDT1JFX0FERFIgc3A7CisgIENPUkVfQUREUiBwYzsK KworICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUgKGFyZ3MsICJPTzp1bndpbmRf aW5mb193aXRoX2lkIiwgJnB5b19zcCwgJnB5b19wYykKKyAgICAgICB8fCAh cHl1d192YWx1ZV9vYmpfdG9fcG9pbnRlciAocHlvX3NwLCAmc3ApCisgICAg ICAgfHwgIXB5dXdfdmFsdWVfb2JqX3RvX3BvaW50ZXIgKHB5b19wYywgJnBj KSkKKyAgICByZXR1cm4gTlVMTDsKKworICByZXR1cm4gcHl1d19jcmVhdGVf dW53aW5kX2luZm8gKHNlbGYsIGZyYW1lX2lkX2J1aWxkIChzcCwgcGMpKTsK K30KKworLyogSW1wbGVtZW50YXRpb24gb2YKKyAgIGdkYi5TbmlmZmVySW5m by51bndpbmRfaW5mb193aXRoX2lkX3NwZWNpYWwgKHNlbGYsIFNQLCBQQywg U1BFQ0lBTCkgLT4gTm9uZS4gICovCisKK3N0YXRpYyBQeU9iamVjdCAqCitz bmlmZmVyX2luZm9weV91bndpbmRfaW5mb193aXRoX2lkX3NwZWNpYWwgKFB5 T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgUHlPYmplY3Qg KnB5b19zcDsKKyAgUHlPYmplY3QgKnB5b19wYzsKKyAgUHlPYmplY3QgKnB5 b19zcGVjaWFsOworICBDT1JFX0FERFIgc3A7CisgIENPUkVfQUREUiBwYzsK KyAgQ09SRV9BRERSIHNwZWNpYWw7CisKKyAgaWYgKCFQeUFyZ19QYXJzZVR1 cGxlIChhcmdzLCAiT09POnVud2luZF9pbmZvX3dpdGhfaWRfc3BlY2lhbCIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICZweW9fc3AsICZweW9fcGMs ICZweW9fc3BlY2lhbCkKKyAgICAgIHx8ICFweXV3X3ZhbHVlX29ial90b19w b2ludGVyIChweW9fc3AsICZzcCkKKyAgICAgIHx8ICFweXV3X3ZhbHVlX29i al90b19wb2ludGVyIChweW9fcGMsICZwYykKKyAgICAgIHx8ICFweXV3X3Zh bHVlX29ial90b19wb2ludGVyIChweW9fc3BlY2lhbCwgJnNwZWNpYWwpKQor ICAgIHJldHVybiBOVUxMOworCisgIHJldHVybiBweXV3X2NyZWF0ZV91bndp bmRfaW5mbyAoc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBmcmFtZV9pZF9idWlsZF9zcGVjaWFsIChzcCwgcGMsIHNwZWNpYWwp KTsKK30KKworLyogSW1wbGVtZW50YXRpb24gb2YKKyAgIGdkYi5TbmlmZmVy SW5mby51bndpbmRfaW5mb193aXRoX2lkX3dpbGQgKHNlbGYsIFNQKSAtPiBO b25lLiAgKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK3NuaWZmZXJfaW5mb3B5 X3Vud2luZF9pbmZvX3dpdGhfaWRfd2lsZCAoUHlPYmplY3QgKnNlbGYsIFB5 T2JqZWN0ICphcmdzKQoreworICBQeU9iamVjdCAqcHlvX3NwOworICBDT1JF X0FERFIgc3A7CisKKyAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlIChhcmdzLCAi Tzp1bndpbmRfaW5mb193aXRoX2lkX3dpbGQiLCAmcHlvX3NwKQorICAgICAg fHwgIXB5dXdfdmFsdWVfb2JqX3RvX3BvaW50ZXIgKHB5b19zcCwgJnNwKSkK KyAgICByZXR1cm4gTlVMTDsKKworICByZXR1cm4gcHl1d19jcmVhdGVfdW53 aW5kX2luZm8gKHNlbGYsIGZyYW1lX2lkX2J1aWxkX3dpbGQgKHNwKSk7Cit9 CisKKy8qIENyZWF0ZSBQeXRob24gU25pZmZlckluZm8gb2JqZWN0LiAgKi8K Kworc3RhdGljIFB5T2JqZWN0ICoKK2ZyYW1lX2luZm9fdG9fc25pZmZlcl9p bmZvX29iamVjdCAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBmcmFtZV9pbmZv ICpmcmFtZSkKK3sKKyAgc25pZmZlcl9pbmZvX29iamVjdCAqc25pZmZlcl9p bmZvCisgICAgICA9IFB5T2JqZWN0X05ldyAoc25pZmZlcl9pbmZvX29iamVj dCwgJnNuaWZmZXJfaW5mb19vYmplY3RfdHlwZSk7CisKKyAgc25pZmZlcl9p bmZvLT5nZGJhcmNoID0gZ2RiYXJjaDsKKyAgc25pZmZlcl9pbmZvLT5mcmFt ZV9pbmZvID0gZnJhbWU7CisgIHJldHVybiAoUHlPYmplY3QgKikgc25pZmZl cl9pbmZvOworfQorCisvKiBJbnZhbGlkYXRlIFNuaWZmZXJJbmZvIG9iamVj dC4gICovCitzdGF0aWMgdm9pZAorc25pZmZlcl9pbmZvX2ludmFsaWRhdGUg KFB5T2JqZWN0ICpweW9fc25pZmZlcl9pbmZvKQoreworICBpZiAocHlvX3Nu aWZmZXJfaW5mbyA9PSBOVUxMKQorICAgIHJldHVybjsKKyAgKChzbmlmZmVy X2luZm9fb2JqZWN0ICopIHB5b19zbmlmZmVyX2luZm8pLT5mcmFtZV9pbmZv ID0gTlVMTDsKK30KKworLyogZnJhbWVfdW53aW5kLnRoaXNfaWQgbWV0aG9k LiAgKi8KKworc3RhdGljIHZvaWQKK3B5dXdfdGhpc19pZCAoc3RydWN0IGZy YW1lX2luZm8gKnRoaXNfZnJhbWUsIHZvaWQgKipjYWNoZV9wdHIsCisgICAg ICAgICAgICAgIHN0cnVjdCBmcmFtZV9pZCAqdGhpc19pZCkKK3sKKyAgKnRo aXNfaWQgPSAoKGNhY2hlZF9mcmFtZV9pbmZvICopICpjYWNoZV9wdHIpLT5m cmFtZV9pZDsKKyAgaWYgKHB5dXdfZGVidWcgPj0gMSkKKyAgICB7CisgICAg ICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csICIlczogZnJhbWVf aWQ6ICIsIF9fRlVOQ1RJT05fXyk7CisgICAgICBmcHJpbnRfZnJhbWVfaWQg KGdkYl9zdGRsb2csICp0aGlzX2lkKTsKKyAgICAgIGZwcmludGZfdW5maWx0 ZXJlZCAoZ2RiX3N0ZGxvZywgIlxuIik7CisgICAgfQorfQorCisvKiBmcmFt ZV91bndpbmQucHJldl9yZWdpc3Rlci4gICovCisKK3N0YXRpYyBzdHJ1Y3Qg dmFsdWUgKgorcHl1d19wcmV2X3JlZ2lzdGVyIChzdHJ1Y3QgZnJhbWVfaW5m byAqdGhpc19mcmFtZSwgdm9pZCAqKmNhY2hlX3B0ciwKKyAgICAgICAgICAg ICAgICAgICAgaW50IHJlZ251bSkKK3sKKyAgY2FjaGVkX2ZyYW1lX2luZm8g KmNhY2hlZF9mcmFtZSA9ICpjYWNoZV9wdHI7CisgIHN0cnVjdCByZWdfaW5m byAqcmVnX2luZm8gPSBjYWNoZWRfZnJhbWUtPnJlZzsKKyAgc3RydWN0IHJl Z19pbmZvICpyZWdfaW5mb19lbmQgPSByZWdfaW5mbyArIGNhY2hlZF9mcmFt ZS0+cmVnX2NvdW50OworCisgIFRSQUNFX1BZX1VOV0lORCAoMSwgIiVzIChm cmFtZT0lcCwuLi4scmVnPSVkKVxuIiwgX19GVU5DVElPTl9fLCB0aGlzX2Zy YW1lLAorICAgICAgICAgICAgICAgICAgIHJlZ251bSk7CisgIGZvciAoOyBy ZWdfaW5mbyA8IHJlZ19pbmZvX2VuZDsgKytyZWdfaW5mbykKKyAgICB7Cisg ICAgICBpZiAocmVnbnVtID09IHJlZ19pbmZvLT5udW1iZXIpCisgICAgICAg IHJldHVybiBmcmFtZV91bndpbmRfZ290X2J5dGVzICh0aGlzX2ZyYW1lLCBy ZWdudW0sIHJlZ19pbmZvLT5kYXRhKTsKKyAgICB9CisKKyAgcmV0dXJuIGZy YW1lX3Vud2luZF9nb3Rfb3B0aW1pemVkICh0aGlzX2ZyYW1lLCByZWdudW0p OworfQorCisvKiBGcmFtZSBzbmlmZmVyIGRpc3BhdGNoLiAgKi8KKworc3Rh dGljIGludAorcHl1d19zbmlmZmVyIChjb25zdCBzdHJ1Y3QgZnJhbWVfdW53 aW5kICpzZWxmLCBzdHJ1Y3QgZnJhbWVfaW5mbyAqdGhpc19mcmFtZSwKKyAg ICAgICAgICAgICAgdm9pZCAqKmNhY2hlX3B0cikKK3sKKyAgc3RydWN0IGdk YmFyY2ggKmdkYmFyY2g7CisgIHN0cnVjdCBjbGVhbnVwICpjbGVhbnVwczsK KyAgc3RydWN0IGNsZWFudXAgKmNhY2hlZF9mcmFtZV9jbGVhbnVwczsKKyAg UHlPYmplY3QgKnB5b19tb2R1bGU7CisgIFB5T2JqZWN0ICpweW9fZXhlY3V0 ZTsKKyAgUHlPYmplY3QgKnB5b19zbmlmZmVyX2luZm87CisgIFB5T2JqZWN0 ICpweW9fdW53aW5kX2luZm87CisgIGNhY2hlZF9mcmFtZV9pbmZvICpjYWNo ZWRfZnJhbWUgPSBOVUxMOworCisgIGdkYmFyY2ggPSAoc3RydWN0IGdkYmFy Y2ggKikgKHNlbGYtPnVud2luZF9kYXRhKTsKKyAgY2xlYW51cHMgPSBlbnN1 cmVfcHl0aG9uX2VudiAoZ2RiYXJjaCwgY3VycmVudF9sYW5ndWFnZSk7Cisg IFRSQUNFX1BZX1VOV0lORCAoMywgIiVzIChTUD0lcywgUEM9JXMpXG4iLCBf X0ZVTkNUSU9OX18sCisgICAgICAgICAgICAgICAgICAgcGFkZHJlc3MgKGdk YmFyY2gsIGdldF9mcmFtZV9zcCAodGhpc19mcmFtZSkpLAorICAgICAgICAg ICAgICAgICAgIHBhZGRyZXNzIChnZGJhcmNoLCBnZXRfZnJhbWVfcGMgKHRo aXNfZnJhbWUpKSk7CisgIHB5b19zbmlmZmVyX2luZm8gPSBmcmFtZV9pbmZv X3RvX3NuaWZmZXJfaW5mb19vYmplY3QgKGdkYmFyY2gsIHRoaXNfZnJhbWUp OworICBpZiAocHlvX3NuaWZmZXJfaW5mbyA9PSBOVUxMKQorICAgIGdvdG8g ZXJyb3I7CisgIG1ha2VfY2xlYW51cF9weV9kZWNyZWYgKHB5b19zbmlmZmVy X2luZm8pOworCisgIGlmICgocHlvX21vZHVsZSA9IFB5SW1wb3J0X0ltcG9y dE1vZHVsZSAoImdkYi5mdW5jdGlvbi5zbmlmZmVycyIpKSA9PSBOVUxMKQor ICAgIGdvdG8gZXJyb3I7CisgIG1ha2VfY2xlYW51cF9weV9kZWNyZWYgKHB5 b19tb2R1bGUpOworCisgIHB5b19leGVjdXRlID0gUHlPYmplY3RfR2V0QXR0 clN0cmluZyAocHlvX21vZHVsZSwgImV4ZWN1dGVfc25pZmZlcnMiKTsKKyAg aWYgKHB5b19leGVjdXRlID09IE5VTEwpCisgICAgZ290byBlcnJvcjsKKyAg bWFrZV9jbGVhbnVwX3B5X2RlY3JlZiAocHlvX2V4ZWN1dGUpOworCisgIHB5 b191bndpbmRfaW5mbworICAgICAgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25P YmpBcmdzIChweW9fZXhlY3V0ZSwgcHlvX3NuaWZmZXJfaW5mbywgTlVMTCk7 CisgIGlmIChweW9fdW53aW5kX2luZm8gPT0gTlVMTCkKKyAgICBnb3RvIGVy cm9yOworICBtYWtlX2NsZWFudXBfcHlfZGVjcmVmIChweW9fdW53aW5kX2lu Zm8pOworICBpZiAocHlvX3Vud2luZF9pbmZvID09IFB5X05vbmUpCisgICAg Z290byBlcnJvcjsKKyAgaWYgKFB5T2JqZWN0X0lzSW5zdGFuY2UgKHB5b191 bndpbmRfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChQeU9i amVjdCAqKSAmdW53aW5kX2luZm9fb2JqZWN0X3R5cGUpIDw9IDApCisgICAg ZXJyb3IgKF8oIkEgU25pZmZlciBzaG91bGQgcmV0dXJuIGdkYi5VbndpbmRJ bmZvIGluc3RhbmNlLiIpKTsKKworICB7CisgICAgdW53aW5kX2luZm9fb2Jq ZWN0ICp1bndpbmRfaW5mbyA9ICh1bndpbmRfaW5mb19vYmplY3QgKikgcHlv X3Vud2luZF9pbmZvOworICAgIGludCBpOworICAgIGludCByZWdfY291bnQ7 CisgICAgc2l6ZV90IGNhY2hlZF9mcmFtZV9zaXplOworICAgIHNpemVfdCBn ZGJfYnl0ZXNfY291bnQ7CisgICAgZ2RiX2J5dGUgKmdkYl9kYXRhX2ZyZWUs ICpnZGJfZGF0YV9lbmQ7CisKKyAgICAvKiBGaWd1cmUgb3V0IGhvdyBtdWNo IHNwYWNlIHdlIG5lZWQgdG8gYWxsb2NhdGUuICAqLworICAgIHJlZ19jb3Vu dCA9IHVud2luZF9pbmZvLT5wcmV2X2ZyYW1lX3JlZ3Nfc2l6ZTsKKyAgICBn ZGJfYnl0ZXNfY291bnQgPSByZWdfY291bnQgKiBNQVhfUkVHSVNURVJfU0la RTsKKyAgICBjYWNoZWRfZnJhbWVfc2l6ZSA9IHNpemVvZiAoKmNhY2hlZF9m cmFtZSkgKworICAgICAgICByZWdfY291bnQgKiBzaXplb2YgKGNhY2hlZF9m cmFtZS0+cmVnWzBdKSArCisgICAgICAgIGdkYl9ieXRlc19jb3VudCAqIHNp emVvZiAoZ2RiX2J5dGUpOworCisgICAgY2FjaGVkX2ZyYW1lID0geG1hbGxv YyAoY2FjaGVkX2ZyYW1lX3NpemUpOworICAgIGNhY2hlZF9mcmFtZV9jbGVh bnVwcyA9IG1ha2VfY2xlYW51cCAoeGZyZWUsIGNhY2hlZF9mcmFtZSk7Cisg ICAgLyogQWxsb2NhdGlvbnMgYWZ0ZXIgdGhpcyBwb2ludCB3aWxsIGJlIGRp c2NhcmRlZCEgICovCisKKyAgICBnZGJfZGF0YV9lbmQgPSAoZ2RiX2J5dGUg KikgKChjaGFyICopIGNhY2hlZF9mcmFtZSArIGNhY2hlZF9mcmFtZV9zaXpl KTsKKyAgICBnZGJfZGF0YV9mcmVlID0gZ2RiX2RhdGFfZW5kIC0gZ2RiX2J5 dGVzX2NvdW50OworCisgICAgY2FjaGVkX2ZyYW1lLT5nZGJhcmNoID0gZ2Ri YXJjaDsKKyAgICBjYWNoZWRfZnJhbWUtPmZyYW1lX2lkID0gdW53aW5kX2lu Zm8tPmZyYW1lX2lkOworICAgIGNhY2hlZF9mcmFtZS0+cmVnX2NvdW50ID0g cmVnX2NvdW50OworCisgICAgLyogUG9wdWxhdGUgcmVnaXN0ZXJzIGFycmF5 LiAgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgcmVnX2NvdW50OyBpKyspCisg ICAgICB7CisgICAgICAgIHN0cnVjdCByZWdfaW5mbyAqcmVnID0gJihjYWNo ZWRfZnJhbWUtPnJlZ1tpXSk7CisgICAgICAgIHN0cnVjdCB2YWx1ZSAqdmFs dWUKKyAgICAgICAgICAgID0gdmFsdWVfb2JqZWN0X3RvX3ZhbHVlICh1bndp bmRfaW5mby0+cHJldl9mcmFtZV9yZWdzW2ldLnZhbHVlKTsKKyAgICAgICAg c2l6ZV90IGRhdGFfc2l6ZTsKKworICAgICAgICByZWctPm51bWJlciA9IHVu d2luZF9pbmZvLT5wcmV2X2ZyYW1lX3JlZ3NbaV0ubnVtYmVyOworICAgICAg ICAvKiBgdmFsdWUnIHZhbGlkYXRpb24gd2FzIGRvbmUgYmVmb3JlLCBqdXN0 IGFzc2VydC4gICovCisgICAgICAgIGdkYl9hc3NlcnQgKHZhbHVlICE9IE5V TEwpOworICAgICAgICBkYXRhX3NpemUgPSByZWdpc3Rlcl9zaXplIChnZGJh cmNoLCByZWctPm51bWJlcik7CisgICAgICAgIGdkYl9hc3NlcnQgKGRhdGFf c2l6ZSA9PSBUWVBFX0xFTkdUSCAodmFsdWVfZW5jbG9zaW5nX3R5cGUgKHZh bHVlKSkpOworICAgICAgICAvKiBTaG91bGQgbm90IG92ZXJmbG93ICB0aGUg YnVmZmVyLiAgKi8KKyAgICAgICAgZ2RiX2Fzc2VydCAoKGdkYl9kYXRhX2Zy ZWUgKyBkYXRhX3NpemUpIDw9IGdkYl9kYXRhX2VuZCk7CisgICAgICAgIG1l bWNweSAoZ2RiX2RhdGFfZnJlZSwgdmFsdWVfY29udGVudHMgKHZhbHVlKSwg ZGF0YV9zaXplKTsKKyAgICAgICAgcmVnLT5kYXRhID0gZ2RiX2RhdGFfZnJl ZTsKKyAgICAgICAgZ2RiX2RhdGFfZnJlZSArPSBkYXRhX3NpemU7CisgICAg ICB9CisgIH0KKworICAqY2FjaGVfcHRyID0gY2FjaGVkX2ZyYW1lOworICBk aXNjYXJkX2NsZWFudXBzIChjYWNoZWRfZnJhbWVfY2xlYW51cHMpOworICBk b19jbGVhbnVwcyAoY2xlYW51cHMpOworICBzbmlmZmVyX2luZm9faW52YWxp ZGF0ZSAocHlvX3NuaWZmZXJfaW5mbyk7CisgIHJldHVybiAxOworCitlcnJv cjoKKyAgZG9fY2xlYW51cHMgKGNsZWFudXBzKTsKKyAgc25pZmZlcl9pbmZv X2ludmFsaWRhdGUgKHB5b19zbmlmZmVyX2luZm8pOworICByZXR1cm4gMDsK K30KKworLyogRnJhbWUgY2FjaGUgcmVsZWFzZSBzaGltLiAgKi8KKworc3Rh dGljIHZvaWQKK3B5dXdfZGVhbGxvY19jYWNoZSAoc3RydWN0IGZyYW1lX2lu Zm8gKnRoaXNfZnJhbWUsIHZvaWQgKmNhY2hlKQoreworICBUUkFDRV9QWV9V TldJTkQgKDMsICIlczogZW50ZXIiLCBfX0ZVTkNUSU9OX18pOworICB4ZnJl ZSAoY2FjaGUpOworfQorCitzdHJ1Y3QgcHl1d19nZGJhcmNoX2RhdGFfdHlw ZQoreworICAvKiBIYXMgdGhlIHVud2luZGVyIHNoaW0gYmVlbiBwcmVwZW5k ZWQ/ICovCisgIGludCB1bndpbmRlcl9yZWdpc3RlcmVkOworfTsKKworc3Rh dGljIHZvaWQgKgorcHl1d19nZGJhcmNoX2RhdGFfaW5pdCAoc3RydWN0IGdk YmFyY2ggKmdkYmFyY2gpCit7CisgIHJldHVybiBHREJBUkNIX09CU1RBQ0tf WkFMTE9DIChnZGJhcmNoLCBzdHJ1Y3QgcHl1d19nZGJhcmNoX2RhdGFfdHlw ZSk7Cit9CisKKy8qIE5ldyBpbmZlcmlvciBhcmNoaXRlY3R1cmUgY2FsbGJh Y2s6IHJlZ2lzdGVyIHRoZSBQeXRob24gc25pZmZlcnMKKyAgIGludGVybWVk aWFyeS4gICovCisKK3N0YXRpYyB2b2lkCitweXV3X29uX25ld19nZGJhcmNo IChzdHJ1Y3QgZ2RiYXJjaCAqbmV3YXJjaCkKK3sKKyAgc3RydWN0IHB5dXdf Z2RiYXJjaF9kYXRhX3R5cGUgKmRhdGEgPQorICAgICAgZ2RiYXJjaF9kYXRh IChuZXdhcmNoLCBweXV3X2dkYmFyY2hfZGF0YSk7CisKKyAgaWYgKCFkYXRh LT51bndpbmRlcl9yZWdpc3RlcmVkKQorICAgIHsKKyAgICAgIHN0cnVjdCBm cmFtZV91bndpbmQgKnVud2luZGVyCisgICAgICAgICAgPSBHREJBUkNIX09C U1RBQ0tfWkFMTE9DIChuZXdhcmNoLCBzdHJ1Y3QgZnJhbWVfdW53aW5kKTsK KworICAgICAgdW53aW5kZXItPnR5cGUgPSBOT1JNQUxfRlJBTUU7CisgICAg ICB1bndpbmRlci0+c3RvcF9yZWFzb24gPSBkZWZhdWx0X2ZyYW1lX3Vud2lu ZF9zdG9wX3JlYXNvbjsKKyAgICAgIHVud2luZGVyLT50aGlzX2lkID0gcHl1 d190aGlzX2lkOworICAgICAgdW53aW5kZXItPnByZXZfcmVnaXN0ZXIgPSBw eXV3X3ByZXZfcmVnaXN0ZXI7CisgICAgICB1bndpbmRlci0+dW53aW5kX2Rh dGEgPSAodm9pZCAqKSBuZXdhcmNoOworICAgICAgdW53aW5kZXItPnNuaWZm ZXIgPSBweXV3X3NuaWZmZXI7CisgICAgICB1bndpbmRlci0+ZGVhbGxvY19j YWNoZSA9IHB5dXdfZGVhbGxvY19jYWNoZTsKKyAgICAgIGZyYW1lX3Vud2lu ZF9wcmVwZW5kX3Vud2luZGVyIChuZXdhcmNoLCB1bndpbmRlcik7CisgICAg ICBUUkFDRV9QWV9VTldJTkQgKDEsICIlczogcmVnaXN0ZXJlZCB1bndpbmRl ciBmb3IgJXNcbiIsIF9fRlVOQ1RJT05fXywKKyAgICAgICAgICAgICAgICAg ICAgICAgZ2RiYXJjaF9iZmRfYXJjaF9pbmZvIChuZXdhcmNoKS0+cHJpbnRh YmxlX25hbWUpOworICAgICAgZGF0YS0+dW53aW5kZXJfcmVnaXN0ZXJlZCA9 IDE7CisgICAgfQorfQorCisvKiBJbml0aWFsaXplIHVud2luZCBtYWNoaW5l cnkuICAqLworCitpbnQKK2dkYnB5X2luaXRpYWxpemVfdW53aW5kICh2b2lk KQoreworICBpbnQgcmM7CisgIGFkZF9zZXRzaG93X3p1aW50ZWdlcl9jbWQK KyAgICAgICgicHktdW53aW5kIiwgY2xhc3NfbWFpbnRlbmFuY2UsICZweXV3 X2RlYnVnLAorICAgICAgICBfKCJTZXQgUHl0aG9uIHVud2luZGVyIGRlYnVn Z2luZy4iKSwKKyAgICAgICAgXygiU2hvdyBQeXRob24gdW53aW5kZXIgZGVi dWdnaW5nLiIpLAorICAgICAgICBfKCJXaGVuIG5vbi16ZXJvLCBQeXRoaW4g dW53aW5kZXIgZGVidWdnaW5nIGlzIGVuYWJsZWQuIiksCisgICAgICAgIE5V TEwsCisgICAgICAgIE5VTEwsCisgICAgICAgICZzZXRkZWJ1Z2xpc3QsICZz aG93ZGVidWdsaXN0KTsKKyAgcHl1d19nZGJhcmNoX2RhdGEKKyAgICAgID0g Z2RiYXJjaF9kYXRhX3JlZ2lzdGVyX3Bvc3RfaW5pdCAocHl1d19nZGJhcmNo X2RhdGFfaW5pdCk7CisgIG9ic2VydmVyX2F0dGFjaF9hcmNoaXRlY3R1cmVf Y2hhbmdlZCAocHl1d19vbl9uZXdfZ2RiYXJjaCk7CisKKyAgaWYgKFB5VHlw ZV9SZWFkeSAoJnNuaWZmZXJfaW5mb19vYmplY3RfdHlwZSkgPCAwKQorICAg IHJldHVybiAtMTsKKyAgcmMgPSBnZGJfcHltb2R1bGVfYWRkb2JqZWN0IChn ZGJfbW9kdWxlLCAiU25pZmZlckluZm8iLAorICAgICAgKFB5T2JqZWN0ICop ICZzbmlmZmVyX2luZm9fb2JqZWN0X3R5cGUpOworICBpZiAocmMpCisgICAg cmV0dXJuIHJjOworCisgIGlmIChQeVR5cGVfUmVhZHkgKCZ1bndpbmRfaW5m b19vYmplY3RfdHlwZSkgPCAwKQorICAgIHJldHVybiAtMTsKKyAgcmV0dXJu IGdkYl9weW1vZHVsZV9hZGRvYmplY3QgKGdkYl9tb2R1bGUsICJVbndpbmRJ bmZvIiwKKyAgICAgIChQeU9iamVjdCAqKSAmdW53aW5kX2luZm9fb2JqZWN0 X3R5cGUpOworfQorCitzdGF0aWMgUHlNZXRob2REZWYgc25pZmZlcl9pbmZv X29iamVjdF9tZXRob2RzW10gPQoreworICB7ICJyZWFkX3JlZ2lzdGVyIiwg c25pZmZlcl9pbmZvcHlfcmVhZF9yZWdpc3RlciwgTUVUSF9WQVJBUkdTLAor ICAgICJyZWFkX3JlZ2lzdGVyIChSRUdOVU0pIC0+IGdkYi5WYWx1ZVxuIgor ICAgICJSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBSRUdOVU0gaW4gdGhlIGZy YW1lLiIgfSwKKyAgeyAidW53aW5kX2luZm9fd2l0aF9pZCIsCisgICAgc25p ZmZlcl9pbmZvcHlfdW53aW5kX2luZm9fd2l0aF9pZCwgTUVUSF9WQVJBUkdT LAorICAgICJ1bndpbmRfaW5mb193aXRoX2lkIChTUCwgUEMpIC0+IGdkYi5V bndpbmRJbmZvXG4iCisgICAgIkNvbnN0cnVjdCBVbndpbmRJbmZvIGZvciB0 aGlzIEZyYW1lRGF0YSwgdXNpbmcgZ2l2ZW4gU1AgYW5kIFBDIHJlZ2lzdGVy cyBcbiIKKyAgICAidG8gaWRlbnRpZnkgdGhlIGZyYW1lLiIgfSwKKyAgeyAi dW53aW5kX2luZm9fd2l0aF9pZF9zcGVjaWFsIiwKKyAgICBzbmlmZmVyX2lu Zm9weV91bndpbmRfaW5mb193aXRoX2lkX3NwZWNpYWwsIE1FVEhfVkFSQVJH UywKKyAgICAidW53aW5kX2luZm9fd2l0aF9pZF9zcGVjaWFsIChTUCwgUEMs IFNQRUNJQUwpIC0+IGdkYi5VbndpbmRJbmZvXG4iCisgICAgIkNvbnN0cnVj dCBVbndpbmRJbmZvIGZvciB0aGlzIEZyYW1lRGF0YSwgdXNpbmcgZ2l2ZW4g U1AsIFBDLCBhbmQgU1BFQ0lBTCAiCisgICAgInJlZ2lzdGVycyB0byBpZGVu dGlmeSB0aGUgZnJhbWUuIiB9LAorICB7ICJ1bndpbmRfaW5mb193aXRoX2lk X3dpbGQiLAorICAgIHNuaWZmZXJfaW5mb3B5X3Vud2luZF9pbmZvX3dpdGhf aWRfd2lsZCwgTUVUSF9WQVJBUkdTLAorICAgICJ1bndpbmRfaW5mb193aXRo X2lkX3dpbGQgKFNQKSAtPmdkYi5VbndpbmRJbmZvXG4iCisgICAgIkNvbnN0 cnVjdCBVbndpbmRJbmZvIGZvciB0aGlzIEZyYW1lRGF0YSwgdXNpbmcgZ2l2 ZW4gU1AgcmVnaXN0ZXIgdG8gXG4iCisgICAgImlkZW50aWZ5IHRoZSBmcmFt ZS4iIH0sCisgIHtOVUxMfSAgLyogU2VudGluZWwgKi8KK307CisKK3N0YXRp YyBQeVR5cGVPYmplY3Qgc25pZmZlcl9pbmZvX29iamVjdF90eXBlID0KK3sK KyAgUHlWYXJPYmplY3RfSEVBRF9JTklUIChOVUxMLCAwKQorICAiZ2RiLlNu aWZmZXJJbmZvIiwgICAgICAgICAgICAgIC8qIHRwX25hbWUgKi8KKyAgc2l6 ZW9mIChzbmlmZmVyX2luZm9fb2JqZWN0KSwgICAvKiB0cF9iYXNpY3NpemUg Ki8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9p dGVtc2l6ZSAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIHRwX2RlYWxsb2MgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiB0cF9wcmludCAqLworICAwLCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIHRwX2dldGF0dHIgKi8KKyAgMCwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRyICovCisgIDAsICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY29tcGFyZSAqLwor ICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JlcHIg Ki8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9h c19udW1iZXIgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiB0cF9hc19zZXF1ZW5jZSAqLworICAwLCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIHRwX2FzX21hcHBpbmcgKi8KKyAgMCwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9oYXNoICAqLworICAwLCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NhbGwgKi8KKyAg c25pZmZlcl9pbmZvcHlfc3RyLCAgICAgICAgICAgICAvKiB0cF9zdHIgKi8K KyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRh dHRybyAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IHRwX3NldGF0dHJvICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogdHBfYXNfYnVmZmVyICovCisgIFB5X1RQRkxBR1NfREVGQVVM VCwgICAgICAgICAgICAgLyogdHBfZmxhZ3MgKi8KKyAgIkdEQiBzbmlmZmVy SW5mbyBvYmplY3QiLCAgICAgICAvKiB0cF9kb2MgKi8KKyAgMCwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLworICAw LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICov CisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmlj aGNvbXBhcmUgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLworICAwLCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KKyAgMCwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVybmV4dCAqLworICBzbmlm ZmVyX2luZm9fb2JqZWN0X21ldGhvZHMsICAgIC8qIHRwX21ldGhvZHMgKi8K KyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZW1i ZXJzICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog dHBfZ2V0c2V0ICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogdHBfYmFzZSAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIHRwX2RpY3QgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiB0cF9kZXNjcl9nZXQgKi8KKyAgMCwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9zZXQgKi8KKyAgMCwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0b2Zmc2V0 ICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBf aW5pdCAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IHRwX2FsbG9jICovCit9OworCisKK3N0YXRpYyBQeU1ldGhvZERlZiB1bndp bmRfaW5mb19vYmplY3RfbWV0aG9kc1tdID0KK3sKKyAgeyAic2V0X3ByZXZp b3VzX2ZyYW1lX3JlZ2lzdGVyIiwKKyAgICB1bndpbmRfaW5mb3B5X3NldF9w cmV2aW91c19mcmFtZV9yZWdpc3RlciwgTUVUSF9WQVJBUkdTLAorICAgICJz ZXRfcHJldmlvdXNfZnJhbWVfcmVnaXN0ZXIgKFJFRywgVkFMVUUpIC0+IE5v bmVcbiIKKyAgICAiU2V0IHRoZSB2YWx1ZSBvZiB0aGUgUkVHIGluIHRoZSBw cmV2aW91cyBmcmFtZSB0byBWQUxVRS4iIH0sCisgIHsgTlVMTCB9ICAvKiBT ZW50aW5lbCAqLworfTsKKworc3RhdGljIFB5VHlwZU9iamVjdCB1bndpbmRf aW5mb19vYmplY3RfdHlwZSA9Cit7CisgIFB5VmFyT2JqZWN0X0hFQURfSU5J VCAoTlVMTCwgMCkKKyAgImdkYi5VbndpbmRJbmZvIiwgICAgICAgICAgICAg ICAvKiB0cF9uYW1lICovCisgIHNpemVvZiAodW53aW5kX2luZm9fb2JqZWN0 KSwgICAgLyogdHBfYmFzaWNzaXplICovCisgIDAsICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogdHBfaXRlbXNpemUgKi8KKyAgdW53aW5kX2lu Zm9weV9kZWFsbG9jLCAgICAgICAgICAvKiB0cF9kZWFsbG9jICovCisgIDAs ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcHJpbnQgKi8K KyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRh dHRyICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog dHBfc2V0YXR0ciAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIHRwX2NvbXBhcmUgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiB0cF9yZXByICovCisgIDAsICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogdHBfYXNfbnVtYmVyICovCisgIDAsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfc2VxdWVuY2UgKi8K KyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19t YXBwaW5nICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogdHBfaGFzaCAgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiB0cF9jYWxsICovCisgIHVud2luZF9pbmZvcHlfc3RyLCAgICAg ICAgICAgICAgLyogdHBfc3RyICovCisgIDAsICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogdHBfZ2V0YXR0cm8gKi8KKyAgMCwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRybyAqLworICAwLCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX2J1ZmZlciAq LworICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBF LCAgLyogdHBfZmxhZ3MgKi8KKyAgIkdEQiBVbndpbmRJbmZvIG9iamVjdCIs ICAgICAgICAvKiB0cF9kb2MgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLworICAwLCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCisgIDAsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8K KyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFr bGlzdG9mZnNldCAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIHRwX2l0ZXIgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiB0cF9pdGVybmV4dCAqLworICB1bndpbmRfaW5mb19vYmpl Y3RfbWV0aG9kcywgICAgIC8qIHRwX21ldGhvZHMgKi8KKyAgMCwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZW1iZXJzICovCisgIDAs ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0c2V0ICov CisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFz ZSAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRw X2RpY3QgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiB0cF9kZXNjcl9nZXQgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiB0cF9kZXNjcl9zZXQgKi8KKyAgMCwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0b2Zmc2V0ICovCisgIDAsICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaW5pdCAqLworICAw LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FsbG9jICov Cit9OwpkaWZmIC0tZ2l0IGEvZ2RiL3B5dGhvbi9weXRob24taW50ZXJuYWwu aCBiL2dkYi9weXRob24vcHl0aG9uLWludGVybmFsLmgKaW5kZXggNGM0ZDMy YS4uMTNlMGEyNCAxMDA2NDQKLS0tIGEvZ2RiL3B5dGhvbi9weXRob24taW50 ZXJuYWwuaAorKysgYi9nZGIvcHl0aG9uL3B5dGhvbi1pbnRlcm5hbC5oCkBA IC0zOTEsMTIgKzM5MSwxNCBAQCBQeU9iamVjdCAqcHNwYWNlX3RvX3BzcGFj ZV9vYmplY3QgKHN0cnVjdCBwcm9ncmFtX3NwYWNlICopCiAgICAgQ1BZQ0hF Q0tFUl9SRVRVUk5TX0JPUlJPV0VEX1JFRjsKIFB5T2JqZWN0ICpwc3B5X2dl dF9wcmludGVycyAoUHlPYmplY3QgKiwgdm9pZCAqKTsKIFB5T2JqZWN0ICpw c3B5X2dldF9mcmFtZV9maWx0ZXJzIChQeU9iamVjdCAqLCB2b2lkICopOwor UHlPYmplY3QgKnBzcHlfZ2V0X2ZyYW1lX3NuaWZmZXJzIChQeU9iamVjdCAq LCB2b2lkICopOwogUHlPYmplY3QgKnBzcHlfZ2V0X3htZXRob2RzIChQeU9i amVjdCAqLCB2b2lkICopOwogCiBQeU9iamVjdCAqb2JqZmlsZV90b19vYmpm aWxlX29iamVjdCAoc3RydWN0IG9iamZpbGUgKikKICAgICBDUFlDSEVDS0VS X1JFVFVSTlNfQk9SUk9XRURfUkVGOwogUHlPYmplY3QgKm9iamZweV9nZXRf cHJpbnRlcnMgKFB5T2JqZWN0ICosIHZvaWQgKik7CiBQeU9iamVjdCAqb2Jq ZnB5X2dldF9mcmFtZV9maWx0ZXJzIChQeU9iamVjdCAqLCB2b2lkICopOwor UHlPYmplY3QgKm9iamZweV9nZXRfZnJhbWVfc25pZmZlcnMgKFB5T2JqZWN0 ICosIHZvaWQgKik7CiBQeU9iamVjdCAqb2JqZnB5X2dldF94bWV0aG9kcyAo UHlPYmplY3QgKiwgdm9pZCAqKTsKIFB5T2JqZWN0ICpnZGJweV9sb29rdXBf b2JqZmlsZSAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9i amVjdCAqa3cpOwogCkBAIC00OTEsNiArNDkzLDggQEAgaW50IGdkYnB5X2lu aXRpYWxpemVfYXJjaCAodm9pZCkKICAgQ1BZQ0hFQ0tFUl9ORUdBVElWRV9S RVNVTFRfU0VUU19FWENFUFRJT047CiBpbnQgZ2RicHlfaW5pdGlhbGl6ZV94 bWV0aG9kcyAodm9pZCkKICAgQ1BZQ0hFQ0tFUl9ORUdBVElWRV9SRVNVTFRf U0VUU19FWENFUFRJT047CitpbnQgZ2RicHlfaW5pdGlhbGl6ZV91bndpbmQg KHZvaWQpCisgIENQWUNIRUNLRVJfTkVHQVRJVkVfUkVTVUxUX1NFVFNfRVhD RVBUSU9OOwogCiBzdHJ1Y3QgY2xlYW51cCAqbWFrZV9jbGVhbnVwX3B5X2Rl Y3JlZiAoUHlPYmplY3QgKnB5KTsKIHN0cnVjdCBjbGVhbnVwICptYWtlX2Ns ZWFudXBfcHlfeGRlY3JlZiAoUHlPYmplY3QgKnB5KTsKZGlmZiAtLWdpdCBh L2dkYi9weXRob24vcHl0aG9uLmMgYi9nZGIvcHl0aG9uL3B5dGhvbi5jCmlu ZGV4IDU4YzdjOTIuLjFkYTYzZmQgMTAwNjQ0Ci0tLSBhL2dkYi9weXRob24v cHl0aG9uLmMKKysrIGIvZ2RiL3B5dGhvbi9weXRob24uYwpAQCAtMTgyMSw3 ICsxODIxLDggQEAgbWVzc2FnZSA9PSBhbiBlcnJvciBtZXNzYWdlIHdpdGhv dXQgYSBzdGFjayB3aWxsIGJlIHByaW50ZWQuIiksCiAgICAgICB8fCBnZGJw eV9pbml0aWFsaXplX25ld19vYmpmaWxlX2V2ZW50ICgpICA8IDAKICAgICAg IHx8IGdkYnB5X2luaXRpYWxpemVfY2xlYXJfb2JqZmlsZXNfZXZlbnQgKCkg IDwgMAogICAgICAgfHwgZ2RicHlfaW5pdGlhbGl6ZV9hcmNoICgpIDwgMAot ICAgICAgfHwgZ2RicHlfaW5pdGlhbGl6ZV94bWV0aG9kcyAoKSA8IDApCisg ICAgICB8fCBnZGJweV9pbml0aWFsaXplX3htZXRob2RzICgpIDwgMAorICAg ICAgfHwgZ2RicHlfaW5pdGlhbGl6ZV91bndpbmQgKCkgPCAwKQogICAgIGdv dG8gZmFpbDsKIAogICBnZGJweV90b19zdHJpbmdfY3N0ID0gUHlTdHJpbmdf RnJvbVN0cmluZyAoInRvX3N0cmluZyIpOwpkaWZmIC0tZ2l0IGEvZ2RiL3Rl c3RzdWl0ZS9nZGIucHl0aG9uL3B5LXVud2luZC1tYWludC5jIGIvZ2RiL3Rl c3RzdWl0ZS9nZGIucHl0aG9uL3B5LXVud2luZC1tYWludC5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjMWQ5MzUKLS0tIC9kZXYv bnVsbAorKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktdW53aW5k LW1haW50LmMKQEAgLTAsMCArMSwyNCBAQAorLyogVGhpcyB0ZXN0Y2FzZSBp cyBwYXJ0IG9mIEdEQiwgdGhlIEdOVSBkZWJ1Z2dlci4KKworICAgQ29weXJp Z2h0IDIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAg IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0 aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3Vy IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv cHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9u ZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3 LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKK2ludAorbWFpbiAodm9pZCkK K3sKKyAgaW50IGkgPSAwOworCisgIHJldHVybiBpOyAvKiBuZXh0LWxpbmUg Ki8KK30KZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9w eS11bndpbmQtbWFpbnQuZXhwIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9u L3B5LXVud2luZC1tYWludC5leHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uYTEwZTFhYQotLS0gL2Rldi9udWxsCisrKyBiL2dkYi90 ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS11bndpbmQtbWFpbnQuZXhwCkBAIC0w LDAgKzEsNjQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExp Y2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp b24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQg aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90 LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIFRo aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHREIgdGVzdHN1aXRlLiAgSXQgdGVz dHMgUHl0aG9uLWJhc2VkCisjIHVud2luZGluZyBDTEkuCisKK2xvYWRfbGli IGdkYi1weXRob24uZXhwCisKK3N0YW5kYXJkX3Rlc3RmaWxlCisKK2lmIHtb cHJlcGFyZV9mb3JfdGVzdGluZyAke3Rlc3RmaWxlfS5leHAgJHt0ZXN0Zmls ZX0gJHtzcmNmaWxlfV0gfSB7CisgICAgcmV0dXJuIC0xCit9CisKKyMgU2tp cCBhbGwgdGVzdHMgaWYgUHl0aG9uIHNjcmlwdGluZyBpcyBub3QgZW5hYmxl ZC4KK2lmIHsgW3NraXBfcHl0aG9uX3Rlc3RzXSB9IHsgY29udGludWUgfQor CitzZXQgcHlmaWxlIFtnZGJfcmVtb3RlX2Rvd25sb2FkIGhvc3QgJHtzcmNk aXJ9LyR7c3ViZGlyfS8ke3Rlc3RmaWxlfS5weV0KKworaWYgIVtydW50b19t YWluIF0gdGhlbiB7CisgICAgZmFpbCAiQ2FuJ3QgcnVuIHRvIG1haW4iCisg ICAgcmV0dXJuIC0xCit9CisKK2dkYl90ZXN0ICJzb3VyY2UgJHtweWZpbGV9 IiAiUHl0aG9uIHNjcmlwdCBpbXBvcnRlZCIgImltcG9ydCBweXRob24gc2Ny aXB0cyIKKworZ2RiX3Rlc3Rfc2VxdWVuY2UgImluZm8gc25pZmZlciIgIlNo b3cgYWxsIHNuaWZmZXJzIiB7CisgICAgImdsb2JhbCBzbmlmZmVyczoiCisg ICAgIiAgZ2xvYmFsX3NuaWZmZXIiCisgICAgInByb2dzcGFjZS4qc25pZmZl cnM6IgorICAgICJweV91bndpbmRfbWFpbnRfcHNfc25pZmZlciIKK30KKwor Z2RiX2JyZWFrcG9pbnQgJHtzcmNmaWxlfTpbZ2RiX2dldF9saW5lX251bWJl ciAibmV4dC1saW5lIl0KKworZ2RiX3Rlc3Rfc2VxdWVuY2UgImNvbnRpbnVl IiAiU25pZmZlcnMgY2FsbGVkIiB7CisgICAgInB5X3Vud2luZF9tYWludF9w c19zbmlmZmVyIGNhbGxlZCIKKyAgICAiZ2xvYmFsX3NuaWZmZXIgY2FsbGVk IgorfQorCitnZGJfdGVzdCAiZGlzYWJsZSBzbmlmZmVyIGdsb2JhbCAuKiIg IjEgc25pZmZlciBkaXNhYmxlZCIgIlNuaWZmZXIgZGlzYWJsZWQiCisKK2dk Yl90ZXN0X3NlcXVlbmNlICJpbmZvIHNuaWZmZXIiICJTaG93IHdpdGggZ2xv YmFsIHNuaWZmZXIgZGlzYWJsZWQiIHsKKyAgICAiZ2xvYmFsIHNuaWZmZXJz OiIKKyAgICAiICBnbG9iYWxfc25pZmZlclxcW2Rpc2FibGVkXFxdIgorICAg ICJwcm9nc3BhY2UuKnNuaWZmZXJzOiIKKyAgICAiICBweV91bndpbmRfbWFp bnRfcHNfc25pZmZlciIKK30KKworZ2RiX3Rlc3Rfc2VxdWVuY2UgIndoZXJl IiAiR2xvYmFsIHNuaWZmZXIgZGlzYWJsZWQiIHsKKyAgICAicHlfdW53aW5k X21haW50X3BzX3NuaWZmZXIgY2FsbGVkXHJcbiMwICBtYWluIgorfQpkaWZm IC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LXVud2luZC1t YWludC5weSBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS11bndpbmQt bWFpbnQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u NzRiNzAyYwotLS0gL2Rldi9udWxsCisrKyBiL2dkYi90ZXN0c3VpdGUvZ2Ri LnB5dGhvbi9weS11bndpbmQtbWFpbnQucHkKQEAgLTAsMCArMSw1OSBAQAor IyBDb3B5cmlnaHQgKEMpIDIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMg KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhp cyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNI QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk IGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMg YWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDov L3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyMgVGhpcyBmaWxlIGlzIHBh cnQgb2YgdGhlIEdEQiB0ZXN0c3VpdGUuICBJdCB0ZXN0cyBweXRob24gc25p ZmZlcnMuCisKK2ltcG9ydCByZQoraW1wb3J0IGdkYi50eXBlcworZnJvbSBn ZGIuc25pZmZlciBpbXBvcnQgU25pZmZlciwgcmVnaXN0ZXJfc25pZmZlcgor CitjbGFzcyBUZXN0R2xvYmFsU25pZmZlcihTbmlmZmVyKToKKyAgICBkZWYg X19pbml0X18oc2VsZik6CisgICAgICAgIHN1cGVyKFRlc3RHbG9iYWxTbmlm ZmVyLCBzZWxmKS5fX2luaXRfXygiZ2xvYmFsX3NuaWZmZXIiKQorCisgICAg ZGVmIF9fY2FsbF9fKHNlbGYsIHNuaWZmZXJfaW5mbyk6CisgICAgICAgIHBy aW50ICIlcyBjYWxsZWQiICUgc2VsZi5uYW1lCisgICAgICAgIHJldHVybiBO b25lCisKK2NsYXNzIFRlc3RQcm9nc3BhY2VTbmlmZmVyKFNuaWZmZXIpOgor ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgc3VwZXIo VGVzdFByb2dzcGFjZVNuaWZmZXIsIHNlbGYpLl9faW5pdF9fKCIlc19wc19z bmlmZmVyIiAlIG5hbWUpCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgc25p ZmZlcl9pbmZvKToKKyAgICAgICAgcHJpbnQgIiVzIGNhbGxlZCIgJSBzZWxm Lm5hbWUKKyAgICAgICAgcmV0dXJuIE5vbmUKKworY2xhc3MgVGVzdE9iamZp bGVTbmlmZmVyKFNuaWZmZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBu YW1lKToKKyAgICAgICAgc3VwZXIoVGVzdE9iamZpbGVTbmlmZmVyLCBzZWxm KS5fX2luaXRfXygiJXNfb2JqX3NuaWZmZXIiICUgbmFtZSkKKworICAgIGRl ZiBfX2NhbGxfXyhzZWxmLCBzbmlmZmVyX2luZm8pOgorICAgICAgICBwcmlu dCAiJXMgY2FsbGVkIiAlIHNlbGYubmFtZQorICAgICAgICByZXR1cm4gTm9u ZQorCisKKworZ2RiLnNuaWZmZXIucmVnaXN0ZXJfc25pZmZlcihnZGIsIFRl c3RHbG9iYWxTbmlmZmVyKCkpCitzYXdfcnVudGltZV9lcnJvciA9IEZhbHNl Cit0cnk6CisgICAgZ2RiLnNuaWZmZXIucmVnaXN0ZXJfc25pZmZlcihnZGIs IFRlc3RHbG9iYWxTbmlmZmVyKCksIHJlcGxhY2U9RmFsc2UpCitleGNlcHQg UnVudGltZUVycm9yOgorICAgIHNhd19ydW50aW1lX2Vycm9yID0gVHJ1ZQor aWYgbm90IHNhd19ydW50aW1lX2Vycm9yOgorICAgIHJhaXNlIFJ1bnRpbWVF cnJvcigiTWlzc2luZyBydW50aW1lIGVycm9yIGZyb20gcmVnaXN0ZXJfc25p ZmZlci4iKQorZ2RiLnNuaWZmZXIucmVnaXN0ZXJfc25pZmZlcihnZGIsIFRl c3RHbG9iYWxTbmlmZmVyKCksIHJlcGxhY2U9VHJ1ZSkKK2dkYi5zbmlmZmVy LnJlZ2lzdGVyX3NuaWZmZXIoZ2RiLmN1cnJlbnRfcHJvZ3NwYWNlKCksCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXN0UHJvZ3NwYWNlU25p ZmZlcigicHlfdW53aW5kX21haW50IikpCitwcmludCAiUHl0aG9uIHNjcmlw dCBpbXBvcnRlZCIKZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLnB5 dGhvbi9weS11bndpbmQuYyBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9w eS11bndpbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li5jZjQxZDc4Ci0tLSAvZGV2L251bGwKKysrIGIvZ2RiL3Rlc3RzdWl0ZS9n ZGIucHl0aG9uL3B5LXVud2luZC5jCkBAIC0wLDAgKzEsODEgQEAKKy8qIFRo aXMgdGVzdCBwcm9ncmFtIGlzIHBhcnQgb2YgR0RCLCB0aGUgR05VIGRlYnVn Z2VyLgorCisgICBDb3B5cmlnaHQgMjAxNSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAg IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNl LCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K KworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBo YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90 LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKwor LyogVGhpcyBpcyB0aGUgdGVzdCBwcm9ncmFtIGxvYWRlZCBpbnRvIEdEQiBi eSB0aGUgcHktdW53aW5kIHRlc3QuICAqLworCisjaW5jbHVkZSA8c3RkaW50 Lmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4K Kworc3RhdGljIHZvaWQgKgorc3dhcF92YWx1ZSAodm9pZCAqKmxvY2F0aW9u LCB2b2lkICpuZXdfdmFsdWUpCit7CisgIHZvaWQgKm9sZF92YWx1ZSA9ICps b2NhdGlvbjsKKyAgKmxvY2F0aW9uID0gbmV3X3ZhbHVlOworICByZXR1cm4g b2xkX3ZhbHVlOworfQorCitzdGF0aWMgdm9pZAorYmFkX2xheW91dCh2b2lk ICoqdmFyaWFibGVfcHRyLCB2b2lkICpmcCkKK3sKKyAgZnByaW50ZiAoc3Rk ZXJyLCAiRmlyc3QgdmFyaWFibGUgc2hvdWxkIGJlIGFsbG9jYXRlZCBvbmUg d29yZCBiZWxvdyAiCisgICAgICAgICAgICJ0aGUgZnJhbWUuICBHb3QgdmFy aWFibGUncyBhZGRyZXNzICVwLCBmcmFtZSBhdCAlcCBpbnN0ZWFkLlxuIiwK KyAgICAgICAgICAgdmFyaWFibGVfcHRyLCBmcCk7CisgIGFib3J0KCk7Cit9 CisKKyNkZWZpbmUgTVlfRlJBTUUgKF9fYnVpbHRpbl9mcmFtZV9hZGRyZXNz ICgwKSkKKworc3RhdGljIHZvaWQKK2NvcnJ1cHRfZnJhbWVfaW5uZXIgKHZv aWQpCit7CisgIC8qIFNhdmUgb3V0ZXIgZnJhbWUgYWRkcmVzcywgdGhlbiBj b3JydXB0IHRoZSB1bndpbmQgY2hhaW4gYnkKKyAgICAgc2V0dGluZyB0aGUg b3V0ZXIgZnJhbWUgYWRkcmVzcyBpbiBpdCB0byBzZWxmLiAgVGhpcyBpcwor ICAgICBBQkktc3BlY2lmaWM6IHRoZSBmaXJzdCB3b3JkIG9mIHRoZSBmcmFt ZSBjb250YWlucyBwcmV2aW91cyBmcmFtZQorICAgICBhZGRyZXNzIGluIGFt ZDY0LiAgKi8KKyAgdm9pZCAqcHJldmlvdXNfZnAgPSBzd2FwX3ZhbHVlICgo dm9pZCAqKikgTVlfRlJBTUUsIE1ZX0ZSQU1FKTsKKworICAvKiBWZXJpZnkg dGhlIGNvbXBpbGVyIGFsbG9jYXRlcyB0aGUgZmlyc3QgbG9jYWwgdmFyaWFi bGUgb25lIHdvcmQKKyAgICAgYmVsb3cgZnJhbWUuICBUaGlzIGlzIHdoZXJl IHRoZSB0ZXN0IHVud2luZGVyIGV4cGVjdHMgdG8gZmluZCB0aGUKKyAgICAg Y29ycmVjdCBvdXRlciBmcmFtZSBhZGRyZXNzLiAgKi8KKyAgaWYgKCZwcmV2 aW91c19mcCArIDEgIT0gKHZvaWQgKiopIE1ZX0ZSQU1FKQorICAgIGJhZF9s YXlvdXQgKCZwcmV2aW91c19mcCArIDEsIE1ZX0ZSQU1FKTsKKworICAvKiBO b3cgcmVzdG9yZSBpdCBzbyB0aGF0IHdlIGNhbiByZXR1cm4uICBUaGUgdGVz dCBzZXRzIHRoZQorICAgICBicmVha3BvaW50IGp1c3QgYmVmb3JlIHRoaXMg aGFwcGVucywgYW5kIEdEQiB3aWxsIG5vdCBiZSBhYmxlIHRvCisgICAgIHNo b3cgdGhlIGJhY2t0cmFjZSB3aXRob3V0IEpJVCByZWFkZXIuICAqLworICBz d2FwX3ZhbHVlICgodm9pZCAqKikgTVlfRlJBTUUsIHByZXZpb3VzX2ZwKTsg LyogYnJlYWsgYmFja3RyYWNlLWJyb2tlbiAqLworfQorCitzdGF0aWMgdm9p ZAorY29ycnVwdF9mcmFtZV9vdXRlciAodm9pZCkKK3sKKyAgLyogU2VlIGFi b3ZlIGZvciB0aGUgZXhwbGFuYXRpb24gb2YgdGhlIGNvZGUgaGVyZS4gIFRo aXMgZnVuY3Rpb24KKyAgICAgY29ycnVwdHMgaXRzIGZyYW1lLCB0b28sIGFu ZCB0aGVuIGNhbGxzIHRoZSBpbm5lciBvbmUuICAqLworICB2b2lkICpwcmV2 aW91c19mcCA9IHN3YXBfdmFsdWUgKCh2b2lkICoqKSBNWV9GUkFNRSwgTVlf RlJBTUUpOworICBpZiAoJnByZXZpb3VzX2ZwICsgMSAhPSAodm9pZCAqKikg TVlfRlJBTUUpCisgICAgYmFkX2xheW91dCAoJnByZXZpb3VzX2ZwLCBNWV9G UkFNRSk7CisgIGNvcnJ1cHRfZnJhbWVfaW5uZXIgKCk7CisgIHN3YXBfdmFs dWUgKCh2b2lkICoqKSBNWV9GUkFNRSwgcHJldmlvdXNfZnApOworfQorCitp bnQKK21haW4gKCkKK3sKKyAgY29ycnVwdF9mcmFtZV9vdXRlciAoKTsKKyAg cmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5w eXRob24vcHktdW53aW5kLmV4cCBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhv bi9weS11bndpbmQuZXhwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLjRiZjA5YjMKLS0tIC9kZXYvbnVsbAorKysgYi9nZGIvdGVzdHN1 aXRlL2dkYi5weXRob24vcHktdW53aW5kLmV4cApAQCAtMCwwICsxLDU0IEBA CisjIENvcHlyaWdodCAoQykgMjAxNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgor IyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBU aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVS Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm b3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2 ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor IyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRw Oi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBUaGlzIGZpbGUgaXMg cGFydCBvZiB0aGUgR0RCIHRlc3RzdWl0ZS4gIEl0IHZlcmlmaWVzIHRoYXQg ZnJhbWUKKyMgc25pZmZlcnMgY2FuIGJlIGltcGxlbWVudGVkIGluIFB5dGhv bi4KKworbG9hZF9saWIgZ2RiLXB5dGhvbi5leHAKKworc3RhbmRhcmRfdGVz dGZpbGUKKworaWYgeyBbcHJlcGFyZV9mb3JfdGVzdGluZyAke3Rlc3RmaWxl fS5leHAgJHt0ZXN0ZmlsZX0gJHtzcmNmaWxlfV0gfSB7CisgICAgcmV0dXJu IC0xCit9CisKKyMgU2tpcCBhbGwgdGVzdHMgaWYgUHl0aG9uIHNjcmlwdGlu ZyBpcyBub3QgZW5hYmxlZC4KK2lmIHsgW3NraXBfcHl0aG9uX3Rlc3RzXSB9 IHsgY29udGludWUgfQorCisjIFRoaXMgdGVzdCBydW5zIG9uIGEgc3BlY2lm aWMgcGxhdGZvcm0uCitpZiB7ICEgW2lzdGFyZ2V0IHg4Nl82NC0qXX0geyBj b250aW51ZSB9CisKKyMgVGhlIGZvbGxvd2luZyB0ZXN0cyByZXF1aXJlIGV4 ZWN1dGlvbi4KKworaWYgIVtydW50b19tYWluXSB0aGVuIHsKKyAgICBmYWls ICJDYW4ndCBydW4gdG8gbWFpbiIKKyAgICByZXR1cm4gMAorfQorCitzZXQg cHlmaWxlIFtnZGJfcmVtb3RlX2Rvd25sb2FkIGhvc3QgJHtzcmNkaXJ9LyR7 c3ViZGlyfS8ke3Rlc3RmaWxlfS5weV0KKworZ2RiX2JyZWFrcG9pbnQgW2dk Yl9nZXRfbGluZV9udW1iZXIgImJyZWFrIGJhY2t0cmFjZS1icm9rZW4iXQor CitnZGJfdGVzdCAic291cmNlICR7cHlmaWxlfSIgIlB5dGhvbiBzY3JpcHQg aW1wb3J0ZWQiIFwKKyAgICAgICAgICJpbXBvcnQgcHl0aG9uIHNjcmlwdHMi CisKK2dkYl9jb250aW51ZV90b19icmVha3BvaW50ICJicmVhayBiYWNrdHJh Y2UtYnJva2VuIgorZ2RiX3Rlc3Rfc2VxdWVuY2UgIndoZXJlIiAgIkJhY2t0 cmFjZSByZXN0b3JlZCBieSBzbmlmZmVyIiB7CisgICAgIlxcclxcbiMwIC4q IGNvcnJ1cHRfZnJhbWVfaW5uZXIgXFwoXFwpIGF0ICIKKyAgICAiXFxyXFxu IzEgLiogY29ycnVwdF9mcmFtZV9vdXRlciBcXChcXCkgYXQgIgorICAgICJc XHJcXG4jMiAuKiBtYWluIFxcKC4qXFwpIGF0IgorfQorCisKZGlmZiAtLWdp dCBhL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS11bndpbmQucHkgYi9n ZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktdW53aW5kLnB5Cm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5OGRhM2MKLS0tIC9kZXYv bnVsbAorKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktdW53aW5k LnB5CkBAIC0wLDAgKzEsODMgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3Jh bSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMg b2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxh dGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlv dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFt LiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+ LgorCitpbXBvcnQgZ2RiCitmcm9tIGdkYi5zbmlmZmVyIGltcG9ydCBTbmlm ZmVyCisKK2NsYXNzIFRlc3RTbmlmZmVyKFNuaWZmZXIpOgorICAgIEFNRDY0 X1JCUCA9IDYKKyAgICBBTUQ2NF9SU1AgPSA3CisgICAgQU1ENjRfUklQID0g MTYKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgU25pZmZl ci5fX2luaXRfXyhzZWxmLCAidGVzdCBzbmlmZmVyIikKKyAgICAgICAgc2Vs Zi5jaGFyX3B0cl90ID0gZ2RiLmxvb2t1cF90eXBlKCJ1bnNpZ25lZCBjaGFy IikucG9pbnRlcigpCisgICAgICAgIHNlbGYuY2hhcl9wdHJfcHRyX3QgPSBz ZWxmLmNoYXJfcHRyX3QucG9pbnRlcigpCisKKyAgICBkZWYgX3JlYWRfd29y ZChzZWxmLCBhZGRyZXNzKToKKyAgICAgICAgcmV0dXJuIGFkZHJlc3MuY2Fz dChzZWxmLmNoYXJfcHRyX3B0cl90KS5kZXJlZmVyZW5jZSgpCisKKyAgICBk ZWYgX19jYWxsX18oc2VsZiwgc25pZmZlcl9pbmZvKToKKyAgICAgICAgIiIi VGVzdCBzbmlmZmVyIHdyaXR0ZW4gaW4gUHl0aG9uLgorCisgICAgICAgIFRo aXMgc25pZmZlciBjYW4gdW53aW5kIHRoZSBmcmFtZXMgdGhhdCBoYXZlIGJl ZW4gZGVsaWJlcmF0ZWx5CisgICAgICAgIGNvcnJ1cHRlZCBpbiBhIHNwZWNp ZmljIHdheSAoZnVuY3Rpb25zIGluIHRoZSBhY2NvbXBhbnlpbmcKKyAgICAg ICAgcHktdW53aW5kLmMgZmlsZSBkbyB0aGF0LikKKyAgICAgICAgVGhpcyBj b2RlIGlzIG9ubHkgb24gQU1ENjQuCisgICAgICAgIE9uIEFNRDY0ICRSQlAg cG9pbnRzIHRvIHRoZSBpbm5lcm1vc3QgZnJhbWUgKHVubGVzcyB0aGUgY29k ZQorICAgICAgICB3YXMgY29tcGlsZWQgd2l0aCAtZm9taXQtZnJhbWUtcG9p bnRlciksIHdoaWNoIGNvbnRhaW5zIHRoZQorICAgICAgICBhZGRyZXNzIG9m IHRoZSBwcmV2aW91cyBmcmFtZSBhdCBvZmZzZXQgMC4gVGhlIGZ1bmN0aW9u cworICAgICAgICBkZWxpYmVyYXRlbHkgY29ycnVwdCB0aGVpciBmcmFtZXMg YXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgIEJlZm9yZSAgICAg ICAgICAgICAgICAgQWZ0ZXIKKyAgICAgICAgICAgICAgICAgICBDb3JydXB0 aW9uOiAgICAgICAgICAgQ29ycnVwdGlvbjoKKyAgICAgICAgICAgICAgICAr LS0tLS0tLS0tLS0tLS0rICAgICAgICstLS0tLS0tLS0tLS0tLSsKKyAgICAg ICAgUkJQLTggICB8ICAgICAgICAgICAgICB8ICAgICAgIHwgUHJldmlvdXMg UkJQIHwKKyAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0rICAgICAg ICstLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgUkJQICAgICArIFByZXZpb3Vz IFJCUCB8ICAgICAgIHwgICAgUkJQICAgICAgIHwKKyAgICAgICAgICAgICAg ICArLS0tLS0tLS0tLS0tLS0rICAgICAgICstLS0tLS0tLS0tLS0tLSsKKyAg ICAgICAgUkJQKzggICB8IFJldHVybiBSSVAgICB8ICAgICAgIHwgUmV0dXJu ICBSSVAgIHwKKyAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0rICAg ICAgICstLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgT2xkIFNQICB8ICAgICAg ICAgICAgICB8ICAgICAgIHwgICAgICAgICAgICAgIHwKKworICAgICAgICBU aGlzIHNuaWZmZXIgcmVjb2duaXplcyB0aGUgY29ycnVwdCBmcmFtZXMgYnkg Y2hlY2tpbmcgdGhhdAorICAgICAgICAqUkJQID09IFJCUCwgYW5kIHJlc3Rv cmVzIHByZXZpb3VzIFJCUCBmcm9tIHRoZSB3b3JkIGFib3ZlIGl0LgorICAg ICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBOT1RFOiB0 aGUgcmVnaXN0ZXJzIGluIFNuaWZmZXIgQVBJIGNhbiBiZSByZWZlcmVuY2Vk CisgICAgICAgICAgICAjIGVpdGhlciBieSBuYW1lIG9yIGJ5IG51bWJlci4g VGhlIGNvZGUgYmVsb3cgdXNlcyBib3RoCisgICAgICAgICAgICAjIHRvIGFj aGlldmUgbW9yZSBjb3ZlcmFnZS4KKyAgICAgICAgICAgIGJwID0gc25pZmZl cl9pbmZvLnJlYWRfcmVnaXN0ZXIoInJicCIpLmNhc3Qoc2VsZi5jaGFyX3B0 cl90KQorICAgICAgICAgICAgaWYgc2VsZi5fcmVhZF93b3JkKGJwKSAhPSBi cDoKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAg IyBGb3VuZCB0aGUgZnJhbWUgdGhhdCB0aGUgdGVzdCBwcm9ncmFtIGhhcyBj b3JydXB0ZWQgZm9yIHVzLgorICAgICAgICAgICAgIyBUaGUgY29ycmVjdCBC UCBmb3IgdGhlIG91dGVyIGZyYW1lIGhhcyBiZWVuIHNhdmVkIG9uZSB3b3Jk CisgICAgICAgICAgICAjIGFib3ZlLCBwcmV2aW91cyBJUCBhbmQgU1AgYXJl IGF0IHRoZSBleHBlY3RlZCBwbGFjZXMuCisgICAgICAgICAgICBwcmV2aW91 c19icCA9IHNlbGYuX3JlYWRfd29yZChicCAtIDgpCisgICAgICAgICAgICBw cmV2aW91c19pcCA9IHNlbGYuX3JlYWRfd29yZChicCArIDgpCisgICAgICAg ICAgICBwcmV2aW91c19zcCA9IGJwICsgMTYKKworICAgICAgICAgICAgc3Ag PSBzbmlmZmVyX2luZm8ucmVhZF9yZWdpc3RlcihUZXN0U25pZmZlci5BTUQ2 NF9SU1ApCisgICAgICAgICAgICBpcCA9IHNuaWZmZXJfaW5mby5yZWFkX3Jl Z2lzdGVyKFRlc3RTbmlmZmVyLkFNRDY0X1JJUCkKKyAgICAgICAgICAgIHVu d2luZF9pbmZvID0gc25pZmZlcl9pbmZvLnVud2luZF9pbmZvX3dpdGhfaWQo c3AsIGlwKQorICAgICAgICAgICAgdW53aW5kX2luZm8uc2V0X3ByZXZpb3Vz X2ZyYW1lX3JlZ2lzdGVyKFRlc3RTbmlmZmVyLkFNRDY0X1JCUCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwcmV2aW91c19icCkKKyAgICAgICAgICAgIHVud2luZF9pbmZvLnNldF9w cmV2aW91c19mcmFtZV9yZWdpc3RlcigicmlwIiwgcHJldmlvdXNfaXApCisg ICAgICAgICAgICB1bndpbmRfaW5mby5zZXRfcHJldmlvdXNfZnJhbWVfcmVn aXN0ZXIoInJzcCIsIHByZXZpb3VzX3NwKQorICAgICAgICAgICAgcmV0dXJu IHVud2luZF9pbmZvCisgICAgICAgIGV4Y2VwdCAoZ2RiLmVycm9yLCBSdW50 aW1lRXJyb3IpOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworZ2RiLnNu aWZmZXIucmVnaXN0ZXJfc25pZmZlcihOb25lLCBUZXN0U25pZmZlcigpLCBU cnVlKQorcHJpbnQoIlB5dGhvbiBzY3JpcHQgaW1wb3J0ZWQiKQo= --001a1134b3cebe008a051182c58d--