function (attr, value, keepKey) {
			attr = attr + "";

			var dotIndex = attr.indexOf('.'),
				current;

			if(dotIndex >= 0 && !keepKey){
				var first = attr.substr(0, dotIndex),
					second = attr.substr(dotIndex+1);

				current =  this[inSetupSymbol] ? undefined : this.___get( first );

				if( canReflect.isMapLike(current) ) {
					canReflect.setKeyValue(current, second, value);
				} else {
					current = this[inSetupSymbol] ? undefined : this.___get( attr );

					// //Convert if there is a converter.  Remove in 3.0.
					if (this.__convert) {
						value = this.__convert(attr, value);
					}

					this.__set(attr, this.__type(value, attr), current);
				}

			} else {
				current = this[inSetupSymbol] ? undefined : this.___get( attr );

				// //Convert if there is a converter.  Remove in 3.0.
				if (this.__convert) {
					value = this.__convert(attr, value);
				}

				this.__set(attr, this.__type(value, attr), current);
			}
		}
function (attr, value, keepKey) {
			attr = attr + "";

			var dotIndex = attr.indexOf('.'),
				current;

			if(dotIndex >= 0 && !keepKey){
				var first = attr.substr(0, dotIndex),
					second = attr.substr(dotIndex+1);

				current =  this[inSetupSymbol] ? undefined : this.___get( first );

				if( canReflect.isMapLike(current) ) {
					canReflect.setKeyValue(current, second, value);
				} else {
					current = this[inSetupSymbol] ? undefined : this.___get( attr );

					
					if (this.__convert) {
						value = this.__convert(attr, value);
					}

					this.__set(attr, this.__type(value, attr), current);
				}

			} else {
				current = this[inSetupSymbol] ? undefined : this.___get( attr );

				
				if (this.__convert) {
					value = this.__convert(attr, value);
				}

				this.__set(attr, this.__type(value, attr), current);
			}
		}
function ( attr , value , keepKey ) { attr = attr + "" ; var dotIndex = attr . indexOf ( '.' ) , current ; if ( dotIndex >= 0 && ! keepKey ) { var first = attr . substr ( 0 , dotIndex ) , second = attr . substr ( dotIndex + 1 ) ; current = this [ inSetupSymbol ] ? undefined : this . ___get ( first ) ; if ( canReflect . isMapLike ( current ) ) { canReflect . setKeyValue ( current , second , value ) ; } else { current = this [ inSetupSymbol ] ? undefined : this . ___get ( attr ) ; // //Convert if there is a converter.  Remove in 3.0. if ( this . __convert ) { value = this . __convert ( attr , value ) ; } this . __set ( attr , this . __type ( value , attr ) , current ) ; } } else { current = this [ inSetupSymbol ] ? undefined : this . ___get ( attr ) ; // //Convert if there is a converter.  Remove in 3.0. if ( this . __convert ) { value = this . __convert ( attr , value ) ; } this . __set ( attr , this . __type ( value , attr ) , current ) ; } }
### _set Handles setting nested properties by finding the nested observable and recursively calling `_set` on it. Eventually, it calls `__set` with the `__type` converted value to set and the current value.  The current value is passed for two reasons: - so `__set` can trigger an event if the value has changed. - for advanced setting behavior that define.set can do.  If the map is initializing, the current value does not need to be read because no change events are dispatched anyway.
### _set Handles setting nested properties by finding the nested observable and recursively calling _set on it . Eventually it calls __set with the __type converted value to set and the current value . The current value is passed for two reasons : - so __set can trigger an event if the value has changed . - for advanced setting behavior that define . set can do . If the map is initializing the current value does not need to be read because no change events are dispatched anyway .