input
input: { 
    firstInputTime: number; 
    keys: { 
        hold: boolean; 
        rotate180: boolean; 
        rotateCCW: boolean; 
        rotateCW: boolean; 
        softDrop: boolean; 
    }; 
    lastPieceTime: number; 
    lastShift: number; 
    lShift: { 
        arr: number; 
        das: number; 
        dir: -1; 
        held: boolean; 
    }; 
    rShift: { 
        arr: number; 
        das: number; 
        dir: 1; 
        held: boolean; 
    }; 
    time: { 
        frameoffset: number; 
        locked: boolean; 
        prev: number; 
        start: number; 
        zero: boolean; 
    }; 
}
Return an engine with the same config. Does not preserve state.