@Override
        public boolean equals(Object object) {
            if (this == object) {
                return true;
            } else if (!(object instanceof S3Proxy.Builder)) {
                return false;
            }
            S3Proxy.Builder that = (S3Proxy.Builder) object;
            // do not check credentials or storage backend fields
            return Objects.equals(this.endpoint, that.endpoint) &&
                    Objects.equals(this.secureEndpoint, that.secureEndpoint) &&
                    Objects.equals(this.sslContext, that.sslContext) &&
                    Objects.equals(this.keyStorePath, that.keyStorePath) &&
                    Objects.equals(this.keyStorePassword,
                            that.keyStorePassword) &&
                    Objects.equals(this.virtualHost, that.virtualHost) &&
                    Objects.equals(this.servicePath, that.servicePath) &&
                    this.maxSinglePartObjectSize ==
                            that.maxSinglePartObjectSize &&
                    this.v4MaxNonChunkedRequestSize ==
                            that.v4MaxNonChunkedRequestSize &&
                    this.ignoreUnknownHeaders == that.ignoreUnknownHeaders &&
                    this.corsRules.equals(that.corsRules);
        }
S3Proxy translates S3 HTTP operations into jclouds provider-agnostic
operations.  This allows applications using the S3 API to interface with any
provider that jclouds supports, e.g., EMC Atmos, Microsoft Azure,
OpenStack Swift.
src/main/java/org/gaul/s3proxy/S3Proxy.java