function propertySymbolsIn( value ) {
	var symbols;
	var obj;
	var tmp;
	var i;

	if ( value === null || value === void 0 ) {
		return [];
	}
	// Cast the value to an object:
	obj = Object( value );

	// Walk the prototype chain collecting all symbol properties...
	symbols = [];
	do {
		tmp = getOwnPropertySymbols( obj );
		for ( i = 0; i < tmp.length; i++ ) {
			if ( contains( symbols, tmp[ i ] ) === false ) {
				symbols.push( tmp[ i ] );
			}
		}
		obj = getPrototypeOf( obj );
	} while ( obj );

	return symbols;
}
Returns an array of an object's own and inherited symbol properties.

## Notes

-   In contrast to the built-in `Object.getOwnPropertySymbols()`, this function returns an empty array if provided `undefined` or `null`, rather than throwing an error.

@param {*} value - input object
@returns {Array} a list of own and inherited symbol properties

@example
var symbols = propertySymbolsIn( [] );