class CurveToReplicateInitialPoint extends GraphicsOperatorProcessor
{
    private static final Logger LOG = LogManager.getLogger(CurveToReplicateInitialPoint.class);
    
    public CurveToReplicateInitialPoint(PDFGraphicsStreamEngine context)
    {
        super(context);
    }

    @Override
    public void process(Operator operator, List<COSBase> operands) throws IOException
    {<FILL_FUNCTION_BODY>}

    @Override
    public String getName()
    {
        return OperatorName.CURVE_TO_REPLICATE_INITIAL_POINT;
    }
}

        if (operands.size() < 4)
        {
            throw new MissingOperandException(operator, operands);
        }
        if (!checkArrayTypesClass(operands, COSNumber.class))
        {
            return;
        }
        COSNumber x2 = (COSNumber)operands.get(0);
        COSNumber y2 = (COSNumber)operands.get(1);
        COSNumber x3 = (COSNumber)operands.get(2);
        COSNumber y3 = (COSNumber)operands.get(3);

        PDFGraphicsStreamEngine context = getGraphicsContext();
        Point2D currentPoint = context.getCurrentPoint();

        Point2D.Float point2 = context.transformedPoint(x2.floatValue(), y2.floatValue());
        Point2D.Float point3 = context.transformedPoint(x3.floatValue(), y3.floatValue());

        if (currentPoint == null)
        {
            LOG.warn("curveTo ({},{}) without initial MoveTo", point3.x, point3.y);
            context.moveTo(point3.x, point3.y);
        }
        else
        {
            context.curveTo((float) currentPoint.getX(), (float) currentPoint.getY(),
                    point2.x, point2.y,
                    point3.x, point3.y);
        }
    
<no_super_class>