def GCD(a, b):
prevx, x = 1, 0
prevy, y = 0, 1
while b:
q = a/b
x, prevx = prevx - q*x, x
y, prevy = prevy - q*y, y
a, b = b, a%b
return a, prevx, prevy
def modinv(x, m):
(gcd, c, d)= GCD(x,m)
if c<0:
c += m
return c
q = 2**256 - 432420386565659656852420866394968145599
r = 0x00c5141123249e2db757e46cec2caad7f80b5b4c0f3cf98dca2186e91d027bb23b
s1 = 0x01ea79fd9d62c6cd7b348faa9ca04ca6bd5a5a0da4f0f09f01f4a4779414da12
s2 = 0x055369256542fa213c1e62289d91b0cec6e970a6da9874f6e8789d5f42b9fb4a
m1 = 0x816c128a7e426e7a68f2e4aefa5168ad635c60ea229cfb04e72657ad9e770116
m2 = 0x51d96b1cb1c872c79369d696d32d783a40f3aaa7bbbe1c99db69fe3e7efae911
print "%x" % (m1-m2) # -c92fa3379640006d2eae6af7760f4180d0cf13d3f49da60c183e0ba07a1caffe
print "%x" % (s1-s2) # db4297e4f61d4c83ecaa00574d8cce2f9a531f164d28166ee484c58e92628104
mi = modinv(s1-s2, q)
print "%x" % mi # 7369938cee97daa2c7e2b9aab4c07d7ba1189e177499caf6a2de68a71427428f
k = ((m1-m2)*mi) % q
print "k = %x" % k # 6e3469cb1dec3ce994dfc5c88bb53971fe513749727bdfa4a44a38f294008136
rinv = modinv(r, q)
xx = (s1*k-m1) % q
print "xx=%x" % xx # 8321bc4f5e0a2973e5bdc9ba8194cc62c5be375216832cb5c04c28cab035dd42
x = (xx * rinv) % q
print "x=%x" % x # 1930a0cb6fe514b9ab03c652a61ac53b2c7ee6db417543de782503e690fab966
CmRlZiBHQ0QoYSwgYik6CiAgICBwcmV2eCwgeCA9IDEsIDAKICAgIHByZXZ5LCB5ID0gMCwgMQogICAgd2hpbGUgYjoKICAgICAgICBxID0gYS9iCiAgICAgICAgeCwgcHJldnggPSBwcmV2eCAtIHEqeCwgeAogICAgICAgIHksIHByZXZ5ID0gcHJldnkgLSBxKnksIHkKICAgICAgICBhLCBiID0gYiwgYSViCiAgICByZXR1cm4gYSwgcHJldngsIHByZXZ5CgoKZGVmIG1vZGludih4LCBtKToKICAgIChnY2QsIGMsIGQpPSBHQ0QoeCxtKQogICAgaWYgYzwwOgogICAgICAgIGMgKz0gbQogICAgcmV0dXJuIGMKCnEgPSAyKioyNTYgLSA0MzI0MjAzODY1NjU2NTk2NTY4NTI0MjA4NjYzOTQ5NjgxNDU1OTkKCnIgPSAweDAwYzUxNDExMjMyNDllMmRiNzU3ZTQ2Y2VjMmNhYWQ3ZjgwYjViNGMwZjNjZjk4ZGNhMjE4NmU5MWQwMjdiYjIzYgpzMSA9IDB4MDFlYTc5ZmQ5ZDYyYzZjZDdiMzQ4ZmFhOWNhMDRjYTZiZDVhNWEwZGE0ZjBmMDlmMDFmNGE0Nzc5NDE0ZGExMgpzMiA9IDB4MDU1MzY5MjU2NTQyZmEyMTNjMWU2MjI4OWQ5MWIwY2VjNmU5NzBhNmRhOTg3NGY2ZTg3ODlkNWY0MmI5ZmI0YQptMSA9IDB4ODE2YzEyOGE3ZTQyNmU3YTY4ZjJlNGFlZmE1MTY4YWQ2MzVjNjBlYTIyOWNmYjA0ZTcyNjU3YWQ5ZTc3MDExNgptMiA9IDB4NTFkOTZiMWNiMWM4NzJjNzkzNjlkNjk2ZDMyZDc4M2E0MGYzYWFhN2JiYmUxYzk5ZGI2OWZlM2U3ZWZhZTkxMQoKcHJpbnQgIiV4IiAlIChtMS1tMikgIyAtYzkyZmEzMzc5NjQwMDA2ZDJlYWU2YWY3NzYwZjQxODBkMGNmMTNkM2Y0OWRhNjBjMTgzZTBiYTA3YTFjYWZmZQpwcmludCAiJXgiICUgKHMxLXMyKSAjIGRiNDI5N2U0ZjYxZDRjODNlY2FhMDA1NzRkOGNjZTJmOWE1MzFmMTY0ZDI4MTY2ZWU0ODRjNThlOTI2MjgxMDQKCm1pID0gbW9kaW52KHMxLXMyLCBxKQpwcmludCAiJXgiICUgbWkgICMgNzM2OTkzOGNlZTk3ZGFhMmM3ZTJiOWFhYjRjMDdkN2JhMTE4OWUxNzc0OTljYWY2YTJkZTY4YTcxNDI3NDI4ZgoKayA9ICgobTEtbTIpKm1pKSAlIHEgCnByaW50ICJrID0gJXgiICUgayAjIDZlMzQ2OWNiMWRlYzNjZTk5NGRmYzVjODhiYjUzOTcxZmU1MTM3NDk3MjdiZGZhNGE0NGEzOGYyOTQwMDgxMzYKCnJpbnYgPSBtb2RpbnYociwgcSkKeHggPSAoczEqay1tMSkgJSBxCnByaW50ICJ4eD0leCIgJSB4eCAjIDgzMjFiYzRmNWUwYTI5NzNlNWJkYzliYTgxOTRjYzYyYzViZTM3NTIxNjgzMmNiNWMwNGMyOGNhYjAzNWRkNDIKeCA9ICh4eCAqIHJpbnYpICUgcQpwcmludCAieD0leCIgJSB4ICMgMTkzMGEwY2I2ZmU1MTRiOWFiMDNjNjUyYTYxYWM1M2IyYzdlZTZkYjQxNzU0M2RlNzgyNTAzZTY5MGZhYjk2Ngo=