func findValue(v reflect.Value) (reflect.Value, bool) {
	for ; v.Kind() == reflect.Ptr || v.Kind() == reflect.Interface; v = v.Elem() {
		if v.IsNil() {
			return v, true
		}
		if v.Kind() == reflect.Interface && v.NumMethod() > 0 {
			break
		}
	}
	return v, false
}
// unwind pointers, etc to find either the value or flag indicating was nil
unwind pointers, etc to find either the value or flag indicating was nil
// unwind pointers etc to find either the value or flag indicating was nil
func findValue(v reflect.Value) (reflect.Value, bool) {
	for ; v.Kind() == reflect.Ptr || v.Kind() == reflect.Interface; v = v.Elem() {
		if v.IsNil() {
			return v, true
		}
		if v.Kind() == reflect.Interface && v.NumMethod() > 0 {
			break
		}
	}
	return v, false
}
func findValue ( v reflect . Value ) ( reflect . Value , bool ) { for ; v . Kind ( ) == reflect . Ptr || v . Kind ( ) == reflect . Interface ; v = v . Elem ( ) { if v . IsNil ( ) { return v , true } if v . Kind ( ) == reflect . Interface && v . NumMethod ( ) > 0 { break } } return v , false }
unwind pointers, etc to find either the value or flag indicating was nil
unwind pointers etc to find either the value or flag indicating was nil