docs: function(module, exports, __webpack_require__) {
  
  	/**
  	 * Copyright 2015-present, Facebook, Inc.
  	 * All rights reserved.
  	 *
  	 * This source code is licensed under the BSD-style license found in the
  	 * LICENSE file in the root directory of this source tree. An additional grant
  	 * of patent rights can be found in the PATENTS file in the same directory.
  	 *
  	 */
  	
  	'use strict';
  	
  	var _prodInvariant = __webpack_require__(33);
  	
  	var invariant = __webpack_require__(9);
  	
  	/**
  	 * Return the lowest common ancestor of A and B, or null if they are in
  	 * different trees.
  	 */
  	function getLowestCommonAncestor(instA, instB) {
  	  !('_hostNode' in instA) ?  false ? invariant(false, 'getNodeFromInstance: Invalid argument.') : _prodInvariant('33') : void 0;
  	  !('_hostNode' in instB) ?  false ? invariant(false, 'getNodeFromInstance: Invalid argument.') : _prodInvariant('33') : void 0;
  	
  	  var depthA = 0;
  	  for (var tempA = instA; tempA; tempA = tempA._hostParent) {
  	    depthA++;
  	  }
  	  var depthB = 0;
  	  for (var tempB = instB; tempB; tempB = tempB._hostParent) {
  	    depthB++;
  	  }
  	
  	  // If A is deeper, crawl up.
  	  while (depthA - depthB > 0) {
  	    instA = instA._hostParent;
  	    depthA--;
  	  }
  	
  	  // If B is deeper, crawl up.
  	  while (depthB - depthA > 0) {
  	    instB = instB._hostParent;
  	    depthB--;
  	  }
  	
  	  // Walk in lockstep until we find a match.
  	  var depth = depthA;
  	  while (depth--) {
  	    if (instA === instB) {
  	      return instA;
  	    }
  	    instA = instA._hostParent;
  	    instB = instB._hostParent;
  	  }
  	  return null;
  	}
  	
  	/**
  	 * Return if A is an ancestor of B.
  	 */
  	function isAncestor(instA, instB) {
  	  !('_hostNode' in instA) ?  false ? invariant(false, 'isAncestor: Invalid argument.') : _prodInvariant('35') : void 0;
  	  !('_hostNode' in instB) ?  false ? invariant(false, 'isAncestor: Invalid argument.') : _prodInvariant('35') : void 0;
  	
  	  while (instB) {
  	    if (instB === instA) {
  	      return true;
  	    }
  	    instB = instB._hostParent;
  	  }
  	  return false;
  	}
  	
  	/**
  	 * Return the parent instance of the passed-in instance.
  	 */
  	function getParentInstance(inst) {
  	  !('_hostNode' in inst) ?  false ? invariant(false, 'getParentInstance: Invalid argument.') : _prodInvariant('36') : void 0;
  	
  	  return inst._hostParent;
  	}
  	
  	/**
  	 * Simulates the traversal of a two-phase, capture/bubble event dispatch.
  	 */
  	function traverseTwoPhase(inst, fn, arg) {
  	  var path = [];
  	  while (inst) {
  	    path.push(inst);
  	    inst = inst._hostParent;
  	  }
  	  var i;
  	  for (i = path.length; i-- > 0;) {
  	    fn(path[i], 'captured', arg);
  	  }
  	  for (i = 0; i < path.length; i++) {
  	    fn(path[i], 'bubbled', arg);
  	  }
  	}
  	
  	/**
  	 * Traverses the ID hierarchy and invokes the supplied `cb` on any IDs that
  	 * should would receive a `mouseEnter` or `mouseLeave` event.
  	 *
  	 * Does not invoke the callback on the nearest common ancestor because nothing
  	 * "entered" or "left" that element.
  	 */
  	function traverseEnterLeave(from, to, fn, argFrom, argTo) {
  	  var common = from && to ? getLowestCommonAncestor(from, to) : null;
  	  var pathFrom = [];
  	  while (from && from !== common) {
  	    pathFrom.push(from);
  	    from = from._hostParent;
  	  }
  	  var pathTo = [];
  	  while (to && to !== common) {
  	    pathTo.push(to);
  	    to = to._hostParent;
  	  }
  	  var i;
  	  for (i = 0; i < pathFrom.length; i++) {
  	    fn(pathFrom[i], 'bubbled', argFrom);
  	  }
  	  for (i = pathTo.length; i-- > 0;) {
  	    fn(pathTo[i], 'captured', argTo);
  	  }
  	}
  	
  	module.exports = {
  	  isAncestor: isAncestor,
  	  getLowestCommonAncestor: getLowestCommonAncestor,
  	  getParentInstance: getParentInstance,
  	  traverseTwoPhase: traverseTwoPhase,
  	  traverseEnterLeave: traverseEnterLeave
  	};
  
  /***/ }