From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 30118 invoked by alias); 13 Oct 2010 18:42:56 -0000 Received: (qmail 30100 invoked by uid 22791); 13 Oct 2010 18:42:53 -0000 X-SWARE-Spam-Status: No, hits=-1.9 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,SPF_HELO_PASS,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from smtp-out.google.com (HELO smtp-out.google.com) (74.125.121.35) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 13 Oct 2010 18:42:45 +0000 Received: from hpaq7.eem.corp.google.com (hpaq7.eem.corp.google.com [172.25.149.7]) by smtp-out.google.com with ESMTP id o9DIggMj016096 for ; Wed, 13 Oct 2010 11:42:42 -0700 Received: from pwj3 (pwj3.prod.google.com [10.241.219.67]) by hpaq7.eem.corp.google.com with ESMTP id o9DIg8EE018639 for ; Wed, 13 Oct 2010 11:42:41 -0700 Received: by pwj3 with SMTP id 3so750176pwj.14 for ; Wed, 13 Oct 2010 11:42:40 -0700 (PDT) MIME-Version: 1.0 Received: by 10.143.13.17 with SMTP id q17mr7942992wfi.108.1286995359893; Wed, 13 Oct 2010 11:42:39 -0700 (PDT) Received: by 10.220.118.2 with HTTP; Wed, 13 Oct 2010 11:42:39 -0700 (PDT) In-Reply-To: <83tykvn2xh.fsf@gnu.org> References: <20101006204434.DCD842461B2@ruffy.mtv.corp.google.com> <83vd5fnicu.fsf@gnu.org> <83tykvn2xh.fsf@gnu.org> Date: Wed, 13 Oct 2010 18:42:00 -0000 Message-ID: Subject: Re: [RFA] New python module gdb.types From: Doug Evans To: Eli Zaretskii Cc: gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary=001636e0a7fe410b33049283f5cb X-System-Of-Record: true X-IsSubscribed: yes 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 X-SW-Source: 2010-10/txt/msg00228.txt.bz2 --001636e0a7fe410b33049283f5cb Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 1998 On Sat, Oct 9, 2010 at 2:14 AM, Eli Zaretskii wrote: >> Date: Fri, 8 Oct 2010 15:18:45 -0700 >> From: Doug Evans >> Cc: gdb-patches@sourceware.org >> >> Return @var{type} with const and volatile qualifiers stripped, >> and with typedefs and references converted to the underlying type. > > If the conversion of typedefs is recursive, then I think "to the > underlying primitive data type" is more accurate. > > This takes care of typedefs. =A0I'm still unclear regarding the > "references" part. =A0What does it mean? removing the "pointer to" part, > like in "int *" -> "int"? > > I still maintain that examples go a long way towards explaining such > abstract descriptions. > >> >> +@item make_enum_dict (@var{enum_type}) >> >> +Return a dictionary made from @var{enum_type}. >> > >> > Same here: at the very least we should say what is a "dictionary" in >> > this context. >> >> The context is python and in the python context "dictionary" is quite >> specific, it's a builtin type. > > Well, you used it as a simple word, which makes it hard to guess to > someone like me, for whom Python is a read-only language. > >> What if it said the following instead? >> >> Return a python dictionary made from @var{enum_type}. > > How about > > =A0Return a Python @code{dictionary} type produced from @var{enum_type}. How about this? 2010-10-13 Doug Evans New python module gdb.types. * NEWS: Document it. * data-directory/Makefile.in (PYTHON_FILES): Add gdb/types.py. * python/lib/gdb/types.py: New file. testsuite/ * lib/gdb-python.exp (gdb_check_python_config): New function. * gdb.python/Makefile.in (EXECUTABLES): Add lib-types. * gdb.python/lib-types.cc: New file. * gdb.python/lib-types.exp: New file. doc/ * gdb.texinfo (Python): Add "Python modules". (Types in Python): Add reference to gdb.types section. (Python modules): New node. --001636e0a7fe410b33049283f5cb Content-Type: text/plain; charset=US-ASCII; name="gdb-101013-types-module-3.patch.txt" Content-Disposition: attachment; filename="gdb-101013-types-module-3.patch.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gf8jsac40 Content-length: 23652 MjAxMC0xMC0xMyAgRG91ZyBFdmFucyAgPGRqZUBnb29nbGUuY29tPgoKCU5l dyBweXRob24gbW9kdWxlIGdkYi50eXBlcy4KCSogTkVXUzogRG9jdW1lbnQg aXQuCgkqIGRhdGEtZGlyZWN0b3J5L01ha2VmaWxlLmluIChQWVRIT05fRklM RVMpOiBBZGQgZ2RiL3R5cGVzLnB5LgoJKiBweXRob24vbGliL2dkYi90eXBl cy5weTogTmV3IGZpbGUuCgoJdGVzdHN1aXRlLwoJKiBsaWIvZ2RiLXB5dGhv bi5leHAgKGdkYl9jaGVja19weXRob25fY29uZmlnKTogTmV3IGZ1bmN0aW9u LgoJKiBnZGIucHl0aG9uL01ha2VmaWxlLmluIChFWEVDVVRBQkxFUyk6IEFk ZCBsaWItdHlwZXMuCgkqIGdkYi5weXRob24vbGliLXR5cGVzLmNjOiBOZXcg ZmlsZS4KCSogZ2RiLnB5dGhvbi9saWItdHlwZXMuZXhwOiBOZXcgZmlsZS4K Cglkb2MvCgkqIGdkYi50ZXhpbmZvIChQeXRob24pOiBBZGQgIlB5dGhvbiBt b2R1bGVzIi4KCShUeXBlcyBpbiBQeXRob24pOiBBZGQgcmVmZXJlbmNlIHRv IGdkYi50eXBlcyBzZWN0aW9uLgoJKFB5dGhvbiBtb2R1bGVzKTogTmV3IG5v ZGUuCgpJbmRleDogTkVXUwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm aWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL05FV1MsdgpyZXRyaWV2aW5nIHJldmlz aW9uIDEuNDA2CmRpZmYgLXUgLXAgLXIxLjQwNiBORVdTCi0tLSBORVdTCTI4 IFNlcCAyMDEwIDIxOjQwOjIzIC0wMDAwCTEuNDA2CisrKyBORVdTCTEzIE9j dCAyMDEwIDE4OjI2OjM0IC0wMDAwCkBAIC0xMiw2ICsxMiwxMCBAQAogCiAg ICAgIHJlc3VsdCA9IHNvbWVfdmFsdWUgKDEwLDIwKQogCisgICoqIE1vZHVs ZSBnZGIudHlwZXMgaGFzIGJlZW4gYWRkZWQuCisgICAgIEl0IGNvbnRhaW5z IGEgY29sbGVjdGlvbiBvZiB1dGlsaXRpZXMgZm9yIHdvcmtpbmcgd2l0aCBn ZGIuVHlwZXMgb2JqZWN0czoKKyAgICAgZ2V0X2Jhc2ljX3R5cGUsIGhhc19m aWVsZCwgbWFrZV9lbnVtX2RpY3QuCisKICogQysrIEltcHJvdmVtZW50czoK IAogICAqKiBHREIgbm93IHB1dHMgdGVtcGxhdGUgcGFyYW1ldGVycyBpbiBz Y29wZSB3aGVuIGRlYnVnZ2luZyBpbiBhbgpJbmRleDogZGF0YS1kaXJlY3Rv cnkvTWFrZWZpbGUuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls ZTogL2N2cy9zcmMvc3JjL2dkYi9kYXRhLWRpcmVjdG9yeS9NYWtlZmlsZS5p bix2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yCmRpZmYgLXUgLXAgLXIxLjIg TWFrZWZpbGUuaW4KLS0tIGRhdGEtZGlyZWN0b3J5L01ha2VmaWxlLmluCTcg T2N0IDIwMTAgMDA6MTg6MjIgLTAwMDAJMS4yCisrKyBkYXRhLWRpcmVjdG9y eS9NYWtlZmlsZS5pbgkxMyBPY3QgMjAxMCAxODoyNjozNCAtMDAwMApAQCAt NTEsNyArNTEsOCBAQCBTWVNDQUxMU19GSUxFUyA9IFwKIFBZVEhPTl9ESVIg PSBweXRob24KIFBZVEhPTl9JTlNUQUxMX0RJUiA9ICQoREVTVERJUikvJChH REJfREFUQURJUikvJChQWVRIT05fRElSKQogUFlUSE9OX0ZJTEVTID0gXAot CWdkYi9fX2luaXRfXy5weQorCWdkYi9fX2luaXRfXy5weSBcCisJZ2RiL3R5 cGVzLnB5CiAKIC5QSE9OWTogYWxsCiBhbGw6IHN0YW1wLXN5c2NhbGxzIHN0 YW1wLXB5dGhvbgpJbmRleDogZG9jL2dkYi50ZXhpbmZvCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIvZG9jL2dk Yi50ZXhpbmZvLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjc2OApkaWZmIC11 IC1wIC1yMS43NjggZ2RiLnRleGluZm8KLS0tIGRvYy9nZGIudGV4aW5mbwkx MSBPY3QgMjAxMCAxNTo0NjowOSAtMDAwMAkxLjc2OAorKysgZG9jL2dkYi50 ZXhpbmZvCTEzIE9jdCAyMDEwIDE4OjI2OjM0IC0wMDAwCkBAIC0yMDQwMSw2 ICsyMDQwMSw3IEBAIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgdG8gbG9jYXRl IGFsbCBzY3IKICogUHl0aG9uIENvbW1hbmRzOjogICAgICAgICAgICAgQWNj ZXNzaW5nIFB5dGhvbiBmcm9tIEB2YWx1ZXtHREJOfS4KICogUHl0aG9uIEFQ STo6ICAgICAgICAgICAgICAgICAgQWNjZXNzaW5nIEB2YWx1ZXtHREJOfSBm cm9tIFB5dGhvbi4KICogQXV0by1sb2FkaW5nOjogICAgICAgICAgICAgICAg QXV0b21hdGljYWxseSBsb2FkaW5nIFB5dGhvbiBjb2RlLgorKiBQeXRob24g bW9kdWxlczo6ICAgICAgICAgICAgICBQeXRob24gbW9kdWxlcyBwcm92aWRl ZCBieSBAdmFsdWV7R0RCTn0uCiBAZW5kIG1lbnUKIAogQG5vZGUgUHl0aG9u IENvbW1hbmRzCkBAIC0yMTI0NSw2ICsyMTI0Niw5IEBAIEEgZnVuY3Rpb24g aW50ZXJuYWwgdG8gQHZhbHVle0dEQk59LiAgVGgKIGNvbnZlbmllbmNlIGZ1 bmN0aW9ucy4KIEBlbmQgdGFibGUKIAorRnVydGhlciBzdXBwb3J0IGZvciB0 eXBlcyBpcyBwcm92aWRlZCBpbiB0aGUgQGNvZGV7Z2RiLnR5cGVzfQorUHl0 aG9uIG1vZHVsZSAoQHB4cmVme2dkYi50eXBlc30pLgorCiBAbm9kZSBQcmV0 dHkgUHJpbnRpbmcgQVBJCiBAc3Vic3Vic2VjdGlvbiBQcmV0dHkgUHJpbnRp bmcgQVBJCiAKQEAgLTIyOTExLDYgKzIyOTE1LDU2IEBAIGN1bWJlcnNvbWUu ICBJdCBtYXkgYmUgZWFzaWVyIHRvIHNwZWNpZnkKIHRvcCBvZiB0aGUgc291 cmNlIHRyZWUgdG8gdGhlIHNvdXJjZSBzZWFyY2ggcGF0aC4KIEBlbmQgaXRl bWl6ZQogCitAbm9kZSBQeXRob24gbW9kdWxlcworQHN1YnNlY3Rpb24gUHl0 aG9uIG1vZHVsZXMKK0BjaW5kZXggcHl0aG9uIG1vZHVsZXMKKworQGMgSXQg aXMgYXNzdW1lZCB0aGF0IGF0IGxlYXN0IG9uZSBtb3JlIG1vZHVsZSB3aWxs IGJlIGFkZGVkIGJlZm9yZQorQGMgdGhlIG5leHQgcmVsZWFzZSBvZiBnZGIu ICBUaHVzIHdlIHVzZSBhIG1lbnUgaGVyZS4KK0B2YWx1ZXtHREJOfSBjb21l cyB3aXRoIGEgbW9kdWxlIHRvIGFzc2lzdCB3cml0aW5nIFB5dGhvbiBjb2Rl LgorCitAbWVudQorKiBnZGIudHlwZXM6OiAgICAgICAgICBVdGlsaXRpZXMg Zm9yIHdvcmtpbmcgd2l0aCB0eXBlcy4KK0BlbmQgbWVudQorCitAbm9kZSBn ZGIudHlwZXMKK0BzdWJzdWJzZWN0aW9uIGdkYi50eXBlcworCitUaGlzIG1v ZHVsZSBwcm92aWRlcyBhIGNvbGxlY3Rpb24gb2YgdXRpbGl0aWVzIGZvciB3 b3JraW5nIHdpdGgKK0Bjb2Rle2dkYi5UeXBlc30gb2JqZWN0cy4KKworQHRh YmxlIEBjb2RlCitAaXRlbSBnZXRfYmFzaWNfdHlwZSAoQHZhcnt0eXBlfSkK K1JldHVybiBAdmFye3R5cGV9IHdpdGggY29uc3QgYW5kIHZvbGF0aWxlIHF1 YWxpZmllcnMgc3RyaXBwZWQsCithbmQgd2l0aCB0eXBlZGVmcyBhbmQgQysr IHJlZmVyZW5jZXMgY29udmVydGVkIHRvIHRoZSB1bmRlcmx5aW5nIHR5cGUu CisKK0MrKyBleGFtcGxlOgorCitAc21hbGxleGFtcGxlCit0eXBlZGVmIGNv bnN0IGludCBjb25zdF9pbnQ7Citjb25zdF9pbnQgZm9vICgzKTsKK2NvbnN0 X2ludCYgZm9vX3JlZiAoZm9vKTsKK2ludCBtYWluICgpIHsgcmV0dXJuIDA7 IH0KK0BlbmQgc21hbGxleGFtcGxlCisKK1RoZW4gaW4gZ2RiOgorCitAc21h bGxleGFtcGxlCisoZ2RiKSBzdGFydAorKGdkYikgcHl0aG9uIGltcG9ydCBn ZGIudHlwZXMKKyhnZGIpIHB5dGhvbiBmb29fcmVmID0gZ2RiLnBhcnNlX2Fu ZF9ldmFsKCJmb29fcmVmIikKKyhnZGIpIHB5dGhvbiBwcmludCBnZGIudHlw ZXMuZ2V0X2Jhc2ljX3R5cGUoZm9vX3JlZi50eXBlKQoraW50CitAZW5kIHNt YWxsZXhhbXBsZQorCitAaXRlbSBoYXNfZmllbGQgKEB2YXJ7dHlwZX0sIEB2 YXJ7ZmllbGR9KQorUmV0dXJuIEBjb2Rle1RydWV9IGlmIEB2YXJ7dHlwZX0s IGFzc3VtZWQgdG8gYmUgYSB0eXBlIHdpdGggZmllbGRzCisoZS5nLiwgYSBz dHJ1Y3R1cmUgb3IgdW5pb24pLCBoYXMgZmllbGQgQHZhcntmaWVsZH0uCisK K0BpdGVtIG1ha2VfZW51bV9kaWN0IChAdmFye2VudW1fdHlwZX0pCitSZXR1 cm4gYSBQeXRob24gQGNvZGV7ZGljdGlvbmFyeX0gdHlwZSBwcm9kdWNlZCBm cm9tIEB2YXJ7ZW51bV90eXBlfS4KK0BlbmQgdGFibGUKKwogQG5vZGUgSW50 ZXJwcmV0ZXJzCiBAY2hhcHRlciBDb21tYW5kIEludGVycHJldGVycwogQGNp bmRleCBjb21tYW5kIGludGVycHJldGVycwpJbmRleDogcHl0aG9uL2xpYi9n ZGIvdHlwZXMucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog cHl0aG9uL2xpYi9nZGIvdHlwZXMucHkKZGlmZiAtTiBweXRob24vbGliL2dk Yi90eXBlcy5weQotLS0gL2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAg LTAwMDAKKysrIHB5dGhvbi9saWIvZ2RiL3R5cGVzLnB5CTEzIE9jdCAyMDEw IDE4OjQwOjAwIC0wMDAwCkBAIC0wLDAgKzEsOTEgQEAKKyMgVHlwZSB1dGls aXRpZXMuCisjIENvcHlyaWdodCAoQykgMjAxMCBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQor IyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNl LCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor IworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK KyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2Vl IDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIiIiVXRpbGl0 aWVzIGZvciB3b3JraW5nIHdpdGggZ2RiLlR5cGVzLiIiIgorCitpbXBvcnQg Z2RiCisKKworZGVmIGdldF9iYXNpY190eXBlKHR5cGVfKToKKyAgICAiIiJS ZXR1cm4gdGhlICJiYXNpYyIgdHlwZSBvZiBhIHR5cGUuCisKKyAgICBBcmd1 bWVudHM6CisgICAgICAgIHR5cGVfOiBUaGUgdHlwZSB0byByZWR1Y2UgdG8g aXRzIGJhc2ljIHR5cGUuCisKKyAgICBSZXR1cm5zOgorICAgICAgICB0eXBl XyB3aXRoIGNvbnN0L3ZvbGF0aWxlIGlzIHN0cmlwcGVkIGF3YXksCisgICAg ICAgIGFuZCB0eXBlZGVmcy9yZWZlcmVuY2VzIGNvbnZlcnRlZCB0byB0aGUg dW5kZXJseWluZyB0eXBlLgorICAgICIiIgorCisgICAgd2hpbGUgKHR5cGVf LmNvZGUgPT0gZ2RiLlRZUEVfQ09ERV9SRUYgb3IKKyAgICAgICAgICAgdHlw ZV8uY29kZSA9PSBnZGIuVFlQRV9DT0RFX1RZUEVERUYpOgorICAgICAgICBp ZiB0eXBlXy5jb2RlID09IGdkYi5UWVBFX0NPREVfUkVGOgorICAgICAgICAg ICAgdHlwZV8gPSB0eXBlXy50YXJnZXQoKQorICAgICAgICBlbHNlOgorICAg ICAgICAgICAgdHlwZV8gPSB0eXBlXy5zdHJpcF90eXBlZGVmcygpCisgICAg cmV0dXJuIHR5cGVfLnVucXVhbGlmaWVkKCkKKworCitkZWYgaGFzX2ZpZWxk KHR5cGVfLCBmaWVsZCk6CisgICAgIiIiUmV0dXJuIFRydWUgaWYgYSB0eXBl IGhhcyB0aGUgc3BlY2lmaWVkIGZpZWxkLgorCisgICAgQXJndW1lbnRzOgor ICAgICAgICB0eXBlXzogVGhlIHR5cGUgdG8gZXhhbWluZS4KKyAgICAgICAg ICAgIEl0IG11c3QgYmUgb25lIG9mIGdkYi5UWVBFX0NPREVfU1RSVUNULCBn ZGIuVFlQRV9DT0RFX1VOSU9OLgorICAgICAgICBmaWVsZDogVGhlIG5hbWUg b2YgdGhlIGZpZWxkIHRvIGxvb2sgdXAuCisKKyAgICBSZXR1cm5zOgorICAg ICAgICBUcnVlIGlmIHRoZSBmaWVsZCBpcyBwcmVzZW50IGVpdGhlciBpbiB0 eXBlXyBvciBhbnkgYmFzZWNsYXNzLgorCisgICAgUmFpc2VzOgorICAgICAg ICBUeXBlRXJyb3I6IFRoZSB0eXBlIGlzIG5vdCBhIHN0cnVjdCBvciB1bmlv bi4KKyAgICAiIiIKKworICAgIHR5cGVfID0gZ2V0X2Jhc2ljX3R5cGUodHlw ZV8pCisgICAgaWYgKHR5cGVfLmNvZGUgIT0gZ2RiLlRZUEVfQ09ERV9TVFJV Q1QgYW5kCisgICAgICAgIHR5cGVfLmNvZGUgIT0gZ2RiLlRZUEVfQ09ERV9V TklPTik6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcigibm90IGEgc3RydWN0 IG9yIHVuaW9uIikKKyAgICBmb3IgZiBpbiB0eXBlXy5maWVsZHMoKToKKyAg ICAgICAgaWYgZi5pc19iYXNlX2NsYXNzOgorICAgICAgICAgICAgaWYgaGFz X2ZpZWxkKGYudHlwZSwgZmllbGQpOgorICAgICAgICAgICAgICAgIHJldHVy biBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIE5PVEU6IGYu bmFtZSBjb3VsZCBiZSBOb25lCisgICAgICAgICAgICBpZiBmLm5hbWUgPT0g ZmllbGQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICByZXR1 cm4gRmFsc2UKKworCitkZWYgbWFrZV9lbnVtX2RpY3QoZW51bV90eXBlKToK KyAgICAiIiJSZXR1cm4gYSBkaWN0aW9uYXJ5IGZyb20gYSBwcm9ncmFtJ3Mg ZW51bSB0eXBlLgorCisgICAgQXJndW1lbnRzOgorICAgICAgICBlbnVtX3R5 cGU6IFRoZSBlbnVtIHRvIGNvbXB1dGUgdGhlIGRpY3Rpb25hcnkgZm9yLgor CisgICAgUmV0dXJuczoKKyAgICAgICAgVGhlIGRpY3Rpb25hcnkgb2YgdGhl IGVudW0uCisKKyAgICBSYWlzZXM6CisgICAgICAgIFR5cGVFcnJvcjogVGhl IHR5cGUgaXMgbm90IGFuIGVudW0uCisgICAgIiIiCisKKyAgICBpZiBlbnVt X3R5cGUuY29kZSAhPSBnZGIuVFlQRV9DT0RFX0VOVU06CisgICAgICAgIHJh aXNlIFR5cGVFcnJvcigibm90IGFuIGVudW0gdHlwZSIpCisgICAgZW51bV9k aWN0ID0ge30KKyAgICBmb3IgZmllbGQgaW4gZW51bV90eXBlLmZpZWxkcygp OgorICAgICAgICAjIFRoZSBlbnVtJ3MgdmFsdWUgaXMgc3RvcmVkIGluICJi aXRwb3MiLgorICAgICAgICBlbnVtX2RpY3RbZmllbGQubmFtZV0gPSBmaWVs ZC5iaXRwb3MKKyAgICByZXR1cm4gZW51bV9kaWN0CkluZGV4OiB0ZXN0c3Vp dGUvZ2RiLnB5dGhvbi9NYWtlZmlsZS5pbgo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL3Rlc3RzdWl0ZS9nZGIu cHl0aG9uL01ha2VmaWxlLmluLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjgK ZGlmZiAtdSAtcCAtcjEuOCBNYWtlZmlsZS5pbgotLS0gdGVzdHN1aXRlL2dk Yi5weXRob24vTWFrZWZpbGUuaW4JMTkgQXVnIDIwMTAgMTc6MDA6NTcgLTAw MDAJMS44CisrKyB0ZXN0c3VpdGUvZ2RiLnB5dGhvbi9NYWtlZmlsZS5pbgkx MyBPY3QgMjAxMCAxODoyNjozNSAtMDAwMApAQCAtMyw3ICszLDcgQEAgc3Jj ZGlyID0gQHNyY2RpckAKIAogRVhFQ1VUQUJMRVMgPSBweS10eXBlIHB5LXZh bHVlIHB5LXByZXR0eXByaW50IHB5LXRlbXBsYXRlIHB5LWJsb2NrIFwKIAkJ cHktc3ltYm9sIHB5LW1pIHB5LWJyZWFrcG9pbnQgcHktaW5mZXJpb3IgcHkt aW5mdGhyZWFkIFwKLQkJcHktc2hhcmVkIHB5dGhvbgorCQlweS1zaGFyZWQg cHl0aG9uIGxpYi10eXBlcwogCiBNSVNDRUxMQU5FT1VTID0gcHktc2hhcmVk LXNsLnNsCiAKSW5kZXg6IHRlc3RzdWl0ZS9nZGIucHl0aG9uL2xpYi10eXBl cy5jYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiB0ZXN0c3Vp dGUvZ2RiLnB5dGhvbi9saWItdHlwZXMuY2MKZGlmZiAtTiB0ZXN0c3VpdGUv Z2RiLnB5dGhvbi9saWItdHlwZXMuY2MKLS0tIC9kZXYvbnVsbAkxIEphbiAx OTcwIDAwOjAwOjAwIC0wMDAwCisrKyB0ZXN0c3VpdGUvZ2RiLnB5dGhvbi9s aWItdHlwZXMuY2MJMTMgT2N0IDIwMTAgMTg6MjY6MzUgLTAwMDAKQEAgLTAs MCArMSw2MSBAQAorLyogVGhpcyB0ZXN0Y2FzZSBpcyBwYXJ0IG9mIEdEQiwg dGhlIEdOVSBkZWJ1Z2dlci4KKworICAgQ29weXJpZ2h0IDIwMTAgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBv ZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxh dGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAg IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJv Z3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5z ZXMvPi4gICovCisKK2NsYXNzIGNsYXNzMQoreworIHB1YmxpYzoKKyAgY2xh c3MxIChpbnQgX3gpIDogeCAoX3gpIHt9CisgIGludCB4OworfTsKKworY2xh c3MxIGNsYXNzMV9vYmogKDQyKTsKK2NvbnN0IGNsYXNzMSBjb25zdF9jbGFz czFfb2JqICg0Mik7Cit2b2xhdGlsZSBjbGFzczEgdm9sYXRpbGVfY2xhc3Mx X29iaiAoNDIpOworY29uc3Qgdm9sYXRpbGUgY2xhc3MxIGNvbnN0X3ZvbGF0 aWxlX2NsYXNzMV9vYmogKDQyKTsKKwordHlwZWRlZiBjbGFzczEgdHlwZWRl Zl9jbGFzczE7CisKK3R5cGVkZWZfY2xhc3MxIHR5cGVkZWZfY2xhc3MxX29i aiAoNDIpOworCitjbGFzczEmIGNsYXNzMV9yZWZfb2JqIChjbGFzczFfb2Jq KTsKKwordHlwZWRlZiBjb25zdCB0eXBlZGVmX2NsYXNzMSB0eXBlZGVmX2Nv bnN0X3R5cGVkZWZfY2xhc3MxOworCit0eXBlZGVmX2NvbnN0X3R5cGVkZWZf Y2xhc3MxIHR5cGVkZWZfY29uc3RfdHlwZWRlZl9jbGFzczFfb2JqICg0Mik7 CisKK3R5cGVkZWYgdHlwZWRlZl9jb25zdF90eXBlZGVmX2NsYXNzMSYgdHlw ZWRlZl9jb25zdF90eXBlZGVmX2NsYXNzMV9yZWY7CisKK3R5cGVkZWZfY29u c3RfdHlwZWRlZl9jbGFzczFfcmVmIHR5cGVkZWZfY29uc3RfdHlwZWRlZl9j bGFzczFfcmVmX29iaiAodHlwZWRlZl9jb25zdF90eXBlZGVmX2NsYXNzMV9v YmopOworCitjbGFzcyBzdWJjbGFzczEgOiBwdWJsaWMgY2xhc3MxCit7Cisg cHVibGljOgorICBzdWJjbGFzczEgKGludCBfeCwgaW50IF95KSA6IGNsYXNz MSAoX3gpLCB5IChfeSkge30KKyAgaW50IHk7Cit9OworCitzdWJjbGFzczEg c3ViY2xhc3MxX29iaiAoNDIsIDQzKTsKKworZW51bSBlbnVtMSB7IEEsIEIs IEMgfTsKKworZW51bTEgZW51bTFfb2JqIChBKTsKKworaW50CittYWluICgp Cit7CisgIHJldHVybiAwOworfQpJbmRleDogdGVzdHN1aXRlL2dkYi5weXRo b24vbGliLXR5cGVzLmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm aWxlOiB0ZXN0c3VpdGUvZ2RiLnB5dGhvbi9saWItdHlwZXMuZXhwCmRpZmYg LU4gdGVzdHN1aXRlL2dkYi5weXRob24vbGliLXR5cGVzLmV4cAotLS0gL2Rl di9udWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIHRlc3RzdWl0 ZS9nZGIucHl0aG9uL2xpYi10eXBlcy5leHAJMTMgT2N0IDIwMTAgMTg6MjY6 MzUgLTAwMDAKQEAgLTAsMCArMSwxNDMgQEAKKyMgQ29weXJpZ2h0IChDKSAy MDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5 CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJz aW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikg YW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor IyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisj CisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBw cm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNl bnNlcy8+LgorCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHREIgdGVz dHN1aXRlLgorIyBJdCB0ZXN0cyB0aGUgdHlwZXMucHkgbW9kdWxlLgorCitp ZiAkdHJhY2VsZXZlbCB0aGVuIHsKKyAgICBzdHJhY2UgJHRyYWNlbGV2ZWwK K30KKworbG9hZF9saWIgZ2RiLXB5dGhvbi5leHAKKworc2V0IHRlc3RmaWxl ICJsaWItdHlwZXMiCitzZXQgc3JjZmlsZSAke3Rlc3RmaWxlfS5jYworc2V0 IGJpbmZpbGUgJHtvYmpkaXJ9LyR7c3ViZGlyfS8ke3Rlc3RmaWxlfQoraWYg eyBbZ2RiX2NvbXBpbGUgIiR7c3JjZGlyfS8ke3N1YmRpcn0vJHtzcmNmaWxl fSIgIiR7YmluZmlsZX0iIGV4ZWN1dGFibGUge2RlYnVnIGMrK31dICE9ICIi IH0geworICAgIHVudGVzdGVkICJDb3VsZG4ndCBjb21waWxlICR7c3JjZmls ZX0iCisgICAgcmV0dXJuIC0xCit9CisKKyMgU3RhcnQgd2l0aCBhIGZyZXNo IGdkYi4KK2dkYl9leGl0CitnZGJfc3RhcnQKK2dkYl9yZWluaXRpYWxpemVf ZGlyICRzcmNkaXIvJHN1YmRpcgorZ2RiX2xvYWQgJHtiaW5maWxlfQorCisj IFNraXAgYWxsIHRlc3RzIGlmIFB5dGhvbiBzY3JpcHRpbmcgaXMgbm90IGVu YWJsZWQuCitpZiB7IFtza2lwX3B5dGhvbl90ZXN0c10gfSB7IGNvbnRpbnVl IH0KKworaWYgIVtydW50b19tYWluXSB0aGVuIHsKKyAgICBmYWlsICJDYW4n dCBydW4gdG8gbWFpbiIKKyAgICByZXR1cm4gMAorfQorCisjIEVuc3VyZSBz eXMucGF0aCwgZXQuYWwuIGFyZSBpbml0aWFsaXplZCBwcm9wZXJseS4KK2dk Yl9jaGVja19weXRob25fY29uZmlnCisKK2dkYl90ZXN0X25vX291dHB1dCAi cHl0aG9uIGltcG9ydCBnZGIudHlwZXMiCisKKyMgdGVzdCBnZXRfYmFzaWNf dHlwZSBjb25zdCBzdHJpcHBpbmcKK2dkYl90ZXN0X25vX291dHB1dCAicHl0 aG9uIGNvbnN0X2NsYXNzMV9vYmogPSBnZGIucGFyc2VfYW5kX2V2YWwgKCdj b25zdF9jbGFzczFfb2JqJykiCitnZGJfdGVzdF9ub19vdXRwdXQgInB5dGhv biBiYXNpY190eXBlX2NvbnN0X2NsYXNzMV9vYmogPSBnZGIudHlwZXMuZ2V0 X2Jhc2ljX3R5cGUgKGNvbnN0X2NsYXNzMV9vYmoudHlwZSkiCitnZGJfdGVz dCAicHl0aG9uIHByaW50IHN0ciAoY29uc3RfY2xhc3MxX29iai50eXBlKSIg ImNvbnN0IGNsYXNzMSIKK3NldCB0ZXN0ICJjb25zdCBzdHJpcHBpbmciCitn ZGJfdGVzdF9tdWx0aXBsZSAicHl0aG9uIHByaW50IHN0ciAoYmFzaWNfdHlw ZV9jb25zdF9jbGFzczFfb2JqKSIgJHRlc3QgeworICAgIC1yZSAiXFtcclxu XF0rY2xhc3MxXFtcclxuXF0rJGdkYl9wcm9tcHQgJCIgeworCXBhc3MgJHRl c3QKKyAgICB9Cit9CisKKyMgdGVzdCBnZXRfYmFzaWNfdHlwZSB2b2xhdGls ZSBzdHJpcHBpbmcKK2dkYl90ZXN0X25vX291dHB1dCAicHl0aG9uIHZvbGF0 aWxlX2NsYXNzMV9vYmogPSBnZGIucGFyc2VfYW5kX2V2YWwgKCd2b2xhdGls ZV9jbGFzczFfb2JqJykiCitnZGJfdGVzdF9ub19vdXRwdXQgInB5dGhvbiBi YXNpY190eXBlX3ZvbGF0aWxlX2NsYXNzMV9vYmogPSBnZGIudHlwZXMuZ2V0 X2Jhc2ljX3R5cGUgKHZvbGF0aWxlX2NsYXNzMV9vYmoudHlwZSkiCitnZGJf dGVzdCAicHl0aG9uIHByaW50IHN0ciAodm9sYXRpbGVfY2xhc3MxX29iai50 eXBlKSIgInZvbGF0aWxlIGNsYXNzMSIKK3NldCB0ZXN0ICJ2b2xhdGlsZSBz dHJpcHBpbmciCitnZGJfdGVzdF9tdWx0aXBsZSAicHl0aG9uIHByaW50IHN0 ciAoYmFzaWNfdHlwZV92b2xhdGlsZV9jbGFzczFfb2JqKSIgJHRlc3Qgewor ICAgIC1yZSAiXFtcclxuXF0rY2xhc3MxXFtcclxuXF0rJGdkYl9wcm9tcHQg JCIgeworCXBhc3MgJHRlc3QKKyAgICB9Cit9CisKKyMgdGVzdCBnZXRfYmFz aWNfdHlwZSB2b2xhdGlsZStjb25zdCBzdHJpcHBpbmcKK2dkYl90ZXN0X25v X291dHB1dCAicHl0aG9uIGNvbnN0X3ZvbGF0aWxlX2NsYXNzMV9vYmogPSBn ZGIucGFyc2VfYW5kX2V2YWwgKCdjb25zdF92b2xhdGlsZV9jbGFzczFfb2Jq JykiCitnZGJfdGVzdF9ub19vdXRwdXQgInB5dGhvbiBiYXNpY190eXBlX2Nv bnN0X3ZvbGF0aWxlX2NsYXNzMV9vYmogPSBnZGIudHlwZXMuZ2V0X2Jhc2lj X3R5cGUgKGNvbnN0X3ZvbGF0aWxlX2NsYXNzMV9vYmoudHlwZSkiCitnZGJf dGVzdCAicHl0aG9uIHByaW50IHN0ciAoY29uc3Rfdm9sYXRpbGVfY2xhc3Mx X29iai50eXBlKSIgImNvbnN0IHZvbGF0aWxlIGNsYXNzMSIKK3NldCB0ZXN0 ICJ2b2xhdGlsZStjb25zdCBzdHJpcHBpbmciCitnZGJfdGVzdF9tdWx0aXBs ZSAicHl0aG9uIHByaW50IHN0ciAoYmFzaWNfdHlwZV9jb25zdF92b2xhdGls ZV9jbGFzczFfb2JqKSIgJHRlc3QgeworICAgIC1yZSAiXFtcclxuXF0rY2xh c3MxXFtcclxuXF0rJGdkYl9wcm9tcHQgJCIgeworCXBhc3MgJHRlc3QKKyAg ICB9Cit9CisKKyMgdGVzdCBnZXRfYmFzaWNfdHlwZSB0eXBlZGVmIHN0cmlw cGluZworZ2RiX3Rlc3Rfbm9fb3V0cHV0ICJweXRob24gdHlwZWRlZl9jbGFz czFfb2JqID0gZ2RiLnBhcnNlX2FuZF9ldmFsICgndHlwZWRlZl9jbGFzczFf b2JqJykiCitnZGJfdGVzdF9ub19vdXRwdXQgInB5dGhvbiBiYXNpY190eXBl X3R5cGVkZWZfY2xhc3MxX29iaiA9IGdkYi50eXBlcy5nZXRfYmFzaWNfdHlw ZSAodHlwZWRlZl9jbGFzczFfb2JqLnR5cGUpIgorZ2RiX3Rlc3QgInB5dGhv biBwcmludCBzdHIgKHR5cGVkZWZfY2xhc3MxX29iai50eXBlKSIgInR5cGVk ZWZfY2xhc3MxIgorc2V0IHRlc3QgInR5cGVkZWYgc3RyaXBwaW5nIgorZ2Ri X3Rlc3RfbXVsdGlwbGUgInB5dGhvbiBwcmludCBzdHIgKGJhc2ljX3R5cGVf dHlwZWRlZl9jbGFzczFfb2JqKSIgJHRlc3QgeworICAgIC1yZSAiXFtcclxu XF0rY2xhc3MxXFtcclxuXF0rJGdkYl9wcm9tcHQgJCIgeworCXBhc3MgJHRl c3QKKyAgICB9Cit9CisKKyMgdGVzdCBnZXRfYmFzaWNfdHlwZSByZWZlcmVu Y2Ugc3RyaXBwaW5nCitnZGJfdGVzdF9ub19vdXRwdXQgInB5dGhvbiBjbGFz czFfcmVmX29iaiA9IGdkYi5wYXJzZV9hbmRfZXZhbCAoJ2NsYXNzMV9yZWZf b2JqJykiCitnZGJfdGVzdF9ub19vdXRwdXQgInB5dGhvbiBiYXNpY190eXBl X2NsYXNzMV9yZWZfb2JqID0gZ2RiLnR5cGVzLmdldF9iYXNpY190eXBlIChj bGFzczFfcmVmX29iai50eXBlKSIKK2dkYl90ZXN0ICJweXRob24gcHJpbnQg c3RyIChjbGFzczFfcmVmX29iai50eXBlKSIgImNsYXNzMSAmIgorc2V0IHRl c3QgInJlZmVyZW5jZSBzdHJpcHBpbmciCitnZGJfdGVzdF9tdWx0aXBsZSAi cHl0aG9uIHByaW50IHN0ciAoYmFzaWNfdHlwZV9jbGFzczFfcmVmX29iaiki ICR0ZXN0IHsKKyAgICAtcmUgIlxbXHJcblxdK2NsYXNzMVxbXHJcblxdKyRn ZGJfcHJvbXB0ICQiIHsKKwlwYXNzICR0ZXN0CisgICAgfQorfQorCisjIHRl c3QgbmVzdGVkIHR5cGVkZWYgc3RyaXBwaW5nCitnZGJfdGVzdF9ub19vdXRw dXQgInB5dGhvbiB0eXBlZGVmX2NvbnN0X3R5cGVkZWZfY2xhc3MxX29iaiA9 IGdkYi5wYXJzZV9hbmRfZXZhbCAoJ3R5cGVkZWZfY29uc3RfdHlwZWRlZl9j bGFzczFfb2JqJykiCitnZGJfdGVzdF9ub19vdXRwdXQgInB5dGhvbiBiYXNp Y190eXBlX3R5cGVkZWZfY29uc3RfdHlwZWRlZl9jbGFzczFfb2JqID0gZ2Ri LnR5cGVzLmdldF9iYXNpY190eXBlICh0eXBlZGVmX2NvbnN0X3R5cGVkZWZf Y2xhc3MxX29iai50eXBlKSIKK2dkYl90ZXN0ICJweXRob24gcHJpbnQgc3Ry ICh0eXBlZGVmX2NsYXNzMV9vYmoudHlwZSkiICJ0eXBlZGVmX2NsYXNzMSIK K3NldCB0ZXN0ICJuZXN0ZWQgdHlwZWRlZiBzdHJpcHBpbmciCitnZGJfdGVz dF9tdWx0aXBsZSAicHl0aG9uIHByaW50IHN0ciAoYmFzaWNfdHlwZV90eXBl ZGVmX2NvbnN0X3R5cGVkZWZfY2xhc3MxX29iaikiICR0ZXN0IHsKKyAgICAt cmUgIlxbXHJcblxdK2NsYXNzMVxbXHJcblxdKyRnZGJfcHJvbXB0ICQiIHsK KwlwYXNzICR0ZXN0CisgICAgfQorfQorCisjIHRlc3QgbmVzdGVkIHR5cGVk ZWYvcmVmZXJlbmNlIHN0cmlwcGluZworZ2RiX3Rlc3Rfbm9fb3V0cHV0ICJw eXRob24gdHlwZWRlZl9jb25zdF90eXBlZGVmX2NsYXNzMV9yZWZfb2JqID0g Z2RiLnBhcnNlX2FuZF9ldmFsICgndHlwZWRlZl9jb25zdF90eXBlZGVmX2Ns YXNzMV9yZWZfb2JqJykiCitnZGJfdGVzdF9ub19vdXRwdXQgInB5dGhvbiBi YXNpY190eXBlX3R5cGVkZWZfY29uc3RfdHlwZWRlZl9jbGFzczFfcmVmX29i aiA9IGdkYi50eXBlcy5nZXRfYmFzaWNfdHlwZSAodHlwZWRlZl9jb25zdF90 eXBlZGVmX2NsYXNzMV9yZWZfb2JqLnR5cGUpIgorZ2RiX3Rlc3QgInB5dGhv biBwcmludCBzdHIgKHR5cGVkZWZfY29uc3RfdHlwZWRlZl9jbGFzczFfcmVm X29iai50eXBlKSIgImNvbnN0IHR5cGVkZWZfY29uc3RfdHlwZWRlZl9jbGFz czFfcmVmIgorc2V0IHRlc3QgIm5lc3RlZCB0eXBlZGVmL3JlZiBzdHJpcHBp bmciCitnZGJfdGVzdF9tdWx0aXBsZSAicHl0aG9uIHByaW50IHN0ciAoYmFz aWNfdHlwZV90eXBlZGVmX2NvbnN0X3R5cGVkZWZfY2xhc3MxX3JlZl9vYmop IiAkdGVzdCB7CisgICAgLXJlICJcW1xyXG5cXStjbGFzczFcW1xyXG5cXSsk Z2RiX3Byb21wdCAkIiB7CisJcGFzcyAkdGVzdAorICAgIH0KK30KKworIyB0 ZXN0IGhhc19maWVsZCBvbiBzaW1wbGUgY2xhc3MKK2dkYl90ZXN0X25vX291 dHB1dCAicHl0aG9uIGNsYXNzMV9vYmogPSBnZGIucGFyc2VfYW5kX2V2YWwg KCdjbGFzczFfb2JqJykiCitnZGJfdGVzdCAicHl0aG9uIHByaW50IGdkYi50 eXBlcy5oYXNfZmllbGQgKGNsYXNzMV9vYmoudHlwZSwgJ3gnKSIgIlRydWUi CitnZGJfdGVzdCAicHl0aG9uIHByaW50IGdkYi50eXBlcy5oYXNfZmllbGQg KGNsYXNzMV9vYmoudHlwZSwgJ25vcGUnKSIgIkZhbHNlIgorCisjIHRlc3Qg aGFzX2ZpZWxkIGluIGJhc2UgY2xhc3MKK2dkYl90ZXN0X25vX291dHB1dCAi cHl0aG9uIHN1YmNsYXNzMV9vYmogPSBnZGIucGFyc2VfYW5kX2V2YWwgKCdz dWJjbGFzczFfb2JqJykiCitnZGJfdGVzdCAicHl0aG9uIHByaW50IGdkYi50 eXBlcy5oYXNfZmllbGQgKHN1YmNsYXNzMV9vYmoudHlwZSwgJ3gnKSIgIlRy dWUiCisKKyMgdGVzdCBtYWtlX2VudW1fZGljdAorZ2RiX3Rlc3Rfbm9fb3V0 cHV0ICJweXRob24gZW51bTFfb2JqID0gZ2RiLnBhcnNlX2FuZF9ldmFsICgn ZW51bTFfb2JqJykiCitnZGJfdGVzdF9ub19vdXRwdXQgInB5dGhvbiBlbnVt MV9kaWN0ID0gZ2RiLnR5cGVzLm1ha2VfZW51bV9kaWN0IChlbnVtMV9vYmou dHlwZSkiCitnZGJfdGVzdF9ub19vdXRwdXQgInB5dGhvbiBlbnVtMV9saXN0 ID0gZW51bTFfZGljdC5pdGVtcyAoKSIKK2dkYl90ZXN0X25vX291dHB1dCAi cHl0aG9uIGVudW0xX2xpc3Quc29ydCAoKSIKK2dkYl90ZXN0ICJweXRob24g cHJpbnQgZW51bTFfbGlzdCIge1xbXCgnQScsIDBMXCksIFwoJ0InLCAxTFwp LCBcKCdDJywgMkxcKVxdfQpJbmRleDogdGVzdHN1aXRlL2xpYi9nZGItcHl0 aG9uLmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz L3NyYy9zcmMvZ2RiL3Rlc3RzdWl0ZS9saWIvZ2RiLXB5dGhvbi5leHAsdgpy ZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC11IC1wIC1yMS4xIGdkYi1w eXRob24uZXhwCi0tLSB0ZXN0c3VpdGUvbGliL2dkYi1weXRob24uZXhwCTEg T2N0IDIwMTAgMTc6MDM6NTAgLTAwMDAJMS4xCisrKyB0ZXN0c3VpdGUvbGli L2dkYi1weXRob24uZXhwCTEzIE9jdCAyMDEwIDE4OjI2OjM1IC0wMDAwCkBA IC00NSwzICs0NSwyMSBAQCBwcm9jIGdkYl9weV90ZXN0X211bHRpcGxlIHsg bmFtZSBhcmdzIH0gCiAgICAgfQogICAgIHJldHVybiAwCiB9CisKKyMgRXN0 YWJsaXNoIHZhcmlvdXMgcHl0aG9uIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVy cyBpZiBuZWNlc3NhcnkuCisjIEUuZy4gc3lzLnBhdGguCisKK3Byb2MgZ2Ri X2NoZWNrX3B5dGhvbl9jb25maWcgeyB9IHsKKyAgICBnbG9iYWwgVVNFX0lO U1RBTExFRF9UUkVFCisgICAgIyBJZiB3ZSdyZSBydW5uaW5nIGFuIGluc3Rh bGxlZCB2ZXJzaW9uIG9mIGdkYiwgYW5kIHdlIHdhbnQgdG8gdGVzdCB0aGUK KyAgICAjIGluc3RhbGxlZCB2ZXJzaW9ucyBvZiB0aGUgcHl0aG9uIHN1cHBv cnQgc2NyaXB0cywgdGhlbiB3ZSBkb24ndCB3YW50CisgICAgIyB0byBwb2lu dCBkYXRhLWRpcmVjdG9yeSBhdCB0aGUgYnVpbGQgdHJlZS4KKyAgICBpZiB7 IFtpbmZvIGV4aXN0cyBVU0VfSU5TVEFMTEVEX1RSRUVdICYmICIkVVNFX0lO U1RBTExFRF9UUkVFIiA9PSAieWVzIiB9IHsKKwl2ZXJib3NlIC1sb2cgIkFz c3VtaW5nIHN5c3RlbSBjb25maWcgYWxyZWFkeSBpbnN0YWxsZWQuIgorICAg IH0gZWxzZSB7CisJdmVyYm9zZSAtbG9nICJJbnN0YWxsaW5nIHN5c3RlbSBj b25maWcgZnJvbSBidWlsZCB0cmVlLiIKKwlzZXQgZ2RiX2RhdGFfZGlyICJb cHdkXS8uLi9kYXRhLWRpcmVjdG9yeSIKKwlnZGJfdGVzdF9ub19vdXRwdXQg InNldCBkYXRhLWRpcmVjdG9yeSAkZ2RiX2RhdGFfZGlyIgorCWdkYl90ZXN0 X25vX291dHB1dCAicHl0aG9uIEdkYlNldFB5dGhvbkRpcmVjdG9yeSAoJyRn ZGJfZGF0YV9kaXIvcHl0aG9uJykiCisgICAgfQorfQo= --001636e0a7fe410b33049283f5cb--