From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 10165 invoked by alias); 19 May 2009 14:31:01 -0000 Received: (qmail 10145 invoked by uid 22791); 19 May 2009 14:30:56 -0000 X-SWARE-Spam-Status: No, hits=-1.8 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_33,SARE_MSGID_LONG40,SPF_PASS X-Spam-Check-By: sourceware.org Received: from smtp-out.google.com (HELO smtp-out.google.com) (216.239.45.13) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 19 May 2009 14:30:50 +0000 Received: from zps37.corp.google.com (zps37.corp.google.com [172.25.146.37]) by smtp-out.google.com with ESMTP id n4JEUlr8020854 for ; Tue, 19 May 2009 07:30:47 -0700 Received: from bwz9 (bwz9.prod.google.com [10.188.26.9]) by zps37.corp.google.com with ESMTP id n4JEUUDq032703 for ; Tue, 19 May 2009 07:30:45 -0700 Received: by bwz9 with SMTP id 9so3857657bwz.43 for ; Tue, 19 May 2009 07:30:44 -0700 (PDT) MIME-Version: 1.0 Received: by 10.204.119.71 with SMTP id y7mr128873bkq.16.1242743444798; Tue, 19 May 2009 07:30:44 -0700 (PDT) In-Reply-To: <1242666987.6074.15.camel@janis-laptop> References: <1242666987.6074.15.camel@janis-laptop> Date: Tue, 19 May 2009 16:52:00 -0000 Message-ID: Subject: Re: [lto] Enabling LTO in selected testsuite directories From: Diego Novillo To: janis187@us.ibm.com Cc: gcc@gcc.gnu.org Content-Type: multipart/mixed; boundary=0016e6d59e1f92fe91046a44c132 X-System-Of-Record: true X-IsSubscribed: yes Mailing-List: contact gcc-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-owner@gcc.gnu.org X-SW-Source: 2009-05/txt/msg00488.txt.bz2 --0016e6d59e1f92fe91046a44c132 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Content-length: 2195 On Mon, May 18, 2009 at 13:16, Janis Johnson wrote: > Implement check_effective_target_lto to report whether LTO is supported > and check that when setting up TORTURE_OPTIONS in one of the files in > gcc/testsuite/lib/*.exp. =C2=A0Look at fortran-torture.exp, which adds > options for vectorization if appropriate. Thanks. I'm not sure it's working as I want it to, though. I played with it a little bit and this is how I thought of using it: 1- In lib/target-supports.exp add: proc check_effective_target_lto { } { return [check_no_compiler_messages lto object { void foo (void) { } } "-O0 -flto"] } 2- In lib/c-torture.exp and lib/gcc-dg.exp add: set LTO_TORTURE_OPTIONS "" if [check_effective_target_lto] { set LTO_TORTURE_OPTIONS [list {} {-flto} {-fwhopr}] } 3- Every .exp file that wants to test LTO calls: set-torture-options $LTO_TORTURE_OPTIONS The problem I'm having is that check_no_compiler_messages uses C, C++ or Fortran depending on the code snippet format (naturally). I actually need it to check the front end that is currently used. Is there some global flag that holds this? In some .exp files, even if the front end supports LTO, it may not want to use the LTO options. For instance, pch.exp saves the initial assembly without -flto, so all the tests trivially miscompare with LTO enabled. Maybe I could skip step #1 and always define LTO_TORTURE_OPTIONS? Then it's up to every individual .exp file to decide if it wants to add LTO to the mix. > I was supposed to get back to you, Diego, about what's needed for > LTO-specific tests, but there is probably other functionality, like > plugins, that have similar needs. =C2=A0What are the general requirements > for an LTO test? =C2=A0I'd guess that there will be multiple source files > that have their own compile options, and multiple links with different > link options, a final link, and execute; is that about right? Yes. For reference, I implemented this support in the lto branch (testsuite/lib/lto.exp). It has not been reviewed yet, so I expect it to need fixes, but it does what we need for LTO-specific testing. Thanks. Diego. --0016e6d59e1f92fe91046a44c132 Content-Type: application/octet-stream; name="lto.exp" Content-Disposition: attachment; filename="lto.exp" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fuwpbl510 Content-length: 21326 IyBDb3B5cmlnaHQgKEMpIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LCBJbmMuCgojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBh cyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u OyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5 b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dy YW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl IHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgojCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIEdD Qzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQojIDxodHRw Oi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KCiMgQ29udHJpYnV0ZWQgYnkg RGllZ28gTm92aWxsbyA8ZG5vdmlsbG9AZ29vZ2xlLmNvbT4KCgojIGx0b19p bml0IC0tIGNhbGxlZCBhdCB0aGUgc3RhcnQgb2YgZWFjIHN1YmRpciBvZiB0 ZXN0cwoKcHJvYyBsdG9faW5pdCB7IGFyZ3MgfSB7CiAgICBnbG9iYWwgTFRP X09QVElPTlMKCiAgICAjIEVhY2ggdGVzdCBpcyBydW4gd2l0aCB0aGUgY29t cGlsZXIgb3B0aW9ucyBmcm9tIHRoaXMgbGlzdC4KICAgICMgVGhlIGRlZmF1 bHQgb3B0aW9uIGxpc3RzIGNhbiBiZSBvdmVycmlkZGVuIGJ5IExUT19PUFRJ T05TPSJbbGlzdAogICAgIyB7b3B0c18xfSB7b3B0c18yfS4uLiB7b3B0c19u fV0iIHdoZXJlIG9wdHNfaSBhcmUgbGlzdHMgb2Ygb3B0aW9ucy4KICAgICMg WW91IGNhbiBwdXQgdGhpcyBpbiB0aGUgZW52aXJvbm1lbnQgYmVmb3JlIHNp dGUuZXhwIGlzIHdyaXR0ZW4gb3IKICAgICMgYWRkIGl0IHRvIHNpdGUuZXhw IGRpcmVjdGx5LgogICAgaWYgIVtpbmZvIGV4aXN0cyBMVE9fT1BUSU9OU10g ewoJc2V0IExUT19PUFRJT05TIFtsaXN0CVwKCSAgICB7LU8wIC1md2hvcHJ9 CVwKCSAgICB7LU8yIC1md2hvcHJ9CVwKCSAgICB7LU8wIC1mbHRvfQkJXAoJ ICAgIHstTzIgLWZsdG99CQlcCgkgICAgXQogICAgfQp9CgoKIyBTdWJzZXRz IG9mIHRlc3RzIGNhbiBiZSBzZWxlY3RpdmVseSBkaXNhYmxlZCBieSBtZW1i ZXJzIG9mIHRoaXMgbGlzdDoKIyAgLSBBVFRSSUJVVEU6IGRpc2FibGUgYWxs IHRlc3RzIHVzaW5nIHRoZSBfX2F0dHJpYnV0ZV9fIGV4dGVuc2lvbiwKIyAg LSBDT01QTEVYOiBkaXNhYmxlIGFsbCB0ZXN0cyB1c2luZyB0aGUgY29tcGxl eCB0eXBlcyBmZWF0dXJlLAojICAtIENPTVBMRVhfSU5UOiBkaXNhYmxlIGFs bCB0ZXN0cyB1c2luZyB0aGUgY29tcGxleCBpbnRlZ3JhbCB0eXBlcyBleHRl bnNpb24sCiMgIC0gVkE6IGRpc2FibGUgYWxsIHRlc3RzIHVzaW5nIHRoZSB2 YXJpYWJsZSBudW1iZXIgb2YgYXJndW1lbnRzIGZlYXR1cmUsCiMgIC0gVkxB X0lOX1NUUlVDVDogZGlzYWJsZSBhbGwgdGVzdHMgdXNpbmcgdGhlIHZhcmlh YmxlLWxlbmd0aCBhcnJheXMgYXMKIyAgICBzdHJ1Y3R1cmUgbWVtYmVycyBl eHRlbnNpb24sCiMgIC0gWkVST19BUlJBWTogZGlzYWJsZSBhbGwgdGVzdHMg dXNpbmcgdGhlIHplcm8tc2l6ZWQgYXJyYXlzIGV4dGVuc2lvbi4KIyBUaGUg ZGVmYXVsdCBza2lwIGxpc3RzIGNhbiBiZSBvdmVycmlkZW4gYnkKIyBMVE9f U0tJUFM9IltsaXN0IHtza2lwXzF9Li4ue3NraXBfbn1dIgojIHdoZXJlIHNr aXBfaSBhcmUgc2tpcCBpZGVudGlmaWVycy4gIFlvdSBjYW4gcHV0IHRoaXMg aW4gdGhlIGVudmlyb25tZW50CiMgYmVmb3JlIHNpdGUuZXhwIGlzIHdyaXR0 ZW4gb3IgYWRkIGl0IHRvIHNpdGUuZXhwIGRpcmVjdGx5LgppZiAhW2luZm8g ZXhpc3RzIExUT19TS0lQU10gewogICAgc2V0IExUT19TS0lQUyBbbGlzdCB7 fV0KfQoKZ2xvYmFsIGx0b19za2lwX2xpc3QKc2V0IGx0b19za2lwX2xpc3Qg JExUT19TS0lQUwoKbG9hZF9saWIgZGcuZXhwCmxvYWRfbGliIGdjYy1kZy5l eHAKCiMgbHRvLW9iaiAtLSBjb21waWxlIHRvIGFuIG9iamVjdCBmaWxlCiMK IyBTT1VSQ0UgaXMgdGhlIHNvdXJjZSBmaWxlCiMgREVTVCBpcyB0aGUgb2Jq ZWN0IGZpbGUKIyBPUFRBTEwgaXMgdGhlIGxpc3Qgb2YgY29tcGlsZXIgb3B0 aW9ucyB0byB1c2Ugd2l0aCBhbGwgdGVzdHMKIyBPUFRGSUxFIGlzIHRoZSBs aXN0IG9mIGNvbXBpbGVyIG9wdGlvbnMgdG8gdXNlIHdpdGggdGhpcyBmaWxl CiMgT1BUU1RSIGlzIHRoZSBvcHRpb25zIHRvIHByaW50IHdpdGggdGVzdCBt ZXNzYWdlcwojIFhGQUlMREFUQSBpcyB0aGUgeGZhaWwgZGF0YSB0byBiZSBw YXNzZWQgdG8gdGhlIGNvbXBpbGVyCnByb2MgbHRvLW9iaiB7IHNvdXJjZSBk ZXN0IG9wdGFsbCBvcHRmaWxlIG9wdHN0ciB4ZmFpbGRhdGEgfSB7CiAgICBn bG9iYWwgdGVzdGNhc2UKICAgIGdsb2JhbCB0b29sCiAgICBnbG9iYWwgY29t cGlsZXJfY29uZGl0aW9uYWxfeGZhaWxfZGF0YQogICAgZ2xvYmFsIGx0b19z a2lwX2xpc3QKCiAgICAjIEFkZCB0aGUgc2tpcCBzcGVjaWZpZXJzLgogICAg Zm9yZWFjaCBza2lwICRsdG9fc2tpcF9saXN0IHsKCWlmIHsgIVtzdHJpbmcg bWF0Y2ggJHNraXAgIiJdIH0gewoJICAgIGxhcHBlbmQgb3B0YWxsICItRFNL SVBfJHNraXAiCgl9CiAgICB9CgogICAgIyBTZXQgdXAgdGhlIG9wdGlvbnMg Zm9yIGNvbXBpbGluZyB0aGlzIGZpbGUuCiAgICBzZXQgb3B0aW9ucyAiIgog ICAgbGFwcGVuZCBvcHRpb25zICJhZGRpdGlvbmFsX2ZsYWdzPSRvcHRhbGwg JG9wdGZpbGUiCgogICAgc2V0IGNvbXBpbGVyX2NvbmRpdGlvbmFsX3hmYWls X2RhdGEgJHhmYWlsZGF0YQogICAgc2V0IGNvbXBfb3V0cHV0IFske3Rvb2x9 X3RhcmdldF9jb21waWxlICIkc291cmNlIiAiJGRlc3QiIG9iamVjdCAkb3B0 aW9uc10KICAgICR7dG9vbH1fY2hlY2tfY29tcGlsZSAiJHRlc3RjYXNlICRk ZXN0IGNvbXBpbGUiICRvcHRzdHIgJGRlc3QgJGNvbXBfb3V0cHV0Cn0KCiMg bHRvLWxpbmstYW5kLW1heWJlLXJ1biAtLSBsaW5rIHRoZSBvYmplY3QgZmls ZXMgYW5kIHJ1biB0aGUgZXhlY3V0YWJsZQojIGlmIGNvbXBpbGVfdHlwZSBp cyBzZXQgdG8gInJ1biIKIwojIFRFU1ROQU1FIGlzIHRoZSBtaXh0dXJlIG9m IG9iamVjdCBmaWxlcyB0byBsaW5rCiMgT0JKTElTVCBpcyB0aGUgbGlzdCBv ZiBvYmplY3QgZmlsZXMgdG8gbGluawojIERFU1QgaXMgdGhlIG5hbWUgb2Yg dGhlIGV4ZWN1dGFibGUKIyBPUFRBTEwgaXMgYSBsaXN0IG9mIGNvbXBpbGVy IGFuZCBsaW5rZXIgb3B0aW9ucyB0byB1c2UgZm9yIGFsbCB0ZXN0cwojIE9Q VEZJTEUgaXMgYSBsaXN0IG9mIGNvbXBpbGVyIGFuZCBsaW5rZXIgb3B0aW9u cyB0byB1c2UgZm9yIHRoaXMgdGVzdAojIE9QVFNUUiBpcyB0aGUgbGlzdCBv ZiBvcHRpb25zIHRvIGxpc3QgaW4gbWVzc2FnZXMKcHJvYyBsdG8tbGluay1h bmQtbWF5YmUtcnVuIHsgdGVzdG5hbWUgb2JqbGlzdCBkZXN0IG9wdGFsbCBv cHRmaWxlIG9wdHN0ciB9IHsKICAgIGdsb2JhbCB0ZXN0Y2FzZQogICAgZ2xv YmFsIHRvb2wKICAgIGdsb2JhbCBjb21waWxlX3R5cGUKCiAgICAjIENoZWNr IHRoYXQgYWxsIG9mIHRoZSBvYmplY3RzIHdlcmUgYnVpbHQgc3VjY2Vzc2Z1 bGx5LgogICAgZm9yZWFjaCBvYmogW3NwbGl0ICRvYmpsaXN0XSB7CglpZiAh W2ZpbGVfb25faG9zdCBleGlzdHMgJG9ial0gdGhlbiB7CgkgICAgdW5yZXNv bHZlZCAiJHRlc3RjYXNlICR0ZXN0bmFtZSBsaW5rICRvcHRzdHIiCgkgICAg dW5yZXNvbHZlZCAiJHRlc3RjYXNlICR0ZXN0bmFtZSBleGVjdXRlICRvcHRz dHIiCgkgICAgcmV0dXJuCgl9CiAgICB9CgogICAgIyBTZXQgdXAgdGhlIG9w dGlvbnMgZm9yIGxpbmtpbmcgdGhpcyB0ZXN0LgogICAgc2V0IG9wdGlvbnMg IiIKICAgIGxhcHBlbmQgb3B0aW9ucyAiYWRkaXRpb25hbF9mbGFncz0kb3B0 YWxsICRvcHRmaWxlIgoKICAgICMgTGluayB0aGUgb2JqZWN0cyBpbnRvIGFu IGV4ZWN1dGFibGUuCiAgICBzZXQgY29tcF9vdXRwdXQgWyR7dG9vbH1fdGFy Z2V0X2NvbXBpbGUgIiRvYmpsaXN0IiAkZGVzdCBleGVjdXRhYmxlIFwKCQkg ICAgICIkb3B0aW9ucyJdCiAgICBpZiAhWyR7dG9vbH1fY2hlY2tfY29tcGls ZSAiJHRlc3RjYXNlICR0ZXN0bmFtZSBsaW5rIiAiIiBcCgkgJGRlc3QgJGNv bXBfb3V0cHV0XSB0aGVuIHsKCXVucmVzb2x2ZWQgIiR0ZXN0Y2FzZSAkdGVz dG5hbWUgZXhlY3V0ZSAkb3B0c3RyIgoJcmV0dXJuCiAgICB9CgogICAgIyBS ZXR1cm4gaWYgd2Ugb25seSBuZWVkZWQgdG8gbGluay4KICAgIGlmIHsgIVtz dHJpbmcgY29tcGFyZSAibGluayIgJGNvbXBpbGVfdHlwZV0gfSB7CglyZXR1 cm4KICAgIH0KCiAgICAjIFJ1biB0aGUgc2VsZi1jaGVja2luZyBleGVjdXRh YmxlLgogICAgaWYgIVtzdHJpbmcgbWF0Y2ggIiovKiIgJGRlc3RdIHRoZW4g ewoJc2V0IGRlc3QgIi4vJGRlc3QiCiAgICB9CiAgICBzZXQgcmVzdWx0IFsk e3Rvb2x9X2xvYWQgJGRlc3QgIiIgIiJdCiAgICBzZXQgc3RhdHVzIFtsaW5k ZXggJHJlc3VsdCAwXQogICAgaWYgeyAkc3RhdHVzID09ICJwYXNzIiB9IHRo ZW4gewoJZmlsZV9vbl9ob3N0IGRlbGV0ZSAkZGVzdAogICAgfQogICAgJHN0 YXR1cyAiJHRlc3RjYXNlICR0ZXN0bmFtZSBleGVjdXRlICRvcHRzdHIiCn0K CiMgbHRvLWdldC1vcHRpb25zLW1haW4gLS0gZ2V0IHRhcmdldCByZXF1aXJl bWVudHMgZm9yIGEgdGVzdCBhbmQKIyBvcHRpb25zIGZvciB0aGUgcHJpbWFy eSBzb3VyY2UgZmlsZSBhbmQgdGhlIHRlc3QgYXMgYSB3aG9sZQojCiMgU1JD IGlzIHRoZSBmdWxsIHBhdGhuYW1lIG9mIHRoZSBwcmltYXJ5IHNvdXJjZSBm aWxlLgpwcm9jIGx0by1nZXQtb3B0aW9ucy1tYWluIHsgc3JjIH0gewogICAg Z2xvYmFsIGNvbXBpbGVfdHlwZQogICAgZ2xvYmFsIGRnLWV4dHJhLWxkLW9w dGlvbnMKICAgIGdsb2JhbCBkZy1zdXBwcmVzcy1sZC1vcHRpb25zCgogICAg c2V0IGRnLWV4dHJhLWxkLW9wdGlvbnMgIiIKICAgIHNldCBkZy1zdXBwcmVz cy1sZC1vcHRpb25zICIiCgogICAgIyBkZy1vcHRpb25zIHNldHMgYSB2YXJp YWJsZSBjYWxsZWQgZGctZXh0cmEtdG9vbC1mbGFncy4KICAgIHNldCBkZy1l eHRyYS10b29sLWZsYWdzICIiCgogICAgIyBkZy1vcHRpb25zIHNldHMgYSB2 YXJpYWJsZSBjYWxsZWQgdG9vbF9mbGFncy4KICAgIHNldCB0b29sX2ZsYWdz ICIiCgogICAgIyBkZy1yZXF1aXJlLSogc2V0cyBkZy1kby13aGF0LgogICAg dXB2YXIgZGctZG8td2hhdCBkZy1kby13aGF0IAogICAgdXB2YXIgZGctZmlu YWwtY29kZSBkZy1maW5hbC1jb2RlCiAgICBzZXQgZGctZmluYWwtY29kZSAi IgoKICAgIHNldCB0bXAgW2RnLWdldC1vcHRpb25zICRzcmNdCiAgICB2ZXJi b3NlICJnZXR0aW5nIG9wdGlvbnMgZm9yICRzcmM6ICR0bXAiCiAgICBmb3Jl YWNoIG9wICR0bXAgewoJc2V0IGNtZCBbbGluZGV4ICRvcCAwXQoJdmVyYm9z ZSAiY21kIGlzICRjbWQiCglpZiB7ICFbc3RyaW5nIGNvbXBhcmUgImRnLW9w dGlvbnMiICRjbWRdIFwKCSAgICAgfHwgW3N0cmluZyBtYXRjaCAiZGctc2tp cC1pZiIgJGNtZF0gXAoJICAgICB8fCBbc3RyaW5nIG1hdGNoICJkZy1yZXF1 aXJlLSoiICRjbWRdIH0gewoJICAgIHNldCBzdGF0dXMgW2NhdGNoICIkb3Ai IGVycm1zZ10KCSAgICBpZiB7ICRzdGF0dXMgIT0gMCB9IHsKCQlwZXJyb3Ig InNyYzogJGVycm1zZyBmb3IgXCIkb3BcIlxuIgoJCXVucmVzb2x2ZWQgIiRz cmM6ICRlcnJtc2cgZm9yIFwiJG9wXCIiCgkJcmV0dXJuCgkgICAgfQoJfSBl bHNlaWYgeyAhW3N0cmluZyBjb21wYXJlICJkZy14ZmFpbC1pZiIgJGNtZF0g fSB7CgkgICAgd2FybmluZyAibHRvLmV4cCBkb2VzIG5vdCBzdXBwb3J0ICRj bWQgaW4gcHJpbWFyeSBzb3VyY2UgZmlsZSIKCX0gZWxzZWlmIHsgIVtzdHJp bmcgY29tcGFyZSAiZGctZG8iICRjbWRdIH0gewoJICAgIHNldCBkZ2RvIFts aW5kZXggJG9wIDJdCgkgICAgdmVyYm9zZSAiZGctZG8gY29tbWFuZCBmb3Ig XCIkb3BcIiBpcyAkZGdkbyIKCSAgICBpZiB7ICFbc3RyaW5nIGNvbXBhcmUg ImNvbXBpbGUiICRkZ2RvXSB9IHsKCQlzZXQgY29tcGlsZV90eXBlICJjb21w aWxlIgoJICAgIH0gZWxzZWlmIHsgIVtzdHJpbmcgY29tcGFyZSAicnVuIiAk ZGdkb10gfSB7CgkJc2V0IGNvbXBpbGVfdHlwZSAicnVuIgoJICAgIH0gZWxz ZWlmIHsgIVtzdHJpbmcgY29tcGFyZSAibGluayIgJGRnZG9dIH0gewoJCXNl dCBjb21waWxlX3R5cGUgImxpbmsiCgkgICAgfSBlbHNlIHsKCQl3YXJuaW5n ICJsdG8uZXhwIGRvZXMgbm90IHN1cHBvcnQgZGctZG8gJGRnZG8iCgkgICAg fQoJfSBlbHNlaWYgeyAhW3N0cmluZyBjb21wYXJlICJkZy1leHRyYS1sZC1v cHRpb25zIiAkY21kXSB9IHsKCSAgICBzZXQgZGctZXh0cmEtbGQtb3B0aW9u cyBbbGluZGV4ICRvcCAyXQoJICAgIHZlcmJvc2UgImRnLWV4dHJhLWxkLW9w dGlvbnMgZm9yIG1haW4gaXMgJHtkZy1leHRyYS1sZC1vcHRpb25zfSIKCX0g ZWxzZWlmIHsgIVtzdHJpbmcgY29tcGFyZSAiZGctc3VwcHJlc3MtbGQtb3B0 aW9ucyIgJGNtZF0gfSB7CgkgICAgc2V0IGRnLXN1cHByZXNzLWxkLW9wdGlv bnMgW2xpbmRleCAkb3AgMl0KCSAgICB2ZXJib3NlIFwKCSAgICAgICJkZy1z dXBwcmVzcy1sZC1vcHRpb25zIGZvciBtYWluIGlzICR7ZGctc3VwcHJlc3Mt bGQtb3B0aW9uc30iCgl9IGVsc2VpZiB7ICFbc3RyaW5nIGNvbXBhcmUgImRn LWZpbmFsIiAkY21kXSB9IHsKCSAgICBpZiB7IFtsbGVuZ3RoICRvcF0gPiAz IH0gewoJCWVycm9yICJbbGluZGV4ICRvcCAwXTogdG9vIG1hbnkgYXJndW1l bnRzIgoJICAgIH0gZWxzZSB7CgkJYXBwZW5kIGRnLWZpbmFsLWNvZGUgIlts aW5kZXggJG9wIDJdXG4iCgkgICAgfQoJfSBlbHNlIHsKCSAgICAjIElnbm9y ZSB1bnJlY29nbml6ZWQgZGctIGNvbW1hbmRzLCBidXQgd2FybiBhYm91dCB0 aGVtLgoJICAgIHdhcm5pbmcgImx0by5leHAgZG9lcyBub3Qgc3VwcG9ydCAk Y21kIgoJfQogICAgfQoKICAgICMgUmV0dXJuIGZsYWdzIHRvIHVzZSBmb3Ig Y29tcGlsaW5nIHRoZSBwcmltYXJ5IHNvdXJjZSBmaWxlIGFuZCBmb3IKICAg ICMgbGlua2luZy4KICAgIHZlcmJvc2UgImRnLWV4dHJhLXRvb2wtZmxhZ3Mg Zm9yIG1haW4gaXMgJHtkZy1leHRyYS10b29sLWZsYWdzfSIKICAgIHJldHVy biAke2RnLWV4dHJhLXRvb2wtZmxhZ3N9Cn0KCgojIGx0by1nZXQtb3B0aW9u cyAtLSBnZXQgc3BlY2lhbCB0b29sIGZsYWdzIHRvIHVzZSBmb3IgYSBzZWNv bmRhcnkKIyBzb3VyY2UgZmlsZQojCiMgU1JDIGlzIHRoZSBmdWxsIHBhdGhu YW1lIG9mIHRoZSBzb3VyY2UgZmlsZS4KIyBUaGUgcmVzdWx0IGlzIGEgbGlz dCBvZiBvcHRpb25zIHRvIHVzZS4KIwojIFRoaXMgY29kZSBpcyBjb3BpZWQg ZnJvbSBwcm9jIGRnLXRlc3QgaW4gZGcuZXhwIGZyb20gRGVqYUdOVS4KcHJv YyBsdG8tZ2V0LW9wdGlvbnMgeyBzcmMgfSB7CiAgICAjIGRnLW9wdGlvbnMg c2V0cyBhIHZhcmlhYmxlIGNhbGxlZCBkZy1leHRyYS10b29sLWZsYWdzLgog ICAgc2V0IGRnLWV4dHJhLXRvb2wtZmxhZ3MgIiIKCiAgICAjIGRnLXhmYWls LWlmIHNldHMgY29tcGlsZXJfY29uZGl0aW9uYWxfeGZhaWxfZGF0YS4KICAg IGdsb2JhbCBjb21waWxlcl9jb25kaXRpb25hbF94ZmFpbF9kYXRhCiAgICBz ZXQgY29tcGlsZXJfY29uZGl0aW9uYWxfeGZhaWxfZGF0YSAiIgoKICAgICMg ZGcteGZhaWwtaWYgbmVlZHMgYWNjZXNzIHRvIGRnLWRvLXdoYXQuCiAgICB1 cHZhciBkZy1kby13aGF0IGRnLWRvLXdoYXQgCgogICAgc2V0IHRtcCBbZGct Z2V0LW9wdGlvbnMgJHNyY10KICAgIGZvcmVhY2ggb3AgJHRtcCB7CglzZXQg Y21kIFtsaW5kZXggJG9wIDBdCglpZiB7ICFbc3RyaW5nIGNvbXBhcmUgImRn LW9wdGlvbnMiICRjbWRdIFwKCSAgICAgfHwgIVtzdHJpbmcgY29tcGFyZSAi ZGcteGZhaWwtaWYiICRjbWRdIH0gewoJICAgIHNldCBzdGF0dXMgW2NhdGNo ICIkb3AiIGVycm1zZ10KCSAgICBpZiB7ICRzdGF0dXMgIT0gMCB9IHsKCQlw ZXJyb3IgInNyYzogJGVycm1zZyBmb3IgXCIkb3BcIlxuIgoJCXVucmVzb2x2 ZWQgIiRzcmM6ICRlcnJtc2cgZm9yIFwiJG9wXCIiCgkJcmV0dXJuCgkgICAg fQoJfSBlbHNlaWYgeyBbc3RyaW5nIG1hdGNoICJkZy1yZXF1aXJlLSoiICRj bWRdIH0gewoJICAgIHdhcm5pbmcgImx0by5leHAgZG9lcyBub3Qgc3VwcG9y dCAkY21kIGluIHNlY29uZGFyeSBzb3VyY2UgZmlsZXMiCgl9IGVsc2UgewoJ ICAgICMgSWdub3JlIHVucmVjb2duaXplZCBkZy0gY29tbWFuZHMsIGJ1dCB3 YXJuIGFib3V0IHRoZW0uCgkgICAgd2FybmluZyAibHRvLmV4cCBkb2VzIG5v dCBzdXBwb3J0ICRjbWQgaW4gc2Vjb25kYXJ5IHNvdXJjZSBmaWxlcyIKCX0K ICAgIH0KCiAgICByZXR1cm4gJHtkZy1leHRyYS10b29sLWZsYWdzfQp9Cgoj IGx0by1leGVjdXRlIC0tIGNvbXBpbGUgbXVsdGktZmlsZSB0ZXN0cwojCiMg U1JDMSBpcyB0aGUgZnVsbCBwYXRobmFtZSBvZiB0aGUgbWFpbiBmaWxlIG9m IHRoZSB0ZXN0Y2FzZS4KIyBTSUQgaWRlbnRpZmllcyBhIHRlc3Qgc3VpdGUg aW4gdGhlIG5hbWVzIG9mIHRlbXBvcmFyeSBmaWxlcy4KcHJvYyBsdG8tZXhl Y3V0ZSB7IHNyYzEgc2lkIH0gewogICAgZ2xvYmFsIHNyY2RpciB0bXBkaXIK ICAgIGdsb2JhbCBvcHRpb25fbGlzdAogICAgZ2xvYmFsIHRvb2wKICAgIGds b2JhbCB2ZXJib3NlCiAgICBnbG9iYWwgdGVzdGNhc2UKICAgIGdsb2JhbCBn bHVlZmlsZQogICAgZ2xvYmFsIGNvbXBpbGVyX2NvbmRpdGlvbmFsX3hmYWls X2RhdGEKICAgIGdsb2JhbCBkZy1kby13aGF0LWRlZmF1bHQKICAgIGdsb2Jh bCBjb21waWxlX3R5cGUKICAgIGdsb2JhbCBkZy1leHRyYS1sZC1vcHRpb25z CiAgICBnbG9iYWwgZGctc3VwcHJlc3MtbGQtb3B0aW9ucwogICAgZ2xvYmFs IExUT19PUFRJT05TCiAgICBnbG9iYWwgZGctZmluYWwtY29kZQoKICAgICMg R2V0IGV4dHJhIGZsYWdzIGZvciB0aGlzIHRlc3QgZnJvbSB0aGUgcHJpbWFy eSBzb3VyY2UgZmlsZSwgYW5kCiAgICAjIHByb2Nlc3Mgb3RoZXIgZGctKiBv cHRpb25zIHRoYXQgdGhpcyBzdWl0ZSBzdXBwb3J0cy4gIFdhcm4gYWJvdXQK ICAgICMgdW5zdXBwb3J0ZWQgZmxhZ3MuCiAgICB2ZXJib3NlICJsdG8tZXhl Y3V0ZTogJHNyYzEiIDEKICAgIHNldCBjb21waWxlX3R5cGUgInJ1biIKICAg IHNldCBkZy1kby13aGF0IFtsaXN0ICR7ZGctZG8td2hhdC1kZWZhdWx0fSAi IiBQXQogICAgc2V0IGV4dHJhX2ZsYWdzKDApIFtsdG8tZ2V0LW9wdGlvbnMt bWFpbiAkc3JjMV0KICAgIHNldCBjb21waWxlX3hmYWlsKDApICIiIAoKICAg ICMgSWYgdGhlIG1haW4gZmlsZSBkZWZpbmVzIGRnLW9wdGlvbnMsIHRob3Nl IGZsYWdzIGFyZSB1c2VkIHRvCiAgICAjIG92ZXJ3cml0ZSB0aGUgZGVmYXVs dCBvcHRpb25fbGlzdCB0YWtlbiBmcm9tIExUT19PUFRJT05TLgogICAgaWYg eyBbc3RyaW5nIGxlbmd0aCAkZXh0cmFfZmxhZ3MoMCldID4gMCB9IHsKCXNl dCBvcHRpb25fbGlzdCAkZXh0cmFfZmxhZ3MoMCkKCXNldCBleHRyYV9mbGFn cygwKSAiIgogICAgfSBlbHNlIHsKCXNldCBvcHRpb25fbGlzdCAkTFRPX09Q VElPTlMKICAgIH0KCiAgICAjIENoZWNrIHdoZXRoZXIgdGhpcyB0ZXN0IGlz IHN1cHBvcnRlZCBmb3IgdGhpcyB0YXJnZXQuCiAgICBpZiB7IFtsaW5kZXgg JHtkZy1kby13aGF0fSAxIF0gPT0gIk4iIH0gewoJdW5zdXBwb3J0ZWQgIiRz cmMxIgoJdmVyYm9zZSAiJHNyYzEgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHRh cmdldCwgc2tpcHBpbmcgaXQiIDMKCXJldHVybgogICAgfQoKICAgICMgU2V0 IHVwIHRoZSBuYW1lcyBvZiB0aGUgb3RoZXIgc291cmNlIGZpbGVzLgogICAg c2V0IGRpciBbZmlsZSBkaXJuYW1lICRzcmMxXQogICAgc2V0IGV4dCBbZmls ZSBleHRlbnNpb24gJHNyYzFdCiAgICBzZXQgYmFzZSBbZmlsZSByb290bmFt ZSAkc3JjMV0KICAgIHNldCBiYXNlIFtzdHJpbmcgcmFuZ2UgJGJhc2UgW3N0 cmluZyBsZW5ndGggJGRpcl0gZW5kXQogICAgcmVnc3ViICJfMCIgJGJhc2Ug IiIgYmFzZQogICAgcmVnc3ViICIvIiAkYmFzZSAiIiBiYXNlCiAgICBzZXQg c3JjX2xpc3QgJHNyYzEKICAgIHNldCBpIDEKICAgIHNldCBkb25lIDAKICAg IHdoaWxlIHsgISRkb25lIH0gewoJc2V0IG5hbWUgIiR7ZGlyfS8ke2Jhc2V9 XyR7aX0ke2V4dH0iCglpZiB7IFtmaWxlIGV4aXN0cyAke25hbWV9XSB9IHsK CSAgICBsYXBwZW5kIHNyY19saXN0ICR7bmFtZX0KCSAgICBpbmNyIGkKCX0g ZWxzZSB7CgkgICAgc2V0IG51bV9zcmNzICR7aX0KCSAgICBzZXQgZG9uZSAx Cgl9CiAgICB9CgogICAgIyBVc2UgdGhlIGRnLW9wdGlvbnMgbWVjaGFuaXNt IHRvIHNwZWNpZnkgZXh0cmEgZmxhZ3MgZm9yIGVhY2gKICAgICMgb2YgdGhl IHNlY29uZGFyeSBmaWxlcy4KICAgICMgVGhlIGV4dHJhIGZsYWdzIGluIGVh Y2ggZmlsZSBhcmUgdXNlZCB0byBjb21waWxlIHRoYXQgZmlsZSwgYW5kIHRo ZQogICAgIyBleHRyYSBmbGFncyBpbiAqXzAuKiBhcmUgYWxzbyB1c2VkIGZv ciBsaW5raW5nLgogICAgdmVyYm9zZSAiXHRzcmNfbGlzdCBpczogJHNyY19s aXN0IgogICAgZm9yIHtzZXQgaSAxfSB7JGkgPCAkbnVtX3NyY3N9IHtpbmNy IGl9IHsKCXNldCBleHRyYV9mbGFncygkaSkgW2x0by1nZXQtb3B0aW9ucyBb bGluZGV4ICRzcmNfbGlzdCAkaV1dCglzZXQgY29tcGlsZV94ZmFpbCgkaSkg JGNvbXBpbGVyX2NvbmRpdGlvbmFsX3hmYWlsX2RhdGEKICAgIH0KCiAgICAj IERlZmluZSB0aGUgbmFtZXMgb2YgdGhlIG9iamVjdCBmaWxlcy4KICAgIHNl dCBvYmpfbGlzdCAiIgogICAgZm9yIHtzZXQgaSAwfSB7JGkgPCAkbnVtX3Ny Y3N9IHtpbmNyIGl9IHsKCWxhcHBlbmQgb2JqX2xpc3QgIiR7c2lkfV8ke2Jh c2V9XyR7aX0ubyIKICAgIH0KCiAgICAjIEdldCB0aGUgYmFzZSBuYW1lIG9m IHRoaXMgdGVzdCwgZm9yIHVzZSBpbiBtZXNzYWdlcy4KICAgIHNldCB0ZXN0 Y2FzZSBbbGluZGV4ICR7c3JjX2xpc3R9IDBdCgogICAgIyBSZW1vdmUgdGhl ICRzcmNkaXIgYW5kICR0bXBkaXIgcHJlZml4ZXMgZnJvbSAkc3JjMS4gIChJ dCB3b3VsZAogICAgIyBiZSBwb3NzaWJsZSB0byB1c2UgInJlZ3N1YiIgaGVy ZSwgaWYgd2Ugd2VyZSBjYXJlZnVsIHRvIGVzY2FwZQogICAgIyBhbGwgcmVn dWxhciBleHByZXNzaW9uIGNoYXJhY3RlcnMgaW4gJHNyY2RpciBhbmQgJHRt cGRpciwgYnV0CiAgICAjIHRoYXQgd291bGQgYmUgbW9yZSBjb21wbGljYXRl ZCB0aGF0IHRoaXMgYXBwcm9hY2guKSAKICAgIGlmIHtbc3RyaW5nIGZpcnN0 ICIkc3JjZGlyLyIgIiR7dGVzdGNhc2V9Il0gPT0gMH0gewoJc2V0IHRlc3Rj YXNlIFtzdHJpbmcgcmFuZ2UgIiR7dGVzdGNhc2V9IiBbc3RyaW5nIGxlbmd0 aCAiJHNyY2Rpci8iXSBlbmRdCiAgICB9CiAgICBpZiB7W3N0cmluZyBmaXJz dCAiJHRtcGRpci8iICIkdGVzdGNhc2UiXSA9PSAwfSB7CglzZXQgdGVzdGNh c2UgW3N0cmluZyByYW5nZSAiJHRlc3RjYXNlIiBbc3RyaW5nIGxlbmd0aCAi JHRtcGRpci8iXSBlbmRdCglzZXQgdGVzdGNhc2UgInRtcGRpci0kdGVzdGNh c2UiCiAgICB9CiAgICByZWdzdWIgIl8wLioiICR0ZXN0Y2FzZSAiIiB0ZXN0 Y2FzZQoKICAgICMgU2V0IHVwIHRoZSBiYXNlIG5hbWUgb2YgZXhlY3V0YWJs ZSBmaWxlcyBzbyB0aGV5J2xsIGJlIHVuaXF1ZS4KICAgIHJlZ3N1YiAtYWxs ICJcWy4vXF0iICR0ZXN0Y2FzZSAiLSIgZXhlY2Jhc2UKCiAgICAjIElmIHdl IGNvdWxkbid0IHJpcCAkc3JjZGlyIG91dCBvZiBgc3JjMScgdGhlbiBqdXN0 IGRvIHRoZSBiZXN0IHdlIGNhbi4KICAgICMgVGhlIHBvaW50IGlzIHRvIHJl ZHVjZSB0aGUgdW5uZWNlc3Nhcnkgbm9pc2UgaW4gdGhlIGxvZ3MuICBEb24n dCBzdHJpcAogICAgIyBvdXQgdG9vIG11Y2ggYmVjYXVzZSBkaWZmZXJlbnQg dGVzdGNhc2VzIHdpdGggdGhlIHNhbWUgbmFtZSBjYW4gY29uZnVzZQogICAg IyBgdGVzdC10b29sJy4KICAgIGlmIFtzdHJpbmcgbWF0Y2ggIi8qIiAkdGVz dGNhc2VdIHRoZW4gewogICAgICAgIHNldCB0ZXN0Y2FzZSAiW2ZpbGUgdGFp bCBbZmlsZSBkaXJuYW1lICRzcmMxXV0vW2ZpbGUgdGFpbCAkc3JjMV0iCiAg ICB9CgogICAgIyBMb29wIHRocm91Z2ggYWxsIG9mIHRoZSBvcHRpb24gbGlz dHMgdXNlZCBmb3IgdGhpcyB0ZXN0LgogICAgc2V0IGNvdW50IDAKICAgIGZv cmVhY2ggb3B0aW9uICRvcHRpb25fbGlzdCB7Cgl2ZXJib3NlICJUZXN0aW5n ICR0ZXN0Y2FzZSwgJG9wdGlvbiIKCgkjIFRoZXJlJ3MgYSB1bmlxdWUgbmFt ZSBmb3IgZWFjaCBleGVjdXRhYmxlIHdlIGdlbmVyYXRlLgoJc2V0IGV4ZWNu YW1lICIke2V4ZWNiYXNlfS0ke2NvdW50fTEiCglpbmNyIGNvdW50CgoJZmls ZV9vbl9ob3N0IGRlbGV0ZSAkZXhlY25hbWUKCgkjIENvbXBpbGUgcGllY2Vz IHdpdGggdGhlIGNvbXBpbGVyIHVuZGVyIHRlc3QuCglzZXQgaSAwCglmb3Jl YWNoIHNyYyAkc3JjX2xpc3Qgb2JqICRvYmpfbGlzdCB7CgkgICAgbHRvLW9i aiAkc3JjICRvYmogJG9wdGlvbiAkZXh0cmFfZmxhZ3MoJGkpICRvcHRpb24g XAoJCSAgICAkY29tcGlsZV94ZmFpbCgkaSkKCSAgICBpbmNyIGkKCX0KCgkj IExpbmsgKHVzaW5nIHRoZSBjb21waWxlciB1bmRlciB0ZXN0KSwgcnVuLCBh bmQgY2xlYW4gdXAgdGVzdHMuCglpZiB7ICFbc3RyaW5nIGNvbXBhcmUgInJ1 biIgJGNvbXBpbGVfdHlwZV0gXAoJICAgICB8fCAhW3N0cmluZyBjb21wYXJl ICJsaW5rIiAkY29tcGlsZV90eXBlXSB9IHsKCgkgICAgIyBGaWx0ZXIgb3V0 IGFueSBsaW5rIG9wdGlvbnMgd2Ugd2VyZSBhc2tlZCB0byBzdXBwcmVzcy4K CSAgICBzZXQgcmVkdWNlZCB7fQoJICAgIGZvcmVhY2ggeCBbc3BsaXQgJG9w dGlvbl0gewoJICAgICAgaWYge1tsc2VhcmNoICR7ZGctc3VwcHJlc3MtbGQt b3B0aW9uc30gJHhdID09IC0xfSB7CgkJbGFwcGVuZCByZWR1Y2VkICR4Cgkg ICAgICB9CgkgICAgfQoJICAgIHNldCBmaWx0ZXJlZCBbam9pbiAkcmVkdWNl ZCAiICJdCgoJICAgIGx0by1saW5rLWFuZC1tYXliZS1ydW4gXAoJCSAgICAi W2xpbmRleCAkb2JqX2xpc3QgMF0tW2xpbmRleCAkb2JqX2xpc3QgZW5kXSIg XAoJCSAgICAkb2JqX2xpc3QgJGV4ZWNuYW1lICRmaWx0ZXJlZCAke2RnLWV4 dHJhLWxkLW9wdGlvbnN9IFwKCQkgICAgJGZpbHRlcmVkCgl9CgoKCSMgQXJl IHRoZXJlIGFueSBmdXJ0aGVyIHRlc3RzIHRvIHBlcmZvcm0/CgkjIE5vdGUg dGhhdCBpZiB0aGUgcHJvZ3JhbSBoYXMgc3BlY2lhbCBydW4tdGltZSByZXF1 aXJlbWVudHMsIHJ1bm5pbmcKCSMgb2YgdGhlIHByb2dyYW0gY2FuIGJlIGRl bGF5ZWQgdW50aWwgaGVyZS4gIERpdHRvIGZvciBvdGhlciBzaXR1YXRpb25z LgoJIyBJdCB3b3VsZCBiZSBhIGJpdCBjdW1iZXJzb21lIHRob3VnaC4KCglp ZiAhW3N0cmluZyBtYXRjaCAke2RnLWZpbmFsLWNvZGV9ICIiXSB7CgkgICAg cmVnc3ViIC1hbGwgIlxcXFwoXFt7fVxdKSIgJHtkZy1maW5hbC1jb2RlfSAi XFwxIiBkZy1maW5hbC1jb2RlCgkgICAgIyBOb3RlIHRoYXQgdGhlIHVzZSBv ZiBgYXJncycgaGVyZSBtYWtlcyB0aGlzIGEgdmFyYXJncyBwcm9jLgoJICAg IHByb2MgZGctZmluYWwtcHJvYyB7IGFyZ3MgfSAke2RnLWZpbmFsLWNvZGV9 CgkgICAgdmVyYm9zZSAiUnVubmluZyBkZy1maW5hbCB0ZXN0cy4iIDMKCSAg ICB2ZXJib3NlICJkZy1maW5hbC1wcm9jOlxuW2luZm8gYm9keSBkZy1maW5h bC1wcm9jXSIgNAoJICAgIGlmIFtjYXRjaCAiZGctZmluYWwtcHJvYyAkc3Jj MSIgZXJybXNnXSB7CgkJcGVycm9yICIkbmFtZTogZXJyb3IgZXhlY3V0aW5n IGRnLWZpbmFsOiAkZXJybXNnIgoJCSMgPz8/IFRoZSBjYWxsIHRvIHVucmVz b2x2ZWQgaGVyZSBpcyBuZWNlc3NhcnkgdG8gY2xlYXIKCQkjIGBlcnJjbnQn LiAgV2hhdCB3ZSByZWFsbHkgbmVlZCBpcyBhIHByb2MgbGlrZSBwZXJyb3Ig dGhhdAoJCSMgZG9lc24ndCBzZXQgZXJyY250LiAgSXQgc2hvdWxkIGFsc28g c2V0IGV4aXRfc3RhdHVzIHRvIDEuCgkJdW5yZXNvbHZlZCAiJG5hbWU6IGVy cm9yIGV4ZWN1dGluZyBkZy1maW5hbDogJGVycm1zZyIKCSAgICB9Cgl9CgoJ IyBDbGVhbiB1cCBvYmplY3QgZmlsZXMuCglzZXQgZmlsZXMgW2dsb2IgLW5v Y29tcGxhaW4gJHtzaWR9Xyoub10KCWlmIHsgJGZpbGVzICE9ICIiIH0gewoJ ICAgIGZvcmVhY2ggb2JqZmlsZSAkZmlsZXMgewoJCWlmIHsgIVtpbmZvIGV4 aXN0cyBnbHVlZmlsZV0gfHwgJG9iamZpbGUgIT0gJGdsdWVmaWxlIH0gewoJ CSAgICBldmFsICJmaWxlX29uX2hvc3QgZGVsZXRlICRvYmpmaWxlIgoJCX0K CSAgICB9Cgl9CiAgICB9Cn0KCiMgVXRpbGl0eSBmb3Igc2Nhbm5pbmcgYSBz eW1ib2wgaW4gdGhlIGZpbmFsIGV4ZWN1dGFibGUsIGludm9rZWQgdmlhIGRn LWZpbmFsLgojIENhbGwgcGFzcyBpZiBwYXR0ZXJuIGlzIHByZXNlbnQsIG90 aGVyd2lzZSBmYWlsLgojCiMgQXJndW1lbnQgMCBpcyB0aGUgcmVnZXhwIHRv IG1hdGNoLgojIEFyZ3VtZW50IDEgaGFuZGxlcyBleHBlY3RlZCBmYWlsdXJl cyBhbmQgdGhlIGxpa2UKcHJvYyBzY2FuLXN5bWJvbCB7IGFyZ3MgfSB7CiAg ICBnbG9iYWwgbm0KICAgIGdsb2JhbCBiYXNlX2RpcgogICAgdXB2YXIgMiBl eGVjbmFtZSBleGVjbmFtZQoKICAgIGlmIHsgW2xsZW5ndGggJGFyZ3NdID49 IDIgfSB7Cglzd2l0Y2ggW2RnLXByb2Nlc3MtdGFyZ2V0IFtsaW5kZXggJGFy Z3MgMV1dIHsKCSAgICAiUyIgeyB9CgkgICAgIk4iIHsgcmV0dXJuIH0KCSAg ICAiRiIgeyBzZXR1cF94ZmFpbCAiKi0qLSoiIH0KCSAgICAiUCIgeyB9Cgl9 CiAgICB9CgogICAgIyBGaW5kIG5tIGxpa2Ugd2UgZmluZCBnKysgaW4gZysr LmV4cC4KICAgIGlmICFbaW5mbyBleGlzdHMgbm1dICB7CglzZXQgbm0gW2Zp bmRmaWxlICRiYXNlX2Rpci8uLi8uLi8uLi9iaW51dGlscy9ubSBcCgkJJGJh c2VfZGlyLy4uLy4uLy4uL2JpbnV0aWxzL25tIFwKCSAgICAgICAgW2ZpbmRm aWxlICRiYXNlX2Rpci8uLi8uLi9ubSAkYmFzZV9kaXIvLi4vLi4vbm0gXAoJ CSAgICAgIFtmaW5kZmlsZSAkYmFzZV9kaXIvbm0gJGJhc2VfZGlyL25tIFwK CQkgICAgICAgW3RyYW5zZm9ybSBubV1dXV0KCXZlcmJvc2UgLWxvZyAibm0g aXMgJG5tIgogICAgfQoKICAgIHNldCBvdXRwdXRfZmlsZSAkZXhlY25hbWUK ICAgIGlmIHsgJG91dHB1dF9maWxlID09ICIiIH0gewoJZmFpbCAic2Nhbi1z eW1ib2wgJGFyZ3M6IGR1bXAgZmlsZSBkb2VzIG5vdCBleGlzdCIKCXJldHVy bgogICAgfQoKICAgIHNldCBmZCBbb3BlbiAifCAkbm0gJG91dHB1dF9maWxl IiByXQogICAgc2V0IHRleHQgW3JlYWQgJGZkXQogICAgY2xvc2UgJGZkCgog ICAgaWYgW3JlZ2V4cCAtLSBbbGluZGV4ICRhcmdzIDBdICR0ZXh0XSB7Cglw YXNzICJzY2FuLXN5bWJvbCAkYXJncyIKICAgIH0gZWxzZSB7CglmYWlsICJz Y2FuLXN5bWJvbCAkYXJncyIKICAgIH0KfQo= --0016e6d59e1f92fe91046a44c132--