def METHOD_NAME(self, task):
    """
    Check on the arrow keys and update the avatar.
    """
    # get the button states:
    forward = inputState.isSet("forward")
    reverse = inputState.isSet("reverse")
    turnLeft = inputState.isSet("turnLeft")
    turnRight = inputState.isSet("turnRight")
    slideLeft = inputState.isSet("slideLeft")
    slideRight = inputState.isSet("slideRight")
    levitateUp = inputState.isSet("levitateUp")
    levitateDown = inputState.isSet("levitateDown")
    run = inputState.isSet("run") and self.runMultiplier.getValue() or 1.0
    # Check for Auto-Run
    if base.localAvatar.getAutoRun():
        forward = 1
        reverse = 0
    # Determine what the speeds are based on the buttons:
    self.speed=(
            (forward and self.avatarControlForwardSpeed or
            reverse and -self.avatarControlReverseSpeed))
    self.liftSpeed=(
            (levitateUp and self.avatarControlForwardSpeed or
            levitateDown and -self.avatarControlReverseSpeed))
    self.slideSpeed=(
            (slideLeft and -self.avatarControlForwardSpeed) or
            (slideRight and self.avatarControlForwardSpeed))
    self.rotationSpeed=(
            (turnLeft and self.avatarControlRotateSpeed) or
            (turnRight and -self.avatarControlRotateSpeed))
    if self.wantDebugIndicator:
        self.displayDebugInfo()
    # Check to see if we're moving at all:
    if self.speed or self.liftSpeed or self.slideSpeed or self.rotationSpeed:
        # How far did we move based on the amount of time elapsed?
        dt=ClockObject.getGlobalClock().getDt()
        distance = dt * self.speed * run
        lift = dt * self.liftSpeed * run
        slideDistance = dt * self.slideSpeed * run
        rotation = dt * self.rotationSpeed
        # Take a step in the direction of our previous heading.
        self.vel=Vec3(Vec3.forward() * distance +
                      Vec3.up() * lift +
                      Vec3.right() * slideDistance)
        if self.vel != Vec3.zero():
            # rotMat is the rotation matrix corresponding to
            # our previous heading.
            rotMat=Mat3.rotateMatNormaxis(self.avatarNodePath.getH(), Vec3.up())
            step=rotMat.xform(self.vel)
            self.avatarNodePath.setFluidPos(Point3(self.avatarNodePath.getPos()+step))
        self.avatarNodePath.setH(self.avatarNodePath.getH()+rotation)
        messenger.send("avatarMoving")
    else:
        self.vel.set(0.0, 0.0, 0.0)
    return Task.cont