399 lines
14 KiB
C#
399 lines
14 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Runtime.CompilerServices;
|
|
using Cpp2IlInjected;
|
|
using RecRoom.Avatars;
|
|
using RecRoom.Avatars.Face;
|
|
using RecRoom.Core;
|
|
using RecRoom.Core.Screens.PlayerController;
|
|
using UnityEngine;
|
|
|
|
namespace RecRoom.Players.Puppet
|
|
{
|
|
// Token: 0x0200287E RID: 10366
|
|
[Token(Token = "0x200287E")]
|
|
public class AnimatedPlayerPuppet : PlayerPuppet
|
|
{
|
|
// Token: 0x170030D7 RID: 12503
|
|
// (get) Token: 0x060116E1 RID: 71393 RVA: 0x003F7AEC File Offset: 0x003F5CEC
|
|
[Token(Token = "0x170030D7")]
|
|
protected override PBFNANEPIFO PDOJHGJMNPH
|
|
{
|
|
[Token(Token = "0x60116E1")]
|
|
[Address(RVA = "0xE25F30", Offset = "0xE24D30", VA = "0x180E25F30", Slot = "5")]
|
|
get
|
|
{
|
|
/*
|
|
An exception occurred when decompiling this method (060116E1)
|
|
|
|
ICSharpCode.Decompiler.DecompilerException: Error decompiling PBFNANEPIFO RecRoom.Players.Puppet.AnimatedPlayerPuppet::APDMDPBGDPL()
|
|
|
|
---> System.Exception: Basic block has to end with unconditional control flow.
|
|
{
|
|
Block_0:
|
|
stloc:JFDGOAOGGHD(var_0_0E, newobj:JFDGOAOGGHD(JFDGOAOGGHD::.ctor))
|
|
stfld:JFDGOAOGGHD(AnimatedPlayerPuppet::DIEPOPNJNCO, ldloc:AnimatedPlayerPuppet(this), ldloc:JFDGOAOGGHD(var_0_0E))
|
|
}
|
|
|
|
at ICSharpCode.Decompiler.ILAst.ILAstOptimizer.FlattenBasicBlocks(ILNode node) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\ILAst\ILAstOptimizer.cs:line 1852
|
|
at ICSharpCode.Decompiler.ILAst.ILAstOptimizer.Optimize(DecompilerContext context, ILBlock method, AutoPropertyProvider autoPropertyProvider, StateMachineKind& stateMachineKind, MethodDef& inlinedMethod, AsyncMethodDebugInfo& asyncInfo, ILAstOptimizationStep abortBeforeStep) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\ILAst\ILAstOptimizer.cs:line 355
|
|
at ICSharpCode.Decompiler.Ast.AstMethodBodyBuilder.CreateMethodBody(IEnumerable`1 parameters, MethodDebugInfoBuilder& builder) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstMethodBodyBuilder.cs:line 123
|
|
at ICSharpCode.Decompiler.Ast.AstMethodBodyBuilder.CreateMethodBody(MethodDef methodDef, DecompilerContext context, AutoPropertyProvider autoPropertyProvider, IEnumerable`1 parameters, Boolean valueParameterIsKeyword, StringBuilder sb, MethodDebugInfoBuilder& stmtsBuilder) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstMethodBodyBuilder.cs:line 88
|
|
--- End of inner exception stack trace ---
|
|
at ICSharpCode.Decompiler.Ast.AstMethodBodyBuilder.CreateMethodBody(MethodDef methodDef, DecompilerContext context, AutoPropertyProvider autoPropertyProvider, IEnumerable`1 parameters, Boolean valueParameterIsKeyword, StringBuilder sb, MethodDebugInfoBuilder& stmtsBuilder) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstMethodBodyBuilder.cs:line 92
|
|
at ICSharpCode.Decompiler.Ast.AstBuilder.AddMethodBody(EntityDeclaration methodNode, EntityDeclaration& updatedNode, MethodDef method, IEnumerable`1 parameters, Boolean valueParameterIsKeyword, MethodKind methodKind) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstBuilder.cs:line 1663
|
|
*/;
|
|
}
|
|
}
|
|
|
|
// Token: 0x170030D8 RID: 12504
|
|
// (get) Token: 0x060116E2 RID: 71394 RVA: 0x0000220F File Offset: 0x0000040F
|
|
[Token(Token = "0x170030D8")]
|
|
protected override PlayerAvatarDisplay.NEHFHAEIMKF CFJPDKKNGEE
|
|
{
|
|
[Token(Token = "0x60116E2")]
|
|
[Address(RVA = "0x460D40", Offset = "0x45FB40", VA = "0x180460D40", Slot = "8")]
|
|
get
|
|
{
|
|
throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
|
|
}
|
|
}
|
|
|
|
// Token: 0x060116E3 RID: 71395 RVA: 0x003F7B10 File Offset: 0x003F5D10
|
|
[Token(Token = "0x60116E3")]
|
|
[Address(RVA = "0xE26840", Offset = "0xE25640", VA = "0x180E26840")]
|
|
[ContextMenu("Test Animation")]
|
|
public void TestAnimation()
|
|
{
|
|
}
|
|
|
|
// Token: 0x060116E4 RID: 71396 RVA: 0x003F7B20 File Offset: 0x003F5D20
|
|
[Token(Token = "0x60116E4")]
|
|
[Address(RVA = "0xE25F90", Offset = "0xE24D90", VA = "0x180E25F90")]
|
|
private void Awake()
|
|
{
|
|
float num = this.fidgetFadeTime;
|
|
PlayerAnimation playerAnimation = new PlayerAnimation();
|
|
PlayerFidgetAnimationSet playerFidgetAnimationSet = this.fidgetAnimationSet;
|
|
this.LONPMDOPLEN = playerAnimation;
|
|
EOEOFMCNLOL<IReadOnlyList<PlayerAnimationAsset>> eoeofmcnlol = new EOEOFMCNLOL();
|
|
this.LMOKIFLNNLD = eoeofmcnlol;
|
|
}
|
|
|
|
// Token: 0x060116E5 RID: 71397 RVA: 0x003F7B5C File Offset: 0x003F5D5C
|
|
[Token(Token = "0x60116E5")]
|
|
[Address(RVA = "0xE265F0", Offset = "0xE253F0", VA = "0x180E265F0")]
|
|
protected void OnDestroy()
|
|
{
|
|
JFDGOAOGGHD diepopnjnco = this.DIEPOPNJNCO;
|
|
if (diepopnjnco != 0)
|
|
{
|
|
diepopnjnco.Dispose();
|
|
}
|
|
KFBABPAPIMB bhfniijepgg = this.BHFNIIJEPGG;
|
|
this.DIEPOPNJNCO = (ulong)0L;
|
|
if (bhfniijepgg != 0)
|
|
{
|
|
}
|
|
this.BHFNIIJEPGG = (ulong)0L;
|
|
}
|
|
|
|
// Token: 0x060116E6 RID: 71398 RVA: 0x003F7B98 File Offset: 0x003F5D98
|
|
[Token(Token = "0x60116E6")]
|
|
[Address(RVA = "0xE26880", Offset = "0xE25680", VA = "0x180E26880")]
|
|
private void Update()
|
|
{
|
|
PlayerAnimation lonpmdoplen = this.LONPMDOPLEN;
|
|
bool flag;
|
|
if (!flag)
|
|
{
|
|
IBHOLFCLKFB ggbgjpijihn = this.GGBGJPIJIHN;
|
|
PlayerAnimation lonpmdoplen2 = this.LONPMDOPLEN;
|
|
int num = 0;
|
|
if (ggbgjpijihn.IALPIEDKJGH(lonpmdoplen2, num != 0))
|
|
{
|
|
goto IL_42;
|
|
}
|
|
}
|
|
PlayerAnimationAsset playerAnimationAsset = ECNNGIFNNNM.NBMJEPIPHGC<PlayerAnimationAsset>(this.LMOKIFLNNLD.OBNBDDNFNDN());
|
|
PlayerAnimation lonpmdoplen3 = this.LONPMDOPLEN;
|
|
IL_42:
|
|
PlayerAnimation lonpmdoplen4 = this.LONPMDOPLEN;
|
|
int num2 = 0;
|
|
this.JEBCDECIGHG(this, lonpmdoplen4, GHLCJGAMKMG.BOTH_RIGHT_PRIMARY, (LBAPHGMNKIC)num2, num2 != 0, num2 != 0, num2 != 0);
|
|
PlayerFacialAnimator facialAnimator = base.MFMOOOFDFHJ;
|
|
Func<bool> isTalking = this.IsTalking;
|
|
if (isTalking != 0)
|
|
{
|
|
bool flag2 = isTalking() != null;
|
|
}
|
|
int num3 = 0;
|
|
facialAnimator.CBDLBHPIGNB = num3 != 0;
|
|
}
|
|
|
|
// Token: 0x060116E7 RID: 71399 RVA: 0x003F7C34 File Offset: 0x003F5E34
|
|
[Token(Token = "0x60116E7")]
|
|
[Address(RVA = "0xE26750", Offset = "0xE25550", VA = "0x180E26750")]
|
|
public void SetAvatarVisuals(MNHEFLIMKGO KJAFOCJMDIH, bool CCMCLPFEIKO = false)
|
|
{
|
|
if (this.BHFNIIJEPGG != 0)
|
|
{
|
|
}
|
|
if (!CCMCLPFEIKO)
|
|
{
|
|
Action action = delegate
|
|
{
|
|
AnimatedPlayerPuppet <>4__this = this;
|
|
MNHEFLIMKGO avatar2 = KJAFOCJMDIH;
|
|
<>4__this.IHOFENLOFIM(avatar2);
|
|
};
|
|
KFBABPAPIMB kfbabpapimb = this.JGIPMJPPCBM(action);
|
|
this.BHFNIIJEPGG = kfbabpapimb;
|
|
return;
|
|
}
|
|
MNHEFLIMKGO avatar = KJAFOCJMDIH;
|
|
throw new NullReferenceException();
|
|
}
|
|
|
|
// Token: 0x060116E8 RID: 71400 RVA: 0x003F7C8C File Offset: 0x003F5E8C
|
|
[Token(Token = "0x60116E8")]
|
|
[Address(RVA = "0xE26230", Offset = "0xE25030", VA = "0x180E26230")]
|
|
private void IHOFENLOFIM(MNHEFLIMKGO KJAFOCJMDIH)
|
|
{
|
|
JFDGOAOGGHD jfdgoaogghd = JFDGOAOGGHD.KGPKEFGANCP(KJAFOCJMDIH);
|
|
this.DIEPOPNJNCO = jfdgoaogghd;
|
|
if (jfdgoaogghd != 0)
|
|
{
|
|
bool isCompleted = ((IAsyncResult)this).IsCompleted;
|
|
return;
|
|
}
|
|
Debug.LogError("Animated Player Puppet Source could not be generated");
|
|
}
|
|
|
|
// Token: 0x060116E9 RID: 71401 RVA: 0x003F7CC0 File Offset: 0x003F5EC0
|
|
[Token(Token = "0x60116E9")]
|
|
[Address(RVA = "0xE26710", Offset = "0xE25510", VA = "0x180E26710")]
|
|
public void PlayEmote(PlayerEmotes.MGIGFNJOGEM HCPNGDMELND, float DIJKHBILKOM = 0f)
|
|
{
|
|
PlayerFacialAnimator facialAnimator = base.MFMOOOFDFHJ;
|
|
}
|
|
|
|
// Token: 0x060116EA RID: 71402 RVA: 0x003F7CDC File Offset: 0x003F5EDC
|
|
[Token(Token = "0x60116EA")]
|
|
[Address(RVA = "0xE266D0", Offset = "0xE254D0", VA = "0x180E266D0")]
|
|
public void PlayAnimationOnce(object LHOMKMINCHH, NIPBJGMMMEF EKJHAMMOBBH, GHLCJGAMKMG MFKOJMHJPOC = GHLCJGAMKMG.BOTH_RIGHT_PRIMARY, bool JGGMJFMGMPB = false)
|
|
{
|
|
}
|
|
|
|
// Token: 0x060116EB RID: 71403 RVA: 0x003F7CEC File Offset: 0x003F5EEC
|
|
[Token(Token = "0x60116EB")]
|
|
[Address(RVA = "0xE26690", Offset = "0xE25490", VA = "0x180E26690")]
|
|
public void PlayAnimationLoop(object LHOMKMINCHH, NIPBJGMMMEF EKJHAMMOBBH, GHLCJGAMKMG MFKOJMHJPOC = GHLCJGAMKMG.BOTH_RIGHT_PRIMARY, bool JGGMJFMGMPB = false)
|
|
{
|
|
}
|
|
|
|
// Token: 0x060116EC RID: 71404 RVA: 0x003F7CFC File Offset: 0x003F5EFC
|
|
[Token(Token = "0x60116EC")]
|
|
[Address(RVA = "0xE26660", Offset = "0xE25460", VA = "0x180E26660")]
|
|
public void PlayAnimationFidget(object LHOMKMINCHH, NIPBJGMMMEF EKJHAMMOBBH, GHLCJGAMKMG MFKOJMHJPOC = GHLCJGAMKMG.BOTH_RIGHT_PRIMARY)
|
|
{
|
|
int num = 0;
|
|
this.JEBCDECIGHG(LHOMKMINCHH, EKJHAMMOBBH, MFKOJMHJPOC, (LBAPHGMNKIC)num, num != 0, num != 0, num != 0);
|
|
}
|
|
|
|
// Token: 0x060116ED RID: 71405 RVA: 0x003F7D18 File Offset: 0x003F5F18
|
|
[Token(Token = "0x60116ED")]
|
|
[Address(RVA = "0xE262D0", Offset = "0xE250D0", VA = "0x180E262D0")]
|
|
private void JEBCDECIGHG(object LHOMKMINCHH, NIPBJGMMMEF EKJHAMMOBBH, GHLCJGAMKMG MFKOJMHJPOC, LBAPHGMNKIC JMHKMOACHDG, bool IOOAMNLKLGP, bool KMNHDGCACPG, bool JGGMJFMGMPB)
|
|
{
|
|
if (EKJHAMMOBBH != 0)
|
|
{
|
|
int num = 0;
|
|
if (num < EKJHAMMOBBH)
|
|
{
|
|
num += num;
|
|
num++;
|
|
}
|
|
if (num != 0)
|
|
{
|
|
IBHOLFCLKFB.CINMKCEDCPG cinmkcedcpg = IBHOLFCLKFB.CINMKCEDCPG.OCJJLBLNMKA(EKJHAMMOBBH);
|
|
object lhomkminchh = cinmkcedcpg.LHOMKMINCHH;
|
|
float bpnofhafggc = cinmkcedcpg.BPNOFHAFGGC;
|
|
bool jggmjfmgmpb = cinmkcedcpg.JGGMJFMGMPB;
|
|
if (MFKOJMHJPOC == GHLCJGAMKMG.LEFT_ONLY || MFKOJMHJPOC == GHLCJGAMKMG.BOTH_LEFT_PRIMARY)
|
|
{
|
|
}
|
|
IBHOLFCLKFB ggbgjpijihn = this.GGBGJPIJIHN;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Token: 0x060116EE RID: 71406 RVA: 0x003F7D74 File Offset: 0x003F5F74
|
|
[Token(Token = "0x60116EE")]
|
|
[Address(RVA = "0xE261E0", Offset = "0xE24FE0", VA = "0x180E261E0")]
|
|
public void EndAnimation(object LHOMKMINCHH)
|
|
{
|
|
if (this.GGBGJPIJIHN.PINOKONDKMH(LHOMKMINCHH))
|
|
{
|
|
this.GGBGJPIJIHN.EIOHJEDGICK(true);
|
|
return;
|
|
}
|
|
}
|
|
|
|
// Token: 0x060116EF RID: 71407 RVA: 0x003F7DA4 File Offset: 0x003F5FA4
|
|
[Token(Token = "0x60116EF")]
|
|
[Address(RVA = "0xE25E20", Offset = "0xE24C20", VA = "0x180E25E20", Slot = "13")]
|
|
protected override void AGLEGENCIID()
|
|
{
|
|
IBHOLFCLKFB ggbgjpijihn = this.GGBGJPIJIHN;
|
|
float deltaTime = Time.deltaTime;
|
|
bool flag;
|
|
if (flag)
|
|
{
|
|
JFDGOAOGGHD diepopnjnco = this.DIEPOPNJNCO;
|
|
}
|
|
base.AGLEGENCIID();
|
|
}
|
|
|
|
// Token: 0x060116F0 RID: 71408 RVA: 0x003F7DD8 File Offset: 0x003F5FD8
|
|
[Token(Token = "0x60116F0")]
|
|
[Address(RVA = "0xE26100", Offset = "0xE24F00", VA = "0x180E26100")]
|
|
private NIPBJGMMMEF BJHAFNIOJHJ()
|
|
{
|
|
PlayerAnimation lonpmdoplen = this.LONPMDOPLEN;
|
|
bool flag;
|
|
if (!flag)
|
|
{
|
|
IBHOLFCLKFB ggbgjpijihn = this.GGBGJPIJIHN;
|
|
PlayerAnimation lonpmdoplen2 = this.LONPMDOPLEN;
|
|
int num = 0;
|
|
if (ggbgjpijihn.IALPIEDKJGH(lonpmdoplen2, num != 0))
|
|
{
|
|
goto IL_42;
|
|
}
|
|
}
|
|
PlayerAnimationAsset playerAnimationAsset = ECNNGIFNNNM.NBMJEPIPHGC<PlayerAnimationAsset>(this.LMOKIFLNNLD.OBNBDDNFNDN());
|
|
PlayerAnimation lonpmdoplen3 = this.LONPMDOPLEN;
|
|
IL_42:
|
|
PlayerAnimation lonpmdoplen4 = this.LONPMDOPLEN;
|
|
throw new NullReferenceException();
|
|
}
|
|
|
|
// Token: 0x060116F1 RID: 71409 RVA: 0x003F7E34 File Offset: 0x003F6034
|
|
[Token(Token = "0x60116F1")]
|
|
[Address(RVA = "0xE26550", Offset = "0xE25350", VA = "0x180E26550")]
|
|
private static PlayerAnimation OOAKAPBBBKG(float KNFPLBMCJDN)
|
|
{
|
|
return new PlayerAnimation();
|
|
}
|
|
|
|
// Token: 0x060116F2 RID: 71410 RVA: 0x003F7E4C File Offset: 0x003F604C
|
|
[Token(Token = "0x60116F2")]
|
|
[Address(RVA = "0xE26480", Offset = "0xE25280", VA = "0x180E26480")]
|
|
private static EOEOFMCNLOL<IReadOnlyList<PlayerAnimationAsset>> OMLPJHMBAGM(PlayerFidgetAnimationSet MAAOAKJOOKA, ScreenPlayerLocomotionAnimationContent.FidgetWeights AHBEOFEIMKE)
|
|
{
|
|
return new EOEOFMCNLOL();
|
|
}
|
|
|
|
// Token: 0x060116F3 RID: 71411 RVA: 0x003F7E64 File Offset: 0x003F6064
|
|
[Token(Token = "0x60116F3")]
|
|
[Address(RVA = "0xE269F0", Offset = "0xE257F0", VA = "0x180E269F0")]
|
|
public AnimatedPlayerPuppet()
|
|
{
|
|
int num;
|
|
IBHOLFCLKFB ibholfclkfb = new IBHOLFCLKFB(num != 0);
|
|
num = 0;
|
|
this.GGBGJPIJIHN = ibholfclkfb;
|
|
base..ctor();
|
|
}
|
|
|
|
// Token: 0x0400B34D RID: 45901
|
|
[FieldOffset(Offset = "0x58")]
|
|
[Token(Token = "0x400B34D")]
|
|
[SerializeField]
|
|
[Header("Animations")]
|
|
private PlayerAnimation testAnimation;
|
|
|
|
// Token: 0x0400B34E RID: 45902
|
|
[FieldOffset(Offset = "0x60")]
|
|
[Token(Token = "0x400B34E")]
|
|
[SerializeField]
|
|
private PlayerFidgetAnimationSet fidgetAnimationSet;
|
|
|
|
// Token: 0x0400B34F RID: 45903
|
|
[FieldOffset(Offset = "0x68")]
|
|
[Token(Token = "0x400B34F")]
|
|
[SerializeField]
|
|
public ScreenPlayerLocomotionAnimationContent.FidgetWeights fidgetWeights;
|
|
|
|
// Token: 0x0400B350 RID: 45904
|
|
[FieldOffset(Offset = "0x74")]
|
|
[Token(Token = "0x400B350")]
|
|
[SerializeField]
|
|
private float fidgetFadeTime = 0.2f;
|
|
|
|
// Token: 0x0400B351 RID: 45905
|
|
[FieldOffset(Offset = "0x78")]
|
|
[Token(Token = "0x400B351")]
|
|
private JFDGOAOGGHD DIEPOPNJNCO;
|
|
|
|
// Token: 0x0400B352 RID: 45906
|
|
[FieldOffset(Offset = "0x80")]
|
|
[Token(Token = "0x400B352")]
|
|
private readonly IBHOLFCLKFB GGBGJPIJIHN;
|
|
|
|
// Token: 0x0400B353 RID: 45907
|
|
[FieldOffset(Offset = "0x88")]
|
|
[Token(Token = "0x400B353")]
|
|
private KFBABPAPIMB BHFNIIJEPGG;
|
|
|
|
// Token: 0x0400B354 RID: 45908
|
|
[FieldOffset(Offset = "0x90")]
|
|
[Token(Token = "0x400B354")]
|
|
public Func<bool> IsTalking;
|
|
|
|
// Token: 0x0400B355 RID: 45909
|
|
[FieldOffset(Offset = "0x98")]
|
|
[Token(Token = "0x400B355")]
|
|
private PlayerAnimation LONPMDOPLEN;
|
|
|
|
// Token: 0x0400B356 RID: 45910
|
|
[FieldOffset(Offset = "0xA0")]
|
|
[Token(Token = "0x400B356")]
|
|
private EOEOFMCNLOL<IReadOnlyList<PlayerAnimationAsset>> LMOKIFLNNLD;
|
|
|
|
// Token: 0x0200287F RID: 10367
|
|
[Token(Token = "0x200287F")]
|
|
[CompilerGenerated]
|
|
private sealed class IGGGMMPKKCL
|
|
{
|
|
// Token: 0x060116F4 RID: 71412 RVA: 0x003F7E94 File Offset: 0x003F6094
|
|
[Token(Token = "0x60116F4")]
|
|
[Address(RVA = "0x3F5100", Offset = "0x3F3F00", VA = "0x1803F5100")]
|
|
public IGGGMMPKKCL()
|
|
{
|
|
}
|
|
|
|
// Token: 0x060116F5 RID: 71413 RVA: 0x003F7EA8 File Offset: 0x003F60A8
|
|
[Token(Token = "0x60116F5")]
|
|
[Address(RVA = "0xE28B30", Offset = "0xE27930", VA = "0x180E28B30")]
|
|
internal void <SetAvatarVisuals>b__0()
|
|
{
|
|
AnimatedPlayerPuppet animatedPlayerPuppet = this.<>4__this;
|
|
MNHEFLIMKGO mnheflimkgo = this.avatar;
|
|
animatedPlayerPuppet.IHOFENLOFIM(mnheflimkgo);
|
|
}
|
|
|
|
// Token: 0x0400B357 RID: 45911
|
|
[FieldOffset(Offset = "0x10")]
|
|
[Token(Token = "0x400B357")]
|
|
public AnimatedPlayerPuppet <>4__this;
|
|
|
|
// Token: 0x0400B358 RID: 45912
|
|
[FieldOffset(Offset = "0x18")]
|
|
[Token(Token = "0x400B358")]
|
|
public MNHEFLIMKGO avatar;
|
|
}
|
|
}
|
|
}
|