anchor.diff:      {_MulticastId, _SuccessesNumber, _FailuresNumber, _CanonicalIdsNumber, Results} = GCMResult,
       lists:map(fun({Result, RegId}) -> {RegId, parse(Result)} end, lists:zip(Results, RegIds)).
   
  -do_backoff(RetryAfter, RegIds, Message, Key) ->
  +do_backoff(_, _, _, _, ?RETRY + 1) ->
  +    ok;
  +
  +do_backoff(RetryAfter, RegIds, Message, Key, Retry) ->
       case RetryAfter of
           no_retry ->
               ok;
   	_ ->
  -	    timer:apply_after(RetryAfter * 1000, ?MODULE, do_push, [RegIds, Message, Key])
  +	    timer:apply_after(RetryAfter * 1000, ?MODULE, do_push, [RegIds, Message, Key, Retry+1])
       end.
   
   parse(Result) ->
  
positive.code:     gen_server:call(Name, stop).
  
  push(Name, RegIds, Message) ->
      gen_server:cast(Name, {send, RegIds, Message}).
  
  sync_push(Name, RegIds, Message) ->
      gen_server:call(Name, {send, RegIds, Message}).
  
  %% OTP
  start_link(Name, Key) ->
  
negative.code: -export([init/1, handle_call/3, handle_cast/2, handle_info/2,
  	 terminate/2, code_change/3]).
  
  -export([push/3, push/4, sync_push/3, sync_push/4]).
  
  -define(SERVER, ?MODULE).
  -define(RETRY, 3).
  
  -record(state, {key}).
  
  