code: def save(self):
          
          if self.object_id:
              # Update Contact
              if not self._track_changes:
                  return True  # there's nothing to update
              url = self.build_url(
                  self._endpoints.get('root_contact').format(id=self.object_id))
              method = self.con.patch
              data = self.to_api_data(restrict_keys=self._track_changes)
          else:
              # Save new Contact
              if self.__folder_id:
                  url = self.build_url(
                      self._endpoints.get('child_contact').format(
                          folder_id=self.__folder_id))
              else:
                  url = self.build_url(self._endpoints.get('contact'))
              method = self.con.post
              data = self.to_api_data(restrict_keys=self._track_changes)
          response = method(url, data=data)
  
          if not response:
              return False
  
          if not self.object_id:
              # New Contact
              contact = response.json()
  
              self.object_id = contact.get(self._cc('id'), None)
  
              self.__created = contact.get(self._cc('createdDateTime'), None)
              self.__modified = contact.get(self._cc('lastModifiedDateTime'),
                                            None)
  
              local_tz = self.protocol.timezone
              self.__created = parse(self.created).astimezone(
                  local_tz) if self.__created else None
              self.__modified = parse(self.modified).astimezone(
                  local_tz) if self.__modified else None
          else:
              self.__modified = self.protocol.timezone.localize(dt.datetime.now())
  
          return True
docs: Saves this contact to the cloud (create or update existing one
          based on what values have changed)
  
          :return: Saved or Not
          :rtype: bool