Jump to content

Mission - Dictionary file not updated


Falcon_S

Recommended Posts

If we open mission archive with 7zip there are mission files etc... in archive is l10n\DEFAULT\ folder and dictionary file in it.

 

There is everything that you ever put in mission, any unit, any group... ever. Even not existing in mission anymore. But...

 

Because of that i have problem.

 

Problem is next... i removed one farp, all his units, pickup zones, all about that farp (triggers, etc...) . That farp not exist in mission. Mission is saved. Started mission, i have CTLD error: Cant find FARP_ZONE. CTLD script is edited and all definitions about that farp are removed, script resaved. Started mission again and same error again. Deleted all DCS temp folders, problem still exist. Restarted dcs so many times, resaving scripts, etc.... all that we need to be sure is everything is ok but ERROR is still there. Looks like CTLD is not updated or DCS loading old stuff from somewhere.

 

After all effort to fix this i check mission archive and find in l10n\DEFAULT\ folder and in dictionary ALL THAT I EVER HAD IN MISSION. And yes there is all about that fantom farp and seems DCS loading all that and causing CTLD ERROR.

 

1. Why dictionary is not updated with resaving mission?

2. How to fix this manualy?

3. Or maybe problem is something else?

 

Quote

Немој ништа силом, узми већи чекић!

MSI Tomahawk MAX | Ryzen 7 3700x | 32GB DDR4 3200MHz | RX 5700 XT OC Red Dragon 8GB | VPC Throttle CM3 + VPC Constellation ALPHA on VPC WarBRD Base | HP Reverb G2

 Youtube Follow Me on TWITCH! 

Link to comment
Share on other sites

Now after i delete that file in hope to resaving will help... i get mission full of DictKeys that i understand but now after exit i can't OPEN (to load) any mission, OPEN Mission not work anymore. Why?

Quote

Немој ништа силом, узми већи чекић!

MSI Tomahawk MAX | Ryzen 7 3700x | 32GB DDR4 3200MHz | RX 5700 XT OC Red Dragon 8GB | VPC Throttle CM3 + VPC Constellation ALPHA on VPC WarBRD Base | HP Reverb G2

 Youtube Follow Me on TWITCH! 

Link to comment
Share on other sites

After editing dictionary causing dcs crash on load mission.

 

2020-11-16 10:15:46.422 INFO DCS: Screen: MissionEditor
2020-11-16 10:16:05.381 ALERT LUACOMMON: Error: GUI Error: [string "./Scripts/dictionary.lua"]:883: attempt to call global 'print' (a nil value)
GUI debug.traceback: stack traceback:
[C]: in function 'print'
[string "./Scripts/dictionary.lua"]:883: in function 'getMissionDescription'
[string "./MissionEditor/modules/FileDialog.lua"]:799: in function 'fillRequiredModules'
[string "./MissionEditor/modules/FileDialog.lua"]:830: in function 'updateRequiredModules'
[string "./MissionEditor/modules/FileDialog.lua"]:453: in function 'onSelectFile_'
[string "./MissionEditor/modules/FileDialog.lua"]:472: in function 'onFileClick'
[string "./MissionEditor/modules/FileGrid.lua"]:313: in function 'onRowClick'
[string "./MissionEditor/modules/FileGrid.lua"]:321: in function 'onGridMouseDown'
[string "./MissionEditor/modules/FileGrid.lua"]:160: in function 'onMouseDown'
[string "./dxgui/bind/Grid.lua"]:26: in function 'callback'
[string "./dxgui/bind/Widget.lua"]:283: in function <[string "./dxgui/bind/Widget.lua"]:282>
...
[C]: in function 'WidgetSetVisible'
[string "./dxgui/bind/Widget.lua"]:69: in function 'setVisible'
[string "./dxgui/bind/MsgWindow.lua"]:135: in function 'show'
[string "./MissionEditor/modules/me_toolbar.lua"]:728: in function 'saveModifiedMission'
[string "./MissionEditor/modules/me_toolbar.lua"]:752: in function 'onChange'
[string "./MissionEditor/modules/me_toolbar.lua"]:740: in function 'openMission'
[string "./MissionEditor/modules/me_menubar.lua"]:575: in function 'func'
[string "./MissionEditor/modules/me_menubar.lua"]:204: in function 'onChange'
[string "./dxgui/bind/Menu.lua"]:20: in function 'callback'
[string "./dxgui/bind/Widget.lua"]:352: in function <[string "./dxgui/bind/Widget.lua"]:347>
2020-11-16 10:16:06.682 INFO VISUALIZER: TerrainRenderer::release
2020-11-16 10:16:06.704 ALERT LUACOMMON: Error: GUI Error: [string "./Scripts/dictionary.lua"]:706: bad argument #1 to 'pairs' (table expected, got boolean)
GUI debug.traceback: stack traceback:
[C]: ?
[C]: in function 'pairs'
[string "./Scripts/dictionary.lua"]:706: in function 'getLangs'
[string "./MissionEditor/modules/me_statusbar.lua"]:229: in function 'fillListboxLangs'
[string "./MissionEditor/modules/me_statusbar.lua"]:191: in function 'updateLang'
[string "./MissionEditor/modules/me_mission.lua"]:1635: in function 'load'
[string "./MissionEditor/modules/me_toolbar.lua"]:698: in function 'func'
[string "./Scripts/UI/ProgressBarDialog.lua"]:154: in function 'updater'
[string "./Scripts/UpdateManager.lua"]:64: in function <[string "./Scripts/UpdateManager.lua"]:40>

Quote

Немој ништа силом, узми већи чекић!

MSI Tomahawk MAX | Ryzen 7 3700x | 32GB DDR4 3200MHz | RX 5700 XT OC Red Dragon 8GB | VPC Throttle CM3 + VPC Constellation ALPHA on VPC WarBRD Base | HP Reverb G2

 Youtube Follow Me on TWITCH! 

Link to comment
Share on other sites

Also please try to edit that file, then load mission, or just go in mission editor and try OPEN (load mission).... no logic to me that after that ME is broken, DCS/PC crash.

Something stuck in memory?

Quote

Немој ништа силом, узми већи чекић!

MSI Tomahawk MAX | Ryzen 7 3700x | 32GB DDR4 3200MHz | RX 5700 XT OC Red Dragon 8GB | VPC Throttle CM3 + VPC Constellation ALPHA on VPC WarBRD Base | HP Reverb G2

 Youtube Follow Me on TWITCH! 

Link to comment
Share on other sites

I've launched the mission from the ME. I got a bunch of error messages popping up. Here are most of them:

 

error3.png.aa5307ee5f251cce615d4ef89b7140c4.png

error2.png.e70c03707dbd8e3cc8de419f636228e4.png

error4.png.f65e1cbef73ff92ad4b6475cc6a0fc9e.png

error1.png.7cbd6064f38aa09b251fa3eb13135be5.png

error5.png.da219ccffaa407cc4a1da3c52c1aa7b9.png

error6.png.7d174372938f96456fa2ed80498839e1.png

 

Since you're using the assert(loadfile()) command, I think I'm missing a few scripts. Please tell me which error messages you're getting and which you're not (just call them 1, 2, 3...).

error3.png.a65c66e4258c155e698f731dada649a3.png

Don't accept indie game testing requests from friends in Discord. Ever.

Link to comment
Share on other sites

Second one.. about DZHUBGA FARP

 

Farp and all his units are removed from mission

All triggers for that farp are removed from mission

 

Also you will see some units "TTTTTTTTTTTTT" , TEST, and so many names that are used trough mission building for testing and are also removed... thats why i said dictionary not going to be updated.

Quote

Немој ништа силом, узми већи чекић!

MSI Tomahawk MAX | Ryzen 7 3700x | 32GB DDR4 3200MHz | RX 5700 XT OC Red Dragon 8GB | VPC Throttle CM3 + VPC Constellation ALPHA on VPC WarBRD Base | HP Reverb G2

 Youtube Follow Me on TWITCH! 

Link to comment
Share on other sites

One more report about dictionary file:

 

I have a suspicion that repeated edits of missions just make the missions bloat, EVEN if you reduce the actual number of objects and instructions in a mission (which should make them smaller). It's almost as if they keep a memory of all previous edits and are therefore an miz file cannot be used as a template for a new mission. . .

See the dictionary file inside the mission pack.

 

I've only ever held this as a speculative opinion, but your comment reminded me of it.

Quote

Немој ништа силом, узми већи чекић!

MSI Tomahawk MAX | Ryzen 7 3700x | 32GB DDR4 3200MHz | RX 5700 XT OC Red Dragon 8GB | VPC Throttle CM3 + VPC Constellation ALPHA on VPC WarBRD Base | HP Reverb G2

 Youtube Follow Me on TWITCH! 

Link to comment
Share on other sites

After you sent me the scripts, I edited each "assert()" trigger to change the scripts paths. I simply replaced "C:\Users\Administrator\..." by "C:\Users\Flav\..." so the editor could find the scripts. And boom, no errors anymore when mission starts.

You should give it a go: move your scripts in another folder, then edit the paths of the "assert()" calls and see what you get.

Don't accept indie game testing requests from friends in Discord. Ever.

Link to comment
Share on other sites

I did already (before report i renamed folder, also changed folder)... But ok will try again. Maybe that was reason once that error was not repeated but i stay focused on fixing script. Will try with new folder anyway.

Quote

Немој ништа силом, узми већи чекић!

MSI Tomahawk MAX | Ryzen 7 3700x | 32GB DDR4 3200MHz | RX 5700 XT OC Red Dragon 8GB | VPC Throttle CM3 + VPC Constellation ALPHA on VPC WarBRD Base | HP Reverb G2

 Youtube Follow Me on TWITCH! 

Link to comment
Share on other sites

Still fighting... no error message in game but CTLD is not loaded.

2020-11-16 13:38:59.666 ERROR SCRIPTING: Mission script error: [string "ctld.deactivatePickupZone("R_LAZ_PZone")"]:1: attempt to index global 'ctld' (a nil value)
stack traceback:
[C]: ?
[string "ctld.deactivatePickupZone("R_LAZ_PZone")"]:1: in main chunk
2020-11-16 13:38:59.666 ERROR SCRIPTING: Mission script error: [string "ctld.deactivatePickupZone("R_DZHUBGA_PZ")"]:1: attempt to index global 'ctld' (a nil value)
stack traceback:
[C]: ?
[string "ctld.deactivatePickupZone("R_DZHUBGA_PZ")"]:1: in main chunk
2020-11-16 13:38:59.666 ERROR SCRIPTING: Mission script error: [string "ctld.deactivatePickupZone("B_GU_PZone")"]:1: attempt to index global 'ctld' (a nil value)
stack traceback:
[C]: ?
[string "ctld.deactivatePickupZone("B_GU_PZone")"]:1: in main chunk
2020-11-16 13:39:10.666 ERROR SCRIPTING: Mission script error: [string "ctld.activatePickupZone("R_LAZ_PZone")"]:1: attempt to index global 'ctld' (a nil value)
stack traceback:
[C]: ?
[string "ctld.activatePickupZone("R_LAZ_PZone")"]:1: in main chunk
2020-11-16 13:39:10.666 ERROR SCRIPTING: Mission script error: [string "ctld.activatePickupZone("R_DZHUBGA_PZ")"]:1: attempt to index global 'ctld' (a nil value)
stack traceback:
[C]: ?
[string "ctld.activatePickupZone("R_DZHUBGA_PZ")"]:1: in main chunk

 

Did you start mission with edited dictionary file? @Flappie

Quote

Немој ништа силом, узми већи чекић!

MSI Tomahawk MAX | Ryzen 7 3700x | 32GB DDR4 3200MHz | RX 5700 XT OC Red Dragon 8GB | VPC Throttle CM3 + VPC Constellation ALPHA on VPC WarBRD Base | HP Reverb G2

 Youtube Follow Me on TWITCH! 

Link to comment
Share on other sites

No, I didn't edit the dictionary (old FARPs are still in there) and I have errors in the log, indeed. But these are slightly different:

 

2020-11-16 13:56:35.937 ERROR SCRIPTING: Mission script error: [string "C:\Users\Flav\Saved Games\DCS.openbeta_server\Missions\scripts\SGSOperationRollingThunder.lua"]:90: attempt to index global 'lfs' (a nil value)
stack traceback:
[C]: ?
[string "C:\Users\Flav\Saved Games\DCS.openbeta_server\Missions\scripts\SGSOperationRollingThunder.lua"]:90: in function 'file_exists'
[string "C:\Users\Flav\Saved Games\DCS.openbeta_server\Missions\scripts\SGSOperationRollingThunder.lua"]:105: in main chunk
[string "assert(loadfile("C:\\Users\\Flav\\Saved Games\\DCS.openbeta_server\\Missions\\scripts\\SGSOperationRollingThunder.lua"))()"]:1: in main chunk

 

2020-11-16 13:56:38.130 ERROR SCRIPTING: Mission script error: [string "assert(loadfile("C:\\Users\\Flav\\Saved Games\\DCS.openbeta_ser..."]:1: unfinished string near '<eof>'
2020-11-16 13:56:42.141 ERROR SCRIPTING: Mission script error: [string "ctld.deactivatePickupZone("[b]B_SOCHI_PZ[/b]")..."]:1: attempt to index global 'ctld' (a nil value)
stack traceback:
[C]: ?
[string "ctld.deactivatePickupZone("B_SOCHI_PZ")..."]:1: in main chunk
2020-11-16 13:56:56.039 ERROR SCRIPTING: Mission script error: [string "ctld.deactivatePickupZone("R_LAZ_PZone")"]:1: attempt to index global 'ctld' (a nil value)
stack traceback:
[C]: ?
[string "ctld.deactivatePickupZone("R_LAZ_PZone")"]:1: in main chunk
2020-11-16 13:56:56.039 ERROR SCRIPTING: Mission script error: [string "ctld.deactivatePickupZone("R_DZHUBGA_PZ")"]:1: attempt to index global 'ctld' (a nil value)
stack traceback:
[C]: ?
[string "ctld.deactivatePickupZone("R_DZHUBGA_PZ")"]:1: in main chunk
2020-11-16 13:56:56.039 ERROR SCRIPTING: Mission script error: [string "ctld.deactivatePickupZone("B_GU_PZone")"]:1: attempt to index global 'ctld' (a nil value)
stack traceback:
[C]: ?
[string "ctld.deactivatePickupZone("B_GU_PZone")"]:1: in main chunk

Don't accept indie game testing requests from friends in Discord. Ever.

Link to comment
Share on other sites

Because of that errors seems CTLD is not loaded. Did you try some chopper and CTLD?

Quote

Немој ништа силом, узми већи чекић!

MSI Tomahawk MAX | Ryzen 7 3700x | 32GB DDR4 3200MHz | RX 5700 XT OC Red Dragon 8GB | VPC Throttle CM3 + VPC Constellation ALPHA on VPC WarBRD Base | HP Reverb G2

 Youtube Follow Me on TWITCH! 

Link to comment
Share on other sites

You were right, the CTLD menu was not showing up... simply because the instanciation of CTLD was missing a few characters! (in red, below)

assert(loadfile("C:\\Users\\Flav\\Saved Games\\DCS.openbeta_server\\Missions\\scripts\\CTLD.lua[color=#e74c3c]"))()[/color]

 

Now CTLD works just fine, and I only have this error message left:

 

2020-11-16 17:54:26.345 ERROR SCRIPTING: Mission script error: [string "C:\Users\Flav\Saved Games\DCS.openbeta_server\Missions\scripts\SGSOperationRollingThunder.lua"]:90: attempt to index global 'lfs' (a nil value)
stack traceback:
[C]: ?
[string "C:\Users\Flav\Saved Games\DCS.openbeta_server\Missions\scripts\SGSOperationRollingThunder.lua"]:90: in function 'file_exists'
[string "C:\Users\Flav\Saved Games\DCS.openbeta_server\Missions\scripts\SGSOperationRollingThunder.lua"]:105: in main chunk
[string "assert(loadfile("C:\\Users\\Flav\\Saved Games\\DCS.openbeta_server\\Missions\\scripts\\SGSOperationRollingThunder.lua"))()"]:1: in main chunk

 

Conclusion: no need to mess with the dictionary.

Don't accept indie game testing requests from friends in Discord. Ever.

Link to comment
Share on other sites

Sorry for your time @Flappie . I found what caused DZHUBGA FARP ERROR.... i had one trigger (that giving info to chopper pilots about transport blocked or not) and in that trigger was DZHUBGA Farp pickup zone. No more errors and CTLD is loaded correctly. Yeah, CTLD script is offtopic seems now.

 

Seems that dictionary file was not caused problems even is still full of old infos (outdated). Maybe devs can find solution for update on saving mission to reduce mission size.

 

 

Quote

Немој ништа силом, узми већи чекић!

MSI Tomahawk MAX | Ryzen 7 3700x | 32GB DDR4 3200MHz | RX 5700 XT OC Red Dragon 8GB | VPC Throttle CM3 + VPC Constellation ALPHA on VPC WarBRD Base | HP Reverb G2

 Youtube Follow Me on TWITCH! 

Link to comment
Share on other sites

...I only have this error message left:

 

2020-11-16 17:54:26.345 ERROR SCRIPTING: Mission script error: [string "C:\Users\Flav\Saved Games\DCS.openbeta_server\Missions\scripts\SGSOperationRollingThunder.lua"]:90: attempt to index global 'lfs' (a nil value)
stack traceback:
[C]: ?
[string "C:\Users\Flav\Saved Games\DCS.openbeta_server\Missions\scripts\SGSOperationRollingThunder.lua"]:90: in function 'file_exists'
[string "C:\Users\Flav\Saved Games\DCS.openbeta_server\Missions\scripts\SGSOperationRollingThunder.lua"]:105: in main chunk
[string "assert(loadfile("C:\\Users\\Flav\\Saved Games\\DCS.openbeta_server\\Missions\\scripts\\SGSOperationRollingThunder.lua"))()"]:1: in main chunk

..

 

That is because sanitized lfs in MissionScripting.lua.

 

 

Quote

Немој ништа силом, узми већи чекић!

MSI Tomahawk MAX | Ryzen 7 3700x | 32GB DDR4 3200MHz | RX 5700 XT OC Red Dragon 8GB | VPC Throttle CM3 + VPC Constellation ALPHA on VPC WarBRD Base | HP Reverb G2

 Youtube Follow Me on TWITCH! 

Link to comment
Share on other sites

  • 2 months later...

I also have an issue with the dictionary.lua. Whenever I try to load a certain mission (see attached) in the mission editor, DCS hangs up on the loading screen, giving me this error message in the log:

 

2021-01-18 14:55:18.072 ALERT   LUACOMMON: Error: GUI Error: [string "./Scripts/dictionary.lua"]:706: bad argument #1 to 'pairs' (table expected, got boolean)
GUI debug.traceback: stack traceback:
	[C]: ?
	[C]: in function 'pairs'
	[string "./Scripts/dictionary.lua"]:706: in function 'getLangs'
	[string "./MissionEditor/modules/me_statusbar.lua"]:229: in function 'fillListboxLangs'
	[string "./MissionEditor/modules/me_statusbar.lua"]:191: in function 'updateLang'
	[string "./MissionEditor/modules/me_mission.lua"]:1635: in function 'load'
	[string "./MissionEditor/modules/me_toolbar.lua"]:707: in function 'func'
	[string "./Scripts/UI/ProgressBarDialog.lua"]:154: in function 'updater'
	[string "./Scripts/UpdateManager.lua"]:64: in function <[string "./Scripts/UpdateManager.lua"]:40>

 

I nailed it down to the mission file included in the .miz-archive. I just can't figure out what exactly is wrong with the mission file that causes this.

 

Anyone knowledgeable willing to help out here? :smile:

Operation Active Shield_first.miz

Intel i7-12700K @ 8x5GHz+4x3.8GHz + 32 GB DDR5 RAM + Nvidia Geforce RTX 2080 (8 GB VRAM) + M.2 SSD + Windows 10 64Bit

 

DCS Panavia Tornado (IDS) really needs to be a thing!

 

Tornado3 small.jpg

Link to comment
Share on other sites

Hi @QuiGon. 🖖 (V for Viggen, get it?)

 

Your mission triggers the same error from my end.

I activated the full debug mode and got this message in the log:

 

021-01-18 18:31:01.284 DEBUG   LuaGUI: error loading dictionary	DEFAULT	[string "dictionary = {..."]:715: unfinished string near ''local exportString = "";'
2021-01-18 18:31:01.284 DEBUG   LuaGUI: GUI Error: [string "./Scripts/dictionary.lua"]:706: bad argument #1 to 'pairs' (table expected, got boolean)
GUI debug.traceback: stack traceback:
	[C]: ?
	[C]: in function 'pairs'
	[string "./Scripts/dictionary.lua"]:706: in function 'getLangs'
	[string "./MissionEditor/modules/me_statusbar.lua"]:229: in function 'fillListboxLangs'
...

 

And here it is, line 715 in your mission dictionary:

 

    ['DictKey_ActionText_1461'] = 'local exportString = "";

 

There's a lonely ' quote before "local".

 

 

 

 

  • Thanks 1

Don't accept indie game testing requests from friends in Discord. Ever.

Link to comment
Share on other sites

Hmm, this dictionary mission file causes me a lot of headache as it lists a lot of units/groups/waypoints that I have deleted from the mission long ago and introduces syntax errors as @Flappie pointed out to me. I'm not sure how to deal with that.

Can I just manually delete all the "DictKey..." entries from units/waypoints/groups that don't exist anymore in the mission?
What about the erroneous

['DictKey_ActionText_1461'] = 'local exportString = "";

entry? Can I just remove it or is it required for something?


Edited by QuiGon

Intel i7-12700K @ 8x5GHz+4x3.8GHz + 32 GB DDR5 RAM + Nvidia Geforce RTX 2080 (8 GB VRAM) + M.2 SSD + Windows 10 64Bit

 

DCS Panavia Tornado (IDS) really needs to be a thing!

 

Tornado3 small.jpg

Link to comment
Share on other sites

  • 2 years later...

I found this when googling "Missione editor dictionary cleanup" after noticing the same problem. Perhaps not a biggie, but definitely making a programmer in me uneasy. I experimented just a little with the information that the keys all start with DictKey_... and when I unzip the mission to an empty tmp directory, I can then run the following bash command:

grep -r DictKey_ --exclude=dictionary | sed -e 's|^.*["'\'']\(DictKey_[^"'\'']*\).*$|\1|g'

This ignores the directory files and assumes the DictKey_ strings are in double or single quotes (Lua strings, ME seems to use only ", but scripts can use ' as well). This is just a first step, as you still need to go through the dictionary file(s).

Based on this I created the attached bash script, place it out of the extracted mission directory, but run it from there (current directory is in the extracted mission folder) - example output:

$ /h/work/.../scripts/cleanup_dictionaries.sh
Used keys:
DictKey_descriptionBlueTask_3
DictKey_descriptionNeutralsTask_4
DictKey_descriptionRedTask_2
DictKey_descriptionText_1
DictKey_sortie_5

Processing l10n/DEFAULT/dictionary
Removing:     ["DictKey_ActionText_10"] = "L-39 is doing it... maybe!",
Removing:     ["DictKey_ActionText_6"] = "TEST #1",
Removing:     ["DictKey_ActionText_7"] = "TEST #2",
Removing:     ["DictKey_ActionText_18"] = "",
Removing:     ["DictKey_ActionText_13"] = "Test G2",
Removing:     ["DictKey_ActionText_16"] = "Alive once!",
Removing:     ["DictKey_ActionText_14"] = "xxx",
Removing:     ["DictKey_ActionText_9"] = "",
Removing:     ["DictKey_ActionText_11"] = "Test G1",
Removing:     ["DictKey_ActionText_8"] = "TEST #3 (Doesn't make sense!)",
Removing:     ["DictKey_ActionText_15"] = "Alive",
Removing:     ["DictKey_ActionText_17"] = "",
DONE

After this, I renamed dictionary.fixed to dictionary, overwriting the original (this also can be automated, if you feel brave). This version can be run repeatedly without changing the dictionary file. If you uncomment the two mv commands after the done < $dictfile line, it will do it for you, but then it overwrites the bak file the second time you run it.

Obviously: TRY AT YOUR OWN RISK 🙂 I haven't tested it on any complex missions.

After the process, zip the content of the mission directory into a new file (without the directory itself), try to open it in ME, check it, resave it (DCS zips differently than my tool - although that is probably not a problem) and try to play it. If it works, good for you.

cleanup_dictionaries.sh

✈️ L-39, F-5E, F/A-18C, MiG-15, F-86F, C-101, FC3 🛩️ Yak-52, P-47, Spitfire 🚁 UH-1H, Ka-50 III 🗺️ NTTR, PG, SY, Chnl, Norm2 📦 Supercarrier, NS430, WWII 🕹️ VKB STECS+Gladiator/Kosmosima ▶️ DCS Unscripted YouTube

Link to comment
Share on other sites

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...