code: def route53_public_hosted_zone_id(self, lookup, default=None):
      
      list_limit = "100"
      # enforce terminal '.' in name, otherwise we could get a partial match of the incorrect zones
      if lookup[-1] != '.':
        return default
      hosted_zones = EFAwsResolver.__CLIENTS["route53"].list_hosted_zones_by_name(DNSName=lookup, MaxItems=list_limit)
      # Return if the account has no HostedZones
      if not hosted_zones.has_key("HostedZones"):
        return default
      while True:
        for hosted_zone in hosted_zones["HostedZones"]:
          if lookup == hosted_zone["Name"] and not hosted_zone["Config"]["PrivateZone"]:
            return hosted_zone["Id"].split("/")[2]
        if hosted_zones["IsTruncated"]:
          hosted_zones = EFAwsResolver.__CLIENTS["route53"].list_hosted_zones_by_name(
            DNSName=hosted_zones["NextDNSName"], HostedZoneId=hosted_zones["NextHostedZoneId"], MaxItems=list_limit)
        else:
          return default
docs: Args:
        lookup: The zone name to look up. Must end with "."
        default: the optional value to return if lookup failed; returns None if not set
      Returns:
        the ID of the public hosted zone for the 'lookup' domain, or default/None if no match found