[PATCH branch-1.6] wip: eval: Factor out numeric parsing

Eric Blake via M4-patches <[email protected]> Sun, 1 Jun 2025 21:14:08 -0500
Newsgroups gmane.comp.gnu.m4.patches
Message-ID <[email protected]>
SSB3YW50IHRvIHRlYWNoIGFsbCBvdGhlciBidWlsdGlucyB0aGF0IHBhcnNlIG51bWJlcnMgdG8g
YWNjZXB0CmFsdGVybmF0aXZlIGJhc2VzIHdoZW4gcnVubmluZyBpbiBHTlUgbW9kZTsgd2l0aCB0
aGUgY2F2ZWF0IHRoYXQgZXZhbApNVVNUIHRyZWF0IGxlYWRpbmcgMCBhcyBvY3RhbCBpbiBleHBy
ZXNzaW9ucywgYnV0IGV2ZXJ5dGhpbmcgZWxzZQooaW5jbHVkaW5nIGV2YWwncyBvcHRpb25hbCBi
YXNlIGFuZCB3aWR0aCBwYXJhbWV0ZXJzKSB3aWxsIHRyZWF0CmxlYWRpbmcgMCBhcyBkZWNpbWFs
IGFuZCBpc3N1ZSBhIHdhcm5pbmcuICBJJ2xsIHByb2JhYmx5IG1ha2UgdGhlCmxlYWRpbmcgemVy
byB3YXJuaW5nIG9wdGlvbmFsIHVuZGVyIGEgZGVidWdtb2RlIGxldHRlciwgc2luY2UgdGhlcmUK
YXJlIGV4aXN0aW5nIHNjcmlwdHMgdGhhdCBpbnRlbnRpb25hbGx5IHVzZSAiaW5jcigwZGVmbihg
dmFsJykpIiBldmVuCndoZW4gYHZhbCcgaXMgbm90IHlldCBkZWZpbmVkLCBidXQgdGhhdCB3aWxs
IGJlIGEgc2VwYXJhdGUgcGF0Y2guICBJCmFsc28gd2FudCB0byB0ZWFjaCBtNCB0byB1bmRlcnN0
YW5kIHRoZSBzYW1lIHJhZGl4IHNwZWxsaW5ncyBhcyBiYXNoCihpZS4gIjM2I2F6IiBhcyBhIHN5
bm9ueW0gb2YgIjByMzY6YXoiKTsgYmFzaCBjb21wYXRpYmlsaXR5IGFsc28KZGVtYW5kcyBzdXBw
b3J0aW5nIHRocm91Z2ggYmFzZSA2NCAoWiBpcyA2MiwgdGhlbiBAIGFuZCBfIHByb3ZpZGUgdGhl
CnJlbWFpbmluZyB0d28gZGlnaXRzKS4KClRvIHByb2dyZXNzIHRvd2FyZHMgdGhhdCBnb2FsLCB0
aGlzIHBhdGNoIGZhY3RvcnMgb3V0IG51bWVyaWMgcGFyc2luZwpvdXQgb2YgZXZhbC5jIGludG8g
YnVpbHRpbi5jLCBzbyB0aGF0IHRoZSBuZXh0IHBhdGNoIGNhbiByZXVzZSBpdCBpbgptb3JlIHBs
YWNlcy4gIFRoZSBuZXcgcGFyc2VyIGlzc3VlcyB3YXJuaW5ncyBkaXJlY3RseSwgaW5jbHVkaW5n
IGEgbmV3Cndhcm5pbmcgd2hlbiBvdmVyZmxvdyBpcyBlbmNvdW50ZXJlZCAoYW5vdGhlciBwbGFj
ZSB3aGVyZSBhIHNlcGFyYXRlCmRlYnVnbW9kZSBvcHRpb24gbWlnaHQgYmUgbmljZSkuCgpGSVhN
RTogY2hhbmdlbG9nCi0tLQogZG9jL200LnRleGkgICB8ICAgNCArLQogc3JjL2J1aWx0aW4uYyB8
IDExOCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMv
ZXZhbC5jICAgIHwgMTI2ICsrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiBzcmMvbTQuaCAgICAgIHwgICAyICsKIDQgZmlsZXMgY2hhbmdlZCwgMTUzIGlu
c2VydGlvbnMoKyksIDk3IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RvYy9tNC50ZXhpIGIv
ZG9jL200LnRleGkKaW5kZXggOTcyOWQyYWMuLjUwODBiYWY4IDEwMDY0NAotLS0gYS9kb2MvbTQu
dGV4aQorKysgYi9kb2MvbTQudGV4aQpAQCAtNzU0MSwxMCArNzU0MSwxMCBAQCBFdmFsCiBAZXJy
b3J7fW00OnN0ZGluOjEwOiB3YXJuaW5nOiBldmFsOiBtaXNzaW5nIG9wZXJhbmQ6ICcxKycKIEBy
ZXN1bHR7fQogZXZhbChgMHgnKQotQGVycm9ye31tNDpzdGRpbjoxMTogd2FybmluZzogZXZhbDog
aW52YWxpZCBudW1iZXI6ICcweCcKK0BlcnJvcnt9bTQ6c3RkaW46MTE6IHdhcm5pbmc6IGV2YWw6
IG1pc3NpbmcgZGlnaXQgYWZ0ZXIgcmFkaXggJzB4JwogQHJlc3VsdHt9CiBldmFsKGAwMTIzOScp
Ci1AZXJyb3J7fW00OnN0ZGluOjEyOiB3YXJuaW5nOiBldmFsOiBpbnZhbGlkIG51bWJlcjogJzAx
MjM5JworQGVycm9ye31tNDpzdGRpbjoxMjogd2FybmluZzogZXZhbDogaW52YWxpZCBkaWdpdCBm
b3IgcmFkaXggODogJzAxMjM5JwogQHJlc3VsdHt9CiBkZWZpbmUoYGZvbycsIGA2NjYnKQogQHJl
c3VsdHt9CmRpZmYgLS1naXQgYS9zcmMvYnVpbHRpbi5jIGIvc3JjL2J1aWx0aW4uYwppbmRleCBl
ODgwMjYxMC4uYjI2ZDJiNzcgMTAwNjQ0Ci0tLSBhL3NyYy9idWlsdGluLmMKKysrIGIvc3JjL2J1
aWx0aW4uYwpAQCAtNTM0LDYgKzUzNCwxMjQgQEAgYmFkX2FyZ2MgKGNvbnN0IGNhbGxfaW5mbyAq
bmFtZSwgaW50IGFyZ2MsIHVuc2lnbmVkIGludCBtaW4sIHVuc2lnbmVkIGludCBtYXgpCiAgIHJl
dHVybiBmYWxzZTsKIH0KCisvKiBUaGUgZnVuY3Rpb24gcGFyc2VfbnVtICgpIGRldGVybWluZXMg
dGhlIG51bWVyaWMgdmFsdWUgc3RhcnRpbmcgYXQKKyAgIEFSRyB3aGljaCBtdXN0IGJlIGF0IGEg
ZGlnaXQsIGFuZCBzZXR0aW5nICpFTkQgdG8gdGhlIGZpcnN0CisgICBub24tZGlnaXQuICBXYXJu
IG9uIGJlaGFsZiBvZiBOQU1FIGlmIGludmFsaWQgZGlnaXRzIGFyZQorICAgZW5jb3VudGVyZWQs
IGlmIHRoZSB2YWx1ZSBvdmVyZmxvd3MsIG9yIGlmIHRoZXJlIGlzIGEgbGVhZGluZyB6ZXJvLgor
ICAgREVDSU1BTCBpcyB0cnVlIGlmIGEgbGVhZGluZyB6ZXJvIGludHJvZHVjZXMgZGVjaW1hbCBp
bnN0ZWFkIG9mCisgICBvY3RhbC4gIFVwZGF0ZSBSRVNVTFQgYW5kIHJldHVybiB0cnVlIG9uIHN1
Y2Nlc3NmdWwgY29udmVyc2lvbi4KKyAgIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHBy
b2Nlc3NpbmcgYW55IHNpZ25zLiAgKi8KK2Jvb2wKK3BhcnNlX251bSAoY29uc3QgY2FsbF9pbmZv
ICpuYW1lLCBjb25zdCBjaGFyICphcmcsIGJvb2wgZGVjaW1hbCwKKyAgICAgICAgICAgY29uc3Qg
Y2hhciAqKmVuZCwgdWludDMyX3QgKnJlc3VsdCkKK3sKKyAgdW5zaWduZWQgYmFzZSA9IDEwOwor
ICB1bnNpZ25lZCBkaWdpdDsKKyAgdWludDMyX3QgdmFsdWUgPSAwOworICBjb25zdCBjaGFyICpz
dGFydCA9IGFyZzsKKyAgYm9vbCBsZWFkaW5nX3plcm8gPSBmYWxzZTsKKyAgYm9vbCBvdmVyZmxv
dyA9IGZhbHNlOworCisgIGlmICgqYXJnID09ICcwJykKKyAgICB7CisgICAgICBzd2l0Y2ggKCor
K2FyZykKKyAgICAgICAgeworICAgICAgICBjYXNlICd4JzoKKyAgICAgICAgY2FzZSAnWCc6Cisg
ICAgICAgICAgYmFzZSA9IDE2OworICAgICAgICAgIGFyZysrOworICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgIGNhc2UgJ2InOgorICAgICAgICBjYXNlICdCJzoKKyAgICAgICAgICBiYXNlID0g
MjsKKyAgICAgICAgICBhcmcrKzsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlICdy
JzoKKyAgICAgICAgY2FzZSAnUic6CisgICAgICAgICAgYmFzZSA9IDA7CisgICAgICAgICAgd2hp
bGUgKGNfaXNkaWdpdCAoKisrYXJnKSAmJiBiYXNlIDw9IDM2KQorICAgICAgICAgICAgYmFzZSA9
IDEwICogYmFzZSArICphcmcgLSAnMCc7CisgICAgICAgICAgaWYgKGJhc2UgPT0gMCB8fCBiYXNl
ID4gMzYgfHwgKmFyZyAhPSAnOicpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICplbmQg
PSArK2FyZzsKKyAgICAgICAgICAgICAgbTRfd2FybiAoMCwgbmFtZSwgXygiaW52YWxpZCBudW1l
cmljIGJhc2UgJXMiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgcXVvdGVhcmdfc3R5bGVfbWVt
IChsb2NhbGVfcXVvdGluZ19zdHlsZSwgc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXJnIC0gc3RhcnQpKTsKKyAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgfQorICAgICAgICAgIGFyZysrOworICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgbGVhZGluZ196ZXJvID0gdHJ1ZTsKKyAgICAg
ICAgICBhcmctLTsKKyAgICAgICAgICBpZiAoIWRlY2ltYWwpCisgICAgICAgICAgICBiYXNlID0g
ODsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICBpZiAoIWNfaXNhbG51bSAo
KmFyZykpCisgICAgICAgIHsKKyAgICAgICAgICAqZW5kID0gYXJnOworICAgICAgICAgIG00X3dh
cm4gKDAsIG5hbWUsIF8oIm1pc3NpbmcgZGlnaXQgYWZ0ZXIgcmFkaXggJXMiKSwKKyAgICAgICAg
ICAgICAgICAgICBxdW90ZWFyZ19zdHlsZV9tZW0gKGxvY2FsZV9xdW90aW5nX3N0eWxlLCBzdGFy
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZyAtIHN0YXJ0KSk7
CisgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgIGZvciAoOyBj
X2lzYWxudW0gKCphcmcpOyBhcmcrKykKKyAgICB7CisgICAgICBpZiAoY19pc2RpZ2l0ICgqYXJn
KSkKKyAgICAgICAgZGlnaXQgPSAqYXJnIC0gJzAnOworICAgICAgZWxzZSBpZiAoY19pc2xvd2Vy
ICgqYXJnKSkKKyAgICAgICAgZGlnaXQgPSAqYXJnIC0gJ2EnICsgMTA7CisgICAgICBlbHNlCisg
ICAgICAgIGRpZ2l0ID0gKmFyZyAtICdBJyArIDEwOworCisgICAgICBpZiAoYmFzZSA9PSAxKQor
ICAgICAgICB7CisgICAgICAgICAgaWYgKGRpZ2l0ID09IDEpCisgICAgICAgICAgICB2YWx1ZSsr
OworICAgICAgICAgIGVsc2UgaWYgKGRpZ2l0ID09IDAgJiYgdmFsdWUgPT0gMCkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgKmVuZCA9ICsrYXJnOworICAgICAgICAgICAgICBtNF93YXJuICgwLCBuYW1lLCBfKCJpbnZh
bGlkIGRpZ2l0IGZvciByYWRpeCAldTogJXMiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgYmFz
ZSwgcXVvdGVhcmdfc3R5bGVfbWVtIChsb2NhbGVfcXVvdGluZ19zdHlsZSwgc3RhcnQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnIC0gc3RhcnQp
KTsKKyAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICBlbHNlIGlmIChkaWdpdCA+PSBiYXNlKQorICAgICAgICB7CisgICAgICAgICAgKmVu
ZCA9ICsrYXJnOworICAgICAgICAgIG00X3dhcm4gKDAsIG5hbWUsIF8oImludmFsaWQgZGlnaXQg
Zm9yIHJhZGl4ICV1OiAlcyIpLAorICAgICAgICAgICAgICAgICAgIGJhc2UsIHF1b3RlYXJnX3N0
eWxlX21lbSAobG9jYWxlX3F1b3Rpbmdfc3R5bGUsIHN0YXJ0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnIC0gc3RhcnQpKTsKKyAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGlm
ICh2YWx1ZSAqIGJhc2UgKyBkaWdpdCA8IHZhbHVlKQorICAgICAgICAgICAgb3ZlcmZsb3cgPSB0
cnVlOworICAgICAgICAgIHZhbHVlID0gdmFsdWUgKiBiYXNlICsgZGlnaXQ7CisgICAgICAgIH0K
KyAgICB9CisgIGlmIChsZWFkaW5nX3plcm8gJiYgKHZhbHVlIHx8IG92ZXJmbG93KSkKKyAgICBt
NF93YXJuICgwLCBuYW1lLCBfKCJsZWFkaW5nIDAgdHJlYXRlZCBhcyBiYXNlICV1OiAlcyIpLCBi
YXNlLAorICAgICAgICAgICAgIHF1b3RlYXJnX3N0eWxlX21lbSAobG9jYWxlX3F1b3Rpbmdfc3R5
bGUsIHN0YXJ0LCBhcmcgLSBzdGFydCkpOworICBpZiAob3ZlcmZsb3cpCisgICAgbTRfd2FybiAo
MCwgbmFtZSwgXygibnVtZXJpYyBvdmVyZmxvdyBkZXRlY3RlZDogJXMiKSwKKyAgICAgICAgICAg
ICBxdW90ZWFyZ19zdHlsZV9tZW0gKGxvY2FsZV9xdW90aW5nX3N0eWxlLCBzdGFydCwgYXJnIC0g
c3RhcnQpKTsKKyAgKmVuZCA9IGFyZzsKKyAgKnJlc3VsdCA9IHZhbHVlOworICByZXR1cm4gdHJ1
ZTsKK30KKwogLyogVGhlIGZ1bmN0aW9uIG51bWVyaWNfYXJnICgpIGNvbnZlcnRzIEFSRyBvZiBs
ZW5ndGggTEVOIHRvIGFuIGludAogICAgcG9pbnRlZCB0byBieSBWQUxVRVAuICBJZiB0aGUgY29u
dmVyc2lvbiBmYWlscywgcHJpbnQgZXJyb3IgbWVzc2FnZQogICAgb24gYmVoYWxmIG9mIE5BTUUu
ICBSZXR1cm4gdHJ1ZSBpZmYgY29udmVyc2lvbiBzdWNjZWVkcy4gICovCmRpZmYgLS1naXQgYS9z
cmMvZXZhbC5jIGIvc3JjL2V2YWwuYwppbmRleCAxOGNhZTllMi4uMmFlOTgwYTcgMTAwNjQ0Ci0t
LSBhL3NyYy9ldmFsLmMKKysrIGIvc3JjL2V2YWwuYwpAQCAtOTIsOCArOTIsOSBAQCB0eXBlZGVm
IGVudW0gZXZhbF9lcnJvcgogfQogZXZhbF9lcnJvcjsKCi1zdGF0aWMgZXZhbF9lcnJvciBwcmlt
YXJ5IChpbnQzMl90ICopOwotc3RhdGljIGV2YWxfZXJyb3IgcGFyc2VfZXhwciAoaW50MzJfdCAq
LCBldmFsX2Vycm9yLCB1bnNpZ25lZCk7CitzdGF0aWMgZXZhbF9lcnJvciBwcmltYXJ5IChjb25z
dCBjYWxsX2luZm8gKiwgaW50MzJfdCAqKTsKK3N0YXRpYyBldmFsX2Vycm9yIHBhcnNlX2V4cHIg
KGNvbnN0IGNhbGxfaW5mbyAqLCBpbnQzMl90ICosIGV2YWxfZXJyb3IsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCk7CgogLyogTGV4aWNhbCBmdW5jdGlvbnMuICAqLwoK
QEAgLTEyNSw3ICsxMjYsNyBAQCBldmFsX3VuZG8gKHZvaWQpCiAvKiBWQUwgaXMgbnVtZXJpY2Fs
IHZhbHVlLCBpZiBhbnkuICAqLwoKIHN0YXRpYyBldmFsX3Rva2VuCi1ldmFsX2xleCAoaW50MzJf
dCAqdmFsKQorZXZhbF9sZXggKGNvbnN0IGNhbGxfaW5mbyAqbmFtZSwgaW50MzJfdCAqdmFsKQog
ewogICB3aGlsZSAoZXZhbF90ZXh0ICE9IGVuZF90ZXh0ICYmIGNfaXNzcGFjZSAoKmV2YWxfdGV4
dCkpCiAgICAgZXZhbF90ZXh0Kys7CkBAIC0xNDAsNzkgKzE0MSwxMyBAQCBldmFsX2xleCAoaW50
MzJfdCAqdmFsKQoKICAgaWYgKGNfaXNkaWdpdCAoKmV2YWxfdGV4dCkpCiAgICAgewotICAgICAg
dW5zaWduZWQgaW50IGJhc2UsIGRpZ2l0OwogICAgICAgLyogVGhlIGRvY3VtZW50YXRpb24gc2F5
cyB0aGF0ICJvdmVyZmxvdyBzaWxlbnRseSByZXN1bHRzIGluIHdyYXBhcm91bmQiLgogICAgICAg
ICAgVGhlcmVmb3JlIHVzZSBhbiB1bnNpZ25lZCBpbnRlZ2VyIHR5cGUgdG8gYXZvaWQgdW5kZWZp
bmVkIGJlaGF2aW91cgogICAgICAgICAgd2hlbiBwYXJzaW5nICctMjE0NzQ4MzY0OCcuICAqLwot
ICAgICAgdWludDMyX3QgdmFsdWU7Ci0gICAgICBib29sIHNlZW5fZGlnaXQgPSBmYWxzZTsKLQot
ICAgICAgaWYgKCpldmFsX3RleHQgPT0gJzAnKQotICAgICAgICB7Ci0gICAgICAgICAgZXZhbF90
ZXh0Kys7Ci0gICAgICAgICAgc3dpdGNoICgqZXZhbF90ZXh0KQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgY2FzZSAneCc6Ci0gICAgICAgICAgICBjYXNlICdYJzoKLSAgICAgICAgICAgICAg
YmFzZSA9IDE2OwotICAgICAgICAgICAgICBldmFsX3RleHQrKzsKLSAgICAgICAgICAgICAgYnJl
YWs7Ci0KLSAgICAgICAgICAgIGNhc2UgJ2InOgotICAgICAgICAgICAgY2FzZSAnQic6Ci0gICAg
ICAgICAgICAgIGJhc2UgPSAyOwotICAgICAgICAgICAgICBldmFsX3RleHQrKzsKLSAgICAgICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgJ3InOgotICAgICAgICAgICAgY2FzZSAn
Uic6Ci0gICAgICAgICAgICAgIGJhc2UgPSAwOwotICAgICAgICAgICAgICBldmFsX3RleHQrKzsK
LSAgICAgICAgICAgICAgd2hpbGUgKGNfaXNkaWdpdCAoKmV2YWxfdGV4dCkgJiYgYmFzZSA8PSAz
NikKLSAgICAgICAgICAgICAgICBiYXNlID0gMTAgKiBiYXNlICsgKmV2YWxfdGV4dCsrIC0gJzAn
OwotICAgICAgICAgICAgICBpZiAoYmFzZSA9PSAwIHx8IGJhc2UgPiAzNiB8fCAqZXZhbF90ZXh0
ICE9ICc6JykKLSAgICAgICAgICAgICAgICByZXR1cm4gQkFETlVNOwotICAgICAgICAgICAgICBl
dmFsX3RleHQrKzsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAgIGJhc2UgPSA4OwotICAgICAgICAgICAgICBzZWVuX2RpZ2l0ID0gdHJ1
ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgZWxzZQotICAgICAgICBiYXNlID0g
MTA7Ci0KLSAgICAgIHZhbHVlID0gMDsKLSAgICAgIGZvciAoOyAqZXZhbF90ZXh0OyBldmFsX3Rl
eHQrKywgc2Vlbl9kaWdpdCA9IHRydWUpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoY19pc2Rp
Z2l0ICgqZXZhbF90ZXh0KSkKLSAgICAgICAgICAgIGRpZ2l0ID0gKmV2YWxfdGV4dCAtICcwJzsK
LSAgICAgICAgICBlbHNlIGlmIChjX2lzbG93ZXIgKCpldmFsX3RleHQpKQotICAgICAgICAgICAg
ZGlnaXQgPSAqZXZhbF90ZXh0IC0gJ2EnICsgMTA7Ci0gICAgICAgICAgZWxzZSBpZiAoY19pc3Vw
cGVyICgqZXZhbF90ZXh0KSkKLSAgICAgICAgICAgIGRpZ2l0ID0gKmV2YWxfdGV4dCAtICdBJyAr
IDEwOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgaWYg
KGJhc2UgPT0gMSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgaWYgKGRpZ2l0ID09IDEp
Ci0gICAgICAgICAgICAgICAgdmFsdWUrKzsKLSAgICAgICAgICAgICAgZWxzZSBpZiAoZGlnaXQg
PT0gMCAmJiB2YWx1ZSA9PSAwKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmV0dXJuIEJBRE5VTTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICBlbHNlIGlmIChkaWdpdCA+PSBiYXNlKQotICAgICAgICAgICAgcmV0dXJuIEJB
RE5VTTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlICogYmFzZSAr
IGRpZ2l0OwotICAgICAgICB9CisgICAgICB1aW50MzJfdCB2YWx1ZSA9IDA7CisgICAgICBib29s
IGdvb2QgPSBwYXJzZV9udW0gKG5hbWUsIGV2YWxfdGV4dCwgZmFsc2UsICZldmFsX3RleHQsICZ2
YWx1ZSk7CiAgICAgICAqdmFsID0gdmFsdWU7Ci0gICAgICBpZiAoIXNlZW5fZGlnaXQpCi0gICAg
ICAgIHJldHVybiBCQUROVU07Ci0gICAgICByZXR1cm4gTlVNQkVSOworICAgICAgcmV0dXJuIGdv
b2QgPyBOVU1CRVIgOiBCQUROVU07CiAgICAgfQoKICAgc3dpdGNoICgqZXZhbF90ZXh0KyspCkBA
IC0zMzAsMTIgKzI2NSwxMiBAQCBldmFsX2xleCAoaW50MzJfdCAqdmFsKQoKIC8qIFBhcnNlIGAo
ZXhwciknLCB1bmFyeSBvcGVyYXRvcnMsIGFuZCBudW1iZXJzLiAgKi8KIHN0YXRpYyBldmFsX2Vy
cm9yCi1wcmltYXJ5IChpbnQzMl90ICp2MSkKK3ByaW1hcnkgKGNvbnN0IGNhbGxfaW5mbyAqbmFt
ZSwgaW50MzJfdCAqdjEpCiB7CiAgIGV2YWxfZXJyb3IgZXI7CiAgIGludDMyX3QgdjI7CgotICBz
d2l0Y2ggKGV2YWxfbGV4ICh2MSkpCisgIHN3aXRjaCAoZXZhbF9sZXggKG5hbWUsIHYxKSkKICAg
ICB7CiAgICAgICAvKiBOdW1iZXIgKi8KICAgICBjYXNlIE5VTUJFUjoKQEAgLTM0MywxMSArMjc4
LDExIEBAIHByaW1hcnkgKGludDMyX3QgKnYxKQoKICAgICAgIC8qIFBhcmVudGhlc2lzICovCiAg
ICAgY2FzZSBMRUZUUDoKLSAgICAgIGVyID0gcHJpbWFyeSAodjEpOwotICAgICAgZXIgPSBwYXJz
ZV9leHByICh2MSwgZXIsIE1JTl9QUkVDKTsKKyAgICAgIGVyID0gcHJpbWFyeSAobmFtZSwgdjEp
OworICAgICAgZXIgPSBwYXJzZV9leHByIChuYW1lLCB2MSwgZXIsIE1JTl9QUkVDKTsKICAgICAg
IGlmIChlciA+PSBTWU5UQVhfRVJST1IpCiAgICAgICAgIHJldHVybiBlcjsKLSAgICAgIHN3aXRj
aCAoZXZhbF9sZXggKCZ2MikpCisgICAgICBzd2l0Y2ggKGV2YWxfbGV4IChuYW1lLCAmdjIpKQog
ICAgICAgICB7CiAgICAgICAgIGNhc2UgRVJST1I6CiAgICAgICAgICAgcmV0dXJuIFVOS05PV05f
SU5QVVQ7CkBAIC0zNjcsMTcgKzMwMiwxNyBAQCBwcmltYXJ5IChpbnQzMl90ICp2MSkKICAgICAg
ICAgIHVuc2lnbmVkIHRvIHNpZ25lZCBpcyBhIHNpbGVudCB0d29zLWNvbXBsZW1lbnQKICAgICAg
ICAgIHdyYXAtYXJvdW5kLiAgKi8KICAgICBjYXNlIFBMVVM6Ci0gICAgICByZXR1cm4gcHJpbWFy
eSAodjEpOworICAgICAgcmV0dXJuIHByaW1hcnkgKG5hbWUsIHYxKTsKICAgICBjYXNlIE1JTlVT
OgotICAgICAgZXIgPSBwcmltYXJ5ICh2MSk7CisgICAgICBlciA9IHByaW1hcnkgKG5hbWUsIHYx
KTsKICAgICAgICp2MSA9IChpbnQzMl90KSAtKHVpbnQzMl90KSAqdjE7CiAgICAgICByZXR1cm4g
ZXI7CiAgICAgY2FzZSBOT1Q6Ci0gICAgICBlciA9IHByaW1hcnkgKHYxKTsKKyAgICAgIGVyID0g
cHJpbWFyeSAobmFtZSwgdjEpOwogICAgICAgKnYxID0gfip2MTsKICAgICAgIHJldHVybiBlcjsK
ICAgICBjYXNlIExOT1Q6Ci0gICAgICBlciA9IHByaW1hcnkgKHYxKTsKKyAgICAgIGVyID0gcHJp
bWFyeSAobmFtZSwgdjEpOwogICAgICAgKnYxID0gKnYxID09IDAgPyAxIDogMDsKICAgICAgIHJl
dHVybiBlcjsKCkBAIC00MDAsNyArMzM1LDggQEAgcHJpbWFyeSAoaW50MzJfdCAqdjEpCgogLyog
UGFyc2UgYmluYXJ5IG9wZXJhdG9ycyB3aXRoIGF0IGxlYXN0IE1JTl9QUkVDIHByZWNlZGVuY2Uu
ICAqLwogc3RhdGljIGV2YWxfZXJyb3IKLXBhcnNlX2V4cHIgKGludDMyX3QgKnYxLCBldmFsX2Vy
cm9yIGVyLCB1bnNpZ25lZCBtaW5fcHJlYykKK3BhcnNlX2V4cHIgKGNvbnN0IGNhbGxfaW5mbyAq
bmFtZSwgaW50MzJfdCAqdjEsIGV2YWxfZXJyb3IgZXIsCisgICAgICAgICAgICB1bnNpZ25lZCBt
aW5fcHJlYykKIHsKICAgZXZhbF90b2tlbiBldDsKICAgZXZhbF90b2tlbiBldDI7CkBAIC00MTQs
MTIgKzM1MCwxMiBAQCBwYXJzZV9leHByIChpbnQzMl90ICp2MSwgZXZhbF9lcnJvciBlciwgdW5z
aWduZWQgbWluX3ByZWMpCgogICBpZiAoZXIgPj0gU1lOVEFYX0VSUk9SKQogICAgIHJldHVybiBl
cjsKLSAgZXQgPSBldmFsX2xleCAoJnYyKTsKKyAgZXQgPSBldmFsX2xleCAobmFtZSwgJnYyKTsK
ICAgd2hpbGUgKGV0IC8gMTAgPj0gbWluX3ByZWMpCiAgICAgewogICAgICAgaWYgKGV0ID09IFFV
RVNUSU9OKQogICAgICAgICB7Ci0gICAgICAgICAgZXQyID0gZXZhbF9sZXggKCZ2Mik7CisgICAg
ICAgICAgZXQyID0gZXZhbF9sZXggKG5hbWUsICZ2Mik7CiAgICAgICAgICAgZXZhbF91bmRvICgp
OwogICAgICAgICAgIGlmIChldDIgPT0gQ09MT04pCiAgICAgICAgICAgICB7CkBAIC00MjcsMjEg
KzM2MywyMSBAQCBwYXJzZV9leHByIChpbnQzMl90ICp2MSwgZXZhbF9lcnJvciBlciwgdW5zaWdu
ZWQgbWluX3ByZWMpCiAgICAgICAgICAgICAgIGVyMiA9IGVyOwogICAgICAgICAgICAgfQogICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIGVyMiA9IHByaW1hcnkgKCZ2Mik7CisgICAgICAgICAg
ICBlcjIgPSBwcmltYXJ5IChuYW1lLCAmdjIpOwogICAgICAgICB9CiAgICAgICBlbHNlCi0gICAg
ICAgIGVyMiA9IHByaW1hcnkgKCZ2Mik7CisgICAgICAgIGVyMiA9IHByaW1hcnkgKG5hbWUsICZ2
Mik7CiAgICAgICBpZiAoZXIyID49IFNZTlRBWF9FUlJPUikKICAgICAgICAgcmV0dXJuIGVyMjsK
LSAgICAgIGV0MiA9IGV2YWxfbGV4ICgmdjMpOworICAgICAgZXQyID0gZXZhbF9sZXggKG5hbWUs
ICZ2Myk7CiAgICAgICAvKiBIYW5kbGUgYmluYXJ5IG9wZXJhdG9ycyBvZiBoaWdoZXIgcHJlY2Vk
ZW5jZSBvciByaWdodC1hc3NvY2lhdGl2aXR5ICovCiAgICAgICB3aGlsZSAoZXQyIC8gMTAgPiBl
dCAvIDEwIHx8IGV0MiA9PSBFWFBPTkVOVCB8fAogICAgICAgICAgICAgIChldCA9PSBRVUVTVElP
TiAmJiBldDIgPT0gUVVFU1RJT04pKQogICAgICAgICB7CiAgICAgICAgICAgZXZhbF91bmRvICgp
OwotICAgICAgICAgIGlmICgoZXIyID0gcGFyc2VfZXhwciAoJnYyLCBlcjIsIGV0MiAvIDEwKSkg
Pj0gU1lOVEFYX0VSUk9SKQorICAgICAgICAgIGlmICgoZXIyID0gcGFyc2VfZXhwciAobmFtZSwg
JnYyLCBlcjIsIGV0MiAvIDEwKSkgPj0gU1lOVEFYX0VSUk9SKQogICAgICAgICAgICAgcmV0dXJu
IGVyMjsKLSAgICAgICAgICBldDIgPSBldmFsX2xleCAoJnYzKTsKKyAgICAgICAgICBldDIgPSBl
dmFsX2xleCAobmFtZSwgJnYzKTsKICAgICAgICAgfQogICAgICAgLyogUmVkdWNlIHRoZSB0d28g
dmFsdWVzIGJ5IHRoZSBnaXZlbiBiaW5hcnkgb3BlcmF0b3IgKi8KICAgICAgIHN3aXRjaCAoZXQp
CkBAIC01NzAsOCArNTA2LDggQEAgcGFyc2VfZXhwciAoaW50MzJfdCAqdjEsIGV2YWxfZXJyb3Ig
ZXIsIHVuc2lnbmVkIG1pbl9wcmVjKQogICAgICAgICAgICAgZXIgPSBNSVNTSU5HX0NPTE9OOwog
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgZXIzID0gcHJpbWFy
eSAoJnYzKTsKLSAgICAgICAgICAgICAgZXIzID0gcGFyc2VfZXhwciAoJnYzLCBlcjMsIE1JTl9Q
UkVDKTsKKyAgICAgICAgICAgICAgZXIzID0gcHJpbWFyeSAobmFtZSwgJnYzKTsKKyAgICAgICAg
ICAgICAgZXIzID0gcGFyc2VfZXhwciAobmFtZSwgJnYzLCBlcjMsIE1JTl9QUkVDKTsKICAgICAg
ICAgICAgICAgaWYgKGVyMyA+PSBTWU5UQVhfRVJST1IpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGVyMzsKICAgICAgICAgICAgICAgaWYgKCp2MSkKQEAgLTYwNCwxMiArNTQwLDEyIEBAIGV2YWx1
YXRlIChjb25zdCBjYWxsX2luZm8gKm1lLCBjb25zdCBjaGFyICpleHByLCBzaXplX3QgbGVuLCBp
bnQzMl90ICp2YWwpCiAgIGV2YWxfZXJyb3IgZXJyOwoKICAgZXZhbF9pbml0X2xleCAoZXhwciwg
bGVuKTsKLSAgZXJyID0gcHJpbWFyeSAodmFsKTsKLSAgZXJyID0gcGFyc2VfZXhwciAodmFsLCBl
cnIsIE1JTl9QUkVDKTsKKyAgZXJyID0gcHJpbWFyeSAobWUsIHZhbCk7CisgIGVyciA9IHBhcnNl
X2V4cHIgKG1lLCB2YWwsIGVyciwgTUlOX1BSRUMpOwoKICAgaWYgKGVyciA9PSBOT19FUlJPUiAm
JiBldmFsX3RleHQgIT0gZW5kX3RleHQpCiAgICAgewotICAgICAgc3dpdGNoIChldmFsX2xleCAo
dmFsKSkKKyAgICAgIHN3aXRjaCAoZXZhbF9sZXggKG1lLCB2YWwpKQogICAgICAgICB7CiAgICAg
ICAgIGNhc2UgQkFETlVNOgogICAgICAgICAgIGVyciA9IElOVkFMSURfTlVNQkVSOwpAQCAtNjU2
LDcgKzU5Miw3IEBAIGV2YWx1YXRlIChjb25zdCBjYWxsX2luZm8gKm1lLCBjb25zdCBjaGFyICpl
eHByLCBzaXplX3QgbGVuLCBpbnQzMl90ICp2YWwpCiAgICAgICBicmVhazsKCiAgICAgY2FzZSBJ
TlZBTElEX05VTUJFUjoKLSAgICAgIG00X3dhcm4gKDAsIG1lLCBfKCJpbnZhbGlkIG51bWJlcjog
JXMiKSwgZXhwcik7CisgICAgICAvKiBwYXJzZV9udW0gYWxyZWFkeSB3YXJuZWQgKi8KICAgICAg
IGJyZWFrOwoKICAgICBjYXNlIElOVkFMSURfT1BFUkFUT1I6CmRpZmYgLS1naXQgYS9zcmMvbTQu
aCBiL3NyYy9tNC5oCmluZGV4IDVlYjAyOTYyLi40ZTQzYTIxMiAxMDA2NDQKLS0tIGEvc3JjL200
LmgKKysrIGIvc3JjL200LmgKQEAgLTUyOCw2ICs1MjgsOCBAQCBzdHJ1Y3QgcmVfcmVnaXN0ZXJz
OwoKIGV4dGVybiB2b2lkIGJ1aWx0aW5faW5pdCAodm9pZCk7CiBleHRlcm4gYm9vbCBiYWRfYXJn
YyAoY29uc3QgY2FsbF9pbmZvICosIGludCwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwor
ZXh0ZXJuIGJvb2wgcGFyc2VfbnVtIChjb25zdCBjYWxsX2luZm8gKiwgY29uc3QgY2hhciAqLCBi
b29sLCBjb25zdCBjaGFyICoqLAorICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqKTsK
IGV4dGVybiB2b2lkIGRlZmluZV9idWlsdGluIChjb25zdCBjaGFyICosIHNpemVfdCwgY29uc3Qg
YnVpbHRpbiAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbF9sb29rdXApOwog
ZXh0ZXJuIHZvaWQgc2V0X21hY3JvX3NlcXVlbmNlIChjb25zdCBjaGFyICopOwotLSAKMi40OS4w
CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTTQtcGF0
Y2hlcyBtYWlsaW5nIGxpc3QKTTQtcGF0Y2hlc0BnbnUub3JnCmh0dHBzOi8vbGlzdHMuZ251Lm9y
Zy9tYWlsbWFuL2xpc3RpbmZvL200LXBhdGNoZXMK