[COMMIT] GMP functions that take doubles choke on non-finite values, avoid that.

Aidan Kehoe <[email protected]> Sun, 10 May 2015 19:10:12 +0100
Newsgroups gmane.emacs.xemacs.patches
Message-ID <[email protected]>
CkFQUFJPVkUgQ09NTUlUCgpOT1RFOiBUaGlzIHBhdGNoIGhhcyBiZWVuIGNvbW1pdHRlZC4KCiMg
SEcgY2hhbmdlc2V0IHBhdGNoCiMgVXNlciBBaWRhbiBLZWhvZSA8a2Vob2VhQHBhcmhhc2FyZC5u
ZXQ+CiMgRGF0ZSAxNDMxMjgxMjI5IC0zNjAwCiMgICAgICBTdW4gTWF5IDEwIDE5OjA3OjA5IDIw
MTUgKzAxMDAKIyBOb2RlIElEIDQ4Mzg2ZmQ2MGZkMGFkMWJlYjZjOWZhOWMxYmMxOGQ2ZWU1Yjcx
NWMKIyBQYXJlbnQgIGViMWUxNWM5NDQwYmJhM2JjOTZmMTZiYzc1MDI2OTI4N2M2OGU1ZjUKR01Q
IGZ1bmN0aW9ucyB0aGF0IHRha2UgZG91YmxlcyBjaG9rZSBvbiBub24tZmluaXRlIHZhbHVlcywg
YXZvaWQgdGhhdC4KCnNyYy9DaGFuZ2VMb2cgYWRkaXRpb246CgoyMDE1LTA1LTEwICBBaWRhbiBL
ZWhvZSAgPGtlaG9lYUBwYXJoYXNhcmQubmV0PgoKCSogZmxvYXRmbnMuYyAoZG91YmxlX3RvX2lu
dGVnZXIpOgoJUmVuYW1lIHRoaXMgZnJvbSBmbG9hdF90b19pbnQgdG8gZml0IG91ciBuZXdlciwg
YmlnbnVtLWNvbXBhdGlibGUKCXRlcm1pbm9sb2d5LgoJR01QIGNhbiBzaWduYWwgU0lHRlBFIHdo
ZW4gYXNrZWQgdG8gdHVybiBOYU4gb3IgaW5maW5pdHkgaW50byBhCgliaWdudW0sIGFuZCB3ZSdy
ZSBub3QgcHJlcGFyZWQgdG8gaGFuZGxlIHRoYXQgc2lnbmFsIGlmIHRoZSBPUyBmbG9hdAoJbGli
cmFyeSByb3V0aW5lcyBkb24ndCBkbyB0aGF0LCBzbyBjaGVjayBmb3IgdGhvc2UgdmFsdWVzCgll
eHBsaWNpdGx5LgoKCSogZmxvYXRmbnMuYyAoY2VpbGluZ190d29fZmxvYXQpOgoJKiBmbG9hdGZu
cy5jIChjZWlsaW5nX29uZV9mbG9hdCk6CgkqIGZsb2F0Zm5zLmMgKGZsb29yX3R3b19mbG9hdCk6
CgkqIGZsb2F0Zm5zLmMgKGZsb29yX29uZV9mbG9hdCk6CgkqIGZsb2F0Zm5zLmMgKHJvdW5kX3R3
b19mbG9hdCk6CgkqIGZsb2F0Zm5zLmMgKHJvdW5kX29uZV9mbG9hdCk6CgkqIGZsb2F0Zm5zLmMg
KHRydW5jYXRlX3R3b19mbG9hdCk6CgkqIGZsb2F0Zm5zLmMgKHRydW5jYXRlX29uZV9mbG9hdCk6
CglDYWxsIGRvdWJsZV90b19pbnRlZ2VyKCkgd2l0aCBpdHMgbmV3IG5hbWUuCgoJKiBudW1iZXIu
YzoKCURvbid0IHVzZSB0aGUge2JpZ251bSxyYXRpbyxiaWdmbG9hdH1fc2V0X2RvdWJsZSBmdW5j
dGlvbnMKCWRpcmVjdGx5IGhlcmUsIHdpdGggR01QIHRoZXkgY2FuIGNob2tlIHdoZW4gaGFuZGVk
IG5vbi1maW5pdGUgQwoJZG91YmxlcywgY2FsbCBGdHJ1bmNhdGUoKSBhbmQgdGhlIG5ldyBmbG9h
dF90b19iaWdmbG9hdCgpIGZyb20KCWZsb2F0Zm5zLmMuIE1heWJlIHdlIHNob3VsZCBleHRlbmQg
bnVtYmVyLWdtcC5jIHdpdGggR01QLXNwZWNpZmljCglpbXBsZW1lbnRhdGlvbnMgdGhhdCBjaGVj
ayBmb3Igbm9uLWZpbml0ZSB2YWx1ZXMuCgp0ZXN0cy9DaGFuZ2VMb2cgYWRkaXRpb246CgoyMDE1
LTA1LTEwICBBaWRhbiBLZWhvZSAgPGtlaG9lYUBwYXJoYXNhcmQubmV0PgoKCSogYXV0b21hdGVk
L2xpc3AtdGVzdHMuZWw6CglCYWNrc2xhc2ggYSBmZXcgcGFyZW50aGVzZXMgaW4gdGhlIGZpcnN0
IGNvbHVtbiBmb3IgdGhlIHNha2Ugb2YKCWZvbnRpZmljYXRpb24uCgkqIGF1dG9tYXRlZC9saXNw
LXRlc3RzLmVsOgoJQ2hlY2sgdGhhdCB0aGUgcm91bmRpbmcgZnVuY3Rpb25zIHNpZ25hbCBMaXNw
IGVycm9ycyBjb3JyZWN0bHkKCXdoZW4gaGFuZGVkIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSBpbmZp
bml0eSBhbmQgTmFOLgoKZGlmZiAtciBlYjFlMTVjOTQ0MGIgLXIgNDgzODZmZDYwZmQwIHNyYy9D
aGFuZ2VMb2cKLS0tIGEvc3JjL0NoYW5nZUxvZwlTYXQgTWF5IDA5IDEwOjUwOjMyIDIwMTUgKzAx
MDAKKysrIGIvc3JjL0NoYW5nZUxvZwlTdW4gTWF5IDEwIDE5OjA3OjA5IDIwMTUgKzAxMDAKQEAg
LTEsMyArMSwzMCBAQAorMjAxNS0wNS0xMCAgQWlkYW4gS2Vob2UgIDxrZWhvZWFAcGFyaGFzYXJk
Lm5ldD4KKworCSogZmxvYXRmbnMuYyAoZG91YmxlX3RvX2ludGVnZXIpOgorCVJlbmFtZSB0aGlz
IGZyb20gZmxvYXRfdG9faW50IHRvIGZpdCBvdXIgbmV3ZXIsIGJpZ251bS1jb21wYXRpYmxlCisJ
dGVybWlub2xvZ3kuCisJR01QIGNhbiBzaWduYWwgU0lHRlBFIHdoZW4gYXNrZWQgdG8gdHVybiBO
YU4gb3IgaW5maW5pdHkgaW50byBhCisJYmlnbnVtLCBhbmQgd2UncmUgbm90IHByZXBhcmVkIHRv
IGhhbmRsZSB0aGF0IHNpZ25hbCBpZiB0aGUgT1MgZmxvYXQKKwlsaWJyYXJ5IHJvdXRpbmVzIGRv
bid0IGRvIHRoYXQsIHNvIGNoZWNrIGZvciB0aG9zZSB2YWx1ZXMKKwlleHBsaWNpdGx5LgorCisJ
KiBmbG9hdGZucy5jIChjZWlsaW5nX3R3b19mbG9hdCk6CisJKiBmbG9hdGZucy5jIChjZWlsaW5n
X29uZV9mbG9hdCk6CisJKiBmbG9hdGZucy5jIChmbG9vcl90d29fZmxvYXQpOgorCSogZmxvYXRm
bnMuYyAoZmxvb3Jfb25lX2Zsb2F0KToKKwkqIGZsb2F0Zm5zLmMgKHJvdW5kX3R3b19mbG9hdCk6
CisJKiBmbG9hdGZucy5jIChyb3VuZF9vbmVfZmxvYXQpOgorCSogZmxvYXRmbnMuYyAodHJ1bmNh
dGVfdHdvX2Zsb2F0KToKKwkqIGZsb2F0Zm5zLmMgKHRydW5jYXRlX29uZV9mbG9hdCk6CisJQ2Fs
bCBkb3VibGVfdG9faW50ZWdlcigpIHdpdGggaXRzIG5ldyBuYW1lLgorCisJKiBudW1iZXIuYzoK
KwlEb24ndCB1c2UgdGhlIHtiaWdudW0scmF0aW8sYmlnZmxvYXR9X3NldF9kb3VibGUgZnVuY3Rp
b25zCisJZGlyZWN0bHkgaGVyZSwgd2l0aCBHTVAgdGhleSBjYW4gY2hva2Ugd2hlbiBoYW5kZWQg
bm9uLWZpbml0ZSBDCisJZG91YmxlcywgY2FsbCBGdHJ1bmNhdGUoKSBhbmQgdGhlIG5ldyBmbG9h
dF90b19iaWdmbG9hdCgpIGZyb20KKwlmbG9hdGZucy5jLiBNYXliZSB3ZSBzaG91bGQgZXh0ZW5k
IG51bWJlci1nbXAuYyB3aXRoIEdNUC1zcGVjaWZpYworCWltcGxlbWVudGF0aW9ucyB0aGF0IGNo
ZWNrIGZvciBub24tZmluaXRlIHZhbHVlcy4KKwogMjAxNS0wNS0wOSAgQWlkYW4gS2Vob2UgIDxr
ZWhvZWFAcGFyaGFzYXJkLm5ldD4KIAogCSogZGF0YS5jIChGbG9nYW5kKToKZGlmZiAtciBlYjFl
MTVjOTQ0MGIgLXIgNDgzODZmZDYwZmQwIHNyYy9mbG9hdGZucy5jCi0tLSBhL3NyYy9mbG9hdGZu
cy5jCVNhdCBNYXkgMDkgMTA6NTA6MzIgMjAxNSArMDEwMAorKysgYi9zcmMvZmxvYXRmbnMuYwlT
dW4gTWF5IDEwIDE5OjA3OjA5IDIwMTUgKzAxMDAKQEAgLTExMiwzOCArMTEyLDYgQEAKICNkZWZp
bmUgZG9tYWluX2Vycm9yMihvcCxhMSxhMikgXAogICBGc2lnbmFsIChRZG9tYWluX2Vycm9yLCBs
aXN0MyAoYnVpbGRfbXNnX3N0cmluZyAob3ApLCBhMSwgYTIpKQogCi0KLS8qIENvbnZlcnQgZmxv
YXQgdG8gTGlzcCBJbnRlZ2VyIGlmIGl0IGZpdHMsIGVsc2Ugc2lnbmFsIGEgcmFuZ2UKLSAgIGVy
cm9yIHVzaW5nIHRoZSBnaXZlbiBhcmd1bWVudHMuICBJZiBiaWdudW1zIGFyZSBhdmFpbGFibGUs
IHJhbmdlIGVycm9ycwotICAgYXJlIG5ldmVyIHNpZ25hbGVkLiAgKi8KLXN0YXRpYyBMaXNwX09i
amVjdAotZmxvYXRfdG9faW50IChkb3VibGUgeCwKLSNpZmRlZiBIQVZFX0JJR05VTQotCSAgICAg
IGNvbnN0IGNoYXIgKlVOVVNFRCAobmFtZSksIExpc3BfT2JqZWN0IFVOVVNFRCAobnVtKSwKLQkg
ICAgICBMaXNwX09iamVjdCBVTlVTRUQgKG51bTIpCi0jZWxzZQotCSAgICAgIGNvbnN0IGNoYXIg
Km5hbWUsIExpc3BfT2JqZWN0IG51bSwgTGlzcF9PYmplY3QgbnVtMgotI2VuZGlmCi0JICAgICAg
KQotewotI2lmZGVmIEhBVkVfQklHTlVNCi0gIGJpZ251bV9zZXRfZG91YmxlIChzY3JhdGNoX2Jp
Z251bSwgeCk7Ci0gIHJldHVybiBGY2Fub25pY2FsaXplX251bWJlciAobWFrZV9iaWdudW1fYmcg
KHNjcmF0Y2hfYmlnbnVtKSk7Ci0jZWxzZQotICBSRUdJU1RFUiBFTUFDU19JTlQgcmVzdWx0ID0g
KEVNQUNTX0lOVCkgeDsKLQotICBpZiAocmVzdWx0ID4gTU9TVF9QT1NJVElWRV9GSVhOVU0gfHwg
cmVzdWx0IDwgTU9TVF9ORUdBVElWRV9GSVhOVU0pCi0gICAgewotICAgICAgaWYgKCFVTkJPVU5E
UCAobnVtMikpCi0JcmFuZ2VfZXJyb3IyIChuYW1lLCBudW0sIG51bTIpOwotICAgICAgZWxzZQot
CXJhbmdlX2Vycm9yIChuYW1lLCBudW0pOwotICAgIH0KLSAgcmV0dXJuIG1ha2VfZml4bnVtIChy
ZXN1bHQpOwotI2VuZGlmIC8qIEhBVkVfQklHTlVNICovCi19Ci0KLQogc3RhdGljIHZvaWQKIGlu
X2Zsb2F0X2Vycm9yICh2b2lkKQogewpAQCAtMTY1LDcgKzEzMyw2NSBAQAogICAgIGJyZWFrOwog
ICB9CiB9CisMCisvKiBDb252ZXJ0IFggdG8gYSBMaXNwIGludGVnZXIsIHVzaW5nIGJpZ251bXMg
aWYgYXZhaWxhYmxlLiBJZiBYIGRvZXMgbm90CisgICBmaXQtLWlmIGl0IGlzIG5vdCBmaW5pdGUs
IG9yLCBvbiBhIGJ1aWxkIHdpdGhvdXQgYmlnbnVtIHN1cHBvcnQsIGlmIGl0IGlzCisgICBvdXRz
aWRlIHRoZSByYW5nZSAoPD0gbW9zdC1uZWdhdGl2ZS1maXhudW0gWCBtb3N0LXBvc2l0aXZlLWZp
eG51bSktLXNpZ25hbAorICAgYSByYW5nZSBlcnJvci4gKi8KK3N0YXRpYyBMaXNwX09iamVjdAor
ZG91YmxlX3RvX2ludGVnZXIgKGRvdWJsZSB4LCBjb25zdCBBc2NieXRlICpvcGVyYXRpb24sIExp
c3BfT2JqZWN0IG51bSwKKyAgICAgICAgICAgICAgICAgICBMaXNwX09iamVjdCBudW0yKQorewor
I2lmZGVmIEhBVkVfQklHTlVNCisgIGlmIChpc25hbiAoeCkgfHwgaXNpbmYgKHgpKQorICAgIHsK
KyAgICAgIGlmIChVTkJPVU5EUCAobnVtMikpCisgICAgICAgIHsKKyAgICAgICAgICByYW5nZV9l
cnJvciAob3BlcmF0aW9uLCBudW0pOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsK
KyAgICAgICAgICByYW5nZV9lcnJvcjIgKG9wZXJhdGlvbiwgbnVtLCBudW0yKTsKKyAgICAgICAg
fQorICAgIH0KIAorICBiaWdudW1fc2V0X2RvdWJsZSAoc2NyYXRjaF9iaWdudW0sIHgpOworICBy
ZXR1cm4gRmNhbm9uaWNhbGl6ZV9udW1iZXIgKG1ha2VfYmlnbnVtX2JnIChzY3JhdGNoX2JpZ251
bSkpOworI2Vsc2UKKyAgUkVHSVNURVIgRU1BQ1NfSU5UIHJlc3VsdCA9IChFTUFDU19JTlQpIHg7
CisKKyAgaWYgKHJlc3VsdCA+IE1PU1RfUE9TSVRJVkVfRklYTlVNIHx8IHJlc3VsdCA8IE1PU1Rf
TkVHQVRJVkVfRklYTlVNKQorICAgIHsKKyAgICAgIGlmICghVU5CT1VORFAgKG51bTIpKQorICAg
ICAgICByYW5nZV9lcnJvcjIgKG9wZXJhdGlvbiwgbnVtLCBudW0yKTsKKyAgICAgIGVsc2UKKyAg
ICAgICAgcmFuZ2VfZXJyb3IgKG9wZXJhdGlvbiwgbnVtKTsKKyAgICB9CisgIHJldHVybiBtYWtl
X2ZpeG51bSAocmVzdWx0KTsKKyNlbmRpZiAvKiBIQVZFX0JJR05VTSAqLworfQorCisjaWZkZWYg
SEFWRV9CSUdGTE9BVAorTGlzcF9PYmplY3QgZmxvYXRfdG9fYmlnZmxvYXQgKGNvbnN0IEFzY2J5
dGUgKm9wZXJhdGlvbiwgTGlzcF9PYmplY3QgbnVtLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGxvbmcgcHJlY2lzaW9uKTsKKworTGlzcF9PYmplY3QKK2Zsb2F0X3Rv
X2JpZ2Zsb2F0IChjb25zdCBBc2NieXRlICpvcGVyYXRpb24sIExpc3BfT2JqZWN0IG51bSwKKyAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHByZWNpc2lvbikKK3sKKyAgZG91YmxlIGQg
PSBleHRyYWN0X2Zsb2F0IChudW0pOworCisgIGlmIChpc25hbiAoZCkgfHwgaXNpbmYgKGQpKQor
ICAgIHsKKyAgICAgIHJhbmdlX2Vycm9yIChvcGVyYXRpb24sIG51bSk7CisgICAgfQorCisgIGJp
Z2Zsb2F0X3NldF9wcmVjIChzY3JhdGNoX2JpZ2Zsb2F0LCBwcmVjaXNpb24pOworICBiaWdmbG9h
dF9zZXRfZG91YmxlIChzY3JhdGNoX2JpZ2Zsb2F0LCBkKTsKKworICByZXR1cm4gbWFrZV9iaWdm
bG9hdF9iZiAoc2NyYXRjaF9iaWdmbG9hdCk7Cit9CisjZW5kaWYKIAwKIHN0YXRpYyBMaXNwX09i
amVjdAogbWFya19mbG9hdCAoTGlzcF9PYmplY3QgVU5VU0VEIChvYmopKQpAQCAtMTI1Miw3ICsx
Mjc4LDcgQEAKICAgICB9CiAgIGVsc2UKICAgICB7Ci0gICAgICByZXMwID0gZmxvYXRfdG9faW50
IChmMCwgTUFZQkVfRUZGKCJjZWlsaW5nIiksIG51bWJlciwgZGl2aXNvcik7CisgICAgICByZXMw
ID0gZG91YmxlX3RvX2ludGVnZXIgKGYwLCAiY2VpbGluZyIsIG51bWJlciwgZGl2aXNvcik7CiAg
ICAgfQogCiAgIHJldHVybiB2YWx1ZXMyIChyZXMwLCBtYWtlX2Zsb2F0IChyZW1haW4pKTsKQEAg
LTEyNzMsNyArMTI5OSw3IEBACiAgICAgfQogICBlbHNlCiAgICAgewotICAgICAgcmVzMCA9IGZs
b2F0X3RvX2ludCAoZCwgTUFZQkVfRUZGKCJjZWlsaW5nIiksIG51bWJlciwgUXVuYm91bmQpOwor
ICAgICAgcmVzMCA9IGRvdWJsZV90b19pbnRlZ2VyIChkLCAiY2VpbGluZyIsIG51bWJlciwgUXVu
Ym91bmQpOwogICAgIH0KICAgcmV0dXJuIHZhbHVlczIgKHJlczAsIG1ha2VfZmxvYXQgKHJlbWFp
bikpOwogfQpAQCAtMTUzNSw3ICsxNTYxLDcgQEAKICAgICAgIHJldHVybiB2YWx1ZXMyIChtYWtl
X2Zsb2F0IChmMCksIG1ha2VfZmxvYXQgKHJlbWFpbikpOwogICAgIH0KIAotICByZXR1cm4gdmFs
dWVzMiAoZmxvYXRfdG9faW50IChmMCwgTUFZQkVfRUZGICgiZmxvb3IiKSwgbnVtYmVyLCBkaXZp
c29yKSwKKyAgcmV0dXJuIHZhbHVlczIgKGRvdWJsZV90b19pbnRlZ2VyIChmMCwgImZsb29yIiwg
bnVtYmVyLCBkaXZpc29yKSwKIAkJICBtYWtlX2Zsb2F0IChyZW1haW4pKTsKIH0KIApAQCAtMTU1
Myw3ICsxNTc5LDcgQEAKICAgICB9CiAgIGVsc2UKICAgICB7Ci0gICAgICByZXR1cm4gdmFsdWVz
MiAoZmxvYXRfdG9faW50IChkLCBNQVlCRV9FRkYgKCJmbG9vciIpLCBudW1iZXIsIFF1bmJvdW5k
KSwKKyAgICAgIHJldHVybiB2YWx1ZXMyIChkb3VibGVfdG9faW50ZWdlciAoZCwgImZsb29yIiwg
bnVtYmVyLCBRdW5ib3VuZCksCiAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9mbG9hdCAoZDEp
KTsKICAgICB9CiB9CkBAIC0xOTM5LDcgKzE5NjUsNyBAQAogICAgIH0KICAgZWxzZQogICAgIHsK
LSAgICAgIHJldHVybiB2YWx1ZXMyIChmbG9hdF90b19pbnQgKGYwLCBNQVlCRV9FRkYoInJvdW5k
IiksIG51bWJlciwgZGl2aXNvciksCisgICAgICByZXR1cm4gdmFsdWVzMiAoZG91YmxlX3RvX2lu
dGVnZXIgKGYwLCAicm91bmQiLCBudW1iZXIsIGRpdmlzb3IpLAogCQkgICAgICBtYWtlX2Zsb2F0
IChyZW1haW4pKTsKICAgICB9CiB9CkBAIC0xOTU4LDggKzE5ODQsNyBAQAogICAgIH0KICAgZWxz
ZQogICAgIHsKLSAgICAgIHJldHVybiB2YWx1ZXMyICgoZmxvYXRfdG9faW50IChkLCBNQVlCRV9F
RkYgKCJyb3VuZCIpLCBudW1iZXIsCi0JCQkJICAgICBRdW5ib3VuZCkpLAorICAgICAgcmV0dXJu
IHZhbHVlczIgKChkb3VibGVfdG9faW50ZWdlciAoZCwgInJvdW5kIiwgbnVtYmVyLCBRdW5ib3Vu
ZCkpLAogCQkgICAgICBtYWtlX2Zsb2F0IChYRkxPQVRfREFUQSAobnVtYmVyKSAtIGQpKTsKICAg
ICB9CiB9CkBAIC0yMjE2LDcgKzIyNDEsOCBAQAogICBpZiAoZjIgPT0gMC4wKQogICAgIHJldHVy
biBhcml0aF9lcnJvcjIgKCJ0cnVuY2F0ZSIsIG51bWJlciwgZGl2aXNvcik7CiAKLSAgcmVzMCA9
IGZsb2F0X3RvX2ludCAoZjEgLyBmMiwgTUFZQkVfRUZGICgidHJ1bmNhdGUiKSwgbnVtYmVyLCBR
dW5ib3VuZCk7CisgIHJlczAgPSBkb3VibGVfdG9faW50ZWdlciAoZjEgLyBmMiwgTUFZQkVfRUZG
ICgidHJ1bmNhdGUiKSwgbnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFF1bmJv
dW5kKTsKICAgZjAgPSBleHRyYWN0X2Zsb2F0IChyZXMwKTsKIAogICBJTl9GTE9BVDIgKHJlbWFp
biA9IGYxIC0gKGYwICogZjIpLCBNQVlCRV9FRkYgKCJ0cnVuY2F0ZSIpLCBudW1iZXIsIGRpdmlz
b3IpOwpAQCAtMjIzMyw4ICsyMjU5LDggQEAKIHRydW5jYXRlX29uZV9mbG9hdCAoTGlzcF9PYmpl
Y3QgbnVtYmVyLCBpbnQgcmV0dXJuX2Zsb2F0KQogewogICBMaXNwX09iamVjdCByZXMwCi0gICAg
PSBmbG9hdF90b19pbnQgKFhGTE9BVF9EQVRBIChudW1iZXIpLCBNQVlCRV9FRkYgKCJ0cnVuY2F0
ZSIpLAotCQkgICAgbnVtYmVyLCBRdW5ib3VuZCk7CisgICAgPSBkb3VibGVfdG9faW50ZWdlciAo
WEZMT0FUX0RBVEEgKG51bWJlciksIE1BWUJFX0VGRiAoInRydW5jYXRlIiksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgbnVtYmVyLCBRdW5ib3VuZCk7CiAgIGlmIChyZXR1cm5fZmxvYXQpCiAg
ICAgewogICAgICAgcmVzMCA9IG1ha2VfZmxvYXQgKChkb3VibGUpWEZJWE5VTShyZXMwKSk7CmRp
ZmYgLXIgZWIxZTE1Yzk0NDBiIC1yIDQ4Mzg2ZmQ2MGZkMCBzcmMvbnVtYmVyLmMKLS0tIGEvc3Jj
L251bWJlci5jCVNhdCBNYXkgMDkgMTA6NTA6MzIgMjAxNSArMDEwMAorKysgYi9zcmMvbnVtYmVy
LmMJU3VuIE1heSAxMCAxOTowNzowOSAyMDE1ICswMTAwCkBAIC0zMDksNiArMzA5LDkgQEAKIAkJ
CQkJYmlnZmxvYXRfZXF1YWwsIGJpZ2Zsb2F0X2hhc2gsCiAJCQkJCWJpZ2Zsb2F0X2Rlc2NyaXB0
aW9uLCBMaXNwX0JpZ2Zsb2F0KTsKIAorZXh0ZXJuIExpc3BfT2JqZWN0IGZsb2F0X3RvX2JpZ2Zs
b2F0IChjb25zdCBBc2NieXRlICosIExpc3BfT2JqZWN0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nKTsKKwogI2VuZGlmIC8qIEhBVkVfQklHRkxP
QVQgKi8KIAogTGlzcF9PYmplY3QgUWJpZ2Zsb2F0cDsKQEAgLTYwMSwxNSArNjA0LDI2IEBACiAJ
ICByZXR1cm4gRnRydW5jYXRlIChudW1iZXIsIFFuaWwpOwogCWNhc2UgQklHTlVNX1Q6CiAjaWZk
ZWYgSEFWRV9CSUdOVU0KLQkgIGJpZ251bV9zZXRfZG91YmxlIChzY3JhdGNoX2JpZ251bSwgWEZM
T0FUX0RBVEEgKG51bWJlcikpOwotCSAgcmV0dXJuIG1ha2VfYmlnbnVtX2JnIChzY3JhdGNoX2Jp
Z251bSk7CisgICAgICAgICAgeworICAgICAgICAgICAgTGlzcF9PYmplY3QgdHJ1bmNhdGUgPSBG
dHJ1bmNhdGUgKG51bWJlciwgUW5pbCk7CisgICAgICAgICAgICByZXR1cm4gRklYTlVNUCAodHJ1
bmNhdGUpID8KKyAgICAgICAgICAgICAgbWFrZV9iaWdudW0gKFhSRUFMRklYTlVNICh0cnVuY2F0
ZSkpIDogdHJ1bmNhdGU7CisgICAgICAgICAgfQogI2Vsc2UKIAkgIEFCT1JUICgpOwogI2VuZGlm
IC8qIEhBVkVfQklHTlVNICovCiAJY2FzZSBSQVRJT19UOgogI2lmZGVmIEhBVkVfUkFUSU8KLQkg
IHJhdGlvX3NldF9kb3VibGUgKHNjcmF0Y2hfcmF0aW8sIFhGTE9BVF9EQVRBIChudW1iZXIpKTsK
LQkgIHJldHVybiBtYWtlX3JhdGlvX3J0IChzY3JhdGNoX3JhdGlvKTsKKyAgICAgICAgICB7Cisg
ICAgICAgICAgICBMaXNwX09iamVjdCB0cnVuY2F0ZSA9IEZ0cnVuY2F0ZSAobnVtYmVyLCBRbmls
KTsKKyAgICAgICAgICAgIGlmIChGSVhOVU1QICh0cnVuY2F0ZSkpCisgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZV9yYXRpbyAoWFJFQUxGSVhOVU0gKHRydW5jYXRl
KSwgMVVMKTsKKyAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICBiaWdudW1fc2V0X2xvbmcg
KHNjcmF0Y2hfYmlnbnVtLCAxTCk7CisgICAgICAgICAgICByZXR1cm4gbWFrZV9yYXRpb19iZyAo
WEJJR05VTV9EQVRBICh0cnVuY2F0ZSksIHNjcmF0Y2hfYmlnbnVtKTsKKyAgICAgICAgICB9CiAj
ZWxzZQogCSAgQUJPUlQgKCk7CiAjZW5kaWYgLyogSEFWRV9SQVRJTyAqLwpAQCAtNjE3LDkgKzYz
MSw3IEBACiAJICByZXR1cm4gbnVtYmVyOwogCWNhc2UgQklHRkxPQVRfVDoKICNpZmRlZiBIQVZF
X0JJR0ZMT0FUCi0JICBiaWdmbG9hdF9zZXRfcHJlYyAoc2NyYXRjaF9iaWdmbG9hdCwgcHJlY2lz
aW9uKTsKLQkgIGJpZ2Zsb2F0X3NldF9kb3VibGUgKHNjcmF0Y2hfYmlnZmxvYXQsIFhGTE9BVF9E
QVRBIChudW1iZXIpKTsKLQkgIHJldHVybiBtYWtlX2JpZ2Zsb2F0X2JmIChzY3JhdGNoX2JpZ2Zs
b2F0KTsKKyAgICAgICAgICByZXR1cm4gZmxvYXRfdG9fYmlnZmxvYXQgKCJjb2VyY2UtbnVtYmVy
IiwgbnVtYmVyLCBwcmVjaXNpb24pOwogI2Vsc2UKIAkgIEFCT1JUICgpOwogI2VuZGlmIC8qIEhB
VkVfQklHRkxPQVQgKi8KZGlmZiAtciBlYjFlMTVjOTQ0MGIgLXIgNDgzODZmZDYwZmQwIHRlc3Rz
L0NoYW5nZUxvZwotLS0gYS90ZXN0cy9DaGFuZ2VMb2cJU2F0IE1heSAwOSAxMDo1MDozMiAyMDE1
ICswMTAwCisrKyBiL3Rlc3RzL0NoYW5nZUxvZwlTdW4gTWF5IDEwIDE5OjA3OjA5IDIwMTUgKzAx
MDAKQEAgLTEsMyArMSwxMiBAQAorMjAxNS0wNS0xMCAgQWlkYW4gS2Vob2UgIDxrZWhvZWFAcGFy
aGFzYXJkLm5ldD4KKworCSogYXV0b21hdGVkL2xpc3AtdGVzdHMuZWw6CisJQmFja3NsYXNoIGEg
ZmV3IHBhcmVudGhlc2VzIGluIHRoZSBmaXJzdCBjb2x1bW4gZm9yIHRoZSBzYWtlIG9mCisJZm9u
dGlmaWNhdGlvbi4KKwkqIGF1dG9tYXRlZC9saXNwLXRlc3RzLmVsOgorCUNoZWNrIHRoYXQgdGhl
IHJvdW5kaW5nIGZ1bmN0aW9ucyBzaWduYWwgTGlzcCBlcnJvcnMgY29ycmVjdGx5CisJd2hlbiBo
YW5kZWQgcG9zaXRpdmUgYW5kIG5lZ2F0aXZlIGluZmluaXR5IGFuZCBOYU4uCisKIDIwMTUtMDUt
MDggIEFpZGFuIEtlaG9lICA8a2Vob2VhQHBhcmhhc2FyZC5uZXQ+CiAKIAkqIGF1dG9tYXRlZC9s
aXNwLXJlYWRlci10ZXN0cy5lbDoKZGlmZiAtciBlYjFlMTVjOTQ0MGIgLXIgNDgzODZmZDYwZmQw
IHRlc3RzL2F1dG9tYXRlZC9saXNwLXRlc3RzLmVsCi0tLSBhL3Rlc3RzL2F1dG9tYXRlZC9saXNw
LXRlc3RzLmVsCVNhdCBNYXkgMDkgMTA6NTA6MzIgMjAxNSArMDEwMAorKysgYi90ZXN0cy9hdXRv
bWF0ZWQvbGlzcC10ZXN0cy5lbAlTdW4gTWF5IDEwIDE5OjA3OjA5IDIwMTUgKzAxMDAKQEAgLTE1
MTEsMTAgKzE1MTEsMTAgQEAKICAgICAgICAiXAogOzsgTGlzcCBzaG91bGQgbm90IGJlIGFibGUg
dG8gbW9kaWZ5ICMkLCB3aGljaCBpcwogOzsgVmxvYWRfZmlsZV9uYW1lX2ludGVybmFsIG9mIGxy
ZWFkLmMuCi0oQ2hlY2stRXJyb3Igc2V0dGluZy1jb25zdGFudCAoYXNldCAjJCAwID9cXCApKQor
XChDaGVjay1FcnJvciBzZXR0aW5nLWNvbnN0YW50IChhc2V0ICMkIDAgP1xcICkpCiAKIDs7IEJ1
dCBtb2RpZnlpbmcgbG9hZC1maWxlLW5hbWUgc2hvdWxkIHdvcms6Ci0obGV0ICgobmV3LWNoYXIg
P1xcICkKK1wobGV0ICgobmV3LWNoYXIgP1xcICkKICAgICAgIG9sZC1jaGFyKQogICAoc2V0cSBv
bGQtY2hhciAoYXJlZiBsb2FkLWZpbGUtbmFtZSAwKSkKICAgKGlmICg9IG5ldy1jaGFyIG9sZC1j
aGFyKQpAQCAtMTUyMyw3ICsxNTIzLDcgQEAKICAgKEFzc2VydCAoPSBuZXctY2hhciAoYXJlZiBs
b2FkLWZpbGUtbmFtZSAwKSkKIAkgIFwiQ2hlY2sgdGhhdCB3ZSBjYW4gbW9kaWZ5IHRoZSBzdHJp
bmcgdmFsdWUgb2YgbG9hZC1maWxlLW5hbWVcIikpCiAKLShsZXQqICgobmV3LWxvYWQtZmlsZS1u
YW1lIFwiaGkgdGhlcmVcIikKK1wobGV0KiAoKG5ldy1sb2FkLWZpbGUtbmFtZSBcImhpIHRoZXJl
XCIpCiAgICAgICAgKGxvYWQtZmlsZS1uYW1lIG5ldy1sb2FkLWZpbGUtbmFtZSkpCiAgIChBc3Nl
cnQgKGVxIG5ldy1sb2FkLWZpbGUtbmFtZSBsb2FkLWZpbGUtbmFtZSkKIAkgIFwiQ2hlY2tpbmcg
dGhhdCB3ZSBjYW4gYmluZCBsb2FkLWZpbGUtbmFtZSBzdWNjZXNzZnVsbHkuXCIpKQpAQCAtMTUz
NSw2ICsxNTM1LDQ2IEBACiAgICAobG9hZCB0ZXN0LWZpbGUtbmFtZSBuaWwgdCBuaWwpCiAgICAo
ZGVsZXRlLWZpbGUgdGVzdC1maWxlLW5hbWUpKQogCis7OyBUaGVzZSB1c2VkIHRvIGNyYXNoIHdp
dGggYmlnbnVtIHN1cHBvcnQgdGhhbmtzIHRvIEdNUDoKKyhzeW1ib2wtbWFjcm9sZXQKKyAgICAo
KHBvc2l0aXZlLWluZmluaXR5CisgICAgICAoZXhwdCAoKyBtb3N0LXBvc2l0aXZlLWZpeG51bSAw
LjApIG1vc3QtcG9zaXRpdmUtZml4bnVtKSkKKyAgICAgKG5lZ2F0aXZlLWluZmluaXR5CisgICAg
ICAoZXhwdCAoKyBtb3N0LW5lZ2F0aXZlLWZpeG51bSAwLjApIG1vc3QtcG9zaXRpdmUtZml4bnVt
KSkKKyAgICAgKG5vdC1hLW51bWJlciAoZXhwdCAtMSAwLjUpKSkKKyAgKENoZWNrLUVycm9yIHJh
bmdlLWVycm9yIChjZWlsaW5nIHBvc2l0aXZlLWluZmluaXR5KSkKKyAgKENoZWNrLUVycm9yIHJh
bmdlLWVycm9yIChjZWlsaW5nIG5lZ2F0aXZlLWluZmluaXR5KSkKKyAgKENoZWNrLUVycm9yIHJh
bmdlLWVycm9yIChjZWlsaW5nIHBvc2l0aXZlLWluZmluaXR5IDEpKQorICAoQ2hlY2stRXJyb3Ig
cmFuZ2UtZXJyb3IgKGNlaWxpbmcgbmVnYXRpdmUtaW5maW5pdHkgMSkpCisgIChDaGVjay1FcnJv
ciByYW5nZS1lcnJvciAoZmxvb3IgcG9zaXRpdmUtaW5maW5pdHkpKQorICAoQ2hlY2stRXJyb3Ig
cmFuZ2UtZXJyb3IgKGZsb29yIG5lZ2F0aXZlLWluZmluaXR5KSkKKyAgKENoZWNrLUVycm9yIHJh
bmdlLWVycm9yIChmbG9vciBwb3NpdGl2ZS1pbmZpbml0eSAxKSkKKyAgKENoZWNrLUVycm9yIHJh
bmdlLWVycm9yIChmbG9vciBuZWdhdGl2ZS1pbmZpbml0eSAxKSkKKyAgKENoZWNrLUVycm9yIHJh
bmdlLWVycm9yIChyb3VuZCBwb3NpdGl2ZS1pbmZpbml0eSkpCisgIChDaGVjay1FcnJvciByYW5n
ZS1lcnJvciAocm91bmQgbmVnYXRpdmUtaW5maW5pdHkpKQorICAoQ2hlY2stRXJyb3IgcmFuZ2Ut
ZXJyb3IgKHJvdW5kIHBvc2l0aXZlLWluZmluaXR5IDEpKQorICAoQ2hlY2stRXJyb3IgcmFuZ2Ut
ZXJyb3IgKHJvdW5kIG5lZ2F0aXZlLWluZmluaXR5IDEpKQorICAoQ2hlY2stRXJyb3IgcmFuZ2Ut
ZXJyb3IgKGNlaWxpbmcgbm90LWEtbnVtYmVyKSkKKyAgKENoZWNrLUVycm9yIHJhbmdlLWVycm9y
IChjZWlsaW5nIG5vdC1hLW51bWJlciAxKSkKKyAgKENoZWNrLUVycm9yIHJhbmdlLWVycm9yIChm
bG9vciBub3QtYS1udW1iZXIpKQorICAoQ2hlY2stRXJyb3IgcmFuZ2UtZXJyb3IgKGZsb29yIG5v
dC1hLW51bWJlciAxKSkKKyAgKENoZWNrLUVycm9yIHJhbmdlLWVycm9yIChyb3VuZCBub3QtYS1u
dW1iZXIpKQorICAoQ2hlY2stRXJyb3IgcmFuZ2UtZXJyb3IgKHJvdW5kIG5vdC1hLW51bWJlciAx
KSkKKyAgKENoZWNrLUVycm9yIHJhbmdlLWVycm9yIChjb2VyY2UgcG9zaXRpdmUtaW5maW5pdHkg
J2ZpeG51bSkpIAorICAoQ2hlY2stRXJyb3IgcmFuZ2UtZXJyb3IgKGNvZXJjZSBuZWdhdGl2ZS1p
bmZpbml0eSAnZml4bnVtKSkgCisgIChDaGVjay1FcnJvciByYW5nZS1lcnJvciAoY29lcmNlIG5v
dC1hLW51bWJlciAnZml4bnVtKSkKKyAgKENoZWNrLUVycm9yIHJhbmdlLWVycm9yIChjb2VyY2Ug
cG9zaXRpdmUtaW5maW5pdHkgJ2ludGVnZXIpKSAKKyAgKENoZWNrLUVycm9yIHJhbmdlLWVycm9y
IChjb2VyY2UgbmVnYXRpdmUtaW5maW5pdHkgJ2ludGVnZXIpKSAKKyAgKENoZWNrLUVycm9yIHJh
bmdlLWVycm9yIChjb2VyY2Ugbm90LWEtbnVtYmVyICdpbnRlZ2VyKSkKKyAgKHdoZW4gKGlnbm9y
ZS1lcnJvcnMgKGNvZXJjZSAxICdyYXRpbykpCisgICAgKENoZWNrLUVycm9yIHJhbmdlLWVycm9y
IChjb2VyY2UgcG9zaXRpdmUtaW5maW5pdHkgJ3JhdGlvKSkgCisgICAgKENoZWNrLUVycm9yIHJh
bmdlLWVycm9yIChjb2VyY2UgbmVnYXRpdmUtaW5maW5pdHkgJ3JhdGlvKSkgCisgICAgKENoZWNr
LUVycm9yIHJhbmdlLWVycm9yIChjb2VyY2Ugbm90LWEtbnVtYmVyICdyYXRpbykpKQorICAod2hl
biAoaWdub3JlLWVycm9ycyAoY29lcmNlIDEgJ2JpZ2Zsb2F0KSkKKyAgICAoQ2hlY2stRXJyb3Ig
cmFuZ2UtZXJyb3IgKGNvZXJjZSBwb3NpdGl2ZS1pbmZpbml0eSAnYmlnZmxvYXQpKSAKKyAgICAo
Q2hlY2stRXJyb3IgcmFuZ2UtZXJyb3IgKGNvZXJjZSBuZWdhdGl2ZS1pbmZpbml0eSAnYmlnZmxv
YXQpKSAKKyAgICAoQ2hlY2stRXJyb3IgcmFuZ2UtZXJyb3IgKGNvZXJjZSBub3QtYS1udW1iZXIg
J2JpZ2Zsb2F0KSkpKQorCiAobGFiZWxzICgoY2wtZmxvb3IgKHggJm9wdGlvbmFsIHkpCiAgICAg
ICAgICAgIChsZXQgKChxIChmbG9vciB4IHkpKSkKICAgICAgICAgICAgICAobGlzdCBxICgtIHgg
KGlmIHkgKCogeSBxKSBxKSkpKSkKCgotLSAK4oCYVHJhbWFkb2wgaXMgZnVydGhlciBmZWQgdG8g
Y2F0dGxlIFvigKZdIHdoZW4gd29ya2luZyB0aGVtIFvigKZdIChhcyBkcmFmdAphbmltYWxzKSBz
byB0aGF0IHRoZSBhbmltYWxzIGRvIG5vdCBnZXQgdGlyZWQgcXVpY2tseS4g4oCm4oCZCgnigJQg
QW5nZXdhbmR0ZSBDaGVtaWUsIFNlcHQgMjAxNCwgZGVzY3JpYmluZyB0aGUgc29jaWFsIGNvbnRl
eHQgb2YKCShzeW50aGV0aWMpIHRyYW1hZG9sIGhhdmluZyBiZWVuIGZvdW5kIGluIENhbWVyb29u
IHRyZWUgcm9vdHMuCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpYRW1hY3MtUGF0Y2hlcyBtYWlsaW5nIGxpc3QKWEVtYWNzLVBhdGNoZXNAeGVtYWNzLm9y
ZwpodHRwOi8vbGlzdHMueGVtYWNzLm9yZy9tYWlsbWFuL2xpc3RpbmZvL3hlbWFjcy1wYXRjaGVz
Cg==