Build Emacs from @Head and started playing with the native
implementation of JSON parsing -- it works well and is much faster
than the lisp version as expected.
After writing some code with it, I have a feature request --- could we
set it up so that the caller can specify that json-hashes map to lisp
alists -- rather than lisp hash-tables?
Sounds reasonable, here is a patch.=C2=A0<=
/div>
--001a11c012764a97bc0560406bde--
--001a11c012764a97c00560406be0
Content-Type: text/plain; charset="UTF-8";
name="0001-Allow-JSON-parser-functions-to-return-alists.txt"
Content-Disposition: attachment;
filename="0001-Allow-JSON-parser-functions-to-return-alists.txt"
Content-Transfer-Encoding: base64
Content-ID: <1605206b6bb581411ec1>
X-Attachment-Id: 1605206b6bb581411ec1
RnJvbSBlYjExNjI4OTNmYWRkOTI4YTg5M2E3OWZlMGRkZWFmODI3ZTVkZmM1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwIFN0ZXBoYW5pIDxwaHN0QGdvb2dsZS5jb20+CkRh
dGU6IFdlZCwgMTMgRGVjIDIwMTcgMjM6MzU6MDcgKzAxMDAKU3ViamVjdDogW1BBVENIXSBBbGxv
dyBKU09OIHBhcnNlciBmdW5jdGlvbnMgdG8gcmV0dXJuIGFsaXN0cwoKKiBzcmMvanNvbi5jIChG
anNvbl9wYXJzZV9zdHJpbmcsIEZqc29uX3BhcnNlX2J1ZmZlcik6IEdpdmUgdGhlc2UKZnVuY3Rp
b25zIGEga2V5d29yZCBhcmd1bWVudCB0byBzcGVjaWZ5IHRoZSByZXR1cm4gdHlwZSBmb3IgSlNP
TgpvYmplY3RzLgooanNvbl90b19saXNwKTogQ29udmVydCBvYmplY3RzIHRvIGFsaXN0cyBpZiBy
ZXF1ZXN0ZWQuCihqc29uX3BhcnNlX29iamVjdF90eXBlKTogTmV3IGhlbHBlciBmdW5jdGlvbiB0
byBwYXJzZSBrZXl3b3JkCmFyZ3VtZW50cy4KCiogdGVzdC9zcmMvanNvbi10ZXN0cy5lbCAoanNv
bi1wYXJzZS1zdHJpbmcvb2JqZWN0KTogQWRkIGEgdW5pdCB0ZXN0LgoKKiBkb2MvbGlzcHJlZi90
ZXh0LnRleGkgKFBhcnNpbmcgSlNPTik6IERvY3VtZW50IG5ldyBmdW5jdGlvbmFsaXR5LgotLS0K
IGRvYy9saXNwcmVmL3RleHQudGV4aSAgfCAgMjAgKysrKy0tLS0KIHNyYy9qc29uLmMgICAgICAg
ICAgICAgfCAxMjggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0t
LS0tLQogdGVzdC9zcmMvanNvbi10ZXN0cy5lbCB8ICAxNiArKysrLS0tCiAzIGZpbGVzIGNoYW5n
ZWQsIDExOSBpbnNlcnRpb25zKCspLCA0NSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kb2Mv
bGlzcHJlZi90ZXh0LnRleGkgYi9kb2MvbGlzcHJlZi90ZXh0LnRleGkKaW5kZXggNWIyODhkOTc1
MC4uNzUxN2RiY2ZiNiAxMDA2NDQKLS0tIGEvZG9jL2xpc3ByZWYvdGV4dC50ZXhpCisrKyBiL2Rv
Yy9saXNwcmVmL3RleHQudGV4aQpAQCAtNDk2NSwxNCArNDk2NSwxMyBAQCBQYXJzaW5nIEpTT04K
IAogQGl0ZW0KIEpTT04gaGFzIG9ubHkgb25lIG1hcCB0eXBlLCB0aGUgb2JqZWN0LiAgSlNPTiBv
YmplY3RzIGFyZSByZXByZXNlbnRlZAotdXNpbmcgTGlzcCBoYXNodGFibGVzLgordXNpbmcgTGlz
cCBoYXNodGFibGVzIG9yIGFsaXN0cy4KIAogQGVuZCBpdGVtaXplCiAKIEBub2luZGVudAotTm90
ZSB0aGF0IEBjb2Rle25pbH0gZG9lc24ndCByZXByZXNlbnQgYW55IEpTT04gdmFsdWVzOiB0aGlz
IGlzIHRvCi1hdm9pZCBjb25mdXNpb24sIGJlY2F1c2UgQGNvZGV7bmlsfSBjb3VsZCBlaXRoZXIg
cmVwcmVzZW50Ci1AY29kZXtudWxsfSwgQGNvZGV7ZmFsc2V9LCBvciBhbiBlbXB0eSBhcnJheSwg
YWxsIG9mIHdoaWNoIGFyZQorTm90ZSB0aGF0IEBjb2Rle25pbH0gcmVwcmVzZW50cyB0aGUgZW1w
dHkgSlNPTiBvYmplY3QsIEBjb2Rle0B7QH19LAorbm90IEBjb2Rle251bGx9LCBAY29kZXtmYWxz
ZX0sIG9yIGFuIGVtcHR5IGFycmF5LCBhbGwgb2Ygd2hpY2ggYXJlCiBkaWZmZXJlbnQgSlNPTiB2
YWx1ZXMuCiAKICAgSWYgc29tZSBMaXNwIG9iamVjdCBjYW4ndCBiZSByZXByZXNlbnRlZCBpbiBK
U09OLCB0aGUgc2VyaWFsaXphdGlvbgpAQCAtNDk5NSw4ICs0OTk0LDEzIEBAIFBhcnNpbmcgSlNP
TgogCiAgIE9ubHkgdG9wLWxldmVsIHZhbHVlcyAoYXJyYXlzIGFuZCBvYmplY3RzKSBjYW4gYmUg
c2VyaWFsaXplZCB0bwogSlNPTi4gIFRoZSBzdWJvYmplY3RzIHdpdGhpbiB0aGVzZSB0b3AtbGV2
ZWwgdmFsdWVzIGNhbiBiZSBvZiBhbnkKLXR5cGUuICBMaWtld2lzZSwgdGhlIHBhcnNpbmcgZnVu
Y3Rpb25zIHdpbGwgb25seSByZXR1cm4gdmVjdG9ycyBhbmQKLWhhc2h0YWJsZXMuCit0eXBlLiAg
TGlrZXdpc2UsIHRoZSBwYXJzaW5nIGZ1bmN0aW9ucyB3aWxsIG9ubHkgcmV0dXJuIHZlY3RvcnMs
CitoYXNodGFibGVzLCBhbmQgYWxpc3RzLgorCisgIFRoZSBwYXJzaW5nIGZ1bmN0aW9ucyBhY2Nl
cHQga2V5d29yZCBhcmd1bWVudHMuICBDdXJyZW50bHkgb25seSBvbmUKK2tleXdvcmQgYXJndW1l
bnQsIEBjb2RlezpvYmplY3QtdHlwZX0sIGlzIHJlY29nbml6ZWQ7IGl0cyB2YWx1ZSBjYW4gYmUK
K2VpdGhlciBAY29kZXtoYXNoLXRhYmxlfSB0byBwYXJzZSBKU09OIG9iamVjdHMgYXMgaGFzaHRh
YmxlcyB3aXRoCitzdHJpbmcga2V5cyAodGhlIGRlZmF1bHQpIG9yIEBjb2Rle2FsaXN0fSB0byBw
YXJzZSB0aGVtIGFzIGFsaXN0cy4KIAogQGRlZnVuIGpzb24tc2VyaWFsaXplIG9iamVjdAogVGhp
cyBmdW5jdGlvbiByZXR1cm5zIGEgbmV3IExpc3Agc3RyaW5nIHdoaWNoIGNvbnRhaW5zIHRoZSBK
U09OCkBAIC01MDA4LDEyICs1MDEyLDEyIEBAIFBhcnNpbmcgSlNPTgogY3VycmVudCBidWZmZXIg
YmVmb3JlIHBvaW50LgogQGVuZCBkZWZ1bgogCi1AZGVmdW4ganNvbi1wYXJzZS1zdHJpbmcgc3Ry
aW5nCitAZGVmdW4ganNvbi1wYXJzZS1zdHJpbmcgc3RyaW5nICZrZXkgKG9iamVjdC10eXBlICdo
YXNoLXRhYmxlKQogVGhpcyBmdW5jdGlvbiBwYXJzZXMgdGhlIEpTT04gdmFsdWUgaW4gQHZhcntz
dHJpbmd9LCB3aGljaCBtdXN0IGJlIGEKIExpc3Agc3RyaW5nLgogQGVuZCBkZWZ1bgogCi1AZGVm
dW4ganNvbi1wYXJzZS1idWZmZXIKK0BkZWZ1biBqc29uLXBhcnNlLWJ1ZmZlciAma2V5IChvYmpl
Y3QtdHlwZSAnaGFzaC10YWJsZSkKIFRoaXMgZnVuY3Rpb24gcmVhZHMgdGhlIG5leHQgSlNPTiB2
YWx1ZSBmcm9tIHRoZSBjdXJyZW50IGJ1ZmZlciwKIHN0YXJ0aW5nIGF0IHBvaW50LiAgSXQgbW92
ZXMgcG9pbnQgdG8gdGhlIHBvc2l0aW9uIGltbWVkaWF0ZWx5IGFmdGVyCiB0aGUgdmFsdWUgaWYg
YSB2YWx1ZSBjb3VsZCBiZSByZWFkIGFuZCBjb252ZXJ0ZWQgdG8gTGlzcDsgb3RoZXJ3aXNlIGl0
CmRpZmYgLS1naXQgYS9zcmMvanNvbi5jIGIvc3JjL2pzb24uYwppbmRleCA3MDI1YWUxNjVjLi4z
NGM1NjhkNzZmIDEwMDY0NAotLS0gYS9zcmMvanNvbi5jCisrKyBiL3NyYy9qc29uLmMKQEAgLTUw
NywxMCArNTA3LDE1IEBAIE9CSkVDVC4gICovKQogICByZXR1cm4gdW5iaW5kX3RvIChjb3VudCwg
UW5pbCk7CiB9CiAKK2VudW0ganNvbl9vYmplY3RfdHlwZSB7CisgIGpzb25fb2JqZWN0X2hhc2h0
YWJsZSwKKyAganNvbl9vYmplY3RfYWxpc3QsCit9OworCiAvKiBDb252ZXJ0IGEgSlNPTiBvYmpl
Y3QgdG8gYSBMaXNwIG9iamVjdC4gICovCiAKIHN0YXRpYyBfR0xfQVJHX05PTk5VTEwgKCgxKSkg
TGlzcF9PYmplY3QKLWpzb25fdG9fbGlzcCAoanNvbl90ICpqc29uKQoranNvbl90b19saXNwIChq
c29uX3QgKmpzb24sIGVudW0ganNvbl9vYmplY3RfdHlwZSBvYmplY3RfdHlwZSkKIHsKICAgc3dp
dGNoIChqc29uX3R5cGVvZiAoanNvbikpCiAgICAgewpAQCAtNTQ0LDcgKzU0OSw3IEBAIGpzb25f
dG9fbGlzcCAoanNvbl90ICpqc29uKQogICAgICAgICBMaXNwX09iamVjdCByZXN1bHQgPSBGbWFr
ZV92ZWN0b3IgKG1ha2VfbmF0bnVtIChzaXplKSwgUXVuYm91bmQpOwogICAgICAgICBmb3IgKHB0
cmRpZmZfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKICAgICAgICAgICBBU0VUIChyZXN1bHQsIGks
Ci0gICAgICAgICAgICAgICAganNvbl90b19saXNwIChqc29uX2FycmF5X2dldCAoanNvbiwgaSkp
KTsKKyAgICAgICAgICAgICAgICBqc29uX3RvX2xpc3AgKGpzb25fYXJyYXlfZ2V0IChqc29uLCBp
KSwgb2JqZWN0X3R5cGUpKTsKICAgICAgICAgLS1saXNwX2V2YWxfZGVwdGg7CiAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgICB9CkBAIC01NTIsMjMgKzU1Nyw0OSBAQCBqc29uX3RvX2xpc3Ag
KGpzb25fdCAqanNvbikKICAgICAgIHsKICAgICAgICAgaWYgKCsrbGlzcF9ldmFsX2RlcHRoID4g
bWF4X2xpc3BfZXZhbF9kZXB0aCkKICAgICAgICAgICB4c2lnbmFsMCAoUWpzb25fb2JqZWN0X3Rv
b19kZWVwKTsKLSAgICAgICAgc2l6ZV90IHNpemUgPSBqc29uX29iamVjdF9zaXplIChqc29uKTsK
LSAgICAgICAgaWYgKEZJWE5VTV9PVkVSRkxPV19QIChzaXplKSkKLSAgICAgICAgICB4c2lnbmFs
MCAoUW92ZXJmbG93X2Vycm9yKTsKLSAgICAgICAgTGlzcF9PYmplY3QgcmVzdWx0ID0gQ0FMTE4g
KEZtYWtlX2hhc2hfdGFibGUsIFFDdGVzdCwgUWVxdWFsLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUUNzaXplLCBtYWtlX25hdG51bSAoc2l6ZSkpOwotICAgICAgICBzdHJ1
Y3QgTGlzcF9IYXNoX1RhYmxlICpoID0gWEhBU0hfVEFCTEUgKHJlc3VsdCk7Ci0gICAgICAgIGNv
bnN0IGNoYXIgKmtleV9zdHI7Ci0gICAgICAgIGpzb25fdCAqdmFsdWU7Ci0gICAgICAgIGpzb25f
b2JqZWN0X2ZvcmVhY2ggKGpzb24sIGtleV9zdHIsIHZhbHVlKQorICAgICAgICBMaXNwX09iamVj
dCByZXN1bHQ7CisgICAgICAgIHN3aXRjaCAob2JqZWN0X3R5cGUpCiAgICAgICAgICAgewotICAg
ICAgICAgICAgTGlzcF9PYmplY3Qga2V5ID0ganNvbl9idWlsZF9zdHJpbmcgKGtleV9zdHIpOwot
ICAgICAgICAgICAgRU1BQ1NfVUlOVCBoYXNoOwotICAgICAgICAgICAgcHRyZGlmZl90IGkgPSBo
YXNoX2xvb2t1cCAoaCwga2V5LCAmaGFzaCk7Ci0gICAgICAgICAgICAvKiBLZXlzIGluIEpTT04g
b2JqZWN0cyBhcmUgdW5pcXVlLCBzbyB0aGUga2V5IGNhbuKAmXQgYmUKLSAgICAgICAgICAgICAg
IHByZXNlbnQgeWV0LiAgKi8KLSAgICAgICAgICAgIGVhc3NlcnQgKGkgPCAwKTsKLSAgICAgICAg
ICAgIGhhc2hfcHV0IChoLCBrZXksIGpzb25fdG9fbGlzcCAodmFsdWUpLCBoYXNoKTsKKyAgICAg
ICAgICBjYXNlIGpzb25fb2JqZWN0X2hhc2h0YWJsZToKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgc2l6ZV90IHNpemUgPSBqc29uX29iamVjdF9zaXplIChqc29uKTsKKyAgICAgICAgICAg
ICAgaWYgKEZJWE5VTV9PVkVSRkxPV19QIChzaXplKSkKKyAgICAgICAgICAgICAgICB4c2lnbmFs
MCAoUW92ZXJmbG93X2Vycm9yKTsKKyAgICAgICAgICAgICAgcmVzdWx0ID0gQ0FMTE4gKEZtYWtl
X2hhc2hfdGFibGUsIFFDdGVzdCwgUWVxdWFsLCBRQ3NpemUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtYWtlX25hdG51bSAoc2l6ZSkpOworICAgICAgICAgICAgICBzdHJ1Y3QgTGlz
cF9IYXNoX1RhYmxlICpoID0gWEhBU0hfVEFCTEUgKHJlc3VsdCk7CisgICAgICAgICAgICAgIGNv
bnN0IGNoYXIgKmtleV9zdHI7CisgICAgICAgICAgICAgIGpzb25fdCAqdmFsdWU7CisgICAgICAg
ICAgICAgIGpzb25fb2JqZWN0X2ZvcmVhY2ggKGpzb24sIGtleV9zdHIsIHZhbHVlKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIExpc3BfT2JqZWN0IGtleSA9IGpzb25fYnVp
bGRfc3RyaW5nIChrZXlfc3RyKTsKKyAgICAgICAgICAgICAgICAgIEVNQUNTX1VJTlQgaGFzaDsK
KyAgICAgICAgICAgICAgICAgIHB0cmRpZmZfdCBpID0gaGFzaF9sb29rdXAgKGgsIGtleSwgJmhh
c2gpOworICAgICAgICAgICAgICAgICAgLyogS2V5cyBpbiBKU09OIG9iamVjdHMgYXJlIHVuaXF1
ZSwgc28gdGhlIGtleSBjYW7igJl0CisgICAgICAgICAgICAgICAgICAgICBiZSBwcmVzZW50IHll
dC4gICovCisgICAgICAgICAgICAgICAgICBlYXNzZXJ0IChpIDwgMCk7CisgICAgICAgICAgICAg
ICAgICBoYXNoX3B1dCAoaCwga2V5LCBqc29uX3RvX2xpc3AgKHZhbHVlLCBvYmplY3RfdHlwZSks
IGhhc2gpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgY2FzZSBqc29uX29iamVjdF9hbGlzdDoKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgcmVzdWx0ID0gUW5pbDsKKyAgICAgICAgICAgICAgY29uc3QgY2hhciAq
a2V5X3N0cjsKKyAgICAgICAgICAgICAganNvbl90ICp2YWx1ZTsKKyAgICAgICAgICAgICAganNv
bl9vYmplY3RfZm9yZWFjaCAoanNvbiwga2V5X3N0ciwgdmFsdWUpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgTGlzcF9PYmplY3Qga2V5ID0gRmludGVybiAoanNvbl9idWls
ZF9zdHJpbmcgKGtleV9zdHIpLCBRbmlsKTsKKyAgICAgICAgICAgICAgICAgIHJlc3VsdAorICAg
ICAgICAgICAgICAgICAgICA9IEZjb25zIChGY29ucyAoa2V5LCBqc29uX3RvX2xpc3AgKHZhbHVl
LCBvYmplY3RfdHlwZSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgcmVzdWx0ID0gRm5yZXZlcnNlIChyZXN1
bHQpOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgLyogQ2Fu4oCZdCBnZXQgaGVyZS4gICovCisgICAgICAgICAgICBl
bWFjc19hYm9ydCAoKTsKICAgICAgICAgICB9CiAgICAgICAgIC0tbGlzcF9ldmFsX2RlcHRoOwog
ICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNTc4LDE1ICs2MDksNDMgQEAganNvbl90b19saXNw
IChqc29uX3QgKmpzb24pCiAgIGVtYWNzX2Fib3J0ICgpOwogfQogCi1ERUZVTiAoImpzb24tcGFy
c2Utc3RyaW5nIiwgRmpzb25fcGFyc2Vfc3RyaW5nLCBTanNvbl9wYXJzZV9zdHJpbmcsIDEsIDEs
IE5VTEwsCitzdGF0aWMgZW51bSBqc29uX29iamVjdF90eXBlCitqc29uX3BhcnNlX29iamVjdF90
eXBlIChwdHJkaWZmX3QgbmFyZ3MsIExpc3BfT2JqZWN0ICphcmdzKQoreworICBzd2l0Y2ggKG5h
cmdzKQorICAgIHsKKyAgICBjYXNlIDA6CisgICAgICByZXR1cm4ganNvbl9vYmplY3RfaGFzaHRh
YmxlOworICAgIGNhc2UgMjogeworICAgICAgTGlzcF9PYmplY3Qga2V5ID0gYXJnc1swXTsKKyAg
ICAgIExpc3BfT2JqZWN0IHZhbHVlID0gYXJnc1sxXTsKKyAgICAgIGlmICghRVEgKGtleSwgUUNv
YmplY3RfdHlwZSkpCisgICAgICAgIHdyb25nX2Nob2ljZSAobGlzdDEgKFFDb2JqZWN0X3R5cGUp
LCBrZXkpOworICAgICAgaWYgKEVRICh2YWx1ZSwgUWhhc2hfdGFibGUpKQorICAgICAgICByZXR1
cm4ganNvbl9vYmplY3RfaGFzaHRhYmxlOworICAgICAgZWxzZSBpZiAoRVEgKHZhbHVlLCBRYWxp
c3QpKQorICAgICAgICByZXR1cm4ganNvbl9vYmplY3RfYWxpc3Q7CisgICAgICBlbHNlCisgICAg
ICAgIHdyb25nX2Nob2ljZSAobGlzdDIgKFFoYXNoX3RhYmxlLCBRYWxpc3QpLCB2YWx1ZSk7Cisg
ICAgfQorICAgIGRlZmF1bHQ6CisgICAgICB3cm9uZ190eXBlX2FyZ3VtZW50IChRcGxpc3RwLCBG
bGlzdCAobmFyZ3MsIGFyZ3MpKTsKKyAgICB9Cit9CisKK0RFRlVOICgianNvbi1wYXJzZS1zdHJp
bmciLCBGanNvbl9wYXJzZV9zdHJpbmcsIFNqc29uX3BhcnNlX3N0cmluZywgMSwgTUFOWSwKKyAg
ICAgICBOVUxMLAogICAgICAgIGRvYzogLyogUGFyc2UgdGhlIEpTT04gU1RSSU5HIGludG8gYSBM
aXNwIG9iamVjdC4KIFRoaXMgaXMgZXNzZW50aWFsbHkgdGhlIHJldmVyc2Ugb3BlcmF0aW9uIG9m
IGBqc29uLXNlcmlhbGl6ZScsIHdoaWNoCi1zZWUuICBUaGUgcmV0dXJuZWQgb2JqZWN0IHdpbGwg
YmUgYSB2ZWN0b3Igb3IgaGFzaHRhYmxlLiAgSXRzIGVsZW1lbnRzCi13aWxsIGJlIGA6bnVsbCcs
IGA6ZmFsc2UnLCB0LCBudW1iZXJzLCBzdHJpbmdzLCBvciBmdXJ0aGVyIHZlY3RvcnMgYW5kCi1o
YXNodGFibGVzLiAgSWYgdGhlcmUgYXJlIGR1cGxpY2F0ZSBrZXlzIGluIGFuIG9iamVjdCwgYWxs
IGJ1dCB0aGUKLWxhc3Qgb25lIGFyZSBpZ25vcmVkLiAgSWYgU1RSSU5HIGRvZXNuJ3QgY29udGFp
biBhIHZhbGlkIEpTT04gb2JqZWN0LAotYW4gZXJyb3Igb2YgdHlwZSBganNvbi1wYXJzZS1lcnJv
cicgaXMgc2lnbmFsZWQuICAqLykKLSAgKExpc3BfT2JqZWN0IHN0cmluZykKK3NlZS4gIFRoZSBy
ZXR1cm5lZCBvYmplY3Qgd2lsbCBiZSBhIHZlY3RvciwgaGFzaHRhYmxlLCBvciBhbGlzdC4gIEl0
cworZWxlbWVudHMgd2lsbCBiZSBgOm51bGwnLCBgOmZhbHNlJywgdCwgbnVtYmVycywgc3RyaW5n
cywgb3IgZnVydGhlcgordmVjdG9ycywgaGFzaHRhYmxlcywgYW5kIGFsaXN0cy4gIElmIHRoZXJl
IGFyZSBkdXBsaWNhdGUga2V5cyBpbiBhbgorb2JqZWN0LCBhbGwgYnV0IHRoZSBsYXN0IG9uZSBh
cmUgaWdub3JlZC4gIElmIFNUUklORyBkb2Vzbid0IGNvbnRhaW4gYQordmFsaWQgSlNPTiBvYmpl
Y3QsIGFuIGVycm9yIG9mIHR5cGUgYGpzb24tcGFyc2UtZXJyb3InIGlzIHNpZ25hbGVkLgorVGhl
IGtleXdvcmQgYXJndW1lbnQgT0JKRUNULVRZUEUgc3BlY2lmaWVzIHdoaWNoIExpc3AgdHlwZSBp
cyB1c2VkIHRvCityZXByZXNlbnQgb2JqZWN0czsgaXQgY2FuIGJlIGBoYXNoLXRhYmxlJyBvciBg
YWxpc3QnLgordXNhZ2U6IChzdHJpbmcgJmtleSAoT0JKRUNULVRZUEUgXFw9J2hhc2gtdGFibGUp
KSAgKi8pCisgIChwdHJkaWZmX3QgbmFyZ3MsIExpc3BfT2JqZWN0ICphcmdzKQogewogICBwdHJk
aWZmX3QgY291bnQgPSBTUEVDUERMX0lOREVYICgpOwogCkBAIC02MDUsOCArNjY0LDExIEBAIGFu
IGVycm9yIG9mIHR5cGUgYGpzb24tcGFyc2UtZXJyb3InIGlzIHNpZ25hbGVkLiAgKi8pCiAgICAg
fQogI2VuZGlmCiAKKyAgTGlzcF9PYmplY3Qgc3RyaW5nID0gYXJnc1swXTsKICAgTGlzcF9PYmpl
Y3QgZW5jb2RlZCA9IGpzb25fZW5jb2RlIChzdHJpbmcpOwogICBjaGVja19zdHJpbmdfd2l0aG91
dF9lbWJlZGRlZF9udWxscyAoZW5jb2RlZCk7CisgIGVudW0ganNvbl9vYmplY3RfdHlwZSBvYmpl
Y3RfdHlwZQorICAgID0ganNvbl9wYXJzZV9vYmplY3RfdHlwZSAobmFyZ3MgLSAxLCBhcmdzICsg
MSk7CiAKICAganNvbl9lcnJvcl90IGVycm9yOwogICBqc29uX3QgKm9iamVjdCA9IGpzb25fbG9h
ZHMgKFNTREFUQSAoZW5jb2RlZCksIDAsICZlcnJvcik7CkBAIC02MTcsNyArNjc5LDcgQEAgYW4g
ZXJyb3Igb2YgdHlwZSBganNvbi1wYXJzZS1lcnJvcicgaXMgc2lnbmFsZWQuICAqLykKICAgaWYg
KG9iamVjdCAhPSBOVUxMKQogICAgIHJlY29yZF91bndpbmRfcHJvdGVjdF9wdHIgKGpzb25fcmVs
ZWFzZV9vYmplY3QsIG9iamVjdCk7CiAKLSAgcmV0dXJuIHVuYmluZF90byAoY291bnQsIGpzb25f
dG9fbGlzcCAob2JqZWN0KSk7CisgIHJldHVybiB1bmJpbmRfdG8gKGNvdW50LCBqc29uX3RvX2xp
c3AgKG9iamVjdCwgb2JqZWN0X3R5cGUpKTsKIH0KIAogc3RydWN0IGpzb25fcmVhZF9idWZmZXJf
ZGF0YQpAQCAtNjUwLDEyICs3MTIsMTMgQEAganNvbl9yZWFkX2J1ZmZlcl9jYWxsYmFjayAodm9p
ZCAqYnVmZmVyLCBzaXplX3QgYnVmbGVuLCB2b2lkICpkYXRhKQogfQogCiBERUZVTiAoImpzb24t
cGFyc2UtYnVmZmVyIiwgRmpzb25fcGFyc2VfYnVmZmVyLCBTanNvbl9wYXJzZV9idWZmZXIsCi0g
ICAgICAgMCwgMCwgTlVMTCwKKyAgICAgICAwLCBNQU5ZLCBOVUxMLAogICAgICAgIGRvYzogLyog
UmVhZCBKU09OIG9iamVjdCBmcm9tIGN1cnJlbnQgYnVmZmVyIHN0YXJ0aW5nIGF0IHBvaW50Lgog
VGhpcyBpcyBzaW1pbGFyIHRvIGBqc29uLXBhcnNlLXN0cmluZycsIHdoaWNoIHNlZS4gIE1vdmUg
cG9pbnQgYWZ0ZXIKIHRoZSBlbmQgb2YgdGhlIG9iamVjdCBpZiBwYXJzaW5nIHdhcyBzdWNjZXNz
ZnVsLiAgT24gZXJyb3IsIHBvaW50IGlzCi1ub3QgbW92ZWQuICAqLykKLSAgKHZvaWQpCitub3Qg
bW92ZWQuCit1c2FnZTogKCZrZXkgKE9CSkVDVC1UWVBFIFxcPSdoYXNoLXRhYmxlKSkgICovKQor
ICAocHRyZGlmZl90IG5hcmdzLCBMaXNwX09iamVjdCAqYXJncykKIHsKICAgcHRyZGlmZl90IGNv
dW50ID0gU1BFQ1BETF9JTkRFWCAoKTsKIApAQCAtNjc0LDYgKzczNyw4IEBAIG5vdCBtb3ZlZC4g
ICovKQogICAgIH0KICNlbmRpZgogCisgIGVudW0ganNvbl9vYmplY3RfdHlwZSBvYmplY3RfdHlw
ZSA9IGpzb25fcGFyc2Vfb2JqZWN0X3R5cGUgKG5hcmdzLCBhcmdzKTsKKwogICBwdHJkaWZmX3Qg
cG9pbnQgPSBQVF9CWVRFOwogICBzdHJ1Y3QganNvbl9yZWFkX2J1ZmZlcl9kYXRhIGRhdGEgPSB7
LnBvaW50ID0gcG9pbnR9OwogICBqc29uX2Vycm9yX3QgZXJyb3I7CkBAIC02ODcsNyArNzUyLDcg
QEAgbm90IG1vdmVkLiAgKi8pCiAgIHJlY29yZF91bndpbmRfcHJvdGVjdF9wdHIgKGpzb25fcmVs
ZWFzZV9vYmplY3QsIG9iamVjdCk7CiAKICAgLyogQ29udmVydCBhbmQgdGhlbiBtb3ZlIHBvaW50
IG9ubHkgaWYgZXZlcnl0aGluZyBzdWNjZWVkZWQuICAqLwotICBMaXNwX09iamVjdCBsaXNwID0g
anNvbl90b19saXNwIChvYmplY3QpOworICBMaXNwX09iamVjdCBsaXNwID0ganNvbl90b19saXNw
IChvYmplY3QsIG9iamVjdF90eXBlKTsKIAogICAvKiBBZGp1c3QgcG9pbnQgYnkgaG93IG11Y2gg
d2UganVzdCByZWFkLiAgKi8KICAgcG9pbnQgKz0gZXJyb3IucG9zaXRpb247CkBAIC03NTAsNiAr
ODE1LDkgQEAgc3ltc19vZl9qc29uICh2b2lkKQogICBGcHV0IChRanNvbl9wYXJzZV9zdHJpbmcs
IFFwdXJlLCBRdCk7CiAgIEZwdXQgKFFqc29uX3BhcnNlX3N0cmluZywgUXNpZGVfZWZmZWN0X2Zy
ZWUsIFF0KTsKIAorICBERUZTWU0gKFFDb2JqZWN0X3R5cGUsICI6b2JqZWN0LXR5cGUiKTsKKyAg
REVGU1lNIChRYWxpc3QsICJhbGlzdCIpOworCiAgIGRlZnN1YnIgKCZTanNvbl9zZXJpYWxpemUp
OwogICBkZWZzdWJyICgmU2pzb25faW5zZXJ0KTsKICAgZGVmc3ViciAoJlNqc29uX3BhcnNlX3N0
cmluZyk7CmRpZmYgLS1naXQgYS90ZXN0L3NyYy9qc29uLXRlc3RzLmVsIGIvdGVzdC9zcmMvanNv
bi10ZXN0cy5lbAppbmRleCAwN2ViNDFkMDkzLi5kYTUxYWFjOGM4IDEwMDY0NAotLS0gYS90ZXN0
L3NyYy9qc29uLXRlc3RzLmVsCisrKyBiL3Rlc3Qvc3JjL2pzb24tdGVzdHMuZWwKQEAgLTUyLDEz
ICs1MiwxNSBAQAogCiAoZXJ0LWRlZnRlc3QganNvbi1wYXJzZS1zdHJpbmcvb2JqZWN0ICgpCiAg
IChza2lwLXVubGVzcyAoZmJvdW5kcCAnanNvbi1wYXJzZS1zdHJpbmcpKQotICAobGV0ICgoYWN0
dWFsCi0gICAgICAgICAoanNvbi1wYXJzZS1zdHJpbmcKLSAgICAgICAgICAieyBcImFiY1wiIDog
WzEsIDIsIHRydWVdLCBcImRlZlwiIDogbnVsbCwgXCJhYmNcIiA6IFs5LCBmYWxzZV0gfVxuIikp
KQotICAgIChzaG91bGQgKGhhc2gtdGFibGUtcCBhY3R1YWwpKQotICAgIChzaG91bGQgKGVxdWFs
IChoYXNoLXRhYmxlLWNvdW50IGFjdHVhbCkgMikpCi0gICAgKHNob3VsZCAoZXF1YWwgKGNsLXNv
cnQgKG1hcC1wYWlycyBhY3R1YWwpICMnc3RyaW5nPCA6a2V5ICMnY2FyKQotICAgICAgICAgICAg
ICAgICAgICcoKCJhYmMiIC4gWzkgOmZhbHNlXSkgKCJkZWYiIC4gOm51bGwpKSkpKSkKKyAgKGxl
dCAoKGlucHV0CisgICAgICAgICAieyBcImFiY1wiIDogWzEsIDIsIHRydWVdLCBcImRlZlwiIDog
bnVsbCwgXCJhYmNcIiA6IFs5LCBmYWxzZV0gfVxuIikpCisgICAgKGxldCAoKGFjdHVhbCAoanNv
bi1wYXJzZS1zdHJpbmcgaW5wdXQpKSkKKyAgICAgIChzaG91bGQgKGhhc2gtdGFibGUtcCBhY3R1
YWwpKQorICAgICAgKHNob3VsZCAoZXF1YWwgKGhhc2gtdGFibGUtY291bnQgYWN0dWFsKSAyKSkK
KyAgICAgIChzaG91bGQgKGVxdWFsIChjbC1zb3J0IChtYXAtcGFpcnMgYWN0dWFsKSAjJ3N0cmlu
ZzwgOmtleSAjJ2NhcikKKyAgICAgICAgICAgICAgICAgICAgICcoKCJhYmMiIC4gWzkgOmZhbHNl
XSkgKCJkZWYiIC4gOm51bGwpKSkpKQorICAgIChzaG91bGQgKGVxdWFsIChqc29uLXBhcnNlLXN0
cmluZyBpbnB1dCA6b2JqZWN0LXR5cGUgJ2FsaXN0KQorICAgICAgICAgICAgICAgICAgICcoKGFi
YyAuIFs5IDpmYWxzZV0pIChkZWYgLiA6bnVsbCkpKSkpKQogCiAoZXJ0LWRlZnRlc3QganNvbi1w
YXJzZS1zdHJpbmcvc3RyaW5nICgpCiAgIChza2lwLXVubGVzcyAoZmJvdW5kcCAnanNvbi1wYXJz
ZS1zdHJpbmcpKQotLSAKMi4xNS4xCgo=
--001a11c012764a97c00560406be0--