func GetBoolStringPtr(d *schema.ResourceData, key string) (*bool, error) {
	v, ok := d.GetOk(key)
	if !ok {
		return nil, nil
	}
	b, err := strconv.ParseBool(v.(string))
	if err != nil {
		return nil, err
	}
	return &b, nil
}
func GetBoolStringPtr(d *schema.ResourceData, key string) (*bool, error) {
	v, ok := d.GetOk(key)
	if !ok {
		return nil, nil
	}
	b, err := strconv.ParseBool(v.(string))
	if err != nil {
		return nil, err
	}
	return &b, nil
}
// GetBoolStringPtr reads a ResourceData *string* field. This field is handled
// in the following way:
//
// * If it's empty, nil is returned.
// * The string is then sent through ParseBool. This will return a valid value
// for anything ParseBool returns a value for.
// * If it's anything else, an error is returned.
//
// This is designed to address the current lack of HCL and Terraform to be able
// to distinguish between nil states and zero values properly. This is a
// systemic issue that affects reading, writing, and diffing of these values.
// These issues will eventually be addressed in HCL2.