*E:@ƆF0vc:None GetMenuBar AddMenuItemSetHelp SetCursor GetValue2CoreUWindowModMenuExtensionSystem ActionAnimsActionTweenTimesActionAnimRatesUMenu ExecuteItem SetupMods GetNextItemAlphaNumericExecuteSetupSelectSortClearCreatedUTMenuCreateSubMenuPlayBreathingEWindow BreathAnims HideWindow ShowWindowRemoveAmpersandGetActionAnimSetMeshLaunchUWindow ClientClass PlayActionAddItemBeforeExecuteItemInsertItemAfter ListClass LoadModsTickAppend LMouseUpIsBreathAnimRemoveGetDefaultBreath DeSelect MessageBoxCloseUpResetUWindowSetMultiSkin ChangeTeam BeginPlayAnimEndServerChangeSkinLookPlayerSetupCaptionWeaponPriorityCaptionPlayerSetupHelpDisableExtensionCaptionReverseOrderHelpDisableExtensionHelpPreloadModsHelpPreloadModsCaptionReverseOrderCaption ClearSkinsOldModMenuClass UseSelectedbUpdatePlayerSelectionGUISkinMenuHelpGUISkinMenuCaptionLoadErrorTitle LoadErrorExecutingText LoadingTextMoreModsHelpMoreModsCaptionFocusOtherWindowbMoveWeaponPriorityCompareBreath3 SetCaption LoadClassesThrustSetupSentinelFlipEnhancedItemsEWindowPlayerMeshClientEWindowPlayerSetupClientEWindowPlayerClientWindowEWindowPlayerWindowEWindowPlayerSetupScrollClientModMenuConfigMenuEnableMenuExtensionEWindowMoreModsMenuEWindowModMenuListLookAndFeelModMenuItemEWindowLookAndFeelWaveIterateVoicesChat1 MenuCaption MenuHelpWeaponPriorityHelpEWindowModMenuItemEWindowModMenuConfigMenuHelpTaunt1Breath1 Victory1 ChallengeBreath2ConfigMenuCaptionPlayerSetupClass PlayerPawn NextPagePawnActorMesh OwnerWindowSetAcceptsFocusCreateWindowItemsbWindowVisibleWinLeftCaption WinHeight WinWidthWinTopRoot bDisabledVBorder TextBorderCursorGetPlayerOwnerPulldown_HBorder bRightGrowHBorder WaitCursorPulldown_VBorderUWindowPulldownMenuTIBITSBSNewPosGraphicSubMenu LookAndFeelMenuBar SplitterPulldown_ItemHeightPulldown_TextBorder SplitPos SelectedOptions ItemHeightUWindowListControlUWindowComboControlNewTeam LoopCountUWindowScrollingDialogClientUWindowPulldownMenuItem NextPlayerLeftClientWindowRightClientWindowTextureNormalCursorXCYUWindowRootWindowUMenuPlayerSetupClientNewItem ItemCountUWindowWindowPackage CurrentItemItemTop UWindowListUMenuRootWindowUMenuPlayerMeshClientUMenuOptionsMenuWeaponPriorityWindowClassLUMenuModMenuModHelpUMenuStatusBar MeshActorUMenuPlayerClientWindowUMenuModMenuItemUMenuMenuBarNumModClasses InitializedModItemNextModClass TeamCombo ClassCombo SkinCombo FaceComboOldInitializedNewMeshMyMesh StatusBar MenuItem MeshWindowModMenuClassUMenuModMenuList NextModDescModList InModList TempItemMenuItemClassNameBotpackVoicePackMetaClass NextAnim TextBufferNumPlayerClassesUTPlayerClientWindowUTPlayerWindowUTPlayerSetupScrollClientUTPlayerSetupClientVoicePackCombo NumVoices NextVoiceObjectNewPlayerClassUWindowHSplitterEnhancedPulldownMenuEnhancedPulldownMenuItemtmp AltValueConfigWindowMenu FunctionPlayerReplicationInfoDynamicLoadObjectWindowConsoleStaticSaveConfig ReturnValueGBSt ScriptTextijExecuteModItembStillLoading bAllLoaded bLoadedList bExecuteNowUsedRootHeight LoadingTickLastProcessed ConfigMenuGUIConfigMenuNextPageItemPriorityMenuPriorityItemWtempTest DrawScaleAnimSequenceTeamGetNextIntDesc DeltaTimeUWindowLookAndFeelResultbPreloadItemsbReverseOrderbMeshEnviroMapTournamentPlayer bCheckedPreItemCountWeaponPriorityClassName bLoadedOneModItemClass PreloadModsReverseOrderDisableExtensionMoveWeaponPriorityUpdatePlayerSetuppos ParentMenu NextDescMOwnerNextConsoleClassPlayerWindowClassEngine StrPropertyStructPropertyClassProperty bBreathingNameProperty AnimNameObjectPropertyFloatProperty CheckedAnimBoolProperty IntProperty ModListItem HelpString bNotFoundModMenuItemClass bDontShowReverseBytePropertyoSjޕc~c~~D~D~Dնmնmնmնmնmնmնmնmc~~D~Dնm nKk6\c~ܡ$Ōo o Po o ޏєxxxޏєޏєޏєυ;aGxxކPކPPo o ކPxxxޏєޏєxxކPPo o x> Ylllxxxxxxєxєxєxєxєϣ> YllްԌccPPuX*xxxxPPuX*އlxxxxx;aGxxxxo K4螗K4ޅ;aGxo ~D~D;aGo o o Po o lll;aG;aG;aGԌԌԌԌK4螅;aG;aG;aGXr]Configure Menu Extensionl]Configure the Menu Extension.N] More ModsM]Display more mods.L]'&Please wait, loading mod menu items -K]'&Please wait, loading selected item...J]WThis item could not be loaded and will be disabled. Check whether the corresponding mod is installed properly. (This window will close automatically.)I]Error loading itemH]GUI Skin SettingsG]+*Display settings window for the GUI skin.PFD]UMenu.UMenuModMenu(mja xlc~xxxxxx $&-,mC1@)6@'h^`y~Do o Pc~o o ޏєxxxޏєޏєޏєυ;aGވc~c~xxնmކPކPPc~c~o o ކPc~xxxޏєޏєxxކPPo o xllxxxxx;aGc~xxxxo K4螗K4螈c~ވc~;aGxo o c~Pc~o o ;aG;aG;aG (@LlB@J@h@mDC5ihK@#Pg 2@3@R@V"=_4^s@jcv!fW^SE@Y@vc@A@@UxPF<@ul@y%@]@a9@Nwi@+I? |@Wo\2t>?b #fTX|\F@H@@@~@X@B`@ Zd@O\@L@M@N@O@P@Q@R@S@T@k@y]p]W1k[w` #YJ@OsZ2(Y/s0?ģ> Y_4> Y_4> Y_4> Y_4_4_4> Y> Y_4_4> Y{#U> YFtFtF_4_4_4> Y_4> Y_4_4xx> Y_4> Y_4 UGHY2[) F9Ɲ9Ɲ9Ɲ9Ɲ9Ɲ9Ɲ9Ɲ9Ɲ9Ɲ9Ɲ9Ɲ9 Rnq d o m U W 9 f p $? ? ? ? ff? 333? L? ? $> > > > = L> > >]uAr@JgIa@^2ye~Dimim{Oim{Oim{Oim{Oim{Oim{Oնmc~c~c~c~c~lxll;aGlވc~lއlc~c~c~c~c~lc~c~c~c~c~PPuX*c~c~ކPuX*PuX*c~c~c~c~c~c~c~c~c~c~PPuX*PuX*PuX*c~PPPPc~Po /T2/T2c~c~c~c~ A]&Preload Mods@]98Preload mods so they can configure their mod menu item.B]&Reverse Sorting Order>]/.Reverse the sorting order of the listed mods.=]&Disable Mod Menu Extension?]DBDisable Mod Menu Extension. Use this before you remove the files.;]Move &Weapon Priorityi]rpReplaces the default weapon priority menu item in the Options menu with the Advanced Weapon Priority menu item.:]! &Update Player Selection Window<]RPUpdates the player selection window so it can display up to 500 player classes.QM[fxRO{rE`````` sW.z}*YL w?*? .-h-( jT-- - jj - @w*-z@ w*r*x.! H$fr$*$ 'w$* $w*$-(p-6'ppWcould not load()-z'.-(-h'.. `k*#w4*4 .-L-( XK--- XX-  yw*-o  w*r*].H&Kr&*& 'nw&* &w*&-(U-6'ppWcould not load()-o'.-(-L'.. qeT&h#TournamentPlayer%Nc{Ne%cN%e'TournamentPlayereNc- @@pZ, <wew*r*{--&ZU 6I c le "-s--(--s]a <<Botpack.ChallengeVoicePack< <%IY{I l,d%YI%l<lIY XQO[6 QA:NwA*2rQA A.Aw.*r.Q -2 kME4<-b"Class'b"Skin'b"Face'b"Team'MJ|V*8=M<:M 5M!CC4=J NA,+?wew*r*{--&AB d@_V- 6K%4K,*K\V'K U0%UM.0 Y7 - -7- - Vw*Vw*:.-'w.*-.-64 - r.*.@ = -1 -1=- -1 0* + -2 -2+- -2  .0}w *w *+- kw*.}  }w*Ww"*"'}5' v# -3 -3#- -3 0 .tw *w *E#-  tt   =j .z R UMenu.UMenuModMenu  R mm3m"@ 0 KBLxvw*.sw*r*w* w/)h.//5-g/a&.>k/./a.>L>/a.>  zt>6Lf:*V*5* *>^w>*>*>.>' {_/6rpu,^,,;,,G;,;um_a;\;\ x}w[-r.*r.* } a7. L: =. N: +. R: #. T: j. P: .:} ;LD--gD!rg*  .g+w *Z -'w  * - -.  .  r@*@. ?w??,C wC* X,XCCOX,-*f r*.f |p.f  p  + . : :{Gx*. + ** S{*F.*{* ~A! ?x*-L-.H  b$C^9 bP9b$a9y9\9]\b' cH)V)UMenu.UMenuModMenuItem%-v'Iz kw.* V{. + |,WeaponPriority.-''$$|,ModMenuExtension.-''{O~,zOOO&c)  )a/!b-''c))))/UMenu.UMenuModMenuItemH Zclass EWindowPlayerMeshClient extends UMenuPlayerMeshClient; var name BreathAnims[3], ActionAnims[8]; var float ActionAnimRates[8], ActionTweenTimes[8]; function SetMesh(mesh NewMesh) { MeshActor.bMeshEnviroMap = False; MeshActor.DrawScale = MeshActor.Default.DrawScale; MeshActor.Mesh = NewMesh; PlayBreathing(MeshActor, False); } function AnimEnd(MeshActor MyMesh) { local int i; local bool bBreathing; if ( IsBreathAnim(MyMesh.AnimSequence) ) bBreathing = True; if ( !bBreathing || FRand() < 0.8 ) PlayBreathing(MyMesh, bBreathing); else PlayAction(MyMesh); } function bool IsBreathAnim(name AnimName) { local int i; for(i = 0; i < ArrayCount(BreathAnims); i++) if ( BreathAnims[i] == AnimName ) return true; } function PlayBreathing(MeshActor MyMesh, bool bBreathing) { local name NextAnim; NextAnim = GetDefaultBreath(MyMesh); if ( !bBreathing ) MyMesh.TweenAnim(NextAnim, 0.4); else if ( MyMesh.AnimSequence != NextAnim ) MyMesh.PlayAnim(NextAnim, 0.4, 0.2); else MyMesh.PlayAnim(NextAnim, 0.4, 0.0); } function name GetDefaultBreath(MeshActor MyMesh) { local int i, LoopCount, CheckedAnim; while(CheckedAnim < ArrayCount(BreathAnims) && LoopCount++ < ArrayCount(BreathAnims) * 3) { i = Rand(ArrayCount(BreathAnims) * 3); if ( i >= ArrayCount(BreathAnims) ) i = CheckedAnim++; if ( MyMesh.HasAnim(BreathAnims[i]) ) return BreathAnims[i]; } } function PlayAction(MeshActor MyMesh) { local int NextAnim; NextAnim = GetActionAnim(MyMesh); if ( NextAnim != -1 ) MyMesh.PlayAnim(ActionAnims[NextAnim], ActionAnimRates[NextAnim], ActionTweenTimes[NextAnim]); else PlayBreathing(MyMesh, True); } function int GetActionAnim(MeshActor MyMesh) { local int i, LoopCount; While (LoopCount++ < ArrayCount(ActionAnims) * 2) { i = Rand(ArrayCount(ActionAnims)); if ( MyMesh.HasAnim(ActionAnims[i]) && FRand() > 0.75 ) return i; } return -1; } Eb NUMa,,a,Jbaay @?a inx-w.n*{.n..n-.. aV 6&^w4 4 -(.  ss-T-T' -T(4* " h 2w. *. w. *,. sr,*,.  'w,*. ,.  ,.  . .  -'. -6'1@~$$$,ppWcould not load. (. ) [_--( Y. . [BB$BB-'pC C!"bDDDD g%class EWindowPlayerSetupClient extends UTPlayerSetupClient; function IterateVoices() { local int NumVoices; local string NextVoice, NextDesc; local string VoicepackMetaClass; local bool OldInitialized; OldInitialized = Initialized; Initialized = False; VoicePackCombo.Clear(); Initialized = OldInitialized; if ( ClassIsChildOf(NewPlayerClass, class'TournamentPlayer') ) VoicePackMetaClass = class(NewPlayerClass).default.VoicePackMetaClass; else VoicePackMetaClass = "Botpack.ChallengeVoicePack"; // Load the base class into memory to prevent GetNextIntDesc crashing as the class isn't loadded. DynamicLoadObject(VoicePackMetaClass, class'Class'); GetPlayerOwner().GetNextIntDesc(VoicePackMetaClass, 0, NextVoice, NextDesc); while(NextVoice != "" && NumVoices < 100) { VoicePackCombo.AddItem(NextDesc, NextVoice, 0); NumVoices++; GetPlayerOwner().GetNextIntDesc(VoicePackMetaClass, NumVoices, NextVoice, NextDesc); } VoicePackCombo.Sort(); } function LoadClasses() { local int NumPlayerClasses; local string NextPlayer, NextDesc; GetPlayerOwner().GetNextIntDesc("TournamentPlayer", 0, NextPlayer, NextDesc); while(NextPlayer != "" && NumPlayerClasses < 500) { ClassCombo.AddItem(NextDesc, NextPlayer, 0); NumPlayerClasses++; GetPlayerOwner().GetNextIntDesc("TournamentPlayer", NumPlayerClasses, NextPlayer, NextDesc); } ClassCombo.Sort(); } function UseSelected() { local int NewTeam; if ( Initialized ) { GetPlayerOwner().UpdateURL("Class", ClassCombo.GetValue2(), True); GetPlayerOwner().UpdateURL("Skin", SkinCombo.GetValue2(), True); GetPlayerOwner().UpdateURL("Face", FaceCombo.GetValue2(), True); GetPlayerOwner().UpdateURL("Team", TeamCombo.GetValue2(), True); NewTeam = Int(TeamCombo.GetValue2()); // if the same class as current class, change skin if( ClassCombo.GetValue2() ~= String( GetPlayerOwner().Class )) GetPlayerOwner().ServerChangeSkin(SkinCombo.GetValue2(), FaceCombo.GetValue2(), NewTeam); if( GetPlayerOwner().PlayerReplicationInfo.Team != NewTeam ) GetPlayerOwner().ChangeTeam(NewTeam); } MeshWindow.SetMesh(NewPlayerClass.Default.Mesh); MeshWindow.ClearSkins(); NewPlayerClass.static.SetMultiSkin(MeshWindow.MeshActor, SkinCombo.GetValue2(), FaceCombo.GetValue2(), Int(TeamCombo.GetValue2())); } Hclass EWindowPlayerClientWindow extends UTPlayerClientWindow; function Created() { Super(UMenuDialogClientWindow).Created(); Splitter = UWindowHSplitter(CreateWindow(class'UWindowHSplitter', 0, 0, WinWidth, WinHeight)); Splitter.RightClientWindow = UMenuPlayerMeshClient(Splitter.CreateWindow(class'EWindowPlayerMeshClient', 0, 0, 100, 100)); Splitter.LeftClientWindow = Splitter.CreateWindow(PlayerSetupClass, 0, 0, 100, 100, OwnerWindow); Splitter.bRightGrow = True; Splitter.SplitPos = 240; } w*??w.*.:.w.*..w.*. R0w*Ow.*r.:.:*w.*r..*w.*.*0 88. R8 8ModMenuExtension.EWindowModMenu8_8_3_" 7 S7.K*7- -=.M*=- -1-*kWeaponPriority.EIWeaponPriorityWindow wk*+.Q*+- -2#.S*#- -3-*j.O* j`+h$d-w.`*{.`..`-.. Oclass EWindowPlayerWindow extends UTPlayerWindow; function BeginPlay(); DO^--( dQy&  -1%'%&G.dE.IzGE^G]Ez^]%s^]%&%sGE%&% *n/tr-h -.! H@ GYclass EWindowPlayerSetupScrollClient extends UTPlayerSetupScrollClient; function Created() { Super(UWindowScrollingDialogClient).Created(); } Ix_w??.  tt-i-i' -i(?*rc w.*.w.*-.cr-*-. ' w-*.-. -...-'.-6'1 @ ~$$$,ppWcould not load.(.) eZ7Y-Z-d'L-d L?Z-dW$Z Fxvw*.sw*r*w* jWclass ModMenuConfigMenu extends EnhancedPulldownMenu; var EnhancedPulldownMenuItem PreloadMods, ReverseOrder, DisableExtension, MoveWeaponPriority, UpdatePlayerSetup; var localized string PreloadModsCaption, PreloadModsHelp, ReverseOrderCaption, ReverseOrderHelp, DisableExtensionCaption, DisableExtensionHelp, WeaponPriorityCaption, WeaponPriorityHelp, PlayerSetupCaption, PlayerSetupHelp; var class WeaponPriorityClass; function Created() { Super.Created(); PreloadMods = EnhancedPulldownMenuItem(AddMenuItem(PreloadModsCaption, None)); PreloadMods.bChecked = class'EWindowModMenu'.default.bPreloadItems; ReverseOrder = EnhancedPulldownMenuItem(AddMenuItem(ReverseOrderCaption, None)); ReverseOrder.bChecked = class'EWindowModMenu'.default.bReverseOrder; AddMenuItem("-", None); WeaponPriorityClass = class(DynamicLoadObject("WeaponPriority.EIWeaponPriorityWindow", Class'Class')); if ( WeaponPriorityClass != None ) { MoveWeaponPriority = EnhancedPulldownMenuItem(AddMenuItem(WeaponPriorityCaption, None)); MoveWeaponPriority.bChecked = class'EWindowModMenu'.default.bMoveWeaponPriority; } UpdatePlayerSetup = EnhancedPulldownMenuItem(AddMenuItem(PlayerSetupCaption, None)); UpdatePlayerSetup.bChecked = class'EWindowModMenu'.default.bUpdatePlayerSelection; AddMenuItem("-", None); DisableExtension = EnhancedPulldownMenuItem(AddMenuItem(DisableExtensionCaption, None)); } function ExecuteItem(UWindowPulldownMenuItem I) { local UMenuMenuBar B; local WindowConsole C; local UMenuModMenuList L; local EWindowModMenu M; M = EWindowModMenu(ParentMenu); switch (I) { case PreloadMods: class'EWindowModMenu'.default.bPreloadItems = !class'EWindowModMenu'.default.bPreloadItems; PreloadMods.bChecked = class'EWindowModMenu'.default.bPreloadItems; class'EWindowModMenu'.static.StaticSaveConfig(); if ( M != None ) for (L = M.ModList; L != None; L = UMenuModMenuList(L.Next)) { if ( !EWindowModMenuList(L).bDontShow && EWindowModMenuItem(L.MenuItem) != None ) L.MenuItem.bDisabled = EWindowModMenuItem(L.MenuItem).bNotFound || (class'EWindowModMenu'.default.bPreloadItems && EWindowModMenuItem(L.MenuItem).ModItem == None); } break; case ReverseOrder: class'EWindowModMenu'.default.bReverseOrder = !class'EWindowModMenu'.default.bReverseOrder; ReverseOrder.bChecked = class'EWindowModMenu'.default.bReverseOrder; class'EWindowModMenu'.static.StaticSaveConfig(); Super.ExecuteItem(I); M.ModList.Sort(); M.SetupMods(None); return; case MoveWeaponPriority: class'EWindowModMenu'.default.bMoveWeaponPriority = !class'EWindowModMenu'.default.bMoveWeaponPriority; MoveWeaponPriority.bChecked = class'EWindowModMenu'.default.bMoveWeaponPriority; class'EWindowModMenu'.static.StaticSaveConfig(); B = UMenuMenuBar(GetMenuBar()); Super.ExecuteItem(I); if ( B != None && B.Options != None ) { if ( MoveWeaponPriority.bChecked ) { B.Options.WeaponPriorityWindowClass = WeaponPriorityClass; if ( M.PriorityMenu != None ) M.PriorityMenu.Remove(); } else { B.Options.WeaponPriorityWindowClass = B.Options.default.WeaponPriorityWindowClass; /*if ( M.PriorityMenu == None && M.PriorityItem != None ) { M.PriorityItem.MenuItem = EWindowModMenuItem(M.AddMenuItem(M.PriorityItem.MenuCaption, None)); M.PriorityMenu = EWindowModMenuItem(M.PriorityItem.MenuItem); M.PriorityMenu.ModListItem = M.PriorityItem; M.PriorityMenu.HelpString = M.PriorityItem.MenuHelp; M.PriorityMenu.Remove(); }*/ if ( M.PriorityMenu != None ) { if ( M.GUIConfigMenu != None ) M.GUIConfigMenu.InsertItemAfter(M.PriorityMenu); else M.ConfigMenu.InsertItemAfter(M.PriorityMenu); } } } return; case UpdatePlayerSetup: class'EWindowModMenu'.default.bUpdatePlayerSelection = !class'EWindowModMenu'.default.bUpdatePlayerSelection; UpdatePlayerSetup.bChecked = class'EWindowModMenu'.default.bUpdatePlayerSelection; class'EWindowModMenu'.static.StaticSaveConfig(); Super.ExecuteItem(I); B = UMenuMenuBar(GetMenuBar()); if ( B != None && B.Options != None ) { if ( UpdatePlayerSetup.bChecked ) B.Options.PlayerWindowClass = class'EWindowPlayerWindow'; else B.Options.PlayerWindowClass = B.Options.default.PlayerWindowClass; } return; case DisableExtension: B = UMenuMenuBar(GetMenuBar()); if ( class'EWindowModMenu'.default.OldModMenuClass == "" ) B.Class.default.ModMenuClass = "UMenu.UMenuModMenu"; else B.Class.default.ModMenuClass = class'EWindowModMenu'.default.OldModMenuClass; B.StaticSaveConfig(); C = Root.Console; C.ResetUWindow(); C.LaunchUWindow(); break; } Super.ExecuteItem(I); } function Select(UWindowPulldownMenuItem I) { if ( UMenuRootWindow(Root) == None || UMenuRootWindow(Root).StatusBar == None ) return; switch (I) { case PreloadMods: UMenuRootWindow(Root).StatusBar.SetHelp(PreloadModsHelp); break; case ReverseOrder: UMenuRootWindow(Root).StatusBar.SetHelp(ReverseOrderHelp); break; case MoveWeaponPriority: UMenuRootWindow(Root).StatusBar.SetHelp(WeaponPriorityHelp); break; case UpdatePlayerSetup: UMenuRootWindow(Root).StatusBar.SetHelp(PlayerSetupHelp); break; case DisableExtension: UMenuRootWindow(Root).StatusBar.SetHelp(DisableExtensionHelp); break; default: UMenuRootWindow(Root).StatusBar.SetHelp(""); break; } Cursor = ParentMenu.Cursor; Super.Select(I); } YG-'(GB!~(&8!B!z(!&&&pp(!&Bp(!Bp( rqqt wq*q'-v)=r* 5.C*5  e5`a/!c{.".X*"J"). S.q-3 w*w* tw*.*.X-2 w*w*PWeaponPriority.EIWeaponPriorityWindow wP*P.S .w * -'F%-*FSF  * --.  .  r * . ?F??,D wD* U,UDDU,-*Wr*.W|V.W  V   . xD-L( (@\E!P-(E( Wclass EnableMenuExtension extends UMenuModMenuItem; function Execute() { local UMenuMenuBar B; local WindowConsole C; B = UMenuMenuBar(MenuItem.Owner.GetMenuBar()); class'EWindowModMenu'.default.OldModMenuClass = B.Class.default.ModMenuClass; class'EWindowModMenu'.static.StaticSaveConfig(); B.Class.default.ModMenuClass = "ModMenuExtension.EWindowModMenu"; B.StaticSaveConfig(); C = B.Root.Console; C.ResetUWindow(); C.LaunchUWindow(); } fT_2g%Bєυ;aGնmc~PPc~PPPPo /T2/T2 g]Enable &Mod Menu Extensionh] Enable the Mod Menu Extension.Paclass EWindowMoreModsMenu extends EnhancedPulldownMenu; var EWindowMoreModsMenu NextPage; var UWindowPulldownMenuItem ExecuteModItem; var bool bStillLoading, bAllLoaded, bExecuteNow; var EWindowModMenuItem LastProcessed, NextPageItem; var UMenuModMenuList ModList; function LMouseUp(float X, float Y) { If ( Selected != None && Selected.SubMenu == None && Selected.Caption != "-" && !Selected.bDisabled ) { BeforeExecuteItem(Selected); ExecuteItem(Selected); } Super(UWindowListControl).LMouseUp(X, Y); } function ShowWindow() { Super.ShowWindow(); // continue loading mods if ( !bAllLoaded && class'EWindowModMenu'.default.bPreloadItems ) { UMenuMenuBar(GetMenuBar()).SetHelp(class'EWindowModMenu'.default.LoadingText @ GetNextItem(LastProcessed)); Root.SetCursor(Root.WaitCursor); } } function HideWindow() { Root.SetCursor(Root.NormalCursor); Super.HideWindow(); // stop loading mods bStillLoading = False; } function SetupMods(UMenuModMenuList InModList) { local EWindowModMenuList I; local UWindowList Test; local UWindowPulldownMenuItem MenuItem; local int ItemCount, j; ModList = InModList; if ( ModList.Next == None ) return; for (I = EWindowModMenuList(ModList.Next); I != None; I = EWindowModMenuList(I.Next)) { if ( I.bDontShow ) continue; ItemCount++; I.MenuItem = AddMenuItem(I.MenuCaption, None); I.MenuItem.bDisabled = class'EWindowModMenu'.default.bPreloadItems; EWindowModMenuItem(I.MenuItem).ModListItem = I; EWindowModMenuItem(I.MenuItem).HelpString = I.MenuHelp; if ( LastProcessed == None ) LastProcessed = EWindowModMenuItem(I.MenuItem); if ( ItemCount > Root.WinHeight / ItemHeight - 7 ) { for (Test = I; Test != None && j < 3; Test = Test.Next) j++; if ( j == 3 ) { AddMenuItem("-", None); MenuItem = AddMenuItem(class'EWindowModMenu'.default.MoreModsCaption, None); EWindowModMenuItem(MenuItem).HelpString = class'EWindowModMenu'.default.MoreModsHelp; NextPage = EWindowMoreModsMenu(MenuItem.CreateSubMenu(class'EWindowMoreModsMenu')); NextPage.SetupMods(I); break; } } } } function string GetNextItem(EWindowModMenuItem CurrentItem) { while (CurrentItem != None) { CurrentItem = EWindowModMenuItem(CurrentItem.Next); if ( CurrentItem != None && CurrentItem.ModItem == None && CurrentItem.ModListItem != None ) return CurrentItem.ModListItem.MenuItemClassName; } } function Tick(float DeltaTime) { local bool bLoadedOne; local EWindowModMenuItem CurrentItem; local class ModItemClass; if ( ExecuteModItem != None ) { ExecuteItem(ExecuteModItem); return; } if ( bAllLoaded ) { bStillLoading = False; return; } else if ( !bStillLoading ) { bStillLoading = class'EWindowModMenu'.default.bPreloadItems; return; } else if ( !class'EWindowModMenu'.Default.bPreloadItems ) return; Root.SetCursor(Root.WaitCursor); for (CurrentItem = LastProcessed; CurrentItem != None; CurrentItem = EWindowModMenuItem(CurrentItem.Next)) { if ( bLoadedOne ) { LastProcessed = CurrentItem; return; } if ( CurrentItem.ModItem != None || CurrentItem.ModListItem == None ) continue; UMenuMenuBar(GetMenuBar()).SetHelp(class'EWindowModMenu'.default.LoadingText @ GetNextItem(CurrentItem)); ModItemClass = CurrentItem.ModListItem.ModMenuItemClass; if ( ModItemClass == None ) ModItemClass = class(DynamicLoadObject(CurrentItem.ModListItem.MenuItemClassName, class'Class', True)); if ( ModItemClass != None ) CurrentItem.ModItem = New ModItemClass; if ( CurrentItem.ModItem != None ) { CurrentItem.ModListItem.ModMenuItemClass = ModItemClass; CurrentItem.ModItem.MenuItem = CurrentItem; CurrentItem.ModItem.Setup(); CurrentItem.bDisabled = False; } else { CurrentItem.bNotFound = True; log(Name@"could not load"@CurrentItem.ModListItem.MenuItemClassName@"("$RemoveAmpersand(CurrentItem.ModListItem.MenuCaption)$")"); } bLoadedOne = True; } bStillLoading = False; bAllLoaded = True; UMenuMenuBar(GetMenuBar()).SetHelp(UMenuMenuBar(GetMenuBar()).ModHelp); Root.SetCursor(Root.NormalCursor); } function Select(UWindowPulldownMenuItem I) { Cursor = ParentMenu.Cursor; if ( !bStillLoading && EWindowModMenuItem(I) != None && EWindowModMenuItem(I).HelpString != "" ) UMenuMenuBar(GetMenuBar()).SetHelp(EWindowModMenuItem(I).HelpString); else if ( !bStillLoading ) UMenuMenuBar(GetMenuBar()).SetHelp(UMenuMenuBar(GetMenuBar()).ModHelp); } function ExecuteItem(UWindowPulldownMenuItem I) { local class ModItemClass; if ( ExecuteModItem != I ) { ExecuteModItem = I; Root.SetCursor(Root.WaitCursor); UMenuMenuBar(GetMenuBar()).SetHelp(class'EWindowModMenu'.default.ExecutingText); return; } else if ( !bExecuteNow ) { bExecuteNow = True; return; } bExecuteNow = False; ExecuteModItem = None; Root.SetCursor(Root.NormalCursor); if ( I == NextPageItem ) return; if ( EWindowModMenuItem(I).ModItem != None ) EWindowModMenuItem(I).ModItem.Execute(); else if ( EWindowModMenuItem(I).ModListItem != None ) { ModItemClass = EWindowModMenuItem(I).ModListItem.ModMenuItemClass; if ( ModItemClass == None ) ModItemClass = class(DynamicLoadObject(EWindowModMenuItem(I).ModListItem.MenuItemClassName, class'Class', True)); if ( ModItemClass != None ) { EWindowModMenuItem(I).ModListItem.ModMenuItemClass = ModItemClass; EWindowModMenuItem(I).ModItem = New ModItemClass; EWindowModMenuItem(I).ModItem.MenuItem = I; EWindowModMenuItem(I).ModItem.Setup(); EWindowModMenuItem(I).ModItem.Execute(); } else { I.bDisabled = True; EWindowModMenuItem(I).bNotFound = True; MessageBox(class'EWindowModMenu'.default.LoadErrorTitle, class'EWindowModMenu'.default.LoadError, MB_OK, MR_None, MR_None, 5); log(Name@"could not load"@EWindowModMenuItem(I).ModListItem.MenuItemClassName@"("$RemoveAmpersand(EWindowModMenuItem(I).ModListItem.MenuCaption)$")"); } } Super(UWindowPulldownMenu).ExecuteItem(I); } b[KmJ%J}[[}[Ja,0,9p,A,Zp,a,zp, J o@Dclass EWindowModMenuList extends UMenuModMenuList; var class ModMenuItemClass; var bool bDontShow; // first compare only alphanumeric characters (case-insensitive), then compare case sensitive (without ampersand) function int Compare(UWindowList T, UWindowList B) { local EWindowModMenuList TI, BI; local string TS, BS; local int Reverse; if ( class'EWindowModMenu'.default.bReverseOrder ) Reverse = -1; else Reverse = 1; TI = EWindowModMenuList(T); BI = EWindowModMenuList(B); if ( AlphaNumeric(TI.MenuCaption) == AlphaNumeric(BI.MenuCaption) ) { TS = RemoveAmpersand(TI.MenuCaption); BS = RemoveAmpersand(BI.MenuCaption); if ( TS == BS ) return 0; if ( TS < BS ) return -1 * Reverse; return 1 * Reverse; } else if ( AlphaNumeric(TI.MenuCaption) < AlphaNumeric(BI.MenuCaption) ) return -1 * Reverse; return 1 * Reverse; } function string RemoveAmpersand(string S) { local string Temp, Result; local int Pos, NewPos; local int i; while (True) { Temp = Mid(S, Pos); NewPos = InStr(Temp, "&"); if ( NewPos == -1 ) break; Pos += NewPos; if ( Mid(Temp, NewPos + 1, 1) == "&" ) { // It's a double &, lets add one to the output. Result = Result $ Left(Temp, NewPos) $ "&"; Pos++; } else Result = Result $ Left(Temp, NewPos); Pos++; } Result = Result $ Temp; return Result; } // Keeps only 0-9 and A-Z in the string. All lower case letters are converted to upper case. function string AlphaNumeric(string s) { local string result; local int i, c; for (i = 0; i < Len(s); i++) { c = Asc(Right(s, Len(s) - i)); if ( c == Clamp(c, 48, 57) ) // 0-9 result = result $ Chr(c); else if ( c == Clamp(c, 65, 90) ) // A-Z result = result $ Chr(c); else if ( c == Clamp(c, 97, 122) ) // a-z result = result $ Chr(c - 32); // a -> A, b -> B, etc. } return result; } qclass EWindowModMenu extends UMenuModMenu config(EnhancedItems); var EnhancedPulldownMenu SubMenu; var UWindowPulldownMenuItem ExecuteModItem; var EWindowMoreModsMenu NextPage; var bool bStillLoading, bAllLoaded, bLoadedList, bExecuteNow; var int UsedRootHeight, LoadingTick; var EWindowModMenuItem LastProcessed, ConfigMenu, GUIConfigMenu, NextPageItem, PriorityMenu; var EWindowModMenuList PriorityItem; var localized string ConfigMenuCaption, ConfigMenuHelp, MoreModsCaption, MoreModsHelp, LoadingText, ExecutingText, LoadError, LoadErrorTitle, GUISkinMenuCaption, GUISkinMenuHelp; var config bool bPreloadItems, bReverseOrder, bMoveWeaponPriority, bUpdatePlayerSelection; var config string OldModMenuClass; function UWindowPulldownMenuItem AddMenuItem(string C, Texture G) { local UWindowPulldownMenuItem I; I = UWindowPulldownMenuItem(Items.Append(class'EWindowModMenuItem')); I.Owner = Self; I.SetCaption(C); I.Graphic = G; EnhancedPulldownMenuItem(I).AltValue = C; return I; } function Created() { SetAcceptsFocus(); Super(UWindowListControl).Created(); ItemHeight = LookAndFeel.Pulldown_ItemHeight; VBorder = LookAndFeel.Pulldown_VBorder; HBorder = LookAndFeel.Pulldown_HBorder; TextBorder = LookAndFeel.Pulldown_TextBorder; } function LMouseUp(float X, float Y) { if ( Selected != None && Selected.SubMenu == None && Selected.Caption != "-" && !Selected.bDisabled ) { BeforeExecuteItem(Selected); ExecuteItem(Selected); } Super(UWindowListControl).LMouseUp(X, Y); } function Clear() { local UMenuModMenuList I; SubMenu = None; NextPage = None; ConfigMenu = None; LastProcessed = None; For (I = ModList; I != None; I = UMenuModMenuList(I.Next)) I.MenuItem = None; Super.Clear(); } function ShowWindow() { if ( UsedRootHeight != Root.WinHeight ) SetupMods(None); Super.ShowWindow(); // continue loading mods if ( !bAllLoaded && Default.bPreloadItems ) { UMenuMenuBar(GetMenuBar()).SetHelp(LoadingText @ GetNextItem(LastProcessed)); Root.SetCursor(Root.WaitCursor); } } function HideWindow() { Root.SetCursor(Root.NormalCursor); Super.HideWindow(); // stop loading mods bStillLoading = False; } function FocusOtherWindow(UWindowWindow W) { local UWindowPulldownMenu M; local string tmp; Super(UWindowListControl).FocusOtherWindow(W); for (M = SubMenu; M != None; M = EnhancedPulldownMenu(M).SubMenu) if ( W == M ) return; if ( UWindowPulldownMenuItem(Owner) != None && UWindowPulldownMenuItem(Owner).Owner == W ) return; if ( bWindowVisible ) CloseUp(); } function SetupMods(UMenuModMenuList InModList) { local EWindowModMenuList I; local UMenuMenuBar MenuBar; local UWindowList Test; local UWindowPulldownMenuItem MenuItem; local int ItemCount, PreItemCount, j; local class WeaponPriorityClass; if ( InModList != None ) ModList = InModList; if ( !bLoadedList ) LoadMods(); // original function reads "only" the first 50 mods if ( ModList.Next == None ) return; Clear(); ConfigMenu = EWindowModMenuItem(AddMenuItem(ConfigMenuCaption, None)); ConfigMenu.CreateSubMenu(class'ModMenuConfigMenu', Self); ConfigMenu.HelpString = ConfigMenuHelp; if ( LookAndFeel.IsA('EWindowLookAndFeel') && EWindowLookAndFeel(LookAndFeel).ConfigWindowMenu != "" ) { GUIConfigMenu = EWindowModMenuItem(AddMenuItem(GUISkinMenuCaption, None)); GUIConfigMenu.HelpString = GUISkinMenuHelp; GUIConfigMenu.CreateSubMenu(class(DynamicLoadObject(EWindowLookAndFeel(LookAndFeel).ConfigWindowMenu, class'Class'))); PreItemCount++; } MenuBar = UMenuMenuBar(GetMenuBar()); if ( bUpdatePlayerSelection && MenuBar != None && MenuBar.Options != None ) MenuBar.Options.PlayerWindowClass = class'EWindowPlayerWindow'; if ( PriorityItem != None ) { PriorityItem.MenuItem = EWindowModMenuItem(AddMenuItem(PriorityItem.MenuCaption, None)); PriorityMenu = EWindowModMenuItem(PriorityItem.MenuItem); PriorityMenu.ModListItem = PriorityItem; PriorityMenu.HelpString = PriorityItem.MenuHelp; if ( bMoveWeaponPriority && MenuBar != None && MenuBar.Options != None ) WeaponPriorityClass = class(DynamicLoadObject("WeaponPriority.EIWeaponPriorityWindow", Class'Class')); if ( WeaponPriorityClass != None ) { MenuBar.Options.WeaponPriorityWindowClass = WeaponPriorityClass; PriorityMenu.Remove(); } PreItemCount++; } for (I = EWindowModMenuList(ModList.Next); I != None; I = EWindowModMenuList(I.Next)) { if ( I.bDontShow ) continue; if ( ItemCount == 0 ) { AddMenuItem("-", None); ItemCount += PreItemCount; } ItemCount++; I.MenuItem = AddMenuItem(I.MenuCaption, None); I.MenuItem.bDisabled = Default.bPreloadItems; EWindowModMenuItem(I.MenuItem).ModListItem = I; EWindowModMenuItem(I.MenuItem).HelpString = I.MenuHelp; if ( LastProcessed == None ) LastProcessed = EWindowModMenuItem(I.MenuItem); if ( ItemCount > Root.WinHeight / ItemHeight - 7 ) { for (Test = I; Test != None && j < 3; Test = Test.Next) j++; if ( j == 3 ) { AddMenuItem("-", None); MenuItem = AddMenuItem(MoreModsCaption, None); EWindowModMenuItem(MenuItem).HelpString = MoreModsHelp; NextPage = EWindowMoreModsMenu(MenuItem.CreateSubMenu(class'EWindowMoreModsMenu')); NextPage.SetupMods(I); break; } } } UsedRootHeight = Root.WinHeight; bAllLoaded = False; } function LoadMods() { local int NumModClasses, i; local string NextModClass, NextModDesc; local EWindowModMenuList NewItem; local UMenuModMenuItem TempItem; GetPlayerOwner().GetNextIntDesc("UMenu.UMenuModMenuItem", 0, NextModClass, NextModDesc); bLoadedList = True; if ( NextModClass == "" ) return; if ( EWindowModMenuList(ModList) != None ) ModList.Clear(); else { ModList = New class'EWindowModMenuList'; ModList.SetupSentinel(); } while (NextModClass != "") { NewItem = EWindowModMenuList(ModList.Append(class'EWindowModMenuList')); // check, if this item is the weapon priority menu if ( Left(NextModClass, 15) ~= "WeaponPriority." ) { NewItem.bDontShow = True; PriorityItem = NewItem; } else if ( Left(NextModClass, 17) ~= "ModMenuExtension." ) NewItem.bDontShow = True; NewItem.MenuItemClassName = NextModClass; if ( NextModDesc != "" ) { i = InStr(NextModDesc, ","); if ( i == -1 ) NewItem.MenuCaption = NextModDesc; else { NewItem.MenuCaption = Left(NextModDesc, i); NewItem.MenuHelp= Mid(NextModDesc, i + 1); } } else { TempItem = New class(DynamicLoadObject(NextModClass, class'Class')); // check, if this item is a config menu for the GUI skin if ( TempItem.IsA('LookAndFeelModMenuItem') ) NewItem.bDontShow = True; else { TempItem.Setup(); NewItem.ModMenuItemClass = TempItem.Class; NewItem.MenuCaption = TempItem.MenuCaption; NewItem.MenuHelp = TempItem.MenuHelp; } } GetPlayerOwner().GetNextIntDesc("UMenu.UMenuModMenuItem", ++NumModClasses, NextModClass, NextModDesc); } ModList.Sort(); } function string GetNextItem(EWindowModMenuItem CurrentItem) { while (CurrentItem != None) { CurrentItem = EWindowModMenuItem(CurrentItem.Next); if ( CurrentItem != None && CurrentItem.ModItem == None && CurrentItem.ModListItem != None ) return CurrentItem.ModListItem.MenuItemClassName; } } function Tick(float DeltaTime) { local bool bLoadedOne; local EWindowModMenuItem CurrentItem; local class ModItemClass; if ( ExecuteModItem != None ) { ExecuteItem(ExecuteModItem); return; } if ( bAllLoaded ) { bStillLoading = False; return; } else if ( !bStillLoading ) { bStillLoading = Default.bPreloadItems; return; } else if ( !Default.bPreloadItems ) return; Root.SetCursor(Root.WaitCursor); for (CurrentItem = LastProcessed; CurrentItem != None; CurrentItem = EWindowModMenuItem(CurrentItem.Next)) { if ( bLoadedOne ) { LastProcessed = CurrentItem; return; } if ( CurrentItem.ModItem != None || CurrentItem.ModListItem == None ) continue; UMenuMenuBar(GetMenuBar()).SetHelp(LoadingText @ GetNextItem(CurrentItem)); ModItemClass = CurrentItem.ModListItem.ModMenuItemClass; if ( ModItemClass == None ) ModItemClass = class(DynamicLoadObject(CurrentItem.ModListItem.MenuItemClassName, class'Class', True)); if ( ModItemClass != None ) CurrentItem.ModItem = New ModItemClass; if ( CurrentItem.ModItem != None ) { CurrentItem.ModListItem.ModMenuItemClass = ModItemClass; CurrentItem.ModItem.MenuItem = CurrentItem; CurrentItem.ModItem.Setup(); CurrentItem.bDisabled = False; } else { CurrentItem.bNotFound = True; log(Name@"could not load"@CurrentItem.ModListItem.MenuItemClassName@"("$RemoveAmpersand(CurrentItem.ModListItem.MenuCaption)$")"); } bLoadedOne = True; } bStillLoading = False; bAllLoaded = True; UMenuMenuBar(GetMenuBar()).SetHelp(UMenuMenuBar(GetMenuBar()).ModHelp); Root.SetCursor(Root.NormalCursor); } function Select(UWindowPulldownMenuItem I) { if ( !bStillLoading && EWindowModMenuItem(I) != None && EWindowModMenuItem(I).HelpString != "" ) UMenuMenuBar(GetMenuBar()).SetHelp(EWindowModMenuItem(I).HelpString); else if ( !bStillLoading ) UMenuMenuBar(GetMenuBar()).SetHelp(UMenuMenuBar(GetMenuBar()).ModHelp); } function ExecuteItem(UWindowPulldownMenuItem I) { local class ModItemClass; local UMenuModMenuList L; if ( ExecuteModItem != I ) { ExecuteModItem = I; bStillLoading = False; Root.SetCursor(Root.WaitCursor); UMenuMenuBar(GetMenuBar()).SetHelp(ExecutingText); return; } else if ( !bExecuteNow ) { bExecuteNow = True; return; } bExecuteNow = False; ExecuteModItem = None; Root.SetCursor(Root.NormalCursor); switch (I) { case GUIConfigMenu: case NextPageItem: return; default: CloseUp(); if ( EWindowModMenuItem(I).ModItem != None ) EWindowModMenuItem(I).ModItem.Execute(); else if ( EWindowModMenuItem(I).ModListItem != None ) { ModItemClass = EWindowModMenuItem(I).ModListItem.ModMenuItemClass; if ( ModItemClass == None ) ModItemClass = class(DynamicLoadObject(EWindowModMenuItem(I).ModListItem.MenuItemClassName, class'Class', True)); if ( ModItemClass != None ) { EWindowModMenuItem(I).ModListItem.ModMenuItemClass = ModItemClass; EWindowModMenuItem(I).ModItem = New ModItemClass; EWindowModMenuItem(I).ModItem.MenuItem = I; EWindowModMenuItem(I).ModItem.Setup(); EWindowModMenuItem(I).ModItem.Execute(); } else { I.bDisabled = True; EWindowModMenuItem(I).bNotFound = True; MessageBox(LoadErrorTitle, LoadError, MB_OK, MR_None, MR_None, 5); log(Name@"could not load"@EWindowModMenuItem(I).ModListItem.MenuItemClassName@"("$RemoveAmpersand(EWindowModMenuItem(I).ModListItem.MenuCaption)$")"); } } break; } // Super(UWindowPulldownMenu).ExecuteItem(I); } `//============================================================================= // UWindowPulldownMenuItem //============================================================================= class EWindowModMenuItem extends EnhancedPulldownMenuItem; var UMenuModMenuItem ModItem; var EWindowModMenuList ModListItem; var string HelpString; var bool bNotFound; function Select() { if ( SubMenu != None ) { SubMenu.WinLeft = Owner.WinLeft + Owner.WinWidth - Owner.HBorder; SubMenu.WinTop = ItemTop - Owner.VBorder; if ( EWindowModMenu(Owner) != None ) EWindowModMenu(Owner).SubMenu = EnhancedPulldownMenu(SubMenu); if ( EnhancedPulldownMenu(Owner) != None ) EnhancedPulldownMenu(Owner).SubMenu = EnhancedPulldownMenu(SubMenu); if ( EnhancedPulldownMenu(SubMenu) != None ) EnhancedPulldownMenu(SubMenu).ParentMenu = Owner; SubMenu.ShowWindow(); } } function DeSelect() { if ( SubMenu != None ) { if ( EWindowModMenu(Owner) != None && EWindowModMenu(Owner).SubMenu == SubMenu ) EWindowModMenu(Owner).SubMenu = None; if ( EnhancedPulldownMenu(Owner) != None && EnhancedPulldownMenu(Owner).SubMenu == SubMenu ) EnhancedPulldownMenu(Owner).SubMenu = None; if ( EnhancedPulldownMenu(SubMenu) != None ) EnhancedPulldownMenu(SubMenu).ParentMenu = None; SubMenu.DeSelect(); SubMenu.HideWindow(); } } rrreqedeAeQeereneNemekehe@nCecefrgeregeneueveqnbnUnNe~e{exhge`retewkHncewn\n]nSeeeZhVqSkmeMeqDeokoejnVnMknXe_iLn~jekKe}eciieno@hhnNeln_nGkqCrWjyeRlVhPh|kjfnUiGjdke]e^r^k{evnOn`knInHnFk,k*rKndkhrEnboAoHe_nxlIo~elk,ke\hjkqJnToYkkEoMoZkk7otjshghhkOoIkkrFkQknfk!kokOknyhXeco[q}kTkekkn|kk6oBqQyJnlexehnghik0kkzjrQUkcCYaafwsGzDTzsazsnzv{zvH{rU{vc{vp{a~{O K|oW|t d|k p|v||zJ}CW}`Ld}E py|sINWNdyqR ~sJWXDftSAAN]\Xjx xXDw RF ^Ujvw\DXQX`Y nLzvHP UP aFmxz@Hu UYarnY |UHvUXbZov}xJWae^ sGGMP[piOvLDbQv ^v jzva CeOv \UhEvD DTP|]wjuwNDw R` ^LjsxER RQ^kkvyvFLS` `k l[xNESSz`|m[zUGaUkbvpW }uITVNcJ p\a|p ]{ipv}C PW ]kiMvvCJPK]Ijjwl DrPT]KjqxsGBTraG oA{@HBU>b=o?|;IiV:c<pl }mI]aVHwZuDjyYhF n  {bGLTlbb oL{BItW^Ze[Xk WBc*Fp*rvTchp Kp W,mct6P lefLOArEVs,mIvvh C-EODTpXke}P~ MLYYf/r|qp mFydoc$XR)sju4e] dBOfpu^B8`qX]Iu4r%fzXu4Se{x0bstUrIA{tu4Z|8VQ`Npnf{pau4dnaR7^skQu4uW|Yqv Jp @!PLu4b\_y~u4[awv Rf^LDp Qu4O]u4}lu4ki