WorldPositionOffset Shifts Center in XY

Solved it!

float4 NewPos = float4(InPosition.xyz, 1.f);
float4 NewPosTmp = NewPos;
float3 NewScale = (InScale * In2Scale);
float3 NewOffset = (InOffset);
float4x4 TransformMat1 = {
	/*M[0][0]*/ NewScale.x,	/*M[1][0]*/ 0.f,			/*M[2][0]*/  0.f,		 0.f,
	/*M[0][1]*/ 0.f,		/*M[1][1]*/ NewScale.y,		/*M[2][1]*/  0.f,		 0.f,
	/*M[0][2]*/ 0.f,		/*M[1][2]*/ 0.f,			/*M[2][2]*/  1.f,	 	 0.f,
				0.0f,					0.0f,						 0.0f,		 1.0f
};

float4x4 TransformMat2 = {
	/*M[0][0]*/ 1.f,		/*M[1][0]*/ 0.f,			/*M[2][0]*/  0.f,		 NewOffset.x,
	/*M[0][1]*/ 0.f,		/*M[1][1]*/ 1.f,			/*M[2][1]*/  0.f,		 NewOffset.y,
	/*M[0][2]*/ 0.f,		/*M[1][2]*/ 0.f,			/*M[2][2]*/  1.f,	 	 NewOffset.z,
				0.0f,					0.0f,						 0.0f,		 1.0f
};

NewPos = mul(TransformMat2, NewPos);
NewPos = mul(TransformMat1, NewPos);

float4x4 TransformMat4 = {
	/*M[0][0]*/ 1.f,		/*M[1][0]*/ 0.f,			/*M[2][0]*/  0.f,		 In2Offset.x,
	/*M[0][1]*/ 0.f,		/*M[1][1]*/ 1.f,			/*M[2][1]*/  0.f,		 In2Offset.y,
	/*M[0][2]*/ 0.f,		/*M[1][2]*/ 0.f,			/*M[2][2]*/  1.f,	 	 In2Offset.z,
				0.0f,					0.0f,						 0.0f,		 1.0f
};

NewPos = mul(TransformMat4, NewPos);

additional i need to subtract the LocalPosition before i pass it into the WorldPositionOffset