[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