From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 4335 invoked by alias); 10 Jul 2009 22:12:38 -0000 Received: (qmail 4326 invoked by uid 22791); 10 Jul 2009 22:12:36 -0000 X-SWARE-Spam-Status: No, hits=-1.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_37,SARE_MSGID_LONG40,SPF_PASS X-Spam-Check-By: sourceware.org Received: from smtp-out.google.com (HELO smtp-out.google.com) (216.239.33.17) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 10 Jul 2009 22:12:29 +0000 Received: from zps75.corp.google.com (zps75.corp.google.com [172.25.146.75]) by smtp-out.google.com with ESMTP id n6AMCNaL027772 for ; Fri, 10 Jul 2009 23:12:24 +0100 Received: from fxm22 (fxm22.prod.google.com [10.184.13.22]) by zps75.corp.google.com with ESMTP id n6AMCKwa030938 for ; Fri, 10 Jul 2009 15:12:20 -0700 Received: by fxm22 with SMTP id 22so1217767fxm.4 for ; Fri, 10 Jul 2009 15:12:19 -0700 (PDT) MIME-Version: 1.0 Received: by 10.102.215.19 with SMTP id n19mr1338984mug.79.1247263939817; Fri, 10 Jul 2009 15:12:19 -0700 (PDT) In-Reply-To: <200907022344.12495.pedro@codesourcery.com> References: <20090523232414.BED2B846C2@localhost> <200907021427.14634.pedro@codesourcery.com> <200907022344.12495.pedro@codesourcery.com> Date: Sat, 11 Jul 2009 04:22:00 -0000 Message-ID: Subject: Re: [RFA] Fix too many "no debugging symbols found" warnings. From: Doug Evans To: Pedro Alves Cc: Eli Zaretskii , tromey@redhat.com, gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary=0016e6d42bba12f76f046e614436 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: 2009-07/txt/msg00322.txt.bz2 --0016e6d42bba12f76f046e614436 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 2449 On Thu, Jul 2, 2009 at 3:44 PM, Pedro Alves wrote: >> > OTOH, if GDB is printing nothing, then printing a sole: >> > >> > =A0"(no debugging symbols found)" >> > >> > out of the blue, doesn't ever seem useful to me. =A0Is that ever reall= y useful? >> >> Well, s@no debugging symbols found@no debugging symbols found in >> /usr/lib/libfoo.so@. > > What's the output in the non-auto-loaded case, then? > > =A0"Reading symbols from /lib/librt.so.1... (no debugging symbols found i= n /lib/librt.so.1) ...done." > > ? Reading symbols from /lib/librt.so.1... (no debugging symbols found) ...don= e. The patch knows it has already printed the path in that case. >> Users would like to know that something isn't going to work because >> debug info is missing. >> That is useful. > > It is useful to know when a module doesn't have debug info, sure, but, > that transient warning has been printed like that for years, as is, > without showing the shared library name. =A0In that state, I'm not sure > how useful it has been. =A0It appears to me we have some freedom to play > with it, and when it is printed. True. >> We could tell them differently of course. =A0Maybe an option to "info >> shared" to only show the ones without debug info or some such. > > We do have a "Syms Read" column in info shared's output, maybe we > should extend that from "Yes, No" -> "Yes, Sorry-I've-tried-but-didn't-fi= nd-any, No". > Then the user could ask GDB if it has debug info any time, instead of hav= ing > to look up the log. "works for me" >> > Wouldn't tweaking the "no debugging symbols found" predicate make ever= yone happy? >> >> "Tweaking" as in only printing "no debugging symbols found [in >> /usr/lib/libfoo.so]" if (from_tty || info_verbose), and never printing >> it for auto-loaded libraries? > > s/auto-loaded libraries/auto-loaded libraries, modules, executables, what= not/, > yes. I'm not sure if I'd be happy nor not, but see attached patch. > I'll back away from arguing now, and let you decide to do what you think > is best. =A0I don't think I'll be miserable with the change. =A0(though w= ith a feeling > of wrongly named option in my stomach.) The attached patch adds an optional regex argument to "info shared" and marks in the output libraries without debugging info. With this addition, I don't see a real need for a "set print symbol-loading-warning/whatever" option, thus I deleted it. Ok to check in? --0016e6d42bba12f76f046e614436 Content-Type: text/plain; charset=US-ASCII; name="gdb-090710-symfile-7.patch.txt" Content-Disposition: attachment; filename="gdb-090710-symfile-7.patch.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fwzgnobp0 Content-length: 19850 MjAwOS0wNy0xMCAgRG91ZyBFdmFucyAgPGRqZUBnb29nbGUuY29tPgoKCSog TkVXUzogUmVtb3ZlIG5vdGUgb24gYHNldCBwcmludCBzeW1ib2wtbG9hZGlu ZycuCglBZGQgbm90ZSBhYm91dCBuZXcgcmVnZXggYXJnIHRvICJpbmZvIHNo YXJlZGxpYnJhcnkiLgoJKiBtYWluLmMgKGNhcHR1cmVkX21haW4pOiBQYXNz ICFiYXRjaCBmb3IgZnJvbV90dHkgd2hlbiBjYWxsaW5nCglzeW1ib2xfZmls ZV9hZGRfbWFpbi4KCSogb2JqZmlsZXMuaCAob2JqZmlsZV9oYXNfcGFydGlh bF9zeW1ib2xzKTogRGVjbGFyZS4KCShvYmpmaWxlX2hhc19mdWxsX3N5bWJv bHMpOiBEZWNsYXJlLgoJKiBvYmpmaWxlcy5jIChvYmpmaWxlX2hhc19wYXJ0 aWFsX3N5bWJvbHMpOiBOZXcgZnVuY3Rpb24uCgkoaGF2ZV9wYXJ0aWFsX3N5 bWJvbHMpOiBVc2UgaXQuCgkob2JqZmlsZV9oYXNfZnVsbF9zeW1ib2xzKTog TmV3IGZ1bmN0aW9uLgoJKGhhdmVfZnVsbF9zeW1ib2xzKTogVXNlIGl0LgoJ KiBzb2xpYi5jIChzb2xpYl9yZWFkX3N5bWJvbHMpOiBCYWNrIG91dCBwYXRj aCBvZiAyMDA4LTA3LTEwLgoJQWRkIHRlc3QgZm9yIGluZm9fdmVyYm9zZSBm b3Igc3ltYm9sIGxvYWRpbmcgbWVzc2FnZXMgZm9yCgljb25zaXN0ZW5jeSB3 aXRoIHN5bWZpbGUuYy4KCShpbmZvX3NoYXJlZGxpYnJhcnlfY29tbWFuZCk6 IEhhbmRsZSBvcHRpb25hbCBwYXJhbWV0ZXIgb2YgcmVnZXggb2YKCWxpYnJh cmllcyB0byBsaXN0LiAgSW5mb3JtIHVzZXIgb2YgbGlicmFyaWVzIHdpdGhv dXQgZGVidWdnaW5nIGluZm8uCgkqIHN5bWZpbGUuYyAocHJpbnRfc3ltYm9s X2xvYWRpbmcpOiBEZWxldGUuCgkoc3ltYm9sX2ZpbGVfYWRkX3dpdGhfYWRk cnNfb3Jfb2Zmc2V0cyk6IEJhY2sgb3V0IHBhdGNoIG9mIDIwMDgtMDctMTAu CglQcmludCAibm8gZGVidWdnaW5nIHN5bWJvbHMgZm91bmQiIG9ubHkgaWYg ZnJvbV90dHkgfHwgaW5mb192ZXJib3NlOwoJYW5kIG9ubHkgY2hlY2sgZmls ZSBiZWluZyBsb2FkZWQsIG5vdCBhbGwgZmlsZXMuCgkocmVyZWFkX3N5bWJv bHMpOiBUZXN0IGZpbGUgYmVpbmcgbG9hZGVkIGZvciB3aGV0aGVyIGl0IGhh cyBzeW1ib2xzLAoJbm90IGFsbCBmaWxlcy4KCShfX2luaXRpYWxpemVfc3lt ZmlsZSk6IERlbGV0ZSBgc2V0IHByaW50IHN5bWJvbC1sb2FkaW5nJy4KCSog c3ltZmlsZS5oIChwcmludF9zeW1ib2xfbG9hZGluZyk6IERlbGV0ZS4KCgkq IGRvYy9nZGIudGV4aW5mbzogRGVsZXRlIGBzZXQgcHJpbnQgc3ltYm9sLWxv YWRpbmcnLgoJQWRkIG5vdGUgb24gbmV3IG9wdGlvbmFsIHJlZ2V4IGFyZyB0 byBgaW5mbyBzaGFyZWRsaWJyYXJ5Jy4KCkluZGV4OiBORVdTCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIvTkVX Uyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zMTYKZGlmZiAtdSAtcCAtcjEu MzE2IE5FV1MKLS0tIE5FV1MJMiBKdWwgMjAwOSAyMTo1NzoyNyAtMDAwMAkx LjMxNgorKysgTkVXUwkxMCBKdWwgMjAwOSAyMTo1MDoxOSAtMDAwMApAQCAt MzMsNiArMzMsOSBAQCByZW1vdGUgdGFyZ2V0cy4gIFRvIHVzZSB0aGlzIGZl YXR1cmUsIHNwCiB3aXRoIHRoZSBgcmVtb3RlOicgcHJlZml4LCBlaXRoZXIg dmlhIHRoZSBgc2V0IHN5c3Jvb3QnIGNvbW1hbmQgb3IgdmlhCiB0aGUgYC0t d2l0aC1zeXNyb290JyBjb25maWd1cmUtdGltZSBvcHRpb24uCiAKKyogImlu Zm8gc2hhcmVkbGlicmFyeSIgbm93IHRha2VzIGFuIG9wdGlvbmFsIHJlZ2V4 IG9mIGxpYnJhcmllcyB0byBzaG93LAorYW5kIGl0IG5vdyByZXBvcnRzIGlm IGEgc2hhcmVkIGxpYnJhcnkgaGFzIG5vIGRlYnVnZ2luZyBpbmZvcm1hdGlv bi4KKwogKiBDb21tYW5kcyBgc2V0IGRlYnVnLWZpbGUtZGlyZWN0b3J5Jywg YHNldCBzb2xpYi1zZWFyY2gtcGF0aCcgYW5kIGBzZXQgYXJncycKIG5vdyBj b21wbGV0ZSBvbiBmaWxlIG5hbWVzLgogCkBAIC0yMjUsMTAgKzIyOCw2IEBA IHNldCBzaCBjYWxsaW5nLWNvbnZlbnRpb24KIHNob3cgc2ggY2FsbGluZy1j b252ZW50aW9uCiAgIENvbnRyb2wgdGhlIGNhbGxpbmcgY29udmVudGlvbiB1 c2VkIHdoZW4gY2FsbGluZyBTSCB0YXJnZXQgZnVuY3Rpb25zLgogCi1zZXQg cHJpbnQgc3ltYm9sLWxvYWRpbmcKLXNob3cgcHJpbnQgc3ltYm9sLWxvYWRp bmcKLSAgQ29udHJvbCBwcmludGluZyBvZiBzeW1ib2wgbG9hZGluZyBtZXNz YWdlcy4KLQogc2V0IGRlYnVnIHRpbWVzdGFtcAogc2hvdyBkZWJ1ZyB0aW1l c3RhbXAKICAgQ29udHJvbCBkaXNwbGF5IG9mIHRpbWVzdGFtcHMgd2l0aCBH REIgZGVidWdnaW5nIG91dHB1dC4KSW5kZXg6IG1haW4uYwo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL21haW4u Yyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS43NgpkaWZmIC11IC1wIC1yMS43 NiBtYWluLmMKLS0tIG1haW4uYwkyNyBBcHIgMjAwOSAxMDoyNDowOCAtMDAw MAkxLjc2CisrKyBtYWluLmMJMTAgSnVsIDIwMDkgMjE6NTA6MTkgLTAwMDAK QEAgLTgwMSwxNCArODAxLDE0IEBAIEV4Y2VzcyBjb21tYW5kIGxpbmUgYXJn dW1lbnRzIGlnbm9yZWQuICgKICAgICAgICAgIG9wZW4gaXQsIGJldHRlciBv bmx5IHByaW50IG9uZSBlcnJvciBtZXNzYWdlLgogICAgICAgICAgY2F0Y2hf Y29tbWFuZF9lcnJvcnMgcmV0dXJucyBub24temVybyBvbiBzdWNjZXNzISAq LwogICAgICAgaWYgKGNhdGNoX2NvbW1hbmRfZXJyb3JzIChleGVjX2ZpbGVf YXR0YWNoLCBleGVjYXJnLCAhYmF0Y2gsIFJFVFVSTl9NQVNLX0FMTCkpCi0J Y2F0Y2hfY29tbWFuZF9lcnJvcnMgKHN5bWJvbF9maWxlX2FkZF9tYWluLCBz eW1hcmcsIDAsIFJFVFVSTl9NQVNLX0FMTCk7CisJY2F0Y2hfY29tbWFuZF9l cnJvcnMgKHN5bWJvbF9maWxlX2FkZF9tYWluLCBzeW1hcmcsICFiYXRjaCwg UkVUVVJOX01BU0tfQUxMKTsKICAgICB9CiAgIGVsc2UKICAgICB7CiAgICAg ICBpZiAoZXhlY2FyZyAhPSBOVUxMKQogCWNhdGNoX2NvbW1hbmRfZXJyb3Jz IChleGVjX2ZpbGVfYXR0YWNoLCBleGVjYXJnLCAhYmF0Y2gsIFJFVFVSTl9N QVNLX0FMTCk7CiAgICAgICBpZiAoc3ltYXJnICE9IE5VTEwpCi0JY2F0Y2hf Y29tbWFuZF9lcnJvcnMgKHN5bWJvbF9maWxlX2FkZF9tYWluLCBzeW1hcmcs IDAsIFJFVFVSTl9NQVNLX0FMTCk7CisJY2F0Y2hfY29tbWFuZF9lcnJvcnMg KHN5bWJvbF9maWxlX2FkZF9tYWluLCBzeW1hcmcsICFiYXRjaCwgUkVUVVJO X01BU0tfQUxMKTsKICAgICB9CiAKICAgaWYgKGNvcmVhcmcgJiYgcGlkYXJn KQpJbmRleDogb2JqZmlsZXMuYwo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD UyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL29iamZpbGVzLmMsdgpyZXRyaWV2 aW5nIHJldmlzaW9uIDEuODQKZGlmZiAtdSAtcCAtcjEuODQgb2JqZmlsZXMu YwotLS0gb2JqZmlsZXMuYwkyMyBKdW4gMjAwOSAxNjoyODo0NSAtMDAwMAkx Ljg0CisrKyBvYmpmaWxlcy5jCTEwIEp1bCAyMDA5IDIxOjUwOjE5IC0wMDAw CkBAIC02NzcsNiArNjc3LDIyIEBAIG9iamZpbGVfcmVsb2NhdGUgKHN0cnVj dCBvYmpmaWxlICpvYmpmaWwKICAgYnJlYWtwb2ludF9yZV9zZXQgKCk7CiB9 CiAMCisvKiBSZXR1cm4gbm9uLXplcm8gaWYgT0JKRklMRSBoYXMgcGFydGlh bCBzeW1ib2xzLiAgKi8KKworaW50CitvYmpmaWxlX2hhc19wYXJ0aWFsX3N5 bWJvbHMgKHN0cnVjdCBvYmpmaWxlICpvYmpmaWxlKQoreworICByZXR1cm4g b2JqZmlsZS0+cHN5bXRhYnMgIT0gTlVMTDsKK30KKworLyogUmV0dXJuIG5v bi16ZXJvIGlmIE9CSkZJTEUgaGFzIGZ1bGwgc3ltYm9scy4gICovCisKK2lu dAorb2JqZmlsZV9oYXNfZnVsbF9zeW1ib2xzIChzdHJ1Y3Qgb2JqZmlsZSAq b2JqZmlsZSkKK3sKKyAgcmV0dXJuIG9iamZpbGUtPnN5bXRhYnMgIT0gTlVM TDsKK30KKwogLyogTWFueSBwbGFjZXMgaW4gZ2RiIHdhbnQgdG8gdGVzdCBq dXN0IHRvIHNlZSBpZiB3ZSBoYXZlIGFueSBwYXJ0aWFsCiAgICBzeW1ib2xz IGF2YWlsYWJsZS4gIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB6ZXJvIGlmIG5v bmUgYXJlIGN1cnJlbnRseQogICAgYXZhaWxhYmxlLCBub256ZXJvIG90aGVy d2lzZS4gKi8KQEAgLTY4OCwxMCArNzA0LDggQEAgaGF2ZV9wYXJ0aWFsX3N5 bWJvbHMgKHZvaWQpCiAKICAgQUxMX09CSkZJTEVTIChvZnApCiAgIHsKLSAg ICBpZiAob2ZwLT5wc3ltdGFicyAhPSBOVUxMKQotICAgICAgewotCXJldHVy biAxOwotICAgICAgfQorICAgIGlmIChvYmpmaWxlX2hhc19wYXJ0aWFsX3N5 bWJvbHMgKG9mcCkpCisgICAgICByZXR1cm4gMTsKICAgfQogICByZXR1cm4g MDsKIH0KQEAgLTcwNywxMCArNzIxLDggQEAgaGF2ZV9mdWxsX3N5bWJvbHMg KHZvaWQpCiAKICAgQUxMX09CSkZJTEVTIChvZnApCiAgIHsKLSAgICBpZiAo b2ZwLT5zeW10YWJzICE9IE5VTEwpCi0gICAgICB7Ci0JcmV0dXJuIDE7Ci0g ICAgICB9CisgICAgaWYgKG9iamZpbGVfaGFzX2Z1bGxfc3ltYm9scyAob2Zw KSkKKyAgICAgIHJldHVybiAxOwogICB9CiAgIHJldHVybiAwOwogfQpJbmRl eDogb2JqZmlsZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl OiAvY3ZzL3NyYy9zcmMvZ2RiL29iamZpbGVzLmgsdgpyZXRyaWV2aW5nIHJl dmlzaW9uIDEuNTkKZGlmZiAtdSAtcCAtcjEuNTkgb2JqZmlsZXMuaAotLS0g b2JqZmlsZXMuaAkxNSBKYW4gMjAwOSAxNjozNToyMiAtMDAwMAkxLjU5Cisr KyBvYmpmaWxlcy5oCTEwIEp1bCAyMDA5IDIxOjUwOjE5IC0wMDAwCkBAIC00 NzgsNiArNDc4LDEwIEBAIGV4dGVybiB2b2lkIGZyZWVfYWxsX29iamZpbGVz ICh2b2lkKTsKIAogZXh0ZXJuIHZvaWQgb2JqZmlsZV9yZWxvY2F0ZSAoc3Ry dWN0IG9iamZpbGUgKiwgc3RydWN0IHNlY3Rpb25fb2Zmc2V0cyAqKTsKIAor ZXh0ZXJuIGludCBvYmpmaWxlX2hhc19wYXJ0aWFsX3N5bWJvbHMgKHN0cnVj dCBvYmpmaWxlICpvYmpmaWxlKTsKKworZXh0ZXJuIGludCBvYmpmaWxlX2hh c19mdWxsX3N5bWJvbHMgKHN0cnVjdCBvYmpmaWxlICpvYmpmaWxlKTsKKwog ZXh0ZXJuIGludCBoYXZlX3BhcnRpYWxfc3ltYm9scyAodm9pZCk7CiAKIGV4 dGVybiBpbnQgaGF2ZV9mdWxsX3N5bWJvbHMgKHZvaWQpOwpJbmRleDogc29s aWIuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Ny Yy9zcmMvZ2RiL3NvbGliLmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTIx CmRpZmYgLXUgLXAgLXIxLjEyMSBzb2xpYi5jCi0tLSBzb2xpYi5jCTkgSnVs IDIwMDkgMTM6Mzk6MTcgLTAwMDAJMS4xMjEKKysrIHNvbGliLmMJMTAgSnVs IDIwMDkgMjE6NTA6MTkgLTAwMDAKQEAgLTQ4OSwxMiArNDg5LDEyIEBAIHNv bGliX3JlYWRfc3ltYm9scyAoc3RydWN0IHNvX2xpc3QgKnNvLCAKIAogICBp ZiAoc28tPnN5bWJvbHNfbG9hZGVkKQogICAgIHsKLSAgICAgIGlmIChmcm9t X3R0eSkKKyAgICAgIGlmIChmcm9tX3R0eSB8fCBpbmZvX3ZlcmJvc2UpCiAJ cHJpbnRmX3VuZmlsdGVyZWQgKF8oIlN5bWJvbHMgYWxyZWFkeSBsb2FkZWQg Zm9yICVzXG4iKSwgc28tPnNvX25hbWUpOwogICAgIH0KICAgZWxzZSBpZiAo c28tPmFiZmQgPT0gTlVMTCkKICAgICB7Ci0gICAgICBpZiAoZnJvbV90dHkp CisgICAgICBpZiAoZnJvbV90dHkgfCBpbmZvX3ZlcmJvc2UpCiAJcHJpbnRm X3VuZmlsdGVyZWQgKF8oIlN5bWJvbCBmaWxlIG5vdCBmb3VuZCBmb3IgJXNc biIpLCBzby0+c29fbmFtZSk7CiAgICAgfQogICBlbHNlCkBAIC01MTAsNyAr NTEwLDcgQEAgc29saWJfcmVhZF9zeW1ib2xzIChzdHJ1Y3Qgc29fbGlzdCAq c28sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3Igd2hp bGUgcmVhZGluZyBzaGFyZWQgbGlicmFyeSBzeW1ib2xzOlxuIik7CiAgICAg ICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KLSAgICAgIGlmIChmcm9tX3R0 eSAmJiBwcmludF9zeW1ib2xfbG9hZGluZykKKyAgICAgIGlmIChmcm9tX3R0 eSB8fCBpbmZvX3ZlcmJvc2UpCiAgICAgICAgIHByaW50Zl91bmZpbHRlcmVk IChfKCJMb2FkZWQgc3ltYm9scyBmb3IgJXNcbiIpLCBzby0+c29fbmFtZSk7 CiAgICAgICBzby0+c3ltYm9sc19sb2FkZWQgPSAxOwogICAgICAgcmV0dXJu IDE7CkBAIC04MDEsMTYgKzgwMSwyNiBAQCBzb2xpYl9hZGQgKGNoYXIgKnBh dHRlcm4sIGludCBmcm9tX3R0eSwgCiAgICBERVNDUklQVElPTgogCiAgICBX YWxrIHRocm91Z2ggdGhlIHNoYXJlZCBsaWJyYXJ5IGxpc3QgYW5kIHByaW50 IGluZm9ybWF0aW9uCi0gICBhYm91dCBlYWNoIGF0dGFjaGVkIGxpYnJhcnku CisgICBhYm91dCBlYWNoIGF0dGFjaGVkIGxpYnJhcnkgbWF0Y2hpbmcgUEFU VEVSTi4gIElmIFBBVFRFUk4gaXMgZWxpZGVkLAorICAgcHJpbnQgdGhlbSBh bGwuCiAgKi8KIAogc3RhdGljIHZvaWQKLWluZm9fc2hhcmVkbGlicmFyeV9j b21tYW5kIChjaGFyICppZ25vcmUsIGludCBmcm9tX3R0eSkKK2luZm9fc2hh cmVkbGlicmFyeV9jb21tYW5kIChjaGFyICpwYXR0ZXJuLCBpbnQgZnJvbV90 dHkpCiB7CiAgIHN0cnVjdCBzb19saXN0ICpzbyA9IE5VTEw7CS8qIGxpbmsg bWFwIHN0YXRlIHZhcmlhYmxlICovCiAgIGludCBoZWFkZXJfZG9uZSA9IDA7 CisgIGludCBzb19taXNzaW5nX2RlYnVnX2luZm8gPSAwOwogICBpbnQgYWRk cl93aWR0aDsKIAorICBpZiAocGF0dGVybikKKyAgICB7CisgICAgICBjaGFy ICpyZV9lcnIgPSByZV9jb21wIChwYXR0ZXJuKTsKKworICAgICAgaWYgKHJl X2VycikKKwllcnJvciAoXygiSW52YWxpZCByZWdleHA6ICVzIiksIHJlX2Vy cik7CisgICAgfQorCiAgIC8qICIweCIsIGEgbGl0dGxlIHdoaXRlc3BhY2Us IGFuZCB0d28gaGV4IGRpZ2l0cyBwZXIgYnl0ZSBvZiBwb2ludGVycy4gICov CiAgIGFkZHJfd2lkdGggPSA0ICsgKGdkYmFyY2hfcHRyX2JpdCAodGFyZ2V0 X2dkYmFyY2gpIC8gNCk7CiAKQEAgLTgyMCw2ICs4MzAsOSBAQCBpbmZvX3No YXJlZGxpYnJhcnlfY29tbWFuZCAoY2hhciAqaWdub3JlCiAgICAgewogICAg ICAgaWYgKHNvLT5zb19uYW1lWzBdKQogCXsKKwkgIGlmIChwYXR0ZXJuICYm ICEgcmVfZXhlYyAoc28tPnNvX25hbWUpKQorCSAgICBjb250aW51ZTsKKwog CSAgaWYgKCFoZWFkZXJfZG9uZSkKIAkgICAgewogCSAgICAgIHByaW50Zl91 bmZpbHRlcmVkICgiJS0qcyUtKnMlLTEycyVzXG4iLCBhZGRyX3dpZHRoLCAi RnJvbSIsCkBAIC04NDAsMTQgKzg1MywyNiBAQCBpbmZvX3NoYXJlZGxpYnJh cnlfY29tbWFuZCAoY2hhciAqaWdub3JlCiAJCQkgICAgICAgICAgIChMT05H RVNUKSBzby0+YWRkcl9oaWdoLAogCSAgICAgICAgICAgICAgICAgICAgICAg ICAgIGFkZHJfd2lkdGggLSA0KQogCQkJICAgICAgIDogIiIpOwotCSAgcHJp bnRmX3VuZmlsdGVyZWQgKCIlLTEycyIsIHNvLT5zeW1ib2xzX2xvYWRlZCA/ ICJZZXMiIDogIk5vIik7CisKKwkgIGlmIChzby0+c3ltYm9sc19sb2FkZWQK KwkgICAgICAmJiAhb2JqZmlsZV9oYXNfcGFydGlhbF9zeW1ib2xzIChzby0+ b2JqZmlsZSkKKwkgICAgICAmJiAhb2JqZmlsZV9oYXNfZnVsbF9zeW1ib2xz IChzby0+b2JqZmlsZSkpCisJICAgIHsKKwkgICAgICBzb19taXNzaW5nX2Rl YnVnX2luZm8gPSAxOworCSAgICAgIHByaW50Zl91bmZpbHRlcmVkICgiJS0x MnMiLCAiWWVzICgqKSIpOworCSAgICB9CisJICBlbHNlCisJICAgIHByaW50 Zl91bmZpbHRlcmVkICgiJS0xMnMiLCAhc28tPnN5bWJvbHNfbG9hZGVkID8g Ik5vIiA6ICJZZXMiKTsKKwogCSAgcHJpbnRmX3VuZmlsdGVyZWQgKCIlc1xu Iiwgc28tPnNvX25hbWUpOwogCX0KICAgICB9CiAgIGlmIChzb19saXN0X2hl YWQgPT0gTlVMTCkKLSAgICB7Ci0gICAgICBwcmludGZfdW5maWx0ZXJlZCAo XygiTm8gc2hhcmVkIGxpYnJhcmllcyBsb2FkZWQgYXQgdGhpcyB0aW1lLlxu IikpOwotICAgIH0KKyAgICBwcmludGZfdW5maWx0ZXJlZCAoXygiTm8gc2hh cmVkIGxpYnJhcmllcyBsb2FkZWQgYXQgdGhpcyB0aW1lLlxuIikpOworICBl bHNlIGlmICghIGhlYWRlcl9kb25lICYmIHBhdHRlcm4pCisgICAgcHJpbnRm X3VuZmlsdGVyZWQgKF8oIk5vIHNoYXJlZCBsaWJyYXJpZXMgbWF0Y2hlZC5c biIpKTsKKyAgZWxzZSBpZiAoaGVhZGVyX2RvbmUgJiYgc29fbWlzc2luZ19k ZWJ1Z19pbmZvKQorICAgIHByaW50Zl91bmZpbHRlcmVkIChfKCIoKik6IFNo YXJlZCBsaWJyYXJ5IGlzIG1pc3NpbmcgZGVidWdnaW5nIGluZm9ybWF0aW9u LlxuIikpOwogfQogCiAvKiBSZXR1cm4gMSBpZiBBRERSRVNTIGxpZXMgd2l0 aGluIFNPTElCLiAgKi8KSW5kZXg6IHN5bWZpbGUuYwo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL3N5bWZpbGUu Yyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yMzcKZGlmZiAtdSAtcCAtcjEu MjM3IHN5bWZpbGUuYwotLS0gc3ltZmlsZS5jCTIgSnVsIDIwMDkgMTc6MjU6 NTggLTAwMDAJMS4yMzcKKysrIHN5bWZpbGUuYwkxMCBKdWwgMjAwOSAyMTo1 MDoxOSAtMDAwMApAQCAtMTcxLDEzICsxNzEsNiBAQCBEeW5hbWljIHN5bWJv bCB0YWJsZSByZWxvYWRpbmcgbXVsdGlwbGUgCiAJCSAgICB2YWx1ZSk7CiB9 CiAKLS8qIElmIG5vbi16ZXJvLCBnZGIgd2lsbCBub3RpZnkgdGhlIHVzZXIg d2hlbiBpdCBpcyBsb2FkaW5nIHN5bWJvbHMKLSAgIGZyb20gYSBmaWxlLiAg VGhpcyBpcyBhbG1vc3QgYWx3YXlzIHdoYXQgdXNlcnMgd2lsbCB3YW50IHRv IGhhdmUgaGFwcGVuOwotICAgYnV0IGZvciBwcm9ncmFtcyB3aXRoIGxvdHMg b2YgZHluYW1pY2FsbHkgbGlua2VkIGxpYnJhcmllcywgdGhlIG91dHB1dAot ICAgY2FuIGJlIG1vcmUgbm9pc2UgdGhhbiBzaWduYWwuICAqLwotCi1pbnQg cHJpbnRfc3ltYm9sX2xvYWRpbmcgPSAxOwotCiAvKiBJZiBub24temVybywg c2hhcmVkIGxpYnJhcnkgc3ltYm9scyB3aWxsIGJlIGFkZGVkIGF1dG9tYXRp Y2FsbHkKICAgIHdoZW4gdGhlIGluZmVyaW9yIGlzIGNyZWF0ZWQsIG5ldyBs aWJyYXJpZXMgYXJlIGxvYWRlZCwgb3Igd2hlbgogICAgYXR0YWNoaW5nIHRv IHRoZSBpbmZlcmlvci4gIFRoaXMgaXMgYWxtb3N0IGFsd2F5cyB3aGF0IHVz ZXJzIHdpbGwKQEAgLTk4OSwxMiArOTgyLDkgQEAgc3ltYm9sX2ZpbGVfYWRk X3dpdGhfYWRkcnNfb3Jfb2Zmc2V0cyAoYgogCWRlcHJlY2F0ZWRfcHJlX2Fk ZF9zeW1ib2xfaG9vayAobmFtZSk7CiAgICAgICBlbHNlCiAJewotICAgICAg ICAgIGlmIChwcmludF9zeW1ib2xfbG9hZGluZykKLQkgICAgewotCSAgICAg IHByaW50Zl91bmZpbHRlcmVkIChfKCJSZWFkaW5nIHN5bWJvbHMgZnJvbSAl cy4uLiIpLCBuYW1lKTsKLQkgICAgICB3cmFwX2hlcmUgKCIiKTsKLQkgICAg ICBnZGJfZmx1c2ggKGdkYl9zdGRvdXQpOwotCSAgICB9CisJICBwcmludGZf dW5maWx0ZXJlZCAoXygiUmVhZGluZyBzeW1ib2xzIGZyb20gJXMuLi4iKSwg bmFtZSk7CisJICB3cmFwX2hlcmUgKCIiKTsKKwkgIGdkYl9mbHVzaCAoZ2Ri X3N0ZG91dCk7CiAJfQogICAgIH0KICAgc3ltc19mcm9tX29iamZpbGUgKG9i amZpbGUsIGFkZHJzLCBvZmZzZXRzLCBudW1fb2Zmc2V0cywKQEAgLTEwMDcs NyArOTk3LDcgQEAgc3ltYm9sX2ZpbGVfYWRkX3dpdGhfYWRkcnNfb3Jfb2Zm c2V0cyAoYgogCiAgIGlmICgoZmxhZ3MgJiBPQkpGX1JFQUROT1cpIHx8IHJl YWRub3dfc3ltYm9sX2ZpbGVzKQogICAgIHsKLSAgICAgIGlmICgoZnJvbV90 dHkgfHwgaW5mb192ZXJib3NlKSAmJiBwcmludF9zeW1ib2xfbG9hZGluZykK KyAgICAgIGlmIChmcm9tX3R0eSB8fCBpbmZvX3ZlcmJvc2UpCiAJewogCSAg cHJpbnRmX3VuZmlsdGVyZWQgKF8oImV4cGFuZGluZyB0byBmdWxsIHN5bWJv bHMuLi4iKSk7CiAJICB3cmFwX2hlcmUgKCIiKTsKQEAgLTEwNDksMTUgKzEw MzksMTIgQEAgc3ltYm9sX2ZpbGVfYWRkX3dpdGhfYWRkcnNfb3Jfb2Zmc2V0 cyAoYgogICAgICAgeGZyZWUgKGRlYnVnZmlsZSk7CiAgICAgfQogCi0gIGlm ICghaGF2ZV9wYXJ0aWFsX3N5bWJvbHMgKCkgJiYgIWhhdmVfZnVsbF9zeW1i b2xzICgpCi0gICAgICAmJiBwcmludF9zeW1ib2xfbG9hZGluZykKKyAgaWYg KChmcm9tX3R0eSB8fCBpbmZvX3ZlcmJvc2UpCisgICAgICAmJiAhb2JqZmls ZV9oYXNfcGFydGlhbF9zeW1ib2xzIChvYmpmaWxlKQorICAgICAgJiYgIW9i amZpbGVfaGFzX2Z1bGxfc3ltYm9scyAob2JqZmlsZSkpCiAgICAgewogICAg ICAgd3JhcF9oZXJlICgiIik7Ci0gICAgICBwcmludGZfdW5maWx0ZXJlZCAo XygiKG5vIGRlYnVnZ2luZyBzeW1ib2xzIGZvdW5kKSIpKTsKLSAgICAgIGlm IChmcm9tX3R0eSB8fCBpbmZvX3ZlcmJvc2UpCi0gICAgICAgIHByaW50Zl91 bmZpbHRlcmVkICgiLi4uIik7Ci0gICAgICBlbHNlCi0gICAgICAgIHByaW50 Zl91bmZpbHRlcmVkICgiXG4iKTsKKyAgICAgIHByaW50Zl91bmZpbHRlcmVk IChfKCIobm8gZGVidWdnaW5nIHN5bWJvbHMgZm91bmQpLi4uIikpOwogICAg ICAgd3JhcF9oZXJlICgiIik7CiAgICAgfQogCkBAIC0xMDY2LDEwICsxMDUz LDcgQEAgc3ltYm9sX2ZpbGVfYWRkX3dpdGhfYWRkcnNfb3Jfb2Zmc2V0cyAo YgogICAgICAgaWYgKGRlcHJlY2F0ZWRfcG9zdF9hZGRfc3ltYm9sX2hvb2sp CiAJZGVwcmVjYXRlZF9wb3N0X2FkZF9zeW1ib2xfaG9vayAoKTsKICAgICAg IGVsc2UKLQl7Ci0JICBpZiAocHJpbnRfc3ltYm9sX2xvYWRpbmcpCi0JICAg IHByaW50Zl91bmZpbHRlcmVkIChfKCJkb25lLlxuIikpOwotCX0KKwlwcmlu dGZfdW5maWx0ZXJlZCAoXygiZG9uZS5cbiIpKTsKICAgICB9CiAKICAgLyog V2UgcHJpbnQgc29tZSBtZXNzYWdlcyByZWdhcmRsZXNzIG9mIHdoZXRoZXIg J2Zyb21fdHR5IHx8CkBAIC0yNDIyLDcgKzI0MDYsOCBAQCByZXJlYWRfc3lt Ym9scyAodm9pZCkKIAkgICAgICAgICB6ZXJvIGlzIE9LIHNpbmNlIGRieHJl YWQuYyBhbHNvIGRvZXMgd2hhdCBpdCBuZWVkcyB0byBkbyBpZgogCSAgICAg ICAgIG9iamZpbGUtPmdsb2JhbF9wc3ltYm9scy5zaXplIGlzIDAuICAqLwog CSAgICAgICgqb2JqZmlsZS0+c2YtPnN5bV9yZWFkKSAob2JqZmlsZSwgMCk7 Ci0JICAgICAgaWYgKCFoYXZlX3BhcnRpYWxfc3ltYm9scyAoKSAmJiAhaGF2 ZV9mdWxsX3N5bWJvbHMgKCkpCisJICAgICAgaWYgKCFvYmpmaWxlX2hhc19w YXJ0aWFsX3N5bWJvbHMgKG9iamZpbGUpCisJCSAgJiYgIW9iamZpbGVfaGFz X2Z1bGxfc3ltYm9scyAob2JqZmlsZSkpCiAJCXsKIAkJICB3cmFwX2hlcmUg KCIiKTsKIAkJICBwcmludGZfdW5maWx0ZXJlZCAoXygiKG5vIGRlYnVnZ2lu ZyBzeW1ib2xzIGZvdW5kKVxuIikpOwpAQCAtNDE4OSwxMiArNDE3NCw0IEBA IHRoZSBnbG9iYWwgZGVidWctZmlsZSBkaXJlY3RvcnkgcHJlcGVuZGUKIAkJ CQkgICAgIE5VTEwsCiAJCQkJICAgICBzaG93X2RlYnVnX2ZpbGVfZGlyZWN0 b3J5LAogCQkJCSAgICAgJnNldGxpc3QsICZzaG93bGlzdCk7Ci0KLSAgYWRk X3NldHNob3dfYm9vbGVhbl9jbWQgKCJzeW1ib2wtbG9hZGluZyIsIG5vX2Ns YXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByaW50X3N5bWJv bF9sb2FkaW5nLCBfKCJcCi1TZXQgcHJpbnRpbmcgb2Ygc3ltYm9sIGxvYWRp bmcgbWVzc2FnZXMuIiksIF8oIlwKLVNob3cgcHJpbnRpbmcgb2Ygc3ltYm9s IGxvYWRpbmcgbWVzc2FnZXMuIiksIE5VTEwsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg TlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICZzZXRwcmludGxp c3QsICZzaG93cHJpbnRsaXN0KTsKIH0KSW5kZXg6IHN5bWZpbGUuaAo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2Ri L3N5bWZpbGUuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS41MQpkaWZmIC11 IC1wIC1yMS41MSBzeW1maWxlLmgKLS0tIHN5bWZpbGUuaAkxNiBKdW4gMjAw OSAxODo0OToyNSAtMDAwMAkxLjUxCisrKyBzeW1maWxlLmgJMTAgSnVsIDIw MDkgMjE6NTA6MTkgLTAwMDAKQEAgLTI4NCwxMyArMjg0LDYgQEAgZXh0ZXJu IGNoYXIgKm9iY29uY2F0IChzdHJ1Y3Qgb2JzdGFjayAqbwogCiAJCQkvKiAg IFZhcmlhYmxlcyAgICovCiAKLS8qIElmIG5vbi16ZXJvLCBnZGIgd2lsbCBu b3RpZnkgdGhlIHVzZXIgd2hlbiBpdCBpcyBsb2FkaW5nIHN5bWJvbHMKLSAg IGZyb20gYSBmaWxlLiAgVGhpcyBpcyBhbG1vc3QgYWx3YXlzIHdoYXQgdXNl cnMgd2lsbCB3YW50IHRvIGhhdmUgaGFwcGVuOwotICAgYnV0IGZvciBwcm9n cmFtcyB3aXRoIGxvdHMgb2YgZHluYW1pY2FsbHkgbGlua2VkIGxpYnJhcmll cywgdGhlIG91dHB1dAotICAgY2FuIGJlIG1vcmUgbm9pc2UgdGhhbiBzaWdu YWwuICAqLwotCi1leHRlcm4gaW50IHByaW50X3N5bWJvbF9sb2FkaW5nOwot CiAvKiBJZiBub24temVybywgc2hhcmVkIGxpYnJhcnkgc3ltYm9scyB3aWxs IGJlIGFkZGVkIGF1dG9tYXRpY2FsbHkKICAgIHdoZW4gdGhlIGluZmVyaW9y IGlzIGNyZWF0ZWQsIG5ldyBsaWJyYXJpZXMgYXJlIGxvYWRlZCwgb3Igd2hl bgogICAgYXR0YWNoaW5nIHRvIHRoZSBpbmZlcmlvci4gIFRoaXMgaXMgYWxt b3N0IGFsd2F5cyB3aGF0IHVzZXJzIHdpbGwKSW5kZXg6IGRvYy9nZGIudGV4 aW5mbwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Ny Yy9zcmMvZ2RiL2RvYy9nZGIudGV4aW5mbyx2CnJldHJpZXZpbmcgcmV2aXNp b24gMS42MDUKZGlmZiAtdSAtcCAtcjEuNjA1IGdkYi50ZXhpbmZvCi0tLSBk b2MvZ2RiLnRleGluZm8JMTAgSnVsIDIwMDkgMTA6MzU6MTcgLTAwMDAJMS42 MDUKKysrIGRvYy9nZGIudGV4aW5mbwkxMCBKdWwgMjAwOSAyMjowMDoyNyAt MDAwMApAQCAtMTI1NjUsMjIgKzEyNTY1LDYgQEAgaXMgcHJpbnRlZCBhcyBm b2xsb3dzOgogQGl0ZW0gc2hvdyBvcGFxdWUtdHlwZS1yZXNvbHV0aW9uCiBT aG93IHdoZXRoZXIgb3BhcXVlIHR5cGVzIGFyZSByZXNvbHZlZCBvciBub3Qu CiAKLUBraW5kZXggc2V0IHByaW50IHN5bWJvbC1sb2FkaW5nCi1AY2luZGV4 IHByaW50IG1lc3NhZ2VzIHdoZW4gc3ltYm9scyBhcmUgbG9hZGVkCi1AaXRl bSBzZXQgcHJpbnQgc3ltYm9sLWxvYWRpbmcKLUBpdGVteCBzZXQgcHJpbnQg c3ltYm9sLWxvYWRpbmcgb24KLUBpdGVteCBzZXQgcHJpbnQgc3ltYm9sLWxv YWRpbmcgb2ZmCi1UaGUgQGNvZGV7c2V0IHByaW50IHN5bWJvbC1sb2FkaW5n fSBjb21tYW5kIGFsbG93cyB5b3UgdG8gZW5hYmxlIG9yCi1kaXNhYmxlIHBy aW50aW5nIG9mIG1lc3NhZ2VzIHdoZW4gQHZhbHVle0dEQk59IGxvYWRzIHN5 bWJvbHMuCi1CeSBkZWZhdWx0LCB0aGVzZSBtZXNzYWdlcyB3aWxsIGJlIHBy aW50ZWQsIGFuZCBub3JtYWxseSB0aGlzIGlzIHdoYXQKLXlvdSB3YW50LiAg RGlzYWJsaW5nIHRoZXNlIG1lc3NhZ2VzIGlzIHVzZWZ1bCB3aGVuIGRlYnVn Z2luZyBhcHBsaWNhdGlvbnMKLXdpdGggbG90cyBvZiBzaGFyZWQgbGlicmFy aWVzIHdoZXJlIHRoZSBxdWFudGl0eSBvZiBvdXRwdXQgY2FuIGJlIG1vcmUK LWFubm95aW5nIHRoYW4gdXNlZnVsLgotCi1Aa2luZGV4IHNob3cgcHJpbnQg c3ltYm9sLWxvYWRpbmcKLUBpdGVtIHNob3cgcHJpbnQgc3ltYm9sLWxvYWRp bmcKLVNob3cgd2hldGhlciBtZXNzYWdlcyB3aWxsIGJlIHByaW50ZWQgd2hl biBAdmFsdWV7R0RCTn0gbG9hZHMgc3ltYm9scy4KLQogQGtpbmRleCBtYWlu dCBwcmludCBzeW1ib2xzCiBAY2luZGV4IHN5bWJvbCBkdW1wCiBAa2luZGV4 IG1haW50IHByaW50IHBzeW1ib2xzCkBAIC0xMzQ1Myw5ICsxMzQzNywxMSBA QCBjb21tYW5kOgogQHRhYmxlIEBjb2RlCiBAa2luZGV4IGluZm8gc2hhcmVk bGlicmFyeQogQGtpbmRleCBpbmZvIHNoYXJlCi1AaXRlbSBpbmZvIHNoYXJl Ci1AaXRlbXggaW5mbyBzaGFyZWRsaWJyYXJ5Ci1QcmludCB0aGUgbmFtZXMg b2YgdGhlIHNoYXJlZCBsaWJyYXJpZXMgd2hpY2ggYXJlIGN1cnJlbnRseSBs b2FkZWQuCitAaXRlbSBpbmZvIHNoYXJlIEB2YXJ7cmVnZXh9CitAaXRlbXgg aW5mbyBzaGFyZWRsaWJyYXJ5IEB2YXJ7cmVnZXh9CitQcmludCB0aGUgbmFt ZXMgb2YgdGhlIHNoYXJlZCBsaWJyYXJpZXMgd2hpY2ggYXJlIGN1cnJlbnRs eSBsb2FkZWQKK3RoYXQgbWF0Y2ggQHZhcntyZWdleH0uICBJZiBAdmFye3Jl Z2V4fSBpcyBvbWl0dGVkIHRoZW4gcHJpbnQKK2FsbCBzaGFyZWQgbGlicmFy aWVzIHRoYXQgYXJlIGxvYWRlZC4KIAogQGtpbmRleCBzaGFyZWRsaWJyYXJ5 CiBAa2luZGV4IHNoYXJlCg== --0016e6d42bba12f76f046e614436--