From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 11669 invoked by alias); 2 Aug 2011 19:41:35 -0000 Received: (qmail 11661 invoked by uid 22791); 2 Aug 2011 19:41:34 -0000 X-SWARE-Spam-Status: No, hits=-2.7 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW X-Spam-Check-By: sourceware.org Received: from mail-ww0-f41.google.com (HELO mail-ww0-f41.google.com) (74.125.82.41) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 02 Aug 2011 19:41:19 +0000 Received: by wwi14 with SMTP id 14so2715047wwi.0 for ; Tue, 02 Aug 2011 12:41:18 -0700 (PDT) MIME-Version: 1.0 Received: by 10.216.237.233 with SMTP id y83mr1128800weq.9.1312314078004; Tue, 02 Aug 2011 12:41:18 -0700 (PDT) Received: by 10.216.179.9 with HTTP; Tue, 2 Aug 2011 12:41:17 -0700 (PDT) In-Reply-To: References: <20110627160029.GF20676@adacore.com> <834o33qlm9.fsf@gnu.org> <83bowq6x7f.fsf@gnu.org> Date: Tue, 02 Aug 2011 19:41:00 -0000 Message-ID: Subject: Re: [patch] GDB 7.2: new feature for "backtrace" that cuts path to file (remain filename) From: iam ahal To: Tom Tromey Cc: gdb-patches@sourceware.org, eliz@gnu.org, pmuldoon@redhat.com, brobecker@adacore.com, pedro@codesourcery.com, drow@false.org, jan.kratochvil@redhat.com Content-Type: multipart/mixed; boundary=0015175774167408a704a98aeec1 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: 2011-08/txt/msg00036.txt.bz2 --0015175774167408a704a98aeec1 Content-Type: text/plain; charset=ISO-8859-1 Content-length: 1725 I've created the new patch. Here is example of usage patched gdb: (gdb) backtrace #0 main () at /home/eldar/testdir/test.c:4 (gdb) set backtrace filename-display basename (gdb) backtrace #0 main () at test.c:4 (gdb) set backtrace filename-display without-compile-dir (gdb) backtrace #0 main () at testdir/test.c:4 (gdb) set backtrace filename-display full (gdb) backtrace #0 main () at /home/eldar/testdir/test.c:4 I can change something if you want. If this implementation is good I will prepare ChangeLog and testsuite. On Thu, Jul 28, 2011 at 7:17 PM, Tom Tromey wrote: > I forget (I never keep records of this, I think perhaps I should) -- did > we get you started on the copyright assignment paperwork? Not yet, because my previous patches is very different. I mean the different files was changed and I don't know which files I need to change in the next patch. I hope some people here can accept implementation in this last patch. After I can start the copyright assignment. > iam> +static int backtrace_skip_compile; > iam> +static void > > Newline between these two lines. I'm not sure that's right because I see that there's no newline in this case (if you look at other places related 'set backtrace ...'). > iam> +char * > iam> +get_display_filename_from_sal (struct symtab_and_line *sal) > > Should have an introductory comment before this function. Comment was added in 'frame.h' > Ah, ok -- you are using the absolute file name when compiling. > That seems weird to me, but I understand now. Some big build systems uses absolute file name (e.g. Mozilla) because I started this topic. I wrote about motivation idea in my first message with patch. With best regards, Eldar. --0015175774167408a704a98aeec1 Content-Type: text/x-patch; charset=US-ASCII; name="gdb-7.2-filename-display.patch" Content-Disposition: attachment; filename="gdb-7.2-filename-display.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gqv94j1u0 Content-length: 9248 ZGlmZiAtcnVwIGdkYi03LjItb3JpZy9nZGIvZnJhbWUuYyBnZGItNy4yL2dk Yi9mcmFtZS5jCi0tLSBnZGItNy4yLW9yaWcvZ2RiL2ZyYW1lLmMJMjAxMC0w Ny0wMSAxOTozNjoxNS4wMDAwMDAwMDAgKzA0MDAKKysrIGdkYi03LjIvZ2Ri L2ZyYW1lLmMJMjAxMS0wOC0wMiAyMjo0NDowMC42OTk5NDIwMDEgKzA0MDAK QEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlICJibG9jay5oIgogI2luY2x1 ZGUgImlubGluZS1mcmFtZS5oIgogI2luY2x1ZGUgICJ0cmFjZXBvaW50Lmgi CisjaW5jbHVkZSAiZmlsZW5hbWVzLmgiCiAKIHN0YXRpYyBzdHJ1Y3QgZnJh bWVfaW5mbyAqZ2V0X3ByZXZfZnJhbWVfMSAoc3RydWN0IGZyYW1lX2luZm8g KnRoaXNfZnJhbWUpOwogc3RhdGljIHN0cnVjdCBmcmFtZV9pbmZvICpnZXRf cHJldl9mcmFtZV9yYXcgKHN0cnVjdCBmcmFtZV9pbmZvICp0aGlzX2ZyYW1l KTsKQEAgLTEzNSw2ICsxMzYsMTggQEAgc3RydWN0IGZyYW1lX2luZm8KICAg IHN1ZmZpY2llbnQgZm9yIG5vdy4gICovCiBzdGF0aWMgc3RydWN0IGZyYW1l X2luZm8gKmZyYW1lX3N0YXNoID0gTlVMTDsKIAorLyogUG9zc2libGUgdmFs dWVzIG9mICdzZXQgYmFja3RyYWNlIGZpbGVuYW1lLWRpc3BsYXknLiAgKi8K K3N0YXRpYyBjb25zdCBjaGFyIGZpbGVuYW1lX2Rpc3BsYXlfZnVsbFtdID0g ImZ1bGwiOworc3RhdGljIGNvbnN0IGNoYXIgZmlsZW5hbWVfZGlzcGxheV9i YXNlbmFtZVtdID0gImJhc2VuYW1lIjsKK3N0YXRpYyBjb25zdCBjaGFyIGZp bGVuYW1lX2Rpc3BsYXlfd2l0aG91dF9jb21wX2RpcltdID0gIndpdGhvdXQt Y29tcGlsZS1kaXIiOworCitzdGF0aWMgY29uc3QgY2hhciAqZmlsZW5hbWVf ZGlzcGxheV9raW5kX25hbWVzW10gPSB7CisgIGZpbGVuYW1lX2Rpc3BsYXlf ZnVsbCwKKyAgZmlsZW5hbWVfZGlzcGxheV9iYXNlbmFtZSwKKyAgZmlsZW5h bWVfZGlzcGxheV93aXRob3V0X2NvbXBfZGlyLAorICBOVUxMCit9OworCiAv KiBBZGQgdGhlIGZvbGxvd2luZyBGUkFNRSB0byB0aGUgZnJhbWUgc3Rhc2gu ICAqLwogCiBzdGF0aWMgdm9pZApAQCAtMjA1LDYgKzIxOCwxNSBAQCBBbiB1 cHBlciBib3VuZCBvbiB0aGUgbnVtYmVyIG9mIGJhY2t0cmFjCiAJCSAgICB2 YWx1ZSk7CiB9CiAKK3N0YXRpYyBjb25zdCBjaGFyICpmaWxlbmFtZV9kaXNw bGF5X3N0cmluZyA9IGZpbGVuYW1lX2Rpc3BsYXlfZnVsbDsKK3N0YXRpYyB2 b2lkCitzaG93X2ZpbGVuYW1lX2Rpc3BsYXlfc3RyaW5nIChzdHJ1Y3QgdWlf ZmlsZSAqZmlsZSwgaW50IGZyb21fdHR5LAorCQkJICAgICAgc3RydWN0IGNt ZF9saXN0X2VsZW1lbnQgKmMsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworICBm cHJpbnRmX2ZpbHRlcmVkIChmaWxlLCBfKCJcCitBIGZpbGVuYW1lIGlzIGRp c3BsYXllZCBpbiBiYWNrdHJhY2UgYXMgXCIlc1wiLlxuIiksCisJCSAgICB2 YWx1ZSk7Cit9CiAKIHN0YXRpYyB2b2lkCiBmcHJpbnRfZmllbGQgKHN0cnVj dCB1aV9maWxlICpmaWxlLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgcCwgQ09S RV9BRERSIGFkZHIpCkBAIC0xOTAwLDYgKzE5MjIsMzQgQEAgZmluZF9mcmFt ZV9zYWwgKHN0cnVjdCBmcmFtZV9pbmZvICpmcmFtZQogICAoKnNhbCkgPSBm aW5kX3BjX2xpbmUgKGdldF9mcmFtZV9wYyAoZnJhbWUpLCBub3RjdXJyZW50 KTsKIH0KIAorY29uc3QgY2hhciAqCitnZXRfZmlsZW5hbWVfZGlzcGxheV9m cm9tX3NhbCAoc3RydWN0IHN5bXRhYl9hbmRfbGluZSAqc2FsKQoreworICBj b25zdCBjaGFyICpmaWxlbmFtZSA9IHNhbC0+c3ltdGFiLT5maWxlbmFtZTsK KyAgY29uc3QgY2hhciAqZGlybmFtZSA9IHNhbC0+c3ltdGFiLT5kaXJuYW1l OworICBzaXplX3QgZmxlbiA9IHN0cmxlbiAoZmlsZW5hbWUpOworICBzaXpl X3QgZGxlbiA9IHN0cmxlbiAoZGlybmFtZSk7CisKKyAgaWYgKGZpbGVuYW1l X2Rpc3BsYXlfc3RyaW5nID09IGZpbGVuYW1lX2Rpc3BsYXlfYmFzZW5hbWUK KyAgICAgICYmIGZpbGVuYW1lKQorICAgIHsKKyAgICAgIHJldHVybiBsYmFz ZW5hbWUgKGZpbGVuYW1lKTsKKyAgICB9CisgIGVsc2UKKyAgaWYgKGZpbGVu YW1lX2Rpc3BsYXlfc3RyaW5nID09IGZpbGVuYW1lX2Rpc3BsYXlfd2l0aG91 dF9jb21wX2RpcgorICAgICAgJiYgZmlsZW5hbWUgJiYgZGlybmFtZSAmJiBk bGVuIDw9IGZsZW4KKyAgICAgICYmICFGSUxFTkFNRV9OQ01QIChmaWxlbmFt ZSwgZGlybmFtZSwgZGxlbikpCisgICAgeworICAgICAgY29uc3QgY2hhciAq cmVzdWx0ID0gZmlsZW5hbWUgKyBzdHJsZW4gKGRpcm5hbWUpOworICAgICAg d2hpbGUgKElTX0RJUl9TRVBBUkFUT1IgKCpyZXN1bHQpKQorCXJlc3VsdCsr OworCisgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICByZXR1cm4g ZmlsZW5hbWU7Cit9CisKIC8qIFBlciAiZnJhbWUuaCIsIHJldHVybiB0aGUg YGBhZGRyZXNzJycgb2YgdGhlIGZyYW1lLiAgQ29kZSBzaG91bGQKICAgIHJl YWxseSBiZSB1c2luZyBnZXRfZnJhbWVfaWQoKS4gICovCiBDT1JFX0FERFIK QEAgLTIyNzAsNiArMjMyMCwyMSBAQCBaZXJvIGlzIHVubGltaXRlZC4iKSwK IAkJCSAgICZzZXRfYmFja3RyYWNlX2NtZGxpc3QsCiAJCQkgICAmc2hvd19i YWNrdHJhY2VfY21kbGlzdCk7CiAKKyAgYWRkX3NldHNob3dfZW51bV9jbWQg KCJmaWxlbmFtZS1kaXNwbGF5IiwgY2xhc3Nfb2JzY3VyZSwKKwkJCWZpbGVu YW1lX2Rpc3BsYXlfa2luZF9uYW1lcywKKwkJCSZmaWxlbmFtZV9kaXNwbGF5 X3N0cmluZywgXygiXAorU2V0IGEgd2F5IGhvdyB0byBkaXNwbGF5IGZpbGVu YW1lLiIpLCBfKCJcCitTaG93IGEgd2F5IGhvdyB0byBkaXNwbGF5IGZpbGVu YW1lLiIpLCBfKCJcCitmaWxlbmFtZS1kaXNwbGF5IGNhbiBiZTpcblwKKyAg ZnVsbCAgICAgICAgICAgICAgICAgLSBkaXNwbGF5IGZ1bGwgZmlsZW5hbWVc blwKKyAgYmFzZW5hbWUgICAgICAgICAgICAgLSBkaXNwbGF5IG9ubHkgYmFz ZW5hbWUgb2YgZmlsZW5hbWVcblwKKyAgd2l0aG91dC1jb21waWxlLWRpciAg LSBkaXNwbGF5IGZpbGVuYW1lIHdpdGhvdXQgY29tcGlsZSBkaXJlY3Rvcnkg cGFydFxuXAorQnkgZGVmYXVsdCwgZnVsbCBmaWxlbmFtZSBpcyBkaXNwbGF5 ZWQuIiksCisJCQlOVUxMLAorCQkJc2hvd19maWxlbmFtZV9kaXNwbGF5X3N0 cmluZywKKwkJCSZzZXRfYmFja3RyYWNlX2NtZGxpc3QsCisJCQkmc2hvd19i YWNrdHJhY2VfY21kbGlzdCk7CisKICAgLyogRGVidWcgdGhpcyBmaWxlcyBp bnRlcm5hbHMuICovCiAgIGFkZF9zZXRzaG93X3ppbnRlZ2VyX2NtZCAoImZy YW1lIiwgY2xhc3NfbWFpbnRlbmFuY2UsICZmcmFtZV9kZWJ1ZywgIF8oIlwK IFNldCBmcmFtZSBkZWJ1Z2dpbmcuIiksIF8oIlwKZGlmZiAtcnVwIGdkYi03 LjItb3JpZy9nZGIvZnJhbWUuaCBnZGItNy4yL2dkYi9mcmFtZS5oCi0tLSBn ZGItNy4yLW9yaWcvZ2RiL2ZyYW1lLmgJMjAxMC0wMS0wMSAxMDozMTozMi4w MDAwMDAwMDAgKzAzMDAKKysrIGdkYi03LjIvZ2RiL2ZyYW1lLmgJMjAxMS0w OC0wMiAyMjo0NDowMC41Nzk5NDIwMDEgKzA0MDAKQEAgLTMyNyw2ICszMjcs MTIgQEAgZXh0ZXJuIENPUkVfQUREUiBnZXRfZnJhbWVfZnVuYyAoc3RydWN0 CiBleHRlcm4gdm9pZCBmaW5kX2ZyYW1lX3NhbCAoc3RydWN0IGZyYW1lX2lu Zm8gKmZyYW1lLAogCQkJICAgIHN0cnVjdCBzeW10YWJfYW5kX2xpbmUgKnNh bCk7CiAKKy8qIFJldHVybnMgZWl0aGVyIGZ1bGwgZmlsZW5hbWUgb3IgYmFz ZW5hbWUgZnJvbSBmaWxlbmFtZSBvciBmaWxlbmFtZQorICAgd2l0aG91dCBj b21waWxlIGRpcmVjdG9yeSBwYXJ0LgorICAgSXQgZGVwZW5kcyBvbiAnc2V0 IGJhY2t0cmFjZSBmaWxlbmFtZS1kaXNwbGF5JyB2YWx1ZS4gICovCisKK2V4 dGVybiBjb25zdCBjaGFyICpnZXRfZmlsZW5hbWVfZGlzcGxheV9mcm9tX3Nh bCAoc3RydWN0IHN5bXRhYl9hbmRfbGluZSAqc2FsKTsKKwogLyogU2V0IHRo ZSBjdXJyZW50IHNvdXJjZSBhbmQgbGluZSB0byB0aGUgbG9jYXRpb24gZ2l2 ZW4gYnkgZnJhbWUKICAgIEZSQU1FLCBpZiBwb3NzaWJsZS4gIFdoZW4gQ0VO VEVSIGlzIHRydWUsIGFkanVzdCBzbyB0aGUgcmVsZXZhbnQKICAgIGxpbmUg aXMgaW4gdGhlIGNlbnRlciBvZiB0aGUgbmV4dCAnbGlzdCcuICAqLwpkaWZm IC1ydXAgZ2RiLTcuMi1vcmlnL2dkYi9zdGFjay5jIGdkYi03LjIvZ2RiL3N0 YWNrLmMKLS0tIGdkYi03LjItb3JpZy9nZGIvc3RhY2suYwkyMDEwLTA3LTAx IDE5OjM2OjE3LjAwMDAwMDAwMCArMDQwMAorKysgZ2RiLTcuMi9nZGIvc3Rh Y2suYwkyMDExLTA4LTAyIDIyOjQ0OjAwLjcyOTk0MjAwMSArMDQwMApAQCAt ODEwLDExICs4MTAsMTUgQEAgcHJpbnRfZnJhbWUgKHN0cnVjdCBmcmFtZV9p bmZvICpmcmFtZSwgaQogICB1aV9vdXRfdGV4dCAodWlvdXQsICIpIik7CiAg IGlmIChzYWwuc3ltdGFiICYmIHNhbC5zeW10YWItPmZpbGVuYW1lKQogICAg IHsKKyAgICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lX2Rpc3BsYXkgPSBnZXRf ZmlsZW5hbWVfZGlzcGxheV9mcm9tX3NhbCAoJnNhbCk7CisgICAgICBpZiAo ZmlsZW5hbWVfZGlzcGxheSA9PSBOVUxMKQorCSAgZmlsZW5hbWVfZGlzcGxh eSA9IHNhbC5zeW10YWItPmZpbGVuYW1lOworIAogICAgICAgYW5ub3RhdGVf ZnJhbWVfc291cmNlX2JlZ2luICgpOwogICAgICAgdWlfb3V0X3dyYXBfaGlu dCAodWlvdXQsICIgICAiKTsKICAgICAgIHVpX291dF90ZXh0ICh1aW91dCwg IiBhdCAiKTsKICAgICAgIGFubm90YXRlX2ZyYW1lX3NvdXJjZV9maWxlICgp OwotICAgICAgdWlfb3V0X2ZpZWxkX3N0cmluZyAodWlvdXQsICJmaWxlIiwg c2FsLnN5bXRhYi0+ZmlsZW5hbWUpOworICAgICAgdWlfb3V0X2ZpZWxkX3N0 cmluZyAodWlvdXQsICJmaWxlIiwgZmlsZW5hbWVfZGlzcGxheSk7CiAgICAg ICBpZiAodWlfb3V0X2lzX21pX2xpa2VfcCAodWlvdXQpKQogCXsKIAkgIGNv bnN0IGNoYXIgKmZ1bGxuYW1lID0gc3ltdGFiX3RvX2Z1bGxuYW1lIChzYWwu c3ltdGFiKTsKZGlmZiAtcnVwIGdkYi03LjItb3JpZy9pbmNsdWRlL2ZpbGVu YW1lcy5oIGdkYi03LjIvaW5jbHVkZS9maWxlbmFtZXMuaAotLS0gZ2RiLTcu Mi1vcmlnL2luY2x1ZGUvZmlsZW5hbWVzLmgJMjAxMC0wNC0yNiAyMjowNDoy My4wMDAwMDAwMDAgKzA0MDAKKysrIGdkYi03LjIvaW5jbHVkZS9maWxlbmFt ZXMuaAkyMDExLTA4LTAyIDIyOjQ0OjAwLjQ5OTk0MjAwMSArMDQwMApAQCAt NzEsNyArNzEsOSBAQCBleHRlcm4gIkMiIHsKICAgIHx8IEhBU19EUklWRV9T UEVDXzEgKGRvc19iYXNlZCwgZikpCiAKIGV4dGVybiBpbnQgZmlsZW5hbWVf Y21wIChjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIpOwotI2RlZmlu ZSBGSUxFTkFNRV9DTVAoczEsIHMyKQlmaWxlbmFtZV9jbXAoczEsIHMyKQor ZXh0ZXJuIGludCBmaWxlbmFtZV9uY21wIChjb25zdCBjaGFyICpzMSwgY29u c3QgY2hhciAqczIsIHNpemVfdCBuKTsKKyNkZWZpbmUgRklMRU5BTUVfQ01Q KHMxLCBzMikJCWZpbGVuYW1lX2NtcChzMSwgczIpCisjZGVmaW5lIEZJTEVO QU1FX05DTVAoczEsIHMyLCBuKQlmaWxlbmFtZV9uY21wKHMxLCBzMiwgbikK IAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CmRpZmYgLXJ1cCBnZGItNy4yLW9y aWcvbGliaWJlcnR5L2ZpbGVuYW1lX2NtcC5jIGdkYi03LjIvbGliaWJlcnR5 L2ZpbGVuYW1lX2NtcC5jCi0tLSBnZGItNy4yLW9yaWcvbGliaWJlcnR5L2Zp bGVuYW1lX2NtcC5jCTIwMDctMDUtMDQgMDM6NDA6MTEuMDAwMDAwMDAwICsw NDAwCisrKyBnZGItNy4yL2xpYmliZXJ0eS9maWxlbmFtZV9jbXAuYwkyMDEx LTA4LTAyIDIzOjE3OjU3LjA3OTk0MjAwMSArMDQwMApAQCAtMjksNiArMjks NDggQEAKIAogLyoKIAorQGRlZnR5cGVmbiBFeHRlbnNpb24gaW50IGZpbGVu YW1lX25jbXAgKGNvbnN0IGNoYXIgKkB2YXJ7czF9LCBjb25zdCBjaGFyICpA dmFye3MyfSwgc2l6ZV90IEB2YXJ7bn0pCisKK1RoZSBmdW5jdGlvbiBpcyBz aW1pbGFyIGFzIGZpbGVuYW1lX2NtcCwgZXhjZXB0IGl0IG9ubHkgY29tcGFy ZXMgdGhlIAorZmlyc3QgKGF0IG1vc3QpIEB2YXJ7bn0gY2hhcmFjdGVycy4K KworQGVuZCBkZWZ0eXBlZm4KKworKi8KKworaW50CitmaWxlbmFtZV9uY21w IChjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIsIHNpemVfdCBuKQor eworI2lmbmRlZiBIQVZFX0RPU19CQVNFRF9GSUxFX1NZU1RFTQorICByZXR1 cm4gc3RybmNtcCAoczEsIHMyLCBuKTsKKyNlbHNlCisgIHNpemVfdCBpOwor CisgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisgICAgeworICAgICAgaW50 IGMxID0gVE9MT1dFUiAoKnMxKTsKKyAgICAgIGludCBjMiA9IFRPTE9XRVIg KCpzMik7CisKKyAgICAgIC8qIE9uIERPUy1iYXNlZCBmaWxlIHN5c3RlbXMs IHRoZSAnLycgYW5kIHRoZSAnXCcgYXJlIGVxdWl2YWxlbnQuICAqLworICAg ICAgaWYgKGMxID09ICcvJykKKyAgICAgICAgYzEgPSAnXFwnOworICAgICAg aWYgKGMyID09ICcvJykKKyAgICAgICAgYzIgPSAnXFwnOworCisgICAgICBp ZiAoYzEgIT0gYzIpCisgICAgICAgIHJldHVybiAoYzEgLSBjMik7CisKKyAg ICAgIGlmIChjMSA9PSAnXDAnKQorICAgICAgICByZXR1cm4gMDsKKworICAg ICAgczErKzsKKyAgICAgIHMyKys7CisgICAgfQorI2VuZGlmCit9CisKKy8q CisKIEBkZWZ0eXBlZm4gRXh0ZW5zaW9uIGludCBmaWxlbmFtZV9jbXAgKGNv bnN0IGNoYXIgKkB2YXJ7czF9LCBjb25zdCBjaGFyICpAdmFye3MyfSkKIAog UmV0dXJuIHplcm8gaWYgdGhlIHR3byBmaWxlIG5hbWVzIEB2YXJ7czF9IGFu ZCBAdmFye3MyfSBhcmUgZXF1aXZhbGVudC4K --0015175774167408a704a98aeec1--