This addresses {T63675}
For this patch, changes include {D7602} due to the dependency but the only file of interest is //anim_sys.c//
**Problem**
The animator can not view the NLA result outside of the strip bounds. This is expected behavior. However, if they have flagged the strip to sync with the action bounds then their expectation is for the strip to evaluate based on the action bounds, not the only-updated-on-tweak-exit strip bounds. Further, it's not possible to insert keys outside of the strip bounds. This results in a workflow where the animator must determine the strip bounds before making adjustments to the action. This isn't trivial to determine so it's a trial and error process.
**Solution**
The NLA system now evaluates the strip based on the action bounds if it's flagged for syncing. Now the animator can freely insert and modify keys outside of the strip bounds. They will never have to touch the strip bounds directly. Changing the evaluation bounds is a simple as moving keys around.
**Old**: Unable to Insert Keys outside synced strip bounds
{F8495377}
**New**: Able to insert keys outside synced strip bounds
{F8495378}
**Old**: Unable to view NLA result outside synced strip bounds
{F8495380}
**New**: Able to view NLA result outside synced strip bounds
{F8495381}
Note: In the existing implementation, there is an inconsistency. If you unpin the track, then the tweaked strip evaluates and allows keyframe insertion outside the strip bounds, even if extend mode is None. Effectively, unpinning does close to what this patch does. If pinned (default), then the strip does not evaluate nor allow keyframing outside the strip bounds. So why not use unpinned strips? Unpinned strips treat the keyframe times as global times. Pinning is stored in the animation data, not per strip, so its an all or nothing use. Thus all actions will always evaluate at the same time no matter where any strip is placed time-wise. This makes all actions one-time use only which goes against the core use of the NLA system.