[PATCH] c++: fix %define api.value.automove false to actually disable automove

"Z. Majeed" <[email protected]> Sat, 12 Jul 2025 23:38:37 +0000 (UTC)
Newsgroups gmane.comp.parsers.bison.patches
Message-ID <[email protected]>
------=_Part_540848_1298401476.1752363517591
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

[PATCH] c++: fix %define api.value.automove false to actually disable=C2=A0=
automove

* Fixes bug reported in https://lists.gnu.org/archive/html/bug-bison/2025-0=
7/msg00002.html
* Previously a false value still applied std::move to semantic values on
=C2=A0 the right-hand sides of a rule.
* Added tests for all 5 possible settings for api.value.automove.
* Added NEWS entry.
---
=C2=A0NEWS=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 |=C2=A0 =C2=A08 ++++
=C2=A0data/skeletons/c++.m4=C2=A0 =C2=A0|=C2=A0 =C2=A02 +
=C2=A0data/skeletons/lalr1.cc |=C2=A0 =C2=A07 ++-
=C2=A0tests/c++.at=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 | 103 +++++++++=
+++++++++++++++++++++++++++++++
=C2=A04 files changed, 116 insertions(+), 4 deletions(-)


diff --git a/NEWS b/NEWS
index cdef3238..8c7dd6bc 100644
--- a/NEWS
+++ b/NEWS
@@ -2,6 +2,14 @@ GNU Bison NEWS
=C2=A0
=C2=A0* Noteworthy changes in release ?.? (????-??-??) [?]
=C2=A0
+** Bug fixes
+
+*** Bug fixes in lalr1.cc
+
+=C2=A0 The `api.value.automove` %define variable did not honor an explicit
+=C2=A0 false value. Now `%define api.value.automove false` doesn't generat=
e
+=C2=A0 automatic moves of semantic values on the right-hand sides of a rul=
e.
+
=C2=A0 =C2=A0The `cex.timeout` %define variable allows to control when we g=
ive up
=C2=A0 =C2=A0finding a unifying counterexample.=C2=A0 For instance `bison -=
Wcex
=C2=A0 =C2=A0-Dcex.timeout=3D.5 gram.y` to limit to 1/2s.
diff --git a/data/skeletons/c++.m4 b/data/skeletons/c++.m4
index fa26b069..61a49041 100644
--- a/data/skeletons/c++.m4
+++ b/data/skeletons/c++.m4
@@ -113,6 +113,8 @@ b4_percent_define_default([[define_location_comparison]=
],
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0[m4_if(b4_percent_define_get([[filename_type]]),
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 [std::string], [[true]], [[fa=
lse]])])
=C2=A0
+# api.value.automove boolean default value false
+b4_percent_define_default([[api.value.automove]], [[false]])
=C2=A0
=C2=A0
=C2=A0## ----------- ##
diff --git a/data/skeletons/lalr1.cc b/data/skeletons/lalr1.cc
index 9f60d2b4..c000a062 100644
--- a/data/skeletons/lalr1.cc
+++ b/data/skeletons/lalr1.cc
@@ -111,10 +111,9 @@ m4_define([_b4_rhs_value],
=C2=A0[b4_symbol_value([b4_rhs_data([$1], [$2]).value], [$3], [$4])])
=C2=A0
=C2=A0m4_define([b4_rhs_value],
-[b4_percent_define_ifdef([api.value.automove],
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0[YY_MOVE (_b4_rhs_value($@))],
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0[_b4_rhs_value($@)])])
-
+[b4_percent_define_flag_if([api.value.automove],
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0[YY_MOVE (_b4_rhs_value($@))],
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0[_b4_rhs_value($@)])])
=C2=A0
=C2=A0# b4_rhs_location(RULE-LENGTH, POS)
=C2=A0# ---------------------------------
diff --git a/tests/c++.at b/tests/c++.at
index 3a60fea4..b37724a3 100644
--- a/tests/c++.at
+++ b/tests/c++.at
@@ -240,6 +240,109 @@ AT_FOR_EACH_CXX([
=C2=A0AT_BISON_OPTION_POPDEFS
=C2=A0AT_CLEANUP
=C2=A0
+## --------------------------------------------------- ##
+## All possible settings for api.value.automove.=C2=A0 =C2=A0 =C2=A0 =C2=
=A0##
+## --------------------------------------------------- ##
+
+AT_SETUP([Check omitted api.value.automove default value])
+
+AT_BISON_OPTION_PUSHDEFS([%skeleton "lalr1.cc"])
+
+AT_DATA_GRAMMAR([input.yy],
+[[%skeleton "lalr1.cc"
+%language "c++"
+%token <int> VAL
+%nterm <int> exp
+%%
+exp: VAL
+]])
+
+AT_BISON_CHECK([-o input.cc input.yy])
+AT_CHECK([grep 'yylhs\.value\.int.*YY_MOVE *' input.cc], 1, [ignore])
+
+AT_BISON_OPTION_POPDEFS
+AT_CLEANUP
+
+AT_SETUP([Check api.value.automove defined with no value])
+
+AT_BISON_OPTION_PUSHDEFS([%skeleton "lalr1.cc"])
+
+AT_DATA_GRAMMAR([input.yy],
+[[%skeleton "lalr1.cc"
+%language "c++"
+%define api.value.automove
+%token <int> VAL
+%nterm <int> exp
+%%
+exp: VAL
+]])
+
+AT_BISON_CHECK([-o input.cc input.yy])
+AT_CHECK([grep 'yylhs\.value\.int.*YY_MOVE *' input.cc], 0, [ignore])
+
+AT_BISON_OPTION_POPDEFS
+AT_CLEANUP
+
+AT_SETUP([Check api.value.automove true value])
+
+AT_BISON_OPTION_PUSHDEFS([%skeleton "lalr1.cc"])
+
+AT_DATA_GRAMMAR([input.yy],
+[[%skeleton "lalr1.cc"
+%language "c++"
+%define api.value.automove true
+%token <int> VAL
+%nterm <int> exp
+%%
+exp: VAL
+]])
+
+AT_BISON_CHECK([-o input.cc input.yy])
+AT_CHECK([grep 'yylhs\.value\.int.*YY_MOVE *' input.cc], 0, [ignore])
+
+AT_BISON_OPTION_POPDEFS
+AT_CLEANUP
+
+AT_SETUP([Check api.value.automove false value])
+
+AT_BISON_OPTION_PUSHDEFS([%skeleton "lalr1.cc"])
+
+AT_DATA_GRAMMAR([input.yy],
+[[%skeleton "lalr1.cc"
+%language "c++"
+%define api.value.automove false
+%token <int> VAL
+%nterm <int> exp
+%%
+exp: VAL
+]])
+
+AT_BISON_CHECK([-o input.cc input.yy])
+AT_CHECK([grep 'yylhs\.value\.int.*YY_MOVE *' input.cc], 1, [ignore])
+
+AT_BISON_OPTION_POPDEFS
+AT_CLEANUP
+
+AT_SETUP([Check api.value.automove empty string value])
+
+AT_BISON_OPTION_PUSHDEFS([%skeleton "lalr1.cc"])
+
+AT_DATA_GRAMMAR([input.yy],
+[[%skeleton "lalr1.cc"
+%language "c++"
+%define api.value.automove ""
+%token <int> VAL
+%nterm <int> exp
+%%
+exp: VAL
+]])
+
+AT_BISON_CHECK([-o input.cc input.yy])
+AT_CHECK([grep 'yylhs\.value\.int.*YY_MOVE *' input.cc], 0, [ignore])
+
+AT_BISON_OPTION_POPDEFS
+AT_CLEANUP
+
=C2=A0## --------------------------------------------------- ##
=C2=A0## Multiple occurrences of $n and api.value.automove.=C2=A0 ##
=C2=A0## --------------------------------------------------- ##
--=C2=A0
2.45.1


------=_Part_540848_1298401476.1752363517591
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="=?UTF-8?b?em1hamVlZF9maXhfYXV0b21vdmVfZmFsc2VfZGlyZWN0aXZlLnBhdGNo?="
Content-ID: <[email protected]>

RnJvbSA1NjNhOTBhY2NjZjYxMmNkNzVmNDYzYTQwN2UxN2NiYjgzYzFiNjkwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBaYXJ0YWogTWFqZWVkIDx6bWFqZWVkQHVzZXJzLm5vcmVwbHku
Z2l0aHViLmNvbT4KRGF0ZTogU2F0LCAxMiBKdWwgMjAyNSAxNzo1MToyMSAtMDUwMApTdWJqZWN0
OiBbUEFUQ0hdIGMrKzogZml4ICVkZWZpbmUgYXBpLnZhbHVlLmF1dG9tb3ZlIGZhbHNlIHRvIGFj
dHVhbGx5IGRpc2FibGUKIGF1dG9tb3ZlCgoqIEZpeGVzIGJ1ZyByZXBvcnRlZCBpbiBodHRwczov
L2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDI1LTA3L21zZzAwMDAyLmh0
bWwKKiBQcmV2aW91c2x5IGEgZmFsc2UgdmFsdWUgc3RpbGwgYXBwbGllZCBzdGQ6Om1vdmUgdG8g
c2VtYW50aWMgdmFsdWVzIG9uCiAgdGhlIHJpZ2h0LWhhbmQgc2lkZXMgb2YgYSBydWxlLgoqIEFk
ZGVkIHRlc3RzIGZvciBhbGwgNSBwb3NzaWJsZSBzZXR0aW5ncyBmb3IgYXBpLnZhbHVlLmF1dG9t
b3ZlLgoqIEFkZGVkIE5FV1MgZW50cnkuCi0tLQogTkVXUyAgICAgICAgICAgICAgICAgICAgfCAg
IDggKysrKwogZGF0YS9za2VsZXRvbnMvYysrLm00ICAgfCAgIDIgKwogZGF0YS9za2VsZXRvbnMv
bGFscjEuY2MgfCAgIDcgKystCiB0ZXN0cy9jKysuYXQgICAgICAgICAgICB8IDEwMyArKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiA0IGZpbGVzIGNoYW5nZWQsIDExNiBp
bnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL05FV1MgYi9ORVdTCmlu
ZGV4IGNkZWYzMjM4Li44YzdkZDZiYyAxMDA2NDQKLS0tIGEvTkVXUworKysgYi9ORVdTCkBAIC0y
LDYgKzIsMTQgQEAgR05VIEJpc29uIE5FV1MKIAogKiBOb3Rld29ydGh5IGNoYW5nZXMgaW4gcmVs
ZWFzZSA/Lj8gKD8/Pz8tPz8tPz8pIFs/XQogCisqKiBCdWcgZml4ZXMKKworKioqIEJ1ZyBmaXhl
cyBpbiBsYWxyMS5jYworCisgIFRoZSBgYXBpLnZhbHVlLmF1dG9tb3ZlYCAlZGVmaW5lIHZhcmlh
YmxlIGRpZCBub3QgaG9ub3IgYW4gZXhwbGljaXQKKyAgZmFsc2UgdmFsdWUuIE5vdyBgJWRlZmlu
ZSBhcGkudmFsdWUuYXV0b21vdmUgZmFsc2VgIGRvZXNuJ3QgZ2VuZXJhdGUKKyAgYXV0b21hdGlj
IG1vdmVzIG9mIHNlbWFudGljIHZhbHVlcyBvbiB0aGUgcmlnaHQtaGFuZCBzaWRlcyBvZiBhIHJ1
bGUuCisKICAgVGhlIGBjZXgudGltZW91dGAgJWRlZmluZSB2YXJpYWJsZSBhbGxvd3MgdG8gY29u
dHJvbCB3aGVuIHdlIGdpdmUgdXAKICAgZmluZGluZyBhIHVuaWZ5aW5nIGNvdW50ZXJleGFtcGxl
LiAgRm9yIGluc3RhbmNlIGBiaXNvbiAtV2NleAogICAtRGNleC50aW1lb3V0PS41IGdyYW0ueWAg
dG8gbGltaXQgdG8gMS8ycy4KZGlmZiAtLWdpdCBhL2RhdGEvc2tlbGV0b25zL2MrKy5tNCBiL2Rh
dGEvc2tlbGV0b25zL2MrKy5tNAppbmRleCBmYTI2YjA2OS4uNjFhNDkwNDEgMTAwNjQ0Ci0tLSBh
L2RhdGEvc2tlbGV0b25zL2MrKy5tNAorKysgYi9kYXRhL3NrZWxldG9ucy9jKysubTQKQEAgLTEx
Myw2ICsxMTMsOCBAQCBiNF9wZXJjZW50X2RlZmluZV9kZWZhdWx0KFtbZGVmaW5lX2xvY2F0aW9u
X2NvbXBhcmlzb25dXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgW200X2lmKGI0X3BlcmNl
bnRfZGVmaW5lX2dldChbW2ZpbGVuYW1lX3R5cGVdXSksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBbc3RkOjpzdHJpbmddLCBbW3RydWVdXSwgW1tmYWxzZV1dKV0pCiAKKyMgYXBp
LnZhbHVlLmF1dG9tb3ZlIGJvb2xlYW4gZGVmYXVsdCB2YWx1ZSBmYWxzZQorYjRfcGVyY2VudF9k
ZWZpbmVfZGVmYXVsdChbW2FwaS52YWx1ZS5hdXRvbW92ZV1dLCBbW2ZhbHNlXV0pCiAKIAogIyMg
LS0tLS0tLS0tLS0gIyMKZGlmZiAtLWdpdCBhL2RhdGEvc2tlbGV0b25zL2xhbHIxLmNjIGIvZGF0
YS9za2VsZXRvbnMvbGFscjEuY2MKaW5kZXggOWY2MGQyYjQuLmMwMDBhMDYyIDEwMDY0NAotLS0g
YS9kYXRhL3NrZWxldG9ucy9sYWxyMS5jYworKysgYi9kYXRhL3NrZWxldG9ucy9sYWxyMS5jYwpA
QCAtMTExLDEwICsxMTEsOSBAQCBtNF9kZWZpbmUoW19iNF9yaHNfdmFsdWVdLAogW2I0X3N5bWJv
bF92YWx1ZShbYjRfcmhzX2RhdGEoWyQxXSwgWyQyXSkudmFsdWVdLCBbJDNdLCBbJDRdKV0pCiAK
IG00X2RlZmluZShbYjRfcmhzX3ZhbHVlXSwKLVtiNF9wZXJjZW50X2RlZmluZV9pZmRlZihbYXBp
LnZhbHVlLmF1dG9tb3ZlXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBbWVlfTU9WRSAoX2I0
X3Joc192YWx1ZSgkQCkpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBbX2I0X3Joc192YWx1
ZSgkQCldKV0pCi0KK1tiNF9wZXJjZW50X2RlZmluZV9mbGFnX2lmKFthcGkudmFsdWUuYXV0b21v
dmVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW1lZX01PVkUgKF9iNF9yaHNfdmFsdWUo
JEApKV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbX2I0X3Joc192YWx1ZSgkQCldKV0p
CiAKICMgYjRfcmhzX2xvY2F0aW9uKFJVTEUtTEVOR1RILCBQT1MpCiAjIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvYysrLmF0IGIvdGVzdHMvYysr
LmF0CmluZGV4IDNhNjBmZWE0Li5iMzc3MjRhMyAxMDA2NDQKLS0tIGEvdGVzdHMvYysrLmF0Cisr
KyBiL3Rlc3RzL2MrKy5hdApAQCAtMjQwLDYgKzI0MCwxMDkgQEAgQVRfRk9SX0VBQ0hfQ1hYKFsK
IEFUX0JJU09OX09QVElPTl9QT1BERUZTCiBBVF9DTEVBTlVQCiAKKyMjIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgQWxsIHBvc3NpYmxl
IHNldHRpbmdzIGZvciBhcGkudmFsdWUuYXV0b21vdmUuICAgICAgICMjCisjIyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworQVRfU0VUVVAo
W0NoZWNrIG9taXR0ZWQgYXBpLnZhbHVlLmF1dG9tb3ZlIGRlZmF1bHQgdmFsdWVdKQorCitBVF9C
SVNPTl9PUFRJT05fUFVTSERFRlMoWyVza2VsZXRvbiAibGFscjEuY2MiXSkKKworQVRfREFUQV9H
UkFNTUFSKFtpbnB1dC55eV0sCitbWyVza2VsZXRvbiAibGFscjEuY2MiCislbGFuZ3VhZ2UgImMr
KyIKKyV0b2tlbiA8aW50PiBWQUwKKyVudGVybSA8aW50PiBleHAKKyUlCitleHA6IFZBTAorXV0p
CisKK0FUX0JJU09OX0NIRUNLKFstbyBpbnB1dC5jYyBpbnB1dC55eV0pCitBVF9DSEVDSyhbZ3Jl
cCAneXlsaHNcLnZhbHVlXC5pbnQuKllZX01PVkUgKicgaW5wdXQuY2NdLCAxLCBbaWdub3JlXSkK
KworQVRfQklTT05fT1BUSU9OX1BPUERFRlMKK0FUX0NMRUFOVVAKKworQVRfU0VUVVAoW0NoZWNr
IGFwaS52YWx1ZS5hdXRvbW92ZSBkZWZpbmVkIHdpdGggbm8gdmFsdWVdKQorCitBVF9CSVNPTl9P
UFRJT05fUFVTSERFRlMoWyVza2VsZXRvbiAibGFscjEuY2MiXSkKKworQVRfREFUQV9HUkFNTUFS
KFtpbnB1dC55eV0sCitbWyVza2VsZXRvbiAibGFscjEuY2MiCislbGFuZ3VhZ2UgImMrKyIKKyVk
ZWZpbmUgYXBpLnZhbHVlLmF1dG9tb3ZlCisldG9rZW4gPGludD4gVkFMCislbnRlcm0gPGludD4g
ZXhwCislJQorZXhwOiBWQUwKK11dKQorCitBVF9CSVNPTl9DSEVDSyhbLW8gaW5wdXQuY2MgaW5w
dXQueXldKQorQVRfQ0hFQ0soW2dyZXAgJ3l5bGhzXC52YWx1ZVwuaW50LipZWV9NT1ZFIConIGlu
cHV0LmNjXSwgMCwgW2lnbm9yZV0pCisKK0FUX0JJU09OX09QVElPTl9QT1BERUZTCitBVF9DTEVB
TlVQCisKK0FUX1NFVFVQKFtDaGVjayBhcGkudmFsdWUuYXV0b21vdmUgdHJ1ZSB2YWx1ZV0pCisK
K0FUX0JJU09OX09QVElPTl9QVVNIREVGUyhbJXNrZWxldG9uICJsYWxyMS5jYyJdKQorCitBVF9E
QVRBX0dSQU1NQVIoW2lucHV0Lnl5XSwKK1tbJXNrZWxldG9uICJsYWxyMS5jYyIKKyVsYW5ndWFn
ZSAiYysrIgorJWRlZmluZSBhcGkudmFsdWUuYXV0b21vdmUgdHJ1ZQorJXRva2VuIDxpbnQ+IFZB
TAorJW50ZXJtIDxpbnQ+IGV4cAorJSUKK2V4cDogVkFMCitdXSkKKworQVRfQklTT05fQ0hFQ0so
Wy1vIGlucHV0LmNjIGlucHV0Lnl5XSkKK0FUX0NIRUNLKFtncmVwICd5eWxoc1wudmFsdWVcLmlu
dC4qWVlfTU9WRSAqJyBpbnB1dC5jY10sIDAsIFtpZ25vcmVdKQorCitBVF9CSVNPTl9PUFRJT05f
UE9QREVGUworQVRfQ0xFQU5VUAorCitBVF9TRVRVUChbQ2hlY2sgYXBpLnZhbHVlLmF1dG9tb3Zl
IGZhbHNlIHZhbHVlXSkKKworQVRfQklTT05fT1BUSU9OX1BVU0hERUZTKFslc2tlbGV0b24gImxh
bHIxLmNjIl0pCisKK0FUX0RBVEFfR1JBTU1BUihbaW5wdXQueXldLAorW1slc2tlbGV0b24gImxh
bHIxLmNjIgorJWxhbmd1YWdlICJjKysiCislZGVmaW5lIGFwaS52YWx1ZS5hdXRvbW92ZSBmYWxz
ZQorJXRva2VuIDxpbnQ+IFZBTAorJW50ZXJtIDxpbnQ+IGV4cAorJSUKK2V4cDogVkFMCitdXSkK
KworQVRfQklTT05fQ0hFQ0soWy1vIGlucHV0LmNjIGlucHV0Lnl5XSkKK0FUX0NIRUNLKFtncmVw
ICd5eWxoc1wudmFsdWVcLmludC4qWVlfTU9WRSAqJyBpbnB1dC5jY10sIDEsIFtpZ25vcmVdKQor
CitBVF9CSVNPTl9PUFRJT05fUE9QREVGUworQVRfQ0xFQU5VUAorCitBVF9TRVRVUChbQ2hlY2sg
YXBpLnZhbHVlLmF1dG9tb3ZlIGVtcHR5IHN0cmluZyB2YWx1ZV0pCisKK0FUX0JJU09OX09QVElP
Tl9QVVNIREVGUyhbJXNrZWxldG9uICJsYWxyMS5jYyJdKQorCitBVF9EQVRBX0dSQU1NQVIoW2lu
cHV0Lnl5XSwKK1tbJXNrZWxldG9uICJsYWxyMS5jYyIKKyVsYW5ndWFnZSAiYysrIgorJWRlZmlu
ZSBhcGkudmFsdWUuYXV0b21vdmUgIiIKKyV0b2tlbiA8aW50PiBWQUwKKyVudGVybSA8aW50PiBl
eHAKKyUlCitleHA6IFZBTAorXV0pCisKK0FUX0JJU09OX0NIRUNLKFstbyBpbnB1dC5jYyBpbnB1
dC55eV0pCitBVF9DSEVDSyhbZ3JlcCAneXlsaHNcLnZhbHVlXC5pbnQuKllZX01PVkUgKicgaW5w
dXQuY2NdLCAwLCBbaWdub3JlXSkKKworQVRfQklTT05fT1BUSU9OX1BPUERFRlMKK0FUX0NMRUFO
VVAKKwogIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tICMjCiAjIyBNdWx0aXBsZSBvY2N1cnJlbmNlcyBvZiAkbiBhbmQgYXBpLnZhbHVlLmF1dG9t
b3ZlLiAgIyMKICMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSAjIwotLSAKMi40NS4xCgo=

------=_Part_540848_1298401476.1752363517591--