old_contents: import datetime
  import os
  
  
  def cached_property(f):
      """
      returns a cached property that is calculated by function f
      http://code.activestate.com/recipes/576563-cached-property/
      """
      def get(self):
          try:
              return self._property_cache[f]
          except AttributeError:
              self._property_cache = {}
              x = self._property_cache[f] = f(self)
              return x
          except KeyError:
              x = self._property_cache[f] = f(self)
              return x
  
      return property(get)
  
  
  def yesno(prompt, default=None):
      """
      Prompt the user for a yes or no.
  
      Can optionally specify a default value, which will only be
      used if they enter a blank line.
  
      Unrecognised input (anything other than "y", "n", "yes",
      "no" or "") will return None.
      """
      answer = raw_input(prompt).strip().lower()
  
      if answer == "y" or answer == "yes":
          return True
      elif answer == "n" or answer == "no":
          return False
      elif answer == "":
          return default
      else:
          return None
  
  
  # http://stackoverflow.com/a/5164027
  def prettydate(d):
      diff = datetime.datetime.utcnow() - d
      s = diff.seconds
      if diff.days > 7 or diff.days < 0:
          return d.strftime('%d %b %y')
      elif diff.days == 1:
          return '1 day ago'
      elif diff.days > 1:
          return '{0} days ago'.format(diff.days)
      elif s <= 1:
          return 'just now'
      elif s < 60:
          return '{0} seconds ago'.format(s)
      elif s < 120:
          return '1 minute ago'
      elif s < 3600:
          return '{0} minutes ago'.format(s/60)
      elif s < 7200:
          return '1 hour ago'
      else:
          return '{0} hours ago'.format(s/3600)
  
  
  def mkdir(path):
      if not os.path.exists(path):
          os.mkdir(path)
  
      return path
  
new_contents: import datetime
  import os
  
  
  def cached_property(f):
      """
      returns a cached property that is calculated by function f
      http://code.activestate.com/recipes/576563-cached-property/
      """
      def get(self):
          try:
              return self._property_cache[f]
          except AttributeError:
              self._property_cache = {}
              x = self._property_cache[f] = f(self)
              return x
          except KeyError:
              x = self._property_cache[f] = f(self)
              return x
  
      return property(get)
  
  
  def yesno(prompt, default=None):
      """
      Prompt the user for a yes or no.
  
      Can optionally specify a default value, which will only be
      used if they enter a blank line.
  
      Unrecognised input (anything other than "y", "n", "yes",
      "no" or "") will return None.
      """
      answer = raw_input(prompt).strip().lower()
  
      if answer == "y" or answer == "yes":
          return True
      elif answer == "n" or answer == "no":
          return False
      elif answer == "":
          return default
      else:
          return None
  
  
  # http://stackoverflow.com/a/5164027
  def prettydate(d):
      diff = datetime.datetime.utcnow() - d
      s = diff.seconds
      if diff.days > 7 or diff.days < 0:
          return d.strftime('%d %b %y')
      elif diff.days == 1:
          return '1 day ago'
      elif diff.days > 1:
          return '{0} days ago'.format(diff.days)
      elif s <= 1:
          return 'just now'
      elif s < 60:
          return '{0} seconds ago'.format(s)
      elif s < 120:
          return '1 minute ago'
      elif s < 3600:
          return '{0} minutes ago'.format(s/60)
      elif s < 7200:
          return '1 hour ago'
      else:
          return '{0} hours ago'.format(s/3600)
  
  
  def mkdir(path, permissions=0700):
      if not os.path.exists(path):
          os.mkdir(path)
  
      os.chmod(path, permissions)
  
      return path
  
subject: Set more restrictive permissions on ~/.orchard