anchor.diff:  handle_call(stop, _From, State) ->
       {stop, normal, stopped, State};
   
  -handle_call({send, RegIds, Message, Attempt}, _From, #state{key=Key} = State) ->
  -    Reply = do_push(RegIds, Message, Key, Attempt),
  +handle_call({send, RegIds, Message, Retry}, _From, #state{key=Key} = State) ->
  +    Reply = do_push(RegIds, Message, Key, Retry),
       {reply, Reply, State};
   
   handle_call(_Request, _From, State) ->
       Reply = ok,
       {reply, Reply, State}.
   
  -handle_cast({send, RegIds, Message, Attempt}, #state{key=Key} = State) ->
  -    do_push(RegIds, Message, Key, Attempt),
  +handle_cast({send, RegIds, Message, Retry}, #state{key=Key} = State) ->
  +    do_push(RegIds, Message, Key, Retry),
       {noreply, State};
   
   handle_cast(_Msg, State) ->
  
positive.code:     {_MulticastId, _SuccessesNumber, _FailuresNumber, _CanonicalIdsNumber, Results} = GCMResult,
      lists:map(fun({Result, RegId}) -> {RegId, parse(Result)} end, lists:zip(Results, RegIds)).
  
  do_backoff(_, _, _, _, ?MAX_ATTEMPT + 1) ->
      ok;
  
  do_backoff(RetryAfter, RegIds, Message, Key, Attempt) ->
      case RetryAfter of
          no_retry ->
              ok;
  	_ ->
  	    timer:apply_after(RetryAfter * 1000, ?MODULE, do_push, [RegIds, Message, Key, Attempt+1])
      end.
  
  parse(Result) ->
  
negative.code:     gen_server:call(Name, stop).
  
  push(Name, RegIds, Message) ->
      push(Name, RegIds, Message, ?RETRY).
  
  push(Name, RegIds, Message, Retry) ->
      gen_server:cast(Name, {send, RegIds, Message, Retry}).
  
  sync_push(Name, RegIds, Message) ->
      sync_push(Name, RegIds, Message, ?RETRY).
  
  sync_push(Name, RegIds, Message, Retry) ->
      gen_server:call(Name, {send, RegIds, Message, Retry}).
  
  %% OTP
  start_link(Name, Key) ->
  