brdb 0.10.0

A library for reading and writing Brickadia's World files.
Documentation
// Autogenerated from a zoo save:
//   cargo run --example extract_components -- <zoo.brdb> src/assets/component_catalog.rs
// Do not edit by hand.

/// Per-component catalog entry: the full component type name, its host
/// brick asset(s), and its wire input/output port names. Extracted from a
/// fully-placed, fully-wired "zoo" save (mirrors brs-js's COMPONENTS).
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct ComponentInfo {
    /// e.g. "BrickComponentType_WireGraph_Exec_Branch".
    pub name: &'static str,
    /// Host brick asset name(s) that carry this component.
    pub bricks: &'static [&'static str],
    /// Wire input port names.
    pub inputs: &'static [&'static str],
    /// Wire output port names.
    pub outputs: &'static [&'static str],
}

impl ComponentInfo {
    /// The primary host brick asset (first, if any).
    pub const fn brick(&self) -> Option<&'static str> {
        self.bricks.first().copied()
    }
}

/// Every component present in the zoo, sorted by `name` (binary-searchable).
pub static COMPONENTS: &[ComponentInfo] = &[
    ComponentInfo { name: "BrickComponentType_AerodynamicSurface", bricks: &[], inputs: &["AerodynamicDirection", "Control_DriveAndSteer", "Deflection", "DragCoefficient", "ForceApplication", "LiftCoefficient", "LiftMultiplier", "MaxDeflection", "Role", "StallAngle", "bDiscoverable", "bEnabled"], outputs: &[] },
    ComponentInfo { name: "BrickComponentType_Clock", bricks: &["B_1x1_Gate_Clock"], inputs: &["IntervalSeconds", "bEnabled"], outputs: &["Pulse"] },
    ComponentInfo { name: "BrickComponentType_ExplosionSpawner", bricks: &[], inputs: &["DamageMultiplier", "Explode", "Instigator", "ProjectileType", "ScaleMultiplier", "SpawnOffset", "SpawnOffset.X", "SpawnOffset.Y", "SpawnOffset.Z"], outputs: &[] },
    ComponentInfo { name: "BrickComponentType_Internal_AerodynamicSurface", bricks: &["PB_AerodynamicSurface"], inputs: &["Control_DriveAndSteer", "Deflection", "DragCoefficient", "ForceApplication", "LiftCoefficient", "LiftMultiplier", "MaxDeflection", "Role", "StallAngle", "bDiscoverable", "bEnabled"], outputs: &[] },
    ComponentInfo { name: "BrickComponentType_Internal_AerodynamicSurfaceVertical", bricks: &["PB_AerodynamicSurfaceVertical"], inputs: &["Control_DriveAndSteer", "Deflection", "DragCoefficient", "ForceApplication", "LiftCoefficient", "LiftMultiplier", "MaxDeflection", "Role", "StallAngle", "bDiscoverable", "bEnabled"], outputs: &[] },
    ComponentInfo { name: "BrickComponentType_Internal_CharacterZoneEvent_Entered", bricks: &["B_1x1_Gate_Internal_CharacterZoneEvent_Entered"], inputs: &["TagFilter", "Zone", "bCollisionEnabled_Player", "bCollisionEnabled_Player1", "bCollisionEnabled_Player2", "bCollisionEnabled_Player3"], outputs: &["Character", "Exec"] },
    ComponentInfo { name: "BrickComponentType_Internal_CharacterZoneEvent_Left", bricks: &["B_1x1_Gate_Internal_CharacterZoneEvent_Left"], inputs: &["TagFilter", "Zone", "bCollisionEnabled_Player", "bCollisionEnabled_Player1", "bCollisionEnabled_Player2", "bCollisionEnabled_Player3"], outputs: &["Character", "Exec"] },
    ComponentInfo { name: "BrickComponentType_Internal_EntityZoneEvent_Entered", bricks: &["B_1x1_Gate_Internal_EntityZoneEvent_Entered"], inputs: &["TagFilter", "Zone"], outputs: &["Entity", "Exec"] },
    ComponentInfo { name: "BrickComponentType_Internal_EntityZoneEvent_Left", bricks: &["B_1x1_Gate_Internal_EntityZoneEvent_Left"], inputs: &["TagFilter", "Zone"], outputs: &["Entity", "Exec"] },
    ComponentInfo { name: "BrickComponentType_Internal_MicrochipInput", bricks: &["B_1x1_Gate_MicrochipInput"], inputs: &["RER_Input"], outputs: &["RER_Output"] },
    ComponentInfo { name: "BrickComponentType_Internal_MicrochipOutput", bricks: &["B_1x1_Gate_MicrochipOutput"], inputs: &["RER_Input"], outputs: &["RER_Output"] },
    ComponentInfo { name: "BrickComponentType_Internal_ProjectileZoneEvent_Entered", bricks: &["B_1x1_Gate_Internal_ProjectileZoneEvent_Entered"], inputs: &["Zone"], outputs: &["Character", "Exec", "Projectile", "Weapon", "WeaponName"] },
    ComponentInfo { name: "BrickComponentType_Internal_ProjectileZoneEvent_Left", bricks: &["B_1x1_Gate_Internal_ProjectileZoneEvent_Left"], inputs: &["Zone"], outputs: &["Character", "Exec", "Projectile", "Weapon", "WeaponName"] },
    ComponentInfo { name: "BrickComponentType_Internal_ReadBrickGrid", bricks: &["B_1x1_Gate_Internal_ReadBrickGrid"], inputs: &[], outputs: &["BrickGrid"] },
    ComponentInfo { name: "BrickComponentType_Internal_TeleportDestination", bricks: &["B_DestinationPoint"], inputs: &[], outputs: &["ThisDestination"] },
    ComponentInfo { name: "BrickComponentType_Internal_ZoneEvent_BrickChanged", bricks: &["B_1x1_Gate_Internal_ZoneEvent_BrickChanged"], inputs: &["Zone"], outputs: &["Exec"] },
    ComponentInfo { name: "BrickComponentType_Internal_ZoneEvent_BrickRemoved", bricks: &["B_1x1_Gate_Internal_ZoneEvent_BrickRemoved"], inputs: &["Zone"], outputs: &["Exec"] },
    ComponentInfo { name: "BrickComponentType_PrefabSpawn", bricks: &["B_Spawn_Point_Prefab"], inputs: &["RespawnTime", "SpawnOffset", "SpawnOffset.X", "SpawnOffset.Y", "SpawnOffset.Z", "SpawnOffsetRotation", "SpawnOffsetRotation.Pitch", "SpawnOffsetRotation.Roll", "SpawnOffsetRotation.Yaw", "SpawnVelocity", "SpawnVelocity.X", "SpawnVelocity.Y", "SpawnVelocity.Z", "bSpawnEnable"], outputs: &["SpawnedEntity"] },
    ComponentInfo { name: "BrickComponentType_WireGraphPseudo_ArrayVar", bricks: &["B_1x1_Gate_Variable_Array"], inputs: &[], outputs: &["ArrayVarRef"] },
    ComponentInfo { name: "BrickComponentType_WireGraphPseudo_BufferSeconds", bricks: &["B_1x1_Gate_Pseudo_BufferSeconds"], inputs: &["Input", "SecondsToWait", "ZeroSecondsToWait"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraphPseudo_BufferTicks", bricks: &["B_1x1_Gate_Pseudo_BufferTicks"], inputs: &["Input", "TicksToWait", "ZeroTicksToWait"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraphPseudo_CustomEvent", bricks: &["B_1x1_Gate_Pseudo_CustomEvent"], inputs: &[], outputs: &["DataOut1", "DataOut2", "DataOut3", "DataOut4", "DataOut5", "DataOut6", "DataOut7", "DataOut8", "ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraphPseudo_CustomEvent_Global", bricks: &["B_1x1_Gate_Pseudo_CustomEvent_Global"], inputs: &[], outputs: &["DataOut1", "DataOut2", "DataOut3", "DataOut4", "DataOut5", "DataOut6", "DataOut7", "DataOut8", "ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraphPseudo_Dampen", bricks: &["B_1x1_Gate_Pseudo_Dampen"], inputs: &["SmoothTime", "Target"], outputs: &["Value"] },
    ComponentInfo { name: "BrickComponentType_WireGraphPseudo_MapVar", bricks: &["B_1x1_Gate_Variable_Map"], inputs: &[], outputs: &["MapVarRef"] },
    ComponentInfo { name: "BrickComponentType_WireGraphPseudo_QueueSeconds", bricks: &["B_1x1_Gate_Pseudo_QueueSeconds"], inputs: &["DataIn1", "DataIn2", "DataIn3", "DataIn4", "DataIn5", "DataIn6", "DataIn7", "DataIn8", "ExecIn", "SecondsToWait"], outputs: &["DataOut1", "DataOut2", "DataOut3", "DataOut4", "DataOut5", "DataOut6", "DataOut7", "DataOut8", "ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraphPseudo_QueueTicks", bricks: &["B_1x1_Gate_Pseudo_QueueTicks"], inputs: &["DataIn1", "DataIn2", "DataIn3", "DataIn4", "DataIn5", "DataIn6", "DataIn7", "DataIn8", "ExecIn", "TicksToWait"], outputs: &["DataOut1", "DataOut2", "DataOut3", "DataOut4", "DataOut5", "DataOut6", "DataOut7", "DataOut8", "ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraphPseudo_SendCustomEvent", bricks: &["B_1x1_Gate_Pseudo_SendCustomEvent"], inputs: &["DataIn1", "DataIn2", "DataIn3", "DataIn4", "DataIn5", "DataIn6", "DataIn7", "DataIn8", "ExecIn", "Target"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraphPseudo_SendCustomEvent_Global", bricks: &["B_1x1_Gate_Pseudo_SendCustomEvent_Global"], inputs: &["DataIn1", "DataIn2", "DataIn3", "DataIn4", "DataIn5", "DataIn6", "DataIn7", "DataIn8", "ExecIn", "Target"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraphPseudo_Timer", bricks: &["B_1x1_Gate_Pseudo_Timer"], inputs: &["Limit", "Pause", "Restart", "Resume"], outputs: &["Expired", "Time"] },
    ComponentInfo { name: "BrickComponentType_WireGraphPseudo_Tween", bricks: &["B_1x1_Gate_Pseudo_Tween"], inputs: &["Direction", "Duration", "Function", "Target"], outputs: &["Arrived", "Value"] },
    ComponentInfo { name: "BrickComponentType_WireGraphPseudo_Var", bricks: &["B_1x1_Gate_Variable"], inputs: &[], outputs: &["Value", "VarRef"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_AudioReference", bricks: &["B_1x1_Gate_AudioReference"], inputs: &[], outputs: &["Value"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_BrickAssetReference", bricks: &["B_1x1_Gate_BrickAssetReference"], inputs: &[], outputs: &["Value"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_DeltaTime", bricks: &["B_1x1_Gate_DeltaTime"], inputs: &[], outputs: &["DeltaTime"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_EntityTypeReference", bricks: &["B_1x1_Gate_EntityTypeReference"], inputs: &[], outputs: &["Value"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_ArrayVar_Append", bricks: &["B_1x1_Gate_Exec_ArrayVar_Append"], inputs: &["ArrayVarRef", "Exec", "SourceRef"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_ArrayVar_Average", bricks: &["B_1x1_Gate_Exec_ArrayVar_Average"], inputs: &["ArrayVarRef", "Exec"], outputs: &["ExecOut", "Value", "bIsEmpty"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_ArrayVar_Clear", bricks: &["B_1x1_Gate_Exec_ArrayVar_Clear"], inputs: &["ArrayVarRef", "Exec"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_ArrayVar_CopyFrom", bricks: &["B_1x1_Gate_Exec_ArrayVar_CopyFrom"], inputs: &["ArrayVarRef", "Exec", "SourceRef"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_ArrayVar_Fill", bricks: &["B_1x1_Gate_Exec_ArrayVar_Fill"], inputs: &["ArrayVarRef", "Exec", "Value"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_ArrayVar_Find", bricks: &["B_1x1_Gate_Exec_ArrayVar_Find"], inputs: &["ArrayVarRef", "Exec", "Value"], outputs: &["ExecOut", "Index", "bFound"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_ArrayVar_Get", bricks: &["B_1x1_Gate_Exec_ArrayVar_Get"], inputs: &["ArrayVarRef", "Exec", "Index"], outputs: &["ExecOut", "Value", "bOutOfBounds"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_ArrayVar_GetLength", bricks: &["B_1x1_Gate_Exec_ArrayVar_GetLength"], inputs: &["ArrayVarRef", "Exec"], outputs: &["ExecOut", "Length"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_ArrayVar_Insert", bricks: &["B_1x1_Gate_Exec_ArrayVar_Insert"], inputs: &["ArrayVarRef", "Exec", "Index", "Value"], outputs: &["ExecOut", "bOutOfBounds"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_ArrayVar_Max", bricks: &["B_1x1_Gate_Exec_ArrayVar_Max"], inputs: &["ArrayVarRef", "Exec"], outputs: &["ExecOut", "Value", "bIsEmpty"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_ArrayVar_Min", bricks: &["B_1x1_Gate_Exec_ArrayVar_Min"], inputs: &["ArrayVarRef", "Exec"], outputs: &["ExecOut", "Value", "bIsEmpty"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_ArrayVar_Pop", bricks: &["B_1x1_Gate_Exec_ArrayVar_Pop"], inputs: &["ArrayVarRef", "Exec"], outputs: &["ExecOut", "Value", "bIsEmpty"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_ArrayVar_Push", bricks: &["B_1x1_Gate_Exec_ArrayVar_Push"], inputs: &["ArrayVarRef", "Exec", "Value"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_ArrayVar_RemoveAtIndex", bricks: &["B_1x1_Gate_Exec_ArrayVar_RemoveAtIndex"], inputs: &["ArrayVarRef", "Exec", "Index"], outputs: &["ExecOut", "bOutOfBounds"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_ArrayVar_Resize", bricks: &["B_1x1_Gate_Exec_ArrayVar_Resize"], inputs: &["ArrayVarRef", "Exec", "Size", "Value"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_ArrayVar_Reverse", bricks: &["B_1x1_Gate_Exec_ArrayVar_Reverse"], inputs: &["ArrayVarRef", "Exec"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_ArrayVar_SetAtIndex", bricks: &["B_1x1_Gate_Exec_ArrayVar_SetAtIndex"], inputs: &["ArrayVarRef", "Exec", "Index", "Value"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_ArrayVar_Shuffle", bricks: &["B_1x1_Gate_Exec_ArrayVar_Shuffle"], inputs: &["ArrayVarRef", "Exec"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_ArrayVar_Slice", bricks: &["B_1x1_Gate_Exec_ArrayVar_Slice"], inputs: &["ArrayVarRef", "Count", "Exec", "SourceRef", "Start"], outputs: &["ExecOut", "bOutOfBounds"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_ArrayVar_Sort", bricks: &["B_1x1_Gate_Exec_ArrayVar_Sort"], inputs: &["ArrayVarRef", "Exec", "bDescending"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_ArrayVar_SortMultiple", bricks: &["B_1x1_Gate_Exec_ArrayVar_SortMultiple"], inputs: &["ArrayVarRef", "ArrayVarRef2", "ArrayVarRef3", "ArrayVarRef4", "ArrayVarRef5", "ArrayVarRef6", "ArrayVarRef7", "ArrayVarRef8", "Exec", "bDescending"], outputs: &["ExecOut", "bSuccess"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_ArrayVar_Sum", bricks: &["B_1x1_Gate_Exec_ArrayVar_Sum"], inputs: &["ArrayVarRef", "Exec"], outputs: &["ExecOut", "Value"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_ArrayVar_Swap", bricks: &["B_1x1_Gate_Exec_ArrayVar_Swap"], inputs: &["ArrayVarRef", "Exec", "IndexA", "IndexB"], outputs: &["ExecOut", "bOutOfBounds"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Branch", bricks: &["B_1x1_Gate_Exec_Branch"], inputs: &["Exec", "bCond"], outputs: &["ExecOutA", "ExecOutB"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Character_AddInventoryBrick", bricks: &["B_1x1_Gate_Exec_Character_AddInventoryBrick"], inputs: &["BrickAsset", "Character", "Exec", "ProceduralSize", "ProceduralSize.X", "ProceduralSize.Y", "ProceduralSize.Z"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Character_AddInventoryEntity", bricks: &["B_1x1_Gate_Exec_Character_AddInventoryEntity"], inputs: &["Character", "EntityType", "Exec"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Character_AddInventoryEntry", bricks: &["B_1x1_Gate_Exec_Character_AddInventoryEntry"], inputs: &["Character", "Exec"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Character_AddInventoryItem", bricks: &["B_1x1_Gate_Exec_Character_AddInventoryItem"], inputs: &["Character", "Exec", "Item"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Character_AddInventoryItemAdv", bricks: &["B_1x1_Gate_Exec_Character_AddInventoryItemAdv"], inputs: &["Character", "DamageMultiplier", "Exec", "ItemNameOverride", "ItemScale", "ItemType", "ProjectileOverride", "WeaponSpeedMultiplier"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Character_GetAim", bricks: &["B_1x1_Gate_Exec_Character_GetAim"], inputs: &["Character", "Exec"], outputs: &["Direction", "ExecOut", "Origin"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Character_GetAmmo", bricks: &["B_1x1_Gate_Exec_Character_GetAmmo"], inputs: &["Character", "Exec", "Resource"], outputs: &["Amount", "ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Character_GetCurrentInventorySlot", bricks: &["B_1x1_Gate_Exec_Character_GetCurrentInventorySlot"], inputs: &["Character", "Exec"], outputs: &["ExecOut", "Slot"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Character_GetDamage", bricks: &["B_1x1_Gate_Exec_Character_GetDamage"], inputs: &["Character", "Exec"], outputs: &["Damage", "DamageLimit", "ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Character_GetFromController", bricks: &["B_1x1_Gate_Exec_Character_GetFromController"], inputs: &["Exec", "PlayerState"], outputs: &["Character", "ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Character_GetInventoryEntry", bricks: &["B_1x1_Gate_Exec_Character_GetInventoryEntry"], inputs: &["Character", "Exec", "Slot"], outputs: &["BrickAsset", "EntityType", "ExecOut", "Item"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Character_GetWeaponChamberAmmo", bricks: &["B_1x1_Gate_Exec_Character_GetWeaponChamberAmmo"], inputs: &["Character", "Exec", "Resource", "Slot"], outputs: &["Amount", "ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Character_GrantAmmo", bricks: &["B_1x1_Gate_Exec_Character_GrantAmmo"], inputs: &["Amount", "Character", "Exec", "Resource"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Character_IncDamage", bricks: &["B_1x1_Gate_Exec_Character_IncDamage"], inputs: &["Amount", "Character", "Exec"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Character_IncWeaponChamberAmmo", bricks: &["B_1x1_Gate_Exec_Character_IncWeaponChamberAmmo"], inputs: &["Amount", "Character", "Exec", "Resource", "Slot"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Character_SetAmmo", bricks: &["B_1x1_Gate_Exec_Character_SetAmmo"], inputs: &["Amount", "Character", "Exec", "Resource"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Character_SetDamage", bricks: &["B_1x1_Gate_Exec_Character_SetDamage"], inputs: &["Character", "Damage", "Exec"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Character_SetInventoryBrick", bricks: &["B_1x1_Gate_Exec_Character_SetInventoryBrick"], inputs: &["BrickAsset", "Character", "Exec", "ProceduralSize", "ProceduralSize.X", "ProceduralSize.Y", "ProceduralSize.Z", "Slot"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Character_SetInventoryEntity", bricks: &["B_1x1_Gate_Exec_Character_SetInventoryEntity"], inputs: &["Character", "EntityType", "Exec", "Slot"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Character_SetInventoryEntry", bricks: &["B_1x1_Gate_Exec_Character_SetInventoryEntry"], inputs: &["Character", "Exec", "Slot"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Character_SetInventoryItem", bricks: &["B_1x1_Gate_Exec_Character_SetInventoryItem"], inputs: &["Character", "Exec", "Item", "Slot"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Character_SetInventoryItemAdv", bricks: &["B_1x1_Gate_Exec_Character_SetInventoryItemAdv"], inputs: &["Character", "DamageMultiplier", "Exec", "ItemNameOverride", "ItemScale", "ItemType", "ProjectileOverride", "Slot", "WeaponSpeedMultiplier"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Character_SetTempPermission", bricks: &["B_1x1_Gate_Exec_Character_SetTempPermission"], inputs: &["Character", "Exec", "bPermissionEnable"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Character_SetWeaponChamberAmmo", bricks: &["B_1x1_Gate_Exec_Character_SetWeaponChamberAmmo"], inputs: &["Amount", "Character", "Exec", "Resource", "Slot"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Character_ShowHint", bricks: &["B_1x1_Gate_Exec_Character_ShowHint"], inputs: &["Character", "Exec"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_ChatCommand", bricks: &["B_1x1_Gate_Exec_ChatCommand"], inputs: &[], outputs: &["Arguments", "ExecOut", "PlayerState"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Cycle", bricks: &["B_1x1_Gate_Exec_Cycle"], inputs: &["Count", "Exec", "ExecDown"], outputs: &["ExecOut", "ExecOutDown", "Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Entity_AddLocationRotation", bricks: &["B_1x1_Gate_Exec_Entity_AddLocationRotation"], inputs: &["Entity", "Exec", "Rotation", "Rotation.Pitch", "Rotation.Roll", "Rotation.Yaw", "Vector", "Vector.X", "Vector.Y", "Vector.Z"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Entity_AddVelocity", bricks: &["B_1x1_Gate_Exec_Entity_AddVelocity"], inputs: &["Entity", "Exec", "Rotation", "Rotation.X", "Rotation.Y", "Rotation.Z", "Vector", "Vector.X", "Vector.Y", "Vector.Z"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Entity_DestroySpawned", bricks: &["B_1x1_Gate_Exec_Entity_DestroySpawned"], inputs: &["Entity", "Exec"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Entity_DestroySpawnedPrefab", bricks: &["B_1x1_Gate_Exec_Entity_DestroySpawnedPrefab"], inputs: &["Entity", "Exec"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Entity_GetAngularVelocity", bricks: &["B_1x1_Gate_Exec_Entity_GetAngularVelocity"], inputs: &["Entity", "Exec"], outputs: &["AngularVelocity", "ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Entity_GetLinearVelocity", bricks: &["B_1x1_Gate_Exec_Entity_GetLinearVelocity"], inputs: &["Entity", "Exec"], outputs: &["ExecOut", "LinearVelocity"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Entity_GetLocation", bricks: &["B_1x1_Gate_Exec_Entity_GetLocation"], inputs: &["Entity", "Exec"], outputs: &["ExecOut", "Vector"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Entity_GetLocationRotation", bricks: &["B_1x1_Gate_Exec_Entity_GetLocationRotation"], inputs: &["Entity", "Exec"], outputs: &["ExecOut", "Rotation", "Vector"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Entity_GetRotation", bricks: &["B_1x1_Gate_Exec_Entity_GetRotation"], inputs: &["Entity", "Exec"], outputs: &["ExecOut", "Rotation"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Entity_GetSpeed", bricks: &["B_1x1_Gate_Exec_Entity_GetSpeed"], inputs: &["Entity", "Exec"], outputs: &["ExecOut", "Speed"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Entity_GetTag", bricks: &["B_1x1_Gate_Exec_Entity_GetTag"], inputs: &["Entity", "Exec"], outputs: &["ExecOut", "Tag"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Entity_GetTeam", bricks: &["B_1x1_Gate_Exec_Entity_GetTeam"], inputs: &["Entity", "Exec"], outputs: &["ExecOut", "Team"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Entity_GetVelocity", bricks: &["B_1x1_Gate_Exec_Entity_GetVelocity"], inputs: &["Entity", "Exec"], outputs: &["ExecOut", "Rotation", "Vector"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Entity_GetVelocityAtPoint", bricks: &["B_1x1_Gate_Exec_Entity_GetVelocityAtPoint"], inputs: &["Entity", "Exec", "Point", "Point.X", "Point.Y", "Point.Z"], outputs: &["ExecOut", "LinearVelocity"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Entity_IsFrozen", bricks: &["B_1x1_Gate_Exec_Entity_IsFrozen"], inputs: &["Entity", "Exec"], outputs: &["ExecOut", "bFrozen"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Entity_RelativeTeleport", bricks: &["B_1x1_Gate_Exec_Entity_RelativeTeleport"], inputs: &["Destination", "Entity", "Exec", "Source"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Entity_SetAngularVelocity", bricks: &["B_1x1_Gate_Exec_Entity_SetAngularVelocity"], inputs: &["AngularVelocity", "AngularVelocity.X", "AngularVelocity.Y", "AngularVelocity.Z", "Entity", "Exec"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Entity_SetFrozen", bricks: &["B_1x1_Gate_Exec_Entity_SetFrozen"], inputs: &["Entity", "Exec", "bFrozen"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Entity_SetGravityDirection", bricks: &["B_1x1_Gate_Exec_Entity_SetGravityDirection"], inputs: &["Entity", "Exec", "Rotation", "Rotation.Pitch", "Rotation.Roll", "Rotation.Yaw"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Entity_SetLinearVelocity", bricks: &["B_1x1_Gate_Exec_Entity_SetLinearVelocity"], inputs: &["Entity", "Exec", "LinearVelocity", "LinearVelocity.X", "LinearVelocity.Y", "LinearVelocity.Z"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Entity_SetLocation", bricks: &["B_1x1_Gate_Exec_Entity_SetLocation"], inputs: &["Entity", "Exec", "Vector", "Vector.X", "Vector.Y", "Vector.Z"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Entity_SetLocationRotation", bricks: &["B_1x1_Gate_Exec_Entity_SetLocationRotation"], inputs: &["Entity", "Exec", "Rotation", "Rotation.Pitch", "Rotation.Roll", "Rotation.Yaw", "Vector", "Vector.X", "Vector.Y", "Vector.Z"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Entity_SetRotation", bricks: &["B_1x1_Gate_Exec_Entity_SetRotation"], inputs: &["Entity", "Exec", "Rotation", "Rotation.Pitch", "Rotation.Roll", "Rotation.Yaw"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Entity_SetTag", bricks: &["B_1x1_Gate_Exec_Entity_SetTag"], inputs: &["Entity", "Exec", "Tag"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Entity_SetTeam", bricks: &["B_1x1_Gate_Exec_Entity_SetTeam"], inputs: &["Entity", "Exec", "Team"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Entity_SetVelocity", bricks: &["B_1x1_Gate_Exec_Entity_SetVelocity"], inputs: &["Entity", "Exec", "Rotation", "Rotation.X", "Rotation.Y", "Rotation.Z", "Vector", "Vector.X", "Vector.Y", "Vector.Z"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Entity_Teleport", bricks: &["B_1x1_Gate_Exec_Entity_Teleport"], inputs: &["Destination", "Entity", "Exec"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Gamemode_BroadcastChatMessage", bricks: &["B_1x1_Gate_Exec_Gamemode_BroadcastChatMessage"], inputs: &["Exec", "Message"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Gamemode_BroadcastStatusMessage", bricks: &["B_1x1_Gate_Exec_Gamemode_BroadcastStatusMessage"], inputs: &["Exec", "Message", "bFlashIfUnchanged"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Gamemode_FillArrayFromPlayers", bricks: &["B_1x1_Gate_Exec_Gamemode_FillArrayFromPlayers"], inputs: &["ArrayVarRef", "Exec"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Gamemode_FillArrayFromTeamMembers", bricks: &["B_1x1_Gate_Exec_Gamemode_FillArrayFromTeamMembers"], inputs: &["ArrayVarRef", "Exec", "Team"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Gamemode_GetCurrentRound", bricks: &["B_1x1_Gate_Exec_Gamemode_GetCurrentRound"], inputs: &["Exec"], outputs: &["ExecOut", "RoundNumber"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Gamemode_GetLeaderboardValue", bricks: &["B_1x1_Gate_Exec_Gamemode_GetLeaderboardValue"], inputs: &["Exec", "Key", "PlayerState"], outputs: &["ExecOut", "Value"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Gamemode_GetTeam", bricks: &["B_1x1_Gate_Exec_Gamemode_GetTeam"], inputs: &["Character", "Exec"], outputs: &["ExecOut", "Team"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Gamemode_GetTeamByName", bricks: &["B_1x1_Gate_Exec_Gamemode_GetTeamByName"], inputs: &["Exec", "TeamName"], outputs: &["ExecOut", "Team"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Gamemode_GetTeamLeaderboardValue", bricks: &["B_1x1_Gate_Exec_Gamemode_GetTeamLeaderboardValue"], inputs: &["Exec", "Key", "Team"], outputs: &["ExecOut", "Value"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Gamemode_GetTeamName", bricks: &["B_1x1_Gate_Exec_Gamemode_GetTeamName"], inputs: &["Exec", "Team"], outputs: &["ExecOut", "Name"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Gamemode_IncrementLeaderboardValue", bricks: &["B_1x1_Gate_Exec_Gamemode_IncrementLeaderboardValue"], inputs: &["Exec", "Key", "PlayerState", "Value"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Gamemode_IncrementTeamLeaderboardValue", bricks: &["B_1x1_Gate_Exec_Gamemode_IncrementTeamLeaderboardValue"], inputs: &["Exec", "Key", "Team", "Value"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Gamemode_PlayerWins", bricks: &["B_1x1_Gate_Exec_Gamemode_PlayerWins"], inputs: &["Exec", "Player", "bTeamWinsInstead"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Gamemode_SetLeaderboardValue", bricks: &["B_1x1_Gate_Exec_Gamemode_SetLeaderboardValue"], inputs: &["Exec", "Key", "PlayerState", "Value"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Gamemode_SetTeam", bricks: &["B_1x1_Gate_Exec_Gamemode_SetTeam"], inputs: &["Exec", "PlayerState", "Team", "bPinPlayerToTeam"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Gamemode_SetTeamLeaderboardValue", bricks: &["B_1x1_Gate_Exec_Gamemode_SetTeamLeaderboardValue"], inputs: &["Exec", "Key", "Team", "Value"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Gamemode_SetTeamPinned", bricks: &["B_1x1_Gate_Exec_Gamemode_SetTeamPinned"], inputs: &["Exec", "PlayerState", "bPinned"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Gamemode_TeamWins", bricks: &["B_1x1_Gate_Exec_Gamemode_TeamWins"], inputs: &["Exec", "Team"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_GetOwnTransform", bricks: &["B_1x1_Gate_Exec_GetOwnTransform"], inputs: &["Exec"], outputs: &["ExecOut", "Location", "Rotation"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_MapVar_Clear", bricks: &["B_1x1_Gate_Exec_MapVar_Clear"], inputs: &["Exec", "MapVarRef"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_MapVar_CopyFrom", bricks: &["B_1x1_Gate_Exec_MapVar_CopyFrom"], inputs: &["Exec", "MapVarRef", "SourceRef"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_MapVar_Get", bricks: &["B_1x1_Gate_Exec_MapVar_Get"], inputs: &["Exec", "Key", "MapVarRef"], outputs: &["ExecOut", "Value", "bFound"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_MapVar_GetKeys", bricks: &["B_1x1_Gate_Exec_MapVar_GetKeys"], inputs: &["ArrayVarRef", "Exec", "MapVarRef"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_MapVar_GetLength", bricks: &["B_1x1_Gate_Exec_MapVar_GetLength"], inputs: &["Exec", "MapVarRef"], outputs: &["ExecOut", "Length"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_MapVar_GetValues", bricks: &["B_1x1_Gate_Exec_MapVar_GetValues"], inputs: &["ArrayVarRef", "Exec", "MapVarRef"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_MapVar_Has", bricks: &["B_1x1_Gate_Exec_MapVar_Has"], inputs: &["Exec", "Key", "MapVarRef"], outputs: &["ExecOut", "bFound"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_MapVar_Remove", bricks: &["B_1x1_Gate_Exec_MapVar_Remove"], inputs: &["Exec", "Key", "MapVarRef"], outputs: &["ExecOut", "bFound"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_MapVar_Set", bricks: &["B_1x1_Gate_Exec_MapVar_Set"], inputs: &["Exec", "Key", "MapVarRef", "Value"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_PlayClientAudio", bricks: &["B_1x1_Gate_Exec_PlayClientAudio"], inputs: &["Exec", "PitchMultiplier", "Player", "VolumeMultiplier"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_PlayGlobalAudio", bricks: &["B_1x1_Gate_Exec_PlayGlobalAudio"], inputs: &["Exec", "PitchMultiplier", "VolumeMultiplier"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_PlayerState_DisplayText", bricks: &["B_1x1_Gate_Exec_PlayerState_DisplayText"], inputs: &["Anchor", "Anchor.X", "Anchor.Y", "Angle", "Exec", "FontColor", "FontColor.A", "FontColor.B", "FontColor.G", "FontColor.R", "LetterSpacing", "Lifetime", "LineHeight", "OutlineColor", "OutlineColor.A", "OutlineColor.B", "OutlineColor.G", "OutlineColor.R", "OutlineSize", "Pivot", "Pivot.X", "Pivot.Y", "PlayerState", "Position", "Position.X", "Position.Y", "Scale", "Scale.X", "Scale.Y", "ShadowColor", "ShadowColor.A", "ShadowColor.B", "ShadowColor.G", "ShadowColor.R", "ShadowOffset", "ShadowOffset.X", "ShadowOffset.Y", "Skew", "Text", "TextId", "Transition", "WrapWidth", "ZOrder", "bMiteredOutline"], outputs: &["ExecOut", "TextIdOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_PlayerState_ForceRespawn", bricks: &["B_1x1_Gate_Exec_PlayerState_ForceRespawn"], inputs: &["Exec", "PlayerState"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_PlayerState_GetDisplayName", bricks: &["B_1x1_Gate_Exec_PlayerState_GetDisplayName"], inputs: &["Exec", "PlayerState"], outputs: &["DisplayName", "ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_PlayerState_GetFromEntity", bricks: &["B_1x1_Gate_Exec_PlayerState_GetFromEntity"], inputs: &["Entity", "Exec"], outputs: &["ExecOut", "PlayerState"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_PlayerState_GetUserId", bricks: &["B_1x1_Gate_Exec_PlayerState_GetUserId"], inputs: &["Exec", "PlayerState"], outputs: &["ExecOut", "UserId"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_PlayerState_GetUserName", bricks: &["B_1x1_Gate_Exec_PlayerState_GetUserName"], inputs: &["Exec", "PlayerState"], outputs: &["ExecOut", "UserName"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_PlayerState_HasPermission", bricks: &["B_1x1_Gate_Exec_PlayerState_HasPermission"], inputs: &["Exec", "PlayerState"], outputs: &["ExecOut", "bHasPermission"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_PlayerState_HasRole", bricks: &["B_1x1_Gate_Exec_PlayerState_HasRole"], inputs: &["Exec", "PlayerState"], outputs: &["ExecOut", "bHasRole"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_PlayerState_IsTrustedByBrickOwner", bricks: &["B_1x1_Gate_Exec_PlayerState_IsTrustedByBrickOwner"], inputs: &["Exec", "PlayerState"], outputs: &["ExecOut", "bIsTrusted"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_PlayerState_SetCanRespawn", bricks: &["B_1x1_Gate_Exec_PlayerState_SetCanRespawn"], inputs: &["Exec", "PlayerState", "bCanRespawn"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_PlayerState_ShowChatMessage", bricks: &["B_1x1_Gate_Exec_PlayerState_ShowChatMessage"], inputs: &["Exec", "Message", "PlayerState"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_PlayerState_ShowMessageBox", bricks: &["B_1x1_Gate_Exec_PlayerState_ShowMessageBox"], inputs: &["Exec", "Message", "PlayerState", "Title"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_PlayerState_ShowStatusMessage", bricks: &["B_1x1_Gate_Exec_PlayerState_ShowStatusMessage"], inputs: &["Exec", "Message", "PlayerState"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_PrefabSpawner", bricks: &["B_1x1_Gate_Exec_PrefabSpawner"], inputs: &["DestroyAll", "Exec", "Lifetime", "Limit", "SpawnOffset", "SpawnOffset.X", "SpawnOffset.Y", "SpawnOffset.Z", "SpawnOffsetRotation", "SpawnOffsetRotation.Pitch", "SpawnOffsetRotation.Roll", "SpawnOffsetRotation.Yaw", "SpawnVelocity", "SpawnVelocity.X", "SpawnVelocity.Y", "SpawnVelocity.Z"], outputs: &["Entity", "ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_PrintToConsole", bricks: &["B_1x1_Gate_Exec_PrintToConsole"], inputs: &["Exec", "Text"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Random", bricks: &["B_1x1_Gate_Exec_Random"], inputs: &["Exec", "Max", "Min"], outputs: &["ExecOut", "Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_SpawnExplosion", bricks: &["B_1x1_Gate_Exec_SpawnExplosion"], inputs: &["DamageMultiplier", "Exec", "Instigator", "ProjectileType", "ScaleMultiplier", "SpawnOffset", "SpawnOffset.X", "SpawnOffset.Y", "SpawnOffset.Z"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_SpawnExplosionAt", bricks: &["B_1x1_Gate_Exec_SpawnExplosionAt"], inputs: &["DamageMultiplier", "Exec", "Instigator", "ProjectileType", "ScaleMultiplier", "WorldPosition", "WorldPosition.X", "WorldPosition.Y", "WorldPosition.Z"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Sweep", bricks: &["B_1x1_Gate_Exec_Sweep"], inputs: &["AdditionalIgnoredEntities", "CollisionChannel", "Direction", "Direction.X", "Direction.Y", "Direction.Z", "Distance", "Exec", "IgnoreEntity", "Origin", "Origin.X", "Origin.Y", "Origin.Z", "Radius", "bDetectBricks", "bDetectMap", "bDetectPhysics", "bDetectPlayers1", "bDetectPlayers2", "bDetectPlayers3", "bDetectPlayers4", "bIgnoreOwningGrid", "bRelative"], outputs: &["ExecOut", "Hit", "HitColor", "HitDistance", "HitEntity", "HitLocation", "HitNormal", "Miss"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_SweepSimple", bricks: &["B_1x1_Gate_Exec_SweepSimple"], inputs: &["CollisionChannel", "Distance", "Exec", "Radius", "SpreadConeAngle"], outputs: &["ExecOut", "Hit", "HitColor", "HitDistance", "HitEntity", "HitLocation", "HitNormal", "Miss"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Toggle", bricks: &["B_1x1_Gate_Exec_Toggle"], inputs: &["Exec"], outputs: &["ExecOut", "Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Union", bricks: &["B_1x1_Gate_Exec_Union"], inputs: &["ExecA", "ExecB"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Var_Get", bricks: &["B_1x1_Gate_Exec_Var_Get"], inputs: &["Exec", "VarRef"], outputs: &["ExecOut", "Value"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Var_Increment", bricks: &["B_1x1_Gate_Exec_Var_Increment"], inputs: &["Exec", "Value", "VarRef"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Var_Set", bricks: &["B_1x1_Gate_Exec_Var_Set"], inputs: &["Exec", "Value", "VarRef"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Zone_GetEntities", bricks: &["B_1x1_Gate_Exec_Zone_GetEntities"], inputs: &["ArrayVarRef", "Exec", "TagFilter", "Zone"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Exec_Zone_GetPlayers", bricks: &["B_1x1_Gate_Exec_Zone_GetPlayers"], inputs: &["ArrayVarRef", "Exec", "TagFilter", "Zone"], outputs: &["ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_BitwiseAND", bricks: &["B_1x1_Gate_Expr_BitwiseAND"], inputs: &["InputA", "InputB"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_BitwiseBitCount", bricks: &["B_1x1_Gate_Expr_BitwiseBitCount"], inputs: &["Input"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_BitwiseNAND", bricks: &["B_1x1_Gate_Expr_BitwiseNAND"], inputs: &["InputA", "InputB"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_BitwiseNOR", bricks: &["B_1x1_Gate_Expr_BitwiseNOR"], inputs: &["InputA", "InputB"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_BitwiseNOT", bricks: &["B_1x1_Gate_Expr_BitwiseNOT"], inputs: &["Input"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_BitwiseOR", bricks: &["B_1x1_Gate_Expr_BitwiseOR"], inputs: &["InputA", "InputB"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_BitwiseShiftLeft", bricks: &["B_1x1_Gate_Expr_BitwiseShiftLeft"], inputs: &["InputA", "InputB"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_BitwiseShiftRight", bricks: &["B_1x1_Gate_Expr_BitwiseShiftRight"], inputs: &["InputA", "InputB"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_BitwiseShiftRightLogical", bricks: &["B_1x1_Gate_Expr_BitwiseShiftRightLogical"], inputs: &["InputA", "InputB"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_BitwiseXOR", bricks: &["B_1x1_Gate_Expr_BitwiseXOR"], inputs: &["InputA", "InputB"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_Ceil", bricks: &["B_1x1_Gate_Expr_Ceil"], inputs: &["Input"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_ChangeDetector", bricks: &["B_1x1_Gate_Expr_ChangeDetector"], inputs: &["Input"], outputs: &["bPulseOnChange"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_ChangeDetectorExec", bricks: &["B_1x1_Gate_Expr_ChangeDetectorExec"], inputs: &["Input"], outputs: &["OnChanged"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_ColorBlend", bricks: &["B_1x1_Gate_Expr_ColorBlend"], inputs: &["Alpha", "ColorA", "ColorA.A", "ColorA.B", "ColorA.G", "ColorA.R", "ColorB", "ColorB.A", "ColorB.B", "ColorB.G", "ColorB.R"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_ColorConvert", bricks: &["B_1x1_Gate_Expr_ColorConvert"], inputs: &["Input", "Input.A", "Input.B", "Input.G", "Input.R"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_ColorToHex", bricks: &["B_1x1_Gate_Expr_ColorToHex"], inputs: &["Input", "Input.A", "Input.B", "Input.G", "Input.R"], outputs: &["Hex"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_CompareEqual", bricks: &["B_1x1_Gate_Expr_CompareEqual"], inputs: &["InputA", "InputB"], outputs: &["bOutput"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_CompareGreater", bricks: &["B_1x1_Gate_Expr_CompareGreater"], inputs: &["InputA", "InputB"], outputs: &["bOutput"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_CompareGreaterOrEqual", bricks: &["B_1x1_Gate_Expr_CompareGreaterOrEqual"], inputs: &["InputA", "InputB"], outputs: &["bOutput"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_CompareLess", bricks: &["B_1x1_Gate_Expr_CompareLess"], inputs: &["InputA", "InputB"], outputs: &["bOutput"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_CompareLessOrEqual", bricks: &["B_1x1_Gate_Expr_CompareLessOrEqual"], inputs: &["InputA", "InputB"], outputs: &["bOutput"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_CompareNotEqual", bricks: &["B_1x1_Gate_Expr_CompareNotEqual"], inputs: &["InputA", "InputB"], outputs: &["bOutput"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_Convert", bricks: &["B_1x1_Gate_Expr_Convert"], inputs: &["Input"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_DirectionToRotation", bricks: &["B_1x1_Gate_Expr_DirectionToRotation"], inputs: &["Direction", "Direction.X", "Direction.Y", "Direction.Z"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_EdgeDetector", bricks: &["B_1x1_Gate_Expr_EdgeDetector"], inputs: &["Input"], outputs: &["bPulseOnFallingEdge", "bPulseOnRisingEdge"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_EdgeDetectorExec", bricks: &["B_1x1_Gate_Expr_EdgeDetectorExec"], inputs: &["Input"], outputs: &["OnFallingEdge", "OnRisingEdge"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_EnumToInteger", bricks: &["B_1x1_Gate_Expr_EnumToInteger"], inputs: &["Input"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_Floor", bricks: &["B_1x1_Gate_Expr_Floor"], inputs: &["Input"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_Gamemode_IsBuilderTeam", bricks: &["B_1x1_Gate_Expr_Gamemode_IsBuilderTeam"], inputs: &["Team"], outputs: &["bResult"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_Gamemode_IsUnaffiliatedTeam", bricks: &["B_1x1_Gate_Expr_Gamemode_IsUnaffiliatedTeam"], inputs: &["Team"], outputs: &["bResult"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_IntegerToEnum", bricks: &["B_1x1_Gate_Expr_IntegerToEnum"], inputs: &["Input", "bWrap"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_InvertRotation", bricks: &["B_1x1_Gate_Expr_InvertRotation"], inputs: &["Input", "Input.W", "Input.X", "Input.Y", "Input.Z"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_ItemToPickup", bricks: &["B_1x1_Gate_Expr_ItemToPickup"], inputs: &["Input"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_LogicalAND", bricks: &["B_1x1_Gate_Expr_LogicalAND"], inputs: &["bInputA", "bInputB"], outputs: &["bOutput"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_LogicalNAND", bricks: &["B_1x1_Gate_Expr_LogicalNAND"], inputs: &["bInputA", "bInputB"], outputs: &["bOutput"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_LogicalNOR", bricks: &["B_1x1_Gate_Expr_LogicalNOR"], inputs: &["bInputA", "bInputB"], outputs: &["bOutput"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_LogicalNOT", bricks: &["B_1x1_Gate_Expr_LogicalNOT"], inputs: &["bInput"], outputs: &["bOutput"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_LogicalOR", bricks: &["B_1x1_Gate_Expr_LogicalOR"], inputs: &["bInputA", "bInputB"], outputs: &["bOutput"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_LogicalXOR", bricks: &["B_1x1_Gate_Expr_LogicalXOR"], inputs: &["bInputA", "bInputB"], outputs: &["bOutput"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_MakeColor", bricks: &["B_1x1_Gate_Expr_MakeColor"], inputs: &["A", "B", "G", "R"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_MakeColorHex", bricks: &["B_1x1_Gate_Expr_MakeColorHex"], inputs: &["Hex"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_MakeColorSRGB", bricks: &["B_1x1_Gate_Expr_MakeColorSRGB"], inputs: &["A", "B", "G", "R"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_MakeQuaternion", bricks: &["B_1x1_Gate_Expr_MakeQuaternion"], inputs: &["W", "X", "Y", "Z"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_MakeRotation", bricks: &["B_1x1_Gate_Expr_MakeRotation"], inputs: &["Pitch", "Roll", "Yaw"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_MakeVector", bricks: &["B_1x1_Gate_Expr_MakeVector"], inputs: &["X", "Y", "Z"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_MathAbs", bricks: &["B_1x1_Gate_Expr_MathAbs"], inputs: &["Input"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_MathAcos", bricks: &["B_1x1_Gate_Expr_MathAcos"], inputs: &["Input"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_MathAcosh", bricks: &["B_1x1_Gate_Expr_MathAcosh"], inputs: &["Input"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_MathAdd", bricks: &["B_1x1_Gate_Expr_MathAdd"], inputs: &["InputA", "InputB"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_MathAsin", bricks: &["B_1x1_Gate_Expr_MathAsin"], inputs: &["Input"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_MathAsinh", bricks: &["B_1x1_Gate_Expr_MathAsinh"], inputs: &["Input"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_MathAtan", bricks: &["B_1x1_Gate_Expr_MathAtan"], inputs: &["Input"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_MathAtan2", bricks: &["B_1x1_Gate_Expr_MathAtan2"], inputs: &["X", "Y"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_MathAtanh", bricks: &["B_1x1_Gate_Expr_MathAtanh"], inputs: &["Input"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_MathBlend", bricks: &["B_1x1_Gate_Expr_MathBlend"], inputs: &["Blend", "InputA", "InputB"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_MathClamp", bricks: &["B_1x1_Gate_Expr_MathClamp"], inputs: &["Input", "Max", "Min"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_MathCos", bricks: &["B_1x1_Gate_Expr_MathCos"], inputs: &["Input"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_MathCosh", bricks: &["B_1x1_Gate_Expr_MathCosh"], inputs: &["Input"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_MathDegreesToRadians", bricks: &["B_1x1_Gate_Expr_MathDegreesToRadians"], inputs: &["Input"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_MathDivide", bricks: &["B_1x1_Gate_Expr_MathDivide"], inputs: &["InputA", "InputB"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_MathEasing", bricks: &["B_1x1_Gate_Expr_MathEasing"], inputs: &["Blend", "InputA", "InputB"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_MathExp", bricks: &["B_1x1_Gate_Expr_MathExp"], inputs: &["Input"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_MathLn", bricks: &["B_1x1_Gate_Expr_MathLn"], inputs: &["Input"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_MathLogBase", bricks: &["B_1x1_Gate_Expr_MathLogBase"], inputs: &["Base", "Input"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_MathMax", bricks: &["B_1x1_Gate_Expr_MathMax"], inputs: &["InputA", "InputB"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_MathMin", bricks: &["B_1x1_Gate_Expr_MathMin"], inputs: &["InputA", "InputB"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_MathModulo", bricks: &["B_1x1_Gate_Expr_MathModulo"], inputs: &["InputA", "InputB"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_MathModuloFloored", bricks: &["B_1x1_Gate_Expr_MathModuloFloored"], inputs: &["InputA", "InputB"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_MathMultiply", bricks: &["B_1x1_Gate_Expr_MathMultiply"], inputs: &["InputA", "InputB"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_MathNegate", bricks: &["B_1x1_Gate_Expr_MathNegate"], inputs: &["Input"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_MathPow", bricks: &["B_1x1_Gate_Expr_MathPow"], inputs: &["Exponent", "Input"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_MathRadiansToDegrees", bricks: &["B_1x1_Gate_Expr_MathRadiansToDegrees"], inputs: &["Input"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_MathSign", bricks: &["B_1x1_Gate_Expr_MathSign"], inputs: &["Input"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_MathSin", bricks: &["B_1x1_Gate_Expr_MathSin"], inputs: &["Input"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_MathSinh", bricks: &["B_1x1_Gate_Expr_MathSinh"], inputs: &["Input"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_MathSqrt", bricks: &["B_1x1_Gate_Expr_MathSqrt"], inputs: &["Input"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_MathSubtract", bricks: &["B_1x1_Gate_Expr_MathSubtract"], inputs: &["InputA", "InputB"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_MathTan", bricks: &["B_1x1_Gate_Expr_MathTan"], inputs: &["Input"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_MathTanh", bricks: &["B_1x1_Gate_Expr_MathTanh"], inputs: &["Input"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_NearlyEqual", bricks: &["B_1x1_Gate_Expr_NearlyEqual"], inputs: &["InputA", "InputB", "Tolerance"], outputs: &["bOutput"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_QuatAngleBetween", bricks: &["B_1x1_Gate_Expr_QuatAngleBetween"], inputs: &["InputA", "InputA.W", "InputA.X", "InputA.Y", "InputA.Z", "InputB", "InputB.W", "InputB.X", "InputB.Y", "InputB.Z"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_QuatBetween", bricks: &["B_1x1_Gate_Expr_QuatBetween"], inputs: &["From", "From.X", "From.Y", "From.Z", "To", "To.X", "To.Y", "To.Z"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_QuatDotProduct", bricks: &["B_1x1_Gate_Expr_QuatDotProduct"], inputs: &["InputA", "InputA.W", "InputA.X", "InputA.Y", "InputA.Z", "InputB", "InputB.W", "InputB.X", "InputB.Y", "InputB.Z"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_QuatFromAxisAngle", bricks: &["B_1x1_Gate_Expr_QuatFromAxisAngle"], inputs: &["Angle", "Axis", "Axis.X", "Axis.Y", "Axis.Z"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_QuatSlerp", bricks: &["B_1x1_Gate_Expr_QuatSlerp"], inputs: &["Alpha", "InputA", "InputA.W", "InputA.X", "InputA.Y", "InputA.Z", "InputB", "InputB.W", "InputB.X", "InputB.Y", "InputB.Z"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_QuatToAxisAngle", bricks: &["B_1x1_Gate_Expr_QuatToAxisAngle"], inputs: &["Input", "Input.W", "Input.X", "Input.Y", "Input.Z"], outputs: &["Angle", "Axis"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_Remap", bricks: &["B_1x1_Gate_Expr_Remap"], inputs: &["InputMax", "InputMin", "OutputMax", "OutputMin", "Value"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_RotateVector", bricks: &["B_1x1_Gate_Expr_RotateVector"], inputs: &["Rotation", "Rotation.W", "Rotation.X", "Rotation.Y", "Rotation.Z", "Vector", "Vector.X", "Vector.Y", "Vector.Z"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_RotationToDirection", bricks: &["B_1x1_Gate_Expr_RotationToDirection"], inputs: &["Rotation", "Rotation.W", "Rotation.X", "Rotation.Y", "Rotation.Z"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_Round", bricks: &["B_1x1_Gate_Expr_Round"], inputs: &["Input"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_Select", bricks: &["B_1x1_Gate_Expr_Select"], inputs: &["InputA", "InputB", "bSelectB"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_SplitColor", bricks: &["B_1x1_Gate_Expr_SplitColor"], inputs: &["Input", "Input.A", "Input.B", "Input.G", "Input.R"], outputs: &["A", "B", "G", "R"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_SplitColorSRGB", bricks: &["B_1x1_Gate_Expr_SplitColorSRGB"], inputs: &["Input", "Input.A", "Input.B", "Input.G", "Input.R"], outputs: &["A", "B", "G", "R"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_SplitQuaternion", bricks: &["B_1x1_Gate_Expr_SplitQuaternion"], inputs: &["Input", "Input.W", "Input.X", "Input.Y", "Input.Z"], outputs: &["W", "X", "Y", "Z"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_SplitRotation", bricks: &["B_1x1_Gate_Expr_SplitRotation"], inputs: &["Input", "Input.Pitch", "Input.Roll", "Input.Yaw"], outputs: &["Pitch", "Roll", "Yaw"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_SplitVector", bricks: &["B_1x1_Gate_Expr_SplitVector"], inputs: &["Input", "Input.X", "Input.Y", "Input.Z"], outputs: &["X", "Y", "Z"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_String_CharacterToCodepoint", bricks: &["B_1x1_Gate_Expr_String_CharacterToCodepoint"], inputs: &["Character"], outputs: &["Codepoint", "bSuccess"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_String_CodepointToCharacter", bricks: &["B_1x1_Gate_Expr_String_CodepointToCharacter"], inputs: &["Codepoint"], outputs: &["Character", "bSuccess"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_String_Concatenate", bricks: &["B_1x1_Gate_Expr_String_Concatenate"], inputs: &["InputA", "InputB", "Separator"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_String_Contains", bricks: &["B_1x1_Gate_Expr_String_Contains"], inputs: &["Input", "Search", "bCaseSensitive"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_String_EndsWith", bricks: &["B_1x1_Gate_Expr_String_EndsWith"], inputs: &["Input", "Suffix", "bCaseSensitive"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_String_Find", bricks: &["B_1x1_Gate_Expr_String_Find"], inputs: &["Input", "Search", "Start", "bCaseSensitive"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_String_FormatText", bricks: &["B_1x1_Gate_Expr_String_FormatText"], inputs: &["FormatString", "InputA", "InputB", "InputC", "InputD", "InputE", "InputF", "InputG"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_String_Length", bricks: &["B_1x1_Gate_Expr_String_Length"], inputs: &["Input"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_String_ParseInt", bricks: &["B_1x1_Gate_Expr_String_ParseInt"], inputs: &["Input"], outputs: &["Value", "bSuccess"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_String_ParseNumber", bricks: &["B_1x1_Gate_Expr_String_ParseNumber"], inputs: &["Input"], outputs: &["Value", "bSuccess"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_String_Replace", bricks: &["B_1x1_Gate_Expr_String_Replace"], inputs: &["Input", "MaxReplacements", "Replacement", "Search", "Start", "bCaseSensitive"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_String_Split", bricks: &["B_1x1_Gate_Expr_String_Split"], inputs: &["Delimiter", "Input", "Occurrence", "bCaseSensitive"], outputs: &["Left", "Right", "bFound"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_String_StartsWith", bricks: &["B_1x1_Gate_Expr_String_StartsWith"], inputs: &["Input", "Prefix", "bCaseSensitive"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_String_Substring", bricks: &["B_1x1_Gate_Expr_String_Substring"], inputs: &["Input", "Length", "Start"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_String_ToLower", bricks: &["B_1x1_Gate_Expr_String_ToLower"], inputs: &["Input"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_String_ToUpper", bricks: &["B_1x1_Gate_Expr_String_ToUpper"], inputs: &["Input"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_String_Trim", bricks: &["B_1x1_Gate_Expr_String_Trim"], inputs: &["Input"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_Swap", bricks: &["B_1x1_Gate_Expr_Swap"], inputs: &["InputA", "InputB", "bSwap"], outputs: &["Output", "OutputB"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_VecCrossProduct", bricks: &["B_1x1_Gate_Expr_VecCrossProduct"], inputs: &["InputA", "InputA.X", "InputA.Y", "InputA.Z", "InputB", "InputB.X", "InputB.Y", "InputB.Z"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_VecDistance", bricks: &["B_1x1_Gate_Expr_VecDistance"], inputs: &["InputA", "InputA.X", "InputA.Y", "InputA.Z", "InputB", "InputB.X", "InputB.Y", "InputB.Z"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_VecDistanceSquared", bricks: &["B_1x1_Gate_Expr_VecDistanceSquared"], inputs: &["InputA", "InputA.X", "InputA.Y", "InputA.Z", "InputB", "InputB.X", "InputB.Y", "InputB.Z"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_VecDotProduct", bricks: &["B_1x1_Gate_Expr_VecDotProduct"], inputs: &["InputA", "InputA.X", "InputA.Y", "InputA.Z", "InputB", "InputB.X", "InputB.Y", "InputB.Z"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_VecMagnitude", bricks: &["B_1x1_Gate_Expr_VecMagnitude"], inputs: &["Input", "Input.X", "Input.Y", "Input.Z"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_VecMagnitudeSquared", bricks: &["B_1x1_Gate_Expr_VecMagnitudeSquared"], inputs: &["Input", "Input.X", "Input.Y", "Input.Z"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_VecNormalize", bricks: &["B_1x1_Gate_Expr_VecNormalize"], inputs: &["Input", "Input.X", "Input.Y", "Input.Z"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Expr_VecScale", bricks: &["B_1x1_Gate_Expr_VecScale"], inputs: &["Input", "Input.X", "Input.Y", "Input.Z", "Scalar"], outputs: &["Output"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Fake_Gamemode_CharacterDamagedEvent", bricks: &["B_1x1_Gate_Fake_Gamemode_CharacterDamagedEvent"], inputs: &[], outputs: &["Attacker", "AttackerWeapon", "AttackerWeaponName", "Character", "Damage", "ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Fake_Gamemode_CharacterDiedEvent", bricks: &["B_1x1_Gate_Fake_Gamemode_CharacterDiedEvent"], inputs: &[], outputs: &["Character", "ExecOut", "Killer", "KillerWeapon", "KillerWeaponName"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Fake_Gamemode_CharacterFiredWeaponEvent", bricks: &["B_1x1_Gate_Fake_Gamemode_CharacterFiredWeaponEvent"], inputs: &[], outputs: &["Character", "Direction", "ExecOut", "Start", "Weapon", "WeaponName"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Fake_Gamemode_CharacterSpawnedEvent", bricks: &["B_1x1_Gate_Fake_Gamemode_CharacterSpawnedEvent"], inputs: &[], outputs: &["Character", "ExecOut"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Fake_Gamemode_ControllerJoinedEvent", bricks: &["B_1x1_Gate_Fake_Gamemode_ControllerJoinedEvent"], inputs: &[], outputs: &["ExecOut", "PlayerState", "UserId", "UserName"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Fake_Gamemode_ControllerJoinedTeamEvent", bricks: &["B_1x1_Gate_Fake_Gamemode_ControllerJoinedTeamEvent"], inputs: &[], outputs: &["ExecOut", "PlayerState", "Team", "UserId", "UserName"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Fake_Gamemode_ControllerLeftEvent", bricks: &["B_1x1_Gate_Fake_Gamemode_ControllerLeftEvent"], inputs: &[], outputs: &["ExecOut", "PlayerState", "UserId", "UserName"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Fake_Gamemode_ControllerLeftTeamEvent", bricks: &["B_1x1_Gate_Fake_Gamemode_ControllerLeftTeamEvent"], inputs: &[], outputs: &["ExecOut", "PlayerState", "Team", "UserId", "UserName"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Fake_Gamemode_RoundEndEvent", bricks: &["B_1x1_Gate_Fake_Gamemode_RoundEndEvent"], inputs: &[], outputs: &["ExecOut", "RoundNumber"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_Fake_Gamemode_RoundStartEvent", bricks: &["B_1x1_Gate_Fake_Gamemode_RoundStartEvent"], inputs: &[], outputs: &["ExecOut", "RoundNumber"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_FindPlayer", bricks: &["B_1x1_Gate_FindPlayer"], inputs: &["Exec", "Query"], outputs: &["ExecOut", "Player"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_FontReference", bricks: &["B_1x1_Gate_FontReference"], inputs: &[], outputs: &["Value"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_FormatDate", bricks: &["B_1x1_Gate_FormatDate"], inputs: &["Format", "UnixEpoch", "bUseUTC"], outputs: &["Output", "bSuccess"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_GetUnixEpoch", bricks: &["B_1x1_Gate_GetUnixEpoch"], inputs: &[], outputs: &["UnixEpoch"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_ItemReference", bricks: &["B_1x1_Gate_ItemReference"], inputs: &[], outputs: &["Value"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_OneShotAudioReference", bricks: &["B_1x1_Gate_OneShotAudioReference"], inputs: &[], outputs: &["Value"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_ParticleReference", bricks: &[], inputs: &[], outputs: &["Value"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_PickupReference", bricks: &["B_1x1_Gate_PickupReference"], inputs: &[], outputs: &["Value"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_ProjectileReference", bricks: &["B_1x1_Gate_ProjectileReference"], inputs: &[], outputs: &["Value"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_ServerUptime", bricks: &["B_1x1_Gate_ServerUptime"], inputs: &[], outputs: &["Uptime"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_WeaponResourceReference", bricks: &["B_1x1_Gate_WeaponResourceReference"], inputs: &[], outputs: &["Value"] },
    ComponentInfo { name: "BrickComponentType_WireGraph_WheelEngineAudioReference", bricks: &["B_1x1_Gate_WheelEngineAudioReference"], inputs: &[], outputs: &["Value"] },
    ComponentInfo { name: "Component_AudioEmitter", bricks: &["B_1x1F_Speaker", "B_2x2F_Speaker"], inputs: &["AudioDescriptor", "FocusAzimuth", "InnerRadius", "MaxDistance", "NonFocusAzimuth", "NonFocusVolumeAttenuation", "PitchMultiplier", "VolumeMultiplier", "bEnabled", "bSpatialization"], outputs: &[] },
    ComponentInfo { name: "Component_BotSpawn", bricks: &["B_Bot_Spawn_Point"], inputs: &["AggroRange", "Agression", "AttackDamageMultiplier", "AttackMovementAmount", "BotName", "BotWeapon", "CorpseTimeout", "GunSkill", "HealthMultiplier", "Jumpyness", "MoveTarget", "MoveTarget.X", "MoveTarget.Y", "MoveTarget.Z", "MovementAmount", "MovementGoalDummy", "MovementRandomness", "ReactionTime", "RespawnTime", "RunSpeed", "Skin", "Skin.Parts", "TeamCollisionChannel", "bActiveBot", "bBackVision", "bCanJump", "bCanTargetBots", "bCanTargetPlayers", "bDeleteBot", "bSpawnEnable", "bTeamCollision", "bTeamCollision1", "bTeamCollision2", "bTeamCollision3", "bVisionRaycasting"], outputs: &["DistanceToTarget", "FocusCharacter", "SpawnedCharacter"] },
    ComponentInfo { name: "Component_BrickPropertyChanger", bricks: &[], inputs: &["Color", "Color.A", "Color.B", "Color.G", "Color.R", "Material", "MaterialAlpha", "bCollisionEnabled", "bCollisionEnabled_Interaction", "bCollisionEnabled_Physics", "bCollisionEnabled_Player", "bCollisionEnabled_Player1", "bCollisionEnabled_Player2", "bCollisionEnabled_Player3", "bCollisionEnabled_Weapon", "bVisibility"], outputs: &[] },
    ComponentInfo { name: "Component_Button", bricks: &[], inputs: &["PressSound", "PromptCustomLabel", "ReleaseSound", "bAllowNearbyInteraction", "bHiddenInteraction"], outputs: &["Character", "PressCount", "bHeld"] },
    ComponentInfo { name: "Component_CheckPoint", bricks: &["B_CheckPoint"], inputs: &["bRotatePlayerGravityOnSpawn"], outputs: &[] },
    ComponentInfo { name: "Component_Damage", bricks: &["PB_Spike"], inputs: &["ConsoleTag", "Damage", "Message", "RepeatDelay"], outputs: &[] },
    ComponentInfo { name: "Component_GoalPoint", bricks: &["B_GoalPoint"], inputs: &[], outputs: &[] },
    ComponentInfo { name: "Component_Interact", bricks: &[], inputs: &["ConsoleTag", "InteractSound", "Message", "PromptCustomLabel", "bAllowNearbyInteraction", "bHiddenInteraction"], outputs: &[] },
    ComponentInfo { name: "Component_Internal_AnimatedButton", bricks: &["B_Button", "B_Button_Pressed", "B_Button_Square", "B_Button_Square_Pressed"], inputs: &["PressSound", "PromptCustomLabel", "ReleaseSound", "bAllowNearbyInteraction", "bHiddenInteraction"], outputs: &["Character", "PressCount", "bHeld"] },
    ComponentInfo { name: "Component_Internal_AnimatedPressurePlate", bricks: &[], inputs: &["BeginTouchSound", "EndTouchSound", "bCollisionEnabled_Player", "bCollisionEnabled_Player1", "bCollisionEnabled_Player2", "bCollisionEnabled_Player3"], outputs: &["Character", "TouchCount", "bTouching"] },
    ComponentInfo { name: "Component_Internal_AnimatedSwitch", bricks: &["B_Switch_Flipped", "B_Switch_Test"], inputs: &["InteractSound", "PromptCustomLabel", "bAllowNearbyInteraction", "bHiddenInteraction"], outputs: &["Character", "bEnabled"] },
    ComponentInfo { name: "Component_Internal_AttachedZone", bricks: &["BP_ZoneProjector"], inputs: &["TagFilter", "WaterAbsorption", "WaterAbsorption.X", "WaterAbsorption.Y", "WaterAbsorption.Z", "WaterFogAmbientColor", "WaterFogAmbientColor.A", "WaterFogAmbientColor.B", "WaterFogAmbientColor.G", "WaterFogAmbientColor.R", "WaterFogAmbientScale", "WaterFogIntensity", "WaterFogScatteringColor", "WaterFogScatteringColor.A", "WaterFogScatteringColor.B", "WaterFogScatteringColor.G", "WaterFogScatteringColor.R", "WaterFogScatteringScale", "WaterScattering", "WaterScattering.X", "WaterScattering.Y", "WaterScattering.Z", "ZoneEndDistance", "ZoneStartDistance", "ZoneWindForce", "bDetectEntities", "bDetectPlayers", "bDetectPlayers1", "bDetectPlayers2", "bDetectPlayers3", "bDetectProjectiles", "bIsBuildingZone", "bIsLooseZone", "bIsShareZone", "bWater"], outputs: &["OccupantCount", "ZoneRef", "bOccupied"] },
    ComponentInfo { name: "Component_Internal_Bearing", bricks: &["B_Joint_Bearing", "B_Joint_Bearing_Micro"], inputs: &["Damping", "LimitAngle", "bAnglesArePercentages", "bLimitAngle"], outputs: &["CurrentAngle"] },
    ComponentInfo { name: "Component_Internal_Gyroscope", bricks: &["B_Gyroscope"], inputs: &["Control_DriveAndSteer", "Damping", "MaxForce", "Strength", "TargetAxis", "TargetAxis.X", "TargetAxis.Y", "TargetAxis.Z", "bDiscoverable", "bEnabled"], outputs: &[] },
    ComponentInfo { name: "Component_Internal_InputSplitter", bricks: &["B_1x1_Gate_SeatControlSplitter"], inputs: &["Character"], outputs: &["InputForward", "InputMouseWheel", "InputPitch", "InputRight", "InputRoll", "InputUp", "InputYaw", "bPressedC", "bPressedE", "bPressedLeftMouse", "bPressedQ", "bPressedRightMouse"] },
    ComponentInfo { name: "Component_Internal_Joint_Wheel", bricks: &["B_Joint_Wheel", "B_Joint_Wheel_Micro"], inputs: &["Control_DriveAndSteer", "Damping", "DrivePower", "DriveSpeed", "JointDistance", "Steer", "SteerLimitDegree", "SteerPower", "SuspensionDamping", "SuspensionStiffness", "bAllowEngineSteerCorrect", "bCanBrake", "bDiscoverable", "bDriveWhenNotAttachedToEngine", "bEnabled", "bReversed", "bSteerEnabled", "bSuspensionEnabled"], outputs: &[] },
    ComponentInfo { name: "Component_Internal_Joint_Wheel_Suspension", bricks: &["B_Joint_Wheel_Micro_Suspension", "B_Joint_Wheel_Suspension"], inputs: &["Control_DriveAndSteer", "Damping", "DrivePower", "DriveSpeed", "JointDistance", "Steer", "SteerLimitDegree", "SteerPower", "SuspensionDamping", "SuspensionLength", "SuspensionOffset", "SuspensionStiffness", "bAllowEngineSteerCorrect", "bCanBrake", "bDiscoverable", "bDriveWhenNotAttachedToEngine", "bEnabled", "bReversed", "bSteerEnabled", "bSuspensionEnabled", "bWheelVisible"], outputs: &[] },
    ComponentInfo { name: "Component_Internal_Microchip", bricks: &["B_1x1_Microchip"], inputs: &[], outputs: &[] },
    ComponentInfo { name: "Component_Internal_Motor", bricks: &["B_Joint_Motor", "B_Joint_Motor_Micro"], inputs: &["Damping", "LimitAngle", "Power", "Speed", "bAnglesArePercentages", "bEnabled", "bLimitAngle"], outputs: &["CurrentAngle"] },
    ComponentInfo { name: "Component_Internal_MotorSlider", bricks: &["PB_MotorSliderJoint"], inputs: &["Damping", "Power", "Speed", "bEnabled", "bPositionsArePercentages"], outputs: &["CurrentPosition"] },
    ComponentInfo { name: "Component_Internal_ProjectileSpawner_Cannon", bricks: &["B_2x2_Cannon"], inputs: &["DamageMultiplier", "Direction", "FireRate", "FireSound", "Instigator", "NumberOfShots", "ProjectileClass", "ScaleMultiplier", "SpawnLocation", "SpawnMargin", "SpawnOffsetBias", "SpeedMultiplier", "SpreadConeAngle", "TargetEntity", "bEnabled", "bEnforceFireRate", "bSpreadBiasedTowardsCenter"], outputs: &["OnFired"] },
    ComponentInfo { name: "Component_Internal_Rerouter", bricks: &["B_1x1_Reroute_Node"], inputs: &["RER_Input"], outputs: &["RER_Output"] },
    ComponentInfo { name: "Component_Internal_RigidBearing", bricks: &["B_Joint_RigidBearing", "B_Joint_RigidBearing_Micro"], inputs: &["InterpMode", "SmoothTime", "TargetAngle", "TopSpeed", "bAnglesArePercentages"], outputs: &["CurrentAngle", "bStopped", "bWelded"] },
    ComponentInfo { name: "Component_Internal_RigidSlider", bricks: &["PB_RigidSliderJoint"], inputs: &["InterpMode", "SmoothTime", "TargetPosition", "TopSpeed", "bPositionsArePercentages"], outputs: &["CurrentPosition", "bStopped", "bWelded"] },
    ComponentInfo { name: "Component_Internal_Seat", bricks: &["B_Seat"], inputs: &["AirStrafeControl", "CameraOrigin", "CameraOriginOffset", "CameraOriginOffset.X", "CameraOriginOffset.Y", "CameraOriginOffset.Z", "ExitOffset", "ExitOffset.X", "ExitOffset.Y", "ExitOffset.Z", "FlightInvertXOverride", "FlightInvertYOverride", "PromptCustomLabel", "SeatMode", "ThirdPersonCameraRotation", "ThirdPersonCameraRotation.Pitch", "ThirdPersonCameraRotation.Roll", "ThirdPersonCameraRotation.Yaw", "ThirdPersonStartingZoom", "bAllowHeldItems", "bAllowNearbyInteraction", "bFlyingGroundControls", "bHiddenInteraction", "bRollCameraInThirdPerson", "bScaleCameraOriginOffsetWithZoom", "bStickyPlaneThrottle"], outputs: &["SittingCharacter", "bIsOccupied"] },
    ComponentInfo { name: "Component_Internal_Servo", bricks: &["B_Joint_Servo", "B_Joint_Servo_Micro"], inputs: &["ActiveDamping", "Damping", "ForceLimit", "LimitAngle", "Power", "TargetAngle", "bAnglesArePercentages", "bEnabled", "bLimitAngle"], outputs: &["CurrentAngle", "bStopped"] },
    ComponentInfo { name: "Component_Internal_ServoSlider", bricks: &["PB_ServoSliderJoint"], inputs: &["Damping", "Exponent", "Power", "TargetPosition", "TopSpeed", "bEnabled", "bPositionsArePercentages"], outputs: &["CurrentPosition", "bStopped"] },
    ComponentInfo { name: "Component_Internal_Slider", bricks: &["PB_SliderJoint"], inputs: &["Damping", "bPositionsArePercentages"], outputs: &["CurrentPosition"] },
    ComponentInfo { name: "Component_Internal_Socket", bricks: &["B_Joint_Socket", "B_Joint_Socket_Micro"], inputs: &[], outputs: &[] },
    ComponentInfo { name: "Component_Internal_Thruster", bricks: &["B_2x2_Thruster"], inputs: &["Control_DriveAndSteer", "Force", "ForceApplication", "Pitch", "Throttle", "Yaw", "bDiscoverable", "bEnabled", "bSpawnLight"], outputs: &[] },
    ComponentInfo { name: "Component_Internal_WeightBrick", bricks: &["B_1x1_Gate_WeightBrick"], inputs: &["Mass", "MassOffset", "MassOffset.X", "MassOffset.Y", "MassOffset.Z", "MassSize", "MassSize.X", "MassSize.Y", "MassSize.Z"], outputs: &[] },
    ComponentInfo { name: "Component_Internal_WheelEngine", bricks: &["B_1x1_Gate_WheelEngineSlim", "B_Vehicle_Engine"], inputs: &["ArcadeAeroAuthorityFadeEndSpeed", "ArcadeAeroAuthorityFadeStartSpeed", "ArcadeAirGripResponseTime", "ArcadeMaxLateralAccelerationGs", "ArcadePitchRate", "ArcadeResponseTime", "ArcadeRollRate", "ArcadeYawRate", "AudioDescriptor", "CenterOfSteering", "Character", "CustomMass", "CustomMassVerticalOffset", "DriveAcceleratingPowerMultiplier", "DriveBrakingPowerMultiplier", "DriveDampingMultiplier", "DriveInterpSpeed", "DriveSpeed", "FlightHandling", "FlightTopSpeed", "GlideTrimStrength", "GlideTrimTargetSpeedMultiplier", "HorizontalSteeringRollMix", "HorizontalSteeringYawMix", "KeyboardSteeringRollMix", "KeyboardSteeringYawMix", "LiftMultiplier", "ManualControlMode", "ManualInput_Drive", "ManualInput_Pitch", "ManualInput_Roll", "ManualInput_Steer", "MassDistribution", "PhysicalPitchDampingResponseTime", "PhysicalRollDampingResponseTime", "PhysicalYawDampingResponseTime", "SteerInterpSpeed", "SteerLimitDegree", "SteerLimitSpeedFalloff", "SteerPowerMultiplier", "TankSteerSpeedMultiplier", "ThrustMultiplier", "WaterDriveForce", "WaterSteeringForce", "WheelFrictionMultiplier", "bAutoRight", "bAutodiscoverAerodynamicSurfaces", "bAutodiscoverGyroscopes", "bAutodiscoverThrusters", "bAutodiscoverWheels", "bDisableInWorldControlDiagnostics", "bEnableAerodynamicRateDamping", "bEnableAirBraking", "bEnableGlideTrim", "bEnableManualControl", "bEnabled", "bManualInput_Brake", "bTankSteering"], outputs: &["Control_DriveAndSteer", "Speed", "bStalling"] },
    ComponentInfo { name: "Component_ItemSpawn", bricks: &[], inputs: &["DamageMultiplier", "ItemNameOverride", "PickupAnimationAxis", "PickupAnimationPhase", "PickupBobHeight", "PickupBobSpeed", "PickupClass", "PickupMeshColors", "PickupMinigameResetRespawnDelay", "PickupOffsetDirection", "PickupOffsetDistance", "PickupRespawnTime", "PickupRotation", "PickupRotation.Pitch", "PickupRotation.Roll", "PickupRotation.Yaw", "PickupScale", "PickupSpinSpeed", "ProjectileOverride", "WeaponSpeedMultiplier", "bOverridePickupColors", "bPickupAnimationAxisLocal", "bPickupAnimationEnabled", "bPickupAutoDisableOnPickup", "bPickupEnabled", "bPickupRespawnOnMinigameReset", "bRenderTranslucentWhenDisabled"], outputs: &["bShowPickupEnabled"] },
    ComponentInfo { name: "Component_OneShotAudioEmitter", bricks: &["B_1x1_SoundEmitter"], inputs: &["AudioDescriptor", "InnerRadius", "MaxDistance", "PitchMultiplier", "Play", "RepeatCount", "RepeatTime", "RepeatVariance", "Stop", "VolumeMultiplier", "bEnableRepeat", "bSpatialization"], outputs: &[] },
    ComponentInfo { name: "Component_PointLight", bricks: &[], inputs: &["Brightness", "Color", "Color.A", "Color.B", "Color.G", "Color.R", "Radius", "RayTracingVisibility", "bCastShadows", "bEnabled", "bMatchBrickShape", "bUseBrickColor"], outputs: &[] },
    ComponentInfo { name: "Component_ProjectileSpawner", bricks: &[], inputs: &["DamageMultiplier", "Direction", "FireRate", "FireSound", "Instigator", "NumberOfShots", "ProjectileClass", "ScaleMultiplier", "SpawnLocation", "SpawnMargin", "SpawnOffsetBias", "SpeedMultiplier", "SpreadConeAngle", "TargetEntity", "bEnabled", "bEnforceFireRate", "bSpreadBiasedTowardsCenter"], outputs: &["OnFired"] },
    ComponentInfo { name: "Component_SpawnPoint", bricks: &["B_SpawnPoint"], inputs: &["bEnable", "bRotatePlayerGravityOnSpawn"], outputs: &[] },
    ComponentInfo { name: "Component_SpotLight", bricks: &[], inputs: &["Brightness", "Color", "Color.A", "Color.B", "Color.G", "Color.R", "InnerConeAngle", "OuterConeAngle", "Radius", "RayTracingVisibility", "Rotation", "Rotation.Pitch", "Rotation.Roll", "Rotation.Yaw", "bCastShadows", "bEnabled", "bUseBrickColor"], outputs: &[] },
    ComponentInfo { name: "Component_Switch", bricks: &[], inputs: &["InteractSound", "PromptCustomLabel", "bAllowNearbyInteraction", "bHiddenInteraction"], outputs: &["Character", "bEnabled"] },
    ComponentInfo { name: "Component_Target", bricks: &["B_2x2F_Target"], inputs: &["OnTime"], outputs: &["CharacterThatJustHit", "Damage", "WeaponNameThatJustHit", "WeaponThatJustHit", "bJustHit"] },
    ComponentInfo { name: "Component_TextDisplay", bricks: &[], inputs: &["Anchor", "Anchor.X", "Anchor.Y", "Billboard", "Color", "Color.A", "Color.B", "Color.G", "Color.R", "Face", "Font", "GraffitiAngleLimit", "GraffitiDepthLimit", "GraffitiLayer", "Kerning", "LineHeight", "LineOffset", "Material", "MaterialSlider", "Offset", "Offset.X", "Offset.Y", "Offset.Z", "Outline", "OutlineColor", "OutlineColor.A", "OutlineColor.B", "OutlineColor.G", "OutlineColor.R", "OutlineWidth", "Rotation", "ScuffWidth", "Shading", "ShadingWidth", "Skew", "Text", "Typeface", "WidthScale", "bAlignToWedge", "bEnabled", "bFlipShading", "bForeground", "bOverrideColor", "bOverrideOutlineColor", "bSharpCorners", "bSharpOutlines"], outputs: &[] },
    ComponentInfo { name: "Component_Touch", bricks: &[], inputs: &["BeginTouchSound", "EndTouchSound", "bCollisionEnabled_Player", "bCollisionEnabled_Player1", "bCollisionEnabled_Player2", "bCollisionEnabled_Player3"], outputs: &["Character", "TouchCount", "bTouching"] },
    ComponentInfo { name: "Component_WireGraph_PlayAudioAt", bricks: &["B_1x1_Gate_Exec_Entity_PlayAudioAt"], inputs: &["Entity", "Exec", "InnerRadius", "MaxDistance", "PitchMultiplier", "VolumeMultiplier", "bSpatialization"], outputs: &["ExecOut"] },
];

/// Look up a component by its full type name.
pub fn component(name: &str) -> Option<&'static ComponentInfo> {
    COMPONENTS
        .binary_search_by(|c| c.name.cmp(name))
        .ok()
        .map(|i| &COMPONENTS[i])
}