Selaa lähdekoodia

Merge branch 'main' into typobranch

Signed-off-by: Tomasz Serwański <[email protected]>
Tomasz Serwański 2 vuotta sitten
vanhempi
commit
86a9202b45
54 muutettua tiedostoa jossa 6053 lisäystä ja 274 poistoa
  1. 33 0
      .github/ISSUE_TEMPLATE/roadmap-item.md
  2. 329 0
      rfcs/rfc-112-prefabs-override-management-in-dpe-entity-inspector.md
  3. BIN
      rfcs/rfc-112-prefabs-override-management-in-dpe-entity-inspector/216187683-0c9ae89a-064a-4e0e-9913-feb905985158.png
  4. BIN
      rfcs/rfc-112-prefabs-override-management-in-dpe-entity-inspector/216188460-f6cb26b6-3e5e-482f-83ca-a3aa2eb1ae4c.png
  5. BIN
      rfcs/rfc-112-prefabs-override-management-in-dpe-entity-inspector/216188579-33657f6c-ac2c-45a7-980f-52bbb3a59f78.png
  6. BIN
      rfcs/rfc-112-prefabs-override-management-in-dpe-entity-inspector/216188752-c544bb3b-f620-430a-a237-6178da1554be.png
  7. BIN
      rfcs/rfc-112-prefabs-override-management-in-dpe-entity-inspector/216189556-bfd1f5c6-c36e-488d-b92f-c16f71fbb084.png
  8. BIN
      rfcs/rfc-123-project-export-cli-images/release_layout_example.png
  9. 248 0
      rfcs/rfc-123-project-export-cli.md
  10. BIN
      rfcs/rfc-75-prefab-override-management-apis-images/DomPrefixTree-visualization.png
  11. BIN
      rfcs/rfc-75-prefab-override-management-apis-images/current-state-of-overrides.png
  12. BIN
      rfcs/rfc-75-prefab-override-management-apis-images/proposed-changes-to-overrides.png
  13. 335 0
      rfcs/rfc-75-prefab-override-management-apis.md
  14. 57 0
      testing-guidance/test-plans/editor/test-plan-action-manager.md
  15. 89 0
      testing-guidance/workflow-tests/Viewport/viewport-workflow-tests.md
  16. 3 0
      testing-guidance/workflow-tests/assetpipeline/asset-processor-attachments/testReferenceFile.xml
  17. 58 0
      testing-guidance/workflow-tests/assetpipeline/assetpipeline-assetbuilderframework-workflow-tests.md
  18. 96 0
      testing-guidance/workflow-tests/assetpipeline/assetpipeline-assetbundling-workflow-tests.md
  19. 469 0
      testing-guidance/workflow-tests/assetpipeline/assetpipeline-assetprocessor-workflow-tests.md
  20. 148 0
      testing-guidance/workflow-tests/assetpipeline/assetpipeline-scenepipeline-workflow-tests.md
  21. 0 158
      testing-guidance/workflow-tests/assetpipeline/assetpipeline-workflow-tests.md
  22. 0 20
      testing-guidance/workflow-tests/create-a-gem/create-a-gem-workflow-tests.md
  23. 69 28
      testing-guidance/workflow-tests/editor/editor-workflow-tests.md
  24. 7 1
      testing-guidance/workflow-tests/landscape-canvas/landscape-canvas-workflow-tests.md
  25. 85 0
      testing-guidance/workflow-tests/o3de-project-manager/engine-versioning/engine-versioning.md
  26. 138 0
      testing-guidance/workflow-tests/o3de-project-manager/gems/gem-workflow-tests.md
  27. 71 0
      testing-guidance/workflow-tests/o3de-project-manager/project-export/project-export-workflow-tests.md
  28. 47 1
      testing-guidance/workflow-tests/o3de-project-manager/remote-projects/remote-projects-workflow-tests.md
  29. 36 1
      testing-guidance/workflow-tests/o3de-project-manager/remote-templates/remote-templates-workflow-tests.md
  30. BIN
      testing-guidance/workflow-tests/scripting/images/Luacomponent_pick_lua_script_button.png
  31. BIN
      testing-guidance/workflow-tests/scripting/images/Luaeditor_breakpoints_button.png
  32. BIN
      testing-guidance/workflow-tests/scripting/images/Luaeditor_find_button.png
  33. BIN
      testing-guidance/workflow-tests/scripting/images/Luaeditor_lua_locals_button.png
  34. BIN
      testing-guidance/workflow-tests/scripting/images/Luaeditor_run_continue_button.png
  35. BIN
      testing-guidance/workflow-tests/scripting/images/Luaeditor_stack_button.png
  36. BIN
      testing-guidance/workflow-tests/scripting/images/Luaeditor_step_in_button.png
  37. BIN
      testing-guidance/workflow-tests/scripting/images/Luaeditor_step_out_button.png
  38. BIN
      testing-guidance/workflow-tests/scripting/images/Luaeditor_step_over_button.png
  39. BIN
      testing-guidance/workflow-tests/scripting/images/Luaeditor_target_button.png
  40. BIN
      testing-guidance/workflow-tests/scripting/images/Luaeditor_toggle_breakpoint_button.png
  41. BIN
      testing-guidance/workflow-tests/scripting/images/Python_Scripts_Tool.png
  42. BIN
      testing-guidance/workflow-tests/scripting/images/SCaudio_script.png
  43. BIN
      testing-guidance/workflow-tests/scripting/images/SCcreate_input_bindings_file.png
  44. BIN
      testing-guidance/workflow-tests/scripting/images/SCinput_handle_script.png
  45. BIN
      testing-guidance/workflow-tests/scripting/images/SCnode_delete_particles.png
  46. BIN
      testing-guidance/workflow-tests/scripting/images/SCnode_nudging.png
  47. BIN
      testing-guidance/workflow-tests/scripting/images/SCnodes_dimming_hover_over.png
  48. 355 0
      testing-guidance/workflow-tests/scripting/lua-scripting-tests.md
  49. 132 65
      testing-guidance/workflow-tests/scripting/script-canvas-tests.md
  50. 39 0
      testing-guidance/workflow-tests/scripting/script-python-tests.md
  51. 232 0
      testing-guidance/workflow-tests/scripting/scripts/OldGraphTest.scriptcanvas
  52. 2838 0
      testing-guidance/workflow-tests/scripting/scripts/ontick.scriptcanvas
  53. 89 0
      testing-guidance/workflow-tests/track-view/track-view-tests.md
  54. 50 0
      testing-guidance/workflow-tests/workflow-template.md

+ 33 - 0
.github/ISSUE_TEMPLATE/roadmap-item.md

@@ -0,0 +1,33 @@
+---
+name: 'Roadmap Item'
+about: Create roadmap item for this project
+title: Roadmap Item =description=
+labels: kind/roadmap, needs-triage
+assignees: ''
+
+---
+
+# O3DE Roadmap Item Template
+
+### When using this template, you do not have to fill out every question below. The questions are there for guidance.
+
+This roadmap item template should be used for any feature that shows in the O3DE public roadmap. The issue communicates the initiative and vision of the SIG.
+
+# ----- DELETE EVERYTHING FROM THE TOP TO THE SUMMARY LINE BELOW WHEN USING TEMPLATE ----- #
+
+### Summary:
+Single paragraph explanation of the roadmap item
+
+### What is the relevance of this feature?
+- What problems does it solves? 
+- Why is this important? 
+- What will it do once completed?
+- Are there any changes or impacts to other features? 
+
+### Tasks
+What tasks are necessary to complete the roadmap item?
+- [ ] _GitHub issue 1 link_
+- [ ] _GitHub issue 2 link and so on._
+
+### Related Links
+Link to additional informaton such as RFC related to the roadmap item.

+ 329 - 0
rfcs/rfc-112-prefabs-override-management-in-dpe-entity-inspector.md

@@ -0,0 +1,329 @@
+Summary
+=======
+
+Ref: https://github.com/o3de/sig-content/issues/112 
+
+Through the implementation of [https://github.com/o3de/sig-content/issues/75](https://github.com/o3de/sig-content/issues/75) , support now exists in the editor behind a feature flag to author and manage prefab overrides. A brief tutorial explaining the current state of overrides behind the flag can be found [here](https://development--o3deorg.netlify.app/docs/learning-guide/tutorials/entities-and-prefabs/override-a-prefab/). In the current state, users can only see and revert overrides on entities rather than individual components and properties. Since an entity can have many components under it, it is very likely that users would only want to revert specific overrides on an entity rather than all of them at once. This is what other major game engines offer too. There have been attempts made in the past to add prefab override support to the current RPE based Entity Inspector. However, since prefabs work with DOM data and the RPE uses data generated using object pointers, the integration proved to be very difficult and complicated. With the introduction of DPE, which uses DOM data too, the systems are better placed to handle the integration now. At the time of writing this document, the work to make the CVar editor and AssetEditor use DPE is in its final stages. There has been some work also done to use make the entity inspector use DPE as the framework. This design proposes building on top of that work to add override viewing and managing support to the DPE based entity inspector. So, there is a hard dependency on the Entity Inspector to use DPE instead of RPE as its property editors in order to launch the features mentioned in this document.
+
+At a high level, these are the changes that this design proposes:
+
+*   Addition of the component alias (the string that identifies the component in a prefab JSON DOM) to the AzToolsFramework::Components::EditorComponentBase class, which will be used during prefab patch generation to target the exact component alias in the prefab DOM that changed
+*   Registration of an OverrideIconHandler to the AzToolsFramework:PropertyEditorToolsSystem, which will be used to show icons and custom menu options next to overridden properties
+*   Storing opaque types as serialized values in AZ:Dom instead of pointers to the opaque values themselves. This will make patch generation easier and will also unblock other features like multi-editing in the Entity Inspector
+*   Sending the patches generated using the above ways to the prefab system APIs so that they can be stored in memory appropriately as either as direct prefab edits or as overrides on prefabs.
+
+What is the relevance of this feature?
+======================================
+
+Why is this important?
+----------------------
+
+This work is important because right now, users don't have visual indications in the Entity Inspector to see whether a property is overridden or not. They can only know that something is overridden by switching between the component editors of the default component and the overridden component. Even if they can find what's overridden in this manner, they cannot revert an individual property override on a component. Then can only revert all the overrides on an entity through the outliner, which is not the desired workflow always.
+
+What are the use cases?
+-----------------------
+
+1.  As an editor user, I need to know which particular components and properties are overridden on an entity
+2.  As an editor user, I need to be able to revert overrides on components and properties on an entity
+3.  As a prefab system owner, I need to be able to ingest patches generated by DPE rather than calculate them again
+
+What will it do once completed?
+-------------------------------
+
+Once completed, this work will
+
+*   Accomplish the above mentioned use cases and make the prefab system feature complete. This is pretty much the final work needed to bring the prefab system to feature parity to slices and other industry standard prefab systems.
+*   This will also make it easier to implement features like multi-editing in the entity inspector
+*   This will make it easier to implement features like pinning and using AZ:Dom as the in-memory data format for prefabs.
+
+Glossary:
+=========
+
+*   **DOM** : Document Object Model is a representation of an object data in a tree format where each node represents a certain part of the document.
+*   **DPE (Document Property Editor)** : A new property editor system in development for O3DE that uses a DOM data model. See rfc [here](https://github.com/o3de/sig-content/blob/main/rfcs/rfc-11-document-property-editor.md).
+*   **RPE (Reflected Property Editor)** : The current property editor system for O3DE which uses pointers to objects as the data model.
+
+Feature and Technical Design Description
+========================================
+
+There are multiple pieces that need to be finished in order to achieve prefab override management through the Entity Inspector. The major ones will be discussed here:
+
+Injecting serialized component alias string into AzToolsFramework::Components::EditorComponentBase objects
+----------------------------------------------------------------------------------------------------------
+
+Entities in a prefab instance object are stored in an unordered map of entity alias(string) to entity objects . Given an entity alias string in a DOM, it's easy to map to the actual entity object in a prefab. Just like entity aliases, the JSON serializer also creates component aliases (strings) for each component. The system-generated component aliases look like 'Component\_\[17501195180351523199\]' but can be changed at any time by the user. Unlike the entity aliases, given a component alias string in a DOM, there is no way to identify which component object it maps to. This mapping will be crucial in order to apply patches to an individual component within a prefab DOM. To bridge this gap, this design proposes injecting the serialized component alias string into the AzToolsFramework::Components::EditorComponentBase class, which is the base class for all editor components in O3DE. This injection will happen in the JsonEntitySerializer class that loads entities from DOM values. During the time of prefab patch generation we will be extracting the alias from the component and use it to construct a DOM path to be placed in the patch. Eg: .../PathToEntity/Components/**SerializedComponentAliasString**/AnyPropertyPath . The reason for injecting this alias into EditorComponentBase class instead of AZ::Component class is because prefab patch calculation only needs to happen at editor time and doesn't have any value at runtime and we can avoid allocating 1 string's worth of memory per component at runtime.
+
+  
+This does increase the editor memory usage but it is not a significant number for even a large level (a few MB). For a level with10k entities with 10 components each, the total number of editor components would be 100k. So the increase in editor memory usage would be 100k \* size of AZStd::string. Based on whether a stateless allocator is used or not, the size for a string varies from 24-32 Bytes. So, we would be looking at a 2-3 MB increase in editor memory usage. 
+
+![AddComponentAlias](rfc-112-prefabs-override-management-in-dpe-entity-inspector/216187683-0c9ae89a-064a-4e0e-9913-feb905985158.png)
+
+### API changes
+
+**EditorComponentBase class additions**
+
+```
+class AzToolsFramework::Components::EditorComponentBase // This is an existing class
+{
+public:
+    .... // Existing functions and members
+	void SetAlias(const AZStd::string& alias);
+	AZStd::string GetAlias();
+private:
+    AZStd::string m_alias;
+}
+```
+
+Identifying and reverting overridden properties/components
+----------------------------------------------------------
+
+The key to indicating which properties are overridden is to create a custom handler for the override visualization. The MVP use case for override visualization is that an override icon will be added next to properties that are overridden. In order to support that, the proposal is to create a new 'OverrideIcon' node and register it with the PropertyEditorSystemInterface so that it is recognized as a valid node type in the DPE DOM. The node should also be accompanied with a handler class that inherits from the AzToolsFramework::PropertyHandlerWidget class. This handler class will be responsible for showing the override icon when an 'OverrideIcon' node is encountered in the DPE Dom.
+
+Here is a rough image of what the override icon would look like next to overridden properties. In the image below, the EditorCommentComponent's 'configuration' field is modified and stored as an overrride, hence the blue icon (Ignore the weird spacing. It's a Qt setting that needs to be fixed in the prototype)
+
+![OverrideIcon](rfc-112-prefabs-override-management-in-dpe-entity-inspector/216188460-f6cb26b6-3e5e-482f-83ca-a3aa2eb1ae4c.png)
+
+Once we have the OverrideIconHandler, adding a revert option is going to be easy because the handler inherits from the PropertyHandlerWidget, which at the end of the day is a QWidget. So, the widget's behavior will be extended to show a custom context menu using Qt 'customContextMenuRequested' signal. When the 'revert' option is clicked from the custom context menu, the call needs to be sent to AzToolsFramework:Prefab:PrefabOverridePublicInterface so that the prefab system can revert the override on the specified property of the component within the selected entity.
+
+Here is a rough image of how that override menu option would look like (taken from the prototype):
+
+![RevertOverrideIcon](rfc-112-prefabs-override-management-in-dpe-entity-inspector/216188579-33657f6c-ac2c-45a7-980f-52bbb3a59f78.png)
+
+The exact behavior of where and when the override icon will appear for different types of property hierarchies is subject to a UX review. You can find some of these different hierarchies in the 'Open Questions' section and the proposed places of where the override icons should show up. The rule of thumb for where the icon should show up that will be followed for initial development is 'Show it next to the row it appears in the entity inspector. If that is not possible, show it next to the 'group' it belongs to if any. If neither of them is possible, show it next to the component'. These type of UX decisions will be however discussed with sig-ux to reach a consensus on what's the best user experience for the editor user.
+
+![ShowingOverriddenIcons](rfc-112-prefabs-override-management-in-dpe-entity-inspector/216188752-c544bb3b-f620-430a-a237-6178da1554be.png)
+
+### API Changes/Additions
+
+**PropertyEditorNodes class**
+```
+namespace AZ::DocumentPropertyEditor::Nodes // Existing namespace
+{
+	.
+	.
+	. // Existing node types
+    struct OverrideIcon : PropertyEditorDefinition
+    {
+        static constexpr AZStd::string_view Name = "OverrideIcon";
+    };
+}
+```
+  
+
+**OverrideIconHandler class**
+```
+// New class
+class AzToolsFramework::OverrideIconHandler
+    : public PropertyHandlerWidget<QToolButton>
+{
+public:
+	// Connect the customContextMenuRequested signal to the showContextMenu here.
+    OverrideIconHandler();
+
+	// This will be the function responsible for adding the actual icon in the inspector. Input is the OverrideIcon node in the DPE DOM
+    void SetValueFromDom(const AZ::Dom::Value& node);
+
+    static constexpr const AZStd::string_view GetHandlerName()
+    {
+        return AZ::DocumentPropertyEditor::Nodes::OverrideIcon::Name;
+    }
+
+    void showContextMenu(const QPoint&);
+}; 
+```
+
+**DPEComponentAdapter class additions**
+```
+AZ::DocumentPropertyEditor::ComponentAdapter //Existing class
+{
+public:
+    // Checks whether an override exists on the prefab at the provided serializedPath and if it does, adds an OverrideIcon node into the DPE DOM
+    // Adds the entity and component aliases to the serializedPath so that the path to the component/property from the prefab correctly constructed.
+    void AddIconIfPropertyOverride(AdapterBuilder* adapterBuilder, const AZStd::string_view& serializedPath);
+protected:
+    AZStd::string m_entityAlias;
+    AZStd::string m_componentAlias;
+    AZ::EntityId m_entityId;
+}
+```
+
+Generating prefab patches from DPE patches instead of serializing entities to generate patches
+--------------------------------------------------------------------------------------------------------
+
+There are multiple ways to generate a valid prefab patch, one of them being serializing the entities to JSON and comparing that JSON to the data stored in the in-memory prefab templates. This is what is currently being done in the editor to calculate prefab patches when a component property changes. However, DPE has its own patch generation mechanism that generates AZ:Dom:Patch based on the AZ:Dom data stored in DPE DOM. Since DPE generates patches at a more local level (individual component), the prefab system needn't serialize the entire entity just to know which components are modified. That information can be fetched from the DPE and a valid Prefab patch can be calculated from it.
+
+The responsibility of creating the prefab patches and calling appropriate prefab APIs to accept those patches can all be delegated to a prefab adapter that listens to events from the ComponentAdapter.
+
+Generate Prefab Patches
+
+![GeneratePrefabPatches](rfc-112-prefabs-override-management-in-dpe-entity-inspector/216189556-bfd1f5c6-c36e-488d-b92f-c16f71fbb084.png)
+
+### API Changes
+
+In order for the ComponentAdapter to be able to listen to property edits in the editor, the design proposes to add a handler to the ReflectionAdapter:PropertyChangeEvent as a class member and connect it to the event. When the event gets triggered, the ComponentAdapter class will generate a valid prefab patch. The generation of the prefab patch is a responsibility that can be delegated to a prefab adapter in the future.
+
+**DPEComponentAdapter additions for prefab patch generation**
+```
+AZ::DocumentPropertyEditor::ComponentAdapter //Existing class
+{
+
+protected:
+	// This is the function that'll generate a valid prefab patch when a property is edited.
+    void GeneratePropertyEditPatch(const ReflectionAdapter::PropertyChangeInfo& propertyChangeInfo);
+	
+	// This is the handler that'll listen to property change events and call the above function to generate a valid prefab patch.
+	// This handler will be connected to listen to the events during the class construction
+	ReflectionAdapter::PropertyChangeEvent::Handler m_propertyChangeHandler;
+}
+```
+
+In order for the prefab system to easily ingest the AZ:Dom:Value the DPE produces, [opaque types](https://github.com/o3de/o3de/blob/development/Code/Framework/AzCore/AzCore/DOM/DomValue.h#L42) supported by AZ:Dom:Value add a slight wrinkle. An opaque type in AZ:Dom:Value is basically a shared pointer to an AZStd::any. It is used to store values in AZ:Dom:Value that can't be mapped to primitive types likes ints and strings(eg. AZ::Vector3). The data stored in those opaque values is not in the desired format for the prefab system as it expects a patch in jsonPatch format. So, the opaque values need to be serialized to produce JSON so that it can be put in a jsonPatch. This serialization to JSON will be done in the ReflectionAdapter while generating AZ:Dom from the instance pointers if a 'SerializedPath' attribute (AZ::Reflection::DescriptorAttributes::SerializedPath) can be found in the reflected data. If a serialized path attribute is not found (eg. ui related properties that doesn't affect prefab data), we will continue to store them as opaque types. Since the modification of such properties won't affect the prefab data in any manner, those opaque types will not cause an issue with prefab patch generation. By doing this, not only will we be making the process of generating prefab patches easier but we will also unblock other features like multi-editing in the DPE, where the changes to opaque values won't always be detected (see [https://github.com/o3de/o3de/pull/12130#discussion\_r977081325](https://github.com/o3de/o3de/pull/12130#discussion_r977081325)).
+
+Are there any alternatives to this feature?
+===========================================
+
+Alternative 1 : Keep calculating patches on the entire entity for a single property edit
+----------------------------------------------------------------------------------------
+
+The challenging part of the design mentioned in this document would be to make the DPE send the correct patches/overrides to the prefab system. This alternative solution sidesteps the problem by making the prefab system calculate its own patches and ignoring the DPE patches, which is what is currently being done in the editor.
+
+Behind the feature flag, modifying a component property correctly generates a prefab override in development right now. The way this works is because the undo system marks entities as dirty and uses that to correctly generate the prefab patches by serializing the entire entity. It's not efficient but it does the job of generating prefab patches and propagating them. With this alternate solution, the dpe backed inspector will only be used for reading and deleting overrides whereas the create and update will be handled by prefabs system itself.
+
+### Pros: 
+
+*   Least amount of work to enable visualization and reverting of overrides in the editor
+
+### Cons:
+
+*   By sidestepping the DPE and not taking advantage of the patches it generates, we will be delaying/blocking future action items like using AZ:Dom as the in-memory dom format for prefabs too
+*   Multi-editing feature in the entity inspector would need to know when the opaque types change. But right now since the opaque types are not serialized and we only store a hash to the pointer of the opaque value, multi editing won't work fully when DPE encounters opaque types. If we go with this alternate solution, multi-editing won't work fully and need to implement a custom solution to serialize opaque values as needed.
+
+### Why the proposed solution is preferred to this alternative?
+
+The proposed solution is preferred because this alternative only achieves partial integration of prefabs with the DPE architecture. In order to take full advantage of the DPE's AZ:Dom and AZ:Dom:Patch formats and use them to replace rapidjson and jsonPatch in prefabs, it is better to spend time now to achieve a better integration now so that they are well placed for these future efforts.
+
+Alternative 2 : Keep storing opaque types in the DPE DOM and only serialize them during the construction of prefab patch
+------------------------------------------------------------------------------------------------------------------------
+
+One way to avoid serializing the entire entity just for a property change is to inspect the az:dom:patch that the DPE already produces and use that to generate a prefab json patch. This is what is proposed in the document above. But an alternative approach to this would be to serialize opaque values on an as-needed basis. During the inspection of DPE patches, if we encounter opaque values, we can then serialize them to generate valid json patches.
+
+### Pros:
+
+*   No changes to Adapter/Dom/DPE architecture on how opaque types are handled. So it'll be less amount of work than the proposed solution.
+
+### Cons:
+
+*   For every property edit of an opaque value, we need to serialize it, which is much more resource intensive than the proposed solution which only serializes it once
+*   Faces the same problem with multi-editing like the above alternate solution
+
+### Why the proposed solution is preferred to this alternative?
+
+The same reason as not choosing the above alternative. In addition to that, this solution would also require a lot of redundant and repeated serializations of the same property for every single property edit. While we may find a caching solution to prevent that from happening, the complexity and maintenance requirements of such a cached solution can be avoided if we go with a better integration which is also simpler to maintain and expand over time.
+
+What are the advantages of the feature?
+=======================================
+
+*   Editor users will be able to see and revert individual property overrides on a prefab
+*   Editor users will be able to see and revert component addition and removal overrides on a prefab
+*   Prefab system can avoid calculation of patches on the entire entity by ingesting patches generated by the DPE for a single property edit.
+
+What are the disadvantages of the feature?
+==========================================
+
+*   None
+
+What are the risks associated with this feature?
+================================================
+
+*   This feature has a hard dependency on the Entity Inspector to use DPE instead of RPE as its property editors in order to launch the features mentioned in this document.  
+    *   Mitigation strategy:  Work with the folks working on DPE and get an MVP list of features required to enable DPE in the entity inspector
+*   The sheer number of different component types to support is very large. This is a risk for using DPE for entity inspector as well. Not only do we need to make sure that all existing components work fine in the entity inspector using DPE but also need to ensure that all of those
+    *   Mitigation strategy: A lot of user testing needs to be done. We can reach out to individual teams within O3DE,  ask them what are the common type of components they mostly interact with and work with them to create custom test strategies. This approach worked in the past when we migrated all the slices in AutomatedTesting project to use prefabs instead.
+
+How will this be implemented or integrated into the O3DE environment?
+=====================================================================
+
+**MVP:**
+
+The work listed below is sufficient to be able to perform CRUD operations on overrides through the entity inspector. For the creation/updating part, we will be sidestepping the DPE and doing it ourselves. This is what is currently being done in development branch as well. This is the easier part of the design and relatively straightforward.
+
+1.  Show override icons in the entity inspector next to overridden properties
+    1.  Requires creating an OverrideIconHandler and registering it with PropertyEditorToolsSystem
+2.  Provide option to revert a particular override
+    1.  Requires adding context menu to the icon created above
+    2.  Requires the context menu click to be integrated with the Revert methods in PrefabOverridePublicInterface
+
+**Next phase:**
+
+Once the MVP has been delivered, we can optimize the systems further and tackle the complex integration parts.
+
+1.  Generate prefab patches from DPE patches instead of making the prefab system calculate the patches itself by serializing and comparing the entire entity.
+    1.  Serialize opaque types to JSON and store the values in AZ:Dom of DPE.
+    2.  Once AZ:Dom:Patches are generated, convert them into jsonPatch patches for the prefab system
+    3.  Use the above mechanism instead of current prefab patch calculation mechanism for property edits.
+    4.  Get rid of opaque and pointer types in AZ:Dom types altogether if possible.
+
+How will users learn this feature?
+==================================
+
+*   The tutorials section about prefabs in the O3DE website([https://www.o3de.org/docs/learning-guide/tutorials/entities-and-prefabs/entity-and-prefab-basics/](https://www.o3de.org/docs/learning-guide/tutorials/entities-and-prefabs/entity-and-prefab-basics/)) will be updated with screenshots and videos on how to work with overrides in the entity inspector.
+*   There will also be developer centric documentation([https://github.com/o3de/o3de/wiki/Prefab-Developer-Documentation](https://github.com/o3de/o3de/wiki/Prefab-Developer-Documentation)) that'll be added to the website explaining the architecture of override management in the Entity Inspector.
+*   Additional presentations and recordings will be made either in next year's O3DCon or directly to the O3DE YouTube channel
+
+Are there any open questions?
+=============================
+
+*   What's the feature flag that I need to enable to see the current state of overrides in development?
+    *   Under PATH\_TO\_PROJECT/user/Registry/editorpreferences.setreg , add this:
+
+**EnableOverridesUx**
+
+```
+{
+    "Amazon": {
+        "Preferences": {
+            "EnablePrefabSystem": true
+        }
+    },
+    "O3DE": {
+        "Preferences": {
+            "Prefabs": {
+                "EnableOverridesUx": true
+            }
+        }
+    }
+}
+```
+
+  
+
+*   Should the entity inspector be using DPE instead of RPE in order to launch the features in the above design?
+    *   Yes. Currently the work for DPE based entity inspector is being done behind a feature flag. So we can still continue developing this work using the same flag. But if we want to launch these to the user, the entity inspector must use DPE instead of RPE
+*   Has any of the work mentioned in this design been prototyped?
+    *   Yes. You can see [this draft PR](https://github.com/aws-lumberyard-dev/o3de/pull/476) to look at the work that has been prototyped. The prototype validates that the following is possible:
+        *   Creation of icons next to overridden properties
+        *   Creation of custom context menus when the icons/widgets are clicked
+        *   Storing the serialized values of opaque types in the DPE dom itself to easily generate patches indicating what changed
+*   There seem to be many adapters in the dpe code like the ReflectionAdapter, FilterAdapter, SortAdapter, etc. Will there be a PrefabAdapter that'll be created for this work?
+    *   It is very much possible. Adapters can be viewed as objects/systems to make the DPE architecture scale in a logical and maintainable way. As more and more prefab features will be developed, it would make sense to create an adapter that houses these features rather than spreading the code in multiple adapters. However, it is an implementation decision that'll made during the development of this work if and when to create such an adapter.
+        *   Should there be 1 prefab adapter per component adapter or just a singleton prefab adapter for the edtior?
+            *   Singleton would be preferable since it gives us flexibility to group multiple component adapter updates and do a single prefab update in the future. So the relationship between the DPEComponentAdapter and PrefabAdapter would be many-to-one
+        *   What kind of functions would the prefab adapter perform?
+            *   Given a DPE patch, the prefab adapter takes a call on whether it should be a prefab edit or an override. After deciding that, it'll call the relevant prefab apis to perform necessary actions (template update, propagation, etc)
+            *   The actual construction of the prefab patch from the dpe patch can be something that the prefab adapter take responsibility for.
+        *   Should the prefab adapter inherit from any other adapter?
+            *   Time will tell. Looking at the implementation of different adapters. Routing adapter sounds like a good base class to inherit from so that the prefab adapter can map specific routes (paths starting with certain prefixes like the entity aliases) to specific sections within the prefab DOM.
+*   Will components that use custom serializers still work after these changes?
+    *   They should. No matter how complex of a logic a custom serializer may have, in order for them to work in our current O3DE editor, they would still need to reflect the data correctly to the serialize and edit contexts. Prefabs only care about what data looks like on file, which corresponds to how the types/components are reflected to serialize context. In the above changes, when we serialize opaque types, we are essentially relying on information reflected to serialize context. So, no matter what the data reflected to edit context looks like, as long as we can serialize the type/component to json, we will still be able to generate patches correctly. For those types/components that can't be serialized, we don't care about them as they wouldn't have been written to the prefab file in the first place.
+*   Are we sure every editor component inherits from the EditorComponentBase class? 
+    *   That seems to have been the case so far during prototyping. Atom uses a templatized solution for their components to avoid repeating boilerplate code. Will check whether atom components derive from it too.
+    *   Will do a bug bash/ user testing against as many components as possible to verify whether this is true or not
+*   How will the override icon behavior work in different property hierarchies. A few are listed below:
+    *   When you have properties inside of containers or nested structures, do the icons show up all the way up the nesting, or just next to the lowest-level property change?
+        *   They will show up next to the lowest-level individual property change.  But if UX says that we want to show them when they are collapsed do, it should be doable. 
+    *   What happens when the visibility of a property is changed?  
+        *   If the property is shown, it will have an icon next to it. If new properties are added due to the visibility changing on a different property, the new properties will have icons next to them. If the property is hidden , there won't be an icon to show, In such cases, we can provide alternative visualizations (icon on the component)
+    *   If you change one element of a Vector3, how is it displayed?
+        *   An icon will be displayed next to the row the vector3 is under. The reason this happens is because we treat individual updates within a vector3 to generate the entire vector3 again. Due to this reason, individual property changes under vector3 wont' be identifiable. A patch to vector3 would look like \[10,0,10\]. So it would be hard to say which particular value changed and within that vector.
+*   Does the weight or font color change based on being overridden?
+    *   In a previous UX discussion, it was agreed that the blue color is better than the orange one for overrides since it indicates that the override is from the focused prefab. Not sure about the weight but there will be different icons for 'edit-override' vs 'add-override' (eg: a 'plus' icon when the component or property is added as an override)

BIN
rfcs/rfc-112-prefabs-override-management-in-dpe-entity-inspector/216187683-0c9ae89a-064a-4e0e-9913-feb905985158.png


BIN
rfcs/rfc-112-prefabs-override-management-in-dpe-entity-inspector/216188460-f6cb26b6-3e5e-482f-83ca-a3aa2eb1ae4c.png


BIN
rfcs/rfc-112-prefabs-override-management-in-dpe-entity-inspector/216188579-33657f6c-ac2c-45a7-980f-52bbb3a59f78.png


BIN
rfcs/rfc-112-prefabs-override-management-in-dpe-entity-inspector/216188752-c544bb3b-f620-430a-a237-6178da1554be.png


BIN
rfcs/rfc-112-prefabs-override-management-in-dpe-entity-inspector/216189556-bfd1f5c6-c36e-488d-b92f-c16f71fbb084.png


BIN
rfcs/rfc-123-project-export-cli-images/release_layout_example.png


+ 248 - 0
rfcs/rfc-123-project-export-cli.md

@@ -0,0 +1,248 @@
+### Summary:
+O3DE users don't have a straight-forward, accessible and customizable way to export their projects for release. This can make the process of preparing release packages of projects time consuming and error prone. This RFC proposes a new O3DE command line interface sub-command called `export-project` that simplifies the process by automating that work. The command is also setup to run custom Python scripts.
+
+### What is the relevance of this feature?
+The current process in O3DE for creating and then exporting a project to share with others takes a minimum of 12 steps.  O3DE users routinely struggle to find and follow these steps. A common piece of feedback from O3DE evaluators is the difficulty in sharing their work with others.
+
+These 12 steps are outlined in the Example Usage section of the RFC. That section also demonstrates how the `export-project` command reduces the steps down to 5.
+
+This RFC focuses on improving the following use cases for exporting:
+* Standalone Release builds (Windows, Linux)
+* Mobile cross-compilation (Android, iOS)
+* Network projects (contains Server, Client, and Unified launcher)
+
+It is also possible that a larger game development team requires their own build and deployment process. `export-project`  should be flexible such that they are able to incorporate their requirements into the process. Some examples of this are:
+
+* Signing packages
+* Generating certificates
+* Running validation steps
+* Storing Backups
+
+When complete, a new CLI will be available that can be used to setup and automate the build steps for the project, and automate most of the repetitive tasks of building the project. This CLI can act as stepping stone to integrate a project export UI accessible from Project Manager, making the process easier for newcomers to the engine.
+
+### Feature design description:
+#### Terminology
+* CLI - Command Line Interface
+* Host - The user's platform which is initiating the export process
+* Target - A desired destination platform, which can be different from the user's current platform
+* Standalone build - An assembled O3DE project that can be distributed to other machines
+* Export - The process of creating a standalone build of a project
+* Auxiliary files - Files that are not bundled, and are not binaries. Some examples include settings registry files and license text files.
+* Archive - A compressed package (either of the release layout directory, or a sub-folder within) meant for distribution to a Target platform (i.e. ZIP for windows, APK for Android, etc.)
+* Export script - a Python script run by `export-project`, that is intended to automate the process of building and packaging a project, based on a specific use case
+
+#### Command Overview
+An `export-project` O3DE CLI command is added which runs an export script.  Such a script can automate building, processing assets, bundling, and copying to an output folder. For export scripts provided with O3DE, these scripts will create the necessary release directory structure for each platform, but will not create archives nor deploy to external devices or services. That will be left to users to extend as needed.
+
+`export-project` is a sub-command via `o3de.bat` or `o3de.py` because the task of exporting projects is logically grouped with other project related commands found in the CLI, benefiting from discoverability. It also helps with parameter management: `o3de.py`  is setup to be aware of things like the engine folder.
+
+`export-project`'s main priority is a correct release directory structure. Archiving and deploying to devices and services will likely be separate CLI tools and are not covered here.
+
+#### Example Usage
+Suppose a game studio wants to make a game like [Newspaper Delivery Game](https://github.com/o3de/NewspaperDeliveryGame). That project has only 2 scenes, a main menu, and a game scene. It has one player character asset, a few models, such as cars, houses, trees, and roads, and 1 level file.
+
+##### Before RFC Changes
+As of January/February 2023 to get such a project ready for release with a standalone Game Launcher only, the user must manually do the following:
+
+1. Create the project, populate it with content and author the code to drive the project's logic.
+2. Build profile non-monolithic Editor & tools for the Host platform.
+3. Process assets for the project with the profile Asset Processor (GUI or Batch) for the Target platform.
+4. Generate or update seedlists if required (for more info see [this article on the asset bundler](https://www.o3de.org/docs/user-guide/packaging/asset-bundler/overview/)).
+5. Bundle assets using seedlists for the project with the profile Asset Bundler (GUI or Batch).
+6. Build release monolithic game project launcher for the Target platform.
+7. Create the release layout folder directory.
+8. Place binaries in the directory layout.
+9. Place asset bundles in the directory layout.
+10. Place auxiliary files in the directory layout.
+11. Use an external archiving tool to create a zip file.
+12. Put the zipped archive on [itch.io](http://itch.io/) to share it with people who want to play their game jam game.
+
+##### After RFC Changes
+With the `export-project`  command, the user would only need to do the following:
+1. Create the project, populate it with content and author the code to drive the project's logic
+2. Run an o3de project export command for a standalone monolithic release Windows build:
+```
+cd <O3DE_INSTALL_DIR>
+scripts\o3de.bat export-project --export-script C:\workspace\projects\NewspaperDeliveryGame\ExportScripts\export_standalone_monolithic.py
+```
+3. Get this release layout output
+![image](./rfc-123-project-export-cli-images/release_layout_example.png)
+4. Use an external archiving tool to create a zip file.
+5. Put the zipped archive on [itch.io](http://itch.io/) to share it with people who want to play their game jam game.
+
+Between both approaches, these steps remain the same:
+* Creating the project (step 1)
+* Preparing the zip file (steps 11 and 4 respectively)
+* Distributing on itch.io (steps 12 and 5 respectively)
+
+### Technical design description:
+#### Parameters
+The initial list of parameters for this iteration of the export-project  command are:
+
+- required
+    - export-script - path to a python file encoding the desired export process to run for the project.
+        - The user can expect o3de `export-project` helper APIs and variables to be available in their scripts without extra work.
+- optional
+    - project-path *
+    - third-party-packages-path *
+    - game-seed-files **
+    - Asset / game content / game rules / binary version number
+    - output-path
+    - cmake-tool-configure-args ***
+    - cmake-project-configure-args ***
+
+*These arguments are optional from the user's perspective but required for processing the export script, and `export-project`  will attempt to infer a value if one is not given
+**If not given, then a default is generated
+***For any optional argument using `nargs` , this means that a list of arguments for a given toolchain (like CMake) can be passed along to the appropriate stage in the pipeline.
+
+At a high level, the `export_project.py`  script imports the export script via `importlib` as a module to execute, and adjusts the system path to include the O3DE CLI and the script's local directory. It also processes CLI arguments, and stores them in an o3de_export object which is accessible to the user by appropriate APIs.
+
+#### Export Scripts
+The end result of exporting a project will consist of a directory layout of game binaries and packaged game content (asset bundles). A project ready for release is this folder directory placed into the exporting structure used for the intended release method (IPA for iOS, APK for Android, etc). Further processing can be handled by users.
+
+In order to use the project export tools, the user supplies an export script file. Helper APIs and CLI parameters are accessible to the user, with no setup code required.
+
+To make this easier, this RFC proposes providing standard scripts, which both provide default engine export functionality, and reference code for users to adapt to their own needs. Export scripts in projects can be defined in the `<project-root>/ExportScripts` directory. 
+
+Similar to the `My Documents` folder on Windows, the `ExportScripts` folder is not strictly required for users, and they can place the scripts wherever they wish, but it comes with some conveniences. For instance, The Asset Processor should be provided an exclusion rule to not look at files in `<project-root>/ExportScripts`. For O3DE project templates, example scripts are placed in the `ExportScripts` directory, and it should be treated as common convention.
+
+The following examples focus on use case 1 (Standalone release builds for windows specifically):
+
+- This is an example of a very simplified export script (useful for gamejam teams):
+```python
+"""
+Copyright (c) Contributors to the Open 3D Engine Project.
+For complete copyright and license terms please see the LICENSE at the root of this distribution.
+SPDX-License-Identifier: Apache-2.0 OR MIT
+"""
+import sys
+import os
+ 
+# User scripts can import the export API regardless of folder location
+import o3de.export_project as exp
+ 
+# User scripts can also access o3de default variables that are available before the script is run via o3de_export
+ 
+exp.export_standalone_monolithic(platform= "Windows", build_mode = o3de_export.build_mode,
+                                 project_path= o3de_export.project_path,
+                                 engine_path = o3de_export.engine_path)
+```
+- This is an example of a slightly complex export script for standalone monolithic builds (useful for teams that need to tweak the build process):
+```python
+"""
+Copyright (c) Contributors to the Open 3D Engine Project.
+For complete copyright and license terms please see the LICENSE at the root of this distribution.
+SPDX-License-Identifier: Apache-2.0 OR MIT
+"""
+import sys
+import os
+ 
+# User scripts can import the export API regardless of folder location
+import o3de.export_project as exp
+ 
+# User scripts can also access o3de default variables that are available before the script is run, via o3de_export
+# o3de_export stores all CLI arguments passed in to the export_project command
+ 
+# This is currently needed to access necessary O3DE toolchain for rest of the export process
+exp.build_engine_tools(cwd = o3de_export.engine_path, compiler = o3de_export.args.compiler)
+ 
+exp.process_assets(platform = "pc", project_path = o3de_export.project_path)
+ 
+exp.bundle_assets(seedlist = o3de_export.seedlist)
+ 
+exp.prepare_project(cmake_build_mode = o3de_export.build_mode ,cmake_gen = o3de_export.args.cmake_gen, is_monolithic = True, third_party_path = o3de_export.third_party_path)
+ 
+exp.build_project(target = "install", config = o3de_export.build_mode, build = "build\\mono")
+ 
+exp.copy_release_dir(dest= o3de_export.output_path)
+```
+
+#### Helper API
+Currently all API functions should reside in `export_project.py`.
+
+This RFC proposes a hierarchical approach to API design, where larger composite functions are composed of smaller granular functions, but both kinds are available to users.
+
+The simplest function is `process_command` , which is a wrapper for `subprocess.Popen`, and takes as input a string list of arguments. It should provide options for logging verbosity.
+
+From there we can provide helper functions building on `process_command` , such as:
+* `cmake_build`
+* `process_assets`
+* `bundle_assets`
+* `copy_release_directory`
+* `cmake_prepare`
+* etc...
+
+These in turn can be composed into larger composite functions, which can be used at a macro level for convenience, such as:
+
+* `export_standalone_monolithic`
+
+### What are the advantages of the feature?
+- `export_project` will be easy to extend with future use cases.
+    -  Changes to export scripts can be made without affecting the CLI tool and unrelated export scripts.
+- Allows others to integrate with their own automation, with the power behind the existing Python ecosystem in O3DE.
+- Easy to extend functionality of the export script for user needs.
+
+### What are the disadvantages of the feature?
+- Adding or modifying scripts will require some knowledge of Python.
+    - This process can be eased with excellent documentation, and sample scripts
+- As exporting is based on existing systems, changes in those systems can affect the export scripts
+    - For example, if asset bundling/processing changes, or CMake building algorithm changes expected structure, etc.
+    - Though these are not caused by `export-project`, isolating export scripts can help reduce blast radius.
+    - When considering automated tests, this could be an advantage from a QA perspective. The tests for this tool can be leveraged as a way to check if there are significant structural changes that affect building a game.
+
+### How will this be implemented or integrated into the O3DE environment?
+We anticipate the following directory and file changes for O3DE Engine:
+
+* `scripts/o3de`
+    * `o3de`
+        * `+ export_project.py`
+    *  `Platform/Windows/ExportScripts`
+        * `+ export_simple.py`
+        * `+ export_standalone_monolithic.py`
+        * ...
+    *  `Platform/Linux/ExportScripts`
+        * `+ export_simple.py`
+        * `+ export_standalone_monolithic.py`
+        * ...
+    * `Platform/...`
+
+Providing these options for the scripts is convenient for new users with simpler projects to utilize project export features without needing to write their own.
+
+When a user creates a new project, we should modify the project template such that it includes the following as well:
+
+* `<project_root>`
+    * `ExportScripts`
+        * `+ export_simple_example.py`
+        * `+ export_standard_monolithic_example.py`
+
+These example scripts will be annotated with helpful comments to guide the user on how to extend the script for their own usage.
+
+### Are there any alternatives to this feature?
+- There is an alternate approach to handling export scripts via JSON
+    - Requiring a JSON based workflow would mimic the experience of the Jenkins build pipeline, but this has 2 drawbacks:
+        1. A separate schema must be proposed, and processing the logic is far more complex than allowing the user to pass in a custom script.
+        2. Such a system, if not warranted is too restrictive and brittle for O3DE users, and would frustrate their process.
+            a. And in the current proposal, a script can be provided as a template to cover common use cases. 
+    - It's also a 2-way door. A transition is possible, if it proves necessary in the future. This is the simpler alternative.
+        - The JSON method may be attractive later on for Project Manager UX, but fulfilling the proposal in this RFC will make that task easier as well.
+- O3DE users can continue to build their project manually using the existing tools, without taking advantage of the proposed features in this RFC.
+    - For some teams, this may be the preferred route if they already have a setup, in which case the introduction of the `export-project` command should not impede them
+    - But in general, the manual process is too cumbersome for the reasons outlined earlier in this RFC.
+
+### How will users learn this feature?
+- Anyone who uses the `o3de.(bat|sh|py)` CLI tools will be able to discover the `export-project` command via the `--help` functionality in the CLI.
+- Documentation must be updated to fully describe the CLI feature and example scripts that can be used.
+    - This article also needs to be updated: https://www.o3de.org/docs/user-guide/packaging/windows-release-builds/
+
+### Are there any open questions?
+- Should the tool show progress?
+    - It should have some indication of progress. Feedback should be active, because the build process can take a while (even an hour if building a large project from scratch).
+    - It can emit logs coming from the tools/steps currently running (filtered by priority), and have a heartbeat indicating the script is still running.
+    - Also indicate the totals steps in the process, and a fraction of how much is completed (i.e. 2/10 steps completed)
+        - Any timeout should be user specified. Default is no time-outs.
+    - There should be helper functions that let users emit progress points to project export tool
+- What should be considered out of scope?
+    - For advanced users, they can use this new framework to learn the basics of creating bundled release builds of their games, but they will likely need to build their own toolchain using the same underlying steps the proposed framework follows.
+    - This RFC will only focus on export scripts that produce the release layout directory structure for a project. It will not consider any additional deployment steps beyond that, such as zip files, publishing to app store, or mobile deployment. This is to avoid feature creep, as the project-export's aim is to create a reliable release layout structure. Additional CLI tooling can always be made to address deployment concerns, or users can extend the scripts themselves.
+    - It is not the responsibility of the project-export framework to make sure the user has CMake and a compiler (or other such tools) installed. That is part of onboarding process to O3DE
+    - Although discussions of UI and/or Editor buttons for facilitating Project Exports are out of scope, it would be a natural extension to leverage the CLI tool to power that UI. That will be for a separate RFC however.

BIN
rfcs/rfc-75-prefab-override-management-apis-images/DomPrefixTree-visualization.png


BIN
rfcs/rfc-75-prefab-override-management-apis-images/current-state-of-overrides.png


BIN
rfcs/rfc-75-prefab-override-management-apis-images/proposed-changes-to-overrides.png


+ 335 - 0
rfcs/rfc-75-prefab-override-management-apis.md

@@ -0,0 +1,335 @@
+# Summary:
+Overrides are one of the most important components of a prefab system. By overriding prefabs, we can make prefabs standout from the rest of their siblings (Imagine a blue car in the middle of 100 red cars). The current prefab system APIs support override creation, including loading them from file and storing them to file. However, authoring of overrides and modifying overrides is not supported in the editor due to dependencies on other ongoing efforts like the [DocumentPropertyEditor](https://github.com/o3de/sig-content/issues/11). This TDD proposes a set of APIs that will make managing prefab overrides easier, which can be called by editor tools like outliner and inspector.
+
+The main idea of this design is to maintain a [DomPrefixTree](https://github.com/o3de/o3de/blob/development/Code/Framework/AzCore/AzCore/DOM/DomPrefixTree.h) that would track the overrides on prefab links. Other systems can query the tree to know which prefabs/entities/components/properties are overridden on a prefab template. There will be one DomPrefixTree per prefab link. The tree can also be used to add/remove overrides and modify existing overrides. In order for this design to work, the underlying in-memory storage structure of patches would need to change. Currently the patches are stored in a rapidjson::Document which doesn't give enough flexibility to work with individual patches in a fail-proof way. This design proposes that the structure to store patches internally be changed to AZ:Dom:PrefixTree<rapidjson:Document>, which will become the source of truth about the state of patches from a template to one of its descendant nested templates.
+
+This work will get us one step closer to delivering an override authoring experience in the editor.
+
+Note : This design uses the terms 'patches' and 'overrides' synonymously. They both mean the same thing in the context of this design.
+
+# What is the relevance of this feature?
+## Why is this important?
+This is important because overrides visualization, authoring and modification gives scene/level designs so much more control in building large and complex scenes. It also opens doors for easily importing file formats like .fbx and overriding the default procedural prefabs they generate.
+
+## What are the use cases?
+- As an editor user, I want to know which prefabs, entities, components and properties are overridden when I load a level so that I can modify those overrides.
+- As an editor user, I want to add/remove an override so that I can build large and complex levels.
+- As an editor user, I want to modify an overridden property so that I can adjust properties according to my needs
+
+## What will it do once completed?
+Once completed, the prefab system can be queried using the interfaces provided below to query, add, remove and modify overrides on prefabs. While this design facilitates these queries, it doesn't cover the below topics in detail:
+
+- How overrides will look visually in the editor. UX requirements will be gathered later after discussion with folks experienced with UX and editor tools.
+- Integration of prefab overrides with the DocumentPropertyEditor. The integration details will be covered under a different RFC which will be built on top of this work.
+
+# Feature and Technical design description:
+## Glossary
+
+- **DOM** : Document Object Model is a representation of an object data in a tree format where each node represents a certain part of the document.
+- **Prefab Template** : The in-memory object that maintains the DOM of a prefab along with additional metadata. There will be one template created for a '.prefab' file loaded into the editor
+- **DomPrefixTree** : A prefix tree implementation for AZ:Dom:Path that stores metadata of any provided type. It is defined [here](https://github.com/o3de/o3de/blob/development/Code/Framework/AzCore/AzCore/DOM/DomPrefixTree.h).
+- **DocumentPropertyEditor or DPE** : A new property editor that is built using a DOM model instead of actual c++ objects. It's a replacement for the current Reflected Property Editor (RPE) and is currently in development.
+- **Focus Mode** : A UI feature where the focus will always be on a single prefab in the entity outliner. There are plans to extend this idea to the viewport too. The idea is that the default edits in the editor go to the focused prefab's template DOM.
+- **Link** : An in-memory object that represents a connection between two templates. It contains the Patches to be applied on the source template by the target template, along with additional metadata.
+- **Patches/Overrides** : The list of changes that get applied on top of the nested prefab template to distinguish it from other nested prefabs. These changes live on the link object when prefabs are loaded and applied on the DOM of the link's target template.
+
+## Current state of overrides
+
+When a prefab is loaded, it creates [Link objects ](https://github.com/o3de/o3de/blob/development/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Link/Link.cpp)that contains metadata about the connection between two templates. Part of this metadata is the link DOM that contains the path to the source prefab and a list of patches to be applied on the nested template. This DOM is currently stored in rapidjson::Document format. This DOM that contains the patches to be applied can be modified during editor operations. The same DOM gets saved to the prefab file if a user choses to save the prefab. The below diagram visualizes 2 link objects between a car template and a wheel template.
+![Current state of overrides](rfc-75-prefab-override-management-apis-images/current-state-of-overrides.png)
+
+The current storage structure and implementation of patches have a few drawbacks, namely:
+
+1. Overrides are stored in an array inside a rapidjson:Document. This makes iterating and managing an individual patch difficult and time consuming. There isn't any quick look up structure in place to know whether an entity in a prefab hierarchy is overridden by its ancestor. This is important in order for editor tools to quickly know what is overridden on a prefab or an entity.
+2. Prefabs give direct access to link DOM, which makes it hard to know when overrides get modified/added/removed. 
+
+## Proposed changes to overrides
+![Proposed changes to overrides](proposed-changes-to-overrides.png)
+
+### Changing the in-memory storage format of overrides
+Overrides are currently stored as an array in a rapidjson::Document format, which makes accessing and modifying individual patches harder. Currently, the reference to these patches is made accessible through the Link class but that would mean that overrides can get modified without notifying the prefab system, which makes tracking them hard and maintaining a DomPrefixTree for them even harder. One of the first things that needs to be done is to change existing APIs to only allow const references to the patches. While that solves the problem of managing the lifecycle of overrides, it still makes querying for individual patches hard. So, we need to change the storage structure of patches to be something that will give us access to individual patches in an easier way. To achieve this, patches will be stored in a AZ:Dom:PrefixTree<PatchData>. A DomPrefixTree is a templated class that can store any kind of metadata about the patches to make querying them easier.
+
+### Maintaining the order of patches when querying the tree
+Once patches are created in an order and stored on a link, the same order should be maintained for patch application to prevent failures. For example, imagine a scenario where there are 5 patches each inserting an element into an array. If the order of the patches is jumbled and the first patch in the new order has a path like (/someArray/4), it will fail because the array has 0 elements. So, we need to also maintain an index along with a patch in the tree. The index will be used to compare patches and sort them in the right order before copying them into a rapidjson:Document. Each link object will have an atomic counter for the patch indices that will be incremented when a new patch gets inserted into the tree. A new struct called 'PatchData' will be created that will be a wrapper around the patch and the index.
+```
+struct PatchData
+{
+    rapidjson::Document m_patch;
+    uint32_t m_index;
+}
+```
+So, instead of just the patch, we'll be storing this PatchData object in the prefix tree which makes the type AZ:Dom:PrefixTree<PatchData>. The idea behind 'PatchData' is that its an encompassing struct that can grow in the future to add more metadata about each individual patch. For example,  we may in the future, want to differentiate patches loaded from file vs patches generated by the system because patches loaded from file are user data and we should be careful not to remove them without explicit user permission. To achieve something like that, we can add a new boolean to the struct called 'isLoadedFromFile' to indicate that this patch has been loaded from file. 
+
+### One DomPrefixTree per link
+There will be one override prefix tree created per prefab link that will maintain a view of all overrides that the link has on it. The vision of the focus mode feature is that a user will only be modifying the data of a specific template in the editor, whether that's the template of an individual prefab within the level or whether it's the template of the level itself. So, maintaining one big prefix tree for everything in the level will only be a waste of tree nodes and also could have performance bottlenecks as levels grow in size.
+
+Since prefabs can have nested prefabs under them, a path to an entity in a prefab can look like "/Instances/instanceA/Instances/instanceB/....../Entities/entity1/Components/component1/property1" . Each of these path tokens will be a node in the tree. It is possible for overrides to exist on component properties or components or entities or prefab instances. The path to an object can easily be queried by iterating the dom values and the same path can be used against the DomPrefixTree to query whether an override exists for the given path.
+
+**Example**: Going by the same example above where a car prefab has overrides on 2 wheel prefabs, the same overrides would look like this in the DomPrefixTrees when visualized:
+![DomPrefixTree visualization](DomPrefixTree-visualization.png)
+
+### Reconstructing rapidjson:Document from DomPrefixTree
+Since templates still use rapidjson:Document as their DOM format, if we want to fetch all patches on the link and apply them on a template during editor operations, we'd need to fetch the patches from the DomPrefixTree and copy them into a rapidjson:Document. This shouldn't be a problem though because the benchmarks for DomPrefixTree only takes a few thousand nanoseconds to visit 1000 entries, which is close to the maximum number of patches we anticipate on an individual link. If this still turns out to be a bottleneck to the system, we can maintain a cached rapidjson:Document that is constructed once from the tree and used for subsequent calls to get a rapidjson:Document. If the tree gets modified due to a user action, the cached document will become stale and needs to be reconstructed again from the tree.
+
+### API
+The below class defines an interface that can be queried by internal systems. The class that implements this interface should also update dependent templates when patches get added/removed/modified so that the patches are correctly propagated to the dependent templates.
+```
+// These are the only 3 types currently supported since we use JsonSerialization::CreatePatch to generate patches
+enum class OverrideType
+{
+    Add, 
+    Remove,
+    Replace
+};
+
+//! This interface must be used only by internal systems like prefabs to access the DomPrefixTree corresponding to the templateId provided and query/update overrides in the tree. 
+//! For other systems and user calls in general, the PrefabOverridePublicInterface must be used.
+class PrefabOverrideInterface{
+
+    //! Checks whether a valid override is present at the provided path in the tree. By default it checks the current node and all of its children nodes too.
+    virtual bool IsOverridePresent(LinkId linkId, AZ:Dom:Path path, AZ::Dom::PrefixTreeTraversalFlags flags = AZ::Dom::PrefixTreeTraversalFlags::ExcludeParentPaths);
+
+    //!  Removes an override if an override is present at the path.
+    virtual bool RemoveOverride(LinkId linkId, AZ:Dom:Path path);
+
+     //!  Adds an override at the given path in the tree. If an override already exists, it replaces it.
+     virtual bool AddOverride(LinkId linkId, AZ:Dom:Path path, rapidjson:Document override);
+	
+    //! Updates an override if one exists at the path provided.
+    virtual bool UpdateOverride(LinkId linkId, AZ:Dom:Path path, rapidjson:Document override);
+	
+    //! Gets the type of override if one exists at the 
+    virtual OverrideType GetOverrideType(LinkId linkId, AZ:Dom:Path path);
+}
+```
+
+While the above interface can be used by the prefab system to query for overrides, we also need a public facing interface that can be queried by editor tools like outliner and inspector, which typically only deal with entity ids and doesn't need to know what a 'LinkId' is. Here is the public interface for that:
+
+```
+class PrefabOverridePublicInterface
+{
+    //! Checks whether an override exists on the entity or any of its components from the focused prefab. 
+    virtual bool isEntityOverriddenByFocusedPrefab(AZ::EntityId entityId) = 0;
+
+    //! Checks whether an entity is added as an override -- useful for outliner to visualize add-entity overrides in a different way.
+    virtual bool isEntityAddedAsAnOverrideByFocusedPrefab(AZ::EntityId entityId) = 0;
+
+    //! Checks whether an entity is added as an override -- useful for outliner to visualize add-entity overrides in a different way.
+    virtual bool IsPrefabAddedAsAnOverrideByFocusedPrefab(AZ::EntityId prefabContainerEntityId) = 0;
+
+    //! The path gets generated by a prefab adapter to the DPEs in entity inspector.
+    virtual bool UpdateComponentOverrideFromFocusedPrefab(AZ::Dom::Path path, rapidjson::Document value) = 0;
+
+    //! Other methods like AddComponentAsOverride, AddPropertyUpdateAsOverride, RemovePropertyUpdateOnOverride follow similar pattern as the above function.
+}
+```
+
+The below class is more entity-friendly handler that implements the above interface, which the outliner and inspector will call. It's written in pseudo code to give an idea of how the API will look like eventually. The default tree to query for overrides would be the tree corresponding to the link between the focused prefab template and the template of the topmost instance in the hierarchy. For example, in a scenario where there are 3 prefabs: city, block and house and if the hierarchy is city→block→house and the focus is on the city prefab, the link to query would be the one between city and block templates. 
+
+```
+class EntityOverrideHandler
+    : public PrefabOverridePublicInterface
+{
+    //! Checks whether an override exists on the entity or any of its components from the focused prefab. 
+    bool isEntityOverriddenByFocusedPrefab(AZ::EntityId entityId)
+    {
+        TemplateId focusedTemplateId = AZ::Interface<PrefabFocusInterface>::Get()->GetFocusedPrefabTemplateId(s_editorEntityContextId);
+        AZ::Dom::Path pathToEntityFromFocusedTemplate = // Use PrefabDomUtils to fetch path to entity here
+        // Fetch linkId from the topmost instance of the focused prefab. It's a member variable inside Prefab::Instance class.
+        AZ::Interface<PrefabOverrideInterface>::Get()->IsOverridePresent(linkId, pathToEntityFromFocusedTemplate, AZ::Dom::PrefixTreeTraversalFlags::ExcludeParentPaths);
+    }
+
+    //! Checks whether an entity is added as an override -- useful for outliner to visualize add-entity overrides in a different way.
+    bool isEntityAddedAsAnOverrideByFocusedPrefab(AZ::EntityId entityId)
+    {
+         TemplateId focusedTemplateId = AZ::Interface<PrefabFocusInterface>::Get()->GetFocusedPrefabTemplateId(s_editorEntityContextId);
+        // Fetch linkId from the topmost instance of the focused prefab. It's a member variable inside Prefab::Instance class.
+        AZ::Dom::Path  pathToEntityFromFocusedTemplate = // Use PrefabDomUtils to fetch path to entity here --- could be a container entity too.
+         if (isEntityOverridden(entityId)
+        {
+            OverrideType overrideType = AZ::Interface<PrefabOverrideInterface>::Get()->GetOverrideType(linkId, pathToEntityFromFocusedTemplate);
+            return (overrideType == OverrideType::Add);
+        }
+        return false;
+    }
+
+    //! Checks whether an entity is added as an override -- useful for outliner to visualize add-entity overrides in a different way.
+    bool IsPrefabAddedAsAnOverrideByFocusedPrefab(AZ::EntityId prefabContainerEntityId)
+    {
+        if (prefabContainerEntityId.IsContainerEntityId)
+        {
+             return isEntityAddedAsAnOverride(prefabContainerEntityId);
+        }
+        return false;
+    }
+
+    //! The path gets generated by a prefab adapter to the DPEs in entity inspector.
+    bool UpdateComponentOverrideFromFocusedPrefab(AZ::Dom::Path path, rapidjson::Document value)
+    {
+         TemplateId focusedTemplateId = AZ::Interface<PrefabFocusInterface>::Get()->GetFocusedPrefabTemplateId(s_editorEntityContextId);
+        // Fetch linkId from the topmost instance of the focused prefab. It's a member variable inside Prefab::Instance class.
+        AZ::Interface<PrefabOverrideInterface>::Get()->UpdateOverride(linkId, pathToEntityFromFocusedTemplate, value);
+    }
+}
+```
+
+The below interface can be implemented to fetch all the overrides applied by a prefab on its nested prefabs. This will be helpful when you need a wholistic view of everything a particular prefab overrides.
+```
+//! This interface is used to list/remove all overrides a prefab has on its nested prefabs.
+class ListPrefabOverridesInterface
+{
+    using PrefabOverridesList =  AZStd::unorderedmap<AZStd::string,  AZStd::vector<const rapidjson::Document&>>;
+
+    // Return the overrides applied on each nested prefab. The string of the nested prefab key is used in the map so that overrides are bucketed per nested prefab.
+    virtual PrefabOverridesList ListPrefabOverrides(AZ::EntityId prefabContainerEntityId);
+
+    // Removes all overrides applied by a prefab on its nested prefabs. Transform component overrides are an exception because if they are removed, everything prefab instance will move to a single location in the world.
+    virtual bool RemoveAllOverrides(AZ::EntityId prefabContainerEntityId);
+}
+```
+
+# What are the advantages of the feature?
+Already covered in the above relevance section. It addresses the above mentioned user stories this way:
+
+> As an editor user, I want to know which prefabs, entities, components and properties are overridden when I load a level so that I can modify those overrides.
+
+Build a path to the required prefabs/entities/components/properties and query the prefix tree corresponding to the appropriate link to see whether overrides exist at that path or not
+
+> As an editor user, I want to add/remove an override so that I can build large and complex levels.
+
+With the help of override mode (currently being prototyped), construct a path to the entity/property that needs overriding and add it to the appropriate prefix tree.
+
+> As an editor user, I want to modify an overridden property so that I can adjust properties according to my needs.
+
+Query the override from the corresponding prefix tree just like previous cases and update the value of stored in the PatchData object in the tree.
+
+# What are the disadvantages of the feature?
+There shouldn't be any disadvantages to this feature. However there are a few risks:
+
+- Use of new APIs: This design relies on using AZ::Dom:Path and AZ::Dom::DomPrefixTree APIs, which are relatively new to the engine. Prefabs will be one of the first systems to use these APIs. If we need some features to be added or modified for these APIs, we should find the best ways to do that while adhering to the tenets of the APIs. 
+
+- Dependency on DPE : While it's not an immediate dependency, prefabs do require the entity inspector to use DPE instead of RPE for the end goal of property override visualization.
+
+# How will this be implemented or integrated into the O3DE environment?
+## Execution Plan (And Dependencies)
+
+- Refactor m_linkDom in Link.h to be a Az:Dom:PrefixTree storing PatchData
+  - Verify that loading of levels and prefabs with nested prefabs still work as expected and load overrides correctly.
+  - Verify that storing of levels and prefabs with nested prefabs correctly store the overrides
+  - Verify that editor operations that affect the patches on the link still work and aren't slowed down due to needing to convert to a different format
+- Create DomPrefixTree api for Prefab overrides
+  - Add Override
+  - Remove Override
+  - Replace/Update Override
+- Integrate DomPrefixTree api with Prefab templates
+  - When template is loaded, construct the tree from the list of patches
+  - When patches on a link get modified, update the tree accordingly
+
+## Testing plan
+
+- Unit tests to validate that the DomPrefixTree gets correctly updated on patch operations
+  - Creating an override
+  - Modifying an override
+  - Removing an override
+- Automated tests to verify that levels and prefabs correctly generate the DomPrefixTree when loaded from disk
+  - Loading a level with overrides
+  - Instantiating a prefab with overrides
+- Benchmarks to verify that modifying large DomPrefixTree is performant.
+  - Modifying a DomPrefixTree scales horizontally
+    - example: A prefab has 10000 child prefabs and there's an override on each one of them
+  - Modifying a DomPrefixTree scales veritcally
+    - example: A prefab has 10000 levels of nesting (prefab within prefab within prefab and so on ......) and there's an override on the leaf prefab created by the root prefab
+  - Combination of the above 2 cases, which is the more common scenario
+  
+There are 7 types of overrides you can have on a prefab. Tests should written such a way that these 7 types of overrides are captured in them:
+
+1. Modify a component property
+2. Add a component
+3. Remove a component
+4. Add an entity
+5. Remove an entity
+6. Add a nested prefab
+7. Remove a nested prefab
+
+**Note**: Prefabs can have any depth of nesting going on. The tests should make sure that overrides from any ancestor are accounted for, not just overrides from immediate parent.
+
+## Post-Launch
+- Prototype override visualization and have UX discussions
+  - Query DomPrefixTree for entities in the outliner. If a valid node exists in the tree, mark the entity outliner row overridden in some way (example: change background color)
+  - Go one step further to know which type of override it is, (example: add-entity and add-prefab overrides can be marked visually different than edit-entity override)
+  - Inspector visualization can also be prototyped for add-component overrides
+  - Discuss with UX on what other ways the tree can be used to provide meaningful UX visualization.
+- Integrate with entity inspector - RFC needed
+  - Accept patches from DPEs of inspector and massage them into rapidjson:Document patch
+  - During loading of DPEs in the inspector, convert query the DomPrefixTree to fetch patches and convey that information to the DPE
+
+## Migration Plans (Data, and workflows)
+There will not be a need for data migration for this work. Code refactoring needs to be done since the format in which patches are stored in memory changes. 
+
+### Are there any alternatives to this feature?
+## Keep using existing override storage structures to query/manage overrides instead of using a prefix tree
+**Idea**: The data about what's overridden is already present in the system. Instead of creating a new data structure, use these existing structures to query and manage overrides.
+
+**Pros**:
+- Avoids changes to data format of patches and avoids creating a new API
+
+**Cons**:
+- A link can have many patches. To find a single path match, we'd have to crawl through all the patches, which is expensive. We'd also have to do a lot of string comparisons for each path, particularly when the level of nesting increases. This process can take up a lot of time when there are many overrides or many levels of nesting and doesn't scale. Same problems arise for manipulating an override as well since we first need to know where to look for the override.
+
+## Use a custom prefix tree solution rather than using AZ::Dom::DomPrefixTree
+**Idea**: Rather than using DomPrefixTree API, write a custom prefix tree api that serves the purpose of managing overrides on prefabs.
+
+**Pros**:
+- Gives better flexibilty over the API in terms of what can be changed and also can tailor it better according to the needs of the prefab system
+
+**Cons**:
+- A lot of functions between the two APIs will be similar and will lead to a mirror API that looks almost identical and result in duplicated functionality
+- Prefab operations can be made faster by using AZ:Dom:Path for path comparisons and lookups, which performs better than your average string comparisons because it uses AZ::Name under the hood
+
+## Use an index based look up of patches for the prefix tree rather than store patch values in them
+**Idea**: Instead of storing actual patches in a prefix tree, keep existing patches as is and create a tracking prefix tree that can just store indices to the individual patches in the link DOM
+
+**Pros**:
+- Do not need to change the format of patches stored in the Link. We can even just keep using rapidjson:Document format and store indices to individual patches
+
+**Cons**:
+- When an override gets deleted, the indices of the other overrides below it in the array will change and therefore the tree needs to be adjusted with those updated again.
+- Must always do a reconstruction of the tree nodes if the link dom gets changed since we cannot maintain the lifecycle of individual nodes.
+
+## Keep using rapidjson::Document to store patches and use pointers to individual patches for DomPrefixTree
+**Idea**: Individual overrides are stored as an array of rapidjson::Value objects within a rapidjson:Document. So, we can use pointers to these objects as the metadata in the prefix tree and use them to look up overrides
+
+**Pros**:
+- Do not need to change the format of patches stored in the link. Leads to quickly implementing the prefix tree solution.
+
+**Cons**:
+- When an override gets deleted, making a pointer value null will not remove it from the actual DOM. So we'd need to do some indexing lookup again to keep the underlying DOM in a correct state and we run into the same problems as the previous alternative solution.
+- Must always do a reconstruction of the tree nodes if the link dom gets changed since we cannot maintain the lifecycle of individual nodes.
+
+## How will users learn this feature?
+
+- An impactful change email will be communicated to discord and sig-content email lists when we enable override authoring and visualization.
+- The prefab workflows guide will be updated to add new workflows around override authoring and modification.
+- On demand video tutorials will be created if the workflows are identified to have a steep learning curve for new and existing users.
+
+## Are there any open questions?
+**Do Patches and Overrides mean the same thing?**
+In the context of this design, yes. They are saved on prefab files with the name 'Patches' but in some contexts, referring to them as 'overrides' makes more sense. So the two terms are used in an interchangeable fashion in this document.
+
+**Does this design also cover application of overrides and propagating them to other instances of the prefab template?**
+The support for application of overrides and propagating them already exists in the existing prefab system. This design focuses on providing fast and convenient APIs to make override management much easier.
+
+**Why not use AZ:Dom:Value to store prefab template DOM data?**
+Using AZ:Dom:Value will in fact result in faster DOM operations. However, moving from rapidjson:Document to AZ:Dom:Value will be a big undertaking and is out of scope of this design.
+
+**Why not use AZ:Dom:Patch to store patches?**
+Related to the above question. Since template DOM still uses rapidjson:Document, if we store patches in AZ:Dom:Patch format, we'd have to constantly switch between the 2 formats, which will add a lot of overhead to the system.
+
+**Will the usage of these APIs need to wait till the DocumentPropertyEditor work is finished for the Inspector?**
+No. These APIs can be used to achieve override visualization in entity outliner and any other custom tools in the editor. Once the DPE work finishes for inspector, the prefab adapter talking to the DPE will also query these same APIs. But until then, these APIs can be used without needing to wait for the DPE to finish.
+
+**Will there be any changes to the way prefabs are serialized or deserialized? Will version conversions need to be provided between old and new serialized data?**
+There won't be any changes to the serialized data of prefabs. Patches will continue to be loaded and saved in the same format. We are only changing underlying data format of patches when they are loaded into memory.
+
+**Has any of the work mentioned in this design been prototyped?**
+Yes. Almost all changes proposed in the design have been prototyped to some extent. Using the prototype, it was verified that we can achieve override visualization in the entity outliner with the above design. The prototyped changes [can be viewed here](https://github.com/aws-lumberyard-dev/o3de/compare/srikappa/Overrides/daiminiPrototype...aws-lumberyard-dev:o3de:srikappa/Overrides/DomPrefixTreePerLink).

+ 57 - 0
testing-guidance/test-plans/editor/test-plan-action-manager.md

@@ -0,0 +1,57 @@
+### **1 Introduction:**
+
+This test plan is for validating the new Action Manager which improves Editor extensibility by allowing custom menus, hotkeys, and contextual actions to be registered via Gems/Python scripts.
+
+##### **1.1 References:**
+
+*   [Action Manager: Roadmap Task](https://github.com/o3de/o3de/issues/12380)
+*   [Action Manager: RFC](https://github.com/o3de/sig-content/issues/51)
+
+
+### **2 Active Issues:**
+
+**NOTE:** This links to a project setup to capture all Action Manager issues  
+
+[Action Manager Project Issues](https://github.com/orgs/o3de/projects/21)
+
+### **3 Risks:**
+
+| Risk | Mitigation                                                                                                                   | Detection Method |
+| --- |------------------------------------------------------------------------------------------------------------------------------| --- |
+| Existing Editor functionality is affected. | Enabling the new Action Manager will initially require a regset flag (regset=O3DE/ActionManager/EnableNewActionManager=true) | Existing automation and manual testing will be run before the flag is no longer required. |
+
+### **4 Workflow Testing:**
+
+[Editor Workflow Tests](https://github.com/o3de/sig-content/blob/main/testing-guidance/workflow-tests/editor/editor-workflow-tests.md#editor-workflow-tests) 1-3 should be run to validate a wide swath of toolbar, context menu, and hotkey functionality remains intact, with additional focus on Viewport interactions with gizmos and widgets.
+
+### **5 Automation:**
+
+All Editor automated tests should be run to similarly validate a wide swath of toolbar and context menu functionality remains intact.
+
+  
+
+##### **5.1 Python Automation**
+
+Editor Python tests can be found in the Automated Testing project at AutomatedTesting/Gem/PythonTests/editor. These tests can be run via the steps below:
+
+1.  Process all assets for the AutomatedTesting project.
+2.  Run the following command from the o3de/python directory:
+
+**Run Editor automated Python tests**
+
+`python.cmd -m pytest AutomatedTesting/Gem/PythonTests/editor/TestSuite_Main.py --build-directory [cmake_build_dir]\bin\profile`
+
+##### **5.2 C++ Unit Tests**
+
+Editor C++ Unit tests can be found in AzToolsFramework.Tests.dll. These can be run via the steps below:
+
+1.  AzToolsFramework.Tests.dll is built
+2.  Run the following command from the desired build folder (e.g. profile, debug, etc.)
+
+**Run Editor C++ Unit tests**
+
+`[cmake_build_dir]\bin\[build_flavor]\AzTestRunner.exe AzToolsFramework.Tests.dll AzRunUnitTests --gtest_filter=*ActionManager*`
+
+### **6 User-facing Documentation:**
+
+**[https://www.o3de.org/docs/learning-guide/tutorials/extend-the-editor/](https://www.o3de.org/docs/learning-guide/tutorials/extend-the-editor/)**

+ 89 - 0
testing-guidance/workflow-tests/Viewport/viewport-workflow-tests.md

@@ -0,0 +1,89 @@
+# Viewport Workflow Tests
+​
+Testing in this area should focus on basic Viewport functionality.
+​
+## Common Issues to Watch For
+​
+Test guidance will sometimes note specific issues to watch for. The common issues below should be watched for through all testing, even if unrelated to the current workflow being tested.
+
+1. Console log errors/warnings/spam
+2. Asserts
+​
+### Platforms:​
+
+- Windows
+- Linux​
+​
+### Documentation pages:​
+
+* [Working with the 3D Viewport](https://www.o3de.org/docs/user-guide/editor/Viewport/)
+* [Reference Spaces](https://www.o3de.org/docs/user-guide/editor/Viewport/reference-spaces/)
+* [Group Selection](https://www.o3de.org/docs/user-guide/editor/Viewport/group-selection/)
+* [Advanced 3D Viewport Operations](https://www.o3de.org/docs/user-guide/editor/Viewport/advanced-operations/)​
+​
+### Workflow 1: Camera control 
+​
+**Product:** 
+A Level with multiple entities with a mesh component and assigned shaderball model asset.
+​
+**Suggested Time Box:** 5-10 mins
+
+| Workflow                                                               | Requests																																																																						   | Things to Watch For                                                                                                                                                          |
+|------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| Navigate level with camera controls									 | <ol><li>Select the Viewport.</li><li>Navigate the camera with `W`, `A`, `S`, `D`, `Q`, `E`. Hold `shift` for fast move.</li><li>`Right-click and drag` to rotate the camera.</li><li>Press `MMB and drag` to pan up and down.</li><li>Scroll up and down using the `MMB`, to zoom in and out.</li><li>`ALT+LMB` to orbit.</li><li>`ALT+MMB` or `ALT+Scroll` to Pan.</li><li>`ALT+RMB` to Dolly.</li></ol>| <ul><li>Testing clicking in and out of the Viewport while moving the camera</li></ul>|
+| Be this camera option													 | <ol><li>Select the camera entity or create one.</li><li>In the Entity Inspector, press the `Be this camera` button.</li><li>Move the camera around.</li><li>Press the Return to default editor camera button.</li></ol>																		   | 																																											  |
+| Match Viewport														 | <ol><li>Select the camera entity or create one.</li><li>In the Entity Inspector, press the `Match Viewport` button.</li><li>Move the camera around.</li><li>Press the Return to default editor camera button.</li></ol>																		   |																																											  |
+| Viewport camera selector												 | <ol><li>Open the Viewport Camera Selector (Tools > Viewport > Viewport Camera Selector).</li><li>`Right-click` in the Viewport and select "Create camera entity from view".</li><li>Navigate to a different location in the Viewport and create another camera.</li><li>Navigate through the available cameras in the Viewport Camera Selector while monitoring the Viewport.</li></ol>|																						  |
+---
+
+### Workflow 2: Viewport options  
+​
+**Product:** 
+A Level with multiple entities with a mesh component and assigned shaderball model asset.
+​
+**Suggested Time Box:** 20 mins
+
+| Workflow                                                               | Requests																																																																						   | Things to Watch For                                                                                                                                                          |
+|------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| Hide/Unhide															 | <ol><li>Select an entity with mesh component in the Entity Outliner and press the `eye` icon.</li><li>Select the Show All menu option (Edit > Show All).</li><li>Select the entity in the Viewport.</li><li>Press `H` to hide the entity.</li><li>Press `Ctrl+SHIFT+H` to unhide the entity.</li></ol>|<ul><li>Correct entity Hide/Unhide functionality.</li><li>Shortcut functionality.</li></ul>																			  |
+| Lock/Unlock															 | <ol><li>Select an entity with mesh component in the Entity Outliner, press the `lock` icon.</li><li>Attempt to select the entity in the Viewport.</li><li>Select the Unlock All menu option (Edit > Unlock All).</li><li>Select the entity in the Viewport and press `L` to lock the entity.</li><li>Press `Ctrl+SHIFT+L` to unlock all entities.</li></ol>|<ul><li>Correct entity Lock/Unlock functionality.</li><li>Shortcut functionality.</li></ul>						  |
+| Go to position														 | <ol><li>Select View > Viewport > Go to Position...</li><li>Input coordinates.</li></ol>																																																		   | <ul><li>Camera responds as expected to the used control actions.</li></ul>																									  |
+| Find selected entities in Viewport									 | <ol><li>Select an entity and move the camera away from it.</li><li>Select View > Viewport > Find selected entities in Viewport or use the `Z` key.</li></ol>																																	   | <ul><li>Position on the selected entity.</li></ul>																															  |
+| Save Location/Go to location											 | <ol><li>Select View > Viewport > Save Location > Save location 1.</li><li>Move the camera around.</li><li>Select View > Viewport > Go to location > Go to location 1.</li><li>Use `Ctrl+F<1-12>` to save multiple bookmarks and load them with `Shift+F<1-12>`.</li></ol>					   | <ul><li>Saving and loading bookmarked locations.</li></ul>																													  |
+| Component Mode Switcher												 | <ol><li>Select an entity and add multiple components with component mode(e.g. Spline, PhysX collider, WhiteBox).</li><li>Enter the component mode through the switcher in the upper left corner of the Viewport.</li><li>Switch between component modes using the switcher.</li></ol>		   | <ul><li>Switchers added to the Viewport and functioning.</li></ul>																											  |
+| Stress test															 | <ol><li>Select an entity with mesh component and duplicate it (`Ctrl+D`) so you will have around 200 entities.</li><li>Select all entities in the level and manipulate them using the Transform mode widgets.</li></ol>																		   | <ul><li>Any drops in Editor stability, errors or framerate drops.</li></ul>																								  |
+| Field of View/Camera speed scale 										 | <ol><li>Select dropdown menu next to the camera icon on the Viewport Toolbar and change the value of the Field of view.</li><li>Look around with the camera.</li><li>Select the camera speed scale under the FOV, change the value and move the camera around.</li></ol>						   | <ul><li>FOV and camera speed adjusting.</li></ul>																															  |
+| Toggle between states													 | <ol><li>Select dropdown menu next to the bug icon on the Viewport Toolbar and select Full.</li><li>Switch between all of the modes.</li><li>Press the bug icon multiple times to switch between the modes.</li></ol>																			   |																																											  |
+| Show Helpers															 | <ol><li>Select dropdown menu next to the eye icon on the Viewport Toolbar and select show icons (or use `Ctrl+space`).</li><li>Select an entity and from the dropdown menu, select Show helpers for selected entity.</li><li>Switch to hide helpers.</li></ol>								   |																																											  |
+| Viewport Size															 | <ol><li>Select dropdown menu next to the double rectangle icon on the Viewport Toolbar > Ratio and switch between the ratios.</li><li>From the ratio menu select Custom... and input custom ratio values.</li><li>Select Resolution menu and switch between all of the resolutions in the menu.</li><li>Select Resolution > Custom... and input custom resolution values.</li></ol> |																						  |
+| Grid/Angle snapping													 | <ol><li>Select dropdown menu next to the triple bar icon on the Viewport Toolbar and select Show Grid.</li><li>Select the Grid snapping option and change the Grid snapping size to 5.</li><li>Select an entity and using the translate mode, move it around.</li><li>Select the Angle Snapping option and change the Angle snapping size value to 60.</li><li>Select an entity and using the rotate mode, turn the entity around.</li></ol> | <ul><li>Grid displaying around the entity</li></ul>|
+| Viewport  global preferences											 | <ol><li>Select Edit > Editor Settings > Global Preferences and select the Viewport tab.</li><li>Change FOV value and press `OK`.</li><li>Observe the changes in the Viewport.</li><li>Return to the Preferences menu, modify any other option, confirm and observe the changes.</li></ol>       | <ul><li>After restarting the Editor the aved changes should persist.</li></ul>																								  |
+---
+
+### Workflow 3: Entity manipulation 
+
+**Product:** 
+A Level with multiple entities with a mesh component and assigned shaderball model asset.
+​
+**Suggested Time Box:** 30 mins
+
+| Workflow                                                               | Requests																																																																						   | Things to Watch For                                                                                                                                                          |
+|------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| Manipulate the entity                                                  | <ol><li>Select an entity and use the Transform mode widgets to manipulate it.</li><li>Switch between translate, rotate and scale modes (`1`, `2` and `3` key accordingly).</li></ol>																												   | <ul><li>Shortcuts functionality.</li><li>Correct entity manipulation.</li></ul>																						  |
+| Undo/Redo																 | <ol><li>While using the Transform mode widgets to manipulate an entity select Edit > Undo/Redo.</li><li>Manipulate the entity and use the shortcuts for Undo - `Ctrl+Z` and Redo `Ctrl+Shift+Z`.</li></ol>																							| <ul><li>Shortcuts functionality.</li></ul>																															      |
+| Reference space widget                                                 | <ol><li>Select an entity and assign a child entity to it.</li><li>Select the child entity, move it around the Viewport and switch between the Reference spaces.</li></ol>																													   | <ul><li>Correct Translate and Rotate coordinates.</li><li>Correct entity manipulation.</li></ul>															     			  |
+| Pivots																 | <ol><li>Select an entity with a three-dimensional shape.</li><li>Switch between pivots (`P` key) and manipulate the entity.</li></ol>																																							   | <ul><li>Schortcuts functionality.</li><li>Correct entity manipulation.</li></ul>																						  |
+| Creating a custom reference spaces									 | <ol><li>Select an entity and select translation manipulator mode.</li><li>Press and hold `Ctrl+Alt` and select a target entity in the Viewport with `LMB`.</li><li>Use the manipulator to modify the entity.</li></ol>																		       | <ul><li>Correct manipulator match to the translation or orientation of the target entity.</li></ul>																	  |
+| Selecting a group of entities											 | <ol><li>Select multiple entities by using `LMB` and drag.</li><li>Deselect multiple entities by holding `Ctrl+LMB` and dragging in the Viewport.</li><li>Add and remove an entity from the selection by holding `Ctrl` and `left-clicking` a target entity.</li></ol>					                   | <ul><li>Correct entity selection.</li></ul>																														  |
+| Selecting a reference space for a group								 | <ol><li>With a group of entities selected, press and hold `Ctrl+Alt` and `left-click` a target entity.</li><li>Use the manipulator to modify the entities.</li></ol>																															       | <ul><li>Correct manipulator match to the translation or orientation of the target entity.</li></ul>																	  |
+| Creating a custom reference space for a group							 | <ol><li>With a group of entities selected, press and hold `Ctrl`, and move the manipulator in the Viewport.</li></ol>																																											   | <ul><li>Correct manipulator match to the translation or orientation of the target entity.</li></ul>																	  |
+| Parent reference spaces												 | <ol><li>Select multiple child entities of the same parent entity and use the manipulator to modify them.</li></ol>																																											   | <ul><li>Correct manipulator match to the translation or orientation of the target entity.</li></ul>																		  |
+| Using individual influence in a group								     | <ol><li>Press and hold `Alt` while modifying a group of selected entities to modify the entities in the local space.</li><li>Select child entities from different parent entities and press and hold `Alt`.</li><li>Press and release Alt to dynamically change the manipulator influence.</li></ol>| <ul><li>Correct manipulator match to the translation or orientation of the target entity.</li></ul>																	  |
+| Reset an entity's transform, rotation, or scale						 | <ol><li>In the Viewport, select an entity or group of entities and press `R`.</li><li>Switch the manipulator mode and attempt to reset them.</li></ol>																																			   | <ul><li>Correct entity default location, rotation, and scale.</li></ul>																							      |
+| Modifying manipulators												 | <ol><li>Select multiple entities.</li><li>Select the transform mode of the manipulator you want to modify.</li><li>Press and hold `Ctrl+LMB` and drag the manipulator to modify its location, rotation, or scale.</li></ol>														               | <ul><li>Correct manipulator match to the translation or orientation of the target entity.</li></ul>																		  |
+| Reset a manipulator's transform, rotation, or scale					 | <ol><li>Reset a manipulator to its default location, rotation, or scale by pressing `Ctrl+R` while the related manipulator is active.</li></ol>																																				   | <ul><li>Correct manipulator default location, rotation, and scale.</li></ul>																								  |
+| Matching entity transforms											 | <ol><li>Select an entity.</li><li>Press and hold `Ctrl` and press the middle mouse button as you hover over a target entity. After the target is selected, the current selection transform matches that of the target.</li><li>Do this with location, rotation, or scale.</li></ol>			   | <ul><li>Correct matching location, rotation, and scale values.</li></ul>																									  |
+| Ditto a group selection											     | <ol><li>Select a group of entities.</li><li>Press and hold `Ctrl` and press the `middle mouse button` as you hover over a target entity to match the group's transform data to the target's data.</li><li>Do this with location, rotation, or scale.</li></ol>									   | <ul><li>Correct matching location, rotation, and scale values.</li></ul>																								  |
+| Ditto a group selection to local space								 | <ol><li>Select a group of entities.</li><li>Press and hold `Ctrl+Alt` and press the `middle mouse button` as you hover over a target entity. This sets the local space of each entity in the selected group to the target entity that you specified.</li></ol>								       | <ul><li>Correct matching location, rotation, and scale values.</li></ul>																								  | 
+---
+

+ 3 - 0
testing-guidance/workflow-tests/assetpipeline/asset-processor-attachments/testReferenceFile.xml

@@ -0,0 +1,3 @@
+<root versionnumber="1.0.0.2">
+	<dependency path="testAssets\dependency2.txt"/>
+</root>

+ 58 - 0
testing-guidance/workflow-tests/assetpipeline/assetpipeline-assetbuilderframework-workflow-tests.md

@@ -0,0 +1,58 @@
+# Asset Builder Framework Workflow Tests:
+
+Testing in this area focuses on the functionality of:
+* Asset Builder Framework
+  * Python Asset Builders
+    * Python Bindings for Asset Builders
+  * Python Integration into Source Scene Builders
+* Asset Dependencies
+  * Asset Source Dependencies
+  * Asset Job Dependencies
+  * Asset Product Dependencies
+
+## Common Issues to Watch For:
+
+Test guidance will sometimes note specific issues to watch for. The common issues below should be watched for through all testing, even if unrelated to the current workflow being tested.
+1. Console log errors/warnings/spam 
+2. Asserts 
+3. Improperly rendered or assembled scenes 
+4. HotReloading issues
+
+### Common Terms:
+
+###### Base Resources:
+* [Asset Pipeline O3DE Resources](https://www.o3de.org/docs/user-guide/assets/pipeline/) <br>
+* [Asset Pipeline Concepts and Terms](https://www.o3de.org/docs/user-guide/packaging/asset-bundler/concepts/) <br>
+* [Asset Processor](https://www.o3de.org/docs/user-guide/assets/asset-processor/) <br> 
+* [Asset Cache](https://www.o3de.org/docs/user-guide/assets/pipeline/asset-cache/) <br>
+
+###### Builder Framework:
+* [Asset Builder Framework](https://www.o3de.org/docs/user-guide/assets/pipeline/asset-builders/) <br>
+  * [Python Asset Builders](https://www.o3de.org/docs/user-guide/assets/builder/) <br>
+* [Scene Builder Framework](https://www.o3de.org/docs/user-guide/assets/scene-pipeline/scene-builder/) <br>
+  * [Python Integration into Source Scene Builders - UDP](https://www.o3de.org/docs/user-guide/assets/scene-pipeline/scene-api-udp/#python-access) <br>
+
+###### Asset Dependencies:
+* [Source Dependencies](https://www.o3de.org/docs/user-guide/assets/pipeline/asset-dependencies-and-identifiers/#source-dependencies) <br>
+* [Product Dependencies](https://www.o3de.org/docs/user-guide/assets/pipeline/asset-dependencies-and-identifiers/#product-dependencies) <br>
+* [Job Dependencies](https://www.o3de.org/docs/user-guide/assets/pipeline/asset-dependencies-and-identifiers/#job-dependencies) <br>
+ 
+---
+
+## Feature: 
+
+**Project Requirements:** 
+
+**Resources:**
+
+### Area: 
+
+**Product:** 
+
+**Suggested Time Box:** 
+
+| Workflow | Requests | Things to Watch For |
+|----------|----------|---------------------|
+|          |          |                     |
+
+---

+ 96 - 0
testing-guidance/workflow-tests/assetpipeline/assetpipeline-assetbundling-workflow-tests.md

@@ -0,0 +1,96 @@
+# Asset Bundler Workflow Tests:
+
+Testing in this area focuses on the functionality of:
+* **Asset Bundler**
+  * Asset Bundler Batch
+  * Asset Bundler GUI
+  * Asset List Comparison Operations
+  * Default Seedlists
+* **Missing Dependency Scanner**
+* **Asset Validation Gem**
+  * SeedMode
+* **Bundle Mode**
+* **File Tagging System**
+
+## Common Issues to Watch For:
+
+Test guidance will sometimes note specific issues to watch for. The common issues below should be watched for through all testing, even if unrelated to the current workflow being tested.
+1. Console log errors/warnings/spam 
+2. Asserts 
+3. Improperly rendered scenes
+
+### Common Terms:
+
+###### Base Resources:
+ * [Creating a Project Game Release Layout ](https://www.o3de.org/docs/user-guide/packaging/windows-release-builds/) <br>
+ * [Asset Bundling Concepts and Terms](https://www.o3de.org/docs/user-guide/packaging/asset-bundler/concepts/) <br>
+ * [O3DE Editor](https://www.o3de.org/docs/user-guide/editor/) <br>
+ * [Console](https://www.o3de.org/docs/user-guide/editor/console/) <br>
+ * [Asset Cache](https://www.o3de.org/docs/user-guide/assets/pipeline/asset-cache/) <br>
+
+###### Asset Processor:
+* [Asset Processor](https://www.o3de.org/docs/user-guide/assets/asset-processor/) <br> 
+* [Missing Dependency Scanner](https://www.o3de.org/docs/user-guide/packaging/asset-bundler/assets-resolving/) <br>
+
+###### Asset Bundler:
+ * [Asset Bundler GUI](https://www.o3de.org/docs/user-guide/packaging/asset-bundler/overview/) <br>
+ * [Asset Bundler Batch](https://www.o3de.org/docs/user-guide/packaging/asset-bundler/asset-bundler-batch) <br>
+
+###### Asset Types:
+* [Source Assets](https://www.o3de.org/docs/user-guide/assets/pipeline/source-assets/) <br>
+* [Produce Assets](https://www.o3de.org/docs/user-guide/assets/pipeline/asset-processing/) <br>
+* [Intermediate Assets](https://www.o3de.org/docs/user-guide/assets/pipeline/intermediate-assets/) <br>
+
+###### Dependencies:
+* [Source Dependencies](https://www.o3de.org/docs/user-guide/assets/pipeline/asset-dependencies-and-identifiers/#source-dependencies) <br>
+* [Product Dependencies](https://www.o3de.org/docs/user-guide/assets/pipeline/asset-dependencies-and-identifiers/#product-dependencies) <br>
+* [Job Dependencies](https://www.o3de.org/docs/user-guide/assets/pipeline/asset-dependencies-and-identifiers/#job-dependencies) <br>
+
+---
+
+## Feature: Asset Bundler GUI and Asset Validation
+
+**Project Requirements:** Any project with Asset Validation gem and multiple platforms enabled.
+
+**Resources**: <br>
+ [Validating Seedpaths and Seedlists](https://www.o3de.org/docs/user-guide/packaging/asset-bundler/verifying-bundles/asset-validation-gem/) <br>
+ [Validating Bundled Assets](https://www.o3de.org/docs/user-guide/packaging/asset-bundler/verifying-bundles/bundle-mode/)
+
+**Note:** You will need to enter game mode for Seedmode and BundleMode to report missing assets.
+
+### Area: Validating Seedpaths and Seedlists in Seed Mode
+
+**Product:** Seedlists with all assets ready for packaging.
+
+**Suggested Time Box:** 30 Minutes
+
+|Workflow                               | Requests                                                                                                                                               | Things to Watch For                                                                                                                                                                                                                     |
+|---------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| Launch the Editor and load a level.   | -  Create a new level<br> -  Load an existing level                                                                                                    | -  There should be no console errors<br> -  There should be no Asset Validation warings when neither seed mode nor bundle mode are enabled                                                                                              |
+| Enable Seed mode and enter game mode. | -  Have no assets in the level<br> -  Have default assets in the level<br> -  Have custom assets in the level<br> -  Add new assets                    | -  There should be no assets reported missing when no assets are loaded<br> -  Assets should be reported as missing when default or custom assets are preset<br> -  Excluded assets, such as shaders, should not be reported as missing |
+| Add seedpath.                         | -  Add seedpath for level<br> -  Add seedpath for individual assets present in level<br> -  Add seedpath for assets not currently present in the level | -  Added assets and their dependencies should not report as missing<br> -  Added seedpaths not present in level should not report as missing                                                                                            |
+| Remove a seedpath.                    | -  Remove seedpath for default assets<br> -  Remove seedpath for custom assets<br> -  Remove seedpath for asset not present in level                   | -  Removed seedpath of asset not present in level should not report as missing<br> -  Removed seedpath of asset present in level should report as missing                                                                               |
+| Create a seedlist.                    | -  Include assets from the previous seedpath                                                                                                           |                                                                                                                                                                                                                                         |
+| Add a seedlist.                       |                                                                                                                                                        | -  Added seedlist assets present in level should no longer report as missing <br> -  Added seedlist assets not present in the level should not report as missing                                                                        |
+| Remove a seedlist.                    |                                                                                                                                                        | -  Removed seedlist assets present in level should report as missing <br> -  Removed seedlist of asset present in level should report as missing                                                                                        |
+
+### Area: Bundling and Validating Assets in Bundle Mode
+
+**Product:** Successfully create bundles from an assetlist and validate missing assets in a level. 
+
+**Suggested Time Box:** 90 Minutes
+
+|Workflow                                                                               | Requests                                                                                                                                               | Things to Watch For                                                                                                                                                                                                                                                                                                                                                     |
+|---------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| Generate a new seedlist and add/edit assets in the seedlist.                          | -  Saved to it's default directory<br> -  Saved to a different directory<br> -  Populated with assets from different platforms                         | -  Should successfully create seedlist<br> -  Should successfully add assets to seedlist<br> -  Should successfully save after adding/removing assets to/from existing seedlist<br> -  Should not report console errors<br> -  Should not have duplicate seedlist entries in GUI                                                                                        |
+| Generate an assetlist from a seedlist file.                                           | -  Created from one or more seedlist files<br> -  Created from Default Seedlists<br> -  Created for different platforms                                | -  Should successfully create assetlist<br> -  Should successfully populate assetlist with asset dependencies<br> -  Should not report console errors<br> -  Should be able to override existing assetlists *(requires confirmation in batch)*<br> -  Should not have duplicate assetlist entries in GUI                                                                |
+| Generate a rule and add steps.                                                        | -  Add a single step<br> -  Add Multiple steps                                                                                                         | -  Should successfully create rule<br> -  Should successfully update rule with saved steps<br> -  Should successfully populate information when adding a seedlist<br> -  Should not report console errors<br> -  GUI successfully updates                                                                                                                               |
+| Run a rule to generate an assetlist.                                                  | -  Run on multiple platforms simultaneously<br> -  Saved to it's default directory<br> -  Saved to a different directory                               | -  Rule's operation should successfully apply to assetlist<br> -  Should successfully create assetlist<br> -  Should successfully populate assetlist with asset dependencies<br> -  Should not report console errors<br> -  Should be able to override existing assetlists *(requires confirmation in batch)*<br> -  Should not have duplicate assetlist entries in GUI |
+| Generate a bundle from an assetlist.                                                  | -  Generate bundles for different platforms                                                                                                            | -  Bundle should successfully generate<br> -  Should not report console errors                                                                                                                                                                                                                                                                                          |
+| Verify bundle creation in "Completed Bundles" tab.                                    |                                                                                                                                                        | -  GUI should successfully update<br> -  Should not report console errors<br> -  Bundle information should displayed correctly                                                                                                                                                                                                                                          |
+| Launch Editor, create a level, and add assets.                                        | -  Use assets included in the generated bundles<br> -  Use assets not included in the generated bundles                                                |                                                                                                                                                                                                                                                                                                                                                                         |
+| Enable Bundle Mode, Load Bundles, and Enter Game Mode.                                | -  Enable Bundle Mode in Log, Warning, or Error Mode<br> - Load bundles after enabling Bundle Mode<br> -  Use addseedpath and listknown asset commands | -  Should report console errors<br> -  Missing from bundle text correctly displays assets in the level missing from mounted bundles<br> -  Listknown command displays assets and dependencies from added seedpath<br> -  Missing files are displayed in the console after entering/exiting Game Mode                                                                    |
+| Add missing assets to a seedlist and proceed through the flow of generating a bundle. | -  Create a new seedlist<br> -  Update an existing seedlist                                                                                            | -  Should successfully create seedlist/assetlist/bundle<br> -  Should successfully add assets to seedlist/assetlist/bundle<br> -  Should successfully save after adding assets to existing seedlist/assetlist/bundle<br> -  Should not report console errors<br> -  Should not have duplicate seedlist/assetlist/bundle entries in GUI                                  |
+| Reload Bundles and Verify Missing Assets.                                             |                                                                                                                                                        | -  Should report console errors<br> -  Missing from bundle text correctly displays assets in the level missing from mounted bundles<br> -  Assets added via the new bundle should no longer reported as "missing"<br> -  Missing files are displayed in the console after entering/exiting Game Mode                                                                    |
+
+---

+ 469 - 0
testing-guidance/workflow-tests/assetpipeline/assetpipeline-assetprocessor-workflow-tests.md

@@ -0,0 +1,469 @@
+# Asset Processor Workflow Tests:
+
+Testing in this area focuses on the functionality of:
+* **Asset Processor**
+  * Asset Processor Batch
+  * Asset Processor GUI
+* **Job Analysis**
+  * XML Schema System
+  * Copy Jobs
+  * Process Jobs
+  * Dependencies
+    * Source Dependencies
+    * Product Dependencies
+    * Job Dependencies
+* **Source Control**
+  * Perforce Integration
+* **Asset Cache Server**
+* **Asset Relocation Tool**
+* **Missing Dependency Scanner**
+* **Intermediate Assets**
+* **Virtual File System**
+
+## Common Issues to Watch For:
+
+Test guidance will sometimes note specific issues to watch for. The common issues below should be watched for through all testing, even if unrelated to the current workflow being tested.
+1. Console log errors/warnings/spam 
+2. Asserts 
+3. Improperly rendered scenes
+
+### Common Terms:
+
+###### Base Resources:
+* [Asset Pipeline O3DE Resources](https://www.o3de.org/docs/user-guide/assets/pipeline/) <br>
+* [Asset Pipeline Concepts and Terms](https://www.o3de.org/docs/user-guide/packaging/asset-bundler/concepts/) <br>
+* [O3DE Editor](https://www.o3de.org/docs/user-guide/editor/) <br>
+* [Console](https://www.o3de.org/docs/user-guide/editor/console/) <br>
+* [Asset Processor](https://www.o3de.org/docs/user-guide/assets/asset-processor/) <br> 
+* [Asset Cache](https://www.o3de.org/docs/user-guide/assets/pipeline/asset-cache/) <br>
+ 
+###### Asset Processor:
+* [Asset Processor Batch](https://www.o3de.org/docs/user-guide/assets/asset-processor/asset-processor-batch/) <br>
+* [Asset Processor GUI](https://www.o3de.org/docs/user-guide/assets/asset-processor/interface/) <br>
+* [Asset Cache Server](https://www.o3de.org/docs/user-guide/assets/asset-processor/asset-cache-server/) <br>
+* [Asset Relocation Tool](https://www.o3de.org/docs/user-guide/assets/asset-processor/move-assets/) <br>
+* [Missing Dependency Scanner](https://www.o3de.org/docs/user-guide/packaging/asset-bundler/assets-resolving/) <br>
+* [Virtual File System](https://www.o3de.org/docs/user-guide/) <br>
+
+###### Job Analysis:
+* [Copy Jobs](https://www.o3de.org/docs/user-guide/assets/asset-types/#copy-jobs) <br>
+* [Process Jobs](https://www.o3de.org/docs/user-guide/assets/asset-types/) <br>
+* [XML Schema System](https://www.o3de.org/docs/user-guide/) <br>
+* [Job Logs](https://www.o3de.org/docs/user-guide/assets/asset-processor/debugging/#view-asset-processor-logs) <br>
+
+###### Asset Types:
+* [Source Assets](https://www.o3de.org/docs/user-guide/assets/pipeline/source-assets/) <br>
+* [Produce Assets](https://www.o3de.org/docs/user-guide/assets/pipeline/asset-processing/) <br>
+* [Intermediate Assets](https://www.o3de.org/docs/user-guide/assets/pipeline/intermediate-assets/) <br>
+
+###### Dependencies:
+* [Source Dependencies](https://www.o3de.org/docs/user-guide/assets/pipeline/asset-dependencies-and-identifiers/#source-dependencies) <br>
+* [Product Dependencies](https://www.o3de.org/docs/user-guide/assets/pipeline/asset-dependencies-and-identifiers/#product-dependencies) <br>
+* [Job Dependencies](https://www.o3de.org/docs/user-guide/assets/pipeline/asset-dependencies-and-identifiers/#job-dependencies) <br>
+ 
+###### Source Control:
+* [Perforce Integration](https://www.o3de.org/docs/user-guide/) <br>
+
+###### Asset Processor Configuration:
+* [Scan Directories](https://www.o3de.org/docs/user-guide/assets/pipeline/scan-directories/) <br>
+* [File Tagging System](https://www.o3de.org/docs/user-guide/packaging/asset-bundler/file-tagging/) <br>
+
+---
+
+## Feature: Asset Processor
+
+**Description:** Testing in this area will focus on Asset Processor and Asset Processor Batch usage.
+
+**Project Requirements:** Any project with available source files can be used.
+
+**Resources:** <br>
+ [Asset Processor Interface](https://www.o3de.org/docs/user-guide/assets/asset-processor/interface/) <br>
+ [Asset Processor Configuration](https://www.o3de.org/docs/user-guide/assets/asset-processor/configuration/)
+
+### Area: Asset Ingestion | Job and Product Validation
+
+**Product:** Successfully processed assets are in cache and visible in the Asset Browser.
+
+**Suggested Time Box:** 20 Minutes
+
+| Workflow | Requests  | Things to Watch For |
+|----------|-----------|---------------------|
+| **Launch Asset Processor** | <ol><li>Source assets already exist within a project scan directory.</li></ol> | <ul><li>There should be no excessive job analysis scanning.</li><li>There should be no excessive processing time for files.</li><li>Asset Processor errors should be descriptive and actionable.</li><li>Asset Processor should successfully process source files into the cache as product files.</li></ul> |
+| **Add new assets to the project** | <ol><li>Create and place new assets within a project scan directory: <ul><li>Supported source assets.</li><li>Unsupported Source assets.</li></ul></li></ol> | <ul><li>Asset Processor should successfully process supported source assets and generate product assets in the cache.</li><li>AP should not process unsupported source assets.</li></ul> |
+| **Open new asset Job Log from Jobs tab right-click context menu** | <ol><li>Opens the log file up in filesystem default program for .log files.</li></ol> | <ul><li>Should have no asserts when opening the log file.</li><li>Job log file should not have unnecessary/unhelpful log spam.</li><li>Job log file should not be empty on a job with warnings or errors.</li></ul> |
+| **Open new asset in Asset Browser from Jobs tab right-click context menu** | <ol><li>Open up Asset Browser.</ol> | <ul><li>Processed assets should be discoverable and interactable within the Asset Browser.</li></ul> |
+
+### Area: Source and Product Asset GUI Navigation
+
+**Product:**  Source Asset and Product Asset are discoverable.
+
+**Suggested Time Box:** 10 Minutes
+
+| Workflow | Requests | Things to Watch For |
+|----------|----------|---------------------|
+| **From Jobs tab jump to source asset from right-click context menu** | <ol><li>Source Assets tab is opened to the the selected source asset.</li></ol> | <ul><li>Source asset should be found within the tab.</li></ul> |
+| **Jump to a product asset from selected asset's right-click context menu** | <ol><li>Product Assets tab is opened to the the selected source asset.</li></ol> | <ul><li>Product asset should be found within the tab.</li></ul> |
+| **Jump back to Source Asset from selected asset's info panel "Source Asset" button** | <ol><li>Source Assets tab is opened to the the selected source asset.</li></ol> | <ul><li>Source asset should be found within the tab.</li></ul> |
+| **Reprocess asset from selected Source Asset's right-click context menu** | <ol><li>Asset processor performs job analysis on file.</li><li>Asset is reprocessed.</li><li>Asset is product cache.</li></ol> | <ul><li>There should be no excessive job analysis scanning.</li><li>There should be no excessive processing time for files.</li><li>Asset Processor errors should be descriptive and actionable.</li><li>Asset Processor should successfully process source files into the cache as product files.</li><li>New Job Logs and Product files should be output.</li></ul> |
+| **Open file in Explorer from selected asset's right-click context menu** | <ol><li>File Explorer is opened to the source file's location.</li></ol> | <ul><li>Wrong folder is opened.</li><li>Folder fails to open.</li></ul> |
+
+### Area: Asset Processor Batch basic actions
+
+**Project Requirements**
+* AssetProcessorBatch present in the build folder. If it is not it can be built using `cmake --build build/<build folder name> --target AssetProcessorBatch --config profile` command from the root engine folder.
+
+**Product:**  Files modified via Asset Processor Batch.
+
+**Suggested Time Box:** 10 Minutes
+
+| Workflow | Requests | Things to Watch For |
+|----------|----------|---------------------|
+| **Prepare Command Line to execute Asset Processor Batch commands** | <ol><li>Open Command line in the engine build folder (for example `C:\o3de-install\bin\Windows\profile\Default\`) and confirm AssetProcessorBatch can be executed for a chosen project (for example `AssetProcessorBatch.exe --project-path=C:\Users\<user>\O3DE\Projects\<project>`).</li></ol> | <ul><li>Executing AssetProcessorBatch for a chosen project processes assets without any asserts.</li></ul> |
+| **Delete an asset** | <ol><li>Delete an existing asset via Asset Processor Batch (for example `AssetProcessorBatch.exe --project-path=C:\Users\<user>\O3DE\Projects\<project> --delete=C:\Users\<user>\O3DE\Projects\<project>\test.txt --confirm`).</li></ol> | <ul><li>Deleted asset should be removed from disk.</li></ul> |
+| **Rename an asset** | <ol><li>Rename an existing asset via Asset Processor Batch (for example `AssetProcessorBatch.exe --project-path=C:\Users\<user>\O3DE\Projects\<project> --move=C:\Users\<user>\O3DE\Projects\<project>\test.txt,C:\Users\<user>\O3DE\Projects\<project>\test1.txt --updateReferences --confirm`).</li></ol> | <ul><li>Asset's name should be changed (and updated in Editor if `--updateReferences` argument is used).</li></ul> |
+| **Move an asset** | <ol><li>Move an existing asset via Asset Processor Batch (for example `AssetProcessorBatch.exe --project-path=C:\Users\<user>\O3DE\Projects\<project> --move=C:\Users\<user>\O3DE\Projects\<project>\test1.txt,C:\Users\<user>\O3DE\Projects\<project>\Assets\test1.txt --updateReferences --confirm`).</li></ol> | <ul><li>Asset should be moved to the chosen path (and updated in Editor if `--updateReferences` argument is used).</li></ul> |
+
+---
+
+## Feature: Job Analysis
+
+**Description:** Testing in this area will focus on XMLSchema as well as Source, Product and Job Dependencies scanning.
+
+### Area: XMLSchema Dependencies Scan
+
+**Project Requirements:**
+*  XMLSchema asset with dependent files setup. For example the existing `Font.xmlschema` along with `Engine/Fonts/` (on Pre-built SDK engine their paths are `o3de-install/Assets/Engine/Schema/Font.xmlschema` and `o3de-install/Assets/Fonts/` respectively) assets could be used.
+
+**Platforms:**
+* Windows
+* Linux
+
+**Product:** An XMLSchema file scanned for missing dependencies.
+
+**Suggested Time Box:** 20 Minutes
+| Workflow | Requests | Things to Watch For |
+|----------|----------|---------------------|
+| **Perform scan for missing dependencies with none missing** | <ol><li>In the *Asset Processor* navigate to the *Assets* > *Product Assets* tab and find your `.xmlschema` file (for example `pc/schema/font.xmlschema`).</li><li>In the *Missing Product Dependencies* section to the right, click the *Scan file* button.</li><li>In the CLI navigate to your engine build location (for example `C:\o3de-install\bin\Windows\profile\Default\`) and run the AssetProcessorBatch command to scan for the missing dependencies for the fonts (for example `AssetProcessorBatch --project-path=C:\Users\<user>\O3DE\Projects\<project> --zeroAnalysisMode --dsp=%fonts%.xml`).</li></ol> | <ul><li>The `.xmlschema` asset can be found in the *Asset Processor*.</li><li>*Missing Product Dependencies* log returns `No missing dependencies found` after clicking the *Scan file* button.</li><li>There are no `Missing dependency:` lines under each `Scanning for missing dependencies:` line in the CLI.</li></ul> |
+| **Perform scan for missing dependencies with some missing** | <ol><li>Move your `.xmlschema` file out of it's original path (for example `o3de-install/Assets/Engine/Schema/Font.xmlschema`).</li><li>In the *Asset Processor* navigate to the *Assets* > *Product Assets* tab and find an `.xml` asset that was dependent on the removed `.xmlschema` asset (for example `pc/font/vera-italic.xml`).</li><li>In the *Missing Product Dependencies* section to the right, click the *Scan file* button.</li><li>In the CLI navigate to your engine build location (for example `C:\o3de-install\bin\Windows\profile\Default\`) and run the AssetProcessorBatch command to scan for the missing dependencies for the fonts (for example `AssetProcessorBatch --project-path=C:\Users\<user>\O3DE\Projects\<project> --zeroAnalysisMode --dsp=%fonts%.xml`).</li><li>Remember to return the `.xmlschema` file back to it's original path for any further use.</li></ol> | <ul><li>An `.xml` asset can be found in the *Asset Processor*.</li><li>*Missing Product Dependencies* log returns the name of missing dependency after clicking the *Scan file* button (`Vera-italic.ttf` in the case of `vera-italic.xml`).</li><li>There are `Missing dependency:` lines under each `Scanning for missing dependencies:` line in the CLI.</li></ul> |
+
+### Area: Source, Product and Job Dependencies
+
+**Project Requirements:**
+* Any project with at least one asset in each *Asset Processor* > *Assets* category: *Source Assets*, *Intermediate Assets* and *Product Assets* with one or more of *Incoming Dependencies* (*Dependencies - In*) or *Outgoing Dependencies* (*Dependencies - Out*).
+
+**Platforms:**
+* Windows
+* Linux
+
+**Product:** Scanned project cache and assets with dependencies verified to be displayed in the *Asset Processor*.
+
+**Suggested Time Box:** 20 Minutes
+| Workflow | Requests | Things to Watch For |
+|----------|----------|---------------------|
+| **Perform an Asset Processor Scan** | <ol><li>In the *Asset Processor* navigate to the *Assets* > *Settings* tab and in the *Full Scan* section click the *Start Scan* button.</li></ol> | <ul><li>Assets are fully scanned with no notable errors occuring.</li></ul> |
+| **Verify the Job Dependencies** | <ol><li>In the *Asset Processor* navigate to the *Assets* > *Source Assets* tab and verify that assets display Dependencies in the pane to the right (for example `engine.json`).</li><li>In the *Asset Processor* navigate to the *Assets* > *Intermediate Assets* tab and verify that assets display Dependencies in the pane to the right (for example `materials/reflectionprobe/reflectionprobevisualization_generated.materialtype`).</li><li>In the *Asset Processor* navigate to the *Assets* > *Product Assets* tab and verify that assets display Dependencies in the pane to the right (for example `pc/fonts/vera-italic.font`).</li></ol> | <ul><li>*Source Assets* contain assets that display Dependnecies (either *In* or *Out* or both).</li><li>*Intermediate Assets* contain assets that display Dependnecies (either *In* or *Out* or both).</li><li>*Product Assets* contain assets that display Dependnecies (either *In* or *Out* or both).</li></ul> |
+
+---
+
+## Feature: AP Source Control Integration
+
+**Description:** Testing in this Area will focus on connecting and working with Perforce (p4) as a source control tool.
+
+**Project Requirements:**
+
+* Perforce installed on the machine.
+* O3DE added to the p4 depot (without cache folders).
+
+**Platforms:**
+
+* Windows
+
+**Product:**  Assets that are shared on p4 server.
+
+**Suggested Time Box:** 60 Minutes
+
+| Workflow | Requests | Things to Watch For |
+|----------|----------|---------------------|
+| **Enable Source Control plugin** | <ol><li>Open the O3DE Editor.</li><li>Close the Welcome to O3DE window or load any level.<li>Click LMB on the Perforce plugin icon.</li><li>Enable the connection.</li></ol> | <ul><li>Perforce plugin is present in the bottom bar of the O3DE Editor.</li><li>Clicking on the p4 plugin shows Status switch and Settings.</li><li>Settings are grayed out when p4 connection is set to disabled.</li><li>Perforce plugin is green while enabled, and gray while disabled.</li><li>Enabling and disabling p4 connection prints appropriate message in the Editor's console.</li></ul> |
+| **Configure connection settings** | <ol><li>Click LMB on the Perforce plugin icon.</li><li>Enable the p4 connection.</li><li>Open Settings in the Perforce plugin.</li><li>Provide correct values for each setting:<ul><li>Server, User and Workspace should be filled with information from p4v. Those are the same information that user needs to log into p4 applications.</li><li>Charset should be set to "none".</li></ul><li>Press OK.</li></ol> | <ul><li>User is able to povide the information necessary for p4 connection.</li><li>Filing Settings with invalid information results in p4 plugin color change to orange and message in Editor's console about invalid Perforce configuration.</li><li>User is able to disconnect from Perforce changing the Work Online switch.</li></ul> |
+| **Add asset to depot** | <ol><li>Import any asset to the project you are working on.</li><li>Find in Asset Browser newly imported asset.</li><li>Click RMB on it.</li><li>From the context menu select "Add to Source Control".</li><li>Open p4v application and log to it</li><li>Submit changes.</li></ol> | <ul><li>Imported asset shows in Asset Browser.</li><li>When Perforce connection is enabled, source control options are present in the context menu.</li><li>Adding asset to source control prints appropriate messages in the Editor's console.</li><li>Asset is marked as "Add" in the perfoce application and changes can be submitted.</li><li>Asset Processor process asset without issues.</li></ol> |
+| **Check Out asset** | <ol><li>In the Asset Browser, find any asset that is already added to the source control.</li><li>Click RMB on it.</li><li>From the context menu select "Check Out".</li><li>Open p4v application and log into it</li><li>Submit changes.</li></ol> | <ul><li>When Perforce connection is enabled, source control options are present in the context menu.</li><li>Checking Out assets prints appropriate messages in the Editor's console.</li><li>Asset is marked as "Checked Out" in the perfoce application and changes can be submitted.</li><li>Asset Processor process asset without issues.</li></ol> |
+| **Reverting changes** | <ol><li>Chceck Out an asset.</li><li>Verify that asset is Checked Out in the Perforce application and change can be submitted.</li>In Asset Browser inside the O3DE, click RMB on the asset.</li><li>From the context menu select "Undo Check Out".</li><li>In the Perforce application, verify that Chceked Out asset dissapeard from changelist.</li></ol> | <ul><li>When Perforce connection is enabled, source control options are present in the context menu.</li><li>Checking Out assets prints appropriate messages in the Editor's console.</li><li>Asset is marked as "Checked Out" in the perfoce application.</li><li>Check Out assets can be reverted.</li><li>Reverting Check Out prints appropriate messages in the Editor's console.</li><li>After reverting Check Out, changes are removed from p4v changelist.</li><li>Asset Processor process asset without issues.</li></ol> |
+| **Getting last version** | <ol><li>In the Asset Browser find an asset that was changed by other user.</li><li>Click RMB on it.</li><li>From the context menu select "Get Latest Version".</li></ol> | <ul><li>When Perforce connection is enabled, source control options are present in the context menu.</li><li>Getting latest version of asset from source control prints appropriate messages in the Editor's console.</li><li>Changes to the asset are visible without need of restarting the Editor.</li><li>Editor remains stable.</li><li>Asset Processor process asset without issues.</li></ol> |
+
+---
+
+## Feature: Asset Cache Server
+
+**Description:** Testing in this area should focus on the Asset Cache Server and Client side.
+
+### General Docs
+* [Asset Cache Server](https://www.o3de.org/docs/user-guide/assets/asset-processor/asset-cache-server/)
+
+### Common Issues to Watch For
+
+Test guidance will sometimes note specific issues to watch for. The common issues below should be watched for through all testing, even if unrelated to the current workflow being tested.
+- Server side generating Cache
+- Path to the Cache location
+- Ability of the client to connect to the server side
+- Ability of Client side to retrieve file from the server side
+
+## Workflows
+
+### Area: Create the transfer directory 
+
+**Project Requirements**
+* None
+
+**Editor Platforms:**
+* Windows
+* Linux
+
+**Docs:**
+* [Asset Cache Server](https://www.o3de.org/docs/user-guide/assets/asset-processor/asset-cache-server/)
+
+**Product:** a shared directory that all the team members can access over the network.
+
+**Suggested Time Box:** 10 minutes per platform.
+
+| Workflow | Requests | Things to Watch For |
+|----------|----------|---------------------|
+| **Creating a shared folder that will store Cache and be accessible over the network** | <ol><li> Create a folder.</li><li>Share the folder over the network.</li></ol> | <ul><li>Asset Processor has permission to write to the folder.</li><li>Folder is accessible over the network.</li></ul> |
+
+### Area: Using the Shared Cache Tab
+
+**Project Requirements**
+* None
+
+**Editor Platforms:**
+* Windows
+* Linux
+
+**Product:** Working Asset Cache Server (Shared Cache)
+
+**Suggested Time Box:** 15 minutes per platform.
+
+| Workflow | Requests | Things to Watch For |
+|----------|----------|---------------------|
+| **Set shared cache mode** | <ol><li>Change Shared Cache Mode.</li></ol> | <ul><li>Default mode in inactive.</li><li>Server - The Asset Processor will archive product assets on a remote folder.</li><li>Client - The Asset Processor will attempt to retrieve archive product assets from a remote folder.</li></ul> |
+| **Select the transfer directory via *Select a remote folder*** | <ol><li>Input path to the server cache directory.</li></ol> | <ul><li>Path is saved.</li><li>When the “Save Changes” button is clicked, the system will detect the validity of the transfer directory.</li></ul> |
+| **Manage shared cache patterns** | <ol><li>Create a new pattern.</li></ol> | <ul><li>Pattern can be created.</li><li>Pattern can be named.<li>Pattern type can be changed.</li><li>Pattern attribute can be changed.</li><li>Pattern can be removed using the Trash icon.</ul> |
+| **Save Changes** | <ol><li>Save the made changes.</li></ol> | <ul><li>The Save Changes and Discard buttons become enabled when a change to the settings has been detected.</li><li>The Save Changes commits the changes to a settings file. The Discard button reverts the panel’s values.</li><li>Changes are saved if Asset Processor is reopened.</li><li>The settings file is written to the `{project_folder}/Registry/asset_cache_server_settings.setreg` file.</li><li>If the Remote Folder is set to an invalid folder location, then an error dialog will show up and no settings will be written.</li></ul> |
+
+### Area: Running Asset Processor in Server Mode
+
+**Project Requirements**
+* None
+
+**Editor Platforms:**
+* Windows
+* Linux
+
+**Docs:**
+* [Asset Cache Server](https://www.o3de.org/docs/user-guide/assets/asset-processor/asset-cache-server/)
+* [RegEx](https://en.wikipedia.org/wiki/Regular_expression)
+
+**Game Launcher Supported Platforms:**
+* Windows
+* Linux
+
+**Product:** Asset Processor archiving product assets to a remote folder
+
+**Suggested Time Box:** 30 minutes per platform.
+
+| Workflow | Requests | Things to Watch For |
+|----------|----------|---------------------|
+| **Set shared cache mode to Server** | <ol><li>Change Shared Cache Mode to Server.</li></ol> | <ul><li>Change is saved.</li></ul> |
+| **Select the transfer directory via *Select a remote folder*** | <ol><li>Input path to the server cache directory.</li></ol> | <ul><li>Path is saved.</li><li>Path is detected as valid by the system.</li></ul> |
+| **Add a Wildcard Pattern** | <ol><li>Add a new Pattern.</li><li>Name the pattern.</li><li>Set Pattern Type to Wildcard.</li><li>Set Pattern to "*.fbx" or any other file type.</li></ol> | <ul><li>Pattern is saved.</li><li>Pattern's name and Pattern is valid.</li><li>Pattern is Enabled.</li></ul> |
+| **Add a RegEx Pattern** | <ol><li>Add a new Pattern.</li><li>Name the pattern.</li><li>Set Pattern Type to RegEx.</li><li>Set Pattern to a RegEx expression.</li></ol> | <ul><li>Pattern is saved.</li><li>Pattern's name and RegEx expression is valid.</li><li>Pattern is Enabled.</li></ul> |
+| **Save Changes** | <ol><li>Save the made changes.</li></ol> | <ul><li>Save button can be pressed.</li><li>System detects validity of the transfer directory.</li><li>Asset Processor starts archiving product assets to a remote folder according to the Patterns.</li></ul> |
+
+### Area: Running Asset Processor in Client Mode
+
+**Project Requirements**
+* None
+
+**Editor Platforms:**
+* Windows
+* Linux
+
+**Docs:**
+* [Asset Cache Server](https://www.o3de.org/docs/user-guide/assets/asset-processor/asset-cache-server/)
+* [RegEx](https://en.wikipedia.org/wiki/Regular_expression)
+
+**Product:** Asset Processor retrieving archive product assets from a remote folder.
+
+**Suggested Time Box:** 30 minutes per platform.
+
+| Workflow | Requests | Things to Watch For |
+|----------|----------|---------------------|
+| **Set shared cache mode to Client** | <ol><li>Change Shared Cache Mode to Client.</li></ol> | <ul><li>Change is saved.</li></ul> |
+| **Select the transfer directory via *Select a remote folder*** | <ol><li>Input path to the server cache directory.</li></ol> | <ul><li>Path is saved.</li><li>Path is detected as valid by the system.</li></ul> |
+| **Add a Wildcard Pattern** | <ol><li>Add a new Pattern.</li><li>Name the pattern.</li><li>Set Pattern Type to Wildcard.</li><li>Set Pattern to **.fbx* or any other file type.</li></ol> | <ul><li>Pattern is saved.</li><li>Pattern's name and Pattern is valid.</li><li>Pattern is Enabled.</li></ul> |
+| **Add a RegEx Pattern** | <ol><li>Add a new Pattern.</li><li>Name the pattern.</li><li>Set Pattern Type to RegEx.</li><li>Set Pattern to a RegEx expression.</li></ol> | <ul><li>Pattern is saved.</li><li>Pattern's name and RegEx expression is valid.</li><li>Pattern is Enabled.</li></ul> |
+| **Save Changes** | <ol><li>Save the made changes</li></ol> | <ul><li>Save button can be pressed.</li><li>System detects validity of the transfer directory.</li><li>Asset Processor starts retrieving archive product assets from a remote folder.</li></ul> |
+
+---
+
+## Feature: Missing Dependency Scanner
+
+**Description:** Testing in this area should focus on finding presence of missing dependencies.
+
+### General Docs
+* [Resolving Missing Assets](https://www.o3de.org/docs/user-guide/packaging/asset-bundler/assets-resolving/)
+
+### Common Issues to Watch For
+
+Test guidance will sometimes note specific issues to watch for. The common issues below should be watched for through all testing, even if unrelated to the current workflow being tested.
+- Dependency scanner not working
+- Dependency scanner not finding missing dependencies
+
+### Workflows
+
+### Area: Running Dependency Scanner
+
+**Project Requirements**
+* AssetProcessorBatch present in the build folder. If it is not it can be built using `cmake --build build/<build folder name> --target AssetProcessorBatch --config profile` command from the root engine folder.
+* [testReferenceFile.xml](asset-processor-attachments/testReferenceFile.xml) downloaded.
+
+**Editor Platforms:**
+* Windows
+* Linux
+
+**Product:** Finding presence of missing dependencies
+
+**Suggested Time Box:** 15 minutes per platform.
+
+| Workflow | Requests | Things to Watch For |
+|----------|----------|---------------------|
+| **Add test file** | <ol><li>Place *testReferenceFile.xml* to Asset folder of the Project folder.</li><li>Launch Asset Processor for the project.</li><li>Wait for all Assets to be processed.</li><li>Shut down Asset Processor.</li></ol> | <ul><li>Asset errors.</li><li>Runtime errors of Asset Processor.</li></ul> |
+| **Run Missing Dependency Scanner** | <ol><li>Run `AssetProcessorBatch --project-path = %project-path% --zeroAnalysisMode` command.</li></ol> | <ul><li>Missing Dependency Scanner startup errors.</li><li>Missing Dependency Scanner runntime errors.</li><li>`-dsp` flag is functional.</li><li>`-dsp` flag is filtering Assets as expected.</li><li>Dependency Scanner shows missing dependencies.</li></ul> |
+| **Delete Asset with missing Dependency** | <ol><li>Remove the `testReferenceFile.xml` file from Assets.</li><li>Re-run Asset processor.</li><li>Shut down Asset Processor.</li><li>Run Dependency Scanner again.</li></ol> | <ul><li>Dependency Scanner does not output errors concerning the deleted file.</li></ul> |
+
+### Area: Finding a false positive in the missing dependency scanner
+
+**Project Requirements**
+* AssetProcessorBatch present in the build folder. If it is not it can be built using `cmake --build build/<build folder name> --target AssetProcessorBatch --config profile` command from the root engine folder.
+
+**Editor Platforms:**
+* Windows
+* Linux
+
+**Product:** Verified a presence of false possitive missing dependency.
+
+**Suggested Time Box:** 15 minutes per platform.
+
+| Workflow | Requests | Things to Watch For |
+|----------|----------|---------------------|
+| **Identify a false positive missing dependenct asset** | <ol><li>Go to *Tools* > *Asset Editor* in the Editor.</li><li>Open the `exclude.filetag` asset.</li><li>Verify that it contains a *File Tag Map* with `editoronly` *File Tag* included (for example `*.slice`)</li><li>Open *Asset Processor* and navigate to *Assets* > *Product Assets*.</li><li>Find a `*.slice` asset (for example `pc/engineassets/slices/defaultlevelsetup.slice`) using search bar and select it.</li><li>In the right pane click the *Scan file* button.</li></ol> | <ul><li>*Asset Editor* can be opened.</li><li>`exclude.filetag` asset can be opened.</li><li>EditorOnly tag asset can be located.</li><li>`File matches EditorOnly or Shader tag, ignoring for missing dependencies search` is printed to the log under the *Scan file* button.</li></ul> |
+
+---
+
+## Feature: Virtual File System
+
+Testing in this area should focus on the functionality of running the Android application in assets by Virtual File System (VFS) packaging mode.
+
+### Common Issues to Watch For
+
+Test guidance will sometimes note specific issues to watch for. The common issues below should be watched for through all testing, even if unrelated to the current workflow being tested.
+- Be aware of network connection errors from the mobile device to Asset Processor running on PC
+- Rendering artifacts when running the deployed level on the Android devices
+- Asserts and errors that appear in the Android log while running the deployed level
+- Immediate crashes when launching the app on the Android device
+- Crashes that occur after some time leaving the app running
+
+### Editor Platforms:
+
+- Windows
+
+### Game Launcher Supported Platforms:
+
+- Android
+
+### Documents and Common Terms
+
+* [O3DE User Guide: Android Support for O3DE](https://www.o3de.org/docs/user-guide/platforms/android/)
+
+### Area: Build Android in VFS packaging mode
+
+### Project Requirements
+* Create a new default project.
+* Create `<project-path>/Registry/AssetProcessor.setreg` file to generate android assets in the cache:
+````
+{
+    "Amazon": {
+        "AssetProcessor": {
+            "Settings": {
+                "Platforms": {
+                    "android": "enabled"
+                }
+            }
+        }
+    }
+}
+````
+* Make sure `<project-path>/Platform/Android/android_project.json` exists and that it has android settings section in it. Example:
+````
+"android_settings": {
+    "package_name": "org.o3de.DefaultProject",
+    "version_number": 1,
+    "version_name": "1.0.0.0",
+    "orientation": "landscape"
+},
+````
+* Build the default project.
+* Open the Editor and create a default level.
+* Create `<project-path>/Registry/autoexec.game.setreg` file to set the starting level:
+````
+{
+    "O3DE": {
+        "Autoexec": {
+            "ConsoleCommands": {
+                "LoadLevel": "DefaultLevel"
+            }
+        }
+    }
+}
+````
+* Create `<project-path>/Registry/bootstrap.setreg` file to enable remote filesystem on Android:
+````
+{
+    "Amazon": {
+        "AzCore": {
+            "Bootstrap": {
+                "android_remote_filesystem": 1,
+                "android_connect_to_remote": 1,
+                "android_wait_for_connect": 1
+            }
+        }
+    }
+}
+````
+* Run Asset Processor and wait until all assets have been processed.
+
+**Product:** Android application running in VFS packaging mode.
+
+**Suggested Time Box:** 3 hours for requirements + 1 hour for the workflow.
+
+| Workflow | Requests | Things to Watch For |
+|----------|----------|---------------------|
+| **Assets by VFS (minimum assets in sdcard)** | <ol><li>Uninstall the default project's app from device (if previously installed).</li><li>Follow the steps from https://www.o3de.org/docs/user-guide/platforms/android/generating_android_project_windows/ to build and deploy with the following alterations:<ol type="a"><li>Use the default project created instead of `o3de-atom-sampleviewer`.</li><li>Use `o3de-build/android_vfs` for `%O3DE_BUILD_ROOT%` instead of `o3de-build`.</li><li>When running `generate_android_project.py` command use `VFS` for `%O3DE_ANDROID_ASSET_MODE%` and remove `--include-apk-assets`.</li><li>When running `deploy_android.py` command use `BOTH` for `%O3DE_ANDROID_DEPLOY_TYPE%`.</li></ol><li>With the mobile device connected to PC run this command from the console: `adb reverse tcp:45643 tcp:45643`. <p>**IMPORTANT**: This command has to be run every time the adb connection is lost or killed, which is each time the cable is plugged, but also it can happen often without knowing. If when running the app it shows refuse-connections messages in the log, that's a signal that adb reverse command needs to be run again before running the app.</p></li></ol> | <ul><li>Binaries will be inside the android APK package. Unzip `O3DE_BUILD_ROOT/app/build/outputs/apk/profile/app-profile.apk` and verify `lib/arm64-v8a` folder contains `.so`.</li><li>Minimum assets necessary to launch the app will be inside the device's sdcard (not in the APK package). Go to `/sdcard/Android/data/org.o3de.DefaultProject/files` to check they are there. Minimum assets are:<ol type="a"><li>`engine.json` file.</li><li>Bootstrap `.setreg` files.</li><li>Config files inside `config` folder.</li></ol></li><li>All the assets will be obtained via network connecting to the PC and read from `<project-path>/Cache/android/`.</li><li>After running the app, the execution's log and user folder will be generated in PC (`<project-path>/user/`).</li></ul> |
+
+### Area: Run default level on Android device
+
+### Project Requirements
+* You've built Android in Assets by VFS packaging mode.
+
+**Game Launcher Supported Platforms:**
+* Android
+
+**Product:** A default level is launched correctly on Android devices in Assets by VFS packaging mode.
+
+**Suggested Time Box:** 10 minutes.
+
+| Workflow | Requests | Things to Watch For |
+|----------|----------|---------------------|
+| **Run default level** | <ol><li>Follow the build steps from the previous area in this document.</li><li>Launch the default project's app in the android device.</li><li>Use Android Studio (or any other method) to check the log output from the default project's app. Select the `O3DE_BUILD_ROOT` folder when opening Android Studio to open the project and after all the processing is done the Logcat tool window will be available and once the app is running on the device you can filter the output by app.| <ul><li>The level opens successfully.</li><li>It doesn't crash after a while (for example a couple of minutes).</li><li> The level is rendered correctly without artifacts.</li><li>Framerate is 15fps or above. This depends on the device used, but the key thing to look for is that there are no spamming errors or warnings in the log indicating that something wrong is happening every frame.</li></ul> |
+
+---

+ 148 - 0
testing-guidance/workflow-tests/assetpipeline/assetpipeline-scenepipeline-workflow-tests.md

@@ -0,0 +1,148 @@
+# Scene Pipeline Workflow Tests:
+
+Testing in this area focuses on the functionality of:
+* **Scene Processing Pipeline**
+  * Scene API
+    * Scene Graph
+    * Scene Builder
+    * User Defined Properties
+  * Scene Settings Files (Scene Manifest)
+  * Scene Settings Tool
+
+
+
+## Common Issues to Watch For:
+
+Test guidance will sometimes note specific issues to watch for. The common issues below should be watched for through all testing, even if unrelated to the current workflow being tested.
+1. Console log errors/warnings/spam 
+2. Asserts 
+3. Improperly rendered or assembled scenes 
+4. HotReloading issues
+
+### Common Terms:
+
+###### Base Resources:
+* [Asset Processor](https://www.o3de.org/docs/user-guide/assets/asset-processor/) <br> 
+* [Asset Cache](https://www.o3de.org/docs/user-guide/assets/pipeline/asset-cache/) <br>
+* [O3DE Editor](https://www.o3de.org/docs/user-guide/editor/) <br>
+  * [Console](https://www.o3de.org/docs/user-guide/editor/console/) <br>
+
+###### Scene Processing Pipeline:
+* [Scene API](https://www.o3de.org/docs/user-guide/assets/scene-pipeline/scene-api/) <br>
+  * [Scene Graph](https://www.o3de.org/docs/user-guide/assets/scene-pipeline/scene-graph/) <br>
+  * [Scene Builder](https://www.o3de.org/docs/user-guide/assets/scene-pipeline/scene-builder/) <br>
+  * [User Defined Properties](https://www.o3de.org/docs/user-guide/assets/scene-pipeline/scene-api-udp/) <br>
+* [Source Scene Assets](https://www.o3de.org/docs/user-guide/assets/scene-settings/) <br>
+  * [Scene Format Support](https://www.o3de.org/docs/user-guide/assets/scene-settings/scene-format-support/) <br>
+* [Scene Settings File / Scene Manifest](https://www.o3de.org/docs/user-guide/assets/scene-pipeline/scene-manifest/) <br>
+* [Scene Settings Tool](https://www.o3de.org/docs/user-guide/assets/scene-settings/scene-settings/) <br>
+
+---
+
+## Feature: Scene Settings Tool
+
+**Project Requirements:** Source scene assets with meshes, actors, physx, and other supported settings properties.
+
+**Resources:** <br>
+ [Scene Settings](https://www.o3de.org/docs/user-guide/assets/scene-settings/) <br>
+ [3D Scene Format Support](https://www.o3de.org/docs/user-guide/assets/scene-settings/scene-format-support/) <br>
+ [Scene Settings Interface](https://www.o3de.org/docs/user-guide/assets/scene-settings/interface/)
+
+### Area: Process, Modify, and Load Scene Assets
+
+**Product:** Successfully processed scene assets can be added to a level and rendered.
+
+**Suggested Time Box:** 90 Minutes
+
+| Workflow | Requests | Things to Watch For |
+|----------|----------|---------------------|
+| **Launch the Editor** | <ol><li>Editor and Asset Processor open.</li><li>Asset Processor processes scene files without failing.</li></ol> | <ul><li>Should not experience excessive job analysis scanning.</li><li>Should not experience excessive processing time for files.</li><li> Should not encounter asset processor errors.</li><li>Asset Processor should successfully process source files into the cache as product files.</li></ul> |
+| **Open Asset Browser from processed scene asset in Asset Processor** | <ol><li>Asset Browser panel opens within Editor.</li></ol> | <ul><li>Should not report any console errors.</li></ul> |
+| **Search for scene assets and open the scene settings tool** | <ol><li>Right-click context menu.</li><li>Double click.</li><li>Use various scene assets with different combinations of meshes, actors, PhysX, and other supported scene settings properties.</li></ol> | <ul><li>Should not report any console errors.</li><li>Scene Settings properties should load correctly.</li><li>File progress processing report should display correctly.</li></ul> |
+| **Change Settings Properties** | <ol><li>Modify mesh properties.</li><li>Modify actor properties.</li><li>Modify PhysX properties.</li></ol> | <ul><li>Should not report any console errors.</li><li>Should not encounter any asset processing errors.</li></ul> |
+| **Create a new level and add a scene to the level** | <ol><li>Drag & drop into editor viewport from Asset Browser.</li><li>Adding to an entity component.</li></ol> | <ul><li>Scene should load in correctly.</li><li>Scene should render correctly.</li></ul> |
+| **Enter Game Mode** | <ol><li>Enter Game Mode in Editor (for example *Ctrl + G*).</li></ol> | <ul><li>Scene should load in correctly.</li><li>Scene should render correctly.</li><li>Any scene behaviors should render correctly.</li></ul> |
+
+### Area: Loading and Viewing Characters, Motions, and Morph Targets
+
+**Product:** Successfully processed scene assets can be added to a level and rendered.
+
+**Suggested Time Box:** 60 Minutes
+
+| Workflow | Requests | Things to Watch For |
+|----------|----------|---------------------|
+| **Open a character in Animation Editor** | <ol><li>Can be done without an open level.</li><li>Scene has a skinned mesh, actor, motion, and morph target animation</li></ol> | <ul><li>Should not report any console errors.</li><li>Character should renders correctly.</li></ul> |
+| **Open up Animation layout** | <ol><li>Go to *Layout* > *Animation*.</li></ol> | <ul><li>Should not report any console errors.</li></ul> |
+| **Load and Play a motion** | <ol><li>Can also load multiple motions with shift clicking.</li></ol> | <ul>Should not report any console errors.</li><li>Motion should load correct.</li><li>Model should render correctly.</li><li>Motion should play correctly.</li></ul> |
+| **Open up the Character layout** | <ol><li>Go to *Layout* > *Character*.</li></ol> | <ul><li>Should not report any console errors.</li></ul>  |
+| **Select the the morph targets** | <ol><li>Single Morph.</li><li>Multiple morphs.</li></ol> | <ul><li>Model should render correctly.</li></ul> |
+| **Adjust the morph targets** | <ol><li>Move the sliders for the selected morph targets.</li></ol> | <ul><li>Morph should render correctly.</li><li>Model should render correctly.</li></ul> |
+
+---
+
+### Area: Scene Manifest
+
+**Description:** Testing in this Area will focus on .fbx files, its manifest and processing them trough Asset Processor..
+
+**Project Requirements:**
+
+* An .fbx file that is not added to the project and has no settings file (.fbxassetinfo file).
+* Python Asset Builder gem enabled in the project.
+
+**Platforms:**
+
+* Windows
+* Linux
+
+**Product:**  Assets that can be used in the Editor and be configured via its manifest.
+
+**Suggested Time Box:** 60 Minutes
+
+| Workflow | Requests | Things to Watch For |
+|----------|----------|---------------------|
+| **Using assets that do not have scene manifest** | <ol><li>Import an .fbx file to the project.</li><li>Find imported asset in the Asset Browser.</li><li>Drag it into the Viewport.</li><li>In the Asset Browser, click RMB on the imported fbx and select *Edit Scene Settings* from dropdown menu.</li></ol> | <ul><li>Asset is imported to the project.</li><li>User is able to create entity that uses the imported asset.</li><li>Asset can be opened in Scene Settings.</li><li>Scene Settings shows correct information.</li><li>Asset Processor process .fbx file without issues and does not fail any job while working with the .fbx file.</li><li>Opening the asset in Scene Settings does not create its .fbxassetinfo file.</li><li>O3DE uses default settings written in the DCC tool used to create the asset.</li></ul> |
+| **Creating scene manifest** | <ol><li>In the Asset Browser, find an .fbx file that does not have scene manifest.</li><li>Click RMB on it and select *Edit Scene Settings* from dropdown menu.</li><li>Edit the fbx, e.g. add modifier.</li><li>Save changes.</li></ol> | <ul><li>Asset can be opened in Scene Settings.</li><li>Asset can be modified in Scene Settings.</li><li>Saving modifications does not fail in Asset Processor and Scene Settings.</li><li>Scene manifest (`.fbxassetinfo` file) is created after modifying the fbx file in Scene Settings.</li></ul> |
+| **Changing scene manifest in Scene Settings** | <ol><li>Open in Scene Settings an fbx that have its own manifest.</li><li>Add a new Mesh group.</li><li>Change the name of the created mesh group.</li><li>Save changes.</li><li>Create a new mesh entity in the Viewport.</li><li>As a mesh assign a newly created mesh model.</li></ol> | <ul><li>Asset can be opened in Scene Settings.</li><li>Asset can be modified in Scene Settings.</li><li>Saving modifications does not fail in Asset Processor and Scene Settings.</li><li>Changes made in Scene Settings are applied in asset and can be used in the scene.</li></ol> |
+| **Changing scene manifest manually** | <ol><li>Open in Scene Settings an fbx that have its own manifest.</li><li>Add Comment modifier.</li><li>Write any comment in the comment box, e.g. "Test123".</li><li>Save Changes and close the Scene Settings.</li><li>Find the `.fbxassetinfo` file under project's root.</li><li>Open the file in text editor.</li><li>Find comment you created.<ul><li>Easy way to find it is via Search function.</li></ul></li><li>Change the comment, e.g. "Test123" to "Test124".</li><li>Open the fbx in the Scene Settings again.</li></ol> | <ul><li>Asset can be opened in Scene Settings.</li><li>Asset can be modified in Scene Settings.</li><li>Saving modifications does not fail in Asset Processor and Scene Settings.</li><li>Changing the scene manifest results in Asset Processor reprocessing the asset.</li></ul> |
+| **Deleting scene manifest** | <ol><li>Open in Scene Settings an fbx that have its own manifest.</li><li>Add a new Mesh group.</li><li>Change the name of the created mesh group.</li><li>Save changes and close the Scene Settings.</li><li>Verify that new mesh model was created</li><li>Find the `.fbxassetinfo` file under project's root.</li><li>Delete it.</li><li>Open the fbx in the Scene Settings again.</li></ol> | <ul><li>Asset can be opened in Scene Settings.</li><li>Asset can be modified in Scene Settings.</li><li>Saving modifications does not fail in Asset Processor and Scene Settings.</li><li>Deleting the manifest results in Asset Processor reprocessing the asset.</li><li>After deleting the scene manifest, asset uses the default settings written in the DCC tool used to create the asset.</li></ul> |
+| **Using python scripts** | <ol><li>In the Asset Browser find the `geom_group.fbx`.</li><li>Open it in Scene Settings.</li><li>Go to *File* > *Reset* setting to default.</li><li>Make chnges to the fbx, e.g. create a comment using Comment modifier.</li><li>Save changes.</li>Go to *File* > *Assign script*.</li><li>Select python script to overrite scene manifest.<ul><li>You can find scripts under `Project\Gem\PythonTests\PythonAssetBuilder`.</li></ul></li></ol> | <ul><li>Assets and files provided in gems are available in the project.</li><li>Asset can be opened in Scene Settings.</li><li>Settings of the fbx can be resetted to default.</li><li>Asset can be modified in Scene Settings.</li><li>Python script can be assign to the fbx.</li><li>Settings of the fbx are overwritten by python script.</li><li>Modifying the fbx results in Asset Processor and Scene Settings to reprocess the file successfully.</li><li>Editor remains stable.</li></ul> |
+
+---
+
+### Area: User Defined Properties
+
+**Project Requirements:**
+* An asset to be used with a User Defined Property (UDP). For example a material created in the Material Editor and saved to the `<project>/Assets/` folder. This can be a simple `Standard PBR` material with `Base Color` > `Color` changed to `0,255,0` for easy recognition. 
+* An .fbx asset with a UDP prepared in the DCC tool. For example in Blender this could be a Cube with no material assigned, `Object Properties` > `Custom Properties` set to `o3de_default_material` with value `assets/materialname.azmaterial` (if the material's path is `<project>/Assets/MaterialName.material`) and exported with the `Include` > `Custom Properties` enabled.
+
+**Platforms:**
+* Windows
+* Linux
+
+**Product:** An asset imported from a DCC tool utilizing a material from the project specified in the UDP.
+
+**Suggested Time Box:** 20 Minutes
+| Workflow | Requests | Things to Watch For |
+|----------|----------|---------------------|
+| **Verify that the Editor utilizes UDPs** | <ol><li>Verify that the custom material mentioned in the **Project Requirements** section is processed by the *Asset Processor*.</li><li>Verify that the custom .fbx asset with UDP mentioned in the **Project Requirements** section is processed by the *Asset Processor*.</li><li>Find the custom .fbx asset in the *Asset Browser*, then drag and drop it into the Viewport.</li></ol> | <ul><li>Custom material can be created in the *Material Editor* and is properly processed by the *Asset Processor*.</li><li>Custom .fbx is properly processed by the *Asset Processor*.</li><li>Custom .fbx uses the custom material after being dragged and dropped into the *Viewport* with no further adjustments.</li></ul> |
+
+---
+
+### Area: Soft Naming
+
+**Project Requirements:**
+* An .fbx asset with meshes utilizing soft naming prepared in the DCC tool. For example in Blender this could be two Cube meshes side by side named `Cube_lod0` and `Cube_lod1` respectively in the `Scene Collection` > `Collection`.
+
+**Platforms:**
+* Windows
+* Linux
+
+**Product:**  An asset imported from a DCC tool automatically adjusting LODs in the Editor due to mesh soft naming in that DCC tool.
+
+**Suggested Time Box:** 20 Minutes
+| Workflow | Requests | Things to Watch For |
+|----------|----------|---------------------|
+| **Verify that the custom asset is processed** | <ol><li>Verify that the custom .fbx asset with _lod mesh soft name suffixes mentioned in the **Project Requirements** section is processed by the *Asset Processor*.</li></ol> | <ul><li>Custom .fbx is properly processed by the *Asset Processor*.</li></ul> |
+| **Verify that the soft name suffixes are utilized in the Editor** | <ol><li>Create an entity and add a *Mesh* component to it.</li><li>Assign the custom .fbx to the *Mesh* component's *Model Asset* property.</li><li>With the *Mesh* entity in view, move the camera close to it and move the camera away from it.</li></ol> | <ul><li>An entity with *Mesh* component can be created.</li><li>Custom .fbx can be assigned to the *Model Asset* property.</li><li>If the custom .fbx is setup as described in the **Project Requirements** section, only one cube out of two should be visible simultaneously - one when the camera is close to the *Mesh* entity and one when the camera is far from the *Mesh* entity.</li></ul> |
+
+---

+ 0 - 158
testing-guidance/workflow-tests/assetpipeline/assetpipeline-workflow-tests.md

@@ -1,158 +0,0 @@
-# Asset Pipeline Workflow Tests:
-
-Testing in this area focuses on the functionality of the Asset Processor, Asset Bundler, Scene Processing, and Asset Validation.
-
-## Common Issues to Watch For:
-
-Test guidance will sometimes note specific issues to watch for. The common issues below should be watched for through all testing, even if unrelated to the current workflow being tested.
-1. Console log errors/warnings/spam 
-2. Asserts 
-3. Improperly rendered scenes
-
-### Common Terms:
-
-**Base Resources:** <br>
- [Asset Pipeline O3DE Resources](https://www.o3de.org/docs/user-guide/assets/pipeline/) <br>
- [Asset Pipeline Concepts and Terms](https://www.o3de.org/docs/user-guide/packaging/asset-bundler/concepts/) <br>
-
-**In-depth Resources:** <br>
- [Asset Processor](https://www.o3de.org/docs/user-guide/assets/asset-processor/) <br> 
- [Asset Cache](https://www.o3de.org/docs/user-guide/assets/pipeline/asset-cache/) <br>
- [Asset Bundler](https://www.o3de.org/docs/user-guide/packaging/asset-bundler/)
- [O3DE Editor](https://www.o3de.org/docs/user-guide/editor/) <br>
- [Source Assets](https://www.o3de.org/docs/user-guide/assets/pipeline/source-assets/) <br> 
- [Product Assets and Asset Processing](https://www.o3de.org/docs/user-guide/assets/pipeline/asset-processing/) <br>
- [Job Logs](https://www.o3de.org/docs/user-guide/assets/asset-processor/debugging/#view-asset-processor-logs) <br>
- [Scan Directories](https://www.o3de.org/docs/user-guide/assets/pipeline/scan-directories/) <br>
- [Console](https://www.o3de.org/docs/user-guide/editor/console/) <br>
- [Source Dependencies](https://www.o3de.org/docs/user-guide/assets/pipeline/asset-dependencies-and-identifiers/#source-and-job-dependencies) <br>
- [Product Dependencies](https://www.o3de.org/docs/user-guide/assets/pipeline/asset-dependencies-and-identifiers/#product-dependencies) <br>
- 
- 
-
----
-
-## Feature: Asset Processor
-
-**Project Requirements:** Any project with available source files can be used.
-
-**Resources:** <br>
- [Asset Processor Interface](https://www.o3de.org/docs/user-guide/assets/asset-processor/interface/) <br>
- [Asset Processor Configuration](https://www.o3de.org/docs/user-guide/assets/asset-processor/configuration/)
-
-### Area: Asset Ingestion | Job and Product Validation
-
-**Product:** Successfully processed assets are in cache and visible in the Asset Browser.
-
-**Suggested Time Box:** 20 Minutes
-
-| Workflow                                                                | Requests                                                                                                                   | Things to Watch For                                                                                                                                                                                          |
-|-------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| Launch Asset Processor.                                                 | Source assets already exist within a project scan directory.                                                                  | -   Excessive Job Analysis Scanning<br> -   Excessive Processing time for files<br> -   Asset Processor Errors<br> -   Asset Processor successfully processing source files into the cache as product files  |
-| Add new assets to the project.                                          | Create and place new assets within a project scan directory:<br> -  Supported source assets<br> -   Unsupported Source assets | -   Asset Processor successfully processing supported source assets and generating product assets in the cache<br> -   AP does not process unsupported source assets                                         |
-| Open new asset Job Log from Jobs tab right-click context menu.          |	Opens the log file up in filesystem default program for .log files.                                                        | -   Asserts on opening the log file<br> -   Job log file has unnecessary/unhelpful log spam<br> -   Job log file is empty on a job with warnings, errors, or failures                                        |
-| Open new asset in Asset Browser from Jobs tab right-click context menu. | Open up Asset Browser<br> *Note: Editor must already be open.*                                                             | Processed assets can be discovered and interacted with in the Asset Browser.                                                                                                                                 |
-
-### Area: Source and Product Asset GUI Navigation
-
-**Product:**  Source Asset and Product Asset are discoverable.
-
-**Suggested Time Box:** 10 Minutes
-
-|Workflow                                                                           | Requests                                                                                                         | Things to Watch For                                                                                                                                                                                                                                                       |
-|-----------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| From Jobs tab jump to source asset from right-click context menu.                 | Source Assets tab is opened to the the selected source asset.                                                    | Source asset isn't found.                                                                                                                                                                                                                                                 |
-| Jump to a product asset from selected asset's right-click context menu.           | Product Assets tab is opened to the the selected source asset.                                                   | Product asset isn't found.                                                                                                                                                                                                                                                |
-| Jump back to Source Asset from selected asset's info panel "Source Asset" button. | Source Assets tab is opened to the the selected source asset.                                                    | Source asset isn't found.                                                                                                                                                                                                                                                 |
-| Reprocess asset from selected Source Asset's right-click context menu.            | -   Asset processor performs job analysis on file<br> -   Asset is reprocessed<br> -   Asset is is product cache | -   Excessive Job Analysis Scanning<br> -   Excessive processing time for files<br> -   Asset processor Errors<br> -   Asset Processor successfully reprocesses assets and stores product assets them in the Asset Cache<br> -   New Job Log and Product files are output |
-| Open file in Explorer from selected asset's right-click context menu.             | File Explorer is opened to the source file's location.                                                           | -   Wrong folder is opened<br> -   Folder fails to open                                                                                                                                                                                                                   |
-
----
-
-## Feature: Scene Settings Tool
-
-**Project Requirements:** Source scene assets with meshes, actors, physx, and other supported settings properties.
-
-**Resources:** <br>
- [Scene Settings](https://www.o3de.org/docs/user-guide/assets/scene-settings/) <br>
- [3D Scene Format Support](https://www.o3de.org/docs/user-guide/assets/scene-settings/scene-format-support/) <br>
- [Scene Settings Interface](https://www.o3de.org/docs/user-guide/assets/scene-settings/interface/)
-
-### Area: Process, Modify, and Load Scene Assets
-
-**Product:** Successfully processed scene assets can be added to a level and rendered.
-
-**Suggested Time Box:** 90 Minutes
-
-|Workflow                                                            | Requests                                                                                                                                                                               | Things to Watch For                                                                                                                                                                                         |
-|--------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| Launch the Editor.                                                 | Editor and Asset Processor open.<br> Asset Processor processes scene files without failing.                                                                                            | -   Excessive Job Analysis Scanning<br> -   Excessive Processing time for files<br> -   Asset Processor Errors<br> -   Asset Processor successfully processing source files into the cache as product files |                                                                                                                                    |
-| Open Asset Browser from processed scene asset in Asset Processor.  | Asset Browser panel opens within Editor.                                                                                                                                               | - Console errors                                                                                                                                                                                            |
-| Search for scene assets and open the scene settings tool.          | -   Right-click context menu<br> -   Double click<br> -   Use various scene assets with different combinations of meshes, actors, PhysX, and other supported scene settings properties | -   Console errors<br> -   Scene Settings properties load up<br> EG: Meshes, Actors, PhysX<br> -   File Progress Processing report                                                                          |
-| Change Settings Properties.                                        | -   Modify mesh properties<br> -   Modify actor properties<br> -   Modify PhysX properties                                                                                             | -   Console Errors -   Asset Processing errors                                                                                                                                                              |
-| Create a new level and add a scene to the level.                   | -   Drag & drop into editor viewport from Asset Browser<br> -   Adding to an entity component                                                                                          | -   Scene loads in<br> -   Scene renders correctly                                                                                                                                                          |
-| Enter Game Mode.                                                   |                                                                                                                                                                                        | -   Scene loads in<br> -   Scene renders correctly<br> -   Any scene behaviors render correctly                                                                                                             |
-
-### Area: Loading and Viewing Characters, Motions, and Morph Targets
-
-**Product:** Successfully processed scene assets can be added to a level and rendered.
-
-**Suggested Time Box:** 60 Minutes
-
-|Workflow                               | Requests                                                                                                          | Things to Watch For                                                                                      |
-|---------------------------------------|-------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------|
-| Open a character in Animation Editor. | -   Can be done without an open level<br> -   Scene has a skinned mesh, actor, motion, and morph target animation | -   Console errors<br> -   Character fails to render                                                     |
-| Open up Animation layout.             | Layout > Animation                                                                                                | -   Console errors                                                                                       |
-| Load and Play a motion.               | - Can also load multiple motions with shift clicking.                                                             | -   Console errors<br> -   Motion fails to load<br> -   Model render breaks<br> -   Motion fails to play |
-| Open up the Character layout.         | Layout > Character                                                                                                | -   Console errors                                                                                       |
-| Select the the morph targets.         | -   Single Morph<br> -   Multiple morphs                                                                          | -   Model render breaks                                                                                  |
-| Adjust the morph targets.             | Move the sliders for the selected morph targets.                                                                  | -   Morph is rendered correctly<br> -   Model render breaks                                              |
-
----
-
-## Feature: Asset Bundler GUI and Asset Validation
-
-**Project Requirements:** Any project with Asset Validation gem and multiple platforms enabled.
-
-**Resources**: <br>
- [Validating Seedpaths and Seedlists](https://www.o3de.org/docs/user-guide/packaging/asset-bundler/verifying-bundles/asset-validation-gem/) <br>
- [Validating Bundled Assets](https://www.o3de.org/docs/user-guide/packaging/asset-bundler/verifying-bundles/bundle-mode/)
-
-**Note:** You will need to enter game mode for Seedmode and BundleMode to report missing assets.
-
-### Area: Validating Seedpaths and Seedlists in Seed Mode
-
-**Product:** Seedlists with all assets ready for packaging.
-
-**Suggested Time Box:** 30 Minutes
-
-|Workflow                               | Requests                                                                                                                                                  | Things to Watch For                                                                                                                                                                             |
-|---------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| Launch the Editor and load a level.   | -   Create a new level<br> -   Load an existing level                                                                                                     | -   Console errors<br> -   Asset Validation warings when neither seed mode nor bundle mode are enabled                                                                                          |
-| Enable Seed mode and enter game mode. | -   Have no assets in the level<br> -   Have default assets in the level<br> -   Have custom assets in the level<br> -   Add new assets                   | -   Assets reported missing when no assets are loaded<br> -   Assets not reported as missing when default or custom assets are preset<br> -   Excluded assets should not be reported as missing |
-| Add seedpath.                         | -   Add seedpath for level<br> -   Add seedpath for individual assets present in level<br> -   Add seedpath for assets not currently present in the level | -   Added assets and their dependencies are still reported missing<br> -   Added seedpaths not present in level are reported missing                                                            |
-| Remove a seedpath.                    | -   Remove seedpath for default assets<br> -   Remove seedpath for custom assets<br> -   Remove seedpath for asset not present in level                   | -   Removed seedpath of asset not present in level is not reported<br> -   Removed seedpath of asset present in level reports a missing asset                                                   |
-| Create a seedlist.                    | -   Include assets from the previous seedpath                                                                                                             |                                                                                                                                                                                                 |
-| Add a seedlist.                       |                                                                                                                                                           | -   Seedlist assets present in level no longer reported as missing <br> -   Seedlist assets not present in the level are not reported                                                           |
-| Remove a seedlist.                    |                                                                                                                                                           | - Seedlist assets present in level are once again reported as missing                                                                                                                           |
-
-### Area: Bundling and Validating Assets in Bundle Mode
-
-**Product:** Successfully create bundles from an assetlist and validate missing assets in a level. 
-
-**Suggested Time Box:** 90 Minutes
-
-|Workflow                                                                               | Requests                                                                                                                                                 | Things to Watch For |
-|---------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------|
-| Generate a new seedlist and add/edit assets in the seedlist.                          | -   Saved to it's default directory<br> -   Saved to a different directory<br> -   Populated with assets from different platforms                        | -   Fails to create seedlist<br> -   Fails to add assets to seedlist<br> -   Fails to save after adding/removing assets to/from existing seedlist<br> -   Console errors<br> -   Duplicate seedlist entries in GUI                                                                    |
-| Generate an assetlist from a seedlist file.                                           | -   Created of one or more seedlist files<br> -   Created from Default Seedlists<br> -   Created for different platforms                                 | -   Fails to create assetlist<br> -   Fails to populate assetlist with asset dependencies<br> -   Console errors<br> -   Unable to override existing assetlists<br> -   Duplicate assetlist entries in GUI                                                                            |
-| Generate a rule and add steps.                                                        | -   Add Multiple steps | -   Fails to create rule<br> -   Fails to update rule with saved steps<br> -   Steps fail to populate information when adding a seedlist<br> -   Console errors<br> -   GUI fails to update                                                                                                                                                                                                                             |
-| Run a rule to generate an assetlist.                                                  | -   Run on multiple platforms simultaneously<br> -   Saved to it's default directory<br> -   Saved to a different directory                              | -   Rule's operation is not applied to assetlist<br> -   Fails to create assetlist<br> -   Fails to populate assetlist with asset dependencies<br> -   Console errors<br> -   Unable to override existing assetlists<br> -   Duplicate assetlist entries in GUI                       |
-| Generate a bundle from an assetlist.                                                  | -   Generate bundles for different platforms                                                                                                             | -   Bundle fails to generate<br> -   Console errors                                                                                                                                                                                                                                   |
-| Verify bundle creation in "Completed Bundles" tab.                                    |                                                                                                                                                          | -   GUI fails to update<br> -   Console Errors<br> -   Bundle information is displayed correctly                                                                                                                                                                                      |
-| Launch Editor, create a level, and add assets.                                        | -   Use assets included in the generated bundles<br> -   Use assets not included in the generated bundles                                                |                                                                                                                                                                                                                                                                                       |
-| Enable Bundle Mode, Load Bundles, and Enter Game Mode.                                | -   Enable Bundle Mode in Log, Warning, or Error Mode<br> - Load bundles after enabling Bundle Mode<br> -   Use addseedpath and listknown asset commands | -   Console errors<br> -   Missing from bundle text correctly displays assets in the level missing from mounted bundles<br> -   Listknown command displays assets and dependencies in from added seedpath<br> -   Missing files are displayed in the console after entering Game Mode |
-| Add missing assets to a seedlist and proceed through the flow of generating a bundle. | -   Create a new seedlist<br> -   Update an existing seedlist                                                                                            | -   Fails to create seedlist<br> -   Fails to add assets to seedlist<br> -   Fails to save after adding assets to existing seedlist<br> -   Console errors<br> -   Duplicate seedlist entries in GUI                                                                                  |
-| Reload Bundles and Verify Missing Assets.                                             |                                                                                                                                                          | -   Console errors<br> -   Missing from bundle text correctly displays assets in the level missing from mounted bundles<br> -   Assets added via the new bundle are no longer reported as "missing"<br> -   Missing files are displayed in the console after entering Game Mode       |
-
----

+ 0 - 20
testing-guidance/workflow-tests/create-a-gem/create-a-gem-workflow-tests.md

@@ -1,20 +0,0 @@
-# Create A Gem
-
-These workflows center around testing the basic functionality of the Project Manager gem creation tools.
-
-## Common Issues
-
-*   Dialogs do not open or progress as expected
-*   Created gems do not immediately refresh in gem catalog list
-
-## Workflows
-
-| Workflow                               | Steps                                                                                                                                                                                                          | Expectations                                                                                                                                                                                                                                                                               |
-|----------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| Launch Create a Gem experience         | 1.  Enter the Gem Catalog<br>2.  Select the hamburger menu in the top right corner<br>3.  Select "Create a New Gem"                                                                                            | Dialog changes to Create a New Gem step 1 "Gem Setup"                                                                                                                                                                                                                                      |
-| Step 1 - Gem Setup Options             | 1.  Launch the Create a Gem experience<br>2.  Observe the options in Step 1                                                                                                                                    | Dialog displays options for:<br><br>*   Prebuilt Gem<br>*   GemRepo<br>*   Asset Gem<br>*   Default Gem<br>*   C++ Tool Gem<br>*   Python Tool Gem<br>*   Choose existing template                                                                                                         |
-| Step 2 - Gem Details                   | 1.  Launch the Create a Gem experience<br>2.  Select a gem type/template<br>3.  Left click Next                                                                                                                | All fields can be edited<br>    *   Gem System Name<br>   *   Gem Display Name<br>    *   Gem Summary<br>    *   Requirements<br>    *   License<br>    *   License URL<br>    *   User-defined Gem Tags<br>    *   Gem Location<br>    *   Gem Icon Path<br>    *   Documentation URL<br> |
-| Step 2 - Required Fields not satisfied | 1.  Launch the Create a Gem experience<br>2.  Select a gem type/template<br>3.  Left click Next<br>4.  On step 2 page, click next without entering information into some of the required fields (marked by \*) | *   User is unable to progress without required fields and a visual indicator suggests what is missing<br>   Required Fields:<br>    *   Gem Display Name<br>    *   Gem System Name<br>    *   License<br>   *   Gem Location<br>                                                         |
-| Step 3 - Creator Details               | 1.  Launch the Create a Gem experience<br>2.  Select a Gem Type/Template<br>3.  Left Click Next<br>4.  Enter Details for Gem<br>5.  Left Click Next                                                            | *   User is unable to progress without required fields and a visual indicator suggests what is missing<br>   Required Fields:<br>    *   Creator Name<br>                                                                                                                                  |
-| Gem name matches existing gem          | 1.  Create two gems with the same name, but different values for description, etc.                                                                                                                             | *   No issues in using both gems together                                                                                                                                                                                                                                                  |
-| Created Gem displays in Gem Catalog    | 1.  All steps completed (1-3) for creating a new gem<br>2.  Go to Gem Catalog if not already there after creating                                                                                              | *   Gem can be found in the gem catalog and enabled/disabled                                                                                                                                                                                                                               |

+ 69 - 28
testing-guidance/workflow-tests/editor/editor-workflow-tests.md

@@ -14,7 +14,28 @@ Test guidance will sometimes note specific issues to watch for. The common issue
 1. Console log errors/warnings/spam
 2. Asserts
 
-### Workflow 1: Editor launch, Level CRUD, Entity/Component CRUD
+## Documents and Common Terms
+* [Gems in Open 3D Engine](https://www.o3de.org/docs/user-guide/gems/)
+* [Adding and Removing Gems in a Project](https://www.o3de.org/docs/user-guide/project-config/add-remove-gems/)
+
+## Supported Graphical Configuration Variants
+
+### Resolutions
+
+* 1080p (1920x1080)
+* 4k (3840 x 2160)
+* WQD (3440x1440)
+* WQD+ (3840×1600)
+
+### Scaling
+
+* 100
+* 125
+* 150
+* 175
+* 200
+
+## Workflow 1: Editor launch, Level CRUD, Entity/Component CRUD
 
 **Product:** 
 Saved and exported level with an interesting scene
@@ -24,14 +45,16 @@ Saved and exported level with an interesting scene
 
 | Workflow                                                               | Requests                                                                                                                                                                                                                      | Things to Watch For                                                                                                                                                        |
 |------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| Launch Editor                                                          |                                                                                                                                                                                                                               | *   Excessive load times<br>*   Inaccurate splash screen/start screen art/text<br>*   Asset Processor launch                                                               |
-| Create a new level/Open an existing level                              |                                                                                                                                                                                                                               | *   Excessive load times                                                                                                                                                   |
-| Create several new entities                                            | *   Create some in Entity Outliner/some in Viewport<br>*   Try duplicating/copy pasting entities to create new copies<br>*   Drag in prefabs from Asset Browser<br>*   Instantiate prefabs from context menu<br>*   Undo/Redo | *   Entity names                                                                                                                                                           |
-| Add/edit various components to entities to create an interesting scene | *   As components are added to entities, position entities around Viewport using Transform/Rotate/Scale controls with snapping both enabled/disabled  <br>*   Make changes via Transform component as well<br>*   Undo/Redo   | *   Component property control issues (Sliders/dropdowns/text boxes)<br>*   Component dependencies<br>*   Rendering changes reflected in Viewport<br>*   Viewport controls |
+| Launch Editor                                                          |                                                                                                                                                                                                                               | <ul><li>Excessive load times.</li><li>Inaccurate splash screen/start screen art/text.</li><li>Asset Processor launch.</li></ul>                                            |
+| Create a new level/Open an existing level                              |                                                                                                                                                                                                                               | <ul><li>Excessive load times.</li></ul>                                                                                                                                    |
+| Create several new entities                                            | <ol><li>Create some in Entity Outliner/some in Viewport.</li><li>Try duplicating/copy pasting entities to create new copies.</li><li>Drag in prefabs from Asset Browser.</li><li>Instantiate prefabs from context menu.</li><li>Undo/Redo.</li></ol>| <ul><li>Entity names.</li></ul>                                                                                                                      |
+| Add/edit various components to entities to create an interesting scene | <ol><li>As components are added to entities, position entities around Viewport using Transform/Rotate/Scale controls with snapping both enabled/disabled.</li><li>Make changes via Transform component as well.</li><li>Undo/Redo.</li></ol>| <ul><li>Component property control issues (Sliders/dropdowns/text boxes).</li><li>Component dependencies.</li><li>Rendering changes reflected in Viewport.</li><li>Viewport controls.</li></ul>|
 | Enter Game Mode                                                        |                                                                                                                                                                                                                               |                                                                                                                                                                            |
-| Save/Export level                                                      |                                                                                                                                                                                                                               | *   Asset Processor errors with level processing                                                                                                                           |
+| Save/Export level                                                      |                                                                                                                                                                                                                               | <ul><li>Asset Processor errors with level processing.</li></ul>                                                                                                            |
+| Resolution and Scaling												 | <ol><li>Launch the Editor and load any level.</li><li>Choose from the [Supported Graphical Configuration Variants](#supported-graphical-configuration-variants) three pairs of [Resolution](#resolutions) and [Scaling](#scaling).</li><li>Check the pairs configuration on your system.</li><li>Check each configuration with windowed and fullscreen Editor.</li></ol>| <ul><li>Restarting the editor after toggling full screen/windowed mode.</li><li>During full regression check all listed [Resolution](#resolutions) and [Scaling](#scaling) pairs.</li></ul>|
+---
 
-### Workflow 2: UI Layout Customization, Docking/Window Management
+## Workflow 2: UI Layout Customization, Docking/Window Management
 
 **Product:** 
 Saved Editor UI Layout
@@ -41,14 +64,15 @@ Saved Editor UI Layout
 
 | Workflow                                                                                                         | Requests                                                                                                                        | Things to Watch For                                                  |
 |------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------|
-| Reset to Default Editor Layout                                                                                   |                                                                                                                                 | *   Incorrectly sized/hidden windows                                 |
-| Open several commonly used tools                                                                                 | *   Use a mixture of hotkeys/tools menu                                                                                         | *   Tools failing to open/opening offscreen                          |
-| Move some tools to secondary monitor                                                                             |                                                                                                                                 | *   Scaling issues/windows popping offscreen/hiding                  |
-| Dock some tools together and leave some windows free floating/snapped to other windows to create a custom layout | *   Dock side-by-side/create a tabbed group<br>*   Use both monitors                                                            | *   Unusable tools<br>*   Hidden windows/panes<br>*   Scaling issues |
+| Reset to Default Editor Layout                                                                                   |                                                                                                                                 | <ul><li>Incorrectly sized/hidden windows.</li></ul>                  |
+| Open several commonly used tools                                                                                 | <ol><li>Use a mixture of hotkeys/tools menu.</li></ol>                                                                          | <ul><li>Tools failing to open/opening offscreen.</li></ul>           |
+| Move some tools to secondary monitor                                                                             |                                                                                                                                 | <ul><li>Scaling issues/windows popping offscreen/hiding.</li></ul>   |
+| Dock some tools together and leave some windows free floating/snapped to other windows to create a custom layout | <ol><li>Dock side-by-side/create a tabbed group.</li><li>Use both monitors.</li></ol>                                           | <ul><li>Unusable tools.</li><li>Hidden windows/panes.</li><li>Scaling issues.</li></ul>|
 | Name and save the custom layout                                                                                  |                                                                                                                                 |                                                                      |
-| Load back and forth between a few different layouts                                                              | *   Verify layouts load successfully with elements on both monitors<br>*   Relaunch Editor while testing to ensure proper saves | *   Missing tools/unsaved/unloaded changes                           |
+| Load back and forth between a few different layouts                                                              | <ol><li>Verify layouts load successfully with elements on both monitors.</li><li>Relaunch Editor while testing to ensure proper saves.</li></ol>| <ul><li>Missing tools/unsaved/unloaded changes.</li></ul>|
+---
 
-### Workflow 3: Prefab Editing Focus Mode
+## Workflow 3: Prefab Editing Focus Mode
 
 **Product:** 
 No tangible product, this workflow covers updating/manipulating tangible products, but doesn't itself generate any
@@ -61,12 +85,13 @@ Create a Prefab with at least 2 entities underneath, each having a Mesh componen
 
 | Workflow                                                                                                                                                                                 | Requests                                                                                                                                 | Things to Watch For                                                                                                                                                                                                                                                            |
 |------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| With the prefab instance closed for editing click the Mesh entities making up the prefab in the Viewport                                                                                 |                                                                                                                                          | *   Clicking the entities that are a part of the prefab in the Viewport should only select the prefab root entity<br>*   It should not be possible to select the entities inside a prefab while it is not being edited, in any way, either through Viewport or Entity Outliner |
-| Enter Focus Mode to edit a prefab                                                                                                                                                        | *   Utilize both double-clicking and right-click context menu's Edit Prefab option                                                       | *   Entity Outliner should update and display the contents of the prefab being edited<br>*   Color of the container should change to a lighter blue                                                                                                                            |
-| With the prefab instance opened for editing click entities outside of the prefab instance                                                                                                | *   Try from within both the Viewport and the Entity Outliner<br>*   Try to toggle Hide/Lock for entities outside of the prefab instance | *   There should be clear a visual indication that entities outside of the focus tree are not selectable (WIP)                                                                                                                                                                 |
-| With the prefab instance opened for editing verify the breadcrumb widget at the upper-left of the Viewport displays the currently focused prefab, and the path to it from the level root | *   Add additional entities to the prefab hierarchy and click through the breadcrumb widget to ensure the mode changes as expected       |                                                                                                                                                                                                                                                                                |
+| With the prefab instance closed for editing click the Mesh entities making up the prefab in the Viewport                                                                                 |                                                                                                                                          | <ul><li>Clicking the entities that are a part of the prefab in the Viewport should only select the prefab root entity.</li><li>It should not be possible to select the entities inside a prefab while it is not being edited, in any way, either through Viewport or Entity Outliner.</li></ul>|
+| Enter Focus Mode to edit a prefab                                                                                                                                                        | <ol><li>Utilize both double-clicking and `right-click` context menu's Edit Prefab option.</li></ol>                                      | <ul><li>Entity Outliner should update and display the contents of the prefab being edited.</li><li>Color of the container should change to a lighter blue.</li></ul>                                                                                                           |
+| With the prefab instance opened for editing click entities outside of the prefab instance                                                                                                | <ol><li>Try from within both the Viewport and the Entity Outliner.</li><li>Try to toggle Hide/Lock for entities outside of the prefab instance.</li></ol>| <ul><li>There should be clear a visual indication that entities outside of the focus tree are not selectable (WIP).</li></ul>                                                                                                                                  |
+| With the prefab instance opened for editing verify the breadcrumb widget at the upper-left of the Viewport displays the currently focused prefab, and the path to it from the level root | <ol><li>Add additional entities to the prefab hierarchy and click through the breadcrumb widget to ensure the mode changes as expected.</li></ol>|                                                                                                                                                                                                                                                                        |
+---
 
-### Workflow 4: Read-Only Entities
+## Workflow 4: Read-Only Entities
 
 **Product:** 
 No tangible product, this workflow covers updating/manipulating tangible products, but doesn't itself generate any
@@ -77,13 +102,29 @@ No tangible product, this workflow covers updating/manipulating tangible product
 **Setup:**
 Instantiate a Procedural Prefab (Example Procedural Prefabs in AutomatedTesting: _Objects\\sphere\_5lods\_fbx.procprefab, multiple\_mesh\_one\_material\\multiple\_mesh\_one\_material\_fbx.procprefab_
 
-| Workflow                                                                                                                                                 | Requests                                                                                                                                                                                                                                                                                                                              | Things to Watch For                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
-|----------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| Instantiate a Procedural Prefab                                                                                                                          | *   Try via right-click context menu<br>*   Try via drag-and-drop from the Asset Browser (Not Yet Implemented)                                                                                                                                                                                                                        | *   Unusual delays in instantiation<br>*   Console errors/asserts                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
-| Entity Outliner:<br>Procedural Prefab container is distinct from normal Prefabs (currently Purple container color as opposed to Blue for normal prefabs) | *   Enter Focus Mode on the Procedural Prefab container:                                                                                                                                                                                                                                                                              | *   Procedural Prefab container is distinct from normal Prefabs (currently Purple container color as opposed to Blue for normal prefabs)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
-| Entity Outliner:<br>Mouseover container entity                                                                                                           |                                                                                                                                                                                                                                                                                                                                       | *   Tooltip reads, "Double-click to inspect"<br>*   Container icon is unique with an eye icon in place of the normal pencil icon                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
-| Entity Outliner:<br>Enter Focus Mode on the Procedural Prefab container                                                                                  | *   Test via right-click context menu and double-clicking the container entity                                                                                                                                                                                                                                                        | *   Hide/Lock functionality is disabled on the container and all child read-only entities<br>*   Read-only entities have unique icon with a lock icon over the normal box icon                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
-| Entity Outliner:<br>While in Focus Mode, attempt CRUD operations on read-only entities via context menu                                                  | *   Try reparenting entities<br>*   Try deleting entities<br>*   Try Hiding/Locking entities<br>*   Try parenting non-read-only entities to read-only entities and via the Transform component Parent entity reference in the Entity Inspector<br>*   Try dragging an asset/prefab from the Asset Browser over the read-only entities | *   Only options available to read-only entities are "Open pinned Inspector" and "Find in viewport"<br>*   Read-only entities and their children cannot be reparented or deleted<br>*   Non read-only entities cannot be parented to read-only entities via UI operations<br>*   Selecting read-only entities in the Outliner selects the corresponding entity in the Viewport, but no manipulator gizmos are usable<br>*   Selecting read-only entities in the Outliner displays the component information in the Entity Inspector:<br><ul>*   Components should be greyed out<br>*   Name field is not editable<br>*   No new components can be added<br>*   Existing components cannot be removed<br>*   Components can be copied<br></ul>*   Dragging an asset/prefab from the Asset Browser over the read-only entities is not allowed |
-| Entity Outliner:<br>Perform right-click context menu operations on the Procedural Prefab container                                                       | *   Utilize hotkeys as well to perform actions where possible (e.g. Delete and Duplicate)                                                                                                                                                                                                                                             | *   Instantiate Prefab/Procedural Prefab is not allowed<br>*   "Save Prefab to file" should result in an appropriate error message as changes cannot be saved<br>*   "Create Prefab" should create a new normal prefab with the Procedural Prefab nested inside.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
-| Viewport:<br>Click the container entity in the Viewport should enable manipulator gizmos                                                                 |                                                                                                                                                                                                                                                                                                                                       | *   Manipulator gizmos should be available for the container when not in Focus Mode                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
-| Viewport:<br>Double-click the container entity in the Viewport to enter Focus Mode                                                                       |                                                                                                                                                                                                                                                                                                                                       | *   Focus Mode is entered<br>*   No manipulator gizmos are available on the container entity or child read-only entities<br>*   Right-click context menus are limited to "Open pinned Inspector" and "Find in viewport"<br>*   Selecting read-only entities in the Outliner displays the component information in the Entity Inspector:<br><ul>*   Components should be greyed out<br>*   Name field is not editable<br>*   No new components can be added<br>*   Existing components cannot be removed<br>*   Components can be copied<br></ul>*   Dragging an asset/prefab from the Asset Browser into the Viewport while a Procedural Prefab is focused is not allowed                                                                                                                                                                   |
+| Workflow                                                                                                                                              | Requests                                                                                                                                                                                                                                                                                                                              | Things to Watch For                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
+|-------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| Instantiate a Procedural Prefab                                                                                                                       | <ol><li>Try via `right-click` context menu.</li><li>Try via drag-and-drop from the Asset Browser. (Not Yet Implemented)</li></ol>                                                                                                                                                                                                     | <ul><li>Unusual delays in instantiation.</li><li>Console errors/asserts.</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
+| Entity Outliner: Procedural Prefab container is distinct from normal Prefabs (currently Purple container color as opposed to Blue for normal prefabs) | <ol><li>Enter Focus Mode on the Procedural Prefab container:</li></ol>                                                                                                                                                                                                                                                                | <ul><li>Procedural Prefab container is distinct from normal Prefabs. (currently Purple container color as opposed to Blue for normal prefabs)</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
+| Entity Outliner: Mouseover container entity                                                                                                           |                                                                                                                                                                                                                                                                                                                                       | <ul><li>Tooltip reads, "Double-click to inspect".</li><li>Container icon is unique with an eye icon in place of the normal pencil icon.</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
+| Entity Outliner: Enter Focus Mode on the Procedural Prefab container                                                                                  | <ol><li>Test via `right-click` context menu and double-clicking the container entity.</li></ol>                                                                                                                                                                                                                                       | <ul><li>Hide/Lock functionality is disabled on the container and all child read-only entities.</li><li>Read-only entities have unique icon with a lock icon over the normal box icon.</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
+| Entity Outliner: While in Focus Mode, attempt CRUD operations on read-only entities via context menu                                                  | <ol><li>Try reparenting entities.</li><li>Try deleting entities.</li><li>Try Hiding/Locking entities.</li><li>Try parenting non-read-only entities to read-only entities and via the Transform component Parent entity reference in the Entity Inspector.</li><li>Try dragging an asset/prefab from the Asset Browser over the read-only entities.</li></ol>| <ul><li>Only options available to read-only entities are "Open pinned Inspector" and "Find in viewport".</li><li>Read-only entities and their children cannot be reparented or deleted.</li><li>Non read-only entities cannot be parented to read-only entities via UI operations.</li><li>Selecting read-only entities in the Outliner selects the corresponding entity in the Viewport, but no manipulator gizmos are usable.</li><li>Selecting read-only entities in the Outliner displays the component information in the Entity Inspector:</li><ul><li>Components should be greyed out.</li><li>Name field is not editable.</li><li>No new components can be added.</li><li>Existing components cannot be removed.</li><li>Components can be copied</li></ul><li>Dragging an asset/prefab from the Asset Browser over the read-only entities is not allowed.</li></ul>|
+| Entity Outliner: Perform right-click context menu operations on the Procedural Prefab container                                                       | <ol><li>Utilize hotkeys as well to perform actions where possible.(e.g. Delete and Duplicate)</li></ol>                                                                                                                                                                                                                               | <ul><li>Instantiate Prefab/Procedural Prefab is not allowed.</li><li>"Save Prefab to file" should result in an appropriate error message as changes cannot be saved.</li><li>"Create Prefab" should create a new normal prefab with the Procedural Prefab nested inside.</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
+| Viewport: Click the container entity in the Viewport should enable manipulator gizmos                                                                 |                                                                                                                                                                                                                                                                                                                                       | <ul><li>Manipulator gizmos should be available for the container when not in Focus Mode.</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
+| Viewport: Double-click the container entity in the Viewport to enter Focus Mode                                                                       |                                                                                                                                                                                                                                                                                                                                       | <ul><li>Focus Mode is entered.</li><li>No manipulator gizmos are available on the container entity or child read-only entities.</li><li>`Right-click` context menus are limited to "Open pinned Inspector" and "Find in viewport".</li><li>Selecting read-only entities in the Outliner displays the component information in the Entity Inspector:</li><ul><li>Components should be greyed out.</li><li>Name field is not editable.</li><li>No new components can be added.</li><li>Existing components cannot be removed.</li><li>Components can be copied.</li></ul><li>Dragging an asset/prefab from the Asset Browser into the Viewport while a Procedural Prefab is focused is not allowed.</li></ul>                                                                                                                                 |
+---
+
+## Workflow 5: Gem dependencies
+
+**Product:** 
+A project with the White Box and the Script Canvas gems activated.
+
+​
+**Suggested Time Box:** 15 mins
+
+| Workflow                                                               | Requests																																																																						   | Things to Watch For                                                                                                                                                          |
+|------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| White Box gem															 | <ol><li>Create an entity and add the White Box component to it.</li><li>Save the level and turn the Editor off.</li><li>In the Project Manager select the project's hamburger menu and select configure gems.</li><li>Search for the White Box gem, deactivate it and save.</li><li>Rebuild the project, launch it and open the previously created level.</li><li>Search for the White Box component in the "Add component" dropdown list.</li></ol>| <ul><li>Correct and informative error messages.</li><li>Component correctly deactivated and not selectable.</li></ul>|
+| Script Canvas	gem														 | <ol><li>Verify that the Script Canvas tool is listed in the Tools menu.</li><li>Create an entity and add the Script Canvas component to it.</li><li>Save the project and turn it off.</li><li>In the Project Manager select the project's hamburger menu and select configure gems.</li><li>Search for the Script Canvas gem, deactivate it and save. (Confirm the popup informing of no longer needed dependencies)</li><li>Rebuild the project and open it.</li><li>Verify that the Script Canvas in not listed in the Tools menu.</li></ol>| <ul><li>Correct and informative error messages.</li><li>Prompt about no longer needed dependent gems.</li><li>Component correctly deactivated and not selectable.</li><li>Script Canvas removed from the Tools menu.</li></ul>|
+---
+

+ 7 - 1
testing-guidance/workflow-tests/landscape-canvas/landscape-canvas-workflow-tests.md

@@ -3,13 +3,19 @@
 Testing in this area should revolve primarily around Landscape Canvas graph configuration to create an interesting instance spawner setup
 
 ## Project Requirements
-AutomatedTesting project, or another project with Atom and all Vegetation system Gems
+AutomatedTesting project, or another project with Atom, all Vegetation system, and Landscape Canvas Gems enabled
 
 ## Common Issues to Watch For
 Test guidance will sometimes note specific issues to watch for. The common issues below should be watched for through all testing, even if unrelated to the current workflow being tested.
 1. Console log errors/warnings/spam
 2. Asserts
 
+## Helpful Documentation
+
+1. https://www.o3de.org/docs/user-guide/gems/reference/environment/
+2. https://www.o3de.org/docs/user-guide/gems/reference/environment/landscape-canvas/
+3. https://www.o3de.org/docs/user-guide/gems/reference/environment/surface-data/
+
 ### Workflow 1: Construction/configuration of an instance spawner via Landscape Canvas
 
 **Product:** Prefab of constructed instance spawner

+ 85 - 0
testing-guidance/workflow-tests/o3de-project-manager/engine-versioning/engine-versioning.md

@@ -0,0 +1,85 @@
+# Engine Versioning Workflow Tests
+
+Testing in this area should focus on testing around Engine Versioning throughout the O3DE tools.
+
+## General Docs
+
+* [TBD](https://www.o3de.org/docs/)
+
+## General Testing Notes
+
+**Managed Version File (Preferred Approach)**
+
+Manual incremental version increases in a centralized file `engine.json` found in O3DE engine base directory.
+
+* "Centralized file" is likely going to be engine.json
+  * It's currently unclear which field will be used for the development increment
+    * Initially planned to use O3DEVersion entry, but this is periodically used for releases, etc already
+    * Working to determine if a new field will be used for this
+  * Expected to update the version with any "breaking" changes
+
+## Common Issues to Watch For
+
+Test guidance will sometimes note specific issues to watch for. The common issues below should be watched for through all testing, even if unrelated to the current workflow being tested.
+- Engine version doesn't propagate to a tool.
+- Engine version mismatch causing erratic behavior.
+- Unexpected build failures due to version mis-matches.
+
+## Engine Version Locations
+
+* Installer
+* Splash Screen
+* About Screen
+
+## Workflows
+
+### Area: General Engine Versioning Tool Validation Workflow
+
+**Project Requirements**
+* A newly [created gem](../gems/gem-workflow-tests.md) that supports engine versioning
+  * Older, existing, gems may default to `0.0.0`.
+    * This may change in released builds due to the nature of branch development/builds always being in flux.
+
+
+**Editor Platforms:**
+* Windows
+* Linux
+
+**Product:** Changing engine versions is reflected across the engine & tools.
+
+**Suggested Time Box:** 30 minutes per platform.
+
+| Workflow                                                                       | Requests                                                                                                                                                                                                           | Things to Watch For                                                                                                                                                                                                                  |
+|--------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| **Engine Version propagates to Engine**                                        | <ol><li>Engine built.</li><li>Project created/built.</li><li>Launch the Editor.</li></ol>                                                                                                                          | <ul><li>Engine version is reflected on [Engine Version Locations](#engine-version-locations) match the version found in the engine version file.</li></ul>                                                                           |
+| **Project Engine Field Populates with All Locally Installed Engine Versions**  | <ol><li>Launch Project Manager.</li><li>Edit Project Settings for an existing project.</li><li>Click the drop-down for the Engine entry.</li></ol>                                                                 | <ul><li>All locally installed/built Engine versions are populated in the list.</li></ul>                                                                                                                                             |
+| **Current Engine Version displays for projects**                               | <ol><li>Launch Project Manager.</li><li>Go to existing project settings.</li></ol>                                                                                                                                 | <ul><li>Engine entry displays current engine for given project.</li></ul>                                                                                                                                                            |
+| **Supported Engine Version functions for Gems**                                | <ol><li>Confirm Gem listed current engine as supported in the gem's `gem.json` in the gem folder.</li><li>Add the gem to a project compatible with the current Engine version.</li><li>Build the project</li></ol> | <ul><li>No Compile issues with the project.</li><li>The gem functionality works as expected.</li></ul>                                                                                                                               |
+| **Current Engine Name and Version (Title Bar)**                                | <ol><li>Launch Project Manager.</li><li>Observe Window Title Bar.</li></ol>                                                                                                                                        | <ul><li>Title Bar displays the Engine name and version that Project Manager was launched from.</li></ul>                                                                                                                             |
+| **Engine Tab displays current Engine Version (Project Manager's source)**      | <ol><li>Launch Project Manager.</li><li>Click the Engine tab</li><li>Observe the Engine Name and Version fields.</li></ol>                                                                                         | <ul><li>Engine Name and Version match the engine that was used to launch Project Manager.</li></ul>                                                                                                                                  |
+| **Update Project's Engine**                                                    | <ol><li>Launch Project Manager.</li><li>Edit Project Settings for an existing Project.</li><li>Click the drop-down for the Engine entry</li><li>Select a new eligible (local) engine from the list</li></ol>       | <ul><li>Change is visible under the project tile in the projects list.</li><li>Projects page suggests the project needs to be rebuilt.</li></ul>                                                                                     |
+| **Current Engine version for Project Displays Below Project Tile**             | <ol><li>Launch Project Manager.</li><li>Note the text below the existing project tiles.</li></ol>                                                                                                                  | <ul><li>Displays the projects currently assigned Engine name and version.</li><li>Color is white if it matches the current engine and yellow if it is for a different version than what Project Manager was launched from.</li></ul> |
+| **Different Engine Versions can be installed side by side**                    | <ol><li>Install the latest release using the installer.</li><li>Install the latest development installer.</li></ol>                                                                                                | <ul><li>The second install does not overwrite/uninstall the first.</li><li>Both engine versions are functional.</li></ul>                                                                                                            |
+---
+
+### Area: Engine Versioning CLI Workflows
+
+**Example Parameters**
+* `<EngineVersion>` can be replaced with something along the lines of `o3de==1.0.0`.
+   * Value passed in must be a registered engine name. 
+
+**Editor Platforms:**
+* Windows
+* Linux
+
+**Suggested Time Box:** 30 minutes per platform.
+
+| Workflow                                                                          | Requests                                                                                                                                                                                                                                                                                                                                                                                     | Things to Watch For                                                                                                                                                     |
+|-----------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| **Multiple Instances of Engine with same Name and Version**                       | <ol><li>Clone two instances of the same engine into the local directory.<ul><li>EG: `C:\o3de1` and `C:\o3de2`.</li></ul></li><li>Register both engines using `scripts/o3de register --this-engine`.</li><li>Create a project.</li><li>Register it to one of the engine options using `scripts/o3de edit-project-properties -pp <ProjectPath> --user --engine-path <PathToEngine>`.</li></ol> | <ul><li>Project successfully registers the given Engine.</li><li>This is visible in Project Manger after registry.</li><li>Project can be successfully built.</li></ul> |
+| **Specify Specific Engine version for Project (global)**                          | <ol><li>Create a new project if one does not exist.</li><li>Use `scripts/o3de edit-project-properties -pp <ProjectPath> --engine-name <EngineVersion>` to assign the project version to use.</li></ol>                                                                                                                                                                                       | <ul><li>Project's `project.json` reflects the selected engine version.</li><li>Project can be successfully built.</li></ul>                                             |
+| **Specify Specific Engine version for Project (local)**                           | <ol><li>Create a new project if one does not exist.</li><li>Use `scripts/o3de edit-project-properties -pp <ProjectPath> --engine-name <EngineVersion> --user` to assign the project version to use.</li></ol>                                                                                                                                                                                | <ul><li>Project's `project.json` generated in `<ProjectPath>\user\` with selected engine version.</li><li>Project can be successfully built.</li></ul>                  |
+---
+
+
+

+ 138 - 0
testing-guidance/workflow-tests/o3de-project-manager/gems/gem-workflow-tests.md

@@ -0,0 +1,138 @@
+# Gem Workflow Tests
+
+These workflows center around testing the basic functionality of the Project Manager's gem tooling. Including 
+Gem Creation, Gem Catalog, and Gem Remote Sources Manager. 
+
+## General Docs
+
+* [O3DE Project Configuration](https://www.o3de.org/docs/user-guide/project-config/)
+* [O3DE Project Manager](https://www.o3de.org/docs/user-guide/project-config/project-manager/)
+
+## Common Issues
+
+*   Dialogs do not open or progress as expected.
+*   Created gems do not immediately refresh in **Gem Catalog** list.
+
+## Workflows
+
+### Area: Gem Catalog Experience
+
+
+**Platforms:**
+* Windows
+* Linux
+
+**Product:** A project with modified gems.
+
+**Suggested Time Box:** 15 minutes per platform.
+
+| Workflow                          | Requests                                                                                                                                                                                                                                                                                                                                                          | Things to Watch For                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
+|-----------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| **Find a gem in the Gem Catalog** | <ol><li>Open the **O3DE Project Manager**.</li><li>Select the **Gems** button from the **O3DE Project Manager** navigation ribbon.</li><li>Apply a simple search string to the **Search Bar**.<ul><li>Something simple like `physics`.</li></ul></li><li>Apply **Search Filters** to discover a gem that you need from the different filter categories.</li></ol> | <ul><li>**Gem Catalog** can be opened.</li><li>Applying/removing a search string in the **Search Bar** displays the expected gems.</li><li>Applying/removing a **Search Filter** displays the expected gems.</li><li>The expected **Gem Image**, **Gem Name**, **Gem Summary**, and **Gem Status** are displayed for each gem's **Gem Entry** in the **Gem List**.<ul><li>**Gem Images** can be seen for given gems and have the expected quality.</li><li>Default **Gem Image** is present when there isn't a specific one authored for the gem.</li><li>The **Gem Name** field in the **Gem List** can be resized by clicking on the separator between the **Gem Name** & **Gem Summary** header titles in the **Gem List**.</li></ul></li></ul> |
+| **Edit a gem**                    | <ol><li>Find a gem you want to edit in the **Gem Catalog** using your desired search & filter method.</li><li>Select the gem you want to edit.</li><li>Click the **Edit** button in the **Gem Details** panel.</li><li>Modify the **Gem Details** you want to edit and click next.</li><li>Modify **Creator Details** you want to edit and confirm.</li></ol>     | <ul><li>When gem is selected the gem's **Gem Details**, **Creator Details**, and **Gem Dependencies** are displayed in the **Gem Details** panel.</li><li>Links in the **Gem Details** panel for a selected gem are clickable and respond as expected.<ul><li>Clicking on a **Depending Gem** in the **Gem Details** panel will navigate to and display the info for the **Depending Gem** that was clicked if it is available.</li></ul></li><li>**Gem Details** can be modified and are reflected when changed in the **Gem Catalog** as well as in the gem's `gem.json` file.</li><li>**Gem Details** can be modified and are reflected when changed in the **Creator Catalog** as well as in the gem's `gem.json` file.</li></ul>              |
+
+---
+
+### Workflow: Create a Gem from O3DE Project Manager
+
+### New Gem Template
+
+* Prebuilt Gem
+* GemRepo
+* Asset Gem
+* Default Gem
+* C++ Tool Gem
+* Python Tool Gem
+* Choose existing template
+
+#### Gem Details Editable Fields
+ 
+* Gem System Name [*Required]
+* Gem Display Name [*Required]
+* Gem Summary
+* Requirements
+* Target Platform(s)
+* License [*Required]
+* License URL
+* User-defined Gem Tags
+* Gem Location [*Required] [o3de/o3de#13736](https://github.com/o3de/o3de/issues/13736) 
+* Gem Icon Path [o3de/o3de#15540](https://github.com/o3de/o3de/issues/15540)
+* Documentation URL
+
+#### Creator Details Editable Fields
+
+* Creator Name [*Required]
+* Origin URL
+* Repository URL
+
+**Target Platforms:**
+
+* Windows
+* Linux
+* iOS
+* Android
+* All Platforms
+
+**Platforms**
+* Windows
+* Linux
+
+**Product:** A newly created gem that can interact with the **Gem Catalog**, is present on the file system, and be added
+to a project.
+
+**Suggested Time Box:** 30 minutes per platform.
+
+| Workflow                                 | Steps                                                                                                                                                                                                                                                                                                                                                                                    | Expectations                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
+|------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| Create a Gem Experience                  | <ol><li>Enter the Gem Catalog.</li><li>Select the hamburger menu in the top right corner.</li><li>Select **Create New Gem**.</li><li>Select a gem **type** or **template** that you want to create and click next.</li><li>Populate the gem details fields and click next.</li><li>Populate the Creator Details and click next.</li><li>Return to **Gem Catalog** and refresh.</li></ol> | <ul><li>A new gem can be created using all [New Gem Templates](#new-gem-template).</li><li>All [Gem Details Editable Fields](#gem-details-editable-fields) & [Creator Details Editable Fields](#create-details-editable-fields) can be modified.</li><li>If [Required Gem Details Fields](#gem-details-editable-fields) or [Creator Details Editable Fields](#create-details-editable-fields) are not populated with valid data the user cannot proceed and a visual indicator informs the user of the required fields.</li><li>Gem folder is created in the target destination with the expected type or template.</li><li>Created Gem displays in Gem Catalog.</li></ul> |
+| Gem name matches existing gem            | <ol><li>Create two gems with the same name, but different values for description, etc.</li></ol>                                                                                                                                                                                                                                                                                         | <ul><li>No issues in using both gems together.</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
+| Platform Support - Platforms Specified   | <ol><li>Create a Gem and include desired [Target Platforms](#target-platforms) selections on the **Gem Details** panel.</li></ol>                                                                                                                                                                                                                                                        | <ul><li>Created Gem shows the selected Platforms in its description within the **Gem Catalog**.</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
+| Platform Support - Platforms Unspecified | <ol><li>Create a Gem, without including any desired [Target Platforms](#target-platforms)</li></ol>                                                                                                                                                                                                                                                                                      | <ul><li>Created Gem Shows no entry related to Platforms in its description within the **Gem Catalog**.</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
+
+
+### Workflow: Add a remote gem from O3DE Project Manager
+
+**Workflow Docs**
+[O3DE Gem Repositories](https://www.o3de.org/docs/user-guide/gems/repositories/overview/)
+
+**Repository Configuration**
+
+A git repository must contain a `repo.json` at its root which points to templates. The `repo.json` contains a gems 
+list which points to the remote gems within said repository.
+
+See [sample-code-gems repo.json](https://github.com/o3de/sample-code-gems/blob/main/repo.json) as an example.
+
+```json
+{
+    "gems": [
+        "https://raw.githubusercontent.com/o3de/sample-code-gems/main/atom_gems/AtomTutorials",
+        "https://raw.githubusercontent.com/o3de/sample-code-gems/main/cpp_gems/ShapeExample",
+        "https://raw.githubusercontent.com/o3de/sample-code-gems/main/py_gems/PyShapeExample"
+    ]
+}
+```
+
+**Workflow Requirements**
+* A built project to add a remote gem to (a blank template project is acceptable).
+* Locally installed tools for the remote source being used (git installed with credentials for GitHub, for example)
+* A remote Git repository (GitHub, AWS CodeCommit, BitBucket, self-hosted, ETC) that has a remote project.
+  * Examples: 
+    * sample-code-gems (https://github.com/o3de/sample-code-gems.git)
+    * O3DE Canonical Gems (https://canonical.o3de.org) [o3de/o3de#15557](https://github.com/o3de/o3de/issues/15557)
+    * Another [O3DE](https://github.com/o3de) owned sample with compatible remote gems.
+  * Your own repository URI with a remote gem you've created.
+
+**Platforms**
+* Windows
+* Linux
+
+**Product:** A built project with a remote gem added to it.
+
+**Suggested Timebox:** 30 minutes per platform
+
+| Workflow                                                 | Requests                                                                                                                                                                                                                                                                                                                                                                                                                | Things to Watch For                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
+|----------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| Add **Remote Gem(s)** to **Gem Remote Sources Manager**. | <ol><li>Open O3DE Project Manager.</li><li>Select **Gems** from the O3DE Project Manager Ribbon.</li><li>Open **Gem Remote Sources Manager**. <ul><li>`Gem Catalog Hamburger Menu → Show Gem Repos`</li></ul></li><li>Add your remote gem repository.<ul><li>Click **Add Repository** button.</li><li>Add your remote gem URI and click the **Add** button in the **Add a User Repository** dialog.</li></ul></li></ol> | <ul><li>**Gem Remote Sources Manager** lists the remote repositories.</li><li>Remote gems are displayed in **Gem Catalog** only when Remote Source is added to the **Gem Remote Sources Manager**.</li><li>**Gem Remote Sources Manager** can be refreshed.</li><li>A **Remote Source** can be deleted from the **Gem Remote Sources Manager.**</li><li>Gems that have had their **Remote Source** removed from the **Remote Sources Manager** do not display in the **Gem Catalog**.</ul>                               |
+| Add **Remote Gem** to an **O3DE Project**.               | <ol><li>Add **Remote Gem(s)** to the **Gem Remote Sources Manager.**</li><li>Configure your project to add your **Remote Gem(s)**.</li><li>Build and open your project in the O3DE Editor.</li></ol>                                                                                                                                                                                                                    | <ul><li>**Remote Gem(s)** can be added & removed from an **O3DE Project**.</li><li>Known good **Remote Gem(s)** should build.</li><li>**Remote Gem(s)** content can be interacted with from the O3DE Editor. <ul><li>EG: Assets are processed and available in asset manager if assets are present.</li><li>EG: Editor Entity Components can be added if Editor Entity Components are present.</li><li>EG: Script Canvas nodes can be added to a graph if Script Canvas nodes are present in the gem.</li></ul></li></ul>|
+---
+

+ 71 - 0
testing-guidance/workflow-tests/o3de-project-manager/project-export/project-export-workflow-tests.md

@@ -0,0 +1,71 @@
+# Project Export Workflow Tests
+
+Testing in this area should focus on the **O3DE Project Manger's** **Project Export** workflows. This should include 
+general validations that the tool's base functionality & examples work while also stressing the scriptable export
+pipeline.
+
+
+| Important Note!                                                                |
+|--------------------------------------------------------------------------------|
+| This workflow is currently only a stub as the feature is still in development. |
+
+
+## General Docs
+* [TBD](https://www.o3de.org/docs/)
+
+## Common Issues to Watch For
+
+Test guidance will sometimes note specific issues to watch for. The common issues below should be watched for through all testing, even if unrelated to the current workflow being tested.
+- TBD
+
+## Workflows
+
+### Area: Example Project Workflow Export
+
+**Project Requirements**
+* A project that is ready for export
+  * AutomatedTesting or MutliplayerSample(?)
+  * A user created Project
+
+**Workflow Docs**
+* [Some Workflow Specific Docs](https://www.o3de.org/docs/)
+
+**Platforms:**
+* Windows
+* Linux
+
+**Product:** An Exported Project that can then be launched and played
+
+**Suggested Time Box:** X minutes per platform.
+
+| Workflow                     | Requests           | Things to Watch For |
+|------------------------------|--------------------|---------------------|
+| ****                         | <ol><li></li></ol> | <ul><li></li></ul>  |
+| ****                         | <ol><li></li></ol> | <ul><li></li></ul>  |
+---
+
+### Area: Project Export Scripting Workflows
+
+**Project Requirements**
+* A project that is ready for export
+  * AutomatedTesting or MutliplayerSample(?)
+
+**Workflow Docs**
+* [Some Workflow Specific Docs](https://www.o3de.org/docs/)
+
+**Platforms:**
+* Windows
+* Linux
+
+**Product:** Custom generated export scripts and an exported Project that can then be launched and played.
+
+**Suggested Time Box:** X minutes per platform.
+
+| Workflow                     | Requests           | Things to Watch For |
+|------------------------------|--------------------|---------------------|
+| ****                         | <ol><li></li></ol> | <ul><li></li></ul>  |
+| ****                         | <ol><li></li></ol> | <ul><li></li></ul>  |
+---
+
+
+

+ 47 - 1
testing-guidance/workflow-tests/remote-projects/remote-projects-workflow-tests.md → testing-guidance/workflow-tests/o3de-project-manager/remote-projects/remote-projects-workflow-tests.md

@@ -2,9 +2,55 @@
 
 These workflows center around testing the basic functionality of the Project Manager remote project acquisition tools.
 
+## Repository Configuration
+
+A git repository must contain a `repo.json` at its root which defines it as a remote project.
+
+See [ThirdPersonTemplate repo.json](https://github.com/o3de/ThirdPersonTemplate/blob/main/repo.json) as an example.
+```json
+{
+    "projects": [
+        "https://github.com/o3de/ThirdPersonTemplate.git"
+    ]
+}
+```
+
+The remote project's `project.json` contains a definition defining it as a remote project.
+
+See [ThirdPersonTemplate project.json](https://github.com/o3de/ThirdPersonTemplate/blob/main/project.json) as an example.
+```json
+{
+    "project_name": "ThirdPersonTemplate",
+    "project_id": "{b4db7f1f-a52b-40be-86f6-22e120b9ff55}",
+    "origin": "https://github.com/o3de/ThirdPersonTemplate",
+    "license": "https://opensource.org/licenses/Apache-2.0, https://opensource.org/licenses/MIT, https://creativecommons.org/licenses/by/4.0/",
+    "display_name": "ThirdPersonTemplate",
+    "summary": "A template project of an animated and controllable character with a 3rd Person perspective camera.",
+    "canonical_tags": [
+        "Project"
+    ],
+    "user_tags": [
+        "ThirdPersonTemplate"
+    ],
+    "icon_path": "preview.png",
+    "engine": "o3de-sdk",
+    "external_subdirectories": [
+        "Gem"
+    ],
+    "restricted": "ThirdPersonTemplate",
+	"origin_uri":"https://github.com/o3de/ThirdPersonTemplate.git"
+}
+```
+
 ## Prerequisites
 
-*   Locally installed tools for the remote source being used (git installed with credentials for GitHub, for example)
+* Locally installed tools for the remote source being used (git installed with credentials for GitHub, for example)
+* A remote Git repository (GitHub, AWS CodeCommit, BitBucket, self-hosted, ETC) that has a remote project.
+  * Examples: 
+    * NewspaperDeliveryGame (https://github.com/o3de/NewspaperDeliveryGame.git)
+    * ThirdPersonTemplate (https://github.com/o3de/ThirdPersonTemplate.git)
+    * Another [O3DE](https://github.com/o3de) owned sample with a compatible remote project.
+  * Your own repository URI with a project you've created.
 
 ## Common Issues
 

+ 36 - 1
testing-guidance/workflow-tests/remote-templates/remote-templates-workflow-tests.md → testing-guidance/workflow-tests/o3de-project-manager/remote-templates/remote-templates-workflow-tests.md

@@ -2,9 +2,44 @@
 
 These workflows center around testing the basic functionality of the Project Manager remote template acquisition tools.
 
+## Documentation & Tutorials
+
+* [Workshop: Building a Networked Game from Scratch...](https://youtu.be/4f4olmUo44k)
+
+## Repository Configuration
+
+A git repository must contain a `repo.json` at its root which points to templates. The `repo.json` contains a template 
+list which points to the project templates within said repository.
+
+See [O3DE-Extras repo.json](https://github.com/o3de/o3de-extras/blob/development/repo.json) as an example.
+```json
+"templates": [
+        "https://github.com/o3de/o3de-extras.git/Templates/Multiplayer",
+        "https://github.com/o3de/o3de-extras.git/Templates/Ros2ProjectTemplate"
+    ]
+```
+
+Each template folder must contain a `template.json` at its root which describes the template. Including information such 
+as where the template zip can be downloaded, and the zip's SHA256 hash value for security.
+
+See [O3DE-Extras Multiplayer template.json](https://github.com/o3de/o3de-extras/blob/development/Templates/Multiplayer/template.json) as example.
+```json
+{
+    "template_name": "Multiplayer",
+    "origin": "Open 3D Engine - o3de.org",
+    "origin_uri": "https://github.com/o3de/o3de-extras/releases/download/1.0/Template_Multiplayer-1.0.zip",
+    "sha256": "c1d1f6e260c6121f013b4d54e213e0c7f0f99281c66ebe48bb6403a1180ee444"
+}
+```
+
 ## Prerequisites
 
-*   Locally installed tools for the remote source being used (git installed with credentials for GitHub, for example)
+* Locally installed tools for the remote source being used (git installed with credentials for GitHub, for example)
+* A remote Git repository (GitHub, AWS CodeCommit, BitBucket, self-hosted, ETC) that has a remote template.
+    * Examples:
+       * O3DE-Extras (https://github.com/o3de/o3de-extras.git)
+       * Another [O3DE](https://github.com/o3de) owned sample with a remote template
+    * Your own repository URI with a template you've created.
 
 ## Common Issues
 

BIN
testing-guidance/workflow-tests/scripting/images/Luacomponent_pick_lua_script_button.png


BIN
testing-guidance/workflow-tests/scripting/images/Luaeditor_breakpoints_button.png


BIN
testing-guidance/workflow-tests/scripting/images/Luaeditor_find_button.png


BIN
testing-guidance/workflow-tests/scripting/images/Luaeditor_lua_locals_button.png


BIN
testing-guidance/workflow-tests/scripting/images/Luaeditor_run_continue_button.png


BIN
testing-guidance/workflow-tests/scripting/images/Luaeditor_stack_button.png


BIN
testing-guidance/workflow-tests/scripting/images/Luaeditor_step_in_button.png


BIN
testing-guidance/workflow-tests/scripting/images/Luaeditor_step_out_button.png


BIN
testing-guidance/workflow-tests/scripting/images/Luaeditor_step_over_button.png


BIN
testing-guidance/workflow-tests/scripting/images/Luaeditor_target_button.png


BIN
testing-guidance/workflow-tests/scripting/images/Luaeditor_toggle_breakpoint_button.png


BIN
testing-guidance/workflow-tests/scripting/images/Python_Scripts_Tool.png


BIN
testing-guidance/workflow-tests/scripting/images/SCaudio_script.png


BIN
testing-guidance/workflow-tests/scripting/images/SCcreate_input_bindings_file.png


BIN
testing-guidance/workflow-tests/scripting/images/SCinput_handle_script.png


BIN
testing-guidance/workflow-tests/scripting/images/SCnode_delete_particles.png


BIN
testing-guidance/workflow-tests/scripting/images/SCnode_nudging.png


BIN
testing-guidance/workflow-tests/scripting/images/SCnodes_dimming_hover_over.png


+ 355 - 0
testing-guidance/workflow-tests/scripting/lua-scripting-tests.md

@@ -0,0 +1,355 @@
+# Lua Scripting Workflow Tests
+
+Testing in this area should focus on the functionality of Lua Editor.
+
+## Common Issues to Watch For
+
+Test guidance will sometimes note specific issues to watch for. The common issues below should be watched for through all testing, even if unrelated to the current workflow being tested.
+1. Asset processor errors when loading/saving .lua files
+2. Warnings or assets that appear in the Log
+3. Unresponsive UI elements 
+
+### Platforms:
+
+- Windows
+- Linux
+
+### Docs:
+
+* [O3DE Documentation: Writing Lua Scripts in Open 3D Engine](https://www.o3de.org/docs/user-guide/scripting/lua/)
+* [O3DE Documentation: Introduction to Open 3D Engine’s Lua Editor](https://www.o3de.org/docs/user-guide/scripting/lua/lua-editor/)
+* [O3DE Documentation: Basic Structure of a Lua Script](https://www.o3de.org/docs/user-guide/scripting/lua/basic-lua-script/)
+* [O3DE Documentation: Debugging Lua Scripts](https://www.o3de.org/docs/user-guide/scripting/lua/debugging-scripts/)
+* [O3DE Documentation: Debugging with Lua Editor](https://www.o3de.org/docs/user-guide/scripting/lua/debugging-tutorial/)
+* [O3DE Documentation: Using EBuses in Lua](https://www.o3de.org/docs/user-guide/scripting/lua/ebus/)
+
+### Script Files:
+
+* ["Area: Creating a Lua skeleton script file" BaseScript.lua](#script_0)
+* ["Area: Properties usage in Lua scripts" BaseScript.lua](#script_1)
+* ["Area: Moving entity using Lua script" BaseScript.lua](#script_2)
+* ["Area: Using ScriptEvents to communicate between two Lua scripts" SendEvent.lua and ReceiveEvent.lua](#script_3)
+
+## Area: Opening Lua Editor, connecting to Editor and using Find tool
+
+### Project Requirements
+
+* Any project with the Remote Tools Connection Gem
+
+**Product:** 
+
+Running Lua Editor with basic functions checked.
+
+**Suggested Time Box:** 
+
+20 minutes
+
+| Workflow | Requests | Things to Watch For |
+|----------|----------|---------------------|
+| Launch Lua Editor and connect to Editor |<ol><li> Check different methods of entry to Lua Editor: <ul><li>*Tools → Lua Editor*</li><li>Lua Script component</li></ul></li> <li>Modify Lua Editor layout:<ul><li>Resize the Lua Editor window</li><li>Undock panes</li><li>Move panes around</li><li>Dock panes</li></ul></li><li> Connect to Editor by clicking *Target* button and choosing *Editor.exe (xyzxyzxy)* from the dropdown ![Lua Editor Target Button](images/Luaeditor_target_button.png)</li></ol>|<ul><li>Lua Editor launches and is stable </li><li> Window and panes can be moved, resized and properly docked/undocked </li> <li>Lua Editor can be connected to Editor</li> <li>Class Reference is populated after connecting to Editor</li> </ul>|
+| Create a new .lua file and check Log messages |<ol><li>Create a new .lua file by selecting *File → New* in Lua Editor, make sure to save it in a path accessible to Editor (for example *<project path\>\\Assets\\*)</li><li>Type few random characters into the script and save it using: <ul><li>*File → Save*</li><li>*Ctrl+S* shortcut</li><li>*File → Save As* in a separate file</li></ul></li><li>Reopen the original .lua file after performing *File → Save As* operation</li><li>Create one more new .lua file same way as in step 1 and move the script tabs between each other</li><li>Add a change to each opened script (so that * is visible on their tabs) and use *File → Save All*</li></ol>|<ul><li>New file can be created and is opened in Lua Editor</li><li>With multiple .lua files opened, their tabs can be rearranged freely</li><li>Files can be saved using different available options</li><li>Log produces error messages when saving .lua files with no valid script structure (random characters in this case)</li></ul>|
+| Basic Find Tool usage | <ol><li>Add a unique string to any of the opened scripts (for example *text*)</li><li>Check different methods of opening *Find* tool:<ul><li>*Edit → Find*</li><li>Toolbar magnifying glass button ![Lua Editor Find Button](images/Luaeditor_find_button.png)</li><li>*Ctrl+F* shortcut</li></ul></li><li>Type the unique string into *Text to find:* textbox and click *Find Next* button</li><li>Add the same unique string to two other opened files</li><li>In *Find* tool change *Current File* dropdown to *All Open Files* and click *Find All* button</li><li>Type a new unique string into *Replace With:* textbox (for example *Hello, World!*) and click *Replace All* button</li></ol>|<ul><li>*Find* tool opens and is stable</li><li>Text search highlights matching text in individual and multiple files</li><li>Text can be replaced from *Find* tool's window</li><ul>|
+
+## Area: Creating a Lua skeleton script file 
+
+### Project Requirements
+
+* Any project
+
+**Assets:**
+
+* ["Area: Creating a Lua skeleton script file" BaseScript.lua](#script_0)
+
+**Product:** 
+
+Skeleton Lua script assigned to an entity and printing simple messages to console when entering/exiting Game Mode.
+
+**Suggested Time Box:** 
+
+20 minutes
+
+| Workflow | Requests | Things to Watch For |
+|----------|----------|---------------------|
+| Create a Lua skeleton script | <ol><li>Create a new .lua file by selecting *File → New* in Lua Editor, make sure to save it in a path accessible to Editor (for example *<project path\>\\Assets\\*)</li><li>Add a [skeleton Lua script](https://www.o3de.org/docs/user-guide/scripting/lua/basic-lua-script/#skeleton-script) to the file - remember to replace *BaseScript* in the file to the name of your lua file if it is different (you can do this easily using *Find* tool and *Replace All* action)</li><li>Replace `-- Activation Code` and `-- Deactivation Code` lines with `Debug.Log(tostring("Hi!"));` and `Debug.Log(tostring("Bye!"));` respectively</li><li>Save the .lua file (for example *File → Save* or *Ctrl+S*)</li></ol>| <ul><li>Basic script can be created and saved</li><li>After saving *Compilation Succesful - <path\>* is printed to Log and no errors occur</li></ul>|
+| Create an entity using the created skeleton Lua script | <ol><li>In Editor, create a new entity and add a *Lua Script* component to it</li><li>Select *Lua Script* component on your new entity, click the *Pick Lua Script* button ![Lua Component Pick Lua Script Button](images/Luacomponent_pick_lua_script_button.png) and choose your skeleton script</li><li>Enter and exit Game Mode (using for example *Ctrl+G*) while paying attention to the Editor's Console</li></ol> | <ul><li>*Lua Script* component can be assigned to an entity</li><li>Lua script can be assigned to *Lua Script* component</li><li>*Hi!* is printed to Console on entering the Game Mode and *Bye!* on exiting it</li><li>Editor remains stable</li><li>Final working script can be found below this table</li></ul> |
+
+<details><summary><b>(Click to Expand) BaseScript.lua:</b><a name="script_0"></a></summary>
+<p>
+
+```
+-- BaseScript.lua 
+
+local BaseScript = 
+{
+    Properties =
+    {
+        -- Property definitions
+    }
+}
+
+function BaseScript:OnActivate()
+     Debug.Log(tostring("Hi!"));
+end
+
+function BaseScript:OnDeactivate()
+     Debug.Log(tostring("Bye!"));
+end
+
+return BaseScript
+```
+</p>
+</details>
+
+## Area: Properties usage in Lua scripts
+
+### Project Requirements
+
+* Any project can be used
+* Saved script from "Area: Lua skeleton script usage" helps with setup
+
+**Assets:**
+
+* ["Area: Properties usage in Lua scripts" BaseScript.lua](#script_1)
+
+**Product:** 
+
+Lua Script returning messages to Editor Console using properties declared in the script.
+
+**Suggested Time Box:**
+
+20 minutes
+
+| Workflow | Requests | Things to Watch For |
+|----------|----------|---------------------|
+| Add a property to Properties table in a script | <ol><li>Add a property to the `Properties` table of opened Lua script (example of this can be viewed under `local BaseScript = {}` table in the **(Click to Expand) BaseScript.lua** below)</li><li>Add a line to OnActivate() that prints the property after a string (for example change `Debug.Log(tostring("Hi!"));` to `Debug.Log(tostring("Hi! My value is: " .. BaseScript.Properties.MyValue));` - where BaseScript is the name of your Lua script)</li><li>Save the file and run Game Mode with this script added to a Lua Script entity</li></ol> | <ul><li>File is saved without error</li><li>When entering Game Mode, the property is properly printed (for example *Hi! My value is: 1*)</li></ul> |
+| Add local properties in a script | <ol><li>Write a code which declares two properties, adds them together in a third property and prints that third property (example of this can be viewed under `OnDeactivate()` function in the **(Click to Expand) BaseScript.lua** below) </li><li>Modify the Debug.Log line so that it uses the local properties - for example: `Debug.Log(tostring(Bye .. NumberOne .. " + " .. NumberTwo .. " = " .. NumbersAdded));`</li><li>Save the file and run and exit Game Mode with this script added to a Lua Script entity</li></ol> | <ul><li>File is saved without error</li><li>When exiting Game Mode, the properties are properly printed (for example *Bye! 1 + 2 = 3*)</li></ul> |
+
+<details><summary><b>(Click to Expand) BaseScript.lua:</b><a name="script_1"></a></summary>
+<p>
+
+```
+-- BaseScript.lua 
+
+local BaseScript = 
+{
+    Properties =
+    {
+        MyValue = 1,
+    }
+}
+
+function BaseScript:OnActivate()
+     Debug.Log(tostring("Hi! My value is: " .. BaseScript.Properties.MyValue));
+end
+
+function BaseScript:OnDeactivate()
+     Bye = "Bye! "
+     NumberOne = 1
+     NumberTwo = 2
+     NumbersAdded = NumberOne + NumberTwo
+     Debug.Log(tostring(Bye .. NumberOne .. " + " .. NumberTwo .. " = " .. NumbersAdded));
+end
+
+return BaseScript
+```
+</p>
+</details>
+
+## Area: Debugging existing script
+
+### Project Requirements
+
+* Any project with the Remote Tools Connection Gem added
+* Lua Editor connected to Editor
+* Saved BaseScript.lua from "Area: Properties usage in Lua scripts" helps with setup
+
+**Product:** 
+
+Simple debugging setup created and confirmed to be working.
+
+**Suggested Time Box:**
+
+20 minutes
+
+| Workflow | Requests | Things to Watch For |
+|----------|----------|---------------------|
+| Open Debugging tools | <ol><li>Open Breakpoints tool using any method: <ul><li>Toolbar Breakpoints button ![Lua Editor Breakpoints Button](images/Luaeditor_breakpoints_button.png)</li><li>*View → Breakpoints*</li></ul></li><li>Add breakpoints to some lines on your script using any method: <ul><li>Select a line and click/press: <ul><li>Toggle Breakpoint button on toolbar ![Lua Editor Toggle Breakpoint Button](images/Luaeditor_toggle_breakpoint_button.png)</li><li>*Debug → Toggle Breakpoint*</li><li>*F9* key</li></ul> <li>Left-click the area next to the line number on the script</li></ul></li><li>Remove added breakpoints (This can be done using the same methods as adding them)</li><li>Open Stack tool using any method: <ul><li>Toolbar Stack button ![Lua Editor Stack Button](images/Luaeditor_stack_button.png)</li><li>*View → Stack*</li></ul> </li><li>Open LUA Locals tool using any method:<ul><li>Toolbar LUA Locals button ![Lua Editor LUA Locals Button](images/Luaeditor_lua_locals_button.png)</li><li>*View → LUA Locals*</li></ul></li></ol> | <ul><li>Breakpoints tool can be opened and tracks placed breakpoints</li><li>Breakpoints can be removed</li><li>Stack tool can be opened</li><li>LUA Locals tool can be opened</li></ul> |
+| Basic breakpoint use | <ol><li>Add a breakpoint to a `Debug.Log();` line in `OnActivate()` function (for example line 12 in the "Area: Properties usage in Lua scripts" script) </li><li>Make sure that Lua Editor is connected to the Editor and enter Game Mode</li><li>Change the window to the Lua Editor while the Game Mode is running (for example using Alt+Tab navigate to the Lua Editor window)</li><li>Continue with script execution using any of the available options until the Game Mode is functional: <ul><li>Run/Continue:<ul><li>Toolbar Run/Continue button ![Lua Editor Run/Continue Button](images/Luaeditor_run_continue_button.png)</li><li>*Debug → Run/Continue*</li><li>*F5* key</li></ul></li><li>Step Over:<ul><li>Toolbar Step Over button ![Lua Editor Step Over Button](images/Luaeditor_step_over_button.png)</li><li>*Debug → Step Over*</li><li>*F10* key</li></ul></li><li>Step Into:<ul><li>Toolbar Step In button ![Lua Editor Step In Button](images/Luaeditor_step_in_button.png)</li><li>*Debug → Step Into*</li><li>*F11* key</li></ul></li><li>Step Out:<ul><li>Toolbar Step Out button ![Lua Editor Step Out Button](images/Luaeditor_step_out_button.png)</li><li>*Debug → Step Out*</li><li> *Shift+F11* shortcut</li></ul></li></ul></li></ol> | <ul><li>Stack and LUA Locals populate with data when entering Game Mode</li><li>Script execution stops on the breakpoint (Current executed line is marked by a yellow triangle pointing to the right, next to the line number)</li><li>Continuing with script execution updates the yellow triangle position until it leaves the `OnActivate()` function</li></ul> |
+
+## Area: Moving entity using Lua script 
+
+### Project Requirements
+
+* Any project with the Remote Tools Connection Gem
+* Lua Editor connected to Editor
+* Saved BaseScript.lua from "Area: Properties usage in Lua scripts" helps with setup
+
+**Assets:**
+
+* ["Area: Moving entity using Lua script" BaseScript.lua](#script_2)
+
+**Product:** 
+
+Entity that can be moved with keyboard input in Game Mode using Lua Script.
+
+**Suggested Time Box:**
+
+30 minutes
+
+| Workflow | Requests | Things to Watch For |
+|----------|----------|---------------------|
+| Create .inputbidings file | <ol><li>Open Asset Editor (for example *Tools → Asset Editor)* and create a new .inputbindings file (*File → New → Input Bindings*)</li><li>Add three following Input Event Groups to the .inputbindings file: <ul><li>Event Name: `Forward`; Event Generators: `keyboard_key_alphanumeric_W` with Event value multiplier: `1.0` and `keyboard_key_alphanumeric_S` with Event value multiplier: `-1.0`</li><li>Event Name: `Strafe`; Event Generators: `keyboard_key_alphanumeric_A` with Event value multiplier: `-1.0` and `keyboard_key_alphanumeric_D` with Event value multiplier: `1.0`</li><li>Event Name: `Look`; Event Generators: `mouse_delta_x` with Event value multiplier: `-1.0`</li></ul></li><li>Save the .inputbindings file for example in the project's Assets folder under the name *PlayerMovement*</li></ol> | <ul><li>New .inputbinding file can be created</li><li>Event Groups can be added to Input Bindings and can be modified</li><li>Input Bindings can be saved</li></ul> |
+| Modify the Lua script so that it uses keyboard input to move the entity | <ol><li>Modify the script as shown below the table in under the **(Click to Expand) BaseScript.lua**</li><li>Find the following copied functions in the Class Reference (Remember that Lua Editor has to be connected to the Editor):<ul><li>GetEntityForward</li><li>AddVelocity</li><li>GetEntityRight</li><li>GetTickDeltaTime</li><li>RotateAroundLocalZ</li></ul></li><li>Save the modified Lua script</li></ol> | <ul><li>Referenced functions can be found in Class Reference</li><li>Lua script can be saved without errors</li></ul> |
+| Create and move Player entity in Game Mode | <ol><li>Create an entity with the following components: <ul><li>*Mesh*</li><li>*Input*</li><li>*PhysX Character Controller*</li><li>*PhysX Character Gameplay*</li></ul></li><li>Assign the PlayerMovement.inputbindings to the Input component</li><li>Assign the Lua script to the Lua Script component.</li><li>Add a Model Asset to the Mesh component (for example BeveledCylinder.fbx)</li><li>Add a child *Camera* entity to the Player entity</li><li>Add a Camera component to the *Camera* child entity and set the Transform's Translate to `{X = 0.0; Y = -3.0; Z = 2.0}` </li><li>Enter the Game Mode and move the entity using mouse and WASD keys </li></ol> | <ul><li>Mentioned components can be added to entities and relevant files can be assigned to their respective components</li><li>Child entity can be added to an entity and it's Transform adjusts based on the parent entity</li><li>Player entity can be moved and rotated around in the Game Mode using defined input keys/mouse</li></ul> |
+
+<details><summary><b>(Click to Expand) BaseScript.lua:</b><a name="script_2"></a></summary>
+<p>
+
+```
+-- BaseScript.lua 
+
+local BaseScript = 
+{
+    Properties =
+    {
+        MyValue = 1,
+    }
+}
+
+function BaseScript:OnActivate()
+	--Bind Input Event Groups from PlayerMovement.inputbindings
+	--Forward
+	self.forwardBusId = InputEventNotificationId("Forward");
+	self.forwardBus = InputEventNotificationBus.Connect(self, self.forwardBusId);
+	--Strafe
+	self.strafeBusId = InputEventNotificationId("Strafe");
+	self.strafeBus = InputEventNotificationBus.Connect(self, self.strafeBusId);
+	--Look
+	self.lookBusId = InputEventNotificationId("Look");
+	self.lookBus = InputEventNotificationBus.Connect(self, self.lookBusId);
+end
+
+--OnHeld is activated when an input is being held or applied constantly (as in the case of mouse movement)
+function BaseScript:OnHeld(inputValue)
+	--Create a reference to the currently used input
+	local currentBusId = InputEventNotificationBus.GetCurrentBusId();
+	
+	--If "Forward" input is held (current used input is equal to "Forward") then
+	--Create a vector variable based on the entity's forward vector(EntityEntity_VM.GetEntityForward) with length equal to value of the input(inputValue)
+	--Add velocity (CharacterControllerRequestBus.Event.AddVelocity) equal to the above vector (self.forwardVector) to the entity housing this script (self.entityId)
+	if currentBusId == self.forwardBusId then
+		self.forwardVector = EntityEntity_VM.GetEntityForward(self.entityId, inputValue);
+		CharacterControllerRequestBus.Event.AddVelocity(self.entityId, self.forwardVector);
+	end
+	
+	--If "Strafe" input is held (current used input is equal to "Strafe") then
+	--Create a vector variable based on the entity's right vector(EntityEntity_VM.GetEntityRight) with length equal to value of the input(inputValue)
+	--Add velocity (CharacterControllerRequestBus.Event.AddVelocity) equal to the above vector (self.rightVector) to the entity housing this script (self.entityId)
+	if currentBusId == self.strafeBusId then
+		self.rightVector = EntityEntity_VM.GetEntityRight(self.entityId, inputValue);
+		CharacterControllerRequestBus.Event.AddVelocity(self.entityId, self.rightVector);
+	end
+	
+	--If "Look" input (horizontal mouse movement) is used (current used input is equal to "Forward") then
+	--Create a float variable that is a multiplication of the input value (inputValue) and time elapsed from the last tick (TickRequestBus.Broadcast.GetTickDeltaTime())
+	--Apply rotation around Z axis of entity housing this script (TransformBus.Event.RotateAroundLocalZ(self.entityId,...) equal to the above float (self.rotateSpeed)
+	if currentBusId == self.lookBusId then
+		self.rotateSpeed = inputValue * TickRequestBus.Broadcast.GetTickDeltaTime();
+		TransformBus.Event.RotateAroundLocalZ(self.entityId, self.rotateSpeed);
+	end
+end
+
+function BaseScript:OnDeactivate()
+     Bye = "Bye! "
+     NumberOne = 1
+     NumberTwo = 2
+     NumbersAdded = NumberOne + NumberTwo
+     Debug.Log(tostring(Bye .. NumberOne .. " + " .. NumberTwo .. " = " .. NumbersAdded));
+end
+
+return BaseScript
+```
+</p>
+</details>
+
+## Area: Using ScriptEvents to communicate between two Lua scripts
+
+### Project Requirements
+
+* Any project
+
+**Assets:**
+
+* ["Area: Using ScriptEvents to communicate between two Lua scripts" SendEvent.lua and ReceiveEvent.lua](#script_3)
+
+**Product:** 
+
+Two Lua scripts, where one of the scripts uses variable passed to it from the other script.
+
+**Suggested Time Box:**
+
+20 minutes
+
+| Workflow | Requests | Things to Watch For |
+|----------|----------|---------------------|
+| Create a Script Event | <ol><li>Open Asset Editor (for example *Tools → Asset Editor)* and create a new .scriptevents file (*File → New → Script Events*)</li><li>Modify the created Script Events file: <ul><li>Name: SimpleScriptEvent</li><li>Add an Event to the Events</li><li>Event Name: SendNumber</li><li>Add a Parameter to the Parameter of SendNumber event</li><li>Parameter Name: Number</li><li>Parameter Type: Number</li></ul></li><li>Save the .scriptevents file for example in the project's Assets folder under the name *SimpleScriptEvent* </li></ol> | <ul><li>New Script Events file can be created</li><li>Script Events file can be modified</li><li>Script Events file can be saved</li></ul> |
+| Create Lua scripts utilizing the Script Event to send a variable from one to another | <ol><li>Create two new Lua scripts and copy the contents of *SendEvent.lua* and *ReceiveEvent.lua* found under the **(Click to Expand) SendEvent.lua and ReceiveEvent.lua:** to them</li><li>Save the Lua scripts with their respective names: *SendEvent.lua* and *ReceiveEvent.lua*</li></ol> | <ul><li>New Lua scripts can be created</li><li>Lua scripts save successfully with provided code</li></ul> |
+| Create entities using the Lua scripts and enter Game Mode | <ol><li>Create two entities with Lua Script component added to them</li><li>Assign *SendEvent.lua* to one of the entities and *ReceiveEvent.lua* to the other</li><li>Enter Game Mode</li></ol> | <ul><li>Entities with Lua Script components can be created</li><li>Lua scripts can be assigned to the Lua Script component</li><li>Assigned scripts execute printing *Received number: 123.0* about every second</li></ul> |
+
+<details><summary><b>(Click to Expand) SendEvent.lua and ReceiveEvent.lua:</b><a name="script_3"></a></summary>
+<p>
+
+*SendEvent.lua*
+```
+local SendEvent = 
+{
+}
+
+function SendEvent:OnActivate()
+	--Connect to Tick bus, so that OnTick(dt) function is available further on
+	self.tickHandler = TickBus.Connect(self)
+	--Create a timer variable with value of 1, later used in the delay setup
+	timer = 1
+	--Connect to the created Script Event (SimpleScriptEvent is the name of the Script Event file)
+	self.ScriptEventHandler = SimpleScriptEvent.Connect(self)
+end
+
+--The delay setup is put in place so that the Send event is guaranteed to launch after all other entities/scripts (including the Receive event) are active
+
+--OnTick is activated each tick returning delta time (dt) since the last tick
+function SendEvent:OnTick(dt)
+	--Each tick subtract the time it took since the last tick from the current timer value and overwrite it (Can be looked at as "Count from 1 to 0 using ticks")
+	timer = timer - dt
+	--If timer variable reaches 0 or negative values then
+	if timer <= 0 then
+		--Send the SimpleScriptEvent's SendNumber event with a Number parameter 123
+		SimpleScriptEvent.Broadcast.SendNumber(123)
+		--Reset the timer variable to 1
+		timer = 1
+	end
+end
+
+return SendEvent
+```
+*ReceiveEvent.lua*
+```
+local ReceiveEvent = 
+{
+}
+
+function ReceiveEvent:OnActivate()
+	--Connect to the created Script Event (SimpleScriptEvent is the name of the Script Event file)
+	self.ScriptEventHandler = SimpleScriptEvent.Connect(self, self.entityId)
+
+end
+
+--Receive the SimpleScriptEvent's SendNumber event with it's parameter (number)
+function ReceiveEvent:SendNumber(number)
+	--Print the received parameter to the Console
+	Debug.Log("Received number: " .. tostring(number))
+end
+
+return ReceiveEvent
+```
+</p>
+</details>

+ 132 - 65
testing-guidance/workflow-tests/scripting/script-canvas-tests.md

@@ -5,109 +5,176 @@ Testing in this area should focus on the functionality of Script Canvas editor.
 ## Common Issues to Watch For
 
 Test guidance will sometimes note specific issues to watch for. The common issues below should be watched for through all testing, even if unrelated to the current workflow being tested.
-1. Asset processor errors when loading/saving graph files.
-2. Warnings or assets that appear in the graph validation log.
-3. Unresponsive UI elements.
 
-### Platforms:
-- Windows
-- Linux
+* Asset processor errors when loading/saving graph files
+* Warnings or assets that appear in the graph validation log
+* Unresponsive UI elements
+
+### Platforms
+
+* Windows
+* Linux
 
 ### Documents and Common Terms
-[O3DE Documentation: Script Canvas](https://www.o3de.org/docs/user-guide/scripting/script-canvas/) <br>
-[O3DE Documentation: Script Canvas Editor Interface Guide](https://www.o3de.org/docs/user-guide/scripting/script-canvas/get-started/editor-interface/) <br>
-[O3DE Documentation: User Functions](https://www.o3de.org/docs/user-guide/scripting/script-canvas/editor-reference/functions/) <br>
 
+* [O3DE Documentation: Script Canvas](https://www.o3de.org/docs/user-guide/scripting/script-canvas/)  
+* [O3DE Documentation: Script Canvas Editor Interface Guide](https://www.o3de.org/docs/user-guide/scripting/script-canvas/get-started/editor-interface/)  
+* [O3DE Documentation: User Functions](https://www.o3de.org/docs/user-guide/scripting/script-canvas/editor-reference/functions/)
+
+**Script Canvas Editor**: Editing tool separate from O3DE's Editor used to create and modify script canvas graph files.
 
-<b>Script Canvas (SC) Editor</b>: Editing tool separate from O3DE's Editor used to create and modify script canvas graph files.
+**Script Canvas Graph**: A collection of node objects that can be modified and saved to a file.
 
-<b>SC Graph</b>: A collection of node objects that can be modified and saved to a file.
+**Script Canvas Editor Basic Tools**: The 5 default tools opened and anchored to the main Script Canvas editor window; Node Palette, Variable Manager, Node Inspector, Minimap, Graph Validation.
 
-<b>SC Editor Basic Tools</b>: The 5 default tools opened and anchored to the main SC editor window; Node Palette, Variable Manager, Node Inspector, Minimap, Graph Validation.
+**Script Canvas Component**: A component that can be searched and attached to an entity in O3DE editor.
 
-<b>SC Component</b>: A component that can be searched and attached to an entity in O3DE editor.
+**User Function**: A type of Script Canvas graph that has 2 special nodes: Entrance & Exit nodelings. User Functions are intended to give users a way to generate re-usable graph logic similar to a function in a standard programming language. When a valid User Function graph is created and saved it will appear in the Node Inspector under the 'User Functions' category.
 
-<b>User Function</b>: A type of SC graph that has 2 special nodes: Entrance & Exit nodelings. User Functions are intended to give users a way to generate re-usable graph logic similar to a function in a standard programming language. When a valid User Function graph is created and saved it will appear in the Node Inspector under the 'User Functions' category.
+### Area: Opening and configuring the Script Canvas Editor
 
-<b></b>
-## Area: Opening and configuring the Script Canvas Editor
+**Project Requirements** 
 
-### Project Requirements
 Any project can be used, the Script Canvas gem and its gem dependencies are required.
 
-**Product:** 
-Visible and responsive Script Canvas editor.
+**Product:** Visible and responsive Script Canvas editor.
 
-**Suggested Time Box:** 
-15 minutes
+**Suggested Time Box:** 30 minutes
 
-| Workflow                                                            | Requests                                                                                                                                                                                                                                                                                                                                                                                                                                                                      | Things to Watch For                                                                                                                                                                                                                               |
-|---------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| Launch and configure script canvas editor                           | *   Check different methods of entry to SC editor (tools menu, SC component, keyboard shortcut).<br>*   Verify default SC editor panes render and resize. panes can undock, dock back onto SC editor.<br> * Verify no rendering issues when panes are altered.                                                                                                                                                                                                                 | *   Script Canvas editor launch method does not work or does not launch quickly. <br> * Script Canvas Editor not retaining configuration settings on close/relaunch.                                                                               |
-| Verify main Script Canvas window pane renders a script canvas graph | *   The main script canvas editor window should render a script canvas graph when a new or existing file is opened, or if a node is dragged from the node palette into an empty editor.<br>*   creating or opening multiple files should generate multiple tabs in the main window.<br> * Creating or opening several files should not impact script canvas editor's performance.<br> * Modifying an existing file places an asterisk in the graph's tab.<br> * A drop down menu for file selection appears when enough script canvas files are opened | *   An asterisk appears on the tab only if a change is made to the file.<br>* You are always prompted to save a modified file when closing the tab.                                                                                                  |
-| Verify __SC Basic Editor Tools__                                       | *   Verify SC editor launches with the __SC Editor Basic Tools__.<br>*   Verify UI elements in each of the tools respond when clicked or dragged.                                                                                                                                                                                                                                                                                                                                         | *   Script Canvas tools do not render properly.<br>*   Tools become unresponsive after configuring them.                                                                                                                                            |
-| Use basic Script Canvas graph controls                              | *   Open or create a new script canvas graph file and make sure the basic script canvas graph controls function when clicked or keyboard shortcut is used.<br>*   Check if a helpful tooltip is generated and rendered properly for each control.<br> * Tooltip does not go away prematurely.<br> * Pan/Zoom on the script canvas graph and make sure graph renders properly.                                                                                                   | *   Control does not respond or responds too slowly when used.<br> *   Controls gray out under appropriate circumstances.<br>*   Cannot interact with grayed out controls.                                                                           |
+| Workflow                                                           | Requests                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | Things to Watch For                                                                                                                                                                                                                                                                                                |
+|--------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| Script Canvas editor can be launched and configured                   | <ol><li>Open Script Canvas editor by multiple ways including:</li><ul><li>Tools menu</li><li>Script Canvas button in components</li><li>Keyboard shortcut ( a shortcut can be assigned via Edit > Editor Settings > Keyboard Customization > Customize Keyboard)</li></ul></ul></li><li>Perform resize, maximize, minimize undock, dock actions with Script Canvas editor and its panes and drag them around the Editor.</li><li>Close and reopen the Script Canvas editor.</li></ol> | <ul><li>Script Canvas editor not launching quickly or not launching at all.</li><li>Script Canvas Editor not retaining configuration settings on close/relaunch.</li><li>Script Canvas panes not rendering, having rendering issues after being altered.</li><li>Not being able to resize, dock or drag panes borders.</li> |
+| Script Canvas window pane renders a script canvas graph | <ol><li>Create a new script in Script Canvas editor by multiple ways including:</li><ul><li>Tools menu File > New Script</li><li>Using Ctrl+N shortcut</li><li>By dragging a node from the Node Pallete into an empty graph window</li></ul></ul></li><li>Close the created script and save it when prompted.</li><li>Open the created script.</li><li>Create multiple new scripts in Script Canvas editor.<ol>                                                                                                                                                    | <ul><li>Modifying an existing file places an asterisk in the graph's tab.</li><li>An asterisk appears on the tab only if a change is made to the file.</li><li>User is always prompted to save a modified file when closing the tab.</li><li>Creating or opening multiple files generates multiple tabs in the main window.</li><li>Creating and having several graphs opened should not impact Script Canvas editor's performance.</li><li>A drop down menu for file selection appears when enough script canvas files are opened.</li></ul>                                             |
+| Script Canvas editor tools can be opened and configured  | <ol><li>Open each of the Script Canvas editor tools.</li><li>Click and try to drag every UI item of the opened tool.</li></ol>                                                     | <ul><li>Script Canvas tools render properly.</li><li>Tools do not become unresponsive after configuring them.</li><li>UI elements in each of the tools respond when clicked or dragged</li>                                                                                                                                                                   |
+| Using basic Script Canvas graph controls | <ol><li>Create a new script canvas graph file, add a few nodes and perform every action from:</li><ul><li>View menu</li><li>Edit Menu</li><li>File menu</li></ul></ul></li><li>Perform every control action located in Script Canvas graph window top left corner.</li></ol> | <ul><li>Every control action and action from Script Canvas menu bar perform corresponding actions.</li><li>Every control action and action from Script Canvas menu can be performed with associated keyboard shortcut.</li><li>Controls not responding or responding too slowly when used.</li><li>Controls gray out under appropriate circumstances.</li><li>Grayed out controls can not be interacted with</li><li>A helpful tooltip is generated and rendered properly for each control.</li><li>Tooltips do not go away prematurely.</li><li>Script Canvas graph renders properly after Pan/Zoom actions.</li></ul>                                                     
+| Opening a Script Canvas graph from older version of the engine            | <ol><li>Obtain a script canvas graph file from an earlier version of O3DE , put it into used project directory and open it with Script Canvas editor.</li><li>Following graph file [OldGraphTest.scriptcanvas](https://github.com/o3de/sig-content/raw/main/testing-guidance/workflow-tests/scripting/scripts/OldGraphTest.scriptcanvas) derived from older o3de development build can be used for this test.</li></ol> | <ul><li>Graph from the older version of the engine is processed by Asset Processor without errors and can be opened with Script Canvas editor.</li><li>If [OldGraphTest.scriptcanvas](https://github.com/o3de/sig-content/raw/main/testing-guidance/workflow-tests/scripting/scripts/OldGraphTest.scriptcanvas) was used and assigned to entity upon entering the game mode/simulation mode a message reading _Old Graph test successful_ should appear in the console.</li> |
+| Opening a Script Canvas graph with deprecated nodes                   | <ol><li>Obtain a script canvas graph file with deprecated nodes, put it into used project directory and open it with Script Canvas editor.</li><li>Following graph file [ontick.scriptcanvas](https://github.com/o3de/sig-content/raw/main/testing-guidance/workflow-tests/scripting/scripts/ontick.scriptcanvas) derived from older o3de development build can be used for this test.</li></ol> | <ul><li>Graph with deprecated nodes is processed by the Asset Processor with errors reminding the user of the deprecated classes but the graph can still be opened with Script Canvas editor.</li><li>When the graph with deprecated nodes is opened in Script Canvas editor it runs validation check on itself and informs the user that listed nodes were updated in order for the graph to work.</li><li>When the graph is saved with proposed updates it is no longer displayed as processed with errors in the Asset Processor.</li><li>If [ontick.scriptcanvas](https://github.com/o3de/sig-content/raw/main/testing-guidance/workflow-tests/scripting/scripts/ontick.scriptcanvas) was used, updated and assigned to entity upon entering the game mode/simulation mode a message reading _OnTick Event:The Sphere position did not change from previous position_ should appear in the console.</li> |
+---
 
 
-## Area: Default Script Canvas Editor tools
+### Area: Default Script Canvas Editor tools
 
-### Project Requirements
-SC editor opened with the 5 basic tools enabled.
+**Project Requirements** 
+<p>Script Canvas editor opened with the complete list of tools which are:
+
+* Node Palette
+* Node Inspector
+* Variable Manager
+* Minimap
+* Graph Validation
+* Debugging
+* Bookmarks
+* Command Line
+* Interpreter
 
 **Product:** 
-Responsive Script Canvas editor with all 5 basic tools enabled. No Asset Processor warnings about invalid data or files, no warnings or errors in the Console Log.
+Responsive Script Canvas editor with all its tools enabled. No Asset Processor warnings about invalid data or files, no warnings or errors in the Console Log.
 
 **Suggested Time Box:** 
-30 minutes
 
-| Workflow                                                            | Requests                                                                                                                                                                                                                                                                                                                                                                                              | Things to Watch For                                                                                                                                                                                                                               |
-|---------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| Use and observe minimap behavior                                    | *   Open or create a graph with multiple nodes.<br>*   Dragging the minimap will pan the main script canvas graph view.<br> * Switching between multiple files will update the minimap.                                                                                                                                                                                                                  | *   The minimap does not render or update properly.<br>*   Panning around the minimap does not cause the effect in main editor window and vice-versa.                                                                                            |
-| Create a variable node with Variable Manager                        | *   Use Variable Manager to create a variable of any type.<br> *  Modify the properties of the variable.<br> * Drop the variable off the Variable Manager list onto a graph.<br> * Drag the variable off the Variable Manager list onto a node's input/ouput field (same type). <br> * Convert a node's input/ouput field to a reference and drag/select variables from the Variable Manager onto it. | *   Variable properties do not update when modified.<br> * Variable manager list refreshes and updates properly when variables are created, deleted or modified.<br> * Node Inspector updates when variables are selected in the Variable Manager. |
-| View and Modify a node with Node Inspector                          | *   Click a node on the graph and verify its fields and values are displayed in the Node Inspector.<br> * Verify that the values can be modified through Node Inspector.<br> Verify Node Inspector updates when different nodes or variables are selected. <br> * Select multiple nodes at once and see how they are reflected in Node Inspector.                                                     | *   Fields are properly labeled in Node Inspector. <br> * Changes made through Node Inspector are reflected on the node and vice-versa.                                                                                                           |
-| Create a graph validation error and warning                         | *   Drag several nodes onto a fresh SC graph. Run validation on the graph to verify warnings are generated and nodes are highlighted. <br> * Connect nodes and run validation to verify that warnings are no longer generated.<br>                                                                                            | * Highlighting & Dimming of failing nodes not updated.<br> * Warnings and errors not removed when issue is resolved.<br> * Conditions that produce an invalid graph do not trigger a warning or error.                                            |
-| Use the Node Palette to find node types                             | *   Search the Node Palette for a specific node type.<br> * Use the scrolling view controls to browse nodes.<br> * Drag a node off the palette onto a new SC graph.<br> * Use right click context menu on a SC graph to search & browse for nodes. <br> *   Mouse over a node in the palette to display a tooltip.                                                                                     | *   Node palette renders properly when entering/deleting text in search field.<br> * Node categories can be expanded and collapsed.                                                                                                               |
+60 minutes
+
 
+| Workflow                                                           | Requests                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | Things to Watch For                                                                                                                                                                                                                                                                                                |
+|--------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| Use and observe minimap behavior                   | <ol><li>Open or create a graph with multiple nodes</li><li>Drag the minimap view around.</li><li>Switch between multiple graphs</li></ol> | <ul><li>If the minimap does not render or update properly.</li><li>If dragging the minimap view does not cause the effect in main editor window and vice-versa.</li> |
+| Create a variable node with Variable Manager | <ol><li>Use Variable Manager to create a variable of any type.</li><li>Modify the properties of the variable.</li><li>Drop the variable off the Variable Manager list onto a graph.</li><li>Drag the variable off the Variable Manager list onto a node's input/ouput field (same type).</li><li>Convert a node's input/ouput field to a reference and drag/select variables from the Variable Manager onto it.<ol>                                                                                                                                                    | <ul><li>If variable properties do not update when modified.</li><li>Variable manager list refreshes and updates properly when variables are created, deleted or modified.</li><li>Node Inspector updates when variables are selected in the Variable Manager.</li></ul>                                             |
+| View and Modify a node with Node Inspector  | <ol><li>Click a node on the graph.</li><li>Modify node values through Node Inspector.</li><li>Add and select different nodes and variables.</li><li>Select multiple nodes at once.</li></ol>                                                     | <ul><li>Fields and values of nodes are displayed and properly labeled in Node Inspector.</li><li>Changes made through Node Inspector are reflected on the node and vice-versa.</li><li>Selecting multiple nodes at once is reflected in Node Inspector.</li>                                                                                                                                                                   |
+| Create a graph validation error and warning | <ol><li>Drag several nodes onto a fresh SC graph and do not connect them.</li><li>Run validation check on the graph.</li><li>Connect nodes and run validation.</li><li>Run the graph validation using dedicated button in Graph Validation pane (checkmark in circle).</li></ol> | <ul><li>If Highlighting & Dimming of failing nodes is not updated.</li><li>If warnings and errors are not removed when issue is resolved.</li><li>If conditions that produce an invalid graph do not trigger a warning or error.</li></ul>                                                     
+| Use the Node Palette to find node types            | <ol><li>Search the Node Palette for a specific node type.</li><li>Use the scrolling view controls to browse nodes.</li><li>Drag a node off the palette onto a new SC graph.</li><li>Use right click context menu on a SC graph to search & browse for nodes.</li><li>Mouse over a node in the palette to display a tooltip.</li></ol> | <ul><li>Node palette renders properly when entering/deleting text in search field.</li><li> Node categories can be expanded and collapsed.</li> |
+| Modify Global Preferences                  | <ol><li>Open Global Preferences and adjust the time required for certain actions to take place. (for instance Node Coupling, Drag Node Splicing)</li><li>Modify Styling Settings of connections.</li><li>Modify Edge Panning Settings.</li></ol> | <ul><li>If nodes are not visually distorted.</li><li> If modification of time requirement for certain actions to take place is not applied.</li> |
+| Using File Menu                   | <ol><li>Create a new script.</li><li>Open an existing script.<li>Use Save script / save script as... functions to save the script.</li><li>Close script.</li><li>Use available keyboard shortcuts to perform above mentioned actions.</li></ol> | <ul><li>If creating a script does not return error in Console.</li><li>Recently saved/created scripts are displayed in "Open Recent" menu.</li><li>Scripts can be saved.</li><li>No errors are printed in the console after saving a script.</li><li>Closing unsaved script displays a message reminding of unsaved changes.</li> |
+| Using Edit Menu                  | <ol><li>Undo and redo various actions.</li><li>Manage nodes, groups, notes via Edit Menu by performing following actions:</li><ul><li>Cut</li><li>Copy</li><li>Paste</li><li>Duplicate</li><li>Delete</li></ul></ul></li><li>Take a screenshot of the graph.</li><li>Select all, inputs, outputs, connected, and clear selections.</li><li>Disable and enable selected nodes.</li><li>Align nodes in various directions.</li><li>Remove unused variables and nodes.</li><li>Use available keyboard shortcuts to perform above mentioned actions.</li></ol> | <ul><li> If nodes are not visually distorted.</li><li>Undoing or redoing actions does not cause an assert or errors to be printed in the console.</li><li> Copy-Pasted nodes do retain their modified properties.</li> |
+| Using View Menu                  | <ol><li>Zoom graph in and out.</li><li>Show selection:</li><ul><li>individual node</li><li>multiple connected nodes</li><li>group</li><li> notes</li><li>entire graph</li></ul></ul></li><li>Use "Go to" option to navigate to start and end of the chain (graph must have multiple nodes connected with each other).</li><li>Restore default layout of Script Canvas tool.</li><li>Use available keyboard shortcuts to actions mentioned above.</li></ol> | <ul><li>Show selection or show entire graph options are displaying graph accurately.</li><li>Default layout can be restored.</li> |
+| Using Tools Menu                  | <ol><li>Open and close tools available in Tools Menu.</li><li>Use available keyboard shortcuts to open and close all tools.<li>Perform resize, maximize, minimize, undock and dock actions with all of Script Canvas editor tools and drag them around the Script Canvas editor.</li></ol> | <ul><li>Tools are opened after selecting them in Tools Menu.</li><li>Shortcuts can be used to open/close tools.</li><li>The user is able to resize, minimize, maximize, undock, dock or drag Script Canvas editor tools around the Script Canvas editor.</li> |
+| Using Script Events [Preview] Menu          | <ul><li> This menu is soon to be deprecated and reworked, until its updated its ommited from testing </li><li> [O3DE User Guide: Script Events](https://www.o3de.org/docs/user-guide/scripting/script-events/) can be followed for the current state of the functionality. |
+---
+
+### Area: Basic Script Canvas graph tests
 
-## Area: Basic Script Canvas graph tests 
 Testing in this area verify basic functionality of script canvas graphs and more in-depth functionality of the default editor tools.
 
-### Project Requirements
-Any project with a new level. SC editor with the __SC Basic Editor Tools__ enabled.
 
-### References
-Default Script Canvas editor layout with the default tools enabled and highlighted.
-![SC graph editor and default tools](images/SCeditor_default_layout.png)
+**Project Requirements** 
+<p>Script Canvas editor opened with the complete list of tools which are:
+
+* Node Palette
+* Node Inspector
+* Variable Manager
+* Minimap
+* Graph Validation
+* Debugging
+* Bookmarks
+* Command Line
+* Interpreter
+
+**References**
+<details><summary>Default Script Canvas editor layout with the default tools enabled and highlighted.</summary>
+<p>
+
+[![SC graph editor and default tools](https://github.com/o3de/sig-content/raw/main/testing-guidance/workflow-tests/scripting/images/SCeditor_default_layout.png)](https://github.com/o3de/sig-content/blob/main/testing-guidance/workflow-tests/scripting/images/SCeditor_default_layout.png)
+
+</p>
+</details>
 
 **Product:** 
-Script canvas graph files with basic input and output when run through game mode or interpreter
+Script canvas graph files with basic input and output when run through game mode or interpreter.
 
 **Suggested Time Box:**
-60 minutes
+75 minutes
+
+| Workflow                                                           | Requests                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | Things to Watch For                                                                                                                                                                                                                                                                                                |
+|--------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| Create and save a new script canvas graph with basic input and output                   | <ol><li>Use any method to create a blank script canvas file.</li><li>Use the node palette or right click context menu to add and connect multiple nodes.</li><li>Create a logic sequence that will occur on graph start or on the activation of an entity</li><li>Use the variable manager to create one or more new variables.</li><li>Change a field on a node to a reference and use the newly created variable</li><li>Click on a variable you created and use the Node Inspector to modify it. Change its name, default value and scope.</li><li> Run the game mode or load the graph in the Interpreter.</li></ol> | <ul><li>If saving the file causes asset processor errors or warnings.</li><li>If repeatedly running the game causes the graph to produce no results or inconsistent results.</li><li>If any console warnings or errors regarding Lua appear.</li> |
+| Create a 2nd script canvas graph file and use a script event to make the two files communicate during gameplay | <ol><li>Use the O3DE asset editor to create a new script event.</li><li>Add a new event to the script event asset. Give it a unique and recognizable name  </li><li>Add input parameters to the event and save the asset.</li><li>Search the Script Canvas editor's node inspector for the new event asset [![Filtering Node Palette for a script event. Dragging the node onto the graph](https://github.com/o3de/sig-content/raw/main/testing-guidance/workflow-tests/scripting/images/SCeditor_script_events_workflow.png)](https://github.com/o3de/sig-content/blob/main/testing-guidance/workflow-tests/scripting/images/SCeditor_script_events_workflow.png) </li><li>Create a Send and Receive signal nodes for the new event.</li><li>Configure two or more script canvas files to send and receive signals from each other.  </li>**Examples:**     <ul><li>  Attach a send signal to a timer node so every other second the receiving script changes a light's color.     </li><li>Send multiple different script events and a script canvas file that has different logic predecated on receiving each of the different signals                                                                                                                          | <ul><li>If there are any tool display issues/unusable portions of tool.</li><li>Saved event asset appears in the directory in which it was saved.</li><li>Events can be used to send and receive signals from two or more script canvas files which can be proven by debug output or working graph logic.</li></ul>                                             |
+| Animated behavior and visual language of Script Canvas.  | <ol><li>Create and hover one node above another, so the nodes are partially transparent.![](https://github.com/o3de/sig-content/blob/944ec3c3d0a3420f78d408e07d9ad146ffeaa78f/testing-guidance/workflow-tests/scripting/images/SCnodes_dimming_hover_over.png)</li><li>Hold Alt key and left click on node to instantly delete it, square particles will appear.![](https://github.com/o3de/sig-content/blob/944ec3c3d0a3420f78d408e07d9ad146ffeaa78f/testing-guidance/workflow-tests/scripting/images/SCnode_delete_particles.png) </li><li>Insert a node between two connected nodes, the cursor need to point onto connection, which will change to dashed line. The node-nudging is enabled by default, the nodes will move aside to accommodate new node.<p>![](https://github.com/o3de/sig-content/blob/944ec3c3d0a3420f78d408e07d9ad146ffeaa78f/testing-guidance/workflow-tests/scripting/images/SCnode_nudging.png) </li></ol>                                                     | <ul><li>If nodes are not dimming/partially transparent when hovering one node over another node.</li><li>If node is deleted without particles visual effect when using Alt + LMB delete method.</li><li>If nodes are not nudging aside to accommodate new node.</li><li>If nodes are not connected after inserting node between two connected nodes.</li>                                                                                                                                                                   |                                                 
+| Nodes behavior           | <ol><li>Add nodes with various data value types to the graph and modify their values.</li><li>Attempt to connect two different value type pins.</li><li>Add input and operand to the node (e. g. Print/Add (+) nodes).</li><li>Hide/show unused slots on the node.</li><li>Convert value to reference and reference to value by clicking RMB on data pin.</li><li>Disable and enable nodes.</li><li>Insert long string into node string value field to extend the node.</li></ol> | <ul><li>If data values cannot be modified.</li><li>If nodes with long strings are visually distorted.</li><li>If disabled nodes are not grayed out.</li> |
+| Connections behavior                  | <ol><li>Create a connection between nodes by dragging connection from output pin onto input pin.</li><li>Drag a connection over empty space in graph and release LMB, in context menu search for desired node to be created and connected to.<li>Connect two nodes by using Node Coupling feature, mentioned feature is enabled by default in Global Preferences. Hover one node over another and hold it above until nodes connect.</li><li>Delete connection by selecting the connection and pressing Del key.</li><li>Delete connection by dragging one node and shaking it, shaking de-splice feature is enabled by default.</li><li>Delete connection by holding Alt key and clicking LMB on connection.</li></ol> | <ul><li>If connection is not created.</li><li>If node is not created after selecting it from context menu.</li><li>If connection cannot be deleted.</li> |
+---
 
-| Workflow                                                                                                        | Requests                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | Things to Watch For                                                                                                                                                                                             |
-|-----------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| Create and save a new script canvas graph with basic input and output                                           | *   Use any method to create a blank script canvas file.<br>    *   Use the node palette or right click context menu to add and connect multiple nodes.<br>    *   Create a logic sequence that will occur on graph start or on the activation of an entity.<br>    *   Use the Variable Manager to create one or more new variables. Change a field on a node to a reference and use the newly created variable.<br> * Click on a variable you created and use the Node Inspector to modify it. Change the name, default value and scope.<br> * Save the graph file and verify it functions as expected by attaching it to an entity and running the game or loading the graph in the Interpreter.                                                                                                                                                                                                                                                                                                               | *   Saving the file causes asset processor errors or warnings.<br>*   Repeatedly running the game causes the graph to produce no results or inconsistent results.<br>*   Console warnings or errors regarding Lua. |
-| Create a 2nd script canvas graph file and use a script event to make the two files communicate during gameplay  | *   Use the O3DE Asset Editor to create a new script event.<br> *   Add a new event to the script event asset. Give it a unique and recognizable name.<br> * Add input parameters to the event and save the asset. Verify the file appears on disk.<br> * Search the Script Canvas editor's node inspector for the new event asset. Verify that you can add a send/receive signal to a graph.<br> ![Filtering Node Palette for a script event. Dragging the node onto the graph](images/SCeditor_script_events_workflow.png) <br> * Configure two or more script canvas files to send and receive signals from each other. Verify the communication with debug output or with more complex logic and game behavior. <br><br><b> Examples: </b><br> * Attach a send signal to a timer node so every other second the receiving script changes a light's color. <br>* Send multiple different script events and a script canvas file that has different logic predecated on receiving each of the different signals. | *   Tool display issues/unusable portions of tool.<br>*   Interactivity issues.                                                                                                                                   |
+### Area: Advanced Script Canvas graph Tests
 
-## Area: Advanced Script Canvas graph Tests
 Tests in this verify more advanced core features of script canvas.
 
-### Project Requirements
-Any project with a new level. SC editor with the 5 basic tools enabled.
+**Project Requirements** 
+<p>Script Canvas editor opened with the complete list of tools which are:
 
-### References
-Main Script Canvas editor view with advanced control buttons highlighted.<br>
-![SC graph view and basic controls](images/SCeditor_graphview_controls.png)<br>
+* Node Palette
+* Node Inspector
+* Variable Manager
+* Minimap
+* Graph Validation
+* Debugging
+* Bookmarks
+* Command Line
+* Interpreter
+
+**References**
+<details><summary>Main Script Canvas editor view with advanced control buttons highlighted.</summary>
+<p>
+
+[![SC graph view and basic controls](https://github.com/o3de/sig-content/raw/main/testing-guidance/workflow-tests/scripting/images/SCeditor_graphview_controls.png)](https://github.com/o3de/sig-content/blob/main/testing-guidance/workflow-tests/scripting/images/SCeditor_graphview_controls.png)
+
+</p>
+</details>
 
 **Product:**
-Organized and annotated Script canvas graph files that produce verifiable outputs when attached to entities and run through game mode or interpreter
+Organized and annotated Script canvas graph files that produce verifiable outputs when attached to entities and run through game mode or interpreter.
 
 **Suggested Time Box:**
-120 minutes
-
-| Workflow                                                                                                                                                                                                       | Requests                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                | Things to Watch For                                                                                                                                                                                                                                                |
-|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| Create a user function and verify its input/output when called from another graph<br> ![Controls for entry/exit nodelings highlighted. Basic user function example.](images/SCeditor_basic_userFunction00.png) | * Use Script Canvas editor to create a graph file with enter/exit nodelings.<br> * Place complex logic or entity behavior between the enter/exit nodelings. <br> * Give the graph file a unique recognizable name and save it.<br> * Call the user function from another graph by finding it in the node palette or right click context menu. <br>![Calling a user function from another graph](images/SCeditor_basic_userFunction01.png) <br> <b>Example Functions: </b><br>*  Two color parameters and returns a blended color.<br>* Entity parameter and returns the number of child entities. <br>* No parameters or output but triggers behavior. | * Recursive functions are <b>NOT</b> supported at the moment.<br> * Modifications to the user function file should require scripts calling the function to also be modified. |
-| Generate and modify translation data                                                                                                                                                                           | * Generate translation data for nodes.<br> * Modify the translation data and verify that the modifications are reflected in Script Canvas editor.<br>                                                                                                                                                                                                                                                                                                                                                                                                   | * Generating translation data does not cause performance dips.<br> *Non-english characters render properly in SC graph. <br>                                                                                                                                      |
-| Use groupings and annotations to organize a graph.                                                                                                                                                             | * Place groupings on a graph.<br> * Add and remove nodes to the groupings. <br> * Place annotations on the graph. <br> * Change the size and positions of groupings and annotations. <br> * Use Node Inspector to modify the test and format of groupings and annotations.                                                                                                                                                                                                                                                                              | * Groupings and annotations not rendering when placed on the graph. <br> * Nodes not "Sticking" to a grouping when size or position is changed. <br> * Modifications to groups and annotations not maintained when graph is saved/loaded.                          |
+150 minutes
+
+| Workflow                                                           | Requests                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | Things to Watch For                                                                                                                                                                                                                                                                                                |
+|--------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| Creating a user function and calling its input/output from another graph                   |<ol><li>Use Script Canvas editor to create a graph file with enter/exit nodelings. (An instance of such graph and buttons used to create nodelings can be seen in the picture below) [![](https://github.com/o3de/sig-content/raw/main/testing-guidance/workflow-tests/scripting/images/SCeditor_basic_userFunction00.png)](https://github.com/o3de/sig-content/blob/main/testing-guidance/workflow-tests/scripting/images/SCeditor_basic_userFunction00.png) </li><li>Place complex logic or entity behavior between the enter/exit nodelings.</li><li>Give the graph file a unique recognizable name and save it.</li><li>Call the user function from another graph by finding it in the node palette or right click context menu [![Calling a user function from another graph](https://github.com/o3de/sig-content/raw/main/testing-guidance/workflow-tests/scripting/images/SCeditor_basic_userFunction01.png)](https://github.com/o3de/sig-content/blob/main/testing-guidance/workflow-tests/scripting/images/SCeditor_basic_userFunction01.png)</li></ol> **Example Functions:** <ol><li>Two color parameters and returns a blended color.</li><li>Entity parameter and returns the number of child entities.</li><li>No parameters or output but triggers behavior. | <ul><li>Recursive functions are **NOT** supported at the moment</li><li>Modifications to the user function file should require scripts calling the function to also be modified.</li> |
+| Generate and modify translation data | <ol><li> Select any node in Script Canvas Node Pallete and right click it.</li><li>Select a _Generate Translation_ option.</li><li>Open the generated _.names_ file and modify in with any text editor by for instance changing the node name. </li><li> Save the file and drag another instance of the corresponding node into the Script Canvas graph. <ol>                                                                                                                                                    | <ul><li>Generating translation data does not cause major performance dips, however please note that generating translation data takes about 3-5 seconds.</li><li>Non-english characters render properly in SC graph.</li><li>Translation data modifications are reflected in Script Canvas editor.</li></ul>                                             |
+| Use groupings  | <ol><li>Create groups of all available types grouping nodes of an existing graph.</li><li>Move the groups around in the Script Canvas editor.</li><li>Resize groups and grab more nodes into them.</li><li>Open Node Inspector and select one of the created groups.</li><li>Perform all available actions found in Node Inspector for selected group (Enabling as Bookmark, Collapsing Group, Changing all Font settings, etc...)</li><li>Double click the groups in graph to collapse/expand them.</li><li>Perform actions from group edit menu by right clicking on a group in Script Canvas graph window (Copy/Paste, Duplicate, Collapse, etc...)</li></ol>                                                     | <ul><li>If groupings are not rendering when placed on the graph.</li><li>If nodes are not "Sticking" to a grouping when size or position is changed.</li><li>Modifications to groups are maintained when graph is saved/loaded.</li><li>Groups can have their all corresponding menu and Node Inspector actions performed.</li><li>Different fonts can be assigned to groups with Font Settings.                                                                                                                                                                  |
+| Use annotations | <ol><li>Create a comment on an existing graph.</li><li>Move the created comment around in the Script Canvas editor. </li><li>Input strings into comment input field.</li><li>Open Node Inspector and select the comment.</li><li>Perform all available actions found in Node Inspector for selected comment (Comment, Background Color, etc...) </li><li>Double click the comment in graph to enter its edit mode.</li><li>Perform actions from comment edit menu by right clicking on a comment in Script Canvas graph window (Cut, Copy/Paste, Duplicate, Delete, Edit comment, etc...)</li></ol>                                                     | <ul><li>Comments can be created on the graph and strings can be written in their input field</li><li>Comments size scales depending on the length of written string.</li><li>Different fonts can be assigned to comments with Font Settings</li><li>Comments can have their all corresponding menu and Node Inspector actions performed.  
+| Use bookmarks           | <ol><li>Create a bookmark on an existing graph.</li><li> Move the created bookmark around in the Script Canvas editor.</li><li>Open Node Inspector and select the comment.</li><li>Perform all available actions found in Node Inspector for selected bookmark( Bookmark Name and Color) </li><li>Open Bookmarks tool and perform available actions:</li><ul><li>Double click bookmark to enter its name edit mode</li><li>Right click bookmark and select Go to Bookmark action</li><li>Right click bookmark and select Delete Bookmark action</li><li>Double click Shortcut section and select a number shortcut for a bookmark</li></ul></ul></li><li>Select a Script Canvas graph window and click a shortcut number associated with one of the bookmarks.</li><li>Perform actions from group edit menu by right clicking on a group in Script Canvas graph window (Cut, Copy/Paste, Duplicate, etc...) </li></ol> | <ul><li>Bookmarks can be created on the graph and are assigned with random color and a shortcut when available.</li><li> Bookmarks can have their color and name changed via Node Inspector.</li><li>Bookmarks can be edited with Bookmarks tool.</li><li>Clicking a number shortcut associated with one of the bookmarks finds and focuses the Script Canvas graph view on the selected bookmark.</li> |
+| Create and use presets                 | <ol><li>Create a comment and a group.</li><li>Change their font settings and colors with Node Inspector.</li><li>Right click them in Script Canvas Graph pane and select "Create Preset From" option.</li><li>Save the selected comment and a group as separate presets.</li><li>Create a new comment and a group.</li><li>Right click them in Script Canvas Graph pane and select "apply preset".</li><li>Apply created presets and default presets to groups and comments.</li><li>Open the Presets Editor tool.</li><li>Switch between Node Group and Comment Construct Types.</li><li>Set various presets as default.</li><li>Remove various presets.</li><li>Click the Reset Button.</li></ol> | <ul><li>Presets can be made out of different comments and groups.</li><li>Presets can be applied to comments and groups and retain their assigned values, fonts and colors.</li><li>Presets can be viewed and removed in Presets Editor tool.</li><li>Using the Reset option in Editor Tool, resets presets to default, removing newly created presets and readding removed default presets.</li> |
+| Use the Debugging tool to generate script logs                  | <ol><li> Create a simple graph with On Graph Start -> Delay -> Print nodes.</li><li>Create an entity with Script Canvas component in the viewport and assign it with previously created graph<li>Open the Debbuger tool in Script Canvas Editor and select the created debug targets from dropdown.</li><li>Enable and disable Auto Capture and Live Updates options.</li><li>Run the Script Canvas Debugger with Capture button.</li><li>Run the Script Canvas Debugger by entering Game Mode in the main Editor window.</li><li>Examine captured data, expand and collapse lines with dedicated buttons.</li></ol> | <ul><li>Created entity appears in Entities tab of Debugging tool.</li><li>Existing script files are displayed in Graphs tab of Debugging tool.</li> |
+| Use Interpreter tool to execute script                 | <ol><li>Create a simple graph with On Graph Start -> Delay (5s) -> Print nodes.</li><li>Open the Interpreter tool in Script Canvas Editor and assign previously created script to it.<li>Click Start button to execute the script.</li><li>Click Stop button during script execution.</li></ol> | <ul><li> Interpreter tool can be assigned with scripts</li><li>Scripts can be executed with Interpreter tool</li><li>Execution of scripts by the Interpreter can be stopped.</li> |
+| Create a script to handle inputs                  | <ol><li>Create an Input Bindings file in Asset Editor tool and configure it as shown in the picture below. ![](https://github.com/o3de/sig-content/blob/944ec3c3d0a3420f78d408e07d9ad146ffeaa78f/testing-guidance/workflow-tests/scripting/images/SCcreate_input_bindings_file.png)</li><li>Create a script with Input Handler node, set Event Name to match previously created input bindings file (Print). ![](https://github.com/o3de/sig-content/blob/944ec3c3d0a3420f78d408e07d9ad146ffeaa78f/testing-guidance/workflow-tests/scripting/images/SCinput_handle_script.png)<li>Create an entity with Script Canvas and Input components, assign previously created Input Bindings file and script to corresponding components.</li><li>Enter Game Mode and press space key to print message in console.</li><li>Assign various keys in Input Bindings file.</li></ol> | <ul><li>Various inputs can be assigned to Input Handlers</li><li>Script Canvas receives and handles assigned inputs</li> |
+| Create a script for Audio playback                 | **Prerequisites:**</li><ul><li>Wwise project is setup.</li><li>Wwise Audio Engine Gem is enabled.</li></ul></ul> <ol><li>Create an entity with Script Canvas, Audio Trigger, and Audio Proxy components.</li><li>In Audio Trigger component assign Play trigger.<li>Create a script with Execute Trigger node that will execute after short delay and assign it to Script Canvas component. ![](https://github.com/o3de/sig-content/blob/944ec3c3d0a3420f78d408e07d9ad146ffeaa78f/testing-guidance/workflow-tests/scripting/images/SCaudio_script.png)</li><li> Enter Game Mode.</li></ol> | <ul><li>Audio triggers can be triggered by Script Canvas</li><li>Audio output can be heard when triggers are playing</li> |
+| Using Command Line                   | <ol><li>Open the Command Line tool with tools menu and Ctrl+P shortcut.</li><li>Type **?** in the command line text bar.<li>Select a command.</li><li>Click the Enter key.</li><li>Type in working command directly into a text bar and click the Enter key.</li></ol> | <ul><li>Command Line Tool can be opened and input can be written into its text bar.</li><li>Commands can be searched for by typing **?** into the text bar.</li><li>Found commands can be entered and corresponding actions such as creating new nodes in Script Canvas graph are executed by the command.</li><li>  Commands can be manually typed into the text bar and executed.</li> |
+---

+ 39 - 0
testing-guidance/workflow-tests/scripting/script-python-tests.md

@@ -0,0 +1,39 @@
+# Python Scripts Workflow Tests
+
+Testing in this area should focus on the functionality of executing python scripts.
+
+## Common Issues to Watch For
+
+Test guidance will sometimes note specific issues to watch for. The common issues below should be watched for through all testing, even if unrelated to the current workflow being tested.
+1. Asset processor errors when importing/executing python scripts
+2. Warnings or errors that appear in the Editor console
+3. Unresponsive UI elements 
+
+### Platforms:
+
+- Windows
+- Linux
+
+### Documents and Common Terms
+
+[O3DE Documentation: Editor Python Bindings Gem](https://www.o3de.org/docs/user-guide/gems/reference/script/python/editor-python-bindings/)
+
+**Python Scripts**: Tool that lists python script samples and allows to execute those scripts.
+
+## Area: Opening Python Scripts tool and executing sample scripts
+
+### Project Requirements
+
+ - Any project can be used, the Editor Python Bindings gem and its gem dependencies are required.
+ - White box Gem is required to visualize easily the script execution as it includes a python scripts that create various entities with meshes.
+
+
+**Product:** 
+Visible and responsive Python Script tool.
+
+**Suggested Time Box:** 
+15 minutes
+
+| Workflow                                                            | Requests                                                                                                                                                                                                                                                                                                                                                                                                                                                                      | Things to Watch For                                                                                                                                                                                                                               |
+|---------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+|Executing python script samples| <ul><li>Open Python Scripts tool via Tools -> Other -> Python Scripts</li><li>Select a script to execute (e. g. Sphere, Staircase)![Python Scripts Tool](images/Python_Scripts_Tool.png)</li><li>Execute selected script using dedicated Execution button.</li></ul>|<ul> <li> Script executes without errors/warnings in the console.</li><li>Entity with mesh component is created and visible in Viewport.</li></ul>

+ 232 - 0
testing-guidance/workflow-tests/scripting/scripts/OldGraphTest.scriptcanvas

@@ -0,0 +1,232 @@
+{
+    "Type": "JsonSerialization",
+    "Version": 1,
+    "ClassName": "ScriptCanvasData",
+    "ClassData": {
+        "m_scriptCanvas": {
+            "Id": {
+                "id": 4547549202427
+            },
+            "Name": "Script Canvas Graph",
+            "Components": {
+                "Component_[10252987494195755521]": {
+                    "$type": "EditorGraph",
+                    "Id": 10252987494195755521,
+                    "m_graphData": {
+                        "m_nodes": [
+                            {
+                                "Id": {
+                                    "id": 4796657305595
+                                },
+                                "Name": "SC-Node(Print)",
+                                "Components": {
+                                    "Component_[508821487811766978]": {
+                                        "$type": "Print",
+                                        "Id": 508821487811766978,
+                                        "Slots": [
+                                            {
+                                                "id": {
+                                                    "m_id": "{1D346D2F-32D6-41FC-9F58-BCA35C869648}"
+                                                },
+                                                "contracts": [
+                                                    {
+                                                        "$type": "SlotTypeContract"
+                                                    }
+                                                ],
+                                                "slotName": "In",
+                                                "toolTip": "Input signal",
+                                                "Descriptor": {
+                                                    "ConnectionType": 1,
+                                                    "SlotType": 1
+                                                }
+                                            },
+                                            {
+                                                "id": {
+                                                    "m_id": "{878F4552-3836-4F9C-9166-E25BA4A1598B}"
+                                                },
+                                                "contracts": [
+                                                    {
+                                                        "$type": "SlotTypeContract"
+                                                    }
+                                                ],
+                                                "slotName": "Out",
+                                                "Descriptor": {
+                                                    "ConnectionType": 2,
+                                                    "SlotType": 1
+                                                }
+                                            }
+                                        ],
+                                        "m_format": "Old graph test successful",
+                                        "m_unresolvedString": [
+                                            "Old graph test successful"
+                                        ]
+                                    }
+                                }
+                            },
+                            {
+                                "Id": {
+                                    "id": 4581908940795
+                                },
+                                "Name": "SC-Node(Start)",
+                                "Components": {
+                                    "Component_[5910355502586888150]": {
+                                        "$type": "Start",
+                                        "Id": 5910355502586888150,
+                                        "Slots": [
+                                            {
+                                                "id": {
+                                                    "m_id": "{19712BE8-EF59-4F8C-84AA-C72145A58072}"
+                                                },
+                                                "contracts": [
+                                                    {
+                                                        "$type": "SlotTypeContract"
+                                                    }
+                                                ],
+                                                "slotName": "Out",
+                                                "toolTip": "Signaled when the entity that owns this graph is fully activated.",
+                                                "Descriptor": {
+                                                    "ConnectionType": 2,
+                                                    "SlotType": 1
+                                                }
+                                            }
+                                        ]
+                                    }
+                                }
+                            }
+                        ],
+                        "m_connections": [
+                            {
+                                "Id": {
+                                    "id": 5655650764795
+                                },
+                                "Name": "srcEndpoint=(On Graph Start: Out), destEndpoint=(Print: In)",
+                                "Components": {
+                                    "Component_[15700763435527766804]": {
+                                        "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection",
+                                        "Id": 15700763435527766804,
+                                        "sourceEndpoint": {
+                                            "nodeId": {
+                                                "id": 4581908940795
+                                            },
+                                            "slotId": {
+                                                "m_id": "{19712BE8-EF59-4F8C-84AA-C72145A58072}"
+                                            }
+                                        },
+                                        "targetEndpoint": {
+                                            "nodeId": {
+                                                "id": 4796657305595
+                                            },
+                                            "slotId": {
+                                                "m_id": "{1D346D2F-32D6-41FC-9F58-BCA35C869648}"
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        ]
+                    },
+                    "versionData": {
+                        "_grammarVersion": 1,
+                        "_runtimeVersion": 1,
+                        "_fileVersion": 1
+                    },
+                    "GraphCanvasData": [
+                        {
+                            "Key": {
+                                "id": 4547549202427
+                            },
+                            "Value": {
+                                "ComponentData": {
+                                    "{5F84B500-8C45-40D1-8EFC-A5306B241444}": {
+                                        "$type": "SceneComponentSaveData",
+                                        "ViewParams": {
+                                            "Scale": 1.5609003994426685,
+                                            "AnchorX": 260.1062927246094,
+                                            "AnchorY": 272.9194030761719
+                                        }
+                                    }
+                                }
+                            }
+                        },
+                        {
+                            "Key": {
+                                "id": 4581908940795
+                            },
+                            "Value": {
+                                "ComponentData": {
+                                    "{24CB38BB-1705-4EC5-8F63-B574571B4DCD}": {
+                                        "$type": "NodeSaveData"
+                                    },
+                                    "{328FF15C-C302-458F-A43D-E1794DE0904E}": {
+                                        "$type": "GeneralNodeTitleComponentSaveData",
+                                        "PaletteOverride": "TimeNodeTitlePalette"
+                                    },
+                                    "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": {
+                                        "$type": "GeometrySaveData",
+                                        "Position": [
+                                            300.0,
+                                            400.0
+                                        ]
+                                    },
+                                    "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": {
+                                        "$type": "StylingComponentSaveData"
+                                    },
+                                    "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": {
+                                        "$type": "PersistentIdComponentSaveData",
+                                        "PersistentId": "{8FBB0C66-A768-499F-9F7F-AB8C7910DD2B}"
+                                    }
+                                }
+                            }
+                        },
+                        {
+                            "Key": {
+                                "id": 4796657305595
+                            },
+                            "Value": {
+                                "ComponentData": {
+                                    "{24CB38BB-1705-4EC5-8F63-B574571B4DCD}": {
+                                        "$type": "NodeSaveData"
+                                    },
+                                    "{328FF15C-C302-458F-A43D-E1794DE0904E}": {
+                                        "$type": "GeneralNodeTitleComponentSaveData",
+                                        "PaletteOverride": "StringNodeTitlePalette"
+                                    },
+                                    "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": {
+                                        "$type": "GeometrySaveData",
+                                        "Position": [
+                                            560.0,
+                                            360.0
+                                        ]
+                                    },
+                                    "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": {
+                                        "$type": "StylingComponentSaveData"
+                                    },
+                                    "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": {
+                                        "$type": "PersistentIdComponentSaveData",
+                                        "PersistentId": "{464AEEA4-0C9C-42F6-908A-9D04D0B81BD8}"
+                                    }
+                                }
+                            }
+                        }
+                    ],
+                    "StatisticsHelper": {
+                        "InstanceCounter": [
+                            {
+                                "Key": 4199610336680704683,
+                                "Value": 1
+                            },
+                            {
+                                "Key": 10684225535275896474,
+                                "Value": 1
+                            }
+                        ]
+                    }
+                },
+                "Component_[7902804321156011030]": {
+                    "$type": "EditorGraphVariableManagerComponent",
+                    "Id": 7902804321156011030
+                }
+            }
+        }
+    }
+}

+ 2838 - 0
testing-guidance/workflow-tests/scripting/scripts/ontick.scriptcanvas

@@ -0,0 +1,2838 @@
+<ObjectStream version="3">
+	<Class name="ScriptCanvasData" version="4" type="{1072E894-0C67-4091-8B64-F7DB324AD13C}">
+		<Class name="AZStd::unique_ptr" field="m_scriptCanvas" type="{8FFB6D85-994F-5262-BA1C-D0082A7F65C5}">
+			<Class name="AZ::Entity" field="element" version="2" type="{75651658-8663-478D-9090-2432DFCAFA44}">
+				<Class name="EntityId" field="Id" version="1" type="{6383F1D3-BB27-4E6B-A49A-6409B2059EAA}">
+					<Class name="AZ::u64" field="id" value="19512503031806" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+				</Class>
+				<Class name="AZStd::string" field="Name" value="ontick" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+				<Class name="AZStd::vector" field="Components" type="{13D58FF9-1088-5C69-9A1F-C2A144B57B78}">
+					<Class name="Graph" field="element" version="8" type="{4D755CA9-AB92-462C-B24F-0B3376F19967}">
+						<Class name="Graph" field="BaseClass1" version="17" type="{C3267D77-EEDC-490E-9E42-F1D1F473E184}">
+							<Class name="AZ::Component" field="BaseClass1" type="{EDFCB2CF-F75D-43BE-B26B-F35821B29247}">
+								<Class name="AZ::u64" field="Id" value="8822779129591503772" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+							</Class>
+							<Class name="GraphData" field="m_graphData" version="4" type="{ADCB5EB5-8D3F-42ED-8F65-EAB58A82C381}">
+								<Class name="AZStd::unordered_set" field="m_nodes" type="{27BF7BD3-6E17-5619-9363-3FC3D9A5369D}">
+									<Class name="AZ::Entity" field="element" version="2" type="{75651658-8663-478D-9090-2432DFCAFA44}">
+										<Class name="EntityId" field="Id" version="1" type="{6383F1D3-BB27-4E6B-A49A-6409B2059EAA}">
+											<Class name="AZ::u64" field="id" value="19516797999102" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+										</Class>
+										<Class name="AZStd::string" field="Name" value="SC-Node(Print)" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+										<Class name="AZStd::vector" field="Components" type="{13D58FF9-1088-5C69-9A1F-C2A144B57B78}">
+											<Class name="Print" field="element" type="{E1940FB4-83FE-4594-9AFF-375FF7603338}">
+												<Class name="StringFormatted" field="BaseClass1" version="1" type="{0B1577E0-339D-4573-93D1-6C311AD12A13}">
+													<Class name="Node" field="BaseClass1" version="14" type="{52B454AE-FA7E-4FE9-87D3-A1CAB235C691}">
+														<Class name="AZ::Component" field="BaseClass1" type="{EDFCB2CF-F75D-43BE-B26B-F35821B29247}">
+															<Class name="AZ::u64" field="Id" value="8669032985216524078" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+														</Class>
+														<Class name="AZStd::list" field="Slots" type="{E01B3091-9B44-571A-A87B-7D0E2768D774}">
+															<Class name="Slot" field="element" version="21" type="{FBFE0F02-4C26-475F-A28B-18D3A533C13C}">
+																<Class name="bool" field="IsOverload" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+																<Class name="bool" field="isVisibile" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+																<Class name="SlotId" field="id" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+																	<Class name="AZ::Uuid" field="m_id" value="{124B6872-6103-40B4-AF39-B2D2D36A148E}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+																</Class>
+																<Class name="int" field="DynamicTypeOverride" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+																<Class name="AZStd::vector" field="contracts" type="{C87136AF-3259-590C-9519-D1C4C75F1C86}">
+																	<Class name="AZStd::unique_ptr" field="element" type="{75F9EC0D-D8D6-5410-BD79-960E22076B03}">
+																		<Class name="SlotTypeContract" field="element" type="{084B4F2A-AB34-4931-9269-E3614FC1CDFA}">
+																			<Class name="Contract" field="BaseClass1" type="{93846E60-BD7E-438A-B970-5C4AA591CF93}"/>
+																		</Class>
+																	</Class>
+																</Class>
+																<Class name="AZStd::string" field="slotName" value="In" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+																<Class name="AZStd::string" field="toolTip" value="Input signal" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+																<Class name="Type" field="DisplayDataType" version="2" type="{0EADF8F5-8AB8-42E9-9C50-F5C78255C817}">
+																	<Class name="unsigned int" field="m_type" value="2" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+																	<Class name="AZ::Uuid" field="m_azType" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+																</Class>
+																<Class name="Crc32" field="DisplayGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																	<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+																</Class>
+																<Class name="SlotDescriptor" field="Descriptor" version="1" type="{FBF1C3A7-AA74-420F-BBE4-29F78D6EA262}">
+																	<Class name="int" field="ConnectionType" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+																	<Class name="int" field="SlotType" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+																</Class>
+																<Class name="bool" field="IsLatent" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+																<Class name="Crc32" field="DynamicGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																	<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+																</Class>
+																<Class name="int" field="DataType" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+																<Class name="bool" field="IsReference" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+																<Class name="VariableId" field="VariableReference" type="{CA57A57B-E510-4C09-B952-1F43742166AE}">
+																	<Class name="AZ::Uuid" field="m_id" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+																</Class>
+																<Class name="bool" field="IsUserAdded" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															</Class>
+															<Class name="Slot" field="element" version="21" type="{FBFE0F02-4C26-475F-A28B-18D3A533C13C}">
+																<Class name="bool" field="IsOverload" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+																<Class name="bool" field="isVisibile" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+																<Class name="SlotId" field="id" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+																	<Class name="AZ::Uuid" field="m_id" value="{6230D493-801B-4A97-9AA2-696ADB0AD060}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+																</Class>
+																<Class name="int" field="DynamicTypeOverride" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+																<Class name="AZStd::vector" field="contracts" type="{C87136AF-3259-590C-9519-D1C4C75F1C86}">
+																	<Class name="AZStd::unique_ptr" field="element" type="{75F9EC0D-D8D6-5410-BD79-960E22076B03}">
+																		<Class name="SlotTypeContract" field="element" type="{084B4F2A-AB34-4931-9269-E3614FC1CDFA}">
+																			<Class name="Contract" field="BaseClass1" type="{93846E60-BD7E-438A-B970-5C4AA591CF93}"/>
+																		</Class>
+																	</Class>
+																</Class>
+																<Class name="AZStd::string" field="slotName" value="Out" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+																<Class name="AZStd::string" field="toolTip" value="" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+																<Class name="Type" field="DisplayDataType" version="2" type="{0EADF8F5-8AB8-42E9-9C50-F5C78255C817}">
+																	<Class name="unsigned int" field="m_type" value="2" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+																	<Class name="AZ::Uuid" field="m_azType" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+																</Class>
+																<Class name="Crc32" field="DisplayGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																	<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+																</Class>
+																<Class name="SlotDescriptor" field="Descriptor" version="1" type="{FBF1C3A7-AA74-420F-BBE4-29F78D6EA262}">
+																	<Class name="int" field="ConnectionType" value="2" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+																	<Class name="int" field="SlotType" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+																</Class>
+																<Class name="bool" field="IsLatent" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+																<Class name="Crc32" field="DynamicGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																	<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+																</Class>
+																<Class name="int" field="DataType" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+																<Class name="bool" field="IsReference" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+																<Class name="VariableId" field="VariableReference" type="{CA57A57B-E510-4C09-B952-1F43742166AE}">
+																	<Class name="AZ::Uuid" field="m_id" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+																</Class>
+																<Class name="bool" field="IsUserAdded" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															</Class>
+														</Class>
+														<Class name="AZStd::list" field="Datums" type="{36259B04-FAAB-5E8A-B7BF-A5E2EA5A9B3A}"/>
+														<Class name="int" field="NodeDisabledFlag" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+													</Class>
+													<Class name="AZStd::string" field="m_format" value="OnTick Event: The Sphere position changed from previous position" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+													<Class name="int" field="m_numericPrecision" value="4" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+													<Class name="AZStd::map" field="m_arrayBindingMap" type="{B3879B66-F836-5380-B4C8-4D519373E77E}"/>
+													<Class name="AZStd::vector" field="m_unresolvedString" type="{99DAD0BC-740E-5E82-826B-8FC7968CC02C}">
+														<Class name="AZStd::string" field="element" value="OnTick Event: The Sphere position changed from previous position" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+													</Class>
+													<Class name="AZStd::map" field="m_formatSlotMap" type="{8E9FB38C-2A95-5DC6-B051-90FF0BA8567F}"/>
+												</Class>
+											</Class>
+										</Class>
+										<Class name="bool" field="IsDependencyReady" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+										<Class name="bool" field="IsRuntimeActive" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+									</Class>
+									<Class name="AZ::Entity" field="element" version="2" type="{75651658-8663-478D-9090-2432DFCAFA44}">
+										<Class name="EntityId" field="Id" version="1" type="{6383F1D3-BB27-4E6B-A49A-6409B2059EAA}">
+											<Class name="AZ::u64" field="id" value="19521092966398" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+										</Class>
+										<Class name="AZStd::string" field="Name" value="SC Node(SetVariable)" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+										<Class name="AZStd::vector" field="Components" type="{13D58FF9-1088-5C69-9A1F-C2A144B57B78}">
+											<Class name="SetVariableNode" field="element" version="1" type="{5EFD2942-AFF9-4137-939C-023AEAA72EB0}">
+												<Class name="Node" field="BaseClass1" version="14" type="{52B454AE-FA7E-4FE9-87D3-A1CAB235C691}">
+													<Class name="AZ::Component" field="BaseClass1" type="{EDFCB2CF-F75D-43BE-B26B-F35821B29247}">
+														<Class name="AZ::u64" field="Id" value="15455939439428589392" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+													</Class>
+													<Class name="AZStd::list" field="Slots" type="{E01B3091-9B44-571A-A87B-7D0E2768D774}">
+														<Class name="Slot" field="element" version="21" type="{FBFE0F02-4C26-475F-A28B-18D3A533C13C}">
+															<Class name="bool" field="IsOverload" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="bool" field="isVisibile" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="SlotId" field="id" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+																<Class name="AZ::Uuid" field="m_id" value="{59CEC1B6-6101-4074-8CE5-0F304FF40B20}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="int" field="DynamicTypeOverride" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="AZStd::vector" field="contracts" type="{C87136AF-3259-590C-9519-D1C4C75F1C86}">
+																<Class name="AZStd::unique_ptr" field="element" type="{75F9EC0D-D8D6-5410-BD79-960E22076B03}">
+																	<Class name="SlotTypeContract" field="element" type="{084B4F2A-AB34-4931-9269-E3614FC1CDFA}">
+																		<Class name="Contract" field="BaseClass1" type="{93846E60-BD7E-438A-B970-5C4AA591CF93}"/>
+																	</Class>
+																</Class>
+															</Class>
+															<Class name="AZStd::string" field="slotName" value="In" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="AZStd::string" field="toolTip" value="When signaled sends the variable referenced by this node to a Data Output slot" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="Type" field="DisplayDataType" version="2" type="{0EADF8F5-8AB8-42E9-9C50-F5C78255C817}">
+																<Class name="unsigned int" field="m_type" value="2" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+																<Class name="AZ::Uuid" field="m_azType" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="Crc32" field="DisplayGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="SlotDescriptor" field="Descriptor" version="1" type="{FBF1C3A7-AA74-420F-BBE4-29F78D6EA262}">
+																<Class name="int" field="ConnectionType" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+																<Class name="int" field="SlotType" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															</Class>
+															<Class name="bool" field="IsLatent" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="Crc32" field="DynamicGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="int" field="DataType" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="bool" field="IsReference" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="VariableId" field="VariableReference" type="{CA57A57B-E510-4C09-B952-1F43742166AE}">
+																<Class name="AZ::Uuid" field="m_id" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="bool" field="IsUserAdded" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+														</Class>
+														<Class name="Slot" field="element" version="21" type="{FBFE0F02-4C26-475F-A28B-18D3A533C13C}">
+															<Class name="bool" field="IsOverload" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="bool" field="isVisibile" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="SlotId" field="id" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+																<Class name="AZ::Uuid" field="m_id" value="{8932E5F1-F169-4E28-81D2-742100A61880}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="int" field="DynamicTypeOverride" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="AZStd::vector" field="contracts" type="{C87136AF-3259-590C-9519-D1C4C75F1C86}">
+																<Class name="AZStd::unique_ptr" field="element" type="{75F9EC0D-D8D6-5410-BD79-960E22076B03}">
+																	<Class name="SlotTypeContract" field="element" type="{084B4F2A-AB34-4931-9269-E3614FC1CDFA}">
+																		<Class name="Contract" field="BaseClass1" type="{93846E60-BD7E-438A-B970-5C4AA591CF93}"/>
+																	</Class>
+																</Class>
+															</Class>
+															<Class name="AZStd::string" field="slotName" value="Out" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="AZStd::string" field="toolTip" value="Signaled after the referenced variable has been pushed to the Data Output slot" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="Type" field="DisplayDataType" version="2" type="{0EADF8F5-8AB8-42E9-9C50-F5C78255C817}">
+																<Class name="unsigned int" field="m_type" value="2" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+																<Class name="AZ::Uuid" field="m_azType" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="Crc32" field="DisplayGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="SlotDescriptor" field="Descriptor" version="1" type="{FBF1C3A7-AA74-420F-BBE4-29F78D6EA262}">
+																<Class name="int" field="ConnectionType" value="2" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+																<Class name="int" field="SlotType" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															</Class>
+															<Class name="bool" field="IsLatent" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="Crc32" field="DynamicGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="int" field="DataType" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="bool" field="IsReference" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="VariableId" field="VariableReference" type="{CA57A57B-E510-4C09-B952-1F43742166AE}">
+																<Class name="AZ::Uuid" field="m_id" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="bool" field="IsUserAdded" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+														</Class>
+														<Class name="Slot" field="element" version="21" type="{FBFE0F02-4C26-475F-A28B-18D3A533C13C}">
+															<Class name="bool" field="IsOverload" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="bool" field="isVisibile" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="SlotId" field="id" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+																<Class name="AZ::Uuid" field="m_id" value="{7A8DCE57-865E-4A02-B8CD-7B03C8955B1C}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="int" field="DynamicTypeOverride" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="AZStd::vector" field="contracts" type="{C87136AF-3259-590C-9519-D1C4C75F1C86}">
+																<Class name="AZStd::unique_ptr" field="element" type="{75F9EC0D-D8D6-5410-BD79-960E22076B03}">
+																	<Class name="SlotTypeContract" field="element" type="{084B4F2A-AB34-4931-9269-E3614FC1CDFA}">
+																		<Class name="Contract" field="BaseClass1" type="{93846E60-BD7E-438A-B970-5C4AA591CF93}"/>
+																	</Class>
+																</Class>
+																<Class name="AZStd::unique_ptr" field="element" type="{75F9EC0D-D8D6-5410-BD79-960E22076B03}">
+																	<Class name="ExclusivePureDataContract" field="element" type="{E48A0B26-B6B7-4AF3-9341-9E5C5C1F0DE8}">
+																		<Class name="Contract" field="BaseClass1" type="{93846E60-BD7E-438A-B970-5C4AA591CF93}"/>
+																	</Class>
+																</Class>
+															</Class>
+															<Class name="AZStd::string" field="slotName" value="Vector3" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="AZStd::string" field="toolTip" value="" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="Type" field="DisplayDataType" version="2" type="{0EADF8F5-8AB8-42E9-9C50-F5C78255C817}">
+																<Class name="unsigned int" field="m_type" value="2" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+																<Class name="AZ::Uuid" field="m_azType" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="Crc32" field="DisplayGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="SlotDescriptor" field="Descriptor" version="1" type="{FBF1C3A7-AA74-420F-BBE4-29F78D6EA262}">
+																<Class name="int" field="ConnectionType" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+																<Class name="int" field="SlotType" value="2" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															</Class>
+															<Class name="bool" field="IsLatent" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="Crc32" field="DynamicGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="int" field="DataType" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="bool" field="IsReference" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="VariableId" field="VariableReference" type="{CA57A57B-E510-4C09-B952-1F43742166AE}">
+																<Class name="AZ::Uuid" field="m_id" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="bool" field="IsUserAdded" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+														</Class>
+														<Class name="Slot" field="element" version="21" type="{FBFE0F02-4C26-475F-A28B-18D3A533C13C}">
+															<Class name="bool" field="IsOverload" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="bool" field="isVisibile" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="SlotId" field="id" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+																<Class name="AZ::Uuid" field="m_id" value="{D131DCAC-F841-48DD-A130-89AC3D341BCE}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="int" field="DynamicTypeOverride" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="AZStd::vector" field="contracts" type="{C87136AF-3259-590C-9519-D1C4C75F1C86}">
+																<Class name="AZStd::unique_ptr" field="element" type="{75F9EC0D-D8D6-5410-BD79-960E22076B03}">
+																	<Class name="SlotTypeContract" field="element" type="{084B4F2A-AB34-4931-9269-E3614FC1CDFA}">
+																		<Class name="Contract" field="BaseClass1" type="{93846E60-BD7E-438A-B970-5C4AA591CF93}"/>
+																	</Class>
+																</Class>
+															</Class>
+															<Class name="AZStd::string" field="slotName" value="Vector3" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="AZStd::string" field="toolTip" value="" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="Type" field="DisplayDataType" version="2" type="{0EADF8F5-8AB8-42E9-9C50-F5C78255C817}">
+																<Class name="unsigned int" field="m_type" value="8" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+																<Class name="AZ::Uuid" field="m_azType" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="Crc32" field="DisplayGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="SlotDescriptor" field="Descriptor" version="1" type="{FBF1C3A7-AA74-420F-BBE4-29F78D6EA262}">
+																<Class name="int" field="ConnectionType" value="2" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+																<Class name="int" field="SlotType" value="2" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															</Class>
+															<Class name="bool" field="IsLatent" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="Crc32" field="DynamicGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="int" field="DataType" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="bool" field="IsReference" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="VariableId" field="VariableReference" type="{CA57A57B-E510-4C09-B952-1F43742166AE}">
+																<Class name="AZ::Uuid" field="m_id" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="bool" field="IsUserAdded" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+														</Class>
+														<Class name="Slot" field="element" version="21" type="{FBFE0F02-4C26-475F-A28B-18D3A533C13C}">
+															<Class name="bool" field="IsOverload" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="bool" field="isVisibile" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="SlotId" field="id" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+																<Class name="AZ::Uuid" field="m_id" value="{6D1E7A19-989B-47F6-8725-40FA85B7B2FC}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="int" field="DynamicTypeOverride" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="AZStd::vector" field="contracts" type="{C87136AF-3259-590C-9519-D1C4C75F1C86}">
+																<Class name="AZStd::unique_ptr" field="element" type="{75F9EC0D-D8D6-5410-BD79-960E22076B03}">
+																	<Class name="SlotTypeContract" field="element" type="{084B4F2A-AB34-4931-9269-E3614FC1CDFA}">
+																		<Class name="Contract" field="BaseClass1" type="{93846E60-BD7E-438A-B970-5C4AA591CF93}"/>
+																	</Class>
+																</Class>
+															</Class>
+															<Class name="AZStd::string" field="slotName" value="x: Number" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="AZStd::string" field="toolTip" value="" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="Type" field="DisplayDataType" version="2" type="{0EADF8F5-8AB8-42E9-9C50-F5C78255C817}">
+																<Class name="unsigned int" field="m_type" value="3" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+																<Class name="AZ::Uuid" field="m_azType" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="Crc32" field="DisplayGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="SlotDescriptor" field="Descriptor" version="1" type="{FBF1C3A7-AA74-420F-BBE4-29F78D6EA262}">
+																<Class name="int" field="ConnectionType" value="2" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+																<Class name="int" field="SlotType" value="2" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															</Class>
+															<Class name="bool" field="IsLatent" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="Crc32" field="DynamicGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="int" field="DataType" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="bool" field="IsReference" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="VariableId" field="VariableReference" type="{CA57A57B-E510-4C09-B952-1F43742166AE}">
+																<Class name="AZ::Uuid" field="m_id" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="bool" field="IsUserAdded" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+														</Class>
+														<Class name="Slot" field="element" version="21" type="{FBFE0F02-4C26-475F-A28B-18D3A533C13C}">
+															<Class name="bool" field="IsOverload" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="bool" field="isVisibile" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="SlotId" field="id" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+																<Class name="AZ::Uuid" field="m_id" value="{5185A3BA-CE04-430B-8E30-06D02F4C9E7C}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="int" field="DynamicTypeOverride" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="AZStd::vector" field="contracts" type="{C87136AF-3259-590C-9519-D1C4C75F1C86}">
+																<Class name="AZStd::unique_ptr" field="element" type="{75F9EC0D-D8D6-5410-BD79-960E22076B03}">
+																	<Class name="SlotTypeContract" field="element" type="{084B4F2A-AB34-4931-9269-E3614FC1CDFA}">
+																		<Class name="Contract" field="BaseClass1" type="{93846E60-BD7E-438A-B970-5C4AA591CF93}"/>
+																	</Class>
+																</Class>
+															</Class>
+															<Class name="AZStd::string" field="slotName" value="y: Number" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="AZStd::string" field="toolTip" value="" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="Type" field="DisplayDataType" version="2" type="{0EADF8F5-8AB8-42E9-9C50-F5C78255C817}">
+																<Class name="unsigned int" field="m_type" value="3" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+																<Class name="AZ::Uuid" field="m_azType" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="Crc32" field="DisplayGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="SlotDescriptor" field="Descriptor" version="1" type="{FBF1C3A7-AA74-420F-BBE4-29F78D6EA262}">
+																<Class name="int" field="ConnectionType" value="2" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+																<Class name="int" field="SlotType" value="2" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															</Class>
+															<Class name="bool" field="IsLatent" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="Crc32" field="DynamicGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="int" field="DataType" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="bool" field="IsReference" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="VariableId" field="VariableReference" type="{CA57A57B-E510-4C09-B952-1F43742166AE}">
+																<Class name="AZ::Uuid" field="m_id" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="bool" field="IsUserAdded" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+														</Class>
+														<Class name="Slot" field="element" version="21" type="{FBFE0F02-4C26-475F-A28B-18D3A533C13C}">
+															<Class name="bool" field="IsOverload" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="bool" field="isVisibile" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="SlotId" field="id" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+																<Class name="AZ::Uuid" field="m_id" value="{5E51ADFE-8B88-4A15-9A20-7FC5F95FEBEE}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="int" field="DynamicTypeOverride" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="AZStd::vector" field="contracts" type="{C87136AF-3259-590C-9519-D1C4C75F1C86}">
+																<Class name="AZStd::unique_ptr" field="element" type="{75F9EC0D-D8D6-5410-BD79-960E22076B03}">
+																	<Class name="SlotTypeContract" field="element" type="{084B4F2A-AB34-4931-9269-E3614FC1CDFA}">
+																		<Class name="Contract" field="BaseClass1" type="{93846E60-BD7E-438A-B970-5C4AA591CF93}"/>
+																	</Class>
+																</Class>
+															</Class>
+															<Class name="AZStd::string" field="slotName" value="z: Number" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="AZStd::string" field="toolTip" value="" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="Type" field="DisplayDataType" version="2" type="{0EADF8F5-8AB8-42E9-9C50-F5C78255C817}">
+																<Class name="unsigned int" field="m_type" value="3" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+																<Class name="AZ::Uuid" field="m_azType" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="Crc32" field="DisplayGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="SlotDescriptor" field="Descriptor" version="1" type="{FBF1C3A7-AA74-420F-BBE4-29F78D6EA262}">
+																<Class name="int" field="ConnectionType" value="2" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+																<Class name="int" field="SlotType" value="2" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															</Class>
+															<Class name="bool" field="IsLatent" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="Crc32" field="DynamicGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="int" field="DataType" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="bool" field="IsReference" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="VariableId" field="VariableReference" type="{CA57A57B-E510-4C09-B952-1F43742166AE}">
+																<Class name="AZ::Uuid" field="m_id" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="bool" field="IsUserAdded" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+														</Class>
+													</Class>
+													<Class name="AZStd::list" field="Datums" type="{36259B04-FAAB-5E8A-B7BF-A5E2EA5A9B3A}">
+														<Class name="Datum" field="element" version="6" type="{8B836FC0-98A8-4A81-8651-35C7CA125451}">
+															<Class name="bool" field="m_isUntypedStorage" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="Type" field="m_type" version="2" type="{0EADF8F5-8AB8-42E9-9C50-F5C78255C817}">
+																<Class name="unsigned int" field="m_type" value="8" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+																<Class name="AZ::Uuid" field="m_azType" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="int" field="m_originality" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="any" field="m_datumStorage" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
+																<Class name="Vector3" field="m_data" value="0.0000000 0.0000000 0.0000000" type="{8379EB7D-01FA-4538-B64B-A6543B4BE73D}"/>
+															</Class>
+															<Class name="AZStd::string" field="m_datumLabel" value="Vector3" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+														</Class>
+													</Class>
+													<Class name="int" field="NodeDisabledFlag" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+												</Class>
+												<Class name="VariableId" field="m_variableId" type="{CA57A57B-E510-4C09-B952-1F43742166AE}">
+													<Class name="AZ::Uuid" field="m_id" value="{B66F614B-9534-4532-B257-C9F5469913C4}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+												</Class>
+												<Class name="SlotId" field="m_variableDataInSlotId" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+													<Class name="AZ::Uuid" field="m_id" value="{7A8DCE57-865E-4A02-B8CD-7B03C8955B1C}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+												</Class>
+												<Class name="SlotId" field="m_variableDataOutSlotId" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+													<Class name="AZ::Uuid" field="m_id" value="{D131DCAC-F841-48DD-A130-89AC3D341BCE}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+												</Class>
+												<Class name="AZStd::vector" field="m_propertyAccounts" type="{3BEC267E-B4D3-588E-B183-954A20D83BDD}">
+													<Class name="PropertyMetadata" field="element" type="{A4910EF1-0139-4A7A-878C-E60E18F3993A}">
+														<Class name="SlotId" field="m_propertySlotId" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+															<Class name="AZ::Uuid" field="m_id" value="{6D1E7A19-989B-47F6-8725-40FA85B7B2FC}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+														</Class>
+														<Class name="Type" field="m_propertyType" version="2" type="{0EADF8F5-8AB8-42E9-9C50-F5C78255C817}">
+															<Class name="unsigned int" field="m_type" value="3" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															<Class name="AZ::Uuid" field="m_azType" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+														</Class>
+														<Class name="AZStd::string" field="m_propertyName" value="x" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+													</Class>
+													<Class name="PropertyMetadata" field="element" type="{A4910EF1-0139-4A7A-878C-E60E18F3993A}">
+														<Class name="SlotId" field="m_propertySlotId" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+															<Class name="AZ::Uuid" field="m_id" value="{5185A3BA-CE04-430B-8E30-06D02F4C9E7C}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+														</Class>
+														<Class name="Type" field="m_propertyType" version="2" type="{0EADF8F5-8AB8-42E9-9C50-F5C78255C817}">
+															<Class name="unsigned int" field="m_type" value="3" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															<Class name="AZ::Uuid" field="m_azType" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+														</Class>
+														<Class name="AZStd::string" field="m_propertyName" value="y" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+													</Class>
+													<Class name="PropertyMetadata" field="element" type="{A4910EF1-0139-4A7A-878C-E60E18F3993A}">
+														<Class name="SlotId" field="m_propertySlotId" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+															<Class name="AZ::Uuid" field="m_id" value="{5E51ADFE-8B88-4A15-9A20-7FC5F95FEBEE}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+														</Class>
+														<Class name="Type" field="m_propertyType" version="2" type="{0EADF8F5-8AB8-42E9-9C50-F5C78255C817}">
+															<Class name="unsigned int" field="m_type" value="3" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															<Class name="AZ::Uuid" field="m_azType" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+														</Class>
+														<Class name="AZStd::string" field="m_propertyName" value="z" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+													</Class>
+												</Class>
+											</Class>
+										</Class>
+										<Class name="bool" field="IsDependencyReady" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+										<Class name="bool" field="IsRuntimeActive" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+									</Class>
+									<Class name="AZ::Entity" field="element" version="2" type="{75651658-8663-478D-9090-2432DFCAFA44}">
+										<Class name="EntityId" field="Id" version="1" type="{6383F1D3-BB27-4E6B-A49A-6409B2059EAA}">
+											<Class name="AZ::u64" field="id" value="19525387933694" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+										</Class>
+										<Class name="AZStd::string" field="Name" value="SC-Node(Gate)" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+										<Class name="AZStd::vector" field="Components" type="{13D58FF9-1088-5C69-9A1F-C2A144B57B78}">
+											<Class name="Gate" field="element" type="{F19CC10A-02FD-4E75-ADAA-9CFBD8A4E2F8}">
+												<Class name="Node" field="BaseClass1" version="14" type="{52B454AE-FA7E-4FE9-87D3-A1CAB235C691}">
+													<Class name="AZ::Component" field="BaseClass1" type="{EDFCB2CF-F75D-43BE-B26B-F35821B29247}">
+														<Class name="AZ::u64" field="Id" value="15807126299035693052" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+													</Class>
+													<Class name="AZStd::list" field="Slots" type="{E01B3091-9B44-571A-A87B-7D0E2768D774}">
+														<Class name="Slot" field="element" version="21" type="{FBFE0F02-4C26-475F-A28B-18D3A533C13C}">
+															<Class name="bool" field="IsOverload" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="bool" field="isVisibile" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="SlotId" field="id" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+																<Class name="AZ::Uuid" field="m_id" value="{103D9D66-0727-4D9B-9764-C9A1D9407919}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="int" field="DynamicTypeOverride" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="AZStd::vector" field="contracts" type="{C87136AF-3259-590C-9519-D1C4C75F1C86}">
+																<Class name="AZStd::unique_ptr" field="element" type="{75F9EC0D-D8D6-5410-BD79-960E22076B03}">
+																	<Class name="SlotTypeContract" field="element" type="{084B4F2A-AB34-4931-9269-E3614FC1CDFA}">
+																		<Class name="Contract" field="BaseClass1" type="{93846E60-BD7E-438A-B970-5C4AA591CF93}"/>
+																	</Class>
+																</Class>
+															</Class>
+															<Class name="AZStd::string" field="slotName" value="In" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="AZStd::string" field="toolTip" value="Input signal" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="Type" field="DisplayDataType" version="2" type="{0EADF8F5-8AB8-42E9-9C50-F5C78255C817}">
+																<Class name="unsigned int" field="m_type" value="2" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+																<Class name="AZ::Uuid" field="m_azType" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="Crc32" field="DisplayGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="SlotDescriptor" field="Descriptor" version="1" type="{FBF1C3A7-AA74-420F-BBE4-29F78D6EA262}">
+																<Class name="int" field="ConnectionType" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+																<Class name="int" field="SlotType" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															</Class>
+															<Class name="bool" field="IsLatent" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="Crc32" field="DynamicGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="int" field="DataType" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="bool" field="IsReference" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="VariableId" field="VariableReference" type="{CA57A57B-E510-4C09-B952-1F43742166AE}">
+																<Class name="AZ::Uuid" field="m_id" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="bool" field="IsUserAdded" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+														</Class>
+														<Class name="Slot" field="element" version="21" type="{FBFE0F02-4C26-475F-A28B-18D3A533C13C}">
+															<Class name="bool" field="IsOverload" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="bool" field="isVisibile" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="SlotId" field="id" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+																<Class name="AZ::Uuid" field="m_id" value="{456142BA-A9FE-4657-8BF1-71A2CEB63A90}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="int" field="DynamicTypeOverride" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="AZStd::vector" field="contracts" type="{C87136AF-3259-590C-9519-D1C4C75F1C86}">
+																<Class name="AZStd::unique_ptr" field="element" type="{75F9EC0D-D8D6-5410-BD79-960E22076B03}">
+																	<Class name="SlotTypeContract" field="element" type="{084B4F2A-AB34-4931-9269-E3614FC1CDFA}">
+																		<Class name="Contract" field="BaseClass1" type="{93846E60-BD7E-438A-B970-5C4AA591CF93}"/>
+																	</Class>
+																</Class>
+															</Class>
+															<Class name="AZStd::string" field="slotName" value="True" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="AZStd::string" field="toolTip" value="Signaled if the condition provided evaluates to true." type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="Type" field="DisplayDataType" version="2" type="{0EADF8F5-8AB8-42E9-9C50-F5C78255C817}">
+																<Class name="unsigned int" field="m_type" value="2" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+																<Class name="AZ::Uuid" field="m_azType" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="Crc32" field="DisplayGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="SlotDescriptor" field="Descriptor" version="1" type="{FBF1C3A7-AA74-420F-BBE4-29F78D6EA262}">
+																<Class name="int" field="ConnectionType" value="2" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+																<Class name="int" field="SlotType" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															</Class>
+															<Class name="bool" field="IsLatent" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="Crc32" field="DynamicGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="int" field="DataType" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="bool" field="IsReference" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="VariableId" field="VariableReference" type="{CA57A57B-E510-4C09-B952-1F43742166AE}">
+																<Class name="AZ::Uuid" field="m_id" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="bool" field="IsUserAdded" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+														</Class>
+														<Class name="Slot" field="element" version="21" type="{FBFE0F02-4C26-475F-A28B-18D3A533C13C}">
+															<Class name="bool" field="IsOverload" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="bool" field="isVisibile" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="SlotId" field="id" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+																<Class name="AZ::Uuid" field="m_id" value="{15AC0FDF-7967-4625-8898-12B545098077}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="int" field="DynamicTypeOverride" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="AZStd::vector" field="contracts" type="{C87136AF-3259-590C-9519-D1C4C75F1C86}">
+																<Class name="AZStd::unique_ptr" field="element" type="{75F9EC0D-D8D6-5410-BD79-960E22076B03}">
+																	<Class name="SlotTypeContract" field="element" type="{084B4F2A-AB34-4931-9269-E3614FC1CDFA}">
+																		<Class name="Contract" field="BaseClass1" type="{93846E60-BD7E-438A-B970-5C4AA591CF93}"/>
+																	</Class>
+																</Class>
+															</Class>
+															<Class name="AZStd::string" field="slotName" value="False" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="AZStd::string" field="toolTip" value="Signaled if the condition provided evaluates to false." type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="Type" field="DisplayDataType" version="2" type="{0EADF8F5-8AB8-42E9-9C50-F5C78255C817}">
+																<Class name="unsigned int" field="m_type" value="2" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+																<Class name="AZ::Uuid" field="m_azType" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="Crc32" field="DisplayGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="SlotDescriptor" field="Descriptor" version="1" type="{FBF1C3A7-AA74-420F-BBE4-29F78D6EA262}">
+																<Class name="int" field="ConnectionType" value="2" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+																<Class name="int" field="SlotType" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															</Class>
+															<Class name="bool" field="IsLatent" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="Crc32" field="DynamicGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="int" field="DataType" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="bool" field="IsReference" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="VariableId" field="VariableReference" type="{CA57A57B-E510-4C09-B952-1F43742166AE}">
+																<Class name="AZ::Uuid" field="m_id" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="bool" field="IsUserAdded" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+														</Class>
+														<Class name="Slot" field="element" version="21" type="{FBFE0F02-4C26-475F-A28B-18D3A533C13C}">
+															<Class name="bool" field="IsOverload" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="bool" field="isVisibile" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="SlotId" field="id" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+																<Class name="AZ::Uuid" field="m_id" value="{70F38F7F-C002-4AEF-9EB4-D173D13242F6}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="int" field="DynamicTypeOverride" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="AZStd::vector" field="contracts" type="{C87136AF-3259-590C-9519-D1C4C75F1C86}">
+																<Class name="AZStd::unique_ptr" field="element" type="{75F9EC0D-D8D6-5410-BD79-960E22076B03}">
+																	<Class name="SlotTypeContract" field="element" type="{084B4F2A-AB34-4931-9269-E3614FC1CDFA}">
+																		<Class name="Contract" field="BaseClass1" type="{93846E60-BD7E-438A-B970-5C4AA591CF93}"/>
+																	</Class>
+																</Class>
+																<Class name="AZStd::unique_ptr" field="element" type="{75F9EC0D-D8D6-5410-BD79-960E22076B03}">
+																	<Class name="ExclusivePureDataContract" field="element" type="{E48A0B26-B6B7-4AF3-9341-9E5C5C1F0DE8}">
+																		<Class name="Contract" field="BaseClass1" type="{93846E60-BD7E-438A-B970-5C4AA591CF93}"/>
+																	</Class>
+																</Class>
+															</Class>
+															<Class name="AZStd::string" field="slotName" value="Condition" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="AZStd::string" field="toolTip" value="If true the node will signal the Output and proceed execution" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="Type" field="DisplayDataType" version="2" type="{0EADF8F5-8AB8-42E9-9C50-F5C78255C817}">
+																<Class name="unsigned int" field="m_type" value="2" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+																<Class name="AZ::Uuid" field="m_azType" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="Crc32" field="DisplayGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="SlotDescriptor" field="Descriptor" version="1" type="{FBF1C3A7-AA74-420F-BBE4-29F78D6EA262}">
+																<Class name="int" field="ConnectionType" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+																<Class name="int" field="SlotType" value="2" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															</Class>
+															<Class name="bool" field="IsLatent" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="Crc32" field="DynamicGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="int" field="DataType" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="bool" field="IsReference" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="VariableId" field="VariableReference" type="{CA57A57B-E510-4C09-B952-1F43742166AE}">
+																<Class name="AZ::Uuid" field="m_id" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="bool" field="IsUserAdded" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+														</Class>
+													</Class>
+													<Class name="AZStd::list" field="Datums" type="{36259B04-FAAB-5E8A-B7BF-A5E2EA5A9B3A}">
+														<Class name="Datum" field="element" version="6" type="{8B836FC0-98A8-4A81-8651-35C7CA125451}">
+															<Class name="bool" field="m_isUntypedStorage" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="Type" field="m_type" version="2" type="{0EADF8F5-8AB8-42E9-9C50-F5C78255C817}">
+																<Class name="unsigned int" field="m_type" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+																<Class name="AZ::Uuid" field="m_azType" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="int" field="m_originality" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="any" field="m_datumStorage" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
+																<Class name="bool" field="m_data" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															</Class>
+															<Class name="AZStd::string" field="m_datumLabel" value="Condition" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+														</Class>
+													</Class>
+													<Class name="int" field="NodeDisabledFlag" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+												</Class>
+											</Class>
+										</Class>
+										<Class name="bool" field="IsDependencyReady" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+										<Class name="bool" field="IsRuntimeActive" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+									</Class>
+									<Class name="AZ::Entity" field="element" version="2" type="{75651658-8663-478D-9090-2432DFCAFA44}">
+										<Class name="EntityId" field="Id" version="1" type="{6383F1D3-BB27-4E6B-A49A-6409B2059EAA}">
+											<Class name="AZ::u64" field="id" value="19529682900990" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+										</Class>
+										<Class name="AZStd::string" field="Name" value="SC-Node(Print)" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+										<Class name="AZStd::vector" field="Components" type="{13D58FF9-1088-5C69-9A1F-C2A144B57B78}">
+											<Class name="Print" field="element" type="{E1940FB4-83FE-4594-9AFF-375FF7603338}">
+												<Class name="StringFormatted" field="BaseClass1" version="1" type="{0B1577E0-339D-4573-93D1-6C311AD12A13}">
+													<Class name="Node" field="BaseClass1" version="14" type="{52B454AE-FA7E-4FE9-87D3-A1CAB235C691}">
+														<Class name="AZ::Component" field="BaseClass1" type="{EDFCB2CF-F75D-43BE-B26B-F35821B29247}">
+															<Class name="AZ::u64" field="Id" value="2912261723434655751" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+														</Class>
+														<Class name="AZStd::list" field="Slots" type="{E01B3091-9B44-571A-A87B-7D0E2768D774}">
+															<Class name="Slot" field="element" version="21" type="{FBFE0F02-4C26-475F-A28B-18D3A533C13C}">
+																<Class name="bool" field="IsOverload" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+																<Class name="bool" field="isVisibile" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+																<Class name="SlotId" field="id" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+																	<Class name="AZ::Uuid" field="m_id" value="{6A71F0E7-5DAA-4C02-B0E2-5269827FF3EF}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+																</Class>
+																<Class name="int" field="DynamicTypeOverride" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+																<Class name="AZStd::vector" field="contracts" type="{C87136AF-3259-590C-9519-D1C4C75F1C86}">
+																	<Class name="AZStd::unique_ptr" field="element" type="{75F9EC0D-D8D6-5410-BD79-960E22076B03}">
+																		<Class name="SlotTypeContract" field="element" type="{084B4F2A-AB34-4931-9269-E3614FC1CDFA}">
+																			<Class name="Contract" field="BaseClass1" type="{93846E60-BD7E-438A-B970-5C4AA591CF93}"/>
+																		</Class>
+																	</Class>
+																</Class>
+																<Class name="AZStd::string" field="slotName" value="In" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+																<Class name="AZStd::string" field="toolTip" value="Input signal" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+																<Class name="Type" field="DisplayDataType" version="2" type="{0EADF8F5-8AB8-42E9-9C50-F5C78255C817}">
+																	<Class name="unsigned int" field="m_type" value="2" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+																	<Class name="AZ::Uuid" field="m_azType" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+																</Class>
+																<Class name="Crc32" field="DisplayGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																	<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+																</Class>
+																<Class name="SlotDescriptor" field="Descriptor" version="1" type="{FBF1C3A7-AA74-420F-BBE4-29F78D6EA262}">
+																	<Class name="int" field="ConnectionType" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+																	<Class name="int" field="SlotType" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+																</Class>
+																<Class name="bool" field="IsLatent" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+																<Class name="Crc32" field="DynamicGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																	<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+																</Class>
+																<Class name="int" field="DataType" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+																<Class name="bool" field="IsReference" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+																<Class name="VariableId" field="VariableReference" type="{CA57A57B-E510-4C09-B952-1F43742166AE}">
+																	<Class name="AZ::Uuid" field="m_id" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+																</Class>
+																<Class name="bool" field="IsUserAdded" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															</Class>
+															<Class name="Slot" field="element" version="21" type="{FBFE0F02-4C26-475F-A28B-18D3A533C13C}">
+																<Class name="bool" field="IsOverload" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+																<Class name="bool" field="isVisibile" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+																<Class name="SlotId" field="id" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+																	<Class name="AZ::Uuid" field="m_id" value="{04466AFA-0981-4B01-AEFB-F650C1E49844}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+																</Class>
+																<Class name="int" field="DynamicTypeOverride" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+																<Class name="AZStd::vector" field="contracts" type="{C87136AF-3259-590C-9519-D1C4C75F1C86}">
+																	<Class name="AZStd::unique_ptr" field="element" type="{75F9EC0D-D8D6-5410-BD79-960E22076B03}">
+																		<Class name="SlotTypeContract" field="element" type="{084B4F2A-AB34-4931-9269-E3614FC1CDFA}">
+																			<Class name="Contract" field="BaseClass1" type="{93846E60-BD7E-438A-B970-5C4AA591CF93}"/>
+																		</Class>
+																	</Class>
+																</Class>
+																<Class name="AZStd::string" field="slotName" value="Out" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+																<Class name="AZStd::string" field="toolTip" value="" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+																<Class name="Type" field="DisplayDataType" version="2" type="{0EADF8F5-8AB8-42E9-9C50-F5C78255C817}">
+																	<Class name="unsigned int" field="m_type" value="2" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+																	<Class name="AZ::Uuid" field="m_azType" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+																</Class>
+																<Class name="Crc32" field="DisplayGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																	<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+																</Class>
+																<Class name="SlotDescriptor" field="Descriptor" version="1" type="{FBF1C3A7-AA74-420F-BBE4-29F78D6EA262}">
+																	<Class name="int" field="ConnectionType" value="2" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+																	<Class name="int" field="SlotType" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+																</Class>
+																<Class name="bool" field="IsLatent" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+																<Class name="Crc32" field="DynamicGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																	<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+																</Class>
+																<Class name="int" field="DataType" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+																<Class name="bool" field="IsReference" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+																<Class name="VariableId" field="VariableReference" type="{CA57A57B-E510-4C09-B952-1F43742166AE}">
+																	<Class name="AZ::Uuid" field="m_id" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+																</Class>
+																<Class name="bool" field="IsUserAdded" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															</Class>
+														</Class>
+														<Class name="AZStd::list" field="Datums" type="{36259B04-FAAB-5E8A-B7BF-A5E2EA5A9B3A}"/>
+														<Class name="int" field="NodeDisabledFlag" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+													</Class>
+													<Class name="AZStd::string" field="m_format" value="OnTick Event: The Sphere position did not change from previous position" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+													<Class name="int" field="m_numericPrecision" value="4" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+													<Class name="AZStd::map" field="m_arrayBindingMap" type="{B3879B66-F836-5380-B4C8-4D519373E77E}"/>
+													<Class name="AZStd::vector" field="m_unresolvedString" type="{99DAD0BC-740E-5E82-826B-8FC7968CC02C}">
+														<Class name="AZStd::string" field="element" value="OnTick Event: The Sphere position did not change from previous position" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+													</Class>
+													<Class name="AZStd::map" field="m_formatSlotMap" type="{8E9FB38C-2A95-5DC6-B051-90FF0BA8567F}"/>
+												</Class>
+											</Class>
+										</Class>
+										<Class name="bool" field="IsDependencyReady" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+										<Class name="bool" field="IsRuntimeActive" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+									</Class>
+									<Class name="AZ::Entity" field="element" version="2" type="{75651658-8663-478D-9090-2432DFCAFA44}">
+										<Class name="EntityId" field="Id" version="1" type="{6383F1D3-BB27-4E6B-A49A-6409B2059EAA}">
+											<Class name="AZ::u64" field="id" value="19533977868286" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+										</Class>
+										<Class name="AZStd::string" field="Name" value="EBusEventHandler" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+										<Class name="AZStd::vector" field="Components" type="{13D58FF9-1088-5C69-9A1F-C2A144B57B78}">
+											<Class name="EBusEventHandler" field="element" version="5" type="{33E12915-EFCA-4AA7-A188-D694DAD58980}">
+												<Class name="Node" field="BaseClass1" version="14" type="{52B454AE-FA7E-4FE9-87D3-A1CAB235C691}">
+													<Class name="AZ::Component" field="BaseClass1" type="{EDFCB2CF-F75D-43BE-B26B-F35821B29247}">
+														<Class name="AZ::u64" field="Id" value="10164439518567253083" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+													</Class>
+													<Class name="AZStd::list" field="Slots" type="{E01B3091-9B44-571A-A87B-7D0E2768D774}">
+														<Class name="Slot" field="element" version="21" type="{FBFE0F02-4C26-475F-A28B-18D3A533C13C}">
+															<Class name="bool" field="IsOverload" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="bool" field="isVisibile" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="SlotId" field="id" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+																<Class name="AZ::Uuid" field="m_id" value="{FB36D893-5D4F-4DF1-B69B-7A33FCBA454F}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="int" field="DynamicTypeOverride" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="AZStd::vector" field="contracts" type="{C87136AF-3259-590C-9519-D1C4C75F1C86}">
+																<Class name="AZStd::unique_ptr" field="element" type="{75F9EC0D-D8D6-5410-BD79-960E22076B03}">
+																	<Class name="SlotTypeContract" field="element" type="{084B4F2A-AB34-4931-9269-E3614FC1CDFA}">
+																		<Class name="Contract" field="BaseClass1" type="{93846E60-BD7E-438A-B970-5C4AA591CF93}"/>
+																	</Class>
+																</Class>
+															</Class>
+															<Class name="AZStd::string" field="slotName" value="Connect" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="AZStd::string" field="toolTip" value="Connect this event handler to the specified entity." type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="Type" field="DisplayDataType" version="2" type="{0EADF8F5-8AB8-42E9-9C50-F5C78255C817}">
+																<Class name="unsigned int" field="m_type" value="2" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+																<Class name="AZ::Uuid" field="m_azType" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="Crc32" field="DisplayGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="SlotDescriptor" field="Descriptor" version="1" type="{FBF1C3A7-AA74-420F-BBE4-29F78D6EA262}">
+																<Class name="int" field="ConnectionType" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+																<Class name="int" field="SlotType" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															</Class>
+															<Class name="bool" field="IsLatent" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="Crc32" field="DynamicGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="int" field="DataType" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="bool" field="IsReference" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="VariableId" field="VariableReference" type="{CA57A57B-E510-4C09-B952-1F43742166AE}">
+																<Class name="AZ::Uuid" field="m_id" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="bool" field="IsUserAdded" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+														</Class>
+														<Class name="Slot" field="element" version="21" type="{FBFE0F02-4C26-475F-A28B-18D3A533C13C}">
+															<Class name="bool" field="IsOverload" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="bool" field="isVisibile" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="SlotId" field="id" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+																<Class name="AZ::Uuid" field="m_id" value="{E11940BC-DE05-4ACB-AD0C-535A41EF5D21}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="int" field="DynamicTypeOverride" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="AZStd::vector" field="contracts" type="{C87136AF-3259-590C-9519-D1C4C75F1C86}">
+																<Class name="AZStd::unique_ptr" field="element" type="{75F9EC0D-D8D6-5410-BD79-960E22076B03}">
+																	<Class name="SlotTypeContract" field="element" type="{084B4F2A-AB34-4931-9269-E3614FC1CDFA}">
+																		<Class name="Contract" field="BaseClass1" type="{93846E60-BD7E-438A-B970-5C4AA591CF93}"/>
+																	</Class>
+																</Class>
+															</Class>
+															<Class name="AZStd::string" field="slotName" value="Disconnect" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="AZStd::string" field="toolTip" value="Disconnect this event handler." type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="Type" field="DisplayDataType" version="2" type="{0EADF8F5-8AB8-42E9-9C50-F5C78255C817}">
+																<Class name="unsigned int" field="m_type" value="2" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+																<Class name="AZ::Uuid" field="m_azType" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="Crc32" field="DisplayGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="SlotDescriptor" field="Descriptor" version="1" type="{FBF1C3A7-AA74-420F-BBE4-29F78D6EA262}">
+																<Class name="int" field="ConnectionType" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+																<Class name="int" field="SlotType" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															</Class>
+															<Class name="bool" field="IsLatent" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="Crc32" field="DynamicGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="int" field="DataType" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="bool" field="IsReference" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="VariableId" field="VariableReference" type="{CA57A57B-E510-4C09-B952-1F43742166AE}">
+																<Class name="AZ::Uuid" field="m_id" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="bool" field="IsUserAdded" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+														</Class>
+														<Class name="Slot" field="element" version="21" type="{FBFE0F02-4C26-475F-A28B-18D3A533C13C}">
+															<Class name="bool" field="IsOverload" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="bool" field="isVisibile" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="SlotId" field="id" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+																<Class name="AZ::Uuid" field="m_id" value="{C529C8E5-D419-425C-B330-7F54246031E4}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="int" field="DynamicTypeOverride" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="AZStd::vector" field="contracts" type="{C87136AF-3259-590C-9519-D1C4C75F1C86}">
+																<Class name="AZStd::unique_ptr" field="element" type="{75F9EC0D-D8D6-5410-BD79-960E22076B03}">
+																	<Class name="SlotTypeContract" field="element" type="{084B4F2A-AB34-4931-9269-E3614FC1CDFA}">
+																		<Class name="Contract" field="BaseClass1" type="{93846E60-BD7E-438A-B970-5C4AA591CF93}"/>
+																	</Class>
+																</Class>
+															</Class>
+															<Class name="AZStd::string" field="slotName" value="OnConnected" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="AZStd::string" field="toolTip" value="Signaled when a connection has taken place." type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="Type" field="DisplayDataType" version="2" type="{0EADF8F5-8AB8-42E9-9C50-F5C78255C817}">
+																<Class name="unsigned int" field="m_type" value="2" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+																<Class name="AZ::Uuid" field="m_azType" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="Crc32" field="DisplayGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="SlotDescriptor" field="Descriptor" version="1" type="{FBF1C3A7-AA74-420F-BBE4-29F78D6EA262}">
+																<Class name="int" field="ConnectionType" value="2" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+																<Class name="int" field="SlotType" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															</Class>
+															<Class name="bool" field="IsLatent" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="Crc32" field="DynamicGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="int" field="DataType" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="bool" field="IsReference" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="VariableId" field="VariableReference" type="{CA57A57B-E510-4C09-B952-1F43742166AE}">
+																<Class name="AZ::Uuid" field="m_id" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="bool" field="IsUserAdded" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+														</Class>
+														<Class name="Slot" field="element" version="21" type="{FBFE0F02-4C26-475F-A28B-18D3A533C13C}">
+															<Class name="bool" field="IsOverload" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="bool" field="isVisibile" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="SlotId" field="id" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+																<Class name="AZ::Uuid" field="m_id" value="{F5333BE2-37ED-441E-8679-CABFA9744879}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="int" field="DynamicTypeOverride" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="AZStd::vector" field="contracts" type="{C87136AF-3259-590C-9519-D1C4C75F1C86}">
+																<Class name="AZStd::unique_ptr" field="element" type="{75F9EC0D-D8D6-5410-BD79-960E22076B03}">
+																	<Class name="SlotTypeContract" field="element" type="{084B4F2A-AB34-4931-9269-E3614FC1CDFA}">
+																		<Class name="Contract" field="BaseClass1" type="{93846E60-BD7E-438A-B970-5C4AA591CF93}"/>
+																	</Class>
+																</Class>
+															</Class>
+															<Class name="AZStd::string" field="slotName" value="OnDisconnected" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="AZStd::string" field="toolTip" value="Signaled when this event handler is disconnected." type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="Type" field="DisplayDataType" version="2" type="{0EADF8F5-8AB8-42E9-9C50-F5C78255C817}">
+																<Class name="unsigned int" field="m_type" value="2" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+																<Class name="AZ::Uuid" field="m_azType" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="Crc32" field="DisplayGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="SlotDescriptor" field="Descriptor" version="1" type="{FBF1C3A7-AA74-420F-BBE4-29F78D6EA262}">
+																<Class name="int" field="ConnectionType" value="2" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+																<Class name="int" field="SlotType" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															</Class>
+															<Class name="bool" field="IsLatent" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="Crc32" field="DynamicGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="int" field="DataType" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="bool" field="IsReference" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="VariableId" field="VariableReference" type="{CA57A57B-E510-4C09-B952-1F43742166AE}">
+																<Class name="AZ::Uuid" field="m_id" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="bool" field="IsUserAdded" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+														</Class>
+														<Class name="Slot" field="element" version="21" type="{FBFE0F02-4C26-475F-A28B-18D3A533C13C}">
+															<Class name="bool" field="IsOverload" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="bool" field="isVisibile" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="SlotId" field="id" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+																<Class name="AZ::Uuid" field="m_id" value="{75B7D2BA-55C7-4375-9C2E-3CCE1B9687B7}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="int" field="DynamicTypeOverride" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="AZStd::vector" field="contracts" type="{C87136AF-3259-590C-9519-D1C4C75F1C86}">
+																<Class name="AZStd::unique_ptr" field="element" type="{75F9EC0D-D8D6-5410-BD79-960E22076B03}">
+																	<Class name="SlotTypeContract" field="element" type="{084B4F2A-AB34-4931-9269-E3614FC1CDFA}">
+																		<Class name="Contract" field="BaseClass1" type="{93846E60-BD7E-438A-B970-5C4AA591CF93}"/>
+																	</Class>
+																</Class>
+															</Class>
+															<Class name="AZStd::string" field="slotName" value="OnFailure" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="AZStd::string" field="toolTip" value="Signaled when it is not possible to connect this handler." type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="Type" field="DisplayDataType" version="2" type="{0EADF8F5-8AB8-42E9-9C50-F5C78255C817}">
+																<Class name="unsigned int" field="m_type" value="2" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+																<Class name="AZ::Uuid" field="m_azType" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="Crc32" field="DisplayGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="SlotDescriptor" field="Descriptor" version="1" type="{FBF1C3A7-AA74-420F-BBE4-29F78D6EA262}">
+																<Class name="int" field="ConnectionType" value="2" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+																<Class name="int" field="SlotType" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															</Class>
+															<Class name="bool" field="IsLatent" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="Crc32" field="DynamicGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="int" field="DataType" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="bool" field="IsReference" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="VariableId" field="VariableReference" type="{CA57A57B-E510-4C09-B952-1F43742166AE}">
+																<Class name="AZ::Uuid" field="m_id" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="bool" field="IsUserAdded" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+														</Class>
+														<Class name="Slot" field="element" version="21" type="{FBFE0F02-4C26-475F-A28B-18D3A533C13C}">
+															<Class name="bool" field="IsOverload" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="bool" field="isVisibile" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="SlotId" field="id" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+																<Class name="AZ::Uuid" field="m_id" value="{494EB972-C647-4EAC-9F99-B65845E34C06}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="int" field="DynamicTypeOverride" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="AZStd::vector" field="contracts" type="{C87136AF-3259-590C-9519-D1C4C75F1C86}">
+																<Class name="AZStd::unique_ptr" field="element" type="{75F9EC0D-D8D6-5410-BD79-960E22076B03}">
+																	<Class name="SlotTypeContract" field="element" type="{084B4F2A-AB34-4931-9269-E3614FC1CDFA}">
+																		<Class name="Contract" field="BaseClass1" type="{93846E60-BD7E-438A-B970-5C4AA591CF93}"/>
+																	</Class>
+																</Class>
+															</Class>
+															<Class name="AZStd::string" field="slotName" value="Number" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="AZStd::string" field="toolTip" value="" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="Type" field="DisplayDataType" version="2" type="{0EADF8F5-8AB8-42E9-9C50-F5C78255C817}">
+																<Class name="unsigned int" field="m_type" value="3" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+																<Class name="AZ::Uuid" field="m_azType" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="Crc32" field="DisplayGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="SlotDescriptor" field="Descriptor" version="1" type="{FBF1C3A7-AA74-420F-BBE4-29F78D6EA262}">
+																<Class name="int" field="ConnectionType" value="2" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+																<Class name="int" field="SlotType" value="2" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															</Class>
+															<Class name="bool" field="IsLatent" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="Crc32" field="DynamicGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="int" field="DataType" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="bool" field="IsReference" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="VariableId" field="VariableReference" type="{CA57A57B-E510-4C09-B952-1F43742166AE}">
+																<Class name="AZ::Uuid" field="m_id" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="bool" field="IsUserAdded" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+														</Class>
+														<Class name="Slot" field="element" version="21" type="{FBFE0F02-4C26-475F-A28B-18D3A533C13C}">
+															<Class name="bool" field="IsOverload" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="bool" field="isVisibile" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="SlotId" field="id" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+																<Class name="AZ::Uuid" field="m_id" value="{DE2A5655-7017-4558-BEEE-2C0603A53BC8}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="int" field="DynamicTypeOverride" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="AZStd::vector" field="contracts" type="{C87136AF-3259-590C-9519-D1C4C75F1C86}">
+																<Class name="AZStd::unique_ptr" field="element" type="{75F9EC0D-D8D6-5410-BD79-960E22076B03}">
+																	<Class name="SlotTypeContract" field="element" type="{084B4F2A-AB34-4931-9269-E3614FC1CDFA}">
+																		<Class name="Contract" field="BaseClass1" type="{93846E60-BD7E-438A-B970-5C4AA591CF93}"/>
+																	</Class>
+																</Class>
+															</Class>
+															<Class name="AZStd::string" field="slotName" value="ScriptTimePoint" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="AZStd::string" field="toolTip" value="" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="Type" field="DisplayDataType" version="2" type="{0EADF8F5-8AB8-42E9-9C50-F5C78255C817}">
+																<Class name="unsigned int" field="m_type" value="4" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+																<Class name="AZ::Uuid" field="m_azType" value="{4C0F6AD4-0D4F-4354-AD4A-0C01E948245C}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="Crc32" field="DisplayGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="SlotDescriptor" field="Descriptor" version="1" type="{FBF1C3A7-AA74-420F-BBE4-29F78D6EA262}">
+																<Class name="int" field="ConnectionType" value="2" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+																<Class name="int" field="SlotType" value="2" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															</Class>
+															<Class name="bool" field="IsLatent" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="Crc32" field="DynamicGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="int" field="DataType" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="bool" field="IsReference" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="VariableId" field="VariableReference" type="{CA57A57B-E510-4C09-B952-1F43742166AE}">
+																<Class name="AZ::Uuid" field="m_id" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="bool" field="IsUserAdded" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+														</Class>
+														<Class name="Slot" field="element" version="21" type="{FBFE0F02-4C26-475F-A28B-18D3A533C13C}">
+															<Class name="bool" field="IsOverload" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="bool" field="isVisibile" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="SlotId" field="id" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+																<Class name="AZ::Uuid" field="m_id" value="{6B8D96B0-53D4-4A77-82DF-715AC99ADD57}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="int" field="DynamicTypeOverride" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="AZStd::vector" field="contracts" type="{C87136AF-3259-590C-9519-D1C4C75F1C86}">
+																<Class name="AZStd::unique_ptr" field="element" type="{75F9EC0D-D8D6-5410-BD79-960E22076B03}">
+																	<Class name="SlotTypeContract" field="element" type="{084B4F2A-AB34-4931-9269-E3614FC1CDFA}">
+																		<Class name="Contract" field="BaseClass1" type="{93846E60-BD7E-438A-B970-5C4AA591CF93}"/>
+																	</Class>
+																</Class>
+															</Class>
+															<Class name="AZStd::string" field="slotName" value="ExecutionSlot:OnTick" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="AZStd::string" field="toolTip" value="" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="Type" field="DisplayDataType" version="2" type="{0EADF8F5-8AB8-42E9-9C50-F5C78255C817}">
+																<Class name="unsigned int" field="m_type" value="2" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+																<Class name="AZ::Uuid" field="m_azType" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="Crc32" field="DisplayGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="SlotDescriptor" field="Descriptor" version="1" type="{FBF1C3A7-AA74-420F-BBE4-29F78D6EA262}">
+																<Class name="int" field="ConnectionType" value="2" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+																<Class name="int" field="SlotType" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															</Class>
+															<Class name="bool" field="IsLatent" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="Crc32" field="DynamicGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="int" field="DataType" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="bool" field="IsReference" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="VariableId" field="VariableReference" type="{CA57A57B-E510-4C09-B952-1F43742166AE}">
+																<Class name="AZ::Uuid" field="m_id" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="bool" field="IsUserAdded" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+														</Class>
+														<Class name="Slot" field="element" version="21" type="{FBFE0F02-4C26-475F-A28B-18D3A533C13C}">
+															<Class name="bool" field="IsOverload" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="bool" field="isVisibile" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="SlotId" field="id" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+																<Class name="AZ::Uuid" field="m_id" value="{C3963885-7E8E-417D-8C34-F7D2BFDF3194}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="int" field="DynamicTypeOverride" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="AZStd::vector" field="contracts" type="{C87136AF-3259-590C-9519-D1C4C75F1C86}">
+																<Class name="AZStd::unique_ptr" field="element" type="{75F9EC0D-D8D6-5410-BD79-960E22076B03}">
+																	<Class name="SlotTypeContract" field="element" type="{084B4F2A-AB34-4931-9269-E3614FC1CDFA}">
+																		<Class name="Contract" field="BaseClass1" type="{93846E60-BD7E-438A-B970-5C4AA591CF93}"/>
+																	</Class>
+																</Class>
+																<Class name="AZStd::unique_ptr" field="element" type="{75F9EC0D-D8D6-5410-BD79-960E22076B03}">
+																	<Class name="ExclusivePureDataContract" field="element" type="{E48A0B26-B6B7-4AF3-9341-9E5C5C1F0DE8}">
+																		<Class name="Contract" field="BaseClass1" type="{93846E60-BD7E-438A-B970-5C4AA591CF93}"/>
+																	</Class>
+																</Class>
+															</Class>
+															<Class name="AZStd::string" field="slotName" value="Result: Number" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="AZStd::string" field="toolTip" value="" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="Type" field="DisplayDataType" version="2" type="{0EADF8F5-8AB8-42E9-9C50-F5C78255C817}">
+																<Class name="unsigned int" field="m_type" value="2" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+																<Class name="AZ::Uuid" field="m_azType" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="Crc32" field="DisplayGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="SlotDescriptor" field="Descriptor" version="1" type="{FBF1C3A7-AA74-420F-BBE4-29F78D6EA262}">
+																<Class name="int" field="ConnectionType" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+																<Class name="int" field="SlotType" value="2" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															</Class>
+															<Class name="bool" field="IsLatent" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="Crc32" field="DynamicGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="int" field="DataType" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="bool" field="IsReference" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="VariableId" field="VariableReference" type="{CA57A57B-E510-4C09-B952-1F43742166AE}">
+																<Class name="AZ::Uuid" field="m_id" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="bool" field="IsUserAdded" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+														</Class>
+														<Class name="Slot" field="element" version="21" type="{FBFE0F02-4C26-475F-A28B-18D3A533C13C}">
+															<Class name="bool" field="IsOverload" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="bool" field="isVisibile" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="SlotId" field="id" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+																<Class name="AZ::Uuid" field="m_id" value="{A26F7476-D7BF-4857-90BC-5DF317D1514A}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="int" field="DynamicTypeOverride" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="AZStd::vector" field="contracts" type="{C87136AF-3259-590C-9519-D1C4C75F1C86}">
+																<Class name="AZStd::unique_ptr" field="element" type="{75F9EC0D-D8D6-5410-BD79-960E22076B03}">
+																	<Class name="SlotTypeContract" field="element" type="{084B4F2A-AB34-4931-9269-E3614FC1CDFA}">
+																		<Class name="Contract" field="BaseClass1" type="{93846E60-BD7E-438A-B970-5C4AA591CF93}"/>
+																	</Class>
+																</Class>
+															</Class>
+															<Class name="AZStd::string" field="slotName" value="ExecutionSlot:GetTickOrder" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="AZStd::string" field="toolTip" value="" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="Type" field="DisplayDataType" version="2" type="{0EADF8F5-8AB8-42E9-9C50-F5C78255C817}">
+																<Class name="unsigned int" field="m_type" value="2" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+																<Class name="AZ::Uuid" field="m_azType" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="Crc32" field="DisplayGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="SlotDescriptor" field="Descriptor" version="1" type="{FBF1C3A7-AA74-420F-BBE4-29F78D6EA262}">
+																<Class name="int" field="ConnectionType" value="2" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+																<Class name="int" field="SlotType" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															</Class>
+															<Class name="bool" field="IsLatent" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="Crc32" field="DynamicGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="int" field="DataType" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="bool" field="IsReference" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="VariableId" field="VariableReference" type="{CA57A57B-E510-4C09-B952-1F43742166AE}">
+																<Class name="AZ::Uuid" field="m_id" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="bool" field="IsUserAdded" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+														</Class>
+													</Class>
+													<Class name="AZStd::list" field="Datums" type="{36259B04-FAAB-5E8A-B7BF-A5E2EA5A9B3A}">
+														<Class name="Datum" field="element" version="6" type="{8B836FC0-98A8-4A81-8651-35C7CA125451}">
+															<Class name="bool" field="m_isUntypedStorage" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="Type" field="m_type" version="2" type="{0EADF8F5-8AB8-42E9-9C50-F5C78255C817}">
+																<Class name="unsigned int" field="m_type" value="3" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+																<Class name="AZ::Uuid" field="m_azType" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="int" field="m_originality" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="any" field="m_datumStorage" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
+																<Class name="double" field="m_data" value="0.0000000" type="{110C4B14-11A8-4E9D-8638-5051013A56AC}"/>
+															</Class>
+															<Class name="AZStd::string" field="m_datumLabel" value="Result: Number" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+														</Class>
+													</Class>
+													<Class name="int" field="NodeDisabledFlag" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+												</Class>
+												<Class name="AZStd::map" field="m_eventMap" type="{E3F40B9E-9589-5736-8135-A35819EB700E}">
+													<Class name="AZStd::pair" field="element" type="{220A15CE-9196-5EEA-A8CF-72AF80F1F6A9}">
+														<Class name="Crc32" field="value1" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+															<Class name="unsigned int" field="Value" value="1502188240" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+														</Class>
+														<Class name="EBusEventEntry" field="value2" version="1" type="{92A20C1B-A54A-4583-97DB-A894377ACE21}">
+															<Class name="AZStd::string" field="m_eventName" value="OnTick" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="Crc32" field="m_eventId" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="1502188240" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="SlotId" field="m_eventSlotId" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+																<Class name="AZ::Uuid" field="m_id" value="{6B8D96B0-53D4-4A77-82DF-715AC99ADD57}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="SlotId" field="m_resultSlotId" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+																<Class name="AZ::Uuid" field="m_id" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="AZStd::vector" field="m_parameterSlotIds" type="{D0B13803-101B-54D8-914C-0DA49FDFA268}">
+																<Class name="SlotId" field="element" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+																	<Class name="AZ::Uuid" field="m_id" value="{494EB972-C647-4EAC-9F99-B65845E34C06}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+																</Class>
+																<Class name="SlotId" field="element" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+																	<Class name="AZ::Uuid" field="m_id" value="{DE2A5655-7017-4558-BEEE-2C0603A53BC8}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+																</Class>
+															</Class>
+															<Class name="int" field="m_numExpectedArguments" value="2" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="bool" field="m_resultEvaluated" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+														</Class>
+													</Class>
+													<Class name="AZStd::pair" field="element" type="{220A15CE-9196-5EEA-A8CF-72AF80F1F6A9}">
+														<Class name="Crc32" field="value1" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+															<Class name="unsigned int" field="Value" value="1890826333" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+														</Class>
+														<Class name="EBusEventEntry" field="value2" version="1" type="{92A20C1B-A54A-4583-97DB-A894377ACE21}">
+															<Class name="AZStd::string" field="m_eventName" value="GetTickOrder" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="Crc32" field="m_eventId" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="1890826333" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="SlotId" field="m_eventSlotId" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+																<Class name="AZ::Uuid" field="m_id" value="{A26F7476-D7BF-4857-90BC-5DF317D1514A}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="SlotId" field="m_resultSlotId" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+																<Class name="AZ::Uuid" field="m_id" value="{C3963885-7E8E-417D-8C34-F7D2BFDF3194}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="AZStd::vector" field="m_parameterSlotIds" type="{D0B13803-101B-54D8-914C-0DA49FDFA268}"/>
+															<Class name="int" field="m_numExpectedArguments" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="bool" field="m_resultEvaluated" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+														</Class>
+													</Class>
+												</Class>
+												<Class name="AZStd::string" field="m_ebusName" value="TickBus" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+												<Class name="Crc32" field="m_busId" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+													<Class name="unsigned int" field="Value" value="1209186864" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+												</Class>
+												<Class name="bool" field="m_autoConnectToGraphOwner" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+											</Class>
+										</Class>
+										<Class name="bool" field="IsDependencyReady" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+										<Class name="bool" field="IsRuntimeActive" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+									</Class>
+									<Class name="AZ::Entity" field="element" version="2" type="{75651658-8663-478D-9090-2432DFCAFA44}">
+										<Class name="EntityId" field="Id" version="1" type="{6383F1D3-BB27-4E6B-A49A-6409B2059EAA}">
+											<Class name="AZ::u64" field="id" value="19538272835582" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+										</Class>
+										<Class name="AZStd::string" field="Name" value="SC Node(GetVariable)" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+										<Class name="AZStd::vector" field="Components" type="{13D58FF9-1088-5C69-9A1F-C2A144B57B78}">
+											<Class name="GetVariableNode" field="element" type="{8225BE35-4C45-4A32-94D9-3DE114F6F5AF}">
+												<Class name="Node" field="BaseClass1" version="14" type="{52B454AE-FA7E-4FE9-87D3-A1CAB235C691}">
+													<Class name="AZ::Component" field="BaseClass1" type="{EDFCB2CF-F75D-43BE-B26B-F35821B29247}">
+														<Class name="AZ::u64" field="Id" value="4670162678944614454" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+													</Class>
+													<Class name="AZStd::list" field="Slots" type="{E01B3091-9B44-571A-A87B-7D0E2768D774}">
+														<Class name="Slot" field="element" version="21" type="{FBFE0F02-4C26-475F-A28B-18D3A533C13C}">
+															<Class name="bool" field="IsOverload" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="bool" field="isVisibile" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="SlotId" field="id" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+																<Class name="AZ::Uuid" field="m_id" value="{14209558-7115-40FE-8CAA-8D5C4871A9ED}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="int" field="DynamicTypeOverride" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="AZStd::vector" field="contracts" type="{C87136AF-3259-590C-9519-D1C4C75F1C86}">
+																<Class name="AZStd::unique_ptr" field="element" type="{75F9EC0D-D8D6-5410-BD79-960E22076B03}">
+																	<Class name="SlotTypeContract" field="element" type="{084B4F2A-AB34-4931-9269-E3614FC1CDFA}">
+																		<Class name="Contract" field="BaseClass1" type="{93846E60-BD7E-438A-B970-5C4AA591CF93}"/>
+																	</Class>
+																</Class>
+															</Class>
+															<Class name="AZStd::string" field="slotName" value="In" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="AZStd::string" field="toolTip" value="When signaled sends the property referenced by this node to a Data Output slot" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="Type" field="DisplayDataType" version="2" type="{0EADF8F5-8AB8-42E9-9C50-F5C78255C817}">
+																<Class name="unsigned int" field="m_type" value="2" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+																<Class name="AZ::Uuid" field="m_azType" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="Crc32" field="DisplayGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="SlotDescriptor" field="Descriptor" version="1" type="{FBF1C3A7-AA74-420F-BBE4-29F78D6EA262}">
+																<Class name="int" field="ConnectionType" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+																<Class name="int" field="SlotType" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															</Class>
+															<Class name="bool" field="IsLatent" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="Crc32" field="DynamicGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="int" field="DataType" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="bool" field="IsReference" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="VariableId" field="VariableReference" type="{CA57A57B-E510-4C09-B952-1F43742166AE}">
+																<Class name="AZ::Uuid" field="m_id" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="bool" field="IsUserAdded" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+														</Class>
+														<Class name="Slot" field="element" version="21" type="{FBFE0F02-4C26-475F-A28B-18D3A533C13C}">
+															<Class name="bool" field="IsOverload" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="bool" field="isVisibile" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="SlotId" field="id" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+																<Class name="AZ::Uuid" field="m_id" value="{93F8F77F-E5CF-4CF2-96F3-5E6C84A0661C}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="int" field="DynamicTypeOverride" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="AZStd::vector" field="contracts" type="{C87136AF-3259-590C-9519-D1C4C75F1C86}">
+																<Class name="AZStd::unique_ptr" field="element" type="{75F9EC0D-D8D6-5410-BD79-960E22076B03}">
+																	<Class name="SlotTypeContract" field="element" type="{084B4F2A-AB34-4931-9269-E3614FC1CDFA}">
+																		<Class name="Contract" field="BaseClass1" type="{93846E60-BD7E-438A-B970-5C4AA591CF93}"/>
+																	</Class>
+																</Class>
+															</Class>
+															<Class name="AZStd::string" field="slotName" value="Out" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="AZStd::string" field="toolTip" value="Signaled after the referenced property has been pushed to the Data Output slot" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="Type" field="DisplayDataType" version="2" type="{0EADF8F5-8AB8-42E9-9C50-F5C78255C817}">
+																<Class name="unsigned int" field="m_type" value="2" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+																<Class name="AZ::Uuid" field="m_azType" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="Crc32" field="DisplayGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="SlotDescriptor" field="Descriptor" version="1" type="{FBF1C3A7-AA74-420F-BBE4-29F78D6EA262}">
+																<Class name="int" field="ConnectionType" value="2" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+																<Class name="int" field="SlotType" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															</Class>
+															<Class name="bool" field="IsLatent" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="Crc32" field="DynamicGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="int" field="DataType" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="bool" field="IsReference" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="VariableId" field="VariableReference" type="{CA57A57B-E510-4C09-B952-1F43742166AE}">
+																<Class name="AZ::Uuid" field="m_id" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="bool" field="IsUserAdded" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+														</Class>
+														<Class name="Slot" field="element" version="21" type="{FBFE0F02-4C26-475F-A28B-18D3A533C13C}">
+															<Class name="bool" field="IsOverload" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="bool" field="isVisibile" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="SlotId" field="id" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+																<Class name="AZ::Uuid" field="m_id" value="{95F3AFE1-1631-458F-B0CA-18512F97A4A8}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="int" field="DynamicTypeOverride" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="AZStd::vector" field="contracts" type="{C87136AF-3259-590C-9519-D1C4C75F1C86}">
+																<Class name="AZStd::unique_ptr" field="element" type="{75F9EC0D-D8D6-5410-BD79-960E22076B03}">
+																	<Class name="SlotTypeContract" field="element" type="{084B4F2A-AB34-4931-9269-E3614FC1CDFA}">
+																		<Class name="Contract" field="BaseClass1" type="{93846E60-BD7E-438A-B970-5C4AA591CF93}"/>
+																	</Class>
+																</Class>
+															</Class>
+															<Class name="AZStd::string" field="slotName" value="Vector3" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="AZStd::string" field="toolTip" value="" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="Type" field="DisplayDataType" version="2" type="{0EADF8F5-8AB8-42E9-9C50-F5C78255C817}">
+																<Class name="unsigned int" field="m_type" value="8" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+																<Class name="AZ::Uuid" field="m_azType" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="Crc32" field="DisplayGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="SlotDescriptor" field="Descriptor" version="1" type="{FBF1C3A7-AA74-420F-BBE4-29F78D6EA262}">
+																<Class name="int" field="ConnectionType" value="2" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+																<Class name="int" field="SlotType" value="2" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															</Class>
+															<Class name="bool" field="IsLatent" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="Crc32" field="DynamicGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="int" field="DataType" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="bool" field="IsReference" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="VariableId" field="VariableReference" type="{CA57A57B-E510-4C09-B952-1F43742166AE}">
+																<Class name="AZ::Uuid" field="m_id" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="bool" field="IsUserAdded" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+														</Class>
+														<Class name="Slot" field="element" version="21" type="{FBFE0F02-4C26-475F-A28B-18D3A533C13C}">
+															<Class name="bool" field="IsOverload" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="bool" field="isVisibile" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="SlotId" field="id" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+																<Class name="AZ::Uuid" field="m_id" value="{63F8C3CC-3D7D-4246-B6FF-BF6DFE7E6DFB}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="int" field="DynamicTypeOverride" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="AZStd::vector" field="contracts" type="{C87136AF-3259-590C-9519-D1C4C75F1C86}">
+																<Class name="AZStd::unique_ptr" field="element" type="{75F9EC0D-D8D6-5410-BD79-960E22076B03}">
+																	<Class name="SlotTypeContract" field="element" type="{084B4F2A-AB34-4931-9269-E3614FC1CDFA}">
+																		<Class name="Contract" field="BaseClass1" type="{93846E60-BD7E-438A-B970-5C4AA591CF93}"/>
+																	</Class>
+																</Class>
+															</Class>
+															<Class name="AZStd::string" field="slotName" value="x: Number" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="AZStd::string" field="toolTip" value="" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="Type" field="DisplayDataType" version="2" type="{0EADF8F5-8AB8-42E9-9C50-F5C78255C817}">
+																<Class name="unsigned int" field="m_type" value="3" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+																<Class name="AZ::Uuid" field="m_azType" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="Crc32" field="DisplayGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="SlotDescriptor" field="Descriptor" version="1" type="{FBF1C3A7-AA74-420F-BBE4-29F78D6EA262}">
+																<Class name="int" field="ConnectionType" value="2" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+																<Class name="int" field="SlotType" value="2" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															</Class>
+															<Class name="bool" field="IsLatent" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="Crc32" field="DynamicGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="int" field="DataType" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="bool" field="IsReference" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="VariableId" field="VariableReference" type="{CA57A57B-E510-4C09-B952-1F43742166AE}">
+																<Class name="AZ::Uuid" field="m_id" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="bool" field="IsUserAdded" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+														</Class>
+														<Class name="Slot" field="element" version="21" type="{FBFE0F02-4C26-475F-A28B-18D3A533C13C}">
+															<Class name="bool" field="IsOverload" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="bool" field="isVisibile" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="SlotId" field="id" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+																<Class name="AZ::Uuid" field="m_id" value="{463AA023-80B4-4C8B-8890-2EED50AA5E21}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="int" field="DynamicTypeOverride" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="AZStd::vector" field="contracts" type="{C87136AF-3259-590C-9519-D1C4C75F1C86}">
+																<Class name="AZStd::unique_ptr" field="element" type="{75F9EC0D-D8D6-5410-BD79-960E22076B03}">
+																	<Class name="SlotTypeContract" field="element" type="{084B4F2A-AB34-4931-9269-E3614FC1CDFA}">
+																		<Class name="Contract" field="BaseClass1" type="{93846E60-BD7E-438A-B970-5C4AA591CF93}"/>
+																	</Class>
+																</Class>
+															</Class>
+															<Class name="AZStd::string" field="slotName" value="y: Number" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="AZStd::string" field="toolTip" value="" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="Type" field="DisplayDataType" version="2" type="{0EADF8F5-8AB8-42E9-9C50-F5C78255C817}">
+																<Class name="unsigned int" field="m_type" value="3" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+																<Class name="AZ::Uuid" field="m_azType" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="Crc32" field="DisplayGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="SlotDescriptor" field="Descriptor" version="1" type="{FBF1C3A7-AA74-420F-BBE4-29F78D6EA262}">
+																<Class name="int" field="ConnectionType" value="2" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+																<Class name="int" field="SlotType" value="2" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															</Class>
+															<Class name="bool" field="IsLatent" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="Crc32" field="DynamicGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="int" field="DataType" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="bool" field="IsReference" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="VariableId" field="VariableReference" type="{CA57A57B-E510-4C09-B952-1F43742166AE}">
+																<Class name="AZ::Uuid" field="m_id" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="bool" field="IsUserAdded" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+														</Class>
+														<Class name="Slot" field="element" version="21" type="{FBFE0F02-4C26-475F-A28B-18D3A533C13C}">
+															<Class name="bool" field="IsOverload" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="bool" field="isVisibile" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="SlotId" field="id" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+																<Class name="AZ::Uuid" field="m_id" value="{FACAC483-42FB-4960-BA11-3CDD3914A5FC}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="int" field="DynamicTypeOverride" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="AZStd::vector" field="contracts" type="{C87136AF-3259-590C-9519-D1C4C75F1C86}">
+																<Class name="AZStd::unique_ptr" field="element" type="{75F9EC0D-D8D6-5410-BD79-960E22076B03}">
+																	<Class name="SlotTypeContract" field="element" type="{084B4F2A-AB34-4931-9269-E3614FC1CDFA}">
+																		<Class name="Contract" field="BaseClass1" type="{93846E60-BD7E-438A-B970-5C4AA591CF93}"/>
+																	</Class>
+																</Class>
+															</Class>
+															<Class name="AZStd::string" field="slotName" value="z: Number" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="AZStd::string" field="toolTip" value="" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="Type" field="DisplayDataType" version="2" type="{0EADF8F5-8AB8-42E9-9C50-F5C78255C817}">
+																<Class name="unsigned int" field="m_type" value="3" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+																<Class name="AZ::Uuid" field="m_azType" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="Crc32" field="DisplayGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="SlotDescriptor" field="Descriptor" version="1" type="{FBF1C3A7-AA74-420F-BBE4-29F78D6EA262}">
+																<Class name="int" field="ConnectionType" value="2" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+																<Class name="int" field="SlotType" value="2" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															</Class>
+															<Class name="bool" field="IsLatent" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="Crc32" field="DynamicGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="int" field="DataType" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="bool" field="IsReference" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="VariableId" field="VariableReference" type="{CA57A57B-E510-4C09-B952-1F43742166AE}">
+																<Class name="AZ::Uuid" field="m_id" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="bool" field="IsUserAdded" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+														</Class>
+													</Class>
+													<Class name="AZStd::list" field="Datums" type="{36259B04-FAAB-5E8A-B7BF-A5E2EA5A9B3A}"/>
+													<Class name="int" field="NodeDisabledFlag" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+												</Class>
+												<Class name="VariableId" field="m_variableId" type="{CA57A57B-E510-4C09-B952-1F43742166AE}">
+													<Class name="AZ::Uuid" field="m_id" value="{B66F614B-9534-4532-B257-C9F5469913C4}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+												</Class>
+												<Class name="SlotId" field="m_variableDataOutSlotId" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+													<Class name="AZ::Uuid" field="m_id" value="{95F3AFE1-1631-458F-B0CA-18512F97A4A8}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+												</Class>
+												<Class name="AZStd::vector" field="m_propertyAccounts" type="{3BEC267E-B4D3-588E-B183-954A20D83BDD}">
+													<Class name="PropertyMetadata" field="element" type="{A4910EF1-0139-4A7A-878C-E60E18F3993A}">
+														<Class name="SlotId" field="m_propertySlotId" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+															<Class name="AZ::Uuid" field="m_id" value="{63F8C3CC-3D7D-4246-B6FF-BF6DFE7E6DFB}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+														</Class>
+														<Class name="Type" field="m_propertyType" version="2" type="{0EADF8F5-8AB8-42E9-9C50-F5C78255C817}">
+															<Class name="unsigned int" field="m_type" value="3" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															<Class name="AZ::Uuid" field="m_azType" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+														</Class>
+														<Class name="AZStd::string" field="m_propertyName" value="x" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+													</Class>
+													<Class name="PropertyMetadata" field="element" type="{A4910EF1-0139-4A7A-878C-E60E18F3993A}">
+														<Class name="SlotId" field="m_propertySlotId" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+															<Class name="AZ::Uuid" field="m_id" value="{463AA023-80B4-4C8B-8890-2EED50AA5E21}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+														</Class>
+														<Class name="Type" field="m_propertyType" version="2" type="{0EADF8F5-8AB8-42E9-9C50-F5C78255C817}">
+															<Class name="unsigned int" field="m_type" value="3" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															<Class name="AZ::Uuid" field="m_azType" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+														</Class>
+														<Class name="AZStd::string" field="m_propertyName" value="y" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+													</Class>
+													<Class name="PropertyMetadata" field="element" type="{A4910EF1-0139-4A7A-878C-E60E18F3993A}">
+														<Class name="SlotId" field="m_propertySlotId" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+															<Class name="AZ::Uuid" field="m_id" value="{FACAC483-42FB-4960-BA11-3CDD3914A5FC}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+														</Class>
+														<Class name="Type" field="m_propertyType" version="2" type="{0EADF8F5-8AB8-42E9-9C50-F5C78255C817}">
+															<Class name="unsigned int" field="m_type" value="3" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															<Class name="AZ::Uuid" field="m_azType" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+														</Class>
+														<Class name="AZStd::string" field="m_propertyName" value="z" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+													</Class>
+												</Class>
+											</Class>
+										</Class>
+										<Class name="bool" field="IsDependencyReady" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+										<Class name="bool" field="IsRuntimeActive" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+									</Class>
+									<Class name="AZ::Entity" field="element" version="2" type="{75651658-8663-478D-9090-2432DFCAFA44}">
+										<Class name="EntityId" field="Id" version="1" type="{6383F1D3-BB27-4E6B-A49A-6409B2059EAA}">
+											<Class name="AZ::u64" field="id" value="19542567802878" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+										</Class>
+										<Class name="AZStd::string" field="Name" value="SC-Node((NodeFunctionGenericMultiReturn&lt;t_Func, t_Traits, function&gt;)&lt;{bool(Vector3 Vector3 double )}* IsCloseTraits &gt;)" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+										<Class name="AZStd::vector" field="Components" type="{13D58FF9-1088-5C69-9A1F-C2A144B57B78}">
+											<Class name="(NodeFunctionGenericMultiReturn&lt;t_Func, t_Traits, function&gt;)&lt;{bool(Vector3 Vector3 double )}* IsCloseTraits &gt;" field="element" version="1" type="{4C54A897-39D7-5612-AAA6-B5CC25D65CE2}">
+												<Class name="Node" field="BaseClass1" version="14" type="{52B454AE-FA7E-4FE9-87D3-A1CAB235C691}">
+													<Class name="AZ::Component" field="BaseClass1" type="{EDFCB2CF-F75D-43BE-B26B-F35821B29247}">
+														<Class name="AZ::u64" field="Id" value="17961952020405401117" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+													</Class>
+													<Class name="AZStd::list" field="Slots" type="{E01B3091-9B44-571A-A87B-7D0E2768D774}">
+														<Class name="Slot" field="element" version="21" type="{FBFE0F02-4C26-475F-A28B-18D3A533C13C}">
+															<Class name="bool" field="IsOverload" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="bool" field="isVisibile" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="SlotId" field="id" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+																<Class name="AZ::Uuid" field="m_id" value="{E7179CAF-6CDD-413E-B1BD-87CF946482A3}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="int" field="DynamicTypeOverride" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="AZStd::vector" field="contracts" type="{C87136AF-3259-590C-9519-D1C4C75F1C86}">
+																<Class name="AZStd::unique_ptr" field="element" type="{75F9EC0D-D8D6-5410-BD79-960E22076B03}">
+																	<Class name="SlotTypeContract" field="element" type="{084B4F2A-AB34-4931-9269-E3614FC1CDFA}">
+																		<Class name="Contract" field="BaseClass1" type="{93846E60-BD7E-438A-B970-5C4AA591CF93}"/>
+																	</Class>
+																</Class>
+															</Class>
+															<Class name="AZStd::string" field="slotName" value="In" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="AZStd::string" field="toolTip" value="" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="Type" field="DisplayDataType" version="2" type="{0EADF8F5-8AB8-42E9-9C50-F5C78255C817}">
+																<Class name="unsigned int" field="m_type" value="2" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+																<Class name="AZ::Uuid" field="m_azType" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="Crc32" field="DisplayGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="SlotDescriptor" field="Descriptor" version="1" type="{FBF1C3A7-AA74-420F-BBE4-29F78D6EA262}">
+																<Class name="int" field="ConnectionType" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+																<Class name="int" field="SlotType" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															</Class>
+															<Class name="bool" field="IsLatent" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="Crc32" field="DynamicGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="int" field="DataType" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="bool" field="IsReference" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="VariableId" field="VariableReference" type="{CA57A57B-E510-4C09-B952-1F43742166AE}">
+																<Class name="AZ::Uuid" field="m_id" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="bool" field="IsUserAdded" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+														</Class>
+														<Class name="Slot" field="element" version="21" type="{FBFE0F02-4C26-475F-A28B-18D3A533C13C}">
+															<Class name="bool" field="IsOverload" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="bool" field="isVisibile" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="SlotId" field="id" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+																<Class name="AZ::Uuid" field="m_id" value="{E7CB9003-5E58-4903-971F-2DB5CB0B83E0}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="int" field="DynamicTypeOverride" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="AZStd::vector" field="contracts" type="{C87136AF-3259-590C-9519-D1C4C75F1C86}">
+																<Class name="AZStd::unique_ptr" field="element" type="{75F9EC0D-D8D6-5410-BD79-960E22076B03}">
+																	<Class name="SlotTypeContract" field="element" type="{084B4F2A-AB34-4931-9269-E3614FC1CDFA}">
+																		<Class name="Contract" field="BaseClass1" type="{93846E60-BD7E-438A-B970-5C4AA591CF93}"/>
+																	</Class>
+																</Class>
+															</Class>
+															<Class name="AZStd::string" field="slotName" value="Out" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="AZStd::string" field="toolTip" value="" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="Type" field="DisplayDataType" version="2" type="{0EADF8F5-8AB8-42E9-9C50-F5C78255C817}">
+																<Class name="unsigned int" field="m_type" value="2" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+																<Class name="AZ::Uuid" field="m_azType" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="Crc32" field="DisplayGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="SlotDescriptor" field="Descriptor" version="1" type="{FBF1C3A7-AA74-420F-BBE4-29F78D6EA262}">
+																<Class name="int" field="ConnectionType" value="2" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+																<Class name="int" field="SlotType" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															</Class>
+															<Class name="bool" field="IsLatent" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="Crc32" field="DynamicGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="int" field="DataType" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="bool" field="IsReference" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="VariableId" field="VariableReference" type="{CA57A57B-E510-4C09-B952-1F43742166AE}">
+																<Class name="AZ::Uuid" field="m_id" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="bool" field="IsUserAdded" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+														</Class>
+														<Class name="Slot" field="element" version="21" type="{FBFE0F02-4C26-475F-A28B-18D3A533C13C}">
+															<Class name="bool" field="IsOverload" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="bool" field="isVisibile" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="SlotId" field="id" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+																<Class name="AZ::Uuid" field="m_id" value="{DD0A58C8-53DB-4317-BA4D-49761556E509}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="int" field="DynamicTypeOverride" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="AZStd::vector" field="contracts" type="{C87136AF-3259-590C-9519-D1C4C75F1C86}">
+																<Class name="AZStd::unique_ptr" field="element" type="{75F9EC0D-D8D6-5410-BD79-960E22076B03}">
+																	<Class name="SlotTypeContract" field="element" type="{084B4F2A-AB34-4931-9269-E3614FC1CDFA}">
+																		<Class name="Contract" field="BaseClass1" type="{93846E60-BD7E-438A-B970-5C4AA591CF93}"/>
+																	</Class>
+																</Class>
+																<Class name="AZStd::unique_ptr" field="element" type="{75F9EC0D-D8D6-5410-BD79-960E22076B03}">
+																	<Class name="ExclusivePureDataContract" field="element" type="{E48A0B26-B6B7-4AF3-9341-9E5C5C1F0DE8}">
+																		<Class name="Contract" field="BaseClass1" type="{93846E60-BD7E-438A-B970-5C4AA591CF93}"/>
+																	</Class>
+																</Class>
+															</Class>
+															<Class name="AZStd::string" field="slotName" value="Vector3: A" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="AZStd::string" field="toolTip" value="" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="Type" field="DisplayDataType" version="2" type="{0EADF8F5-8AB8-42E9-9C50-F5C78255C817}">
+																<Class name="unsigned int" field="m_type" value="2" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+																<Class name="AZ::Uuid" field="m_azType" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="Crc32" field="DisplayGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="SlotDescriptor" field="Descriptor" version="1" type="{FBF1C3A7-AA74-420F-BBE4-29F78D6EA262}">
+																<Class name="int" field="ConnectionType" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+																<Class name="int" field="SlotType" value="2" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															</Class>
+															<Class name="bool" field="IsLatent" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="Crc32" field="DynamicGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="int" field="DataType" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="bool" field="IsReference" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="VariableId" field="VariableReference" type="{CA57A57B-E510-4C09-B952-1F43742166AE}">
+																<Class name="AZ::Uuid" field="m_id" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="bool" field="IsUserAdded" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+														</Class>
+														<Class name="Slot" field="element" version="21" type="{FBFE0F02-4C26-475F-A28B-18D3A533C13C}">
+															<Class name="bool" field="IsOverload" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="bool" field="isVisibile" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="SlotId" field="id" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+																<Class name="AZ::Uuid" field="m_id" value="{0323DCF0-DFE3-41DF-A157-8ECBF25ED9DF}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="int" field="DynamicTypeOverride" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="AZStd::vector" field="contracts" type="{C87136AF-3259-590C-9519-D1C4C75F1C86}">
+																<Class name="AZStd::unique_ptr" field="element" type="{75F9EC0D-D8D6-5410-BD79-960E22076B03}">
+																	<Class name="SlotTypeContract" field="element" type="{084B4F2A-AB34-4931-9269-E3614FC1CDFA}">
+																		<Class name="Contract" field="BaseClass1" type="{93846E60-BD7E-438A-B970-5C4AA591CF93}"/>
+																	</Class>
+																</Class>
+																<Class name="AZStd::unique_ptr" field="element" type="{75F9EC0D-D8D6-5410-BD79-960E22076B03}">
+																	<Class name="ExclusivePureDataContract" field="element" type="{E48A0B26-B6B7-4AF3-9341-9E5C5C1F0DE8}">
+																		<Class name="Contract" field="BaseClass1" type="{93846E60-BD7E-438A-B970-5C4AA591CF93}"/>
+																	</Class>
+																</Class>
+															</Class>
+															<Class name="AZStd::string" field="slotName" value="Vector3: B" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="AZStd::string" field="toolTip" value="" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="Type" field="DisplayDataType" version="2" type="{0EADF8F5-8AB8-42E9-9C50-F5C78255C817}">
+																<Class name="unsigned int" field="m_type" value="2" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+																<Class name="AZ::Uuid" field="m_azType" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="Crc32" field="DisplayGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="SlotDescriptor" field="Descriptor" version="1" type="{FBF1C3A7-AA74-420F-BBE4-29F78D6EA262}">
+																<Class name="int" field="ConnectionType" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+																<Class name="int" field="SlotType" value="2" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															</Class>
+															<Class name="bool" field="IsLatent" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="Crc32" field="DynamicGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="int" field="DataType" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="bool" field="IsReference" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="VariableId" field="VariableReference" type="{CA57A57B-E510-4C09-B952-1F43742166AE}">
+																<Class name="AZ::Uuid" field="m_id" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="bool" field="IsUserAdded" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+														</Class>
+														<Class name="Slot" field="element" version="21" type="{FBFE0F02-4C26-475F-A28B-18D3A533C13C}">
+															<Class name="bool" field="IsOverload" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="bool" field="isVisibile" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="SlotId" field="id" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+																<Class name="AZ::Uuid" field="m_id" value="{C0716380-57CE-4505-9DA8-4B1953168406}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="int" field="DynamicTypeOverride" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="AZStd::vector" field="contracts" type="{C87136AF-3259-590C-9519-D1C4C75F1C86}">
+																<Class name="AZStd::unique_ptr" field="element" type="{75F9EC0D-D8D6-5410-BD79-960E22076B03}">
+																	<Class name="SlotTypeContract" field="element" type="{084B4F2A-AB34-4931-9269-E3614FC1CDFA}">
+																		<Class name="Contract" field="BaseClass1" type="{93846E60-BD7E-438A-B970-5C4AA591CF93}"/>
+																	</Class>
+																</Class>
+																<Class name="AZStd::unique_ptr" field="element" type="{75F9EC0D-D8D6-5410-BD79-960E22076B03}">
+																	<Class name="ExclusivePureDataContract" field="element" type="{E48A0B26-B6B7-4AF3-9341-9E5C5C1F0DE8}">
+																		<Class name="Contract" field="BaseClass1" type="{93846E60-BD7E-438A-B970-5C4AA591CF93}"/>
+																	</Class>
+																</Class>
+															</Class>
+															<Class name="AZStd::string" field="slotName" value="Number: Tolerance" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="AZStd::string" field="toolTip" value="" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="Type" field="DisplayDataType" version="2" type="{0EADF8F5-8AB8-42E9-9C50-F5C78255C817}">
+																<Class name="unsigned int" field="m_type" value="2" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+																<Class name="AZ::Uuid" field="m_azType" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="Crc32" field="DisplayGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="SlotDescriptor" field="Descriptor" version="1" type="{FBF1C3A7-AA74-420F-BBE4-29F78D6EA262}">
+																<Class name="int" field="ConnectionType" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+																<Class name="int" field="SlotType" value="2" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															</Class>
+															<Class name="bool" field="IsLatent" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="Crc32" field="DynamicGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="int" field="DataType" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="bool" field="IsReference" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="VariableId" field="VariableReference" type="{CA57A57B-E510-4C09-B952-1F43742166AE}">
+																<Class name="AZ::Uuid" field="m_id" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="bool" field="IsUserAdded" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+														</Class>
+														<Class name="Slot" field="element" version="21" type="{FBFE0F02-4C26-475F-A28B-18D3A533C13C}">
+															<Class name="bool" field="IsOverload" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="bool" field="isVisibile" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="SlotId" field="id" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+																<Class name="AZ::Uuid" field="m_id" value="{A3235190-5134-451F-BE1A-29A10FC4FC17}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="int" field="DynamicTypeOverride" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="AZStd::vector" field="contracts" type="{C87136AF-3259-590C-9519-D1C4C75F1C86}">
+																<Class name="AZStd::unique_ptr" field="element" type="{75F9EC0D-D8D6-5410-BD79-960E22076B03}">
+																	<Class name="SlotTypeContract" field="element" type="{084B4F2A-AB34-4931-9269-E3614FC1CDFA}">
+																		<Class name="Contract" field="BaseClass1" type="{93846E60-BD7E-438A-B970-5C4AA591CF93}"/>
+																	</Class>
+																</Class>
+															</Class>
+															<Class name="AZStd::string" field="slotName" value="Result: Boolean" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="AZStd::string" field="toolTip" value="" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="Type" field="DisplayDataType" version="2" type="{0EADF8F5-8AB8-42E9-9C50-F5C78255C817}">
+																<Class name="unsigned int" field="m_type" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+																<Class name="AZ::Uuid" field="m_azType" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="Crc32" field="DisplayGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="SlotDescriptor" field="Descriptor" version="1" type="{FBF1C3A7-AA74-420F-BBE4-29F78D6EA262}">
+																<Class name="int" field="ConnectionType" value="2" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+																<Class name="int" field="SlotType" value="2" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															</Class>
+															<Class name="bool" field="IsLatent" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="Crc32" field="DynamicGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="int" field="DataType" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="bool" field="IsReference" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="VariableId" field="VariableReference" type="{CA57A57B-E510-4C09-B952-1F43742166AE}">
+																<Class name="AZ::Uuid" field="m_id" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="bool" field="IsUserAdded" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+														</Class>
+													</Class>
+													<Class name="AZStd::list" field="Datums" type="{36259B04-FAAB-5E8A-B7BF-A5E2EA5A9B3A}">
+														<Class name="Datum" field="element" version="6" type="{8B836FC0-98A8-4A81-8651-35C7CA125451}">
+															<Class name="bool" field="m_isUntypedStorage" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="Type" field="m_type" version="2" type="{0EADF8F5-8AB8-42E9-9C50-F5C78255C817}">
+																<Class name="unsigned int" field="m_type" value="8" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+																<Class name="AZ::Uuid" field="m_azType" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="int" field="m_originality" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="any" field="m_datumStorage" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
+																<Class name="Vector3" field="m_data" value="0.0000000 0.0000000 0.0000000" type="{8379EB7D-01FA-4538-B64B-A6543B4BE73D}"/>
+															</Class>
+															<Class name="AZStd::string" field="m_datumLabel" value="Vector3: A" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+														</Class>
+														<Class name="Datum" field="element" version="6" type="{8B836FC0-98A8-4A81-8651-35C7CA125451}">
+															<Class name="bool" field="m_isUntypedStorage" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="Type" field="m_type" version="2" type="{0EADF8F5-8AB8-42E9-9C50-F5C78255C817}">
+																<Class name="unsigned int" field="m_type" value="8" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+																<Class name="AZ::Uuid" field="m_azType" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="int" field="m_originality" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="any" field="m_datumStorage" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
+																<Class name="Vector3" field="m_data" value="0.0000000 0.0000000 0.0000000" type="{8379EB7D-01FA-4538-B64B-A6543B4BE73D}"/>
+															</Class>
+															<Class name="AZStd::string" field="m_datumLabel" value="Vector3: B" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+														</Class>
+														<Class name="Datum" field="element" version="6" type="{8B836FC0-98A8-4A81-8651-35C7CA125451}">
+															<Class name="bool" field="m_isUntypedStorage" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="Type" field="m_type" version="2" type="{0EADF8F5-8AB8-42E9-9C50-F5C78255C817}">
+																<Class name="unsigned int" field="m_type" value="3" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+																<Class name="AZ::Uuid" field="m_azType" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="int" field="m_originality" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="any" field="m_datumStorage" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
+																<Class name="double" field="m_data" value="0.0000001" type="{110C4B14-11A8-4E9D-8638-5051013A56AC}"/>
+															</Class>
+															<Class name="AZStd::string" field="m_datumLabel" value="Number: Tolerance" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+														</Class>
+													</Class>
+													<Class name="int" field="NodeDisabledFlag" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+												</Class>
+												<Class name="bool" field="Initialized" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+											</Class>
+										</Class>
+										<Class name="bool" field="IsDependencyReady" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+										<Class name="bool" field="IsRuntimeActive" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+									</Class>
+									<Class name="AZ::Entity" field="element" version="2" type="{75651658-8663-478D-9090-2432DFCAFA44}">
+										<Class name="EntityId" field="Id" version="1" type="{6383F1D3-BB27-4E6B-A49A-6409B2059EAA}">
+											<Class name="AZ::u64" field="id" value="19546862770174" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+										</Class>
+										<Class name="AZStd::string" field="Name" value="SC-Node(GetWorldTranslation)" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+										<Class name="AZStd::vector" field="Components" type="{13D58FF9-1088-5C69-9A1F-C2A144B57B78}">
+											<Class name="Method" field="element" version="5" type="{E42861BD-1956-45AE-8DD7-CCFC1E3E5ACF}">
+												<Class name="Node" field="BaseClass1" version="14" type="{52B454AE-FA7E-4FE9-87D3-A1CAB235C691}">
+													<Class name="AZ::Component" field="BaseClass1" type="{EDFCB2CF-F75D-43BE-B26B-F35821B29247}">
+														<Class name="AZ::u64" field="Id" value="13647415380097552088" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+													</Class>
+													<Class name="AZStd::list" field="Slots" type="{E01B3091-9B44-571A-A87B-7D0E2768D774}">
+														<Class name="Slot" field="element" version="21" type="{FBFE0F02-4C26-475F-A28B-18D3A533C13C}">
+															<Class name="bool" field="IsOverload" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="bool" field="isVisibile" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="SlotId" field="id" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+																<Class name="AZ::Uuid" field="m_id" value="{3CA0C9B6-FB61-44AE-AE2F-0B60453ECA7D}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="int" field="DynamicTypeOverride" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="AZStd::vector" field="contracts" type="{C87136AF-3259-590C-9519-D1C4C75F1C86}">
+																<Class name="AZStd::unique_ptr" field="element" type="{75F9EC0D-D8D6-5410-BD79-960E22076B03}">
+																	<Class name="SlotTypeContract" field="element" type="{084B4F2A-AB34-4931-9269-E3614FC1CDFA}">
+																		<Class name="Contract" field="BaseClass1" type="{93846E60-BD7E-438A-B970-5C4AA591CF93}"/>
+																	</Class>
+																</Class>
+																<Class name="AZStd::unique_ptr" field="element" type="{75F9EC0D-D8D6-5410-BD79-960E22076B03}">
+																	<Class name="ExclusivePureDataContract" field="element" type="{E48A0B26-B6B7-4AF3-9341-9E5C5C1F0DE8}">
+																		<Class name="Contract" field="BaseClass1" type="{93846E60-BD7E-438A-B970-5C4AA591CF93}"/>
+																	</Class>
+																</Class>
+															</Class>
+															<Class name="AZStd::string" field="slotName" value="EntityID: 0" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="AZStd::string" field="toolTip" value="" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="Type" field="DisplayDataType" version="2" type="{0EADF8F5-8AB8-42E9-9C50-F5C78255C817}">
+																<Class name="unsigned int" field="m_type" value="2" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+																<Class name="AZ::Uuid" field="m_azType" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="Crc32" field="DisplayGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="SlotDescriptor" field="Descriptor" version="1" type="{FBF1C3A7-AA74-420F-BBE4-29F78D6EA262}">
+																<Class name="int" field="ConnectionType" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+																<Class name="int" field="SlotType" value="2" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															</Class>
+															<Class name="bool" field="IsLatent" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="Crc32" field="DynamicGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="int" field="DataType" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="bool" field="IsReference" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="VariableId" field="VariableReference" type="{CA57A57B-E510-4C09-B952-1F43742166AE}">
+																<Class name="AZ::Uuid" field="m_id" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="bool" field="IsUserAdded" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+														</Class>
+														<Class name="Slot" field="element" version="21" type="{FBFE0F02-4C26-475F-A28B-18D3A533C13C}">
+															<Class name="bool" field="IsOverload" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="bool" field="isVisibile" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="SlotId" field="id" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+																<Class name="AZ::Uuid" field="m_id" value="{1AFFFEE5-DA6A-42C0-9AA5-6EEA12328C3C}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="int" field="DynamicTypeOverride" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="AZStd::vector" field="contracts" type="{C87136AF-3259-590C-9519-D1C4C75F1C86}">
+																<Class name="AZStd::unique_ptr" field="element" type="{75F9EC0D-D8D6-5410-BD79-960E22076B03}">
+																	<Class name="SlotTypeContract" field="element" type="{084B4F2A-AB34-4931-9269-E3614FC1CDFA}">
+																		<Class name="Contract" field="BaseClass1" type="{93846E60-BD7E-438A-B970-5C4AA591CF93}"/>
+																	</Class>
+																</Class>
+															</Class>
+															<Class name="AZStd::string" field="slotName" value="In" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="AZStd::string" field="toolTip" value="" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="Type" field="DisplayDataType" version="2" type="{0EADF8F5-8AB8-42E9-9C50-F5C78255C817}">
+																<Class name="unsigned int" field="m_type" value="2" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+																<Class name="AZ::Uuid" field="m_azType" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="Crc32" field="DisplayGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="SlotDescriptor" field="Descriptor" version="1" type="{FBF1C3A7-AA74-420F-BBE4-29F78D6EA262}">
+																<Class name="int" field="ConnectionType" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+																<Class name="int" field="SlotType" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															</Class>
+															<Class name="bool" field="IsLatent" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="Crc32" field="DynamicGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="int" field="DataType" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="bool" field="IsReference" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="VariableId" field="VariableReference" type="{CA57A57B-E510-4C09-B952-1F43742166AE}">
+																<Class name="AZ::Uuid" field="m_id" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="bool" field="IsUserAdded" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+														</Class>
+														<Class name="Slot" field="element" version="21" type="{FBFE0F02-4C26-475F-A28B-18D3A533C13C}">
+															<Class name="bool" field="IsOverload" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="bool" field="isVisibile" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="SlotId" field="id" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+																<Class name="AZ::Uuid" field="m_id" value="{08373CB7-A886-4501-836F-8EE894C527FE}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="int" field="DynamicTypeOverride" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="AZStd::vector" field="contracts" type="{C87136AF-3259-590C-9519-D1C4C75F1C86}">
+																<Class name="AZStd::unique_ptr" field="element" type="{75F9EC0D-D8D6-5410-BD79-960E22076B03}">
+																	<Class name="SlotTypeContract" field="element" type="{084B4F2A-AB34-4931-9269-E3614FC1CDFA}">
+																		<Class name="Contract" field="BaseClass1" type="{93846E60-BD7E-438A-B970-5C4AA591CF93}"/>
+																	</Class>
+																</Class>
+															</Class>
+															<Class name="AZStd::string" field="slotName" value="Result: Vector3" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="AZStd::string" field="toolTip" value="" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="Type" field="DisplayDataType" version="2" type="{0EADF8F5-8AB8-42E9-9C50-F5C78255C817}">
+																<Class name="unsigned int" field="m_type" value="8" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+																<Class name="AZ::Uuid" field="m_azType" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="Crc32" field="DisplayGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="SlotDescriptor" field="Descriptor" version="1" type="{FBF1C3A7-AA74-420F-BBE4-29F78D6EA262}">
+																<Class name="int" field="ConnectionType" value="2" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+																<Class name="int" field="SlotType" value="2" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															</Class>
+															<Class name="bool" field="IsLatent" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="Crc32" field="DynamicGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="int" field="DataType" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="bool" field="IsReference" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="VariableId" field="VariableReference" type="{CA57A57B-E510-4C09-B952-1F43742166AE}">
+																<Class name="AZ::Uuid" field="m_id" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="bool" field="IsUserAdded" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+														</Class>
+														<Class name="Slot" field="element" version="21" type="{FBFE0F02-4C26-475F-A28B-18D3A533C13C}">
+															<Class name="bool" field="IsOverload" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="bool" field="isVisibile" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="SlotId" field="id" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+																<Class name="AZ::Uuid" field="m_id" value="{09FBF9FD-82CC-4340-A1C7-F6F3F5387E78}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="int" field="DynamicTypeOverride" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="AZStd::vector" field="contracts" type="{C87136AF-3259-590C-9519-D1C4C75F1C86}">
+																<Class name="AZStd::unique_ptr" field="element" type="{75F9EC0D-D8D6-5410-BD79-960E22076B03}">
+																	<Class name="SlotTypeContract" field="element" type="{084B4F2A-AB34-4931-9269-E3614FC1CDFA}">
+																		<Class name="Contract" field="BaseClass1" type="{93846E60-BD7E-438A-B970-5C4AA591CF93}"/>
+																	</Class>
+																</Class>
+															</Class>
+															<Class name="AZStd::string" field="slotName" value="Out" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="AZStd::string" field="toolTip" value="" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+															<Class name="Type" field="DisplayDataType" version="2" type="{0EADF8F5-8AB8-42E9-9C50-F5C78255C817}">
+																<Class name="unsigned int" field="m_type" value="2" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+																<Class name="AZ::Uuid" field="m_azType" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="Crc32" field="DisplayGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="SlotDescriptor" field="Descriptor" version="1" type="{FBF1C3A7-AA74-420F-BBE4-29F78D6EA262}">
+																<Class name="int" field="ConnectionType" value="2" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+																<Class name="int" field="SlotType" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															</Class>
+															<Class name="bool" field="IsLatent" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="Crc32" field="DynamicGroup" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+																<Class name="unsigned int" field="Value" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+															</Class>
+															<Class name="int" field="DataType" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="bool" field="IsReference" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="VariableId" field="VariableReference" type="{CA57A57B-E510-4C09-B952-1F43742166AE}">
+																<Class name="AZ::Uuid" field="m_id" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="bool" field="IsUserAdded" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+														</Class>
+													</Class>
+													<Class name="AZStd::list" field="Datums" type="{36259B04-FAAB-5E8A-B7BF-A5E2EA5A9B3A}">
+														<Class name="Datum" field="element" version="6" type="{8B836FC0-98A8-4A81-8651-35C7CA125451}">
+															<Class name="bool" field="m_isUntypedStorage" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+															<Class name="Type" field="m_type" version="2" type="{0EADF8F5-8AB8-42E9-9C50-F5C78255C817}">
+																<Class name="unsigned int" field="m_type" value="1" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+																<Class name="AZ::Uuid" field="m_azType" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+															</Class>
+															<Class name="int" field="m_originality" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+															<Class name="any" field="m_datumStorage" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
+																<Class name="EntityId" field="m_data" version="1" type="{6383F1D3-BB27-4E6B-A49A-6409B2059EAA}">
+																	<Class name="AZ::u64" field="id" value="2901262558" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+																</Class>
+															</Class>
+															<Class name="AZStd::string" field="m_datumLabel" value="Source" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+														</Class>
+													</Class>
+													<Class name="int" field="NodeDisabledFlag" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+												</Class>
+												<Class name="int" field="methodType" value="0" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+												<Class name="AZStd::string" field="methodName" value="GetWorldTranslation" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+												<Class name="AZStd::string" field="className" value="TransformBus" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+												<Class name="AZStd::vector" field="namespaces" type="{99DAD0BC-740E-5E82-826B-8FC7968CC02C}"/>
+												<Class name="AZStd::vector" field="resultSlotIDs" type="{D0B13803-101B-54D8-914C-0DA49FDFA268}">
+													<Class name="SlotId" field="element" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+														<Class name="AZ::Uuid" field="m_id" value="{08373CB7-A886-4501-836F-8EE894C527FE}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+													</Class>
+												</Class>
+												<Class name="AZStd::string" field="prettyClassName" value="TransformBus" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+											</Class>
+										</Class>
+										<Class name="bool" field="IsDependencyReady" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+										<Class name="bool" field="IsRuntimeActive" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+									</Class>
+								</Class>
+								<Class name="AZStd::vector" field="m_connections" type="{21786AF0-2606-5B9A-86EB-0892E2820E6C}">
+									<Class name="AZ::Entity" field="element" version="2" type="{75651658-8663-478D-9090-2432DFCAFA44}">
+										<Class name="EntityId" field="Id" version="1" type="{6383F1D3-BB27-4E6B-A49A-6409B2059EAA}">
+											<Class name="AZ::u64" field="id" value="19551157737470" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+										</Class>
+										<Class name="AZStd::string" field="Name" value="srcEndpoint=(TickBus Handler: ExecutionSlot:OnTick), destEndpoint=(GetWorldTranslation: In)" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+										<Class name="AZStd::vector" field="Components" type="{13D58FF9-1088-5C69-9A1F-C2A144B57B78}">
+											<Class name="Connection" field="element" type="{64CA5016-E803-4AC4-9A36-BDA2C890C6EB}">
+												<Class name="AZ::Component" field="BaseClass1" type="{EDFCB2CF-F75D-43BE-B26B-F35821B29247}">
+													<Class name="AZ::u64" field="Id" value="18446434875618978715" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+												</Class>
+												<Class name="Endpoint" field="sourceEndpoint" version="1" type="{91D4ADAC-56FE-4D82-B9AF-6975D21435C8}">
+													<Class name="EntityId" field="nodeId" version="1" type="{6383F1D3-BB27-4E6B-A49A-6409B2059EAA}">
+														<Class name="AZ::u64" field="id" value="19533977868286" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+													</Class>
+													<Class name="SlotId" field="slotId" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+														<Class name="AZ::Uuid" field="m_id" value="{6B8D96B0-53D4-4A77-82DF-715AC99ADD57}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+													</Class>
+												</Class>
+												<Class name="Endpoint" field="targetEndpoint" version="1" type="{91D4ADAC-56FE-4D82-B9AF-6975D21435C8}">
+													<Class name="EntityId" field="nodeId" version="1" type="{6383F1D3-BB27-4E6B-A49A-6409B2059EAA}">
+														<Class name="AZ::u64" field="id" value="19546862770174" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+													</Class>
+													<Class name="SlotId" field="slotId" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+														<Class name="AZ::Uuid" field="m_id" value="{1AFFFEE5-DA6A-42C0-9AA5-6EEA12328C3C}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+													</Class>
+												</Class>
+											</Class>
+										</Class>
+										<Class name="bool" field="IsDependencyReady" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+										<Class name="bool" field="IsRuntimeActive" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+									</Class>
+									<Class name="AZ::Entity" field="element" version="2" type="{75651658-8663-478D-9090-2432DFCAFA44}">
+										<Class name="EntityId" field="Id" version="1" type="{6383F1D3-BB27-4E6B-A49A-6409B2059EAA}">
+											<Class name="AZ::u64" field="id" value="19555452704766" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+										</Class>
+										<Class name="AZStd::string" field="Name" value="srcEndpoint=(GetWorldTranslation: Result: Vector3), destEndpoint=(IsClose: Vector3: A)" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+										<Class name="AZStd::vector" field="Components" type="{13D58FF9-1088-5C69-9A1F-C2A144B57B78}">
+											<Class name="Connection" field="element" type="{64CA5016-E803-4AC4-9A36-BDA2C890C6EB}">
+												<Class name="AZ::Component" field="BaseClass1" type="{EDFCB2CF-F75D-43BE-B26B-F35821B29247}">
+													<Class name="AZ::u64" field="Id" value="11028423361775474601" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+												</Class>
+												<Class name="Endpoint" field="sourceEndpoint" version="1" type="{91D4ADAC-56FE-4D82-B9AF-6975D21435C8}">
+													<Class name="EntityId" field="nodeId" version="1" type="{6383F1D3-BB27-4E6B-A49A-6409B2059EAA}">
+														<Class name="AZ::u64" field="id" value="19546862770174" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+													</Class>
+													<Class name="SlotId" field="slotId" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+														<Class name="AZ::Uuid" field="m_id" value="{08373CB7-A886-4501-836F-8EE894C527FE}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+													</Class>
+												</Class>
+												<Class name="Endpoint" field="targetEndpoint" version="1" type="{91D4ADAC-56FE-4D82-B9AF-6975D21435C8}">
+													<Class name="EntityId" field="nodeId" version="1" type="{6383F1D3-BB27-4E6B-A49A-6409B2059EAA}">
+														<Class name="AZ::u64" field="id" value="19542567802878" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+													</Class>
+													<Class name="SlotId" field="slotId" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+														<Class name="AZ::Uuid" field="m_id" value="{DD0A58C8-53DB-4317-BA4D-49761556E509}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+													</Class>
+												</Class>
+											</Class>
+										</Class>
+										<Class name="bool" field="IsDependencyReady" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+										<Class name="bool" field="IsRuntimeActive" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+									</Class>
+									<Class name="AZ::Entity" field="element" version="2" type="{75651658-8663-478D-9090-2432DFCAFA44}">
+										<Class name="EntityId" field="Id" version="1" type="{6383F1D3-BB27-4E6B-A49A-6409B2059EAA}">
+											<Class name="AZ::u64" field="id" value="19559747672062" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+										</Class>
+										<Class name="AZStd::string" field="Name" value="srcEndpoint=(Get Variable: Vector3), destEndpoint=(IsClose: Vector3: B)" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+										<Class name="AZStd::vector" field="Components" type="{13D58FF9-1088-5C69-9A1F-C2A144B57B78}">
+											<Class name="Connection" field="element" type="{64CA5016-E803-4AC4-9A36-BDA2C890C6EB}">
+												<Class name="AZ::Component" field="BaseClass1" type="{EDFCB2CF-F75D-43BE-B26B-F35821B29247}">
+													<Class name="AZ::u64" field="Id" value="18212353416594037050" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+												</Class>
+												<Class name="Endpoint" field="sourceEndpoint" version="1" type="{91D4ADAC-56FE-4D82-B9AF-6975D21435C8}">
+													<Class name="EntityId" field="nodeId" version="1" type="{6383F1D3-BB27-4E6B-A49A-6409B2059EAA}">
+														<Class name="AZ::u64" field="id" value="19538272835582" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+													</Class>
+													<Class name="SlotId" field="slotId" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+														<Class name="AZ::Uuid" field="m_id" value="{95F3AFE1-1631-458F-B0CA-18512F97A4A8}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+													</Class>
+												</Class>
+												<Class name="Endpoint" field="targetEndpoint" version="1" type="{91D4ADAC-56FE-4D82-B9AF-6975D21435C8}">
+													<Class name="EntityId" field="nodeId" version="1" type="{6383F1D3-BB27-4E6B-A49A-6409B2059EAA}">
+														<Class name="AZ::u64" field="id" value="19542567802878" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+													</Class>
+													<Class name="SlotId" field="slotId" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+														<Class name="AZ::Uuid" field="m_id" value="{0323DCF0-DFE3-41DF-A157-8ECBF25ED9DF}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+													</Class>
+												</Class>
+											</Class>
+										</Class>
+										<Class name="bool" field="IsDependencyReady" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+										<Class name="bool" field="IsRuntimeActive" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+									</Class>
+									<Class name="AZ::Entity" field="element" version="2" type="{75651658-8663-478D-9090-2432DFCAFA44}">
+										<Class name="EntityId" field="Id" version="1" type="{6383F1D3-BB27-4E6B-A49A-6409B2059EAA}">
+											<Class name="AZ::u64" field="id" value="19564042639358" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+										</Class>
+										<Class name="AZStd::string" field="Name" value="srcEndpoint=(Get Variable: Out), destEndpoint=(IsClose: In)" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+										<Class name="AZStd::vector" field="Components" type="{13D58FF9-1088-5C69-9A1F-C2A144B57B78}">
+											<Class name="Connection" field="element" type="{64CA5016-E803-4AC4-9A36-BDA2C890C6EB}">
+												<Class name="AZ::Component" field="BaseClass1" type="{EDFCB2CF-F75D-43BE-B26B-F35821B29247}">
+													<Class name="AZ::u64" field="Id" value="7822475430622477473" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+												</Class>
+												<Class name="Endpoint" field="sourceEndpoint" version="1" type="{91D4ADAC-56FE-4D82-B9AF-6975D21435C8}">
+													<Class name="EntityId" field="nodeId" version="1" type="{6383F1D3-BB27-4E6B-A49A-6409B2059EAA}">
+														<Class name="AZ::u64" field="id" value="19538272835582" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+													</Class>
+													<Class name="SlotId" field="slotId" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+														<Class name="AZ::Uuid" field="m_id" value="{93F8F77F-E5CF-4CF2-96F3-5E6C84A0661C}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+													</Class>
+												</Class>
+												<Class name="Endpoint" field="targetEndpoint" version="1" type="{91D4ADAC-56FE-4D82-B9AF-6975D21435C8}">
+													<Class name="EntityId" field="nodeId" version="1" type="{6383F1D3-BB27-4E6B-A49A-6409B2059EAA}">
+														<Class name="AZ::u64" field="id" value="19542567802878" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+													</Class>
+													<Class name="SlotId" field="slotId" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+														<Class name="AZ::Uuid" field="m_id" value="{E7179CAF-6CDD-413E-B1BD-87CF946482A3}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+													</Class>
+												</Class>
+											</Class>
+										</Class>
+										<Class name="bool" field="IsDependencyReady" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+										<Class name="bool" field="IsRuntimeActive" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+									</Class>
+									<Class name="AZ::Entity" field="element" version="2" type="{75651658-8663-478D-9090-2432DFCAFA44}">
+										<Class name="EntityId" field="Id" version="1" type="{6383F1D3-BB27-4E6B-A49A-6409B2059EAA}">
+											<Class name="AZ::u64" field="id" value="19568337606654" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+										</Class>
+										<Class name="AZStd::string" field="Name" value="srcEndpoint=(GetWorldTranslation: Result: Vector3), destEndpoint=(Set Variable: Vector3)" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+										<Class name="AZStd::vector" field="Components" type="{13D58FF9-1088-5C69-9A1F-C2A144B57B78}">
+											<Class name="Connection" field="element" type="{64CA5016-E803-4AC4-9A36-BDA2C890C6EB}">
+												<Class name="AZ::Component" field="BaseClass1" type="{EDFCB2CF-F75D-43BE-B26B-F35821B29247}">
+													<Class name="AZ::u64" field="Id" value="6009347838019978248" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+												</Class>
+												<Class name="Endpoint" field="sourceEndpoint" version="1" type="{91D4ADAC-56FE-4D82-B9AF-6975D21435C8}">
+													<Class name="EntityId" field="nodeId" version="1" type="{6383F1D3-BB27-4E6B-A49A-6409B2059EAA}">
+														<Class name="AZ::u64" field="id" value="19546862770174" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+													</Class>
+													<Class name="SlotId" field="slotId" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+														<Class name="AZ::Uuid" field="m_id" value="{08373CB7-A886-4501-836F-8EE894C527FE}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+													</Class>
+												</Class>
+												<Class name="Endpoint" field="targetEndpoint" version="1" type="{91D4ADAC-56FE-4D82-B9AF-6975D21435C8}">
+													<Class name="EntityId" field="nodeId" version="1" type="{6383F1D3-BB27-4E6B-A49A-6409B2059EAA}">
+														<Class name="AZ::u64" field="id" value="19521092966398" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+													</Class>
+													<Class name="SlotId" field="slotId" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+														<Class name="AZ::Uuid" field="m_id" value="{7A8DCE57-865E-4A02-B8CD-7B03C8955B1C}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+													</Class>
+												</Class>
+											</Class>
+										</Class>
+										<Class name="bool" field="IsDependencyReady" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+										<Class name="bool" field="IsRuntimeActive" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+									</Class>
+									<Class name="AZ::Entity" field="element" version="2" type="{75651658-8663-478D-9090-2432DFCAFA44}">
+										<Class name="EntityId" field="Id" version="1" type="{6383F1D3-BB27-4E6B-A49A-6409B2059EAA}">
+											<Class name="AZ::u64" field="id" value="19572632573950" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+										</Class>
+										<Class name="AZStd::string" field="Name" value="srcEndpoint=(GetWorldTranslation: Out), destEndpoint=(Get Variable: In)" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+										<Class name="AZStd::vector" field="Components" type="{13D58FF9-1088-5C69-9A1F-C2A144B57B78}">
+											<Class name="Connection" field="element" type="{64CA5016-E803-4AC4-9A36-BDA2C890C6EB}">
+												<Class name="AZ::Component" field="BaseClass1" type="{EDFCB2CF-F75D-43BE-B26B-F35821B29247}">
+													<Class name="AZ::u64" field="Id" value="16869634803941273960" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+												</Class>
+												<Class name="Endpoint" field="sourceEndpoint" version="1" type="{91D4ADAC-56FE-4D82-B9AF-6975D21435C8}">
+													<Class name="EntityId" field="nodeId" version="1" type="{6383F1D3-BB27-4E6B-A49A-6409B2059EAA}">
+														<Class name="AZ::u64" field="id" value="19546862770174" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+													</Class>
+													<Class name="SlotId" field="slotId" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+														<Class name="AZ::Uuid" field="m_id" value="{09FBF9FD-82CC-4340-A1C7-F6F3F5387E78}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+													</Class>
+												</Class>
+												<Class name="Endpoint" field="targetEndpoint" version="1" type="{91D4ADAC-56FE-4D82-B9AF-6975D21435C8}">
+													<Class name="EntityId" field="nodeId" version="1" type="{6383F1D3-BB27-4E6B-A49A-6409B2059EAA}">
+														<Class name="AZ::u64" field="id" value="19538272835582" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+													</Class>
+													<Class name="SlotId" field="slotId" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+														<Class name="AZ::Uuid" field="m_id" value="{14209558-7115-40FE-8CAA-8D5C4871A9ED}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+													</Class>
+												</Class>
+											</Class>
+										</Class>
+										<Class name="bool" field="IsDependencyReady" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+										<Class name="bool" field="IsRuntimeActive" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+									</Class>
+									<Class name="AZ::Entity" field="element" version="2" type="{75651658-8663-478D-9090-2432DFCAFA44}">
+										<Class name="EntityId" field="Id" version="1" type="{6383F1D3-BB27-4E6B-A49A-6409B2059EAA}">
+											<Class name="AZ::u64" field="id" value="19576927541246" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+										</Class>
+										<Class name="AZStd::string" field="Name" value="srcEndpoint=(IsClose: Result: Boolean), destEndpoint=(If: Condition)" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+										<Class name="AZStd::vector" field="Components" type="{13D58FF9-1088-5C69-9A1F-C2A144B57B78}">
+											<Class name="Connection" field="element" type="{64CA5016-E803-4AC4-9A36-BDA2C890C6EB}">
+												<Class name="AZ::Component" field="BaseClass1" type="{EDFCB2CF-F75D-43BE-B26B-F35821B29247}">
+													<Class name="AZ::u64" field="Id" value="16147460068314598727" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+												</Class>
+												<Class name="Endpoint" field="sourceEndpoint" version="1" type="{91D4ADAC-56FE-4D82-B9AF-6975D21435C8}">
+													<Class name="EntityId" field="nodeId" version="1" type="{6383F1D3-BB27-4E6B-A49A-6409B2059EAA}">
+														<Class name="AZ::u64" field="id" value="19542567802878" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+													</Class>
+													<Class name="SlotId" field="slotId" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+														<Class name="AZ::Uuid" field="m_id" value="{A3235190-5134-451F-BE1A-29A10FC4FC17}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+													</Class>
+												</Class>
+												<Class name="Endpoint" field="targetEndpoint" version="1" type="{91D4ADAC-56FE-4D82-B9AF-6975D21435C8}">
+													<Class name="EntityId" field="nodeId" version="1" type="{6383F1D3-BB27-4E6B-A49A-6409B2059EAA}">
+														<Class name="AZ::u64" field="id" value="19525387933694" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+													</Class>
+													<Class name="SlotId" field="slotId" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+														<Class name="AZ::Uuid" field="m_id" value="{70F38F7F-C002-4AEF-9EB4-D173D13242F6}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+													</Class>
+												</Class>
+											</Class>
+										</Class>
+										<Class name="bool" field="IsDependencyReady" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+										<Class name="bool" field="IsRuntimeActive" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+									</Class>
+									<Class name="AZ::Entity" field="element" version="2" type="{75651658-8663-478D-9090-2432DFCAFA44}">
+										<Class name="EntityId" field="Id" version="1" type="{6383F1D3-BB27-4E6B-A49A-6409B2059EAA}">
+											<Class name="AZ::u64" field="id" value="19581222508542" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+										</Class>
+										<Class name="AZStd::string" field="Name" value="srcEndpoint=(If: True), destEndpoint=(Print: In)" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+										<Class name="AZStd::vector" field="Components" type="{13D58FF9-1088-5C69-9A1F-C2A144B57B78}">
+											<Class name="Connection" field="element" type="{64CA5016-E803-4AC4-9A36-BDA2C890C6EB}">
+												<Class name="AZ::Component" field="BaseClass1" type="{EDFCB2CF-F75D-43BE-B26B-F35821B29247}">
+													<Class name="AZ::u64" field="Id" value="12532264968280027904" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+												</Class>
+												<Class name="Endpoint" field="sourceEndpoint" version="1" type="{91D4ADAC-56FE-4D82-B9AF-6975D21435C8}">
+													<Class name="EntityId" field="nodeId" version="1" type="{6383F1D3-BB27-4E6B-A49A-6409B2059EAA}">
+														<Class name="AZ::u64" field="id" value="19525387933694" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+													</Class>
+													<Class name="SlotId" field="slotId" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+														<Class name="AZ::Uuid" field="m_id" value="{456142BA-A9FE-4657-8BF1-71A2CEB63A90}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+													</Class>
+												</Class>
+												<Class name="Endpoint" field="targetEndpoint" version="1" type="{91D4ADAC-56FE-4D82-B9AF-6975D21435C8}">
+													<Class name="EntityId" field="nodeId" version="1" type="{6383F1D3-BB27-4E6B-A49A-6409B2059EAA}">
+														<Class name="AZ::u64" field="id" value="19529682900990" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+													</Class>
+													<Class name="SlotId" field="slotId" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+														<Class name="AZ::Uuid" field="m_id" value="{6A71F0E7-5DAA-4C02-B0E2-5269827FF3EF}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+													</Class>
+												</Class>
+											</Class>
+										</Class>
+										<Class name="bool" field="IsDependencyReady" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+										<Class name="bool" field="IsRuntimeActive" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+									</Class>
+									<Class name="AZ::Entity" field="element" version="2" type="{75651658-8663-478D-9090-2432DFCAFA44}">
+										<Class name="EntityId" field="Id" version="1" type="{6383F1D3-BB27-4E6B-A49A-6409B2059EAA}">
+											<Class name="AZ::u64" field="id" value="19585517475838" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+										</Class>
+										<Class name="AZStd::string" field="Name" value="srcEndpoint=(If: False), destEndpoint=(Print: In)" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+										<Class name="AZStd::vector" field="Components" type="{13D58FF9-1088-5C69-9A1F-C2A144B57B78}">
+											<Class name="Connection" field="element" type="{64CA5016-E803-4AC4-9A36-BDA2C890C6EB}">
+												<Class name="AZ::Component" field="BaseClass1" type="{EDFCB2CF-F75D-43BE-B26B-F35821B29247}">
+													<Class name="AZ::u64" field="Id" value="10447646072854616069" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+												</Class>
+												<Class name="Endpoint" field="sourceEndpoint" version="1" type="{91D4ADAC-56FE-4D82-B9AF-6975D21435C8}">
+													<Class name="EntityId" field="nodeId" version="1" type="{6383F1D3-BB27-4E6B-A49A-6409B2059EAA}">
+														<Class name="AZ::u64" field="id" value="19525387933694" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+													</Class>
+													<Class name="SlotId" field="slotId" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+														<Class name="AZ::Uuid" field="m_id" value="{15AC0FDF-7967-4625-8898-12B545098077}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+													</Class>
+												</Class>
+												<Class name="Endpoint" field="targetEndpoint" version="1" type="{91D4ADAC-56FE-4D82-B9AF-6975D21435C8}">
+													<Class name="EntityId" field="nodeId" version="1" type="{6383F1D3-BB27-4E6B-A49A-6409B2059EAA}">
+														<Class name="AZ::u64" field="id" value="19516797999102" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+													</Class>
+													<Class name="SlotId" field="slotId" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+														<Class name="AZ::Uuid" field="m_id" value="{124B6872-6103-40B4-AF39-B2D2D36A148E}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+													</Class>
+												</Class>
+											</Class>
+										</Class>
+										<Class name="bool" field="IsDependencyReady" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+										<Class name="bool" field="IsRuntimeActive" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+									</Class>
+									<Class name="AZ::Entity" field="element" version="2" type="{75651658-8663-478D-9090-2432DFCAFA44}">
+										<Class name="EntityId" field="Id" version="1" type="{6383F1D3-BB27-4E6B-A49A-6409B2059EAA}">
+											<Class name="AZ::u64" field="id" value="19589812443134" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+										</Class>
+										<Class name="AZStd::string" field="Name" value="srcEndpoint=(IsClose: Out), destEndpoint=(Set Variable: In)" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+										<Class name="AZStd::vector" field="Components" type="{13D58FF9-1088-5C69-9A1F-C2A144B57B78}">
+											<Class name="Connection" field="element" type="{64CA5016-E803-4AC4-9A36-BDA2C890C6EB}">
+												<Class name="AZ::Component" field="BaseClass1" type="{EDFCB2CF-F75D-43BE-B26B-F35821B29247}">
+													<Class name="AZ::u64" field="Id" value="9691656196028498534" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+												</Class>
+												<Class name="Endpoint" field="sourceEndpoint" version="1" type="{91D4ADAC-56FE-4D82-B9AF-6975D21435C8}">
+													<Class name="EntityId" field="nodeId" version="1" type="{6383F1D3-BB27-4E6B-A49A-6409B2059EAA}">
+														<Class name="AZ::u64" field="id" value="19542567802878" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+													</Class>
+													<Class name="SlotId" field="slotId" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+														<Class name="AZ::Uuid" field="m_id" value="{E7CB9003-5E58-4903-971F-2DB5CB0B83E0}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+													</Class>
+												</Class>
+												<Class name="Endpoint" field="targetEndpoint" version="1" type="{91D4ADAC-56FE-4D82-B9AF-6975D21435C8}">
+													<Class name="EntityId" field="nodeId" version="1" type="{6383F1D3-BB27-4E6B-A49A-6409B2059EAA}">
+														<Class name="AZ::u64" field="id" value="19521092966398" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+													</Class>
+													<Class name="SlotId" field="slotId" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+														<Class name="AZ::Uuid" field="m_id" value="{59CEC1B6-6101-4074-8CE5-0F304FF40B20}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+													</Class>
+												</Class>
+											</Class>
+										</Class>
+										<Class name="bool" field="IsDependencyReady" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+										<Class name="bool" field="IsRuntimeActive" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+									</Class>
+									<Class name="AZ::Entity" field="element" version="2" type="{75651658-8663-478D-9090-2432DFCAFA44}">
+										<Class name="EntityId" field="Id" version="1" type="{6383F1D3-BB27-4E6B-A49A-6409B2059EAA}">
+											<Class name="AZ::u64" field="id" value="19594107410430" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+										</Class>
+										<Class name="AZStd::string" field="Name" value="srcEndpoint=(Set Variable: Out), destEndpoint=(If: In)" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+										<Class name="AZStd::vector" field="Components" type="{13D58FF9-1088-5C69-9A1F-C2A144B57B78}">
+											<Class name="Connection" field="element" type="{64CA5016-E803-4AC4-9A36-BDA2C890C6EB}">
+												<Class name="AZ::Component" field="BaseClass1" type="{EDFCB2CF-F75D-43BE-B26B-F35821B29247}">
+													<Class name="AZ::u64" field="Id" value="10191201031994362881" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+												</Class>
+												<Class name="Endpoint" field="sourceEndpoint" version="1" type="{91D4ADAC-56FE-4D82-B9AF-6975D21435C8}">
+													<Class name="EntityId" field="nodeId" version="1" type="{6383F1D3-BB27-4E6B-A49A-6409B2059EAA}">
+														<Class name="AZ::u64" field="id" value="19521092966398" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+													</Class>
+													<Class name="SlotId" field="slotId" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+														<Class name="AZ::Uuid" field="m_id" value="{8932E5F1-F169-4E28-81D2-742100A61880}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+													</Class>
+												</Class>
+												<Class name="Endpoint" field="targetEndpoint" version="1" type="{91D4ADAC-56FE-4D82-B9AF-6975D21435C8}">
+													<Class name="EntityId" field="nodeId" version="1" type="{6383F1D3-BB27-4E6B-A49A-6409B2059EAA}">
+														<Class name="AZ::u64" field="id" value="19525387933694" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+													</Class>
+													<Class name="SlotId" field="slotId" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+														<Class name="AZ::Uuid" field="m_id" value="{103D9D66-0727-4D9B-9764-C9A1D9407919}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+													</Class>
+												</Class>
+											</Class>
+										</Class>
+										<Class name="bool" field="IsDependencyReady" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+										<Class name="bool" field="IsRuntimeActive" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+									</Class>
+								</Class>
+								<Class name="AZStd::unordered_map" field="m_dependentAssets" type="{1BC78FA9-1D82-5F17-BD28-C35D1F4FA737}"/>
+								<Class name="AZStd::vector" field="m_scriptEventAssets" type="{479100D9-6931-5E23-8494-5A28EF2FCD8A}"/>
+							</Class>
+							<Class name="unsigned char" field="executionMode" value="0" type="{72B9409A-7D1A-4831-9CFE-FCB3FADD3426}"/>
+							<Class name="AZ::Uuid" field="m_assetType" value="{3E2AC8CD-713F-453E-967F-29517F331784}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+							<Class name="bool" field="isFunctionGraph" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+							<Class name="SlotId" field="versionData" version="2" type="{14C629F6-467B-46FE-8B63-48FDFCA42175}">
+								<Class name="AZ::Uuid" field="m_id" value="{01000000-0100-0000-0000-000040B9EC2E}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+							</Class>
+						</Class>
+						<Class name="unsigned int" field="m_variableCounter" value="2" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+						<Class name="bool" field="m_saveFormatConverted" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+						<Class name="AZStd::unordered_map" field="GraphCanvasData" type="{0005D26C-B35A-5C30-B60C-5716482946CB}">
+							<Class name="AZStd::pair" field="element" type="{22EBF919-A826-58E5-8EF6-15CA70D620BB}">
+								<Class name="EntityId" field="value1" version="1" type="{6383F1D3-BB27-4E6B-A49A-6409B2059EAA}">
+									<Class name="AZ::u64" field="id" value="19538272835582" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+								</Class>
+								<Class name="EntitySaveDataContainer" field="value2" version="2" type="{DCCDA882-AF72-49C3-9AAD-BA601322BFBC}">
+									<Class name="AZStd::unordered_map" field="ComponentData" type="{318313BB-1036-5630-AFC4-FCBD54818E6D}">
+										<Class name="AZStd::pair" field="element" type="{CE78FEBD-1B9D-5A3E-9B95-BD8DD8CCCD4B}">
+											<Class name="AZ::Uuid" field="value1" value="{24CB38BB-1705-4EC5-8F63-B574571B4DCD}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+											<Class name="NodeSaveData" field="value2" version="1" type="{24CB38BB-1705-4EC5-8F63-B574571B4DCD}">
+												<Class name="bool" field="HideUnusedSlots" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+											</Class>
+										</Class>
+										<Class name="AZStd::pair" field="element" type="{CE78FEBD-1B9D-5A3E-9B95-BD8DD8CCCD4B}">
+											<Class name="AZ::Uuid" field="value1" value="{7CC444B1-F9B3-41B5-841B-0C4F2179F111}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+											<Class name="GeometrySaveData" field="value2" version="1" type="{7CC444B1-F9B3-41B5-841B-0C4F2179F111}">
+												<Class name="Vector2" field="Position" value="420.0000000 -680.0000000" type="{3D80F623-C85C-4741-90D0-E4E66164E6BF}"/>
+											</Class>
+										</Class>
+										<Class name="AZStd::pair" field="element" type="{CE78FEBD-1B9D-5A3E-9B95-BD8DD8CCCD4B}">
+											<Class name="AZ::Uuid" field="value1" value="{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+											<Class name="StylingComponentSaveData" field="value2" version="1" type="{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}">
+												<Class name="ComponentSaveData" field="BaseClass1" version="1" type="{359ACEC7-D0FA-4FC0-8B59-3755BB1A9836}"/>
+												<Class name="AZStd::string" field="SubStyle" value=".getVariable" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+											</Class>
+										</Class>
+										<Class name="AZStd::pair" field="element" type="{CE78FEBD-1B9D-5A3E-9B95-BD8DD8CCCD4B}">
+											<Class name="AZ::Uuid" field="value1" value="{328FF15C-C302-458F-A43D-E1794DE0904E}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+											<Class name="GeneralNodeTitleComponentSaveData" field="value2" version="1" type="{328FF15C-C302-458F-A43D-E1794DE0904E}">
+												<Class name="ComponentSaveData" field="BaseClass1" version="1" type="{359ACEC7-D0FA-4FC0-8B59-3755BB1A9836}"/>
+												<Class name="AZStd::string" field="PaletteOverride" value="GetVariableNodeTitlePalette" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+											</Class>
+										</Class>
+										<Class name="AZStd::pair" field="element" type="{CE78FEBD-1B9D-5A3E-9B95-BD8DD8CCCD4B}">
+											<Class name="AZ::Uuid" field="value1" value="{B1F49A35-8408-40DA-B79E-F1E3B64322CE}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+											<Class name="PersistentIdComponentSaveData" field="value2" version="1" type="{B1F49A35-8408-40DA-B79E-F1E3B64322CE}">
+												<Class name="ComponentSaveData" field="BaseClass1" version="1" type="{359ACEC7-D0FA-4FC0-8B59-3755BB1A9836}"/>
+												<Class name="AZ::Uuid" field="PersistentId" value="{6482B5A8-7C85-452F-B354-932DE127B68D}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+											</Class>
+										</Class>
+									</Class>
+								</Class>
+							</Class>
+							<Class name="AZStd::pair" field="element" type="{22EBF919-A826-58E5-8EF6-15CA70D620BB}">
+								<Class name="EntityId" field="value1" version="1" type="{6383F1D3-BB27-4E6B-A49A-6409B2059EAA}">
+									<Class name="AZ::u64" field="id" value="19521092966398" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+								</Class>
+								<Class name="EntitySaveDataContainer" field="value2" version="2" type="{DCCDA882-AF72-49C3-9AAD-BA601322BFBC}">
+									<Class name="AZStd::unordered_map" field="ComponentData" type="{318313BB-1036-5630-AFC4-FCBD54818E6D}">
+										<Class name="AZStd::pair" field="element" type="{CE78FEBD-1B9D-5A3E-9B95-BD8DD8CCCD4B}">
+											<Class name="AZ::Uuid" field="value1" value="{24CB38BB-1705-4EC5-8F63-B574571B4DCD}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+											<Class name="NodeSaveData" field="value2" version="1" type="{24CB38BB-1705-4EC5-8F63-B574571B4DCD}">
+												<Class name="bool" field="HideUnusedSlots" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+											</Class>
+										</Class>
+										<Class name="AZStd::pair" field="element" type="{CE78FEBD-1B9D-5A3E-9B95-BD8DD8CCCD4B}">
+											<Class name="AZ::Uuid" field="value1" value="{7CC444B1-F9B3-41B5-841B-0C4F2179F111}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+											<Class name="GeometrySaveData" field="value2" version="1" type="{7CC444B1-F9B3-41B5-841B-0C4F2179F111}">
+												<Class name="Vector2" field="Position" value="1260.0000000 -660.0000000" type="{3D80F623-C85C-4741-90D0-E4E66164E6BF}"/>
+											</Class>
+										</Class>
+										<Class name="AZStd::pair" field="element" type="{CE78FEBD-1B9D-5A3E-9B95-BD8DD8CCCD4B}">
+											<Class name="AZ::Uuid" field="value1" value="{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+											<Class name="StylingComponentSaveData" field="value2" version="1" type="{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}">
+												<Class name="ComponentSaveData" field="BaseClass1" version="1" type="{359ACEC7-D0FA-4FC0-8B59-3755BB1A9836}"/>
+												<Class name="AZStd::string" field="SubStyle" value=".setVariable" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+											</Class>
+										</Class>
+										<Class name="AZStd::pair" field="element" type="{CE78FEBD-1B9D-5A3E-9B95-BD8DD8CCCD4B}">
+											<Class name="AZ::Uuid" field="value1" value="{328FF15C-C302-458F-A43D-E1794DE0904E}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+											<Class name="GeneralNodeTitleComponentSaveData" field="value2" version="1" type="{328FF15C-C302-458F-A43D-E1794DE0904E}">
+												<Class name="ComponentSaveData" field="BaseClass1" version="1" type="{359ACEC7-D0FA-4FC0-8B59-3755BB1A9836}"/>
+												<Class name="AZStd::string" field="PaletteOverride" value="SetVariableNodeTitlePalette" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+											</Class>
+										</Class>
+										<Class name="AZStd::pair" field="element" type="{CE78FEBD-1B9D-5A3E-9B95-BD8DD8CCCD4B}">
+											<Class name="AZ::Uuid" field="value1" value="{B1F49A35-8408-40DA-B79E-F1E3B64322CE}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+											<Class name="PersistentIdComponentSaveData" field="value2" version="1" type="{B1F49A35-8408-40DA-B79E-F1E3B64322CE}">
+												<Class name="ComponentSaveData" field="BaseClass1" version="1" type="{359ACEC7-D0FA-4FC0-8B59-3755BB1A9836}"/>
+												<Class name="AZ::Uuid" field="PersistentId" value="{5465E9FB-C18C-4FE0-BA3A-8123DF9F7931}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+											</Class>
+										</Class>
+									</Class>
+								</Class>
+							</Class>
+							<Class name="AZStd::pair" field="element" type="{22EBF919-A826-58E5-8EF6-15CA70D620BB}">
+								<Class name="EntityId" field="value1" version="1" type="{6383F1D3-BB27-4E6B-A49A-6409B2059EAA}">
+									<Class name="AZ::u64" field="id" value="19525387933694" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+								</Class>
+								<Class name="EntitySaveDataContainer" field="value2" version="2" type="{DCCDA882-AF72-49C3-9AAD-BA601322BFBC}">
+									<Class name="AZStd::unordered_map" field="ComponentData" type="{318313BB-1036-5630-AFC4-FCBD54818E6D}">
+										<Class name="AZStd::pair" field="element" type="{CE78FEBD-1B9D-5A3E-9B95-BD8DD8CCCD4B}">
+											<Class name="AZ::Uuid" field="value1" value="{24CB38BB-1705-4EC5-8F63-B574571B4DCD}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+											<Class name="NodeSaveData" field="value2" version="1" type="{24CB38BB-1705-4EC5-8F63-B574571B4DCD}">
+												<Class name="bool" field="HideUnusedSlots" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+											</Class>
+										</Class>
+										<Class name="AZStd::pair" field="element" type="{CE78FEBD-1B9D-5A3E-9B95-BD8DD8CCCD4B}">
+											<Class name="AZ::Uuid" field="value1" value="{7CC444B1-F9B3-41B5-841B-0C4F2179F111}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+											<Class name="GeometrySaveData" field="value2" version="1" type="{7CC444B1-F9B3-41B5-841B-0C4F2179F111}">
+												<Class name="Vector2" field="Position" value="1560.0000000 -420.0000000" type="{3D80F623-C85C-4741-90D0-E4E66164E6BF}"/>
+											</Class>
+										</Class>
+										<Class name="AZStd::pair" field="element" type="{CE78FEBD-1B9D-5A3E-9B95-BD8DD8CCCD4B}">
+											<Class name="AZ::Uuid" field="value1" value="{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+											<Class name="StylingComponentSaveData" field="value2" version="1" type="{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}">
+												<Class name="ComponentSaveData" field="BaseClass1" version="1" type="{359ACEC7-D0FA-4FC0-8B59-3755BB1A9836}"/>
+												<Class name="AZStd::string" field="SubStyle" value=".logic" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+											</Class>
+										</Class>
+										<Class name="AZStd::pair" field="element" type="{CE78FEBD-1B9D-5A3E-9B95-BD8DD8CCCD4B}">
+											<Class name="AZ::Uuid" field="value1" value="{328FF15C-C302-458F-A43D-E1794DE0904E}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+											<Class name="GeneralNodeTitleComponentSaveData" field="value2" version="1" type="{328FF15C-C302-458F-A43D-E1794DE0904E}">
+												<Class name="ComponentSaveData" field="BaseClass1" version="1" type="{359ACEC7-D0FA-4FC0-8B59-3755BB1A9836}"/>
+												<Class name="AZStd::string" field="PaletteOverride" value="LogicNodeTitlePalette" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+											</Class>
+										</Class>
+										<Class name="AZStd::pair" field="element" type="{CE78FEBD-1B9D-5A3E-9B95-BD8DD8CCCD4B}">
+											<Class name="AZ::Uuid" field="value1" value="{B1F49A35-8408-40DA-B79E-F1E3B64322CE}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+											<Class name="PersistentIdComponentSaveData" field="value2" version="1" type="{B1F49A35-8408-40DA-B79E-F1E3B64322CE}">
+												<Class name="ComponentSaveData" field="BaseClass1" version="1" type="{359ACEC7-D0FA-4FC0-8B59-3755BB1A9836}"/>
+												<Class name="AZ::Uuid" field="PersistentId" value="{BB65E347-7AD4-4480-8BEA-6B4B998A0CA5}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+											</Class>
+										</Class>
+									</Class>
+								</Class>
+							</Class>
+							<Class name="AZStd::pair" field="element" type="{22EBF919-A826-58E5-8EF6-15CA70D620BB}">
+								<Class name="EntityId" field="value1" version="1" type="{6383F1D3-BB27-4E6B-A49A-6409B2059EAA}">
+									<Class name="AZ::u64" field="id" value="19533977868286" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+								</Class>
+								<Class name="EntitySaveDataContainer" field="value2" version="2" type="{DCCDA882-AF72-49C3-9AAD-BA601322BFBC}">
+									<Class name="AZStd::unordered_map" field="ComponentData" type="{318313BB-1036-5630-AFC4-FCBD54818E6D}">
+										<Class name="AZStd::pair" field="element" type="{CE78FEBD-1B9D-5A3E-9B95-BD8DD8CCCD4B}">
+											<Class name="AZ::Uuid" field="value1" value="{24CB38BB-1705-4EC5-8F63-B574571B4DCD}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+											<Class name="NodeSaveData" field="value2" version="1" type="{24CB38BB-1705-4EC5-8F63-B574571B4DCD}">
+												<Class name="bool" field="HideUnusedSlots" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+											</Class>
+										</Class>
+										<Class name="AZStd::pair" field="element" type="{CE78FEBD-1B9D-5A3E-9B95-BD8DD8CCCD4B}">
+											<Class name="AZ::Uuid" field="value1" value="{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+											<Class name="StylingComponentSaveData" field="value2" version="1" type="{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}">
+												<Class name="ComponentSaveData" field="BaseClass1" version="1" type="{359ACEC7-D0FA-4FC0-8B59-3755BB1A9836}"/>
+												<Class name="AZStd::string" field="SubStyle" value="" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+											</Class>
+										</Class>
+										<Class name="AZStd::pair" field="element" type="{CE78FEBD-1B9D-5A3E-9B95-BD8DD8CCCD4B}">
+											<Class name="AZ::Uuid" field="value1" value="{B1F49A35-8408-40DA-B79E-F1E3B64322CE}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+											<Class name="PersistentIdComponentSaveData" field="value2" version="1" type="{B1F49A35-8408-40DA-B79E-F1E3B64322CE}">
+												<Class name="ComponentSaveData" field="BaseClass1" version="1" type="{359ACEC7-D0FA-4FC0-8B59-3755BB1A9836}"/>
+												<Class name="AZ::Uuid" field="PersistentId" value="{4975C92F-7355-4F75-8029-593928DF928B}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+											</Class>
+										</Class>
+										<Class name="AZStd::pair" field="element" type="{CE78FEBD-1B9D-5A3E-9B95-BD8DD8CCCD4B}">
+											<Class name="AZ::Uuid" field="value1" value="{9E81C95F-89C0-4476-8E82-63CCC4E52E04}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+											<Class name="EBusHandlerNodeDescriptorSaveData" field="value2" version="2" type="{9E81C95F-89C0-4476-8E82-63CCC4E52E04}">
+												<Class name="ComponentSaveData" field="BaseClass1" version="1" type="{359ACEC7-D0FA-4FC0-8B59-3755BB1A9836}"/>
+												<Class name="bool" field="DisplayConnections" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+												<Class name="AZStd::vector" field="EventIds" type="{287CEE87-6FF3-52FC-9D32-38255E2C7FE9}">
+													<Class name="Crc32" field="element" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+														<Class name="unsigned int" field="Value" value="1502188240" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+													</Class>
+												</Class>
+											</Class>
+										</Class>
+										<Class name="AZStd::pair" field="element" type="{CE78FEBD-1B9D-5A3E-9B95-BD8DD8CCCD4B}">
+											<Class name="AZ::Uuid" field="value1" value="{7CC444B1-F9B3-41B5-841B-0C4F2179F111}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+											<Class name="GeometrySaveData" field="value2" version="1" type="{7CC444B1-F9B3-41B5-841B-0C4F2179F111}">
+												<Class name="Vector2" field="Position" value="-540.0000000 -460.0000000" type="{3D80F623-C85C-4741-90D0-E4E66164E6BF}"/>
+											</Class>
+										</Class>
+									</Class>
+								</Class>
+							</Class>
+							<Class name="AZStd::pair" field="element" type="{22EBF919-A826-58E5-8EF6-15CA70D620BB}">
+								<Class name="EntityId" field="value1" version="1" type="{6383F1D3-BB27-4E6B-A49A-6409B2059EAA}">
+									<Class name="AZ::u64" field="id" value="19542567802878" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+								</Class>
+								<Class name="EntitySaveDataContainer" field="value2" version="2" type="{DCCDA882-AF72-49C3-9AAD-BA601322BFBC}">
+									<Class name="AZStd::unordered_map" field="ComponentData" type="{318313BB-1036-5630-AFC4-FCBD54818E6D}">
+										<Class name="AZStd::pair" field="element" type="{CE78FEBD-1B9D-5A3E-9B95-BD8DD8CCCD4B}">
+											<Class name="AZ::Uuid" field="value1" value="{24CB38BB-1705-4EC5-8F63-B574571B4DCD}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+											<Class name="NodeSaveData" field="value2" version="1" type="{24CB38BB-1705-4EC5-8F63-B574571B4DCD}">
+												<Class name="bool" field="HideUnusedSlots" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+											</Class>
+										</Class>
+										<Class name="AZStd::pair" field="element" type="{CE78FEBD-1B9D-5A3E-9B95-BD8DD8CCCD4B}">
+											<Class name="AZ::Uuid" field="value1" value="{7CC444B1-F9B3-41B5-841B-0C4F2179F111}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+											<Class name="GeometrySaveData" field="value2" version="1" type="{7CC444B1-F9B3-41B5-841B-0C4F2179F111}">
+												<Class name="Vector2" field="Position" value="960.0000000 -400.0000000" type="{3D80F623-C85C-4741-90D0-E4E66164E6BF}"/>
+											</Class>
+										</Class>
+										<Class name="AZStd::pair" field="element" type="{CE78FEBD-1B9D-5A3E-9B95-BD8DD8CCCD4B}">
+											<Class name="AZ::Uuid" field="value1" value="{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+											<Class name="StylingComponentSaveData" field="value2" version="1" type="{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}">
+												<Class name="ComponentSaveData" field="BaseClass1" version="1" type="{359ACEC7-D0FA-4FC0-8B59-3755BB1A9836}"/>
+												<Class name="AZStd::string" field="SubStyle" value=".math" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+											</Class>
+										</Class>
+										<Class name="AZStd::pair" field="element" type="{CE78FEBD-1B9D-5A3E-9B95-BD8DD8CCCD4B}">
+											<Class name="AZ::Uuid" field="value1" value="{328FF15C-C302-458F-A43D-E1794DE0904E}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+											<Class name="GeneralNodeTitleComponentSaveData" field="value2" version="1" type="{328FF15C-C302-458F-A43D-E1794DE0904E}">
+												<Class name="ComponentSaveData" field="BaseClass1" version="1" type="{359ACEC7-D0FA-4FC0-8B59-3755BB1A9836}"/>
+												<Class name="AZStd::string" field="PaletteOverride" value="MathNodeTitlePalette" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+											</Class>
+										</Class>
+										<Class name="AZStd::pair" field="element" type="{CE78FEBD-1B9D-5A3E-9B95-BD8DD8CCCD4B}">
+											<Class name="AZ::Uuid" field="value1" value="{B1F49A35-8408-40DA-B79E-F1E3B64322CE}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+											<Class name="PersistentIdComponentSaveData" field="value2" version="1" type="{B1F49A35-8408-40DA-B79E-F1E3B64322CE}">
+												<Class name="ComponentSaveData" field="BaseClass1" version="1" type="{359ACEC7-D0FA-4FC0-8B59-3755BB1A9836}"/>
+												<Class name="AZ::Uuid" field="PersistentId" value="{7BFE33AE-D781-4F12-B49D-95848D38F91C}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+											</Class>
+										</Class>
+									</Class>
+								</Class>
+							</Class>
+							<Class name="AZStd::pair" field="element" type="{22EBF919-A826-58E5-8EF6-15CA70D620BB}">
+								<Class name="EntityId" field="value1" version="1" type="{6383F1D3-BB27-4E6B-A49A-6409B2059EAA}">
+									<Class name="AZ::u64" field="id" value="19512503031806" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+								</Class>
+								<Class name="EntitySaveDataContainer" field="value2" version="2" type="{DCCDA882-AF72-49C3-9AAD-BA601322BFBC}">
+									<Class name="AZStd::unordered_map" field="ComponentData" type="{318313BB-1036-5630-AFC4-FCBD54818E6D}">
+										<Class name="AZStd::pair" field="element" type="{CE78FEBD-1B9D-5A3E-9B95-BD8DD8CCCD4B}">
+											<Class name="AZ::Uuid" field="value1" value="{5F84B500-8C45-40D1-8EFC-A5306B241444}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+											<Class name="SceneComponentSaveData" field="value2" version="3" type="{5F84B500-8C45-40D1-8EFC-A5306B241444}">
+												<Class name="AZStd::vector" field="Constructs" type="{60BF495A-9BEF-5429-836B-37ADEA39CEA0}"/>
+												<Class name="ViewParams" field="ViewParams" version="1" type="{D016BF86-DFBB-4AF0-AD26-27F6AB737740}">
+													<Class name="double" field="Scale" value="0.6542727" type="{110C4B14-11A8-4E9D-8638-5051013A56AC}"/>
+													<Class name="float" field="AnchorX" value="-768.7926025" type="{EA2C3E90-AFBE-44D4-A90D-FAAF79BAF93D}"/>
+													<Class name="float" field="AnchorY" value="-962.9012451" type="{EA2C3E90-AFBE-44D4-A90D-FAAF79BAF93D}"/>
+												</Class>
+												<Class name="unsigned int" field="BookmarkCounter" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+											</Class>
+										</Class>
+									</Class>
+								</Class>
+							</Class>
+							<Class name="AZStd::pair" field="element" type="{22EBF919-A826-58E5-8EF6-15CA70D620BB}">
+								<Class name="EntityId" field="value1" version="1" type="{6383F1D3-BB27-4E6B-A49A-6409B2059EAA}">
+									<Class name="AZ::u64" field="id" value="19546862770174" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+								</Class>
+								<Class name="EntitySaveDataContainer" field="value2" version="2" type="{DCCDA882-AF72-49C3-9AAD-BA601322BFBC}">
+									<Class name="AZStd::unordered_map" field="ComponentData" type="{318313BB-1036-5630-AFC4-FCBD54818E6D}">
+										<Class name="AZStd::pair" field="element" type="{CE78FEBD-1B9D-5A3E-9B95-BD8DD8CCCD4B}">
+											<Class name="AZ::Uuid" field="value1" value="{24CB38BB-1705-4EC5-8F63-B574571B4DCD}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+											<Class name="NodeSaveData" field="value2" version="1" type="{24CB38BB-1705-4EC5-8F63-B574571B4DCD}">
+												<Class name="bool" field="HideUnusedSlots" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+											</Class>
+										</Class>
+										<Class name="AZStd::pair" field="element" type="{CE78FEBD-1B9D-5A3E-9B95-BD8DD8CCCD4B}">
+											<Class name="AZ::Uuid" field="value1" value="{7CC444B1-F9B3-41B5-841B-0C4F2179F111}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+											<Class name="GeometrySaveData" field="value2" version="1" type="{7CC444B1-F9B3-41B5-841B-0C4F2179F111}">
+												<Class name="Vector2" field="Position" value="-140.0000000 -420.0000000" type="{3D80F623-C85C-4741-90D0-E4E66164E6BF}"/>
+											</Class>
+										</Class>
+										<Class name="AZStd::pair" field="element" type="{CE78FEBD-1B9D-5A3E-9B95-BD8DD8CCCD4B}">
+											<Class name="AZ::Uuid" field="value1" value="{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+											<Class name="StylingComponentSaveData" field="value2" version="1" type="{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}">
+												<Class name="ComponentSaveData" field="BaseClass1" version="1" type="{359ACEC7-D0FA-4FC0-8B59-3755BB1A9836}"/>
+												<Class name="AZStd::string" field="SubStyle" value=".method" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+											</Class>
+										</Class>
+										<Class name="AZStd::pair" field="element" type="{CE78FEBD-1B9D-5A3E-9B95-BD8DD8CCCD4B}">
+											<Class name="AZ::Uuid" field="value1" value="{328FF15C-C302-458F-A43D-E1794DE0904E}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+											<Class name="GeneralNodeTitleComponentSaveData" field="value2" version="1" type="{328FF15C-C302-458F-A43D-E1794DE0904E}">
+												<Class name="ComponentSaveData" field="BaseClass1" version="1" type="{359ACEC7-D0FA-4FC0-8B59-3755BB1A9836}"/>
+												<Class name="AZStd::string" field="PaletteOverride" value="MethodNodeTitlePalette" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+											</Class>
+										</Class>
+										<Class name="AZStd::pair" field="element" type="{CE78FEBD-1B9D-5A3E-9B95-BD8DD8CCCD4B}">
+											<Class name="AZ::Uuid" field="value1" value="{B1F49A35-8408-40DA-B79E-F1E3B64322CE}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+											<Class name="PersistentIdComponentSaveData" field="value2" version="1" type="{B1F49A35-8408-40DA-B79E-F1E3B64322CE}">
+												<Class name="ComponentSaveData" field="BaseClass1" version="1" type="{359ACEC7-D0FA-4FC0-8B59-3755BB1A9836}"/>
+												<Class name="AZ::Uuid" field="PersistentId" value="{4EDE4FF7-9D5B-4A89-99FD-587C8A1C7239}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+											</Class>
+										</Class>
+									</Class>
+								</Class>
+							</Class>
+							<Class name="AZStd::pair" field="element" type="{22EBF919-A826-58E5-8EF6-15CA70D620BB}">
+								<Class name="EntityId" field="value1" version="1" type="{6383F1D3-BB27-4E6B-A49A-6409B2059EAA}">
+									<Class name="AZ::u64" field="id" value="19516797999102" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+								</Class>
+								<Class name="EntitySaveDataContainer" field="value2" version="2" type="{DCCDA882-AF72-49C3-9AAD-BA601322BFBC}">
+									<Class name="AZStd::unordered_map" field="ComponentData" type="{318313BB-1036-5630-AFC4-FCBD54818E6D}">
+										<Class name="AZStd::pair" field="element" type="{CE78FEBD-1B9D-5A3E-9B95-BD8DD8CCCD4B}">
+											<Class name="AZ::Uuid" field="value1" value="{24CB38BB-1705-4EC5-8F63-B574571B4DCD}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+											<Class name="NodeSaveData" field="value2" version="1" type="{24CB38BB-1705-4EC5-8F63-B574571B4DCD}">
+												<Class name="bool" field="HideUnusedSlots" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+											</Class>
+										</Class>
+										<Class name="AZStd::pair" field="element" type="{CE78FEBD-1B9D-5A3E-9B95-BD8DD8CCCD4B}">
+											<Class name="AZ::Uuid" field="value1" value="{7CC444B1-F9B3-41B5-841B-0C4F2179F111}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+											<Class name="GeometrySaveData" field="value2" version="1" type="{7CC444B1-F9B3-41B5-841B-0C4F2179F111}">
+												<Class name="Vector2" field="Position" value="1920.0000000 -300.0000000" type="{3D80F623-C85C-4741-90D0-E4E66164E6BF}"/>
+											</Class>
+										</Class>
+										<Class name="AZStd::pair" field="element" type="{CE78FEBD-1B9D-5A3E-9B95-BD8DD8CCCD4B}">
+											<Class name="AZ::Uuid" field="value1" value="{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+											<Class name="StylingComponentSaveData" field="value2" version="1" type="{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}">
+												<Class name="ComponentSaveData" field="BaseClass1" version="1" type="{359ACEC7-D0FA-4FC0-8B59-3755BB1A9836}"/>
+												<Class name="AZStd::string" field="SubStyle" value=".string" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+											</Class>
+										</Class>
+										<Class name="AZStd::pair" field="element" type="{CE78FEBD-1B9D-5A3E-9B95-BD8DD8CCCD4B}">
+											<Class name="AZ::Uuid" field="value1" value="{328FF15C-C302-458F-A43D-E1794DE0904E}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+											<Class name="GeneralNodeTitleComponentSaveData" field="value2" version="1" type="{328FF15C-C302-458F-A43D-E1794DE0904E}">
+												<Class name="ComponentSaveData" field="BaseClass1" version="1" type="{359ACEC7-D0FA-4FC0-8B59-3755BB1A9836}"/>
+												<Class name="AZStd::string" field="PaletteOverride" value="StringNodeTitlePalette" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+											</Class>
+										</Class>
+										<Class name="AZStd::pair" field="element" type="{CE78FEBD-1B9D-5A3E-9B95-BD8DD8CCCD4B}">
+											<Class name="AZ::Uuid" field="value1" value="{B1F49A35-8408-40DA-B79E-F1E3B64322CE}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+											<Class name="PersistentIdComponentSaveData" field="value2" version="1" type="{B1F49A35-8408-40DA-B79E-F1E3B64322CE}">
+												<Class name="ComponentSaveData" field="BaseClass1" version="1" type="{359ACEC7-D0FA-4FC0-8B59-3755BB1A9836}"/>
+												<Class name="AZ::Uuid" field="PersistentId" value="{21020750-7349-4AEC-80C2-FA5FE7ED4650}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+											</Class>
+										</Class>
+									</Class>
+								</Class>
+							</Class>
+							<Class name="AZStd::pair" field="element" type="{22EBF919-A826-58E5-8EF6-15CA70D620BB}">
+								<Class name="EntityId" field="value1" version="1" type="{6383F1D3-BB27-4E6B-A49A-6409B2059EAA}">
+									<Class name="AZ::u64" field="id" value="19529682900990" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+								</Class>
+								<Class name="EntitySaveDataContainer" field="value2" version="2" type="{DCCDA882-AF72-49C3-9AAD-BA601322BFBC}">
+									<Class name="AZStd::unordered_map" field="ComponentData" type="{318313BB-1036-5630-AFC4-FCBD54818E6D}">
+										<Class name="AZStd::pair" field="element" type="{CE78FEBD-1B9D-5A3E-9B95-BD8DD8CCCD4B}">
+											<Class name="AZ::Uuid" field="value1" value="{24CB38BB-1705-4EC5-8F63-B574571B4DCD}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+											<Class name="NodeSaveData" field="value2" version="1" type="{24CB38BB-1705-4EC5-8F63-B574571B4DCD}">
+												<Class name="bool" field="HideUnusedSlots" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+											</Class>
+										</Class>
+										<Class name="AZStd::pair" field="element" type="{CE78FEBD-1B9D-5A3E-9B95-BD8DD8CCCD4B}">
+											<Class name="AZ::Uuid" field="value1" value="{7CC444B1-F9B3-41B5-841B-0C4F2179F111}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+											<Class name="GeometrySaveData" field="value2" version="1" type="{7CC444B1-F9B3-41B5-841B-0C4F2179F111}">
+												<Class name="Vector2" field="Position" value="1920.0000000 -520.0000000" type="{3D80F623-C85C-4741-90D0-E4E66164E6BF}"/>
+											</Class>
+										</Class>
+										<Class name="AZStd::pair" field="element" type="{CE78FEBD-1B9D-5A3E-9B95-BD8DD8CCCD4B}">
+											<Class name="AZ::Uuid" field="value1" value="{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+											<Class name="StylingComponentSaveData" field="value2" version="1" type="{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}">
+												<Class name="ComponentSaveData" field="BaseClass1" version="1" type="{359ACEC7-D0FA-4FC0-8B59-3755BB1A9836}"/>
+												<Class name="AZStd::string" field="SubStyle" value=".string" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+											</Class>
+										</Class>
+										<Class name="AZStd::pair" field="element" type="{CE78FEBD-1B9D-5A3E-9B95-BD8DD8CCCD4B}">
+											<Class name="AZ::Uuid" field="value1" value="{328FF15C-C302-458F-A43D-E1794DE0904E}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+											<Class name="GeneralNodeTitleComponentSaveData" field="value2" version="1" type="{328FF15C-C302-458F-A43D-E1794DE0904E}">
+												<Class name="ComponentSaveData" field="BaseClass1" version="1" type="{359ACEC7-D0FA-4FC0-8B59-3755BB1A9836}"/>
+												<Class name="AZStd::string" field="PaletteOverride" value="StringNodeTitlePalette" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+											</Class>
+										</Class>
+										<Class name="AZStd::pair" field="element" type="{CE78FEBD-1B9D-5A3E-9B95-BD8DD8CCCD4B}">
+											<Class name="AZ::Uuid" field="value1" value="{B1F49A35-8408-40DA-B79E-F1E3B64322CE}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+											<Class name="PersistentIdComponentSaveData" field="value2" version="1" type="{B1F49A35-8408-40DA-B79E-F1E3B64322CE}">
+												<Class name="ComponentSaveData" field="BaseClass1" version="1" type="{359ACEC7-D0FA-4FC0-8B59-3755BB1A9836}"/>
+												<Class name="AZ::Uuid" field="PersistentId" value="{FB98BB85-08EA-4170-9C45-9E33CACCDB7C}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+											</Class>
+										</Class>
+									</Class>
+								</Class>
+							</Class>
+						</Class>
+						<Class name="AZStd::unordered_map" field="CRCCacheMap" type="{2376BDB0-D7B6-586B-A603-42BE703EB2C9}"/>
+						<Class name="GraphStatisticsHelper" field="StatisticsHelper" version="1" type="{7D5B7A65-F749-493E-BA5C-6B8724791F03}">
+							<Class name="AZStd::unordered_map" field="InstanceCounter" type="{9EC84E0A-F296-5212-8B69-4DE48E695D61}">
+								<Class name="AZStd::pair" field="element" type="{0CE5EF6F-834D-519F-B2EC-C2763B8BB99C}">
+									<Class name="AZ::u64" field="value1" value="1321480185691753989" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+									<Class name="int" field="value2" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+								</Class>
+								<Class name="AZStd::pair" field="element" type="{0CE5EF6F-834D-519F-B2EC-C2763B8BB99C}">
+									<Class name="AZ::u64" field="value1" value="16367026981407785158" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+									<Class name="int" field="value2" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+								</Class>
+								<Class name="AZStd::pair" field="element" type="{0CE5EF6F-834D-519F-B2EC-C2763B8BB99C}">
+									<Class name="AZ::u64" field="value1" value="5842117451819972883" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+									<Class name="int" field="value2" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+								</Class>
+								<Class name="AZStd::pair" field="element" type="{0CE5EF6F-834D-519F-B2EC-C2763B8BB99C}">
+									<Class name="AZ::u64" field="value1" value="10684225535275896474" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+									<Class name="int" field="value2" value="2" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+								</Class>
+								<Class name="AZStd::pair" field="element" type="{0CE5EF6F-834D-519F-B2EC-C2763B8BB99C}">
+									<Class name="AZ::u64" field="value1" value="8452971738487658154" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+									<Class name="int" field="value2" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+								</Class>
+								<Class name="AZStd::pair" field="element" type="{0CE5EF6F-834D-519F-B2EC-C2763B8BB99C}">
+									<Class name="AZ::u64" field="value1" value="2870454694515211235" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+									<Class name="int" field="value2" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+								</Class>
+								<Class name="AZStd::pair" field="element" type="{0CE5EF6F-834D-519F-B2EC-C2763B8BB99C}">
+									<Class name="AZ::u64" field="value1" value="13774516556399355685" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+									<Class name="int" field="value2" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+								</Class>
+							</Class>
+						</Class>
+						<Class name="int" field="GraphCanvasSaveVersion" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+					</Class>
+					<Class name="EditorGraphVariableManagerComponent" field="element" type="{86B7CC96-9830-4BD1-85C3-0C0BD0BFBEE7}">
+						<Class name="GraphVariableManagerComponent" field="BaseClass1" version="3" type="{825DC28D-667D-43D0-AF11-73681351DD2F}">
+							<Class name="AZ::Component" field="BaseClass1" type="{EDFCB2CF-F75D-43BE-B26B-F35821B29247}">
+								<Class name="AZ::u64" field="Id" value="1392026963156125100" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
+							</Class>
+							<Class name="VariableData" field="m_variableData" version="3" type="{4F80659A-CD11-424E-BF04-AF02ABAC06B0}">
+								<Class name="AZStd::unordered_map" field="m_nameVariableMap" type="{6C3A5734-6C27-5033-B033-D5CAD11DE55A}">
+									<Class name="AZStd::pair" field="element" type="{E64D2110-EB38-5AE1-9B1D-3C06A10C7D6A}">
+										<Class name="VariableId" field="value1" type="{CA57A57B-E510-4C09-B952-1F43742166AE}">
+											<Class name="AZ::Uuid" field="m_id" value="{B66F614B-9534-4532-B257-C9F5469913C4}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+										</Class>
+										<Class name="GraphVariable" field="value2" version="4" type="{5BDC128B-8355-479C-8FA8-4BFFAB6915A8}">
+											<Class name="Datum" field="Datum" version="6" type="{8B836FC0-98A8-4A81-8651-35C7CA125451}">
+												<Class name="bool" field="m_isUntypedStorage" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+												<Class name="Type" field="m_type" version="2" type="{0EADF8F5-8AB8-42E9-9C50-F5C78255C817}">
+													<Class name="unsigned int" field="m_type" value="8" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+													<Class name="AZ::Uuid" field="m_azType" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+												</Class>
+												<Class name="int" field="m_originality" value="1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+												<Class name="any" field="m_datumStorage" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
+													<Class name="Vector3" field="m_data" value="512.0629883 528.5999146 35.4529915" type="{8379EB7D-01FA-4538-B64B-A6543B4BE73D}"/>
+												</Class>
+												<Class name="AZStd::string" field="m_datumLabel" value="prev_position" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+											</Class>
+											<Class name="Crc32" field="InputControlVisibility" type="{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}">
+												<Class name="unsigned int" field="Value" value="2755429085" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+											</Class>
+											<Class name="AZStd::string" field="ExposureCategory" value="" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+											<Class name="int" field="SortPriority" value="-1" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
+											<Class name="ReplicaNetworkProperties" field="ReplicaNetProps" version="1" type="{4F055551-DD75-4877-93CE-E80C844FC155}">
+												<Class name="bool" field="m_isSynchronized" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+											</Class>
+											<Class name="VariableId" field="VariableId" type="{CA57A57B-E510-4C09-B952-1F43742166AE}">
+												<Class name="AZ::Uuid" field="m_id" value="{B66F614B-9534-4532-B257-C9F5469913C4}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+											</Class>
+											<Class name="AZStd::string" field="VariableName" value="prev_position" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+											<Class name="unsigned char" field="Scope" value="0" type="{72B9409A-7D1A-4831-9CFE-FCB3FADD3426}"/>
+											<Class name="unsigned char" field="InitialValueSource" value="0" type="{72B9409A-7D1A-4831-9CFE-FCB3FADD3426}"/>
+										</Class>
+									</Class>
+								</Class>
+							</Class>
+							<Class name="AZStd::unordered_map" field="CopiedVariableRemapping" type="{723F81A5-0980-50C7-8B1F-BE646339362B}"/>
+						</Class>
+					</Class>
+				</Class>
+				<Class name="bool" field="IsDependencyReady" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+				<Class name="bool" field="IsRuntimeActive" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+			</Class>
+		</Class>
+	</Class>
+</ObjectStream>
+

+ 89 - 0
testing-guidance/workflow-tests/track-view/track-view-tests.md

@@ -0,0 +1,89 @@
+# Track View Workflow Tests
+
+Testing in this area should focus on the functionality of Track View. This is a general tool for the creation, editing and exporting of cutscenes.
+
+## General Docs
+
+* https://www.o3de.org/docs/user-guide/visualization/cinematics/track-view/
+
+###  Common Issues to Watch For
+
+Test guidance will sometimes note specific issues to watch for. The common issues below should be watched for through all testing, even if unrelated to the current workflow being tested.
+
+* The Camera parameter does not take effect.
+* Track View keyframe attributes cannot be modified.
+* Nodes cannot be added to the Sequence.
+* Unable to switch between multiple cameras.
+* Editor or Track View crashes.
+* Track View does not display the recorded Sequence.
+
+## Workflows
+
+### Area: Track View LKG Workflow
+
+**Project Requirements**
+
+* You've read through the Using the Track View Editor docs.
+* FFMpeg plugin installed.
+
+**Editor Platforms:**
+
+* Windows
+* Linux
+
+**Game Launcher Supported Platforms:**
+
+* Windows
+* Linux
+
+**Product:** Visible and responsive Track View editor.
+
+**Suggested Time Box:** 15 minutes per platform.
+
+| Workflow                                        | Requests           | Things to Watch For |
+|-------------------------------------------------|--------------------|---------------------|
+|Track View editor can be launched and configured| <ol><li>Open Track View editor by multiple ways including:<ul><li>Tools menu</li><li>Keyboard shortcut ( a shortcut can be assigned via Edit > Editor Settings > Keyboard Customization > Customize Keyboard)</li></ul></li><li>Perform resize, maximize, minimize undock, dock actions with Track View editor and its panes and drag them around the Editor.</li><li>Close and reopen the Track View editor.</li></ol> | <ul><li>Track View editor launch method does not work or does not launch quickly.</li><li>Track View editor not retaining configuration settings on close/relaunch.</li><li>Track View editor not retaining configuration settings on close/relaunch.</li><li>Track View panes not rendering, having rendering issues after being altered.</li><li>Not being able to resize, dock or drag panes borders.</li></ul>  |
+|A Sequence can be created and configured                | <ol><li>Add Sequence to the Track View by multiple ways including:<ul><li>Tools menu</li><li>Node shortcut</li></ul></li><li>Name the Sequence.</li><li>Edit Sequence properties by multiple ways including:<ul><li>Enabling autostart</li><li>Editing Sequences name</li><li>Changing start/end timings.</li><li>Changing display time from seconds to frames.</li><li>Selecting different Out of Range options.</li></ul></li><li>Delete and recreate the Sequence.</li></ol> | <ul><li>The Sequence name is left empty.</li><li>Created Sequences do not appear in the Sequence dropdown.</li><li>Sequence properties changes do not take place in the Track Editor and the Curve Editor.</li></ul>  |
+| Using basic Track View editor controls                  | <ol><li>Select the Shaderball entity in the viewport.</li><li>RMB on the Sequence and select "Add selected entity".</li><li>Add some keys to the position track.</li><li>Verify that Track View toolbars are enabled.</li></ol> | <ul><li>Entities do not add to the Sequence.</li><li>Keys cannot be edited with the Keys toolbar.</li></ul>  |
+| FFmpeg plugin can be added to the Editor	              | <ol><li>You can open Start menu and find Registry Editor</li><li>In the Computer\HKEY_CURRENT_USER\SOFTWARE\O3DE\O3DE\, create Keys Settings</li><li>In the Settings, right click to add string value FFMPEG_PLUGIN and modify it to point to the path of ffmpeg executable</li><li>Reopen the Editor > Track View > Tools > Render Output.</li></ol> | <ul><li>FFMpeg plugin is not available.</li><li>After reopening, the Render Output tool shows errors or is not functional.</li></ul>  |
+---
+
+### Area: Default Track View tools
+
+**Project Requirements**
+
+* Track View editor opened with a working Sequence.
+* Autostart is enabled for the Sequence.
+
+**Product:**  Responsive Track View editor with full functionality.
+
+**Suggested Time Box:**  60 minutes
+
+| Workflow                     | Requests           | Things to Watch For |
+|------------------------------|--------------------|---------------------|
+| Configure nodes in the Sequence                         | <ol><li>RMB on the Node Browser and add all nodes from the list.</li><li>Rename nodes.</li><li>Copy/paste nodes.</li><li>Expand/Collapse all nodes.</li><li>Delete nodes.</li></ol> | <ul><li>Nodes cannot be added to the Sequence.</li><li>Nodes are disabled.</li><li>Nodes cannot be expanded and collapsed.</li><li>Nodes cannot be copied and pasted.</li><li>Nodes cannot be deleted.</li></ul>  |
+| Configure entity nodes in the Track View	                         | <ol><li>Select Shaderball or create any other visible entity.</li><li>Enter the Track View.</li><li>RMB on the Node Browser and select "Add selected entity".</li><li>Enable Recording in the Play toolbar.</li><li>Move the entity in the Viewport to create a key in the Track editor.</li><li>In Track editor change position of the playhead.</li><li>Move the entity in the Viewport to create a second key in the Track editor.</li><li>Enter the Game Mode.</li></ol> | <ul><li>Some entities cannot be added to the Sequence.</li><li>Recording option cannot be enabled in the track editor's toolbar.</li><li>Keys are not added to the Track editor after the entity is moved in the Viewport.</li><li>Added keys have incorrect positions.</li><li>Key properties do not exist or cannot be edited.</li><li>The entity does not move in Game Mode.</li></ul>  |
+| Configure Track editor toolbars	                         | <ol><li>Complete the steps for the "Configure entity nodes in the Track View".</li><li>Select all Track editors toolbar options.</li><li>Edit the keys added to the tracks.</li></ol> | <ul><li>Track editor toolbar options do not affect the keys.</li><li>The Sequence cannot be played, paused, resumed and stopped.</li><li>The Sequence cannot be played in a loop.</li><li>The framerate cannot be changed.</li><li>The snap options for the keys do not work.</li><li>The playhead cannot be moved with the toolbar options.</li></ul>  |
+| Configure events in the Track View                         | <ol><li>RMB on the Sequence and select Edit Events.</li><li>Select the "Add" option and provide a valid event name.</li><li>In the Track editor add a key to the track.</li><li>In the key properties select the provided event name.</li><li>Open Script Canvas and create a simple script that triggers when the event is invoked.</li><li>Enter Game Mode.</li></ol> | <ul><li>Events cannot be created.</li><li>Key cannot be added to the tracker.</li><li>Events cannot be set in the keys properties.</li><li>Events are not triggered by the scripts.</li><li>Events are not triggered at the correct time.</li><li>Cannot create multiple events.</li><li>Events cannot be triggered one after another.</li></ul>  |
+| Configure Curve editor	                         | <ol><li>Complete the steps for the "Configure entity nodes in the Track View".</li><li>Add 5 more keys to the tracker.</li><li>Select the component in the Node Browser.</li><li>Go to Curve editor.</li><li>Select any key in the Curve editor.</li><li>Move the selected key and observe changes on the Viewport.</li></ol> | <ul><li>Keys cannot be selected in the Curve editor by clicking or dragging.</li><li>Keys cannot be moved around the Curve editor.</li><li>Changes made to the keys are not visible in the Viewport.</li><li>Multiple keys cannot be moved at once.</li><li>Keys cannot be added/removed by double-clicking the line.</li></ul>  |
+| Configure Curve editor toolbar	                         | <ol><li>Select one of the keys in the Curve editor.</li><li>Select each of the toolbar options, then move the key and the tangents.</li></ol> | <ul><li>The toolbar options cannot be selected.</li><li>Tangents and keys do not react differently after another toolbar option is selected.</li><li>Changes made in the Curve editor are not reflected in the running Sequence.</li></ul>  |
+---
+	
+### Area: The Renderer Output tests
+
+**Project Requirements**
+
+* Track View editor opened with a working Sequence.
+* Autostart is enabled for the Sequence.
+* The FFmpeg plugin has been enabled. 
+
+**Product:**  Responsive Renderer Output with full functionality.
+
+**Suggested Time Box:**  60 minutes
+
+| Workflow                     | Requests           | Things to Watch For |
+|------------------------------|--------------------|---------------------|
+| Basic functionality of the Renderer Output                         | <ol><li>Complete the steps for the "Configure entity nodes in the Track View".</li><li>Add Director node to the Sequence.</li><li>Open the Renderer Output.</li><li>Set destination folder for the output.</li><li>Add Batch for the Director node.</li><li>Start the output generation.</li></ol> | <ul><li>The Renderer Output tool does not open.</li><li>The destination folder cannot be set.</li><li>A batch Director cannot be added.</li><li>Frame files are not generated inside the selected directory.</li></ul>  |
+| Configuration of the Renderer Output                         | <ol><li>Complete the steps for the "Basic functionality of the Renderer Output".</li><li>Change the Input settings.</li><li>Change the resolution outputs.</li><li>Change FPS options.</li><li>Change capture options.</li><li>Save Batch settings.</li><li>Change the Sequence and load the previous Batch.</li></ol> | <ul><li>Input settings cannot be changed.</li><li>Output settings cannot be changed.</li><li>An mp4 file cannot be created as an output.</li><li>Batch cannot be set, saved and loaded.</li></ul>  |
+---
+

+ 50 - 0
testing-guidance/workflow-tests/workflow-template.md

@@ -0,0 +1,50 @@
+# FEATURE Workflow Tests
+
+Testing in this area should focus on the SOMETHING SOMETHING.
+
+## General Docs
+* [Some Docs](https://www.o3de.org/docs/)
+
+## Common Issues to Watch For
+
+Test guidance will sometimes note specific issues to watch for. The common issues below should be watched for through all testing, even if unrelated to the current workflow being tested.
+- Some common issue
+
+## Workflows
+
+### Area: SOME AREA WORKFLOW
+
+**Project Requirements**
+* You've read through the DOCS docs.
+* Ability to deploy sample to Mobile device for mobile sample
+
+**Workflow Docs**
+* [Some Workflow Specific Docs](https://www.o3de.org/docs/)
+
+**Editor Platforms:**
+* Windows
+* Linux
+
+**Game Launcher Supported Platforms:**
+* Windows
+* Linux
+* Mobile
+
+**Product:** 
+
+**Suggested Time Box:** 15 minutes per platform.
+
+| Workflow                     | Requests           | Things to Watch For |
+|------------------------------|--------------------|---------------------|
+| ****                         | <ol><li></li></ol> | <ul><li></li></ul>  |
+| ****                         | <ol><li></li></ol> | <ul><li></li></ul>  |
+---
+
+
+## Additional Coverage: New Features, Feature Improvements, Areas of Concern for Current LKG
+This section should change for each LKG cycle to target new features, feature area improvements, or an area that has been presenting issues and can use additional coverage in the LKG cycle.
+
+Execute the following Workflow Docs:
+
+
+