From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp2 ([2001:41d0:2:bcc0::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms0.migadu.com with LMTPS id MEUGKp4OJWGr4AAAgWs5BA (envelope-from ) for ; Tue, 24 Aug 2021 17:22:06 +0200 Received: from aspmx1.migadu.com ([2001:41d0:2:bcc0::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp2 with LMTPS id SHysJZ4OJWF9bgAAB5/wlQ (envelope-from ) for ; Tue, 24 Aug 2021 15:22:06 +0000 Received: from mail.notmuchmail.org (nmbug.tethera.net [144.217.243.247]) (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 2175A84EE for ; Tue, 24 Aug 2021 17:22:06 +0200 (CEST) Received: from nmbug.tethera.net (localhost [127.0.0.1]) by mail.notmuchmail.org (Postfix) with ESMTP id 5241920584; Tue, 24 Aug 2021 11:21:00 -0400 (EDT) Received: from fethera.tethera.net (fethera.tethera.net [IPv6:2607:5300:60:c5::1]) by mail.notmuchmail.org (Postfix) with ESMTP id B2B482056F for ; Tue, 24 Aug 2021 11:20:53 -0400 (EDT) Received: by fethera.tethera.net (Postfix, from userid 1001) id ABAA85FD5C; Tue, 24 Aug 2021 11:20:53 -0400 (EDT) Received: (nullmailer pid 2942855 invoked by uid 1000); Tue, 24 Aug 2021 15:17:51 -0000 From: David Bremner To: notmuch@notmuchmail.org Cc: David Bremner Subject: [PATCH 13/36] lib/parse-sexp: support phrase queries. Date: Tue, 24 Aug 2021 08:17:22 -0700 Message-Id: <20210824151745.2941868-14-david@tethera.net> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210824151745.2941868-1-david@tethera.net> References: <20210824151745.2941868-1-david@tethera.net> MIME-Version: 1.0 Message-ID-Hash: 3TNJHLGPQLUQTJMQI35KK77U7C4OMC4Q X-Message-ID-Hash: 3TNJHLGPQLUQTJMQI35KK77U7C4OMC4Q 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=1629818526; 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=HDMsS+ZGRExK2tEpgFB4bycm06x7OYAqGhaP6GheZi8=; b=f92AG5mqv0Eh6uwO94vQuvTqQTepbpKOYYoSD8y5CRNIpotYFeU3kz2KJj2g8DQM9sP+ZA LdoDemka1zHEa+PlR6H8ArELwVhj98FtWTQ63PelM8cGcq+aCF2Fyc5ypZq5TgDMNjWZW+ /bU6cDwGzgUgwoVdoimqykSbKI5U0YtgT8tiEm2yplNYzVcqinV0/Z6boTYC8MBfLLWaXR DLniOTZDUVoXEmjyH0lXMndFQ4Wpm1Fq+z/1eWqEagKbUV5zlah0b5ZUyJBwHDRf+GBwdp qWONAdO9fPhJif9F9S/MvAbxAXOyO0x8P5V100+UzqEbZcz+llA6m4IIwpvQBg== ARC-Seal: i=1; s=key1; d=yhetil.org; t=1629818526; a=rsa-sha256; cv=none; b=YJraFyu7WNcm33ZWjX7h+/mowcoolYVcLKJe5Jno5FGmM5ph2OF6rtbJwAGV0yD065XV95 6cqfJGdrmD64PMn8eCvCEMRvEJU+cFBdIHcbRth4W67Ds6+6jEpR33na/2bW1ADoHeuj0z cgFPQIEikqZmDZ8k4YWW59LjFr2u/LcIktfGyb6GylN9ncUHv4aWHvBcbKWAY9qjdo4POu LQAsIkN32Reo6/CVNgx4vmy2xTwZCn6abLnkcASNvC+9zQtHtWoXBPd5PsnmjcL7iIdsDM gkiWf4u3ZWSf98gLTcpypp+Na7yX6xPLtBbSxY9g0zAZWZqhJXHxMEDVyje2ZQ== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=none; dmarc=none; spf=pass (aspmx1.migadu.com: domain of notmuch-bounces@notmuchmail.org designates 144.217.243.247 as permitted sender) smtp.mailfrom=notmuch-bounces@notmuchmail.org X-Migadu-Spam-Score: -0.90 Authentication-Results: aspmx1.migadu.com; dkim=none; dmarc=none; spf=pass (aspmx1.migadu.com: domain of notmuch-bounces@notmuchmail.org designates 144.217.243.247 as permitted sender) smtp.mailfrom=notmuch-bounces@notmuchmail.org X-Migadu-Queue-Id: 2175A84EE X-Spam-Score: -0.90 X-Migadu-Scanner: scn0.migadu.com X-TUID: SkhVoX8Yrk0N QW55dGhpbmcgdGhhdCBpcyBxdW90ZWQgb3Igbm90IHB1cmVseSB3b3JkIGNoYXJhY3RlcnMgaXMg Y29uc2lkZXJlZCBhDQpwaHJhc2UuICBQaHJhc2VzIGFyZSBub3Qgc3RlbW1lZCwgYmVjYXVzZSB0 aGUgc3RlbXMgZG8gbm90IGhhdmUNCnBvc2l0aW9uYWwgaW5mb3JtYXRpb24gaW4gdGhlIGRhdGFi YXNlLiBJdCBpcyBsZXNzIGVmZmljaWVudCB0byBzY2FuDQp0aGUgdGVybSB0d2ljZSwgYnV0IGl0 IGF2b2lkcyBhIHNlY29uZCBwYXNzIHRvIGFkZCBwcmVmaXhlcywgc28gbWF5YmUNCml0IGJhbGFu Y2VzIG91dC4gSW4gYW55IGNhc2UsIGl0IHNlZW1zIHVubGlrZWx5IHF1ZXJ5IHBhcnNpbmcgaXMg dmVyeQ0Kb2Z0ZW4gYSBib3R0bGVuZWNrLg0KLS0tDQogZG9jL21hbjcvbm90bXVjaC1zZXhwLXF1 ZXJpZXMucnN0IHwgMzIgKysrKysrKysrKysrKysrKysrLS0tLQ0KIGxpYi9wYXJzZS1zZXhwLmNj ICAgICAgICAgICAgICAgICB8IDQ1ICsrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0NCiB0 ZXN0L1QwODEtc2V4cHItc2VhcmNoLnNoICAgICAgICAgfCAyMSArKysrKysrKysrKysrLS0NCiAz IGZpbGVzIGNoYW5nZWQsIDgzIGluc2VydGlvbnMoKyksIDE1IGRlbGV0aW9ucygtKQ0KDQpkaWZm IC0tZ2l0IGEvZG9jL21hbjcvbm90bXVjaC1zZXhwLXF1ZXJpZXMucnN0IGIvZG9jL21hbjcvbm90 bXVjaC1zZXhwLXF1ZXJpZXMucnN0DQppbmRleCAwOGU5N2NjMy4uYjc2Mzg3NmQgMTAwNjQ0DQot LS0gYS9kb2MvbWFuNy9ub3RtdWNoLXNleHAtcXVlcmllcy5yc3QNCisrKyBiL2RvYy9tYW43L25v dG11Y2gtc2V4cC1xdWVyaWVzLnJzdA0KQEAgLTQwLDEwICs0MCwxMiBAQCBzdWJxdWVyaWVzLg0K ICAgICBNYXRjaCBhbGwgbWVzc2FnZXMuDQogDQogKnRlcm0qDQotICAgIE1hdGNoIGFsbCBtZXNz YWdlcyBjb250YWluaW5nICp0ZXJtKiwgcG9zc2libHkgYWZ0ZXINCi0gICAgc3RlbW1pbmcgb3Ig cGhhc2Ugc3BsaXR0aW5nLiBGb3IgZGlzY3Vzc2lvbiBvZiBzdGVtbWluZyBpbg0KLSAgICBub3Rt dWNoIHNlZSA6YW55OmBub3RtdWNoLXNlYXJjaC10ZXJtcyg3KWAuIFN0ZW1taW5nIG9ubHkgYXBw bGllcw0KLSAgICB0byB1bnF1b3RlZCB0ZXJtcyAoYmFzaWMgdmFsdWVzKSBpbiBzLWV4cHJlc3Np b24gcXVlcmllcy4NCisNCisgICAgTWF0Y2ggYWxsIG1lc3NhZ2VzIGNvbnRhaW5pbmcgKnRlcm0q LCBwb3NzaWJseSBhZnRlciBzdGVtbWluZyBvcg0KKyAgICBwaHJhc2Ugc3BsaXR0aW5nLiBGb3Ig ZGlzY3Vzc2lvbiBvZiBzdGVtbWluZyBpbiBub3RtdWNoIHNlZQ0KKyAgICA6YW55OmBub3RtdWNo LXNlYXJjaC10ZXJtcyg3KWAuIFN0ZW1taW5nIG9ubHkgYXBwbGllcyB0byB1bnF1b3RlZA0KKyAg ICB0ZXJtcyAoYmFzaWMgdmFsdWVzKSBpbiBzLWV4cHJlc3Npb24gcXVlcmllcy4gIEZvciBpbmZv cm1hdGlvbiBvbg0KKyAgICBwaHJhc2Ugc3BsaXR0aW5nIHNlZSA6YW55OmBmaWVsZHNgLg0KIA0K IGBgKGBgICpmaWVsZCogfHExfCB8cTJ8IC4uLiB8cW58IGBgKWBgDQogICAgIFJlc3RyaWN0IHRo ZSBxdWVyaWVzIHxxMXwgdG8gfHFufCB0byAqZmllbGQqLCBhbmQgY29tYmluZSB3aXRoICphbmQq DQpAQCAtNjMsNyArNjUsNyBAQCBzdWJxdWVyaWVzLg0KIEZJRUxEUw0KIGBgYGBgYA0KIA0KLSpG aWVsZHMqIChhbHNvIGNhbGxlZCAqcHJlZml4ZXMqIGluIG5vdG11Y2ggZG9jdW1lbnRhdGlvbikN CisqRmllbGRzKiBbI2FrYS1wcmVmXV8NCiBjb3JyZXNwb25kIHRvIGF0dHJpYnV0ZXMgb2YgbWFp bCBtZXNzYWdlcy4gU29tZSBhcmUgaW5oZXJlbnQgKGFuZA0KIGltbXV0YWJsZSkgbGlrZSBgYHN1 YmplY3RgYCwgd2hpbGUgb3RoZXJzIGBgdGFnYGAgYW5kIGBgcHJvcGVydHlgYCBhcmUNCiBzZXR0 YWJsZSBieSB0aGUgdXNlci4gIEVhY2ggY29uY3JldGUgZmllbGQgaW4NCkBAIC03Miw2ICs3NCwx MyBAQCBpcyBkaXNjdXNzZWQgZnVydGhlciB1bmRlciAiU2VhcmNoIHByZWZpeGVzIiBpbg0KIDph bnk6YG5vdG11Y2gtc2VhcmNoLXRlcm1zKDcpYC4gVGhlIHJvdyAqdXNlciogcmVmZXJzIHRvIHVz ZXIgZGVmaW5lZA0KIGZpZWxkcywgZGVzY3JpYmVkIGluIDphbnk6YG5vdG11Y2gtY29uZmlnKDEp YC4NCiANCitNb3N0IGZpZWxkcyBhcmUgZWl0aGVyICpwaHJhc2UgZmllbGRzKiBbI2FrYS1wcm9i XV8gKHdoaWNoIG1hdGNoDQorc2VxdWVuY2VzIG9mIHdvcmRzKSwgb3IgKnRlcm0gZmllbGRzKiBb I2FrYS1ib29sXV8gKHdoaWNoIG1hdGNoIGV4YWN0DQorc3RyaW5ncykuICpQaHJhc2Ugc3BsaXR0 aW5nKiBicmVha3MgdGhlIHRlcm0gKGJhc2ljIHZhbHVlIG9yIHF1b3RlZA0KK3N0cmluZykgaW50 byB3b3JkcywgaWdub3JlIHB1bmN0dWF0aW9uLiBQaHJhc2Ugc3BsaXR0aW5nIGlzIGFwcGxpZWQg dG8NCit0ZXJtcyBpbiBwaHJhc2UgKHByb2JhYmlsaXN0aWMpIGZpZWxkcy4gQm90aCBwaHJhc2Ug c3BsaXR0aW5nIGFuZA0KK3N0ZW1taW5nIGFwcGx5IG9ubHkgaW4gcGhyYXNlIGZpZWxkcy4NCisN CiAuLiBfZmllbGQtdGFibGU6DQogDQogLi4gdGFibGU6OiBGaWVsZHMgd2l0aCBzdXBwb3J0ZWQg bW9kaWZpZXJzDQpAQCAtMTM4LDEwICsxNDcsMjMgQEAgRVhBTVBMRVMNCiBgYChub3QgQm9iIE1h cmxleSlgYA0KICAgICBNYXRjaCBtZXNzYWdlcyBjb250YWluaW5nIG5laXRoZXIgIkJvYiIgbm9y ICJNYXJsZXkiLCBub3IgdGhlaXIgc3RlbXMsDQogDQorYGAicXVpY2sgZm94ImBgIGBgcXVpY2st Zm94YGAgYGBxdWlja0Bmb3hgYA0KKyAgICBNYXRjaCB0aGUgKnBocmFzZSogInF1aWNrIiBmb2xs b3dlZCBieSAiZm94IiBpbiBwaHJhc2UgZmllbGRzIChvcg0KKyAgICBvdXRzaWRlIGEgZmllbGQp LiBNYXRjaCB0aGUgbGl0ZXJhbCBzdHJpbmcgaW4gYSB0ZXJtIGZpZWxkLg0KKw0KIGBgKHN1Ympl Y3QgcXVpY2sgImJyb3duIGZveCIpYGANCiAgICAgTWF0Y2ggbWVzc2FnZXMgd2hvc2Ugc3ViamVj dCBjb250YWlucyAicXVpY2siIChhbnl3aGVyZSwgc3RlbW1lZCkgYW5kDQogICAgIHRoZSBwaHJh c2UgImJyb3duIGZveCIuDQogDQorTk9URVMNCis9PT09PQ0KKw0KKy4uIFsjYWthLXByZWZdIGEu ay5hLiBwcmVmaXhlcw0KKw0KKy4uIFsjYWthLXByb2JdIGEuay5hLiBwcm9iYWJpbGlzdGljIHBy ZWZpeGVzDQorDQorLi4gWyNha2EtYm9vbF0gYS5rLmEuIGJvb2xlYW4gcHJlZml4ZXMNCisNCiAu LiB8cTF8IHJlcGxhY2U6OiA6bWF0aDpgcV8xYA0KIC4uIHxxMnwgcmVwbGFjZTo6IDptYXRoOmBx XzJgDQogLi4gfHFufCByZXBsYWNlOjogOm1hdGg6YHFfbmANCmRpZmYgLS1naXQgYS9saWIvcGFy c2Utc2V4cC5jYyBiL2xpYi9wYXJzZS1zZXhwLmNjDQppbmRleCAyNTU1NjA1OC4uMDkxN2Y1MDUg MTAwNjQ0DQotLS0gYS9saWIvcGFyc2Utc2V4cC5jYw0KKysrIGIvbGliL3BhcnNlLXNleHAuY2MN CkBAIC0yLDcgKzIsNyBAQA0KIA0KICNpZiBIQVZFX1NGU0VYUA0KICNpbmNsdWRlICJzZXhwLmgi DQotDQorI2luY2x1ZGUgInVuaWNvZGUtdXRpbC5oIg0KIA0KIC8qIF9zZXhwIGlzIHVzZWQgZm9y IGZpbGUgc2NvcGUgc3ltYm9scyB0byBhdm9pZCBjbGFzaGluZyB3aXRoDQogICogZGVmaW5pdGlv bnMgZnJvbSBzZXhwLmggKi8NCkBAIC02Nyw2ICs2NywzNiBAQCBfc2V4cF9jb21iaW5lX3F1ZXJ5 IChub3RtdWNoX2RhdGFiYXNlX3QgKm5vdG11Y2gsDQogCQkJCXN4LT5uZXh0LCBvdXRwdXQpOw0K IH0NCiANCitzdGF0aWMgbm90bXVjaF9zdGF0dXNfdA0KK19zZXhwX3BhcnNlX3BocmFzZSAoc3Rk OjpzdHJpbmcgdGVybV9wcmVmaXgsIGNvbnN0IGNoYXIgKnBocmFzZSwgWGFwaWFuOjpRdWVyeSAm b3V0cHV0KQ0KK3sNCisgICAgWGFwaWFuOjpVdGY4SXRlcmF0b3IgcCAocGhyYXNlKTsNCisgICAg WGFwaWFuOjpVdGY4SXRlcmF0b3IgZW5kOw0KKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4g dGVybXM7DQorDQorICAgIHdoaWxlIChwICE9IGVuZCkgew0KKwlYYXBpYW46OlV0ZjhJdGVyYXRv ciBzdGFydDsNCisJd2hpbGUgKHAgIT0gZW5kICYmICEgWGFwaWFuOjpVbmljb2RlOjppc193b3Jk Y2hhciAoKnApKQ0KKwkgICAgcCsrOw0KKw0KKwlpZiAocCA9PSBlbmQpDQorCSAgICBicmVhazsN CisNCisJc3RhcnQgPSBwOw0KKw0KKwl3aGlsZSAocCAhPSBlbmQgJiYgWGFwaWFuOjpVbmljb2Rl Ojppc193b3JkY2hhciAoKnApKQ0KKwkgICAgcCsrOw0KKw0KKwlpZiAocCAhPSBzdGFydCkgew0K KwkgICAgc3RkOjpzdHJpbmcgd29yZCAoc3RhcnQsIHApOw0KKwkgICAgd29yZCA9IFhhcGlhbjo6 VW5pY29kZTo6dG9sb3dlciAod29yZCk7DQorCSAgICB0ZXJtcy5wdXNoX2JhY2sgKHRlcm1fcHJl Zml4ICsgd29yZCk7DQorCX0NCisgICAgfQ0KKyAgICBvdXRwdXQgPSBYYXBpYW46OlF1ZXJ5IChY YXBpYW46OlF1ZXJ5OjpPUF9QSFJBU0UsIHRlcm1zLmJlZ2luICgpLCB0ZXJtcy5lbmQgKCkpOw0K KyAgICByZXR1cm4gTk9UTVVDSF9TVEFUVVNfU1VDQ0VTUzsNCit9DQorDQogLyogSGVyZSB3ZSBl eHBlY3QgdGhlIHMtZXhwcmVzc2lvbiB0byBiZSBhIHByb3BlciBsaXN0LCB3aXRoIGZpcnN0DQog ICogZWxlbWVudCBkZWZpbmluZyBhbmQgb3BlcmF0aW9uLCBvciBhcyBhIHNwZWNpYWwgY2FzZSB0 aGUgZW1wdHkNCiAgKiBsaXN0ICovDQpAQCAtODAsMTMgKzExMCwxMiBAQCBfc2V4cF90b194YXBp YW5fcXVlcnkgKG5vdG11Y2hfZGF0YWJhc2VfdCAqbm90bXVjaCwgY29uc3QgX3NleHBfcHJlZml4 X3QgKnBhcmVudA0KIAlzdGQ6OnN0cmluZyB0ZXJtID0gWGFwaWFuOjpVbmljb2RlOjp0b2xvd2Vy IChzeC0+dmFsKTsNCiAJWGFwaWFuOjpTdGVtIHN0ZW0gPSAqKG5vdG11Y2gtPnN0ZW1tZXIpOw0K IAlzdGQ6OnN0cmluZyB0ZXJtX3ByZWZpeCA9IHBhcmVudCA/IF9maW5kX3ByZWZpeCAocGFyZW50 LT5uYW1lKSA6ICIiOw0KLQlpZiAoc3gtPmF0eSA9PSBTRVhQX0JBU0lDKQ0KLQkgICAgdGVybSA9 ICJaIiArIHRlcm1fcHJlZml4ICsgc3RlbSAodGVybSk7DQotCWVsc2UNCi0JICAgIHRlcm0gPSB0 ZXJtX3ByZWZpeCArIHRlcm07DQotDQotCW91dHB1dCA9IFhhcGlhbjo6UXVlcnkgKHRlcm0pOw0K LQlyZXR1cm4gTk9UTVVDSF9TVEFUVVNfU1VDQ0VTUzsNCisJaWYgKHN4LT5hdHkgPT0gU0VYUF9C QVNJQyAmJiB1bmljb2RlX3dvcmRfdXRmOCAoc3gtPnZhbCkpIHsNCisJICAgIG91dHB1dCA9IFhh cGlhbjo6UXVlcnkgKCJaIiArIHRlcm1fcHJlZml4ICsgc3RlbSAodGVybSkpOw0KKwkgICAgcmV0 dXJuIE5PVE1VQ0hfU1RBVFVTX1NVQ0NFU1M7DQorCX0gZWxzZSB7DQorCSAgICByZXR1cm4gX3Nl eHBfcGFyc2VfcGhyYXNlICh0ZXJtX3ByZWZpeCwgc3gtPnZhbCwgb3V0cHV0KTsNCisJfQ0KICAg ICB9DQogDQogICAgIC8qIEVtcHR5IGxpc3QgKi8NCmRpZmYgLS1naXQgYS90ZXN0L1QwODEtc2V4 cHItc2VhcmNoLnNoIGIvdGVzdC9UMDgxLXNleHByLXNlYXJjaC5zaA0KaW5kZXggOTBjZWY1MGMu LjRhMDUxYTUwIDEwMDc1NQ0KLS0tIGEvdGVzdC9UMDgxLXNleHByLXNlYXJjaC5zaA0KKysrIGIv dGVzdC9UMDgxLXNleHByLXNlYXJjaC5zaA0KQEAgLTEwMiwxNSArMTAyLDMyIEBAIEVPRg0KIHRl c3RfZXhwZWN0X2VxdWFsX2ZpbGUgRVhQRUNURUQgT1VUUFVUDQogDQogdGVzdF9iZWdpbl9zdWJ0 ZXN0ICJTZWFyY2ggYnkgJ3N1YmplY3QnICh1dGYtOCwgcGhyYXNlLXRva2VuKToiDQotdGVzdF9z dWJ0ZXN0X2tub3duX2Jyb2tlbg0KIG91dHB1dD0kKG5vdG11Y2ggc2VhcmNoIC0tcXVlcnk9c2V4 cCAnKHN1YmplY3QgdXRmOC1zw7xiasOpY3QpJyB8IG5vdG11Y2hfc2VhcmNoX3Nhbml0aXplKQ0K IHRlc3RfZXhwZWN0X2VxdWFsICIkb3V0cHV0IiAidGhyZWFkOlhYWCAgIDIwMDAtMDEtMDEgWzEv MV0gTm90bXVjaCBUZXN0IFN1aXRlOyB1dGY4LXPDvGJqw6ljdCAoaW5ib3ggdW5yZWFkKSINCiAN CiB0ZXN0X2JlZ2luX3N1YnRlc3QgIlNlYXJjaCBieSAnc3ViamVjdCcgKHV0Zi04LCBxdW90ZWQg c3RyaW5nKToiDQotdGVzdF9zdWJ0ZXN0X2tub3duX2Jyb2tlbg0KIG91dHB1dD0kKG5vdG11Y2gg c2VhcmNoIC0tcXVlcnk9c2V4cCAnKHN1YmplY3QgInV0Zjggc8O8YmrDqWN0IiknIHwgbm90bXVj aF9zZWFyY2hfc2FuaXRpemUpDQogdGVzdF9leHBlY3RfZXF1YWwgIiRvdXRwdXQiICJ0aHJlYWQ6 WFhYICAgMjAwMC0wMS0wMSBbMS8xXSBOb3RtdWNoIFRlc3QgU3VpdGU7IHV0Zjgtc8O8YmrDqWN0 IChpbmJveCB1bnJlYWQpIg0KIA0KK3Rlc3RfYmVnaW5fc3VidGVzdCAiU2VhcmNoIGJ5ICdzdWJq ZWN0JyAoY29tYmluZSBwaHJhc2UsIHRlcm0pOiINCitvdXRwdXQ9JChub3RtdWNoIHNlYXJjaCAt LXF1ZXJ5PXNleHAgJyhzdWJqZWN0IE1hYyAiY29tcGF0aWJpbGl0eSBpc3N1ZXMiKScgfCBub3Rt dWNoX3NlYXJjaF9zYW5pdGl6ZSkNCit0ZXN0X2V4cGVjdF9lcXVhbCAiJG91dHB1dCIgInRocmVh ZDpYWFggICAyMDA5LTExLTE4IFs0LzRdIEpqZ29kIEppYW5nLCBBbGV4YW5kZXIgQm90ZXJvLUxv d3J5OyBbbm90bXVjaF0gTWFjIE9TIFgvRGFyd2luIGNvbXBhdGliaWxpdHkgaXNzdWVzIChpbmJv eCB1bnJlYWQpIg0KKw0KK3Rlc3RfYmVnaW5fc3VidGVzdCAiU2VhcmNoIGJ5ICdzdWJqZWN0JyAo Y29tYmluZSBwaHJhc2UsIHRlcm0gMik6Ig0KK25vdG11Y2ggc2VhcmNoIC0tcXVlcnk9c2V4cCAn KHN1YmplY3QgKG9yIHV0ZjggImNvbXBhdGliaWxpdHkgaXNzdWVzIikpJyB8IG5vdG11Y2hfc2Vh cmNoX3Nhbml0aXplID4gT1VUUFVUDQorY2F0IDw8RU9GID4gRVhQRUNURUQNCit0aHJlYWQ6WFhY ICAgMjAwOS0xMS0xOCBbNC80XSBKamdvZCBKaWFuZywgQWxleGFuZGVyIEJvdGVyby1Mb3dyeTsg W25vdG11Y2hdIE1hYyBPUyBYL0RhcndpbiBjb21wYXRpYmlsaXR5IGlzc3VlcyAoaW5ib3ggdW5y ZWFkKQ0KK3RocmVhZDpYWFggICAyMDAwLTAxLTAxIFsxLzFdIE5vdG11Y2ggVGVzdCBTdWl0ZTsg dXRmOC1zw7xiasOpY3QgKGluYm94IHVucmVhZCkNCitFT0YNCit0ZXN0X2V4cGVjdF9lcXVhbF9m aWxlIEVYUEVDVEVEIE9VVFBVVA0KKw0KK3Rlc3RfYmVnaW5fc3VidGVzdCAiU2VhcmNoIGJ5ICdz dWJqZWN0JyAoY29tYmluZSBwaHJhc2UsIHRlcm0gMyk6Ig0KK25vdG11Y2ggc2VhcmNoIC0tcXVl cnk9c2V4cCAnKHN1YmplY3QgaXNzdWVzIFgvRGFyd2luKScgfCBub3RtdWNoX3NlYXJjaF9zYW5p dGl6ZSA+IE9VVFBVVA0KK2NhdCA8PEVPRiA+IEVYUEVDVEVEDQordGhyZWFkOlhYWCAgIDIwMDkt MTEtMTggWzQvNF0gSmpnb2QgSmlhbmcsIEFsZXhhbmRlciBCb3Rlcm8tTG93cnk7IFtub3RtdWNo XSBNYWMgT1MgWC9EYXJ3aW4gY29tcGF0aWJpbGl0eSBpc3N1ZXMgKGluYm94IHVucmVhZCkNCitF T0YNCit0ZXN0X2V4cGVjdF9lcXVhbF9maWxlIEVYUEVDVEVEIE9VVFBVVA0KKw0KIHRlc3RfYmVn aW5fc3VidGVzdCAiVW5iYWxhbmNlZCBwYXJlbnMiDQogIyBBIGNvZGUgMSBpbmRpY2F0ZXMgdGhl IGVycm9yIHdhcyBoYW5kbGVkIChhIGNyYXNoIHdpbGwgcmV0dXJuIGUuZy4gMTM5KS4NCiB0ZXN0 X2V4cGVjdF9jb2RlIDEgIm5vdG11Y2ggc2VhcmNoIC0tcXVlcnk9c2V4cCAnKCciDQotLSANCjIu MzIuMA0=