From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp1 ([2001:41d0:2:bcc0::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms0.migadu.com with LMTPS id iJAAABv3A2E8hAEAgWs5BA (envelope-from ) for ; Fri, 30 Jul 2021 14:56:58 +0200 Received: from aspmx1.migadu.com ([2001:41d0:2:bcc0::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp1 with LMTPS id 4OgONxr3A2FzNQAAbx9fmQ (envelope-from ) for ; Fri, 30 Jul 2021 12:56:58 +0000 Received: from mail.notmuchmail.org (nmbug.tethera.net [IPv6:2607:5300:201:3100::1657]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id 8C9FAD7EE for ; Fri, 30 Jul 2021 14:56:57 +0200 (CEST) Received: from nmbug.tethera.net (localhost [127.0.0.1]) by mail.notmuchmail.org (Postfix) with ESMTP id C5D0B29202; Fri, 30 Jul 2021 08:56:31 -0400 (EDT) Received: from fethera.tethera.net (fethera.tethera.net [198.245.60.197]) by mail.notmuchmail.org (Postfix) with ESMTP id 75297291EC for ; Fri, 30 Jul 2021 08:56:17 -0400 (EDT) Received: by fethera.tethera.net (Postfix, from userid 1001) id 6C9535FD17; Fri, 30 Jul 2021 08:56:17 -0400 (EDT) Received: (nullmailer pid 2166890 invoked by uid 1000); Fri, 30 Jul 2021 12:56:10 -0000 From: David Bremner To: notmuch@notmuchmail.org Cc: David Bremner Subject: [PATCH 12/27] lib/parse-sexp: support phrase queries. Date: Fri, 30 Jul 2021 09:55:52 -0300 Message-Id: <20210730125607.2165433-13-david@tethera.net> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210730125607.2165433-1-david@tethera.net> References: <20210730125607.2165433-1-david@tethera.net> MIME-Version: 1.0 Message-ID-Hash: 5VGUJKCCW4ANYW4IGIQSGMBGVJYHRJ32 X-Message-ID-Hash: 5VGUJKCCW4ANYW4IGIQSGMBGVJYHRJ32 X-MailFrom: bremner@tethera.net X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-notmuch.notmuchmail.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header X-Mailman-Version: 3.2.1 Precedence: list List-Id: "Use and development of the notmuch mail system." List-Help: List-Post: List-Subscribe: List-Unsubscribe: Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 X-Migadu-Flow: FLOW_IN ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1627649817; 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:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=tXV59rBCu8tl4Qyf3GSP9IhWcYRqM9/WtNImel4OYPY=; b=apIFeybbFYj6gbHLh+EabTGUwSzIaNcEeSkGqorrRityEy+7zZMtyT4Dt2ryr/1BHn0RgH n05H2v+HWIgkvDTSdaXZN8c0rBqfEXIScMGwbHMKX0dVqME4rpOAF59XFfMKQSMHmuhNPM lsgSzZ1YO+T1h9aN4jffxYpxzqLI5kqgPyTe9kwmYjRj6mOQ3iNEIdh23640Zn5lYsWxjp fby96QvsNiCH3IkJn+6bFdPaxtcSUHgxRJKmCw66+yuEGcMEVJ2uBPc2q1dli4EndJn5bM rhheV9KBAz4klx/lhgiwdSInmttcrcigcXlkFyltriiYgfoVp1KhUPVF1zLglw== ARC-Seal: i=1; s=key1; d=yhetil.org; t=1627649817; a=rsa-sha256; cv=none; b=gwRzfEQFlY90nFlL32xj1DlLassO1Z+hyew6mkka9EhvrXlGtsVe9uF8rangInlJCirgGv 9xjWRvK0sX9CWfYuS48oOh5qCkEHSabX4R+8iGoag+/MoMkz2TjF+W5LNpSQQvXVPcPpsP htGbPlSSTLicMUR1NRyEULKltPenxXsCyiwfuRDcqmZqzQ1qaFN4p3LTpzEQ4kbT2YcEvd Qdy1GOvM70TlhRzMYeLHHwQl4/0RJKibvSUJmyMcMcXjsRvYHoyIchO6aBC0jOGd3D4fES meL53WFqXrgGWohUI1sbwIX8oZBe6XO0r4O2K/V5OFjFu+yRTqFgjI1ybR5sAQ== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=none; dmarc=none; spf=pass (aspmx1.migadu.com: domain of notmuch-bounces@notmuchmail.org designates 2607:5300:201:3100::1657 as permitted sender) smtp.mailfrom=notmuch-bounces@notmuchmail.org X-Migadu-Spam-Score: 0.62 Authentication-Results: aspmx1.migadu.com; dkim=none; dmarc=none; spf=pass (aspmx1.migadu.com: domain of notmuch-bounces@notmuchmail.org designates 2607:5300:201:3100::1657 as permitted sender) smtp.mailfrom=notmuch-bounces@notmuchmail.org X-Migadu-Queue-Id: 8C9FAD7EE X-Spam-Score: 0.62 X-Migadu-Scanner: scn1.migadu.com X-TUID: NsptEyk5u8VG QW55dGhpbmcgdGhhdCBpcyBxdW90ZWQgb3Igbm90IHB1cmVseSB3b3JkIGNoYXJhY3RlcnMgaXMg Y29uc2lkZXJlZCBhDQpwaHJhc2UuICBQaHJhc2VzIGFyZSBub3Qgc3RlbW1lZCwgYmVjYXVzZSB0 aGUgc3RlbXMgZG8gbm90IGhhdmUNCnBvc2l0aW9uYWwgaW5mb3JtYXRpb24gaW4gdGhlIGRhdGFi YXNlLiBJdCBpcyBsZXNzIGVmZmljaWVudCB0byBzY2FuDQp0aGUgdGVybSB0d2ljZSwgYnV0IGl0 IGF2b2lkcyBhIHNlY29uZCBwYXNzIHRvIGFkZCBwcmVmaXhlcywgc28gbWF5YmUNCml0IGJhbGFu Y2VzIG91dC4gSW4gYW55IGNhc2UsIGl0IHNlZW1zIHVubGlrZWx5IHF1ZXJ5IHBhcnNpbmcgaXMg dmVyeQ0Kb2Z0ZW4gYSBib3R0bGVuZWNrLg0KLS0tDQogZG9jL21hbjcvbm90bXVjaC1zZXhwLXF1 ZXJpZXMucnN0IHwgMzIgKysrKysrKysrKysrKysrKysrLS0tLQ0KIGxpYi9wYXJzZS1zZXhwLmNj ICAgICAgICAgICAgICAgICB8IDQ0ICsrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0NCiB0 ZXN0L1QwODEtc2V4cHItc2VhcmNoLnNoICAgICAgICAgfCAyMSArKysrKysrKysrKysrLS0NCiAz IGZpbGVzIGNoYW5nZWQsIDgzIGluc2VydGlvbnMoKyksIDE0IGRlbGV0aW9ucygtKQ0KDQpkaWZm IC0tZ2l0IGEvZG9jL21hbjcvbm90bXVjaC1zZXhwLXF1ZXJpZXMucnN0IGIvZG9jL21hbjcvbm90 bXVjaC1zZXhwLXF1ZXJpZXMucnN0DQppbmRleCA1NDI3YmIwYS4uNTcwZWQ2YWUgMTAwNjQ0DQot LS0gYS9kb2MvbWFuNy9ub3RtdWNoLXNleHAtcXVlcmllcy5yc3QNCisrKyBiL2RvYy9tYW43L25v dG11Y2gtc2V4cC1xdWVyaWVzLnJzdA0KQEAgLTQxLDEwICs0MSwxMiBAQCBzdWJxdWVyaWVzLg0K ICAgICBUaGUgZW1wdHkgbGlzdCBtYXRjaGVzIGFsbCBtZXNzYWdlcw0KIA0KICp0ZXJtKg0KLSAg ICBNYXRjaCBhbGwgbWVzc2FnZXMgY29udGFpbmluZyAqdGVybSosIHBvc3NpYmx5IGFmdGVyDQot ICAgIHN0ZW1taW5nIG9yIHBoYXNlIHNwbGl0dGluZy4gRm9yIGRpc2N1c3Npb24gb2Ygc3RlbW1p bmcgaW4NCi0gICAgbm90bXVjaCBzZWUgOmFueTpgbm90bXVjaC1zZWFyY2gtdGVybXMoNylgLiBT dGVtbWluZyBvbmx5IGFwcGxpZXMNCi0gICAgdG8gdW5xdW90ZWQgdGVybXMgKGJhc2ljIHZhbHVl cykgaW4gcy1leHByZXNzaW9uIHF1ZXJpZXMuDQorDQorICAgIE1hdGNoIGFsbCBtZXNzYWdlcyBj b250YWluaW5nICp0ZXJtKiwgcG9zc2libHkgYWZ0ZXIgc3RlbW1pbmcgb3INCisgICAgcGhyYXNl IHNwbGl0dGluZy4gRm9yIGRpc2N1c3Npb24gb2Ygc3RlbW1pbmcgaW4gbm90bXVjaCBzZWUNCisg ICAgOmFueTpgbm90bXVjaC1zZWFyY2gtdGVybXMoNylgLiBTdGVtbWluZyBvbmx5IGFwcGxpZXMg dG8gdW5xdW90ZWQNCisgICAgdGVybXMgKGJhc2ljIHZhbHVlcykgaW4gcy1leHByZXNzaW9uIHF1 ZXJpZXMuICBGb3IgaW5mb3JtYXRpb24gb24NCisgICAgcGhyYXNlIHNwbGl0dGluZyBzZWUgOmFu eTpgZmllbGRzYC4NCiANCiBgYChgYCAqZmllbGQqIHxxMXwgfHEyfCAuLi4gfHFufCBgYClgYA0K ICAgICBSZXN0cmljdCB0aGUgcXVlcmllcyB8cTF8IHRvIHxxbnwgdG8gKmZpZWxkKiwgYW5kIGNv bWJpbmUgd2l0aCAqYW5kKg0KQEAgLTY0LDcgKzY2LDcgQEAgc3VicXVlcmllcy4NCiBGSUVMRFMN CiBgYGBgYGANCiANCi0qRmllbGRzKiAoYWxzbyBjYWxsZWQgKnByZWZpeGVzKiBpbiBub3RtdWNo IGRvY3VtZW50YXRpb24pDQorKkZpZWxkcyogWyNha2EtcHJlZl1fDQogY29ycmVzcG9uZCB0byBh dHRyaWJ1dGVzIG9mIG1haWwgbWVzc2FnZXMuIFNvbWUgYXJlIGluaGVyZW50IChhbmQNCiBpbW11 dGFibGUpIGxpa2UgYGBzdWJqZWN0YGAsIHdoaWxlIG90aGVycyBgYHRhZ2BgIGFuZCBgYHByb3Bl cnR5YGAgYXJlDQogc2V0dGFibGUgYnkgdGhlIHVzZXIuICBFYWNoIGNvbmNyZXRlIGZpZWxkIGlu DQpAQCAtNzMsNiArNzUsMTMgQEAgaXMgZGlzY3Vzc2VkIGZ1cnRoZXIgdW5kZXIgIlNlYXJjaCBw cmVmaXhlcyIgaW4NCiA6YW55OmBub3RtdWNoLXNlYXJjaC10ZXJtcyg3KWAuIFRoZSByb3cgKnVz ZXIqIHJlZmVycyB0byB1c2VyIGRlZmluZWQNCiBmaWVsZHMsIGRlc2NyaWJlZCBpbiA6YW55OmBu b3RtdWNoLWNvbmZpZygxKWAuDQogDQorTW9zdCBmaWVsZHMgYXJlIGVpdGhlciAqcGhyYXNlIGZp ZWxkcyogWyNha2EtcHJvYl1fICh3aGljaCBtYXRjaA0KK3NlcXVlbmNlcyBvZiB3b3JkcyksIG9y ICp0ZXJtIGZpZWxkcyogWyNha2EtYm9vbF1fICh3aGljaCBtYXRjaCBleGFjdA0KK3N0cmluZ3Mp LiAqUGhyYXNlIHNwbGl0dGluZyogYnJlYWtzIHRoZSB0ZXJtIChiYXNpYyB2YWx1ZSBvciBxdW90 ZWQNCitzdHJpbmcpIGludG8gd29yZHMsIGlnbm9yZSBwdW5jdHVhdGlvbi4gUGhyYXNlIHNwbGl0 dGluZyBpcyBhcHBsaWVkIHRvDQordGVybXMgaW4gcGhyYXNlIChwcm9iYWJpbGlzdGljKSBmaWVs ZHMuIEJvdGggcGhyYXNlIHNwbGl0dGluZyBhbmQNCitzdGVtbWluZyBhcHBseSBvbmx5IGluIHBo cmFzZSBmaWVsZHMuDQorDQogLi4gX2ZpZWxkLXRhYmxlOg0KIA0KIC4uIHRhYmxlOjogRmllbGRz IHdpdGggc3VwcG9ydGVkIG1vZGlmaWVycw0KQEAgLTEzOSwxMCArMTQ4LDIzIEBAIEVYQU1QTEVT DQogYGAobm90IEJvYiBNYXJsZXkpYGANCiAgICAgTWF0Y2ggbWVzc2FnZXMgY29udGFpbmluZyBu ZWl0aGVyICJCb2IiIG5vciAiTWFybGV5Iiwgbm9yIHRoZWlyIHN0ZW1zLA0KIA0KK2BgInF1aWNr IGZveCJgYCBgYHF1aWNrLWZveGBgIGBgcXVpY2tAZm94YGANCisgICAgTWF0Y2ggdGhlICpwaHJh c2UqICJxdWljayIgZm9sbG93ZWQgYnkgImZveCIgaW4gcGhyYXNlIGZpZWxkcyAob3INCisgICAg b3V0c2lkZSBhIGZpZWxkKS4gTWF0Y2ggdGhlIGxpdGVyYWwgc3RyaW5nIGluIGEgdGVybSBmaWVs ZC4NCisNCiBgYChzdWJqZWN0IHF1aWNrICJicm93biBmb3giKWBgDQogICAgIE1hdGNoIG1lc3Nh Z2VzIHdob3NlIHN1YmplY3QgY29udGFpbnMgInF1aWNrIiAoYW55d2hlcmUsIHN0ZW1tZWQpIGFu ZA0KICAgICB0aGUgcGhyYXNlICJicm93biBmb3giLg0KIA0KK05PVEVTDQorPT09PT0NCisNCisu LiBbI2FrYS1wcmVmXSBhLmsuYS4gcHJlZml4ZXMNCisNCisuLiBbI2FrYS1wcm9iXSBhLmsuYS4g cHJvYmFiaWxpc3RpYyBwcmVmaXhlcw0KKw0KKy4uIFsjYWthLWJvb2xdIGEuay5hLiBib29sZWFu IHByZWZpeGVzDQorDQogLi4gfHExfCByZXBsYWNlOjogOm1hdGg6YHFfMWANCiAuLiB8cTJ8IHJl cGxhY2U6OiA6bWF0aDpgcV8yYA0KIC4uIHxxbnwgcmVwbGFjZTo6IDptYXRoOmBxX25gDQpkaWZm IC0tZ2l0IGEvbGliL3BhcnNlLXNleHAuY2MgYi9saWIvcGFyc2Utc2V4cC5jYw0KaW5kZXggYTVk NDFmMzAuLjRhZGZjNGM1IDEwMDY0NA0KLS0tIGEvbGliL3BhcnNlLXNleHAuY2MNCisrKyBiL2xp Yi9wYXJzZS1zZXhwLmNjDQpAQCAtMSw1ICsxLDYgQEANCiAjaW5jbHVkZSAiZGF0YWJhc2UtcHJp dmF0ZS5oIg0KICNpbmNsdWRlICJzZXhwLmgiDQorI2luY2x1ZGUgInVuaWNvZGUtdXRpbC5oIg0K IA0KICNpZiBIQVZFX1NGU0VYUA0KIA0KQEAgLTY2LDYgKzY3LDM2IEBAIF9zZXhwX2NvbWJpbmVf cXVlcnkgKG5vdG11Y2hfZGF0YWJhc2VfdCAqbm90bXVjaCwNCiAJCQkJc3gtPm5leHQsIG91dHB1 dCk7DQogfQ0KIA0KK3N0YXRpYyBub3RtdWNoX3N0YXR1c190DQorX3NleHBfcGFyc2VfcGhyYXNl IChzdGQ6OnN0cmluZyB0ZXJtX3ByZWZpeCwgY29uc3QgY2hhciAqcGhyYXNlLCBYYXBpYW46OlF1 ZXJ5ICZvdXRwdXQpDQorew0KKyAgICBYYXBpYW46OlV0ZjhJdGVyYXRvciBwIChwaHJhc2UpOw0K KyAgICBYYXBpYW46OlV0ZjhJdGVyYXRvciBlbmQ7DQorICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3Ry aW5nPiB0ZXJtczsNCisNCisgICAgd2hpbGUgKHAgIT0gZW5kKSB7DQorCVhhcGlhbjo6VXRmOEl0 ZXJhdG9yIHN0YXJ0Ow0KKwl3aGlsZSAocCAhPSBlbmQgJiYgISBYYXBpYW46OlVuaWNvZGU6Omlz X3dvcmRjaGFyICgqcCkpDQorCSAgICBwKys7DQorDQorCWlmIChwID09IGVuZCkNCisJICAgIGJy ZWFrOw0KKw0KKwlzdGFydCA9IHA7DQorDQorCXdoaWxlIChwICE9IGVuZCAmJiBYYXBpYW46OlVu aWNvZGU6OmlzX3dvcmRjaGFyICgqcCkpDQorCSAgICBwKys7DQorDQorCWlmIChwICE9IHN0YXJ0 KSB7DQorCSAgICBzdGQ6OnN0cmluZyB3b3JkIChzdGFydCwgcCk7DQorCSAgICB3b3JkID0gWGFw aWFuOjpVbmljb2RlOjp0b2xvd2VyICh3b3JkKTsNCisJICAgIHRlcm1zLnB1c2hfYmFjayAodGVy bV9wcmVmaXggKyB3b3JkKTsNCisJfQ0KKyAgICB9DQorICAgIG91dHB1dCA9IFhhcGlhbjo6UXVl cnkgKFhhcGlhbjo6UXVlcnk6Ok9QX1BIUkFTRSwgdGVybXMuYmVnaW4gKCksIHRlcm1zLmVuZCAo KSk7DQorICAgIHJldHVybiBOT1RNVUNIX1NUQVRVU19TVUNDRVNTOw0KK30NCisNCiAvKiBIZXJl IHdlIGV4cGVjdCB0aGUgcy1leHByZXNzaW9uIHRvIGJlIGEgcHJvcGVyIGxpc3QsIHdpdGggZmly c3QNCiAgKiBlbGVtZW50IGRlZmluaW5nIGFuZCBvcGVyYXRpb24sIG9yIGFzIGEgc3BlY2lhbCBj YXNlIHRoZSBlbXB0eQ0KICAqIGxpc3QgKi8NCkBAIC03OSwxMyArMTEwLDEyIEBAIF9zZXhwX3Rv X3hhcGlhbl9xdWVyeSAobm90bXVjaF9kYXRhYmFzZV90ICpub3RtdWNoLCBjb25zdCBfc2V4cF9w cmVmaXhfdCAqcGFyZW50DQogCXN0ZDo6c3RyaW5nIHRlcm0gPSBYYXBpYW46OlVuaWNvZGU6OnRv bG93ZXIgKHN4LT52YWwpOw0KIAlYYXBpYW46OlN0ZW0gc3RlbSA9ICoobm90bXVjaC0+c3RlbW1l cik7DQogCXN0ZDo6c3RyaW5nIHRlcm1fcHJlZml4ID0gcGFyZW50ID8gX2ZpbmRfcHJlZml4IChw YXJlbnQtPm5hbWUpIDogIiI7DQotCWlmIChzeC0+YXR5ID09IFNFWFBfQkFTSUMpDQotCSAgICB0 ZXJtID0gIloiICsgdGVybV9wcmVmaXggKyBzdGVtICh0ZXJtKTsNCi0JZWxzZQ0KLQkgICAgdGVy bSA9IHRlcm1fcHJlZml4ICsgdGVybTsNCi0NCi0Jb3V0cHV0ID0gWGFwaWFuOjpRdWVyeSAodGVy bSk7DQotCXJldHVybiBOT1RNVUNIX1NUQVRVU19TVUNDRVNTOw0KKwlpZiAoc3gtPmF0eSA9PSBT RVhQX0JBU0lDICYmIHVuaWNvZGVfd29yZF91dGY4IChzeC0+dmFsKSkgew0KKwkgICAgb3V0cHV0 ID0gWGFwaWFuOjpRdWVyeSAoIloiICsgdGVybV9wcmVmaXggKyBzdGVtICh0ZXJtKSk7DQorCSAg ICByZXR1cm4gTk9UTVVDSF9TVEFUVVNfU1VDQ0VTUzsNCisJfSBlbHNlIHsNCisJICAgIHJldHVy biBfc2V4cF9wYXJzZV9waHJhc2UgKHRlcm1fcHJlZml4LCBzeC0+dmFsLCBvdXRwdXQpOw0KKwl9 DQogICAgIH0NCiANCiAgICAgLyogRW1wdHkgbGlzdCAqLw0KZGlmZiAtLWdpdCBhL3Rlc3QvVDA4 MS1zZXhwci1zZWFyY2guc2ggYi90ZXN0L1QwODEtc2V4cHItc2VhcmNoLnNoDQppbmRleCA1ZGQ0 NTEyMS4uNmMxZTI1MzYgMTAwNzU1DQotLS0gYS90ZXN0L1QwODEtc2V4cHItc2VhcmNoLnNoDQor KysgYi90ZXN0L1QwODEtc2V4cHItc2VhcmNoLnNoDQpAQCAtMTAyLDE1ICsxMDIsMzIgQEAgRU9G DQogdGVzdF9leHBlY3RfZXF1YWxfZmlsZSBFWFBFQ1RFRCBPVVRQVVQNCiANCiB0ZXN0X2JlZ2lu X3N1YnRlc3QgIlNlYXJjaCBieSAnc3ViamVjdCcgKHV0Zi04LCBwaHJhc2UtdG9rZW4pOiINCi10 ZXN0X3N1YnRlc3Rfa25vd25fYnJva2VuDQogb3V0cHV0PSQobm90bXVjaCBzZWFyY2ggLS1xdWVy eS1zeW50YXg9c2V4cCAnKHN1YmplY3QgdXRmOC1zw7xiasOpY3QpJyB8IG5vdG11Y2hfc2VhcmNo X3Nhbml0aXplKQ0KIHRlc3RfZXhwZWN0X2VxdWFsICIkb3V0cHV0IiAidGhyZWFkOlhYWCAgIDIw MDAtMDEtMDEgWzEvMV0gTm90bXVjaCBUZXN0IFN1aXRlOyB1dGY4LXPDvGJqw6ljdCAoaW5ib3gg dW5yZWFkKSINCiANCiB0ZXN0X2JlZ2luX3N1YnRlc3QgIlNlYXJjaCBieSAnc3ViamVjdCcgKHV0 Zi04LCBxdW90ZWQgc3RyaW5nKToiDQotdGVzdF9zdWJ0ZXN0X2tub3duX2Jyb2tlbg0KIG91dHB1 dD0kKG5vdG11Y2ggc2VhcmNoIC0tcXVlcnktc3ludGF4PXNleHAgJyhzdWJqZWN0ICJ1dGY4IHPD vGJqw6ljdCIpJyB8IG5vdG11Y2hfc2VhcmNoX3Nhbml0aXplKQ0KIHRlc3RfZXhwZWN0X2VxdWFs ICIkb3V0cHV0IiAidGhyZWFkOlhYWCAgIDIwMDAtMDEtMDEgWzEvMV0gTm90bXVjaCBUZXN0IFN1 aXRlOyB1dGY4LXPDvGJqw6ljdCAoaW5ib3ggdW5yZWFkKSINCiANCit0ZXN0X2JlZ2luX3N1YnRl c3QgIlNlYXJjaCBieSAnc3ViamVjdCcgKGNvbWJpbmUgcGhyYXNlLCB0ZXJtKToiDQorb3V0cHV0 PSQobm90bXVjaCBzZWFyY2ggLS1xdWVyeS1zeW50YXg9c2V4cCAnKHN1YmplY3QgTWFjICJjb21w YXRpYmlsaXR5IGlzc3VlcyIpJyB8IG5vdG11Y2hfc2VhcmNoX3Nhbml0aXplKQ0KK3Rlc3RfZXhw ZWN0X2VxdWFsICIkb3V0cHV0IiAidGhyZWFkOlhYWCAgIDIwMDktMTEtMTggWzQvNF0gSmpnb2Qg SmlhbmcsIEFsZXhhbmRlciBCb3Rlcm8tTG93cnk7IFtub3RtdWNoXSBNYWMgT1MgWC9EYXJ3aW4g Y29tcGF0aWJpbGl0eSBpc3N1ZXMgKGluYm94IHVucmVhZCkiDQorDQordGVzdF9iZWdpbl9zdWJ0 ZXN0ICJTZWFyY2ggYnkgJ3N1YmplY3QnIChjb21iaW5lIHBocmFzZSwgdGVybSAyKToiDQorbm90 bXVjaCBzZWFyY2ggLS1xdWVyeS1zeW50YXg9c2V4cCAnKHN1YmplY3QgKG9yIHV0ZjggImNvbXBh dGliaWxpdHkgaXNzdWVzIikpJyB8IG5vdG11Y2hfc2VhcmNoX3Nhbml0aXplID4gT1VUUFVUDQor Y2F0IDw8RU9GID4gRVhQRUNURUQNCit0aHJlYWQ6WFhYICAgMjAwOS0xMS0xOCBbNC80XSBKamdv ZCBKaWFuZywgQWxleGFuZGVyIEJvdGVyby1Mb3dyeTsgW25vdG11Y2hdIE1hYyBPUyBYL0Rhcndp biBjb21wYXRpYmlsaXR5IGlzc3VlcyAoaW5ib3ggdW5yZWFkKQ0KK3RocmVhZDpYWFggICAyMDAw LTAxLTAxIFsxLzFdIE5vdG11Y2ggVGVzdCBTdWl0ZTsgdXRmOC1zw7xiasOpY3QgKGluYm94IHVu cmVhZCkNCitFT0YNCit0ZXN0X2V4cGVjdF9lcXVhbF9maWxlIEVYUEVDVEVEIE9VVFBVVA0KKw0K K3Rlc3RfYmVnaW5fc3VidGVzdCAiU2VhcmNoIGJ5ICdzdWJqZWN0JyAoY29tYmluZSBwaHJhc2Us IHRlcm0gMyk6Ig0KK25vdG11Y2ggc2VhcmNoIC0tcXVlcnktc3ludGF4PXNleHAgJyhzdWJqZWN0 IGlzc3VlcyBYL0RhcndpbiknIHwgbm90bXVjaF9zZWFyY2hfc2FuaXRpemUgPiBPVVRQVVQNCitj YXQgPDxFT0YgPiBFWFBFQ1RFRA0KK3RocmVhZDpYWFggICAyMDA5LTExLTE4IFs0LzRdIEpqZ29k IEppYW5nLCBBbGV4YW5kZXIgQm90ZXJvLUxvd3J5OyBbbm90bXVjaF0gTWFjIE9TIFgvRGFyd2lu IGNvbXBhdGliaWxpdHkgaXNzdWVzIChpbmJveCB1bnJlYWQpDQorRU9GDQordGVzdF9leHBlY3Rf ZXF1YWxfZmlsZSBFWFBFQ1RFRCBPVVRQVVQNCisNCiB0ZXN0X2JlZ2luX3N1YnRlc3QgIlVuYmFs YW5jZWQgcGFyZW5zIg0KICMgQSBjb2RlIDEgaW5kaWNhdGVzIHRoZSBlcnJvciB3YXMgaGFuZGxl ZCAoYSBjcmFzaCB3aWxsIHJldHVybiBlLmcuIDEzOSkuDQogdGVzdF9leHBlY3RfY29kZSAxICJu b3RtdWNoIHNlYXJjaCAtLXF1ZXJ5LXN5bnRheD1zZXhwICcoJyINCi0tIA0KMi4zMC4yDQ==