From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 29003 invoked by alias); 5 Jun 2013 22:31:20 -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 28992 invoked by uid 89); 5 Jun 2013 22:31:19 -0000 X-Spam-SWARE-Status: No, score=-4.1 required=5.0 tests=AWL,BAYES_00,KHOP_THREADED,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_YE,RP_MATCHES_RCVD,SPF_PASS,TW_BJ,TW_XS autolearn=ham version=3.3.1 Received: from mail-vc0-f178.google.com (HELO mail-vc0-f178.google.com) (209.85.220.178) by sourceware.org (qpsmtpd/0.84/v0.84-167-ge50287c) with ESMTP; Wed, 05 Jun 2013 22:31:17 +0000 Received: by mail-vc0-f178.google.com with SMTP id id13so1532917vcb.37 for ; Wed, 05 Jun 2013 15:31:16 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type:x-gm-message-state; bh=R1yasAtHoSCo9kQ1mFqNQ0Ck/pa26koLSGI2Ek0LNYc=; b=KHcuw3Iv9rRTbmqfrvMCYh2KbEytFNjIaZBYwhvb+Y9GdSP1dhjasoGLXz/pzejbDT 3KPePh8DHegFv0NeCbN2eK+FRQP8YPHk/qfKvJayPkLhOQv88xFYnPdAFtJi+Asb7ppu nvffrdjPBitq3K+sLty7LDA9E1lhxGnmgB+Y256S+ZqAMf2f+BKQtqZ3TeZj88PEgyib YFcxY61hnpEO77SB4glY1TO+13VMJFftl5Ih0UNY/cq4g/OoPlTyfkV0Ie5La45BqrXr x4SgFH5HYnFLy1s+v3h/FT2m1giyNtLaS8zngBrmet7KPxh1DxT+Ra3P/WveNQNIMRbm 9Pyw== MIME-Version: 1.0 X-Received: by 10.52.183.170 with SMTP id en10mr18197260vdc.5.1370471476116; Wed, 05 Jun 2013 15:31:16 -0700 (PDT) Received: by 10.220.189.74 with HTTP; Wed, 5 Jun 2013 15:31:16 -0700 (PDT) In-Reply-To: <51ACD207.2000402@redhat.com> References: <20903.57436.871210.593441@ruffy.mtv.corp.google.com> <51A86FF5.9090401@redhat.com> <20905.9501.800725.439795@ruffy.mtv.corp.google.com> <51ACD207.2000402@redhat.com> Date: Wed, 05 Jun 2013 22:31:00 -0000 Message-ID: Subject: Re: [patch] Improve symbol lookup performance noted in PR 15519 From: Doug Evans To: Pedro Alves Cc: Keith Seitz , Joel Brobecker , psmith@gnu.org, gdb-patches Content-Type: multipart/mixed; boundary=bcaec548a1b3825f6804de6fc10b X-Gm-Message-State: ALoCoQkGEmp2gqNkgg0+iE4PuCZ7XrDenOtY6w05jPY/L39dofJJnDT4Z4hUFsbkglv0ppglhcoNtpOzgZXGKPxW8RHTfgf6oF5j1au7bZkHVEETUS2PxxJdYIU1L1gYgNU0qVdPfTz8m4YHRKCv3jRcPcuZH+Jqs4ZWDo+hthDwEAZPPKPPPgqBwQ367lOuJGMzGvsE1kIfpQDkxJywq8OC1v9SWqmXJA== X-Virus-Found: No X-SW-Source: 2013-06/txt/msg00100.txt.bz2 --bcaec548a1b3825f6804de6fc10b Content-Type: text/plain; charset=ISO-8859-1 Content-length: 2447 On Mon, Jun 3, 2013 at 10:27 AM, Pedro Alves wrote: > What I guess I'm still missing to understand it, > is a short blurb describing what is being skipped and why is > it safe to be skipped. :-) > > Just to make sure I understand the change -- I see > cp_lookup_symbol_namespace does: > > ... > /* Search for name in namespaces imported to this and parent > blocks. */ > while (block != NULL) > { > sym = cp_lookup_symbol_imports (scope, name, block, > domain, 0, 1); > > if (sym) > return sym; > > block = BLOCK_SUPERBLOCK (block); > } > > and a chunk of the speedup comes from skipping that, correct? > That is, it is supposedly unnecessary to look symbol imports > when looking up a symbol in a baseclass, right? Right. There are two kinds of "using"s: directives and declarations. "using directives" cannot appear in class scope, and that is what cp_lookup_symbol_namespace handles. And, AFAICT, gdb doesn't support "using declarations" yet, which does affect base class lookup here. > The patch then also replaces a lookup_symbol_static with a specific > block call followed by a fallback lookup_static_symbol_aux search over all > objfiles, by always doing the lookup_static_symbol_aux search over > all objfiles. It makes me wonder if it was there for a reason things were > done that way before, like for something like the same named class/methods > being implemented/hidden/private in different sos/dlls (therefore not > really subject to ODR), therefore making it desirable to lookup in the > same context first. I have no idea, probably not. :-) I guess I'm just > after getting the analysis/conclusion that led to the change > recorded for posterity. :-) It's kind of a toss up. Even if someone played games with visibility the previous lookup only checks the current symtab; there's no guarantee the needed debug info isn't in another symtab in that objfile (e.g., due to gcc's aggressive debug info pruning). Ultimately, I think what we want is to search the current objfile, and then search the remaining objfiles, but I left that for another day. Still, searching the current symtab isn't expensive enough that re-searching it is a problem and it sometimes will win. So I've modified the patch to keep that behaviour. Still have to search the world if block != NULL though. Improving that's also left for another day. --bcaec548a1b3825f6804de6fc10b Content-Type: text/plain; charset=US-ASCII; name="gdb-130605-cp-namespace-3.patch.txt" Content-Disposition: attachment; filename="gdb-130605-cp-namespace-3.patch.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hhl3b46z0 Content-length: 9630 MjAxMy0wNi0wNSAgRG91ZyBFdmFucyAgPGRqZUBnb29nbGUuY29tPgoJICAg IEtlaXRoIFNlaXR6ICA8a2VpdGhzQHJlZGhhdC5jb20+CgoJUFIgMTU1MTkK CSogY3AtbmFtZXNwYWNlLmMgKGZpbmRfc3ltYm9sX2luX2Jhc2VjbGFzcyk6 IENhbGwKCWNwX2xvb2t1cF9zeW1ib2xfaW5fbmFtZXNwYWNlIGluc3RlYWQg b2YgY3BfbG9va3VwX3N5bWJvbF9uYW1lc3BhY2UuCglDaGVjayByZXN1bHQg b2YgY2FsbCB0byBsb29rdXBfc3ltYm9sX3N0YXRpYy4KCUNhbGwgbG9va3Vw X3N0YXRpY19zeW1ib2xfYXV4IHVuY29uZGl0aW9uYWxseS4KCUNhbGwgY2hl Y2tfdHlwZWRlZiBvbiBiYXNlIHR5cGVzIGJlZm9yZSBhY2Nlc3NpbmcgdGhl bS4KCShjcF9sb29rdXBfbmVzdGVkX3N5bWJvbCk6IEZpeCBjb21tZW50LgoK CXRlc3RzdWl0ZS8KCSogZ2RiLmNwL2Rlcml2YXRpb24yLmNjOiBOZXcgZmls ZS4KCSogZ2RiLmNwL2Rlcml2YXRpb24uY2MgKG1haW4pOiBDYWxsIGZvbzIu CgkqIGdkYi5jcC9kZXJpdmF0aW9uLmV4cDogQWRkIHRlc3RzIGZvciB0eXBl ZGVmcyBpbiBhbm90aGVyCglmaWxlLCBhbmQgd2hlbiB0aGVyZSdzIGFuIGFj dGl2ZSBibG9jay4KCkluZGV4OiBjcC1uYW1lc3BhY2UuYwo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL2NwLW5h bWVzcGFjZS5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjY3CmRpZmYgLXUg LXAgLXIxLjY3IGNwLW5hbWVzcGFjZS5jCi0tLSBjcC1uYW1lc3BhY2UuYwkz MCBNYXkgMjAxMyAxNzoyOTowNiAtMDAwMAkxLjY3CisrKyBjcC1uYW1lc3Bh Y2UuYwk1IEp1biAyMDEzIDIyOjIxOjE3IC0wMDAwCkBAIC03MjAsMzYgKzcy MCw0MCBAQCBmaW5kX3N5bWJvbF9pbl9iYXNlY2xhc3MgKHN0cnVjdCB0eXBl ICpwCiAgIGZvciAoaSA9IDA7IGkgPCBUWVBFX05fQkFTRUNMQVNTRVMgKHBh cmVudF90eXBlKTsgKytpKQogICAgIHsKICAgICAgIHNpemVfdCBsZW47Cisg ICAgICBzdHJ1Y3QgdHlwZSAqYmFzZV90eXBlID0gVFlQRV9CQVNFQ0xBU1Mg KHBhcmVudF90eXBlLCBpKTsKICAgICAgIGNvbnN0IGNoYXIgKmJhc2VfbmFt ZSA9IFRZUEVfQkFTRUNMQVNTX05BTUUgKHBhcmVudF90eXBlLCBpKTsKIAog ICAgICAgaWYgKGJhc2VfbmFtZSA9PSBOVUxMKQogCWNvbnRpbnVlOwogCiAg ICAgICAvKiBTZWFyY2ggdGhpcyBwYXJ0aWN1bGFyIGJhc2UgY2xhc3MuICAq LwotICAgICAgc3ltID0gY3BfbG9va3VwX3N5bWJvbF9uYW1lc3BhY2UgKGJh c2VfbmFtZSwgbmFtZSwgYmxvY2ssIFZBUl9ET01BSU4pOworICAgICAgc3lt ID0gY3BfbG9va3VwX3N5bWJvbF9pbl9uYW1lc3BhY2UgKGJhc2VfbmFtZSwg bmFtZSwgYmxvY2ssCisJCQkJCSAgIFZBUl9ET01BSU4sIDApOwogICAgICAg aWYgKHN5bSAhPSBOVUxMKQogCWJyZWFrOwogCisgICAgICAvKiBOb3cgc2Vh cmNoIGFsbCBzdGF0aWMgZmlsZS1sZXZlbCBzeW1ib2xzLiAgV2UgaGF2ZSB0 byBkbyB0aGlzIGZvcgorCSB0aGluZ3MgbGlrZSB0eXBlZGVmcyBpbiB0aGUg Y2xhc3MuICBGaXJzdCBzZWFyY2ggaW4gdGhpcyBzeW10YWIsCisJIHdoYXQg d2Ugd2FudCBpcyBwb3NzaWJseSB0aGVyZS4gICovCiAgICAgICBsZW4gPSBz dHJsZW4gKGJhc2VfbmFtZSkgKyAyICsgc3RybGVuIChuYW1lKSArIDE7CiAg ICAgICBjb25jYXRlbmF0ZWRfbmFtZSA9IHhyZWFsbG9jIChjb25jYXRlbmF0 ZWRfbmFtZSwgbGVuKTsKICAgICAgIHhzbnByaW50ZiAoY29uY2F0ZW5hdGVk X25hbWUsIGxlbiwgIiVzOjolcyIsIGJhc2VfbmFtZSwgbmFtZSk7CiAgICAg ICBzeW0gPSBsb29rdXBfc3ltYm9sX3N0YXRpYyAoY29uY2F0ZW5hdGVkX25h bWUsIGJsb2NrLCBWQVJfRE9NQUlOKTsKKyAgICAgIGlmIChzeW0gIT0gTlVM TCkKKwlicmVhazsKIAotICAgICAgLyogSWYgdGhlcmUgaXMgY3VycmVudGx5 IG5vIEJMT0NLLCBlLmcuLCB0aGUgaW5mZXJpb3IgaGFzbid0IHlldAotCSBi ZWVuIHN0YXJ0ZWQsIHRoZW4gdHJ5IHNlYXJjaGluZyBhbGwgU1RBVElDX0JM T0NLIHN5bWJvbHMgaW4KLQkgYWxsIG9iamZpbGVzLiAgKi8KLSAgICAgIGlm IChibG9jayA9PSBOVUxMKQotCXsKLQkgIHN5bSA9IGxvb2t1cF9zdGF0aWNf c3ltYm9sX2F1eCAoY29uY2F0ZW5hdGVkX25hbWUsIFZBUl9ET01BSU4pOwot CSAgaWYgKHN5bSAhPSBOVUxMKQotCSAgICBicmVhazsKLQl9CisgICAgICAv KiBOb3BlLiAgV2Ugbm93IGhhdmUgdG8gc2VhcmNoIGFsbCBzdGF0aWMgYmxv Y2tzIGluIGFsbCBvYmpmaWxlcywKKwkgZXZlbiBpZiBibG9jayAhPSBOVUxM LCBiZWNhdXNlIHRoZXJlJ3Mgbm8gZ3VhcmFudGVlcyBhcyB0byB3aGljaAor CSBzeW10YWIgdGhlIHN5bWJvbCB3ZSB3YW50IGlzIGluLiAgKi8KKyAgICAg IHN5bSA9IGxvb2t1cF9zdGF0aWNfc3ltYm9sX2F1eCAoY29uY2F0ZW5hdGVk X25hbWUsIFZBUl9ET01BSU4pOworICAgICAgaWYgKHN5bSAhPSBOVUxMKQor CWJyZWFrOwogCiAgICAgICAvKiBJZiB0aGlzIGNsYXNzIGhhcyBiYXNlIGNs YXNzZXMsIHNlYXJjaCB0aGVtIG5leHQuICAqLwotICAgICAgaWYgKFRZUEVf Tl9CQVNFQ0xBU1NFUyAoVFlQRV9CQVNFQ0xBU1MgKHBhcmVudF90eXBlLCBp KSkgPiAwKQorICAgICAgQ0hFQ0tfVFlQRURFRiAoYmFzZV90eXBlKTsKKyAg ICAgIGlmIChUWVBFX05fQkFTRUNMQVNTRVMgKGJhc2VfdHlwZSkgPiAwKQog CXsKLQkgIHN5bSA9IGZpbmRfc3ltYm9sX2luX2Jhc2VjbGFzcyAoVFlQRV9C QVNFQ0xBU1MgKHBhcmVudF90eXBlLCBpKSwKLQkJCQkJICBuYW1lLCBibG9j ayk7CisJICBzeW0gPSBmaW5kX3N5bWJvbF9pbl9iYXNlY2xhc3MgKGJhc2Vf dHlwZSwgbmFtZSwgYmxvY2spOwogCSAgaWYgKHN5bSAhPSBOVUxMKQogCSAg ICBicmVhazsKIAl9CkBAIC03OTcsOCArODAxLDggQEAgY3BfbG9va3VwX25l c3RlZF9zeW1ib2wgKHN0cnVjdCB0eXBlICpwYQogCWlmIChzeW0gIT0gTlVM TCkKIAkgIHJldHVybiBzeW07CiAKLQkvKiBOb3cgc2VhcmNoIGFsbCBzdGF0 aWMgZmlsZS1sZXZlbCBzeW1ib2xzLiAgTm90IHN0cmljdGx5Ci0JICAgY29y cmVjdCwgYnV0IG1vcmUgdXNlZnVsIHRoYW4gYW4gZXJyb3IuICBXZSBkbyBu b3QgdHJ5IHRvCisJLyogTm93IHNlYXJjaCBhbGwgc3RhdGljIGZpbGUtbGV2 ZWwgc3ltYm9scy4gIFdlIGhhdmUgdG8gZG8gdGhpcworCSAgIGZvciB0aGlu Z3MgbGlrZSB0eXBlZGVmcyBpbiB0aGUgY2xhc3MuICBXZSBkbyBub3QgdHJ5 IHRvCiAJICAgZ3Vlc3MgYW55IGltcG9ydGVkIG5hbWVzcGFjZSBhcyBldmVu IHRoZSBmdWxseSBzcGVjaWZpZWQKIAkgICBuYW1lc3BhY2Ugc2VhcmNoIGlz IGFscmVhZHkgbm90IEMrKyBjb21wbGlhbnQgYW5kIG1vcmUKIAkgICBhc3N1 bXB0aW9ucyBjb3VsZCBtYWtlIGl0IHRvbyBtYWdpYy4gICovCkluZGV4OiB0 ZXN0c3VpdGUvZ2RiLmNwL2Rlcml2YXRpb24uY2MKPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2dkYi90ZXN0c3VpdGUv Z2RiLmNwL2Rlcml2YXRpb24uY2MsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu NQpkaWZmIC11IC1wIC1yMS41IGRlcml2YXRpb24uY2MKLS0tIHRlc3RzdWl0 ZS9nZGIuY3AvZGVyaXZhdGlvbi5jYwkxIEphbiAyMDEzIDA2OjMzOjI3IC0w MDAwCTEuNQorKysgdGVzdHN1aXRlL2dkYi5jcC9kZXJpdmF0aW9uLmNjCTUg SnVuIDIwMTMgMjI6MjE6MTggLTAwMDAKQEAgLTE2LDYgKzE2LDggQEAKICAg IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6 Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgogICAgKi8KIAorZXh0ZXJuIHZv aWQgZm9vMiAoKTsgLyogZnJvbSBkZXJpdmF0aW9uMi5jYyAqLworCiBuYW1l c3BhY2UgTiB7CiAgIHR5cGVkZWYgZG91YmxlIHZhbHVlX3R5cGU7CiAgIHN0 cnVjdCBCYXNlIHsgdHlwZWRlZiBpbnQgdmFsdWVfdHlwZTsgfTsKQEAgLTMw Niw5ICszMDgsNyBAQCBpbnQgbWFpbih2b2lkKQogICAgIE46OkRlcml2ZWQ6 OnZhbHVlX3R5cGUgZCA9IDE7CiAgICAgTjo6dmFsdWVfdHlwZSBuID0gMy4w OwogICAgIGRvYmouZG9pdCAoKTsKKyAgICBmb28yICgpOwogICAgIHJldHVy biAwOwogICAgIAogfQotCi0gICAgCi0gICAgCkluZGV4OiB0ZXN0c3VpdGUv Z2RiLmNwL2Rlcml2YXRpb24uZXhwCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K UkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIvdGVzdHN1aXRlL2dkYi5jcC9k ZXJpdmF0aW9uLmV4cCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yNApkaWZm IC11IC1wIC1yMS4yNCBkZXJpdmF0aW9uLmV4cAotLS0gdGVzdHN1aXRlL2dk Yi5jcC9kZXJpdmF0aW9uLmV4cAkxIEphbiAyMDEzIDA2OjMzOjI3IC0wMDAw CTEuMjQKKysrIHRlc3RzdWl0ZS9nZGIuY3AvZGVyaXZhdGlvbi5leHAJNSBK dW4gMjAxMyAyMjoyMToxOCAtMDAwMApAQCAtMzIsMTQgKzMyLDE1IEBAIGlm IHsgW3NraXBfY3BsdXNfdGVzdHNdIH0geyBjb250aW51ZSB9CiAKIGxvYWRf bGliICJjcC1zdXBwb3J0LmV4cCIKIAotc3RhbmRhcmRfdGVzdGZpbGUgLmNj CitzdGFuZGFyZF90ZXN0ZmlsZSBkZXJpdmF0aW9uLmNjIGRlcml2YXRpb24y LmNjCiAKLWlmIHtbcHJlcGFyZV9mb3JfdGVzdGluZyAkdGVzdGZpbGUuZXhw ICR0ZXN0ZmlsZSAkc3JjZmlsZSB7ZGVidWcgYysrfV19IHsKK2lmIHtbcHJl cGFyZV9mb3JfdGVzdGluZyAkdGVzdGZpbGUuZXhwICR0ZXN0ZmlsZSBcCisJ W2xpc3QgJHNyY2ZpbGUgJHNyY2ZpbGUyXSB7ZGVidWcgYysrfV19IHsKICAg ICByZXR1cm4gLTEKIH0KIAogIyBDaGVjayBpbmhlcml0YW5jZSBvZiB0eXBl ZGVmcy4KLWZvcmVhY2gga2xhc3MgeyJBIiAiRCIgIkUiICJGIn0geworZm9y ZWFjaCBrbGFzcyB7IkEiICJEIiAiRSIgIkYiICJBMiIgIkQyIn0gewogICAg IGdkYl90ZXN0ICJwdHlwZSAke2tsYXNzfTo6dmFsdWVfdHlwZSIgInR5cGUg PSBpbnQiCiAgICAgZ2RiX3Rlc3QgIndoYXRpcyAke2tsYXNzfTo6dmFsdWVf dHlwZSIgInR5cGUgPSBpbnQiCiAgICAgZ2RiX3Rlc3QgInAgKCR7a2xhc3N9 Ojp2YWx1ZV90eXBlKSAwIiAiID0gMCIKQEAgLTU3LDYgKzU4LDEzIEBAIGlm ICFbcnVudG8gJ21hcmtlcjEnXSB0aGVuIHsKICAgICBjb250aW51ZQogfQog CisjIENoZWNrIGluaGVyaXRhbmNlIG9mIHR5cGVkZWZzIGFnYWluLCBidXQg dGhpcyB0aW1lIHdpdGggYW4gYWN0aXZlIGJsb2NrLgorZm9yZWFjaCBrbGFz cyB7IkEiICJEIiAiQTIiICJEMiJ9IHsKKyAgICBnZGJfdGVzdCAicHR5cGUg JHtrbGFzc306OnZhbHVlX3R5cGUiICJ0eXBlID0gaW50IgorICAgIGdkYl90 ZXN0ICJ3aGF0aXMgJHtrbGFzc306OnZhbHVlX3R5cGUiICJ0eXBlID0gaW50 IgorICAgIGdkYl90ZXN0ICJwICgke2tsYXNzfTo6dmFsdWVfdHlwZSkgMCIg IiA9IDAiCit9CisKIGdkYl90ZXN0ICJ1cCIgIi4qbWFpbi4qIiAidXAgZnJv bSBtYXJrZXIxIgogCiAjIFByaW50IGNsYXNzIHR5cGVzIGFuZCB2YWx1ZXMu CkluZGV4OiB0ZXN0c3VpdGUvZ2RiLmNwL2Rlcml2YXRpb24yLmNjCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IHRlc3RzdWl0ZS9nZGIuY3Av ZGVyaXZhdGlvbjIuY2MKZGlmZiAtTiB0ZXN0c3VpdGUvZ2RiLmNwL2Rlcml2 YXRpb24yLmNjCi0tLSAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAt MDAwMAorKysgdGVzdHN1aXRlL2dkYi5jcC9kZXJpdmF0aW9uMi5jYwk1IEp1 biAyMDEzIDIyOjIxOjE4IC0wMDAwCkBAIC0wLDAgKzEsNDkgQEAKKy8qIFRo aXMgdGVzdGNhc2UgaXMgcGFydCBvZiBHREIsIHRoZSBHTlUgZGVidWdnZXIu CisKKyAgIENvcHlyaWdodCAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv biwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9y CisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisg ICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNl ZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgICAqLworCisv KiBBIGNvcHkgb2Ygc29tZSBjbGFzc2VzIGluIGRlcml2YXRpb24uY2Mgc28g dGhhdCB3ZSBjYW4gdGVzdCBzeW1ib2wgbG9va3VwCisgICBpbiBvdGhlciBD VXMuICAqLworCitjbGFzcyBBMiB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBp bnQgdmFsdWVfdHlwZTsKKyAgICB2YWx1ZV90eXBlIGE7CisKKyAgICBBMigp CisgICAgeworICAgICAgICBhPTE7CisgICAgfQorfTsKKworY2xhc3MgRDIg OiBwdWJsaWMgQTIgeworcHVibGljOgorICAgIHZhbHVlX3R5cGUgZDsKKwor ICAgIEQyKCkKKyAgICB7CisgICAgICAgIGQ9NzsKKyAgICB9Cit9OworCit2 b2lkCitmb28yICgpCit7CisgIEQyIGQyX2luc3RhbmNlOworICBkMl9pbnN0 YW5jZS5hID0gNDI7CisgIGQyX2luc3RhbmNlLmQgPSA0MzsKK30K --bcaec548a1b3825f6804de6fc10b--