From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 11137 invoked by alias); 12 Mar 2012 05:33:17 -0000 Received: (qmail 11124 invoked by uid 22791); 12 Mar 2012 05:33:14 -0000 X-SWARE-Spam-Status: No, hits=-2.5 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,RCVD_IN_DNSWL_LOW,TW_BJ,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mail-vx0-f169.google.com (HELO mail-vx0-f169.google.com) (209.85.220.169) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 12 Mar 2012 05:33:00 +0000 Received: by vcbfk14 with SMTP id fk14so4441413vcb.0 for ; Sun, 11 Mar 2012 22:32:59 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=mime-version:date:message-id:subject:from:to:content-type :x-system-of-record:x-gm-message-state; bh=aCUnbKlPM7vBe+xnVVunUhGsTHALo3SF7jegDeoEDjY=; b=lwHS8lE0hFYO8kCmOOWNbex0e5dCCfxm3a10fj2xbUybRnz3xWRdvmRr/mRBvg03hI tspRmXh7YS6/3cX5q1IMJ4i9brA4664Ym59GIeft49zKcKvLBUQVhHD9ZAx9VTlA3Wm6 HHqz4ceyEWY1Ozzo16j7Nc2q3DeuxkTFB/9ju8kU+L8P0iVLfrIyEKwHoX0gocYScfFA zjZGRk0p4Ykp140rSlUHrOwDk+FRZanTTbTwu775bvDFYuCLg5j+ro9gce7lTADXL9Fm 2C9f0nW6cCtlgDqi0808k/2uLHhHnHojfNuZwU3EFI5ll+1YkL15WDh8E9ULkYCCkola XU5g== Received: by 10.52.36.111 with SMTP id p15mr13554391vdj.93.1331530379796; Sun, 11 Mar 2012 22:32:59 -0700 (PDT) MIME-Version: 1.0 Received: by 10.52.36.111 with SMTP id p15mr13554382vdj.93.1331530379569; Sun, 11 Mar 2012 22:32:59 -0700 (PDT) Received: by 10.220.225.193 with HTTP; Sun, 11 Mar 2012 22:32:59 -0700 (PDT) Date: Mon, 12 Mar 2012 05:33:00 -0000 Message-ID: Subject: [RFC - Python Scripting] Extend Value.dereference to dereference C++ reference values From: Siva Chandra To: gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary=20cf307d01d8482a0704bb051399 X-System-Of-Record: true X-Gm-Message-State: ALoCoQlOF05QLQaQs7rGtfbjboGc+FzOmIxuDqhaG412WZpoSNXZ0I0ydZbidztVs9EcvnZ8z0yxEaEOZMC2AB6jXphd6PlmL33tI47d1XZJwrkap76w/zFTJhHUV75RK4cjcjjORrdrm5BDWa2V9qLLb5V+ywk+og== 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: 2012-03/txt/msg00384.txt.bz2 --20cf307d01d8482a0704bb051399 Content-Type: text/plain; charset=ISO-8859-1 Content-length: 1514 Hi all, In an other thread, I have sent a patch for a new 'explore' command implemented in Python as well as in C. For the Python implementation, I wanted something which can 'dereference' a C++ reference value. Unless I am missing something, I couldn't find anything which can do this in the Python API. Attached is a patch which extends the Python API method Value.dereference to 'dereference' C++ reference values as well. I am probably overloading the term 'dereference' as used in the normal (pointer dereferencing) sense. Code Changelog: 2012-03-12 Siva Chandra Python scripting: Extend the functionality of the method Value.dereference to dereference C++ reference values. * NEWS: Add entry under 'Python scripting' about the extended functionality of the method Value.dereference. * python/py-value.c (valpy_dereference): Extend to dereference values of type TYPE_CODE_REF. * testsuite/gdb.python/py-value.cc: Add new test case for testing the methodology exposing C++ values to Python. * testsuite/gdb.python/py-value-cc.exp: Add tests testing the methodology exposing C++ values to Python. * testsuite/gdb.python/Makefile.in: Add py-value-cc to EXECUTABLES. Docs Changelog: 2012-03-12 Siva Chandra * gdb.texinfo (Python API/Values From Inferior): Document extended functionality of the method Value.dereference. Thanks, Siva Chandra --20cf307d01d8482a0704bb051399 Content-Type: text/plain; charset=US-ASCII; name="value_dereference_patch_v1.txt" Content-Disposition: attachment; filename="value_dereference_patch_v1.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gzp2rm630 Content-length: 9643 ZGlmZiAtcnVwTiBzcmMvZ2RiL2RvYy9nZGIudGV4aW5mbyBzcmNfcmVmL2dk Yi9kb2MvZ2RiLnRleGluZm8KLS0tIHNyYy9nZGIvZG9jL2dkYi50ZXhpbmZv CTIwMTItMDMtMDggMDA6NTU6MzcuMDAwMDAwMDAwICswNTMwCisrKyBzcmNf cmVmL2dkYi9kb2MvZ2RiLnRleGluZm8JMjAxMi0wMy0xMSAxMTo0MDo1MS4x ODA5MzI2OTAgKzA1MzAKQEAgLTIyMTM3LDYgKzIyMTM3LDI2IEBAIGJhciA9 IGZvby5kZXJlZmVyZW5jZSAoKQogCiBUaGUgcmVzdWx0IEBjb2Rle2Jhcn0g d2lsbCBiZSBhIEBjb2Rle2dkYi5WYWx1ZX0gb2JqZWN0IGhvbGRpbmcgdGhl CiB2YWx1ZSBwb2ludGVkIHRvIGJ5IEBjb2Rle2Zvb30uCisKK0ZvciBDKysg cmVmZXJlbmNlIHZhbHVlcywgdGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBA Y29kZXtnZGIuVmFsdWV9CitvYmplY3Qgd2hvc2UgY29udGVudHMgaXMgdGhl IG9iamVjdCByZWZlcmVuY2VkIGJ5IHRoZSByZWZlcmVuY2UgdmFsdWUuCitG b3IgZXhhbXBsZSwgaWYgQGNvZGV7aW50X3JlZn0gaXMgYSByZWZlcmVuY2Ug dG8gdmFsdWUgb2YgdHlwZQorIEBjb2Rle2ludH0sIGRlY2xhcmVkIGluIHlv dXIgQysrIHByb2dyYW0gYXMKKworQHNtYWxsZXhhbXBsZQoraW50IGludF92 YWwgPSAxMDsKK2ludCAmaW50X3JlZiA9IGludF92YWw7CitAZW5kIHNtYWxs ZXhhbXBsZQorCit0aGVuIHlvdSBjYW4gdXNlIHRoZSBjb3JyZXNwb25kaW5n IEBjb2Rle2dkYi5WYWx1ZX0gdG8gYWNjZXNzIHdoYXQKK0Bjb2Rle2ludF9y ZWZ9IHJlZmVyZW5jZXMgdG8gbGlrZSB0aGlzOgorCitAc21hbGxleGFtcGxl CitkZXJlZl92YWwgPSBpbnRfcmVmLmRlcmVmZXJlbmNlICgpCitAZW5kIHNt YWxsZXhhbXBsZQorCitUaGUgcmVzdWx0IEBjb2Rle2RlcmVmX3ZhbH0gd2ls bCBiZSBhIEBjb2Rle2dkYi5WYWx1ZX0gb2JqZWN0IHdob3NlCitjb250ZW50 cyBhcmUgdGhlIHNhbWUgYXMgdGhhdCBjb3JyZXNwb25kaW5nIHRvIEBjb2Rl e2ludF92YWx9LgogQGVuZCBkZWZ1bgogCiBAZGVmdW4gVmFsdWUuZHluYW1p Y19jYXN0ICh0eXBlKQpkaWZmIC1ydXBOIHNyYy9nZGIvTkVXUyBzcmNfcmVm L2dkYi9ORVdTCi0tLSBzcmMvZ2RiL05FV1MJMjAxMi0wMy0wOCAwMDo1NToz Ni4wMDAwMDAwMDAgKzA1MzAKKysrIHNyY19yZWYvZ2RiL05FV1MJMjAxMi0w My0xMCAxNzoxOTowMS40NTIxNjI3OTQgKzA1MzAKQEAgLTIzLDYgKzIzLDkg QEAKICAgICAgZnJhbWUgaW4gb3JkZXIgdG8gY29tcHV0ZSBpdHMgdmFsdWUs IGFuZCB0aGUgbGF0dGVyIGNvbXB1dGVzIHRoZQogICAgICBzeW1ib2wncyB2 YWx1ZS4KIAorICAqKiBUaGUgbWV0aG9kICdkZXJlZmVyZW5jZScgb24gZ2Ri LlZhbHVlIG9iamVjdHMgY2FuIG5vdyBkZXJlZmVyZW5jZQorICAgICBDKysg cmVmZXJlbmNlIHZhbHVlcy4KKwogKiBHREJzZXJ2ZXIgbm93IHN1cHBvcnRz IHN0ZGlvIGNvbm5lY3Rpb25zLgogICBFLmcuIChnZGIpIHRhcmdldCByZW1v dGUgfCBzc2ggbXlob3N0IGdkYnNlcnZlciAtIGhlbGxvCiAKZGlmZiAtcnVw TiBzcmMvZ2RiL3B5dGhvbi9weS12YWx1ZS5jIHNyY19yZWYvZ2RiL3B5dGhv bi9weS12YWx1ZS5jCi0tLSBzcmMvZ2RiL3B5dGhvbi9weS12YWx1ZS5jCTIw MTItMDMtMDIgMDI6MzY6NTQuMDAwMDAwMDAwICswNTMwCisrKyBzcmNfcmVm L2dkYi9weXRob24vcHktdmFsdWUuYwkyMDEyLTAzLTExIDIzOjIxOjQyLjQz MTg4ODgxNiArMDUzMApAQCAtMTcxLDcgKzE3MSw4IEBAIHByZXNlcnZlX3B5 dGhvbl92YWx1ZXMgKHN0cnVjdCBvYmpmaWxlICoKICAgICBwcmVzZXJ2ZV9v bmVfdmFsdWUgKGl0ZXItPnZhbHVlLCBvYmpmaWxlLCBjb3BpZWRfdHlwZXMp OwogfQogCi0vKiBHaXZlbiBhIHZhbHVlIG9mIGEgcG9pbnRlciB0eXBlLCBh cHBseSB0aGUgQyB1bmFyeSAqIG9wZXJhdG9yIHRvIGl0LiAgKi8KKy8qIElm IGdpdmVuIGEgdmFsdWUgb2YgYSBwb2ludGVyIHR5cGUsIHRoZW4gYXBwbHkg dGhlIEMgdW5hcnkgKiBvcGVyYXRvciB0byBpdC4KKyAgIElmIGdpdmVuIGEg dmFsdWUgb2YgcmVmZXJlbmNlIHR5cGUgKEMrKyksIHRoZW4gZ2V0IHRoZSB2 YWx1ZSByZWZlcmVuY2VkLiAgKi8KIHN0YXRpYyBQeU9iamVjdCAqCiB2YWxw eV9kZXJlZmVyZW5jZSAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdz KQogewpAQCAtMTgwLDEwICsxODEsMjMgQEAgdmFscHlfZGVyZWZlcmVuY2Ug KFB5T2JqZWN0ICpzZWxmLCBQeU9iagogCiAgIFRSWV9DQVRDSCAoZXhjZXB0 LCBSRVRVUk5fTUFTS19BTEwpCiAgICAgewotICAgICAgc3RydWN0IHZhbHVl ICpyZXNfdmFsOworICAgICAgc3RydWN0IHZhbHVlICpyZXNfdmFsLCAqc2Vs Zl92YWw7CiAgICAgICBzdHJ1Y3QgY2xlYW51cCAqY2xlYW51cCA9IG1ha2Vf Y2xlYW51cF92YWx1ZV9mcmVlX3RvX21hcmsgKHZhbHVlX21hcmsgKCkpOwog Ci0gICAgICByZXNfdmFsID0gdmFsdWVfaW5kICgoKHZhbHVlX29iamVjdCAq KSBzZWxmKS0+dmFsdWUpOworICAgICAgc2VsZl92YWwgPSAoKHZhbHVlX29i amVjdCAqKSBzZWxmKS0+dmFsdWU7CisgICAgICBzd2l0Y2ggKFRZUEVfQ09E RSAodmFsdWVfdHlwZSAoc2VsZl92YWwpKSkKKyAgICAgICAgeworICAgICAg ICBjYXNlIFRZUEVfQ09ERV9QVFI6CisgICAgICAgICAgcmVzX3ZhbCA9IHZh bHVlX2luZCAoc2VsZl92YWwpOworICAgICAgICAgIGJyZWFrOworICAgICAg ICBjYXNlIFRZUEVfQ09ERV9SRUY6CisgICAgICAgICAgcmVzX3ZhbCA9IGNv ZXJjZV9yZWYgKHNlbGZfdmFsKTsKKyAgICAgICAgICBicmVhazsKKyAgICAg ICAgZGVmYXVsdDoKKyAgICAgICAgICBlcnJvciAoXygiQXR0ZW1wdGluZyB0 byBkZWZlcmVuY2UgYSB2YWx1ZSB3aGljaCBpcyBuZWl0aGVyIGEgIgorICAg ICAgICAgICAgICAgICAgICJwb2ludGVyLCBub3IgYSByZWZlcmVuY2UuIikp OworICAgICAgICB9CisKICAgICAgIHJlc3VsdCA9IHZhbHVlX3RvX3ZhbHVl X29iamVjdCAocmVzX3ZhbCk7CiAgICAgICBkb19jbGVhbnVwcyAoY2xlYW51 cCk7CiAgICAgfQpkaWZmIC1ydXBOIHNyYy9nZGIvdGVzdHN1aXRlL2dkYi5w eXRob24vTWFrZWZpbGUuaW4gc3JjX3JlZi9nZGIvdGVzdHN1aXRlL2dkYi5w eXRob24vTWFrZWZpbGUuaW4KLS0tIHNyYy9nZGIvdGVzdHN1aXRlL2dkYi5w eXRob24vTWFrZWZpbGUuaW4JMjAxMS0xMi0yMyAyMjozNjoxNi4wMDAwMDAw MDAgKzA1MzAKKysrIHNyY19yZWYvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9u L01ha2VmaWxlLmluCTIwMTItMDMtMTEgMDA6NDA6MzYuOTAyOTUzNTI5ICsw NTMwCkBAIC01LDcgKzUsNyBAQCBFWEVDVVRBQkxFUyA9IHB5LXR5cGUgcHkt dmFsdWUgcHktcHJldHR5CiAJcHktc3ltYm9sIHB5LW1pIHB5LWJyZWFrcG9p bnQgcHktaW5mZXJpb3IgcHktaW5mdGhyZWFkIFwKIAlweS1zaGFyZWQgcHl0 aG9uIGxpYi10eXBlcyBweS1ldmVudHMgcHktZXZ0aHJlYWRzIHB5LWZyYW1l IFwKIAlweS1taSBweS1wcC1tYWludCBweS1wcm9nc3BhY2UgcHktc2VjdGlv bi1zY3JpcHQgcHktb2JqZmlsZSBcCi0JcHktZmluaXNoLWJyZWFrcG9pbnQg cHktZmluaXNoLWJyZWFrcG9pbnQyCisJcHktZmluaXNoLWJyZWFrcG9pbnQg cHktZmluaXNoLWJyZWFrcG9pbnQyIHB5LXZhbHVlLWNjCiAKIE1JU0NFTExB TkVPVVMgPSBweS1zaGFyZWQtc2wuc2wgcHktZXZlbnRzLXNobGliLnNvIHB5 LWV2ZW50cy1zaGxpYi1ub2RlYnVnLnNvIAogCmRpZmYgLXJ1cE4gc3JjL2dk Yi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS12YWx1ZS5jYyBzcmNfcmVmL2dk Yi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS12YWx1ZS5jYwotLS0gc3JjL2dk Yi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS12YWx1ZS5jYwkxOTcwLTAxLTAx IDA1OjMwOjAwLjAwMDAwMDAwMCArMDUzMAorKysgc3JjX3JlZi9nZGIvdGVz dHN1aXRlL2dkYi5weXRob24vcHktdmFsdWUuY2MJMjAxMi0wMy0xMSAxMTo1 MDozNS45ODA5NzM5NjYgKzA1MzAKQEAgLTAsMCArMSwzNCBAQAorLyogVGhp cyB0ZXN0Y2FzZSBpcyBwYXJ0IG9mIEdEQiwgdGhlIEdOVSBkZWJ1Z2dlci4K KworICAgQ29weXJpZ2h0IDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IK KyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAg IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAg IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSBy ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2Vl IDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKK2NsYXNz IEEgeworfTsKKworaW50CitmdW5jIChjb25zdCBBICZhKQoreworICBpbnQg aW50X3ZhbCA9IDEwOworICBpbnQgJmludF9yZWYgPSBpbnRfdmFsOworICBy ZXR1cm4gMDsgLyogQnJlYWsgaGVyZS4gICovCit9CisKK2ludAorbWFpbiAo KQoreworICBBIG9iajsKKyAgcmV0dXJuIGZ1bmMgKG9iaik7Cit9CmRpZmYg LXJ1cE4gc3JjL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS12YWx1ZS1j Yy5leHAgc3JjX3JlZi9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktdmFs dWUtY2MuZXhwCi0tLSBzcmMvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5 LXZhbHVlLWNjLmV4cAkxOTcwLTAxLTAxIDA1OjMwOjAwLjAwMDAwMDAwMCAr MDUzMAorKysgc3JjX3JlZi9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHkt dmFsdWUtY2MuZXhwCTIwMTItMDMtMTEgMTE6NTA6MzQuODEwOTMyMjMwICsw NTMwCkBAIC0wLDAgKzEsNTEgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEyIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3Jh bSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMg b2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxh dGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlv dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFt LiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+ LgorCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHREIgdGVzdHN1aXRl LiAgSXQgdGVzdHMgdGhlIG1lY2hhbmlzbQorIyBleHBvc2luZyB2YWx1ZXMg dG8gUHl0aG9uLgorCitpZiB7IFtza2lwX2NwbHVzX3Rlc3RzXSB9IHsgY29u dGludWUgfQorCitzZXQgdGVzdGZpbGUgInB5LXZhbHVlIgorc2V0IHNyY2Zp bGUgJHt0ZXN0ZmlsZX0uY2MKK3NldCBiaW5maWxlICR7b2JqZGlyfS8ke3N1 YmRpcn0vJHt0ZXN0ZmlsZX0KK2lmIHsgW2dkYl9jb21waWxlICIke3NyY2Rp cn0vJHtzdWJkaXJ9LyR7c3JjZmlsZX0iICIke2JpbmZpbGV9IiBleGVjdXRh YmxlIFwKKwkgIHtkZWJ1ZyBjKyt9XSAhPSAiIiB9IHsKKyAgICB1bnRlc3Rl ZCAiQ291bGRuJ3QgY29tcGlsZSAke3NyY2ZpbGV9IgorICAgIHJldHVybiAt MQorfQorCisjIFN0YXJ0IHdpdGggYSBmcmVzaCBnZGIuCisKK2dkYl9leGl0 CitnZGJfc3RhcnQKK2dkYl9yZWluaXRpYWxpemVfZGlyICRzcmNkaXIvJHN1 YmRpcgorIyBTa2lwIGFsbCB0ZXN0cyBpZiBQeXRob24gc2NyaXB0aW5nIGlz IG5vdCBlbmFibGVkLgoraWYgeyBbc2tpcF9weXRob25fdGVzdHNdIH0geyBj b250aW51ZSB9CisKK2dkYl9sb2FkICR7YmluZmlsZX0KKworaWYgIVtydW50 b19tYWluXSB7CisgICByZXR1cm4gLTEKK30KKworZ2RiX2JyZWFrcG9pbnQg W2dkYl9nZXRfbGluZV9udW1iZXIgIkJyZWFrIGhlcmUuIl0KK2dkYl9jb250 aW51ZV90b19icmVha3BvaW50ICJCcmVhayBoZXJlIiAiLipCcmVhayBoZXJl LioiCisKK2dkYl90ZXN0ICJweXRob24gcHJpbnQgc3RyKGdkYi5wYXJzZV9h bmRfZXZhbChcImFcIikudHlwZSkiICJjb25zdCBBICYiCitnZGJfdGVzdCAi cHl0aG9uIHByaW50IHN0cihnZGIucGFyc2VfYW5kX2V2YWwoXCJhXCIpLmRl cmVmZXJlbmNlKCkudHlwZSkiICJjb25zdCBBIgorZ2RiX3Rlc3QgInB5dGhv biBwcmludCBzdHIoZ2RiLnBhcnNlX2FuZF9ldmFsKFwiaW50X3JlZlwiKS50 eXBlKSIgImludCAmIgorZ2RiX3Rlc3QgInB5dGhvbiBwcmludCBzdHIoZ2Ri LnBhcnNlX2FuZF9ldmFsKFwiaW50X3JlZlwiKS5kZXJlZmVyZW5jZSgpLnR5 cGUpIiAiaW50IgorZ2RiX3Rlc3QgInB5dGhvbiBwcmludCBzdHIoZ2RiLnBh cnNlX2FuZF9ldmFsKFwiaW50X3JlZlwiKS5kZXJlZmVyZW5jZSgpKSIgIjEw Igo= --20cf307d01d8482a0704bb051399--