class ScyllaDBStoreProvider extends CassandraStoreProvider {

    private static final Logger LOG = Log.logger(CassandraStore.class);

    private static final BackendFeatures FEATURES = new ScyllaDBFeatures();

    @Override
    public String type() {
        return "scylladb";
    }

    @Override
    public BackendStore loadSchemaStore(HugeConfig config) {
        String name = SCHEMA_STORE;
        LOG.debug("ScyllaDBStoreProvider load SchemaStore '{}'", name);

        if (!this.stores.containsKey(name)) {
            BackendStore s = new ScyllaDBSchemaStore(this, keyspace(), name);
            this.stores.putIfAbsent(name, s);
        }

        BackendStore store = this.stores.get(name);
        E.checkNotNull(store, "store");
        E.checkState(store instanceof ScyllaDBSchemaStore,
                     "SchemaStore must be an instance of ScyllaDBSchemaStore");
        return store;
    }

    @Override
    public BackendStore loadGraphStore(HugeConfig config) {<FILL_FUNCTION_BODY>}

    @Override
    public BackendStore loadSystemStore(HugeConfig config) {
        String name = SYSTEM_STORE;
        LOG.debug("ScyllaDBStoreProvider load SystemStore '{}'", name);

        if (!this.stores.containsKey(name)) {
            BackendStore s = new ScyllaDBSystemStore(this, keyspace(), name);
            this.stores.putIfAbsent(name, s);
        }

        BackendStore store = this.stores.get(name);
        E.checkNotNull(store, "store");
        E.checkState(store instanceof ScyllaDBSystemStore,
                     "SystemStore must be an instance of ScyllaDBSystemStore");
        return store;
    }

    public static class ScyllaDBSchemaStore
            extends CassandraStore.CassandraSchemaStore {

        public ScyllaDBSchemaStore(BackendStoreProvider provider,
                                   String keyspace, String store) {
            super(provider, keyspace, store);

            registerTableManager(HugeType.VERTEX_LABEL,
                                 new ScyllaDBTablesWithMV.VertexLabel());
            registerTableManager(HugeType.EDGE_LABEL,
                                 new ScyllaDBTablesWithMV.EdgeLabel());
            registerTableManager(HugeType.PROPERTY_KEY,
                                 new ScyllaDBTablesWithMV.PropertyKey());
            registerTableManager(HugeType.INDEX_LABEL,
                                 new ScyllaDBTablesWithMV.IndexLabel());
        }

        @Override
        public BackendFeatures features() {
            return FEATURES;
        }

        @Override
        protected CassandraMetrics createMetrics(HugeConfig conf,
                                                 CassandraSessionPool sessions,
                                                 String keyspace) {
            return new ScyllaDBMetrics(conf, sessions, keyspace);
        }
    }

    public static class ScyllaDBGraphStore
            extends CassandraStore.CassandraGraphStore {

        public ScyllaDBGraphStore(BackendStoreProvider provider,
                                  String keyspace, String store) {
            super(provider, keyspace, store);

            registerTableManager(HugeType.VERTEX,
                                 new ScyllaDBTablesWithMV.Vertex(store));
            registerTableManager(HugeType.EDGE_OUT,
                                 ScyllaDBTablesWithMV.Edge.out(store));
            registerTableManager(HugeType.EDGE_IN,
                                 ScyllaDBTablesWithMV.Edge.in(store));
        }

        @Override
        public BackendFeatures features() {
            return FEATURES;
        }

        @Override
        protected CassandraMetrics createMetrics(HugeConfig conf,
                                                 CassandraSessionPool sessions,
                                                 String keyspace) {
            return new ScyllaDBMetrics(conf, sessions, keyspace);
        }
    }

    public static class ScyllaDBSystemStore
            extends CassandraStore.CassandraSystemStore {

        public ScyllaDBSystemStore(BackendStoreProvider provider,
                                   String keyspace, String store) {
            super(provider, keyspace, store);
        }

        @Override
        public BackendFeatures features() {
            return FEATURES;
        }

        @Override
        protected CassandraMetrics createMetrics(HugeConfig conf,
                                                 CassandraSessionPool sessions,
                                                 String keyspace) {
            return new ScyllaDBMetrics(conf, sessions, keyspace);
        }
    }
}

        String name = GRAPH_STORE;
        LOG.debug("ScyllaDBStoreProvider load GraphStore '{}'", name);

        if (!this.stores.containsKey(name)) {
            BackendStore s = new ScyllaDBGraphStore(this, keyspace(), name);
            this.stores.putIfAbsent(name, s);
        }

        BackendStore store = this.stores.get(name);
        E.checkNotNull(store, "store");
        E.checkState(store instanceof ScyllaDBGraphStore,
                     "GraphStore must be an instance of ScyllaDBGraphStore");
        return store;
    
<methods>public non-sealed void <init>() ,public java.lang.String driverVersion() ,public java.lang.String type() <variables>