From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-0.6 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 859E6C10DCE for ; Fri, 6 Mar 2020 15:22:50 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 507802073B for ; Fri, 6 Mar 2020 15:22:50 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="RcETT0MM" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 507802073B Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:38104 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jAEoL-0003uw-5R for qemu-devel@archiver.kernel.org; Fri, 06 Mar 2020 10:22:49 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:47210) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jAEnd-0003O8-ID for qemu-devel@nongnu.org; Fri, 06 Mar 2020 10:22:06 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jAEnb-00045X-NK for qemu-devel@nongnu.org; Fri, 06 Mar 2020 10:22:04 -0500 Received: from us-smtp-delivery-1.mimecast.com ([207.211.31.120]:54498 helo=us-smtp-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1jAEnb-000437-HW for qemu-devel@nongnu.org; Fri, 06 Mar 2020 10:22:03 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1583508122; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=M3W7qv0j/eoCvAaFdDDrXED6dNJGR9cDFQwpXqUHHuQ=; b=RcETT0MMQxDYgbY4QCyn8Ds2ZL/Unvu+OZO5F18pd3SDz8OkWI2eUHoFBL/Iuidz4mQv8q 60LM0FP0P7ZC5T64VXPe2WqXQViXiAuJXG+RWyUqrWznLbjshZPu0C/VBnxlCARDtAx8eX 1K111Vsp4JtEF4sXmltIcBCBJLpFgDc= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-433-DDz5roYpNAqFxwcKzusvlg-1; Fri, 06 Mar 2020 10:21:58 -0500 X-MC-Unique: DDz5roYpNAqFxwcKzusvlg-1 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 6895896EFD; Fri, 6 Mar 2020 15:21:56 +0000 (UTC) Received: from blackfin.pond.sub.org (ovpn-116-129.ams2.redhat.com [10.36.116.129]) by smtp.corp.redhat.com (Postfix) with ESMTPS id E8D1B5C21B; Fri, 6 Mar 2020 15:21:50 +0000 (UTC) Received: by blackfin.pond.sub.org (Postfix, from userid 1000) id 7712711386A6; Fri, 6 Mar 2020 16:21:49 +0100 (CET) From: Markus Armbruster To: Vladimir Sementsov-Ogievskiy Subject: Re: [PATCH v8 00/10] error: auto propagated local_err part I References: <20200306051536.27803-1-vsementsov@virtuozzo.com> Date: Fri, 06 Mar 2020 16:21:49 +0100 In-Reply-To: <20200306051536.27803-1-vsementsov@virtuozzo.com> (Vladimir Sementsov-Ogievskiy's message of "Fri, 6 Mar 2020 08:15:26 +0300") Message-ID: <87eeu51pbm.fsf@dusky.pond.sub.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux) MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 207.211.31.120 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , Stefano Stabellini , Michael Roth , qemu-block@nongnu.org, Paul Durrant , Laszlo Ersek , Christian Schoenebeck , qemu-devel@nongnu.org, Greg Kurz , Gerd Hoffmann , Stefan Hajnoczi , Anthony Perard , xen-devel@lists.xenproject.org, Max Reitz , Philippe =?utf-8?Q?Mathieu-Daud=C3=A9?= , Stefan Berger Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" Vladimir Sementsov-Ogievskiy writes: > File with errp-cleaning APIs dropped for two reasons: > > 1. I'm tired after a 3-days war with coccinelle, and don't want to add mo= re > patches here. Oww. In my experience, Coccinelle is both awesome and terrible. I hope you didn't do all that work just to address minor complaints from me. I *try* to make it clear where on the spectrum from "I want you to improve this" to "perhaps you'd like to try this idea" my review comments are, but I'm certainly not perfect there. Anyway, here we are, so let's look at the patches. > 2. Markus noted, that we forget two more functions which needs such wrapp= ers > and corresponding conversion, so seems better to handle all these thin= gs > in same manner for now. > > changes in v8: > > 01: - update comments > - fix bug in macro [Markus] > - use do {} while(0) > > 02: a lot of changes > - about error propagation: try to update only patterns where we propa= gate > local_error to errp. So, patches 09 and 10 changed (wow!) > - Now clearing functions are not defined. Still, do the conversion, s= o > that when script applied where these functions needed, compilation = will > be broken. > - improve ordering of hunks, and comment everything > > 09,10: drop hunks, which are converted for nothing. Quick eye-over: you no longer wrap nbd_co_receive_cmdread_reply(), nbd_co_receive_blockstatus_reply(), and xen_bus_realize(). Clearly better. > v8 is available at > https://src.openvz.org/scm/~vsementsov/qemu.git #tag up-auto-local-err-p= artI-v8 > v7 is available at > https://src.openvz.org/scm/~vsementsov/qemu.git #tag up-auto-local-err-p= artI-v7 > =20 > In these series, there is no commit-per-subsystem script, each generated > commit is generated in separate. > > Still, generating commands are very similar, and looks like > > sed -n '/^$/,/^$/{s/^F: //p}' MAINTAINERS | \ > xargs git ls-files | grep '\.[hc]$' | \ > xargs spatch \ > --sp-file scripts/coccinelle/auto-propagated-errp.cocci \ > --macro-file scripts/cocci-macro-file.h \ > --in-place --no-show-diff --max-width 80 > > Note, that in each generated commit, generation command is the only > text, indented by 8 spaces in 'git log -1' output, so, to regenerate all > commits (for example, after rebase, or change in coccinelle script), you > may use the following command: > > git rebase -x "sh -c \"git show --pretty=3D --name-only | xargs git check= out HEAD^ -- ; git reset; git log -1 | grep '^ ' | sh\"" HEAD~7 > > Which will start automated interactive rebase for generated patches, > which will stop if generated patch changed > (you may do git commit --amend to apply updated generated changes). > > Note: > git show --pretty=3D --name-only - lists files, changed in HEAD > git log -1 | grep '^ ' | sh - rerun generation command of HEAD > > > Check for compilation of changed .c files > git rebase -x "sh -c \"git show --pretty=3D --name-only | sed -n 's/\.c$/= .o/p' | xargs make -j9\"" HEAD~7 Thanks for the write-up! From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-0.6 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 86161C10DCE for ; Fri, 6 Mar 2020 15:22:25 +0000 (UTC) Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 581D52073B for ; Fri, 6 Mar 2020 15:22:25 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="RcETT0MM" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 581D52073B Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=xen-devel-bounces@lists.xenproject.org Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1jAEnc-0007KU-FC; Fri, 06 Mar 2020 15:22:04 +0000 Received: from all-amaz-eas1.inumbo.com ([34.197.232.57] helo=us1-amaz-eas2.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1jAEnb-0007KP-Ml for xen-devel@lists.xenproject.org; Fri, 06 Mar 2020 15:22:03 +0000 X-Inumbo-ID: 3acd6cea-5fbe-11ea-a80d-12813bfff9fa Received: from us-smtp-delivery-1.mimecast.com (unknown [207.211.31.120]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTP id 3acd6cea-5fbe-11ea-a80d-12813bfff9fa; Fri, 06 Mar 2020 15:22:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1583508122; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=M3W7qv0j/eoCvAaFdDDrXED6dNJGR9cDFQwpXqUHHuQ=; b=RcETT0MMQxDYgbY4QCyn8Ds2ZL/Unvu+OZO5F18pd3SDz8OkWI2eUHoFBL/Iuidz4mQv8q 60LM0FP0P7ZC5T64VXPe2WqXQViXiAuJXG+RWyUqrWznLbjshZPu0C/VBnxlCARDtAx8eX 1K111Vsp4JtEF4sXmltIcBCBJLpFgDc= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-433-DDz5roYpNAqFxwcKzusvlg-1; Fri, 06 Mar 2020 10:21:58 -0500 X-MC-Unique: DDz5roYpNAqFxwcKzusvlg-1 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 6895896EFD; Fri, 6 Mar 2020 15:21:56 +0000 (UTC) Received: from blackfin.pond.sub.org (ovpn-116-129.ams2.redhat.com [10.36.116.129]) by smtp.corp.redhat.com (Postfix) with ESMTPS id E8D1B5C21B; Fri, 6 Mar 2020 15:21:50 +0000 (UTC) Received: by blackfin.pond.sub.org (Postfix, from userid 1000) id 7712711386A6; Fri, 6 Mar 2020 16:21:49 +0100 (CET) From: Markus Armbruster To: Vladimir Sementsov-Ogievskiy References: <20200306051536.27803-1-vsementsov@virtuozzo.com> Date: Fri, 06 Mar 2020 16:21:49 +0100 In-Reply-To: <20200306051536.27803-1-vsementsov@virtuozzo.com> (Vladimir Sementsov-Ogievskiy's message of "Fri, 6 Mar 2020 08:15:26 +0300") Message-ID: <87eeu51pbm.fsf@dusky.pond.sub.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux) MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Subject: Re: [Xen-devel] [PATCH v8 00/10] error: auto propagated local_err part I X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , Stefano Stabellini , Michael Roth , qemu-block@nongnu.org, Paul Durrant , Laszlo Ersek , Christian Schoenebeck , qemu-devel@nongnu.org, Greg Kurz , Gerd Hoffmann , Stefan Hajnoczi , Anthony Perard , xen-devel@lists.xenproject.org, Max Reitz , Philippe =?utf-8?Q?Mathieu-Daud=C3=A9?= , Stefan Berger Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" VmxhZGltaXIgU2VtZW50c292LU9naWV2c2tpeSA8dnNlbWVudHNvdkB2aXJ0dW96em8uY29tPiB3 cml0ZXM6Cgo+IEZpbGUgd2l0aCBlcnJwLWNsZWFuaW5nIEFQSXMgZHJvcHBlZCBmb3IgdHdvIHJl YXNvbnM6Cj4KPiAxLiBJJ20gdGlyZWQgYWZ0ZXIgYSAzLWRheXMgd2FyIHdpdGggY29jY2luZWxs ZSwgYW5kIGRvbid0IHdhbnQgdG8gYWRkIG1vcmUKPiAgICBwYXRjaGVzIGhlcmUuCgpPd3cuICBJ biBteSBleHBlcmllbmNlLCBDb2NjaW5lbGxlIGlzIGJvdGggYXdlc29tZSBhbmQgdGVycmlibGUu ICBJIGhvcGUKeW91IGRpZG4ndCBkbyBhbGwgdGhhdCB3b3JrIGp1c3QgdG8gYWRkcmVzcyBtaW5v ciBjb21wbGFpbnRzIGZyb20gbWUuICBJCip0cnkqIHRvIG1ha2UgaXQgY2xlYXIgd2hlcmUgb24g dGhlIHNwZWN0cnVtIGZyb20gIkkgd2FudCB5b3UgdG8gaW1wcm92ZQp0aGlzIiB0byAicGVyaGFw cyB5b3UnZCBsaWtlIHRvIHRyeSB0aGlzIGlkZWEiIG15IHJldmlldyBjb21tZW50cyBhcmUsCmJ1 dCBJJ20gY2VydGFpbmx5IG5vdCBwZXJmZWN0IHRoZXJlLiAgQW55d2F5LCBoZXJlIHdlIGFyZSwg c28gbGV0J3MgbG9vawphdCB0aGUgcGF0Y2hlcy4KCj4gMi4gTWFya3VzIG5vdGVkLCB0aGF0IHdl IGZvcmdldCB0d28gbW9yZSBmdW5jdGlvbnMgd2hpY2ggbmVlZHMgc3VjaCB3cmFwcGVycwo+ICAg IGFuZCBjb3JyZXNwb25kaW5nIGNvbnZlcnNpb24sIHNvIHNlZW1zIGJldHRlciB0byBoYW5kbGUg YWxsIHRoZXNlIHRoaW5ncwo+ICAgIGluIHNhbWUgbWFubmVyIGZvciBub3cuCj4KPiBjaGFuZ2Vz IGluIHY4Ogo+Cj4gMDE6IC0gdXBkYXRlIGNvbW1lbnRzCj4gICAgIC0gZml4IGJ1ZyBpbiBtYWNy byBbTWFya3VzXQo+ICAgICAtIHVzZSBkbyB7fSB3aGlsZSgwKQo+Cj4gMDI6IGEgbG90IG9mIGNo YW5nZXMKPiAgICAgLSBhYm91dCBlcnJvciBwcm9wYWdhdGlvbjogdHJ5IHRvIHVwZGF0ZSBvbmx5 IHBhdHRlcm5zIHdoZXJlIHdlIHByb3BhZ2F0ZQo+ICAgICAgIGxvY2FsX2Vycm9yIHRvIGVycnAu IFNvLCBwYXRjaGVzIDA5IGFuZCAxMCBjaGFuZ2VkICh3b3chKQo+ICAgICAtIE5vdyBjbGVhcmlu ZyBmdW5jdGlvbnMgYXJlIG5vdCBkZWZpbmVkLiBTdGlsbCwgZG8gdGhlIGNvbnZlcnNpb24sIHNv Cj4gICAgICAgdGhhdCB3aGVuIHNjcmlwdCBhcHBsaWVkIHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBu ZWVkZWQsIGNvbXBpbGF0aW9uIHdpbGwKPiAgICAgICBiZSBicm9rZW4uCj4gICAgIC0gaW1wcm92 ZSBvcmRlcmluZyBvZiBodW5rcywgYW5kIGNvbW1lbnQgZXZlcnl0aGluZwo+Cj4gMDksMTA6IGRy b3AgaHVua3MsIHdoaWNoIGFyZSBjb252ZXJ0ZWQgZm9yIG5vdGhpbmcuCgpRdWljayBleWUtb3Zl cjogeW91IG5vIGxvbmdlciB3cmFwIG5iZF9jb19yZWNlaXZlX2NtZHJlYWRfcmVwbHkoKSwKbmJk X2NvX3JlY2VpdmVfYmxvY2tzdGF0dXNfcmVwbHkoKSwgYW5kIHhlbl9idXNfcmVhbGl6ZSgpLiAg Q2xlYXJseQpiZXR0ZXIuCgo+IHY4IGlzIGF2YWlsYWJsZSBhdAo+ICBodHRwczovL3NyYy5vcGVu dnoub3JnL3NjbS9+dnNlbWVudHNvdi9xZW11LmdpdCAjdGFnIHVwLWF1dG8tbG9jYWwtZXJyLXBh cnRJLXY4Cj4gdjcgaXMgYXZhaWxhYmxlIGF0Cj4gIGh0dHBzOi8vc3JjLm9wZW52ei5vcmcvc2Nt L352c2VtZW50c292L3FlbXUuZ2l0ICN0YWcgdXAtYXV0by1sb2NhbC1lcnItcGFydEktdjcKPiAg Cj4gSW4gdGhlc2Ugc2VyaWVzLCB0aGVyZSBpcyBubyBjb21taXQtcGVyLXN1YnN5c3RlbSBzY3Jp cHQsIGVhY2ggZ2VuZXJhdGVkCj4gY29tbWl0IGlzIGdlbmVyYXRlZCBpbiBzZXBhcmF0ZS4KPgo+ IFN0aWxsLCBnZW5lcmF0aW5nIGNvbW1hbmRzIGFyZSB2ZXJ5IHNpbWlsYXIsIGFuZCBsb29rcyBs aWtlCj4KPiAgICAgc2VkIC1uICcvXjxTdWJzeXN0ZW0gbmFtZT4kLywvXiQve3MvXkY6IC8vcH0n IE1BSU5UQUlORVJTIHwgXAo+ICAgICB4YXJncyBnaXQgbHMtZmlsZXMgfCBncmVwICdcLltoY10k JyB8IFwKPiAgICAgeGFyZ3Mgc3BhdGNoIFwKPiAgICAgICAgIC0tc3AtZmlsZSBzY3JpcHRzL2Nv Y2NpbmVsbGUvYXV0by1wcm9wYWdhdGVkLWVycnAuY29jY2kgXAo+ICAgICAgICAgLS1tYWNyby1m aWxlIHNjcmlwdHMvY29jY2ktbWFjcm8tZmlsZS5oIFwKPiAgICAgICAgIC0taW4tcGxhY2UgLS1u by1zaG93LWRpZmYgLS1tYXgtd2lkdGggODAKPgo+IE5vdGUsIHRoYXQgaW4gZWFjaCBnZW5lcmF0 ZWQgY29tbWl0LCBnZW5lcmF0aW9uIGNvbW1hbmQgaXMgdGhlIG9ubHkKPiB0ZXh0LCBpbmRlbnRl ZCBieSA4IHNwYWNlcyBpbiAnZ2l0IGxvZyAtMScgb3V0cHV0LCBzbywgdG8gcmVnZW5lcmF0ZSBh bGwKPiBjb21taXRzIChmb3IgZXhhbXBsZSwgYWZ0ZXIgcmViYXNlLCBvciBjaGFuZ2UgaW4gY29j Y2luZWxsZSBzY3JpcHQpLCB5b3UKPiBtYXkgdXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKPgo+ IGdpdCByZWJhc2UgLXggInNoIC1jIFwiZ2l0IHNob3cgLS1wcmV0dHk9IC0tbmFtZS1vbmx5IHwg eGFyZ3MgZ2l0IGNoZWNrb3V0IEhFQUReIC0tIDsgZ2l0IHJlc2V0OyBnaXQgbG9nIC0xIHwgZ3Jl cCAnXiAgICAgICAgJyB8IHNoXCIiIEhFQUR+Nwo+Cj4gV2hpY2ggd2lsbCBzdGFydCBhdXRvbWF0 ZWQgaW50ZXJhY3RpdmUgcmViYXNlIGZvciBnZW5lcmF0ZWQgcGF0Y2hlcywKPiB3aGljaCB3aWxs IHN0b3AgaWYgZ2VuZXJhdGVkIHBhdGNoIGNoYW5nZWQKPiAoeW91IG1heSBkbyBnaXQgY29tbWl0 IC0tYW1lbmQgdG8gYXBwbHkgdXBkYXRlZCBnZW5lcmF0ZWQgY2hhbmdlcykuCj4KPiBOb3RlOgo+ ICAgZ2l0IHNob3cgLS1wcmV0dHk9IC0tbmFtZS1vbmx5ICAgLSBsaXN0cyBmaWxlcywgY2hhbmdl ZCBpbiBIRUFECj4gICBnaXQgbG9nIC0xIHwgZ3JlcCAnXiAgICAgICAgJyB8IHNoICAgLSByZXJ1 biBnZW5lcmF0aW9uIGNvbW1hbmQgb2YgSEVBRAo+Cj4KPiBDaGVjayBmb3IgY29tcGlsYXRpb24g b2YgY2hhbmdlZCAuYyBmaWxlcwo+IGdpdCByZWJhc2UgLXggInNoIC1jIFwiZ2l0IHNob3cgLS1w cmV0dHk9IC0tbmFtZS1vbmx5IHwgc2VkIC1uICdzL1wuYyQvLm8vcCcgfCB4YXJncyBtYWtlIC1q OVwiIiBIRUFEfjcKClRoYW5rcyBmb3IgdGhlIHdyaXRlLXVwIQoKCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVu LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcv bWFpbG1hbi9saXN0aW5mby94ZW4tZGV2ZWw=