> For the complete documentation index, see [llms.txt](https://kinematicsoup.gitbook.io/reactor/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://kinematicsoup.gitbook.io/reactor/api-reference/ks.reactor.server/ks.reactor.server.ksbaserigidbody.md).

# Class ksBaseRigidBody

Namespace: [KS.Reactor.Server](/reactor/api-reference/ks.reactor.server.md)\
Assembly: KSReactor.dll

The base class for PhysX rigid bodies. When derived scripts are attached to entities, it allows the entity to be controlled by the physics simulation with its properties such as mass, drag, and velocity. If isKinematic is enabled, forces, collisions or joints will not affect the rigidbody, but it will push regular dynamic actors out of the way when moved.

```csharp
public abstract class ksBaseRigidBody : ksServerEntityScript, ksScript<ksIServerEntity, ksServerEntityScript>.IInternals
```

#### Inheritance

[object](https://learn.microsoft.com/dotnet/api/system.object) â† ksScript\<ksIServerEntity, ksServerEntityScript> â† [ksServerEntityScript](/reactor/api-reference/ks.reactor.server/ks.reactor.server.ksserverentityscript.md) â† [ksBaseRigidBody](/reactor/api-reference/ks.reactor.server/ks.reactor.server.ksbaserigidbody.md)

#### Derived

[ksRigidBody](/reactor/api-reference/ks.reactor.server/ks.reactor.server.ksrigidbody.md), [ksRigidBody2DView](/reactor/api-reference/ks.reactor.server/ks.reactor.server.ksrigidbody2dview.md)

#### Implements

ksScript\<ksIServerEntity, ksServerEntityScript>.IInternals

#### Inherited Members

[ksServerEntityScript.Entity](/reactor/api-reference/ks.reactor.server/ks.reactor.server.ksserverentityscript.md#KS_Reactor_Server_ksServerEntityScript_Entity), [ksServerEntityScript.Room](/reactor/api-reference/ks.reactor.server/ks.reactor.server.ksserverentityscript.md#KS_Reactor_Server_ksServerEntityScript_Room), [ksServerEntityScript.Time](/reactor/api-reference/ks.reactor.server/ks.reactor.server.ksserverentityscript.md#KS_Reactor_Server_ksServerEntityScript_Time), [ksServerEntityScript.Physics](/reactor/api-reference/ks.reactor.server/ks.reactor.server.ksserverentityscript.md#KS_Reactor_Server_ksServerEntityScript_Physics), [ksServerEntityScript.Properties](/reactor/api-reference/ks.reactor.server/ks.reactor.server.ksserverentityscript.md#KS_Reactor_Server_ksServerEntityScript_Properties), [ksServerEntityScript.Transform](/reactor/api-reference/ks.reactor.server/ks.reactor.server.ksserverentityscript.md#KS_Reactor_Server_ksServerEntityScript_Transform), [ksServerEntityScript.Transform2D](/reactor/api-reference/ks.reactor.server/ks.reactor.server.ksserverentityscript.md#KS_Reactor_Server_ksServerEntityScript_Transform2D), ksScript\<ksIServerEntity, ksServerEntityScript>.InstanceType, ksScript\<ksIServerEntity, ksServerEntityScript>.IsAttached, ksScript\<ksIServerEntity, ksServerEntityScript>.Scripts, ksScript\<ksIServerEntity, ksServerEntityScript>.Assets, ksScript\<ksIServerEntity, ksServerEntityScript>.Attached(), ksScript\<ksIServerEntity, ksServerEntityScript>.Initialize(), ksScript\<ksIServerEntity, ksServerEntityScript>.Detached(), ksScript\<ksIServerEntity, ksServerEntityScript>.Clone(), [object.Equals(object)](https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals\(system-object\)), [object.Equals(object, object)](https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals\(system-object-system-object\)), [object.GetHashCode()](https://learn.microsoft.com/dotnet/api/system.object.gethashcode), [object.GetType()](https://learn.microsoft.com/dotnet/api/system.object.gettype), [object.MemberwiseClone()](https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone), [object.ReferenceEquals(object, object)](https://learn.microsoft.com/dotnet/api/system.object.referenceequals), [object.ToString()](https://learn.microsoft.com/dotnet/api/system.object.tostring)

## Constructors

### ksBaseRigidBody() <a href="#ks_reactor_server_ksbaserigidbody__ctor" id="ks_reactor_server_ksbaserigidbody__ctor"></a>

Constructor.

```csharp
public ksBaseRigidBody()
```

## Fields

### m\_inKinematicList <a href="#ks_reactor_server_ksbaserigidbody_m_inkinematiclist" id="ks_reactor_server_ksbaserigidbody_m_inkinematiclist"></a>

```csharp
protected bool m_inKinematicList
```

#### Field Value

[bool](https://learn.microsoft.com/dotnet/api/system.boolean)

### m\_kinematicMotionBodies <a href="#ks_reactor_server_ksbaserigidbody_m_kinematicmotionbodies" id="ks_reactor_server_ksbaserigidbody_m_kinematicmotionbodies"></a>

```csharp
protected static ksAtomicList<ksBaseRigidBody> m_kinematicMotionBodies
```

#### Field Value

ksAtomicList<[ksBaseRigidBody](/reactor/api-reference/ks.reactor.server/ks.reactor.server.ksbaserigidbody.md)>

## Properties

### AngularDrag <a href="#ks_reactor_server_ksbaserigidbody_angulardrag" id="ks_reactor_server_ksbaserigidbody_angulardrag"></a>

Angular damping.

```csharp
public float AngularDrag { get; set; }
```

#### Property Value

[float](https://learn.microsoft.com/dotnet/api/system.single)

### AutoCalculateCenterOfMass <a href="#ks_reactor_server_ksbaserigidbody_autocalculatecenterofmass" id="ks_reactor_server_ksbaserigidbody_autocalculatecenterofmass"></a>

Is [CenterOfMass](#KS_Reactor_Server_ksBaseRigidBody_CenterOfMass) calculated automatically from the colliders attached to this rigidbody?

```csharp
public bool AutoCalculateCenterOfMass { get; set; }
```

#### Property Value

[bool](https://learn.microsoft.com/dotnet/api/system.boolean)

### AutoCalculateInertiaTensor <a href="#ks_reactor_server_ksbaserigidbody_autocalculateinertiatensor" id="ks_reactor_server_ksbaserigidbody_autocalculateinertiatensor"></a>

Are [InertiaTensor](#KS_Reactor_Server_ksBaseRigidBody_InertiaTensor) and [InertiaTensorRotation](#KS_Reactor_Server_ksBaseRigidBody_InertiaTensorRotation) calculated automatically from the colliders attached to this rigidbody?

```csharp
public bool AutoCalculateInertiaTensor { get; set; }
```

#### Property Value

[bool](https://learn.microsoft.com/dotnet/api/system.boolean)

### CenterOfMass <a href="#ks_reactor_server_ksbaserigidbody_centerofmass" id="ks_reactor_server_ksbaserigidbody_centerofmass"></a>

The rigidbody's center of mass in local space.

If [AutoCalculateCenterOfMass](#KS_Reactor_Server_ksBaseRigidBody_AutoCalculateCenterOfMass) is true, this is automatically calculated from the attached colliders.

```csharp
public ksVector3 CenterOfMass { get; set; }
```

#### Property Value

ksVector3

### CenterOfMassDirty <a href="#ks_reactor_server_ksbaserigidbody_centerofmassdirty" id="ks_reactor_server_ksbaserigidbody_centerofmassdirty"></a>

Does [CenterOfMass](#KS_Reactor_Server_ksBaseRigidBody_CenterOfMass) need to be recalculated?

```csharp
public bool CenterOfMassDirty { get; }
```

#### Property Value

[bool](https://learn.microsoft.com/dotnet/api/system.boolean)

### CollisionDetectionMode <a href="#ks_reactor_server_ksbaserigidbody_collisiondetectionmode" id="ks_reactor_server_ksbaserigidbody_collisiondetectionmode"></a>

The rigidbody's collision detection mode.

```csharp
public ksBaseRigidBody.CollisionDetectionModes CollisionDetectionMode { get; set; }
```

#### Property Value

[ksBaseRigidBody](/reactor/api-reference/ks.reactor.server/ks.reactor.server.ksbaserigidbody.md).[CollisionDetectionModes](/reactor/api-reference/ks.reactor.server/ks.reactor.server.ksbaserigidbody/ks.reactor.server.ksbaserigidbody.collisiondetectionmodes.md)

### Constraints <a href="#ks_reactor_server_ksbaserigidbody_constraints" id="ks_reactor_server_ksbaserigidbody_constraints"></a>

Controls which degrees of freedom are allowed for the simulation of this rigidbody.

```csharp
public ksRigidBodyConstraints Constraints { get; set; }
```

#### Property Value

ksRigidBodyConstraints

### DefaultMode <a href="#ks_reactor_server_ksbaserigidbody_defaultmode" id="ks_reactor_server_ksbaserigidbody_defaultmode"></a>

Determines if rigid bodies are 3D or 2D by default when spawning prefabs or loading the scene.

```csharp
public static ksRigidBodyModes DefaultMode { get; }
```

#### Property Value

ksRigidBodyModes

### Drag <a href="#ks_reactor_server_ksbaserigidbody_drag" id="ks_reactor_server_ksbaserigidbody_drag"></a>

Damping.

```csharp
public float Drag { get; set; }
```

#### Property Value

[float](https://learn.microsoft.com/dotnet/api/system.single)

### InertiaTensor <a href="#ks_reactor_server_ksbaserigidbody_inertiatensor" id="ks_reactor_server_ksbaserigidbody_inertiatensor"></a>

The rigidbody's inertia tensor, defined as a diagonal matrix in a reference frame positioned at the [CenterOfMass](#KS_Reactor_Server_ksBaseRigidBody_CenterOfMass) and rotated by [InertiaTensorRotation](#KS_Reactor_Server_ksBaseRigidBody_InertiaTensorRotation). The higher the inertia tensor value is for an axis, the more torque is required to rotate the body around that axis. Zero is treated an infinite, making it impossible to rotate around that axis.

If [AutoCalculateInertiaTensor](#KS_Reactor_Server_ksBaseRigidBody_AutoCalculateInertiaTensor) is true, this is automatically calculated from the attached colliders.

```csharp
public ksVector3 InertiaTensor { get; set; }
```

#### Property Value

ksVector3

### InertiaTensorDirty <a href="#ks_reactor_server_ksbaserigidbody_inertiatensordirty" id="ks_reactor_server_ksbaserigidbody_inertiatensordirty"></a>

Do [InertiaTensor](#KS_Reactor_Server_ksBaseRigidBody_InertiaTensor) and [InertiaTensorRotation](#KS_Reactor_Server_ksBaseRigidBody_InertiaTensorRotation) need to be recalculated?

```csharp
public bool InertiaTensorDirty { get; }
```

#### Property Value

[bool](https://learn.microsoft.com/dotnet/api/system.boolean)

### InertiaTensorRotation <a href="#ks_reactor_server_ksbaserigidbody_inertiatensorrotation" id="ks_reactor_server_ksbaserigidbody_inertiatensorrotation"></a>

The rotation of [InertiaTensor](#KS_Reactor_Server_ksBaseRigidBody_InertiaTensor).

If [AutoCalculateInertiaTensor](#KS_Reactor_Server_ksBaseRigidBody_AutoCalculateInertiaTensor) is true, this is automatically calculated from the attached colliders.

```csharp
public ksQuaternion InertiaTensorRotation { get; set; }
```

#### Property Value

ksQuaternion

### IsKinematic <a href="#ks_reactor_server_ksbaserigidbody_iskinematic" id="ks_reactor_server_ksbaserigidbody_iskinematic"></a>

If true, the entity will not be effected by gravity or other impulses, but may be moved around by setting translation and rotation from scripts. Cannot be set when the entity has an owner with the transform permission.

```csharp
public bool IsKinematic { get; set; }
```

#### Property Value

[bool](https://learn.microsoft.com/dotnet/api/system.boolean)

### IsSleeping <a href="#ks_reactor_server_ksbaserigidbody_issleeping" id="ks_reactor_server_ksbaserigidbody_issleeping"></a>

Is the rigidbody sleeping?

```csharp
public bool IsSleeping { get; }
```

#### Property Value

[bool](https://learn.microsoft.com/dotnet/api/system.boolean)

### Mass <a href="#ks_reactor_server_ksbaserigidbody_mass" id="ks_reactor_server_ksbaserigidbody_mass"></a>

Mass of the rigid body.

```csharp
public float Mass { get; set; }
```

#### Property Value

[float](https://learn.microsoft.com/dotnet/api/system.single)

### MaxAngularSpeed <a href="#ks_reactor_server_ksbaserigidbody_maxangularspeed" id="ks_reactor_server_ksbaserigidbody_maxangularspeed"></a>

The maximimum angular speed of the rigidbody measured in degrees per second. Range \[0, float.MaxValue).

```csharp
public float MaxAngularSpeed { get; set; }
```

#### Property Value

[float](https://learn.microsoft.com/dotnet/api/system.single)

### MaxDepenetrationSpeed <a href="#ks_reactor_server_ksbaserigidbody_maxdepenetrationspeed" id="ks_reactor_server_ksbaserigidbody_maxdepenetrationspeed"></a>

Maximum speed of a rigidbody when moving out of penetrating state. Range (0, float.MaxValue)

```csharp
public float MaxDepenetrationSpeed { get; set; }
```

#### Property Value

[float](https://learn.microsoft.com/dotnet/api/system.single)

### MaxLinearSpeed <a href="#ks_reactor_server_ksbaserigidbody_maxlinearspeed" id="ks_reactor_server_ksbaserigidbody_maxlinearspeed"></a>

The maximimum linear speed of the rigidbody. Range \[0, float.MaxValue).

```csharp
public float MaxLinearSpeed { get; set; }
```

#### Property Value

[float](https://learn.microsoft.com/dotnet/api/system.single)

### PhysXRigidBody <a href="#ks_reactor_server_ksbaserigidbody_physxrigidbody" id="ks_reactor_server_ksbaserigidbody_physxrigidbody"></a>

PhysX rigidbody.

```csharp
public pxRigidDynamic PhysXRigidBody { get; }
```

#### Property Value

[pxRigidDynamic](/reactor/api-reference/ks.reactor.server.physx/ks.reactor.server.physx.pxrigiddynamic.md)

### SleepThreshold <a href="#ks_reactor_server_ksbaserigidbody_sleepthreshold" id="ks_reactor_server_ksbaserigidbody_sleepthreshold"></a>

The mass-normalized energy threshold, below which objects start going to sleep. Range \[0, float.MaxValue)

```csharp
public float SleepThreshold { get; set; }
```

#### Property Value

[float](https://learn.microsoft.com/dotnet/api/system.single)

### SolverIterations <a href="#ks_reactor_server_ksbaserigidbody_solveriterations" id="ks_reactor_server_ksbaserigidbody_solveriterations"></a>

SolverIterations determines how accurately Rigidbody joints and collision contacts are resolved. Range \[1, 255]

```csharp
public uint SolverIterations { get; set; }
```

#### Property Value

[uint](https://learn.microsoft.com/dotnet/api/system.uint32)

### SolverVelocityIterations <a href="#ks_reactor_server_ksbaserigidbody_solvervelocityiterations" id="ks_reactor_server_ksbaserigidbody_solvervelocityiterations"></a>

SolverVelocityIterations affects how how accurately Rigidbody joints and collision contacts are resolved. Range \[0, 255]

```csharp
public uint SolverVelocityIterations { get; set; }
```

#### Property Value

[uint](https://learn.microsoft.com/dotnet/api/system.uint32)

### UseGravity <a href="#ks_reactor_server_ksbaserigidbody_usegravity" id="ks_reactor_server_ksbaserigidbody_usegravity"></a>

If true, the entity will be affected by the scene gravity.

```csharp
public bool UseGravity { get; set; }
```

#### Property Value

[bool](https://learn.microsoft.com/dotnet/api/system.boolean)

### WorldCenterOfMass <a href="#ks_reactor_server_ksbaserigidbody_worldcenterofmass" id="ks_reactor_server_ksbaserigidbody_worldcenterofmass"></a>

The center of mass of the rigidbody in world space.

```csharp
public ksVector3 WorldCenterOfMass { get; set; }
```

#### Property Value

ksVector3

## Methods

### AddExplosiveForce(ksVector3, float, float, Interpolation, float, ksForceMode, List\<ksCollider>) <a href="#ks_reactor_server_ksbaserigidbody_addexplosiveforce_ks_reactor_ksvector3_system_single_system_single" id="ks_reactor_server_ksbaserigidbody_addexplosiveforce_ks_reactor_ksvector3_system_single_system_single"></a>

Applies an explosive force to the rigid body at the point on the rigid body nearest to the `origin` of the explosion. If the rigidbody has no non-trigger colliders, no force is applied. The force is weaker the further this point is from the explosion `origin`. The force points in the direction of a line starting at the explosion `origin` and ending at the nearest point where the force is applied. If the rigid body overlaps the explosion `origin`, the rigid body's center of mass is used as the end point for calculating the force direction instead.

```csharp
public void AddExplosiveForce(ksVector3 origin, float radius, float force, ksMath.Interpolation falloff = Interpolation.LINEAR, float upwardsModifier = 0, ksForceMode mode = ksForceMode.IMPULSE, List<ksCollider> colliders = null)
```

#### Parameters

`origin` ksVector3

The origin of the explosion.

`radius` [float](https://learn.microsoft.com/dotnet/api/system.single)

The explosion radius. If zero, the full `force` is used regardless of the distance from the `origin`, and `falloff` is ignored. If less than zero, no force is applied.

`force` [float](https://learn.microsoft.com/dotnet/api/system.single)

How much force to apply at the `origin` of the explosion.

`falloff` ksMath.Interpolation

The falloff equation type for calculating the force at a distance from the `origin`. Use [CONSTANT](/reactor/api-reference/ks.reactor/ks.reactor.ksmath/ks.reactor.ksmath.interpolation.md#KS_Reactor_ksMath_Interpolation_CONSTANT) to use the full force if the distance is less than `radius`.

`upwardsModifier` [float](https://learn.microsoft.com/dotnet/api/system.single)

When calculating the force direction, the `origin` is shifted down this amount to shift the resulting direction upwards and make the explosion lift object upwards.

`mode` ksForceMode

The type of force to apply. Defaults to impulse.

`colliders` [List](https://learn.microsoft.com/dotnet/api/system.collections.generic.list-1)<[ksCollider](/reactor/api-reference/ks.reactor.server/ks.reactor.server.kscollider.md)>

List of colliders to consider for finding the nearest point. If null, all enabled non-trigger colliders are used.

### AddForceAtPosition(ksVector3, ksVector3, ksForceMode) <a href="#ks_reactor_server_ksbaserigidbody_addforceatposition_ks_reactor_ksvector3_ks_reactor_ksvector3_ks_re" id="ks_reactor_server_ksbaserigidbody_addforceatposition_ks_reactor_ksvector3_ks_reactor_ksvector3_ks_re"></a>

Adds a force to the rigidbody at a position in world space.

```csharp
public void AddForceAtPosition(ksVector3 force, ksVector3 position, ksForceMode mode = ksForceMode.FORCE)
```

#### Parameters

`force` ksVector3

Force to add.

`position` ksVector3

Position in world space.

`mode` ksForceMode

Determines how the force is applied.

### ApplyKinematicMotion() <a href="#ks_reactor_server_ksbaserigidbody_applykinematicmotion" id="ks_reactor_server_ksbaserigidbody_applykinematicmotion"></a>

Applies kinematic motion.

```csharp
protected abstract void ApplyKinematicMotion()
```

### Attached() <a href="#ks_reactor_server_ksbaserigidbody_attached" id="ks_reactor_server_ksbaserigidbody_attached"></a>

Attaches the dynamic actor to the entity. Removes the existing actor from the entity and keeps a reference to it so that it can be reattached when this script is detached.

```csharp
public override void Attached()
```

### BuildMassProperties() <a href="#ks_reactor_server_ksbaserigidbody_buildmassproperties" id="ks_reactor_server_ksbaserigidbody_buildmassproperties"></a>

Builds [InertiaTensor](#KS_Reactor_Server_ksBaseRigidBody_InertiaTensor), [InertiaTensorRotation](#KS_Reactor_Server_ksBaseRigidBody_InertiaTensorRotation), and [CenterOfMass](#KS_Reactor_Server_ksBaseRigidBody_CenterOfMass) from the attached colliders, if the inertia tensor or center of mass are dirty and the corresponding [AutoCalculateInertiaTensor](#KS_Reactor_Server_ksBaseRigidBody_AutoCalculateInertiaTensor) and [AutoCalculateCenterOfMass](#KS_Reactor_Server_ksBaseRigidBody_AutoCalculateCenterOfMass) flags are true. You should not need to call this if [AutoSync](/reactor/api-reference/ks.reactor/ks.reactor.ksbasephysics.md#KS_Reactor_ksBasePhysics_AutoSync) is true, as they will be built automatically when needed if you access the getters.

```csharp
public void BuildMassProperties()
```

### ClearForce() <a href="#ks_reactor_server_ksbaserigidbody_clearforce" id="ks_reactor_server_ksbaserigidbody_clearforce"></a>

Clears the force on the rigidbody.

```csharp
public void ClearForce()
```

### ClearTorque() <a href="#ks_reactor_server_ksbaserigidbody_cleartorque" id="ks_reactor_server_ksbaserigidbody_cleartorque"></a>

Clears the torque on the rigidbody.

```csharp
public void ClearTorque()
```

### Clone() <a href="#ks_reactor_server_ksbaserigidbody_clone" id="ks_reactor_server_ksbaserigidbody_clone"></a>

Creates a copy of the rigid body.

```csharp
public override ksServerEntityScript Clone()
```

#### Returns

[ksServerEntityScript](/reactor/api-reference/ks.reactor.server/ks.reactor.server.ksserverentityscript.md)

Cloned rigid body.

### Detached() <a href="#ks_reactor_server_ksbaserigidbody_detached" id="ks_reactor_server_ksbaserigidbody_detached"></a>

Invokes the OnDetach handlers and performs clean up.

```csharp
public override void Detached()
```

### MarkMassPropertiesDirty(bool, bool) <a href="#ks_reactor_server_ksbaserigidbody_markmasspropertiesdirty_system_boolean_system_boolean" id="ks_reactor_server_ksbaserigidbody_markmasspropertiesdirty_system_boolean_system_boolean"></a>

Triggers a rebuild of [InertiaTensor](#KS_Reactor_Server_ksBaseRigidBody_InertiaTensor), [InertiaTensorRotation](#KS_Reactor_Server_ksBaseRigidBody_InertiaTensorRotation), and [CenterOfMass](#KS_Reactor_Server_ksBaseRigidBody_CenterOfMass) based on the attached colliders on the next Physics update of the next time they are accessed, if the corresponding [AutoCalculateInertiaTensor](#KS_Reactor_Server_ksBaseRigidBody_AutoCalculateInertiaTensor) and [AutoCalculateCenterOfMass](#KS_Reactor_Server_ksBaseRigidBody_AutoCalculateCenterOfMass) flags are true. Normally you do not need to call this function as it is called for you whenever you modify colliders. You only need to call this function if you are directly modifying the PhysX geometry instead of using [ksShapeCollider](/reactor/api-reference/ks.reactor.server/ks.reactor.server.ksshapecollider.md) methods and properties.

```csharp
public void MarkMassPropertiesDirty(bool dirtyInertiaTensor = true, bool dirtyCenterOfMass = true)
```

#### Parameters

`dirtyInertiaTensor` [bool](https://learn.microsoft.com/dotnet/api/system.boolean)

Should inertia tensor be marked dirty? Does nothing if [AutoCalculateInertiaTensor](#KS_Reactor_Server_ksBaseRigidBody_AutoCalculateInertiaTensor) is false.

`dirtyCenterOfMass` [bool](https://learn.microsoft.com/dotnet/api/system.boolean)

Should center of mass be marked dirty? Does nothing if [AutoCalculateCenterOfMass](#KS_Reactor_Server_ksBaseRigidBody_AutoCalculateCenterOfMass) is false.

### Sleep() <a href="#ks_reactor_server_ksbaserigidbody_sleep" id="ks_reactor_server_ksbaserigidbody_sleep"></a>

Forces the rigid body to sleep.

```csharp
public void Sleep()
```

### WakeUp() <a href="#ks_reactor_server_ksbaserigidbody_wakeup" id="ks_reactor_server_ksbaserigidbody_wakeup"></a>

Forces the rigid body to wake up.

```csharp
public void WakeUp()
```
