import hashlib, sys
p, old, new, mode = sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[4]
b = open(p, 'rb').read()
if mode == 'apply':
    assert b.count(old.encode()) == 1, b.count(old.encode())
    open(p + '.sha', 'w').write(hashlib.sha256(b).hexdigest())
    open(p + '.orig', 'wb').write(b)
    open(p, 'wb').write(b.replace(old.encode(), new.encode()))
    print('mutated')
else:
    orig = open(p + '.orig', 'rb').read()
    open(p, 'wb').write(orig)
    ok = hashlib.sha256(open(p, 'rb').read()).hexdigest() == open(p + '.sha').read()
    import os; os.remove(p + '.orig'); os.remove(p + '.sha')
    print('RESTORED-OK' if ok else 'RESTORE-MISMATCH')
