Fixed broadcasts created in palette not being accessible via menu
Fixed duplication when dragging media into the backpack
Fixed incorrect caching in primVarSet and primVarChange
Updated procedure spec editor label font to match block label font
Fixed shadow disappearing when a script runs while being dragged
Fixed dragging "when Stage clicked" into a sprite
Added a default implementation for the username block when offline
Fixed not being able to drop block when color picker was under mouse
Fixed rounding costume center coordinates in vector mode

This also doubles the resolution of the bitmap costume center tool so that it lines up with the actual pixels of the image.
Abstracted ExternalInterface

Added abstract methods for ExternalInterface features.
Refactored code to work with callbacks instead of expecting externalCall
to return a value directly.
Note that this change will break both the online and offline editor
until corresponding changes on those repositories.
Made attribute block update when switching sprite

If the sprite you switch to doesn’t have an attribute or variable, it
will set the attribute to the default one for sprites or the stage.
Shortened the code a little
Changed "allowed" to "valid"

I think it makes a little more sense.
Use translated default values
Revert "Use translated default values"

This reverts commit 0c7de21dc3b1092d055b9bf294280a64431f856b.
Merge branch 'master' into abstract_external_interface
Treat offline extension reporters as requesters

Since StageWebViewBridge calls can't return values directly, extension
reporters must all be treated as requesters. This change adds a
"forcedRequester" flag to do so.
Note that there is at least one case where a block can be duplicated and
the forcedRequester flag will be dropped. This must be fixed if we
continue to use this method.
Merge branch 'bubble_hide_fix' into abstract_external_interface
Removed two unnecessary trace() calls
Use block spec for forcing requesters

In the offline editor, we need to force extension reporters to act as requesters. The previous method of doing so was unreliable because it didn't cover some paths through which blocks can be cloned and recreated; some of those paths didn't have enough information to know that the block they being handled is an extension reporter. This new method modifies the block spec on extension load, so it affects any block created through any path.