anchor.diff:  remove_hash(InfoHash) ->
       gen_server:call(?SERVER, {remove_hash, InfoHash}).
   
  +store_peer(IP, Port, InfoHash) ->
  +    gen_server:call(?SERVER, {store_peer, IP, Port, InfoHash}).
  +
  +remove_peer(IP, Port, InfoHash) ->
  +    gen_server:call(?SERVER, {remove_peer, IP, Port, InfoHash}).
  +
  +is_connected_peer(IP, Port, InfoHash) ->
  +    gen_server:call(?SERVER, {is_connected_peer, IP, Port, InfoHash}).
  +
   lookup(InfoHash) ->
       gen_server:call(?SERVER, {lookup, InfoHash}).
   
  
positive.code: %%                                      {stop, Reason, State}
  %% Description: Handling call messages
  %%--------------------------------------------------------------------
  handle_call({store_hash, InfoHash}, {Pid, _Tag}, S) ->
      Ref = erlang:monitor(process, Pid),
      ets:insert(S#state.info_hash_map, {InfoHash, Pid, Ref}),
  
negative.code: -behaviour(gen_server).
  
  %% API
  -export([start_link/0, store_hash/1, remove_hash/1, lookup/1,
  	 store_peer/3, remove_peer/3, is_connected_peer/3]).
  
  %% gen_server callbacks
  -export([init/1, handle_call/3, handle_cast/2, handle_info/2,
  	 terminate/2, code_change/3]).
  
  -record(state, { info_hash_map = none,
  		 peer_map = none}).
  -define(SERVER, ?MODULE).
  
  %%====================================================================
  