From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 106342 invoked by alias); 18 Mar 2015 22:57:48 -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 106324 invoked by uid 89); 18 Mar 2015 22:57:46 -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-ig0-f170.google.com Received: from mail-ig0-f170.google.com (HELO mail-ig0-f170.google.com) (209.85.213.170) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Wed, 18 Mar 2015 22:57:39 +0000 Received: by igcqo1 with SMTP id qo1so59007896igc.0 for ; Wed, 18 Mar 2015 15:57:37 -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=0130AglD/pTXRHIZqbiy19yl9rzJuHvRZfE7WCQOamM=; b=VsfBZ2nOyG2wMm4erTkNWgGQ3usZ9VPPOWBRZipJ79BNGcLlMw6Ustk6zAiWkfYrKn M+0Kl9sjNTQes0IVNAL5OpfxYkFTZXC06YLEzbT9rSmY0YKc2loDzzDfpNvAdX179C1i 4iv7wpPe908hwBEh31cNCXeUxmMyGxjWLK5L33jfmmJ8muTA05FKm8Oe0i8u1KosK3ks tgma5CRXsHSZPtHnoXsgcye5ByTTUjfnOO8XJ2EuSOlgVP268iDIY/mx120KHhO06chV QjN9VCSFGTh907x/PFJLpuf3BTK+gc7RUhD1NRHMB5L5IR+loZZRNMJPSOM9PtDcQ8U2 GQYg== X-Gm-Message-State: ALoCoQn9ElmTHwAN1fcEBjvVrMTtGhx7ZQtYlpnHDkkd5rmeALKspx04IANwfNXi9v0dmnrQ/kwb MIME-Version: 1.0 X-Received: by 10.50.143.42 with SMTP id sb10mr11189162igb.49.1426719457085; Wed, 18 Mar 2015 15:57:37 -0700 (PDT) Received: by 10.64.98.103 with HTTP; Wed, 18 Mar 2015 15:57:35 -0700 (PDT) In-Reply-To: <87r3smado6.fsf@igalia.com> 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> <87r3smado6.fsf@igalia.com> Date: Wed, 18 Mar 2015 22:57: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=001a1134b3ce6f7d1a051198021b X-SW-Source: 2015-03/txt/msg00567.txt.bz2 --001a1134b3ce6f7d1a051198021b Content-Type: text/plain; charset=UTF-8 Content-length: 3362 > Nit: we are setting the register here. Fixed. >> + _("When non-zero, Pythin unwinder debugging is enabled."), > > "Python" Fixed. > Still no support for register names. Registers can be retrieved by name, please see gdb/testsuite/gdb.python/py-unwind.py as an example. >> +import gdb >> +from gdb.sniffer import Sniffer >> + >> +class TestSniffer(Sniffer): > > I still think it's much better to call these "unwinders". You say that > it's the terminology that GDB uses but that's not really the case -- > "sniffer" names part of the unwinder interface, which Python and Guile > implement the whole of. You chose "unwinder" as the documentation > heading and the file name; why introduce a new term to the user? Renamed all but SnifferInfo. 2015-03-28 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 unwinders.py. * doc/python.texi (Writing a Frame Unwinder in Python): Add section. * python/lib/gdb/__init__.py (packages): Add frame_unwinders list. * python/lib/gdb/command/unwinders.py: New file, implements GDB commands to list/enable/disable Python unwinders. * python/lib/gdb/function/unwinders.py: New file, implements execute_unwinders function. * python/lib/gdb/unwinder.py: New file, contains Unwinder class and register_unwinder function. * python/py-objfile.c (objfile_object): Add frame_unwinders field. (objfpy_dealloc): Decrement frame_unwinders reference count. (objfpy_initialize): Create frame_unwinders list. (objfpy_get_frame_unwinders): Implement Objfile.frame_unwinders getter. (objfpy_set_frame_unwinders): Implement Objfile.frame_unwinders setter. (objfile_getset): Add frame_unwinders attribute to Objfile. * python/py-progspace.c (pspace_object): Add frame_unwinders field. (pspy_dealloc): Decrement frame_unwinders reference count. (pspy_initialize): Create frame_unwinders list. (pspy_get_frame_unwinders): Implement gdb.Progspace.frame_unwinders getter. (pspy_set_frame_unwinders): Implement gdb.Progspace.frame_unwinders setter. (pspy_getset): Add frame_unwinders attribute to gdb.Progspace. * python/py-unwind.c: New file, implements Python frame unwinders interface. * python/python-internal.h (pspy_get_name_unwinders): New prototype. (objpy_get_frame_unwinders): New prototype. (gdbpy_initialize_unwind): New prototype. * python/python.c (gdbpy_apply_type_printers): Call gdbpy_initialize_unwind. 2015-03-28 Sasha Smundak * gdb.python/py-unwind-maint.c: Test program for py-unwind-maint. * gdb.python/py-unwind-maint.exp: Tests unwinder-related GDB commands. * gdb.python/py-unwind-maint.py: Pythons frame unwinders for the test. * gdb.python/py-unwind.c: Test program for the py-unwind test. * gdb.python/py-unwind.exp: Python frame unwinders test. * gdb.python/py-unwind.py: Python frame unwinder tested by py-unwind test. --001a1134b3ce6f7d1a051198021b Content-Type: text/plain; charset=US-ASCII; name="patch8.diff" Content-Disposition: attachment; filename="patch8.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_i7fbx7j30 Content-length: 94933 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 ZGlyZWN0b3J5L01ha2VmaWxlLmluCmluZGV4IGMwMWI4NmQuLjA0OWFhMDUg MTAwNjQ0Ci0tLSBhL2dkYi9kYXRhLWRpcmVjdG9yeS9NYWtlZmlsZS5pbgor KysgYi9nZGIvZGF0YS1kaXJlY3RvcnkvTWFrZWZpbGUuaW4KQEAgLTYyLDE3 ICs2MiwyMCBAQCBQWVRIT05fRklMRV9MSVNUID0gXAogCWdkYi9GcmFtZURl Y29yYXRvci5weSBcCiAJZ2RiL3R5cGVzLnB5IFwKIAlnZGIvcHJpbnRpbmcu cHkgXAorCWdkYi91bndpbmRlci5weSBcCiAJZ2RiL3Byb21wdC5weSBcCiAJ Z2RiL3htZXRob2QucHkgXAogCWdkYi9jb21tYW5kL19faW5pdF9fLnB5IFwK IAlnZGIvY29tbWFuZC94bWV0aG9kcy5weSBcCiAJZ2RiL2NvbW1hbmQvZnJh bWVfZmlsdGVycy5weSBcCisJZ2RiL2NvbW1hbmQvdW53aW5kZXJzLnB5IFwK IAlnZGIvY29tbWFuZC90eXBlX3ByaW50ZXJzLnB5IFwKIAlnZGIvY29tbWFu ZC9wcmV0dHlfcHJpbnRlcnMucHkgXAogCWdkYi9jb21tYW5kL3Byb21wdC5w eSBcCiAJZ2RiL2NvbW1hbmQvZXhwbG9yZS5weSBcCiAJZ2RiL2Z1bmN0aW9u L19faW5pdF9fLnB5IFwKIAlnZGIvZnVuY3Rpb24vY2FsbGVyX2lzLnB5IFwK KyAgICAgICAgZ2RiL2Z1bmN0aW9uL3Vud2luZGVycy5weSBcCiAJZ2RiL2Z1 bmN0aW9uL3N0cmZucy5weSBcCiAJZ2RiL3ByaW50ZXIvX19pbml0X18ucHkg XAogCWdkYi9wcmludGVyL2JvdW5kX3JlZ2lzdGVycy5weQpkaWZmIC0tZ2l0 IGEvZ2RiL2RvYy9weXRob24udGV4aSBiL2dkYi9kb2MvcHl0aG9uLnRleGkK aW5kZXggZDcyNWViMC4uYTI2ODVlOCAxMDA2NDQKLS0tIGEvZ2RiL2RvYy9w eXRob24udGV4aQorKysgYi9nZGIvZG9jL3B5dGhvbi50ZXhpCkBAIC0xNDQs NiArMTQ0LDcgQEAgb3B0aW9uYWwgYXJndW1lbnRzIHdoaWxlIHNraXBwaW5n IG90aGVycy4gIEV4YW1wbGU6CiAqIEZyYW1lIEZpbHRlciBBUEk6OiAgICAg ICAgICAgIEZpbHRlcmluZyBGcmFtZXMuCiAqIEZyYW1lIERlY29yYXRvciBB UEk6OiAgICAgICAgIERlY29yYXRpbmcgRnJhbWVzLgogKiBXcml0aW5nIGEg RnJhbWUgRmlsdGVyOjogICAgICBXcml0aW5nIGEgRnJhbWUgRmlsdGVyLgor KiBVbndpbmRpbmcgRnJhbWVzIGluIFB5dGhvbjo6ICBXcml0aW5nIGZyYW1l IHVud2luZGVyLgogKiBYbWV0aG9kcyBJbiBQeXRob246OiAgICAgICAgICBB ZGRpbmcgYW5kIHJlcGxhY2luZyBtZXRob2RzIG9mIEMrKyBjbGFzc2VzLgog KiBYbWV0aG9kIEFQSTo6ICAgICAgICAgICAgICAgICBYbWV0aG9kIHR5cGVz LgogKiBXcml0aW5nIGFuIFhtZXRob2Q6OiAgICAgICAgICBXcml0aW5nIGFu IHhtZXRob2QuCkBAIC0yMTc4LDYgKzIxNzksMTMyIEBAIHByaW50ZWQgaGll cmFyY2hpY2FsbHkuICBBbm90aGVyIGFwcHJvYWNoIHdvdWxkIGJlIHRvIGNv bWJpbmUgdGhlCiBtYXJrZXIgaW4gdGhlIGlubGluZWQgZnJhbWUsIGFuZCBh bHNvIHNob3cgdGhlIGhpZXJhcmNoaWNhbAogcmVsYXRpb25zaGlwLgogCitA bm9kZSBVbndpbmRpbmcgRnJhbWVzIGluIFB5dGhvbgorQHN1YnN1YnNlY3Rp b24gVW53aW5kaW5nIEZyYW1lcyBpbiBQeXRob24KK0BjaW5kZXggVW53aW5k aW5nIGZyYW1lcyBpbiBQeXRob24uCisKK0luIEdEQiB0ZXJtaW5vbG9neSBg YHVud2luZGluZycnIGlzIHRoZSBwcm9jZXNzIG9mIGZpbmRpbmcgdGhlCitw cmV2aW91cyBmcmFtZSAodGhhdCBpcywgY2FsbGVyJ3MpIGZyb20gdGhlIGN1 cnJlbnQgb25lLiBBbiB1bndpbmRlcgoraGFzIHRocmVlIG1ldGhvZHMuIFRo ZSBmaXJzdCBvbmUgY2hlY2tzIGlmIGl0IGNhbiBoYW5kbGUgZ2l2ZW4gZnJh bWUKKyhgYHNuaWZmJycgaXQpLiBGb3IgdGhlIGZyYW1lcyBpdCBjYW4gc25p ZmYgYW4gdW53aW5kZXIgcHJvdmlkZXMgdHdvCithZGRpdGlvbmFsIG1ldGhv ZHM6IGl0IGNhbiByZXR1cm4gZnJhbWUncyBJRCwgYW5kIGl0IGNhbiBmZXRj aAorcmVnaXN0ZXJzIGZyb20gdGhlIHByZXZpb3VzIGZyYW1lLiBBIHJ1bm5p bmcgR0RCIG1hbnRhaW5zIGEgbGlzdCBvZgordGhlIHVud2luZGVycyBhbmQg Y2FsbHMgZWFjaCB1bndpbmRlcidzIHNuaWZmZXIgaW4gdHVybiB1bnRpbCBp dCBmaW5kcwordGhlIG9uZSB0aGF0IHJlY29nbml6ZXMgdGhlIGN1cnJlbnQg ZnJhbWUuIFRoZXJlIGlzIGFuIEFQSSB0byByZWdpc3RlcgorYW4gdW53aW5k ZXIuCisKK1RoZSB1bndpbmRlcnMgdGhhdCBjb21lIHdpdGggR0RCIGhhbmRs ZSBzdGFuZGFyZCBmcmFtZXMgZm9yIGVhY2gKK3BsYXRmb3JtIHdoZXJlIEdE QiBpcyBydW5uaW5nLiBIb3dldmVyLCBtaXhlZCBsYW5ndWFnZSBhcHBsaWNh dGlvbnMKKyhmb3IgZXhhbXBsZSwgYW5kIGFwcGxpY2F0aW9uIHJ1bm5pbmcg SmF2YSBWaXJ0dWFsIE1hY2hpbmUpIHNvbWV0aW1lcwordXNlIGZyYW1lIGxh eW91dHMgdGhhdCBjYW5ub3QgYmUgaGFuZGxlZCBieSB0aGUgR0RCIHVud2lu ZGVycy4gWW91IGNhbgord3JpdGUgUHl0aG9uIGNvZGUgdGhhdCBjYW4gaGFu ZGxlIHN1Y2ggY3VzdG9tIGZyYW1lcy4KKworWW91IGltcGxlbWVudCBhIGZy YW1lIHVud2luZGVyIGluIFB5dGhvbiBhcyBhIGNsYXNzIHdpdGggd2hpY2gg aGFzIHR3bworYXR0cmlidXRlcywgQGNvZGV7bmFtZX0gYW5kIEBjb2Rle2Vu YWJsZWR9LCB3aXRoIG9idmlvdXMgbWVhbmluZ3MsIGFuZAorYSBzaW5nbGUg bWV0aG9kIEBjb2Rle19fY2FsbF9ffSwgd2hpY2ggZXhhbWluZXMgYSBnaXZl biBmcmFtZSBhbmQKK3JldHVybnMgYW4gb2JqZWN0IChhbiBpbnN0YW5jZSBv ZiBnZGIuVW53aW5kSW5mbyBjbGFzcykgZGVzY3JpYmluZworaXQuIElmIGFu IHVud2luZGVyIGRvZXMgbm90IHJlY29nbml6ZSBhIGZyYW1lLCBpdCBzaG91 bGQgcmV0dXJuCitAY29kZXtOb25lfS4gVGhlIGNvZGUgaW4gR0RCIHRoYXQg ZW5hYmxlcyB3cml0aW5nIHVud2luZGVycyBpbiBQeXRob24KK3VzZXMgdGhp cyBvYmplY3QgdG8gcmV0dXJuIGZyYW1lJ3MgSUQgYW5kIHByZXZpb3VzIGZy YW1lIHJlZ2lzdGVycword2hlbiBHREIgY29yZSBhc2tzIGZvciB0aGVtLgor CitAc3ViaGVhZGluZyBVbndpbmRlciBJbnB1dAorCitBbiBvYmplY3QgcGFz c2VkIHRvIGFuIHVud2luZGVyIChhIEBjb2Rle1NuaWZmZXJJbmZvfSBpbnN0 YW5jZSkgcHJvdmlkZXMKK2EgbWV0aG9kIHRvIHJlYWQgZnJhbWUncyByZWdp c3RlcnM6CisKK0BkZWZ1biBTbmlmZmVySW5mby5yZWFkX3JlZ2lzdGVyIChy ZWcpCitUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBjb250ZW50cyBvZiB0aGUg cmVnaXN0ZXIgQHZhcntyZWdufSBpbiB0aGUKK2ZyYW1lIGFzIGEgQGNvZGV7 Z2RiLlZhbHVlfSBvYmplY3QuIEB2YXJ7cmVnfSBjYW4gYmUgZWl0aGVyIGEg cmVnaXN0ZXIKK251bWJlciBvciBhIHJlZ2lzdGVyIG5hbWU7IHRoZSB2YWx1 ZXMgYXJlIHBsYXRmb3JtLXNwZWNpZmljLiBUaGV5IGFyZQordXN1YWxseSBm b3VuZCBpbiB0aGUgY29ycmVzcG9uZGluZyB4eHgtQGNvZGV7dGRlcC5ofSBm aWxlIGluIHRoZSBnZGIKK3NvdXJjZSB0cmVlLgorQGVuZCBkZWZ1bgorCitJ dCBhbHNvIHByb3ZpZGVzIHNldmVyYWwgZmFjdG9yeSBtZXRob2RzLiBJZiBh biB1bndpbmRlciByZWNvZ25pemVzCit0aGUgZnJhbWUsIGl0IHNob3VsZCBp bnZva2Ugb25lIG9mIHRoZW0gdG8gY3JlYXRlIGEgZ2RiLlVud2luZEluZm8K K2luc3RhbmNlIHRvIGJlIHJldHVybmVkIHRvIEdEQjoKKworQGRlZnVuIFNu aWZmZXJJbmZvLnVud2luZF9pbmZvX3dpdGhfaWQoc3AsIHBjKQorUmV0dXJu cyBhIG5ldyBAY29kZXtnZGIuVW53aW5kSW5mb30gaW5zdGFuY2UgaWRlbnRp ZmllZCBieSBnaXZlbgorQHZhcntzcH0gYW5kIEB2YXJ7cGN9IHZhbHVlcy4g VGhpcyBpcyB0aGUgbW9zdCBjb21tb24gd2F5IG9mIGNyZWF0aW5nCitpbnN0 YW5jZSByZXN1bHQuCitAZW5kIGRlZnVuCisKK0BkZWZ1biBTbmlmZmVySW5m by5mcmFtZV9pZF9idWlsZF9zcGVjaWFsKHNwLCBwYywgc3BlY2lhbCkKK1Jl dHVybnMgYSBuZXcgQGNvZGV7Z2RiLlVud2luZEluZm99IGluc3RhbmNlIGlk ZW50aXRpZmllZCBieSBnaXZlbgorQHZhcntzcH0sIEB2YXJ7cGN9LCBhbmQg QHZhcntzcGVjaWFsfSB2YWx1ZXMuCitAZW5kIGRlZnVuCisKK0BkZWZ1biBn ZGIuVW53aW5kSW5mby5mcmFtZV9pZF9idWlsZF93aWxkKHNwKQorUmV0dXJu cyBhIG5ldyBAY29kZXtnZGIuVW53aW5kSW5mb30gaW5zdGFuY2UgaWRlbnRp ZmllZCBieSBnaXZlbgorQHZhcntzcH0gdmFsdWUuCitAZW5kIGRlZnVuCisK K0BzdWJoZWFkaW5nIFVud2luZGVyIE91dHB1dDogVW53aW5kSW5mbworCitB IEBjb2Rle2dkYi5VbndpbmRJbmZvfSBvYmplY3QgY2FuIGJlIGNvbnN0cnVj dGVkIGJ5IG9uZSBvZiB0aGUKK21ldGhvZHMgZGVzY3JpYmVkIGFib3ZlLiBV c2UgdGhlIGZvbGxvd2luZyBtZXRob2QgdG8gc2V0IHRoZSBjYWxsZXIKK2Zy YW1lJ3MgcmVnaXN0ZXJzOgorCitAZGVmdW4gZ2RiLlVud2luZEluZm8uc2V0 X3ByZXZpb3VzX2ZyYW1lX3JlZ2lzdGVyKHJlZywgdmFsdWUpCitAdmFye3Jl Z30gaWRlbnRpZmllcyB0aGUgcmVnaXN0ZXIuIEl0IGNhbiBiZSBhIG51bWJl ciBvciBhIG5hbWUsIGp1c3QKK2FzIGZvciB0aGUgQGNvZGV7U25pZmZlcklu Zm8ucmVhZF9yZWdpc3Rlcn0gbWV0aG9kIGFib3ZlLiBAdmFye3ZhbHVlfQor aXMgYSByZWdpc3RlciB2YWx1ZSAoYSBAY29kZXtnZGIuVmFsdWV9IG9iamVj dCkuCisKK0BzdWJoZWFkaW5nIFVud2luZGVyIFNrZWxldG9uIENvZGUKKwor R0RCIGNvbWVzIHdpdGggdGhlIG1vZHVsZSBjb250YWluaW5nIHRoZSBiYXNl IEBjb2Rle1Vud2luZGVyfSBjbGFzcy4KK0Rlcml2ZSB5b3VyIHVud2luZGVy IGNsYXNzIGZyb20gaXQgYW5kIHN0cnVjdHVyZSB0aGUgY29kZSBhcyBmb2xs b3dzOgorCitAc21hbGxleGFtcGxlCitmcm9tIGdkYi51bndpbmRlcnMgaW1w b3J0IFVud2luZGVyCisKK2NsYXNzIE15VW53aW5kZXIoVW53aW5kZXIpOgor ICAgIGRlZiBfX2luaXRfXyguLi4uKToKKyAgICAgICAgc3VwZXIoTXlVbndp bmRlciwgc2VsZikuX19pbml0X19fKDxleHBlY3RzIHVud2luZGVyIG5hbWUg YXJndW1lbnQ+KQorICAgIGRlZiBfX2NhbGxfXyhzbmlmZmVyX2luZm8pOgor ICAgICAgICBpZiBub3QgPHdlIHJlY29nbml6ZSBmcmFtZT46CisgICAgICAg ICAgICByZXR1cm4gTm9uZQorICAgICAgICAjIENyZWF0ZSB1bndpbmRlciBy ZXN1bHQuIFRoZSBtb3N0IGNvbW1vbiB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlz CisgICAgICAgICMgdG8gZmluZCBTUCAoc3RhY2sgcG9pbnRlcikgYW5kIFBD IChwcm9ncmFtIGNvdW50ZXIpIHZhbHVlcworICAgICAgICAjIGluIHRoZSBj dXJyZW50IGZyYW1lIGFuZCB0aGVuIGNhbGwgdW53aW5kX2luZm9fd2l0aF9p ZCBtZXRob2Q6CisgICAgICAgIHVud2luZF9pbmZvID0gc25pZmZlcl9pbmZv LnVud2luZF9pbmZvX3dpdGhfaWQoc3AsIHBjKQorCisgICAgICAgICMgRmlu ZCB0aGUgdmFsdWVzIG9mIHRoZSByZWdpc3RlcnMgaW4gdGhlIGNhbGxlcidz IGZyYW1lIGFuZCAKKyAgICAgICAgIyBzYXZlIHRoZW0gaW4gdGhlIHJlc3Vs dDoKKyAgICAgICAgdW53aW5kX2luZm8uc2V0X3ByZXZpb3VzX2ZyYW1lX3Jl Z2lzdGVyKDxyZWdpc3Rlcj4sIDx2YWx1ZT4pCisKKyAgICAgICAgIyBSZXR1 cm4gdGhlIHJlc3VsdDoKKyAgICAgICAgcmV0dXJuIHVud2luZF9pbnN0YW5j ZQorCitAZW5kIHNtYWxsZXhhbXBsZQorCitAc3ViaGVhZGluZyBSZWdpc3Rl cmluZyBhIFVud2luZGVyCisKK0FuIG9iamVjdCBmaWxlLCBhIHByb2dyYW0g c3BhY2UsIGFuZCB0aGUgQHZhbHVle0dEQk59IHByb3BlciBjYW4gaGF2ZQor dW53aW5kZXJzIHJlZ2lzdGVyZWQgd2l0aCBpdC4KKworVGhlIEBjb2Rle2dk Yi51bndpbmRlcnN9IG1vZHVsZSBwcm92aWRlcyB0aGUgZnVuY3Rpb24gdG8g cmVnaXN0ZXIgYQordW53aW5kZXI6CisKK0BkZWZ1biBnZGIudW53aW5kZXIu cmVnaXN0ZXJfdW53aW5kZXIgKGxvY3VzLCB1bndpbmRlciwgcmVwbGFjZT1G YWxzZSkKK0B2YXJ7bG9jdXN9IGlzIHNwZWNpZmllcyBhbiBvYmplY3QgZmls ZSBvciBhIHByb2dyYW0gc3BhY2UgdG8gd2hpY2gKK0B2YXJ7dW53aW5kZXJ9 IGlzIGFkZGVkLiBQYXNzaW5nIEBjb2Rle05vbmV9IG9yIEBjb2Rle2dkYn0g YWRkcworQHZhcnt1bndpbmRlcn0gdG8gdGhlIEB2YWx1ZXtHREJOfSdzIGds b2JhbCB1bndpbmRlciBsaXN0LiAgVGhlIG5ld2x5CithZGRlZCBAdmFye3Vu d2luZGVyfSB3aWxsIGJlIGNhbGxlZCBiZWZvcmUgYW55IG90aGVyIHVud2lu ZGVyIGZyb20gdGhlCitzYW1lIGxvY3VzLiAgVHdvIHVud2luZGVycyBpbiB0 aGUgc2FtZSBsb2N1cyBjYW5ub3QgaGF2ZSB0aGUgc2FtZQorbmFtZS4gQW4g YXR0ZW1wdCB0byBhZGQgYSB1bndpbmRlciB3aXRoIGFscmVhZHkgZXhpc3Rp bmcgbmFtZSByYWlzZXMgYW4KK2V4Y2VwdGlvbiB1bmxlc3MgQHZhcntyZXBs YWNlfSBpcyBAY29kZXtUcnVlfSwgaW4gd2hpY2ggY2FzZSB0aGUgb2xkCit1 bndpbmRlciBpcyBkZWxldGVkLgorQGVuZCBkZWZ1bgorCitAc3ViaGVhZGlu ZyBVbndpbmRlciBQcmVjZWRlbmNlCisKK0B2YWx1ZXtHREJOfSBmaXJzdCBj YWxscyB0aGUgdW53aW5kZXJzIGZyb20gYWxsIHRoZSBvYmplY3QgZmlsZXMg aW4gbm8KK3BhcnRpY3VsYXIgb3JkZXIsIHRoZW4gdGhlIHVud2luZGVycyBm cm9tIHRoZSBjdXJyZW50IHByb2dyYW0gc3BhY2UsCithbmQgZmluYWxseSB0 aGUgdW53aW5kZXJzIGZyb20gQHZhbHVle0dEQk59LgorCiBAbm9kZSBYbWV0 aG9kcyBJbiBQeXRob24KIEBzdWJzdWJzZWN0aW9uIFhtZXRob2RzIEluIFB5 dGhvbgogQGNpbmRleCB4bWV0aG9kcyBpbiBQeXRob24KZGlmZiAtLWdpdCBh L2dkYi9weXRob24vbGliL2dkYi9fX2luaXRfXy5weSBiL2dkYi9weXRob24v bGliL2dkYi9fX2luaXRfXy5weQppbmRleCA5MmIwNmYyLi43MzRlNWNhIDEw MDY0NAotLS0gYS9nZGIvcHl0aG9uL2xpYi9nZGIvX19pbml0X18ucHkKKysr IGIvZ2RiL3B5dGhvbi9saWIvZ2RiL19faW5pdF9fLnB5CkBAIC03MSw2ICs3 MSw4IEBAIHR5cGVfcHJpbnRlcnMgPSBbXQogeG1ldGhvZHMgPSBbXQogIyBJ bml0aWFsIGZyYW1lIGZpbHRlcnMuCiBmcmFtZV9maWx0ZXJzID0ge30KKyMg SW5pdGlhbCBmcmFtZSB1bndpbmRlcnMuCitmcmFtZV91bndpbmRlcnMgPSBb XQogCiAjIENvbnZlbmllbmNlIHZhcmlhYmxlIHRvIEdEQidzIHB5dGhvbiBk aXJlY3RvcnkKIFBZVEhPTkRJUiA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRo LmRpcm5hbWUoX19maWxlX18pKQpkaWZmIC0tZ2l0IGEvZ2RiL3B5dGhvbi9s aWIvZ2RiL2NvbW1hbmQvdW53aW5kZXJzLnB5IGIvZ2RiL3B5dGhvbi9saWIv Z2RiL2NvbW1hbmQvdW53aW5kZXJzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLjFmMGM1OGIKLS0tIC9kZXYvbnVsbAorKysgYi9n ZGIvcHl0aG9uL2xpYi9nZGIvY29tbWFuZC91bndpbmRlcnMucHkKQEAgLTAs MCArMSwxOTkgQEAKKyMgVW53aW5kZXIgY29tbWFuZHMuCisjIENvcHlyaWdo dCAyMDE1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVk IGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2 ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlv bikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisj IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu CisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhp cyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9s aWNlbnNlcy8+LgorCitpbXBvcnQgZ2RiCitpbXBvcnQgcmUKKworCitkZWYg dmFsaWRhdGVfcmVnZXhwKGV4cCwgaWRzdHJpbmcpOgorICAgIHRyeToKKyAg ICAgICAgcmV0dXJuIHJlLmNvbXBpbGUoZXhwKQorICAgIGV4Y2VwdCBTeW50 YXhFcnJvcjoKKyAgICAgICAgcmFpc2UgU3ludGF4RXJyb3IoIkludmFsaWQg JXMgcmVnZXhwOiAlcy4iICUgKGlkc3RyaW5nLCBleHApKQorCisKK2RlZiBw YXJzZV91bndpbmRlcl9jb21tYW5kX2FyZ3MoYXJnKToKKyAgICAiIiJJbnRl cm5hbCB1dGlsaXR5IHRvIHBhcnNlIHVud2luZGVyIGNvbW1hbmQgYXJndi4K KworICAgIEFyZ3VtZW50czoKKyAgICAgICAgYXJnOiBUaGUgYXJndW1lbnRz IHRvIHRoZSBjb21tYW5kLiBUaGUgZm9ybWF0IGlzOgorICAgICAgICAgICAg IFtsb2N1cy1yZWdleHAgW25hbWUtcmVnZXhwXV0KKworICAgIFJldHVybnM6 CisgICAgICAgIEEgMi10dXBsZSBvZiBjb21waWxlZCByZWd1bGFyIGV4cHJl c3Npb25zLgorCisgICAgUmFpc2VzOgorICAgICAgICBTeW50YXhFcnJvcjog YW4gZXJyb3IgcHJvY2Vzc2luZyBBUkcKKyAgICAiIiIKKworICAgIGFyZ3Yg PSBnZGIuc3RyaW5nX3RvX2FyZ3YoYXJnKQorICAgIGFyZ2MgPSBsZW4oYXJn dikKKyAgICBpZiBhcmdjID4gMjoKKyAgICAgICAgcmFpc2UgU3ludGF4RXJy b3IoIlRvbyBtYW55IGFyZ3VtZW50cy4iKQorICAgIGxvY3VzX3JlZ2V4cCA9 ICIiCisgICAgbmFtZV9yZWdleHAgPSAiIgorICAgIGlmIGFyZ2MgPj0gMToK KyAgICAgICAgbG9jdXNfcmVnZXhwID0gYXJndlswXQorICAgICAgICBpZiBh cmdjID49IDI6CisgICAgICAgICAgICBuYW1lX3JlZ2V4cCA9IGFyZ3ZbMV0K KyAgICByZXR1cm4gKHZhbGlkYXRlX3JlZ2V4cChsb2N1c19yZWdleHAsICJs b2N1cyIpLAorICAgICAgICAgICAgdmFsaWRhdGVfcmVnZXhwKG5hbWVfcmVn ZXhwLCAidW53aW5kZXIiKSkKKworCitjbGFzcyBJbmZvVW53aW5kZXIoZ2Ri LkNvbW1hbmQpOgorICAgICIiIkdEQiBjb21tYW5kIHRvIGxpc3QgdW53aW5k ZXJzLgorCisgICAgVXNhZ2U6IGluZm8gdW53aW5kZXIgW2xvY3VzLXJlZ2V4 cCBbbmFtZS1yZWdleHBdXQorCisgICAgTE9DVVMtUkVHRVhQIGlzIGEgcmVn dWxhciBleHByZXNzaW9uIG1hdGNoaW5nIHRoZSBsb2NhdGlvbiBvZiB0aGUK KyAgICB1bndpbmRlci4gIElmIGl0IGlzIG9taXR0ZWQsIGFsbCByZWdpc3Rl cmVkIHVud2luZGVycyBmcm9tIGFsbAorICAgIGxvY2kgYXJlIGxpc3RlZC4g IEEgbG9jdXMgY291bGQgYmUgJ2dsb2JhbCcsIGEgcmVndWxhciBleHByZXNz aW9uCisgICAgbWF0Y2hpbmcgdGhlIGN1cnJlbnQgcHJvZ3JhbSBzcGFjZSdz IGZpbGVuYW1lLCBvciBhIHJlZ3VsYXIKKyAgICBleHByZXNzaW9uIG1hdGNo aW5nIGZpbGVuYW1lcyBvZiBvYmpmaWxlcy4gIExvY3VzIGNvdWxkIGJlCisg ICAgJ3Byb2dzcGFjZScgdG8gc3BlY2lmeSB0aGF0IG9ubHkgdW53aW5kZXJz IGZyb20gdGhlIGN1cnJlbnQKKyAgICBwcm9nc3BhY2Ugc2hvdWxkIGJlIGxp c3RlZC4KKworICAgIE5BTUUtUkVHRVhQIGlzIGEgcmVndWxhciBleHByZXNz aW9uIHRvIGZpbHRlciB1bndpbmRlciBuYW1lcy4gIElmCisgICAgdGhpcyBv bWl0dGVkIGZvciBhIHNwZWNpZmllZCBsb2N1cywgdGhlbiBhbGwgcmVnaXN0 ZXJlZCB1bndpbmRlcnMKKyAgICBpbiB0aGUgbG9jdXMgYXJlIGxpc3RlZC4K KworICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAg ICBzdXBlcihJbmZvVW53aW5kZXIsIHNlbGYpLl9faW5pdF9fKCJpbmZvIHVu d2luZGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZ2RiLkNPTU1BTkRfREFUQSkKKworICAgIGRlZiBsaXN0X3Vu d2luZGVycyhzZWxmLCB0aXRsZSwgdW53aW5kZXJzLCBuYW1lX3JlKToKKyAg ICAgICAgIiIiTGlzdHMgdGhlIHVud2luZGVycyB3aG9zZSBuYW1lIG1hdGNo ZXMgcmVnZXhwLgorCisgICAgICAgIEFyZ3VtZW50czoKKyAgICAgICAgICAg IHRpdGxlOiBUaGUgbGluZSB0byBwcmludCBiZWZvcmUgdGhlIGxpc3QuCisg ICAgICAgICAgICB1bndpbmRlcnM6IFRoZSBsaXN0IG9mIHRoZSB1bndpbmRl cnMuCisgICAgICAgICAgICBuYW1lX3JlOiB1bndpbmRlciBuYW1lIGZpbHRl ci4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCB1bndpbmRlcnM6Cisg ICAgICAgICAgICByZXR1cm4KKyAgICAgICAgcHJpbnQgdGl0bGUKKyAgICAg ICAgZm9yIHVud2luZGVyIGluIHVud2luZGVyczoKKyAgICAgICAgICAgIGlm IG5hbWVfcmUubWF0Y2godW53aW5kZXIubmFtZSk6CisgICAgICAgICAgICAg ICAgcHJpbnQoIiAgJXMlcyIgJSAodW53aW5kZXIubmFtZSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiIiBpZiB1bndpbmRlci5lbmFi bGVkIGVsc2UgIltkaXNhYmxlZF0iKSkKKworICAgIGRlZiBpbnZva2Uoc2Vs ZiwgYXJnLCBmcm9tX3R0eSk6CisgICAgICAgIGxvY3VzX3JlLCBuYW1lX3Jl ID0gcGFyc2VfdW53aW5kZXJfY29tbWFuZF9hcmdzKGFyZykKKyAgICAgICAg aWYgbG9jdXNfcmUubWF0Y2goImdsb2JhbCIpOgorICAgICAgICAgICAgc2Vs Zi5saXN0X3Vud2luZGVycygiZ2xvYmFsIHVud2luZGVyczoiLCBnZGIuZnJh bWVfdW53aW5kZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBuYW1lX3JlKQorICAgICAgICBpZiBsb2N1c19yZS5tYXRjaCgicHJvZ3Nw YWNlIik6CisgICAgICAgICAgICBjcCA9IGdkYi5jdXJyZW50X3Byb2dzcGFj ZSgpCisgICAgICAgICAgICBzZWxmLmxpc3RfdW53aW5kZXJzKCJwcm9nc3Bh Y2UgJXMgdW53aW5kZXJzOiIgJSBjcC5maWxlbmFtZSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY3AuZnJhbWVfdW53aW5kZXJzLCBuYW1l X3JlKQorICAgICAgICBmb3Igb2JqZmlsZSBpbiBnZGIub2JqZmlsZXMoKToK KyAgICAgICAgICAgIGlmIGxvY3VzX3JlLm1hdGNoKG9iamZpbGUuZmlsZW5h bWUpOgorICAgICAgICAgICAgICAgIHNlbGYubGlzdF91bndpbmRlcnMoIm9i amZpbGUgJXMgdW53aW5kZXJzOiIgJSBvYmpmaWxlLmZpbGVuYW1lLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZmlsZS5mcmFt ZV91bndpbmRlcnMsIG5hbWVfcmUpCisKKworZGVmIGRvX2VuYWJsZV91bndp bmRlcjEodW53aW5kZXJzLCBuYW1lX3JlLCBmbGFnKToKKyAgICAiIiJFbmFi bGUvZGlzYWJsZSB1bndpbmRlcnMgd2hvc2UgbmFtZXMgbWF0Y2ggZ2l2ZW4g cmVnZXguCisKKyAgICBBcmd1bWVudHM6CisgICAgICAgIHVud2luZGVyczog VGhlIGxpc3Qgb2YgdW53aW5kZXJzLgorICAgICAgICBuYW1lX3JlOiBVbndp bmRlciBuYW1lIGZpbHRlci4KKyAgICAgICAgZmxhZzogRW5hYmxlL2Rpc2Fi bGUuCisKKyAgICBSZXR1cm5zOgorICAgICAgICBUaGUgbnVtYmVyIG9mIHVu d2luZGVycyBhZmZlY3RlZC4KKyAgICAiIiIKKyAgICB0b3RhbCA9IDAKKyAg ICBmb3IgdW53aW5kZXIgaW4gdW53aW5kZXJzOgorICAgICAgICBpZiBuYW1l X3JlLm1hdGNoKHVud2luZGVyLm5hbWUpOgorICAgICAgICAgICAgdW53aW5k ZXIuZW5hYmxlZCA9IGZsYWcKKyAgICAgICAgICAgIHRvdGFsICs9IDEKKyAg ICByZXR1cm4gdG90YWwKKworCitkZWYgZG9fZW5hYmxlX3Vud2luZGVyKGFy ZywgZmxhZyk6CisgICAgIiIiRW5hYmxlL2Rpc2FibGUgdW53aW5kZXIocyku IiIiCisgICAgKGxvY3VzX3JlLCBuYW1lX3JlKSA9IHBhcnNlX3Vud2luZGVy X2NvbW1hbmRfYXJncyhhcmcpCisgICAgdG90YWwgPSAwCisgICAgaWYgbG9j dXNfcmUubWF0Y2goImdsb2JhbCIpOgorICAgICAgICB0b3RhbCArPSBkb19l bmFibGVfdW53aW5kZXIxKGdkYi5mcmFtZV91bndpbmRlcnMsIG5hbWVfcmUs IGZsYWcpCisgICAgaWYgbG9jdXNfcmUubWF0Y2goInByb2dzcGFjZSIpOgor ICAgICAgICB0b3RhbCArPSBkb19lbmFibGVfdW53aW5kZXIxKGdkYi5jdXJy ZW50X3Byb2dzcGFjZSgpLmZyYW1lX3Vud2luZGVycywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lX3JlLCBmbGFnKQorICAg IGZvciBvYmpmaWxlIGluIGdkYi5vYmpmaWxlcygpOgorICAgICAgICBpZiBs b2N1c19yZS5tYXRjaChvYmpmaWxlLmZpbGVuYW1lKToKKyAgICAgICAgICAg IHRvdGFsICs9IGRvX2VuYWJsZV91bndpbmRlcjEob2JqZmlsZS5mcmFtZV91 bndpbmRlcnMsIG5hbWVfcmUsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGZsYWcpCisgICAgcHJpbnQoIiVkIHVud2luZGVy JXMgJXMiICUgKHRvdGFsLCAiIiBpZiB0b3RhbCA9PSAxIGVsc2UgInMiLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZW5hYmxlZCIgaWYg ZmxhZyBlbHNlICJkaXNhYmxlZCIpKQorCisKK2NsYXNzIEVuYWJsZVVud2lu ZGVyKGdkYi5Db21tYW5kKToKKyAgICAiIiJHREIgY29tbWFuZCB0byBlbmFi bGUgdW53aW5kZXJzLgorCisgICAgVXNhZ2U6IGVuYWJsZSB1bndpbmRlciBb bG9jdXMtcmVnZXhwIFtuYW1lLXJlZ2V4cF1dCisKKyAgICBMT0NVUy1SRUdF WFAgaXMgYSByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2hpbmcgdGhlIG9iamVj dHMgdG8gZXhhbWluZS4KKyAgICBMb2NpIGFyZSAiZ2xvYmFsIiwgdGhlIHBy b2dyYW0gc3BhY2UncyBmaWxlLCBhbmQgdGhlIG9iamZpbGVzIHdpdGhpbgor ICAgIHRoYXQgcHJvZ3JhbSBzcGFjZS4KKworICAgIE5BTUVfUkVHRVhQIGlz IGEgcmVndWxhciBleHByZXNzaW9uIHRvIGZpbHRlciB1bndpbmRlciBuYW1l cy4KKyAgICBJZiB0aGlzIG9taXR0ZWQgZm9yIGEgc3BlY2lmaWVkIGxvY3Vz LCB0aGVuIGFsbCByZWdpc3RlcmVkCisgICAgdW53aW5kZXJzIGluIHRoZSBs b2N1cyBhcmUgYWZmZWN0ZWQuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0 X18oc2VsZik6CisgICAgICAgIHN1cGVyKEVuYWJsZVVud2luZGVyLCBzZWxm KS5fX2luaXRfXygiZW5hYmxlIHVud2luZGVyIiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdkYi5DT01NQU5EX0RB VEEpCisKKyAgICBkZWYgaW52b2tlKHNlbGYsIGFyZywgZnJvbV90dHkpOgor ICAgICAgICAiIiJHREIgY2FsbHMgdGhpcyB0byBwZXJmb3JtIHRoZSBjb21t YW5kLiIiIgorICAgICAgICBkb19lbmFibGVfdW53aW5kZXIoYXJnLCBUcnVl KQorCisKK2NsYXNzIERpc2FibGVVbndpbmRlcihnZGIuQ29tbWFuZCk6Cisg ICAgIiIiR0RCIGNvbW1hbmQgdG8gZGlzYWJsZSB0aGUgc3BlY2lmaWVkIHVu d2luZGVyLgorCisgICAgVXNhZ2U6IGRpc2FibGUgdW53aW5kZXIgW2xvY3Vz LXJlZ2V4cCBbbmFtZS1yZWdleHBdXQorCisgICAgTE9DVVMtUkVHRVhQIGlz IGEgcmVndWxhciBleHByZXNzaW9uIG1hdGNoaW5nIHRoZSBvYmplY3RzIHRv IGV4YW1pbmUuCisgICAgTG9jaSBhcmUgImdsb2JhbCIsIHRoZSBwcm9ncmFt IHNwYWNlJ3MgZmlsZSwgYW5kIHRoZSBvYmpmaWxlcyB3aXRoaW4KKyAgICB0 aGF0IHByb2dyYW0gc3BhY2UuCisKKyAgICBOQU1FX1JFR0VYUCBpcyBhIHJl Z3VsYXIgZXhwcmVzc2lvbiB0byBmaWx0ZXIgdW53aW5kZXIgbmFtZXMuCisg ICAgSWYgdGhpcyBvbWl0dGVkIGZvciBhIHNwZWNpZmllZCBsb2N1cywgdGhl biBhbGwgcmVnaXN0ZXJlZAorICAgIHVud2luZGVycyBpbiB0aGUgbG9jdXMg YXJlIGFmZmVjdGVkLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNl bGYpOgorICAgICAgICBzdXBlcihEaXNhYmxlVW53aW5kZXIsIHNlbGYpLl9f aW5pdF9fKCJkaXNhYmxlIHVud2luZGVyIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGIuQ09NTUFORF9EQVRB KQorCisgICAgZGVmIGludm9rZShzZWxmLCBhcmcsIGZyb21fdHR5KToKKyAg ICAgICAgIiIiR0RCIGNhbGxzIHRoaXMgdG8gcGVyZm9ybSB0aGUgY29tbWFu ZC4iIiIKKyAgICAgICAgZG9fZW5hYmxlX3Vud2luZGVyKGFyZywgRmFsc2Up CisKKworZGVmIHJlZ2lzdGVyX3Vud2luZGVyX2NvbW1hbmRzKCk6CisgICAg IiIiSW5zdGFsbHMgdGhlIHVud2luZGVyIGNvbW1hbmRzLiIiIgorICAgIElu Zm9VbndpbmRlcigpCisgICAgRW5hYmxlVW53aW5kZXIoKQorICAgIERpc2Fi bGVVbndpbmRlcigpCisKKworcmVnaXN0ZXJfdW53aW5kZXJfY29tbWFuZHMo KQpkaWZmIC0tZ2l0IGEvZ2RiL3B5dGhvbi9saWIvZ2RiL2Z1bmN0aW9uL3Vu d2luZGVycy5weSBiL2dkYi9weXRob24vbGliL2dkYi9mdW5jdGlvbi91bndp bmRlcnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u OWJlOGI4YgotLS0gL2Rldi9udWxsCisrKyBiL2dkYi9weXRob24vbGliL2dk Yi9mdW5jdGlvbi91bndpbmRlcnMucHkKQEAgLTAsMCArMSw1MiBAQAorIyBD b3B5cmlnaHQgKEMpIDIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ bmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBh cyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0 IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBw cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg Y29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxv bmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3 dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyIiIkludGVybmFsIGZ1bmN0aW9u cyBmb3Igd29ya2luZyB3aXRoIGZyYW1lIHVud2luZGVycy4iIiIKKworaW1w b3J0IGdkYgorCisKK2RlZiBleGVjdXRlX3Vud2luZGVycyhzbmlmZmVyX2lu Zm8pOgorICAgICIiIkludGVybmFsIGZ1bmN0aW9uIGNhbGxlZCBmcm9tIEdE QiB0byBleGVjdXRlIGFsbCB1bndpbmRlcnMuCisKKyAgICBSdW5zIGVhY2gg Y3VycmVudGx5IGVuYWJsZWQgdW53aW5kZXIgdW50aWwgaXQgZmluZHMgdGhl IG9uZSB0aGF0IGNhbgorICAgIHVud2luZCBnaXZlbiBmcmFtZS4KKworICAg IEFyZ3VtZW50czoKKyAgICAgICAgc25pZmZlcl9pbmZvOiBhbiBpbnN0YW5j ZSBvZiBnZGIuU25pZmZlckluZm8uCisgICAgUmV0dXJuczoKKyAgICAgICAg VW53aW5kSW5mbyBpbnN0YW5jZSBvciBOb25lLgorICAgICIiIgorICAgIGZv ciBvYmpmaWxlIGluIGdkYi5vYmpmaWxlcygpOgorICAgICAgICBmb3IgdW53 aW5kZXIgaW4gb2JqZmlsZS5mcmFtZV91bndpbmRlcnM6CisgICAgICAgICAg ICBpZiB1bndpbmRlci5lbmFibGVkOgorICAgICAgICAgICAgICAgIHVud2lu ZF9pbmZvID0gdW53aW5kZXIuX19jYWxsX18oc25pZmZlcl9pbmZvKQorICAg ICAgICAgICAgICAgIGlmIHVud2luZF9pbmZvIGlzIG5vdCBOb25lOgorICAg ICAgICAgICAgICAgICAgICByZXR1cm4gdW53aW5kX2luZm8KKworICAgIGN1 cnJlbnRfcHJvZ3NwYWNlID0gZ2RiLmN1cnJlbnRfcHJvZ3NwYWNlKCkKKyAg ICBmb3IgdW53aW5kZXIgaW4gY3VycmVudF9wcm9nc3BhY2UuZnJhbWVfdW53 aW5kZXJzOgorICAgICAgICBpZiB1bndpbmRlci5lbmFibGVkOgorICAgICAg ICAgICAgdW53aW5kX2luZm8gPSB1bndpbmRlci5fX2NhbGxfXyhzbmlmZmVy X2luZm8pCisgICAgICAgICAgICBpZiB1bndpbmRfaW5mbyBpcyBub3QgTm9u ZToKKyAgICAgICAgICAgICAgICByZXR1cm4gdW53aW5kX2luZm8KKworICAg IGZvciB1bndpbmRlciBpbiBnZGIuZnJhbWVfdW53aW5kZXJzOgorICAgICAg ICBpZiB1bndpbmRlci5lbmFibGVkOgorICAgICAgICAgICAgdW53aW5kX2lu Zm8gPSB1bndpbmRlci5fX2NhbGxfXyhzbmlmZmVyX2luZm8pCisgICAgICAg ICAgICBpZiB1bndpbmRfaW5mbyBpcyBub3QgTm9uZToKKyAgICAgICAgICAg ICAgICByZXR1cm4gdW53aW5kX2luZm8KKworICAgIHJldHVybiBOb25lCmRp ZmYgLS1naXQgYS9nZGIvcHl0aG9uL2xpYi9nZGIvdW53aW5kZXIucHkgYi9n ZGIvcHl0aG9uL2xpYi9nZGIvdW53aW5kZXIucHkKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ2NWE1ZQotLS0gL2Rldi9udWxsCisr KyBiL2dkYi9weXRob24vbGliL2dkYi91bndpbmRlci5weQpAQCAtMCwwICsx LDg5IEBACisjIENvcHlyaWdodCAoQykgMjAxNSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQor IyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNl LCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor IworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK KyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2Vl IDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIiIiVW53aW5k ZXIgY2xhc3MgYW5kIHJlZ2lzdGVyX3Vud2luZGVyIGZ1bmN0aW9uLiIiIgor CitpbXBvcnQgZ2RiCisKKworY2xhc3MgVW53aW5kZXIob2JqZWN0KToKKyAg ICAiIiJCYXNlIGNsYXNzIChvciBhIHRlbXBsYXRlKSBmb3IgZnJhbWUgdW53 aW5kZXJzIHdyaXR0ZW4gaW4gUHl0aG9uLgorCisgICAgQSB1bndpbmRlciBo YXMgYSBzaW5nbGUgbWV0aG9kIF9fY2FsbF9fIGFuZCB0aGUgYXR0cmlidXRl cyBkZXNjcmliZWQgYmVsb3cuCisKKyAgICBBdHRyaWJ1dGVzOgorICAgICAg ICBuYW1lOiBUaGUgbmFtZSBvZiB0aGUgdW53aW5kZXIuCisgICAgICAgIGVu YWJsZWQ6IEEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHVud2lu ZGVyIGlzIGVuYWJsZWQuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18o c2VsZiwgbmFtZSk6CisgICAgICAgICIiIkNvbnN0cnVjdG9yLgorCisgICAg ICAgIEFyZ3M6CisgICAgICAgICAgICBuYW1lOiBBbiBpZGVudGlmeWluZyBu YW1lIGZvciB0aGUgdW53aW5kZXIuCisgICAgICAgICIiIgorICAgICAgICBz ZWxmLm5hbWUgPSBuYW1lCisgICAgICAgIHNlbGYuZW5hYmxlZCA9IFRydWUK KworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBzbmlmZmVyX2luZm8pOgorICAg ICAgICAiIiJHREIgY2FsbHMgdGhpcyBtZXRob2QgdG8gdW53aW5kIGEgZnJh bWUuCisKKyAgICAgICAgQXJndW1lbnRzOgorICAgICAgICAgICAgc25pZmZl cl9pbmZvOiBBbiBpbnN0YW5jZSBvZiBnZGIuU25pZmZlckluZm8gZGVzY3Jp YmluZyB0aGUgZnJhbWUuCisKKyAgICAgICAgUmV0dXJuczoKKwkgICAgZ2Ri LlVud2luZEluZm8gaW5zdGFuY2UuCisgICAgICAgICIiIgorICAgICAgICBy YWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCJVbndpbmRlciBfX2NhbGxfXy4i KQorCisKK2RlZiByZWdpc3Rlcl91bndpbmRlcihsb2N1cywgdW53aW5kZXIs IHJlcGxhY2U9RmFsc2UpOgorICAgICIiIlJlZ2lzdGVyIHVud2luZGVyIGlu IGdpdmVuIGxvY3VzLgorCisgICAgVGhlIHVud2luZGVyIGlzIHByZXBlbmRl ZCB0byB0aGUgbG9jdXMncyB1bndpbmRlcnMgbGlzdC4gVW53aW5kZXIKKyAg ICBuYW1lIHNob3VsZCBiZSB1bmlxdWUuCisKKyAgICBBcmd1bWVudHM6Cisg ICAgICAgIGxvY3VzOiBFaXRoZXIgYW4gb2JqZmlsZSwgcHJvZ3NwYWNlLCBv ciBOb25lIChpbiB3aGljaCBjYXNlCisgICAgICAgICAgICAgICB0aGUgdW53 aW5kZXIgaXMgcmVnaXN0ZXJlZCBnbG9iYWxseSkuCisgICAgICAgIHVud2lu ZGVyOiBBbiBvYmplY3Qgb2YgYSBnZGIuVW53aW5kZXIgc3ViY2xhc3MKKyAg ICAgICAgcmVwbGFjZTogSWYgVHJ1ZSwgcmVwbGFjZXMgZXhpc3RpbmcgdW53 aW5kZXIgd2l0aCB0aGUgc2FtZSBuYW1lLgorICAgICAgICAgICAgICAgICBP dGhlcndpc2UsIHJhaXNlcyBleGNlcHRpb24gaWYgdW53aW5kZXIgd2l0aCB0 aGUgc2FtZQorICAgICAgICAgICAgICAgICBuYW1lIGFscmVhZHkgZXhpc3Rz LgorCisgICAgUmV0dXJuczoKKyAgICAgICAgTm90aGluZy4KKworICAgIFJh aXNlczoKKyAgICAgICAgUnVudGltZUVycm9yOiBVbndpbmRlciBuYW1lIGlz IG5vdCB1bmlxdWUuCisKKyAgICAiIiIKKyAgICBpZiBsb2N1cyBpcyBOb25l OgorICAgICAgICBpZiBnZGIucGFyYW1ldGVyKCJ2ZXJib3NlIik6CisgICAg ICAgICAgICBnZGIud3JpdGUoIlJlZ2lzdGVyaW5nIGdsb2JhbCAlcyB1bndp bmRlciAuLi5cbiIgJSB1bndpbmRlci5uYW1lKQorICAgICAgICBsb2N1cyA9 IGdkYgorICAgIGVsc2U6CisgICAgICAgIGlmIGdkYi5wYXJhbWV0ZXIoInZl cmJvc2UiKToKKyAgICAgICAgICAgIGdkYi53cml0ZSgiUmVnaXN0ZXJpbmcg JXMgdW53aW5kZXIgZm9yICVzIC4uLlxuIiAlCisgICAgICAgICAgICAgICAg ICAgICAgKHVud2luZGVyLm5hbWUsIGxvY3VzLmZpbGVuYW1lKSkKKyAgICBp ID0gMAorICAgIGZvciBuZWVkbGUgaW4gbG9jdXMuZnJhbWVfdW53aW5kZXJz OgorICAgICAgICBpZiBuZWVkbGUubmFtZSA9PSB1bndpbmRlci5uYW1lOgor ICAgICAgICAgICAgaWYgcmVwbGFjZToKKyAgICAgICAgICAgICAgICBkZWwg bG9jdXMuZnJhbWVfdW53aW5kZXJzW2ldCisgICAgICAgICAgICBlbHNlOgor ICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiVW53aW5kZXIg JXMgYWxyZWFkeSBleGlzdHMuIiAlIHVud2luZGVyLm5hbWUpCisgICAgICAg IGkgKz0gMQorICAgIGxvY3VzLmZyYW1lX3Vud2luZGVycy5pbnNlcnQoMCwg dW53aW5kZXIpCmRpZmYgLS1naXQgYS9nZGIvcHl0aG9uL3B5LW9iamZpbGUu YyBiL2dkYi9weXRob24vcHktb2JqZmlsZS5jCmluZGV4IDE1N2QyMDAuLmM5 NTI4YzMgMTAwNjQ0Ci0tLSBhL2dkYi9weXRob24vcHktb2JqZmlsZS5jCisr KyBiL2dkYi9weXRob24vcHktb2JqZmlsZS5jCkBAIC00Miw2ICs0MiwxMCBA QCB0eXBlZGVmIHN0cnVjdAogCiAgIC8qIFRoZSBmcmFtZSBmaWx0ZXIgbGlz dCBvZiBmdW5jdGlvbnMuICAqLwogICBQeU9iamVjdCAqZnJhbWVfZmlsdGVy czsKKworICAvKiBUaGUgbGlzdCBvZiBmcmFtZSB1bndpbmRlcnMuICAqLwor ICBQeU9iamVjdCAqZnJhbWVfdW53aW5kZXJzOworCiAgIC8qIFRoZSB0eXBl LXByaW50ZXIgbGlzdC4gICovCiAgIFB5T2JqZWN0ICp0eXBlX3ByaW50ZXJz OwogCkBAIC0xODQsNiArMTg4LDcgQEAgb2JqZnB5X2RlYWxsb2MgKFB5T2Jq ZWN0ICpvKQogICBQeV9YREVDUkVGIChzZWxmLT5kaWN0KTsKICAgUHlfWERF Q1JFRiAoc2VsZi0+cHJpbnRlcnMpOwogICBQeV9YREVDUkVGIChzZWxmLT5m cmFtZV9maWx0ZXJzKTsKKyAgUHlfWERFQ1JFRiAoc2VsZi0+ZnJhbWVfdW53 aW5kZXJzKTsKICAgUHlfWERFQ1JFRiAoc2VsZi0+dHlwZV9wcmludGVycyk7 CiAgIFB5X1hERUNSRUYgKHNlbGYtPnhtZXRob2RzKTsKICAgUHlfVFlQRSAo c2VsZiktPnRwX2ZyZWUgKHNlbGYpOwpAQCAtMjA2LDYgKzIxMSwxMCBAQCBv YmpmcHlfaW5pdGlhbGl6ZSAob2JqZmlsZV9vYmplY3QgKnNlbGYpCiAgIGlm IChzZWxmLT5mcmFtZV9maWx0ZXJzID09IE5VTEwpCiAgICAgcmV0dXJuIDA7 CiAKKyAgc2VsZi0+ZnJhbWVfdW53aW5kZXJzID0gUHlMaXN0X05ldyAoMCk7 CisgIGlmIChzZWxmLT5mcmFtZV91bndpbmRlcnMgPT0gTlVMTCkKKyAgICBy ZXR1cm4gMDsKKwogICBzZWxmLT50eXBlX3ByaW50ZXJzID0gUHlMaXN0X05l dyAoMCk7CiAgIGlmIChzZWxmLT50eXBlX3ByaW50ZXJzID09IE5VTEwpCiAg ICAgcmV0dXJuIDA7CkBAIC0zMTMsNiArMzIyLDQ4IEBAIG9iamZweV9zZXRf ZnJhbWVfZmlsdGVycyAoUHlPYmplY3QgKm8sIFB5T2JqZWN0ICpmaWx0ZXJz LCB2b2lkICppZ25vcmUpCiAgIHJldHVybiAwOwogfQogCisvKiBSZXR1cm4g dGhlIGZyYW1lIHVud2luZGVycyBhdHRyaWJ1dGUgZm9yIHRoaXMgb2JqZWN0 IGZpbGUuICAqLworCitQeU9iamVjdCAqCitvYmpmcHlfZ2V0X2ZyYW1lX3Vu d2luZGVycyAoUHlPYmplY3QgKm8sIHZvaWQgKmlnbm9yZSkKK3sKKyAgb2Jq ZmlsZV9vYmplY3QgKnNlbGYgPSAob2JqZmlsZV9vYmplY3QgKikgbzsKKwor ICBQeV9JTkNSRUYgKHNlbGYtPmZyYW1lX3Vud2luZGVycyk7CisgIHJldHVy biBzZWxmLT5mcmFtZV91bndpbmRlcnM7Cit9CisKKy8qIFNldCB0aGlzIG9i amVjdCBmaWxlJ3MgZnJhbWUgdW53aW5kZXJzIGxpc3QgdG8gVU5XSU5ERVJT LiAgKi8KKworc3RhdGljIGludAorb2JqZnB5X3NldF9mcmFtZV91bndpbmRl cnMgKFB5T2JqZWN0ICpvLCBQeU9iamVjdCAqdW53aW5kZXJzLCB2b2lkICpp Z25vcmUpCit7CisgIFB5T2JqZWN0ICp0bXA7CisgIG9iamZpbGVfb2JqZWN0 ICpzZWxmID0gKG9iamZpbGVfb2JqZWN0ICopIG87CisKKyAgaWYgKCF1bndp bmRlcnMpCisgICAgeworICAgICAgUHlFcnJfU2V0U3RyaW5nIChQeUV4Y19U eXBlRXJyb3IsCisJCSAgICAgICBfKCJDYW5ub3QgZGVsZXRlIHRoZSBmcmFt ZSB1bndpbmRlcnMgYXR0cmlidXRlLiIpKTsKKyAgICAgIHJldHVybiAtMTsK KyAgICB9CisKKyAgaWYgKCFQeUxpc3RfQ2hlY2sgKHVud2luZGVycykpCisg ICAgeworICAgICAgUHlFcnJfU2V0U3RyaW5nIChQeUV4Y19UeXBlRXJyb3Is CisJCSAgICAgICBfKCJUaGUgZnJhbWVfdW53aW5kZXJzIGF0dHJpYnV0ZSBt dXN0IGJlIGEgbGlzdC4iKSk7CisgICAgICByZXR1cm4gLTE7CisgICAgfQor CisgIC8qIFRha2UgY2FyZSBpbiBjYXNlIHRoZSBMSFMgYW5kIFJIUyBhcmUg cmVsYXRlZCBzb21laG93LiAgKi8KKyAgdG1wID0gc2VsZi0+ZnJhbWVfdW53 aW5kZXJzOworICBQeV9JTkNSRUYgKHVud2luZGVycyk7CisgIHNlbGYtPmZy YW1lX3Vud2luZGVycyA9IHVud2luZGVyczsKKyAgUHlfWERFQ1JFRiAodG1w KTsKKworICByZXR1cm4gMDsKK30KKwogLyogR2V0IHRoZSAndHlwZV9wcmlu dGVycycgYXR0cmlidXRlLiAgKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAg LTY1MSw2ICs3MDIsOCBAQCBzdGF0aWMgUHlHZXRTZXREZWYgb2JqZmlsZV9n ZXRzZXRbXSA9CiAgICAgIlByZXR0eSBwcmludGVycy4iLCBOVUxMIH0sCiAg IHsgImZyYW1lX2ZpbHRlcnMiLCBvYmpmcHlfZ2V0X2ZyYW1lX2ZpbHRlcnMs CiAgICAgb2JqZnB5X3NldF9mcmFtZV9maWx0ZXJzLCAiRnJhbWUgRmlsdGVy cy4iLCBOVUxMIH0sCisgIHsgImZyYW1lX3Vud2luZGVycyIsIG9iamZweV9n ZXRfZnJhbWVfdW53aW5kZXJzLAorICAgIG9iamZweV9zZXRfZnJhbWVfdW53 aW5kZXJzLCAiRnJhbWUgVW53aW5kZXJzIiwgTlVMTCB9LAogICB7ICJ0eXBl X3ByaW50ZXJzIiwgb2JqZnB5X2dldF90eXBlX3ByaW50ZXJzLCBvYmpmcHlf c2V0X3R5cGVfcHJpbnRlcnMsCiAgICAgIlR5cGUgcHJpbnRlcnMuIiwgTlVM TCB9LAogICB7ICJ4bWV0aG9kcyIsIG9iamZweV9nZXRfeG1ldGhvZHMsIE5V TEwsCmRpZmYgLS1naXQgYS9nZGIvcHl0aG9uL3B5LXByb2dzcGFjZS5jIGIv Z2RiL3B5dGhvbi9weS1wcm9nc3BhY2UuYwppbmRleCA5M2ZiYzE0Li4xN2Rh M2QxIDEwMDY0NAotLS0gYS9nZGIvcHl0aG9uL3B5LXByb2dzcGFjZS5jCisr KyBiL2dkYi9weXRob24vcHktcHJvZ3NwYWNlLmMKQEAgLTQxLDYgKzQxLDEw IEBAIHR5cGVkZWYgc3RydWN0CiAKICAgLyogVGhlIGZyYW1lIGZpbHRlciBs aXN0IG9mIGZ1bmN0aW9ucy4gICovCiAgIFB5T2JqZWN0ICpmcmFtZV9maWx0 ZXJzOworCisgIC8qIFRoZSBmcmFtZSB1bndpbmRlciBsaXN0LiAgKi8KKyAg UHlPYmplY3QgKmZyYW1lX3Vud2luZGVyczsKKwogICAvKiBUaGUgdHlwZS1w cmludGVyIGxpc3QuICAqLwogICBQeU9iamVjdCAqdHlwZV9wcmludGVyczsK IApAQCAtODIsNiArODYsNyBAQCBwc3B5X2RlYWxsb2MgKFB5T2JqZWN0ICpz ZWxmKQogICBQeV9YREVDUkVGIChwc19zZWxmLT5kaWN0KTsKICAgUHlfWERF Q1JFRiAocHNfc2VsZi0+cHJpbnRlcnMpOwogICBQeV9YREVDUkVGIChwc19z ZWxmLT5mcmFtZV9maWx0ZXJzKTsKKyAgUHlfWERFQ1JFRiAocHNfc2VsZi0+ ZnJhbWVfdW53aW5kZXJzKTsKICAgUHlfWERFQ1JFRiAocHNfc2VsZi0+dHlw ZV9wcmludGVycyk7CiAgIFB5X1hERUNSRUYgKHBzX3NlbGYtPnhtZXRob2Rz KTsKICAgUHlfVFlQRSAoc2VsZiktPnRwX2ZyZWUgKHNlbGYpOwpAQCAtMTA0 LDYgKzEwOSwxMCBAQCBwc3B5X2luaXRpYWxpemUgKHBzcGFjZV9vYmplY3Qg KnNlbGYpCiAgIGlmIChzZWxmLT5mcmFtZV9maWx0ZXJzID09IE5VTEwpCiAg ICAgcmV0dXJuIDA7CiAKKyAgc2VsZi0+ZnJhbWVfdW53aW5kZXJzID0gUHlM aXN0X05ldyAoMCk7CisgIGlmIChzZWxmLT5mcmFtZV91bndpbmRlcnMgPT0g TlVMTCkKKyAgICByZXR1cm4gMDsKKwogICBzZWxmLT50eXBlX3ByaW50ZXJz ID0gUHlMaXN0X05ldyAoMCk7CiAgIGlmIChzZWxmLT50eXBlX3ByaW50ZXJz ID09IE5VTEwpCiAgICAgcmV0dXJuIDA7CkBAIC0yMTEsNiArMjIwLDQ4IEBA IHBzcHlfc2V0X2ZyYW1lX2ZpbHRlcnMgKFB5T2JqZWN0ICpvLCBQeU9iamVj dCAqZnJhbWUsIHZvaWQgKmlnbm9yZSkKICAgcmV0dXJuIDA7CiB9CiAKKy8q IFJldHVybiB0aGUgbGlzdCBvZiB0aGUgZnJhbWUgdW53aW5kZXJzIGZvciB0 aGlzIHByb2dyYW0gc3BhY2UuICAqLworCitQeU9iamVjdCAqCitwc3B5X2dl dF9mcmFtZV91bndpbmRlcnMgKFB5T2JqZWN0ICpvLCB2b2lkICppZ25vcmUp Cit7CisgIHBzcGFjZV9vYmplY3QgKnNlbGYgPSAocHNwYWNlX29iamVjdCAq KSBvOworCisgIFB5X0lOQ1JFRiAoc2VsZi0+ZnJhbWVfdW53aW5kZXJzKTsK KyAgcmV0dXJuIHNlbGYtPmZyYW1lX3Vud2luZGVyczsKK30KKworLyogU2V0 IHRoaXMgcHJvZ3JhbSBzcGFjZSdzIGxpc3Qgb2YgdGhlIHVud2luZGVycyB0 byBVTldJTkRFUlMuICAqLworCitzdGF0aWMgaW50Citwc3B5X3NldF9mcmFt ZV91bndpbmRlcnMgKFB5T2JqZWN0ICpvLCBQeU9iamVjdCAqdW53aW5kZXJz LCB2b2lkICppZ25vcmUpCit7CisgIFB5T2JqZWN0ICp0bXA7CisgIHBzcGFj ZV9vYmplY3QgKnNlbGYgPSAocHNwYWNlX29iamVjdCAqKSBvOworCisgIGlm ICghdW53aW5kZXJzKQorICAgIHsKKyAgICAgIFB5RXJyX1NldFN0cmluZyAo UHlFeGNfVHlwZUVycm9yLAorCQkgICAgICAgImNhbm5vdCBkZWxldGUgdGhl IGZyYW1lIHVud2luZGVycyBsaXN0Iik7CisgICAgICByZXR1cm4gLTE7Cisg ICAgfQorCisgIGlmICghUHlMaXN0X0NoZWNrICh1bndpbmRlcnMpKQorICAg IHsKKyAgICAgIFB5RXJyX1NldFN0cmluZyAoUHlFeGNfVHlwZUVycm9yLAor CQkgICAgICAgInRoZSBmcmFtZSB1bndpbmRlcnMgYXR0cmlidXRlIG11c3Qg YmUgYSBsaXN0Iik7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgIC8q IFRha2UgY2FyZSBpbiBjYXNlIHRoZSBMSFMgYW5kIFJIUyBhcmUgcmVsYXRl ZCBzb21laG93LiAgKi8KKyAgdG1wID0gc2VsZi0+ZnJhbWVfdW53aW5kZXJz OworICBQeV9JTkNSRUYgKHVud2luZGVycyk7CisgIHNlbGYtPmZyYW1lX3Vu d2luZGVycyA9IHVud2luZGVyczsKKyAgUHlfWERFQ1JFRiAodG1wKTsKKwor ICByZXR1cm4gMDsKK30KKwogLyogR2V0IHRoZSAndHlwZV9wcmludGVycycg YXR0cmlidXRlLiAgKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTM0NSw2 ICszOTYsOCBAQCBzdGF0aWMgUHlHZXRTZXREZWYgcHNwYWNlX2dldHNldFtd ID0KICAgICAiUHJldHR5IHByaW50ZXJzLiIsIE5VTEwgfSwKICAgeyAiZnJh bWVfZmlsdGVycyIsIHBzcHlfZ2V0X2ZyYW1lX2ZpbHRlcnMsIHBzcHlfc2V0 X2ZyYW1lX2ZpbHRlcnMsCiAgICAgIkZyYW1lIGZpbHRlcnMuIiwgTlVMTCB9 LAorICB7ICJmcmFtZV91bndpbmRlcnMiLCBwc3B5X2dldF9mcmFtZV91bndp bmRlcnMsIHBzcHlfc2V0X2ZyYW1lX3Vud2luZGVycywKKyAgICAiRnJhbWUg dW53aW5kZXJzLiIsIE5VTEwgfSwKICAgeyAidHlwZV9wcmludGVycyIsIHBz cHlfZ2V0X3R5cGVfcHJpbnRlcnMsIHBzcHlfc2V0X3R5cGVfcHJpbnRlcnMs CiAgICAgIlR5cGUgcHJpbnRlcnMuIiwgTlVMTCB9LAogICB7ICJ4bWV0aG9k cyIsIHBzcHlfZ2V0X3htZXRob2RzLCBOVUxMLApkaWZmIC0tZ2l0IGEvZ2Ri L3B5dGhvbi9weS11bndpbmQuYyBiL2dkYi9weXRob24vcHktdW53aW5kLmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI4ZDcxMAot LS0gL2Rldi9udWxsCisrKyBiL2dkYi9weXRob24vcHktdW53aW5kLmMKQEAg LTAsMCArMSw4MzEgQEAKKy8qIFB5dGhvbiBmcmFtZSB1bndpbmRlciBpbnRl cmZhY2UuCisKKyAgIENvcHlyaWdodCAoQykgMjAxNSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg R0RCLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisg ICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBU aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVj ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8 aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaW5jbHVk ZSAiZGVmcy5oIgorI2luY2x1ZGUgImFyY2gtdXRpbHMuaCIKKyNpbmNsdWRl ICJmcmFtZS11bndpbmQuaCIKKyNpbmNsdWRlICJnZGJfb2JzdGFjay5oIgor I2luY2x1ZGUgImdkYmNtZC5oIgorI2luY2x1ZGUgImxhbmd1YWdlLmgiCisj aW5jbHVkZSAib2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJweXRob24taW50ZXJu YWwuaCIKKyNpbmNsdWRlICJyZWdjYWNoZS5oIgorI2luY2x1ZGUgInZhbHBy aW50LmgiCisjaW5jbHVkZSAidXNlci1yZWdzLmgiCisKKyNkZWZpbmUgVFJB Q0VfUFlfVU5XSU5EKGxldmVsLCBhcmdzLi4uKSBpZiAocHl1d19kZWJ1ZyA+ PSBsZXZlbCkgIFwKKyAgeyBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRs b2csIGFyZ3MpOyB9CisKK3R5cGVkZWYgc3RydWN0Cit7CisgIFB5T2JqZWN0 X0hFQUQKKworICAvKiBGcmFtZSB3ZSBhcmUgdW53aW5kaW5nLiAgKi8KKyAg c3RydWN0IGZyYW1lX2luZm8gKmZyYW1lX2luZm87CisKKyAgLyogSXRzIGFy Y2hpdGVjdHVyZSwgcGFzc2VkIGJ5IHRoZSBzbmlmZmVyIGNhbGxlci4gICov CisgIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoOworfSBzbmlmZmVyX2luZm9f b2JqZWN0OworCisvKiBUaGUgZGF0YSB3ZSBrZWVwIGZvciB0aGUgUHlVbndp bmRJbmZvOiBzbmlmZmVyX2luZm8sIHByZXZpb3VzCisgKiBmcmFtZSdzIHJl Z2lzdGVyIHNldCBhbmQgZnJhbWUgSUQuICAqLworCit0eXBlZGVmIHN0cnVj dAoreworICBQeU9iamVjdF9IRUFECisKKyAgLyogZ2RiLlNuaWZmZXJJbmZv IGZvciB0aGUgZnJhbWUgd2UgYXJlIHVud2luZGluZy4gICovCisgIFB5T2Jq ZWN0ICpzbmlmZmVyX2luZm87CisKKyAgLyogSXRzIElELiAgKi8KKyAgc3Ry dWN0IGZyYW1lX2lkIGZyYW1lX2lkOworCisgIC8qIFByZXZpb3VzIGZyYW1l IHJlZ2lzdGVycyBhcnJheS4gICovCisgIHN0cnVjdCByZWdfcHlkYXRhCisg IHsKKyAgICBpbnQgbnVtYmVyOworICAgIFB5T2JqZWN0ICp2YWx1ZTsKKyAg fSAqcHJldl9mcmFtZV9yZWdzOworCisgIC8qIFRoZSBjdXJyZW50IHNpemUg b2YgdGhlIGFycmF5IGFib3ZlLiAgKi8KKyAgaW50IHByZXZfZnJhbWVfcmVn c19zaXplOworCisgIC8qIEFuZCBpdHMgY2FwYWNpdHkuICAqLworICBpbnQg cHJldl9mcmFtZV9yZWdzX2NhcGFjaXR5OworCit9IHVud2luZF9pbmZvX29i amVjdDsKKworLyogVGhlIGRhdGEgd2Uga2VlcCBmb3IgYSBmcmFtZSB3ZSBj YW4gdW53aW5kOiBmcmFtZSBJRCBhbmQgYW4gYXJyYXkgb2YKKyAgIChyZWdp c3Rlcl9udW1iZXIsIHJlZ2lzdGVyX3ZhbHVlKSBwYWlycy4gICovCisKK3R5 cGVkZWYgc3RydWN0Cit7CisgIC8qIEZyYW1lIElELiAgKi8KKyAgc3RydWN0 IGZyYW1lX2lkIGZyYW1lX2lkOworCisgIC8qIEdEQiBBcmNoaXRlY3R1cmUu ICAqLworICBzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaDsKKworICAvKiBMZW5n dGggb2YgdGhlIGByZWcnIGFycmF5IGJlbG93LiAgKi8KKyAgaW50IHJlZ19j b3VudDsKKworICBzdHJ1Y3QgcmVnX2luZm8KKyAgeworICAgIC8qIFJlZ2lz dGVyIG51bWJlci4gICovCisgICAgaW50IG51bWJlcjsKKworICAgIC8qIFJl Z2lzdGVyIGRhdGEgYnl0ZXMgcG9pbnRlci4gICovCisgICAgZ2RiX2J5dGUg KmRhdGE7CisgIH0gcmVnW107Cit9IGNhY2hlZF9mcmFtZV9pbmZvOworCitz dGF0aWMgUHlUeXBlT2JqZWN0IHNuaWZmZXJfaW5mb19vYmplY3RfdHlwZQor ICAgIENQWUNIRUNLRVJfVFlQRV9PQkpFQ1RfRk9SX1RZUEVERUYgKCJzbmlm ZmVyX2luZm9fb2JqZWN0Iik7CisKK3N0YXRpYyBQeVR5cGVPYmplY3QgdW53 aW5kX2luZm9fb2JqZWN0X3R5cGUKKyAgICBDUFlDSEVDS0VSX1RZUEVfT0JK RUNUX0ZPUl9UWVBFREVGICgidW53aW5kX2luZm9fb2JqZWN0Iik7CisKK3N0 YXRpYyB1bnNpZ25lZCBpbnQgcHl1d19kZWJ1ZyA9IDA7CisKK3N0YXRpYyBz dHJ1Y3QgZ2RiYXJjaF9kYXRhICpweXV3X2dkYmFyY2hfZGF0YTsKKworLyog UGFyc2UgUHl0aG9uIEludCwgc2F2aW5nIGl0IGF0IHRoZSBnaXZlbiBhZGRy ZXNzLiBSZXR1cm5zIDEgb24gc3VjY2VzcywKKyAgIDAgb3RoZXJ3aXNlLiAg Ki8KKworc3RhdGljIGludAorcHl1d19wYXJzZV9pbnQgKFB5T2JqZWN0ICpw eW9faW50LCBpbnQgKnZhbHVlcCkKK3sKKyAgbG9uZyBsb25nX3ZhbHVlOwor CisgIGlmIChweW9faW50ID09IE5VTEwpCisgICAgcmV0dXJuIDA7CisKKyAg LyogTWFrZSBhIGxvbmcgbG9naWMgY2hlY2sgZmlyc3QuICBJbiBQeXRob24g My54LCBpbnRlcm5hbGx5LCBhbGwKKyAgICAgaW50ZWdlcnMgYXJlIHJlcHJl c2VudGVkIGFzIGxvbmdzLiAgSW4gUHl0aG9uIDIueCwgdGhlcmUgaXMgc3Rp bGwKKyAgICAgYSBkaWZmZXJlbnRpYXRpb24gaW50ZXJuYWxseSBiZXR3ZWVu IGEgUHlJbnQgYW5kIGEgUHlMb25nLgorICAgICBFeHBsaWNpdGx5IGRvIHRo aXMgbG9uZyBjaGVjayBjb252ZXJzaW9uIGZpcnN0LiBJbiBHREIsIGZvcgor ICAgICBQeXRob24gMy54LCB3ZSAjaWZkZWYgUHlJbnQgPSBQeUxvbmcuICBU aGlzIGNoZWNrIGhhcyB0byBiZSBkb25lCisgICAgIGZpcnN0IHRvIGVuc3Vy ZSB3ZSBkbyBub3QgbG9zZSBpbmZvcm1hdGlvbiBpbiB0aGUgY29udmVyc2lv bgorICAgICBwcm9jZXNzLiAgKi8KKyAgZWxzZSBpZiAoUHlMb25nX0NoZWNr IChweW9faW50KSkKKyAgICB7CisgICAgICBMT05HRVNUIGwgPSBQeUxvbmdf QXNMb25nTG9uZyAocHlvX2ludCk7CisKKyAgICAgIGlmIChQeUVycl9PY2N1 cnJlZCAoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICBsb25nX3ZhbHVl ID0gKGxvbmcpbDsKKyAgICAgIGlmIChsICE9IGxvbmdfdmFsdWUpCisgICAg ICAgIHJldHVybiAwOworICAgIH0KKyAgZWxzZSBpZiAoUHlJbnRfQ2hlY2sg KHB5b19pbnQpKQorICAgIHsKKyAgICAgIGxvbmdfdmFsdWUgPSBQeUludF9B c0xvbmcgKHB5b19pbnQpOworICAgICAgaWYgKFB5RXJyX09jY3VycmVkICgp KQorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgIGVsc2UKKyAgICByZXR1 cm4gMDsKKyAgaWYgKGxvbmdfdmFsdWUgIT0gKGludCkgbG9uZ192YWx1ZSkK KyAgICByZXR1cm4gMDsKKyAgKnZhbHVlcCA9IChpbnQpIGxvbmdfdmFsdWU7 CisgIHJldHVybiAxOworfQorCisvKiBQYXJzZXMgcmVnaXN0ZXIgaWQsIHdo aWNoIGNhbiBiZSBlaXRoZXIgYSBudW1iZXIgb3IgYSBuYW1lLgorICAgUmV0 dXJucyAxIG9uIHN1Y2Nlc3MsIDAgb3RoZXJ3aXNlLiAgKi8KKworc3RhdGlj IGludAorcHl1d19wYXJzZV9yZWdpc3Rlcl9pZCAoc3RydWN0IGdkYmFyY2gg KmdkYmFyY2gsIFB5T2JqZWN0ICpweW9fcmVnX2lkLAorICAgICAgICAgICAg ICAgICAgICAgICAgaW50ICpyZWdfbnVtKQoreworICBpZiAocHlvX3JlZ19p ZCA9PSBOVUxMKQorICAgIHJldHVybiAwOworICBpZiAoUHlTdHJpbmdfQ2hl Y2sgKHB5b19yZWdfaWQpKQorICAgIHsKKyAgICAgIGNvbnN0IGNoYXIgKnJl Z19uYW1lID0gUHlTdHJpbmdfQVNfU1RSSU5HIChweW9fcmVnX2lkKTsKKyAg ICAgIGlmIChyZWdfbmFtZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gMDsK KyAgICAgICpyZWdfbnVtID0gdXNlcl9yZWdfbWFwX25hbWVfdG9fcmVnbnVt IChnZGJhcmNoLCByZWdfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4gKHJlZ19uYW1lKSk7Cisg ICAgICByZXR1cm4gKnJlZ19udW0gPj0gMDsKKyAgICB9CisgIGVsc2UgaWYg KHB5dXdfcGFyc2VfaW50IChweW9fcmVnX2lkLCByZWdfbnVtKSkKKyAgICBy ZXR1cm4gdXNlcl9yZWdfbWFwX3JlZ251bV90b19uYW1lIChnZGJhcmNoLCAq cmVnX251bSkgIT0gTlVMTDsKKyAgZWxzZQorICAgIHJldHVybiAwOworfQor CisvKiBDb252ZXJ0IGdkYi5WYWx1ZSBvYmplY3QgdG8gQ09SRUFERFIuICAq LworCitzdGF0aWMgaW50CitweXV3X3ZhbHVlX29ial90b19wb2ludGVyIChQ eU9iamVjdCAqcHlvX3ZhbHVlLCBDT1JFX0FERFIgKmFkZHIpCit7CisgIHN0 cnVjdCB2YWx1ZSAqdmFsdWUgPSB2YWx1ZV9vYmplY3RfdG9fdmFsdWUgKHB5 b192YWx1ZSk7CisKKyAgaWYgKHZhbHVlID09IE5VTEwpCisgICAgcmV0dXJu IDA7CisgICphZGRyID0gdW5wYWNrX3BvaW50ZXIgKHZhbHVlX3R5cGUgKHZh bHVlKSwgdmFsdWVfY29udGVudHMgKHZhbHVlKSk7CisgIHJldHVybiAxOwor fQorCisvKiBDYWxsZWQgYnkgdGhlIFB5dGhvbiBpbnRlcnByZXRlciB0byBv YnRhaW4gc3RyaW5nIHJlcHJlc2VudGF0aW9uCisgICBvZiB0aGUgVW53aW5k SW5mbyBvYmplY3QuICAqLworCitzdGF0aWMgUHlPYmplY3QgKgordW53aW5k X2luZm9weV9zdHIgKFB5T2JqZWN0ICpzZWxmKQoreworICBQeU9iamVjdCAq cmVzdWx0OworICBzdHJ1Y3QgdWlfZmlsZSAqc3RyZmlsZSA9IG1lbV9maWxl b3BlbiAoKTsKKyAgdW53aW5kX2luZm9fb2JqZWN0ICp1bndpbmRfaW5mbyA9 ICh1bndpbmRfaW5mb19vYmplY3QgKikgc2VsZjsKKyAgc25pZmZlcl9pbmZv X29iamVjdCAqc25pZmZlcl9pbmZvCisgICAgICA9IChzbmlmZmVyX2luZm9f b2JqZWN0ICopICh1bndpbmRfaW5mby0+c25pZmZlcl9pbmZvKTsKKworICBm cHJpbnRmX3VuZmlsdGVyZWQgKHN0cmZpbGUsICJGcmFtZSBJRDogIik7Cisg IGZwcmludF9mcmFtZV9pZCAoc3RyZmlsZSwgdW53aW5kX2luZm8tPmZyYW1l X2lkKTsKKyAgeworICAgIGludCBpOworICAgIGNoYXIgKnNlcCA9ICIiOwor ICAgIHN0cnVjdCB2YWx1ZV9wcmludF9vcHRpb25zIG9wdHM7CisKKyAgICBn ZXRfdXNlcl9wcmludF9vcHRpb25zICgmb3B0cyk7CisgICAgZnByaW50Zl91 bmZpbHRlcmVkIChzdHJmaWxlLCAiXG5QcmV2aW91cyBmcmFtZSByZWdpc3Rl cnM6ICgiKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgdW53aW5kX2luZm8tPnBy ZXZfZnJhbWVfcmVnc19zaXplOyBpKyspCisgICAgICB7CisgICAgICAgIHN0 cnVjdCB2YWx1ZSAqdmFsdWUKKyAgICAgICAgICAgID0gdmFsdWVfb2JqZWN0 X3RvX3ZhbHVlICh1bndpbmRfaW5mby0+cHJldl9mcmFtZV9yZWdzW2ldLnZh bHVlKTsKKworICAgICAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKHN0cmZpbGUs ICIlcyglZCwgIiwgc2VwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg IHVud2luZF9pbmZvLT5wcmV2X2ZyYW1lX3JlZ3NbaV0ubnVtYmVyKTsKKyAg ICAgICAgaWYgKHZhbHVlICE9IE5VTEwpCisgICAgICAgICAgeworICAgICAg ICAgICAgdmFsdWVfcHJpbnQgKHZhbHVlLCBzdHJmaWxlLCAmb3B0cyk7Cisg ICAgICAgICAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKHN0cmZpbGUsICIpIik7 CisgICAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgZnByaW50 Zl91bmZpbHRlcmVkIChzdHJmaWxlLCAiPEJBRD4pIik7CisgICAgICAgIHNl cCA9ICIsICI7CisgICAgICB9CisgICAgZnByaW50Zl91bmZpbHRlcmVkIChz dHJmaWxlLCAiKSIpOworICB9CisgIHsKKyAgICBjaGFyICpzID0gdWlfZmls ZV94c3RyZHVwIChzdHJmaWxlLCBOVUxMKTsKKworICAgIHJlc3VsdCA9IFB5 U3RyaW5nX0Zyb21TdHJpbmcgKHMpOworICAgIHhmcmVlIChzKTsKKyAgfQor ICB1aV9maWxlX2RlbGV0ZSAoc3RyZmlsZSk7CisgIHJldHVybiByZXN1bHQ7 Cit9CisKKy8qIENyZWF0ZSBVbndpbmRJbmZvIGluc3RhbmNlIGZvciBnaXZl biBTbmlmZmVySW5mbyBhbmQgZnJhbWUgSUQuICAqLworCitzdGF0aWMgUHlP YmplY3QgKgorcHl1d19jcmVhdGVfdW53aW5kX2luZm8gKFB5T2JqZWN0ICpw eW9fc25pZmZlcl9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0 cnVjdCBmcmFtZV9pZCBmcmFtZV9pZCkKK3sKKyAgdW53aW5kX2luZm9fb2Jq ZWN0ICp1bndpbmRfaW5mbworICAgICAgPSBQeU9iamVjdF9OZXcgKHVud2lu ZF9pbmZvX29iamVjdCwgJnVud2luZF9pbmZvX29iamVjdF90eXBlKTsKKwor ICBpZiAoKChzbmlmZmVyX2luZm9fb2JqZWN0ICopIHB5b19zbmlmZmVyX2lu Zm8pLT5mcmFtZV9pbmZvID09IE5VTEwpCisgICAgeworICAgICAgUHlFcnJf U2V0U3RyaW5nIChQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAg ICAgICAgICAiQXR0ZW1wdGluZyB0byB1c2Ugc3RhbGUgU25pZmZlckluZm8i KTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgdW53aW5kX2luZm8t PmZyYW1lX2lkID0gZnJhbWVfaWQ7CisgIFB5X0lOQ1JFRiAocHlvX3NuaWZm ZXJfaW5mbyk7CisgIHVud2luZF9pbmZvLT5zbmlmZmVyX2luZm8gPSBweW9f c25pZmZlcl9pbmZvOworICB1bndpbmRfaW5mby0+cHJldl9mcmFtZV9yZWdz X3NpemUgPSAwOworICB1bndpbmRfaW5mby0+cHJldl9mcmFtZV9yZWdzX2Nh cGFjaXR5ID0gNDsKKyAgdW53aW5kX2luZm8tPnByZXZfZnJhbWVfcmVncyA9 CisgICAgICB4bWFsbG9jICh1bndpbmRfaW5mby0+cHJldl9mcmFtZV9yZWdz X2NhcGFjaXR5ICoKKyAgICAgICAgICAgICAgIHNpemVvZiAodW53aW5kX2lu Zm8tPnByZXZfZnJhbWVfcmVnc1swXSkpOworICByZXR1cm4gKFB5T2JqZWN0 ICopIHVud2luZF9pbmZvOworfQorCisvKiBUaGUgaW1wbGVtZW50YXRpb24g b2YKKyAgIGdkYi5VbndpbmRJbmZvLnNldF9wcmV2aW91c19mcmFtZV9yZWdp c3RlciAoUkVHLCBWQUxVRSkgLT4gTm9uZS4gICovCisKK3N0YXRpYyBQeU9i amVjdCAqCit1bndpbmRfaW5mb3B5X3NldF9wcmV2aW91c19mcmFtZV9yZWdp c3RlciAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICB1 bndpbmRfaW5mb19vYmplY3QgKnVud2luZF9pbmZvID0gKHVud2luZF9pbmZv X29iamVjdCAqKSBzZWxmOworICBzbmlmZmVyX2luZm9fb2JqZWN0ICpzbmlm ZmVyX2luZm8KKyAgICAgID0gKHNuaWZmZXJfaW5mb19vYmplY3QgKikgKHVu d2luZF9pbmZvLT5zbmlmZmVyX2luZm8pOworICBQeU9iamVjdCAqcHlvX3Jl Z19pZDsKKyAgUHlPYmplY3QgKnB5b19yZWdfdmFsdWU7CisgIGludCByZWdu dW07CisKKyAgaWYgKHNuaWZmZXJfaW5mby0+ZnJhbWVfaW5mbyA9PSBOVUxM KQorICAgIHsKKyAgICAgIFB5RXJyX1NldFN0cmluZyAoUHlFeGNfVmFsdWVF cnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgIlVud2luZEluZm8gaW5z dGFuY2UgcmVmZXJzIHRvIGEgc3RhbGUgU25pZmZlckluZm8iKTsKKyAgICAg IHJldHVybiBOVUxMOworICAgIH0KKyAgaWYgKCFQeUFyZ19VbnBhY2tUdXBs ZSAoYXJncywgInByZXZpb3VzX2ZyYW1lX3JlZ2lzdGVyIiwgMiwgMiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgJnB5b19yZWdfaWQsICZweW9fcmVn X3ZhbHVlKSkKKyAgICByZXR1cm4gTlVMTDsKKyAgaWYgKCFweXV3X3BhcnNl X3JlZ2lzdGVyX2lkIChzbmlmZmVyX2luZm8tPmdkYmFyY2gsIHB5b19yZWdf aWQsICZyZWdudW0pKQorICAgIHsKKyAgICAgIFB5RXJyX1NldFN0cmluZyAo UHlFeGNfVmFsdWVFcnJvciwgIkJhZCByZWdpc3RlciIpOworICAgICAgcmV0 dXJuIE5VTEw7CisgICAgfQorICB7CisgICAgc3RydWN0IHZhbHVlICp2YWx1 ZTsKKyAgICBzaXplX3QgZGF0YV9zaXplOworCisgICAgaWYgKHB5b19yZWdf dmFsdWUgPT0gTlVMTAorICAgICAgfHwgKHZhbHVlID0gdmFsdWVfb2JqZWN0 X3RvX3ZhbHVlIChweW9fcmVnX3ZhbHVlKSkgPT0gTlVMTCkKKyAgICAgIHsK KyAgICAgICAgUHlFcnJfU2V0U3RyaW5nIChQeUV4Y19WYWx1ZUVycm9yLCAi QmFkIHJlZ2lzdGVyIHZhbHVlIik7CisgICAgICAgIHJldHVybiBOVUxMOwor ICAgICAgfQorICAgIGRhdGFfc2l6ZSA9IHJlZ2lzdGVyX3NpemUgKHNuaWZm ZXJfaW5mby0+Z2RiYXJjaCwgcmVnbnVtKTsKKyAgICBpZiAoZGF0YV9zaXpl ICE9IFRZUEVfTEVOR1RIICh2YWx1ZV9lbmNsb3NpbmdfdHlwZSAodmFsdWUp KSkKKyAgICAgIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0ICgKKyAgICAgICAg ICAgIFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAiVGhlIHZhbHVl IG9mIHRoZSByZWdpc3RlciByZXR1cm5lZCBieSB0aGUgUHl0aG9uICIKKyAg ICAgICAgICAgICJzbmlmZmVyIGhhcyB1bmV4cGVjdGVkIHNpemU6ICV1IGlu c3RlYWQgb2YgJXUuIiwKKyAgICAgICAgICAgICh1bnNpZ25lZCkgKFRZUEVf TEVOR1RIICh2YWx1ZV9lbmNsb3NpbmdfdHlwZSAodmFsdWUpKSksCisgICAg ICAgICAgICAodW5zaWduZWQpIGRhdGFfc2l6ZSk7CisgICAgICAgIHJldHVy biBOVUxMOworICAgICAgfQorICB9CisgIHsKKyAgICBpbnQgaTsKKworICAg IGZvciAoaSA9IDA7CisgICAgICAgICAoaSA8IHVud2luZF9pbmZvLT5wcmV2 X2ZyYW1lX3JlZ3Nfc2l6ZSkKKyAgICAgICAgICAgICAmJiByZWdudW0gIT0g dW53aW5kX2luZm8tPnByZXZfZnJhbWVfcmVnc1tpXS5udW1iZXI7IGkrKykK KyAgICAgIDsKKyAgICBpZiAoaSA8IHVud2luZF9pbmZvLT5wcmV2X2ZyYW1l X3JlZ3Nfc2l6ZSkKKyAgICAgIFB5X0RFQ1JFRiAodW53aW5kX2luZm8tPnBy ZXZfZnJhbWVfcmVnc1tpXS52YWx1ZSk7CisgICAgZWxzZQorICAgICAgewor ICAgICAgICBpZiAoaSA+PSB1bndpbmRfaW5mby0+cHJldl9mcmFtZV9yZWdz X2NhcGFjaXR5KQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHVud2luZF9p bmZvLT5wcmV2X2ZyYW1lX3JlZ3NfY2FwYWNpdHkgKj0gMjsKKyAgICAgICAg ICAgIHVud2luZF9pbmZvLT5wcmV2X2ZyYW1lX3JlZ3MgPSB4cmVhbGxvYwor ICAgICAgICAgICAgICAgICh1bndpbmRfaW5mby0+cHJldl9mcmFtZV9yZWdz LAorICAgICAgICAgICAgICAgICB1bndpbmRfaW5mby0+cHJldl9mcmFtZV9y ZWdzX2NhcGFjaXR5CisgICAgICAgICAgICAgICAgICogc2l6ZW9mICh1bndp bmRfaW5mby0+cHJldl9mcmFtZV9yZWdzWzBdKSk7CisgICAgICAgICAgfQor ICAgICAgICB1bndpbmRfaW5mby0+cHJldl9mcmFtZV9yZWdzX3NpemUrKzsK KyAgICAgICAgdW53aW5kX2luZm8tPnByZXZfZnJhbWVfcmVnc1tpXS5udW1i ZXIgPSByZWdudW07CisgICAgICB9CisgICAgUHlfSU5DUkVGIChweW9fcmVn X3ZhbHVlKTsKKyAgICB1bndpbmRfaW5mby0+cHJldl9mcmFtZV9yZWdzW2ld LnZhbHVlID0gcHlvX3JlZ192YWx1ZTsKKyAgfQorICBQeV9JTkNSRUYgKFB5 X05vbmUpOworICByZXR1cm4gUHlfTm9uZTsKK30KKworLyogVW53aW5kSW5m byBjbGVhbnVwLiAgKi8KKworc3RhdGljIHZvaWQKK3Vud2luZF9pbmZvcHlf ZGVhbGxvYyAoUHlPYmplY3QgKnNlbGYpCit7CisgIHVud2luZF9pbmZvX29i amVjdCAqdW53aW5kX2luZm8gPSAodW53aW5kX2luZm9fb2JqZWN0ICopIHNl bGY7CisgIGludCBpOworCisgIFB5X1hERUNSRUYgKHVud2luZF9pbmZvLT5z bmlmZmVyX2luZm8pOworICBmb3IgKGkgPSAwOyBpIDwgdW53aW5kX2luZm8t PnByZXZfZnJhbWVfcmVnc19zaXplOyBpKyspCisgICAgICBQeV9ERUNSRUYg KHVud2luZF9pbmZvLT5wcmV2X2ZyYW1lX3JlZ3NbaV0udmFsdWUpOworICB4 ZnJlZSAodW53aW5kX2luZm8tPnByZXZfZnJhbWVfcmVncyk7CisgIFB5X1RZ UEUgKHNlbGYpLT50cF9mcmVlIChzZWxmKTsKK30KKworLyogQ2FsbGVkIGJ5 IHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgdG8gb2J0YWluIHN0cmluZyByZXBy ZXNlbnRhdGlvbgorICAgb2YgdGhlIFNuaWZmZXJJbmZvIG9iamVjdC4gICov CisKK3N0YXRpYyBQeU9iamVjdCAqCitzbmlmZmVyX2luZm9weV9zdHIgKFB5 T2JqZWN0ICpzZWxmKQoreworICBzdHJ1Y3QgZnJhbWVfaW5mbyAqZnJhbWUg PSAoKHNuaWZmZXJfaW5mb19vYmplY3QgKikgc2VsZiktPmZyYW1lX2luZm87 CisKKyAgaWYgKGZyYW1lID09IE5VTEwpCisgICAgcmV0dXJuIFB5U3RyaW5n X0Zyb21TdHJpbmcgKCJTdGFsZSBTbmlmZmVySW5mbyBpbnN0YW5jZSIpOwor ICByZXR1cm4gUHlTdHJpbmdfRnJvbUZvcm1hdCAoIlNQPSVzLFBDPSVzIiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVfYWRkcl90b19z dHJpbmdfbnogKGdldF9mcmFtZV9zcCAoZnJhbWUpKSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvcmVfYWRkcl90b19zdHJpbmdfbnogKGdl dF9mcmFtZV9wYyAoZnJhbWUpKSk7Cit9CisKKy8qIEltcGxlbWVudGF0aW9u IG9mIGdkYi5TbmlmZmVySW5mby5yZWFkX3JlZ2lzdGVyIChzZWxmLCByZWdu dW0pIC0+IGdkYi5WYWx1ZS4KKyAgIFJldHVybnMgdGhlIHZhbHVlIG9mIHJl Z2lzdGVyIFJFR05VTSBhcyBnZGIuVmFsdWUgaW5zdGFuY2UuICAqLworCitz dGF0aWMgUHlPYmplY3QgKgorc25pZmZlcl9pbmZvcHlfcmVhZF9yZWdpc3Rl ciAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICB2b2xh dGlsZSBzdHJ1Y3QgZ2RiX2V4Y2VwdGlvbiBleGNlcHQ7CisgIGludCByZWdu dW07CisgIHN0cnVjdCB2YWx1ZSAqdmFsID0gTlVMTDsKKyAgc25pZmZlcl9p bmZvX29iamVjdCAqc25pZmZlcl9pbmZvID0gKHNuaWZmZXJfaW5mb19vYmpl Y3QgKikgc2VsZjsKKyAgUHlPYmplY3QgKnB5b19yZWdfaWQ7CisKKyAgaWYg KHNuaWZmZXJfaW5mby0+ZnJhbWVfaW5mbyA9PSBOVUxMKQorICAgIHsKKyAg ICAgIFB5RXJyX1NldFN0cmluZyAoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAg ICAgICAgICAgICAgICAgICAgIkF0dGVtcHRpbmcgdG8gcmVhZCByZWdpc3Rl ciBmcm9tIHN0YWxlIFNuaWZmZXJJbmZvIik7CisgICAgICByZXR1cm4gTlVM TDsKKyAgICB9CisKKyAgaWYgKCFQeUFyZ19VbnBhY2tUdXBsZSAoYXJncywg InJlYWRfcmVnaXN0ZXIiLCAxLCAxLCAmcHlvX3JlZ19pZCkpCisgICAgcmV0 dXJuIE5VTEw7CisgIGlmICghcHl1d19wYXJzZV9yZWdpc3Rlcl9pZCAoc25p ZmZlcl9pbmZvLT5nZGJhcmNoLCBweW9fcmVnX2lkLCAmcmVnbnVtKSkKKyAg ICB7CisgICAgICBQeUVycl9TZXRTdHJpbmcgKFB5RXhjX1ZhbHVlRXJyb3Is ICJCYWQgcmVnaXN0ZXIiKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0K KyAgVFJZCisgICAgeworICAgICAgZ2RiX2J5dGUgYnVmZmVyW01BWF9SRUdJ U1RFUl9TSVpFXTsKKworICAgICAgdmFsID0gZ2V0X2ZyYW1lX3JlZ2lzdGVy X3ZhbHVlICgKKyAgICAgICAgICAoKHNuaWZmZXJfaW5mb19vYmplY3QgKikg c2VsZiktPmZyYW1lX2luZm8sIHJlZ251bSk7CisgICAgICBpZiAodmFsID09 IE5VTEwpCisgICAgICAgIFB5RXJyX0Zvcm1hdCAoUHlFeGNfVmFsdWVFcnJv ciwKKyAgICAgICAgICAgICAgICAgICAgICAiQ2Fubm90IHJlYWQgcmVnaXN0 ZXIgJWQgZnJvbSBmcmFtZS4iLAorICAgICAgICAgICAgICAgICAgICAgIHJl Z251bSk7CisgICAgfQorICBDQVRDSCAoZXhjZXB0LCBSRVRVUk5fTUFTS19B TEwpCisgICAgeworICAgICAgR0RCX1BZX0hBTkRMRV9FWENFUFRJT04gKGV4 Y2VwdCk7CisgICAgfQorICBFTkRfQ0FUQ0gKKworICByZXR1cm4gdmFsID09 IE5VTEwgPyBOVUxMIDogdmFsdWVfdG9fdmFsdWVfb2JqZWN0ICh2YWwpOwor fQorCisvKiBJbXBsZW1lbnRhdGlvbiBvZgorICAgZ2RiLlNuaWZmZXJJbmZv LnVud2luZF9pbmZvX3dpdGhfaWQgKHNlbGYsIFNQLCBQQykgLT4gTm9uZS4g ICovCisKK3N0YXRpYyBQeU9iamVjdCAqCitzbmlmZmVyX2luZm9weV91bndp bmRfaW5mb193aXRoX2lkIChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFy Z3MpCit7CisgIFB5T2JqZWN0ICpweW9fc3A7CisgIFB5T2JqZWN0ICpweW9f cGM7CisgIENPUkVfQUREUiBzcDsKKyAgQ09SRV9BRERSIHBjOworCisgIGlm ICghUHlBcmdfUGFyc2VUdXBsZSAoYXJncywgIk9POnVud2luZF9pbmZvX3dp dGhfaWQiLCAmcHlvX3NwLCAmcHlvX3BjKQorICAgICAgIHx8ICFweXV3X3Zh bHVlX29ial90b19wb2ludGVyIChweW9fc3AsICZzcCkKKyAgICAgICB8fCAh cHl1d192YWx1ZV9vYmpfdG9fcG9pbnRlciAocHlvX3BjLCAmcGMpKQorICAg IHJldHVybiBOVUxMOworCisgIHJldHVybiBweXV3X2NyZWF0ZV91bndpbmRf aW5mbyAoc2VsZiwgZnJhbWVfaWRfYnVpbGQgKHNwLCBwYykpOworfQorCisv KiBJbXBsZW1lbnRhdGlvbiBvZgorICAgZ2RiLlNuaWZmZXJJbmZvLnVud2lu ZF9pbmZvX3dpdGhfaWRfc3BlY2lhbCAoc2VsZiwgU1AsIFBDLCBTUEVDSUFM KSAtPiBOb25lLiAgKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK3NuaWZmZXJf aW5mb3B5X3Vud2luZF9pbmZvX3dpdGhfaWRfc3BlY2lhbCAoUHlPYmplY3Qg KnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICBQeU9iamVjdCAqcHlvX3Nw OworICBQeU9iamVjdCAqcHlvX3BjOworICBQeU9iamVjdCAqcHlvX3NwZWNp YWw7CisgIENPUkVfQUREUiBzcDsKKyAgQ09SRV9BRERSIHBjOworICBDT1JF X0FERFIgc3BlY2lhbDsKKworICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUgKGFy Z3MsICJPT086dW53aW5kX2luZm9fd2l0aF9pZF9zcGVjaWFsIiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgJnB5b19zcCwgJnB5b19wYywgJnB5b19z cGVjaWFsKQorICAgICAgfHwgIXB5dXdfdmFsdWVfb2JqX3RvX3BvaW50ZXIg KHB5b19zcCwgJnNwKQorICAgICAgfHwgIXB5dXdfdmFsdWVfb2JqX3RvX3Bv aW50ZXIgKHB5b19wYywgJnBjKQorICAgICAgfHwgIXB5dXdfdmFsdWVfb2Jq X3RvX3BvaW50ZXIgKHB5b19zcGVjaWFsLCAmc3BlY2lhbCkpCisgICAgcmV0 dXJuIE5VTEw7CisKKyAgcmV0dXJuIHB5dXdfY3JlYXRlX3Vud2luZF9pbmZv IChzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZy YW1lX2lkX2J1aWxkX3NwZWNpYWwgKHNwLCBwYywgc3BlY2lhbCkpOworfQor CisvKiBJbXBsZW1lbnRhdGlvbiBvZgorICAgZ2RiLlNuaWZmZXJJbmZvLnVu d2luZF9pbmZvX3dpdGhfaWRfd2lsZCAoc2VsZiwgU1ApIC0+IE5vbmUuICAq LworCitzdGF0aWMgUHlPYmplY3QgKgorc25pZmZlcl9pbmZvcHlfdW53aW5k X2luZm9fd2l0aF9pZF93aWxkIChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3Qg KmFyZ3MpCit7CisgIFB5T2JqZWN0ICpweW9fc3A7CisgIENPUkVfQUREUiBz cDsKKworICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUgKGFyZ3MsICJPOnVud2lu ZF9pbmZvX3dpdGhfaWRfd2lsZCIsICZweW9fc3ApCisgICAgICB8fCAhcHl1 d192YWx1ZV9vYmpfdG9fcG9pbnRlciAocHlvX3NwLCAmc3ApKQorICAgIHJl dHVybiBOVUxMOworCisgIHJldHVybiBweXV3X2NyZWF0ZV91bndpbmRfaW5m byAoc2VsZiwgZnJhbWVfaWRfYnVpbGRfd2lsZCAoc3ApKTsKK30KKworLyog Q3JlYXRlIFB5dGhvbiBTbmlmZmVySW5mbyBvYmplY3QuICAqLworCitzdGF0 aWMgUHlPYmplY3QgKgorZnJhbWVfaW5mb190b19zbmlmZmVyX2luZm9fb2Jq ZWN0IChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGZyYW1lX2luZm8gKmZyYW1l KQoreworICBzbmlmZmVyX2luZm9fb2JqZWN0ICpzbmlmZmVyX2luZm8KKyAg ICAgID0gUHlPYmplY3RfTmV3IChzbmlmZmVyX2luZm9fb2JqZWN0LCAmc25p ZmZlcl9pbmZvX29iamVjdF90eXBlKTsKKworICBzbmlmZmVyX2luZm8tPmdk YmFyY2ggPSBnZGJhcmNoOworICBzbmlmZmVyX2luZm8tPmZyYW1lX2luZm8g PSBmcmFtZTsKKyAgcmV0dXJuIChQeU9iamVjdCAqKSBzbmlmZmVyX2luZm87 Cit9CisKKy8qIEludmFsaWRhdGUgU25pZmZlckluZm8gb2JqZWN0LiAgKi8K K3N0YXRpYyB2b2lkCitzbmlmZmVyX2luZm9faW52YWxpZGF0ZSAoUHlPYmpl Y3QgKnB5b19zbmlmZmVyX2luZm8pCit7CisgIGlmIChweW9fc25pZmZlcl9p bmZvID09IE5VTEwpCisgICAgcmV0dXJuOworICAoKHNuaWZmZXJfaW5mb19v YmplY3QgKikgcHlvX3NuaWZmZXJfaW5mbyktPmZyYW1lX2luZm8gPSBOVUxM OworfQorCisvKiBmcmFtZV91bndpbmQudGhpc19pZCBtZXRob2QuICAqLwor CitzdGF0aWMgdm9pZAorcHl1d190aGlzX2lkIChzdHJ1Y3QgZnJhbWVfaW5m byAqdGhpc19mcmFtZSwgdm9pZCAqKmNhY2hlX3B0ciwKKyAgICAgICAgICAg ICAgc3RydWN0IGZyYW1lX2lkICp0aGlzX2lkKQoreworICAqdGhpc19pZCA9 ICgoY2FjaGVkX2ZyYW1lX2luZm8gKikgKmNhY2hlX3B0ciktPmZyYW1lX2lk OworICBpZiAocHl1d19kZWJ1ZyA+PSAxKQorICAgIHsKKyAgICAgIGZwcmlu dGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywgIiVzOiBmcmFtZV9pZDogIiwg X19GVU5DVElPTl9fKTsKKyAgICAgIGZwcmludF9mcmFtZV9pZCAoZ2RiX3N0 ZGxvZywgKnRoaXNfaWQpOworICAgICAgZnByaW50Zl91bmZpbHRlcmVkIChn ZGJfc3RkbG9nLCAiXG4iKTsKKyAgICB9Cit9CisKKy8qIGZyYW1lX3Vud2lu ZC5wcmV2X3JlZ2lzdGVyLiAgKi8KKworc3RhdGljIHN0cnVjdCB2YWx1ZSAq CitweXV3X3ByZXZfcmVnaXN0ZXIgKHN0cnVjdCBmcmFtZV9pbmZvICp0aGlz X2ZyYW1lLCB2b2lkICoqY2FjaGVfcHRyLAorICAgICAgICAgICAgICAgICAg ICBpbnQgcmVnbnVtKQoreworICBjYWNoZWRfZnJhbWVfaW5mbyAqY2FjaGVk X2ZyYW1lID0gKmNhY2hlX3B0cjsKKyAgc3RydWN0IHJlZ19pbmZvICpyZWdf aW5mbyA9IGNhY2hlZF9mcmFtZS0+cmVnOworICBzdHJ1Y3QgcmVnX2luZm8g KnJlZ19pbmZvX2VuZCA9IHJlZ19pbmZvICsgY2FjaGVkX2ZyYW1lLT5yZWdf Y291bnQ7CisKKyAgVFJBQ0VfUFlfVU5XSU5EICgxLCAiJXMgKGZyYW1lPSVw LC4uLixyZWc9JWQpXG4iLCBfX0ZVTkNUSU9OX18sIHRoaXNfZnJhbWUsCisg ICAgICAgICAgICAgICAgICAgcmVnbnVtKTsKKyAgZm9yICg7IHJlZ19pbmZv IDwgcmVnX2luZm9fZW5kOyArK3JlZ19pbmZvKQorICAgIHsKKyAgICAgIGlm IChyZWdudW0gPT0gcmVnX2luZm8tPm51bWJlcikKKyAgICAgICAgcmV0dXJu IGZyYW1lX3Vud2luZF9nb3RfYnl0ZXMgKHRoaXNfZnJhbWUsIHJlZ251bSwg cmVnX2luZm8tPmRhdGEpOworICAgIH0KKworICByZXR1cm4gZnJhbWVfdW53 aW5kX2dvdF9vcHRpbWl6ZWQgKHRoaXNfZnJhbWUsIHJlZ251bSk7Cit9CisK Ky8qIEZyYW1lIHNuaWZmZXIgZGlzcGF0Y2guICAqLworCitzdGF0aWMgaW50 CitweXV3X3NuaWZmZXIgKGNvbnN0IHN0cnVjdCBmcmFtZV91bndpbmQgKnNl bGYsIHN0cnVjdCBmcmFtZV9pbmZvICp0aGlzX2ZyYW1lLAorICAgICAgICAg ICAgICB2b2lkICoqY2FjaGVfcHRyKQoreworICBzdHJ1Y3QgZ2RiYXJjaCAq Z2RiYXJjaDsKKyAgc3RydWN0IGNsZWFudXAgKmNsZWFudXBzOworICBzdHJ1 Y3QgY2xlYW51cCAqY2FjaGVkX2ZyYW1lX2NsZWFudXBzOworICBQeU9iamVj dCAqcHlvX21vZHVsZTsKKyAgUHlPYmplY3QgKnB5b19leGVjdXRlOworICBQ eU9iamVjdCAqcHlvX3NuaWZmZXJfaW5mbzsKKyAgUHlPYmplY3QgKnB5b191 bndpbmRfaW5mbzsKKyAgY2FjaGVkX2ZyYW1lX2luZm8gKmNhY2hlZF9mcmFt ZSA9IE5VTEw7CisKKyAgZ2RiYXJjaCA9IChzdHJ1Y3QgZ2RiYXJjaCAqKSAo c2VsZi0+dW53aW5kX2RhdGEpOworICBjbGVhbnVwcyA9IGVuc3VyZV9weXRo b25fZW52IChnZGJhcmNoLCBjdXJyZW50X2xhbmd1YWdlKTsKKyAgVFJBQ0Vf UFlfVU5XSU5EICgzLCAiJXMgKFNQPSVzLCBQQz0lcylcbiIsIF9fRlVOQ1RJ T05fXywKKyAgICAgICAgICAgICAgICAgICBwYWRkcmVzcyAoZ2RiYXJjaCwg Z2V0X2ZyYW1lX3NwICh0aGlzX2ZyYW1lKSksCisgICAgICAgICAgICAgICAg ICAgcGFkZHJlc3MgKGdkYmFyY2gsIGdldF9mcmFtZV9wYyAodGhpc19mcmFt ZSkpKTsKKyAgcHlvX3NuaWZmZXJfaW5mbyA9IGZyYW1lX2luZm9fdG9fc25p ZmZlcl9pbmZvX29iamVjdCAoZ2RiYXJjaCwgdGhpc19mcmFtZSk7CisgIGlm IChweW9fc25pZmZlcl9pbmZvID09IE5VTEwpCisgICAgZ290byBlcnJvcjsK KyAgbWFrZV9jbGVhbnVwX3B5X2RlY3JlZiAocHlvX3NuaWZmZXJfaW5mbyk7 CisKKyAgaWYgKChweW9fbW9kdWxlID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxl ICgiZ2RiLmZ1bmN0aW9uLnVud2luZGVycyIpKSA9PSBOVUxMKQorICAgIGdv dG8gZXJyb3I7CisgIG1ha2VfY2xlYW51cF9weV9kZWNyZWYgKHB5b19tb2R1 bGUpOworCisgIHB5b19leGVjdXRlID0gUHlPYmplY3RfR2V0QXR0clN0cmlu ZyAocHlvX21vZHVsZSwgImV4ZWN1dGVfdW53aW5kZXJzIik7CisgIGlmIChw eW9fZXhlY3V0ZSA9PSBOVUxMKQorICAgIGdvdG8gZXJyb3I7CisgIG1ha2Vf Y2xlYW51cF9weV9kZWNyZWYgKHB5b19leGVjdXRlKTsKKworICBweW9fdW53 aW5kX2luZm8KKyAgICAgID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJn cyAocHlvX2V4ZWN1dGUsIHB5b19zbmlmZmVyX2luZm8sIE5VTEwpOworICBp ZiAocHlvX3Vud2luZF9pbmZvID09IE5VTEwpCisgICAgZ290byBlcnJvcjsK KyAgbWFrZV9jbGVhbnVwX3B5X2RlY3JlZiAocHlvX3Vud2luZF9pbmZvKTsK KyAgaWYgKHB5b191bndpbmRfaW5mbyA9PSBQeV9Ob25lKQorICAgIGdvdG8g ZXJyb3I7CisgIGlmIChQeU9iamVjdF9Jc0luc3RhbmNlIChweW9fdW53aW5k X2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoUHlPYmplY3Qg KikgJnVud2luZF9pbmZvX29iamVjdF90eXBlKSA8PSAwKQorICAgIGVycm9y IChfKCJBIFVud2luZGVyIHNob3VsZCByZXR1cm4gZ2RiLlVud2luZEluZm8g aW5zdGFuY2UuIikpOworCisgIHsKKyAgICB1bndpbmRfaW5mb19vYmplY3Qg KnVud2luZF9pbmZvID0gKHVud2luZF9pbmZvX29iamVjdCAqKSBweW9fdW53 aW5kX2luZm87CisgICAgaW50IGk7CisgICAgaW50IHJlZ19jb3VudDsKKyAg ICBzaXplX3QgY2FjaGVkX2ZyYW1lX3NpemU7CisgICAgc2l6ZV90IGdkYl9i eXRlc19jb3VudDsKKyAgICBnZGJfYnl0ZSAqZ2RiX2RhdGFfZnJlZSwgKmdk Yl9kYXRhX2VuZDsKKworICAgIC8qIEZpZ3VyZSBvdXQgaG93IG11Y2ggc3Bh Y2Ugd2UgbmVlZCB0byBhbGxvY2F0ZS4gICovCisgICAgcmVnX2NvdW50ID0g dW53aW5kX2luZm8tPnByZXZfZnJhbWVfcmVnc19zaXplOworICAgIGdkYl9i eXRlc19jb3VudCA9IHJlZ19jb3VudCAqIE1BWF9SRUdJU1RFUl9TSVpFOwor ICAgIGNhY2hlZF9mcmFtZV9zaXplID0gc2l6ZW9mICgqY2FjaGVkX2ZyYW1l KSArCisgICAgICAgIHJlZ19jb3VudCAqIHNpemVvZiAoY2FjaGVkX2ZyYW1l LT5yZWdbMF0pICsKKyAgICAgICAgZ2RiX2J5dGVzX2NvdW50ICogc2l6ZW9m IChnZGJfYnl0ZSk7CisKKyAgICBjYWNoZWRfZnJhbWUgPSB4bWFsbG9jIChj YWNoZWRfZnJhbWVfc2l6ZSk7CisgICAgY2FjaGVkX2ZyYW1lX2NsZWFudXBz ID0gbWFrZV9jbGVhbnVwICh4ZnJlZSwgY2FjaGVkX2ZyYW1lKTsKKyAgICAv KiBBbGxvY2F0aW9ucyBhZnRlciB0aGlzIHBvaW50IHdpbGwgYmUgZGlzY2Fy ZGVkISAgKi8KKworICAgIGdkYl9kYXRhX2VuZCA9IChnZGJfYnl0ZSAqKSAo KGNoYXIgKikgY2FjaGVkX2ZyYW1lICsgY2FjaGVkX2ZyYW1lX3NpemUpOwor ICAgIGdkYl9kYXRhX2ZyZWUgPSBnZGJfZGF0YV9lbmQgLSBnZGJfYnl0ZXNf Y291bnQ7CisKKyAgICBjYWNoZWRfZnJhbWUtPmdkYmFyY2ggPSBnZGJhcmNo OworICAgIGNhY2hlZF9mcmFtZS0+ZnJhbWVfaWQgPSB1bndpbmRfaW5mby0+ ZnJhbWVfaWQ7CisgICAgY2FjaGVkX2ZyYW1lLT5yZWdfY291bnQgPSByZWdf Y291bnQ7CisKKyAgICAvKiBQb3B1bGF0ZSByZWdpc3RlcnMgYXJyYXkuICAq LworICAgIGZvciAoaSA9IDA7IGkgPCByZWdfY291bnQ7IGkrKykKKyAgICAg IHsKKyAgICAgICAgc3RydWN0IHJlZ19pbmZvICpyZWcgPSAmKGNhY2hlZF9m cmFtZS0+cmVnW2ldKTsKKyAgICAgICAgc3RydWN0IHZhbHVlICp2YWx1ZQor ICAgICAgICAgICAgPSB2YWx1ZV9vYmplY3RfdG9fdmFsdWUgKHVud2luZF9p bmZvLT5wcmV2X2ZyYW1lX3JlZ3NbaV0udmFsdWUpOworICAgICAgICBzaXpl X3QgZGF0YV9zaXplOworCisgICAgICAgIHJlZy0+bnVtYmVyID0gdW53aW5k X2luZm8tPnByZXZfZnJhbWVfcmVnc1tpXS5udW1iZXI7CisgICAgICAgIC8q IGB2YWx1ZScgdmFsaWRhdGlvbiB3YXMgZG9uZSBiZWZvcmUsIGp1c3QgYXNz ZXJ0LiAgKi8KKyAgICAgICAgZ2RiX2Fzc2VydCAodmFsdWUgIT0gTlVMTCk7 CisgICAgICAgIGRhdGFfc2l6ZSA9IHJlZ2lzdGVyX3NpemUgKGdkYmFyY2gs IHJlZy0+bnVtYmVyKTsKKyAgICAgICAgZ2RiX2Fzc2VydCAoZGF0YV9zaXpl ID09IFRZUEVfTEVOR1RIICh2YWx1ZV9lbmNsb3NpbmdfdHlwZSAodmFsdWUp KSk7CisgICAgICAgIC8qIFNob3VsZCBub3Qgb3ZlcmZsb3cgIHRoZSBidWZm ZXIuICAqLworICAgICAgICBnZGJfYXNzZXJ0ICgoZ2RiX2RhdGFfZnJlZSAr IGRhdGFfc2l6ZSkgPD0gZ2RiX2RhdGFfZW5kKTsKKyAgICAgICAgbWVtY3B5 IChnZGJfZGF0YV9mcmVlLCB2YWx1ZV9jb250ZW50cyAodmFsdWUpLCBkYXRh X3NpemUpOworICAgICAgICByZWctPmRhdGEgPSBnZGJfZGF0YV9mcmVlOwor ICAgICAgICBnZGJfZGF0YV9mcmVlICs9IGRhdGFfc2l6ZTsKKyAgICAgIH0K KyAgfQorCisgICpjYWNoZV9wdHIgPSBjYWNoZWRfZnJhbWU7CisgIGRpc2Nh cmRfY2xlYW51cHMgKGNhY2hlZF9mcmFtZV9jbGVhbnVwcyk7CisgIGRvX2Ns ZWFudXBzIChjbGVhbnVwcyk7CisgIHNuaWZmZXJfaW5mb19pbnZhbGlkYXRl IChweW9fc25pZmZlcl9pbmZvKTsKKyAgcmV0dXJuIDE7CisKK2Vycm9yOgor ICBkb19jbGVhbnVwcyAoY2xlYW51cHMpOworICBzbmlmZmVyX2luZm9faW52 YWxpZGF0ZSAocHlvX3NuaWZmZXJfaW5mbyk7CisgIHJldHVybiAwOworfQor CisvKiBGcmFtZSBjYWNoZSByZWxlYXNlIHNoaW0uICAqLworCitzdGF0aWMg dm9pZAorcHl1d19kZWFsbG9jX2NhY2hlIChzdHJ1Y3QgZnJhbWVfaW5mbyAq dGhpc19mcmFtZSwgdm9pZCAqY2FjaGUpCit7CisgIFRSQUNFX1BZX1VOV0lO RCAoMywgIiVzOiBlbnRlciIsIF9fRlVOQ1RJT05fXyk7CisgIHhmcmVlIChj YWNoZSk7Cit9CisKK3N0cnVjdCBweXV3X2dkYmFyY2hfZGF0YV90eXBlCit7 CisgIC8qIEhhcyB0aGUgdW53aW5kZXIgc2hpbSBiZWVuIHByZXBlbmRlZD8g Ki8KKyAgaW50IHVud2luZGVyX3JlZ2lzdGVyZWQ7Cit9OworCitzdGF0aWMg dm9pZCAqCitweXV3X2dkYmFyY2hfZGF0YV9pbml0IChzdHJ1Y3QgZ2RiYXJj aCAqZ2RiYXJjaCkKK3sKKyAgcmV0dXJuIEdEQkFSQ0hfT0JTVEFDS19aQUxM T0MgKGdkYmFyY2gsIHN0cnVjdCBweXV3X2dkYmFyY2hfZGF0YV90eXBlKTsK K30KKworLyogTmV3IGluZmVyaW9yIGFyY2hpdGVjdHVyZSBjYWxsYmFjazog cmVnaXN0ZXIgdGhlIFB5dGhvbiB1bndpbmRlcnMKKyAgIGludGVybWVkaWFy eS4gICovCisKK3N0YXRpYyB2b2lkCitweXV3X29uX25ld19nZGJhcmNoIChz dHJ1Y3QgZ2RiYXJjaCAqbmV3YXJjaCkKK3sKKyAgc3RydWN0IHB5dXdfZ2Ri YXJjaF9kYXRhX3R5cGUgKmRhdGEgPQorICAgICAgZ2RiYXJjaF9kYXRhIChu ZXdhcmNoLCBweXV3X2dkYmFyY2hfZGF0YSk7CisKKyAgaWYgKCFkYXRhLT51 bndpbmRlcl9yZWdpc3RlcmVkKQorICAgIHsKKyAgICAgIHN0cnVjdCBmcmFt ZV91bndpbmQgKnVud2luZGVyCisgICAgICAgICAgPSBHREJBUkNIX09CU1RB Q0tfWkFMTE9DIChuZXdhcmNoLCBzdHJ1Y3QgZnJhbWVfdW53aW5kKTsKKwor ICAgICAgdW53aW5kZXItPnR5cGUgPSBOT1JNQUxfRlJBTUU7CisgICAgICB1 bndpbmRlci0+c3RvcF9yZWFzb24gPSBkZWZhdWx0X2ZyYW1lX3Vud2luZF9z dG9wX3JlYXNvbjsKKyAgICAgIHVud2luZGVyLT50aGlzX2lkID0gcHl1d190 aGlzX2lkOworICAgICAgdW53aW5kZXItPnByZXZfcmVnaXN0ZXIgPSBweXV3 X3ByZXZfcmVnaXN0ZXI7CisgICAgICB1bndpbmRlci0+dW53aW5kX2RhdGEg PSAodm9pZCAqKSBuZXdhcmNoOworICAgICAgdW53aW5kZXItPnNuaWZmZXIg PSBweXV3X3NuaWZmZXI7CisgICAgICB1bndpbmRlci0+ZGVhbGxvY19jYWNo ZSA9IHB5dXdfZGVhbGxvY19jYWNoZTsKKyAgICAgIGZyYW1lX3Vud2luZF9w cmVwZW5kX3Vud2luZGVyIChuZXdhcmNoLCB1bndpbmRlcik7CisgICAgICBU UkFDRV9QWV9VTldJTkQgKDEsICIlczogcmVnaXN0ZXJlZCB1bndpbmRlciBm b3IgJXNcbiIsIF9fRlVOQ1RJT05fXywKKyAgICAgICAgICAgICAgICAgICAg ICAgZ2RiYXJjaF9iZmRfYXJjaF9pbmZvIChuZXdhcmNoKS0+cHJpbnRhYmxl X25hbWUpOworICAgICAgZGF0YS0+dW53aW5kZXJfcmVnaXN0ZXJlZCA9IDE7 CisgICAgfQorfQorCisvKiBJbml0aWFsaXplIHVud2luZCBtYWNoaW5lcnku ICAqLworCitpbnQKK2dkYnB5X2luaXRpYWxpemVfdW53aW5kICh2b2lkKQor eworICBpbnQgcmM7CisgIGFkZF9zZXRzaG93X3p1aW50ZWdlcl9jbWQKKyAg ICAgICgicHktdW53aW5kIiwgY2xhc3NfbWFpbnRlbmFuY2UsICZweXV3X2Rl YnVnLAorICAgICAgICBfKCJTZXQgUHl0aG9uIHVud2luZGVyIGRlYnVnZ2lu Zy4iKSwKKyAgICAgICAgXygiU2hvdyBQeXRob24gdW53aW5kZXIgZGVidWdn aW5nLiIpLAorICAgICAgICBfKCJXaGVuIG5vbi16ZXJvLCBQeXRob24gdW53 aW5kZXIgZGVidWdnaW5nIGlzIGVuYWJsZWQuIiksCisgICAgICAgIE5VTEws CisgICAgICAgIE5VTEwsCisgICAgICAgICZzZXRkZWJ1Z2xpc3QsICZzaG93 ZGVidWdsaXN0KTsKKyAgcHl1d19nZGJhcmNoX2RhdGEKKyAgICAgID0gZ2Ri YXJjaF9kYXRhX3JlZ2lzdGVyX3Bvc3RfaW5pdCAocHl1d19nZGJhcmNoX2Rh dGFfaW5pdCk7CisgIG9ic2VydmVyX2F0dGFjaF9hcmNoaXRlY3R1cmVfY2hh bmdlZCAocHl1d19vbl9uZXdfZ2RiYXJjaCk7CisKKyAgaWYgKFB5VHlwZV9S ZWFkeSAoJnNuaWZmZXJfaW5mb19vYmplY3RfdHlwZSkgPCAwKQorICAgIHJl dHVybiAtMTsKKyAgcmMgPSBnZGJfcHltb2R1bGVfYWRkb2JqZWN0IChnZGJf bW9kdWxlLCAiU25pZmZlckluZm8iLAorICAgICAgKFB5T2JqZWN0ICopICZz bmlmZmVyX2luZm9fb2JqZWN0X3R5cGUpOworICBpZiAocmMpCisgICAgcmV0 dXJuIHJjOworCisgIGlmIChQeVR5cGVfUmVhZHkgKCZ1bndpbmRfaW5mb19v YmplY3RfdHlwZSkgPCAwKQorICAgIHJldHVybiAtMTsKKyAgcmV0dXJuIGdk Yl9weW1vZHVsZV9hZGRvYmplY3QgKGdkYl9tb2R1bGUsICJVbndpbmRJbmZv IiwKKyAgICAgIChQeU9iamVjdCAqKSAmdW53aW5kX2luZm9fb2JqZWN0X3R5 cGUpOworfQorCitzdGF0aWMgUHlNZXRob2REZWYgc25pZmZlcl9pbmZvX29i amVjdF9tZXRob2RzW10gPQoreworICB7ICJyZWFkX3JlZ2lzdGVyIiwgc25p ZmZlcl9pbmZvcHlfcmVhZF9yZWdpc3RlciwgTUVUSF9WQVJBUkdTLAorICAg ICJyZWFkX3JlZ2lzdGVyIChSRUcpIC0+IGdkYi5WYWx1ZVxuIgorICAgICJS ZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBSRUcgaW4gdGhlIGZyYW1lLiIgfSwK KyAgeyAidW53aW5kX2luZm9fd2l0aF9pZCIsCisgICAgc25pZmZlcl9pbmZv cHlfdW53aW5kX2luZm9fd2l0aF9pZCwgTUVUSF9WQVJBUkdTLAorICAgICJ1 bndpbmRfaW5mb193aXRoX2lkIChTUCwgUEMpIC0+IGdkYi5VbndpbmRJbmZv XG4iCisgICAgIkNvbnN0cnVjdCBVbndpbmRJbmZvIGZvciB0aGlzIEZyYW1l RGF0YSwgdXNpbmcgZ2l2ZW4gU1AgYW5kIFBDIHJlZ2lzdGVycyBcbiIKKyAg ICAidG8gaWRlbnRpZnkgdGhlIGZyYW1lLiIgfSwKKyAgeyAidW53aW5kX2lu Zm9fd2l0aF9pZF9zcGVjaWFsIiwKKyAgICBzbmlmZmVyX2luZm9weV91bndp bmRfaW5mb193aXRoX2lkX3NwZWNpYWwsIE1FVEhfVkFSQVJHUywKKyAgICAi dW53aW5kX2luZm9fd2l0aF9pZF9zcGVjaWFsIChTUCwgUEMsIFNQRUNJQUwp IC0+IGdkYi5VbndpbmRJbmZvXG4iCisgICAgIkNvbnN0cnVjdCBVbndpbmRJ bmZvIGZvciB0aGlzIEZyYW1lRGF0YSwgdXNpbmcgZ2l2ZW4gU1AsIFBDLCBh bmQgU1BFQ0lBTCAiCisgICAgInJlZ2lzdGVycyB0byBpZGVudGlmeSB0aGUg ZnJhbWUuIiB9LAorICB7ICJ1bndpbmRfaW5mb193aXRoX2lkX3dpbGQiLAor ICAgIHNuaWZmZXJfaW5mb3B5X3Vud2luZF9pbmZvX3dpdGhfaWRfd2lsZCwg TUVUSF9WQVJBUkdTLAorICAgICJ1bndpbmRfaW5mb193aXRoX2lkX3dpbGQg KFNQKSAtPmdkYi5VbndpbmRJbmZvXG4iCisgICAgIkNvbnN0cnVjdCBVbndp bmRJbmZvIGZvciB0aGlzIEZyYW1lRGF0YSwgdXNpbmcgZ2l2ZW4gU1AgcmVn aXN0ZXIgdG8gXG4iCisgICAgImlkZW50aWZ5IHRoZSBmcmFtZS4iIH0sCisg IHtOVUxMfSAgLyogU2VudGluZWwgKi8KK307CisKK3N0YXRpYyBQeVR5cGVP YmplY3Qgc25pZmZlcl9pbmZvX29iamVjdF90eXBlID0KK3sKKyAgUHlWYXJP YmplY3RfSEVBRF9JTklUIChOVUxMLCAwKQorICAiZ2RiLlNuaWZmZXJJbmZv IiwgICAgICAgICAgICAgIC8qIHRwX25hbWUgKi8KKyAgc2l6ZW9mIChzbmlm ZmVyX2luZm9fb2JqZWN0KSwgICAvKiB0cF9iYXNpY3NpemUgKi8KKyAgMCwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVtc2l6ZSAq LworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rl YWxsb2MgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiB0cF9wcmludCAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIHRwX2dldGF0dHIgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiB0cF9zZXRhdHRyICovCisgIDAsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogdHBfY29tcGFyZSAqLworICAwLCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JlcHIgKi8KKyAgMCwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19udW1iZXIg Ki8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9h c19zZXF1ZW5jZSAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIHRwX2FzX21hcHBpbmcgKi8KKyAgMCwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiB0cF9oYXNoICAqLworICAwLCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIHRwX2NhbGwgKi8KKyAgc25pZmZlcl9p bmZvcHlfc3RyLCAgICAgICAgICAgICAvKiB0cF9zdHIgKi8KKyAgMCwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRybyAqLwor ICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0 dHJvICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog dHBfYXNfYnVmZmVyICovCisgIFB5X1RQRkxBR1NfREVGQVVMVCwgICAgICAg ICAgICAgLyogdHBfZmxhZ3MgKi8KKyAgIkdEQiBTbmlmZmVySW5mbyBvYmpl Y3QiLCAgICAgICAvKiB0cF9kb2MgKi8KKyAgMCwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLworICAwLCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCisgIDAsICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUg Ki8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93 ZWFrbGlzdG9mZnNldCAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIHRwX2l0ZXIgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiB0cF9pdGVybmV4dCAqLworICBzbmlmZmVyX2luZm9f b2JqZWN0X21ldGhvZHMsICAgIC8qIHRwX21ldGhvZHMgKi8KKyAgMCwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZW1iZXJzICovCisg IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0c2V0 ICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBf YmFzZSAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IHRwX2RpY3QgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiB0cF9kZXNjcl9nZXQgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiB0cF9kZXNjcl9zZXQgKi8KKyAgMCwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0b2Zmc2V0ICovCisgIDAs ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaW5pdCAqLwor ICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FsbG9j ICovCit9OworCisKK3N0YXRpYyBQeU1ldGhvZERlZiB1bndpbmRfaW5mb19v YmplY3RfbWV0aG9kc1tdID0KK3sKKyAgeyAic2V0X3ByZXZpb3VzX2ZyYW1l X3JlZ2lzdGVyIiwKKyAgICB1bndpbmRfaW5mb3B5X3NldF9wcmV2aW91c19m cmFtZV9yZWdpc3RlciwgTUVUSF9WQVJBUkdTLAorICAgICJzZXRfcHJldmlv dXNfZnJhbWVfcmVnaXN0ZXIgKFJFRywgVkFMVUUpIC0+IE5vbmVcbiIKKyAg ICAiU2V0IHRoZSB2YWx1ZSBvZiB0aGUgUkVHIGluIHRoZSBwcmV2aW91cyBm cmFtZSB0byBWQUxVRS4iIH0sCisgIHsgTlVMTCB9ICAvKiBTZW50aW5lbCAq LworfTsKKworc3RhdGljIFB5VHlwZU9iamVjdCB1bndpbmRfaW5mb19vYmpl Y3RfdHlwZSA9Cit7CisgIFB5VmFyT2JqZWN0X0hFQURfSU5JVCAoTlVMTCwg MCkKKyAgImdkYi5VbndpbmRJbmZvIiwgICAgICAgICAgICAgICAvKiB0cF9u YW1lICovCisgIHNpemVvZiAodW53aW5kX2luZm9fb2JqZWN0KSwgICAgLyog dHBfYmFzaWNzaXplICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogdHBfaXRlbXNpemUgKi8KKyAgdW53aW5kX2luZm9weV9kZWFs bG9jLCAgICAgICAgICAvKiB0cF9kZWFsbG9jICovCisgIDAsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogdHBfcHJpbnQgKi8KKyAgMCwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRyICovCisg IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0 ciAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRw X2NvbXBhcmUgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiB0cF9yZXByICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogdHBfYXNfbnVtYmVyICovCisgIDAsICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogdHBfYXNfc2VxdWVuY2UgKi8KKyAgMCwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19tYXBwaW5nICov CisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaGFz aCAgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0 cF9jYWxsICovCisgIHVud2luZF9pbmZvcHlfc3RyLCAgICAgICAgICAgICAg LyogdHBfc3RyICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogdHBfZ2V0YXR0cm8gKi8KKyAgMCwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiB0cF9zZXRhdHRybyAqLworICAwLCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX2J1ZmZlciAqLworICBQeV9U UEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFLCAgLyogdHBf ZmxhZ3MgKi8KKyAgIkdEQiBVbndpbmRJbmZvIG9iamVjdCIsICAgICAgICAv KiB0cF9kb2MgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiB0cF90cmF2ZXJzZSAqLworICAwLCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIHRwX2NsZWFyICovCisgIDAsICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KKyAgMCwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNl dCAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRw X2l0ZXIgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiB0cF9pdGVybmV4dCAqLworICB1bndpbmRfaW5mb19vYmplY3RfbWV0aG9k cywgICAgIC8qIHRwX21ldGhvZHMgKi8KKyAgMCwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiB0cF9tZW1iZXJzICovCisgIDAsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0c2V0ICovCisgIDAsICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZSAqLworICAw LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3QgKi8K KyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNj cl9nZXQgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiB0cF9kZXNjcl9zZXQgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiB0cF9kaWN0b2Zmc2V0ICovCisgIDAsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogdHBfaW5pdCAqLworICAwLCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FsbG9jICovCit9OwpkaWZm IC0tZ2l0IGEvZ2RiL3B5dGhvbi9weXRob24taW50ZXJuYWwuaCBiL2dkYi9w eXRob24vcHl0aG9uLWludGVybmFsLmgKaW5kZXggNGM0ZDMyYS4uMDU4MWIz MyAxMDA2NDQKLS0tIGEvZ2RiL3B5dGhvbi9weXRob24taW50ZXJuYWwuaAor KysgYi9nZGIvcHl0aG9uL3B5dGhvbi1pbnRlcm5hbC5oCkBAIC0zOTEsMTIg KzM5MSwxNCBAQCBQeU9iamVjdCAqcHNwYWNlX3RvX3BzcGFjZV9vYmplY3Qg KHN0cnVjdCBwcm9ncmFtX3NwYWNlICopCiAgICAgQ1BZQ0hFQ0tFUl9SRVRV Uk5TX0JPUlJPV0VEX1JFRjsKIFB5T2JqZWN0ICpwc3B5X2dldF9wcmludGVy cyAoUHlPYmplY3QgKiwgdm9pZCAqKTsKIFB5T2JqZWN0ICpwc3B5X2dldF9m cmFtZV9maWx0ZXJzIChQeU9iamVjdCAqLCB2b2lkICopOworUHlPYmplY3Qg KnBzcHlfZ2V0X2ZyYW1lX3Vud2luZGVycyAoUHlPYmplY3QgKiwgdm9pZCAq KTsKIFB5T2JqZWN0ICpwc3B5X2dldF94bWV0aG9kcyAoUHlPYmplY3QgKiwg dm9pZCAqKTsKIAogUHlPYmplY3QgKm9iamZpbGVfdG9fb2JqZmlsZV9vYmpl Y3QgKHN0cnVjdCBvYmpmaWxlICopCiAgICAgQ1BZQ0hFQ0tFUl9SRVRVUk5T X0JPUlJPV0VEX1JFRjsKIFB5T2JqZWN0ICpvYmpmcHlfZ2V0X3ByaW50ZXJz IChQeU9iamVjdCAqLCB2b2lkICopOwogUHlPYmplY3QgKm9iamZweV9nZXRf ZnJhbWVfZmlsdGVycyAoUHlPYmplY3QgKiwgdm9pZCAqKTsKK1B5T2JqZWN0 ICpvYmpmcHlfZ2V0X2ZyYW1lX3Vud2luZGVycyAoUHlPYmplY3QgKiwgdm9p ZCAqKTsKIFB5T2JqZWN0ICpvYmpmcHlfZ2V0X3htZXRob2RzIChQeU9iamVj dCAqLCB2b2lkICopOwogUHlPYmplY3QgKmdkYnB5X2xvb2t1cF9vYmpmaWxl IChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICpr dyk7CiAKQEAgLTQ5MSw2ICs0OTMsOCBAQCBpbnQgZ2RicHlfaW5pdGlhbGl6 ZV9hcmNoICh2b2lkKQogICBDUFlDSEVDS0VSX05FR0FUSVZFX1JFU1VMVF9T RVRTX0VYQ0VQVElPTjsKIGludCBnZGJweV9pbml0aWFsaXplX3htZXRob2Rz ICh2b2lkKQogICBDUFlDSEVDS0VSX05FR0FUSVZFX1JFU1VMVF9TRVRTX0VY Q0VQVElPTjsKK2ludCBnZGJweV9pbml0aWFsaXplX3Vud2luZCAodm9pZCkK KyAgQ1BZQ0hFQ0tFUl9ORUdBVElWRV9SRVNVTFRfU0VUU19FWENFUFRJT047 CiAKIHN0cnVjdCBjbGVhbnVwICptYWtlX2NsZWFudXBfcHlfZGVjcmVmIChQ eU9iamVjdCAqcHkpOwogc3RydWN0IGNsZWFudXAgKm1ha2VfY2xlYW51cF9w eV94ZGVjcmVmIChQeU9iamVjdCAqcHkpOwpkaWZmIC0tZ2l0IGEvZ2RiL3B5 dGhvbi9weXRob24uYyBiL2dkYi9weXRob24vcHl0aG9uLmMKaW5kZXggNThj N2M5Mi4uMWRhNjNmZCAxMDA2NDQKLS0tIGEvZ2RiL3B5dGhvbi9weXRob24u YworKysgYi9nZGIvcHl0aG9uL3B5dGhvbi5jCkBAIC0xODIxLDcgKzE4MjEs OCBAQCBtZXNzYWdlID09IGFuIGVycm9yIG1lc3NhZ2Ugd2l0aG91dCBhIHN0 YWNrIHdpbGwgYmUgcHJpbnRlZC4iKSwKICAgICAgIHx8IGdkYnB5X2luaXRp YWxpemVfbmV3X29iamZpbGVfZXZlbnQgKCkgIDwgMAogICAgICAgfHwgZ2Ri cHlfaW5pdGlhbGl6ZV9jbGVhcl9vYmpmaWxlc19ldmVudCAoKSAgPCAwCiAg ICAgICB8fCBnZGJweV9pbml0aWFsaXplX2FyY2ggKCkgPCAwCi0gICAgICB8 fCBnZGJweV9pbml0aWFsaXplX3htZXRob2RzICgpIDwgMCkKKyAgICAgIHx8 IGdkYnB5X2luaXRpYWxpemVfeG1ldGhvZHMgKCkgPCAwCisgICAgICB8fCBn ZGJweV9pbml0aWFsaXplX3Vud2luZCAoKSA8IDApCiAgICAgZ290byBmYWls OwogCiAgIGdkYnB5X3RvX3N0cmluZ19jc3QgPSBQeVN0cmluZ19Gcm9tU3Ry aW5nICgidG9fc3RyaW5nIik7CmRpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRl L2dkYi5weXRob24vcHktdW53aW5kLW1haW50LmMgYi9nZGIvdGVzdHN1aXRl L2dkYi5weXRob24vcHktdW53aW5kLW1haW50LmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uOGMxZDkzNQotLS0gL2Rldi9udWxsCisr KyBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS11bndpbmQtbWFpbnQu YwpAQCAtMCwwICsxLDI0IEBACisvKiBUaGlzIHRlc3RjYXNlIGlzIHBhcnQg b2YgR0RCLCB0aGUgR05VIGRlYnVnZ2VyLgorCisgICBDb3B5cmlnaHQgMjAx NSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5 CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVy c2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9u KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws CisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQor ICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGgg dGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9y Zy9saWNlbnNlcy8+LiAgKi8KKworaW50CittYWluICh2b2lkKQoreworICBp bnQgaSA9IDA7CisKKyAgcmV0dXJuIGk7IC8qIG5leHQtbGluZSAqLworfQpk aWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LXVud2lu ZC1tYWludC5leHAgYi9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktdW53 aW5kLW1haW50LmV4cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi5kZjIxNjhiCi0tLSAvZGV2L251bGwKKysrIGIvZ2RiL3Rlc3RzdWl0 ZS9nZGIucHl0aG9uL3B5LXVud2luZC1tYWludC5leHAKQEAgLTAsMCArMSw2 NCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMg aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwg b3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMK KyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisj IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJl Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8 aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyMgVGhpcyBmaWxl IGlzIHBhcnQgb2YgdGhlIEdEQiB0ZXN0c3VpdGUuICBJdCB0ZXN0cyBQeXRo b24tYmFzZWQKKyMgdW53aW5kaW5nIENMSS4KKworbG9hZF9saWIgZ2RiLXB5 dGhvbi5leHAKKworc3RhbmRhcmRfdGVzdGZpbGUKKworaWYge1twcmVwYXJl X2Zvcl90ZXN0aW5nICR7dGVzdGZpbGV9LmV4cCAke3Rlc3RmaWxlfSAke3Ny Y2ZpbGV9XSB9IHsKKyAgICByZXR1cm4gLTEKK30KKworIyBTa2lwIGFsbCB0 ZXN0cyBpZiBQeXRob24gc2NyaXB0aW5nIGlzIG5vdCBlbmFibGVkLgoraWYg eyBbc2tpcF9weXRob25fdGVzdHNdIH0geyBjb250aW51ZSB9CisKK3NldCBw eWZpbGUgW2dkYl9yZW1vdGVfZG93bmxvYWQgaG9zdCAke3NyY2Rpcn0vJHtz dWJkaXJ9LyR7dGVzdGZpbGV9LnB5XQorCitpZiAhW3J1bnRvX21haW4gXSB0 aGVuIHsKKyAgICBmYWlsICJDYW4ndCBydW4gdG8gbWFpbiIKKyAgICByZXR1 cm4gLTEKK30KKworZ2RiX3Rlc3QgInNvdXJjZSAke3B5ZmlsZX0iICJQeXRo b24gc2NyaXB0IGltcG9ydGVkIiAiaW1wb3J0IHB5dGhvbiBzY3JpcHRzIgor CitnZGJfdGVzdF9zZXF1ZW5jZSAiaW5mbyB1bndpbmRlciIgIlNob3cgYWxs IHVud2luZGVycyIgeworICAgICJnbG9iYWwgdW53aW5kZXJzOiIKKyAgICAi ICBnbG9iYWxfdW53aW5kZXIiCisgICAgInByb2dzcGFjZS4qdW53aW5kZXJz OiIKKyAgICAicHlfdW53aW5kX21haW50X3BzX3Vud2luZGVyIgorfQorCitn ZGJfYnJlYWtwb2ludCAke3NyY2ZpbGV9OltnZGJfZ2V0X2xpbmVfbnVtYmVy ICJuZXh0LWxpbmUiXQorCitnZGJfdGVzdF9zZXF1ZW5jZSAiY29udGludWUi ICJVbndpbmRlcnMgY2FsbGVkIiB7CisgICAgInB5X3Vud2luZF9tYWludF9w c191bndpbmRlciBjYWxsZWQiCisgICAgImdsb2JhbF91bndpbmRlciBjYWxs ZWQiCit9CisKK2dkYl90ZXN0ICJkaXNhYmxlIHVud2luZGVyIGdsb2JhbCAu KiIgIjEgdW53aW5kZXIgZGlzYWJsZWQiICJVbndpbmRlciBkaXNhYmxlZCIK KworZ2RiX3Rlc3Rfc2VxdWVuY2UgImluZm8gdW53aW5kZXIiICJTaG93IHdp dGggZ2xvYmFsIHVud2luZGVyIGRpc2FibGVkIiB7CisgICAgImdsb2JhbCB1 bndpbmRlcnM6IgorICAgICIgIGdsb2JhbF91bndpbmRlclxcW2Rpc2FibGVk XFxdIgorICAgICJwcm9nc3BhY2UuKnVud2luZGVyczoiCisgICAgIiAgcHlf dW53aW5kX21haW50X3BzX3Vud2luZGVyIgorfQorCitnZGJfdGVzdF9zZXF1 ZW5jZSAid2hlcmUiICJHbG9iYWwgdW53aW5kZXIgZGlzYWJsZWQiIHsKKyAg ICAicHlfdW53aW5kX21haW50X3BzX3Vud2luZGVyIGNhbGxlZFxyXG4jMCAg bWFpbiIKK30KZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhv bi9weS11bndpbmQtbWFpbnQucHkgYi9nZGIvdGVzdHN1aXRlL2dkYi5weXRo b24vcHktdW53aW5kLW1haW50LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLjM1ZDUzMTMKLS0tIC9kZXYvbnVsbAorKysgYi9nZGIv dGVzdHN1aXRlL2dkYi5weXRob24vcHktdW53aW5kLW1haW50LnB5CkBAIC0w LDAgKzEsNTkgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExp Y2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp b24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQg aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90 LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIFRo aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHREIgdGVzdHN1aXRlLiAgSXQgdGVz dHMgcHl0aG9uIHVud2luZGVycy4KKworaW1wb3J0IHJlCitpbXBvcnQgZ2Ri LnR5cGVzCitmcm9tIGdkYi51bndpbmRlciBpbXBvcnQgVW53aW5kZXIsIHJl Z2lzdGVyX3Vud2luZGVyCisKK2NsYXNzIFRlc3RHbG9iYWxVbndpbmRlcihV bndpbmRlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBz dXBlcihUZXN0R2xvYmFsVW53aW5kZXIsIHNlbGYpLl9faW5pdF9fKCJnbG9i YWxfdW53aW5kZXIiKQorCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsIHVud2lu ZGVyX2luZm8pOgorICAgICAgICBwcmludCAiJXMgY2FsbGVkIiAlIHNlbGYu bmFtZQorICAgICAgICByZXR1cm4gTm9uZQorCitjbGFzcyBUZXN0UHJvZ3Nw YWNlVW53aW5kZXIoVW53aW5kZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxm LCBuYW1lKToKKyAgICAgICAgc3VwZXIoVGVzdFByb2dzcGFjZVVud2luZGVy LCBzZWxmKS5fX2luaXRfXygiJXNfcHNfdW53aW5kZXIiICUgbmFtZSkKKwor ICAgIGRlZiBfX2NhbGxfXyhzZWxmLCB1bndpbmRlcl9pbmZvKToKKyAgICAg ICAgcHJpbnQgIiVzIGNhbGxlZCIgJSBzZWxmLm5hbWUKKyAgICAgICAgcmV0 dXJuIE5vbmUKKworY2xhc3MgVGVzdE9iamZpbGVVbndpbmRlcihVbndpbmRl cik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgorICAgICAgICBz dXBlcihUZXN0T2JqZmlsZVVud2luZGVyLCBzZWxmKS5fX2luaXRfXygiJXNf b2JqX3Vud2luZGVyIiAlIG5hbWUpCisKKyAgICBkZWYgX19jYWxsX18oc2Vs ZiwgdW53aW5kZXJfaW5mbyk6CisgICAgICAgIHByaW50ICIlcyBjYWxsZWQi ICUgc2VsZi5uYW1lCisgICAgICAgIHJldHVybiBOb25lCisKKworCitnZGIu dW53aW5kZXIucmVnaXN0ZXJfdW53aW5kZXIoZ2RiLCBUZXN0R2xvYmFsVW53 aW5kZXIoKSkKK3Nhd19ydW50aW1lX2Vycm9yID0gRmFsc2UKK3RyeToKKyAg ICBnZGIudW53aW5kZXIucmVnaXN0ZXJfdW53aW5kZXIoZ2RiLCBUZXN0R2xv YmFsVW53aW5kZXIoKSwgcmVwbGFjZT1GYWxzZSkKK2V4Y2VwdCBSdW50aW1l RXJyb3I6CisgICAgc2F3X3J1bnRpbWVfZXJyb3IgPSBUcnVlCitpZiBub3Qg c2F3X3J1bnRpbWVfZXJyb3I6CisgICAgcmFpc2UgUnVudGltZUVycm9yKCJN aXNzaW5nIHJ1bnRpbWUgZXJyb3IgZnJvbSByZWdpc3Rlcl91bndpbmRlci4i KQorZ2RiLnVud2luZGVyLnJlZ2lzdGVyX3Vud2luZGVyKGdkYiwgVGVzdEds b2JhbFVud2luZGVyKCksIHJlcGxhY2U9VHJ1ZSkKK2dkYi51bndpbmRlci5y ZWdpc3Rlcl91bndpbmRlcihnZGIuY3VycmVudF9wcm9nc3BhY2UoKSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXN0UHJvZ3NwYWNlVW53 aW5kZXIoInB5X3Vud2luZF9tYWludCIpKQorcHJpbnQgIlB5dGhvbiBzY3Jp cHQgaW1wb3J0ZWQiCmRpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5w eXRob24vcHktdW53aW5kLmMgYi9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24v cHktdW53aW5kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uY2Y0MWQ3OAotLS0gL2Rldi9udWxsCisrKyBiL2dkYi90ZXN0c3VpdGUv Z2RiLnB5dGhvbi9weS11bndpbmQuYwpAQCAtMCwwICsxLDgxIEBACisvKiBU aGlzIHRlc3QgcHJvZ3JhbSBpcyBwYXJ0IG9mIEdEQiwgdGhlIEdOVSBkZWJ1 Z2dlci4KKworICAgQ29weXJpZ2h0IDIwMTUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cisg ICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5z ZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u CisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQg aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5v dCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisK Ky8qIFRoaXMgaXMgdGhlIHRlc3QgcHJvZ3JhbSBsb2FkZWQgaW50byBHREIg YnkgdGhlIHB5LXVud2luZCB0ZXN0LiAgKi8KKworI2luY2x1ZGUgPHN0ZGlu dC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+ CisKK3N0YXRpYyB2b2lkICoKK3N3YXBfdmFsdWUgKHZvaWQgKipsb2NhdGlv biwgdm9pZCAqbmV3X3ZhbHVlKQoreworICB2b2lkICpvbGRfdmFsdWUgPSAq bG9jYXRpb247CisgICpsb2NhdGlvbiA9IG5ld192YWx1ZTsKKyAgcmV0dXJu IG9sZF92YWx1ZTsKK30KKworc3RhdGljIHZvaWQKK2JhZF9sYXlvdXQodm9p ZCAqKnZhcmlhYmxlX3B0ciwgdm9pZCAqZnApCit7CisgIGZwcmludGYgKHN0 ZGVyciwgIkZpcnN0IHZhcmlhYmxlIHNob3VsZCBiZSBhbGxvY2F0ZWQgb25l IHdvcmQgYmVsb3cgIgorICAgICAgICAgICAidGhlIGZyYW1lLiAgR290IHZh cmlhYmxlJ3MgYWRkcmVzcyAlcCwgZnJhbWUgYXQgJXAgaW5zdGVhZC5cbiIs CisgICAgICAgICAgIHZhcmlhYmxlX3B0ciwgZnApOworICBhYm9ydCgpOwor fQorCisjZGVmaW5lIE1ZX0ZSQU1FIChfX2J1aWx0aW5fZnJhbWVfYWRkcmVz cyAoMCkpCisKK3N0YXRpYyB2b2lkCitjb3JydXB0X2ZyYW1lX2lubmVyICh2 b2lkKQoreworICAvKiBTYXZlIG91dGVyIGZyYW1lIGFkZHJlc3MsIHRoZW4g Y29ycnVwdCB0aGUgdW53aW5kIGNoYWluIGJ5CisgICAgIHNldHRpbmcgdGhl IG91dGVyIGZyYW1lIGFkZHJlc3MgaW4gaXQgdG8gc2VsZi4gIFRoaXMgaXMK KyAgICAgQUJJLXNwZWNpZmljOiB0aGUgZmlyc3Qgd29yZCBvZiB0aGUgZnJh bWUgY29udGFpbnMgcHJldmlvdXMgZnJhbWUKKyAgICAgYWRkcmVzcyBpbiBh bWQ2NC4gICovCisgIHZvaWQgKnByZXZpb3VzX2ZwID0gc3dhcF92YWx1ZSAo KHZvaWQgKiopIE1ZX0ZSQU1FLCBNWV9GUkFNRSk7CisKKyAgLyogVmVyaWZ5 IHRoZSBjb21waWxlciBhbGxvY2F0ZXMgdGhlIGZpcnN0IGxvY2FsIHZhcmlh YmxlIG9uZSB3b3JkCisgICAgIGJlbG93IGZyYW1lLiAgVGhpcyBpcyB3aGVy ZSB0aGUgdGVzdCB1bndpbmRlciBleHBlY3RzIHRvIGZpbmQgdGhlCisgICAg IGNvcnJlY3Qgb3V0ZXIgZnJhbWUgYWRkcmVzcy4gICovCisgIGlmICgmcHJl dmlvdXNfZnAgKyAxICE9ICh2b2lkICoqKSBNWV9GUkFNRSkKKyAgICBiYWRf bGF5b3V0ICgmcHJldmlvdXNfZnAgKyAxLCBNWV9GUkFNRSk7CisKKyAgLyog Tm93IHJlc3RvcmUgaXQgc28gdGhhdCB3ZSBjYW4gcmV0dXJuLiAgVGhlIHRl c3Qgc2V0cyB0aGUKKyAgICAgYnJlYWtwb2ludCBqdXN0IGJlZm9yZSB0aGlz IGhhcHBlbnMsIGFuZCBHREIgd2lsbCBub3QgYmUgYWJsZSB0bworICAgICBz aG93IHRoZSBiYWNrdHJhY2Ugd2l0aG91dCBKSVQgcmVhZGVyLiAgKi8KKyAg c3dhcF92YWx1ZSAoKHZvaWQgKiopIE1ZX0ZSQU1FLCBwcmV2aW91c19mcCk7 IC8qIGJyZWFrIGJhY2t0cmFjZS1icm9rZW4gKi8KK30KKworc3RhdGljIHZv aWQKK2NvcnJ1cHRfZnJhbWVfb3V0ZXIgKHZvaWQpCit7CisgIC8qIFNlZSBh Ym92ZSBmb3IgdGhlIGV4cGxhbmF0aW9uIG9mIHRoZSBjb2RlIGhlcmUuICBU aGlzIGZ1bmN0aW9uCisgICAgIGNvcnJ1cHRzIGl0cyBmcmFtZSwgdG9vLCBh bmQgdGhlbiBjYWxscyB0aGUgaW5uZXIgb25lLiAgKi8KKyAgdm9pZCAqcHJl dmlvdXNfZnAgPSBzd2FwX3ZhbHVlICgodm9pZCAqKikgTVlfRlJBTUUsIE1Z X0ZSQU1FKTsKKyAgaWYgKCZwcmV2aW91c19mcCArIDEgIT0gKHZvaWQgKiop IE1ZX0ZSQU1FKQorICAgIGJhZF9sYXlvdXQgKCZwcmV2aW91c19mcCwgTVlf RlJBTUUpOworICBjb3JydXB0X2ZyYW1lX2lubmVyICgpOworICBzd2FwX3Zh bHVlICgodm9pZCAqKikgTVlfRlJBTUUsIHByZXZpb3VzX2ZwKTsKK30KKwor aW50CittYWluICgpCit7CisgIGNvcnJ1cHRfZnJhbWVfb3V0ZXIgKCk7Cisg IHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIu cHl0aG9uL3B5LXVud2luZC5leHAgYi9nZGIvdGVzdHN1aXRlL2dkYi5weXRo b24vcHktdW53aW5kLmV4cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi41M2Q2NzQ2Ci0tLSAvZGV2L251bGwKKysrIGIvZ2RiL3Rlc3Rz dWl0ZS9nZGIucHl0aG9uL3B5LXVud2luZC5leHAKQEAgLTAsMCArMSw1NCBA QAorIyBDb3B5cmlnaHQgKEMpIDIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IK KyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMg VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1F UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2Vp dmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UK KyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0 cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyMgVGhpcyBmaWxlIGlz IHBhcnQgb2YgdGhlIEdEQiB0ZXN0c3VpdGUuICBJdCB2ZXJpZmllcyB0aGF0 IGZyYW1lCisjIHVud2luZGVycyBjYW4gYmUgaW1wbGVtZW50ZWQgaW4gUHl0 aG9uLgorCitsb2FkX2xpYiBnZGItcHl0aG9uLmV4cAorCitzdGFuZGFyZF90 ZXN0ZmlsZQorCitpZiB7IFtwcmVwYXJlX2Zvcl90ZXN0aW5nICR7dGVzdGZp bGV9LmV4cCAke3Rlc3RmaWxlfSAke3NyY2ZpbGV9XSB9IHsKKyAgICByZXR1 cm4gLTEKK30KKworIyBTa2lwIGFsbCB0ZXN0cyBpZiBQeXRob24gc2NyaXB0 aW5nIGlzIG5vdCBlbmFibGVkLgoraWYgeyBbc2tpcF9weXRob25fdGVzdHNd IH0geyBjb250aW51ZSB9CisKKyMgVGhpcyB0ZXN0IHJ1bnMgb24gYSBzcGVj aWZpYyBwbGF0Zm9ybS4KK2lmIHsgISBbaXN0YXJnZXQgeDg2XzY0LSpdfSB7 IGNvbnRpbnVlIH0KKworIyBUaGUgZm9sbG93aW5nIHRlc3RzIHJlcXVpcmUg ZXhlY3V0aW9uLgorCitpZiAhW3J1bnRvX21haW5dIHRoZW4geworICAgIGZh aWwgIkNhbid0IHJ1biB0byBtYWluIgorICAgIHJldHVybiAwCit9CisKK3Nl dCBweWZpbGUgW2dkYl9yZW1vdGVfZG93bmxvYWQgaG9zdCAke3NyY2Rpcn0v JHtzdWJkaXJ9LyR7dGVzdGZpbGV9LnB5XQorCitnZGJfYnJlYWtwb2ludCBb Z2RiX2dldF9saW5lX251bWJlciAiYnJlYWsgYmFja3RyYWNlLWJyb2tlbiJd CisKK2dkYl90ZXN0ICJzb3VyY2UgJHtweWZpbGV9IiAiUHl0aG9uIHNjcmlw dCBpbXBvcnRlZCIgXAorICAgICAgICAgImltcG9ydCBweXRob24gc2NyaXB0 cyIKKworZ2RiX2NvbnRpbnVlX3RvX2JyZWFrcG9pbnQgImJyZWFrIGJhY2t0 cmFjZS1icm9rZW4iCitnZGJfdGVzdF9zZXF1ZW5jZSAid2hlcmUiICAiQmFj a3RyYWNlIHJlc3RvcmVkIGJ5IHVud2luZGVyIiB7CisgICAgIlxcclxcbiMw IC4qIGNvcnJ1cHRfZnJhbWVfaW5uZXIgXFwoXFwpIGF0ICIKKyAgICAiXFxy XFxuIzEgLiogY29ycnVwdF9mcmFtZV9vdXRlciBcXChcXCkgYXQgIgorICAg ICJcXHJcXG4jMiAuKiBtYWluIFxcKC4qXFwpIGF0IgorfQorCisKZGlmZiAt LWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS11bndpbmQucHkg Yi9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktdW53aW5kLnB5Cm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3NzA1NzgKLS0tIC9k ZXYvbnVsbAorKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktdW53 aW5kLnB5CkBAIC0wLDAgKzEsODMgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE1 IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJv Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cisj IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9u IDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55 IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmli dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisj IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9n cmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNl cy8+LgorCitpbXBvcnQgZ2RiCitmcm9tIGdkYi51bndpbmRlciBpbXBvcnQg VW53aW5kZXIKKworY2xhc3MgVGVzdFVud2luZGVyKFVud2luZGVyKToKKyAg ICBBTUQ2NF9SQlAgPSA2CisgICAgQU1ENjRfUlNQID0gNworICAgIEFNRDY0 X1JJUCA9IDE2CisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAg IFVud2luZGVyLl9faW5pdF9fKHNlbGYsICJ0ZXN0IHVud2luZGVyIikKKyAg ICAgICAgc2VsZi5jaGFyX3B0cl90ID0gZ2RiLmxvb2t1cF90eXBlKCJ1bnNp Z25lZCBjaGFyIikucG9pbnRlcigpCisgICAgICAgIHNlbGYuY2hhcl9wdHJf cHRyX3QgPSBzZWxmLmNoYXJfcHRyX3QucG9pbnRlcigpCisKKyAgICBkZWYg X3JlYWRfd29yZChzZWxmLCBhZGRyZXNzKToKKyAgICAgICAgcmV0dXJuIGFk ZHJlc3MuY2FzdChzZWxmLmNoYXJfcHRyX3B0cl90KS5kZXJlZmVyZW5jZSgp CisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgc25pZmZlcl9pbmZvKToKKyAg ICAgICAgIiIiVGVzdCB1bndpbmRlciB3cml0dGVuIGluIFB5dGhvbi4KKwor ICAgICAgICBUaGlzIHVud2luZGVyIGNhbiB1bndpbmQgdGhlIGZyYW1lcyB0 aGF0IGhhdmUgYmVlbiBkZWxpYmVyYXRlbHkKKyAgICAgICAgY29ycnVwdGVk IGluIGEgc3BlY2lmaWMgd2F5IChmdW5jdGlvbnMgaW4gdGhlIGFjY29tcGFu eWluZworICAgICAgICBweS11bndpbmQuYyBmaWxlIGRvIHRoYXQuKQorICAg ICAgICBUaGlzIGNvZGUgaXMgb25seSBvbiBBTUQ2NC4KKyAgICAgICAgT24g QU1ENjQgJFJCUCBwb2ludHMgdG8gdGhlIGlubmVybW9zdCBmcmFtZSAodW5s ZXNzIHRoZSBjb2RlCisgICAgICAgIHdhcyBjb21waWxlZCB3aXRoIC1mb21p dC1mcmFtZS1wb2ludGVyKSwgd2hpY2ggY29udGFpbnMgdGhlCisgICAgICAg IGFkZHJlc3Mgb2YgdGhlIHByZXZpb3VzIGZyYW1lIGF0IG9mZnNldCAwLiBU aGUgZnVuY3Rpb25zCisgICAgICAgIGRlbGliZXJhdGVseSBjb3JydXB0IHRo ZWlyIGZyYW1lcyBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICAg QmVmb3JlICAgICAgICAgICAgICAgICBBZnRlcgorICAgICAgICAgICAgICAg ICAgIENvcnJ1cHRpb246ICAgICAgICAgICBDb3JydXB0aW9uOgorICAgICAg ICAgICAgICAgICstLS0tLS0tLS0tLS0tLSsgICAgICAgKy0tLS0tLS0tLS0t LS0tKworICAgICAgICBSQlAtOCAgIHwgICAgICAgICAgICAgIHwgICAgICAg fCBQcmV2aW91cyBSQlAgfAorICAgICAgICAgICAgICAgICstLS0tLS0tLS0t LS0tLSsgICAgICAgKy0tLS0tLS0tLS0tLS0tKworICAgICAgICBSQlAgICAg ICsgUHJldmlvdXMgUkJQIHwgICAgICAgfCAgICBSQlAgICAgICAgfAorICAg ICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLSsgICAgICAgKy0tLS0tLS0t LS0tLS0tKworICAgICAgICBSQlArOCAgIHwgUmV0dXJuIFJJUCAgIHwgICAg ICAgfCBSZXR1cm4gIFJJUCAgfAorICAgICAgICAgICAgICAgICstLS0tLS0t LS0tLS0tLSsgICAgICAgKy0tLS0tLS0tLS0tLS0tKworICAgICAgICBPbGQg U1AgIHwgICAgICAgICAgICAgIHwgICAgICAgfCAgICAgICAgICAgICAgfAor CisgICAgICAgIFRoaXMgdW53aW5kZXIgcmVjb2duaXplcyB0aGUgY29ycnVw dCBmcmFtZXMgYnkgY2hlY2tpbmcgdGhhdAorICAgICAgICAqUkJQID09IFJC UCwgYW5kIHJlc3RvcmVzIHByZXZpb3VzIFJCUCBmcm9tIHRoZSB3b3JkIGFi b3ZlIGl0LgorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAg ICAgIyBOT1RFOiB0aGUgcmVnaXN0ZXJzIGluIFVud2luZGVyIEFQSSBjYW4g YmUgcmVmZXJlbmNlZAorICAgICAgICAgICAgIyBlaXRoZXIgYnkgbmFtZSBv ciBieSBudW1iZXIuIFRoZSBjb2RlIGJlbG93IHVzZXMgYm90aAorICAgICAg ICAgICAgIyB0byBhY2hpZXZlIG1vcmUgY292ZXJhZ2UuCisgICAgICAgICAg ICBicCA9IHNuaWZmZXJfaW5mby5yZWFkX3JlZ2lzdGVyKCJyYnAiKS5jYXN0 KHNlbGYuY2hhcl9wdHJfdCkKKyAgICAgICAgICAgIGlmIHNlbGYuX3JlYWRf d29yZChicCkgIT0gYnA6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUK KyAgICAgICAgICAgICMgRm91bmQgdGhlIGZyYW1lIHRoYXQgdGhlIHRlc3Qg cHJvZ3JhbSBoYXMgY29ycnVwdGVkIGZvciB1cy4KKyAgICAgICAgICAgICMg VGhlIGNvcnJlY3QgQlAgZm9yIHRoZSBvdXRlciBmcmFtZSBoYXMgYmVlbiBz YXZlZCBvbmUgd29yZAorICAgICAgICAgICAgIyBhYm92ZSwgcHJldmlvdXMg SVAgYW5kIFNQIGFyZSBhdCB0aGUgZXhwZWN0ZWQgcGxhY2VzLgorICAgICAg ICAgICAgcHJldmlvdXNfYnAgPSBzZWxmLl9yZWFkX3dvcmQoYnAgLSA4KQor ICAgICAgICAgICAgcHJldmlvdXNfaXAgPSBzZWxmLl9yZWFkX3dvcmQoYnAg KyA4KQorICAgICAgICAgICAgcHJldmlvdXNfc3AgPSBicCArIDE2CisKKyAg ICAgICAgICAgIHNwID0gc25pZmZlcl9pbmZvLnJlYWRfcmVnaXN0ZXIoVGVz dFVud2luZGVyLkFNRDY0X1JTUCkKKyAgICAgICAgICAgIGlwID0gc25pZmZl cl9pbmZvLnJlYWRfcmVnaXN0ZXIoVGVzdFVud2luZGVyLkFNRDY0X1JJUCkK KyAgICAgICAgICAgIHVud2luZF9pbmZvID0gc25pZmZlcl9pbmZvLnVud2lu ZF9pbmZvX3dpdGhfaWQoc3AsIGlwKQorICAgICAgICAgICAgdW53aW5kX2lu Zm8uc2V0X3ByZXZpb3VzX2ZyYW1lX3JlZ2lzdGVyKFRlc3RVbndpbmRlci5B TUQ2NF9SQlAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcHJldmlvdXNfYnApCisgICAgICAgICAgICB1 bndpbmRfaW5mby5zZXRfcHJldmlvdXNfZnJhbWVfcmVnaXN0ZXIoInJpcCIs IHByZXZpb3VzX2lwKQorICAgICAgICAgICAgdW53aW5kX2luZm8uc2V0X3By ZXZpb3VzX2ZyYW1lX3JlZ2lzdGVyKCJyc3AiLCBwcmV2aW91c19zcCkKKyAg ICAgICAgICAgIHJldHVybiB1bndpbmRfaW5mbworICAgICAgICBleGNlcHQg KGdkYi5lcnJvciwgUnVudGltZUVycm9yKToKKyAgICAgICAgICAgIHJldHVy biBOb25lCisKK2dkYi51bndpbmRlci5yZWdpc3Rlcl91bndpbmRlcihOb25l LCBUZXN0VW53aW5kZXIoKSwgVHJ1ZSkKK3ByaW50KCJQeXRob24gc2NyaXB0 IGltcG9ydGVkIikK --001a1134b3ce6f7d1a051198021b--