docs: function knMergeSnapshots(snapshots)
  {
  	var rv, errors, srvname, i, snap;
  
  	rv = new knSnapshot();
  	errors = [];
  
  	for (i = 0; i < snapshots.length; i++) {
  		snap = snapshots[i];
  
  		if (!('service' in snap)) {
  			errors.push([ snap, 'missing "service" property' ]);
  			continue;
  		}
  
  		srvname = snap['service']['name'];
  
  		if ('component' in snap['service'])
  			srvname += '.' + snap['service']['component'];
  
  		snap['service']['source'] =
  		    snap['source']['protocol'] + '://' +
  		    snap['source']['host'] + ':' + snap['source']['port'] +
  		    snap['source']['path'];
  		srvname += '.' + snap['service']['ident'];
  		rv.add('service', srvname, snap['service']);
  
  		if ('stats' in snap)
  			rv.add('stats', srvname, snap['stats']);
  
  		if (!('types' in snap))
  			continue;
  
  		snap['types'].forEach(function (type) {
  			var objects, key;
  
  			objects = snap[type];
  
  			for (key in objects) {
  				objects[key]['origin'] = srvname;
  				rv.add(type, key, objects[key]);
  			}
  		});
  	}
  
  	return (rv);
  }