function injectDOMPropertyConfig(domPropertyConfig) {
	    var Injection = DOMPropertyInjection;
	    var Properties = domPropertyConfig.Properties || {};
	    var DOMAttributeNamespaces = domPropertyConfig.DOMAttributeNamespaces || {};
	    var DOMAttributeNames = domPropertyConfig.DOMAttributeNames || {};
	    var DOMPropertyNames = domPropertyConfig.DOMPropertyNames || {};
	    var DOMMutationMethods = domPropertyConfig.DOMMutationMethods || {};

	    if (domPropertyConfig.isCustomAttribute) {
	      DOMProperty._isCustomAttributeFunctions.push(domPropertyConfig.isCustomAttribute);
	    }

	    for (var propName in Properties) {
	      !!DOMProperty.properties.hasOwnProperty(propName) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'injectDOMPropertyConfig(...): You\'re trying to inject DOM property ' + '\'%s\' which has already been injected. You may be accidentally ' + 'injecting the same DOM property config twice, or you may be ' + 'injecting two configs that have conflicting property names.', propName) : invariant(false) : void 0;

	      var lowerCased = propName.toLowerCase();
	      var propConfig = Properties[propName];

	      var propertyInfo = {
	        attributeName: lowerCased,
	        attributeNamespace: null,
	        propertyName: propName,
	        mutationMethod: null,

	        mustUseProperty: checkMask(propConfig, Injection.MUST_USE_PROPERTY),
	        hasSideEffects: checkMask(propConfig, Injection.HAS_SIDE_EFFECTS),
	        hasBooleanValue: checkMask(propConfig, Injection.HAS_BOOLEAN_VALUE),
	        hasNumericValue: checkMask(propConfig, Injection.HAS_NUMERIC_VALUE),
	        hasPositiveNumericValue: checkMask(propConfig, Injection.HAS_POSITIVE_NUMERIC_VALUE),
	        hasOverloadedBooleanValue: checkMask(propConfig, Injection.HAS_OVERLOADED_BOOLEAN_VALUE)
	      };

	      !(propertyInfo.mustUseProperty || !propertyInfo.hasSideEffects) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'DOMProperty: Properties that have side effects must use property: %s', propName) : invariant(false) : void 0;
	      !(propertyInfo.hasBooleanValue + propertyInfo.hasNumericValue + propertyInfo.hasOverloadedBooleanValue <= 1) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'DOMProperty: Value can be one of boolean, overloaded boolean, or ' + 'numeric value, but not a combination: %s', propName) : invariant(false) : void 0;

	      if (process.env.NODE_ENV !== 'production') {
	        DOMProperty.getPossibleStandardName[lowerCased] = propName;
	      }

	      if (DOMAttributeNames.hasOwnProperty(propName)) {
	        var attributeName = DOMAttributeNames[propName];
	        propertyInfo.attributeName = attributeName;
	        if (process.env.NODE_ENV !== 'production') {
	          DOMProperty.getPossibleStandardName[attributeName] = propName;
	        }
	      }

	      if (DOMAttributeNamespaces.hasOwnProperty(propName)) {
	        propertyInfo.attributeNamespace = DOMAttributeNamespaces[propName];
	      }

	      if (DOMPropertyNames.hasOwnProperty(propName)) {
	        propertyInfo.propertyName = DOMPropertyNames[propName];
	      }

	      if (DOMMutationMethods.hasOwnProperty(propName)) {
	        propertyInfo.mutationMethod = DOMMutationMethods[propName];
	      }

	      DOMProperty.properties[propName] = propertyInfo;
	    }
	  }
/**
	   * Inject some specialized knowledge about the DOM. This takes a config object
	   * with the following properties:
	   *
	   * isCustomAttribute: function that given an attribute name will return true
	   * if it can be inserted into the DOM verbatim. Useful for data-* or aria-*
	   * attributes where it's impossible to enumerate all of the possible
	   * attribute names,
	   *
	   * Properties: object mapping DOM property name to one of the
	   * DOMPropertyInjection constants or null. If your attribute isn't in here,
	   * it won't get written to the DOM.
	   *
	   * DOMAttributeNames: object mapping React attribute name to the DOM
	   * attribute name. Attribute names not specified use the **lowercase**
	   * normalized name.
	   *
	   * DOMAttributeNamespaces: object mapping React attribute name to the DOM
	   * attribute namespace URL. (Attribute names not specified use no namespace.)
	   *
	   * DOMPropertyNames: similar to DOMAttributeNames but for DOM properties.
	   * Property names not specified use the normalized name.
	   *
	   * DOMMutationMethods: Properties that require special mutation methods. If
	   * `value` is undefined, the mutation method should unset the property.
	   *
	   * @param {object} domPropertyConfig the config as described above.
	   */
Inject some specialized knowledge about the DOM. This takes a config object
with the following properties.

function that given an attribute name will return true
if it can be inserted into the DOM verbatim. Useful for data-* or aria
attributes where it's impossible to enumerate all of the possible
attribute names.

object mapping DOM property name to one of the
DOMPropertyInjection constants or null. If your attribute isn't in here,
it won't get written to the DOM.

object mapping React attribute name to the DOM
attribute name. Attribute names not specified use the **lowercase
normalized name.

object mapping React attribute name to the DOM
attribute namespace URL. (Attribute names not specified use no namespace.)

similar to DOMAttributeNames but for DOM properties.
Property names not specified use the normalized name.

Properties that require special mutation methods. If
`value` is undefined, the mutation method should unset the property.

@param {object} domPropertyConfig the config as described above.
Inject some specialized knowledge about the DOM . This takes a config object with the following properties . function that given an attribute name will return true if it can be inserted into the DOM verbatim . Useful for data - * or aria attributes where it ' s impossible to enumerate all of the possible attribute names . object mapping DOM property name to one of the DOMPropertyInjection constants or null . If your attribute isn ' t in here it won ' t get written to the DOM . object mapping React attribute name to the DOM attribute name . Attribute names not specified use the ** lowercase normalized name . object mapping React attribute name to the DOM attribute namespace URL . ( Attribute names not specified use no namespace . ) similar to DOMAttributeNames but for DOM properties . Property names not specified use the normalized name . Properties that require special mutation methods . If ` value ` is undefined the mutation method should unset the property . @param { object } domPropertyConfig the config as described above .
function injectDOMPropertyConfig(domPropertyConfig) {
	    var Injection = DOMPropertyInjection;
	    var Properties = domPropertyConfig.Properties || {};
	    var DOMAttributeNamespaces = domPropertyConfig.DOMAttributeNamespaces || {};
	    var DOMAttributeNames = domPropertyConfig.DOMAttributeNames || {};
	    var DOMPropertyNames = domPropertyConfig.DOMPropertyNames || {};
	    var DOMMutationMethods = domPropertyConfig.DOMMutationMethods || {};
	    if (domPropertyConfig.isCustomAttribute) {
	      DOMProperty._isCustomAttributeFunctions.push(domPropertyConfig.isCustomAttribute);
	    }
	    for (var propName in Properties) {
	      !!DOMProperty.properties.hasOwnProperty(propName) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'injectDOMPropertyConfig(...): You\'re trying to inject DOM property ' + '\'%s\' which has already been injected. You may be accidentally ' + 'injecting the same DOM property config twice, or you may be ' + 'injecting two configs that have conflicting property names.', propName) : invariant(false) : void 0;
	      var lowerCased = propName.toLowerCase();
	      var propConfig = Properties[propName];
	      var propertyInfo = {
	        attributeName: lowerCased,
	        attributeNamespace: null,
	        propertyName: propName,
	        mutationMethod: null,
	        mustUseProperty: checkMask(propConfig, Injection.MUST_USE_PROPERTY),
	        hasSideEffects: checkMask(propConfig, Injection.HAS_SIDE_EFFECTS),
	        hasBooleanValue: checkMask(propConfig, Injection.HAS_BOOLEAN_VALUE),
	        hasNumericValue: checkMask(propConfig, Injection.HAS_NUMERIC_VALUE),
	        hasPositiveNumericValue: checkMask(propConfig, Injection.HAS_POSITIVE_NUMERIC_VALUE),
	        hasOverloadedBooleanValue: checkMask(propConfig, Injection.HAS_OVERLOADED_BOOLEAN_VALUE)
	      };
	      !(propertyInfo.mustUseProperty || !propertyInfo.hasSideEffects) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'DOMProperty: Properties that have side effects must use property: %s', propName) : invariant(false) : void 0;
	      !(propertyInfo.hasBooleanValue + propertyInfo.hasNumericValue + propertyInfo.hasOverloadedBooleanValue <= 1) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'DOMProperty: Value can be one of boolean, overloaded boolean, or ' + 'numeric value, but not a combination: %s', propName) : invariant(false) : void 0;
	      if (process.env.NODE_ENV !== 'production') {
	        DOMProperty.getPossibleStandardName[lowerCased] = propName;
	      }
	      if (DOMAttributeNames.hasOwnProperty(propName)) {
	        var attributeName = DOMAttributeNames[propName];
	        propertyInfo.attributeName = attributeName;
	        if (process.env.NODE_ENV !== 'production') {
	          DOMProperty.getPossibleStandardName[attributeName] = propName;
	        }
	      }
	      if (DOMAttributeNamespaces.hasOwnProperty(propName)) {
	        propertyInfo.attributeNamespace = DOMAttributeNamespaces[propName];
	      }
	      if (DOMPropertyNames.hasOwnProperty(propName)) {
	        propertyInfo.propertyName = DOMPropertyNames[propName];
	      }
	      if (DOMMutationMethods.hasOwnProperty(propName)) {
	        propertyInfo.mutationMethod = DOMMutationMethods[propName];
	      }
	      DOMProperty.properties[propName] = propertyInfo;
	    }
	  }
function injectDOMPropertyConfig ( domPropertyConfig ) { var Injection = DOMPropertyInjection ; var Properties = domPropertyConfig . Properties || { } ; var DOMAttributeNamespaces = domPropertyConfig . DOMAttributeNamespaces || { } ; var DOMAttributeNames = domPropertyConfig . DOMAttributeNames || { } ; var DOMPropertyNames = domPropertyConfig . DOMPropertyNames || { } ; var DOMMutationMethods = domPropertyConfig . DOMMutationMethods || { } ; if ( domPropertyConfig . isCustomAttribute ) { DOMProperty . _isCustomAttributeFunctions . push ( domPropertyConfig . isCustomAttribute ) ; } for ( var propName in Properties ) { ! ! DOMProperty . properties . hasOwnProperty ( propName ) ? process . env . NODE_ENV !== 'production' ? invariant ( false , 'injectDOMPropertyConfig(...): You\'re trying to inject DOM property ' + '\'%s\' which has already been injected. You may be accidentally ' + 'injecting the same DOM property config twice, or you may be ' + 'injecting two configs that have conflicting property names.' , propName ) : invariant ( false ) : void 0 ; var lowerCased = propName . toLowerCase ( ) ; var propConfig = Properties [ propName ] ; var propertyInfo = { attributeName : lowerCased , attributeNamespace : null , propertyName : propName , mutationMethod : null , mustUseProperty : checkMask ( propConfig , Injection . MUST_USE_PROPERTY ) , hasSideEffects : checkMask ( propConfig , Injection . HAS_SIDE_EFFECTS ) , hasBooleanValue : checkMask ( propConfig , Injection . HAS_BOOLEAN_VALUE ) , hasNumericValue : checkMask ( propConfig , Injection . HAS_NUMERIC_VALUE ) , hasPositiveNumericValue : checkMask ( propConfig , Injection . HAS_POSITIVE_NUMERIC_VALUE ) , hasOverloadedBooleanValue : checkMask ( propConfig , Injection . HAS_OVERLOADED_BOOLEAN_VALUE ) } ; ! ( propertyInfo . mustUseProperty || ! propertyInfo . hasSideEffects ) ? process . env . NODE_ENV !== 'production' ? invariant ( false , 'DOMProperty: Properties that have side effects must use property: %s' , propName ) : invariant ( false ) : void 0 ; ! ( propertyInfo . hasBooleanValue + propertyInfo . hasNumericValue + propertyInfo . hasOverloadedBooleanValue <= 1 ) ? process . env . NODE_ENV !== 'production' ? invariant ( false , 'DOMProperty: Value can be one of boolean, overloaded boolean, or ' + 'numeric value, but not a combination: %s' , propName ) : invariant ( false ) : void 0 ; if ( process . env . NODE_ENV !== 'production' ) { DOMProperty . getPossibleStandardName [ lowerCased ] = propName ; } if ( DOMAttributeNames . hasOwnProperty ( propName ) ) { var attributeName = DOMAttributeNames [ propName ] ; propertyInfo . attributeName = attributeName ; if ( process . env . NODE_ENV !== 'production' ) { DOMProperty . getPossibleStandardName [ attributeName ] = propName ; } } if ( DOMAttributeNamespaces . hasOwnProperty ( propName ) ) { propertyInfo . attributeNamespace = DOMAttributeNamespaces [ propName ] ; } if ( DOMPropertyNames . hasOwnProperty ( propName ) ) { propertyInfo . propertyName = DOMPropertyNames [ propName ] ; } if ( DOMMutationMethods . hasOwnProperty ( propName ) ) { propertyInfo . mutationMethod = DOMMutationMethods [ propName ] ; } DOMProperty . properties [ propName ] = propertyInfo ; } }
Inject some specialized knowledge about the DOM.
Inject some specialized knowledge about the DOM .