code: function (dst) {
      forEach(arguments, function (obj) {
          if (obj !== dst) {
              forEach(obj, function (value, key) {
                  if (instanceKeywords.indexOf(key) === -1) {
                      if (dst[key]) {
                          if (angular.isArray(dst[key])) {
                              dst[key].concat(value.filter(function (v) {
                                  var vv = dst[key].indexOf(v) !== -1;
                                  if (vv) extendDeep(vv, v);
                                  return vv;
                              }));
                          } else if (angular.isObject(dst[key])) {
                              extendDeep(dst[key], value);
                          } else {
                              // if value is a simple type like a string, boolean or number
                              // then assign it
                              dst[key] = value;
                          }
                      } else if (!angular.isFunction(dst[key])) {
                          dst[key] = value;
                      }
                  }
              });
          }
      });
      return dst;
  }
docs: Deep extends http://stackoverflow.com/questions/15310935/angularjs-extend-recursive