class S3ChangeLogStore implements ChangeLogStore {

    @Override
    public List<String> getLocalDomainList() {

        // check to see if we need to maintain our last modification time.
        // this will be necessary if our last mod time field is null. We need
        // to save the timestamp at the beginning just in case we end up getting
        // paged results and while processing the last page, the Syncer pushes
        // updated domains from the earlier pages

        if (lastModTime == 0) {
            lastModTime = System.currentTimeMillis();
        }

        // we are going to initialize our s3 client here since
        // this is the first entry point before we start
        // fetching all the domains individually

        awsS3Client = getS3Client();

        ArrayList<String> domains = new ArrayList<>();
        listObjects(awsS3Client, domains, 0);
        tempSignedDomainMap.clear();

        // we are trying to get the signed domain list from the s3 bucket twice here.
        // The function get AllSignedDomains will return false when an InterruptedException
        // is thrown. If it can't be done successfully then we thrown a RuntimeException.

        if (!getAllSignedDomains(domains)) {
            getAllSignedDomains(domains);
        }
        return domains;
    }

    public  S3ChangeLogStore();
    public  S3ChangeLogStore(String awsRegion);

}