anchor.diff:  
   -record(state, {key, retry_after, error_fun}).
   
  -%%%===================================================================
  -%%% API
  -%%%===================================================================
   start(Name, Key) ->
       start(Name, Key, fun handle_error/2).
   
   start(Name, Key, ErrorFun) ->
       gcm_sup:start_child(Name, Key, ErrorFun).
   
  -%%--------------------------------------------------------------------
  -%% @doc
  -%% Starts the server
  -%%
  -%% @spec start_link() -> {ok, Pid} | ignore | {error, Error}
  -%% @end
  -%%--------------------------------------------------------------------
   start_link(Name, Key) ->
       start_link(Name, Key, fun handle_error/2).
   
  
positive.code: %%%-------------------------------------------------------------------
  %%% @author Paolo D'Incau <paolo.dincau@gmail.com>
  %%% @copyright (C) 2013, Paolo D'Incau
  %%% @doc
  %%%
  %%% @end
  %%% Created : 18 Apr 2013 by Paolo D'Incau <paolo.dincau@gmail.com>
  %%%-------------------------------------------------------------------
  -module(gcm).
  
  -behaviour(gen_server).
  
  %% API
  -export([start/2, start/3, stop/1, start_link/2, start_link/3]).
  -export([push/3, sync_push/3, update_error_fun/2]).
  
  %% gen_server callbacks
  -export([init/1, handle_call/3, handle_cast/2, handle_info/2,
  	 terminate/2, code_change/3]).
  
  
negative.code:     Reply = ok,
      {reply, Reply, State}.
  
  handle_cast({send, RegIds, Message}, #state{key=Key, error_fun=ErrorFun} = State) ->
      do_push(RegIds, Message, Key, ErrorFun),
      {noreply, State};
  