complete observer.cc