code: func (s IPPermissionSet) Ungroup() IPPermissionSet {
  	l := []*ec2.IpPermission{}
  	for _, p := range s.List() {
  		if len(p.IpRanges) <= 1 {
  			l = append(l, p)
  			continue
  		}
  		for _, ipRange := range p.IpRanges {
  			c := &ec2.IpPermission{}
  			*c = *p
  			c.IpRanges = []*ec2.IpRange{ipRange}
  			l = append(l, c)
  		}
  	}
  
  	l2 := []*ec2.IpPermission{}
  	for _, p := range l {
  		if len(p.UserIdGroupPairs) <= 1 {
  			l2 = append(l2, p)
  			continue
  		}
  		for _, u := range p.UserIdGroupPairs {
  			c := &ec2.IpPermission{}
  			*c = *p
  			c.UserIdGroupPairs = []*ec2.UserIdGroupPair{u}
  			l2 = append(l, c)
  		}
  	}
  
  	l3 := []*ec2.IpPermission{}
  	for _, p := range l2 {
  		if len(p.PrefixListIds) <= 1 {
  			l3 = append(l3, p)
  			continue
  		}
  		for _, v := range p.PrefixListIds {
  			c := &ec2.IpPermission{}
  			*c = *p
  			c.PrefixListIds = []*ec2.PrefixListId{v}
  			l3 = append(l3, c)
  		}
  	}
  
  	return NewIPPermissionSet(l3...)
  }
docs: // Ungroup splits permissions out into individual permissions
  // EC2 will combine permissions with the same port but different SourceRanges together, for example
  // We ungroup them so we can process them