class HugePrimaryKeyStrategy
        extends AbstractTraversalStrategy<TraversalStrategy.ProviderOptimizationStrategy>
        implements ProviderOptimizationStrategy {

    private static final long serialVersionUID = 6307847098226016416L;
    private static final HugePrimaryKeyStrategy INSTANCE = new HugePrimaryKeyStrategy();

    public static HugePrimaryKeyStrategy instance() {
        return INSTANCE;
    }

    @Override
    public void apply(Traversal.Admin<?, ?> traversal) {<FILL_FUNCTION_BODY>}
}


        List<Step> removeSteps = new LinkedList<>();
        Mutating curAddStep = null;
        List<Step> stepList = traversal.getSteps();

        for (int i = 0, s = stepList.size(); i < s; i++) {
            Step step = stepList.get(i);

            if (i == 0 && step instanceof AddVertexStartStep) {
                curAddStep = (Mutating) step;
                continue;
            } else if (curAddStep == null && (step) instanceof AddVertexStep) {
                curAddStep = (Mutating) step;
                continue;
            }

            if (curAddStep == null) {
                continue;
            }

            if (!(step instanceof AddPropertyStep)) {
                curAddStep = null;
                continue;
            }

            AddPropertyStep propertyStep = (AddPropertyStep) step;

            if (propertyStep.getCardinality() == Cardinality.single
                || propertyStep.getCardinality() == null) {

                Object[] kvs = new Object[2];
                List<Object> kvList = new LinkedList<>();

                propertyStep.getParameters().getRaw().forEach((k, v) -> {
                    if (T.key.equals(k)) {
                        kvs[0] = v.get(0);
                    } else if (T.value.equals(k)) {
                        kvs[1] = v.get(0);
                    } else {
                        kvList.add(k.toString());
                        kvList.add(v.get(0));
                    }
                });

                curAddStep.configure(kvs);

                if (!kvList.isEmpty()) {
                    curAddStep.configure(kvList.toArray(new Object[0]));
                }

                removeSteps.add(step);
            } else {
                curAddStep = null;
            }

        }

        for (Step index : removeSteps) {
            traversal.removeStep(index);
        }
    
<no_super_class>