summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bin15/mir_full.sln11
-rw-r--r--bin15/mir_icons.sln20
-rw-r--r--plugins/PluginUpdater/src/DlgUpdate.cpp1
-rw-r--r--protocols/Dummy/src/main.cpp9
-rw-r--r--protocols/MRA/CMakeLists.txt6
-rw-r--r--protocols/MRA/Mra.vcxproj34
-rw-r--r--protocols/MRA/Mra.vcxproj.filters4
-rw-r--r--protocols/MRA/docs/Mail.ru Agent.files/0.gifbin103 -> 0 bytes
-rw-r--r--protocols/MRA/docs/Mail.ru Agent.files/1.gifbin35 -> 0 bytes
-rw-r--r--protocols/MRA/docs/Mail.ru Agent.files/WindowOpen.js44
-rw-r--r--protocols/MRA/docs/Mail.ru Agent.files/_mail.gifbin929 -> 0 bytes
-rw-r--r--protocols/MRA/docs/Mail.ru Agent.files/agentlogo.gifbin1866 -> 0 bytes
-rw-r--r--protocols/MRA/docs/Mail.ru Agent.files/cards-all.gifbin240 -> 0 bytes
-rw-r--r--protocols/MRA/docs/Mail.ru Agent.files/cars-all.gifbin249 -> 0 bytes
-rw-r--r--protocols/MRA/docs/Mail.ru Agent.files/chat-all.gifbin1039 -> 0 bytes
-rw-r--r--protocols/MRA/docs/Mail.ru Agent.files/content-all.gifbin599 -> 0 bytes
-rw-r--r--protocols/MRA/docs/Mail.ru Agent.files/go-all.gifbin1019 -> 0 bytes
-rw-r--r--protocols/MRA/docs/Mail.ru Agent.files/index.css501
-rw-r--r--protocols/MRA/docs/Mail.ru Agent.files/love-all.gifbin558 -> 0 bytes
-rw-r--r--protocols/MRA/docs/Mail.ru Agent.files/molotok-all.gifbin362 -> 0 bytes
-rw-r--r--protocols/MRA/docs/Mail.ru Agent.files/proto.css39
-rw-r--r--protocols/MRA/docs/Mail.ru Agent.files/tour-all.gifbin256 -> 0 bytes
-rw-r--r--protocols/MRA/docs/Mail.ru Agent.htm635
-rw-r--r--protocols/MRA/docs/MraPlaces.h3174
-rw-r--r--protocols/MRA/docs/TODO.txt28
-rw-r--r--protocols/MRA/docs/proto.htm103
-rw-r--r--protocols/MRA/docs/readme.txt502
-rw-r--r--protocols/MRA/docs/region.txt3353
-rw-r--r--protocols/MRA/docs/region_m.txt3150
-rw-r--r--protocols/MRA/proto_mra/CMakeLists.txt2
-rw-r--r--protocols/MRA/proto_mra/Proto_MRA.vcxproj28
-rw-r--r--protocols/MRA/proto_mra/Proto_MRA.vcxproj.filters4
-rw-r--r--protocols/MRA/proto_mra/res/Away.icobin5430 -> 0 bytes
-rw-r--r--protocols/MRA/proto_mra/res/DND.icobin5430 -> 0 bytes
-rw-r--r--protocols/MRA/proto_mra/res/FFC.icobin5430 -> 0 bytes
-rw-r--r--protocols/MRA/proto_mra/res/Invisible.icobin5430 -> 0 bytes
-rw-r--r--protocols/MRA/proto_mra/res/Mobile.icobin5430 -> 0 bytes
-rw-r--r--protocols/MRA/proto_mra/res/Offline.icobin5430 -> 0 bytes
-rw-r--r--protocols/MRA/proto_mra/res/Online.icobin5430 -> 0 bytes
-rw-r--r--protocols/MRA/proto_mra/res/Proto_MRA.rc75
-rw-r--r--protocols/MRA/proto_mra/src/resource.h22
-rw-r--r--protocols/MRA/res/Alarm.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/res/AuthGrant.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/res/AuthReguest.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/res/BlogStatus.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/res/Deleted.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/res/Info.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/res/Magent.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/res/Mail.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/res/MailNotify.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/res/Phone.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/res/Photo.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/res/PostCards.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/res/WebSearch.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/res/answers.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/res/my world.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/res/resource.rc338
-rw-r--r--protocols/MRA/res/version.rc9
-rw-r--r--protocols/MRA/res/video.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/src/Mra.cpp60
-rw-r--r--protocols/MRA/src/MraAdvancedSearch.cpp313
-rw-r--r--protocols/MRA/src/MraAvatars.cpp636
-rw-r--r--protocols/MRA/src/MraAvatars.h14
-rw-r--r--protocols/MRA/src/MraChat.cpp221
-rw-r--r--protocols/MRA/src/MraConstans.h243
-rw-r--r--protocols/MRA/src/MraFilesQueue.cpp1146
-rw-r--r--protocols/MRA/src/MraFilesQueue.h17
-rw-r--r--protocols/MRA/src/MraIcons.cpp145
-rw-r--r--protocols/MRA/src/MraIcons.h10
-rw-r--r--protocols/MRA/src/MraMPop.cpp174
-rw-r--r--protocols/MRA/src/MraMPop.h11
-rw-r--r--protocols/MRA/src/MraMRIMProxy.cpp199
-rw-r--r--protocols/MRA/src/MraMRIMProxy.h13
-rw-r--r--protocols/MRA/src/MraOfflineMsg.cpp264
-rw-r--r--protocols/MRA/src/MraOfflineMsg.h8
-rw-r--r--protocols/MRA/src/MraPlaces.h5956
-rw-r--r--protocols/MRA/src/MraPopUp.cpp284
-rw-r--r--protocols/MRA/src/MraPopUp.h15
-rw-r--r--protocols/MRA/src/MraProto.cpp554
-rw-r--r--protocols/MRA/src/MraProto.h349
-rw-r--r--protocols/MRA/src/MraRTFMsg.cpp246
-rw-r--r--protocols/MRA/src/MraRTFMsg.h9
-rw-r--r--protocols/MRA/src/MraSelectEMail.cpp152
-rw-r--r--protocols/MRA/src/MraSelectEMail.h15
-rw-r--r--protocols/MRA/src/MraSendCommand.cpp542
-rw-r--r--protocols/MRA/src/MraSendQueue.cpp161
-rw-r--r--protocols/MRA/src/MraSendQueue.h16
-rw-r--r--protocols/MRA/src/Mra_functions.cpp1439
-rw-r--r--protocols/MRA/src/Mra_menus.cpp408
-rw-r--r--protocols/MRA/src/Mra_options.cpp244
-rw-r--r--protocols/MRA/src/Mra_proto.cpp1966
-rw-r--r--protocols/MRA/src/Mra_svcs.cpp667
-rw-r--r--protocols/MRA/src/Sdk/BuffToLowerCase.h95
-rw-r--r--protocols/MRA/src/Sdk/FIFOMT.h73
-rw-r--r--protocols/MRA/src/Sdk/InterlockedFunctions.h53
-rw-r--r--protocols/MRA/src/Sdk/InternetTime.h290
-rw-r--r--protocols/MRA/src/Sdk/ListMT.h200
-rw-r--r--protocols/MRA/src/Sdk/MemoryFind.h76
-rw-r--r--protocols/MRA/src/Sdk/MemoryFindByte.h47
-rw-r--r--protocols/MRA/src/Sdk/RC4.h99
-rw-r--r--protocols/MRA/src/Sdk/SHA1.h87
-rw-r--r--protocols/MRA/src/Sdk/StrHexToNum.h72
-rw-r--r--protocols/MRA/src/Sdk/StrToNum.h85
-rw-r--r--protocols/MRA/src/Sdk/timefuncs.h105
-rw-r--r--protocols/MRA/src/proto.h611
-rw-r--r--protocols/MRA/src/resource.h128
-rw-r--r--protocols/MRA/src/stdafx.cxx18
-rw-r--r--protocols/MRA/src/stdafx.h215
-rw-r--r--protocols/MRA/src/version.h13
-rw-r--r--protocols/MRA/xstatus_mra/CMakeLists.txt2
-rw-r--r--protocols/MRA/xstatus_mra/res/10.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/xstatus_mra/res/11.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/xstatus_mra/res/12.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/xstatus_mra/res/13.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/xstatus_mra/res/14.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/xstatus_mra/res/15.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/xstatus_mra/res/16.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/xstatus_mra/res/17.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/xstatus_mra/res/18.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/xstatus_mra/res/19.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/xstatus_mra/res/20.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/xstatus_mra/res/21.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/xstatus_mra/res/22.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/xstatus_mra/res/23.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/xstatus_mra/res/24.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/xstatus_mra/res/25.txt2
-rw-r--r--protocols/MRA/xstatus_mra/res/26.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/xstatus_mra/res/27.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/xstatus_mra/res/28.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/xstatus_mra/res/29.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/xstatus_mra/res/30.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/xstatus_mra/res/31.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/xstatus_mra/res/32.txt2
-rw-r--r--protocols/MRA/xstatus_mra/res/33.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/xstatus_mra/res/34.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/xstatus_mra/res/35.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/xstatus_mra/res/36.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/xstatus_mra/res/37.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/xstatus_mra/res/38.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/xstatus_mra/res/39.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/xstatus_mra/res/4.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/xstatus_mra/res/40.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/xstatus_mra/res/41.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/xstatus_mra/res/42.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/xstatus_mra/res/43.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/xstatus_mra/res/44.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/xstatus_mra/res/45.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/xstatus_mra/res/46.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/xstatus_mra/res/47.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/xstatus_mra/res/48.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/xstatus_mra/res/49.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/xstatus_mra/res/5.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/xstatus_mra/res/50.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/xstatus_mra/res/51.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/xstatus_mra/res/52.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/xstatus_mra/res/53.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/xstatus_mra/res/54.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/xstatus_mra/res/6.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/xstatus_mra/res/7.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/xstatus_mra/res/8.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/xstatus_mra/res/9.icobin1150 -> 0 bytes
-rw-r--r--protocols/MRA/xstatus_mra/res/icon1.icobin5430 -> 0 bytes
-rw-r--r--protocols/MRA/xstatus_mra/res/unknown.icobin5430 -> 0 bytes
-rw-r--r--protocols/MRA/xstatus_mra/res/xstatus_MRA.rc144
-rw-r--r--protocols/MRA/xstatus_mra/src/resource.h67
-rw-r--r--protocols/MRA/xstatus_mra/xStatus_MRA.vcxproj28
-rw-r--r--protocols/MRA/xstatus_mra/xStatus_MRA.vcxproj.filters4
-rw-r--r--src/mir_app/src/newplugins.cpp1
-rw-r--r--tools/build_scripts/bin15/z2_PackPluginUpdater_x32.txt1
-rw-r--r--tools/build_scripts/bin15/z2_PackPluginUpdater_x64.txt1
-rw-r--r--tools/build_scripts/z2_PackPluginUpdater.bat1
171 files changed, 11 insertions, 31098 deletions
diff --git a/bin15/mir_full.sln b/bin15/mir_full.sln
index 7c8fcee5c2..4bbd5fd282 100644
--- a/bin15/mir_full.sln
+++ b/bin15/mir_full.sln
@@ -116,8 +116,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Variables", "..\plugins\Var
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WhenWasIt", "..\plugins\WhenWasIt\WhenWasIt.vcxproj", "{63E05ECA-0A63-479E-86BD-2CAF53869BDA}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MRA", "..\protocols\MRA\Mra.vcxproj", "{EE182018-5D3D-43F3-955F-7B5AB0BE2FCA}"
-EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Facebook", "..\protocols\FacebookRM\facebook.vcxproj", "{DADE9455-DC28-465A-9604-2CA28052B9FB}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SpellChecker", "..\plugins\SpellChecker\spellchecker.vcxproj", "{5DB86086-10E9-42E7-AC90-503D2678C2A2}"
@@ -903,14 +901,6 @@ Global
{63E05ECA-0A63-479E-86BD-2CAF53869BDA}.Release|Win32.Build.0 = Release|Win32
{63E05ECA-0A63-479E-86BD-2CAF53869BDA}.Release|x64.ActiveCfg = Release|x64
{63E05ECA-0A63-479E-86BD-2CAF53869BDA}.Release|x64.Build.0 = Release|x64
- {EE182018-5D3D-43F3-955F-7B5AB0BE2FCA}.Debug|Win32.ActiveCfg = Debug|Win32
- {EE182018-5D3D-43F3-955F-7B5AB0BE2FCA}.Debug|Win32.Build.0 = Debug|Win32
- {EE182018-5D3D-43F3-955F-7B5AB0BE2FCA}.Debug|x64.ActiveCfg = Debug|x64
- {EE182018-5D3D-43F3-955F-7B5AB0BE2FCA}.Debug|x64.Build.0 = Debug|x64
- {EE182018-5D3D-43F3-955F-7B5AB0BE2FCA}.Release|Win32.ActiveCfg = Release|Win32
- {EE182018-5D3D-43F3-955F-7B5AB0BE2FCA}.Release|Win32.Build.0 = Release|Win32
- {EE182018-5D3D-43F3-955F-7B5AB0BE2FCA}.Release|x64.ActiveCfg = Release|x64
- {EE182018-5D3D-43F3-955F-7B5AB0BE2FCA}.Release|x64.Build.0 = Release|x64
{DADE9455-DC28-465A-9604-2CA28052B9FB}.Debug|Win32.ActiveCfg = Debug|Win32
{DADE9455-DC28-465A-9604-2CA28052B9FB}.Debug|Win32.Build.0 = Debug|Win32
{DADE9455-DC28-465A-9604-2CA28052B9FB}.Debug|x64.ActiveCfg = Debug|x64
@@ -2084,7 +2074,6 @@ Global
{37C2B9A4-63EF-49E8-BF23-677B5EBD73E9} = {D8EA3AE1-64AA-42ED-9F13-83F6C7B5AA55}
{1948EAEA-4C25-4F6B-AD9E-5891F656EADA} = {703CFA44-C8E8-4547-B597-AE239F4F6DD9}
{82F96271-4136-4B0E-AB6F-040DE7A4DD1E} = {D8EA3AE1-64AA-42ED-9F13-83F6C7B5AA55}
- {EE182018-5D3D-43F3-955F-7B5AB0BE2FCA} = {A035B524-0F2D-45D0-BCF2-3C20279C77E2}
{DADE9455-DC28-465A-9604-2CA28052B9FB} = {A035B524-0F2D-45D0-BCF2-3C20279C77E2}
{E37561EB-B9C5-4215-9FF9-DB559916FBA2} = {703CFA44-C8E8-4547-B597-AE239F4F6DD9}
{A9265E36-7F2D-440C-BF3E-F447FDB6200F} = {703CFA44-C8E8-4547-B597-AE239F4F6DD9}
diff --git a/bin15/mir_icons.sln b/bin15/mir_icons.sln
index 79409e1b37..67d445bbd0 100644
--- a/bin15/mir_icons.sln
+++ b/bin15/mir_icons.sln
@@ -24,8 +24,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Proto_IRC", "..\protocols\I
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Proto_Jabber", "..\protocols\JabberG\proto_jabber\Proto_Jabber.vcxproj", "{1AA0A504-0644-4F00-A1AD-F55D69E50DD0}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Proto_MRA", "..\protocols\MRA\proto_mra\Proto_MRA.vcxproj", "{38BF6F63-58E7-442D-A7E8-B4BD57D224E2}"
-EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Proto_MSN", "..\protocols\MSN\proto_msn\Proto_MSN.vcxproj", "{7BC6C3E7-2B17-4718-A82E-084798710E14}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Proto_GG", "..\protocols\Gadu-Gadu\proto_gg\Proto_GG.vcxproj", "{33912E32-3B68-4E2C-82AE-64C06EE987A7}"
@@ -58,8 +56,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Fp_icons", "..\plugins\Fing
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Proto_VKontakte", "..\protocols\VKontakte\proto_vkontakte\Proto_VKontakte.vcxproj", "{5F8495EF-0765-4E03-905D-639BDBF05B4F}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xStatus_MRA", "..\protocols\MRA\xstatus_mra\xStatus_MRA.vcxproj", "{5B84781D-F1C3-4535-99B7-B84B6C9BCF15}"
-EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Proto_Sametime", "..\protocols\Sametime\proto_sametime\Proto_Sametime.vcxproj", "{217C99B1-0D5E-4A85-A84F-836FCA167B25}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Proto_MetaContacts", "..\src\icons\proto_metacontacts\Proto_MetaContacts.vcxproj", "{793B6174-89B0-4682-A957-A32BE7F61502}"
@@ -172,14 +168,6 @@ Global
{1AA0A504-0644-4F00-A1AD-F55D69E50DD0}.Release|Win32.Build.0 = Release|Win32
{1AA0A504-0644-4F00-A1AD-F55D69E50DD0}.Release|x64.ActiveCfg = Release|x64
{1AA0A504-0644-4F00-A1AD-F55D69E50DD0}.Release|x64.Build.0 = Release|x64
- {38BF6F63-58E7-442D-A7E8-B4BD57D224E2}.Debug|Win32.ActiveCfg = Debug|Win32
- {38BF6F63-58E7-442D-A7E8-B4BD57D224E2}.Debug|Win32.Build.0 = Debug|Win32
- {38BF6F63-58E7-442D-A7E8-B4BD57D224E2}.Debug|x64.ActiveCfg = Debug|x64
- {38BF6F63-58E7-442D-A7E8-B4BD57D224E2}.Debug|x64.Build.0 = Debug|x64
- {38BF6F63-58E7-442D-A7E8-B4BD57D224E2}.Release|Win32.ActiveCfg = Release|Win32
- {38BF6F63-58E7-442D-A7E8-B4BD57D224E2}.Release|Win32.Build.0 = Release|Win32
- {38BF6F63-58E7-442D-A7E8-B4BD57D224E2}.Release|x64.ActiveCfg = Release|x64
- {38BF6F63-58E7-442D-A7E8-B4BD57D224E2}.Release|x64.Build.0 = Release|x64
{7BC6C3E7-2B17-4718-A82E-084798710E14}.Debug|Win32.ActiveCfg = Debug|Win32
{7BC6C3E7-2B17-4718-A82E-084798710E14}.Debug|Win32.Build.0 = Debug|Win32
{7BC6C3E7-2B17-4718-A82E-084798710E14}.Debug|x64.ActiveCfg = Debug|x64
@@ -308,14 +296,6 @@ Global
{5F8495EF-0765-4E03-905D-639BDBF05B4F}.Release|Win32.Build.0 = Release|Win32
{5F8495EF-0765-4E03-905D-639BDBF05B4F}.Release|x64.ActiveCfg = Release|x64
{5F8495EF-0765-4E03-905D-639BDBF05B4F}.Release|x64.Build.0 = Release|x64
- {5B84781D-F1C3-4535-99B7-B84B6C9BCF15}.Debug|Win32.ActiveCfg = Debug|Win32
- {5B84781D-F1C3-4535-99B7-B84B6C9BCF15}.Debug|Win32.Build.0 = Debug|Win32
- {5B84781D-F1C3-4535-99B7-B84B6C9BCF15}.Debug|x64.ActiveCfg = Debug|x64
- {5B84781D-F1C3-4535-99B7-B84B6C9BCF15}.Debug|x64.Build.0 = Debug|x64
- {5B84781D-F1C3-4535-99B7-B84B6C9BCF15}.Release|Win32.ActiveCfg = Release|Win32
- {5B84781D-F1C3-4535-99B7-B84B6C9BCF15}.Release|Win32.Build.0 = Release|Win32
- {5B84781D-F1C3-4535-99B7-B84B6C9BCF15}.Release|x64.ActiveCfg = Release|x64
- {5B84781D-F1C3-4535-99B7-B84B6C9BCF15}.Release|x64.Build.0 = Release|x64
{217C99B1-0D5E-4A85-A84F-836FCA167B25}.Debug|Win32.ActiveCfg = Debug|Win32
{217C99B1-0D5E-4A85-A84F-836FCA167B25}.Debug|Win32.Build.0 = Debug|Win32
{217C99B1-0D5E-4A85-A84F-836FCA167B25}.Debug|x64.ActiveCfg = Debug|x64
diff --git a/plugins/PluginUpdater/src/DlgUpdate.cpp b/plugins/PluginUpdater/src/DlgUpdate.cpp
index fbdaee7bf2..cb7134407a 100644
--- a/plugins/PluginUpdater/src/DlgUpdate.cpp
+++ b/plugins/PluginUpdater/src/DlgUpdate.cpp
@@ -568,6 +568,7 @@ static renameTable[] =
{ L"langman.dll", nullptr },
{ L"libtox.dll", nullptr },
{ L"metacontacts.dll", nullptr },
+ { L"mra.dll", nullptr },
{ L"modernopt.dll", nullptr },
{ L"msvcp100.dll", nullptr },
{ L"msvcr100.dll", nullptr },
diff --git a/protocols/Dummy/src/main.cpp b/protocols/Dummy/src/main.cpp
index 57af4a2723..deedef5c62 100644
--- a/protocols/Dummy/src/main.cpp
+++ b/protocols/Dummy/src/main.cpp
@@ -112,3 +112,12 @@ struct CMPluginWhatsapp : public ACCPROTOPLUGIN<CDummyProto>
}
}
static g_pluginWhatsapp;
+
+struct CMPluginMra : public ACCPROTOPLUGIN<CDummyProto>
+{
+ CMPluginMra() : ACCPROTOPLUGIN<CDummyProto>("MRA", pluginInfoEx)
+ {
+ SetUniqueId("e-mail");
+ }
+}
+static g_pluginMra;
diff --git a/protocols/MRA/CMakeLists.txt b/protocols/MRA/CMakeLists.txt
deleted file mode 100644
index 6626c8d0cc..0000000000
--- a/protocols/MRA/CMakeLists.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-file(GLOB SOURCES "src/*.h" "src/*.cpp" "res/*.rc")
-set(TARGET MRA)
-include(${CMAKE_SOURCE_DIR}/cmake/plugin.cmake)
-target_link_libraries(${TARGET} Zlib)
-add_subdirectory(proto_mra)
-add_subdirectory(xstatus_mra) \ No newline at end of file
diff --git a/protocols/MRA/Mra.vcxproj b/protocols/MRA/Mra.vcxproj
deleted file mode 100644
index d0314d4d07..0000000000
--- a/protocols/MRA/Mra.vcxproj
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup Label="ProjectConfigurations">
- <ProjectConfiguration Include="Debug|Win32">
- <Configuration>Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Debug|x64">
- <Configuration>Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|Win32">
- <Configuration>Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|x64">
- <Configuration>Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- </ItemGroup>
- <PropertyGroup Label="Globals">
- <ProjectGuid>{EE182018-5D3D-43F3-955F-7B5AB0BE2FCA}</ProjectGuid>
- <ProjectName>MRA</ProjectName>
- </PropertyGroup>
- <ImportGroup Label="PropertySheets">
- <Import Project="$(ProjectDir)..\..\build\vc.common\plugin.props" />
- </ImportGroup>
- <ItemGroup>
- <ProjectReference Include="..\..\libs\zlib\zlib.vcxproj">
- <Project>{e2a369cd-eda3-414f-8ad0-e732cd7ee68c}</Project>
- <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
- </ProjectReference>
- </ItemGroup>
-</Project> \ No newline at end of file
diff --git a/protocols/MRA/Mra.vcxproj.filters b/protocols/MRA/Mra.vcxproj.filters
deleted file mode 100644
index de5ad9f66c..0000000000
--- a/protocols/MRA/Mra.vcxproj.filters
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$(ProjectDir)..\..\build\vc.common\common.filters" />
-</Project> \ No newline at end of file
diff --git a/protocols/MRA/docs/Mail.ru Agent.files/0.gif b/protocols/MRA/docs/Mail.ru Agent.files/0.gif
deleted file mode 100644
index 427c96bdb9..0000000000
--- a/protocols/MRA/docs/Mail.ru Agent.files/0.gif
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/docs/Mail.ru Agent.files/1.gif b/protocols/MRA/docs/Mail.ru Agent.files/1.gif
deleted file mode 100644
index 1d0c3f9a96..0000000000
--- a/protocols/MRA/docs/Mail.ru Agent.files/1.gif
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/docs/Mail.ru Agent.files/WindowOpen.js b/protocols/MRA/docs/Mail.ru Agent.files/WindowOpen.js
deleted file mode 100644
index e5f140e382..0000000000
--- a/protocols/MRA/docs/Mail.ru Agent.files/WindowOpen.js
+++ /dev/null
@@ -1,44 +0,0 @@
-//
-// Proxomitron Anti-popup code
-//
-
-var PrxLC=new Date(0);
-var PrxModAtr=0;
-var PrxLd=1;
-var PrxInst; if(!PrxInst++) PrxRealOpen=window.open;
-
-function PrxOMUp(){PrxLC=new Date();}
-function PrxNW(){return(this.window);}
-function PrxOpen(url,nam,atr){
- if(PrxLC){
- var cdt=new Date();
- cdt.setTime(cdt.getTime()-PrxLC.getTime());
- if(!PrxLd && cdt.getSeconds()<2){
- if(atr){ return(PrxRealOpen(url,nam,PrxWOA(atr))); }
- else{ return(PrxRealOpen(url,nam)); }
- }
- }
- return(new PrxNW());
-}
-
-function PrxWOA(atr){
- var xatr="location=yes,status=yes,resizable=yes,toolbar=yes,scrollbars=yes";
- if(!PrxModAtr) return(atr);
- if(atr){
- var hm;
- hm=atr.match(/height\=[0-9]+/i);
- if(hm) xatr+="," + hm;
- hm=atr.match(/width\=[0-9]+/i);
- if(hm) xatr+="," + hm;
- }
- return(xatr);
-}
-
-function PrxRST(){
- if(document.layers){document.captureEvents(Event.MOUSEUP);}
- document.onmouseup=PrxOMUp;
- PrxLd=0;
-}
-
-window.open=PrxOpen;
-submit=PrxOpen; \ No newline at end of file
diff --git a/protocols/MRA/docs/Mail.ru Agent.files/_mail.gif b/protocols/MRA/docs/Mail.ru Agent.files/_mail.gif
deleted file mode 100644
index c86e89de3a..0000000000
--- a/protocols/MRA/docs/Mail.ru Agent.files/_mail.gif
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/docs/Mail.ru Agent.files/agentlogo.gif b/protocols/MRA/docs/Mail.ru Agent.files/agentlogo.gif
deleted file mode 100644
index 5ce7a199a3..0000000000
--- a/protocols/MRA/docs/Mail.ru Agent.files/agentlogo.gif
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/docs/Mail.ru Agent.files/cards-all.gif b/protocols/MRA/docs/Mail.ru Agent.files/cards-all.gif
deleted file mode 100644
index 2ea481c9d4..0000000000
--- a/protocols/MRA/docs/Mail.ru Agent.files/cards-all.gif
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/docs/Mail.ru Agent.files/cars-all.gif b/protocols/MRA/docs/Mail.ru Agent.files/cars-all.gif
deleted file mode 100644
index 908409dbd4..0000000000
--- a/protocols/MRA/docs/Mail.ru Agent.files/cars-all.gif
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/docs/Mail.ru Agent.files/chat-all.gif b/protocols/MRA/docs/Mail.ru Agent.files/chat-all.gif
deleted file mode 100644
index 438ee19590..0000000000
--- a/protocols/MRA/docs/Mail.ru Agent.files/chat-all.gif
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/docs/Mail.ru Agent.files/content-all.gif b/protocols/MRA/docs/Mail.ru Agent.files/content-all.gif
deleted file mode 100644
index 72bc124872..0000000000
--- a/protocols/MRA/docs/Mail.ru Agent.files/content-all.gif
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/docs/Mail.ru Agent.files/go-all.gif b/protocols/MRA/docs/Mail.ru Agent.files/go-all.gif
deleted file mode 100644
index e6ae399e38..0000000000
--- a/protocols/MRA/docs/Mail.ru Agent.files/go-all.gif
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/docs/Mail.ru Agent.files/index.css b/protocols/MRA/docs/Mail.ru Agent.files/index.css
deleted file mode 100644
index 7842a50367..0000000000
--- a/protocols/MRA/docs/Mail.ru Agent.files/index.css
+++ /dev/null
@@ -1,501 +0,0 @@
-A.ag {
- COLOR: black; FONT-FAMILY: Arial,Sans-Serif; TEXT-DECORATION: underline
-}
-P.sog {
- PADDING-RIGHT: 25px; PADDING-LEFT: 20px; FONT-SIZE: 65%; PADDING-BOTTOM: 0px; PADDING-TOP: 3px
-}
-P.sog A {
- COLOR: white; FONT-FAMILY: Arial,Sans-Serif
-}
-P.sog A:hover {
- COLOR: #cce8ff
-}
-A.font {
- FONT-SIZE: 70%; COLOR: black; TEXT-DECORATION: none
-}
-A.ag:hover {
- TEXT-DECORATION: none
-}
-.ag {
- FONT-WEIGHT: normal; PADDING-BOTTOM: 5px; COLOR: black; FONT-FAMILY: Arial,Sans-Serif
-}
-A.quest {
- DISPLAY: block; FONT-SIZE: 90%; MARGIN: 3px 0px 0px
-}
-.dmar {
- PADDING-RIGHT: 170px; FONT-SIZE: 75%; MARGIN: 10px 0px 0px 5px
-}
-.mar {
- MARGIN-TOP: 10px; FONT-SIZE: 75%
-}
-.yas {
- FONT-SIZE: 70%; MARGIN: 0px 0px 15px; COLOR: #676a71
-}
-.yas A {
- COLOR: #0956a6; TEXT-DECORATION: none
-}
-.m {
- FONT-SIZE: 70%; MARGIN: 0px 0px 0px 10px
-}
-UL.dpic {
- PADDING-RIGHT: 260px; PADDING-LEFT: 10px; FONT-SIZE: 75%
-}
-UL.pic {
- PADDING-LEFT: 10px; FONT-SIZE: 75%; MARGIN-BOTTOM: 15px
-}
-UL.pic LI.p1 {
- PADDING-RIGHT: 0px; PADDING-LEFT: 10px; LIST-STYLE-IMAGE: url(http://img.mail.ru/mail/ru/images/agent/ima1.gif); PADDING-BOTTOM: 2px; PADDING-TOP: 0px
-}
-UL.pic LI.p2 {
- PADDING-RIGHT: 0px; PADDING-LEFT: 10px; LIST-STYLE-IMAGE: url(http://img.mail.ru/mail/ru/images/agent/ima2.gif); PADDING-BOTTOM: 2px; PADDING-TOP: 0px
-}
-UL.pic LI.p3 {
- PADDING-RIGHT: 0px; PADDING-LEFT: 10px; LIST-STYLE-IMAGE: url(http://img.mail.ru/mail/ru/images/agent/ima3.gif); PADDING-BOTTOM: 2px; PADDING-TOP: 0px
-}
-SPAN.or {
- COLOR: #f26d00
-}
-UL {
- PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px 0px 0px 17px; PADDING-TOP: 0px
-}
-LI {
- PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 3px 0px 0px; LINE-HEIGHT: 120%; PADDING-TOP: 0px
-}
-.bottom {
- PADDING-RIGHT: 0px; PADDING-LEFT: 5px; FLOAT: left; PADDING-BOTTOM: 1px; MARGIN: 0px; PADDING-TOP: 0px
-}
-.right {
- PADDING-RIGHT: 20px; FLOAT: right
-}
-.img {
- PADDING-RIGHT: 320px; BACKGROUND-POSITION: left center; PADDING-LEFT: 40px; FONT-SIZE: 75%; BACKGROUND-IMAGE: url(http://img.mail.ru/mail/ru/images/agent/kar.gif); PADDING-BOTTOM: 10px; MARGIN: 5px 0px 7px 5px; PADDING-TOP: 7px; BACKGROUND-REPEAT: no-repeat
-}
-.bg1 {
- BACKGROUND-POSITION: right bottom; BACKGROUND-IMAGE: url(http://img.mail.ru/mail/ru/images/agent/bg1.gif); BACKGROUND-REPEAT: no-repeat; HEIGHT: 220px
-}
-.bg12 {
- BACKGROUND-POSITION: right top; BACKGROUND-IMAGE: url(http://img.mail.ru/mail/ru/images/agent/bg1_2.gif); MARGIN: 0px; BACKGROUND-REPEAT: no-repeat; HEIGHT: 12px
-}
-.bg2 {
- BACKGROUND-POSITION: right bottom; BACKGROUND-IMAGE: url(http://img.mail.ru/mail/ru/images/agent/bg3.gif); BACKGROUND-REPEAT: no-repeat; HEIGHT: 240px
-}
-.bg21 {
- BACKGROUND-POSITION: right top; BACKGROUND-IMAGE: url(http://img.mail.ru/mail/ru/images/agent/bg3_2.gif); MARGIN: 0px; BACKGROUND-REPEAT: no-repeat; HEIGHT: 12px
-}
-.bg3 {
- BACKGROUND-POSITION: right bottom; BACKGROUND-IMAGE: url(http://img.mail.ru/mail/ru/images/agent/developers.gif); BACKGROUND-REPEAT: no-repeat; HEIGHT: 220px
-}
-.button {
- BORDER-RIGHT: medium none; PADDING-RIGHT: 5px; BORDER-TOP: medium none; PADDING-LEFT: 35px; FONT-WEIGHT: bold; FONT-SIZE: 12px; BACKGROUND: url(http://img.mail.ru/mail/ru/images/agent/button2.gif) no-repeat; PADDING-BOTTOM: 8px; MARGIN: 5px 0px 5px 5px; BORDER-LEFT: medium none; WIDTH: 171px; COLOR: white; PADDING-TOP: 4px; BORDER-BOTTOM: medium none; FONT-FAMILY: Arial,Sans-Serif; HEIGHT: 24px; TEXT-DECORATION: none
-}
-.button2 {
- BORDER-RIGHT: medium none; PADDING-RIGHT: 0px; BORDER-TOP: medium none; PADDING-LEFT: 32px; FONT-WEIGHT: bold; FONT-SIZE: 12px; BACKGROUND: url(http://img.mail.ru/mail/ru/images/agent/button.gif) no-repeat; FLOAT: right; PADDING-BOTTOM: 0px; MARGIN: 12px 0px 5px 5px; BORDER-LEFT: medium none; WIDTH: 123px; COLOR: white; PADDING-TOP: 3px; BORDER-BOTTOM: medium none; FONT-FAMILY: Arial,Sans-Serif; HEIGHT: 24px; TEXT-DECORATION: none
-}
-A.but {
- COLOR: white; TEXT-DECORATION: none
-}
-A.but:hover {
- COLOR: white; TEXT-DECORATION: none
-}
-TD.gif {
- PADDING-RIGHT: 0px; BACKGROUND-POSITION: right 50%; PADDING-LEFT: 0px; BACKGROUND-IMAGE: url(http://img.mail.ru/mail/ru/images/agent/1.gif); PADDING-BOTTOM: 0px; PADDING-TOP: 0px; BACKGROUND-REPEAT: no-repeat
-}
-A {
- COLOR: #0857a6; TEXT-DECORATION: underline
-}
-A:hover {
- COLOR: #f26d00; TEXT-DECORATION: none
-}
-BODY {
- FONT-WEIGHT: normal; FONT-FAMILY: Arial,Sans-Serif
-}
-TABLE TD {
- FONT-WEIGHT: normal; FONT-FAMILY: Arial,Sans-Serif
-}
-INPUT {
- FONT-WEIGHT: normal; FONT-FAMILY: Arial,Sans-Serif
-}
-SELECT {
- FONT-WEIGHT: normal; FONT-FAMILY: Arial,Sans-Serif
-}
-LABEL {
- FONT-WEIGHT: normal; FONT-FAMILY: Arial,Sans-Serif
-}
-DIV {
- FONT-WEIGHT: normal; FONT-FAMILY: Arial,Sans-Serif
-}
-P {
- PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px
-}
-TABLE.pop TD.up {
- PADDING-RIGHT: 10px; PADDING-LEFT: 10px; FONT-SIZE: 80%; PADDING-BOTTOM: 10px; COLOR: black; PADDING-TOP: 10px
-}
-TABLE.pop H1 {
- PADDING-RIGHT: 0px; PADDING-LEFT: 10px; PADDING-BOTTOM: 7px; MARGIN: 0px; PADDING-TOP: 7px
-}
-H1 {
- FONT-SIZE: 100%; FONT-FAMILY: Arial,Sans-Serif
-}
-H2 {
- FONT-SIZE: 90%; MARGIN: 0px 0px 5px; COLOR: #003073; FONT-FAMILY: Arial,Sans-Serif
-}
-H3 {
- FONT-SIZE: 80%; MARGIN: 0px 0px 2px; COLOR: #202020; FONT-FAMILY: Arial,Sans-Serif
-}
-H3 I {
- FONT-WEIGHT: normal; COLOR: black; FONT-STYLE: normal
-}
-H4 {
- FONT-SIZE: 75%; MARGIN: 8px 0px 0px; COLOR: #003073; FONT-FAMILY: Arial,Sans-Serif
-}
-H4 I {
- FONT-WEIGHT: normal; COLOR: black; FONT-STYLE: normal
-}
-H5 {
- FONT-WEIGHT: bold; FONT-SIZE: 70%; MARGIN: 8px 0px 2px; COLOR: #202020; FONT-FAMILY: Arial,Sans-Serif
-}
-H5 A {
- FONT-WEIGHT: bold
-}
-H5 I A {
- FONT-STYLE: normal
-}
-TABLE.frame {
- MARGIN-BOTTOM: 10px
-}
-TABLE.top {
- MARGIN-BOTTOM: 10px
-}
-TABLE.frame TD.cor {
- PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND-IMAGE: url(http://img.mail.ru/mail/ru/images/agent/1.gif); PADDING-BOTTOM: 0px; PADDING-TOP: 0px; BACKGROUND-REPEAT: no-repeat; BACKGROUND-COLOR: #d9d9d9
-}
-TABLE.top TD.cor {
- PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND-IMAGE: url(http://img.mail.ru/mail/ru/images/agent/1.gif); PADDING-BOTTOM: 0px; PADDING-TOP: 0px; BACKGROUND-REPEAT: no-repeat; BACKGROUND-COLOR: #d9d9d9
-}
-TABLE.frame TD.cont {
- BORDER-RIGHT: #d9d9d9 1px solid; PADDING-RIGHT: 14px; PADDING-LEFT: 14px; PADDING-BOTTOM: 8px; MARGIN: 0px; BORDER-LEFT: #d9d9d9 1px solid; PADDING-TOP: 8px
-}
-TD.hd {
- BACKGROUND-COLOR: #fedba5
-}
-TD.hd H1 {
- FONT-WEIGHT: bold; MARGIN: 4px 4px 4px 0px; COLOR: black
-}
-TD.menuor {
- PADDING-BOTTOM: 10px
-}
-TD.menuor DIV.menur {
- BORDER-RIGHT: white 1px solid; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px 2px; BORDER-LEFT: white 1px solid; PADDING-TOP: 0px; BACKGROUND-COLOR: #ffd57f
-}
-TD.menuor DIV.bord {
- BORDER-RIGHT: #ffa901 2px solid; PADDING-RIGHT: 14px; BORDER-TOP: #ffa901 1px solid; PADDING-LEFT: 15px; FONT-SIZE: 75%; PADDING-BOTTOM: 4px; MARGIN: 0px; BORDER-LEFT: #ffa901 2px solid; PADDING-TOP: 4px; BORDER-BOTTOM: #ffa901 1px solid
-}
-TD.menuor DIV.bor SPAN.small {
- FONT-SIZE: 90%; COLOR: red
-}
-TD.menuor DIV.bor A {
- COLOR: #413f40; TEXT-DECORATION: underline
-}
-TD.menuor DIV.bor A:hover {
- TEXT-DECORATION: none
-}
-TD.menuor DIV.bor {
- BORDER-RIGHT: #ffd57f 1px solid; PADDING-RIGHT: 14px; PADDING-LEFT: 14px; FONT-SIZE: 75%; PADDING-BOTTOM: 4px; MARGIN: 0px 2px; BORDER-LEFT: #ffd57f 1px solid; PADDING-TOP: 4px; BACKGROUND-COLOR: #fff2d8
-}
-TD.menuor DIV.b {
- BORDER-RIGHT: #ffd57f 1px solid; MARGIN: 0px 2px; BORDER-LEFT: #ffd57f 1px solid; BACKGROUND-COLOR: #fff2d8
-}
-.prop {
- PADDING-RIGHT: 15px; PADDING-LEFT: 0px; FONT-SIZE: 80%; PADDING-BOTTOM: 10px; PADDING-TOP: 5px
-}
-TD.prop P {
- MARGIN: 0px; COLOR: #00458e; FONT-FAMILY: Arial,Sans-Serif
-}
-TD.text P {
- PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 75%; PADDING-BOTTOM: 5px; PADDING-TOP: 0px
-}
-TD.text H4 {
- MARGIN: 12px 0px 3px
-}
-TD.text H1 {
- FONT-WEIGHT: bold; MARGIN: 10px 0px 5px; COLOR: #003073
-}
-TD.text OL {
- PADDING-RIGHT: 0px; DISPLAY: block; PADDING-LEFT: 0px; FONT-SIZE: 75%; PADDING-BOTTOM: 0px; MARGIN: 0px 0px 7px 30px; PADDING-TOP: 0px
-}
-TD.text UL {
- PADDING-RIGHT: 0px; MARGIN-TOP: 0px; PADDING-LEFT: 0px; FONT-SIZE: 75%; MARGIN-BOTTOM: 0px; PADDING-BOTTOM: 0px; MARGIN-RIGHT: 0px; PADDING-TOP: 0px
-}
-LI {
- PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 3px 0px 0px; LINE-HEIGHT: 120%; PADDING-TOP: 0px
-}
-TD.vo {
- PADDING-LEFT: 25px
-}
-TD.vo P {
- PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 80%; PADDING-BOTTOM: 5px; PADDING-TOP: 0px
-}
-TD.vo UL {
- PADDING-RIGHT: 0px; MARGIN-TOP: 0px; PADDING-LEFT: 0px; FONT-SIZE: 80%; PADDING-BOTTOM: 0px; PADDING-TOP: 0px
-}
-TD.vo UL LI {
- PADDING-RIGHT: 0px; MARGIN-TOP: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; PADDING-TOP: 0px
-}
-TABLE.frame TD.cont UL {
- FONT-SIZE: 70%
-}
-TABLE.frame TD.cont P {
- FONT-SIZE: 70%
-}
-TABLE.frame TD.menu {
- BORDER-RIGHT: #d9d9d9 1px solid; PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 8px; BORDER-LEFT: #d9d9d9 1px solid; PADDING-TOP: 8px; TEXT-ALIGN: right
-}
-TABLE.frame TD.menu TABLE TD {
- FONT-SIZE: 80%
-}
-TABLE.top TD {
- PADDING-RIGHT: 4px; PADDING-LEFT: 4px; FONT-SIZE: 70%; PADDING-BOTTOM: 4px; PADDING-TOP: 4px
-}
-TABLE.top TD.cor IMG {
- MARGIN: 0px
-}
-TABLE.top TD.left {
- PADDING-LEFT: 22px; BORDER-LEFT: #d9d9d9 1px solid
-}
-TABLE.top TD.right {
- BORDER-RIGHT: #d9d9d9 1px solid; PADDING-RIGHT: 22px; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; PADDING-TOP: 5px
-}
-TABLE.top TD IMG.pic {
- MARGIN-RIGHT: 2px
-}
-TD.form {
- PADDING-BOTTOM: 10px
-}
-TD.title {
- PADDING-RIGHT: 5px; PADDING-LEFT: 0px; FONT-WEIGHT: bold; PADDING-BOTTOM: 10px; PADDING-TOP: 0px
-}
-TD.pic {
- PADDING-RIGHT: 10px; PADDING-LEFT: 0px; PADDING-BOTTOM: 5px; PADDING-TOP: 5px
-}
-TABLE.footer TD {
- FONT-SIZE: 70%; COLOR: white
-}
-TABLE.footer TD A {
- COLOR: white
-}
-TABLE.footer TD A:hover {
- COLOR: #cce8ff
-}
-TABLE.footer TD.hide {
- FONT-SIZE: 70%; COLOR: #00468c
-}
-TABLE.footer TD.hide A {
- COLOR: #00468c
-}
-TABLE.footer TD.hide A:hover {
- COLOR: #00468c
-}
-TD.entry {
- BACKGROUND-POSITION: left bottom; BACKGROUND-IMAGE: url(http://img.mail.ru/mail/ru/images/agent/dot.gif); WIDTH: 100%; BACKGROUND-REPEAT: repeat-x
-}
-TABLE.rating TD.entry A {
- BACKGROUND-COLOR: white
-}
-TD.centcol DIV.cor {
- MARGIN-BOTTOM: 15px
-}
-TABLE.menu TD {
- BACKGROUND-COLOR: white
-}
-TD.item {
- PADDING-RIGHT: 10px; BORDER-TOP: white 3px solid; PADDING-LEFT: 10px; FONT-SIZE: 75%; PADDING-BOTTOM: 20px; PADDING-TOP: 2px
-}
-TD.cur {
- PADDING-RIGHT: 10px; BORDER-TOP: white 3px solid; PADDING-LEFT: 10px; FONT-SIZE: 75%; PADDING-BOTTOM: 20px; PADDING-TOP: 2px
-}
-TD.head {
- PADDING-LEFT: 15px
-}
-TD.head2 {
- PADDING-RIGHT: 10px; PADDING-LEFT: 5px
-}
-IMG.pre {
- BORDER-RIGHT: #ffb31a 1px solid; BORDER-TOP: #ffb31a 1px solid; MARGIN-BOTTOM: 5px; BORDER-LEFT: #ffb31a 1px solid; BORDER-BOTTOM: #ffb31a 1px solid
-}
-DIV.footer {
- FONT-SIZE: 80%; MARGIN: 10px 0px 20px; TEXT-ALIGN: center
-}
-DIV.plash {
- WIDTH: 100%; BACKGROUND-COLOR: #00468c; TEXT-ALIGN: center
-}
-DIV.cor {
- BACKGROUND-IMAGE: url(http://img.mail.ru/mail/ru/images/agent/1.gif); WIDTH: 100%; BACKGROUND-REPEAT: no-repeat; HEIGHT: 1px; BACKGROUND-COLOR: #d9d9d9; TEXT-ALIGN: right
-}
-DIV.plash DIV.cor {
- BACKGROUND-COLOR: #00468c
-}
-TD.bg1 DIV.cor {
- BACKGROUND-COLOR: #00468c
-}
-TD.header DIV.cor {
- BACKGROUND-COLOR: #00468c
-}
-DIV.cmnt2 {
- MARGIN-TOP: 7px; FONT-SIZE: 70%; MARGIN-BOTTOM: 12px; COLOR: #616161
-}
-UNKNOWN {
- MARGIN-BOTTOM: 10px
-}
-UNKNOWN {
- MARGIN: 0px
-}
-TD.header {
- BACKGROUND-COLOR: #00468c
-}
-TD.header TD.text {
- PADDING-RIGHT: 15px; PADDING-LEFT: 0px; FONT-SIZE: 70%; PADDING-BOTTOM: 0px; COLOR: white; PADDING-TOP: 1px; FONT-FAMILY: Tahoma
-}
-.kill {
- TEXT-DECORATION: line-through
-}
-.warn {
- BORDER-RIGHT: #ff0000 2px solid; PADDING-RIGHT: 3px; BORDER-TOP: #ff0000 1px solid; PADDING-LEFT: 3px; PADDING-BOTTOM: 3px; BORDER-LEFT: #ff0000 2px solid; PADDING-TOP: 3px; BORDER-BOTTOM: #ff0000 1px solid
-}
-.knopi {
- PADDING-RIGHT: 10px; PADDING-LEFT: 10px; FONT-WEIGHT: bold; FONT-SIZE: 12px; PADDING-BOTTOM: 0px; COLOR: white; PADDING-TOP: 0px; FONT-FAMILY: Arial,Sans-Serif; TEXT-DECORATION: none
-}
-TD.fail {
- BACKGROUND-POSITION: left bottom; BACKGROUND-IMAGE: url(http://img.mail.ru/mail/ru/images/agent/point1.gif); BACKGROUND-REPEAT: repeat-x
-}
-TD.fail1 {
- BACKGROUND-POSITION: left bottom; BACKGROUND-IMAGE: url(http://img.mail.ru/mail/ru/images/agent/point1.gif); BACKGROUND-REPEAT: repeat-x; TEXT-ALIGN: right
-}
-TD.fail B {
- PADDING-RIGHT: 2px; FONT-WEIGHT: normal; BACKGROUND-COLOR: #fff3de
-}
-TD.fail1 B {
- PADDING-RIGHT: 5px; PADDING-LEFT: 3px; FONT-WEIGHT: normal; PADDING-BOTTOM: 0px; COLOR: #676a73; PADDING-TOP: 0px; BACKGROUND-COLOR: #fff3de
-}
-DIV.gr_line {
- BACKGROUND-COLOR: #dadce5
-}
-TABLE.stat {
- PADDING-RIGHT: 10px; MARGIN-BOTTOM: 20px; BACKGROUND-COLOR: #ffffff; TEXT-ALIGN: left
-}
-TABLE.stat TR TD {
- PADDING-RIGHT: 10px; PADDING-LEFT: 10px; FONT-SIZE: 75%; PADDING-BOTTOM: 5px; PADDING-TOP: 5px; FONT-FAMILY: arial
-}
-TABLE.stat TR.head TD {
- PADDING-RIGHT: 10px; PADDING-LEFT: 10px; FONT-SIZE: 70%; PADDING-BOTTOM: 0px; PADDING-TOP: 3px; FONT-FAMILY: tahoma; BACKGROUND-COLOR: #e6e8ed
-}
-TABLE.stat TR TD.iskl {
- PADDING-RIGHT: 0px; PADDING-LEFT: 4px
-}
-TABLE.stat TR.head TD A {
- COLOR: #393b40
-}
-TABLE.stat TR.head TD A:hover {
- COLOR: #000000
-}
-TR.head TD {
- BORDER-BOTTOM: #e6e8ed 3px solid
-}
-TR.head TD.nizh {
- COLOR: #000000; PADDING-TOP: 5px; BORDER-BOTTOM: #acafbf 3px solid
-}
-TABLE.stat TR.last_tr TD {
- PADDING-RIGHT: 0px; BORDER-TOP: #dadde5 3px solid; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; PADDING-TOP: 0px
-}
-TR.weekend TD {
- BACKGROUND-COLOR: #fffbed
-}
-TR.forced TD {
- FONT-WEIGHT: bold
-}
-TR.or_vid TD {
- BACKGROUND-COLOR: #fff7e5
-}
-TR.st_vid TD {
- BACKGROUND-COLOR: #ffffff
-}
-TR.cherez TD {
- BACKGROUND-COLOR: #f5f5f2
-}
-TABLE.frame TD.cont UL.mmenu {
- FONT-SIZE: 80%
-}
-TABLE.frame TD.cont UL.mmenu LI {
- MARGIN-BOTTOM: 4px; COLOR: #dbe0e6
-}
-TABLE.frame TD.cont UL.mmenu LI .speak {
- COLOR: #0857a6
-}
-TABLE.frame TD.cont UL.mmenu LI.ai {
- COLOR: #000000
-}
-TABLE.frame TD.cont UL.mmenu LI UL.smenu {
- FONT-SIZE: 85%; MARGIN-BOTTOM: 6px
-}
-TABLE.frame TD.cont UL.mmenu LI UL.smenu LI {
- MARGIN-TOP: 4px; COLOR: #dbe0e6
-}
-TABLE.frame TD.cont UL.mmenu LI UL.smenu LI.ai {
- COLOR: #000000
-}
-TABLE.talkme TD {
- PADDING-RIGHT: 5px; PADDING-LEFT: 0px; FONT-SIZE: 70%; PADDING-BOTTOM: 4px; PADDING-TOP: 0px
-}
-TABLE.talkme TD IMG.avat {
- BORDER-RIGHT: #d9d9d9 1px solid; BORDER-TOP: #d9d9d9 1px solid; MARGIN-BOTTOM: 5px; BORDER-LEFT: #d9d9d9 1px solid; BORDER-BOTTOM: #d9d9d9 1px solid
-}
-TABLE.talkme TD.all {
- PADDING-BOTTOM: 13px
-}
-TABLE.talkme TD.all A {
- COLOR: #696973; TEXT-DECORATION: underline
-}
-TABLE.frame TD.contfr {
- BORDER-RIGHT: #d9d9d9 1px solid; PADDING-RIGHT: 60px; PADDING-LEFT: 14px; BACKGROUND: url(http://img.mail.ru/mail/ru/images/agent/friend.jpg) no-repeat right bottom; PADDING-BOTTOM: 8px; MARGIN: 0px; BORDER-LEFT: #d9d9d9 1px solid; PADDING-TOP: 8px
-}
-TABLE.frame TD.contfr TD {
- PADDING-RIGHT: 3px; PADDING-LEFT: 0px; FONT-SIZE: 70%; PADDING-BOTTOM: 0px; COLOR: #646b75; PADDING-TOP: 3px
-}
-TABLE.frame TD.contfr TD SPAN {
- FONT-SIZE: 90%
-}
-TABLE.frame TD.contfr TD A {
- TEXT-DECORATION: none
-}
-TABLE.frame TD.contfr TD.all {
- PADDING-BOTTOM: 13px
-}
-TABLE.frame TD.contfr TD.all A {
- COLOR: #696973; TEXT-DECORATION: underline
-}
-TABLE.frame TD H2 {
- MARGIN-BOTTOM: 10px
-}
-.pbgla {
- BACKGROUND: url(http://img.mail.ru/mail/ru/images/agent/pbg_l1.gif) no-repeat center bottom
-}
-.pbglba {
- BACKGROUND: url(http://img.mail.ru/mail/ru/images/agent/pbg_l2-1.gif) no-repeat left top
-}
-.pbglbb {
- BACKGROUND: url(http://img.mail.ru/mail/ru/images/agent/pbg_l2-2.gif) no-repeat right top
-}
-TABLE.top_menu {
- MARGIN-BOTTOM: 7px
-}
-TABLE.top_menu TD {
- PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 80%; PADDING-BOTTOM: 4px; PADDING-TOP: 2px
-}
-TABLE.top_menu TD.bord_b {
- PADDING-RIGHT: 0px; BACKGROUND-POSITION: right top; PADDING-LEFT: 0px; BACKGROUND-IMAGE: url(http://img.mail.ru/1.gif); PADDING-BOTTOM: 0px; PADDING-TOP: 0px; BACKGROUND-REPEAT: no-repeat; HEIGHT: 1px; BACKGROUND-COLOR: #c2c3cc
-}
-TABLE.top_menu TD.bord_l {
- BORDER-LEFT: #c2c3cc 1px solid
-}
-TABLE.top_menu TD.bord_r {
- BORDER-RIGHT: #c2c3cc 1px solid
-}
diff --git a/protocols/MRA/docs/Mail.ru Agent.files/love-all.gif b/protocols/MRA/docs/Mail.ru Agent.files/love-all.gif
deleted file mode 100644
index c53ccf002a..0000000000
--- a/protocols/MRA/docs/Mail.ru Agent.files/love-all.gif
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/docs/Mail.ru Agent.files/molotok-all.gif b/protocols/MRA/docs/Mail.ru Agent.files/molotok-all.gif
deleted file mode 100644
index 8182aba798..0000000000
--- a/protocols/MRA/docs/Mail.ru Agent.files/molotok-all.gif
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/docs/Mail.ru Agent.files/proto.css b/protocols/MRA/docs/Mail.ru Agent.files/proto.css
deleted file mode 100644
index f471cb4516..0000000000
--- a/protocols/MRA/docs/Mail.ru Agent.files/proto.css
+++ /dev/null
@@ -1,39 +0,0 @@
-TD.text .blue {
- COLOR: #003073
-}
-TD.text CODE {
- MARGIN: 0px 3px; COLOR: #333333
-}
-TD.text SPAN.c {
- FONT-SIZE: 110%; MARGIN-LEFT: 3px; COLOR: #333333; FONT-STYLE: normal; FONT-FAMILY: Courier New
-}
-TD.text B {
- COLOR: #333333
-}
-TD.text PRE {
- BORDER-RIGHT: #666666 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #666666 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; BORDER-LEFT: #666666 1px solid; COLOR: #333333; PADDING-TOP: 5px; BORDER-BOTTOM: #666666 1px solid
-}
-TD.text .pt10 {
- PADDING-TOP: 10px
-}
-TD.text UL.pack LI {
- MARGIN-TOP: 12px
-}
-TD.text UL.pack U {
- FONT-SIZE: 100%; TEXT-DECORATION: none
-}
-TD.text UL.pack P {
- FONT-SIZE: 100%
-}
-TD.text P.pack2 {
- LINE-HEIGHT: 1.3em; PADDING-TOP: 4px
-}
-TD.text P.code {
- PADDING-RIGHT: 4px; PADDING-LEFT: 10px; PADDING-BOTTOM: 4px; COLOR: #333333; LINE-HEIGHT: 1.5em; PADDING-TOP: 0px; FONT-FAMILY: Courier New
-}
-TD.text P.pack2 U {
- FONT-SIZE: 90%; COLOR: #666666; TEXT-DECORATION: none
-}
-TD.text UL.par {
- PADDING-RIGHT: 0px; PADDING-LEFT: 35px; PADDING-BOTTOM: 10px; MARGIN-LEFT: 0px; PADDING-TOP: 0px
-}
diff --git a/protocols/MRA/docs/Mail.ru Agent.files/tour-all.gif b/protocols/MRA/docs/Mail.ru Agent.files/tour-all.gif
deleted file mode 100644
index 23ae14b79a..0000000000
--- a/protocols/MRA/docs/Mail.ru Agent.files/tour-all.gif
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/docs/Mail.ru Agent.htm b/protocols/MRA/docs/Mail.ru Agent.htm
deleted file mode 100644
index 43acddc9dd..0000000000
--- a/protocols/MRA/docs/Mail.ru Agent.htm
+++ /dev/null
@@ -1,635 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- saved from url=(0097)http://agent.mail.ru/protocol.html?Submit=%CF%F0%E8%ED%E8%EC%E0%FE+%F1%EE%E3%EB%E0%F8%E5%ED%E8%E5 -->
-<!--//--><HTML><HEAD><TITLE>Mail.ru </TITLE>
-<SCRIPT src="Mail.ru Agent.files/WindowOpen.js"></SCRIPT>
-<!--//-->
-<SCRIPT>PrxModAtr=1;</SCRIPT>
-<!--//-->
-<SCRIPT> function NoError(){return(true);} onerror=NoError; </SCRIPT>
-<!--//-->
-<SCRIPT> function moveTo(){return true;}function resizeTo(){return true;}</SCRIPT>
-
-<META
-content=" @Mail.ru - . POP/SMTP, - wap-. : , , , , , , , , "
-name=DESCRIPTION>
-<META
-content=", , , , , , , , , , "
-name=Keywords>
-<META http-equiv=content-type content="text/html; charset=windows-1251"><LINK
-href="Mail.ru Agent.files/index.css" type=text/css rel=stylesheet><LINK
-href="Mail.ru Agent.files/proto.css" type=text/css rel=stylesheet>
-<META content="MSHTML 6.00.2900.2802" name=GENERATOR></HEAD>
-<BODY bottomMargin=0 bgColor=white leftMargin=0 topMargin=0 rightMargin=0
-marginwidth="0" marginheight="0">
-<CENTER>
-<TABLE class=top_menu cellSpacing=0 cellPadding=0 width="90%" border=0>
- <TBODY>
- <TR>
- <TD class=bord_l><IMG height=1 src="Mail.ru Agent.files/0.gif"
-width=11></TD>
- <TD noWrap><A href="http://r.mail.ru/cln2759/go.mail.ru" target=_top><IMG
- height=16 alt= src="Mail.ru Agent.files/go-all.gif" width=16
- align=absMiddle border=0></A>&nbsp;<A
- href="http://r.mail.ru/cln2759/go.mail.ru/" target=_top></A></TD>
- <TD width="5%"><IMG height=1 src="Mail.ru Agent.files/0.gif" width=7></TD>
- <TD noWrap><A href="http://r.mail.ru/cln2760/love.mail.ru"
- target=_top><IMG height=16 alt=
- src="Mail.ru Agent.files/love-all.gif" width=16 align=absMiddle
- border=0></A>&nbsp;<A href="http://r.mail.ru/cln2760/love.mail.ru"
- target=_top></A></TD>
- <TD width="5%"><IMG height=1 src="Mail.ru Agent.files/0.gif" width=7></TD>
- <TD noWrap><A href="http://r.mail.ru/cln2761/cards.mail.ru"
- target=_top><IMG height=16 alt=
- src="Mail.ru Agent.files/cards-all.gif" width=16 align=absMiddle
- border=0></A>&nbsp;<A href="http://r.mail.ru/cln2761/cards.mail.ru"
- target=_top></A></TD>
- <TD width="5%"><IMG height=1 src="Mail.ru Agent.files/0.gif" width=7></TD>
- <TD noWrap><A href="http://r.mail.ru/cln2762/chat.mail.ru"
- target=_top><IMG height=16 alt= src="Mail.ru Agent.files/chat-all.gif"
- width=16 align=absMiddle border=0></A>&nbsp;<A
- href="http://r.mail.ru/cln2762/chat.mail.ru" target=_top></A></TD>
- <TD width="5%"><IMG height=1 src="Mail.ru Agent.files/0.gif" width=7></TD>
- <TD noWrap><A href="http://r.mail.ru/cln2763/content.mail.ru/"
- target=_top><IMG height=16 alt=
- src="Mail.ru Agent.files/content-all.gif" width=16 align=absMiddle
- border=0></A>&nbsp;<A href="http://r.mail.ru/cln2763/content.mail.ru/"
- target=_top></A></TD>
- <TD width="5%"><IMG height=1 src="Mail.ru Agent.files/0.gif" width=7></TD>
- <TD noWrap><A href="http://r.mail.ru/cln2764/molotok.ru/" target=_top><IMG
- height=16 alt= src="Mail.ru Agent.files/molotok-all.gif" width=16
- align=absMiddle border=0></A>&nbsp;<A
- href="http://r.mail.ru/cln2764/molotok.ru/" target=_top></A></TD>
- <TD width="5%"><IMG height=1 src="Mail.ru Agent.files/0.gif" width=7></TD>
- <TD noWrap><A href="http://r.mail.ru/cln2765/tour.torg.ru/"
- target=_top><IMG height=16 alt=
- src="Mail.ru Agent.files/tour-all.gif" width=16 align=absMiddle
- border=0></A>&nbsp;<A href="http://r.mail.ru/cln2765/travel.mail.ru/"
- target=_top></A></TD>
- <TD width="5%"><IMG height=1 src="Mail.ru Agent.files/0.gif" width=7></TD>
- <TD noWrap><A href="http://r.mail.ru/cln2766/auto.mail.ru/"
- target=_top><IMG height=16 alt= src="Mail.ru Agent.files/cars-all.gif"
- width=16 align=absMiddle border=0></A>&nbsp;<A
- href="http://r.mail.ru/cln2766/auto.mail.ru/" target=_top></A></TD>
- <TD width="5%"><IMG height=1 src="Mail.ru Agent.files/0.gif" width=9></TD>
- <TD noWrap><IMG height=16 src="Mail.ru Agent.files/0.gif" width=16
- align=absMiddle border=0><A href="http://r.mail.ru/cln2767/mail.ru/all/"
- target=_top><B> </B></A></TD>
- <TD class=bord_r><IMG height=1 src="Mail.ru Agent.files/0.gif"
- width=10></TD></TR>
- <TR>
- <TD class=bord_b noWrap width="100%" colSpan=19><IMG height=1
- src="Mail.ru Agent.files/1.gif" width=1></TD></TR></TBODY></TABLE><!-- JS Banner blocked -->
-<SCRIPT language=ShonenScript><!--
-d=document;a='';a+=';r='+escape(d.referrer)
-js=10
-//--></SCRIPT>
-
-<SCRIPT language=JavaScript1.1><!--
-a+=';j='+navigator.javaEnabled()
-js=11
-//--></SCRIPT>
-
-<SCRIPT language=JavaScript1.2><!--
-s=screen;a+=';s='+s.width+'*'+s.height
-a+=';d='+(s.colorDepth?s.colorDepth:s.pixelDepth)
-js=12
-//--></SCRIPT>
-
-<SCRIPT language=JavaScript1.3><!--
-js=13
-//--></SCRIPT>
-
-<SCRIPT language=JavaScript><!--
-d.write('<img src="http://top.list.ru/counter'+
-'?id=575536;js='+js+a+';rand='+Math.random()+
-'" height=1 width=1><br>')
-if(js>11)d.write('<'+'!-- ')
-//--></SCRIPT>
-<NOSCRIPT><IMG height=1 src="" width=1><BR></NOSCRIPT>
-<SCRIPT language=JavaScript><!--
-if(js>11)d.write('--'+'>')
-//--></SCRIPT>
-<!--/TopList COUNTER-->
-<CENTER><A href="http://top100.rambler.ru/top100/" target=_top><FONT color=red
-size=1>[Rambler's Top100]</FONT><BR></A></CENTER>
-<TABLE cellSpacing=0 cellPadding=0 width="90%" align=center border=0>
- <TBODY>
- <TR>
- <TD class=header width="100%">
- <DIV class=cor><IMG height=1 src="Mail.ru Agent.files/1.gif"
-width=1></DIV>
- <TABLE height=45 cellSpacing=0 cellPadding=0 width="100%" border=0>
- <TBODY>
- <TR>
- <TD class=head height=44><A href="http://agent.mail.ru/"
- target=_top><IMG height=20 alt=
- src="Mail.ru Agent.files/agentlogo.gif" width=59 border=0></A><A
- href="http://mail.ru/" target=_top><IMG height=20 alt=mail.ru
- src="Mail.ru Agent.files/_mail.gif" width=104 border=0></A></TD>
- <TD width=00%>
- <P class=button2><A class=but title=
- href="http://agent.mail.ru/magent.exe"
- target=_top></A></P></TD>
- <TD>
- <P class=sog><A href="http://www.mail.ru/pages/help/182.html"
- target=_top><BR></A></P></TD></TR></TBODY></TABLE><IMG
- height=1 src="Mail.ru Agent.files/0.gif" width=760><BR>
- <DIV class=cor><IMG height=1 src="Mail.ru Agent.files/1.gif"
- width=1></DIV></TD></TR>
- <TR>
- <TD colSpan=3><IMG height=10 src="Mail.ru Agent.files/0.gif"
- width=1></TD></TR></TBODY></TABLE>
-<TABLE cellSpacing=0 cellPadding=0 width="90%" border=0>
- <TBODY>
- <TR><!-- START: LeftCell -->
- <TD vAlign=top width="23%">
- <TABLE class=frame cellSpacing=0 cellPadding=0 width="100%" border=0>
- <TBODY>
- <TR>
- <TD class=cor align=right height=1><IMG height=1
- src="Mail.ru Agent.files/1.gif" width=1></TD></TR>
- <TR>
- <TD class=cont>
- <UL class=mmenu>
- <LI><A href="http://agent.mail.ru/pusk.html">
- </A>
- <LI><A href="http://agent.mail.ru/setting.html">
- </A>
- <LI><SPAN class=speak></SPAN>
- <UL class=smenu type=disc>
- <LI><A href="http://agent.mail.ru/mess.html"></A>
- <LI><A href="http://agent.mail.ru/chat.html"> </A>
- <LI><A href="http://agent.mail.ru/voice.html">
- </A>
- <LI><A href="http://agent.mail.ru/avatar.html"></A>
- </LI></UL>
- <LI><A href="http://agent.mail.ru/notifs.html"></A>
- <LI><A href="http://agent.mail.ru/games.html"></A>
- <LI><A href="http://agent.mail.ru/help.html"> </A>
- <LI class=ai> </LI></UL></TD></TR>
- <TR>
- <TD class=cor align=right height=1><IMG height=1
- src="Mail.ru Agent.files/1.gif" width=1></TD></TR></TBODY></TABLE><IMG
- height=10 src="Mail.ru Agent.files/0.gif" width=195><BR></TD><!-- END: LeftCell -->
- <TD width="2%"><IMG height=1 src="Mail.ru Agent.files/0.gif" width=10></TD><!-- START: MainCell -->
- <TD class=text vAlign=top width="75%">
- <H1> </H1>
- <P>MMP - Mail.Ru Mail.Ru.
-
- <I>ip:port</I> <B
- class=blue>mrim.mail.ru:443</B> <B class=blue>mrim.mail.ru:2042</B>.
-
- tcp- .
- ,
- , .</P>
- <P>MMP .
- , . . ,
- .
- <B>UL</B>.</P>
- <P> , . .
- <B>UL</B>, ( windows-1251) <B>UL</B>
- . - <B>LPS</B>.</P>
- <P> <B>UIDL</B>
- . <B>UIDL</B> - 8
- <SPAN class=c>[a-z A-Z 0-9 _ - = +]</SPAN>.</P>
- <P> .
- :
- <UL>
- <LI> , , MMP -
- MMP, ( - 1.7)
- <LI> .
- , .
- <LI> , /
- <LI> ( ).
-
- , . .
- .
- <LI> ip ( <I>inet_aton()</I> )
- </LI></UL>
- <P></P><BR>
- <P> : <PRE style="MARGIN-TOP: 8px">
-{
- u_long magic;
- u_long proto;
- u_long seq;
- u_long msg;
- u_long dlen;
- u_long from;
- u_long fromport;
- u_char reserved[16];
-}
-</PRE>
- <P> C. <A
- href="http://agent.mail.ru/proto.h" target=_top></A>. </P>
- <P>&nbsp;</P>
- <H2> </H2>
- <P> tcp- <SPAN
- class=c>MRIM_CS_HELLO</SPAN>, <SPAN
- class=c>MRIM_CS_HELLO_ACK</SPAN>, <SPAN
- class=c>MRIM_CS_LOGIN2</SPAN> <SPAN
- class=c>MRIM_CS_PING</SPAN> <SPAN
- class=c>MRIM_CS_HELLO_ACK</SPAN> .
- ( <SPAN class=c>MRIM_CS_PING</SPAN>)
- (
- . .) .</P>
- <H2 class=pt10> </H2>
- <P class=pack2><U> :</U> cs - Client -&gt; Server<BR><U>
- :</U> sc - Server -&gt; Client</P>
- <H2 class=pt10></H2>
- <UL class=pack>
- <LI><U>:</U> <B> </B>
- <P class=pack2><U> :</U> <SPAN
- class=c>MRIM_CS_HELLO</SPAN><BR><U>:</U> <SPAN
- class=c>MRIM_CS_HELLO_ACK</SPAN><BR><U> :</U>
- cs<BR><U>:</U> , . </P>
- <LI><U>:</U> <B> </B>
- <P class=pack2><U> :</U> <SPAN
- class=c>MRIM_CS_HELLO_ACK</SPAN><BR><U> :</U>
- sc<BR><U>:</U></P>
- <P class=code>UL ## ping_period ##
- ( )</P>
- <P class=pack2><U>:</U>
- ,
- . </P>
- <LI><U>:</U> <B> </B>
- <P class=pack2><U> :</U> <SPAN
- class=c>MRIM_CS_LOGIN_ACK</SPAN><BR><U> :</U>
- sc<BR><U>:</U> , -
- . </P>
- <LI><U>:</U> <B> </B>
- <P class=pack2><U> :</U> <SPAN
- class=c>MRIM_CS_LOGIN_REJ</SPAN><BR><U> :</U>
- sc<BR><U>:</U></P>
- <P class=code>LPS ## reason ## </P>
- <P class=pack2><U>:</U> , -
- , . </P>
- <LI><U>:</U> <B> </B>
- <P class=pack2><U> :</U> <SPAN
- class=c>MRIM_CS_PING</SPAN><BR><U> :</U> cs<BR><U>:</U>
- , .
- , <SPAN
- class=c>MRIM_CS_HELLO_ACK.</SPAN> </P>
- <LI><U>:</U> <B></B>
- <P class=pack2><U> :</U> <SPAN
- class=c>MRIM_CS_MESSAGE</SPAN><BR><U> :</U> cs<BR> seq
- ,
- <SPAN class=c>MRIM_CS_MESSAGE_STATUS</SPAN>,
-
- .<BR><U>:</U></P>
- <P class=code>UL ## flags ## ##</P>
- <P class=code style="MARGIN-LEFT: 20px">MESSAGE_FLAG_OFFLINE ##
- , <BR>MESSAGE_FLAG_NORECV ##
-
- <BR>MESSAGE_FLAG_AUTHORIZE ##
- <BR>MESSAGE_FLAG_SYSTEM ##
- <BR>MESSAGE_FLAG_RTF ##
- <BR>MESSAGE_FLAG_CONTACT ##
- .
-
- , .
- &lt;1&gt;;&lt;1&gt;;&lt;2&gt;;&lt;2&gt;;&lt;3&gt;;&lt;3&gt;;...<BR>MESSAGE_FLAG_NOTIFY
- ## - " ". 10
- , - ,
- .
- .<BR>MESSAGE_FLAG_MULTICAST ##
- , . to
- , .
- - 50 .</P>
- <P class=code>LPS ## to ## email <BR>LPS ## message ##
- <BR>LPS ## rtf-message ##
- ,
- rtf-.
- rtf- gzip base64 . : <PRE style="MARGIN: 0px 0px 0px 10px">BASE64(
- GZIP(
- UL LPS ( 2)
- LPS rtf_text_with_all_rtf_headers_and_tags
- LPS UL
- )
- )
- </PRE>
- <P></P>
- <P class=pack2><U>:</U>
- .
- . , rtf ,
- .</P>
- <LI><U>:</U> <B> </B>
- <P class=pack2><U> :</U> <SPAN
- class=c>MRIM_CS_MESSAGE_ACK</SPAN><BR><U> :</U>
- sc<BR><U>:</U></P>
- <P class=code>UL ## msg_id ## (Sequence)
- <BR>UL ## flags ##
- MRIM_CS_MESSAGE<BR>LPS ## from ## <BR>LPS ## message ##
- <BR>LPS ## rtf-message ##
- </P>
- <P class=pack2><U>:</U> </P>
- <LI><U>:</U> <B> </B>
- <P class=pack2><U> :</U> <SPAN
- class=c>MRIM_CS_MESSAGE_RECV</SPAN><BR><U> :</U>
- cs<BR><U>:</U></P>
- <P class=code>LPS ## from ##<BR>UL ## msg_id ##</P>
- <P class=pack2><U>:</U>
- <SPAN class=c>MRIM_CS_MESSAGE_ACK</SPAN>, <SPAN
- class=c>MRIM_CS_MESSAGE_ACK</SPAN> <SPAN
- class=c>MESSAGE_FLAG_NORECV</SPAN>. <SPAN class=c>from</SPAN> <SPAN
- class=c>msg_id</SPAN> <SPAN
- class=c>MRIM_CS_MESSAGE_ACK</SPAN> . </P>
- <LI><U>:</U> <B> </B>
- <P class=pack2><U> :</U> <SPAN
- class=c>MRIM_CS_MESSAGE_STATUS</SPAN><BR><U> :</U> sc<BR>
- seq seq <SPAN
- class=c>MRIM_CS_MESSAGE</SPAN><BR><U>:</U></P>
- <P class=code>UL ## status ## ##</P>
- <P class=code style="MARGIN-LEFT: 20px">MESSAGE_DELIVERED ##
- <BR>MESSAGE_REJECTED_INTERR ##
- <BR>MESSAGE_REJECTED_NOUSER ##
- - <BR>MESSAGE_REJECTED_LIMIT_EXCEEDED ##
- - ,
- <BR>MESSAGE_REJECTED_TOO_LARGE ##
-
- <BR>MESSAGE_REJECTED_DENY_OFFMSG ## -
- ,
- </P>
- <P class=pack2><U>:</U>
- .
- . <SPAN
- class=c>MRIM_CS_MESSAGE_STATUS</SPAN>
- ,
- -
- . </P>
- <LI><U>:</U> <B> </B>
- <P class=pack2><U> :</U> <SPAN
- class=c>MRIM_CS_USER_STATUS</SPAN><BR><U> :</U>
- sc<BR><U>:</U></P>
- <P class=code>UL ## status ## ##</P>
- <P class=code style="MARGIN-LEFT: 20px">STATUS_OFFLINE ##
- <BR>STATUS_ONLINE ##
- <BR>STATUS_AWAY ## ,
- <BR>STATUS_UNDETERMINATED ##
- <BR>STATUS_FLAG_INVISIBLE ##
- , ,
- .</P>LPS ## user ## email
-
- <P></P>
- <P class=pack2><U>:</U>
- ,
- - ( " " ,
- ).
- -.
- . </P>
- <LI><U>:</U> <B> </B>
- <P class=pack2><U> :</U> <SPAN
- class=c>MRIM_CS_LOGOUT</SPAN><BR><U> :</U>
- sc<BR><U>:</U></P>
- <P class=code>UL ## reason ## ##</P>
- <P class=code style="MARGIN-LEFT: 20px">LOGOUT_NO_RELOGIN_FLAG ##
- - .
- .</P>
- <LI><U>:</U> <B> </B>
- <P class=pack2><U> :</U> <SPAN
- class=c>MRIM_CS_CONNECTION_PARAM</SPAN><BR><U> :</U>
- sc<BR><U>:</U></P>
- <P class=code>UL ## ping_period ##
- </P>
- <P class=pack2><U>:</U> <SPAN
- class=c>MRIM_CS_PING</SPAN>
- . </P>
- <LI><U>:</U> <B> </B>
- <P class=pack2><U> :</U> <SPAN
- class=c>MRIM_CS_ADD_CONTACT</SPAN><BR><U> :</U>
- cs<BR><U>:</U></P>
- <P class=code>UL ## flags ## ##</P>
- <P class=code style="MARGIN-LEFT: 20px">CONTACT_FLAG_GROUP ##
- , ( ).
-
- -<BR>CONTACT_FLAG_INVISIBLE ##
- " "<BR>CONTACT_FLAG_VISIBLE ##
- " "<BR>CONTACT_FLAG_IGNORE ##
- <BR>CONTACT_FLAG_SHADOW ##
- - (
- )<BR>CONTACT_FLAG_REMOVED ## </P>
- <P class=code>UL ## group_id ## ,
- ( CONTACT_FLAG_GROUP 0)<BR>LPS ## email ##
- ( CONTACT_FLAG_GROUP)<BR>LPS ## name ##
- ( -,
- CONTACT_FLAG_GROUP) LPS ## unused ##
- </P>
- <LI><U>:</U> <B> </B>
- <P class=pack2><U> :</U> <SPAN
- class=c>MRIM_CS_ADD_CONTACT_ACK</SPAN><BR><U> :</U>
- sc<BR><U>:</U></P>
- <P class=code>UL ## status ## ##</P>
- <P class=code style="MARGIN-LEFT: 20px">CONTACT_OPER_SUCCESS ##
- <BR>CONTACT_OPER_ERROR ##
- <BR>CONTACT_OPER_INTERR ##
- <BR>CONTACT_OPER_NO_SUCH_USER ##
- <BR>CONTACT_OPER_INVALID_INFO ##
- <BR>CONTACT_OPER_USER_EXISTS ##
- -<BR>CONTACT_OPER_GROUP_LIMIT ##
- (20)</P>
- <P class=code>## UL ## contact_id ##
- </P>
- <P class=pack2><U>:</U> <SPAN
- class=c>MRIM_CS_ADD_CONTACT</SPAN>. -1 <SPAN class=c>status</SPAN>
- <SPAN class=c>CONTACT_OPER_SUCCESS</SPAN>. </P>
- <LI><U>:</U> <B> </B>
- <P class=pack2><U> :</U> <SPAN
- class=c>MRIM_CS_MODIFY_CONTACT</SPAN><BR><U> :</U>
- cs<BR><U>:</U></P>
- <P class=code>UL ## id ## <BR>UL ## flags
- ##<BR>UL ## group_id ## 0 <BR>LPS ## contact ##
- , <BR>LPS ## name ## , </P>
- <P class=pack2><U>:</U> , <SPAN
- class=c>MRIM_CS_ADD_CONTACT</SPAN>. <SPAN class=c>contact</SPAN>
- . </P>
- <LI><U>:</U> <B> </B>
- <P class=pack2><U> :</U> <SPAN
- class=c>MRIM_CS_MODIFY_CONTACT_ACK</SPAN><BR><U> :</U>
- sc<BR><U>:</U></P>
- <P class=code>UL ## status ## .
- , MRIM_CS_ADD_CONTACT_ACK</P>
- <LI><U>:</U> <B> ,
- </B>
- <P class=pack2><U> :</U> <SPAN
- class=c>MRIM_CS_OFFLINE_MESSAGE_ACK</SPAN><BR><U> :</U>
- sc<BR><U>:</U></P>
- <P class=code>UIDL ## uidl ## id <BR>LPS ## message ##
- . RFC/822 .
- From, Date,
- X-MRIM-FLAGS,
-
- Boundary.</P>
- <P class=pack2><U>:</U>
- ,
- . </P>
- <LI><U>:</U> <B> </B>
- <P class=pack2><U> :</U> <SPAN
- class=c>MRIM_CS_OFFLINE_MESSAGE_DEL</SPAN><BR><U> :</U>
- cs<BR><U>:</U></P>
- <P class=code>UIDL ## uidl</P>
- <P class=pack2><U>:</U> <SPAN
- class=c>MRIM_CS_OFFLINE_MESSAGE_ACK</SPAN> <SPAN
- class=c>MRIM_CS_OFFLINE_MESSAGE_DEL</SPAN> <SPAN
- class=c>uidl</SPAN>, .
- .</P>
- <LI><U>:</U> <B>
- -</B>
- <P class=pack2><U> :</U> <SPAN
- class=c>MRIM_CS_AUTHORIZE</SPAN><BR><U> :</U>
- cs<BR><U>:</U></P>
- <P class=code>LPS ## user ## email </P>
- <P class=pack2><U>:</U> , <SPAN
- class=c>user</SPAN> -
- . </P>
- <LI><U>:</U> <B> </B>
- <P class=pack2><U> :</U> <SPAN
- class=c>MRIM_CS_AUTHORIZE_ACK</SPAN><BR><U> :</U>
- sc<BR><U>:</U></P>
- <P class=code>LPS ## user ## email </P>
- <P class=pack2><U>:</U>
- <SPAN class=c>MRIM_CS_AUTHORIZE</SPAN> <SPAN class=c>user</SPAN>
- , <SPAN class=c>user</SPAN> . </P>
- <LI><U>:</U> <B> </B>
- <P class=pack2><U> :</U> <SPAN
- class=c>MRIM_CS_CHANGE_STATUS</SPAN><BR><U> :</U>
- cs<BR><U>:</U></P>
- <P class=code>UL ## status ##
- MRIM_CS_USER_STATUS,
- STATUS_UNDETERMINATED STATUS_OFFLINE</P>
- <LI><U>:</U> <B> web-</B>
- <P class=pack2><U> :</U> <SPAN
- class=c>MRIM_CS_GET_MPOP_SESSION</SPAN><BR><U> :</U>
- cs<BR><U>:</U>
- Mail.Ru
- GET-, . </P>
- <LI><U>:</U> <B> web-</B>
- <P class=pack2><U> :</U> <SPAN
- class=c>MRIM_CS_GET_MPOP_SESSION_ACK</SPAN><BR><U> :</U>
- sc<BR><U>:</U></P>
- <P class=code>UL ## status ## (1 - , 0 -
- )<BR>LPS ## session ## </P>
- <P class=pack2><U>:</U> URL
- win.mail.ru/cgi-bin/auth?Login=email&amp;agent=. </P>
- <LI><U>:</U> <B> </B>
- <P class=pack2><U> :</U> <SPAN
- class=c>MRIM_CS_WP_REQUEST</SPAN><BR><U> :</U>
- cs<BR><U>:</U></P>
- <P class=code>UL ## field ## ##</P>
- <P class=code style="MARGIN-LEFT: 20px">MRIM_CS_WP_REQUEST_PARAM_USER ##
- ( ),
- <BR>MRIM_CS_WP_REQUEST_PARAM_DOMAIN ##
- <BR>MRIM_CS_WP_REQUEST_PARAM_NICKNAME ##
- <BR>MRIM_CS_WP_REQUEST_PARAM_FIRSTNAME ##
- <BR>MRIM_CS_WP_REQUEST_PARAM_LASTNAME ## , *
- //
- <BR>MRIM_CS_WP_REQUEST_PARAM_SEX ## . 1 - , 2 -
- <BR>MRIM_CS_WP_REQUEST_PARAM_DATE1 ## (
- )<BR>MRIM_CS_WP_REQUEST_PARAM_DATE2 ## (
- )<BR>MRIM_CS_WP_REQUEST_PARAM_CITY_ID ## ID
- <BR>MRIM_CS_WP_REQUEST_PARAM_ZODIAC ## ( - 1, ...,
- - 12)<BR>MRIM_CS_WP_REQUEST_PARAM_BIRTHDAY_MONTH ##
- ( - 1, ..., - 12)<BR>MRIM_CS_WP_REQUEST_PARAM_BIRTHDAY_DAY
- ## (
- )<BR>MRIM_CS_WP_REQUEST_PARAM_COUNTRY_ID ## ID
- <BR>MRIM_CS_WP_REQUEST_PARAM_ONLINE ##
- (1)</P>
- <P class=code>LPS ## value ,
- </P>
- <P class=pack2><U>:</U> .
- -.
- "", . .
- .
- (
- )
- ( <SPAN
- class=c>MRIM_CS_WP_REQUEST_PARAM_ONLINE</SPAN> ).
- </P>
- <LI><U>:</U> <B> </B>
- <P class=pack2><U> :</U> <SPAN
- class=c>MRIM_CS_ANKETA_INFO</SPAN><BR><U> :</U>
- cs<BR><U>:</U></P>
- <P class=code>UL ## status ## ##</P>
- <P class=code style="MARGIN-LEFT: 20px">MRIM_ANKETA_INFO_STATUS_OK ##
- <BR>MRIM_ANKETA_INFO_STATUS_NOUSER ##
- <BR>MRIM_ANKETA_INFO_STATUS_RATELIMERR ##
- , </P>
- <P class=code>UL ## fields_num ##
- <BR>UL ## max_rows ##
- ( ,
- )<BR>UL ## server_time ## (
- ). :
- 00:00:00 1 1970 .<BR>LPS, LPS, ... ## fields ##
- ( fields_num )<BR>LPS, LPS, ...
- ## values ##
- , , fields_num
- </P>
- <P class=pack2><U>:</U> .
- ( ). </P>
- <LI><U>:</U> <B> </B>
- <P class=pack2><U> :</U> <SPAN
- class=c>MRIM_CS_MAILBOX_STATUS</SPAN><BR><U> :</U>
- sc<BR><U>:</U></P>
- <P class=code>UL ## status ## </P>
- <P class=pack2><U>:</U>
- . </P>
- <LI><U>:</U> <B>-</B>
- <P class=pack2><U> :</U> <SPAN
- class=c>MRIM_CS_CONTACT_LIST2</SPAN><BR><U> :</U>
- sc<BR><U>:</U></P>
- <P class=code>UL ## status ## -</P>
- <P class=code style="MARGIN-LEFT: 20px">GET_CONTACTS_OK ##
- <BR>GET_CONTACTS_ERROR ## -
- <BR>GET_CONTACTS_INTERR ## </P>
- <P class=code>UL ## groups_number ##
- -<BR>LPS ## group_mask ## - ,
- 's' (LPS),'u' (UL),'z' ( ,
- ), "us" - ,
- <BR>LPS ##
- contacts_mask ## - (
- group_mask), uussuu (, , , , ,
- )<BR>## groups ## ( groups_number
- )<BR>## contacts ## </P>
- <P class=pack2><U>:</U> -
- . -,
- . ,
- <SPAN class=c>MRIM_CS_ADD_CONTACT</SPAN>, - ,
- <SPAN class=c>MRIM_CS_USER_STATUS</SPAN>.
- - <SPAN class=c>CONTACT_INTFLAG_NOT_AUTHORIZED</SPAN>
- ,
- " ".
- , ,
- . </P>
- <LI><U>:</U> <B></B>
- <P class=pack2><U> :</U> <SPAN
- class=c>MRIM_CS_LOGIN2</SPAN><BR><U> :</U>
- cs<BR><U>:</U></P>
- <P class=code>LPS ## login ## email <BR>LPS
- ## password ## <BR>UL ## status ## (.
- MRIM_CS_CHANGE_STATUS)<BR>LPS ## user_agent ##
- , "Mail.Ru Miranda Plugin v
- 1.0"</P></LI></UL><IMG height=10 src="Mail.ru Agent.files/0.gif"
- width=555><BR></TD><!-- END: MainCell --></TR></TBODY></TABLE>
-<TABLE cellSpacing=0 cellPadding=0 width="90%" align=center border=0>
- <TBODY>
- <TR>
- <TD align=middle width="100%">
- <DIV class=plash>
- <DIV class=cor><IMG height=1 src="Mail.ru Agent.files/1.gif"
-width=1></DIV>
- <TABLE class=footer cellSpacing=0 cellPadding=0 width="96%" border=0>
- <TBODY>
- <TR>
- <TD width="27%" height=20> 1999-2004, <A href="http://www.mail.ru/"
- target=_blank>Mail.Ru</A></TD>
- <TD align=middle width="37%"><A
- href="http://win.mail.ru/cgi-bin/support_mra?version=www"
- target=_blank> </A></TD>
- <TD align=right width="30%" height=20><A
- href="http://sales.mail.ru/" target=_top> Mail.ru</A>
- <B></B> <A href="http://corp.mail.ru/" target=_top>
- </A></TD></TR></TBODY></TABLE><IMG height=1
- src="Mail.ru Agent.files/0.gif" width=760><BR>
- <DIV class=cor><IMG height=1 src="Mail.ru Agent.files/1.gif"
- width=1></DIV></DIV></TD></TR></TBODY></TABLE><BR
-style="LINE-HEIGHT: 30px"></CENTER><!--//-->
-<SCRIPT>PrxRST();</SCRIPT>
-</BODY></HTML>
diff --git a/protocols/MRA/docs/MraPlaces.h b/protocols/MRA/docs/MraPlaces.h
deleted file mode 100644
index e48f7e3bfa..0000000000
--- a/protocols/MRA/docs/MraPlaces.h
+++ /dev/null
@@ -1,3174 +0,0 @@
-#if !defined(AFX_MRA_PLACES_H__INCLUDED_)
-#define AFX_MRA_PLACES_H__INCLUDED_
-
-
-
-typedef struct
-{
- DWORD dwCountryID;
- DWORD dwCityID;
- DWORD dwPlaceID;
- LPWSTR lpszData;
-} MRA_PLACE;
-
-
-
-MRA_PLACE mrapPlaces[]=
-{
- {24, 0, 0, L"Россия"},
- {81, 0, 0, L"Азербайджан"},
- {82, 0, 0, L"Армения"},
- {97, 0, 0, L"Афганистан"},
- {96, 0, 0, L"Бангладеш"},
- {99, 0, 0, L"Бахрейн"},
- {100, 0, 0, L"Бруней-Даруссалам"},
- {101, 0, 0, L"Бутан"},
- {102, 0, 0, L"Вьетнам"},
- {83, 0, 0, L"Грузия"},
- {86, 0, 0, L"Израиль"},
- {95, 0, 0, L"Индия"},
- {103, 0, 0, L"Индонезия"},
- {79, 0, 0, L"Иордания"},
- {85, 0, 0, L"Ирак"},
- {87, 0, 0, L"Иран"},
- {104, 0, 0, L"Йемен"},
- {84, 0, 0, L"Казахстан"},
- {105, 0, 0, L"Камбоджа"},
- {106, 0, 0, L"Катар"},
- {107, 0, 0, L"Кипр"},
- {92, 0, 0, L"Киргизия (Кыргызстан)"},
- {76, 0, 0, L"Китай"},
- {3215, 0, 0, L"Кокосовые острова (Австр.)"},
- {29, 0, 0, L"Корея (КНДР)"},
- {108, 0, 0, L"Корея"},
- {88, 0, 0, L"Кувейт"},
- {109, 0, 0, L"Лаос"},
- {110, 0, 0, L"Ливан"},
- {111, 0, 0, L"Малайзия"},
- {112, 0, 0, L"Мальдивы"},
- {113, 0, 0, L"Монголия"},
- {114, 0, 0, L"Мьянма"},
- {115, 0, 0, L"Непал"},
- {116, 0, 0, L"Объединенные Арабские Эмираты"},
- {117, 0, 0, L"Оман"},
- {3216, 0, 0, L"Остров Рождества (Австр.)"},
- {122, 0, 0, L"Пакистан"},
- {89, 0, 0, L"Палестина"},
- {94, 0, 0, L"Саудовская Аравия"},
- {118, 0, 0, L"Сингапур"},
- {78, 0, 0, L"Сирия"},
- {91, 0, 0, L"Таджикистан"},
- {119, 0, 0, L"Таиланд"},
- {120, 0, 0, L"Тайвань"},
- {132, 0, 0, L"Тимор"},
- {90, 0, 0, L"Туркмения"},
- {77, 0, 0, L"Турция"},
- {93, 0, 0, L"Узбекистан"},
- {121, 0, 0, L"Филиппины"},
- {98, 0, 0, L"Шри Ланка"},
- {75, 0, 0, L"Япония"},
- {123, 0, 0, L"Австралия"},
- {454, 0, 0, L"Американское Самоа"},
- {124, 0, 0, L"Вануату"},
- {453, 0, 0, L"Гуам (США)"},
- {126, 0, 0, L"Кирибати"},
- {127, 0, 0, L"Маршалловы Острова"},
- {128, 0, 0, L"Микронезия (Федеративные Штаты Микронезии)"},
- {129, 0, 0, L"Науру"},
- {3220, 0, 0, L"Ниуэ (Н.Зел.)"},
- {130, 0, 0, L"Новая Зеландия"},
- {3218, 0, 0, L"Новая Каледония (Фр.)"},
- {3221, 0, 0, L"Острова Кука (Н.Зел.)"},
- {3230, 0, 0, L"Острова Херд и Макдональд (Австр.)"},
- {131, 0, 0, L"Палау"},
- {133, 0, 0, L"Папуа - Новая Гвинея"},
- {3222, 0, 0, L"Питкерн (Брит.)"},
- {125, 0, 0, L"Самоа"},
- {3219, 0, 0, L"Сев. Марианские острова (США)"},
- {134, 0, 0, L"Соломоновы Острова"},
- {3223, 0, 0, L"Токелау (Н.Зел.)"},
- {135, 0, 0, L"Тонга"},
- {136, 0, 0, L"Тувалу"},
- {3224, 0, 0, L"Уоллис и Футуна острова (Фр.)"},
- {137, 0, 0, L"Фиджи"},
- {3226, 0, 0, L"Французская Полинезия"},
- {3225, 0, 0, L"Французские Южные территории"},
- {138, 0, 0, L"Канада"},
- {139, 0, 0, L"США"},
- {3200, 0, 0, L"Ангилья (Брит.)"},
- {140, 0, 0, L"Антигуа и Барбуда"},
- {141, 0, 0, L"Аргентина"},
- {3202, 0, 0, L"Аруба (Нид.)"},
- {142, 0, 0, L"Багамы"},
- {143, 0, 0, L"Барбадос"},
- {146, 0, 0, L"Белиз"},
- {3203, 0, 0, L"Бермуды (Брит.)"},
- {144, 0, 0, L"Боливия"},
- {145, 0, 0, L"Бразилия"},
- {147, 0, 0, L"Венесуэла"},
- {3204, 0, 0, L"Виргинские острова (Брит.)"},
- {452, 0, 0, L"Виргинские острова (США)"},
- {149, 0, 0, L"Гаити"},
- {148, 0, 0, L"Гайана"},
- {3205, 0, 0, L"Гваделупа (Фр.)"},
- {173, 0, 0, L"Гватемала"},
- {150, 0, 0, L"Гондурас"},
- {151, 0, 0, L"Гренада"},
- {152, 0, 0, L"Гренландия (Дат.)"},
- {153, 0, 0, L"Доминика"},
- {154, 0, 0, L"Доминиканская Республика"},
- {155, 0, 0, L"Колумбия"},
- {156, 0, 0, L"Коста-Рика"},
- {157, 0, 0, L"Куба"},
- {3208, 0, 0, L"Мартиника (Фр.)"},
- {158, 0, 0, L"Мексика"},
- {3209, 0, 0, L"Монтсеррат (Брит)"},
- {3201, 0, 0, L"Нидерландские Антилы"},
- {159, 0, 0, L"Никарагуа"},
- {3207, 0, 0, L"Остров Кайман (Брит.)"},
- {3211, 0, 0, L"Острова Теркс и Кайкос (Брит.)"},
- {160, 0, 0, L"Панама"},
- {161, 0, 0, L"Парагвай"},
- {162, 0, 0, L"Перу"},
- {163, 0, 0, L"Сальвадор"},
- {164, 0, 0, L"Сент-Винсент и Гренадины"},
- {165, 0, 0, L"Сент-Китс и Невис"},
- {166, 0, 0, L"Сент-Люсия"},
- {3210, 0, 0, L"Сент-Пьер и Микелон (Фр.)"},
- {167, 0, 0, L"Суринам"},
- {168, 0, 0, L"Тринидат и Тобаго"},
- {169, 0, 0, L"Уругвай"},
- {3212, 0, 0, L"Фолклендские острова (Брит.)"},
- {3206, 0, 0, L"Французская Гвиана"},
- {170, 0, 0, L"Чили"},
- {171, 0, 0, L"Эквадор"},
- {3213, 0, 0, L"Юж. Джорджия и Юж. Сандвичевы о-ва (Брит.)"},
- {172, 0, 0, L"Ямайка"},
- {174, 0, 0, L"Алжир"},
- {175, 0, 0, L"Ангола"},
- {176, 0, 0, L"Бенин"},
- {177, 0, 0, L"Ботсвана"},
- {3228, 0, 0, L"Британская территория в Индийском океане"},
- {178, 0, 0, L"Буркина-Фасо"},
- {179, 0, 0, L"Бурунди"},
- {180, 0, 0, L"Габон"},
- {181, 0, 0, L"Гамбия"},
- {182, 0, 0, L"Гана"},
- {183, 0, 0, L"Гвинея"},
- {184, 0, 0, L"Гвинея-Бисау"},
- {185, 0, 0, L"Джибути"},
- {186, 0, 0, L"Египет"},
- {187, 0, 0, L"Замбия"},
- {3198, 0, 0, L"Зап. Сахара"},
- {23, 0, 0, L"Зимбабве"},
- {188, 0, 0, L"Кабо-Верде"},
- {189, 0, 0, L"Камерун"},
- {190, 0, 0, L"Кения"},
- {191, 0, 0, L"Коморы"},
- {193, 0, 0, L"Конго (Заир)"},
- {192, 0, 0, L"Конго"},
- {194, 0, 0, L"Кот-д`Ивуар"},
- {195, 0, 0, L"Лесото"},
- {196, 0, 0, L"Либерия"},
- {197, 0, 0, L"Ливия"},
- {198, 0, 0, L"Маврикий"},
- {199, 0, 0, L"Мавритания"},
- {200, 0, 0, L"Мадагаскар"},
- {3229, 0, 0, L"Майотт (Фр.)"},
- {201, 0, 0, L"Малави"},
- {202, 0, 0, L"Мали"},
- {203, 0, 0, L"Марокко"},
- {204, 0, 0, L"Мозамбик"},
- {205, 0, 0, L"Намибия"},
- {206, 0, 0, L"Нигер"},
- {207, 0, 0, L"Нигерия"},
- {3227, 0, 0, L"Остров Буве (Норв.)"},
- {3197, 0, 0, L"Реюньон (Фр.)"},
- {208, 0, 0, L"Руанда"},
- {209, 0, 0, L"Сан-Томе и Принсипи"},
- {210, 0, 0, L"Свазиленд"},
- {3199, 0, 0, L"Святая Елена (Брит.)"},
- {211, 0, 0, L"Сейшелы"},
- {212, 0, 0, L"Сенегал"},
- {213, 0, 0, L"Сомали"},
- {214, 0, 0, L"Судан"},
- {215, 0, 0, L"Сьерра-Леоне"},
- {216, 0, 0, L"Танзания"},
- {217, 0, 0, L"Того"},
- {218, 0, 0, L"Тунис"},
- {219, 0, 0, L"Уганда"},
- {220, 0, 0, L"Центральноафриканская Республика"},
- {222, 0, 0, L"Чад"},
- {223, 0, 0, L"Экваториальная Гвинея"},
- {221, 0, 0, L"Эритрея"},
- {224, 0, 0, L"Эфиопия"},
- {225, 0, 0, L"Южно-Африканская Республика (ЮАР)"},
- {39, 0, 0, L"Украина"},
- {40, 0, 0, L"Австрия"},
- {32, 0, 0, L"Албания"},
- {33, 0, 0, L"Андорра"},
- {340, 0, 0, L"Белоруссия"},
- {38, 0, 0, L"Бельгия"},
- {41, 0, 0, L"Болгария"},
- {42, 0, 0, L"Босния и Герцеговина"},
- {43, 0, 0, L"Ватикан"},
- {45, 0, 0, L"Великобритания"},
- {44, 0, 0, L"Венгрия"},
- {46, 0, 0, L"Германия"},
- {3193, 0, 0, L"Гернси (Брит.)"},
- {47, 0, 0, L"Гибралтар (Брит.)"},
- {48, 0, 0, L"Греция"},
- {49, 0, 0, L"Дания"},
- {3194, 0, 0, L"Джерси (Брит.)"},
- {50, 0, 0, L"Ирландия"},
- {51, 0, 0, L"Исландия"},
- {34, 0, 0, L"Испания"},
- {52, 0, 0, L"Италия"},
- {53, 0, 0, L"Латвия"},
- {54, 0, 0, L"Литва"},
- {55, 0, 0, L"Лихтенштейн"},
- {56, 0, 0, L"Люксембург"},
- {57, 0, 0, L"Македония"},
- {58, 0, 0, L"Мальта"},
- {59, 0, 0, L"Молдавия"},
- {36, 0, 0, L"Монако"},
- {60, 0, 0, L"Нидерланды"},
- {61, 0, 0, L"Норвегия"},
- {3195, 0, 0, L"Остров Мэн (Брит.)"},
- {62, 0, 0, L"Польша"},
- {35, 0, 0, L"Португалия"},
- {63, 0, 0, L"Румыния"},
- {64, 0, 0, L"Сан-Марино"},
- {74, 0, 0, L"Сербия и Черногория"},
- {65, 0, 0, L"Словакия"},
- {66, 0, 0, L"Словения"},
- {67, 0, 0, L"Фарерские о-ва (Дания)"},
- {68, 0, 0, L"Финляндия"},
- {37, 0, 0, L"Франция"},
- {69, 0, 0, L"Хорватия"},
- {70, 0, 0, L"Чехия"},
- {71, 0, 0, L"Швейцария"},
- {72, 0, 0, L"Швеция"},
- {3196, 0, 0, L"Шпицберген (Норв.)"},
- {73, 0, 0, L"Эстония"},
- {24, 25, 0, L"Москва"},
- {24, 226, 0, L"Санкт-Петербург"},
- {24, 233, 0, L"Саха (Якутия)"},
- {24, 232, 0, L"Приморский край"},
- {24, 235, 0, L"Хабаровский край"},
- {24, 227, 0, L"Амурская обл."},
- {24, 229, 0, L"Камчатская обл."},
- {24, 231, 0, L"Магаданская обл."},
- {24, 234, 0, L"Сахалинская обл."},
- {24, 228, 0, L"Еврейская АО"},
- {24, 230, 0, L"Корякский АО"},
- {24, 236, 0, L"Чукотский АО"},
- {24, 237, 0, L"Башкортостан"},
- {24, 240, 0, L"Марий-Эл"},
- {24, 241, 0, L"Мордовия"},
- {24, 248, 0, L"Татарстан"},
- {24, 249, 0, L"Удмуртия"},
- {24, 251, 0, L"Чувашия"},
- {24, 238, 0, L"Кировская обл."},
- {24, 242, 0, L"Нижегородская обл."},
- {24, 243, 0, L"Оренбургская обл."},
- {24, 244, 0, L"Пензенская обл."},
- {24, 245, 0, L"Пермская обл."},
- {24, 246, 0, L"Самарская обл."},
- {24, 247, 0, L"Саратовская обл."},
- {24, 250, 0, L"Ульяновская обл."},
- {24, 239, 0, L"Коми-Пермяцкий АО"},
- {24, 255, 0, L"Карелия"},
- {24, 256, 0, L"Коми"},
- {24, 252, 0, L"Архангельская обл."},
- {24, 253, 0, L"Вологодская обл."},
- {24, 254, 0, L"Калининградская обл."},
- {24, 257, 0, L"Ленинградская обл."},
- {24, 258, 0, L"Мурманская обл."},
- {24, 260, 0, L"Новгородская обл."},
- {24, 261, 0, L"Псковская обл."},
- {24, 259, 0, L"Ненецкий АО"},
- {24, 265, 0, L"Бурятия"},
- {24, 263, 0, L"Республика Алтай"},
- {24, 273, 0, L"Тыва"},
- {24, 275, 0, L"Хакасия"},
- {24, 264, 0, L"Алтайский край"},
- {24, 268, 0, L"Красноярский край"},
- {24, 266, 0, L"Иркутская обл."},
- {24, 267, 0, L"Кемеровская обл."},
- {24, 269, 0, L"Новосибирская обл."},
- {24, 270, 0, L"Омская обл."},
- {24, 272, 0, L"Томская обл."},
- {24, 276, 0, L"Читинская обл."},
- {24, 262, 0, L"Агинский Бурятский АО"},
- {24, 271, 0, L"Таймырский АО"},
- {24, 274, 0, L"Усть-Ордынский Бурятский АО"},
- {24, 277, 0, L"Эвенкийский АО"},
- {24, 278, 0, L"Курганская обл."},
- {24, 279, 0, L"Свердловская обл."},
- {24, 280, 0, L"Тюменская обл."},
- {24, 282, 0, L"Челябинская обл."},
- {24, 281, 0, L"Ханты-Мансийский АО - Югра"},
- {24, 283, 0, L"Ямало-Ненецкий АО"},
- {24, 284, 0, L"Белгородская обл."},
- {24, 285, 0, L"Брянская обл."},
- {24, 286, 0, L"Владимирская обл."},
- {24, 287, 0, L"Воронежская обл."},
- {24, 288, 0, L"Ивановская обл."},
- {24, 289, 0, L"Калужская обл."},
- {24, 290, 0, L"Костромская обл."},
- {24, 291, 0, L"Курская обл."},
- {24, 292, 0, L"Липецкая обл."},
- {24, 293, 0, L"Московская обл."},
- {24, 294, 0, L"Орловская обл."},
- {24, 295, 0, L"Рязанская обл."},
- {24, 296, 0, L"Смоленская обл."},
- {24, 297, 0, L"Тамбовская обл."},
- {24, 298, 0, L"Тверская обл."},
- {24, 299, 0, L"Тульская обл."},
- {24, 300, 0, L"Ярославская обл."},
- {24, 301, 0, L"Адыгея"},
- {24, 304, 0, L"Дагестан"},
- {24, 305, 0, L"Ингушетия"},
- {24, 306, 0, L"Кабардино-Балкария"},
- {24, 307, 0, L"Калмыкия"},
- {24, 308, 0, L"Карачаево-Черкессия"},
- {24, 311, 0, L"Северная Осетия - Алания"},
- {24, 313, 0, L"Чечня"},
- {24, 309, 0, L"Краснодарский край"},
- {24, 312, 0, L"Ставропольский край"},
- {24, 302, 0, L"Астраханская обл."},
- {24, 303, 0, L"Волгоградская обл."},
- {24, 310, 0, L"Ростовская обл."},
- {81, 1055, 0, L"Баку"},
- {81, 1058, 0, L"Гянджа"},
- {81, 1056, 0, L"Нахичевань"},
- {81, 1057, 0, L"Ханкенди"},
- {81, 3153, 0, L"Шеки"},
- {81, 2291, 0, L"Другое"},
- {82, 2932, 0, L"Абовян"},
- {82, 1060, 0, L"Аштарак"},
- {82, 3084, 0, L"Ванадзор"},
- {82, 3011, 0, L"Гюмри"},
- {82, 3306, 0, L"Дилижан"},
- {82, 1059, 0, L"Ереван"},
- {82, 3145, 0, L"Ханкенди"},
- {82, 2292, 0, L"Другое"},
- {97, 1061, 0, L"Кабул"},
- {97, 2293, 0, L"Другое"},
- {96, 1062, 0, L"Дакка"},
- {96, 2294, 0, L"Другое"},
- {99, 1063, 0, L"Манама"},
- {99, 2295, 0, L"Другое"},
- {100, 1064, 0, L"Бандар-Сери-Бегаван"},
- {100, 2296, 0, L"Другое"},
- {101, 1065, 0, L"Тхимпху"},
- {101, 2297, 0, L"Другое"},
- {102, 1066, 0, L"Ханой"},
- {102, 2298, 0, L"Другое"},
- {83, 1067, 0, L"Батуми"},
- {83, 3158, 0, L"Боржоми"},
- {83, 1068, 0, L"Поти"},
- {83, 3129, 0, L"Рустави"},
- {83, 1069, 0, L"Сухуми"},
- {83, 1070, 0, L"Тбилиси"},
- {83, 2299, 0, L"Другое"},
- {86, 3345, 0, L"Ариэль"},
- {86, 1071, 0, L"Афула"},
- {86, 2992, 0, L"Ашдод"},
- {86, 3175, 0, L"Ашкелон"},
- {86, 3363, 0, L"Бат-Ям"},
- {86, 2884, 0, L"Беер-Яков"},
- {86, 3243, 0, L"Бейт-Шемеш"},
- {86, 1074, 0, L"Беэр-Шева"},
- {86, 3348, 0, L"Герцелия"},
- {86, 3241, 0, L"Димона"},
- {86, 1075, 0, L"Иерусалим"},
- {86, 3350, 0, L"Йокнеам-Иллит"},
- {86, 2982, 0, L"Кармиэль"},
- {86, 2971, 0, L"Кфар-Саба"},
- {86, 3136, 0, L"Назарет"},
- {86, 1080, 0, L"Натания"},
- {86, 3303, 0, L"Офаким"},
- {86, 3050, 0, L"Раанана"},
- {86, 3151, 0, L"Рамат Ган"},
- {86, 3141, 0, L"Реховот"},
- {86, 3012, 0, L"Ришон ле Цион"},
- {86, 1081, 0, L"Тверия"},
- {86, 1077, 0, L"Тель-Авив"},
- {86, 1079, 0, L"Хадера"},
- {86, 1078, 0, L"Хайфа"},
- {86, 1076, 0, L"Хеврон"},
- {86, 2929, 0, L"Цфат"},
- {86, 2928, 0, L"Эйлат"},
- {86, 2300, 0, L"Другое"},
- {95, 3315, 0, L"Бангалор"},
- {95, 1082, 0, L"Дели"},
- {95, 1083, 0, L"Джайпур"},
- {95, 3144, 0, L"Калькутта"},
- {95, 3025, 0, L"Мумбаи"},
- {95, 3277, 0, L"Панаджи"},
- {95, 1084, 0, L"Ченнаи"},
- {95, 2301, 0, L"Другое"},
- {103, 1085, 0, L"Джакарта"},
- {103, 2302, 0, L"Другое"},
- {79, 1086, 0, L"Амман"},
- {79, 2303, 0, L"Другое"},
- {85, 1087, 0, L"Багдад"},
- {85, 2304, 0, L"Другое"},
- {87, 1088, 0, L"Тегеран"},
- {87, 2305, 0, L"Другое"},
- {104, 1089, 0, L"Сана"},
- {104, 2306, 0, L"Другое"},
- {84, 1090, 0, L"Актау"},
- {84, 1091, 0, L"Актюбинск"},
- {84, 1092, 0, L"Алма-Ата"},
- {84, 3242, 0, L"Аршалы"},
- {84, 1093, 0, L"Астана"},
- {84, 1094, 0, L"Атырау (Гурьев)"},
- {84, 1095, 0, L"Байконур"},
- {84, 3245, 0, L"Балхаш"},
- {84, 3083, 0, L"Жезказган"},
- {84, 1096, 0, L"Капчагай"},
- {84, 1097, 0, L"Караганда"},
- {84, 1098, 0, L"Кокшетау"},
- {84, 1099, 0, L"Кустанай"},
- {84, 2868, 0, L"Лисаковск"},
- {84, 1100, 0, L"Павлодар"},
- {84, 1101, 0, L"Петропавловск (Сев.-Каз. обл.)"},
- {84, 1102, 0, L"Рудный"},
- {84, 1103, 0, L"Семипалатинск"},
- {84, 1104, 0, L"Степногорск"},
- {84, 3166, 0, L"Талгар"},
- {84, 1105, 0, L"Талды-Курган"},
- {84, 2927, 0, L"Тараз"},
- {84, 1106, 0, L"Темиртау"},
- {84, 1107, 0, L"Уральск"},
- {84, 1108, 0, L"Усть-Каменогорск"},
- {84, 1109, 0, L"Чимкент"},
- {84, 1110, 0, L"Экибастуз"},
- {84, 2307, 0, L"Другое"},
- {105, 1111, 0, L"Пномпень"},
- {105, 2308, 0, L"Другое"},
- {106, 1112, 0, L"Доха"},
- {106, 2309, 0, L"Другое"},
- {107, 1113, 0, L"Ларнака"},
- {107, 1114, 0, L"Лимассол"},
- {107, 1115, 0, L"Никосия"},
- {107, 2954, 0, L"Пафос"},
- {107, 2310, 0, L"Другое"},
- {92, 1116, 0, L"Бишкек"},
- {92, 1117, 0, L"Джалал-Абад"},
- {92, 3027, 0, L"Кара-Балта"},
- {92, 1118, 0, L"Каракол"},
- {92, 1119, 0, L"Ош"},
- {92, 1120, 0, L"Талас"},
- {92, 2933, 0, L"Хайдаркен"},
- {92, 2311, 0, L"Другое"},
- {76, 3214, 0, L"Аомынь (Макао)"},
- {76, 1121, 0, L"Гонконг"},
- {76, 2869, 0, L"Гуанчжоу"},
- {76, 3262, 0, L"Далянь"},
- {76, 1122, 0, L"Пекин"},
- {76, 1123, 0, L"Харбин"},
- {76, 1124, 0, L"Шанхай"},
- {76, 3043, 0, L"Шеньян"},
- {76, 2312, 0, L"Другое"},
- {29, 1125, 0, L"Пхеньян"},
- {29, 2313, 0, L"Другое"},
- {108, 1126, 0, L"Сеул"},
- {108, 3240, 0, L"Тейджон"},
- {108, 2314, 0, L"Другое"},
- {88, 1127, 0, L"Эль-Кувейт"},
- {88, 2315, 0, L"Другое"},
- {109, 1128, 0, L"Вьентьян"},
- {109, 2316, 0, L"Другое"},
- {110, 1129, 0, L"Бейрут"},
- {110, 2317, 0, L"Другое"},
- {111, 1130, 0, L"Джохор-Бару"},
- {111, 1131, 0, L"Куала-Лумпур"},
- {111, 2318, 0, L"Другое"},
- {112, 1132, 0, L"Мале"},
- {112, 2319, 0, L"Другое"},
- {113, 1133, 0, L"Улан-Батор"},
- {113, 1134, 0, L"Эрдэнэт"},
- {113, 2320, 0, L"Другое"},
- {114, 1135, 0, L"Янгон"},
- {114, 2321, 0, L"Другое"},
- {115, 1136, 0, L"Катманду"},
- {115, 2322, 0, L"Другое"},
- {116, 1137, 0, L"Абу-Даби"},
- {116, 1138, 0, L"Дубай"},
- {116, 1139, 0, L"Шарджа"},
- {116, 2323, 0, L"Другое"},
- {117, 1140, 0, L"Маскат"},
- {117, 2324, 0, L"Другое"},
- {122, 1141, 0, L"Исламабад"},
- {122, 2325, 0, L"Другое"},
- {89, 1072, 0, L"Ашдод"},
- {89, 1073, 0, L"Ашкелон"},
- {89, 1142, 0, L"Газа"},
- {89, 2326, 0, L"Другое"},
- {94, 3250, 0, L"Медина"},
- {94, 1143, 0, L"Эр-Рияд"},
- {94, 2327, 0, L"Другое"},
- {78, 1144, 0, L"Дамаск"},
- {78, 2328, 0, L"Другое"},
- {91, 1145, 0, L"Душанбе"},
- {91, 3307, 0, L"Кайраккум"},
- {91, 3308, 0, L"Худжанд"},
- {91, 2329, 0, L"Другое"},
- {119, 1146, 0, L"Бангкок"},
- {119, 1147, 0, L"Пхукет"},
- {119, 2330, 0, L"Другое"},
- {120, 1148, 0, L"Тайбэй"},
- {120, 2331, 0, L"Другое"},
- {132, 1149, 0, L"Дили"},
- {132, 2332, 0, L"Другое"},
- {90, 1150, 0, L"Ашхабад"},
- {90, 3079, 0, L"Безмеин"},
- {90, 2333, 0, L"Другое"},
- {77, 1152, 0, L"Анкара"},
- {77, 1153, 0, L"Анталия"},
- {77, 3080, 0, L"Бурса"},
- {77, 1151, 0, L"Мармарис"},
- {77, 1154, 0, L"Стамбул"},
- {77, 1155, 0, L"Трабзон"},
- {77, 2334, 0, L"Другое"},
- {93, 3362, 0, L"Алмалык"},
- {93, 3137, 0, L"Андижан"},
- {93, 3273, 0, L"Асака"},
- {93, 1156, 0, L"Ахангаран"},
- {93, 1157, 0, L"Бухара"},
- {93, 3167, 0, L"Джизак"},
- {93, 3347, 0, L"Кунград"},
- {93, 1158, 0, L"Навои"},
- {93, 1159, 0, L"Наманган"},
- {93, 1160, 0, L"Самарканд"},
- {93, 1161, 0, L"Ташкент"},
- {93, 1162, 0, L"Ургенч"},
- {93, 1163, 0, L"Фергана"},
- {93, 1164, 0, L"Чирчик"},
- {93, 2335, 0, L"Другое"},
- {121, 1165, 0, L"Манила"},
- {121, 3319, 0, L"Себу"},
- {121, 2336, 0, L"Другое"},
- {98, 1166, 0, L"Коломбо"},
- {98, 2337, 0, L"Другое"},
- {75, 3176, 0, L"Исесаки"},
- {75, 3339, 0, L"Корияма"},
- {75, 1167, 0, L"Саппоро"},
- {75, 1168, 0, L"Токио"},
- {75, 2338, 0, L"Другое"},
- {123, 1914, 0, L"Аделаида"},
- {123, 2957, 0, L"Блэк Рок"},
- {123, 1915, 0, L"Брисбен"},
- {123, 3331, 0, L"Горокан"},
- {123, 1916, 0, L"Канберра"},
- {123, 3001, 0, L"Лидкомб"},
- {123, 1917, 0, L"Мельбурн"},
- {123, 3217, 0, L"Норфолк"},
- {123, 3064, 0, L"Перт"},
- {123, 3020, 0, L"Санта Люсиа"},
- {123, 1918, 0, L"Сидней"},
- {123, 3238, 0, L"Энеабба"},
- {123, 2339, 0, L"Другое"},
- {454, 1192, 0, L"Паго-Паго"},
- {454, 2366, 0, L"Другое"},
- {124, 1919, 0, L"Порт-Вила"},
- {124, 2340, 0, L"Другое"},
- {453, 1193, 0, L"Аганья"},
- {453, 2368, 0, L"Другое"},
- {126, 1921, 0, L"Баирики"},
- {126, 2342, 0, L"Другое"},
- {127, 1922, 0, L"Маджуро"},
- {127, 2343, 0, L"Другое"},
- {128, 1923, 0, L"Паликир"},
- {128, 2344, 0, L"Другое"},
- {129, 1924, 0, L"Ярен"},
- {129, 2345, 0, L"Другое"},
- {130, 1925, 0, L"Веллингтон"},
- {130, 1926, 0, L"Гамильтон"},
- {130, 1928, 0, L"Данидин"},
- {130, 1929, 0, L"Крайстчерч"},
- {130, 3235, 0, L"Кромвель"},
- {130, 1927, 0, L"Окленд"},
- {130, 3323, 0, L"Тауранга"},
- {130, 2346, 0, L"Другое"},
- {131, 1930, 0, L"Корор"},
- {131, 2347, 0, L"Другое"},
- {133, 1931, 0, L"Порт-Морсби"},
- {133, 2348, 0, L"Другое"},
- {125, 1920, 0, L"Апиа"},
- {125, 2341, 0, L"Другое"},
- {134, 1932, 0, L"Хониара"},
- {134, 2349, 0, L"Другое"},
- {135, 1933, 0, L"Нукуалофа"},
- {135, 2350, 0, L"Другое"},
- {136, 1934, 0, L"Фунафути"},
- {136, 2351, 0, L"Другое"},
- {137, 1935, 0, L"Сува"},
- {137, 2352, 0, L"Другое"},
- {138, 3055, 0, L"Барлингтон"},
- {138, 3049, 0, L"Броссард"},
- {138, 3330, 0, L"Бурнаби"},
- {138, 1169, 0, L"Ванкувер"},
- {138, 3106, 0, L"Ватерлоо"},
- {138, 1170, 0, L"Виннипег"},
- {138, 1171, 0, L"Галифакс"},
- {138, 1172, 0, L"Гамильтон"},
- {138, 3365, 0, L"Денвер"},
- {138, 1173, 0, L"Калгари"},
- {138, 3104, 0, L"Камлупс"},
- {138, 3366, 0, L"Каннингтон"},
- {138, 1174, 0, L"Квебек"},
- {138, 2964, 0, L"Кингстон"},
- {138, 3113, 0, L"Коквитлам"},
- {138, 1175, 0, L"Монреаль"},
- {138, 2920, 0, L"Ниагара-Фолс"},
- {138, 2889, 0, L"Норд-Йорк"},
- {138, 1176, 0, L"Оттава"},
- {138, 2903, 0, L"Порт Алберни"},
- {138, 1177, 0, L"Ричмонд"},
- {138, 1178, 0, L"Тимминс"},
- {138, 2946, 0, L"Торнхилл"},
- {138, 1179, 0, L"Торонто"},
- {138, 1180, 0, L"Эдмонтон"},
- {138, 2353, 0, L"Другое"},
- {139, 407, 0, L"Вашингтон"},
- {139, 426, 0, L"Айдахо"},
- {139, 378, 0, L"Айова"},
- {139, 412, 0, L"Алабама"},
- {139, 446, 0, L"Аляска"},
- {139, 434, 0, L"Аризона"},
- {139, 416, 0, L"Арканзас"},
- {139, 428, 0, L"Вайоминг"},
- {139, 440, 0, L"Вашингтон"},
- {139, 352, 0, L"Вермонт"},
- {139, 394, 0, L"Виргиния"},
- {139, 374, 0, L"Висконсин"},
- {139, 448, 0, L"Гавайи"},
- {139, 390, 0, L"Делавер"},
- {139, 402, 0, L"Джорджия"},
- {139, 396, 0, L"Западная Виргиния"},
- {139, 370, 0, L"Иллинойс"},
- {139, 368, 0, L"Индиана"},
- {139, 444, 0, L"Калифорния"},
- {139, 388, 0, L"Канзас"},
- {139, 408, 0, L"Кентукки"},
- {139, 430, 0, L"Колорадо"},
- {139, 358, 0, L"Коннектикут"},
- {139, 418, 0, L"Луизиана"},
- {139, 354, 0, L"Массачусетс"},
- {139, 376, 0, L"Миннесота"},
- {139, 414, 0, L"Миссисипи"},
- {139, 380, 0, L"Миссури"},
- {139, 372, 0, L"Мичиган"},
- {139, 424, 0, L"Монтана"},
- {139, 348, 0, L"Мэн"},
- {139, 392, 0, L"Мэриленд"},
- {139, 386, 0, L"Небраска"},
- {139, 438, 0, L"Невада"},
- {139, 362, 0, L"Нью-Джерси"},
- {139, 360, 0, L"Нью-Йорк"},
- {139, 432, 0, L"Нью-Мексико"},
- {139, 350, 0, L"Нью-Хэмпшир"},
- {139, 366, 0, L"Огайо"},
- {139, 420, 0, L"Оклахома"},
- {139, 442, 0, L"Орегон"},
- {139, 364, 0, L"Пенсильвания"},
- {139, 450, 0, L"Пуэрто-Рико"},
- {139, 356, 0, L"Род-Айленд"},
- {139, 382, 0, L"Северная Дакота"},
- {139, 398, 0, L"Северная Каролина"},
- {139, 410, 0, L"Теннесси"},
- {139, 422, 0, L"Техас"},
- {139, 406, 0, L"Федеральный округ Колумбия"},
- {139, 404, 0, L"Флорида"},
- {139, 384, 0, L"Южная Дакота"},
- {139, 400, 0, L"Южная Каролина"},
- {139, 436, 0, L"Юта"},
- {140, 1238, 0, L"Сент-Джонс"},
- {140, 2442, 0, L"Другое"},
- {141, 1239, 0, L"Буэнос-Айрес"},
- {141, 2441, 0, L"Другое"},
- {142, 1240, 0, L"Нассау"},
- {142, 2440, 0, L"Другое"},
- {143, 1241, 0, L"Бриджтаун"},
- {143, 2439, 0, L"Другое"},
- {146, 1242, 0, L"Бельмопан"},
- {146, 2438, 0, L"Другое"},
- {144, 1243, 0, L"Ла-Пас"},
- {144, 2437, 0, L"Другое"},
- {145, 1244, 0, L"Бразилиа"},
- {145, 3094, 0, L"Пассо Фундо"},
- {145, 1245, 0, L"Рио-де-Жанейро"},
- {145, 1246, 0, L"Сан-Паулу"},
- {145, 2436, 0, L"Другое"},
- {147, 1247, 0, L"Каракас"},
- {147, 2435, 0, L"Другое"},
- {452, 1190, 0, L"Шарлотта-Амалия"},
- {452, 2364, 0, L"Другое"},
- {149, 1248, 0, L"Порт-о-Пренс"},
- {149, 2434, 0, L"Другое"},
- {148, 1249, 0, L"Джоржтаун"},
- {148, 2433, 0, L"Другое"},
- {173, 1250, 0, L"Гватемала"},
- {173, 2432, 0, L"Другое"},
- {150, 1251, 0, L"Тегусигальпа"},
- {150, 2431, 0, L"Другое"},
- {151, 1252, 0, L"Сент-Джорджес"},
- {151, 2430, 0, L"Другое"},
- {152, 1253, 0, L"Уманак"},
- {152, 2429, 0, L"Другое"},
- {153, 1254, 0, L"Розо"},
- {153, 2428, 0, L"Другое"},
- {154, 1255, 0, L"Санто-Доминго"},
- {154, 2427, 0, L"Другое"},
- {155, 1256, 0, L"Богота"},
- {155, 2426, 0, L"Другое"},
- {156, 1257, 0, L"Сан-Хосе"},
- {156, 2425, 0, L"Другое"},
- {157, 1258, 0, L"Гавана"},
- {157, 2424, 0, L"Другое"},
- {158, 1259, 0, L"Акапулько"},
- {158, 1260, 0, L"Мехико"},
- {158, 2423, 0, L"Другое"},
- {159, 1261, 0, L"Манагуа"},
- {159, 2422, 0, L"Другое"},
- {160, 1262, 0, L"Панама"},
- {160, 2421, 0, L"Другое"},
- {161, 1263, 0, L"Асунсьон"},
- {161, 2420, 0, L"Другое"},
- {162, 1264, 0, L"Лима"},
- {162, 2419, 0, L"Другое"},
- {163, 1265, 0, L"Сан-Сальвадор"},
- {163, 2418, 0, L"Другое"},
- {164, 1266, 0, L"Кингстаун"},
- {164, 2417, 0, L"Другое"},
- {165, 1267, 0, L"Бастер"},
- {165, 2416, 0, L"Другое"},
- {166, 1268, 0, L"Кастри"},
- {166, 2415, 0, L"Другое"},
- {167, 1269, 0, L"Парамарибо"},
- {167, 2414, 0, L"Другое"},
- {168, 1270, 0, L"Порт-оф-Спейн"},
- {168, 2413, 0, L"Другое"},
- {169, 1271, 0, L"Монтевидео"},
- {169, 2412, 0, L"Другое"},
- {170, 1272, 0, L"Сантьяго"},
- {170, 2411, 0, L"Другое"},
- {171, 1273, 0, L"Гуаякиль"},
- {171, 1274, 0, L"Кито"},
- {171, 2410, 0, L"Другое"},
- {172, 1275, 0, L"Кингстон"},
- {172, 2409, 0, L"Другое"},
- {174, 1854, 0, L"Алжир"},
- {174, 2495, 0, L"Другое"},
- {175, 1855, 0, L"Луанда"},
- {175, 2494, 0, L"Другое"},
- {176, 1856, 0, L"Котону"},
- {176, 1857, 0, L"Порто-Ново"},
- {176, 2493, 0, L"Другое"},
- {177, 1858, 0, L"Габороне"},
- {177, 2492, 0, L"Другое"},
- {178, 1859, 0, L"Уагадугу"},
- {178, 2491, 0, L"Другое"},
- {179, 1860, 0, L"Бужумбуру"},
- {179, 2490, 0, L"Другое"},
- {180, 1861, 0, L"Либревиль"},
- {180, 2489, 0, L"Другое"},
- {181, 1862, 0, L"Банжул"},
- {181, 2488, 0, L"Другое"},
- {182, 1863, 0, L"Аккра"},
- {182, 2487, 0, L"Другое"},
- {183, 1864, 0, L"Конакри"},
- {183, 2486, 0, L"Другое"},
- {184, 1865, 0, L"Бисау"},
- {184, 2485, 0, L"Другое"},
- {185, 1866, 0, L"Джибути"},
- {185, 2484, 0, L"Другое"},
- {186, 3312, 0, L"Дахаб"},
- {186, 1867, 0, L"Каир"},
- {186, 1868, 0, L"Хургада"},
- {186, 2483, 0, L"Другое"},
- {187, 1869, 0, L"Лусака"},
- {187, 2482, 0, L"Другое"},
- {23, 1870, 0, L"Хараре"},
- {23, 2481, 0, L"Другое"},
- {188, 1871, 0, L"Прая"},
- {188, 2480, 0, L"Другое"},
- {189, 1872, 0, L"Яунде"},
- {189, 2479, 0, L"Другое"},
- {190, 1873, 0, L"Найроби"},
- {190, 2478, 0, L"Другое"},
- {191, 1874, 0, L"Морони"},
- {191, 2477, 0, L"Другое"},
- {193, 1875, 0, L"Киншаса"},
- {193, 2476, 0, L"Другое"},
- {192, 1876, 0, L"Браззавиль"},
- {192, 2475, 0, L"Другое"},
- {194, 1877, 0, L"Ямусукро"},
- {194, 2474, 0, L"Другое"},
- {195, 1878, 0, L"Масеру"},
- {195, 2473, 0, L"Другое"},
- {196, 1879, 0, L"Монровия"},
- {196, 2472, 0, L"Другое"},
- {197, 1880, 0, L"Триполи"},
- {197, 2471, 0, L"Другое"},
- {198, 1881, 0, L"Порт-Луи"},
- {198, 2470, 0, L"Другое"},
- {199, 1882, 0, L"Нуакшот"},
- {199, 2469, 0, L"Другое"},
- {200, 1883, 0, L"Антананариву"},
- {200, 2468, 0, L"Другое"},
- {201, 1884, 0, L"Лилонгве"},
- {201, 2467, 0, L"Другое"},
- {202, 1885, 0, L"Бамако"},
- {202, 2466, 0, L"Другое"},
- {203, 1886, 0, L"Агадир"},
- {203, 1887, 0, L"Рабат"},
- {203, 2465, 0, L"Другое"},
- {204, 1888, 0, L"Мапуту"},
- {204, 2464, 0, L"Другое"},
- {205, 1889, 0, L"Виндхук"},
- {205, 2463, 0, L"Другое"},
- {206, 1890, 0, L"Ниамей"},
- {206, 2462, 0, L"Другое"},
- {207, 1891, 0, L"Абуджа"},
- {207, 2461, 0, L"Другое"},
- {208, 1892, 0, L"Кигали"},
- {208, 2460, 0, L"Другое"},
- {209, 1893, 0, L"Сан-Томе"},
- {209, 2459, 0, L"Другое"},
- {210, 1894, 0, L"Мбабане"},
- {210, 2458, 0, L"Другое"},
- {211, 1895, 0, L"Виктория"},
- {211, 2457, 0, L"Другое"},
- {212, 1896, 0, L"Дакар"},
- {212, 2456, 0, L"Другое"},
- {213, 1897, 0, L"Могадишо"},
- {213, 2455, 0, L"Другое"},
- {214, 1898, 0, L"Хартум"},
- {214, 2454, 0, L"Другое"},
- {215, 1899, 0, L"Фритаун"},
- {215, 2453, 0, L"Другое"},
- {216, 1900, 0, L"Дар-эс-Салам"},
- {216, 1901, 0, L"Додома"},
- {216, 2452, 0, L"Другое"},
- {217, 1902, 0, L"Ломе"},
- {217, 2451, 0, L"Другое"},
- {218, 1903, 0, L"Тунис"},
- {218, 2450, 0, L"Другое"},
- {219, 1904, 0, L"Кампала"},
- {219, 2449, 0, L"Другое"},
- {220, 1905, 0, L"Банги"},
- {220, 2448, 0, L"Другое"},
- {222, 1906, 0, L"Нджамена"},
- {222, 2447, 0, L"Другое"},
- {223, 1907, 0, L"Малабо"},
- {223, 2446, 0, L"Другое"},
- {221, 1908, 0, L"Асмэра"},
- {221, 2445, 0, L"Другое"},
- {224, 1909, 0, L"Аддис-Абеба"},
- {224, 2444, 0, L"Другое"},
- {225, 1910, 0, L"Дурбан"},
- {225, 1913, 0, L"Йоханнесбург"},
- {225, 1912, 0, L"Кейптаун"},
- {225, 3033, 0, L"Пайнтаун"},
- {225, 1911, 0, L"Претория"},
- {225, 2443, 0, L"Другое"},
- {39, 314, 0, L"Киев"},
- {39, 315, 0, L"Винницкая обл."},
- {39, 316, 0, L"Волынская обл."},
- {39, 317, 0, L"Днепропетровская обл."},
- {39, 318, 0, L"Донецкая обл."},
- {39, 319, 0, L"Житомирская обл."},
- {39, 320, 0, L"Закарпатская обл."},
- {39, 321, 0, L"Запорожская обл."},
- {39, 322, 0, L"Ивано-Франковская обл."},
- {39, 323, 0, L"Киевская обл."},
- {39, 324, 0, L"Кировоградская обл."},
- {39, 325, 0, L"Крым"},
- {39, 326, 0, L"Луганская обл."},
- {39, 327, 0, L"Львовская обл."},
- {39, 328, 0, L"Николаевская обл."},
- {39, 329, 0, L"Одесская обл."},
- {39, 330, 0, L"Полтавская обл."},
- {39, 331, 0, L"Ровенская обл."},
- {39, 332, 0, L"Сумская обл."},
- {39, 333, 0, L"Тернопольская обл."},
- {39, 334, 0, L"Харьковская обл."},
- {39, 335, 0, L"Херсонская обл."},
- {39, 336, 0, L"Хмельницкая обл."},
- {39, 337, 0, L"Черкасская обл."},
- {39, 338, 0, L"Черниговская обл."},
- {39, 339, 0, L"Черновицкая обл."},
- {40, 602, 0, L"Бад Халл"},
- {40, 604, 0, L"Брегенц"},
- {40, 603, 0, L"Вена"},
- {40, 608, 0, L"Грац"},
- {40, 606, 0, L"Зальцбург"},
- {40, 3099, 0, L"Зель-ам-Зее"},
- {40, 605, 0, L"Инсбрук"},
- {40, 3174, 0, L"Кирхберг"},
- {40, 609, 0, L"Клагенфурт"},
- {40, 607, 0, L"Линц"},
- {40, 610, 0, L"Обдах"},
- {40, 611, 0, L"Щтубайтал"},
- {40, 2541, 0, L"Другое"},
- {32, 612, 0, L"Тирана"},
- {32, 2540, 0, L"Другое"},
- {33, 613, 0, L"Андорра-ла-Велья"},
- {33, 2539, 0, L"Другое"},
- {340, 341, 0, L"Минск"},
- {340, 342, 0, L"Брестская обл."},
- {340, 343, 0, L"Витебская обл."},
- {340, 344, 0, L"Гомельская обл."},
- {340, 345, 0, L"Гродненская обл."},
- {340, 346, 0, L"Минская обл."},
- {340, 347, 0, L"Могилевская обл."},
- {38, 760, 0, L"Антверпен"},
- {38, 767, 0, L"Арлон"},
- {38, 762, 0, L"Брюгге"},
- {38, 761, 0, L"Брюссель"},
- {38, 763, 0, L"Гент"},
- {38, 769, 0, L"Лувен"},
- {38, 765, 0, L"Льеж"},
- {38, 764, 0, L"Монс"},
- {38, 3117, 0, L"Мортсель"},
- {38, 766, 0, L"Намюр"},
- {38, 768, 0, L"Хасселт"},
- {38, 2532, 0, L"Другое"},
- {41, 3098, 0, L"Банско"},
- {41, 792, 0, L"Благоевград"},
- {41, 770, 0, L"Бургас"},
- {41, 771, 0, L"Бяла"},
- {41, 773, 0, L"Варна"},
- {41, 776, 0, L"Велико-Тырново"},
- {41, 788, 0, L"Видин"},
- {41, 789, 0, L"Враца"},
- {41, 796, 0, L"Габрово"},
- {41, 777, 0, L"Димитровград"},
- {41, 781, 0, L"Каварна"},
- {41, 786, 0, L"Кырджали"},
- {41, 791, 0, L"Кюстендил"},
- {41, 793, 0, L"Лазарджик"},
- {41, 795, 0, L"Ловеч"},
- {41, 787, 0, L"Михайловград"},
- {41, 790, 0, L"Перник"},
- {41, 3133, 0, L"Пирдоп"},
- {41, 794, 0, L"Плевен"},
- {41, 782, 0, L"Пловдив"},
- {41, 780, 0, L"Разград"},
- {41, 779, 0, L"Русе"},
- {41, 774, 0, L"Силистра"},
- {41, 784, 0, L"Сливен"},
- {41, 772, 0, L"София"},
- {41, 775, 0, L"Толбухин"},
- {41, 3116, 0, L"Тырново"},
- {41, 785, 0, L"Хасково"},
- {41, 778, 0, L"Шумен"},
- {41, 783, 0, L"Ямбол"},
- {41, 2531, 0, L"Другое"},
- {42, 797, 0, L"Баня-Лука"},
- {42, 799, 0, L"Зеница"},
- {42, 798, 0, L"Сараево"},
- {42, 800, 0, L"Тузла"},
- {42, 2530, 0, L"Другое"},
- {45, 802, 0, L"Абердин"},
- {45, 3075, 0, L"Айслворт"},
- {45, 801, 0, L"Алнвик"},
- {45, 804, 0, L"Бидефорд"},
- {45, 803, 0, L"Бирмингем"},
- {45, 805, 0, L"Блоксвич"},
- {45, 3168, 0, L"Бостон"},
- {45, 806, 0, L"Брайтон"},
- {45, 807, 0, L"Бредфорд"},
- {45, 808, 0, L"Бристоль"},
- {45, 809, 0, L"Вилленхолл"},
- {45, 3131, 0, L"Воррингтон"},
- {45, 810, 0, L"Вудбридж"},
- {45, 3342, 0, L"Гилфорд"},
- {45, 811, 0, L"Глазго"},
- {45, 812, 0, L"Дадли"},
- {45, 813, 0, L"Дарем"},
- {45, 814, 0, L"Дуглас"},
- {45, 3089, 0, L"Кардиф"},
- {45, 815, 0, L"Кембридж"},
- {45, 816, 0, L"Кентербери"},
- {45, 817, 0, L"Ливерпуль"},
- {45, 818, 0, L"Лидс"},
- {45, 819, 0, L"Лондон"},
- {45, 820, 0, L"Манчестер"},
- {45, 2976, 0, L"Митчем"},
- {45, 2988, 0, L"Мэйденхед"},
- {45, 821, 0, L"Ноттингем"},
- {45, 3088, 0, L"Ньюпорт"},
- {45, 822, 0, L"Оксфорд"},
- {45, 823, 0, L"Плимут"},
- {45, 824, 0, L"Портсмут"},
- {45, 825, 0, L"Престон"},
- {45, 3343, 0, L"Райд"},
- {45, 2867, 0, L"Ридинг"},
- {45, 2986, 0, L"Сент-Албанс"},
- {45, 826, 0, L"Стаффорд"},
- {45, 3063, 0, L"Стокпорт"},
- {45, 827, 0, L"Уэймут"},
- {45, 3140, 0, L"Челтенхэм"},
- {45, 828, 0, L"Честер"},
- {45, 829, 0, L"Шеффилд"},
- {45, 830, 0, L"Эдинбург"},
- {45, 2529, 0, L"Другое"},
- {44, 831, 0, L"Будапешт"},
- {44, 832, 0, L"Геделле"},
- {44, 836, 0, L"Дебрецен"},
- {44, 835, 0, L"Мишкольц"},
- {44, 834, 0, L"Сегед"},
- {44, 833, 0, L"Шиофок"},
- {44, 2528, 0, L"Другое"},
- {46, 3007, 0, L"Аахен"},
- {46, 837, 0, L"Аугсбург"},
- {46, 838, 0, L"Баден-Баден"},
- {46, 3371, 0, L"Бамберг"},
- {46, 839, 0, L"Бергиш-Гладбах"},
- {46, 840, 0, L"Берлин"},
- {46, 841, 0, L"Билефельд"},
- {46, 3163, 0, L"Бовенден"},
- {46, 842, 0, L"Бонн"},
- {46, 843, 0, L"Браденбург"},
- {46, 3015, 0, L"Брауншвейг"},
- {46, 844, 0, L"Бремен"},
- {46, 2921, 0, L"Варштайн"},
- {46, 845, 0, L"Веймар"},
- {46, 846, 0, L"Вупперталь"},
- {46, 847, 0, L"Гамбург"},
- {46, 848, 0, L"Ганновер"},
- {46, 849, 0, L"Гарделеген"},
- {46, 3010, 0, L"Гейдельберг"},
- {46, 850, 0, L"Гота"},
- {46, 851, 0, L"Дармштадт"},
- {46, 3072, 0, L"Дессау"},
- {46, 852, 0, L"Детмольд"},
- {46, 853, 0, L"Дортмунд"},
- {46, 854, 0, L"Дрезден"},
- {46, 855, 0, L"Дюссельдорф"},
- {46, 3082, 0, L"Иффецхайм"},
- {46, 3309, 0, L"Кассел"},
- {46, 856, 0, L"Кельн"},
- {46, 857, 0, L"Киль"},
- {46, 3138, 0, L"Кобленц"},
- {46, 858, 0, L"Крефельд"},
- {46, 859, 0, L"Лейпциг"},
- {46, 2872, 0, L"Лимбург"},
- {46, 2965, 0, L"Линген"},
- {46, 3135, 0, L"Любек"},
- {46, 3156, 0, L"Мангейм"},
- {46, 3192, 0, L"Меерсбург"},
- {46, 860, 0, L"Мюнстер"},
- {46, 861, 0, L"Мюнхен"},
- {46, 2864, 0, L"Нойштадт"},
- {46, 862, 0, L"Нюрнберг"},
- {46, 3009, 0, L"Оффенбург"},
- {46, 2993, 0, L"Падерборн"},
- {46, 863, 0, L"Равенсбург"},
- {46, 864, 0, L"Регенсбург"},
- {46, 865, 0, L"Рейнен"},
- {46, 866, 0, L"Росток"},
- {46, 3191, 0, L"Саарбрюкен"},
- {46, 2974, 0, L"Санкт-Августин"},
- {46, 3127, 0, L"Тюринген"},
- {46, 867, 0, L"Фрайберг"},
- {46, 868, 0, L"Фрайбург"},
- {46, 869, 0, L"Франкфурт-на-Майне"},
- {46, 3373, 0, L"Хемнитц"},
- {46, 3313, 0, L"Хильден"},
- {46, 870, 0, L"Штутгарт"},
- {46, 3045, 0, L"Эрланген"},
- {46, 2906, 0, L"Эшборн"},
- {46, 2527, 0, L"Другое"},
- {48, 871, 0, L"Афины"},
- {48, 873, 0, L"Ираклион"},
- {48, 3147, 0, L"Корфу"},
- {48, 872, 0, L"Салоники"},
- {48, 3178, 0, L"Халкидики"},
- {48, 2526, 0, L"Другое"},
- {49, 3006, 0, L"Архус"},
- {49, 874, 0, L"Копенгаген"},
- {49, 875, 0, L"Оденсе"},
- {49, 3285, 0, L"Ольборг"},
- {49, 876, 0, L"Сванеке"},
- {49, 3126, 0, L"Скиве"},
- {49, 2525, 0, L"Другое"},
- {50, 3377, 0, L"Виклоу"},
- {50, 3067, 0, L"Голвей"},
- {50, 877, 0, L"Дублин"},
- {50, 3065, 0, L"Килларней"},
- {50, 3066, 0, L"Корк"},
- {50, 878, 0, L"Лимерик"},
- {50, 3069, 0, L"Нейс"},
- {50, 3068, 0, L"Типперэри"},
- {50, 2524, 0, L"Другое"},
- {51, 879, 0, L"Рейкьявик"},
- {51, 2523, 0, L"Другое"},
- {34, 880, 0, L"Аликанте"},
- {34, 3125, 0, L"Альмерия"},
- {34, 881, 0, L"Барселона"},
- {34, 890, 0, L"Бильбао"},
- {34, 3076, 0, L"Бланес"},
- {34, 882, 0, L"Валенсия"},
- {34, 3070, 0, L"Ибица"},
- {34, 888, 0, L"Кадис"},
- {34, 886, 0, L"Картахена"},
- {34, 891, 0, L"Ла-Корунья"},
- {34, 3310, 0, L"Лорет де Мар"},
- {34, 883, 0, L"Мадрид"},
- {34, 884, 0, L"Малага"},
- {34, 885, 0, L"Марбелья"},
- {34, 892, 0, L"Овьедо"},
- {34, 3179, 0, L"Пальма де Майорка"},
- {34, 3177, 0, L"Сан-Агустин"},
- {34, 3289, 0, L"Санта-Крус-де-Тенерифе"},
- {34, 889, 0, L"Сарагоса"},
- {34, 887, 0, L"Севилья"},
- {34, 893, 0, L"Хихон"},
- {34, 2522, 0, L"Другое"},
- {52, 3318, 0, L"Аоста"},
- {52, 3278, 0, L"Беллариа"},
- {52, 906, 0, L"Болонья"},
- {52, 894, 0, L"Брешиа"},
- {52, 895, 0, L"Венеция"},
- {52, 905, 0, L"Верона"},
- {52, 896, 0, L"Генуя"},
- {52, 897, 0, L"Лекко"},
- {52, 3369, 0, L"Ливорно"},
- {52, 3327, 0, L"Марсала"},
- {52, 898, 0, L"Милан"},
- {52, 899, 0, L"Модена"},
- {52, 907, 0, L"Неаполь"},
- {52, 908, 0, L"Перуджа"},
- {52, 900, 0, L"Пиза"},
- {52, 901, 0, L"Рим"},
- {52, 3368, 0, L"Сан-Ремо"},
- {52, 3384, 0, L"Сиракуза"},
- {52, 3252, 0, L"Терамо"},
- {52, 902, 0, L"Триест"},
- {52, 903, 0, L"Турин"},
- {52, 3130, 0, L"Фано"},
- {52, 904, 0, L"Флоренция"},
- {52, 2521, 0, L"Другое"},
- {53, 2939, 0, L"Айзкраукле"},
- {53, 3054, 0, L"Валка"},
- {53, 909, 0, L"Даугавпилс"},
- {53, 2934, 0, L"Екабпилс"},
- {53, 913, 0, L"Елгава"},
- {53, 2935, 0, L"Кокнесе"},
- {53, 912, 0, L"Лиепая"},
- {53, 2905, 0, L"Резекне"},
- {53, 911, 0, L"Рига"},
- {53, 2936, 0, L"Саласпилс"},
- {53, 2937, 0, L"Смилтене"},
- {53, 910, 0, L"Юрмала"},
- {53, 2520, 0, L"Другое"},
- {54, 914, 0, L"Вильнюс"},
- {54, 915, 0, L"Висагинас"},
- {54, 916, 0, L"Каунас"},
- {54, 918, 0, L"Клайпеда"},
- {54, 919, 0, L"Паланга"},
- {54, 3173, 0, L"Пеневежис"},
- {54, 917, 0, L"Шауляй"},
- {54, 2519, 0, L"Другое"},
- {55, 920, 0, L"Вадуц"},
- {55, 2518, 0, L"Другое"},
- {56, 3376, 0, L"Бетцдорф"},
- {56, 921, 0, L"Люксембург"},
- {56, 2517, 0, L"Другое"},
- {57, 3142, 0, L"Битола"},
- {57, 922, 0, L"Скопье"},
- {57, 2516, 0, L"Другое"},
- {58, 923, 0, L"Валлетта"},
- {58, 3154, 0, L"Мзида"},
- {58, 924, 0, L"Слима"},
- {58, 2515, 0, L"Другое"},
- {59, 925, 0, L"Бельцы"},
- {59, 926, 0, L"Бендеры"},
- {59, 3234, 0, L"Дубоссары"},
- {59, 3275, 0, L"Кахул"},
- {59, 927, 0, L"Кишинев"},
- {59, 3321, 0, L"Резина"},
- {59, 928, 0, L"Рыбница"},
- {59, 929, 0, L"Тирасполь"},
- {59, 3281, 0, L"Чадыр-Лунга"},
- {59, 2514, 0, L"Другое"},
- {36, 930, 0, L"Монте-Карло"},
- {36, 2513, 0, L"Другое"},
- {60, 931, 0, L"Амстердам"},
- {60, 933, 0, L"Бреда"},
- {60, 932, 0, L"Гаага"},
- {60, 934, 0, L"Гауда"},
- {60, 935, 0, L"Делфт"},
- {60, 2977, 0, L"Донген"},
- {60, 3030, 0, L"Зволле"},
- {60, 3091, 0, L"Ниймеген"},
- {60, 936, 0, L"Роттердам"},
- {60, 937, 0, L"Утрехт"},
- {60, 3044, 0, L"Эйндховен"},
- {60, 3380, 0, L"Эншеде"},
- {60, 2512, 0, L"Другое"},
- {61, 3190, 0, L"Кристиансанд"},
- {61, 2857, 0, L"Лиллехаммер"},
- {61, 938, 0, L"Осло"},
- {61, 3355, 0, L"Ставангер"},
- {61, 939, 0, L"Тронхейм"},
- {61, 2511, 0, L"Другое"},
- {62, 940, 0, L"Белосток"},
- {62, 941, 0, L"Варшава"},
- {62, 3164, 0, L"Вроцлав"},
- {62, 942, 0, L"Гданьск"},
- {62, 943, 0, L"Гливице"},
- {62, 3237, 0, L"Закопане"},
- {62, 3165, 0, L"Зелена Гура"},
- {62, 944, 0, L"Катовице"},
- {62, 945, 0, L"Краков"},
- {62, 3008, 0, L"Лодзь"},
- {62, 3150, 0, L"Ольштын"},
- {62, 946, 0, L"Познань"},
- {62, 947, 0, L"Радом"},
- {62, 948, 0, L"Сопот"},
- {62, 2958, 0, L"Тыхы"},
- {62, 2510, 0, L"Другое"},
- {35, 949, 0, L"Лиссабон"},
- {35, 950, 0, L"Порто"},
- {35, 2509, 0, L"Другое"},
- {63, 952, 0, L"Брашов"},
- {63, 951, 0, L"Бухарест"},
- {63, 954, 0, L"Констанца"},
- {63, 955, 0, L"Плоешти"},
- {63, 953, 0, L"Яссы"},
- {63, 2508, 0, L"Другое"},
- {64, 956, 0, L"Сан-Марино"},
- {64, 2507, 0, L"Другое"},
- {74, 957, 0, L"Белград"},
- {74, 960, 0, L"Ниш"},
- {74, 958, 0, L"Нови-Сад"},
- {74, 959, 0, L"Сараево"},
- {74, 2506, 0, L"Другое"},
- {65, 961, 0, L"Братислава"},
- {65, 962, 0, L"Кошице"},
- {65, 3101, 0, L"Липтов"},
- {65, 963, 0, L"Попрад"},
- {65, 964, 0, L"Прешов"},
- {65, 965, 0, L"Ружемберок"},
- {65, 966, 0, L"Тврдошин"},
- {65, 2505, 0, L"Другое"},
- {66, 968, 0, L"Копар"},
- {66, 967, 0, L"Любляна"},
- {66, 969, 0, L"Марибор"},
- {66, 2504, 0, L"Другое"},
- {67, 970, 0, L"Торсхавн"},
- {67, 2503, 0, L"Другое"},
- {68, 2888, 0, L"Вантаа"},
- {68, 971, 0, L"Васа"},
- {68, 979, 0, L"Котка"},
- {68, 972, 0, L"Коувола"},
- {68, 980, 0, L"Лахти"},
- {68, 973, 0, L"Оулу"},
- {68, 3375, 0, L"Риихимяки"},
- {68, 3159, 0, L"Руовеси"},
- {68, 974, 0, L"Тампере"},
- {68, 975, 0, L"Турку"},
- {68, 976, 0, L"Хельсинки"},
- {68, 977, 0, L"Эспо"},
- {68, 978, 0, L"Ювяскюля"},
- {68, 2502, 0, L"Другое"},
- {37, 996, 0, L"Авиньон"},
- {37, 983, 0, L"Бержерак"},
- {37, 997, 0, L"Блуа"},
- {37, 984, 0, L"Бордо"},
- {37, 998, 0, L"Дижон"},
- {37, 987, 0, L"Канн"},
- {37, 988, 0, L"Кастр"},
- {37, 993, 0, L"Клермон-Ферран"},
- {37, 3037, 0, L"Лилль"},
- {37, 989, 0, L"Лион"},
- {37, 985, 0, L"Марсель"},
- {37, 991, 0, L"Мец"},
- {37, 3161, 0, L"Мобеж"},
- {37, 990, 0, L"Нанси"},
- {37, 994, 0, L"Нант"},
- {37, 995, 0, L"Ницца"},
- {37, 999, 0, L"Орлеан"},
- {37, 981, 0, L"Париж"},
- {37, 3374, 0, L"Перпиньян"},
- {37, 992, 0, L"Руан"},
- {37, 982, 0, L"Страсбург"},
- {37, 986, 0, L"Тулуза"},
- {37, 3314, 0, L"Шамбери"},
- {37, 2501, 0, L"Другое"},
- {69, 1003, 0, L"Дубровник"},
- {69, 1000, 0, L"Загреб"},
- {69, 1001, 0, L"Задар"},
- {69, 1004, 0, L"Риека"},
- {69, 1002, 0, L"Сплит"},
- {69, 2500, 0, L"Другое"},
- {70, 1005, 0, L"Брно"},
- {70, 3291, 0, L"Гавличкув-Брод"},
- {70, 1007, 0, L"Градец-Кралове"},
- {70, 1008, 0, L"Карлови-Вари"},
- {70, 3019, 0, L"Кладрубы"},
- {70, 1010, 0, L"Лоуни"},
- {70, 1009, 0, L"Острава"},
- {70, 1015, 0, L"Пльзень"},
- {70, 3105, 0, L"Правчицка Брана"},
- {70, 1006, 0, L"Прага"},
- {70, 3246, 0, L"Тачов"},
- {70, 1011, 0, L"Тршебич"},
- {70, 1012, 0, L"Усти-над-Лабем"},
- {70, 1014, 0, L"Ческе-Будеевице"},
- {70, 1013, 0, L"Яблонец-над-Нисоу"},
- {70, 2499, 0, L"Другое"},
- {71, 1016, 0, L"Арау"},
- {71, 1019, 0, L"Баден"},
- {71, 1017, 0, L"Базель"},
- {71, 1018, 0, L"Берн"},
- {71, 1020, 0, L"Биль"},
- {71, 1021, 0, L"Винтертур"},
- {71, 1022, 0, L"Давос"},
- {71, 3189, 0, L"Делемонт"},
- {71, 1023, 0, L"Женева"},
- {71, 1024, 0, L"Золотурн"},
- {71, 1025, 0, L"Лозанна"},
- {71, 1026, 0, L"Локарно"},
- {71, 1027, 0, L"Лугано"},
- {71, 1028, 0, L"Люцерн"},
- {71, 1029, 0, L"Монтре"},
- {71, 1030, 0, L"Цюрих"},
- {71, 2498, 0, L"Другое"},
- {72, 2883, 0, L"Арбога"},
- {72, 1031, 0, L"Гетеборг"},
- {72, 1032, 0, L"Кальмар"},
- {72, 1037, 0, L"Лахольм"},
- {72, 1036, 0, L"Лулео"},
- {72, 1042, 0, L"Лунд"},
- {72, 1033, 0, L"Мальме"},
- {72, 1034, 0, L"Стокгольм"},
- {72, 1041, 0, L"Умео"},
- {72, 1039, 0, L"Фалун"},
- {72, 1043, 0, L"Хельсинборг"},
- {72, 1040, 0, L"Хернесанд"},
- {72, 1038, 0, L"Эстерсунд"},
- {72, 2497, 0, L"Другое"},
- {73, 3013, 0, L"Валга"},
- {73, 1044, 0, L"Кейла"},
- {73, 1045, 0, L"Кохтла-Ярве"},
- {73, 1046, 0, L"Маарду"},
- {73, 1047, 0, L"Мыйзакюла"},
- {73, 1048, 0, L"Нарва"},
- {73, 1049, 0, L"Пярну"},
- {73, 1050, 0, L"Раквере"},
- {73, 1051, 0, L"Силламяэ"},
- {73, 1052, 0, L"Таллин"},
- {73, 1053, 0, L"Тарту"},
- {73, 1054, 0, L"Хаапсалу"},
- {24, 233, 474, L"Алдан"},
- {24, 233, 2809, L"Верхоянск"},
- {24, 233, 2804, L"Вилюйск"},
- {24, 233, 475, L"Ленск"},
- {24, 233, 477, L"Мирный"},
- {24, 233, 476, L"Нерюнгри"},
- {24, 233, 2806, L"Олекминск"},
- {24, 233, 3115, L"Покровск"},
- {24, 233, 2808, L"Среднеколымск"},
- {24, 233, 2807, L"Томмот"},
- {24, 233, 2805, L"Удачный"},
- {24, 233, 478, L"Усть-Нера"},
- {24, 233, 479, L"Якутск"},
- {24, 233, 2263, L"Другое"},
- {24, 232, 2819, L"Арсеньев"},
- {24, 232, 464, L"Артем"},
- {24, 232, 465, L"Большой Камень"},
- {24, 232, 466, L"Владивосток"},
- {24, 232, 2817, L"Дальнегорск"},
- {24, 232, 2818, L"Дальнереченск"},
- {24, 232, 3359, L"Кавалерово"},
- {24, 232, 467, L"Камень-Рыболов"},
- {24, 232, 468, L"Лесозаводск"},
- {24, 232, 469, L"Лучегорск"},
- {24, 232, 470, L"Находка"},
- {24, 232, 471, L"Партизанск"},
- {24, 232, 472, L"Пластун"},
- {24, 232, 2816, L"Спасск-Дальний"},
- {24, 232, 473, L"Уссурийск"},
- {24, 232, 2258, L"Другое"},
- {24, 235, 487, L"Амурск"},
- {24, 235, 2821, L"Бикин"},
- {24, 235, 488, L"Ванино"},
- {24, 235, 2820, L"Вяземский"},
- {24, 235, 489, L"Комсомольск-на-Амуре"},
- {24, 235, 490, L"Николаевск-на-Амуре"},
- {24, 235, 491, L"Советская Гавань"},
- {24, 235, 3353, L"Солнечный"},
- {24, 235, 492, L"Хабаровск"},
- {24, 235, 2280, L"Другое"},
- {24, 227, 455, L"Белогорск"},
- {24, 227, 456, L"Благовещенск"},
- {24, 227, 2814, L"Завитинск"},
- {24, 227, 2813, L"Зея"},
- {24, 227, 2815, L"Райчихинск"},
- {24, 227, 2812, L"Свободный"},
- {24, 227, 2811, L"Сковородино"},
- {24, 227, 457, L"Тында"},
- {24, 227, 2217, L"Шимановск"},
- {24, 227, 2218, L"Другое"},
- {24, 229, 460, L"Елизово"},
- {24, 229, 2822, L"Ключи"},
- {24, 229, 459, L"Петропавловск-Камч."},
- {24, 229, 2234, L"Другое"},
- {24, 231, 462, L"Магадан"},
- {24, 231, 2823, L"Сусуман"},
- {24, 231, 463, L"Ягодное"},
- {24, 231, 2246, L"Другое"},
- {24, 234, 480, L"Александровск-Сахалинский"},
- {24, 234, 2829, L"Анива"},
- {24, 234, 2833, L"Горнозаводск"},
- {24, 234, 2825, L"Долинск"},
- {24, 234, 481, L"Корсаков"},
- {24, 234, 482, L"Красногорск"},
- {24, 234, 2826, L"Курильск"},
- {24, 234, 2832, L"Лесогорск"},
- {24, 234, 2836, L"Макаров"},
- {24, 234, 2830, L"Невельск"},
- {24, 234, 483, L"Оха"},
- {24, 234, 2828, L"Поронайск"},
- {24, 234, 2824, L"Северо-Курильск"},
- {24, 234, 2827, L"Томари"},
- {24, 234, 2831, L"Углегорск"},
- {24, 234, 484, L"Холмск"},
- {24, 234, 2834, L"Чехов"},
- {24, 234, 2835, L"Шахтерск"},
- {24, 234, 485, L"Южно-Курильск"},
- {24, 234, 486, L"Южно-Сахалинск"},
- {24, 234, 2264, L"Другое"},
- {24, 228, 458, L"Биробиджан"},
- {24, 228, 2810, L"Облучье"},
- {24, 228, 2226, L"Другое"},
- {24, 230, 461, L"Полана"},
- {24, 230, 2239, L"Другое"},
- {24, 236, 493, L"Анадырь"},
- {24, 236, 2287, L"Другое"},
- {24, 237, 2850, L"Агидель"},
- {24, 237, 2851, L"Агидель"},
- {24, 237, 2657, L"Баймак"},
- {24, 237, 2662, L"Белебей"},
- {24, 237, 494, L"Белорецк"},
- {24, 237, 2658, L"Бирск"},
- {24, 237, 2660, L"Благовещенск"},
- {24, 237, 2659, L"Давлеканово"},
- {24, 237, 2663, L"Дюртюли"},
- {24, 237, 495, L"Ишимбай"},
- {24, 237, 496, L"Кумертау"},
- {24, 237, 2655, L"Мелеуз"},
- {24, 237, 497, L"Нефтекамск"},
- {24, 237, 2654, L"Октябрьский"},
- {24, 237, 499, L"Салават"},
- {24, 237, 2656, L"Сибай"},
- {24, 237, 498, L"Стерлитамак"},
- {24, 237, 500, L"Туймазы"},
- {24, 237, 2661, L"Туймазы"},
- {24, 237, 501, L"Уфа"},
- {24, 237, 502, L"Учалы"},
- {24, 237, 2664, L"Янаул"},
- {24, 237, 2220, L"Другое"},
- {24, 240, 509, L"Волжск"},
- {24, 240, 510, L"Звенигово"},
- {24, 240, 511, L"Йошкар-Ола"},
- {24, 240, 512, L"Козьмодемьянск"},
- {24, 240, 2247, L"Другое"},
- {24, 241, 513, L"Зубова Поляна"},
- {24, 241, 2147, L"Инсар"},
- {24, 241, 2150, L"Ковылкино"},
- {24, 241, 2148, L"Краснослободск"},
- {24, 241, 2910, L"Лямбирь"},
- {24, 241, 515, L"Рузаевка"},
- {24, 241, 514, L"Саранск"},
- {24, 241, 2149, L"Темников"},
- {24, 241, 2923, L"Чамзинка"},
- {24, 241, 2248, L"Другое"},
- {24, 248, 2569, L"Агрыз"},
- {24, 248, 2575, L"Азнакаево"},
- {24, 248, 569, L"Альметьевск"},
- {24, 248, 570, L"Апастово"},
- {24, 248, 2571, L"Болгар"},
- {24, 248, 571, L"Бугульма"},
- {24, 248, 2570, L"Буинск"},
- {24, 248, 572, L"Джалиль"},
- {24, 248, 573, L"Елабуга"},
- {24, 248, 2576, L"Заинск"},
- {24, 248, 574, L"Зеленодольск"},
- {24, 248, 575, L"Казань"},
- {24, 248, 2577, L"Лениногорск"},
- {24, 248, 2572, L"Мамадыш"},
- {24, 248, 576, L"Менделеевск"},
- {24, 248, 2573, L"Мензелинск"},
- {24, 248, 577, L"Набережные Челны"},
- {24, 248, 578, L"Нижнекамск"},
- {24, 248, 579, L"Нурлат"},
- {24, 248, 2574, L"Тетюши"},
- {24, 248, 580, L"Чистополь"},
- {24, 248, 2271, L"Другое"},
- {24, 249, 3311, L"Вавож"},
- {24, 249, 581, L"Воткинск"},
- {24, 249, 582, L"Глазов"},
- {24, 249, 583, L"Игра"},
- {24, 249, 584, L"Ижевск"},
- {24, 249, 2665, L"Камбарка"},
- {24, 249, 585, L"Можга"},
- {24, 249, 586, L"Сарапул"},
- {24, 249, 587, L"Ува"},
- {24, 249, 2277, L"Другое"},
- {24, 251, 2158, L"Алатырь"},
- {24, 251, 2156, L"Канаш"},
- {24, 251, 2151, L"Козловка"},
- {24, 251, 2152, L"Марьинский Посад"},
- {24, 251, 2155, L"Новочебоксарск"},
- {24, 251, 2153, L"Цивильск"},
- {24, 251, 592, L"Чебоксары"},
- {24, 251, 2157, L"Шумерля"},
- {24, 251, 2154, L"Ядрин"},
- {24, 251, 2286, L"Другое"},
- {24, 238, 2168, L"Белая Холуница"},
- {24, 238, 503, L"Вятские Поляны"},
- {24, 238, 2164, L"Зуевка"},
- {24, 238, 504, L"Киров"},
- {24, 238, 505, L"Кирово-Чепецк"},
- {24, 238, 2160, L"Кирс"},
- {24, 238, 506, L"Котельнич"},
- {24, 238, 2167, L"Луза"},
- {24, 238, 2159, L"Малмыж"},
- {24, 238, 2169, L"Мураши"},
- {24, 238, 2163, L"Нолинск"},
- {24, 238, 2170, L"Омутнинск"},
- {24, 238, 2166, L"Слободской"},
- {24, 238, 2165, L"Советск"},
- {24, 238, 2162, L"Сосновка"},
- {24, 238, 2171, L"Уржум"},
- {24, 238, 2161, L"Халтурин"},
- {24, 238, 507, L"Яранск"},
- {24, 238, 2237, L"Другое"},
- {24, 242, 516, L"Арзамас"},
- {24, 242, 517, L"Балахна"},
- {24, 242, 2139, L"Богородск"},
- {24, 242, 518, L"Бор"},
- {24, 242, 519, L"Вахтан"},
- {24, 242, 520, L"Ветлуга"},
- {24, 242, 2140, L"Володарск"},
- {24, 242, 2138, L"Ворсма"},
- {24, 242, 521, L"Выкса"},
- {24, 242, 2137, L"Горбатов"},
- {24, 242, 522, L"Городец"},
- {24, 242, 523, L"Дзержинск"},
- {24, 242, 524, L"Заволжье"},
- {24, 242, 2891, L"Ильиногорск"},
- {24, 242, 525, L"Кстово"},
- {24, 242, 2145, L"Кулебаки"},
- {24, 242, 2143, L"Лукоянов"},
- {24, 242, 2144, L"Лысково"},
- {24, 242, 2146, L"Навашино"},
- {24, 242, 526, L"Нижний Новгород"},
- {24, 242, 527, L"Павлово"},
- {24, 242, 2135, L"Первомайск"},
- {24, 242, 528, L"Саров"},
- {24, 242, 529, L"Семенов"},
- {24, 242, 530, L"Сергач"},
- {24, 242, 2141, L"Урень"},
- {24, 242, 2136, L"Чкаловск"},
- {24, 242, 2897, L"Шатки"},
- {24, 242, 2142, L"Шахунья"},
- {24, 242, 2251, L"Другое"},
- {24, 243, 2678, L"Абдулино"},
- {24, 243, 2673, L"Бугуруслан"},
- {24, 243, 531, L"Бузулук"},
- {24, 243, 532, L"Гай"},
- {24, 243, 2674, L"Кувандык"},
- {24, 243, 2675, L"Медногорск"},
- {24, 243, 533, L"Новотроицк"},
- {24, 243, 535, L"Оренбург"},
- {24, 243, 536, L"Орск"},
- {24, 243, 3360, L"Саракташ"},
- {24, 243, 2677, L"Соль-Илецк"},
- {24, 243, 2676, L"Сорочинск"},
- {24, 243, 537, L"Тоцкое"},
- {24, 243, 538, L"Ясный"},
- {24, 243, 2254, L"Другое"},
- {24, 244, 539, L"Беднодемьяновск"},
- {24, 244, 2597, L"Белинский"},
- {24, 244, 2595, L"Городище"},
- {24, 244, 2593, L"Каменка"},
- {24, 244, 540, L"Кузнецк"},
- {24, 244, 2598, L"Нижний Ломов"},
- {24, 244, 2592, L"Никольск"},
- {24, 244, 541, L"Пенза"},
- {24, 244, 3304, L"Русский Камешкир"},
- {24, 244, 2596, L"Сердобск"},
- {24, 244, 2594, L"Сурск"},
- {24, 244, 2256, L"Другое"},
- {24, 245, 2690, L"Александровск"},
- {24, 245, 542, L"Березники"},
- {24, 245, 2679, L"Верещагино"},
- {24, 245, 2680, L"Горнозаводск"},
- {24, 245, 2687, L"Гремячинск"},
- {24, 245, 2686, L"Губаха"},
- {24, 245, 543, L"Добрянка"},
- {24, 245, 544, L"Кизел"},
- {24, 245, 2681, L"Красновишерск"},
- {24, 245, 545, L"Краснокамск"},
- {24, 245, 546, L"Кунгур"},
- {24, 245, 547, L"Лысьва"},
- {24, 245, 548, L"Нытва"},
- {24, 245, 2683, L"Оса"},
- {24, 245, 2684, L"Оханск"},
- {24, 245, 2682, L"Очер"},
- {24, 245, 549, L"Пермь"},
- {24, 245, 550, L"Соликамск"},
- {24, 245, 2685, L"Усолье"},
- {24, 245, 551, L"Чайковский"},
- {24, 245, 2689, L"Чердынь"},
- {24, 245, 2688, L"Чермоз"},
- {24, 245, 552, L"Чернушка"},
- {24, 245, 553, L"Чусовой"},
- {24, 245, 2257, L"Другое"},
- {24, 246, 554, L"Волжский"},
- {24, 246, 555, L"Жигулевск"},
- {24, 246, 2599, L"Кинель"},
- {24, 246, 3293, L"Красный Яр"},
- {24, 246, 2602, L"Нефтегорск"},
- {24, 246, 556, L"Новокуйбышевск"},
- {24, 246, 2600, L"Октябрьск"},
- {24, 246, 557, L"Отрадный"},
- {24, 246, 558, L"Похвистнево"},
- {24, 246, 559, L"Самара"},
- {24, 246, 560, L"Сызрань"},
- {24, 246, 561, L"Тольятти"},
- {24, 246, 2601, L"Чапаевск"},
- {24, 246, 562, L"Шигоны"},
- {24, 246, 2261, L"Другое"},
- {24, 247, 2613, L"Аркадак"},
- {24, 247, 2606, L"Аткарск"},
- {24, 247, 563, L"Балаково"},
- {24, 247, 564, L"Балашов"},
- {24, 247, 565, L"Вольск"},
- {24, 247, 2608, L"Ершов"},
- {24, 247, 2607, L"Калининск"},
- {24, 247, 2609, L"Красноармейск"},
- {24, 247, 2610, L"Красный Кут"},
- {24, 247, 2605, L"Маркс"},
- {24, 247, 566, L"Новоузенск"},
- {24, 247, 2603, L"Петровск"},
- {24, 247, 2604, L"Пугачев"},
- {24, 247, 2612, L"Ртищево"},
- {24, 247, 567, L"Саратов"},
- {24, 247, 2611, L"Хвалынск"},
- {24, 247, 568, L"Энгельс"},
- {24, 247, 3267, L"Энгельс-12"},
- {24, 247, 2262, L"Другое"},
- {24, 250, 2614, L"Барыш"},
- {24, 250, 588, L"Димитровград"},
- {24, 250, 2615, L"Инза"},
- {24, 250, 589, L"Новоспасское"},
- {24, 250, 2616, L"Новоульяновск"},
- {24, 250, 590, L"Сенгилей"},
- {24, 250, 591, L"Ульяновск"},
- {24, 250, 2278, L"Другое"},
- {24, 239, 508, L"Кудымкар"},
- {24, 239, 2238, L"Другое"},
- {24, 255, 1355, L"Беломорск"},
- {24, 255, 1356, L"Кемь"},
- {24, 255, 1357, L"Кондопога"},
- {24, 255, 1358, L"Костомукша"},
- {24, 255, 1359, L"Коткозеро"},
- {24, 255, 1360, L"Лахденпохья"},
- {24, 255, 1362, L"Лоухи"},
- {24, 255, 1361, L"Медвежьегорск"},
- {24, 255, 3286, L"Муезерский"},
- {24, 255, 1937, L"Олонец"},
- {24, 255, 1363, L"Петрозаводск"},
- {24, 255, 1938, L"Питкяранта"},
- {24, 255, 3287, L"Пряжа"},
- {24, 255, 1936, L"Пудож"},
- {24, 255, 1364, L"Сегежа"},
- {24, 255, 1365, L"Сортавала"},
- {24, 255, 1939, L"Суоярви"},
- {24, 255, 2201, L"Другое"},
- {24, 256, 1366, L"Воркута"},
- {24, 256, 1367, L"Вуктыл"},
- {24, 256, 2202, L"Емва"},
- {24, 256, 1368, L"Инта"},
- {24, 256, 1940, L"Микунь"},
- {24, 256, 1369, L"Печора"},
- {24, 256, 1941, L"Сосногорск"},
- {24, 256, 1370, L"Сыктывкар"},
- {24, 256, 1371, L"Усинск"},
- {24, 256, 1372, L"Ухта"},
- {24, 256, 2203, L"Другое"},
- {24, 252, 593, L"Архангельск"},
- {24, 252, 594, L"Вельск"},
- {24, 252, 1945, L"Каргополь"},
- {24, 252, 595, L"Коряжма"},
- {24, 252, 596, L"Котлас"},
- {24, 252, 1944, L"Мезень"},
- {24, 252, 597, L"Мирный"},
- {24, 252, 598, L"Новодвинск"},
- {24, 252, 1946, L"Няндома"},
- {24, 252, 599, L"Онега"},
- {24, 252, 600, L"Пинега"},
- {24, 252, 601, L"Северодвинск"},
- {24, 252, 1942, L"Сольвычегодск"},
- {24, 252, 3239, L"Холмогоры"},
- {24, 252, 1943, L"Шенкурск"},
- {24, 252, 2204, L"Другое"},
- {24, 253, 1950, L"Бабаево"},
- {24, 253, 1949, L"Белозерск"},
- {24, 253, 1338, L"Великий Устюг"},
- {24, 253, 1339, L"Вологда"},
- {24, 253, 1951, L"Вытегра"},
- {24, 253, 1340, L"Грязовец"},
- {24, 253, 1952, L"Кадников"},
- {24, 253, 2871, L"Кадуй"},
- {24, 253, 1341, L"Кириллов"},
- {24, 253, 1955, L"Красавино"},
- {24, 253, 1342, L"Михайловка"},
- {24, 253, 1947, L"Никольск"},
- {24, 253, 1343, L"Сокол"},
- {24, 253, 1953, L"Тотьма"},
- {24, 253, 1954, L"Устюжна"},
- {24, 253, 1948, L"Харовск"},
- {24, 253, 1344, L"Череповец"},
- {24, 253, 2205, L"Другое"},
- {24, 254, 2838, L"Багратионовск"},
- {24, 254, 1345, L"Балтийск"},
- {24, 254, 2846, L"Гвардейск"},
- {24, 254, 2843, L"Гурьевск"},
- {24, 254, 1346, L"Гусев"},
- {24, 254, 1347, L"Зеленоградск"},
- {24, 254, 1348, L"Калининград"},
- {24, 254, 2842, L"Краснознаменск"},
- {24, 254, 2845, L"Ладушкин"},
- {24, 254, 2848, L"Мамоново"},
- {24, 254, 2837, L"Неман"},
- {24, 254, 2844, L"Нестеров"},
- {24, 254, 1349, L"Озерск"},
- {24, 254, 2841, L"Полесск"},
- {24, 254, 2839, L"Правдинск"},
- {24, 254, 1350, L"Приморск"},
- {24, 254, 1351, L"Светлогорск"},
- {24, 254, 1352, L"Светлый"},
- {24, 254, 2840, L"Славск"},
- {24, 254, 1353, L"Советск"},
- {24, 254, 1354, L"Черняховск"},
- {24, 254, 2231, L"Другое"},
- {24, 257, 1985, L"Бокситогорск"},
- {24, 257, 1374, L"Волхов"},
- {24, 257, 1373, L"Всеволожск"},
- {24, 257, 1375, L"Выборг"},
- {24, 257, 1995, L"Высоцк"},
- {24, 257, 1376, L"Гатчина"},
- {24, 257, 1378, L"Ивангород"},
- {24, 257, 1993, L"Каменногорск"},
- {24, 257, 1379, L"Кингисепп"},
- {24, 257, 1380, L"Кириши"},
- {24, 257, 1381, L"Кировск"},
- {24, 257, 1384, L"Кузьмоловский"},
- {24, 257, 1984, L"Лодейное Поле"},
- {24, 257, 1990, L"Луга"},
- {24, 257, 1994, L"Любань"},
- {24, 257, 1386, L"Никольское"},
- {24, 257, 1987, L"Новая Ладога"},
- {24, 257, 1996, L"Отрадное"},
- {24, 257, 1986, L"Пикалево"},
- {24, 257, 1983, L"Подпорожье"},
- {24, 257, 1992, L"Приморск"},
- {24, 257, 1988, L"Приозерск"},
- {24, 257, 3071, L"Пушкин"},
- {24, 257, 1989, L"Светогорск"},
- {24, 257, 1389, L"Сертолово"},
- {24, 257, 1991, L"Сланцы"},
- {24, 257, 1391, L"Сосновый Бор"},
- {24, 257, 1392, L"Тихвин"},
- {24, 257, 1393, L"Тосно"},
- {24, 257, 1394, L"Шлиссельбург"},
- {24, 257, 2207, L"Другое"},
- {24, 258, 1395, L"Апатиты"},
- {24, 258, 1959, L"Заполярный"},
- {24, 258, 1396, L"Зареченск"},
- {24, 258, 1397, L"Кандалакша"},
- {24, 258, 1398, L"Кировск"},
- {24, 258, 1399, L"Ковдор"},
- {24, 258, 1958, L"Кола"},
- {24, 258, 1400, L"Мончегорск"},
- {24, 258, 1401, L"Мурманск"},
- {24, 258, 1402, L"Мурмаши"},
- {24, 258, 1403, L"Оленегорск"},
- {24, 258, 1404, L"Полярные Зори"},
- {24, 258, 1956, L"Полярный"},
- {24, 258, 1957, L"Североморск"},
- {24, 258, 3288, L"Снежногорск"},
- {24, 258, 2206, L"Другое"},
- {24, 260, 1406, L"Батецкий"},
- {24, 260, 2001, L"Боровичи"},
- {24, 260, 2003, L"Валдай"},
- {24, 260, 1407, L"Великий Новгород"},
- {24, 260, 1408, L"Крестцы"},
- {24, 260, 2002, L"Малая Вишера"},
- {24, 260, 1409, L"Окуловка"},
- {24, 260, 2000, L"Пестово"},
- {24, 260, 1997, L"Сольцы"},
- {24, 260, 1410, L"Старая Русса"},
- {24, 260, 1998, L"Холм"},
- {24, 260, 1999, L"Чудово"},
- {24, 260, 2208, L"Другое"},
- {24, 261, 1412, L"Великие Луки"},
- {24, 261, 2004, L"Гдов"},
- {24, 261, 2009, L"Дно"},
- {24, 261, 2005, L"Невель"},
- {24, 261, 1413, L"Новоржев"},
- {24, 261, 2006, L"Опочка"},
- {24, 261, 2008, L"Остров"},
- {24, 261, 1414, L"Печоры"},
- {24, 261, 1415, L"Порхов"},
- {24, 261, 1411, L"Псков"},
- {24, 261, 1416, L"Пустошка"},
- {24, 261, 2007, L"Пыталово"},
- {24, 261, 1417, L"Себеж"},
- {24, 261, 2209, L"Другое"},
- {24, 259, 1405, L"Нарьян-Мар"},
- {24, 259, 2250, L"Другое"},
- {24, 265, 2764, L"Бабушкин"},
- {24, 265, 2760, L"Гусиноозерск"},
- {24, 265, 2762, L"Закаменск"},
- {24, 265, 2763, L"Кяхта"},
- {24, 265, 2761, L"Северобайкальск"},
- {24, 265, 1446, L"Улан-Удэ"},
- {24, 265, 2222, L"Другое"},
- {24, 263, 1439, L"Горно-Алтайск"},
- {24, 263, 2215, L"Другое"},
- {24, 273, 2766, L"Ак-Довурак"},
- {24, 273, 1494, L"Кызыл"},
- {24, 273, 2768, L"Новый Шагонар"},
- {24, 273, 2767, L"Туран"},
- {24, 273, 2765, L"Чадан"},
- {24, 273, 2275, L"Другое"},
- {24, 275, 2769, L"Абаза"},
- {24, 275, 1496, L"Абакан"},
- {24, 275, 1497, L"Саяногорск"},
- {24, 275, 2770, L"Сорск"},
- {24, 275, 2771, L"Черногорск"},
- {24, 275, 2281, L"Другое"},
- {24, 264, 1440, L"Алейск"},
- {24, 264, 1441, L"Барнаул"},
- {24, 264, 1442, L"Белокуриха"},
- {24, 264, 1443, L"Бийск"},
- {24, 264, 2728, L"Горняк"},
- {24, 264, 2731, L"Заринск"},
- {24, 264, 2729, L"Змеиногорск"},
- {24, 264, 2732, L"Камень-на-Оби"},
- {24, 264, 3292, L"Кулунда"},
- {24, 264, 2730, L"Новоалтайск"},
- {24, 264, 1444, L"Рубцовск"},
- {24, 264, 1445, L"Славгород"},
- {24, 264, 3231, L"Яровое"},
- {24, 264, 2216, L"Другое"},
- {24, 268, 2781, L"Артемовск"},
- {24, 268, 1469, L"Ачинск"},
- {24, 268, 2784, L"Боготол"},
- {24, 268, 2773, L"Бородино"},
- {24, 268, 2774, L"Дивногорск"},
- {24, 268, 3122, L"Емельяновск"},
- {24, 268, 2772, L"Енисейск"},
- {24, 268, 3294, L"Железногорск"},
- {24, 268, 2777, L"Заозерный"},
- {24, 268, 1470, L"Игарка"},
- {24, 268, 2778, L"Иланский"},
- {24, 268, 2782, L"Канск"},
- {24, 268, 2783, L"Кодинский"},
- {24, 268, 1471, L"Красноярск"},
- {24, 268, 1472, L"Лесосибирск"},
- {24, 268, 1473, L"Минусинск"},
- {24, 268, 2775, L"Назарово"},
- {24, 268, 2776, L"Сосновоборск"},
- {24, 268, 2780, L"Ужур"},
- {24, 268, 2779, L"Уяр"},
- {24, 268, 2785, L"Шарыпово"},
- {24, 268, 1474, L"Шушенское"},
- {24, 268, 2242, L"Другое"},
- {24, 266, 2792, L"Алзамай"},
- {24, 266, 1447, L"Ангарск"},
- {24, 266, 1448, L"Байкальск"},
- {24, 266, 2791, L"Бирюсинск"},
- {24, 266, 1450, L"Бодайбо"},
- {24, 266, 1451, L"Братск"},
- {24, 266, 2793, L"Вихоревка"},
- {24, 266, 2789, L"Железногорск-Илимский"},
- {24, 266, 2786, L"Зима"},
- {24, 266, 1452, L"Иркутск"},
- {24, 266, 2794, L"Киренск"},
- {24, 266, 2787, L"Нижнеудинск"},
- {24, 266, 1449, L"Саянск"},
- {24, 266, 2790, L"Свирск"},
- {24, 266, 1453, L"Слюдянка"},
- {24, 266, 2788, L"Тайшет"},
- {24, 266, 1454, L"Тулун"},
- {24, 266, 1455, L"Усолье-Сибирское"},
- {24, 266, 2908, L"Усольск"},
- {24, 266, 1456, L"Усть-Илимск"},
- {24, 266, 1457, L"Усть-Кут"},
- {24, 266, 1458, L"Хужир"},
- {24, 266, 1459, L"Черемхово"},
- {24, 266, 2795, L"Шелехов"},
- {24, 266, 2229, L"Другое"},
- {24, 267, 2737, L"Анжеро-Суджинск"},
- {24, 267, 2740, L"Белово"},
- {24, 267, 2746, L"Березовский"},
- {24, 267, 2739, L"Гурьевск"},
- {24, 267, 2742, L"Калтан"},
- {24, 267, 1460, L"Кемерово"},
- {24, 267, 1461, L"Киселевск"},
- {24, 267, 2738, L"Ленинск-Кузнецкий"},
- {24, 267, 2745, L"Мариинск"},
- {24, 267, 1462, L"Междуреченск"},
- {24, 267, 1463, L"Мыски"},
- {24, 267, 1464, L"Новокузнецк"},
- {24, 267, 2744, L"Осинники"},
- {24, 267, 3358, L"Полысаево"},
- {24, 267, 1465, L"Прокопьевск"},
- {24, 267, 1466, L"Салаир"},
- {24, 267, 2743, L"Тайга"},
- {24, 267, 2741, L"Таштагол"},
- {24, 267, 1467, L"Топки"},
- {24, 267, 1468, L"Юрга"},
- {24, 267, 2236, L"Другое"},
- {24, 269, 1475, L"Баган"},
- {24, 269, 1476, L"Барабинск"},
- {24, 269, 1477, L"Бердск"},
- {24, 269, 2750, L"Болотное"},
- {24, 269, 1478, L"Искитим"},
- {24, 269, 2752, L"Карасук"},
- {24, 269, 2751, L"Каргат"},
- {24, 269, 3107, L"Краснообск"},
- {24, 269, 2753, L"Куйбышев"},
- {24, 269, 2755, L"Купино"},
- {24, 269, 1479, L"Новосибирск"},
- {24, 269, 2759, L"Обь"},
- {24, 269, 2756, L"Татарск"},
- {24, 269, 2758, L"Тогучин"},
- {24, 269, 2757, L"Черепаново"},
- {24, 269, 2754, L"Чулым"},
- {24, 269, 2252, L"Другое"},
- {24, 270, 2733, L"Исилькуль"},
- {24, 270, 1480, L"Калачинск"},
- {24, 270, 1481, L"Марьяновка"},
- {24, 270, 2735, L"Называевск"},
- {24, 270, 1482, L"Омск"},
- {24, 270, 2734, L"Тара"},
- {24, 270, 2736, L"Тюкалинск"},
- {24, 270, 2253, L"Другое"},
- {24, 272, 1488, L"Асино"},
- {24, 272, 1489, L"Белый Яр"},
- {24, 272, 3295, L"Каргасок"},
- {24, 272, 1491, L"Колпашево"},
- {24, 272, 1492, L"Северск"},
- {24, 272, 1493, L"Стрежевой"},
- {24, 272, 1490, L"Томск"},
- {24, 272, 2273, L"Другое"},
- {24, 276, 2803, L"Балей"},
- {24, 276, 2799, L"Борзя"},
- {24, 276, 1499, L"Краснокаменск"},
- {24, 276, 2801, L"Могоча"},
- {24, 276, 2800, L"Нерчинск"},
- {24, 276, 2802, L"Петровск-Забайкальский"},
- {24, 276, 2798, L"Сретенск"},
- {24, 276, 2796, L"Хилок"},
- {24, 276, 1498, L"Чита"},
- {24, 276, 2797, L"Шилка"},
- {24, 276, 2285, L"Другое"},
- {24, 262, 1438, L"Агинское"},
- {24, 262, 2213, L"Другое"},
- {24, 271, 3233, L"Диксон"},
- {24, 271, 1485, L"Дудинка"},
- {24, 271, 1487, L"Кайеркан"},
- {24, 271, 1483, L"Норильск"},
- {24, 271, 1484, L"Талнах"},
- {24, 271, 1486, L"Хатанга"},
- {24, 271, 2269, L"Другое"},
- {24, 274, 1495, L"Усть-Ордынский"},
- {24, 274, 2279, L"Другое"},
- {24, 277, 1500, L"Тура"},
- {24, 277, 2288, L"Другое"},
- {24, 278, 2668, L"Далматово"},
- {24, 278, 2667, L"Катайск"},
- {24, 278, 1524, L"Курган"},
- {24, 278, 2669, L"Куртамыш"},
- {24, 278, 2666, L"Макушино"},
- {24, 278, 2671, L"Петухово"},
- {24, 278, 1525, L"Шадринск"},
- {24, 278, 2670, L"Шумиха"},
- {24, 278, 2672, L"Щучье"},
- {24, 278, 2243, L"Другое"},
- {24, 279, 1526, L"Алапаевск"},
- {24, 279, 1527, L"Арамиль"},
- {24, 279, 2691, L"Артемовский"},
- {24, 279, 1528, L"Асбест"},
- {24, 279, 2924, L"Белоярский"},
- {24, 279, 2707, L"Березовский"},
- {24, 279, 1529, L"Богданович"},
- {24, 279, 2698, L"Верхний Тагил"},
- {24, 279, 1530, L"Верхняя Пышма"},
- {24, 279, 1531, L"Верхняя Салда"},
- {24, 279, 1532, L"Верхняя Синячиха"},
- {24, 279, 2696, L"Верхняя Тура"},
- {24, 279, 2692, L"Верхотурье"},
- {24, 279, 2706, L"Волчанск"},
- {24, 279, 2709, L"Дегтярск"},
- {24, 279, 1533, L"Екатеринбург"},
- {24, 279, 1534, L"Заречный"},
- {24, 279, 1535, L"Ивдель"},
- {24, 279, 1536, L"Ирбит"},
- {24, 279, 1537, L"Каменск-Уральский"},
- {24, 279, 1538, L"Камышлов"},
- {24, 279, 2708, L"Карпинск"},
- {24, 279, 1539, L"Качканар"},
- {24, 279, 2712, L"Кировград"},
- {24, 279, 1540, L"Краснотурьинск"},
- {24, 279, 2694, L"Красноуральск"},
- {24, 279, 2693, L"Красноуфимск"},
- {24, 279, 1541, L"Кушва"},
- {24, 279, 2711, L"Михайловск"},
- {24, 279, 2713, L"Михайловск"},
- {24, 279, 1542, L"Невьянск"},
- {24, 279, 2702, L"Нижние Серги"},
- {24, 279, 1543, L"Нижний Тагил"},
- {24, 279, 2695, L"Нижняя Салда"},
- {24, 279, 2697, L"Нижняя Тура"},
- {24, 279, 2699, L"Новая Ляля"},
- {24, 279, 2909, L"Новоуральск"},
- {24, 279, 1544, L"Первоуральск"},
- {24, 279, 1545, L"Полевской"},
- {24, 279, 1546, L"Ревда"},
- {24, 279, 1547, L"Реж"},
- {24, 279, 3296, L"Рефтинский"},
- {24, 279, 2700, L"Североуральск"},
- {24, 279, 1548, L"Серов"},
- {24, 279, 2710, L"Среднеуральск"},
- {24, 279, 2701, L"Сухой Лог"},
- {24, 279, 2703, L"Сысерть"},
- {24, 279, 1549, L"Тавда"},
- {24, 279, 2704, L"Талица"},
- {24, 279, 2705, L"Туринск"},
- {24, 279, 2265, L"Другое"},
- {24, 280, 1550, L"Заводоуковск"},
- {24, 280, 1551, L"Ишим"},
- {24, 280, 3326, L"Сургут"},
- {24, 280, 1552, L"Тобольск"},
- {24, 280, 1553, L"Тюмень"},
- {24, 280, 2748, L"Ялуторовск"},
- {24, 280, 2276, L"Другое"},
- {24, 282, 1564, L"Аша"},
- {24, 282, 2723, L"Бакал"},
- {24, 282, 2724, L"Верхнеуральск"},
- {24, 282, 2716, L"Верхний Уфалей"},
- {24, 282, 3297, L"Всеволожск"},
- {24, 282, 2725, L"Еманжелинск"},
- {24, 282, 1565, L"Златоуст"},
- {24, 282, 2722, L"Карабаш"},
- {24, 282, 1566, L"Карталы"},
- {24, 282, 2718, L"Касли"},
- {24, 282, 2720, L"Катав-Ивановск"},
- {24, 282, 1567, L"Копейск"},
- {24, 282, 2721, L"Коркино"},
- {24, 282, 2715, L"Куса"},
- {24, 282, 1568, L"Кыштым"},
- {24, 282, 1569, L"Магнитогорск"},
- {24, 282, 1570, L"Миасс"},
- {24, 282, 2726, L"Миньяр"},
- {24, 282, 2717, L"Нязепетровск"},
- {24, 282, 3100, L"Озерск"},
- {24, 282, 1571, L"Пласт"},
- {24, 282, 2719, L"Сатка"},
- {24, 282, 2727, L"Сим"},
- {24, 282, 1572, L"Снежинск"},
- {24, 282, 3332, L"Трехгорный"},
- {24, 282, 1573, L"Троицк"},
- {24, 282, 1574, L"Усть-Катав"},
- {24, 282, 1575, L"Чебаркуль"},
- {24, 282, 1576, L"Челябинск"},
- {24, 282, 1577, L"Южноуральск"},
- {24, 282, 2714, L"Юрюзань"},
- {24, 282, 2283, L"Другое"},
- {24, 281, 2749, L"Белоярский"},
- {24, 281, 1554, L"Игрим"},
- {24, 281, 1555, L"Когалым"},
- {24, 281, 1556, L"Лангепас"},
- {24, 281, 1561, L"Мегион"},
- {24, 281, 1562, L"Нефтеюганск"},
- {24, 281, 1559, L"Нижневартовск"},
- {24, 281, 2852, L"Нягань"},
- {24, 281, 2853, L"Нягань"},
- {24, 281, 2854, L"Пыть-Ях"},
- {24, 281, 1560, L"Радужный"},
- {24, 281, 1563, L"Советский"},
- {24, 281, 2747, L"Сургут"},
- {24, 281, 1557, L"Урай"},
- {24, 281, 1558, L"Ханты-Мансийск"},
- {24, 281, 3344, L"Югорск"},
- {24, 281, 2282, L"Другое"},
- {24, 283, 3298, L"Губкинский"},
- {24, 283, 1578, L"Лабытнанги"},
- {24, 283, 2856, L"Муравленко"},
- {24, 283, 1579, L"Надым"},
- {24, 283, 1580, L"Новый Уренгой"},
- {24, 283, 1581, L"Ноябрьск"},
- {24, 283, 1582, L"Салехард"},
- {24, 283, 1583, L"Уренгой"},
- {24, 283, 2289, L"Другое"},
- {24, 284, 1625, L"Алексеевка"},
- {24, 284, 1626, L"Белгород"},
- {24, 284, 2172, L"Валуйки"},
- {24, 284, 2173, L"Грайворон"},
- {24, 284, 1627, L"Губкин"},
- {24, 284, 2174, L"Короча"},
- {24, 284, 2175, L"Новый Оскол"},
- {24, 284, 1628, L"Старый Оскол"},
- {24, 284, 1629, L"Шебекино"},
- {24, 284, 2221, L"Другое"},
- {24, 285, 1630, L"Брянск"},
- {24, 285, 3283, L"Дебрянск"},
- {24, 285, 1631, L"Дятьково"},
- {24, 285, 2013, L"Жуковка"},
- {24, 285, 2015, L"Злынка"},
- {24, 285, 1632, L"Карачев"},
- {24, 285, 1633, L"Клинцы"},
- {24, 285, 1634, L"Мглин"},
- {24, 285, 2016, L"Новозыбков"},
- {24, 285, 2018, L"Почеп"},
- {24, 285, 2017, L"Севск"},
- {24, 285, 2020, L"Сельцо"},
- {24, 285, 2014, L"Стародуб"},
- {24, 285, 2010, L"Сураж"},
- {24, 285, 2012, L"Трубчевск"},
- {24, 285, 2011, L"Унеча"},
- {24, 285, 2019, L"Фокино"},
- {24, 285, 2210, L"Другое"},
- {24, 286, 1635, L"Александров"},
- {24, 286, 1636, L"Владимир"},
- {24, 286, 2021, L"Вязники"},
- {24, 286, 1637, L"Головино"},
- {24, 286, 2022, L"Гороховец"},
- {24, 286, 1638, L"Гусь-Хрустальный"},
- {24, 286, 2023, L"Камешково"},
- {24, 286, 2031, L"Карабаново"},
- {24, 286, 2024, L"Киржач"},
- {24, 286, 1639, L"Ковров"},
- {24, 286, 1640, L"Кольчугино"},
- {24, 286, 2026, L"Костерево"},
- {24, 286, 3299, L"Красная Горбатка"},
- {24, 286, 2033, L"Лакинск"},
- {24, 286, 2025, L"Меленки"},
- {24, 286, 1641, L"Муром"},
- {24, 286, 1642, L"Петушки"},
- {24, 286, 2027, L"Покров"},
- {24, 286, 2211, L"Радужный"},
- {24, 286, 2028, L"Собинка"},
- {24, 286, 2032, L"Струнино"},
- {24, 286, 2029, L"Судогда"},
- {24, 286, 1643, L"Суздаль"},
- {24, 286, 2030, L"Юрьев-Польский"},
- {24, 286, 2212, L"Другое"},
- {24, 287, 1644, L"Бобров"},
- {24, 287, 1645, L"Богучар"},
- {24, 287, 1646, L"Борисоглебск"},
- {24, 287, 1647, L"Бутурлиновка"},
- {24, 287, 1648, L"Воронеж"},
- {24, 287, 2178, L"Калач"},
- {24, 287, 2176, L"Лиски"},
- {24, 287, 1649, L"Нововоронеж"},
- {24, 287, 2177, L"Новохоперск"},
- {24, 287, 2180, L"Острогожск"},
- {24, 287, 1650, L"Павловск"},
- {24, 287, 2181, L"Поворино"},
- {24, 287, 1651, L"Россошь"},
- {24, 287, 2179, L"Семилуки"},
- {24, 287, 2182, L"Эртиль"},
- {24, 287, 2224, L"Другое"},
- {24, 288, 1652, L"Вичуга"},
- {24, 288, 2036, L"Гаврилов Посад"},
- {24, 288, 1657, L"Заволжск"},
- {24, 288, 1653, L"Иваново"},
- {24, 288, 1656, L"Кинешма"},
- {24, 288, 2040, L"Комсомольск"},
- {24, 288, 2037, L"Кохма"},
- {24, 288, 2043, L"Наволоки"},
- {24, 288, 3300, L"Палех"},
- {24, 288, 2039, L"Плес"},
- {24, 288, 2038, L"Приволжск"},
- {24, 288, 2042, L"Пучеж"},
- {24, 288, 2044, L"Родники"},
- {24, 288, 1655, L"Тейково"},
- {24, 288, 2034, L"Фурманов"},
- {24, 288, 1654, L"Шуя"},
- {24, 288, 2041, L"Южа"},
- {24, 288, 2035, L"Юрьевец"},
- {24, 288, 2227, L"Другое"},
- {24, 289, 2050, L"Балабаново"},
- {24, 289, 2051, L"Боровск"},
- {24, 289, 3301, L"Воротынск"},
- {24, 289, 2052, L"Жиздра"},
- {24, 289, 1660, L"Жуковка"},
- {24, 289, 1658, L"Калуга"},
- {24, 289, 2046, L"Киров"},
- {24, 289, 1661, L"Козельск"},
- {24, 289, 2053, L"Кондрово"},
- {24, 289, 2049, L"Людиново"},
- {24, 289, 1659, L"Малоярославец"},
- {24, 289, 2054, L"Медынь"},
- {24, 289, 2055, L"Мещовск"},
- {24, 289, 2047, L"Мосальск"},
- {24, 289, 1662, L"Обнинск"},
- {24, 289, 2057, L"Сосенский"},
- {24, 289, 2056, L"Спас-Демянск"},
- {24, 289, 2045, L"Сухиничи"},
- {24, 289, 1663, L"Таруса"},
- {24, 289, 2131, L"Чекалин"},
- {24, 289, 2048, L"Юхнов"},
- {24, 289, 2233, L"Другое"},
- {24, 290, 1664, L"Буй"},
- {24, 290, 1665, L"Волгореченск"},
- {24, 290, 1666, L"Галич"},
- {24, 290, 2059, L"Кологрив"},
- {24, 290, 1667, L"Кострома"},
- {24, 290, 3302, L"Красное-на-Волге"},
- {24, 290, 1668, L"Макарьев"},
- {24, 290, 2060, L"Мантурово"},
- {24, 290, 1669, L"Нерехта"},
- {24, 290, 2061, L"Нея"},
- {24, 290, 2062, L"Солигалич"},
- {24, 290, 2058, L"Чухлома"},
- {24, 290, 1670, L"Шарья"},
- {24, 290, 2240, L"Другое"},
- {24, 291, 1671, L"Дмитриев-Льговский"},
- {24, 291, 1673, L"Железногорск"},
- {24, 291, 3279, L"Железногорск"},
- {24, 291, 1672, L"Курск"},
- {24, 291, 2187, L"Курчатов"},
- {24, 291, 2188, L"Льгов"},
- {24, 291, 2184, L"Обоянь"},
- {24, 291, 2185, L"Рыльск"},
- {24, 291, 2183, L"Суджа"},
- {24, 291, 2189, L"Фатеж"},
- {24, 291, 2186, L"Щигры"},
- {24, 291, 2244, L"Другое"},
- {24, 292, 2194, L"Грязи"},
- {24, 292, 2193, L"Данков"},
- {24, 292, 1674, L"Елец"},
- {24, 292, 2190, L"Задонск"},
- {24, 292, 2195, L"Лебедянь"},
- {24, 292, 1675, L"Липецк"},
- {24, 292, 2192, L"Усмань"},
- {24, 292, 2191, L"Чаплыгин"},
- {24, 292, 2245, L"Другое"},
- {24, 293, 1733, L"Апрелевка"},
- {24, 293, 1732, L"Балашиха"},
- {24, 293, 1731, L"Бронницы"},
- {24, 293, 1730, L"Верея"},
- {24, 293, 2063, L"Видное"},
- {24, 293, 2064, L"Волоколамск"},
- {24, 293, 1729, L"Воскресенск"},
- {24, 293, 1728, L"Высоковск"},
- {24, 293, 1727, L"Голицыно"},
- {24, 293, 2065, L"Дедовск"},
- {24, 293, 1726, L"Дзержинский"},
- {24, 293, 1725, L"Дмитров"},
- {24, 293, 1724, L"Долгопрудный"},
- {24, 293, 1723, L"Домодедово"},
- {24, 293, 2066, L"Дрезна"},
- {24, 293, 1722, L"Дубна"},
- {24, 293, 1721, L"Егорьевск"},
- {24, 293, 1720, L"Железнодорожный"},
- {24, 293, 1719, L"Жуковский"},
- {24, 293, 2067, L"Зарайск"},
- {24, 293, 1718, L"Звенигород"},
- {24, 293, 1715, L"Ивантеевка"},
- {24, 293, 1717, L"Истра"},
- {24, 293, 2068, L"Калининград"},
- {24, 293, 2069, L"Кашира"},
- {24, 293, 1716, L"Климовск"},
- {24, 293, 1714, L"Клин"},
- {24, 293, 1713, L"Коломна"},
- {24, 293, 1712, L"Королев"},
- {24, 293, 1711, L"Красноармейск"},
- {24, 293, 1710, L"Красногорск"},
- {24, 293, 2070, L"Краснозаводск"},
- {24, 293, 2071, L"Куровское"},
- {24, 293, 1709, L"Ликино-Дулево"},
- {24, 293, 1708, L"Лобня"},
- {24, 293, 2072, L"Лосино-Петровский"},
- {24, 293, 1707, L"Луховицы"},
- {24, 293, 1706, L"Лыткарино"},
- {24, 293, 1705, L"Люберцы"},
- {24, 293, 1704, L"Менделеево"},
- {24, 293, 1703, L"Можайск"},
- {24, 293, 1702, L"Мытищи"},
- {24, 293, 1701, L"Наро-Фоминск"},
- {24, 293, 1700, L"Ногинск"},
- {24, 293, 1698, L"Одинцово"},
- {24, 293, 2073, L"Ожерелье"},
- {24, 293, 2074, L"Озеры"},
- {24, 293, 1699, L"Орехово-Зуево"},
- {24, 293, 1697, L"Павловский Посад"},
- {24, 293, 1696, L"Подольск"},
- {24, 293, 1695, L"Протвино"},
- {24, 293, 1694, L"Пушкино"},
- {24, 293, 1693, L"Пущино"},
- {24, 293, 1692, L"Раменское"},
- {24, 293, 1691, L"Реутов"},
- {24, 293, 1690, L"Решетников"},
- {24, 293, 2075, L"Рошаль"},
- {24, 293, 2076, L"Руза"},
- {24, 293, 1689, L"Сергиев Посад"},
- {24, 293, 1688, L"Серпухов"},
- {24, 293, 1687, L"Солнечногорск"},
- {24, 293, 1686, L"Ступино"},
- {24, 293, 2077, L"Сходня"},
- {24, 293, 2078, L"Талдом"},
- {24, 293, 1685, L"Троицк"},
- {24, 293, 1684, L"Фрязино"},
- {24, 293, 1683, L"Химки"},
- {24, 293, 1682, L"Хотьково"},
- {24, 293, 1681, L"Черноголовка"},
- {24, 293, 1680, L"Чехов"},
- {24, 293, 1679, L"Шатура"},
- {24, 293, 1678, L"Щелково"},
- {24, 293, 2080, L"Щербинка"},
- {24, 293, 1677, L"Электрогорск"},
- {24, 293, 1676, L"Электросталь"},
- {24, 293, 2079, L"Электроугли"},
- {24, 293, 3031, L"Юбилейный"},
- {24, 293, 2081, L"Яхрома"},
- {24, 293, 2249, L"Другое"},
- {24, 294, 2083, L"Болхов"},
- {24, 294, 2082, L"Дмитровск-Орловский"},
- {24, 294, 3160, L"Залегощь"},
- {24, 294, 1736, L"Ливны"},
- {24, 294, 2084, L"Малоархангельск"},
- {24, 294, 1737, L"Мценск"},
- {24, 294, 2085, L"Новосиль"},
- {24, 294, 1735, L"Орел"},
- {24, 294, 2255, L"Другое"},
- {24, 295, 1740, L"Гусь-Железный"},
- {24, 295, 1741, L"Касимов"},
- {24, 295, 2086, L"Кораблино"},
- {24, 295, 2087, L"Михайлов"},
- {24, 295, 2089, L"Новомичуринск"},
- {24, 295, 2091, L"Рыбное"},
- {24, 295, 2093, L"Ряжск"},
- {24, 295, 1738, L"Рязань"},
- {24, 295, 3305, L"Сапожок"},
- {24, 295, 1739, L"Сасово"},
- {24, 295, 2090, L"Скопин"},
- {24, 295, 2088, L"Спас-Клепики"},
- {24, 295, 2092, L"Спасск-Рязанский"},
- {24, 295, 2094, L"Шацк"},
- {24, 295, 3320, L"Шилово"},
- {24, 295, 2260, L"Другое"},
- {24, 296, 2095, L"Велиж"},
- {24, 296, 1743, L"Вязьма"},
- {24, 296, 1744, L"Гагарин"},
- {24, 296, 2096, L"Демидов"},
- {24, 296, 1745, L"Десногорск"},
- {24, 296, 1746, L"Дорогубуж"},
- {24, 296, 2097, L"Духовщина"},
- {24, 296, 2098, L"Ельня"},
- {24, 296, 2099, L"Починок"},
- {24, 296, 2100, L"Рославль"},
- {24, 296, 2101, L"Рудня"},
- {24, 296, 1747, L"Сафоново"},
- {24, 296, 1742, L"Смоленск"},
- {24, 296, 2102, L"Сычевка"},
- {24, 296, 1748, L"Ярцево"},
- {24, 296, 2267, L"Другое"},
- {24, 297, 2198, L"Жердевка"},
- {24, 297, 2199, L"Кирсанов"},
- {24, 297, 1752, L"Котовск"},
- {24, 297, 1751, L"Мичуринск"},
- {24, 297, 2196, L"Моршанск"},
- {24, 297, 1750, L"Рассказово"},
- {24, 297, 3271, L"Сатинка"},
- {24, 297, 1749, L"Тамбов"},
- {24, 297, 3272, L"Тулиновка"},
- {24, 297, 2197, L"Уварово"},
- {24, 297, 2270, L"Другое"},
- {24, 298, 2103, L"Андреаполь"},
- {24, 298, 2104, L"Бежецк"},
- {24, 298, 2105, L"Белый"},
- {24, 298, 2106, L"Бологое"},
- {24, 298, 2107, L"Весьегонск"},
- {24, 298, 1753, L"Вышний Волочек"},
- {24, 298, 2108, L"Западная Двина"},
- {24, 298, 2109, L"Зубцов"},
- {24, 298, 2110, L"Калязин"},
- {24, 298, 2111, L"Кашин"},
- {24, 298, 1758, L"Кимры"},
- {24, 298, 1756, L"Конаково"},
- {24, 298, 2112, L"Красный Холм"},
- {24, 298, 1759, L"Кувшиново"},
- {24, 298, 1760, L"Лихославль"},
- {24, 298, 1761, L"Нелидово"},
- {24, 298, 2113, L"Осташков"},
- {24, 298, 1757, L"Ржев"},
- {24, 298, 2114, L"Старица"},
- {24, 298, 1754, L"Тверь"},
- {24, 298, 2115, L"Торжок"},
- {24, 298, 2116, L"Торопец"},
- {24, 298, 1755, L"Удомля"},
- {24, 298, 2272, L"Другое"},
- {24, 299, 2127, L"Алексин"},
- {24, 299, 2126, L"Белев"},
- {24, 299, 2118, L"Богородицк"},
- {24, 299, 2122, L"Болохово"},
- {24, 299, 2129, L"Венев"},
- {24, 299, 1762, L"Донской"},
- {24, 299, 2128, L"Ефремов"},
- {24, 299, 3354, L"Заокский"},
- {24, 299, 2124, L"Киреевск"},
- {24, 299, 1763, L"Климовск"},
- {24, 299, 2123, L"Липки"},
- {24, 299, 1764, L"Новомосковск"},
- {24, 299, 2117, L"Плавск"},
- {24, 299, 2130, L"Северо-Задонск"},
- {24, 299, 2120, L"Советск"},
- {24, 299, 2119, L"Сокольники"},
- {24, 299, 2125, L"Суворов"},
- {24, 299, 1765, L"Тула"},
- {24, 299, 1766, L"Узловая"},
- {24, 299, 2121, L"Щекино"},
- {24, 299, 1767, L"Ясногорск"},
- {24, 299, 2274, L"Другое"},
- {24, 300, 3053, L"Большое Село"},
- {24, 300, 3268, L"Брейтово"},
- {24, 300, 1773, L"Гаврилов-Ям"},
- {24, 300, 2132, L"Данилов"},
- {24, 300, 3269, L"Красные Ткачи"},
- {24, 300, 2133, L"Любим"},
- {24, 300, 3270, L"Мокеевское"},
- {24, 300, 1774, L"Мышкин"},
- {24, 300, 2994, L"Некоуз"},
- {24, 300, 1775, L"Переславль-Залесский"},
- {24, 300, 2134, L"Пошехонье"},
- {24, 300, 1769, L"Ростов"},
- {24, 300, 1771, L"Рыбинск"},
- {24, 300, 1772, L"Тутаев"},
- {24, 300, 1770, L"Углич"},
- {24, 300, 1768, L"Ярославль"},
- {24, 300, 2290, L"Другое"},
- {24, 301, 2849, L"Адыгейск"},
- {24, 301, 1776, L"Майкоп"},
- {24, 301, 2214, L"Другое"},
- {24, 304, 2617, L"Буйнакск"},
- {24, 304, 1791, L"Гуниб"},
- {24, 304, 1788, L"Дербент"},
- {24, 304, 2619, L"Избербаш"},
- {24, 304, 1789, L"Каспийск"},
- {24, 304, 2618, L"Кизилюрт"},
- {24, 304, 1790, L"Кизляр"},
- {24, 304, 1792, L"Махачкала"},
- {24, 304, 2620, L"Хасавюрт"},
- {24, 304, 2225, L"Другое"},
- {24, 305, 3052, L"Магас"},
- {24, 305, 1787, L"Назрань"},
- {24, 305, 2228, L"Другое"},
- {24, 306, 2621, L"Баксан"},
- {24, 306, 1794, L"Майский"},
- {24, 306, 1793, L"Нальчик"},
- {24, 306, 2622, L"Нарткала"},
- {24, 306, 1795, L"Прохладный"},
- {24, 306, 2623, L"Терек"},
- {24, 306, 2624, L"Тырныауз"},
- {24, 306, 3274, L"Чегем"},
- {24, 306, 2230, L"Другое"},
- {24, 307, 2567, L"Городовиково"},
- {24, 307, 2568, L"Лагань"},
- {24, 307, 3324, L"Троицкое"},
- {24, 307, 1796, L"Элиста"},
- {24, 307, 2232, L"Другое"},
- {24, 308, 1799, L"Домбай"},
- {24, 308, 1798, L"Карачаевск"},
- {24, 308, 2626, L"Теберда"},
- {24, 308, 2625, L"Усть-Джегута"},
- {24, 308, 1797, L"Черкесск"},
- {24, 308, 2235, L"Другое"},
- {24, 311, 2630, L"Алагир"},
- {24, 311, 2631, L"Ардон"},
- {24, 311, 2628, L"Беслан"},
- {24, 311, 1839, L"Владикавказ"},
- {24, 311, 2629, L"Дигора"},
- {24, 311, 2627, L"Моздок"},
- {24, 311, 2266, L"Другое"},
- {24, 313, 2632, L"Аргун"},
- {24, 313, 1853, L"Грозный"},
- {24, 313, 2633, L"Гудермес"},
- {24, 313, 2284, L"Другое"},
- {24, 309, 2636, L"Абинск"},
- {24, 309, 1800, L"Анапа"},
- {24, 309, 1801, L"Апшеронск"},
- {24, 309, 1802, L"Армавир"},
- {24, 309, 1803, L"Белореченск"},
- {24, 309, 1804, L"Геленджик"},
- {24, 309, 1805, L"Горячий Ключ"},
- {24, 309, 2637, L"Гулькевичи"},
- {24, 309, 1806, L"Динская"},
- {24, 309, 1807, L"Ейск"},
- {24, 309, 2638, L"Кореновск"},
- {24, 309, 1808, L"Краснодар"},
- {24, 309, 1809, L"Кропоткин"},
- {24, 309, 1810, L"Крымск"},
- {24, 309, 1811, L"Курганинск"},
- {24, 309, 3232, L"Лабинск"},
- {24, 309, 2639, L"Новокубанск"},
- {24, 309, 1812, L"Новороссийск"},
- {24, 309, 1813, L"Пластуновская"},
- {24, 309, 1814, L"Приморско-Ахтарск"},
- {24, 309, 3102, L"Северская"},
- {24, 309, 1815, L"Славянск-на-Кубани"},
- {24, 309, 1816, L"Сочи"},
- {24, 309, 3266, L"Староминская"},
- {24, 309, 3039, L"Тамань"},
- {24, 309, 1817, L"Темрюк"},
- {24, 309, 2635, L"Тимашевск"},
- {24, 309, 1818, L"Тихорецк"},
- {24, 309, 1819, L"Туапсе"},
- {24, 309, 1820, L"Усть-Лабинск"},
- {24, 309, 2634, L"Хадыженск"},
- {24, 309, 2241, L"Другое"},
- {24, 312, 1840, L"Александровское"},
- {24, 312, 2644, L"Благодарный"},
- {24, 312, 1841, L"Буденновск"},
- {24, 312, 1842, L"Георгиевск"},
- {24, 312, 1843, L"Ессентуки"},
- {24, 312, 1844, L"Железноводск"},
- {24, 312, 2647, L"Зеленокумск"},
- {24, 312, 2641, L"Изобильный"},
- {24, 312, 2642, L"Ипатово"},
- {24, 312, 1845, L"Кисловодск"},
- {24, 312, 1846, L"Кочубеевское"},
- {24, 312, 3367, L"Курсавка"},
- {24, 312, 3265, L"Левокумское"},
- {24, 312, 1847, L"Лермонтов"},
- {24, 312, 1848, L"Минеральные Воды"},
- {24, 312, 1849, L"Невинномысск"},
- {24, 312, 2645, L"Нефтекумск"},
- {24, 312, 2643, L"Новоалександровск"},
- {24, 312, 1850, L"Новопавловск"},
- {24, 312, 1851, L"Новоселицкое"},
- {24, 312, 1852, L"Пятигорск"},
- {24, 312, 2646, L"Светлоград"},
- {24, 312, 2640, L"Ставрополь"},
- {24, 312, 2268, L"Другое"},
- {24, 302, 1777, L"Астрахань"},
- {24, 302, 1778, L"Ахтубинск"},
- {24, 302, 3383, L"Знаменск"},
- {24, 302, 2578, L"Камызяк"},
- {24, 302, 2579, L"Нариманов"},
- {24, 302, 1786, L"Харабали"},
- {24, 302, 2219, L"Другое"},
- {24, 303, 1779, L"Волгоград"},
- {24, 303, 1780, L"Волжский"},
- {24, 303, 2584, L"Дубовка"},
- {24, 303, 1781, L"Жирновск"},
- {24, 303, 1782, L"Калач-на-Дону"},
- {24, 303, 1783, L"Камышин"},
- {24, 303, 2588, L"Котельниково"},
- {24, 303, 2591, L"Котово"},
- {24, 303, 2587, L"Краснослободск"},
- {24, 303, 2582, L"Ленинск"},
- {24, 303, 2590, L"Михайловка"},
- {24, 303, 1784, L"Николаевск"},
- {24, 303, 2581, L"Новоаннинский"},
- {24, 303, 2583, L"Палласовка"},
- {24, 303, 2580, L"Петров Вал"},
- {24, 303, 2589, L"Серафимович"},
- {24, 303, 2585, L"Суровикино"},
- {24, 303, 1785, L"Урюпинск"},
- {24, 303, 2586, L"Фролово"},
- {24, 303, 2223, L"Другое"},
- {24, 310, 1821, L"Азов"},
- {24, 310, 1822, L"Аксай"},
- {24, 310, 1823, L"Багаевская"},
- {24, 310, 1824, L"Батайск"},
- {24, 310, 1825, L"Белая Калитва"},
- {24, 310, 1826, L"Волгодонск"},
- {24, 310, 1827, L"Гуково"},
- {24, 310, 2651, L"Донецк"},
- {24, 310, 1828, L"Зерноград"},
- {24, 310, 3264, L"Каменоломни"},
- {24, 310, 2652, L"Каменск-Шахтинский"},
- {24, 310, 2649, L"Константиновск"},
- {24, 310, 2648, L"Красный Сулин"},
- {24, 310, 1829, L"Миллерово"},
- {24, 310, 2653, L"Морозовск"},
- {24, 310, 1830, L"Новочеркасск"},
- {24, 310, 1831, L"Новошахтинск"},
- {24, 310, 1832, L"Пролетарск"},
- {24, 310, 1833, L"Ростов-на-Дону"},
- {24, 310, 1834, L"Сальск"},
- {24, 310, 1835, L"Семикаракорск"},
- {24, 310, 1836, L"Таганрог"},
- {24, 310, 1837, L"Усть-Донецкий"},
- {24, 310, 3263, L"Целина"},
- {24, 310, 2650, L"Цимлянск"},
- {24, 310, 1838, L"Шахты"},
- {24, 310, 2259, L"Другое"},
- {139, 407, 407, L" столица"},
- {139, 426, 427, L"Бойсе"},
- {139, 426, 2354, L"Другое"},
- {139, 378, 3109, L"Айова Сити"},
- {139, 378, 379, L"Де-Мойн"},
- {139, 378, 2963, L"Декора"},
- {139, 378, 2355, L"Другое"},
- {139, 412, 3236, L"Бирмингем"},
- {139, 412, 413, L"Монтгомери"},
- {139, 412, 1181, L"Хантсвилл"},
- {139, 412, 2356, L"Другое"},
- {139, 446, 1182, L"Анкоридж"},
- {139, 446, 447, L"Джуно"},
- {139, 446, 1183, L"Фэрбенкс"},
- {139, 446, 2357, L"Другое"},
- {139, 434, 2917, L"Темпе"},
- {139, 434, 1184, L"Тусон"},
- {139, 434, 435, L"Финикс"},
- {139, 434, 3061, L"Чандлер"},
- {139, 434, 2358, L"Другое"},
- {139, 416, 417, L"Литл-Рок"},
- {139, 416, 2359, L"Другое"},
- {139, 428, 3017, L"Ларами"},
- {139, 428, 429, L"Шайенн"},
- {139, 428, 2360, L"Другое"},
- {139, 440, 2956, L"Беллевью"},
- {139, 440, 2967, L"Бремертон"},
- {139, 440, 3385, L"Ванкувер"},
- {139, 440, 2865, L"Линден"},
- {139, 440, 441, L"Олимпия"},
- {139, 440, 3352, L"Порт Орчард"},
- {139, 440, 2876, L"Редмонт"},
- {139, 440, 3003, L"Рентон"},
- {139, 440, 1185, L"Сиэтл"},
- {139, 440, 2983, L"Снохомиш"},
- {139, 440, 1186, L"Такома"},
- {139, 440, 3152, L"Фрайди Харбор"},
- {139, 440, 2886, L"Эверет"},
- {139, 440, 2361, L"Другое"},
- {139, 352, 353, L"Монтпильер"},
- {139, 352, 2861, L"Норвич"},
- {139, 352, 2362, L"Другое"},
- {139, 394, 1188, L"Александрия"},
- {139, 394, 1187, L"Арлингтон"},
- {139, 394, 2969, L"Даллес"},
- {139, 394, 1189, L"Манассас"},
- {139, 394, 3114, L"Норфолк"},
- {139, 394, 2885, L"Ньюпорт-Ньюс"},
- {139, 394, 2979, L"Раунд Хил"},
- {139, 394, 3338, L"Рестон"},
- {139, 394, 395, L"Ричмонд"},
- {139, 394, 3005, L"Уоррентон"},
- {139, 394, 2991, L"Херндон"},
- {139, 394, 2996, L"Центрвиль"},
- {139, 394, 3097, L"Чантилли"},
- {139, 394, 2981, L"Шарлотесвиль"},
- {139, 394, 2363, L"Другое"},
- {139, 374, 2995, L"Грин-Бей"},
- {139, 374, 375, L"Мадисон"},
- {139, 374, 2365, L"Другое"},
- {139, 448, 449, L"Гонолулу"},
- {139, 448, 1191, L"Хило"},
- {139, 448, 2367, L"Другое"},
- {139, 390, 3021, L"Вильмингтон"},
- {139, 390, 391, L"Довер"},
- {139, 390, 2973, L"Льюис"},
- {139, 390, 2369, L"Другое"},
- {139, 402, 403, L"Атланта"},
- {139, 402, 2370, L"Другое"},
- {139, 396, 397, L"Чарлстон"},
- {139, 396, 2371, L"Другое"},
- {139, 370, 2911, L"Вестмонт"},
- {139, 370, 3074, L"Гарвард"},
- {139, 370, 371, L"Спрингфилд"},
- {139, 370, 2930, L"Урбана"},
- {139, 370, 1194, L"Чикаго"},
- {139, 370, 2372, L"Другое"},
- {139, 368, 369, L"Индианаполис"},
- {139, 368, 1195, L"Эвансвил"},
- {139, 368, 2373, L"Другое"},
- {139, 444, 2959, L"Анахайм"},
- {139, 444, 2961, L"Аптос"},
- {139, 444, 2912, L"Артезия"},
- {139, 444, 2899, L"Беверли Хилз"},
- {139, 444, 1196, L"Беркли"},
- {139, 444, 3249, L"Бреа"},
- {139, 444, 3014, L"Брисбейн"},
- {139, 444, 3048, L"Венис"},
- {139, 444, 2901, L"Вест-Голливуд"},
- {139, 444, 2926, L"Вестлейк Вилладж"},
- {139, 444, 2922, L"Гардена"},
- {139, 444, 1203, L"Глендейл"},
- {139, 444, 2978, L"Денвиль"},
- {139, 444, 2990, L"Дублин"},
- {139, 444, 3077, L"Дэвис"},
- {139, 444, 2918, L"Ирвайн"},
- {139, 444, 2881, L"Карсон"},
- {139, 444, 3247, L"Кипресс"},
- {139, 444, 3092, L"Коста Меса"},
- {139, 444, 2948, L"Купертино"},
- {139, 444, 1197, L"Лонг-Бич"},
- {139, 444, 1198, L"Лос-Анджелес"},
- {139, 444, 3058, L"Лос-Гатос"},
- {139, 444, 3328, L"Марина-дель-Рей"},
- {139, 444, 2874, L"Маунтин-Вью"},
- {139, 444, 2998, L"Милпитас"},
- {139, 444, 3087, L"Монтерей"},
- {139, 444, 2947, L"Окленд"},
- {139, 444, 2900, L"Пало Альто"},
- {139, 444, 1199, L"Пасадена"},
- {139, 444, 3335, L"Редвуд"},
- {139, 444, 2966, L"Розамонд"},
- {139, 444, 445, L"Сакраменто"},
- {139, 444, 1200, L"Сан-Диего"},
- {139, 444, 3317, L"Сан-Мартин"},
- {139, 444, 1201, L"Сан-Франциско"},
- {139, 444, 1202, L"Сан-Хосе"},
- {139, 444, 2878, L"Саннивейл"},
- {139, 444, 2925, L"Санта-Барбара"},
- {139, 444, 2875, L"Санта-Клара"},
- {139, 444, 1204, L"Санта-Круз"},
- {139, 444, 2859, L"Санта-Моника"},
- {139, 444, 3157, L"Студио Сити"},
- {139, 444, 3146, L"Торранс"},
- {139, 444, 2970, L"Тысяча Дубов"},
- {139, 444, 2949, L"Универсал-Сити"},
- {139, 444, 3057, L"Форт Брэгг"},
- {139, 444, 3032, L"Фостер-Сити"},
- {139, 444, 3381, L"Фремонт"},
- {139, 444, 3028, L"Фуллертон"},
- {139, 444, 2858, L"Эмервиль"},
- {139, 444, 3040, L"Эскондидо"},
- {139, 444, 2374, L"Другое"},
- {139, 388, 3041, L"Лоуренс"},
- {139, 388, 389, L"Топика"},
- {139, 388, 2375, L"Другое"},
- {139, 408, 3004, L"Лексингтон"},
- {139, 408, 1205, L"Луисвилл"},
- {139, 408, 409, L"Франкфорт"},
- {139, 408, 2376, L"Другое"},
- {139, 430, 1206, L"Боулдер"},
- {139, 430, 3095, L"Грили"},
- {139, 430, 431, L"Денвер"},
- {139, 430, 1207, L"Колорадо-Спрингс"},
- {139, 430, 3046, L"Литлтон"},
- {139, 430, 2377, L"Другое"},
- {139, 358, 2968, L"Дариен"},
- {139, 358, 3018, L"Денбери"},
- {139, 358, 2882, L"Стэмфорд"},
- {139, 358, 359, L"Хартфорд"},
- {139, 358, 3047, L"Шелтон"},
- {139, 358, 2378, L"Другое"},
- {139, 418, 419, L"Батон-Руж"},
- {139, 418, 1208, L"Новый Орлеан"},
- {139, 418, 2408, L"Другое"},
- {139, 354, 2931, L"Аттлеборо"},
- {139, 354, 3334, L"Билерика"},
- {139, 354, 355, L"Бостон"},
- {139, 354, 3059, L"Вестгемптон"},
- {139, 354, 2919, L"Вобурн"},
- {139, 354, 2902, L"Дедхэм"},
- {139, 354, 1209, L"Кеймбридж"},
- {139, 354, 3336, L"Нидхем"},
- {139, 354, 2985, L"Ньютонвиль"},
- {139, 354, 3022, L"Уолтхэм"},
- {139, 354, 2407, L"Другое"},
- {139, 376, 1210, L"Миннеаполис"},
- {139, 376, 2980, L"Плимут"},
- {139, 376, 377, L"Сент-Пол"},
- {139, 376, 3035, L"Эден Прейри"},
- {139, 376, 2406, L"Другое"},
- {139, 414, 415, L"Джэксон"},
- {139, 414, 2405, L"Другое"},
- {139, 380, 381, L"Джефферсон-Сити"},
- {139, 380, 3062, L"Канзас Сити"},
- {139, 380, 3038, L"Ли Саммит"},
- {139, 380, 1211, L"Сент-Луис"},
- {139, 380, 2895, L"Эллисвил"},
- {139, 380, 2404, L"Другое"},
- {139, 372, 3357, L"Вест Блюмфельд"},
- {139, 372, 1212, L"Гранд-Рапидс"},
- {139, 372, 1213, L"Детройт"},
- {139, 372, 3103, L"Каламазу"},
- {139, 372, 373, L"Лансинг"},
- {139, 372, 2987, L"Новай"},
- {139, 372, 2887, L"Сагино"},
- {139, 372, 2403, L"Другое"},
- {139, 424, 1214, L"Грейт-Фолс"},
- {139, 424, 425, L"Хелина"},
- {139, 424, 2402, L"Другое"},
- {139, 348, 349, L"Огаста"},
- {139, 348, 3000, L"Ярмут"},
- {139, 348, 2401, L"Другое"},
- {139, 392, 393, L"Аннаполис"},
- {139, 392, 1215, L"Балтимор"},
- {139, 392, 3143, L"Гринбелт"},
- {139, 392, 3337, L"Колледж Парк"},
- {139, 392, 2904, L"Маунт Эйри"},
- {139, 392, 3329, L"Роквилль"},
- {139, 392, 2400, L"Другое"},
- {139, 386, 387, L"Линкольн"},
- {139, 386, 1216, L"Омаха"},
- {139, 386, 2399, L"Другое"},
- {139, 438, 439, L"Карсон-Сити"},
- {139, 438, 1217, L"Лас-Вегас"},
- {139, 438, 2890, L"Рено"},
- {139, 438, 2398, L"Другое"},
- {139, 362, 1219, L"Атлантик-Сити"},
- {139, 362, 1218, L"Ньюарк"},
- {139, 362, 3276, L"Оклин"},
- {139, 362, 3073, L"Принстон"},
- {139, 362, 2955, L"Рузерфорд"},
- {139, 362, 3349, L"Сомервиль"},
- {139, 362, 363, L"Трентон"},
- {139, 362, 3078, L"Хакеттстоун"},
- {139, 362, 3248, L"Черри Хилл"},
- {139, 362, 2397, L"Другое"},
- {139, 360, 3134, L"Баффало"},
- {139, 360, 3081, L"Бингхэмптон"},
- {139, 360, 2997, L"Бруклин"},
- {139, 360, 2999, L"Варвик"},
- {139, 360, 3139, L"Ирвингтон"},
- {139, 360, 3060, L"Итака"},
- {139, 360, 1220, L"Нью-Йорк"},
- {139, 360, 361, L"Олбани"},
- {139, 360, 2914, L"Погкипси"},
- {139, 360, 3056, L"Саратога Спрингс"},
- {139, 360, 2396, L"Другое"},
- {139, 432, 1222, L"Альбукерке"},
- {139, 432, 433, L"Санта-Фе"},
- {139, 432, 2395, L"Другое"},
- {139, 350, 2989, L"Амхерст"},
- {139, 350, 351, L"Конкорд"},
- {139, 350, 2950, L"Лондондерри"},
- {139, 350, 1221, L"Манчестер"},
- {139, 350, 3111, L"Рочестер"},
- {139, 350, 2898, L"Салем"},
- {139, 350, 2938, L"Хадсон"},
- {139, 350, 2394, L"Другое"},
- {139, 366, 2953, L"Варрен"},
- {139, 366, 3112, L"Гроув Сити"},
- {139, 366, 1223, L"Кливленд"},
- {139, 366, 367, L"Колумбус"},
- {139, 366, 2951, L"Лавленд"},
- {139, 366, 2862, L"Оберлин"},
- {139, 366, 3034, L"Рейнольдсбург"},
- {139, 366, 2860, L"Цинциннати"},
- {139, 366, 2393, L"Другое"},
- {139, 420, 421, L"Оклахома-Сити"},
- {139, 420, 1224, L"Талса"},
- {139, 420, 2392, L"Другое"},
- {139, 442, 2877, L"Кламат-Фолс"},
- {139, 442, 2945, L"Коттедж-Гроув"},
- {139, 442, 1225, L"Портленд"},
- {139, 442, 443, L"Сейлем"},
- {139, 442, 1226, L"Юджин"},
- {139, 442, 2391, L"Другое"},
- {139, 364, 3316, L"Вифлием"},
- {139, 364, 3282, L"Колледжвиль"},
- {139, 364, 2972, L"Нью Фридом"},
- {139, 364, 1227, L"Питтсбург"},
- {139, 364, 2893, L"Рандор"},
- {139, 364, 3110, L"Слиппери Рок"},
- {139, 364, 1228, L"Филадельфия"},
- {139, 364, 365, L"Харрисберг"},
- {139, 364, 2390, L"Другое"},
- {139, 450, 451, L"Понсе"},
- {139, 450, 3093, L"Сан-Хуан"},
- {139, 450, 2389, L"Другое"},
- {139, 356, 357, L"Провиденс"},
- {139, 356, 2388, L"Другое"},
- {139, 382, 383, L"Бисмарк"},
- {139, 382, 2387, L"Другое"},
- {139, 398, 2960, L"Вильмингтон"},
- {139, 398, 2915, L"Дурхам"},
- {139, 398, 399, L"Роли"},
- {139, 398, 2386, L"Другое"},
- {139, 410, 2863, L"Мемфис"},
- {139, 410, 411, L"Нашвилл"},
- {139, 410, 1229, L"Ноксвилл"},
- {139, 410, 2385, L"Другое"},
- {139, 422, 3085, L"Бедфорд"},
- {139, 422, 2913, L"Брейди"},
- {139, 422, 1233, L"Даллас"},
- {139, 422, 2916, L"Ирвинг"},
- {139, 422, 3123, L"Кингсвилл"},
- {139, 422, 2873, L"Конрой"},
- {139, 422, 3096, L"Корпус Кристи"},
- {139, 422, 423, L"Остин"},
- {139, 422, 1232, L"Сан-Антонио"},
- {139, 422, 3023, L"Уайли"},
- {139, 422, 1231, L"Хьюстон"},
- {139, 422, 1230, L"Эль-Пасо"},
- {139, 422, 2384, L"Другое"},
- {139, 406, 2383, L"Другое"},
- {139, 404, 2879, L"Бока-Рейтон"},
- {139, 404, 2880, L"Гейнсвил"},
- {139, 404, 3086, L"Джексонвиль"},
- {139, 404, 3002, L"Киссимми"},
- {139, 404, 3124, L"Корал Гейблс"},
- {139, 404, 2894, L"Корал-Спрингс"},
- {139, 404, 3290, L"Лейк-Ворт"},
- {139, 404, 1234, L"Майами"},
- {139, 404, 1236, L"Орландо"},
- {139, 404, 3372, L"Пинеллас Парк"},
- {139, 404, 2952, L"Пунта-Горда"},
- {139, 404, 3340, L"Сарасота"},
- {139, 404, 1235, L"Сент-Питерсберг"},
- {139, 404, 405, L"Таллахасси"},
- {139, 404, 2962, L"Форт Лаудердейл"},
- {139, 404, 2382, L"Другое"},
- {139, 384, 385, L"Пирр"},
- {139, 384, 2381, L"Другое"},
- {139, 400, 401, L"Колумбия"},
- {139, 400, 3090, L"Спартанбург"},
- {139, 400, 1237, L"Чарлстон"},
- {139, 400, 2380, L"Другое"},
- {139, 436, 3036, L"Кейсвилл"},
- {139, 436, 3024, L"Линдон"},
- {139, 436, 3108, L"Орем"},
- {139, 436, 2866, L"Сент-Джордж"},
- {139, 436, 437, L"Солт-Лейк-Сити"},
- {139, 436, 2379, L"Другое"},
- {39, 315, 614, L"Винница"},
- {39, 315, 615, L"Хмельник"},
- {39, 315, 2566, L"Другое"},
- {39, 316, 2940, L"Ковель"},
- {39, 316, 616, L"Луцк"},
- {39, 316, 2565, L"Другое"},
- {39, 317, 617, L"Днепродзержинск"},
- {39, 317, 618, L"Днепропетровск"},
- {39, 317, 619, L"Кривой Рог"},
- {39, 317, 620, L"Никополь"},
- {39, 317, 621, L"Новомосковск"},
- {39, 317, 622, L"Орджоникидзе"},
- {39, 317, 623, L"Павлоград"},
- {39, 317, 2564, L"Другое"},
- {39, 318, 624, L"Артемовск"},
- {39, 318, 625, L"Горловка"},
- {39, 318, 626, L"Донецк"},
- {39, 318, 627, L"Дружковка"},
- {39, 318, 628, L"Енакиево"},
- {39, 318, 629, L"Константиновка"},
- {39, 318, 630, L"Краматорск"},
- {39, 318, 2944, L"Красноармейск"},
- {39, 318, 631, L"Макеевка"},
- {39, 318, 632, L"Мариуполь"},
- {39, 318, 633, L"Николаевка"},
- {39, 318, 634, L"Славянск"},
- {39, 318, 635, L"Харцызск"},
- {39, 318, 2563, L"Другое"},
- {39, 319, 636, L"Бердичев"},
- {39, 319, 637, L"Житомир"},
- {39, 319, 2942, L"Коростень"},
- {39, 319, 638, L"Коростышев"},
- {39, 319, 2907, L"Малин"},
- {39, 319, 639, L"Новоград-Волынский"},
- {39, 319, 2562, L"Другое"},
- {39, 320, 640, L"Берегово"},
- {39, 320, 641, L"Воловец"},
- {39, 320, 3119, L"Мукачево"},
- {39, 320, 3162, L"Свалява"},
- {39, 320, 642, L"Ужгород"},
- {39, 320, 643, L"Хуст"},
- {39, 320, 2561, L"Другое"},
- {39, 321, 644, L"Бердянск"},
- {39, 321, 3128, L"Гуляйполе"},
- {39, 321, 645, L"Запорожье"},
- {39, 321, 646, L"Мелитополь"},
- {39, 321, 3121, L"Приморск"},
- {39, 321, 3378, L"Энергодар"},
- {39, 321, 2560, L"Другое"},
- {39, 322, 3379, L"Галич"},
- {39, 322, 647, L"Ивано-Франковск"},
- {39, 322, 3170, L"Яремче"},
- {39, 322, 2559, L"Другое"},
- {39, 323, 648, L"Белая Церковь"},
- {39, 323, 649, L"Борисполь"},
- {39, 323, 651, L"Бровары"},
- {39, 323, 650, L"Васильков"},
- {39, 323, 652, L"Ирпень"},
- {39, 323, 3341, L"Переяслав-Хмельницкий"},
- {39, 323, 653, L"Славутич"},
- {39, 323, 654, L"Фастов"},
- {39, 323, 655, L"Чернобыль"},
- {39, 323, 2558, L"Другое"},
- {39, 324, 656, L"Александрия"},
- {39, 324, 657, L"Кировоград"},
- {39, 324, 658, L"Светловодск"},
- {39, 324, 2557, L"Другое"},
- {39, 325, 659, L"Алушта"},
- {39, 325, 2984, L"Армянск"},
- {39, 325, 3042, L"Балаклава"},
- {39, 325, 660, L"Бахчисарай"},
- {39, 325, 662, L"Гурзуф"},
- {39, 325, 3382, L"Джанкой"},
- {39, 325, 663, L"Евпатория"},
- {39, 325, 667, L"Керчь"},
- {39, 325, 666, L"Коктебель"},
- {39, 325, 668, L"Мысовое"},
- {39, 325, 669, L"Саки"},
- {39, 325, 665, L"Севастополь"},
- {39, 325, 661, L"Симферополь"},
- {39, 325, 3370, L"Старый Крым"},
- {39, 325, 670, L"Судак"},
- {39, 325, 664, L"Феодосия"},
- {39, 325, 3148, L"Черноморское"},
- {39, 325, 671, L"Ялта"},
- {39, 325, 2556, L"Другое"},
- {39, 326, 672, L"Алчевск"},
- {39, 326, 673, L"Антрацит"},
- {39, 326, 674, L"Лисичанск"},
- {39, 326, 675, L"Луганск"},
- {39, 326, 3364, L"Молодогвардейск"},
- {39, 326, 676, L"Петровское"},
- {39, 326, 677, L"Ровеньки"},
- {39, 326, 678, L"Рубежное"},
- {39, 326, 679, L"Северодонецк"},
- {39, 326, 680, L"Стаханов"},
- {39, 326, 2555, L"Другое"},
- {39, 327, 3284, L"Дрогобыч"},
- {39, 327, 681, L"Львов"},
- {39, 327, 682, L"Трускавец"},
- {39, 327, 2554, L"Другое"},
- {39, 328, 3322, L"Вознесенск"},
- {39, 328, 2870, L"Жовтневое"},
- {39, 328, 683, L"Николаев"},
- {39, 328, 3118, L"Очаков"},
- {39, 328, 3325, L"Южноукраинск"},
- {39, 328, 2553, L"Другое"},
- {39, 329, 684, L"Белгород-Днестровский"},
- {39, 329, 685, L"Измаил"},
- {39, 329, 689, L"Ильичевск"},
- {39, 329, 686, L"Одесса"},
- {39, 329, 688, L"Рени"},
- {39, 329, 687, L"Слободка"},
- {39, 329, 2552, L"Другое"},
- {39, 330, 690, L"Гадяч"},
- {39, 330, 691, L"Комсомольск"},
- {39, 330, 693, L"Кременчуг"},
- {39, 330, 694, L"Лубны"},
- {39, 330, 695, L"Миргород"},
- {39, 330, 692, L"Полтава"},
- {39, 330, 2551, L"Другое"},
- {39, 331, 696, L"Здолбунов"},
- {39, 331, 697, L"Ровно"},
- {39, 331, 3361, L"Сарны"},
- {39, 331, 2550, L"Другое"},
- {39, 332, 3356, L"Бурынь"},
- {39, 332, 698, L"Конотоп"},
- {39, 332, 700, L"Ромны"},
- {39, 332, 699, L"Сумы"},
- {39, 332, 701, L"Шостка"},
- {39, 332, 2549, L"Другое"},
- {39, 333, 702, L"Бережаны"},
- {39, 333, 3171, L"Борщев"},
- {39, 333, 703, L"Тернополь"},
- {39, 333, 704, L"Чортков"},
- {39, 333, 2548, L"Другое"},
- {39, 334, 705, L"Изюм"},
- {39, 334, 3346, L"Купянск"},
- {39, 334, 3351, L"Купянск"},
- {39, 334, 706, L"Лозовая"},
- {39, 334, 708, L"Мерефа"},
- {39, 334, 707, L"Харьков"},
- {39, 334, 709, L"Чугуев"},
- {39, 334, 2547, L"Другое"},
- {39, 335, 710, L"Геническ"},
- {39, 335, 711, L"Каховка"},
- {39, 335, 712, L"Новая Каховка"},
- {39, 335, 3280, L"Скадовск"},
- {39, 335, 713, L"Херсон"},
- {39, 335, 2546, L"Другое"},
- {39, 336, 714, L"Каменец-Подольский"},
- {39, 336, 715, L"Красилов"},
- {39, 336, 2941, L"Нетишин"},
- {39, 336, 716, L"Полонное"},
- {39, 336, 3120, L"Сатанов"},
- {39, 336, 2943, L"Славута"},
- {39, 336, 717, L"Хмельницкий"},
- {39, 336, 3155, L"Чемировцы"},
- {39, 336, 2542, L"Другое"},
- {39, 337, 3169, L"Золотоноша"},
- {39, 337, 3016, L"Канев"},
- {39, 337, 3333, L"Полонное"},
- {39, 337, 718, L"Умань"},
- {39, 337, 719, L"Христиновка"},
- {39, 337, 720, L"Черкассы"},
- {39, 337, 2545, L"Другое"},
- {39, 338, 721, L"Нежин"},
- {39, 338, 722, L"Прилуки"},
- {39, 338, 723, L"Чернигов"},
- {39, 338, 2544, L"Другое"},
- {39, 339, 724, L"Черновцы"},
- {39, 339, 2543, L"Другое"},
- {340, 342, 725, L"Барановичи"},
- {340, 342, 726, L"Белоозерск"},
- {340, 342, 727, L"Береза"},
- {340, 342, 728, L"Брест"},
- {340, 342, 3172, L"Дрогичин"},
- {340, 342, 729, L"Кобрин"},
- {340, 342, 730, L"Ляховичи"},
- {340, 342, 731, L"Малорита"},
- {340, 342, 732, L"Пинск"},
- {340, 342, 2538, L"Другое"},
- {340, 343, 733, L"Браслав"},
- {340, 343, 735, L"Витебск"},
- {340, 343, 734, L"Новолукомоль"},
- {340, 343, 736, L"Новополоцк"},
- {340, 343, 737, L"Орша"},
- {340, 343, 738, L"Толочин"},
- {340, 343, 2537, L"Другое"},
- {340, 344, 739, L"Гомель"},
- {340, 344, 740, L"Жлобин"},
- {340, 344, 741, L"Мозырь"},
- {340, 344, 742, L"Речица"},
- {340, 344, 743, L"Рогачев"},
- {340, 344, 744, L"Светлогорск"},
- {340, 344, 2536, L"Другое"},
- {340, 345, 745, L"Волковыск"},
- {340, 345, 746, L"Гродно"},
- {340, 345, 747, L"Лида"},
- {340, 345, 3244, L"Слоним"},
- {340, 345, 748, L"Сморгонь"},
- {340, 345, 2535, L"Другое"},
- {340, 346, 3149, L"Березино"},
- {340, 346, 749, L"Борисов"},
- {340, 346, 750, L"Вилейка"},
- {340, 346, 751, L"Жодино"},
- {340, 346, 752, L"Марьина Горка"},
- {340, 346, 753, L"Молодечно"},
- {340, 346, 2896, L"Слуцк"},
- {340, 346, 754, L"Смолевичи"},
- {340, 346, 755, L"Солигорск"},
- {340, 346, 756, L"Червень"},
- {340, 346, 2534, L"Другое"},
- {340, 347, 757, L"Бобруйск"},
- {340, 347, 758, L"Могилев"},
- {340, 347, 759, L"Осиповичи"},
- {340, 347, 2533, L"Другое"},
- {0, 0, 0, NULL}
-};
-
-
-
-
-#endif // !defined(AFX_MRA_PLACES_H__INCLUDED_) \ No newline at end of file
diff --git a/protocols/MRA/docs/TODO.txt b/protocols/MRA/docs/TODO.txt
deleted file mode 100644
index c4e6b7f193..0000000000
--- a/protocols/MRA/docs/TODO.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-настройки!!!
-
-Небольшой feature request:
-Вот, реализованна система, что при получении нового письма в попапе пишется имя отправителя и тема письма. Так вот хотелось бы, чтобы ещё и майловский аватар вставлялся в попап, если отправляется письмо с майла =)
-Если нет возможности ждать, пока подгрузится аватара из интернет, то можно хотя бы локальные аватары вставлять.
-Ещё можно в поле From вставлять имя из контакт-листа.
-
-
-
-MRA_PDA_INBOX_URL
-
-телефонные контакты
-
-группы на сервере
-
-Запрос ящика/пароля при первом запуске (для удобства создания сборок)
-
-Возможность апдейтером скачивать и ставить беты
-
-при туплении нужно каждые 10 сек кидать новую нотификацию пока не придёт PROTOTYPE_SELFTYPING_OFF
-
-запуск программы при приходе новой почты
-
-Загрузка на сервер аватары и инфы юзера из настроек миранды
-
-? добавить контакт OWNER, с временными атрибутами
-
-? Посылать бессмертные уведомления о туплении, вести свой учёт таймаута в очереди и полать самому отключение по таймауту или по событию \ No newline at end of file
diff --git a/protocols/MRA/docs/proto.htm b/protocols/MRA/docs/proto.htm
deleted file mode 100644
index ec334ffb30..0000000000
--- a/protocols/MRA/docs/proto.htm
+++ /dev/null
@@ -1,103 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- saved from url=(0028)http://agent.mail.ru/proto.h -->
-<HTML><HEAD>
-<META http-equiv=Content-Type content="text/html; charset=windows-1251">
-<META content="MSHTML 6.00.2900.2722" name=GENERATOR></HEAD>
-<BODY>//***************************************************************************
-// $Id: proto.h,v 1.141 2005/10/24 15:32:33 shingrus Exp $
-//***************************************************************************
-#ifndef MRIM_PROTO_H #define MRIM_PROTO_H #include <SYS types.h>#define
-PROTO_VERSION_MAJOR 1 #define PROTO_VERSION_MINOR 10 #define PROTO_VERSION
-((((u_long)(PROTO_VERSION_MAJOR))&lt;&lt;16)|(u_long)(PROTO_VERSION_MINOR))
-#define PROTO_MAJOR(p) (((p)&amp;0xFFFF0000)&gt;&gt;16) #define PROTO_MINOR(p)
-((p)&amp;0x0000FFFF) typedef struct mrim_packet_header_t { u_long magic; //
-Magic u_long proto; // u_long seq; // Sequence u_long msg; //
- u_long dlen; // u_long from; // u_long
-fromport; // u_char reserved[16]; // }
-mrim_packet_header_t; #define CS_MAGIC 0xDEADBEEF // Magic ( C
-&lt;-&gt; S )
-/***************************************************************************
- -
-***************************************************************************/
-#define MRIM_CS_HELLO 0x1001 // C -&gt; S // empty #define MRIM_CS_HELLO_ACK
-0x1002 // S -&gt; C // mrim_connection_params_t #define MRIM_CS_LOGIN_ACK 0x1004
-// S -&gt; C // empty #define MRIM_CS_LOGIN_REJ 0x1005 // S -&gt; C // LPS
-reason #define MRIM_CS_PING 0x1006 // C -&gt; S // empty #define MRIM_CS_MESSAGE
-0x1008 // C -&gt; S // UL flags // LPS to // LPS message // LPS rtf-formatted
-message (&gt;=1.1) #define MESSAGE_FLAG_OFFLINE 0x00000001 #define
-MESSAGE_FLAG_NORECV 0x00000004 #define MESSAGE_FLAG_AUTHORIZE 0x00000008 //
-X-MRIM-Flags: 00000008 #define MESSAGE_FLAG_SYSTEM 0x00000040 #define
-MESSAGE_FLAG_RTF 0x00000080 #define MESSAGE_FLAG_CONTACT 0x00000200 #define
-MESSAGE_FLAG_NOTIFY 0x00000400 #define MESSAGE_FLAG_MULTICAST 0x00001000 #define
-MAX_MULTICAST_RECIPIENTS 50 #define MESSAGE_USERFLAGS_MASK 0x000036A8 // Flags
-that user is allowed to set himself #define MRIM_CS_MESSAGE_ACK 0x1009 // S
--&gt; C // UL msg_id // UL flags // LPS from // LPS message // LPS rtf-formatted
-message (&gt;=1.1) #define MRIM_CS_MESSAGE_RECV 0x1011 // C -&gt; S // LPS from
-// UL msg_id #define MRIM_CS_MESSAGE_STATUS 0x1012 // S -&gt; C // UL status
-#define MESSAGE_DELIVERED 0x0000 // Message delivered directly to user #define
-MESSAGE_REJECTED_NOUSER 0x8001 // Message rejected - no such user #define
-MESSAGE_REJECTED_INTERR 0x8003 // Internal server error #define
-MESSAGE_REJECTED_LIMIT_EXCEEDED 0x8004 // Offline messages limit exceeded
-#define MESSAGE_REJECTED_TOO_LARGE 0x8005 // Message is too large #define
-MESSAGE_REJECTED_DENY_OFFMSG 0x8006 // User does not accept offline messages
-#define MRIM_CS_USER_STATUS 0x100F // S -&gt; C // UL status #define
-STATUS_OFFLINE 0x00000000 #define STATUS_ONLINE 0x00000001 #define STATUS_AWAY
-0x00000002 #define STATUS_UNDETERMINATED 0x00000003 #define
-STATUS_FLAG_INVISIBLE 0x80000000 // LPS user #define MRIM_CS_LOGOUT 0x1013 // S
--&gt; C // UL reason #define LOGOUT_NO_RELOGIN_FLAG 0x0010 // Logout due to
-double login #define MRIM_CS_CONNECTION_PARAMS 0x1014 // S -&gt; C //
-mrim_connection_params_t #define MRIM_CS_USER_INFO 0x1015 // S -&gt; C // (LPS
-key, LPS value)* X #define MRIM_CS_ADD_CONTACT 0x1019 // C -&gt; S // UL flags
-(group(2) or usual(0) // UL group id (unused if contact is group) // LPS contact
-// LPS name #define CONTACT_FLAG_REMOVED 0x00000001 #define CONTACT_FLAG_GROUP
-0x00000002 #define CONTACT_FLAG_INVISIBLE 0x00000004 #define
-CONTACT_FLAG_VISIBLE 0x00000008 #define CONTACT_FLAG_IGNORE 0x00000010 #define
-CONTACT_FLAG_SHADOW 0x00000020 #define MRIM_CS_ADD_CONTACT_ACK 0x101A // S -&gt;
-C // UL status // UL contact_id or (u_long)-1 if status is not OK #define
-CONTACT_OPER_SUCCESS 0x0000 #define CONTACT_OPER_ERROR 0x0001 #define
-CONTACT_OPER_INTERR 0x0002 #define CONTACT_OPER_NO_SUCH_USER 0x0003 #define
-CONTACT_OPER_INVALID_INFO 0x0004 #define CONTACT_OPER_USER_EXISTS 0x0005 #define
-CONTACT_OPER_GROUP_LIMIT 0x6 #define MRIM_CS_MODIFY_CONTACT 0x101B // C -&gt; S
-// UL id // UL flags - same as for MRIM_CS_ADD_CONTACT // UL group id (unused if
-contact is group) // LPS contact // LPS name #define MRIM_CS_MODIFY_CONTACT_ACK
-0x101C // S -&gt; C // UL status, same as for MRIM_CS_ADD_CONTACT_ACK #define
-MRIM_CS_OFFLINE_MESSAGE_ACK 0x101D // S -&gt; C // UIDL // LPS offline message
-#define MRIM_CS_DELETE_OFFLINE_MESSAGE 0x101E // C -&gt; S // UIDL #define
-MRIM_CS_AUTHORIZE 0x1020 // C -&gt; S // LPS user #define MRIM_CS_AUTHORIZE_ACK
-0x1021 // S -&gt; C // LPS user #define MRIM_CS_CHANGE_STATUS 0x1022 // C -&gt;
-S // UL new status #define MRIM_CS_GET_MPOP_SESSION 0x1024 // C -&gt; S #define
-MRIM_CS_MPOP_SESSION 0x1025 // S -&gt; C #define MRIM_GET_SESSION_FAIL 0 #define
-MRIM_GET_SESSION_SUCCESS 1 //UL status // LPS mpop session //white pages!
-#define MRIM_CS_WP_REQUEST 0x1029 //C-&gt;S //DWORD field, LPS value #define
-PARAMS_NUMBER_LIMIT 50 #define PARAM_VALUE_LENGTH_LIMIT 64 //if last symbol in
-value eq '*' it will be replaced by LIKE '%' // params define // must be in
-consecutive order (0..N) to quick check in check_anketa_info_request enum {
-MRIM_CS_WP_REQUEST_PARAM_USER = 0, MRIM_CS_WP_REQUEST_PARAM_DOMAIN,
-MRIM_CS_WP_REQUEST_PARAM_NICKNAME, MRIM_CS_WP_REQUEST_PARAM_FIRSTNAME,
-MRIM_CS_WP_REQUEST_PARAM_LASTNAME, MRIM_CS_WP_REQUEST_PARAM_SEX ,
-MRIM_CS_WP_REQUEST_PARAM_BIRTHDAY, MRIM_CS_WP_REQUEST_PARAM_DATE1 ,
-MRIM_CS_WP_REQUEST_PARAM_DATE2 , //!!!!!!!!!!!!!!!!!!!online request param must
-be at end of request!!!!!!!!!!!!!!! MRIM_CS_WP_REQUEST_PARAM_ONLINE ,
-MRIM_CS_WP_REQUEST_PARAM_STATUS , // we do not used it, yet
-MRIM_CS_WP_REQUEST_PARAM_CITY_ID, MRIM_CS_WP_REQUEST_PARAM_ZODIAC,
-MRIM_CS_WP_REQUEST_PARAM_BIRTHDAY_MONTH, MRIM_CS_WP_REQUEST_PARAM_BIRTHDAY_DAY,
-MRIM_CS_WP_REQUEST_PARAM_COUNTRY_ID, MRIM_CS_WP_REQUEST_PARAM_MAX }; #define
-MRIM_CS_ANKETA_INFO 0x1028 //S-&gt;C //DWORD status #define
-MRIM_ANKETA_INFO_STATUS_OK 1 #define MRIM_ANKETA_INFO_STATUS_NOUSER 0 #define
-MRIM_ANKETA_INFO_STATUS_DBERR 2 #define MRIM_ANKETA_INFO_STATUS_RATELIMERR 3
-//DWORD fields_num //DWORD max_rows //DWORD server_time sec since 1970
-(unixtime) // fields set //%fields_num == 0 //values set //%fields_num == 0
-//LPS value (numbers too) #define MRIM_CS_MAILBOX_STATUS 0x1033 //DWORD new
-messages in mailbox #define MRIM_CS_CONTACT_LIST2 0x1037 //S-&gt;C // UL status
-#define GET_CONTACTS_OK 0x0000 #define GET_CONTACTS_ERROR 0x0001 #define
-GET_CONTACTS_INTERR 0x0002 //DWORD status - if ...OK than this staff: //DWORD
-groups number //mask symbols table: //'s' - lps //'u' - unsigned long //'z' -
-zero terminated string //LPS groups fields mask //LPS contacts fields mask
-//group fields //contacts fields //groups mask 'us' == flags, name //contact
-mask 'uussuu' flags, flags, internal flags, status #define
-CONTACT_INTFLAG_NOT_AUTHORIZED 0x0001 //old packet cs_login with cs_statistic
-#define MRIM_CS_LOGIN2 0x1038 // C -&gt; S #define MAX_CLIENT_DESCRIPTION 256 //
-LPS login // LPS password // DWORD status //+ statistic packet data: // LPS
-client description //max 256 typedef struct mrim_connection_params_t { unsigned
-long ping_period; } mrim_connection_params_t; #endif // MRIM_PROTO_H
-</BODY></HTML>
diff --git a/protocols/MRA/docs/readme.txt b/protocols/MRA/docs/readme.txt
deleted file mode 100644
index faccb1fb1f..0000000000
--- a/protocols/MRA/docs/readme.txt
+++ /dev/null
@@ -1,502 +0,0 @@
-Mail.ru Агент плагин для Miranda IM
-
-Copyright (C) 2006-2011 Рожук Иван
-
-
- Плагин предназначен для общения по протоколу Mail.ru Агент.
-
-
- ВНИМАНИЕ!
- В плагине добавляющая синхронизация!
- Если вы загрузили в свой профиль список а потом поменяли логин и пароль, то
-к вам скачается список второго акаунта, а на сервер скачается список первого, и
-авторизация будет автоматически запрошенна у всех, кого дабавили на сервер.
-
- Для корректной работы антиспама нужно заполнить список плохих слов.
-
- Полноценная поддержка групп на сервере будет позже.
- Игры - не документировались, в случае документирования могу сделать только API для них.
- (Желающие сделать плагины для игр - обращатся приватом)
-
-
-
-Плагины добавляющие функциональность
-Здесь указаны только плагины, которые более полно раскрывают возможности протокола mail.ru Агент заложенные в плагин MRA
- PopUp - через него показываются различные уведомления, в том числе ошибки, предупреждения и уведомления о новой почте.
- mToolTip/Tipper - для показа дополнительно информации о контакте. См ниже шаблоны.
- SMS (sms.dll) - для отправки СМС сообщений и отображения ответов. Ответы также можно посмотреть в history++
- Nudge (nudge.dll) - функция будильника. Без него не будет кнопочки в диалоге и окно не будет трястись когда собеседник вас встряхивает, однако останется пункт в меню контакта и будет записыватся текстовое сообщение о том что собеседник пытается вас разбудить.
- WATrack (watrack.dll) - позволяет MRA оперативно обновлять на сайте то что играет у пользователя. Что бы смотреть что играет у собеседников этот плагин не нужен.
-
-
-
-Поддержка RTF (форматированного текста)
- Для поддержки форматированного текста нужно:
-- zlib.dll, без неё плагин не сможет распаковывать и запаковывать текст для передачи по сети, также нужна для флеш мультов (при приёме с ориг агента)
-- tabsramm и history++ плагины, в настройках tabsramm указываем использовать history++ для отображения,
-в настройках history++ включаем поддержку RTF
-
-
-Теперь о приятном:
-
- Пользователи look-in плагина, и других работающих с информацией контакта, MRA плагин записывает информацию так же как и ICQ.
- В настройках look-in плагина укажите использовать для MRA шаблон от ICQ.
-
- При передаче файлов можно указать описание к файлу, но пользователи агента его не увидят ;)
-
- Расширенный поиск позволяет искать не только по России, но и по другим странам, с возможностью выбора города/штата.
-
- Также желательно иметь Updater для своевременного автоматического обновления.
-
- Прокси настраивается в настройках сети (Network), раздельно: для обмена
-сообщениями и для загрузки аватар.
-
- Основной список и списки видимости, невидимости и игнор работают.
- Для того, чтобы добавить пользователя в игнор на сервере достаточно в настройках
-миранды поставить игнор на его СООБЩЕНИЯ, если поставить игнор на другие события от
-пользователя, то в игнор на сервере он не добавится и вы будете по прежнему получать
-от него все другие типы сообщений, например запросы на авторизацию, контакты и пр.
- При добавлении пользователя в игнор, он из списка не исчезнет, чтобы он исчез из списка нужно снять напротив него галочку в списке игнора. Агент от Mail.ru одновременно с игнорированием скрывает пользователя из основного списка.
-
- При запросе на авторизацию, если нажать на Deny, то пользователь автоматически не добавляется в игнор ни на сервере ни локально, но можно послать ему сообщение в появившемся окошке для ввода причины отказа.
-
- You were added - означает что вас авторизовали.
-
- Запрос на авторизацию посылается автоматически, при добавлении в список (так устроен протокол: комманда добавления в список на сервере автоматически генерирует запрос на авторизацию, если пользователя ещё не было в списке на сервере).
-
-
- Скрытые опции:
- "MRA"
-"NLBFailDirectConnect"(byte)=0
-В случае сбоя NLB сервера попытатся подключится напрямую к серверам mrim1.mail.ru - mrim8.mail.ru
-По умолчанию отключено.
-
-"UseDisplayModuleName"(byte)=1
-Использовать имя протокола в качестве отображаемоемого названия
-Требуется перезапуск.
-По умолчанию включено.
-
-"MirVerCustom"(str)=NULL
-Передавать заданную пользователем строку идентификации программы (которая отображается у собеседника), примеры:
-{client="magent" version="5.3" build="2544"}
-{client="jagent" version="2.1.8"}
-{client="QIP Infium" version="2.0" build="9024"}
-{client="magent" name="Miranda IM" title="Miranda IM 0.8.0.27 Unicode (MRA v1.16.0.4), version: 1.16" version="777.1.16.0" build="4" protocol="1.16"}
-(значение переменной писать в базу без {} в начале и конце строки)
-
-"MirVerRaw"(byte)=0
-Писать "MirVer" без форматирования, как выдаёт сервер, получается больше информации.
-По умолчанию отключено.
-
-"ConnectReTryCountMRIM"(dword)=2
-Колличество попыток подключится к серверу сообщений
-
-"ConnectReTryCountNLB"(dword)=3
-Колличество попыток подключится к серверу балансировки нагрузки
-
-"ConnectReTryCountFileSend"(dword)=2
-Колличество попыток подключится к ссобеседнику
-
-"ConnectReTryCountMRIMProxy"(dword)=3
-Колличество попыток подключится к ссобеседнику
-
-"TimeOutConnectMRIM"(dword)=16 *прим 1
-Время в секундах, в течении которого миранда ждёт ответа на подключение от сервера собщений
-2-16 секунд.
-
-"TimeOutConnectNLB"(dword)=16 *прим 1
-Время в секундах, в течении которого миранда ждёт ответа на подключение от сервера балансировки нагрузки
-2-16 секунд.
-
-"TimeOutReceiveNLB"(dword)=20 *прим 1
-Время в секундах, в течении которого миранда ждёт данных от сервера балансировки нагрузки
-По умолчанию 20 секунд.
-
-"TimeOutConnectFileSend"(dword)=auto *прим 1
-Время в секундах, в течении которого миранда ждёт ответа на подключение от собеседника
-Агент ждёт что к нему подключатся в течении 30 секунд, большое значение ставить смысла нет.
-Не забывайте, что у собеседника может быть медленное подключение.
-2-16 секунд.
-По умолчанию auto секунд (= 30/колличество адресов к которым подключатся).
-
-"TimeOutReceiveFileData"(dword)=600 *прим 1
-Время в секундах, в течении которого миранда ждёт содержимое файла от собеседника
-Не забывайте, что у собеседника может быть медленное подключение.
-По умолчанию 600 секунд.
-
-*прим 1: Для медленных/не устойчивых соединений (особенно GPRS) рекомендуется поставить на максимум.
-На быстрых соединениях, где не теряются пакеты, можно уменьшить до 5 секунд и менее.
-0 - ожидать не ограниченно долго в случае чтения или использовать системныые значения при подключении
-
-*прим 2: При передаче файлов общий таймаут на все соединения =30 секунд, если поставить колличество
-попыток подключения большим, то таймауты на каждое соединения снизятся до минимально возможных 2 секунд.
-Аналогично дела обстоят с MRIM прокси тайаутами.
-Для подключений к серверам майла (MRIM, NLB, Avatars) заданный таймаут применяется целиком для каждой
-попытки подключения.
-
-
-
- "MRA Avatars"
-"DefaultAvatarFileName"(str)="_default.jpg"
-Имя файла, используемое в качестве аватара по умолчанию.
-
-"WorkThreadsCount"(dword)=4
-Колличество потоков для загрузки аватров.
-Определяет сколько одновременно аватаров может скачиватся с сервера: от 1 до 64.
-По умолчанию 4.
-
-"ConnectReTryCount"(dword)=3
-Колличество попыток подключится к серверу аватаров
-
-"TimeOutConnect"(dword)=16
-Время в секундах, в течении которого миранда ждёт ответа на подключение от сервера аватаров
-Не забывайте, что у вас может быть медленное подключение.
-2-16 секунд.
-
-"TimeOutReceive"(dword)=30
-Время в секундах, в течении которого миранда ждёт ответа от собеседника сервера аватаров
-По умолчанию 30 секунд.
-
-
-
-Шаблон для mToolTip:
-%sicon%photo
-%#%lsstatus|%%%%|, %lsday|%%%%|.%lsmonth|%%%%|.%lsyear|%%%%| @ %lshours|%%%%|:%lsminutes|%%%%|:%lsseconds|%%%%|
-%#<b>%lname|%%%%|</b> (%first|%%%%| %last|%%%%|%gender|, %%%%|)
-%#<b>Online since:</b>%tab%logondate|%%%%| @ %logontime|%%%%| (%logonsince|%%%%|)
-%%<b>Email:</b>%tab%tab%mail|%%%%|
-%%<b>Phone:</b>%tab%phone|%%%%|
-%%<b>Cellular:</b>%tab%cell|%%%%|
-%#<b>Age:</b>%tab%tab%age|%%%%| (%bday|%%%%|.%bmonth|%%%%|.%byear|%%%%|)%dtb|, to birthday: %%%%|
-%%<b>Location:</b>%tab%user_About|%%%%|
-%#<b>Сlient:</b>%tab%tab%mver|%%%%|
-%#<b>IP:</b>%tab%tab%ip|%%%% |%realip|(%%%%)|
-%#<b>Last info time:</b>%infodate|%%%%| @ %infotime|%%%%|
-%%<b>Avatar upd time:</b> %user_MRAAvatarLastModifiedTime|%%%%|
-%#%smsg||%user_XStatusName||%user_XStatusMsg||%line%
-%%%user_XStatusName||
-%%<b>X-Status:</b> %user_XStatusName|%%%%|
-%%<b>X-status message:</b> %user_XStatusMsg|%%%%|
-%%<b>Blog message:</b> %smsg||%smsg|%%%%|
-%%<b>Listening:</b> %user_ListeningTo|%%%%|
-%%%notes||————————————————————————————————————
-%%<b>Notes:</b>%notes||
-%%%notes|%%%%|
-%%Logging:%tab%ilog|%%%%|
-%#%lastmsg||%lastmsgdate||%lastmsgtime||————————————————————————————————————
-%#<b>Last message (%lastmsgdate|%%%%| @ %lastmsgtime|%%%%|):%lastmsg||</b>
-%#%lastmsg|%%%%|%lastmsgdate||%lastmsgtime||
-
-в файл mToolTip.ini добавить:
-[MRAAvatarLastCheckTime]
-DBSet=AvatarLastCheckTime
-DBTrans=1
-
-[MRAAvatarLastModifiedTime]
-DBSet=AvatarLastModifiedTime
-DBTrans=1
-
-[MRABlogStatus]
-DBSet=BlogStatus
-
-[ListeningTo]
-DBSet=ListeningTo
-
-[XStatusName]
-DBSet=XStatusName
-
-[XStatusMsg]
-DBSet=XStatusMsg
-
-[About]
-DBSet=About
-
-
-
-Шаблон для Tipper YM от Black Roland ( http://www.rozhuk.org.ru/forum/index.php?action=profile;u=142 )
-http://www.rozhuk.org.ru/forum/index.php?topic=3.msg840#msg840
-
-
-
-Change Log:
-
-Version 1.20.0.1 // 2008.10
- - Портабельность в x64
- - Добавлена поддержка отображения записей микроблога (как mode message)
- - Добавлена поддержка отправки записей в микроблог: свой через главное меню, ответ через контекстное меню контакта
- - Добавлена поддержка чата (конференций)
- - Добавлен поиск по городам, сохранение параметров поиска
- - Добавлен статус: знакомлюсь
- - Добавлена поддержка Extra Icons Service (extraicons.dll) плагина
- - Добавлена поддержка WATrack (watrack.dll) плагина
- - Добавлена поддержка ListeningTo протокола/расширения
- - Добавлена поддержка обмена файлами более 4Гб
- - Добавлена обработка анси флага в сообщениях
- - Добавлена опция в фильтр спама для игнорирования всего, кроме букв и цифр при проверке сообщения
- - Добавлена опция в фильтр спама, позволяющая задать максимальное колличество смен языков (для случаев когда заменяют русские буквы на сходные по отображению иностранные)
- - Добавлен WatchDog: если основной поток завершится с ошибкой - плагин перейдёт в оффлайн, если основной поток не оветит в течении минуты то будет уничтожен и плагин перейдёт в оффлайн
- - Увеличена скорость проверки сообщений антиспамом
- - Добавлены скрытые опции на колличество попыток исходящего подключения
- - Улучшена поддержка аватаров: изменён путь для кеша аватаров на %miranda_avatarcache%; проверки на обновление аватаров при каждой смене онлайн статуса, но не чаще, чем в настройках
- - Улучшен алгоритм поиска вспомогательных библиотек (zlib.dll, xstatus_MRA.dll)
- - Уменьшено колличество обращений к базе при неудачных попытках подключения
- - Пароль можно только установить, не отображается даже количество символов в диалоге настройки учётной записи
- - Во всех меню и IcoLib используется юникод
- - Иконки в IcoLib рассортированны по секциям
- - Иконки Х-статусов добавлены в IcoLib
- - Иконки Х-статусов и доп инфы разнесены в разные слоты, чтобы не перекрывать друг друга
- - "BlogStatusMusic" переименовано в "ListeningTo"
- - Пароль в базе хранится в шифрованном виде, для предотвращения использования утилит вытаскивающих пароль с базы и хищения паролей вирусами
- - Уменьшен размер за счёт удаление всего CRT кода и сишных библиотек, сжата географическая база расширенного поиска
- - В диалоге поиска и инфе контакта корректно выставляется возраст
- - QueueUserAPC больше не используется, попапы показываются из основного потока
- - Исправлен недочёт с некорректными именами файлов при приёме
- - Исправлен недочёт, когда в некоторых случаях плагин не мог переподключится до перезапуска миранды
- - Исправлено: с некоторыми версиями ядра плагин не мог найти библиотеку иконок х-статусов
- - Исправлено: не подставлялся адрес почты, в случаях когда у контакта несколько почтовых ящиков
- - Исправлено: антиспам мог удалить контакта из списка, в случае когда при логоне не был получен список пользователей с сервера
- - Исправлено: после обновления информации контакта, если его ящик удалён с сервера - появится соотвествующая иконка
- - Исправлено: при отсутствии xstatus_MRA.dll отображались произвольные иконки (demon_lite)
- - Исправлено: аватары автоматически не обновлялись
- - Исправлено: при запуске некоторые плагины устанавливали время последнего изменения статуса на время запуска миранды
- - Исправлено: не удавалось принять файл на 0.8.0.30 и более поздних версиях миранды
- - Исправлено: работа с псевдонимом (ником) контакта, который хранится на сервере: в агенте могли отображатся каракули после переименования контакта в миранде
- - Исправлено: при приёме/отправке SMS сообщений не производилось кодирование спец символов для XML
- - Исправлено: скрытая опция MirVerCustom не срабатывала
- - Исправлено: короткие пароли невозможно было сохранить
-
-Version 1.16.0.3 // 2008.09.16
- - Поддержка Unicode протоколом
- - Поддержка Folders плагина
- - Добавлена опция: Пожаловатся на спам
- - Автоматически определяется собственный внешний IP адрес
- - Автоматически запрашивается информация и загружается автар для новых контактов
- - Оптимизация работы с иконками, спасибо Г. Хазан
- - В уведомлении о новой почте отображается аватарка и доп элементы управления, если отправитель в списке
- - В уведомлении об изменении невидимости отображается аватарка и доп элементы управления
- - В уведомлении блокированном как спам сообщении можно прочитать само сообщение
- - Исправлена критическая ошибка, которая могла происходить после обмена файлами или при завершении приложения
- - Исправлен недочёт: когда происходила ошибка при передаче файла миранда не сообщала об ошибке и продолжала находится в состоянии установления подключения
- - Оптимизирована обработка сообщений
- - Полностью обновлён алгоритм получения оффлайновых сообщений
-
-
-Version 1.14.0.6 // 2008.02
- - Поддержка Unicode плагином
-
-Version 1.14.0.5 // 2008.01.30
- - Совместимость в 0.8 ядром миранды
- - Исправлено: затиралась версия клиента при отключении
- - Исправлено: вместо "Чат" выставлялся статус "Не беспокоить"
- - другие мелкие исправления и улучшения
-
-Version 1.14.0.3 // 2008.01.20
- - Добавлена поддержка расширеных статусов
- - Добавлена поддержка текстовых статусных сообщений
- - Добавлено определение версии клиента собеседника через сервер
- - Добавлен пункт меню для видео
- - Добавлен пункт меню для ответов
- - Добавлен пункт меню для мира
- - Доработана отправка мультов
- - Доработана отправка будильника
- - Изменён формат номера при отправке SMS сообщений
- - Изменена строка идентификации клиента (User agent), для статистики на сервере
- - Исправлена отправка открыток
-
-Version 1.13.29.1 // 2007.08.10
- - Добавлена поддержка передачи файлов через прокси сервер mail.ru
- - Оповещение новой почты показывает раширенную информацию
- - Изменена работа с авторизацией: добавлено сообщение запроса, сообщения оторажаются
- - Добавлены опции для автоматической раздачи авторизации
- - Добавлена опция Click to Inbox (Проверить почту щелчком)
- - zlib: загружается динамически (убран из кода)
- - zlib: используется самый высокий уровень сжатия (9, вместо 6)
- - Изменена работа спам фильтра: фильтруется всё, кроме: системных сообщений, контактов, смс сообщений/отчётов о доставке, будильника и уведомлений о наборе текста
- - Улучшена совместимость с clist_modern
- - Изменена работа со списком на сервере: не обновляются данные контактов в профиле при каждом входе
- - Дополнительные телефонные номера сохраняются с сервера в список, при добавлении контакта
- - Увеличена скорость загрузки/обновления аватаров
- - При использование HTTPS прокси, порт заменяется на 443 (те игнорируется настройка порта в плагине)
- - Уменьшена нагрузка на основной поток миранды
- - Пополнен спам фильтр
- - Исправлена ошибка: иногда протокол повторно не переподключался до перезапуска миранды
-
-
-Version 1.8.0.27 // 2007.02.24
- - Улучшена поддержка RTF на передачу
- - Исправлено: падение при получении некоторых сообщений с включённым антиспамом
- - Исправлено: отображение пунктов меню для контактов
-
-Version 1.8.0.25 // 2007.02.20
- - Ипользуются новые сервисы миранды (минимум 0.6.0.100 версия)
- - Улучшена работа с сетью: добавлены таймауты операций
- - Добавлена поддержка игр (собеседник получает отказ автоматически :))
- - Добавлены уведомления, в том числе затрагивающие невидимость
- - Добавлена опция: Smart RTF - Умная отправка (только если клиент понимает RTF)
- - Добавлены коды и подробные описания ошибок
- - Добавлены опции для антиспама
- - Уведомление о доставке сообщений признаных спамом не отправляется
- - Список антиспама по умолчанию дополнен
- - Корректно записывается версия миранды, плагина собеседника и наличие Secure IM
- - Исправлено падение при обмене файлами
- - и другие добавления, изменения и исправления
-
-Version 1.8.0.23
- - Добавлен антиспам
- - Добавлена поддержка RTF на приём, см http://community.livejournal.com/ru_mirandaim/494383.html
- - Улучшен конвертер исходящих сообщений в RTF: поддержка BB кодов (спасибо MadBrozzeR)
- - Добавлена поддержка приёма сообщений Будильника (для отправки нужен Nudge плагин) и флеш мультиков (нужен обновлёный набор смайлов)
- - Добавлена поддержка плагина Nudge (для будильника)
- - Добавлено определение версии клиента собеседника
- - Добавлен скрытый параметр "UseDisplayModuleName"
- - Изменён алгоритм приёма (актуально для очень медленных и не устойчивых подключений и при большом контакт листе - около 1000 контактов)
- - Повторяющиеся контакты фильтруются (больше нет предупреждения из за службы поддержки)
- - Изменён алгоритм подключения: плагин не подключается, если не введён логин и пароль
-
-Version 1.8.0.21
- - Отправка SMS и получение ответов (требуется SMS.dll 0.2.4.9 и старше, см форум)
- - Табы в настройках, добавленны опции
- - Настройки попапов
- - Иконка в трее при получении новой почты
- - Совместимость со StartupStatus
- - Собственный аватар отображается сразу после загрузки
- - Изменён алгоритм загрузки аватаров для экономии траффика
- - Оптимизированы конвертеры текста
- - Исправлено: индикатор при передаче/приёме файла мог не доходить до 100%, но файл передавался полностью
- - Исправлено: подсчёт возраста в диалоге рассширенного поиска
- - Исправлено: алгоритм подключения, в том числе немедленное отключение при налиции пустого MRA контакта
- - Исправлено: временные контакты больше не добавляются в список на сервер
-
-Version 1.8.0.19 // 2006.07.19
- - Добавлена поддержка IcoLib
- - Показывается собственный аватар (загружается при логоне)
- - Появилась возможность загружать несколько копий плагина
- - "View Alboom" переименовано в "View Album"
- - Иконки заменены более качественными, спасибо Михаилу Юрьеву
- - Добавлена расширенная иконка для "Телефонных" контактов
- - Телефонные контакты временно отключены (не будут отображатся)
- - Исправлен алгоритм подключения и работы со статусом
-
-Version 1.8.0.17 // 2006.07.14
- - Не правильно работал игнор, ПРОВЕРЬТЕ ВАШ ИГНОР ЛИСТ!
- - В окошке выбора e-mail записи больше не дублируются
- - Пункты меню не скрывались для контактов у которых нет e-mail
- - Не работали меню для своего альбома и блога
- - При добавлении контакта посылалось два запроса
- - Закреплена 1251 станица для конвертирования из юникодов
-
-Version 1.8.0.15
- - Добавлен пункт меню, позволяющий обновить информацию у всех контактов MRA
- - Добавлен пункт меню, позволяющий обновить образы (аватарки) у всех контактов MRA
- - Добавленна поддержка юникодов для ников (исправленна проблема с переименованием контактов, тестировалось на clist_mw.dll, clist_modern.dll - возможны проблемы.)
- - Убраны проблемы совместимости с плагинами, которые считают что плагин не в сети (NewStatusNotify и проч)
- - Отправлять открытки теперь можно любому контакту у которого есть email
- - Можно смотреть фотоальбом и читать блог любого контакта, у которого прописан email относящийся к mail.ru
- - Мелкие изменения (перманентное добавление в список - контакты оказывались скрытыми)
- - Номера записываются раздельно: Основной телефон=primary, Доп. телефон 1=сотовый, Доп. телефон 2=факс
-
-Version 1.8.0.13 // 2006.06.23
- - Устранена утечка ресурсов при обновлении аватарок
- - Изменён алгоритм переименовая контактов на сервере - меньше проблем с юникодами
-
-Version 1.8.0.11 // 2006.06.16
- - Добавлен пункт меню для быстрого входа в чат
- - Добавлена расширенная иконка для контактов чьи ящики удалены с сервера
- - Уточнены сообщения выводимые при передаче/приёме файлов
-
-Version 1.8.0.9 // 2006.06.12
- - Экстра иконки контактов других плагинов теперь не затираются
- - Изменен набор опций для передачи файлов
-
-Version 1.8.0.7 // 2006.05.28
- - Добавлены экстра иконки для тех кто не авторизовал и кого нет в списке на сервере
- - Исправлена ошибка, возникавшая при передаче более, чем одного файла
- - Улучшен алгоритм передачи файлов
- - Добавлена опция позволяющая отключить автоматическое добавление контактов на сервер
- - Добавлен пункт меню, позволяющий запросить автоматически авторизацию у всех, кто ещё не атворизовал
-
-Version 1.8.0.5 // 2006.05.26
- - Улучшен алгоритм подключения: в случае сбоя NLB сервера начинаются попытки подключения напрямую к серверам mrim1.mail.ru - mrim8.mail.ru
-
-Version 1.8.0.3 // 2006.04.03
- - Измён алгоритм расчёта времени оффлайновых сообщений
- - Аватар по умолчанию больше не удаляется при удалении контактов
- - Добавлена опция для отключения загрузки аватар из сети
- - Добавлена опция позволяющая скрыть свой IP адрес при обмене файлами (отправляется 192.168.0.1:26775, возможно из за этого не удастся обменятся файлами)
- - Добавлена опция позволяющая указать дополнительные адреса и порты (может пригодится тем кто за NAT и тп)
- - Добавлена опция опция позволяющая задать порт для обмена файлами (в некоторых случаях нельзя будет принимать/передавать более, чем одному человеку одновременно)
-
-Version 1.8.0.1 // 2006.03.16
- - Полная поддержка передачи файлов
- - Мелкие изменения
-
-Version 1.0.0.33 // 2006.03.11
- - Добавлена поддержка зеркальных соединений
- - Добавлена запись в базу "MirVer", для лучшей совместимости с fingerprint
- - Исправлена ошибка при отправке сообщений с включённым преобразованием смайликов
-
-Version 1.0.0.31 // 2006.03.05
- - Профиксена обработка анкетных данных
- - "Undefined message deliver error" - больше не появляется
-
-Version 1.0.0.29 // 2006.02.17
- - Реализовано получение файлов
- - Аватары заработали через прокси (спасибо Yuri Ermakov)
- - Преобразование смаликов в теги для отправляемого текста можно отключить совсем
-
-Version 1.0.0.27 // 2006.01.27
- - Улучшена работа со списком на сервере
- - Улучшен алгоритм поиска контактов
-
-Version 1.0.0.25 // 2006.01.17
- - Пустой аватар больше не скачивается, показывается: MRA\_default.jpg
- - По умолчанию файл аватара удаляется при удалении контакта
- - Убрана зависимость от msvcr70.dll
-
-Version 1.0.0.23 // 2006.01.16
- - Исправлено преобразование смайлов в теги.
-
-Version 1.0.0.21 // 2006.01.15
- - Добавлено прозрачное преобразование смайлов в теги и обратно, в тч для обычного текста
-
-Version 1.0.0.19 // 2006.01.15
- - Добавлена поддержка RTF сообщений на отправку, и смайлов отображаемых в агенте
- - Добавлена настройка указывающая плагину возвращать полный путь к файлу аватара
- - Добавлен пункт меню для быстрого доступа к собственному фотоальбому
- - Улучшен алгоритм подключения (получение информации от NLB сервера)
- - "Запрос на авторизацию" и уведомление "Вас добавили" записываются в системную историю
- - Отправить открытку работало не для всех пользователей
-
-Version 1.0.0.17 // 2006.01.13
- - Улучшена работа на быстрых соединениях
-
-Version 1.0.0.15 // 2006.01.10
- - Исправленно: уведомление "вам пишут" воспринималось как сообщение (только в 1.0.0.11)
-
-Version 1.0.0.11 // 2006.01.10
- - Добавлен пункт меню для быстрого доступа к собственному блогу
- - Добавлен пункт меню для Zhuki.mail.ru
- - Более корректно вычисляется возраст
- - Очистка очереди не отправленных/не доставленных сообщений
-
-Version 1.0.0.9 // 2006.01.07
- - TzSpecificLocalTimeToSystemTime больше не используется, для совместимости с Microsoft Windows 2000
-
-Version 1.0.0.7 // 2006.01.06
- - Теперь статус ящика можно посмотреть через пунк в меню (количество не прочитанных/всего сообщений)
- - Добавлен звук при приходе новой почты
- - Можно быстро отправить поздравительную открытку, добавлен пункт меню
- - Добавлен пункт меню для чтения блога пользователя
- - Добавлен поиск в вебе от Mail.ru
- - Улучшена обработка списка с сервера, при первом запуске: автоматичеки загружается информация и аватары
- - Исправлено: в расширенном поиске требовалось задать город
-
-Version 1.0.0.5 // 2006.01.03
- - Убрано сообщение о неверных данных для временных контактов.
- - Более корректно выставляется статус.
- - Улучшен алгоритм подключения.
- - "MRA_proto.dll" переименован в "proto_MRA.dll".
- - Список стран сортируется по алфавиту.
-
-Version 1.0.0.3 // 2005.12.31
- - Первый публичный релиз \ No newline at end of file
diff --git a/protocols/MRA/docs/region.txt b/protocols/MRA/docs/region.txt
deleted file mode 100644
index 181fd1e25b..0000000000
--- a/protocols/MRA/docs/region.txt
+++ /dev/null
@@ -1,3353 +0,0 @@
-id city_id country_id name
-24 0 24 Россия
-25 25 24 Россия,Москва
-1734 25 24 Россия,Москва,г. Зеленоград
-3256 25 24 Россия,Москва,Восточный АО
-1503 25 24 Россия,Москва,Восточный АО,ст. Авиамоторная
-1507 25 24 Россия,Москва,Восточный АО,ст. Выхино
-1435 25 24 Россия,Москва,Восточный АО,ст. Измайловская
-1434 25 24 Россия,Москва,Восточный АО,ст. Измайловский парк
-1506 25 24 Россия,Москва,Восточный АО,ст. Новогиреево
-1436 25 24 Россия,Москва,Восточный АО,ст. Первомайская
-1505 25 24 Россия,Москва,Восточный АО,ст. Перово
-1324 25 24 Россия,Москва,Восточный АО,ст. Преображенская площадь
-1433 25 24 Россия,Москва,Восточный АО,ст. Семеновская
-1325 25 24 Россия,Москва,Восточный АО,ст. Сокольники
-534 25 24 Россия,Москва,Восточный АО,ст. Улица Подбельского
-1323 25 24 Россия,Москва,Восточный АО,ст. Черкизовская
-1504 25 24 Россия,Москва,Восточный АО,ст. Шоссе Энтузиастов
-1437 25 24 Россия,Москва,Восточный АО,ст. Щелковская
-1432 25 24 Россия,Москва,Восточный АО,ст. Электрозаводская
-3260 25 24 Россия,Москва,Западный АО
-1422 25 24 Россия,Москва,Западный АО,ст. Багратионовская
-1616 25 24 Россия,Москва,Западный АО,ст. Киевская
-1418 25 24 Россия,Москва,Западный АО,ст. Крылатское
-1420 25 24 Россия,Москва,Западный АО,ст. Кунцевская
-1425 25 24 Россия,Москва,Западный АО,ст. Кутузовская
-1419 25 24 Россия,Москва,Западный АО,ст. Молодежная
-3187 25 24 Россия,Москва,Западный АО,ст. Парк Победы
-1421 25 24 Россия,Москва,Западный АО,ст. Пионерская
-1336 25 24 Россия,Москва,Западный АО,ст. Проспект Вернадского
-1426 25 24 Россия,Москва,Западный АО,ст. Студенческая
-1423 25 24 Россия,Москва,Западный АО,ст. Филевский парк
-1424 25 24 Россия,Москва,Западный АО,ст. Фили
-1337 25 24 Россия,Москва,Западный АО,ст. Юго-Западная
-3254 25 24 Россия,Москва,Северный АО
-1517 25 24 Россия,Москва,Северный АО,ст. Беговая
-1614 25 24 Россия,Москва,Северный АО,ст. Белорусская
-1609 25 24 Россия,Москва,Северный АО,ст. Аэропорт
-1612 25 24 Россия,Москва,Северный АО,ст. Водный стадион
-1611 25 24 Россия,Москва,Северный АО,ст. Войковская
-1608 25 24 Россия,Москва,Северный АО,ст. Динамо
-1282 25 24 Россия,Москва,Северный АО,ст. Дмитровская
-1280 25 24 Россия,Москва,Северный АО,ст. Петровско-Разумовская
-1518 25 24 Россия,Москва,Северный АО,ст. Полежаевская
-1613 25 24 Россия,Москва,Северный АО,ст. Речной вокзал
-1283 25 24 Россия,Москва,Северный АО,ст. Савеловская
-1610 25 24 Россия,Москва,Северный АО,ст. Сокол
-1281 25 24 Россия,Москва,Северный АО,ст. Тимирязевская
-3255 25 24 Россия,Москва,Северо-восточный АО
-1316 25 24 Россия,Москва,Северо-восточный АО,ст. Рижская
-1276 25 24 Россия,Москва,Северо-восточный АО,ст. Алтуфьево
-1317 25 24 Россия,Москва,Северо-восточный АО,ст. Алексеевская
-1321 25 24 Россия,Москва,Северо-восточный АО,ст. Бабушкинская
-1277 25 24 Россия,Москва,Северо-восточный АО,ст. Бибирево
-1319 25 24 Россия,Москва,Северо-восточный АО,ст. Ботанический сад
-1318 25 24 Россия,Москва,Северо-восточный АО,ст. ВДНХ
-1279 25 24 Россия,Москва,Северо-восточный АО,ст. Владыкино
-1322 25 24 Россия,Москва,Северо-восточный АО,ст. Медведково
-1278 25 24 Россия,Москва,Северо-восточный АО,ст. Отрадное
-1320 25 24 Россия,Москва,Северо-восточный АО,ст. Свиблово
-3261 25 24 Россия,Москва,Северо-западный АО
-1519 25 24 Россия,Москва,Северо-западный АО,ст. Октябрьское поле
-1523 25 24 Россия,Москва,Северо-западный АО,ст. Планерная
-1522 25 24 Россия,Москва,Северо-западный АО,ст. Сходненская
-1521 25 24 Россия,Москва,Северо-западный АО,ст. Тушинская
-1520 25 24 Россия,Москва,Северо-западный АО,ст. Щукинская
-3251 25 24 Россия,Москва,Центральный АО
-1429 25 24 Россия,Москва,Центральный АО,ст. Александровский сад
-1428 25 24 Россия,Москва,Центральный АО,ст. Арбатская
-1515 25 24 Россия,Москва,Центральный АО,ст. Баррикадная
-1431 25 24 Россия,Москва,Центральный АО,ст. Бауманская
-1331 25 24 Россия,Москва,Центральный АО,ст. Библиотека им. Ленина
-1287 25 24 Россия,Москва,Центральный АО,ст. Боровицкая
-1618 25 24 Россия,Москва,Центральный АО,ст. Добрынинская
-1313 25 24 Россия,Москва,Центральный АО,ст. Китай-город
-1622 25 24 Россия,Москва,Центральный АО,ст. Комсомольская
-1615 25 24 Россия,Москва,Центральный АО,ст. Краснопресненская
-1326 25 24 Россия,Москва,Центральный АО,ст. Красносельская
-1327 25 24 Россия,Москва,Центральный АО,ст. Красные ворота
-1586 25 24 Россия,Москва,Центральный АО,ст. Крестьянская застава
-3132 25 24 Россия,Москва,Центральный АО,ст. Кропоткинская
-1513 25 24 Россия,Москва,Центральный АО,ст. Кузнецкий мост
-1621 25 24 Россия,Москва,Центральный АО,ст. Курская
-1329 25 24 Россия,Москва,Центральный АО,ст. Лубянка
-1501 25 24 Россия,Москва,Центральный АО,ст. Марксистская
-1607 25 24 Россия,Москва,Центральный АО,ст. Маяковская
-1284 25 24 Россия,Москва,Центральный АО,ст. Менделеевская
-1604 25 24 Россия,Москва,Центральный АО,ст. Новокузнецкая
-1624 25 24 Россия,Москва,Центральный АО,ст. Новослободская
-1311 25 24 Россия,Москва,Центральный АО,ст. Октябрьская
-1330 25 24 Россия,Москва,Центральный АО,ст. Охотный ряд
-1619 25 24 Россия,Москва,Центральный АО,ст. Павелецкая
-1617 25 24 Россия,Москва,Центральный АО,ст. Парк Культуры
-1502 25 24 Россия,Москва,Центральный АО,ст. Площадь Ильича
-1430 25 24 Россия,Москва,Центральный АО,ст. Площадь Революции
-1288 25 24 Россия,Москва,Центральный АО,ст. Полянка
-1512 25 24 Россия,Москва,Центральный АО,ст. Пролетарская
-1623 25 24 Россия,Москва,Центральный АО,ст. Проспект Мира
-1514 25 24 Россия,Москва,Центральный АО,ст. Пушкинская
-1584 25 24 Россия,Москва,Центральный АО,ст. Римская
-1289 25 24 Россия,Москва,Центральный АО,ст. Серпуховская
-1427 25 24 Россия,Москва,Центральный АО,ст. Смоленская
-1333 25 24 Россия,Москва,Центральный АО,ст. Спортивная
-1315 25 24 Россия,Москва,Центральный АО,ст. Сухаревская
-1620 25 24 Россия,Москва,Центральный АО,ст. Таганская
-1606 25 24 Россия,Москва,Центральный АО,ст. Тверская
-1605 25 24 Россия,Москва,Центральный АО,ст. Театральная
-1312 25 24 Россия,Москва,Центральный АО,ст. Третьяковская
-3253 25 24 Россия,Москва,Центральный АО,ст. Тургеневская
-1516 25 24 Россия,Москва,Центральный АО,ст. Улица 1905 года
-1332 25 24 Россия,Москва,Центральный АО,ст. Фрунзенская
-1285 25 24 Россия,Москва,Центральный АО,ст. Цветной бульвар
-1286 25 24 Россия,Москва,Центральный АО,ст. Чеховская
-1328 25 24 Россия,Москва,Центральный АО,ст. Чистые пруды
-1585 25 24 Россия,Москва,Центральный АО,ст. Чкаловская
-3257 25 24 Россия,Москва,Юго-восточный АО
-1592 25 24 Россия,Москва,Юго-восточный АО,ст. Братиславская
-1511 25 24 Россия,Москва,Юго-восточный АО,ст. Волгоградский проспект
-1590 25 24 Россия,Москва,Юго-восточный АО,ст. Волжская
-1587 25 24 Россия,Москва,Юго-восточный АО,ст. Дубровка
-1588 25 24 Россия,Москва,Юго-восточный АО,ст. Кожуховская
-1509 25 24 Россия,Москва,Юго-восточный АО,ст. Кузьминки
-1591 25 24 Россия,Москва,Юго-восточный АО,ст. Люблино
-1593 25 24 Россия,Москва,Юго-восточный АО,ст. Марьино
-1589 25 24 Россия,Москва,Юго-восточный АО,ст. Печатники
-1508 25 24 Россия,Москва,Юго-восточный АО,ст. Рязанский проспект
-1510 25 24 Россия,Москва,Юго-восточный АО,ст. Текстильщики
-3259 25 24 Россия,Москва,Юго-западный АО
-1309 25 24 Россия,Москва,Юго-западный АО,ст. Ленинский проспект
-1295 25 24 Россия,Москва,Юго-западный АО,ст. Чертановская
-1308 25 24 Россия,Москва,Юго-западный АО,ст. Академическая
-1304 25 24 Россия,Москва,Юго-западный АО,ст. Беляево
-1300 25 24 Россия,Москва,Юго-западный АО,ст. Битцевский парк
-3188 25 24 Россия,Москва,Юго-западный АО,ст. Бульвар Дмитрия Донского
-1305 25 24 Россия,Москва,Юго-западный АО,ст. Калужская
-1595 25 24 Россия,Москва,Юго-западный АО,ст. Каховская
-1303 25 24 Россия,Москва,Юго-западный АО,ст. Коньково
-1334 25 24 Россия,Москва,Юго-западный АО,ст. Ленинские горы
-1293 25 24 Россия,Москва,Юго-западный АО,ст. Нахимовский проспект
-1306 25 24 Россия,Москва,Юго-западный АО,ст. Новые Черемушки
-1307 25 24 Россия,Москва,Юго-западный АО,ст. Профсоюзная
-1294 25 24 Россия,Москва,Юго-западный АО,ст. Севастопольская
-1302 25 24 Россия,Москва,Юго-западный АО,ст. Теплый Стан
-1335 25 24 Россия,Москва,Юго-западный АО,ст. Университет
-1301 25 24 Россия,Москва,Юго-западный АО,ст. Ясенево
-3258 25 24 Россия,Москва,Южный АО
-1603 25 24 Россия,Москва,Южный АО,ст. Автозаводская
-1298 25 24 Россия,Москва,Южный АО,ст. Аннино
-1594 25 24 Россия,Москва,Южный АО,ст. Варшавская
-1597 25 24 Россия,Москва,Южный АО,ст. Домодедовская
-1600 25 24 Россия,Москва,Южный АО,ст. Кантемировская
-1601 25 24 Россия,Москва,Южный АО,ст. Каширская
-1602 25 24 Россия,Москва,Южный АО,ст. Коломенская
-1596 25 24 Россия,Москва,Южный АО,ст. Красногвардейская
-1291 25 24 Россия,Москва,Южный АО,ст. Нагатинская
-1292 25 24 Россия,Москва,Южный АО,ст. Нагорная
-1598 25 24 Россия,Москва,Южный АО,ст. Орехово
-1297 25 24 Россия,Москва,Южный АО,ст. Пражская
-1290 25 24 Россия,Москва,Южный АО,ст. Тульская
-1299 25 24 Россия,Москва,Южный АО,ст. Улица Академика Янгеля
-1599 25 24 Россия,Москва,Южный АО,ст. Царицыно
-1310 25 24 Россия,Москва,Южный АО,ст. Шаболовская
-1296 25 24 Россия,Москва,Южный АО,ст. Южная
-226 226 24 Россия,Санкт-Петербург
-1970 226 24 Россия,Санкт-Петербург,Адмиралтейский р-н
-1968 226 24 Россия,Санкт-Петербург,Василеостровский р-н
-1964 226 24 Россия,Санкт-Петербург,Выборгский р-н
-1377 226 24 Россия,Санкт-Петербург,Зеленогорск
-1965 226 24 Россия,Санкт-Петербург,Калининский р-н
-1971 226 24 Россия,Санкт-Петербург,Кировский р-н
-1961 226 24 Россия,Санкт-Петербург,Колпино
-1975 226 24 Россия,Санкт-Петербург,Колпинский р-н
-1966 226 24 Россия,Санкт-Петербург,Красногвардейский р-н
-1383 226 24 Россия,Санкт-Петербург,Красное Село
-1978 226 24 Россия,Санкт-Петербург,Красносельский р-н
-1981 226 24 Россия,Санкт-Петербург,Кронштадский р-н
-1382 226 24 Россия,Санкт-Петербург,Кронштадт
-1962 226 24 Россия,Санкт-Петербург,Курортный р-н
-1385 226 24 Россия,Санкт-Петербург,Ломоносов
-1980 226 24 Россия,Санкт-Петербург,Ломоносовский р-н
-1972 226 24 Россия,Санкт-Петербург,Московский р-н
-1974 226 24 Россия,Санкт-Петербург,Невский р-н
-1387 226 24 Россия,Санкт-Петербург,Павловск
-1977 226 24 Россия,Санкт-Петербург,Павловский р-н
-1982 226 24 Россия,Санкт-Петербург,Петергоф
-1967 226 24 Россия,Санкт-Петербург,Петроградский р-н
-1960 226 24 Россия,Санкт-Петербург,Петродворец
-1979 226 24 Россия,Санкт-Петербург,Петродворцовый р-н
-1963 226 24 Россия,Санкт-Петербург,Приморский р-н
-1388 226 24 Россия,Санкт-Петербург,Пушкин
-1976 226 24 Россия,Санкт-Петербург,Пушкинский р-н
-1390 226 24 Россия,Санкт-Петербург,Сестрорецк
-1973 226 24 Россия,Санкт-Петербург,Фрунзенский р-н
-1969 226 24 Россия,Санкт-Петербург,Центральный р-н
-3186 0 24 Россия,Дальневосточный ФО
-233 233 24 Россия,Дальневосточный ФО,Саха (Якутия)
-474 233 24 Россия,Дальневосточный ФО,Саха (Якутия),Алдан
-2809 233 24 Россия,Дальневосточный ФО,Саха (Якутия),Верхоянск
-2804 233 24 Россия,Дальневосточный ФО,Саха (Якутия),Вилюйск
-475 233 24 Россия,Дальневосточный ФО,Саха (Якутия),Ленск
-477 233 24 Россия,Дальневосточный ФО,Саха (Якутия),Мирный
-476 233 24 Россия,Дальневосточный ФО,Саха (Якутия),Нерюнгри
-2806 233 24 Россия,Дальневосточный ФО,Саха (Якутия),Олекминск
-3115 233 24 Россия,Дальневосточный ФО,Саха (Якутия),Покровск
-2808 233 24 Россия,Дальневосточный ФО,Саха (Якутия),Среднеколымск
-2807 233 24 Россия,Дальневосточный ФО,Саха (Якутия),Томмот
-2805 233 24 Россия,Дальневосточный ФО,Саха (Якутия),Удачный
-478 233 24 Россия,Дальневосточный ФО,Саха (Якутия),Усть-Нера
-479 233 24 Россия,Дальневосточный ФО,Саха (Якутия),Якутск
-2263 233 24 Россия,Дальневосточный ФО,Саха (Якутия),Другое
-232 232 24 Россия,Дальневосточный ФО,Приморский край
-2819 232 24 Россия,Дальневосточный ФО,Приморский край,Арсеньев
-464 232 24 Россия,Дальневосточный ФО,Приморский край,Артем
-465 232 24 Россия,Дальневосточный ФО,Приморский край,Большой Камень
-466 232 24 Россия,Дальневосточный ФО,Приморский край,Владивосток
-2817 232 24 Россия,Дальневосточный ФО,Приморский край,Дальнегорск
-2818 232 24 Россия,Дальневосточный ФО,Приморский край,Дальнереченск
-3359 232 24 Россия,Дальневосточный ФО,Приморский край,Кавалерово
-467 232 24 Россия,Дальневосточный ФО,Приморский край,Камень-Рыболов
-468 232 24 Россия,Дальневосточный ФО,Приморский край,Лесозаводск
-469 232 24 Россия,Дальневосточный ФО,Приморский край,Лучегорск
-470 232 24 Россия,Дальневосточный ФО,Приморский край,Находка
-471 232 24 Россия,Дальневосточный ФО,Приморский край,Партизанск
-472 232 24 Россия,Дальневосточный ФО,Приморский край,Пластун
-2816 232 24 Россия,Дальневосточный ФО,Приморский край,Спасск-Дальний
-473 232 24 Россия,Дальневосточный ФО,Приморский край,Уссурийск
-2258 232 24 Россия,Дальневосточный ФО,Приморский край,Другое
-235 235 24 Россия,Дальневосточный ФО,Хабаровский край
-487 235 24 Россия,Дальневосточный ФО,Хабаровский край,Амурск
-2821 235 24 Россия,Дальневосточный ФО,Хабаровский край,Бикин
-488 235 24 Россия,Дальневосточный ФО,Хабаровский край,Ванино
-2820 235 24 Россия,Дальневосточный ФО,Хабаровский край,Вяземский
-489 235 24 Россия,Дальневосточный ФО,Хабаровский край,Комсомольск-на-Амуре
-490 235 24 Россия,Дальневосточный ФО,Хабаровский край,Николаевск-на-Амуре
-491 235 24 Россия,Дальневосточный ФО,Хабаровский край,Советская Гавань
-3353 235 24 Россия,Дальневосточный ФО,Хабаровский край,Солнечный
-492 235 24 Россия,Дальневосточный ФО,Хабаровский край,Хабаровск
-2280 235 24 Россия,Дальневосточный ФО,Хабаровский край,Другое
-227 227 24 Россия,Дальневосточный ФО,Амурская обл.
-455 227 24 Россия,Дальневосточный ФО,Амурская обл.,Белогорск
-456 227 24 Россия,Дальневосточный ФО,Амурская обл.,Благовещенск
-2814 227 24 Россия,Дальневосточный ФО,Амурская обл.,Завитинск
-2813 227 24 Россия,Дальневосточный ФО,Амурская обл.,Зея
-2815 227 24 Россия,Дальневосточный ФО,Амурская обл.,Райчихинск
-2812 227 24 Россия,Дальневосточный ФО,Амурская обл.,Свободный
-2811 227 24 Россия,Дальневосточный ФО,Амурская обл.,Сковородино
-457 227 24 Россия,Дальневосточный ФО,Амурская обл.,Тында
-2217 227 24 Россия,Дальневосточный ФО,Амурская обл.,Шимановск
-2218 227 24 Россия,Дальневосточный ФО,Амурская обл.,Другое
-229 229 24 Россия,Дальневосточный ФО,Камчатская обл.
-460 229 24 Россия,Дальневосточный ФО,Камчатская обл.,Елизово
-2822 229 24 Россия,Дальневосточный ФО,Камчатская обл.,Ключи
-459 229 24 Россия,Дальневосточный ФО,Камчатская обл.,Петропавловск-Камч.
-2234 229 24 Россия,Дальневосточный ФО,Камчатская обл.,Другое
-231 231 24 Россия,Дальневосточный ФО,Магаданская обл.
-462 231 24 Россия,Дальневосточный ФО,Магаданская обл.,Магадан
-2823 231 24 Россия,Дальневосточный ФО,Магаданская обл.,Сусуман
-463 231 24 Россия,Дальневосточный ФО,Магаданская обл.,Ягодное
-2246 231 24 Россия,Дальневосточный ФО,Магаданская обл.,Другое
-234 234 24 Россия,Дальневосточный ФО,Сахалинская обл.
-480 234 24 Россия,Дальневосточный ФО,Сахалинская обл.,Александровск-Сахалинский
-2829 234 24 Россия,Дальневосточный ФО,Сахалинская обл.,Анива
-2833 234 24 Россия,Дальневосточный ФО,Сахалинская обл.,Горнозаводск
-2825 234 24 Россия,Дальневосточный ФО,Сахалинская обл.,Долинск
-481 234 24 Россия,Дальневосточный ФО,Сахалинская обл.,Корсаков
-482 234 24 Россия,Дальневосточный ФО,Сахалинская обл.,Красногорск
-2826 234 24 Россия,Дальневосточный ФО,Сахалинская обл.,Курильск
-2832 234 24 Россия,Дальневосточный ФО,Сахалинская обл.,Лесогорск
-2836 234 24 Россия,Дальневосточный ФО,Сахалинская обл.,Макаров
-2830 234 24 Россия,Дальневосточный ФО,Сахалинская обл.,Невельск
-483 234 24 Россия,Дальневосточный ФО,Сахалинская обл.,Оха
-2828 234 24 Россия,Дальневосточный ФО,Сахалинская обл.,Поронайск
-2824 234 24 Россия,Дальневосточный ФО,Сахалинская обл.,Северо-Курильск
-2827 234 24 Россия,Дальневосточный ФО,Сахалинская обл.,Томари
-2831 234 24 Россия,Дальневосточный ФО,Сахалинская обл.,Углегорск
-484 234 24 Россия,Дальневосточный ФО,Сахалинская обл.,Холмск
-2834 234 24 Россия,Дальневосточный ФО,Сахалинская обл.,Чехов
-2835 234 24 Россия,Дальневосточный ФО,Сахалинская обл.,Шахтерск
-485 234 24 Россия,Дальневосточный ФО,Сахалинская обл.,Южно-Курильск
-486 234 24 Россия,Дальневосточный ФО,Сахалинская обл.,Южно-Сахалинск
-2264 234 24 Россия,Дальневосточный ФО,Сахалинская обл.,Другое
-228 228 24 Россия,Дальневосточный ФО,Еврейская АО
-458 228 24 Россия,Дальневосточный ФО,Еврейская АО,Биробиджан
-2810 228 24 Россия,Дальневосточный ФО,Еврейская АО,Облучье
-2226 228 24 Россия,Дальневосточный ФО,Еврейская АО,Другое
-230 230 24 Россия,Дальневосточный ФО,Корякский АО
-461 230 24 Россия,Дальневосточный ФО,Корякский АО,Полана
-2239 230 24 Россия,Дальневосточный ФО,Корякский АО,Другое
-236 236 24 Россия,Дальневосточный ФО,Чукотский АО
-493 236 24 Россия,Дальневосточный ФО,Чукотский АО,Анадырь
-2287 236 24 Россия,Дальневосточный ФО,Чукотский АО,Другое
-3183 236 24 Россия,Приволжский ФО
-237 237 24 Россия,Приволжский ФО,Башкортостан
-2850 237 24 Россия,Приволжский ФО,Башкортостан,Агидель
-2851 237 24 Россия,Приволжский ФО,Башкортостан,Агидель
-2657 237 24 Россия,Приволжский ФО,Башкортостан,Баймак
-2662 237 24 Россия,Приволжский ФО,Башкортостан,Белебей
-494 237 24 Россия,Приволжский ФО,Башкортостан,Белорецк
-2658 237 24 Россия,Приволжский ФО,Башкортостан,Бирск
-2660 237 24 Россия,Приволжский ФО,Башкортостан,Благовещенск
-2659 237 24 Россия,Приволжский ФО,Башкортостан,Давлеканово
-2663 237 24 Россия,Приволжский ФО,Башкортостан,Дюртюли
-495 237 24 Россия,Приволжский ФО,Башкортостан,Ишимбай
-496 237 24 Россия,Приволжский ФО,Башкортостан,Кумертау
-2655 237 24 Россия,Приволжский ФО,Башкортостан,Мелеуз
-497 237 24 Россия,Приволжский ФО,Башкортостан,Нефтекамск
-2654 237 24 Россия,Приволжский ФО,Башкортостан,Октябрьский
-499 237 24 Россия,Приволжский ФО,Башкортостан,Салават
-2656 237 24 Россия,Приволжский ФО,Башкортостан,Сибай
-498 237 24 Россия,Приволжский ФО,Башкортостан,Стерлитамак
-500 237 24 Россия,Приволжский ФО,Башкортостан,Туймазы
-2661 237 24 Россия,Приволжский ФО,Башкортостан,Туймазы
-501 237 24 Россия,Приволжский ФО,Башкортостан,Уфа
-502 237 24 Россия,Приволжский ФО,Башкортостан,Учалы
-2664 237 24 Россия,Приволжский ФО,Башкортостан,Янаул
-2220 237 24 Россия,Приволжский ФО,Башкортостан,Другое
-240 240 24 Россия,Приволжский ФО,Марий-Эл
-509 240 24 Россия,Приволжский ФО,Марий-Эл,Волжск
-510 240 24 Россия,Приволжский ФО,Марий-Эл,Звенигово
-511 240 24 Россия,Приволжский ФО,Марий-Эл,Йошкар-Ола
-512 240 24 Россия,Приволжский ФО,Марий-Эл,Козьмодемьянск
-2247 240 24 Россия,Приволжский ФО,Марий-Эл,Другое
-241 241 24 Россия,Приволжский ФО,Мордовия
-513 241 24 Россия,Приволжский ФО,Мордовия,Зубова Поляна
-2147 241 24 Россия,Приволжский ФО,Мордовия,Инсар
-2150 241 24 Россия,Приволжский ФО,Мордовия,Ковылкино
-2148 241 24 Россия,Приволжский ФО,Мордовия,Краснослободск
-2910 241 24 Россия,Приволжский ФО,Мордовия,Лямбирь
-515 241 24 Россия,Приволжский ФО,Мордовия,Рузаевка
-514 241 24 Россия,Приволжский ФО,Мордовия,Саранск
-2149 241 24 Россия,Приволжский ФО,Мордовия,Темников
-2923 241 24 Россия,Приволжский ФО,Мордовия,Чамзинка
-2248 241 24 Россия,Приволжский ФО,Мордовия,Другое
-248 248 24 Россия,Приволжский ФО,Татарстан
-2569 248 24 Россия,Приволжский ФО,Татарстан,Агрыз
-2575 248 24 Россия,Приволжский ФО,Татарстан,Азнакаево
-569 248 24 Россия,Приволжский ФО,Татарстан,Альметьевск
-570 248 24 Россия,Приволжский ФО,Татарстан,Апастово
-2571 248 24 Россия,Приволжский ФО,Татарстан,Болгар
-571 248 24 Россия,Приволжский ФО,Татарстан,Бугульма
-2570 248 24 Россия,Приволжский ФО,Татарстан,Буинск
-572 248 24 Россия,Приволжский ФО,Татарстан,Джалиль
-573 248 24 Россия,Приволжский ФО,Татарстан,Елабуга
-2576 248 24 Россия,Приволжский ФО,Татарстан,Заинск
-574 248 24 Россия,Приволжский ФО,Татарстан,Зеленодольск
-575 248 24 Россия,Приволжский ФО,Татарстан,Казань
-2577 248 24 Россия,Приволжский ФО,Татарстан,Лениногорск
-2572 248 24 Россия,Приволжский ФО,Татарстан,Мамадыш
-576 248 24 Россия,Приволжский ФО,Татарстан,Менделеевск
-2573 248 24 Россия,Приволжский ФО,Татарстан,Мензелинск
-577 248 24 Россия,Приволжский ФО,Татарстан,Набережные Челны
-578 248 24 Россия,Приволжский ФО,Татарстан,Нижнекамск
-579 248 24 Россия,Приволжский ФО,Татарстан,Нурлат
-2574 248 24 Россия,Приволжский ФО,Татарстан,Тетюши
-580 248 24 Россия,Приволжский ФО,Татарстан,Чистополь
-2271 248 24 Россия,Приволжский ФО,Татарстан,Другое
-249 249 24 Россия,Приволжский ФО,Удмуртия
-3311 249 24 Россия,Приволжский ФО,Удмуртия,Вавож
-581 249 24 Россия,Приволжский ФО,Удмуртия,Воткинск
-582 249 24 Россия,Приволжский ФО,Удмуртия,Глазов
-583 249 24 Россия,Приволжский ФО,Удмуртия,Игра
-584 249 24 Россия,Приволжский ФО,Удмуртия,Ижевск
-2665 249 24 Россия,Приволжский ФО,Удмуртия,Камбарка
-585 249 24 Россия,Приволжский ФО,Удмуртия,Можга
-586 249 24 Россия,Приволжский ФО,Удмуртия,Сарапул
-587 249 24 Россия,Приволжский ФО,Удмуртия,Ува
-2277 249 24 Россия,Приволжский ФО,Удмуртия,Другое
-251 251 24 Россия,Приволжский ФО,Чувашия
-2158 251 24 Россия,Приволжский ФО,Чувашия,Алатырь
-2156 251 24 Россия,Приволжский ФО,Чувашия,Канаш
-2151 251 24 Россия,Приволжский ФО,Чувашия,Козловка
-2152 251 24 Россия,Приволжский ФО,Чувашия,Марьинский Посад
-2155 251 24 Россия,Приволжский ФО,Чувашия,Новочебоксарск
-2153 251 24 Россия,Приволжский ФО,Чувашия,Цивильск
-592 251 24 Россия,Приволжский ФО,Чувашия,Чебоксары
-2157 251 24 Россия,Приволжский ФО,Чувашия,Шумерля
-2154 251 24 Россия,Приволжский ФО,Чувашия,Ядрин
-2286 251 24 Россия,Приволжский ФО,Чувашия,Другое
-238 238 24 Россия,Приволжский ФО,Кировская обл.
-2168 238 24 Россия,Приволжский ФО,Кировская обл.,Белая Холуница
-503 238 24 Россия,Приволжский ФО,Кировская обл.,Вятские Поляны
-2164 238 24 Россия,Приволжский ФО,Кировская обл.,Зуевка
-504 238 24 Россия,Приволжский ФО,Кировская обл.,Киров
-505 238 24 Россия,Приволжский ФО,Кировская обл.,Кирово-Чепецк
-2160 238 24 Россия,Приволжский ФО,Кировская обл.,Кирс
-506 238 24 Россия,Приволжский ФО,Кировская обл.,Котельнич
-2167 238 24 Россия,Приволжский ФО,Кировская обл.,Луза
-2159 238 24 Россия,Приволжский ФО,Кировская обл.,Малмыж
-2169 238 24 Россия,Приволжский ФО,Кировская обл.,Мураши
-2163 238 24 Россия,Приволжский ФО,Кировская обл.,Нолинск
-2170 238 24 Россия,Приволжский ФО,Кировская обл.,Омутнинск
-2166 238 24 Россия,Приволжский ФО,Кировская обл.,Слободской
-2165 238 24 Россия,Приволжский ФО,Кировская обл.,Советск
-2162 238 24 Россия,Приволжский ФО,Кировская обл.,Сосновка
-2171 238 24 Россия,Приволжский ФО,Кировская обл.,Уржум
-2161 238 24 Россия,Приволжский ФО,Кировская обл.,Халтурин
-507 238 24 Россия,Приволжский ФО,Кировская обл.,Яранск
-2237 238 24 Россия,Приволжский ФО,Кировская обл.,Другое
-242 242 24 Россия,Приволжский ФО,Нижегородская обл.
-516 242 24 Россия,Приволжский ФО,Нижегородская обл.,Арзамас
-517 242 24 Россия,Приволжский ФО,Нижегородская обл.,Балахна
-2139 242 24 Россия,Приволжский ФО,Нижегородская обл.,Богородск
-518 242 24 Россия,Приволжский ФО,Нижегородская обл.,Бор
-519 242 24 Россия,Приволжский ФО,Нижегородская обл.,Вахтан
-520 242 24 Россия,Приволжский ФО,Нижегородская обл.,Ветлуга
-2140 242 24 Россия,Приволжский ФО,Нижегородская обл.,Володарск
-2138 242 24 Россия,Приволжский ФО,Нижегородская обл.,Ворсма
-521 242 24 Россия,Приволжский ФО,Нижегородская обл.,Выкса
-2137 242 24 Россия,Приволжский ФО,Нижегородская обл.,Горбатов
-522 242 24 Россия,Приволжский ФО,Нижегородская обл.,Городец
-523 242 24 Россия,Приволжский ФО,Нижегородская обл.,Дзержинск
-524 242 24 Россия,Приволжский ФО,Нижегородская обл.,Заволжье
-2891 242 24 Россия,Приволжский ФО,Нижегородская обл.,Ильиногорск
-525 242 24 Россия,Приволжский ФО,Нижегородская обл.,Кстово
-2145 242 24 Россия,Приволжский ФО,Нижегородская обл.,Кулебаки
-2143 242 24 Россия,Приволжский ФО,Нижегородская обл.,Лукоянов
-2144 242 24 Россия,Приволжский ФО,Нижегородская обл.,Лысково
-2146 242 24 Россия,Приволжский ФО,Нижегородская обл.,Навашино
-526 242 24 Россия,Приволжский ФО,Нижегородская обл.,Нижний Новгород
-527 242 24 Россия,Приволжский ФО,Нижегородская обл.,Павлово
-2135 242 24 Россия,Приволжский ФО,Нижегородская обл.,Первомайск
-528 242 24 Россия,Приволжский ФО,Нижегородская обл.,Саров
-529 242 24 Россия,Приволжский ФО,Нижегородская обл.,Семенов
-530 242 24 Россия,Приволжский ФО,Нижегородская обл.,Сергач
-2141 242 24 Россия,Приволжский ФО,Нижегородская обл.,Урень
-2136 242 24 Россия,Приволжский ФО,Нижегородская обл.,Чкаловск
-2897 242 24 Россия,Приволжский ФО,Нижегородская обл.,Шатки
-2142 242 24 Россия,Приволжский ФО,Нижегородская обл.,Шахунья
-2251 242 24 Россия,Приволжский ФО,Нижегородская обл.,Другое
-243 243 24 Россия,Приволжский ФО,Оренбургская обл.
-2678 243 24 Россия,Приволжский ФО,Оренбургская обл.,Абдулино
-2673 243 24 Россия,Приволжский ФО,Оренбургская обл.,Бугуруслан
-531 243 24 Россия,Приволжский ФО,Оренбургская обл.,Бузулук
-532 243 24 Россия,Приволжский ФО,Оренбургская обл.,Гай
-2674 243 24 Россия,Приволжский ФО,Оренбургская обл.,Кувандык
-2675 243 24 Россия,Приволжский ФО,Оренбургская обл.,Медногорск
-533 243 24 Россия,Приволжский ФО,Оренбургская обл.,Новотроицк
-535 243 24 Россия,Приволжский ФО,Оренбургская обл.,Оренбург
-536 243 24 Россия,Приволжский ФО,Оренбургская обл.,Орск
-3360 243 24 Россия,Приволжский ФО,Оренбургская обл.,Саракташ
-2677 243 24 Россия,Приволжский ФО,Оренбургская обл.,Соль-Илецк
-2676 243 24 Россия,Приволжский ФО,Оренбургская обл.,Сорочинск
-537 243 24 Россия,Приволжский ФО,Оренбургская обл.,Тоцкое
-538 243 24 Россия,Приволжский ФО,Оренбургская обл.,Ясный
-2254 243 24 Россия,Приволжский ФО,Оренбургская обл.,Другое
-244 244 24 Россия,Приволжский ФО,Пензенская обл.
-539 244 24 Россия,Приволжский ФО,Пензенская обл.,Беднодемьяновск
-2597 244 24 Россия,Приволжский ФО,Пензенская обл.,Белинский
-2595 244 24 Россия,Приволжский ФО,Пензенская обл.,Городище
-2593 244 24 Россия,Приволжский ФО,Пензенская обл.,Каменка
-540 244 24 Россия,Приволжский ФО,Пензенская обл.,Кузнецк
-2598 244 24 Россия,Приволжский ФО,Пензенская обл.,Нижний Ломов
-2592 244 24 Россия,Приволжский ФО,Пензенская обл.,Никольск
-541 244 24 Россия,Приволжский ФО,Пензенская обл.,Пенза
-3304 244 24 Россия,Приволжский ФО,Пензенская обл.,Русский Камешкир
-2596 244 24 Россия,Приволжский ФО,Пензенская обл.,Сердобск
-2594 244 24 Россия,Приволжский ФО,Пензенская обл.,Сурск
-2256 244 24 Россия,Приволжский ФО,Пензенская обл.,Другое
-245 245 24 Россия,Приволжский ФО,Пермская обл.
-2690 245 24 Россия,Приволжский ФО,Пермская обл.,Александровск
-542 245 24 Россия,Приволжский ФО,Пермская обл.,Березники
-2679 245 24 Россия,Приволжский ФО,Пермская обл.,Верещагино
-2680 245 24 Россия,Приволжский ФО,Пермская обл.,Горнозаводск
-2687 245 24 Россия,Приволжский ФО,Пермская обл.,Гремячинск
-2686 245 24 Россия,Приволжский ФО,Пермская обл.,Губаха
-543 245 24 Россия,Приволжский ФО,Пермская обл.,Добрянка
-544 245 24 Россия,Приволжский ФО,Пермская обл.,Кизел
-2681 245 24 Россия,Приволжский ФО,Пермская обл.,Красновишерск
-545 245 24 Россия,Приволжский ФО,Пермская обл.,Краснокамск
-546 245 24 Россия,Приволжский ФО,Пермская обл.,Кунгур
-547 245 24 Россия,Приволжский ФО,Пермская обл.,Лысьва
-548 245 24 Россия,Приволжский ФО,Пермская обл.,Нытва
-2683 245 24 Россия,Приволжский ФО,Пермская обл.,Оса
-2684 245 24 Россия,Приволжский ФО,Пермская обл.,Оханск
-2682 245 24 Россия,Приволжский ФО,Пермская обл.,Очер
-549 245 24 Россия,Приволжский ФО,Пермская обл.,Пермь
-550 245 24 Россия,Приволжский ФО,Пермская обл.,Соликамск
-2685 245 24 Россия,Приволжский ФО,Пермская обл.,Усолье
-551 245 24 Россия,Приволжский ФО,Пермская обл.,Чайковский
-2689 245 24 Россия,Приволжский ФО,Пермская обл.,Чердынь
-2688 245 24 Россия,Приволжский ФО,Пермская обл.,Чермоз
-552 245 24 Россия,Приволжский ФО,Пермская обл.,Чернушка
-553 245 24 Россия,Приволжский ФО,Пермская обл.,Чусовой
-2257 245 24 Россия,Приволжский ФО,Пермская обл.,Другое
-246 246 24 Россия,Приволжский ФО,Самарская обл.
-554 246 24 Россия,Приволжский ФО,Самарская обл.,Волжский
-555 246 24 Россия,Приволжский ФО,Самарская обл.,Жигулевск
-2599 246 24 Россия,Приволжский ФО,Самарская обл.,Кинель
-3293 246 24 Россия,Приволжский ФО,Самарская обл.,Красный Яр
-2602 246 24 Россия,Приволжский ФО,Самарская обл.,Нефтегорск
-556 246 24 Россия,Приволжский ФО,Самарская обл.,Новокуйбышевск
-2600 246 24 Россия,Приволжский ФО,Самарская обл.,Октябрьск
-557 246 24 Россия,Приволжский ФО,Самарская обл.,Отрадный
-558 246 24 Россия,Приволжский ФО,Самарская обл.,Похвистнево
-559 246 24 Россия,Приволжский ФО,Самарская обл.,Самара
-560 246 24 Россия,Приволжский ФО,Самарская обл.,Сызрань
-561 246 24 Россия,Приволжский ФО,Самарская обл.,Тольятти
-2601 246 24 Россия,Приволжский ФО,Самарская обл.,Чапаевск
-562 246 24 Россия,Приволжский ФО,Самарская обл.,Шигоны
-2261 246 24 Россия,Приволжский ФО,Самарская обл.,Другое
-247 247 24 Россия,Приволжский ФО,Саратовская обл.
-2613 247 24 Россия,Приволжский ФО,Саратовская обл.,Аркадак
-2606 247 24 Россия,Приволжский ФО,Саратовская обл.,Аткарск
-563 247 24 Россия,Приволжский ФО,Саратовская обл.,Балаково
-564 247 24 Россия,Приволжский ФО,Саратовская обл.,Балашов
-565 247 24 Россия,Приволжский ФО,Саратовская обл.,Вольск
-2608 247 24 Россия,Приволжский ФО,Саратовская обл.,Ершов
-2607 247 24 Россия,Приволжский ФО,Саратовская обл.,Калининск
-2609 247 24 Россия,Приволжский ФО,Саратовская обл.,Красноармейск
-2610 247 24 Россия,Приволжский ФО,Саратовская обл.,Красный Кут
-2605 247 24 Россия,Приволжский ФО,Саратовская обл.,Маркс
-566 247 24 Россия,Приволжский ФО,Саратовская обл.,Новоузенск
-2603 247 24 Россия,Приволжский ФО,Саратовская обл.,Петровск
-2604 247 24 Россия,Приволжский ФО,Саратовская обл.,Пугачев
-2612 247 24 Россия,Приволжский ФО,Саратовская обл.,Ртищево
-567 247 24 Россия,Приволжский ФО,Саратовская обл.,Саратов
-2611 247 24 Россия,Приволжский ФО,Саратовская обл.,Хвалынск
-568 247 24 Россия,Приволжский ФО,Саратовская обл.,Энгельс
-3267 247 24 Россия,Приволжский ФО,Саратовская обл.,Энгельс-12
-2262 247 24 Россия,Приволжский ФО,Саратовская обл.,Другое
-250 250 24 Россия,Приволжский ФО,Ульяновская обл.
-2614 250 24 Россия,Приволжский ФО,Ульяновская обл.,Барыш
-588 250 24 Россия,Приволжский ФО,Ульяновская обл.,Димитровград
-2615 250 24 Россия,Приволжский ФО,Ульяновская обл.,Инза
-589 250 24 Россия,Приволжский ФО,Ульяновская обл.,Новоспасское
-2616 250 24 Россия,Приволжский ФО,Ульяновская обл.,Новоульяновск
-590 250 24 Россия,Приволжский ФО,Ульяновская обл.,Сенгилей
-591 250 24 Россия,Приволжский ФО,Ульяновская обл.,Ульяновск
-2278 250 24 Россия,Приволжский ФО,Ульяновская обл.,Другое
-239 239 24 Россия,Приволжский ФО,Коми-Пермяцкий АО
-508 239 24 Россия,Приволжский ФО,Коми-Пермяцкий АО,Кудымкар
-2238 239 24 Россия,Приволжский ФО,Коми-Пермяцкий АО,Другое
-3181 239 24 Россия,Северо-Западный ФО
-255 255 24 Россия,Северо-Западный ФО,Карелия
-1355 255 24 Россия,Северо-Западный ФО,Карелия,Беломорск
-1356 255 24 Россия,Северо-Западный ФО,Карелия,Кемь
-1357 255 24 Россия,Северо-Западный ФО,Карелия,Кондопога
-1358 255 24 Россия,Северо-Западный ФО,Карелия,Костомукша
-1359 255 24 Россия,Северо-Западный ФО,Карелия,Коткозеро
-1360 255 24 Россия,Северо-Западный ФО,Карелия,Лахденпохья
-1362 255 24 Россия,Северо-Западный ФО,Карелия,Лоухи
-1361 255 24 Россия,Северо-Западный ФО,Карелия,Медвежьегорск
-3286 255 24 Россия,Северо-Западный ФО,Карелия,Муезерский
-1937 255 24 Россия,Северо-Западный ФО,Карелия,Олонец
-1363 255 24 Россия,Северо-Западный ФО,Карелия,Петрозаводск
-1938 255 24 Россия,Северо-Западный ФО,Карелия,Питкяранта
-3287 255 24 Россия,Северо-Западный ФО,Карелия,Пряжа
-1936 255 24 Россия,Северо-Западный ФО,Карелия,Пудож
-1364 255 24 Россия,Северо-Западный ФО,Карелия,Сегежа
-1365 255 24 Россия,Северо-Западный ФО,Карелия,Сортавала
-1939 255 24 Россия,Северо-Западный ФО,Карелия,Суоярви
-2201 255 24 Россия,Северо-Западный ФО,Карелия,Другое
-256 256 24 Россия,Северо-Западный ФО,Коми
-1366 256 24 Россия,Северо-Западный ФО,Коми,Воркута
-1367 256 24 Россия,Северо-Западный ФО,Коми,Вуктыл
-2202 256 24 Россия,Северо-Западный ФО,Коми,Емва
-1368 256 24 Россия,Северо-Западный ФО,Коми,Инта
-1940 256 24 Россия,Северо-Западный ФО,Коми,Микунь
-1369 256 24 Россия,Северо-Западный ФО,Коми,Печора
-1941 256 24 Россия,Северо-Западный ФО,Коми,Сосногорск
-1370 256 24 Россия,Северо-Западный ФО,Коми,Сыктывкар
-1371 256 24 Россия,Северо-Западный ФО,Коми,Усинск
-1372 256 24 Россия,Северо-Западный ФО,Коми,Ухта
-2203 256 24 Россия,Северо-Западный ФО,Коми,Другое
-252 252 24 Россия,Северо-Западный ФО,Архангельская обл.
-593 252 24 Россия,Северо-Западный ФО,Архангельская обл.,Архангельск
-594 252 24 Россия,Северо-Западный ФО,Архангельская обл.,Вельск
-1945 252 24 Россия,Северо-Западный ФО,Архангельская обл.,Каргополь
-595 252 24 Россия,Северо-Западный ФО,Архангельская обл.,Коряжма
-596 252 24 Россия,Северо-Западный ФО,Архангельская обл.,Котлас
-1944 252 24 Россия,Северо-Западный ФО,Архангельская обл.,Мезень
-597 252 24 Россия,Северо-Западный ФО,Архангельская обл.,Мирный
-598 252 24 Россия,Северо-Западный ФО,Архангельская обл.,Новодвинск
-1946 252 24 Россия,Северо-Западный ФО,Архангельская обл.,Няндома
-599 252 24 Россия,Северо-Западный ФО,Архангельская обл.,Онега
-600 252 24 Россия,Северо-Западный ФО,Архангельская обл.,Пинега
-601 252 24 Россия,Северо-Западный ФО,Архангельская обл.,Северодвинск
-1942 252 24 Россия,Северо-Западный ФО,Архангельская обл.,Сольвычегодск
-3239 252 24 Россия,Северо-Западный ФО,Архангельская обл.,Холмогоры
-1943 252 24 Россия,Северо-Западный ФО,Архангельская обл.,Шенкурск
-2204 252 24 Россия,Северо-Западный ФО,Архангельская обл.,Другое
-253 253 24 Россия,Северо-Западный ФО,Вологодская обл.
-1950 253 24 Россия,Северо-Западный ФО,Вологодская обл.,Бабаево
-1949 253 24 Россия,Северо-Западный ФО,Вологодская обл.,Белозерск
-1338 253 24 Россия,Северо-Западный ФО,Вологодская обл.,Великий Устюг
-1339 253 24 Россия,Северо-Западный ФО,Вологодская обл.,Вологда
-1951 253 24 Россия,Северо-Западный ФО,Вологодская обл.,Вытегра
-1340 253 24 Россия,Северо-Западный ФО,Вологодская обл.,Грязовец
-1952 253 24 Россия,Северо-Западный ФО,Вологодская обл.,Кадников
-2871 253 24 Россия,Северо-Западный ФО,Вологодская обл.,Кадуй
-1341 253 24 Россия,Северо-Западный ФО,Вологодская обл.,Кириллов
-1955 253 24 Россия,Северо-Западный ФО,Вологодская обл.,Красавино
-1342 253 24 Россия,Северо-Западный ФО,Вологодская обл.,Михайловка
-1947 253 24 Россия,Северо-Западный ФО,Вологодская обл.,Никольск
-1343 253 24 Россия,Северо-Западный ФО,Вологодская обл.,Сокол
-1953 253 24 Россия,Северо-Западный ФО,Вологодская обл.,Тотьма
-1954 253 24 Россия,Северо-Западный ФО,Вологодская обл.,Устюжна
-1948 253 24 Россия,Северо-Западный ФО,Вологодская обл.,Харовск
-1344 253 24 Россия,Северо-Западный ФО,Вологодская обл.,Череповец
-2205 253 24 Россия,Северо-Западный ФО,Вологодская обл.,Другое
-254 254 24 Россия,Северо-Западный ФО,Калининградская обл.
-2838 254 24 Россия,Северо-Западный ФО,Калининградская обл.,Багратионовск
-1345 254 24 Россия,Северо-Западный ФО,Калининградская обл.,Балтийск
-2846 254 24 Россия,Северо-Западный ФО,Калининградская обл.,Гвардейск
-2843 254 24 Россия,Северо-Западный ФО,Калининградская обл.,Гурьевск
-1346 254 24 Россия,Северо-Западный ФО,Калининградская обл.,Гусев
-1347 254 24 Россия,Северо-Западный ФО,Калининградская обл.,Зеленоградск
-1348 254 24 Россия,Северо-Западный ФО,Калининградская обл.,Калининград
-2842 254 24 Россия,Северо-Западный ФО,Калининградская обл.,Краснознаменск
-2845 254 24 Россия,Северо-Западный ФО,Калининградская обл.,Ладушкин
-2848 254 24 Россия,Северо-Западный ФО,Калининградская обл.,Мамоново
-2837 254 24 Россия,Северо-Западный ФО,Калининградская обл.,Неман
-2844 254 24 Россия,Северо-Западный ФО,Калининградская обл.,Нестеров
-1349 254 24 Россия,Северо-Западный ФО,Калининградская обл.,Озерск
-2841 254 24 Россия,Северо-Западный ФО,Калининградская обл.,Полесск
-2839 254 24 Россия,Северо-Западный ФО,Калининградская обл.,Правдинск
-1350 254 24 Россия,Северо-Западный ФО,Калининградская обл.,Приморск
-1351 254 24 Россия,Северо-Западный ФО,Калининградская обл.,Светлогорск
-1352 254 24 Россия,Северо-Западный ФО,Калининградская обл.,Светлый
-2840 254 24 Россия,Северо-Западный ФО,Калининградская обл.,Славск
-1353 254 24 Россия,Северо-Западный ФО,Калининградская обл.,Советск
-1354 254 24 Россия,Северо-Западный ФО,Калининградская обл.,Черняховск
-2231 254 24 Россия,Северо-Западный ФО,Калининградская обл.,Другое
-257 257 24 Россия,Северо-Западный ФО,Ленинградская обл.
-1985 257 24 Россия,Северо-Западный ФО,Ленинградская обл.,Бокситогорск
-1374 257 24 Россия,Северо-Западный ФО,Ленинградская обл.,Волхов
-1373 257 24 Россия,Северо-Западный ФО,Ленинградская обл.,Всеволожск
-1375 257 24 Россия,Северо-Западный ФО,Ленинградская обл.,Выборг
-1995 257 24 Россия,Северо-Западный ФО,Ленинградская обл.,Высоцк
-1376 257 24 Россия,Северо-Западный ФО,Ленинградская обл.,Гатчина
-1378 257 24 Россия,Северо-Западный ФО,Ленинградская обл.,Ивангород
-1993 257 24 Россия,Северо-Западный ФО,Ленинградская обл.,Каменногорск
-1379 257 24 Россия,Северо-Западный ФО,Ленинградская обл.,Кингисепп
-1380 257 24 Россия,Северо-Западный ФО,Ленинградская обл.,Кириши
-1381 257 24 Россия,Северо-Западный ФО,Ленинградская обл.,Кировск
-1384 257 24 Россия,Северо-Западный ФО,Ленинградская обл.,Кузьмоловский
-1984 257 24 Россия,Северо-Западный ФО,Ленинградская обл.,Лодейное Поле
-1990 257 24 Россия,Северо-Западный ФО,Ленинградская обл.,Луга
-1994 257 24 Россия,Северо-Западный ФО,Ленинградская обл.,Любань
-1386 257 24 Россия,Северо-Западный ФО,Ленинградская обл.,Никольское
-1987 257 24 Россия,Северо-Западный ФО,Ленинградская обл.,Новая Ладога
-1996 257 24 Россия,Северо-Западный ФО,Ленинградская обл.,Отрадное
-1986 257 24 Россия,Северо-Западный ФО,Ленинградская обл.,Пикалево
-1983 257 24 Россия,Северо-Западный ФО,Ленинградская обл.,Подпорожье
-1992 257 24 Россия,Северо-Западный ФО,Ленинградская обл.,Приморск
-1988 257 24 Россия,Северо-Западный ФО,Ленинградская обл.,Приозерск
-3071 257 24 Россия,Северо-Западный ФО,Ленинградская обл.,Пушкин
-1989 257 24 Россия,Северо-Западный ФО,Ленинградская обл.,Светогорск
-1389 257 24 Россия,Северо-Западный ФО,Ленинградская обл.,Сертолово
-1991 257 24 Россия,Северо-Западный ФО,Ленинградская обл.,Сланцы
-1391 257 24 Россия,Северо-Западный ФО,Ленинградская обл.,Сосновый Бор
-1392 257 24 Россия,Северо-Западный ФО,Ленинградская обл.,Тихвин
-1393 257 24 Россия,Северо-Западный ФО,Ленинградская обл.,Тосно
-1394 257 24 Россия,Северо-Западный ФО,Ленинградская обл.,Шлиссельбург
-2207 257 24 Россия,Северо-Западный ФО,Ленинградская обл.,Другое
-258 258 24 Россия,Северо-Западный ФО,Мурманская обл.
-1395 258 24 Россия,Северо-Западный ФО,Мурманская обл.,Апатиты
-1959 258 24 Россия,Северо-Западный ФО,Мурманская обл.,Заполярный
-1396 258 24 Россия,Северо-Западный ФО,Мурманская обл.,Зареченск
-1397 258 24 Россия,Северо-Западный ФО,Мурманская обл.,Кандалакша
-1398 258 24 Россия,Северо-Западный ФО,Мурманская обл.,Кировск
-1399 258 24 Россия,Северо-Западный ФО,Мурманская обл.,Ковдор
-1958 258 24 Россия,Северо-Западный ФО,Мурманская обл.,Кола
-1400 258 24 Россия,Северо-Западный ФО,Мурманская обл.,Мончегорск
-1401 258 24 Россия,Северо-Западный ФО,Мурманская обл.,Мурманск
-1402 258 24 Россия,Северо-Западный ФО,Мурманская обл.,Мурмаши
-1403 258 24 Россия,Северо-Западный ФО,Мурманская обл.,Оленегорск
-1404 258 24 Россия,Северо-Западный ФО,Мурманская обл.,Полярные Зори
-1956 258 24 Россия,Северо-Западный ФО,Мурманская обл.,Полярный
-1957 258 24 Россия,Северо-Западный ФО,Мурманская обл.,Североморск
-3288 258 24 Россия,Северо-Западный ФО,Мурманская обл.,Снежногорск
-2206 258 24 Россия,Северо-Западный ФО,Мурманская обл.,Другое
-260 260 24 Россия,Северо-Западный ФО,Новгородская обл.
-1406 260 24 Россия,Северо-Западный ФО,Новгородская обл.,Батецкий
-2001 260 24 Россия,Северо-Западный ФО,Новгородская обл.,Боровичи
-2003 260 24 Россия,Северо-Западный ФО,Новгородская обл.,Валдай
-1407 260 24 Россия,Северо-Западный ФО,Новгородская обл.,Великий Новгород
-1408 260 24 Россия,Северо-Западный ФО,Новгородская обл.,Крестцы
-2002 260 24 Россия,Северо-Западный ФО,Новгородская обл.,Малая Вишера
-1409 260 24 Россия,Северо-Западный ФО,Новгородская обл.,Окуловка
-2000 260 24 Россия,Северо-Западный ФО,Новгородская обл.,Пестово
-1997 260 24 Россия,Северо-Западный ФО,Новгородская обл.,Сольцы
-1410 260 24 Россия,Северо-Западный ФО,Новгородская обл.,Старая Русса
-1998 260 24 Россия,Северо-Западный ФО,Новгородская обл.,Холм
-1999 260 24 Россия,Северо-Западный ФО,Новгородская обл.,Чудово
-2208 260 24 Россия,Северо-Западный ФО,Новгородская обл.,Другое
-261 261 24 Россия,Северо-Западный ФО,Псковская обл.
-1412 261 24 Россия,Северо-Западный ФО,Псковская обл.,Великие Луки
-2004 261 24 Россия,Северо-Западный ФО,Псковская обл.,Гдов
-2009 261 24 Россия,Северо-Западный ФО,Псковская обл.,Дно
-2005 261 24 Россия,Северо-Западный ФО,Псковская обл.,Невель
-1413 261 24 Россия,Северо-Западный ФО,Псковская обл.,Новоржев
-2006 261 24 Россия,Северо-Западный ФО,Псковская обл.,Опочка
-2008 261 24 Россия,Северо-Западный ФО,Псковская обл.,Остров
-1414 261 24 Россия,Северо-Западный ФО,Псковская обл.,Печоры
-1415 261 24 Россия,Северо-Западный ФО,Псковская обл.,Порхов
-1411 261 24 Россия,Северо-Западный ФО,Псковская обл.,Псков
-1416 261 24 Россия,Северо-Западный ФО,Псковская обл.,Пустошка
-2007 261 24 Россия,Северо-Западный ФО,Псковская обл.,Пыталово
-1417 261 24 Россия,Северо-Западный ФО,Псковская обл.,Себеж
-2209 261 24 Россия,Северо-Западный ФО,Псковская обл.,Другое
-259 259 24 Россия,Северо-Западный ФО,Ненецкий АО
-1405 259 24 Россия,Северо-Западный ФО,Ненецкий АО,Нарьян-Мар
-2250 259 24 Россия,Северо-Западный ФО,Ненецкий АО,Другое
-3185 259 24 Россия,Сибирский ФО
-265 265 24 Россия,Сибирский ФО,Бурятия
-2764 265 24 Россия,Сибирский ФО,Бурятия,Бабушкин
-2760 265 24 Россия,Сибирский ФО,Бурятия,Гусиноозерск
-2762 265 24 Россия,Сибирский ФО,Бурятия,Закаменск
-2763 265 24 Россия,Сибирский ФО,Бурятия,Кяхта
-2761 265 24 Россия,Сибирский ФО,Бурятия,Северобайкальск
-1446 265 24 Россия,Сибирский ФО,Бурятия,Улан-Удэ
-2222 265 24 Россия,Сибирский ФО,Бурятия,Другое
-263 263 24 Россия,Сибирский ФО,Республика Алтай
-1439 263 24 Россия,Сибирский ФО,Республика Алтай,Горно-Алтайск
-2215 263 24 Россия,Сибирский ФО,Республика Алтай,Другое
-273 273 24 Россия,Сибирский ФО,Тыва
-2766 273 24 Россия,Сибирский ФО,Тыва,Ак-Довурак
-1494 273 24 Россия,Сибирский ФО,Тыва,Кызыл
-2768 273 24 Россия,Сибирский ФО,Тыва,Новый Шагонар
-2767 273 24 Россия,Сибирский ФО,Тыва,Туран
-2765 273 24 Россия,Сибирский ФО,Тыва,Чадан
-2275 273 24 Россия,Сибирский ФО,Тыва,Другое
-275 275 24 Россия,Сибирский ФО,Хакасия
-2769 275 24 Россия,Сибирский ФО,Хакасия,Абаза
-1496 275 24 Россия,Сибирский ФО,Хакасия,Абакан
-1497 275 24 Россия,Сибирский ФО,Хакасия,Саяногорск
-2770 275 24 Россия,Сибирский ФО,Хакасия,Сорск
-2771 275 24 Россия,Сибирский ФО,Хакасия,Черногорск
-2281 275 24 Россия,Сибирский ФО,Хакасия,Другое
-264 264 24 Россия,Сибирский ФО,Алтайский край
-1440 264 24 Россия,Сибирский ФО,Алтайский край,Алейск
-1441 264 24 Россия,Сибирский ФО,Алтайский край,Барнаул
-1442 264 24 Россия,Сибирский ФО,Алтайский край,Белокуриха
-1443 264 24 Россия,Сибирский ФО,Алтайский край,Бийск
-2728 264 24 Россия,Сибирский ФО,Алтайский край,Горняк
-2731 264 24 Россия,Сибирский ФО,Алтайский край,Заринск
-2729 264 24 Россия,Сибирский ФО,Алтайский край,Змеиногорск
-2732 264 24 Россия,Сибирский ФО,Алтайский край,Камень-на-Оби
-3292 264 24 Россия,Сибирский ФО,Алтайский край,Кулунда
-2730 264 24 Россия,Сибирский ФО,Алтайский край,Новоалтайск
-1444 264 24 Россия,Сибирский ФО,Алтайский край,Рубцовск
-1445 264 24 Россия,Сибирский ФО,Алтайский край,Славгород
-3231 264 24 Россия,Сибирский ФО,Алтайский край,Яровое
-2216 264 24 Россия,Сибирский ФО,Алтайский край,Другое
-268 268 24 Россия,Сибирский ФО,Красноярский край
-2781 268 24 Россия,Сибирский ФО,Красноярский край,Артемовск
-1469 268 24 Россия,Сибирский ФО,Красноярский край,Ачинск
-2784 268 24 Россия,Сибирский ФО,Красноярский край,Боготол
-2773 268 24 Россия,Сибирский ФО,Красноярский край,Бородино
-2774 268 24 Россия,Сибирский ФО,Красноярский край,Дивногорск
-3122 268 24 Россия,Сибирский ФО,Красноярский край,Емельяновск
-2772 268 24 Россия,Сибирский ФО,Красноярский край,Енисейск
-3294 268 24 Россия,Сибирский ФО,Красноярский край,Железногорск
-2777 268 24 Россия,Сибирский ФО,Красноярский край,Заозерный
-1470 268 24 Россия,Сибирский ФО,Красноярский край,Игарка
-2778 268 24 Россия,Сибирский ФО,Красноярский край,Иланский
-2782 268 24 Россия,Сибирский ФО,Красноярский край,Канск
-2783 268 24 Россия,Сибирский ФО,Красноярский край,Кодинский
-1471 268 24 Россия,Сибирский ФО,Красноярский край,Красноярск
-1472 268 24 Россия,Сибирский ФО,Красноярский край,Лесосибирск
-1473 268 24 Россия,Сибирский ФО,Красноярский край,Минусинск
-2775 268 24 Россия,Сибирский ФО,Красноярский край,Назарово
-2776 268 24 Россия,Сибирский ФО,Красноярский край,Сосновоборск
-2780 268 24 Россия,Сибирский ФО,Красноярский край,Ужур
-2779 268 24 Россия,Сибирский ФО,Красноярский край,Уяр
-2785 268 24 Россия,Сибирский ФО,Красноярский край,Шарыпово
-1474 268 24 Россия,Сибирский ФО,Красноярский край,Шушенское
-2242 268 24 Россия,Сибирский ФО,Красноярский край,Другое
-266 266 24 Россия,Сибирский ФО,Иркутская обл.
-2792 266 24 Россия,Сибирский ФО,Иркутская обл.,Алзамай
-1447 266 24 Россия,Сибирский ФО,Иркутская обл.,Ангарск
-1448 266 24 Россия,Сибирский ФО,Иркутская обл.,Байкальск
-2791 266 24 Россия,Сибирский ФО,Иркутская обл.,Бирюсинск
-1450 266 24 Россия,Сибирский ФО,Иркутская обл.,Бодайбо
-1451 266 24 Россия,Сибирский ФО,Иркутская обл.,Братск
-2793 266 24 Россия,Сибирский ФО,Иркутская обл.,Вихоревка
-2789 266 24 Россия,Сибирский ФО,Иркутская обл.,Железногорск-Илимский
-2786 266 24 Россия,Сибирский ФО,Иркутская обл.,Зима
-1452 266 24 Россия,Сибирский ФО,Иркутская обл.,Иркутск
-2794 266 24 Россия,Сибирский ФО,Иркутская обл.,Киренск
-2787 266 24 Россия,Сибирский ФО,Иркутская обл.,Нижнеудинск
-1449 266 24 Россия,Сибирский ФО,Иркутская обл.,Саянск
-2790 266 24 Россия,Сибирский ФО,Иркутская обл.,Свирск
-1453 266 24 Россия,Сибирский ФО,Иркутская обл.,Слюдянка
-2788 266 24 Россия,Сибирский ФО,Иркутская обл.,Тайшет
-1454 266 24 Россия,Сибирский ФО,Иркутская обл.,Тулун
-1455 266 24 Россия,Сибирский ФО,Иркутская обл.,Усолье-Сибирское
-2908 266 24 Россия,Сибирский ФО,Иркутская обл.,Усольск
-1456 266 24 Россия,Сибирский ФО,Иркутская обл.,Усть-Илимск
-1457 266 24 Россия,Сибирский ФО,Иркутская обл.,Усть-Кут
-1458 266 24 Россия,Сибирский ФО,Иркутская обл.,Хужир
-1459 266 24 Россия,Сибирский ФО,Иркутская обл.,Черемхово
-2795 266 24 Россия,Сибирский ФО,Иркутская обл.,Шелехов
-2229 266 24 Россия,Сибирский ФО,Иркутская обл.,Другое
-267 267 24 Россия,Сибирский ФО,Кемеровская обл.
-2737 267 24 Россия,Сибирский ФО,Кемеровская обл.,Анжеро-Суджинск
-2740 267 24 Россия,Сибирский ФО,Кемеровская обл.,Белово
-2746 267 24 Россия,Сибирский ФО,Кемеровская обл.,Березовский
-2739 267 24 Россия,Сибирский ФО,Кемеровская обл.,Гурьевск
-2742 267 24 Россия,Сибирский ФО,Кемеровская обл.,Калтан
-1460 267 24 Россия,Сибирский ФО,Кемеровская обл.,Кемерово
-1461 267 24 Россия,Сибирский ФО,Кемеровская обл.,Киселевск
-2738 267 24 Россия,Сибирский ФО,Кемеровская обл.,Ленинск-Кузнецкий
-2745 267 24 Россия,Сибирский ФО,Кемеровская обл.,Мариинск
-1462 267 24 Россия,Сибирский ФО,Кемеровская обл.,Междуреченск
-1463 267 24 Россия,Сибирский ФО,Кемеровская обл.,Мыски
-1464 267 24 Россия,Сибирский ФО,Кемеровская обл.,Новокузнецк
-2744 267 24 Россия,Сибирский ФО,Кемеровская обл.,Осинники
-3358 267 24 Россия,Сибирский ФО,Кемеровская обл.,Полысаево
-1465 267 24 Россия,Сибирский ФО,Кемеровская обл.,Прокопьевск
-1466 267 24 Россия,Сибирский ФО,Кемеровская обл.,Салаир
-2743 267 24 Россия,Сибирский ФО,Кемеровская обл.,Тайга
-2741 267 24 Россия,Сибирский ФО,Кемеровская обл.,Таштагол
-1467 267 24 Россия,Сибирский ФО,Кемеровская обл.,Топки
-1468 267 24 Россия,Сибирский ФО,Кемеровская обл.,Юрга
-2236 267 24 Россия,Сибирский ФО,Кемеровская обл.,Другое
-269 269 24 Россия,Сибирский ФО,Новосибирская обл.
-1475 269 24 Россия,Сибирский ФО,Новосибирская обл.,Баган
-1476 269 24 Россия,Сибирский ФО,Новосибирская обл.,Барабинск
-1477 269 24 Россия,Сибирский ФО,Новосибирская обл.,Бердск
-2750 269 24 Россия,Сибирский ФО,Новосибирская обл.,Болотное
-1478 269 24 Россия,Сибирский ФО,Новосибирская обл.,Искитим
-2752 269 24 Россия,Сибирский ФО,Новосибирская обл.,Карасук
-2751 269 24 Россия,Сибирский ФО,Новосибирская обл.,Каргат
-3107 269 24 Россия,Сибирский ФО,Новосибирская обл.,Краснообск
-2753 269 24 Россия,Сибирский ФО,Новосибирская обл.,Куйбышев
-2755 269 24 Россия,Сибирский ФО,Новосибирская обл.,Купино
-1479 269 24 Россия,Сибирский ФО,Новосибирская обл.,Новосибирск
-2759 269 24 Россия,Сибирский ФО,Новосибирская обл.,Обь
-2756 269 24 Россия,Сибирский ФО,Новосибирская обл.,Татарск
-2758 269 24 Россия,Сибирский ФО,Новосибирская обл.,Тогучин
-2757 269 24 Россия,Сибирский ФО,Новосибирская обл.,Черепаново
-2754 269 24 Россия,Сибирский ФО,Новосибирская обл.,Чулым
-2252 269 24 Россия,Сибирский ФО,Новосибирская обл.,Другое
-270 270 24 Россия,Сибирский ФО,Омская обл.
-2733 270 24 Россия,Сибирский ФО,Омская обл.,Исилькуль
-1480 270 24 Россия,Сибирский ФО,Омская обл.,Калачинск
-1481 270 24 Россия,Сибирский ФО,Омская обл.,Марьяновка
-2735 270 24 Россия,Сибирский ФО,Омская обл.,Называевск
-1482 270 24 Россия,Сибирский ФО,Омская обл.,Омск
-2734 270 24 Россия,Сибирский ФО,Омская обл.,Тара
-2736 270 24 Россия,Сибирский ФО,Омская обл.,Тюкалинск
-2253 270 24 Россия,Сибирский ФО,Омская обл.,Другое
-272 272 24 Россия,Сибирский ФО,Томская обл.
-1488 272 24 Россия,Сибирский ФО,Томская обл.,Асино
-1489 272 24 Россия,Сибирский ФО,Томская обл.,Белый Яр
-3295 272 24 Россия,Сибирский ФО,Томская обл.,Каргасок
-1491 272 24 Россия,Сибирский ФО,Томская обл.,Колпашево
-1492 272 24 Россия,Сибирский ФО,Томская обл.,Северск
-1493 272 24 Россия,Сибирский ФО,Томская обл.,Стрежевой
-1490 272 24 Россия,Сибирский ФО,Томская обл.,Томск
-2273 272 24 Россия,Сибирский ФО,Томская обл.,Другое
-276 276 24 Россия,Сибирский ФО,Читинская обл.
-2803 276 24 Россия,Сибирский ФО,Читинская обл.,Балей
-2799 276 24 Россия,Сибирский ФО,Читинская обл.,Борзя
-1499 276 24 Россия,Сибирский ФО,Читинская обл.,Краснокаменск
-2801 276 24 Россия,Сибирский ФО,Читинская обл.,Могоча
-2800 276 24 Россия,Сибирский ФО,Читинская обл.,Нерчинск
-2802 276 24 Россия,Сибирский ФО,Читинская обл.,Петровск-Забайкальский
-2798 276 24 Россия,Сибирский ФО,Читинская обл.,Сретенск
-2796 276 24 Россия,Сибирский ФО,Читинская обл.,Хилок
-1498 276 24 Россия,Сибирский ФО,Читинская обл.,Чита
-2797 276 24 Россия,Сибирский ФО,Читинская обл.,Шилка
-2285 276 24 Россия,Сибирский ФО,Читинская обл.,Другое
-262 262 24 Россия,Сибирский ФО,Агинский Бурятский АО
-1438 262 24 Россия,Сибирский ФО,Агинский Бурятский АО,Агинское
-2213 262 24 Россия,Сибирский ФО,Агинский Бурятский АО,Другое
-271 271 24 Россия,Сибирский ФО,Таймырский АО
-3233 271 24 Россия,Сибирский ФО,Таймырский АО,Диксон
-1485 271 24 Россия,Сибирский ФО,Таймырский АО,Дудинка
-1487 271 24 Россия,Сибирский ФО,Таймырский АО,Кайеркан
-1483 271 24 Россия,Сибирский ФО,Таймырский АО,Норильск
-1484 271 24 Россия,Сибирский ФО,Таймырский АО,Талнах
-1486 271 24 Россия,Сибирский ФО,Таймырский АО,Хатанга
-2269 271 24 Россия,Сибирский ФО,Таймырский АО,Другое
-274 274 24 Россия,Сибирский ФО,Усть-Ордынский Бурятский АО
-1495 274 24 Россия,Сибирский ФО,Усть-Ордынский Бурятский АО,Усть-Ордынский
-2279 274 24 Россия,Сибирский ФО,Усть-Ордынский Бурятский АО,Другое
-277 277 24 Россия,Сибирский ФО,Эвенкийский АО
-1500 277 24 Россия,Сибирский ФО,Эвенкийский АО,Тура
-2288 277 24 Россия,Сибирский ФО,Эвенкийский АО,Другое
-3184 277 24 Россия,Уральский ФО
-278 278 24 Россия,Уральский ФО,Курганская обл.
-2668 278 24 Россия,Уральский ФО,Курганская обл.,Далматово
-2667 278 24 Россия,Уральский ФО,Курганская обл.,Катайск
-1524 278 24 Россия,Уральский ФО,Курганская обл.,Курган
-2669 278 24 Россия,Уральский ФО,Курганская обл.,Куртамыш
-2666 278 24 Россия,Уральский ФО,Курганская обл.,Макушино
-2671 278 24 Россия,Уральский ФО,Курганская обл.,Петухово
-1525 278 24 Россия,Уральский ФО,Курганская обл.,Шадринск
-2670 278 24 Россия,Уральский ФО,Курганская обл.,Шумиха
-2672 278 24 Россия,Уральский ФО,Курганская обл.,Щучье
-2243 278 24 Россия,Уральский ФО,Курганская обл.,Другое
-279 279 24 Россия,Уральский ФО,Свердловская обл.
-1526 279 24 Россия,Уральский ФО,Свердловская обл.,Алапаевск
-1527 279 24 Россия,Уральский ФО,Свердловская обл.,Арамиль
-2691 279 24 Россия,Уральский ФО,Свердловская обл.,Артемовский
-1528 279 24 Россия,Уральский ФО,Свердловская обл.,Асбест
-2924 279 24 Россия,Уральский ФО,Свердловская обл.,Белоярский
-2707 279 24 Россия,Уральский ФО,Свердловская обл.,Березовский
-1529 279 24 Россия,Уральский ФО,Свердловская обл.,Богданович
-2698 279 24 Россия,Уральский ФО,Свердловская обл.,Верхний Тагил
-1530 279 24 Россия,Уральский ФО,Свердловская обл.,Верхняя Пышма
-1531 279 24 Россия,Уральский ФО,Свердловская обл.,Верхняя Салда
-1532 279 24 Россия,Уральский ФО,Свердловская обл.,Верхняя Синячиха
-2696 279 24 Россия,Уральский ФО,Свердловская обл.,Верхняя Тура
-2692 279 24 Россия,Уральский ФО,Свердловская обл.,Верхотурье
-2706 279 24 Россия,Уральский ФО,Свердловская обл.,Волчанск
-2709 279 24 Россия,Уральский ФО,Свердловская обл.,Дегтярск
-1533 279 24 Россия,Уральский ФО,Свердловская обл.,Екатеринбург
-1534 279 24 Россия,Уральский ФО,Свердловская обл.,Заречный
-1535 279 24 Россия,Уральский ФО,Свердловская обл.,Ивдель
-1536 279 24 Россия,Уральский ФО,Свердловская обл.,Ирбит
-1537 279 24 Россия,Уральский ФО,Свердловская обл.,Каменск-Уральский
-1538 279 24 Россия,Уральский ФО,Свердловская обл.,Камышлов
-2708 279 24 Россия,Уральский ФО,Свердловская обл.,Карпинск
-1539 279 24 Россия,Уральский ФО,Свердловская обл.,Качканар
-2712 279 24 Россия,Уральский ФО,Свердловская обл.,Кировград
-1540 279 24 Россия,Уральский ФО,Свердловская обл.,Краснотурьинск
-2694 279 24 Россия,Уральский ФО,Свердловская обл.,Красноуральск
-2693 279 24 Россия,Уральский ФО,Свердловская обл.,Красноуфимск
-1541 279 24 Россия,Уральский ФО,Свердловская обл.,Кушва
-2711 279 24 Россия,Уральский ФО,Свердловская обл.,Михайловск
-2713 279 24 Россия,Уральский ФО,Свердловская обл.,Михайловск
-1542 279 24 Россия,Уральский ФО,Свердловская обл.,Невьянск
-2702 279 24 Россия,Уральский ФО,Свердловская обл.,Нижние Серги
-1543 279 24 Россия,Уральский ФО,Свердловская обл.,Нижний Тагил
-2695 279 24 Россия,Уральский ФО,Свердловская обл.,Нижняя Салда
-2697 279 24 Россия,Уральский ФО,Свердловская обл.,Нижняя Тура
-2699 279 24 Россия,Уральский ФО,Свердловская обл.,Новая Ляля
-2909 279 24 Россия,Уральский ФО,Свердловская обл.,Новоуральск
-1544 279 24 Россия,Уральский ФО,Свердловская обл.,Первоуральск
-1545 279 24 Россия,Уральский ФО,Свердловская обл.,Полевской
-1546 279 24 Россия,Уральский ФО,Свердловская обл.,Ревда
-1547 279 24 Россия,Уральский ФО,Свердловская обл.,Реж
-3296 279 24 Россия,Уральский ФО,Свердловская обл.,Рефтинский
-2700 279 24 Россия,Уральский ФО,Свердловская обл.,Североуральск
-1548 279 24 Россия,Уральский ФО,Свердловская обл.,Серов
-2710 279 24 Россия,Уральский ФО,Свердловская обл.,Среднеуральск
-2701 279 24 Россия,Уральский ФО,Свердловская обл.,Сухой Лог
-2703 279 24 Россия,Уральский ФО,Свердловская обл.,Сысерть
-1549 279 24 Россия,Уральский ФО,Свердловская обл.,Тавда
-2704 279 24 Россия,Уральский ФО,Свердловская обл.,Талица
-2705 279 24 Россия,Уральский ФО,Свердловская обл.,Туринск
-2265 279 24 Россия,Уральский ФО,Свердловская обл.,Другое
-280 280 24 Россия,Уральский ФО,Тюменская обл.
-1550 280 24 Россия,Уральский ФО,Тюменская обл.,Заводоуковск
-1551 280 24 Россия,Уральский ФО,Тюменская обл.,Ишим
-3326 280 24 Россия,Уральский ФО,Тюменская обл.,Сургут
-1552 280 24 Россия,Уральский ФО,Тюменская обл.,Тобольск
-1553 280 24 Россия,Уральский ФО,Тюменская обл.,Тюмень
-2748 280 24 Россия,Уральский ФО,Тюменская обл.,Ялуторовск
-2276 280 24 Россия,Уральский ФО,Тюменская обл.,Другое
-282 282 24 Россия,Уральский ФО,Челябинская обл.
-1564 282 24 Россия,Уральский ФО,Челябинская обл.,Аша
-2723 282 24 Россия,Уральский ФО,Челябинская обл.,Бакал
-2724 282 24 Россия,Уральский ФО,Челябинская обл.,Верхнеуральск
-2716 282 24 Россия,Уральский ФО,Челябинская обл.,Верхний Уфалей
-3297 282 24 Россия,Уральский ФО,Челябинская обл.,Всеволожск
-2725 282 24 Россия,Уральский ФО,Челябинская обл.,Еманжелинск
-1565 282 24 Россия,Уральский ФО,Челябинская обл.,Златоуст
-2722 282 24 Россия,Уральский ФО,Челябинская обл.,Карабаш
-1566 282 24 Россия,Уральский ФО,Челябинская обл.,Карталы
-2718 282 24 Россия,Уральский ФО,Челябинская обл.,Касли
-2720 282 24 Россия,Уральский ФО,Челябинская обл.,Катав-Ивановск
-1567 282 24 Россия,Уральский ФО,Челябинская обл.,Копейск
-2721 282 24 Россия,Уральский ФО,Челябинская обл.,Коркино
-2715 282 24 Россия,Уральский ФО,Челябинская обл.,Куса
-1568 282 24 Россия,Уральский ФО,Челябинская обл.,Кыштым
-1569 282 24 Россия,Уральский ФО,Челябинская обл.,Магнитогорск
-1570 282 24 Россия,Уральский ФО,Челябинская обл.,Миасс
-2726 282 24 Россия,Уральский ФО,Челябинская обл.,Миньяр
-2717 282 24 Россия,Уральский ФО,Челябинская обл.,Нязепетровск
-3100 282 24 Россия,Уральский ФО,Челябинская обл.,Озерск
-1571 282 24 Россия,Уральский ФО,Челябинская обл.,Пласт
-2719 282 24 Россия,Уральский ФО,Челябинская обл.,Сатка
-2727 282 24 Россия,Уральский ФО,Челябинская обл.,Сим
-1572 282 24 Россия,Уральский ФО,Челябинская обл.,Снежинск
-3332 282 24 Россия,Уральский ФО,Челябинская обл.,Трехгорный
-1573 282 24 Россия,Уральский ФО,Челябинская обл.,Троицк
-1574 282 24 Россия,Уральский ФО,Челябинская обл.,Усть-Катав
-1575 282 24 Россия,Уральский ФО,Челябинская обл.,Чебаркуль
-1576 282 24 Россия,Уральский ФО,Челябинская обл.,Челябинск
-1577 282 24 Россия,Уральский ФО,Челябинская обл.,Южноуральск
-2714 282 24 Россия,Уральский ФО,Челябинская обл.,Юрюзань
-2283 282 24 Россия,Уральский ФО,Челябинская обл.,Другое
-281 281 24 Россия,Уральский ФО,Ханты-Мансийский АО - Югра
-2749 281 24 Россия,Уральский ФО,Ханты-Мансийский АО - Югра,Белоярский
-1554 281 24 Россия,Уральский ФО,Ханты-Мансийский АО - Югра,Игрим
-1555 281 24 Россия,Уральский ФО,Ханты-Мансийский АО - Югра,Когалым
-1556 281 24 Россия,Уральский ФО,Ханты-Мансийский АО - Югра,Лангепас
-1561 281 24 Россия,Уральский ФО,Ханты-Мансийский АО - Югра,Мегион
-1562 281 24 Россия,Уральский ФО,Ханты-Мансийский АО - Югра,Нефтеюганск
-1559 281 24 Россия,Уральский ФО,Ханты-Мансийский АО - Югра,Нижневартовск
-2852 281 24 Россия,Уральский ФО,Ханты-Мансийский АО - Югра,Нягань
-2853 281 24 Россия,Уральский ФО,Ханты-Мансийский АО - Югра,Нягань
-2854 281 24 Россия,Уральский ФО,Ханты-Мансийский АО - Югра,Пыть-Ях
-1560 281 24 Россия,Уральский ФО,Ханты-Мансийский АО - Югра,Радужный
-1563 281 24 Россия,Уральский ФО,Ханты-Мансийский АО - Югра,Советский
-2747 281 24 Россия,Уральский ФО,Ханты-Мансийский АО - Югра,Сургут
-1557 281 24 Россия,Уральский ФО,Ханты-Мансийский АО - Югра,Урай
-1558 281 24 Россия,Уральский ФО,Ханты-Мансийский АО - Югра,Ханты-Мансийск
-3344 281 24 Россия,Уральский ФО,Ханты-Мансийский АО - Югра,Югорск
-2282 281 24 Россия,Уральский ФО,Ханты-Мансийский АО - Югра,Другое
-283 283 24 Россия,Уральский ФО,Ямало-Ненецкий АО
-3298 283 24 Россия,Уральский ФО,Ямало-Ненецкий АО,Губкинский
-1578 283 24 Россия,Уральский ФО,Ямало-Ненецкий АО,Лабытнанги
-2856 283 24 Россия,Уральский ФО,Ямало-Ненецкий АО,Муравленко
-1579 283 24 Россия,Уральский ФО,Ямало-Ненецкий АО,Надым
-1580 283 24 Россия,Уральский ФО,Ямало-Ненецкий АО,Новый Уренгой
-1581 283 24 Россия,Уральский ФО,Ямало-Ненецкий АО,Ноябрьск
-1582 283 24 Россия,Уральский ФО,Ямало-Ненецкий АО,Салехард
-1583 283 24 Россия,Уральский ФО,Ямало-Ненецкий АО,Уренгой
-2289 283 24 Россия,Уральский ФО,Ямало-Ненецкий АО,Другое
-3180 283 24 Россия,Центральный ФО
-284 284 24 Россия,Центральный ФО,Белгородская обл.
-1625 284 24 Россия,Центральный ФО,Белгородская обл.,Алексеевка
-1626 284 24 Россия,Центральный ФО,Белгородская обл.,Белгород
-2172 284 24 Россия,Центральный ФО,Белгородская обл.,Валуйки
-2173 284 24 Россия,Центральный ФО,Белгородская обл.,Грайворон
-1627 284 24 Россия,Центральный ФО,Белгородская обл.,Губкин
-2174 284 24 Россия,Центральный ФО,Белгородская обл.,Короча
-2175 284 24 Россия,Центральный ФО,Белгородская обл.,Новый Оскол
-1628 284 24 Россия,Центральный ФО,Белгородская обл.,Старый Оскол
-1629 284 24 Россия,Центральный ФО,Белгородская обл.,Шебекино
-2221 284 24 Россия,Центральный ФО,Белгородская обл.,Другое
-285 285 24 Россия,Центральный ФО,Брянская обл.
-1630 285 24 Россия,Центральный ФО,Брянская обл.,Брянск
-3283 285 24 Россия,Центральный ФО,Брянская обл.,Дебрянск
-1631 285 24 Россия,Центральный ФО,Брянская обл.,Дятьково
-2013 285 24 Россия,Центральный ФО,Брянская обл.,Жуковка
-2015 285 24 Россия,Центральный ФО,Брянская обл.,Злынка
-1632 285 24 Россия,Центральный ФО,Брянская обл.,Карачев
-1633 285 24 Россия,Центральный ФО,Брянская обл.,Клинцы
-1634 285 24 Россия,Центральный ФО,Брянская обл.,Мглин
-2016 285 24 Россия,Центральный ФО,Брянская обл.,Новозыбков
-2018 285 24 Россия,Центральный ФО,Брянская обл.,Почеп
-2017 285 24 Россия,Центральный ФО,Брянская обл.,Севск
-2020 285 24 Россия,Центральный ФО,Брянская обл.,Сельцо
-2014 285 24 Россия,Центральный ФО,Брянская обл.,Стародуб
-2010 285 24 Россия,Центральный ФО,Брянская обл.,Сураж
-2012 285 24 Россия,Центральный ФО,Брянская обл.,Трубчевск
-2011 285 24 Россия,Центральный ФО,Брянская обл.,Унеча
-2019 285 24 Россия,Центральный ФО,Брянская обл.,Фокино
-2210 285 24 Россия,Центральный ФО,Брянская обл.,Другое
-286 286 24 Россия,Центральный ФО,Владимирская обл.
-1635 286 24 Россия,Центральный ФО,Владимирская обл.,Александров
-1636 286 24 Россия,Центральный ФО,Владимирская обл.,Владимир
-2021 286 24 Россия,Центральный ФО,Владимирская обл.,Вязники
-1637 286 24 Россия,Центральный ФО,Владимирская обл.,Головино
-2022 286 24 Россия,Центральный ФО,Владимирская обл.,Гороховец
-1638 286 24 Россия,Центральный ФО,Владимирская обл.,Гусь-Хрустальный
-2023 286 24 Россия,Центральный ФО,Владимирская обл.,Камешково
-2031 286 24 Россия,Центральный ФО,Владимирская обл.,Карабаново
-2024 286 24 Россия,Центральный ФО,Владимирская обл.,Киржач
-1639 286 24 Россия,Центральный ФО,Владимирская обл.,Ковров
-1640 286 24 Россия,Центральный ФО,Владимирская обл.,Кольчугино
-2026 286 24 Россия,Центральный ФО,Владимирская обл.,Костерево
-3299 286 24 Россия,Центральный ФО,Владимирская обл.,Красная Горбатка
-2033 286 24 Россия,Центральный ФО,Владимирская обл.,Лакинск
-2025 286 24 Россия,Центральный ФО,Владимирская обл.,Меленки
-1641 286 24 Россия,Центральный ФО,Владимирская обл.,Муром
-1642 286 24 Россия,Центральный ФО,Владимирская обл.,Петушки
-2027 286 24 Россия,Центральный ФО,Владимирская обл.,Покров
-2211 286 24 Россия,Центральный ФО,Владимирская обл.,Радужный
-2028 286 24 Россия,Центральный ФО,Владимирская обл.,Собинка
-2032 286 24 Россия,Центральный ФО,Владимирская обл.,Струнино
-2029 286 24 Россия,Центральный ФО,Владимирская обл.,Судогда
-1643 286 24 Россия,Центральный ФО,Владимирская обл.,Суздаль
-2030 286 24 Россия,Центральный ФО,Владимирская обл.,Юрьев-Польский
-2212 286 24 Россия,Центральный ФО,Владимирская обл.,Другое
-287 287 24 Россия,Центральный ФО,Воронежская обл.
-1644 287 24 Россия,Центральный ФО,Воронежская обл.,Бобров
-1645 287 24 Россия,Центральный ФО,Воронежская обл.,Богучар
-1646 287 24 Россия,Центральный ФО,Воронежская обл.,Борисоглебск
-1647 287 24 Россия,Центральный ФО,Воронежская обл.,Бутурлиновка
-1648 287 24 Россия,Центральный ФО,Воронежская обл.,Воронеж
-2178 287 24 Россия,Центральный ФО,Воронежская обл.,Калач
-2176 287 24 Россия,Центральный ФО,Воронежская обл.,Лиски
-1649 287 24 Россия,Центральный ФО,Воронежская обл.,Нововоронеж
-2177 287 24 Россия,Центральный ФО,Воронежская обл.,Новохоперск
-2180 287 24 Россия,Центральный ФО,Воронежская обл.,Острогожск
-1650 287 24 Россия,Центральный ФО,Воронежская обл.,Павловск
-2181 287 24 Россия,Центральный ФО,Воронежская обл.,Поворино
-1651 287 24 Россия,Центральный ФО,Воронежская обл.,Россошь
-2179 287 24 Россия,Центральный ФО,Воронежская обл.,Семилуки
-2182 287 24 Россия,Центральный ФО,Воронежская обл.,Эртиль
-2224 287 24 Россия,Центральный ФО,Воронежская обл.,Другое
-288 288 24 Россия,Центральный ФО,Ивановская обл.
-1652 288 24 Россия,Центральный ФО,Ивановская обл.,Вичуга
-2036 288 24 Россия,Центральный ФО,Ивановская обл.,Гаврилов Посад
-1657 288 24 Россия,Центральный ФО,Ивановская обл.,Заволжск
-1653 288 24 Россия,Центральный ФО,Ивановская обл.,Иваново
-1656 288 24 Россия,Центральный ФО,Ивановская обл.,Кинешма
-2040 288 24 Россия,Центральный ФО,Ивановская обл.,Комсомольск
-2037 288 24 Россия,Центральный ФО,Ивановская обл.,Кохма
-2043 288 24 Россия,Центральный ФО,Ивановская обл.,Наволоки
-3300 288 24 Россия,Центральный ФО,Ивановская обл.,Палех
-2039 288 24 Россия,Центральный ФО,Ивановская обл.,Плес
-2038 288 24 Россия,Центральный ФО,Ивановская обл.,Приволжск
-2042 288 24 Россия,Центральный ФО,Ивановская обл.,Пучеж
-2044 288 24 Россия,Центральный ФО,Ивановская обл.,Родники
-1655 288 24 Россия,Центральный ФО,Ивановская обл.,Тейково
-2034 288 24 Россия,Центральный ФО,Ивановская обл.,Фурманов
-1654 288 24 Россия,Центральный ФО,Ивановская обл.,Шуя
-2041 288 24 Россия,Центральный ФО,Ивановская обл.,Южа
-2035 288 24 Россия,Центральный ФО,Ивановская обл.,Юрьевец
-2227 288 24 Россия,Центральный ФО,Ивановская обл.,Другое
-289 289 24 Россия,Центральный ФО,Калужская обл.
-2050 289 24 Россия,Центральный ФО,Калужская обл.,Балабаново
-2051 289 24 Россия,Центральный ФО,Калужская обл.,Боровск
-3301 289 24 Россия,Центральный ФО,Калужская обл.,Воротынск
-2052 289 24 Россия,Центральный ФО,Калужская обл.,Жиздра
-1660 289 24 Россия,Центральный ФО,Калужская обл.,Жуковка
-1658 289 24 Россия,Центральный ФО,Калужская обл.,Калуга
-2046 289 24 Россия,Центральный ФО,Калужская обл.,Киров
-1661 289 24 Россия,Центральный ФО,Калужская обл.,Козельск
-2053 289 24 Россия,Центральный ФО,Калужская обл.,Кондрово
-2049 289 24 Россия,Центральный ФО,Калужская обл.,Людиново
-1659 289 24 Россия,Центральный ФО,Калужская обл.,Малоярославец
-2054 289 24 Россия,Центральный ФО,Калужская обл.,Медынь
-2055 289 24 Россия,Центральный ФО,Калужская обл.,Мещовск
-2047 289 24 Россия,Центральный ФО,Калужская обл.,Мосальск
-1662 289 24 Россия,Центральный ФО,Калужская обл.,Обнинск
-2057 289 24 Россия,Центральный ФО,Калужская обл.,Сосенский
-2056 289 24 Россия,Центральный ФО,Калужская обл.,Спас-Демянск
-2045 289 24 Россия,Центральный ФО,Калужская обл.,Сухиничи
-1663 289 24 Россия,Центральный ФО,Калужская обл.,Таруса
-2131 289 24 Россия,Центральный ФО,Калужская обл.,Чекалин
-2048 289 24 Россия,Центральный ФО,Калужская обл.,Юхнов
-2233 289 24 Россия,Центральный ФО,Калужская обл.,Другое
-290 290 24 Россия,Центральный ФО,Костромская обл.
-1664 290 24 Россия,Центральный ФО,Костромская обл.,Буй
-1665 290 24 Россия,Центральный ФО,Костромская обл.,Волгореченск
-1666 290 24 Россия,Центральный ФО,Костромская обл.,Галич
-2059 290 24 Россия,Центральный ФО,Костромская обл.,Кологрив
-1667 290 24 Россия,Центральный ФО,Костромская обл.,Кострома
-3302 290 24 Россия,Центральный ФО,Костромская обл.,Красное-на-Волге
-1668 290 24 Россия,Центральный ФО,Костромская обл.,Макарьев
-2060 290 24 Россия,Центральный ФО,Костромская обл.,Мантурово
-1669 290 24 Россия,Центральный ФО,Костромская обл.,Нерехта
-2061 290 24 Россия,Центральный ФО,Костромская обл.,Нея
-2062 290 24 Россия,Центральный ФО,Костромская обл.,Солигалич
-2058 290 24 Россия,Центральный ФО,Костромская обл.,Чухлома
-1670 290 24 Россия,Центральный ФО,Костромская обл.,Шарья
-2240 290 24 Россия,Центральный ФО,Костромская обл.,Другое
-291 291 24 Россия,Центральный ФО,Курская обл.
-1671 291 24 Россия,Центральный ФО,Курская обл.,Дмитриев-Льговский
-1673 291 24 Россия,Центральный ФО,Курская обл.,Железногорск
-3279 291 24 Россия,Центральный ФО,Курская обл.,Железногорск
-1672 291 24 Россия,Центральный ФО,Курская обл.,Курск
-2187 291 24 Россия,Центральный ФО,Курская обл.,Курчатов
-2188 291 24 Россия,Центральный ФО,Курская обл.,Льгов
-2184 291 24 Россия,Центральный ФО,Курская обл.,Обоянь
-2185 291 24 Россия,Центральный ФО,Курская обл.,Рыльск
-2183 291 24 Россия,Центральный ФО,Курская обл.,Суджа
-2189 291 24 Россия,Центральный ФО,Курская обл.,Фатеж
-2186 291 24 Россия,Центральный ФО,Курская обл.,Щигры
-2244 291 24 Россия,Центральный ФО,Курская обл.,Другое
-292 292 24 Россия,Центральный ФО,Липецкая обл.
-2194 292 24 Россия,Центральный ФО,Липецкая обл.,Грязи
-2193 292 24 Россия,Центральный ФО,Липецкая обл.,Данков
-1674 292 24 Россия,Центральный ФО,Липецкая обл.,Елец
-2190 292 24 Россия,Центральный ФО,Липецкая обл.,Задонск
-2195 292 24 Россия,Центральный ФО,Липецкая обл.,Лебедянь
-1675 292 24 Россия,Центральный ФО,Липецкая обл.,Липецк
-2192 292 24 Россия,Центральный ФО,Липецкая обл.,Усмань
-2191 292 24 Россия,Центральный ФО,Липецкая обл.,Чаплыгин
-2245 292 24 Россия,Центральный ФО,Липецкая обл.,Другое
-293 293 24 Россия,Центральный ФО,Московская обл.
-1733 293 24 Россия,Центральный ФО,Московская обл.,Апрелевка
-1732 293 24 Россия,Центральный ФО,Московская обл.,Балашиха
-1731 293 24 Россия,Центральный ФО,Московская обл.,Бронницы
-1730 293 24 Россия,Центральный ФО,Московская обл.,Верея
-2063 293 24 Россия,Центральный ФО,Московская обл.,Видное
-2064 293 24 Россия,Центральный ФО,Московская обл.,Волоколамск
-1729 293 24 Россия,Центральный ФО,Московская обл.,Воскресенск
-1728 293 24 Россия,Центральный ФО,Московская обл.,Высоковск
-1727 293 24 Россия,Центральный ФО,Московская обл.,Голицыно
-2065 293 24 Россия,Центральный ФО,Московская обл.,Дедовск
-1726 293 24 Россия,Центральный ФО,Московская обл.,Дзержинский
-1725 293 24 Россия,Центральный ФО,Московская обл.,Дмитров
-1724 293 24 Россия,Центральный ФО,Московская обл.,Долгопрудный
-1723 293 24 Россия,Центральный ФО,Московская обл.,Домодедово
-2066 293 24 Россия,Центральный ФО,Московская обл.,Дрезна
-1722 293 24 Россия,Центральный ФО,Московская обл.,Дубна
-1721 293 24 Россия,Центральный ФО,Московская обл.,Егорьевск
-1720 293 24 Россия,Центральный ФО,Московская обл.,Железнодорожный
-1719 293 24 Россия,Центральный ФО,Московская обл.,Жуковский
-2067 293 24 Россия,Центральный ФО,Московская обл.,Зарайск
-1718 293 24 Россия,Центральный ФО,Московская обл.,Звенигород
-1715 293 24 Россия,Центральный ФО,Московская обл.,Ивантеевка
-1717 293 24 Россия,Центральный ФО,Московская обл.,Истра
-2068 293 24 Россия,Центральный ФО,Московская обл.,Калининград
-2069 293 24 Россия,Центральный ФО,Московская обл.,Кашира
-1716 293 24 Россия,Центральный ФО,Московская обл.,Климовск
-1714 293 24 Россия,Центральный ФО,Московская обл.,Клин
-1713 293 24 Россия,Центральный ФО,Московская обл.,Коломна
-1712 293 24 Россия,Центральный ФО,Московская обл.,Королев
-1711 293 24 Россия,Центральный ФО,Московская обл.,Красноармейск
-1710 293 24 Россия,Центральный ФО,Московская обл.,Красногорск
-2070 293 24 Россия,Центральный ФО,Московская обл.,Краснозаводск
-2071 293 24 Россия,Центральный ФО,Московская обл.,Куровское
-1709 293 24 Россия,Центральный ФО,Московская обл.,Ликино-Дулево
-1708 293 24 Россия,Центральный ФО,Московская обл.,Лобня
-2072 293 24 Россия,Центральный ФО,Московская обл.,Лосино-Петровский
-1707 293 24 Россия,Центральный ФО,Московская обл.,Луховицы
-1706 293 24 Россия,Центральный ФО,Московская обл.,Лыткарино
-1705 293 24 Россия,Центральный ФО,Московская обл.,Люберцы
-1704 293 24 Россия,Центральный ФО,Московская обл.,Менделеево
-1703 293 24 Россия,Центральный ФО,Московская обл.,Можайск
-1702 293 24 Россия,Центральный ФО,Московская обл.,Мытищи
-1701 293 24 Россия,Центральный ФО,Московская обл.,Наро-Фоминск
-1700 293 24 Россия,Центральный ФО,Московская обл.,Ногинск
-1698 293 24 Россия,Центральный ФО,Московская обл.,Одинцово
-2073 293 24 Россия,Центральный ФО,Московская обл.,Ожерелье
-2074 293 24 Россия,Центральный ФО,Московская обл.,Озеры
-1699 293 24 Россия,Центральный ФО,Московская обл.,Орехово-Зуево
-1697 293 24 Россия,Центральный ФО,Московская обл.,Павловский Посад
-1696 293 24 Россия,Центральный ФО,Московская обл.,Подольск
-1695 293 24 Россия,Центральный ФО,Московская обл.,Протвино
-1694 293 24 Россия,Центральный ФО,Московская обл.,Пушкино
-1693 293 24 Россия,Центральный ФО,Московская обл.,Пущино
-1692 293 24 Россия,Центральный ФО,Московская обл.,Раменское
-1691 293 24 Россия,Центральный ФО,Московская обл.,Реутов
-1690 293 24 Россия,Центральный ФО,Московская обл.,Решетников
-2075 293 24 Россия,Центральный ФО,Московская обл.,Рошаль
-2076 293 24 Россия,Центральный ФО,Московская обл.,Руза
-1689 293 24 Россия,Центральный ФО,Московская обл.,Сергиев Посад
-1688 293 24 Россия,Центральный ФО,Московская обл.,Серпухов
-1687 293 24 Россия,Центральный ФО,Московская обл.,Солнечногорск
-1686 293 24 Россия,Центральный ФО,Московская обл.,Ступино
-2077 293 24 Россия,Центральный ФО,Московская обл.,Сходня
-2078 293 24 Россия,Центральный ФО,Московская обл.,Талдом
-1685 293 24 Россия,Центральный ФО,Московская обл.,Троицк
-1684 293 24 Россия,Центральный ФО,Московская обл.,Фрязино
-1683 293 24 Россия,Центральный ФО,Московская обл.,Химки
-1682 293 24 Россия,Центральный ФО,Московская обл.,Хотьково
-1681 293 24 Россия,Центральный ФО,Московская обл.,Черноголовка
-1680 293 24 Россия,Центральный ФО,Московская обл.,Чехов
-1679 293 24 Россия,Центральный ФО,Московская обл.,Шатура
-1678 293 24 Россия,Центральный ФО,Московская обл.,Щелково
-2080 293 24 Россия,Центральный ФО,Московская обл.,Щербинка
-1677 293 24 Россия,Центральный ФО,Московская обл.,Электрогорск
-1676 293 24 Россия,Центральный ФО,Московская обл.,Электросталь
-2079 293 24 Россия,Центральный ФО,Московская обл.,Электроугли
-3031 293 24 Россия,Центральный ФО,Московская обл.,Юбилейный
-2081 293 24 Россия,Центральный ФО,Московская обл.,Яхрома
-2249 293 24 Россия,Центральный ФО,Московская обл.,Другое
-294 294 24 Россия,Центральный ФО,Орловская обл.
-2083 294 24 Россия,Центральный ФО,Орловская обл.,Болхов
-2082 294 24 Россия,Центральный ФО,Орловская обл.,Дмитровск-Орловский
-3160 294 24 Россия,Центральный ФО,Орловская обл.,Залегощь
-1736 294 24 Россия,Центральный ФО,Орловская обл.,Ливны
-2084 294 24 Россия,Центральный ФО,Орловская обл.,Малоархангельск
-1737 294 24 Россия,Центральный ФО,Орловская обл.,Мценск
-2085 294 24 Россия,Центральный ФО,Орловская обл.,Новосиль
-1735 294 24 Россия,Центральный ФО,Орловская обл.,Орел
-2255 294 24 Россия,Центральный ФО,Орловская обл.,Другое
-295 295 24 Россия,Центральный ФО,Рязанская обл.
-1740 295 24 Россия,Центральный ФО,Рязанская обл.,Гусь-Железный
-1741 295 24 Россия,Центральный ФО,Рязанская обл.,Касимов
-2086 295 24 Россия,Центральный ФО,Рязанская обл.,Кораблино
-2087 295 24 Россия,Центральный ФО,Рязанская обл.,Михайлов
-2089 295 24 Россия,Центральный ФО,Рязанская обл.,Новомичуринск
-2091 295 24 Россия,Центральный ФО,Рязанская обл.,Рыбное
-2093 295 24 Россия,Центральный ФО,Рязанская обл.,Ряжск
-1738 295 24 Россия,Центральный ФО,Рязанская обл.,Рязань
-3305 295 24 Россия,Центральный ФО,Рязанская обл.,Сапожок
-1739 295 24 Россия,Центральный ФО,Рязанская обл.,Сасово
-2090 295 24 Россия,Центральный ФО,Рязанская обл.,Скопин
-2088 295 24 Россия,Центральный ФО,Рязанская обл.,Спас-Клепики
-2092 295 24 Россия,Центральный ФО,Рязанская обл.,Спасск-Рязанский
-2094 295 24 Россия,Центральный ФО,Рязанская обл.,Шацк
-3320 295 24 Россия,Центральный ФО,Рязанская обл.,Шилово
-2260 295 24 Россия,Центральный ФО,Рязанская обл.,Другое
-296 296 24 Россия,Центральный ФО,Смоленская обл.
-2095 296 24 Россия,Центральный ФО,Смоленская обл.,Велиж
-1743 296 24 Россия,Центральный ФО,Смоленская обл.,Вязьма
-1744 296 24 Россия,Центральный ФО,Смоленская обл.,Гагарин
-2096 296 24 Россия,Центральный ФО,Смоленская обл.,Демидов
-1745 296 24 Россия,Центральный ФО,Смоленская обл.,Десногорск
-1746 296 24 Россия,Центральный ФО,Смоленская обл.,Дорогубуж
-2097 296 24 Россия,Центральный ФО,Смоленская обл.,Духовщина
-2098 296 24 Россия,Центральный ФО,Смоленская обл.,Ельня
-2099 296 24 Россия,Центральный ФО,Смоленская обл.,Починок
-2100 296 24 Россия,Центральный ФО,Смоленская обл.,Рославль
-2101 296 24 Россия,Центральный ФО,Смоленская обл.,Рудня
-1747 296 24 Россия,Центральный ФО,Смоленская обл.,Сафоново
-1742 296 24 Россия,Центральный ФО,Смоленская обл.,Смоленск
-2102 296 24 Россия,Центральный ФО,Смоленская обл.,Сычевка
-1748 296 24 Россия,Центральный ФО,Смоленская обл.,Ярцево
-2267 296 24 Россия,Центральный ФО,Смоленская обл.,Другое
-297 297 24 Россия,Центральный ФО,Тамбовская обл.
-2198 297 24 Россия,Центральный ФО,Тамбовская обл.,Жердевка
-2199 297 24 Россия,Центральный ФО,Тамбовская обл.,Кирсанов
-1752 297 24 Россия,Центральный ФО,Тамбовская обл.,Котовск
-1751 297 24 Россия,Центральный ФО,Тамбовская обл.,Мичуринск
-2196 297 24 Россия,Центральный ФО,Тамбовская обл.,Моршанск
-1750 297 24 Россия,Центральный ФО,Тамбовская обл.,Рассказово
-3271 297 24 Россия,Центральный ФО,Тамбовская обл.,Сатинка
-1749 297 24 Россия,Центральный ФО,Тамбовская обл.,Тамбов
-3272 297 24 Россия,Центральный ФО,Тамбовская обл.,Тулиновка
-2197 297 24 Россия,Центральный ФО,Тамбовская обл.,Уварово
-2270 297 24 Россия,Центральный ФО,Тамбовская обл.,Другое
-298 298 24 Россия,Центральный ФО,Тверская обл.
-2103 298 24 Россия,Центральный ФО,Тверская обл.,Андреаполь
-2104 298 24 Россия,Центральный ФО,Тверская обл.,Бежецк
-2105 298 24 Россия,Центральный ФО,Тверская обл.,Белый
-2106 298 24 Россия,Центральный ФО,Тверская обл.,Бологое
-2107 298 24 Россия,Центральный ФО,Тверская обл.,Весьегонск
-1753 298 24 Россия,Центральный ФО,Тверская обл.,Вышний Волочек
-2108 298 24 Россия,Центральный ФО,Тверская обл.,Западная Двина
-2109 298 24 Россия,Центральный ФО,Тверская обл.,Зубцов
-2110 298 24 Россия,Центральный ФО,Тверская обл.,Калязин
-2111 298 24 Россия,Центральный ФО,Тверская обл.,Кашин
-1758 298 24 Россия,Центральный ФО,Тверская обл.,Кимры
-1756 298 24 Россия,Центральный ФО,Тверская обл.,Конаково
-2112 298 24 Россия,Центральный ФО,Тверская обл.,Красный Холм
-1759 298 24 Россия,Центральный ФО,Тверская обл.,Кувшиново
-1760 298 24 Россия,Центральный ФО,Тверская обл.,Лихославль
-1761 298 24 Россия,Центральный ФО,Тверская обл.,Нелидово
-2113 298 24 Россия,Центральный ФО,Тверская обл.,Осташков
-1757 298 24 Россия,Центральный ФО,Тверская обл.,Ржев
-2114 298 24 Россия,Центральный ФО,Тверская обл.,Старица
-1754 298 24 Россия,Центральный ФО,Тверская обл.,Тверь
-2115 298 24 Россия,Центральный ФО,Тверская обл.,Торжок
-2116 298 24 Россия,Центральный ФО,Тверская обл.,Торопец
-1755 298 24 Россия,Центральный ФО,Тверская обл.,Удомля
-2272 298 24 Россия,Центральный ФО,Тверская обл.,Другое
-299 299 24 Россия,Центральный ФО,Тульская обл.
-2127 299 24 Россия,Центральный ФО,Тульская обл.,Алексин
-2126 299 24 Россия,Центральный ФО,Тульская обл.,Белев
-2118 299 24 Россия,Центральный ФО,Тульская обл.,Богородицк
-2122 299 24 Россия,Центральный ФО,Тульская обл.,Болохово
-2129 299 24 Россия,Центральный ФО,Тульская обл.,Венев
-1762 299 24 Россия,Центральный ФО,Тульская обл.,Донской
-2128 299 24 Россия,Центральный ФО,Тульская обл.,Ефремов
-3354 299 24 Россия,Центральный ФО,Тульская обл.,Заокский
-2124 299 24 Россия,Центральный ФО,Тульская обл.,Киреевск
-1763 299 24 Россия,Центральный ФО,Тульская обл.,Климовск
-2123 299 24 Россия,Центральный ФО,Тульская обл.,Липки
-1764 299 24 Россия,Центральный ФО,Тульская обл.,Новомосковск
-2117 299 24 Россия,Центральный ФО,Тульская обл.,Плавск
-2130 299 24 Россия,Центральный ФО,Тульская обл.,Северо-Задонск
-2120 299 24 Россия,Центральный ФО,Тульская обл.,Советск
-2119 299 24 Россия,Центральный ФО,Тульская обл.,Сокольники
-2125 299 24 Россия,Центральный ФО,Тульская обл.,Суворов
-1765 299 24 Россия,Центральный ФО,Тульская обл.,Тула
-1766 299 24 Россия,Центральный ФО,Тульская обл.,Узловая
-2121 299 24 Россия,Центральный ФО,Тульская обл.,Щекино
-1767 299 24 Россия,Центральный ФО,Тульская обл.,Ясногорск
-2274 299 24 Россия,Центральный ФО,Тульская обл.,Другое
-300 300 24 Россия,Центральный ФО,Ярославская обл.
-3053 300 24 Россия,Центральный ФО,Ярославская обл.,Большое Село
-3268 300 24 Россия,Центральный ФО,Ярославская обл.,Брейтово
-1773 300 24 Россия,Центральный ФО,Ярославская обл.,Гаврилов-Ям
-2132 300 24 Россия,Центральный ФО,Ярославская обл.,Данилов
-3269 300 24 Россия,Центральный ФО,Ярославская обл.,Красные Ткачи
-2133 300 24 Россия,Центральный ФО,Ярославская обл.,Любим
-3270 300 24 Россия,Центральный ФО,Ярославская обл.,Мокеевское
-1774 300 24 Россия,Центральный ФО,Ярославская обл.,Мышкин
-2994 300 24 Россия,Центральный ФО,Ярославская обл.,Некоуз
-1775 300 24 Россия,Центральный ФО,Ярославская обл.,Переславль-Залесский
-2134 300 24 Россия,Центральный ФО,Ярославская обл.,Пошехонье
-1769 300 24 Россия,Центральный ФО,Ярославская обл.,Ростов
-1771 300 24 Россия,Центральный ФО,Ярославская обл.,Рыбинск
-1772 300 24 Россия,Центральный ФО,Ярославская обл.,Тутаев
-1770 300 24 Россия,Центральный ФО,Ярославская обл.,Углич
-1768 300 24 Россия,Центральный ФО,Ярославская обл.,Ярославль
-2290 300 24 Россия,Центральный ФО,Ярославская обл.,Другое
-3182 300 24 Россия,Южный ФО
-301 301 24 Россия,Южный ФО,Адыгея
-2849 301 24 Россия,Южный ФО,Адыгея,Адыгейск
-1776 301 24 Россия,Южный ФО,Адыгея,Майкоп
-2214 301 24 Россия,Южный ФО,Адыгея,Другое
-304 304 24 Россия,Южный ФО,Дагестан
-2617 304 24 Россия,Южный ФО,Дагестан,Буйнакск
-1791 304 24 Россия,Южный ФО,Дагестан,Гуниб
-1788 304 24 Россия,Южный ФО,Дагестан,Дербент
-2619 304 24 Россия,Южный ФО,Дагестан,Избербаш
-1789 304 24 Россия,Южный ФО,Дагестан,Каспийск
-2618 304 24 Россия,Южный ФО,Дагестан,Кизилюрт
-1790 304 24 Россия,Южный ФО,Дагестан,Кизляр
-1792 304 24 Россия,Южный ФО,Дагестан,Махачкала
-2620 304 24 Россия,Южный ФО,Дагестан,Хасавюрт
-2225 304 24 Россия,Южный ФО,Дагестан,Другое
-305 305 24 Россия,Южный ФО,Ингушетия
-3052 305 24 Россия,Южный ФО,Ингушетия,Магас
-1787 305 24 Россия,Южный ФО,Ингушетия,Назрань
-2228 305 24 Россия,Южный ФО,Ингушетия,Другое
-306 306 24 Россия,Южный ФО,Кабардино-Балкария
-2621 306 24 Россия,Южный ФО,Кабардино-Балкария,Баксан
-1794 306 24 Россия,Южный ФО,Кабардино-Балкария,Майский
-1793 306 24 Россия,Южный ФО,Кабардино-Балкария,Нальчик
-2622 306 24 Россия,Южный ФО,Кабардино-Балкария,Нарткала
-1795 306 24 Россия,Южный ФО,Кабардино-Балкария,Прохладный
-2623 306 24 Россия,Южный ФО,Кабардино-Балкария,Терек
-2624 306 24 Россия,Южный ФО,Кабардино-Балкария,Тырныауз
-3274 306 24 Россия,Южный ФО,Кабардино-Балкария,Чегем
-2230 306 24 Россия,Южный ФО,Кабардино-Балкария,Другое
-307 307 24 Россия,Южный ФО,Калмыкия
-2567 307 24 Россия,Южный ФО,Калмыкия,Городовиково
-2568 307 24 Россия,Южный ФО,Калмыкия,Лагань
-3324 307 24 Россия,Южный ФО,Калмыкия,Троицкое
-1796 307 24 Россия,Южный ФО,Калмыкия,Элиста
-2232 307 24 Россия,Южный ФО,Калмыкия,Другое
-308 308 24 Россия,Южный ФО,Карачаево-Черкессия
-1799 308 24 Россия,Южный ФО,Карачаево-Черкессия,Домбай
-1798 308 24 Россия,Южный ФО,Карачаево-Черкессия,Карачаевск
-2626 308 24 Россия,Южный ФО,Карачаево-Черкессия,Теберда
-2625 308 24 Россия,Южный ФО,Карачаево-Черкессия,Усть-Джегута
-1797 308 24 Россия,Южный ФО,Карачаево-Черкессия,Черкесск
-2235 308 24 Россия,Южный ФО,Карачаево-Черкессия,Другое
-311 311 24 Россия,Южный ФО,Северная Осетия - Алания
-2630 311 24 Россия,Южный ФО,Северная Осетия - Алания,Алагир
-2631 311 24 Россия,Южный ФО,Северная Осетия - Алания,Ардон
-2628 311 24 Россия,Южный ФО,Северная Осетия - Алания,Беслан
-1839 311 24 Россия,Южный ФО,Северная Осетия - Алания,Владикавказ
-2629 311 24 Россия,Южный ФО,Северная Осетия - Алания,Дигора
-2627 311 24 Россия,Южный ФО,Северная Осетия - Алания,Моздок
-2266 311 24 Россия,Южный ФО,Северная Осетия - Алания,Другое
-313 313 24 Россия,Южный ФО,Чечня
-2632 313 24 Россия,Южный ФО,Чечня,Аргун
-1853 313 24 Россия,Южный ФО,Чечня,Грозный
-2633 313 24 Россия,Южный ФО,Чечня,Гудермес
-2284 313 24 Россия,Южный ФО,Чечня,Другое
-309 309 24 Россия,Южный ФО,Краснодарский край
-2636 309 24 Россия,Южный ФО,Краснодарский край,Абинск
-1800 309 24 Россия,Южный ФО,Краснодарский край,Анапа
-1801 309 24 Россия,Южный ФО,Краснодарский край,Апшеронск
-1802 309 24 Россия,Южный ФО,Краснодарский край,Армавир
-1803 309 24 Россия,Южный ФО,Краснодарский край,Белореченск
-1804 309 24 Россия,Южный ФО,Краснодарский край,Геленджик
-1805 309 24 Россия,Южный ФО,Краснодарский край,Горячий Ключ
-2637 309 24 Россия,Южный ФО,Краснодарский край,Гулькевичи
-1806 309 24 Россия,Южный ФО,Краснодарский край,Динская
-1807 309 24 Россия,Южный ФО,Краснодарский край,Ейск
-2638 309 24 Россия,Южный ФО,Краснодарский край,Кореновск
-1808 309 24 Россия,Южный ФО,Краснодарский край,Краснодар
-1809 309 24 Россия,Южный ФО,Краснодарский край,Кропоткин
-1810 309 24 Россия,Южный ФО,Краснодарский край,Крымск
-1811 309 24 Россия,Южный ФО,Краснодарский край,Курганинск
-3232 309 24 Россия,Южный ФО,Краснодарский край,Лабинск
-2639 309 24 Россия,Южный ФО,Краснодарский край,Новокубанск
-1812 309 24 Россия,Южный ФО,Краснодарский край,Новороссийск
-1813 309 24 Россия,Южный ФО,Краснодарский край,Пластуновская
-1814 309 24 Россия,Южный ФО,Краснодарский край,Приморско-Ахтарск
-3102 309 24 Россия,Южный ФО,Краснодарский край,Северская
-1815 309 24 Россия,Южный ФО,Краснодарский край,Славянск-на-Кубани
-1816 309 24 Россия,Южный ФО,Краснодарский край,Сочи
-3266 309 24 Россия,Южный ФО,Краснодарский край,Староминская
-3039 309 24 Россия,Южный ФО,Краснодарский край,Тамань
-1817 309 24 Россия,Южный ФО,Краснодарский край,Темрюк
-2635 309 24 Россия,Южный ФО,Краснодарский край,Тимашевск
-1818 309 24 Россия,Южный ФО,Краснодарский край,Тихорецк
-1819 309 24 Россия,Южный ФО,Краснодарский край,Туапсе
-1820 309 24 Россия,Южный ФО,Краснодарский край,Усть-Лабинск
-2634 309 24 Россия,Южный ФО,Краснодарский край,Хадыженск
-2241 309 24 Россия,Южный ФО,Краснодарский край,Другое
-312 312 24 Россия,Южный ФО,Ставропольский край
-1840 312 24 Россия,Южный ФО,Ставропольский край,Александровское
-2644 312 24 Россия,Южный ФО,Ставропольский край,Благодарный
-1841 312 24 Россия,Южный ФО,Ставропольский край,Буденновск
-1842 312 24 Россия,Южный ФО,Ставропольский край,Георгиевск
-1843 312 24 Россия,Южный ФО,Ставропольский край,Ессентуки
-1844 312 24 Россия,Южный ФО,Ставропольский край,Железноводск
-2647 312 24 Россия,Южный ФО,Ставропольский край,Зеленокумск
-2641 312 24 Россия,Южный ФО,Ставропольский край,Изобильный
-2642 312 24 Россия,Южный ФО,Ставропольский край,Ипатово
-1845 312 24 Россия,Южный ФО,Ставропольский край,Кисловодск
-1846 312 24 Россия,Южный ФО,Ставропольский край,Кочубеевское
-3367 312 24 Россия,Южный ФО,Ставропольский край,Курсавка
-3265 312 24 Россия,Южный ФО,Ставропольский край,Левокумское
-1847 312 24 Россия,Южный ФО,Ставропольский край,Лермонтов
-1848 312 24 Россия,Южный ФО,Ставропольский край,Минеральные Воды
-1849 312 24 Россия,Южный ФО,Ставропольский край,Невинномысск
-2645 312 24 Россия,Южный ФО,Ставропольский край,Нефтекумск
-2643 312 24 Россия,Южный ФО,Ставропольский край,Новоалександровск
-1850 312 24 Россия,Южный ФО,Ставропольский край,Новопавловск
-1851 312 24 Россия,Южный ФО,Ставропольский край,Новоселицкое
-1852 312 24 Россия,Южный ФО,Ставропольский край,Пятигорск
-2646 312 24 Россия,Южный ФО,Ставропольский край,Светлоград
-2640 312 24 Россия,Южный ФО,Ставропольский край,Ставрополь
-2268 312 24 Россия,Южный ФО,Ставропольский край,Другое
-302 302 24 Россия,Южный ФО,Астраханская обл.
-1777 302 24 Россия,Южный ФО,Астраханская обл.,Астрахань
-1778 302 24 Россия,Южный ФО,Астраханская обл.,Ахтубинск
-3383 302 24 Россия,Южный ФО,Астраханская обл.,Знаменск
-2578 302 24 Россия,Южный ФО,Астраханская обл.,Камызяк
-2579 302 24 Россия,Южный ФО,Астраханская обл.,Нариманов
-1786 302 24 Россия,Южный ФО,Астраханская обл.,Харабали
-2219 302 24 Россия,Южный ФО,Астраханская обл.,Другое
-303 303 24 Россия,Южный ФО,Волгоградская обл.
-1779 303 24 Россия,Южный ФО,Волгоградская обл.,Волгоград
-1780 303 24 Россия,Южный ФО,Волгоградская обл.,Волжский
-2584 303 24 Россия,Южный ФО,Волгоградская обл.,Дубовка
-1781 303 24 Россия,Южный ФО,Волгоградская обл.,Жирновск
-1782 303 24 Россия,Южный ФО,Волгоградская обл.,Калач-на-Дону
-1783 303 24 Россия,Южный ФО,Волгоградская обл.,Камышин
-2588 303 24 Россия,Южный ФО,Волгоградская обл.,Котельниково
-2591 303 24 Россия,Южный ФО,Волгоградская обл.,Котово
-2587 303 24 Россия,Южный ФО,Волгоградская обл.,Краснослободск
-2582 303 24 Россия,Южный ФО,Волгоградская обл.,Ленинск
-2590 303 24 Россия,Южный ФО,Волгоградская обл.,Михайловка
-1784 303 24 Россия,Южный ФО,Волгоградская обл.,Николаевск
-2581 303 24 Россия,Южный ФО,Волгоградская обл.,Новоаннинский
-2583 303 24 Россия,Южный ФО,Волгоградская обл.,Палласовка
-2580 303 24 Россия,Южный ФО,Волгоградская обл.,Петров Вал
-2589 303 24 Россия,Южный ФО,Волгоградская обл.,Серафимович
-2585 303 24 Россия,Южный ФО,Волгоградская обл.,Суровикино
-1785 303 24 Россия,Южный ФО,Волгоградская обл.,Урюпинск
-2586 303 24 Россия,Южный ФО,Волгоградская обл.,Фролово
-2223 303 24 Россия,Южный ФО,Волгоградская обл.,Другое
-310 310 24 Россия,Южный ФО,Ростовская обл.
-1821 310 24 Россия,Южный ФО,Ростовская обл.,Азов
-1822 310 24 Россия,Южный ФО,Ростовская обл.,Аксай
-1823 310 24 Россия,Южный ФО,Ростовская обл.,Багаевская
-1824 310 24 Россия,Южный ФО,Ростовская обл.,Батайск
-1825 310 24 Россия,Южный ФО,Ростовская обл.,Белая Калитва
-1826 310 24 Россия,Южный ФО,Ростовская обл.,Волгодонск
-1827 310 24 Россия,Южный ФО,Ростовская обл.,Гуково
-2651 310 24 Россия,Южный ФО,Ростовская обл.,Донецк
-1828 310 24 Россия,Южный ФО,Ростовская обл.,Зерноград
-3264 310 24 Россия,Южный ФО,Ростовская обл.,Каменоломни
-2652 310 24 Россия,Южный ФО,Ростовская обл.,Каменск-Шахтинский
-2649 310 24 Россия,Южный ФО,Ростовская обл.,Константиновск
-2648 310 24 Россия,Южный ФО,Ростовская обл.,Красный Сулин
-1829 310 24 Россия,Южный ФО,Ростовская обл.,Миллерово
-2653 310 24 Россия,Южный ФО,Ростовская обл.,Морозовск
-1830 310 24 Россия,Южный ФО,Ростовская обл.,Новочеркасск
-1831 310 24 Россия,Южный ФО,Ростовская обл.,Новошахтинск
-1832 310 24 Россия,Южный ФО,Ростовская обл.,Пролетарск
-1833 310 24 Россия,Южный ФО,Ростовская обл.,Ростов-на-Дону
-1834 310 24 Россия,Южный ФО,Ростовская обл.,Сальск
-1835 310 24 Россия,Южный ФО,Ростовская обл.,Семикаракорск
-1836 310 24 Россия,Южный ФО,Ростовская обл.,Таганрог
-1837 310 24 Россия,Южный ФО,Ростовская обл.,Усть-Донецкий
-3263 310 24 Россия,Южный ФО,Ростовская обл.,Целина
-2650 310 24 Россия,Южный ФО,Ростовская обл.,Цимлянск
-1838 310 24 Россия,Южный ФО,Ростовская обл.,Шахты
-2259 310 24 Россия,Южный ФО,Ростовская обл.,Другое
-28 0 0 Азия
-81 0 81 Азия,Азербайджан
-1055 1055 81 Азия,Азербайджан,Баку
-1058 1058 81 Азия,Азербайджан,Гянджа
-1056 1056 81 Азия,Азербайджан,Нахичевань
-1057 1057 81 Азия,Азербайджан,Ханкенди
-3153 3153 81 Азия,Азербайджан,Шеки
-2291 2291 81 Азия,Азербайджан,Другое
-82 0 82 Азия,Армения
-2932 2932 82 Азия,Армения,Абовян
-1060 1060 82 Азия,Армения,Аштарак
-3084 3084 82 Азия,Армения,Ванадзор
-3011 3011 82 Азия,Армения,Гюмри
-3306 3306 82 Азия,Армения,Дилижан
-1059 1059 82 Азия,Армения,Ереван
-3145 3145 82 Азия,Армения,Ханкенди
-2292 2292 82 Азия,Армения,Другое
-97 0 97 Азия,Афганистан
-1061 1061 97 Азия,Афганистан,Кабул
-2293 2293 97 Азия,Афганистан,Другое
-96 0 96 Азия,Бангладеш
-1062 1062 96 Азия,Бангладеш,Дакка
-2294 2294 96 Азия,Бангладеш,Другое
-99 0 99 Азия,Бахрейн
-1063 1063 99 Азия,Бахрейн,Манама
-2295 2295 99 Азия,Бахрейн,Другое
-100 0 100 Азия,Бруней-Даруссалам
-1064 1064 100 Азия,Бруней-Даруссалам,Бандар-Сери-Бегаван
-2296 2296 100 Азия,Бруней-Даруссалам,Другое
-101 0 101 Азия,Бутан
-1065 1065 101 Азия,Бутан,Тхимпху
-2297 2297 101 Азия,Бутан,Другое
-102 0 102 Азия,Вьетнам
-1066 1066 102 Азия,Вьетнам,Ханой
-2298 2298 102 Азия,Вьетнам,Другое
-83 0 83 Азия,Грузия
-1067 1067 83 Азия,Грузия,Батуми
-3158 3158 83 Азия,Грузия,Боржоми
-1068 1068 83 Азия,Грузия,Поти
-3129 3129 83 Азия,Грузия,Рустави
-1069 1069 83 Азия,Грузия,Сухуми
-1070 1070 83 Азия,Грузия,Тбилиси
-2299 2299 83 Азия,Грузия,Другое
-86 0 86 Азия,Израиль
-3345 3345 86 Азия,Израиль,Ариэль
-1071 1071 86 Азия,Израиль,Афула
-2992 2992 86 Азия,Израиль,Ашдод
-3175 3175 86 Азия,Израиль,Ашкелон
-3363 3363 86 Азия,Израиль,Бат-Ям
-2884 2884 86 Азия,Израиль,Беер-Яков
-3243 3243 86 Азия,Израиль,Бейт-Шемеш
-1074 1074 86 Азия,Израиль,Беэр-Шева
-3348 3348 86 Азия,Израиль,Герцелия
-3241 3241 86 Азия,Израиль,Димона
-1075 1075 86 Азия,Израиль,Иерусалим
-3350 3350 86 Азия,Израиль,Йокнеам-Иллит
-2982 2982 86 Азия,Израиль,Кармиэль
-2971 2971 86 Азия,Израиль,Кфар-Саба
-3136 3136 86 Азия,Израиль,Назарет
-1080 1080 86 Азия,Израиль,Натания
-3303 3303 86 Азия,Израиль,Офаким
-3050 3050 86 Азия,Израиль,Раанана
-3151 3151 86 Азия,Израиль,Рамат Ган
-3141 3141 86 Азия,Израиль,Реховот
-3012 3012 86 Азия,Израиль,Ришон ле Цион
-1081 1081 86 Азия,Израиль,Тверия
-1077 1077 86 Азия,Израиль,Тель-Авив
-1079 1079 86 Азия,Израиль,Хадера
-1078 1078 86 Азия,Израиль,Хайфа
-1076 1076 86 Азия,Израиль,Хеврон
-2929 2929 86 Азия,Израиль,Цфат
-2928 2928 86 Азия,Израиль,Эйлат
-2300 2300 86 Азия,Израиль,Другое
-95 0 95 Азия,Индия
-3315 3315 95 Азия,Индия,Бангалор
-1082 1082 95 Азия,Индия,Дели
-1083 1083 95 Азия,Индия,Джайпур
-3144 3144 95 Азия,Индия,Калькутта
-3025 3025 95 Азия,Индия,Мумбаи
-3277 3277 95 Азия,Индия,Панаджи
-1084 1084 95 Азия,Индия,Ченнаи
-2301 2301 95 Азия,Индия,Другое
-103 0 103 Азия,Индонезия
-1085 1085 103 Азия,Индонезия,Джакарта
-2302 2302 103 Азия,Индонезия,Другое
-79 0 79 Азия,Иордания
-1086 1086 79 Азия,Иордания,Амман
-2303 2303 79 Азия,Иордания,Другое
-85 0 85 Азия,Ирак
-1087 1087 85 Азия,Ирак,Багдад
-2304 2304 85 Азия,Ирак,Другое
-87 0 87 Азия,Иран
-1088 1088 87 Азия,Иран,Тегеран
-2305 2305 87 Азия,Иран,Другое
-104 0 104 Азия,Йемен
-1089 1089 104 Азия,Йемен,Сана
-2306 2306 104 Азия,Йемен,Другое
-84 0 84 Азия,Казахстан
-1090 1090 84 Азия,Казахстан,Актау
-1091 1091 84 Азия,Казахстан,Актюбинск
-1092 1092 84 Азия,Казахстан,Алма-Ата
-3242 3242 84 Азия,Казахстан,Аршалы
-1093 1093 84 Азия,Казахстан,Астана
-1094 1094 84 Азия,Казахстан,Атырау (Гурьев)
-1095 1095 84 Азия,Казахстан,Байконур
-3245 3245 84 Азия,Казахстан,Балхаш
-3083 3083 84 Азия,Казахстан,Жезказган
-1096 1096 84 Азия,Казахстан,Капчагай
-1097 1097 84 Азия,Казахстан,Караганда
-1098 1098 84 Азия,Казахстан,Кокшетау
-1099 1099 84 Азия,Казахстан,Кустанай
-2868 2868 84 Азия,Казахстан,Лисаковск
-1100 1100 84 Азия,Казахстан,Павлодар
-1101 1101 84 Азия,Казахстан,Петропавловск (Сев.-Каз. обл.)
-1102 1102 84 Азия,Казахстан,Рудный
-1103 1103 84 Азия,Казахстан,Семипалатинск
-1104 1104 84 Азия,Казахстан,Степногорск
-3166 3166 84 Азия,Казахстан,Талгар
-1105 1105 84 Азия,Казахстан,Талды-Курган
-2927 2927 84 Азия,Казахстан,Тараз
-1106 1106 84 Азия,Казахстан,Темиртау
-1107 1107 84 Азия,Казахстан,Уральск
-1108 1108 84 Азия,Казахстан,Усть-Каменогорск
-1109 1109 84 Азия,Казахстан,Чимкент
-1110 1110 84 Азия,Казахстан,Экибастуз
-2307 2307 84 Азия,Казахстан,Другое
-105 0 105 Азия,Камбоджа
-1111 1111 105 Азия,Камбоджа,Пномпень
-2308 2308 105 Азия,Камбоджа,Другое
-106 0 106 Азия,Катар
-1112 1112 106 Азия,Катар,Доха
-2309 2309 106 Азия,Катар,Другое
-107 0 107 Азия,Кипр
-1113 1113 107 Азия,Кипр,Ларнака
-1114 1114 107 Азия,Кипр,Лимассол
-1115 1115 107 Азия,Кипр,Никосия
-2954 2954 107 Азия,Кипр,Пафос
-2310 2310 107 Азия,Кипр,Другое
-92 0 92 Азия,Киргизия (Кыргызстан)
-1116 1116 92 Азия,Киргизия (Кыргызстан),Бишкек
-1117 1117 92 Азия,Киргизия (Кыргызстан),Джалал-Абад
-3027 3027 92 Азия,Киргизия (Кыргызстан),Кара-Балта
-1118 1118 92 Азия,Киргизия (Кыргызстан),Каракол
-1119 1119 92 Азия,Киргизия (Кыргызстан),Ош
-1120 1120 92 Азия,Киргизия (Кыргызстан),Талас
-2933 2933 92 Азия,Киргизия (Кыргызстан),Хайдаркен
-2311 2311 92 Азия,Киргизия (Кыргызстан),Другое
-76 0 76 Азия,Китай
-3214 3214 76 Азия,Китай,Аомынь (Макао)
-1121 1121 76 Азия,Китай,Гонконг
-2869 2869 76 Азия,Китай,Гуанчжоу
-3262 3262 76 Азия,Китай,Далянь
-1122 1122 76 Азия,Китай,Пекин
-1123 1123 76 Азия,Китай,Харбин
-1124 1124 76 Азия,Китай,Шанхай
-3043 3043 76 Азия,Китай,Шеньян
-2312 2312 76 Азия,Китай,Другое
-3215 0 3215 Азия,Кокосовые острова (Австр.)
-29 0 29 Азия,Корея (КНДР)
-1125 1125 29 Азия,Корея (КНДР),Пхеньян
-2313 2313 29 Азия,Корея (КНДР),Другое
-108 0 108 Азия,Корея, Республика
-1126 1126 108 Азия,Корея, Республика,Сеул
-3240 3240 108 Азия,Корея, Республика,Тейджон
-2314 2314 108 Азия,Корея, Республика,Другое
-88 0 88 Азия,Кувейт
-1127 1127 88 Азия,Кувейт,Эль-Кувейт
-2315 2315 88 Азия,Кувейт,Другое
-109 0 109 Азия,Лаос
-1128 1128 109 Азия,Лаос,Вьентьян
-2316 2316 109 Азия,Лаос,Другое
-110 0 110 Азия,Ливан
-1129 1129 110 Азия,Ливан,Бейрут
-2317 2317 110 Азия,Ливан,Другое
-111 0 111 Азия,Малайзия
-1130 1130 111 Азия,Малайзия,Джохор-Бару
-1131 1131 111 Азия,Малайзия,Куала-Лумпур
-2318 2318 111 Азия,Малайзия,Другое
-112 0 112 Азия,Мальдивы
-1132 1132 112 Азия,Мальдивы,Мале
-2319 2319 112 Азия,Мальдивы,Другое
-113 0 113 Азия,Монголия
-1133 1133 113 Азия,Монголия,Улан-Батор
-1134 1134 113 Азия,Монголия,Эрдэнэт
-2320 2320 113 Азия,Монголия,Другое
-114 0 114 Азия,Мьянма
-1135 1135 114 Азия,Мьянма,Янгон
-2321 2321 114 Азия,Мьянма,Другое
-115 0 115 Азия,Непал
-1136 1136 115 Азия,Непал,Катманду
-2322 2322 115 Азия,Непал,Другое
-116 0 116 Азия,Объединенные Арабские Эмираты
-1137 1137 116 Азия,Объединенные Арабские Эмираты,Абу-Даби
-1138 1138 116 Азия,Объединенные Арабские Эмираты,Дубай
-1139 1139 116 Азия,Объединенные Арабские Эмираты,Шарджа
-2323 2323 116 Азия,Объединенные Арабские Эмираты,Другое
-117 0 117 Азия,Оман
-1140 1140 117 Азия,Оман,Маскат
-2324 2324 117 Азия,Оман,Другое
-3216 0 3216 Азия,Остров Рождества (Австр.)
-122 0 122 Азия,Пакистан
-1141 1141 122 Азия,Пакистан,Исламабад
-2325 2325 122 Азия,Пакистан,Другое
-89 0 89 Азия,Палестина
-1072 1072 89 Азия,Палестина,Ашдод
-1073 1073 89 Азия,Палестина,Ашкелон
-1142 1142 89 Азия,Палестина,Газа
-2326 2326 89 Азия,Палестина,Другое
-94 0 94 Азия,Саудовская Аравия
-3250 3250 94 Азия,Саудовская Аравия,Медина
-1143 1143 94 Азия,Саудовская Аравия,Эр-Рияд
-2327 2327 94 Азия,Саудовская Аравия,Другое
-118 0 118 Азия,Сингапур
-78 0 78 Азия,Сирия
-1144 1144 78 Азия,Сирия,Дамаск
-2328 2328 78 Азия,Сирия,Другое
-91 0 91 Азия,Таджикистан
-1145 1145 91 Азия,Таджикистан,Душанбе
-3307 3307 91 Азия,Таджикистан,Кайраккум
-3308 3308 91 Азия,Таджикистан,Худжанд
-2329 2329 91 Азия,Таджикистан,Другое
-119 0 119 Азия,Таиланд
-1146 1146 119 Азия,Таиланд,Бангкок
-1147 1147 119 Азия,Таиланд,Пхукет
-2330 2330 119 Азия,Таиланд,Другое
-120 0 120 Азия,Тайвань
-1148 1148 120 Азия,Тайвань,Тайбэй
-2331 2331 120 Азия,Тайвань,Другое
-132 0 132 Азия,Тимор
-1149 1149 132 Азия,Тимор,Дили
-2332 2332 132 Азия,Тимор,Другое
-90 0 90 Азия,Туркмения
-1150 1150 90 Азия,Туркмения,Ашхабад
-3079 3079 90 Азия,Туркмения,Безмеин
-2333 2333 90 Азия,Туркмения,Другое
-77 0 77 Азия,Турция
-1152 1152 77 Азия,Турция,Анкара
-1153 1153 77 Азия,Турция,Анталия
-3080 3080 77 Азия,Турция,Бурса
-1151 1151 77 Азия,Турция,Мармарис
-1154 1154 77 Азия,Турция,Стамбул
-1155 1155 77 Азия,Турция,Трабзон
-2334 2334 77 Азия,Турция,Другое
-93 0 93 Азия,Узбекистан
-3362 3362 93 Азия,Узбекистан,Алмалык
-3137 3137 93 Азия,Узбекистан,Андижан
-3273 3273 93 Азия,Узбекистан,Асака
-1156 1156 93 Азия,Узбекистан,Ахангаран
-1157 1157 93 Азия,Узбекистан,Бухара
-3167 3167 93 Азия,Узбекистан,Джизак
-3347 3347 93 Азия,Узбекистан,Кунград
-1158 1158 93 Азия,Узбекистан,Навои
-1159 1159 93 Азия,Узбекистан,Наманган
-1160 1160 93 Азия,Узбекистан,Самарканд
-1161 1161 93 Азия,Узбекистан,Ташкент
-1162 1162 93 Азия,Узбекистан,Ургенч
-1163 1163 93 Азия,Узбекистан,Фергана
-1164 1164 93 Азия,Узбекистан,Чирчик
-2335 2335 93 Азия,Узбекистан,Другое
-121 0 121 Азия,Филиппины
-1165 1165 121 Азия,Филиппины,Манила
-3319 3319 121 Азия,Филиппины,Себу
-2336 2336 121 Азия,Филиппины,Другое
-98 0 98 Азия,Шри Ланка
-1166 1166 98 Азия,Шри Ланка,Коломбо
-2337 2337 98 Азия,Шри Ланка,Другое
-75 0 75 Азия,Япония
-3176 3176 75 Азия,Япония,Исесаки
-3339 3339 75 Азия,Япония,Корияма
-1167 1167 75 Азия,Япония,Саппоро
-1168 1168 75 Азия,Япония,Токио
-2338 2338 75 Азия,Япония,Другое
-31 0 0 Австралия и Океания
-123 0 123 Австралия и Океания,Австралия
-1914 1914 123 Австралия и Океания,Австралия,Аделаида
-2957 2957 123 Австралия и Океания,Австралия,Блэк Рок
-1915 1915 123 Австралия и Океания,Австралия,Брисбен
-3331 3331 123 Австралия и Океания,Австралия,Горокан
-1916 1916 123 Австралия и Океания,Австралия,Канберра
-3001 3001 123 Австралия и Океания,Австралия,Лидкомб
-1917 1917 123 Австралия и Океания,Австралия,Мельбурн
-3217 3217 123 Австралия и Океания,Австралия,Норфолк
-3064 3064 123 Австралия и Океания,Австралия,Перт
-3020 3020 123 Австралия и Океания,Австралия,Санта Люсиа
-1918 1918 123 Австралия и Океания,Австралия,Сидней
-3238 3238 123 Австралия и Океания,Австралия,Энеабба
-2339 2339 123 Австралия и Океания,Австралия,Другое
-454 0 454 Австралия и Океания,Американское Самоа
-1192 1192 454 Австралия и Океания,Американское Самоа,Паго-Паго
-2366 2366 454 Австралия и Океания,Американское Самоа,Другое
-124 0 124 Австралия и Океания,Вануату
-1919 1919 124 Австралия и Океания,Вануату,Порт-Вила
-2340 2340 124 Австралия и Океания,Вануату,Другое
-453 0 453 Австралия и Океания,Гуам (США)
-1193 1193 453 Австралия и Океания,Гуам (США),Аганья
-2368 2368 453 Австралия и Океания,Гуам (США),Другое
-126 0 126 Австралия и Океания,Кирибати
-1921 1921 126 Австралия и Океания,Кирибати,Баирики
-2342 2342 126 Австралия и Океания,Кирибати,Другое
-127 0 127 Австралия и Океания,Маршалловы Острова
-1922 1922 127 Австралия и Океания,Маршалловы Острова,Маджуро
-2343 2343 127 Австралия и Океания,Маршалловы Острова,Другое
-128 0 128 Австралия и Океания,Микронезия (Федеративные Штаты Микронезии)
-1923 1923 128 Австралия и Океания,Микронезия (Федеративные Штаты Микронезии),Паликир
-2344 2344 128 Австралия и Океания,Микронезия (Федеративные Штаты Микронезии),Другое
-129 0 129 Австралия и Океания,Науру
-1924 1924 129 Австралия и Океания,Науру,Ярен
-2345 2345 129 Австралия и Океания,Науру,Другое
-3220 0 3220 Австралия и Океания,Ниуэ (Н.Зел.)
-130 0 130 Австралия и Океания,Новая Зеландия
-1925 1925 130 Австралия и Океания,Новая Зеландия,Веллингтон
-1926 1926 130 Австралия и Океания,Новая Зеландия,Гамильтон
-1928 1928 130 Австралия и Океания,Новая Зеландия,Данидин
-1929 1929 130 Австралия и Океания,Новая Зеландия,Крайстчерч
-3235 3235 130 Австралия и Океания,Новая Зеландия,Кромвель
-1927 1927 130 Австралия и Океания,Новая Зеландия,Окленд
-3323 3323 130 Австралия и Океания,Новая Зеландия,Тауранга
-2346 2346 130 Австралия и Океания,Новая Зеландия,Другое
-3218 0 3218 Австралия и Океания,Новая Каледония (Фр.)
-3221 0 3221 Австралия и Океания,Острова Кука (Н.Зел.)
-3230 0 3230 Австралия и Океания,Острова Херд и Макдональд (Австр.)
-131 0 131 Австралия и Океания,Палау
-1930 1930 131 Австралия и Океания,Палау,Корор
-2347 2347 131 Австралия и Океания,Палау,Другое
-133 0 133 Австралия и Океания,Папуа - Новая Гвинея
-1931 1931 133 Австралия и Океания,Папуа - Новая Гвинея,Порт-Морсби
-2348 2348 133 Австралия и Океания,Папуа - Новая Гвинея,Другое
-3222 0 3222 Австралия и Океания,Питкерн (Брит.)
-125 0 125 Австралия и Океания,Самоа
-1920 1920 125 Австралия и Океания,Самоа,Апиа
-2341 2341 125 Австралия и Океания,Самоа,Другое
-3219 0 3219 Австралия и Океания,Сев. Марианские острова (США)
-134 0 134 Австралия и Океания,Соломоновы Острова
-1932 1932 134 Австралия и Океания,Соломоновы Острова,Хониара
-2349 2349 134 Австралия и Океания,Соломоновы Острова,Другое
-3223 0 3223 Австралия и Океания,Токелау (Н.Зел.)
-135 0 135 Австралия и Океания,Тонга
-1933 1933 135 Австралия и Океания,Тонга,Нукуалофа
-2350 2350 135 Австралия и Океания,Тонга,Другое
-136 0 136 Австралия и Океания,Тувалу
-1934 1934 136 Австралия и Океания,Тувалу,Фунафути
-2351 2351 136 Австралия и Океания,Тувалу,Другое
-3224 0 3224 Австралия и Океания,Уоллис и Футуна острова (Фр.)
-137 0 137 Австралия и Океания,Фиджи
-1935 1935 137 Австралия и Океания,Фиджи,Сува
-2352 2352 137 Австралия и Океания,Фиджи,Другое
-3226 0 3226 Австралия и Океания,Французская Полинезия
-3225 0 3225 Австралия и Океания,Французские Южные территории
-30 0 0 Америка
-138 0 138 Америка,Канада
-3055 3055 138 Америка,Канада,Барлингтон
-3049 3049 138 Америка,Канада,Броссард
-3330 3330 138 Америка,Канада,Бурнаби
-1169 1169 138 Америка,Канада,Ванкувер
-3106 3106 138 Америка,Канада,Ватерлоо
-1170 1170 138 Америка,Канада,Виннипег
-1171 1171 138 Америка,Канада,Галифакс
-1172 1172 138 Америка,Канада,Гамильтон
-3365 3365 138 Америка,Канада,Денвер
-1173 1173 138 Америка,Канада,Калгари
-3104 3104 138 Америка,Канада,Камлупс
-3366 3366 138 Америка,Канада,Каннингтон
-1174 1174 138 Америка,Канада,Квебек
-2964 2964 138 Америка,Канада,Кингстон
-3113 3113 138 Америка,Канада,Коквитлам
-1175 1175 138 Америка,Канада,Монреаль
-2920 2920 138 Америка,Канада,Ниагара-Фолс
-2889 2889 138 Америка,Канада,Норд-Йорк
-1176 1176 138 Америка,Канада,Оттава
-2903 2903 138 Америка,Канада,Порт Алберни
-1177 1177 138 Америка,Канада,Ричмонд
-1178 1178 138 Америка,Канада,Тимминс
-2946 2946 138 Америка,Канада,Торнхилл
-1179 1179 138 Америка,Канада,Торонто
-1180 1180 138 Америка,Канада,Эдмонтон
-2353 2353 138 Америка,Канада,Другое
-139 0 139 Америка,США
-407 407 139 Америка,США,Вашингтон, столица
-426 426 139 Америка,США,Айдахо
-427 426 139 Америка,США,Айдахо,Бойсе
-2354 426 139 Америка,США,Айдахо,Другое
-378 378 139 Америка,США,Айова
-3109 378 139 Америка,США,Айова,Айова Сити
-379 378 139 Америка,США,Айова,Де-Мойн
-2963 378 139 Америка,США,Айова,Декора
-2355 378 139 Америка,США,Айова,Другое
-412 412 139 Америка,США,Алабама
-3236 412 139 Америка,США,Алабама,Бирмингем
-413 412 139 Америка,США,Алабама,Монтгомери
-1181 412 139 Америка,США,Алабама,Хантсвилл
-2356 412 139 Америка,США,Алабама,Другое
-446 446 139 Америка,США,Аляска
-1182 446 139 Америка,США,Аляска,Анкоридж
-447 446 139 Америка,США,Аляска,Джуно
-1183 446 139 Америка,США,Аляска,Фэрбенкс
-2357 446 139 Америка,США,Аляска,Другое
-434 434 139 Америка,США,Аризона
-2917 434 139 Америка,США,Аризона,Темпе
-1184 434 139 Америка,США,Аризона,Тусон
-435 434 139 Америка,США,Аризона,Финикс
-3061 434 139 Америка,США,Аризона,Чандлер
-2358 434 139 Америка,США,Аризона,Другое
-416 416 139 Америка,США,Арканзас
-417 416 139 Америка,США,Арканзас,Литл-Рок
-2359 416 139 Америка,США,Арканзас,Другое
-428 428 139 Америка,США,Вайоминг
-3017 428 139 Америка,США,Вайоминг,Ларами
-429 428 139 Америка,США,Вайоминг,Шайенн
-2360 428 139 Америка,США,Вайоминг,Другое
-440 440 139 Америка,США,Вашингтон
-2956 440 139 Америка,США,Вашингтон,Беллевью
-2967 440 139 Америка,США,Вашингтон,Бремертон
-3385 440 139 Америка,США,Вашингтон,Ванкувер
-2865 440 139 Америка,США,Вашингтон,Линден
-441 440 139 Америка,США,Вашингтон,Олимпия
-3352 440 139 Америка,США,Вашингтон,Порт Орчард
-2876 440 139 Америка,США,Вашингтон,Редмонт
-3003 440 139 Америка,США,Вашингтон,Рентон
-1185 440 139 Америка,США,Вашингтон,Сиэтл
-2983 440 139 Америка,США,Вашингтон,Снохомиш
-1186 440 139 Америка,США,Вашингтон,Такома
-3152 440 139 Америка,США,Вашингтон,Фрайди Харбор
-2886 440 139 Америка,США,Вашингтон,Эверет
-2361 440 139 Америка,США,Вашингтон,Другое
-352 352 139 Америка,США,Вермонт
-353 352 139 Америка,США,Вермонт,Монтпильер
-2861 352 139 Америка,США,Вермонт,Норвич
-2362 352 139 Америка,США,Вермонт,Другое
-394 394 139 Америка,США,Виргиния
-1188 394 139 Америка,США,Виргиния,Александрия
-1187 394 139 Америка,США,Виргиния,Арлингтон
-2969 394 139 Америка,США,Виргиния,Даллес
-1189 394 139 Америка,США,Виргиния,Манассас
-3114 394 139 Америка,США,Виргиния,Норфолк
-2885 394 139 Америка,США,Виргиния,Ньюпорт-Ньюс
-2979 394 139 Америка,США,Виргиния,Раунд Хил
-3338 394 139 Америка,США,Виргиния,Рестон
-395 394 139 Америка,США,Виргиния,Ричмонд
-3005 394 139 Америка,США,Виргиния,Уоррентон
-2991 394 139 Америка,США,Виргиния,Херндон
-2996 394 139 Америка,США,Виргиния,Центрвиль
-3097 394 139 Америка,США,Виргиния,Чантилли
-2981 394 139 Америка,США,Виргиния,Шарлотесвиль
-2363 394 139 Америка,США,Виргиния,Другое
-374 374 139 Америка,США,Висконсин
-2995 374 139 Америка,США,Висконсин,Грин-Бей
-375 374 139 Америка,США,Висконсин,Мадисон
-2365 374 139 Америка,США,Висконсин,Другое
-448 448 139 Америка,США,Гавайи
-449 448 139 Америка,США,Гавайи,Гонолулу
-1191 448 139 Америка,США,Гавайи,Хило
-2367 448 139 Америка,США,Гавайи,Другое
-390 390 139 Америка,США,Делавер
-3021 390 139 Америка,США,Делавер,Вильмингтон
-391 390 139 Америка,США,Делавер,Довер
-2973 390 139 Америка,США,Делавер,Льюис
-2369 390 139 Америка,США,Делавер,Другое
-402 402 139 Америка,США,Джорджия
-403 402 139 Америка,США,Джорджия,Атланта
-2370 402 139 Америка,США,Джорджия,Другое
-396 396 139 Америка,США,Западная Виргиния
-397 396 139 Америка,США,Западная Виргиния,Чарлстон
-2371 396 139 Америка,США,Западная Виргиния,Другое
-370 370 139 Америка,США,Иллинойс
-2911 370 139 Америка,США,Иллинойс,Вестмонт
-3074 370 139 Америка,США,Иллинойс,Гарвард
-371 370 139 Америка,США,Иллинойс,Спрингфилд
-2930 370 139 Америка,США,Иллинойс,Урбана
-1194 370 139 Америка,США,Иллинойс,Чикаго
-2372 370 139 Америка,США,Иллинойс,Другое
-368 368 139 Америка,США,Индиана
-369 368 139 Америка,США,Индиана,Индианаполис
-1195 368 139 Америка,США,Индиана,Эвансвил
-2373 368 139 Америка,США,Индиана,Другое
-444 444 139 Америка,США,Калифорния
-2959 444 139 Америка,США,Калифорния,Анахайм
-2961 444 139 Америка,США,Калифорния,Аптос
-2912 444 139 Америка,США,Калифорния,Артезия
-2899 444 139 Америка,США,Калифорния,Беверли Хилз
-1196 444 139 Америка,США,Калифорния,Беркли
-3249 444 139 Америка,США,Калифорния,Бреа
-3014 444 139 Америка,США,Калифорния,Брисбейн
-3048 444 139 Америка,США,Калифорния,Венис
-2901 444 139 Америка,США,Калифорния,Вест-Голливуд
-2926 444 139 Америка,США,Калифорния,Вестлейк Вилладж
-2922 444 139 Америка,США,Калифорния,Гардена
-1203 444 139 Америка,США,Калифорния,Глендейл
-2978 444 139 Америка,США,Калифорния,Денвиль
-2990 444 139 Америка,США,Калифорния,Дублин
-3077 444 139 Америка,США,Калифорния,Дэвис
-2918 444 139 Америка,США,Калифорния,Ирвайн
-2881 444 139 Америка,США,Калифорния,Карсон
-3247 444 139 Америка,США,Калифорния,Кипресс
-3092 444 139 Америка,США,Калифорния,Коста Меса
-2948 444 139 Америка,США,Калифорния,Купертино
-1197 444 139 Америка,США,Калифорния,Лонг-Бич
-1198 444 139 Америка,США,Калифорния,Лос-Анджелес
-3058 444 139 Америка,США,Калифорния,Лос-Гатос
-3328 444 139 Америка,США,Калифорния,Марина-дель-Рей
-2874 444 139 Америка,США,Калифорния,Маунтин-Вью
-2998 444 139 Америка,США,Калифорния,Милпитас
-3087 444 139 Америка,США,Калифорния,Монтерей
-2947 444 139 Америка,США,Калифорния,Окленд
-2900 444 139 Америка,США,Калифорния,Пало Альто
-1199 444 139 Америка,США,Калифорния,Пасадена
-3335 444 139 Америка,США,Калифорния,Редвуд
-2966 444 139 Америка,США,Калифорния,Розамонд
-445 444 139 Америка,США,Калифорния,Сакраменто
-1200 444 139 Америка,США,Калифорния,Сан-Диего
-3317 444 139 Америка,США,Калифорния,Сан-Мартин
-1201 444 139 Америка,США,Калифорния,Сан-Франциско
-1202 444 139 Америка,США,Калифорния,Сан-Хосе
-2878 444 139 Америка,США,Калифорния,Саннивейл
-2925 444 139 Америка,США,Калифорния,Санта-Барбара
-2875 444 139 Америка,США,Калифорния,Санта-Клара
-1204 444 139 Америка,США,Калифорния,Санта-Круз
-2859 444 139 Америка,США,Калифорния,Санта-Моника
-3157 444 139 Америка,США,Калифорния,Студио Сити
-3146 444 139 Америка,США,Калифорния,Торранс
-2970 444 139 Америка,США,Калифорния,Тысяча Дубов
-2949 444 139 Америка,США,Калифорния,Универсал-Сити
-3057 444 139 Америка,США,Калифорния,Форт Брэгг
-3032 444 139 Америка,США,Калифорния,Фостер-Сити
-3381 444 139 Америка,США,Калифорния,Фремонт
-3028 444 139 Америка,США,Калифорния,Фуллертон
-2858 444 139 Америка,США,Калифорния,Эмервиль
-3040 444 139 Америка,США,Калифорния,Эскондидо
-2374 444 139 Америка,США,Калифорния,Другое
-388 388 139 Америка,США,Канзас
-3041 388 139 Америка,США,Канзас,Лоуренс
-389 388 139 Америка,США,Канзас,Топика
-2375 388 139 Америка,США,Канзас,Другое
-408 408 139 Америка,США,Кентукки
-3004 408 139 Америка,США,Кентукки,Лексингтон
-1205 408 139 Америка,США,Кентукки,Луисвилл
-409 408 139 Америка,США,Кентукки,Франкфорт
-2376 408 139 Америка,США,Кентукки,Другое
-430 430 139 Америка,США,Колорадо
-1206 430 139 Америка,США,Колорадо,Боулдер
-3095 430 139 Америка,США,Колорадо,Грили
-431 430 139 Америка,США,Колорадо,Денвер
-1207 430 139 Америка,США,Колорадо,Колорадо-Спрингс
-3046 430 139 Америка,США,Колорадо,Литлтон
-2377 430 139 Америка,США,Колорадо,Другое
-358 358 139 Америка,США,Коннектикут
-2968 358 139 Америка,США,Коннектикут,Дариен
-3018 358 139 Америка,США,Коннектикут,Денбери
-2882 358 139 Америка,США,Коннектикут,Стэмфорд
-359 358 139 Америка,США,Коннектикут,Хартфорд
-3047 358 139 Америка,США,Коннектикут,Шелтон
-2378 358 139 Америка,США,Коннектикут,Другое
-418 418 139 Америка,США,Луизиана
-419 418 139 Америка,США,Луизиана,Батон-Руж
-1208 418 139 Америка,США,Луизиана,Новый Орлеан
-2408 418 139 Америка,США,Луизиана,Другое
-354 354 139 Америка,США,Массачусетс
-2931 354 139 Америка,США,Массачусетс,Аттлеборо
-3334 354 139 Америка,США,Массачусетс,Билерика
-355 354 139 Америка,США,Массачусетс,Бостон
-3059 354 139 Америка,США,Массачусетс,Вестгемптон
-2919 354 139 Америка,США,Массачусетс,Вобурн
-2902 354 139 Америка,США,Массачусетс,Дедхэм
-1209 354 139 Америка,США,Массачусетс,Кеймбридж
-3336 354 139 Америка,США,Массачусетс,Нидхем
-2985 354 139 Америка,США,Массачусетс,Ньютонвиль
-3022 354 139 Америка,США,Массачусетс,Уолтхэм
-2407 354 139 Америка,США,Массачусетс,Другое
-376 376 139 Америка,США,Миннесота
-1210 376 139 Америка,США,Миннесота,Миннеаполис
-2980 376 139 Америка,США,Миннесота,Плимут
-377 376 139 Америка,США,Миннесота,Сент-Пол
-3035 376 139 Америка,США,Миннесота,Эден Прейри
-2406 376 139 Америка,США,Миннесота,Другое
-414 414 139 Америка,США,Миссисипи
-415 414 139 Америка,США,Миссисипи,Джэксон
-2405 414 139 Америка,США,Миссисипи,Другое
-380 380 139 Америка,США,Миссури
-381 380 139 Америка,США,Миссури,Джефферсон-Сити
-3062 380 139 Америка,США,Миссури,Канзас Сити
-3038 380 139 Америка,США,Миссури,Ли Саммит
-1211 380 139 Америка,США,Миссури,Сент-Луис
-2895 380 139 Америка,США,Миссури,Эллисвил
-2404 380 139 Америка,США,Миссури,Другое
-372 372 139 Америка,США,Мичиган
-3357 372 139 Америка,США,Мичиган,Вест Блюмфельд
-1212 372 139 Америка,США,Мичиган,Гранд-Рапидс
-1213 372 139 Америка,США,Мичиган,Детройт
-3103 372 139 Америка,США,Мичиган,Каламазу
-373 372 139 Америка,США,Мичиган,Лансинг
-2987 372 139 Америка,США,Мичиган,Новай
-2887 372 139 Америка,США,Мичиган,Сагино
-2403 372 139 Америка,США,Мичиган,Другое
-424 424 139 Америка,США,Монтана
-1214 424 139 Америка,США,Монтана,Грейт-Фолс
-425 424 139 Америка,США,Монтана,Хелина
-2402 424 139 Америка,США,Монтана,Другое
-348 348 139 Америка,США,Мэн
-349 348 139 Америка,США,Мэн,Огаста
-3000 348 139 Америка,США,Мэн,Ярмут
-2401 348 139 Америка,США,Мэн,Другое
-392 392 139 Америка,США,Мэриленд
-393 392 139 Америка,США,Мэриленд,Аннаполис
-1215 392 139 Америка,США,Мэриленд,Балтимор
-3143 392 139 Америка,США,Мэриленд,Гринбелт
-3337 392 139 Америка,США,Мэриленд,Колледж Парк
-2904 392 139 Америка,США,Мэриленд,Маунт Эйри
-3329 392 139 Америка,США,Мэриленд,Роквилль
-2400 392 139 Америка,США,Мэриленд,Другое
-386 386 139 Америка,США,Небраска
-387 386 139 Америка,США,Небраска,Линкольн
-1216 386 139 Америка,США,Небраска,Омаха
-2399 386 139 Америка,США,Небраска,Другое
-438 438 139 Америка,США,Невада
-439 438 139 Америка,США,Невада,Карсон-Сити
-1217 438 139 Америка,США,Невада,Лас-Вегас
-2890 438 139 Америка,США,Невада,Рено
-2398 438 139 Америка,США,Невада,Другое
-362 362 139 Америка,США,Нью-Джерси
-1219 362 139 Америка,США,Нью-Джерси,Атлантик-Сити
-1218 362 139 Америка,США,Нью-Джерси,Ньюарк
-3276 362 139 Америка,США,Нью-Джерси,Оклин
-3073 362 139 Америка,США,Нью-Джерси,Принстон
-2955 362 139 Америка,США,Нью-Джерси,Рузерфорд
-3349 362 139 Америка,США,Нью-Джерси,Сомервиль
-363 362 139 Америка,США,Нью-Джерси,Трентон
-3078 362 139 Америка,США,Нью-Джерси,Хакеттстоун
-3248 362 139 Америка,США,Нью-Джерси,Черри Хилл
-2397 362 139 Америка,США,Нью-Джерси,Другое
-360 360 139 Америка,США,Нью-Йорк
-3134 360 139 Америка,США,Нью-Йорк,Баффало
-3081 360 139 Америка,США,Нью-Йорк,Бингхэмптон
-2997 360 139 Америка,США,Нью-Йорк,Бруклин
-2999 360 139 Америка,США,Нью-Йорк,Варвик
-3139 360 139 Америка,США,Нью-Йорк,Ирвингтон
-3060 360 139 Америка,США,Нью-Йорк,Итака
-1220 360 139 Америка,США,Нью-Йорк,Нью-Йорк
-361 360 139 Америка,США,Нью-Йорк,Олбани
-2914 360 139 Америка,США,Нью-Йорк,Погкипси
-3056 360 139 Америка,США,Нью-Йорк,Саратога Спрингс
-2396 360 139 Америка,США,Нью-Йорк,Другое
-432 432 139 Америка,США,Нью-Мексико
-1222 432 139 Америка,США,Нью-Мексико,Альбукерке
-433 432 139 Америка,США,Нью-Мексико,Санта-Фе
-2395 432 139 Америка,США,Нью-Мексико,Другое
-350 350 139 Америка,США,Нью-Хэмпшир
-2989 350 139 Америка,США,Нью-Хэмпшир,Амхерст
-351 350 139 Америка,США,Нью-Хэмпшир,Конкорд
-2950 350 139 Америка,США,Нью-Хэмпшир,Лондондерри
-1221 350 139 Америка,США,Нью-Хэмпшир,Манчестер
-3111 350 139 Америка,США,Нью-Хэмпшир,Рочестер
-2898 350 139 Америка,США,Нью-Хэмпшир,Салем
-2938 350 139 Америка,США,Нью-Хэмпшир,Хадсон
-2394 350 139 Америка,США,Нью-Хэмпшир,Другое
-366 366 139 Америка,США,Огайо
-2953 366 139 Америка,США,Огайо,Варрен
-3112 366 139 Америка,США,Огайо,Гроув Сити
-1223 366 139 Америка,США,Огайо,Кливленд
-367 366 139 Америка,США,Огайо,Колумбус
-2951 366 139 Америка,США,Огайо,Лавленд
-2862 366 139 Америка,США,Огайо,Оберлин
-3034 366 139 Америка,США,Огайо,Рейнольдсбург
-2860 366 139 Америка,США,Огайо,Цинциннати
-2393 366 139 Америка,США,Огайо,Другое
-420 420 139 Америка,США,Оклахома
-421 420 139 Америка,США,Оклахома,Оклахома-Сити
-1224 420 139 Америка,США,Оклахома,Талса
-2392 420 139 Америка,США,Оклахома,Другое
-442 442 139 Америка,США,Орегон
-2877 442 139 Америка,США,Орегон,Кламат-Фолс
-2945 442 139 Америка,США,Орегон,Коттедж-Гроув
-1225 442 139 Америка,США,Орегон,Портленд
-443 442 139 Америка,США,Орегон,Сейлем
-1226 442 139 Америка,США,Орегон,Юджин
-2391 442 139 Америка,США,Орегон,Другое
-364 364 139 Америка,США,Пенсильвания
-3316 364 139 Америка,США,Пенсильвания,Вифлием
-3282 364 139 Америка,США,Пенсильвания,Колледжвиль
-2972 364 139 Америка,США,Пенсильвания,Нью Фридом
-1227 364 139 Америка,США,Пенсильвания,Питтсбург
-2893 364 139 Америка,США,Пенсильвания,Рандор
-3110 364 139 Америка,США,Пенсильвания,Слиппери Рок
-1228 364 139 Америка,США,Пенсильвания,Филадельфия
-365 364 139 Америка,США,Пенсильвания,Харрисберг
-2390 364 139 Америка,США,Пенсильвания,Другое
-450 450 139 Америка,США,Пуэрто-Рико
-451 450 139 Америка,США,Пуэрто-Рико,Понсе
-3093 450 139 Америка,США,Пуэрто-Рико,Сан-Хуан
-2389 450 139 Америка,США,Пуэрто-Рико,Другое
-356 356 139 Америка,США,Род-Айленд
-357 356 139 Америка,США,Род-Айленд,Провиденс
-2388 356 139 Америка,США,Род-Айленд,Другое
-382 382 139 Америка,США,Северная Дакота
-383 382 139 Америка,США,Северная Дакота,Бисмарк
-2387 382 139 Америка,США,Северная Дакота,Другое
-398 398 139 Америка,США,Северная Каролина
-2960 398 139 Америка,США,Северная Каролина,Вильмингтон
-2915 398 139 Америка,США,Северная Каролина,Дурхам
-399 398 139 Америка,США,Северная Каролина,Роли
-2386 398 139 Америка,США,Северная Каролина,Другое
-410 410 139 Америка,США,Теннесси
-2863 410 139 Америка,США,Теннесси,Мемфис
-411 410 139 Америка,США,Теннесси,Нашвилл
-1229 410 139 Америка,США,Теннесси,Ноксвилл
-2385 410 139 Америка,США,Теннесси,Другое
-422 422 139 Америка,США,Техас
-3085 422 139 Америка,США,Техас,Бедфорд
-2913 422 139 Америка,США,Техас,Брейди
-1233 422 139 Америка,США,Техас,Даллас
-2916 422 139 Америка,США,Техас,Ирвинг
-3123 422 139 Америка,США,Техас,Кингсвилл
-2873 422 139 Америка,США,Техас,Конрой
-3096 422 139 Америка,США,Техас,Корпус Кристи
-423 422 139 Америка,США,Техас,Остин
-1232 422 139 Америка,США,Техас,Сан-Антонио
-3023 422 139 Америка,США,Техас,Уайли
-1231 422 139 Америка,США,Техас,Хьюстон
-1230 422 139 Америка,США,Техас,Эль-Пасо
-2384 422 139 Америка,США,Техас,Другое
-406 406 139 Америка,США,Федеральный округ Колумбия
-2383 406 139 Америка,США,Федеральный округ Колумбия,Другое
-404 404 139 Америка,США,Флорида
-2879 404 139 Америка,США,Флорида,Бока-Рейтон
-2880 404 139 Америка,США,Флорида,Гейнсвил
-3086 404 139 Америка,США,Флорида,Джексонвиль
-3002 404 139 Америка,США,Флорида,Киссимми
-3124 404 139 Америка,США,Флорида,Корал Гейблс
-2894 404 139 Америка,США,Флорида,Корал-Спрингс
-3290 404 139 Америка,США,Флорида,Лейк-Ворт
-1234 404 139 Америка,США,Флорида,Майами
-1236 404 139 Америка,США,Флорида,Орландо
-3372 404 139 Америка,США,Флорида,Пинеллас Парк
-2952 404 139 Америка,США,Флорида,Пунта-Горда
-3340 404 139 Америка,США,Флорида,Сарасота
-1235 404 139 Америка,США,Флорида,Сент-Питерсберг
-405 404 139 Америка,США,Флорида,Таллахасси
-2962 404 139 Америка,США,Флорида,Форт Лаудердейл
-2382 404 139 Америка,США,Флорида,Другое
-384 384 139 Америка,США,Южная Дакота
-385 384 139 Америка,США,Южная Дакота,Пирр
-2381 384 139 Америка,США,Южная Дакота,Другое
-400 400 139 Америка,США,Южная Каролина
-401 400 139 Америка,США,Южная Каролина,Колумбия
-3090 400 139 Америка,США,Южная Каролина,Спартанбург
-1237 400 139 Америка,США,Южная Каролина,Чарлстон
-2380 400 139 Америка,США,Южная Каролина,Другое
-436 436 139 Америка,США,Юта
-3036 436 139 Америка,США,Юта,Кейсвилл
-3024 436 139 Америка,США,Юта,Линдон
-3108 436 139 Америка,США,Юта,Орем
-2866 436 139 Америка,США,Юта,Сент-Джордж
-437 436 139 Америка,США,Юта,Солт-Лейк-Сити
-2379 436 139 Америка,США,Юта,Другое
-3200 0 3200 Америка,Ангилья (Брит.)
-140 0 140 Америка,Антигуа и Барбуда
-1238 1238 140 Америка,Антигуа и Барбуда,Сент-Джонс
-2442 2442 140 Америка,Антигуа и Барбуда,Другое
-141 0 141 Америка,Аргентина
-1239 1239 141 Америка,Аргентина,Буэнос-Айрес
-2441 2441 141 Америка,Аргентина,Другое
-3202 0 3202 Америка,Аруба (Нид.)
-142 0 142 Америка,Багамы
-1240 1240 142 Америка,Багамы,Нассау
-2440 2440 142 Америка,Багамы,Другое
-143 0 143 Америка,Барбадос
-1241 1241 143 Америка,Барбадос,Бриджтаун
-2439 2439 143 Америка,Барбадос,Другое
-146 0 146 Америка,Белиз
-1242 1242 146 Америка,Белиз,Бельмопан
-2438 2438 146 Америка,Белиз,Другое
-3203 0 3203 Америка,Бермуды (Брит.)
-144 0 144 Америка,Боливия
-1243 1243 144 Америка,Боливия,Ла-Пас
-2437 2437 144 Америка,Боливия,Другое
-145 0 145 Америка,Бразилия
-1244 1244 145 Америка,Бразилия,Бразилиа
-3094 3094 145 Америка,Бразилия,Пассо Фундо
-1245 1245 145 Америка,Бразилия,Рио-де-Жанейро
-1246 1246 145 Америка,Бразилия,Сан-Паулу
-2436 2436 145 Америка,Бразилия,Другое
-147 0 147 Америка,Венесуэла
-1247 1247 147 Америка,Венесуэла,Каракас
-2435 2435 147 Америка,Венесуэла,Другое
-3204 0 3204 Америка,Виргинские острова (Брит.)
-452 0 452 Америка,Виргинские острова (США)
-1190 1190 452 Америка,Виргинские острова (США),Шарлотта-Амалия
-2364 2364 452 Америка,Виргинские острова (США),Другое
-149 0 149 Америка,Гаити
-1248 1248 149 Америка,Гаити,Порт-о-Пренс
-2434 2434 149 Америка,Гаити,Другое
-148 0 148 Америка,Гайана
-1249 1249 148 Америка,Гайана,Джоржтаун
-2433 2433 148 Америка,Гайана,Другое
-3205 0 3205 Америка,Гваделупа (Фр.)
-173 0 173 Америка,Гватемала
-1250 1250 173 Америка,Гватемала,Гватемала
-2432 2432 173 Америка,Гватемала,Другое
-150 0 150 Америка,Гондурас
-1251 1251 150 Америка,Гондурас,Тегусигальпа
-2431 2431 150 Америка,Гондурас,Другое
-151 0 151 Америка,Гренада
-1252 1252 151 Америка,Гренада,Сент-Джорджес
-2430 2430 151 Америка,Гренада,Другое
-152 0 152 Америка,Гренландия (Дат.)
-1253 1253 152 Америка,Гренландия (Дат.),Уманак
-2429 2429 152 Америка,Гренландия (Дат.),Другое
-153 0 153 Америка,Доминика
-1254 1254 153 Америка,Доминика,Розо
-2428 2428 153 Америка,Доминика,Другое
-154 0 154 Америка,Доминиканская Республика
-1255 1255 154 Америка,Доминиканская Республика,Санто-Доминго
-2427 2427 154 Америка,Доминиканская Республика,Другое
-155 0 155 Америка,Колумбия
-1256 1256 155 Америка,Колумбия,Богота
-2426 2426 155 Америка,Колумбия,Другое
-156 0 156 Америка,Коста-Рика
-1257 1257 156 Америка,Коста-Рика,Сан-Хосе
-2425 2425 156 Америка,Коста-Рика,Другое
-157 0 157 Америка,Куба
-1258 1258 157 Америка,Куба,Гавана
-2424 2424 157 Америка,Куба,Другое
-3208 0 3208 Америка,Мартиника (Фр.)
-158 0 158 Америка,Мексика
-1259 1259 158 Америка,Мексика,Акапулько
-1260 1260 158 Америка,Мексика,Мехико
-2423 2423 158 Америка,Мексика,Другое
-3209 0 3209 Америка,Монтсеррат (Брит)
-3201 0 3201 Америка,Нидерландские Антилы
-159 0 159 Америка,Никарагуа
-1261 1261 159 Америка,Никарагуа,Манагуа
-2422 2422 159 Америка,Никарагуа,Другое
-3207 0 3207 Америка,Остров Кайман (Брит.)
-3211 0 3211 Америка,Острова Теркс и Кайкос (Брит.)
-160 0 160 Америка,Панама
-1262 1262 160 Америка,Панама,Панама
-2421 2421 160 Америка,Панама,Другое
-161 0 161 Америка,Парагвай
-1263 1263 161 Америка,Парагвай,Асунсьон
-2420 2420 161 Америка,Парагвай,Другое
-162 0 162 Америка,Перу
-1264 1264 162 Америка,Перу,Лима
-2419 2419 162 Америка,Перу,Другое
-163 0 163 Америка,Сальвадор
-1265 1265 163 Америка,Сальвадор,Сан-Сальвадор
-2418 2418 163 Америка,Сальвадор,Другое
-164 0 164 Америка,Сент-Винсент и Гренадины
-1266 1266 164 Америка,Сент-Винсент и Гренадины,Кингстаун
-2417 2417 164 Америка,Сент-Винсент и Гренадины,Другое
-165 0 165 Америка,Сент-Китс и Невис
-1267 1267 165 Америка,Сент-Китс и Невис,Бастер
-2416 2416 165 Америка,Сент-Китс и Невис,Другое
-166 0 166 Америка,Сент-Люсия
-1268 1268 166 Америка,Сент-Люсия,Кастри
-2415 2415 166 Америка,Сент-Люсия,Другое
-3210 0 3210 Америка,Сент-Пьер и Микелон (Фр.)
-167 0 167 Америка,Суринам
-1269 1269 167 Америка,Суринам,Парамарибо
-2414 2414 167 Америка,Суринам,Другое
-168 0 168 Америка,Тринидат и Тобаго
-1270 1270 168 Америка,Тринидат и Тобаго,Порт-оф-Спейн
-2413 2413 168 Америка,Тринидат и Тобаго,Другое
-169 0 169 Америка,Уругвай
-1271 1271 169 Америка,Уругвай,Монтевидео
-2412 2412 169 Америка,Уругвай,Другое
-3212 0 3212 Америка,Фолклендские острова (Брит.)
-3206 0 3206 Америка,Французская Гвиана
-170 0 170 Америка,Чили
-1272 1272 170 Америка,Чили,Сантьяго
-2411 2411 170 Америка,Чили,Другое
-171 0 171 Америка,Эквадор
-1273 1273 171 Америка,Эквадор,Гуаякиль
-1274 1274 171 Америка,Эквадор,Кито
-2410 2410 171 Америка,Эквадор,Другое
-3213 0 3213 Америка,Юж. Джорджия и Юж. Сандвичевы о-ва (Брит.)
-172 0 172 Америка,Ямайка
-1275 1275 172 Америка,Ямайка,Кингстон
-2409 2409 172 Америка,Ямайка,Другое
-27 0 0 Африка
-174 0 174 Африка,Алжир
-1854 1854 174 Африка,Алжир,Алжир
-2495 2495 174 Африка,Алжир,Другое
-175 0 175 Африка,Ангола
-1855 1855 175 Африка,Ангола,Луанда
-2494 2494 175 Африка,Ангола,Другое
-176 0 176 Африка,Бенин
-1856 1856 176 Африка,Бенин,Котону
-1857 1857 176 Африка,Бенин,Порто-Ново
-2493 2493 176 Африка,Бенин,Другое
-177 0 177 Африка,Ботсвана
-1858 1858 177 Африка,Ботсвана,Габороне
-2492 2492 177 Африка,Ботсвана,Другое
-3228 0 3228 Африка,Британская территория в Индийском океане
-178 0 178 Африка,Буркина-Фасо
-1859 1859 178 Африка,Буркина-Фасо,Уагадугу
-2491 2491 178 Африка,Буркина-Фасо,Другое
-179 0 179 Африка,Бурунди
-1860 1860 179 Африка,Бурунди,Бужумбуру
-2490 2490 179 Африка,Бурунди,Другое
-180 0 180 Африка,Габон
-1861 1861 180 Африка,Габон,Либревиль
-2489 2489 180 Африка,Габон,Другое
-181 0 181 Африка,Гамбия
-1862 1862 181 Африка,Гамбия,Банжул
-2488 2488 181 Африка,Гамбия,Другое
-182 0 182 Африка,Гана
-1863 1863 182 Африка,Гана,Аккра
-2487 2487 182 Африка,Гана,Другое
-183 0 183 Африка,Гвинея
-1864 1864 183 Африка,Гвинея,Конакри
-2486 2486 183 Африка,Гвинея,Другое
-184 0 184 Африка,Гвинея-Бисау
-1865 1865 184 Африка,Гвинея-Бисау,Бисау
-2485 2485 184 Африка,Гвинея-Бисау,Другое
-185 0 185 Африка,Джибути
-1866 1866 185 Африка,Джибути,Джибути
-2484 2484 185 Африка,Джибути,Другое
-186 0 186 Африка,Египет
-3312 3312 186 Африка,Египет,Дахаб
-1867 1867 186 Африка,Египет,Каир
-1868 1868 186 Африка,Египет,Хургада
-2483 2483 186 Африка,Египет,Другое
-187 0 187 Африка,Замбия
-1869 1869 187 Африка,Замбия,Лусака
-2482 2482 187 Африка,Замбия,Другое
-3198 0 3198 Африка,Зап. Сахара
-23 0 23 Африка,Зимбабве
-1870 1870 23 Африка,Зимбабве,Хараре
-2481 2481 23 Африка,Зимбабве,Другое
-188 0 188 Африка,Кабо-Верде
-1871 1871 188 Африка,Кабо-Верде,Прая
-2480 2480 188 Африка,Кабо-Верде,Другое
-189 0 189 Африка,Камерун
-1872 1872 189 Африка,Камерун,Яунде
-2479 2479 189 Африка,Камерун,Другое
-190 0 190 Африка,Кения
-1873 1873 190 Африка,Кения,Найроби
-2478 2478 190 Африка,Кения,Другое
-191 0 191 Африка,Коморы
-1874 1874 191 Африка,Коморы,Морони
-2477 2477 191 Африка,Коморы,Другое
-193 0 193 Африка,Конго (Заир)
-1875 1875 193 Африка,Конго (Заир),Киншаса
-2476 2476 193 Африка,Конго (Заир),Другое
-192 0 192 Африка,Конго, Республика
-1876 1876 192 Африка,Конго, Республика,Браззавиль
-2475 2475 192 Африка,Конго, Республика,Другое
-194 0 194 Африка,Кот-д`Ивуар
-1877 1877 194 Африка,Кот-д`Ивуар,Ямусукро
-2474 2474 194 Африка,Кот-д`Ивуар,Другое
-195 0 195 Африка,Лесото
-1878 1878 195 Африка,Лесото,Масеру
-2473 2473 195 Африка,Лесото,Другое
-196 0 196 Африка,Либерия
-1879 1879 196 Африка,Либерия,Монровия
-2472 2472 196 Африка,Либерия,Другое
-197 0 197 Африка,Ливия
-1880 1880 197 Африка,Ливия,Триполи
-2471 2471 197 Африка,Ливия,Другое
-198 0 198 Африка,Маврикий
-1881 1881 198 Африка,Маврикий,Порт-Луи
-2470 2470 198 Африка,Маврикий,Другое
-199 0 199 Африка,Мавритания
-1882 1882 199 Африка,Мавритания,Нуакшот
-2469 2469 199 Африка,Мавритания,Другое
-200 0 200 Африка,Мадагаскар
-1883 1883 200 Африка,Мадагаскар,Антананариву
-2468 2468 200 Африка,Мадагаскар,Другое
-3229 0 3229 Африка,Майотт (Фр.)
-201 0 201 Африка,Малави
-1884 1884 201 Африка,Малави,Лилонгве
-2467 2467 201 Африка,Малави,Другое
-202 0 202 Африка,Мали
-1885 1885 202 Африка,Мали,Бамако
-2466 2466 202 Африка,Мали,Другое
-203 0 203 Африка,Марокко
-1886 1886 203 Африка,Марокко,Агадир
-1887 1887 203 Африка,Марокко,Рабат
-2465 2465 203 Африка,Марокко,Другое
-204 0 204 Африка,Мозамбик
-1888 1888 204 Африка,Мозамбик,Мапуту
-2464 2464 204 Африка,Мозамбик,Другое
-205 0 205 Африка,Намибия
-1889 1889 205 Африка,Намибия,Виндхук
-2463 2463 205 Африка,Намибия,Другое
-206 0 206 Африка,Нигер
-1890 1890 206 Африка,Нигер,Ниамей
-2462 2462 206 Африка,Нигер,Другое
-207 0 207 Африка,Нигерия
-1891 1891 207 Африка,Нигерия,Абуджа
-2461 2461 207 Африка,Нигерия,Другое
-3227 0 3227 Африка,Остров Буве (Норв.)
-3197 0 3197 Африка,Реюньон (Фр.)
-208 0 208 Африка,Руанда
-1892 1892 208 Африка,Руанда,Кигали
-2460 2460 208 Африка,Руанда,Другое
-209 0 209 Африка,Сан-Томе и Принсипи
-1893 1893 209 Африка,Сан-Томе и Принсипи,Сан-Томе
-2459 2459 209 Африка,Сан-Томе и Принсипи,Другое
-210 0 210 Африка,Свазиленд
-1894 1894 210 Африка,Свазиленд,Мбабане
-2458 2458 210 Африка,Свазиленд,Другое
-3199 0 3199 Африка,Святая Елена (Брит.)
-211 0 211 Африка,Сейшелы
-1895 1895 211 Африка,Сейшелы,Виктория
-2457 2457 211 Африка,Сейшелы,Другое
-212 0 212 Африка,Сенегал
-1896 1896 212 Африка,Сенегал,Дакар
-2456 2456 212 Африка,Сенегал,Другое
-213 0 213 Африка,Сомали
-1897 1897 213 Африка,Сомали,Могадишо
-2455 2455 213 Африка,Сомали,Другое
-214 0 214 Африка,Судан
-1898 1898 214 Африка,Судан,Хартум
-2454 2454 214 Африка,Судан,Другое
-215 0 215 Африка,Сьерра-Леоне
-1899 1899 215 Африка,Сьерра-Леоне,Фритаун
-2453 2453 215 Африка,Сьерра-Леоне,Другое
-216 0 216 Африка,Танзания
-1900 1900 216 Африка,Танзания,Дар-эс-Салам
-1901 1901 216 Африка,Танзания,Додома
-2452 2452 216 Африка,Танзания,Другое
-217 0 217 Африка,Того
-1902 1902 217 Африка,Того,Ломе
-2451 2451 217 Африка,Того,Другое
-218 0 218 Африка,Тунис
-1903 1903 218 Африка,Тунис,Тунис
-2450 2450 218 Африка,Тунис,Другое
-219 0 219 Африка,Уганда
-1904 1904 219 Африка,Уганда,Кампала
-2449 2449 219 Африка,Уганда,Другое
-220 0 220 Африка,Центральноафриканская Республика
-1905 1905 220 Африка,Центральноафриканская Республика,Банги
-2448 2448 220 Африка,Центральноафриканская Республика,Другое
-222 0 222 Африка,Чад
-1906 1906 222 Африка,Чад,Нджамена
-2447 2447 222 Африка,Чад,Другое
-223 0 223 Африка,Экваториальная Гвинея
-1907 1907 223 Африка,Экваториальная Гвинея,Малабо
-2446 2446 223 Африка,Экваториальная Гвинея,Другое
-221 0 221 Африка,Эритрея
-1908 1908 221 Африка,Эритрея,Асмэра
-2445 2445 221 Африка,Эритрея,Другое
-224 0 224 Африка,Эфиопия
-1909 1909 224 Африка,Эфиопия,Аддис-Абеба
-2444 2444 224 Африка,Эфиопия,Другое
-225 0 225 Африка,Южно-Африканская Республика (ЮАР)
-1910 1910 225 Африка,Южно-Африканская Республика (ЮАР),Дурбан
-1913 1913 225 Африка,Южно-Африканская Республика (ЮАР),Йоханнесбург
-1912 1912 225 Африка,Южно-Африканская Республика (ЮАР),Кейптаун
-3033 3033 225 Африка,Южно-Африканская Республика (ЮАР),Пайнтаун
-1911 1911 225 Африка,Южно-Африканская Республика (ЮАР),Претория
-2443 2443 225 Африка,Южно-Африканская Республика (ЮАР),Другое
-26 0 0 Европа
-39 0 39 Европа,Украина
-314 314 39 Европа,Украина,Киев
-315 315 39 Европа,Украина,Винницкая обл.
-614 315 39 Европа,Украина,Винницкая обл.,Винница
-615 315 39 Европа,Украина,Винницкая обл.,Хмельник
-2566 315 39 Европа,Украина,Винницкая обл.,Другое
-316 316 39 Европа,Украина,Волынская обл.
-2940 316 39 Европа,Украина,Волынская обл.,Ковель
-616 316 39 Европа,Украина,Волынская обл.,Луцк
-2565 316 39 Европа,Украина,Волынская обл.,Другое
-317 317 39 Европа,Украина,Днепропетровская обл.
-617 317 39 Европа,Украина,Днепропетровская обл.,Днепродзержинск
-618 317 39 Европа,Украина,Днепропетровская обл.,Днепропетровск
-619 317 39 Европа,Украина,Днепропетровская обл.,Кривой Рог
-620 317 39 Европа,Украина,Днепропетровская обл.,Никополь
-621 317 39 Европа,Украина,Днепропетровская обл.,Новомосковск
-622 317 39 Европа,Украина,Днепропетровская обл.,Орджоникидзе
-623 317 39 Европа,Украина,Днепропетровская обл.,Павлоград
-2564 317 39 Европа,Украина,Днепропетровская обл.,Другое
-318 318 39 Европа,Украина,Донецкая обл.
-624 318 39 Европа,Украина,Донецкая обл.,Артемовск
-625 318 39 Европа,Украина,Донецкая обл.,Горловка
-626 318 39 Европа,Украина,Донецкая обл.,Донецк
-627 318 39 Европа,Украина,Донецкая обл.,Дружковка
-628 318 39 Европа,Украина,Донецкая обл.,Енакиево
-629 318 39 Европа,Украина,Донецкая обл.,Константиновка
-630 318 39 Европа,Украина,Донецкая обл.,Краматорск
-2944 318 39 Европа,Украина,Донецкая обл.,Красноармейск
-631 318 39 Европа,Украина,Донецкая обл.,Макеевка
-632 318 39 Европа,Украина,Донецкая обл.,Мариуполь
-633 318 39 Европа,Украина,Донецкая обл.,Николаевка
-634 318 39 Европа,Украина,Донецкая обл.,Славянск
-635 318 39 Европа,Украина,Донецкая обл.,Харцызск
-2563 318 39 Европа,Украина,Донецкая обл.,Другое
-319 319 39 Европа,Украина,Житомирская обл.
-636 319 39 Европа,Украина,Житомирская обл.,Бердичев
-637 319 39 Европа,Украина,Житомирская обл.,Житомир
-2942 319 39 Европа,Украина,Житомирская обл.,Коростень
-638 319 39 Европа,Украина,Житомирская обл.,Коростышев
-2907 319 39 Европа,Украина,Житомирская обл.,Малин
-639 319 39 Европа,Украина,Житомирская обл.,Новоград-Волынский
-2562 319 39 Европа,Украина,Житомирская обл.,Другое
-320 320 39 Европа,Украина,Закарпатская обл.
-640 320 39 Европа,Украина,Закарпатская обл.,Берегово
-641 320 39 Европа,Украина,Закарпатская обл.,Воловец
-3119 320 39 Европа,Украина,Закарпатская обл.,Мукачево
-3162 320 39 Европа,Украина,Закарпатская обл.,Свалява
-642 320 39 Европа,Украина,Закарпатская обл.,Ужгород
-643 320 39 Европа,Украина,Закарпатская обл.,Хуст
-2561 320 39 Европа,Украина,Закарпатская обл.,Другое
-321 321 39 Европа,Украина,Запорожская обл.
-644 321 39 Европа,Украина,Запорожская обл.,Бердянск
-3128 321 39 Европа,Украина,Запорожская обл.,Гуляйполе
-645 321 39 Европа,Украина,Запорожская обл.,Запорожье
-646 321 39 Европа,Украина,Запорожская обл.,Мелитополь
-3121 321 39 Европа,Украина,Запорожская обл.,Приморск
-3378 321 39 Европа,Украина,Запорожская обл.,Энергодар
-2560 321 39 Европа,Украина,Запорожская обл.,Другое
-322 322 39 Европа,Украина,Ивано-Франковская обл.
-3379 322 39 Европа,Украина,Ивано-Франковская обл.,Галич
-647 322 39 Европа,Украина,Ивано-Франковская обл.,Ивано-Франковск
-3170 322 39 Европа,Украина,Ивано-Франковская обл.,Яремче
-2559 322 39 Европа,Украина,Ивано-Франковская обл.,Другое
-323 323 39 Европа,Украина,Киевская обл.
-648 323 39 Европа,Украина,Киевская обл.,Белая Церковь
-649 323 39 Европа,Украина,Киевская обл.,Борисполь
-651 323 39 Европа,Украина,Киевская обл.,Бровары
-650 323 39 Европа,Украина,Киевская обл.,Васильков
-652 323 39 Европа,Украина,Киевская обл.,Ирпень
-3341 323 39 Европа,Украина,Киевская обл.,Переяслав-Хмельницкий
-653 323 39 Европа,Украина,Киевская обл.,Славутич
-654 323 39 Европа,Украина,Киевская обл.,Фастов
-655 323 39 Европа,Украина,Киевская обл.,Чернобыль
-2558 323 39 Европа,Украина,Киевская обл.,Другое
-324 324 39 Европа,Украина,Кировоградская обл.
-656 324 39 Европа,Украина,Кировоградская обл.,Александрия
-657 324 39 Европа,Украина,Кировоградская обл.,Кировоград
-658 324 39 Европа,Украина,Кировоградская обл.,Светловодск
-2557 324 39 Европа,Украина,Кировоградская обл.,Другое
-325 325 39 Европа,Украина,Крым
-659 325 39 Европа,Украина,Крым,Алушта
-2984 325 39 Европа,Украина,Крым,Армянск
-3042 325 39 Европа,Украина,Крым,Балаклава
-660 325 39 Европа,Украина,Крым,Бахчисарай
-662 325 39 Европа,Украина,Крым,Гурзуф
-3382 325 39 Европа,Украина,Крым,Джанкой
-663 325 39 Европа,Украина,Крым,Евпатория
-667 325 39 Европа,Украина,Крым,Керчь
-666 325 39 Европа,Украина,Крым,Коктебель
-668 325 39 Европа,Украина,Крым,Мысовое
-669 325 39 Европа,Украина,Крым,Саки
-665 325 39 Европа,Украина,Крым,Севастополь
-661 325 39 Европа,Украина,Крым,Симферополь
-3370 325 39 Европа,Украина,Крым,Старый Крым
-670 325 39 Европа,Украина,Крым,Судак
-664 325 39 Европа,Украина,Крым,Феодосия
-3148 325 39 Европа,Украина,Крым,Черноморское
-671 325 39 Европа,Украина,Крым,Ялта
-2556 325 39 Европа,Украина,Крым,Другое
-326 326 39 Европа,Украина,Луганская обл.
-672 326 39 Европа,Украина,Луганская обл.,Алчевск
-673 326 39 Европа,Украина,Луганская обл.,Антрацит
-674 326 39 Европа,Украина,Луганская обл.,Лисичанск
-675 326 39 Европа,Украина,Луганская обл.,Луганск
-3364 326 39 Европа,Украина,Луганская обл.,Молодогвардейск
-676 326 39 Европа,Украина,Луганская обл.,Петровское
-677 326 39 Европа,Украина,Луганская обл.,Ровеньки
-678 326 39 Европа,Украина,Луганская обл.,Рубежное
-679 326 39 Европа,Украина,Луганская обл.,Северодонецк
-680 326 39 Европа,Украина,Луганская обл.,Стаханов
-2555 326 39 Европа,Украина,Луганская обл.,Другое
-327 327 39 Европа,Украина,Львовская обл.
-3284 327 39 Европа,Украина,Львовская обл.,Дрогобыч
-681 327 39 Европа,Украина,Львовская обл.,Львов
-682 327 39 Европа,Украина,Львовская обл.,Трускавец
-2554 327 39 Европа,Украина,Львовская обл.,Другое
-328 328 39 Европа,Украина,Николаевская обл.
-3322 328 39 Европа,Украина,Николаевская обл.,Вознесенск
-2870 328 39 Европа,Украина,Николаевская обл.,Жовтневое
-683 328 39 Европа,Украина,Николаевская обл.,Николаев
-3118 328 39 Европа,Украина,Николаевская обл.,Очаков
-3325 328 39 Европа,Украина,Николаевская обл.,Южноукраинск
-2553 328 39 Европа,Украина,Николаевская обл.,Другое
-329 329 39 Европа,Украина,Одесская обл.
-684 329 39 Европа,Украина,Одесская обл.,Белгород-Днестровский
-685 329 39 Европа,Украина,Одесская обл.,Измаил
-689 329 39 Европа,Украина,Одесская обл.,Ильичевск
-686 329 39 Европа,Украина,Одесская обл.,Одесса
-688 329 39 Европа,Украина,Одесская обл.,Рени
-687 329 39 Европа,Украина,Одесская обл.,Слободка
-2552 329 39 Европа,Украина,Одесская обл.,Другое
-330 330 39 Европа,Украина,Полтавская обл.
-690 330 39 Европа,Украина,Полтавская обл.,Гадяч
-691 330 39 Европа,Украина,Полтавская обл.,Комсомольск
-693 330 39 Европа,Украина,Полтавская обл.,Кременчуг
-694 330 39 Европа,Украина,Полтавская обл.,Лубны
-695 330 39 Европа,Украина,Полтавская обл.,Миргород
-692 330 39 Европа,Украина,Полтавская обл.,Полтава
-2551 330 39 Европа,Украина,Полтавская обл.,Другое
-331 331 39 Европа,Украина,Ровенская обл.
-696 331 39 Европа,Украина,Ровенская обл.,Здолбунов
-697 331 39 Европа,Украина,Ровенская обл.,Ровно
-3361 331 39 Европа,Украина,Ровенская обл.,Сарны
-2550 331 39 Европа,Украина,Ровенская обл.,Другое
-332 332 39 Европа,Украина,Сумская обл.
-3356 332 39 Европа,Украина,Сумская обл.,Бурынь
-698 332 39 Европа,Украина,Сумская обл.,Конотоп
-700 332 39 Европа,Украина,Сумская обл.,Ромны
-699 332 39 Европа,Украина,Сумская обл.,Сумы
-701 332 39 Европа,Украина,Сумская обл.,Шостка
-2549 332 39 Европа,Украина,Сумская обл.,Другое
-333 333 39 Европа,Украина,Тернопольская обл.
-702 333 39 Европа,Украина,Тернопольская обл.,Бережаны
-3171 333 39 Европа,Украина,Тернопольская обл.,Борщев
-703 333 39 Европа,Украина,Тернопольская обл.,Тернополь
-704 333 39 Европа,Украина,Тернопольская обл.,Чортков
-2548 333 39 Европа,Украина,Тернопольская обл.,Другое
-334 334 39 Европа,Украина,Харьковская обл.
-705 334 39 Европа,Украина,Харьковская обл.,Изюм
-3346 334 39 Европа,Украина,Харьковская обл.,Купянск
-3351 334 39 Европа,Украина,Харьковская обл.,Купянск
-706 334 39 Европа,Украина,Харьковская обл.,Лозовая
-708 334 39 Европа,Украина,Харьковская обл.,Мерефа
-707 334 39 Европа,Украина,Харьковская обл.,Харьков
-709 334 39 Европа,Украина,Харьковская обл.,Чугуев
-2547 334 39 Европа,Украина,Харьковская обл.,Другое
-335 335 39 Европа,Украина,Херсонская обл.
-710 335 39 Европа,Украина,Херсонская обл.,Геническ
-711 335 39 Европа,Украина,Херсонская обл.,Каховка
-712 335 39 Европа,Украина,Херсонская обл.,Новая Каховка
-3280 335 39 Европа,Украина,Херсонская обл.,Скадовск
-713 335 39 Европа,Украина,Херсонская обл.,Херсон
-2546 335 39 Европа,Украина,Херсонская обл.,Другое
-336 336 39 Европа,Украина,Хмельницкая обл.
-714 336 39 Европа,Украина,Хмельницкая обл.,Каменец-Подольский
-715 336 39 Европа,Украина,Хмельницкая обл.,Красилов
-2941 336 39 Европа,Украина,Хмельницкая обл.,Нетишин
-716 336 39 Европа,Украина,Хмельницкая обл.,Полонное
-3120 336 39 Европа,Украина,Хмельницкая обл.,Сатанов
-2943 336 39 Европа,Украина,Хмельницкая обл.,Славута
-717 336 39 Европа,Украина,Хмельницкая обл.,Хмельницкий
-3155 336 39 Европа,Украина,Хмельницкая обл.,Чемировцы
-2542 336 39 Европа,Украина,Хмельницкая обл.,Другое
-337 337 39 Европа,Украина,Черкасская обл.
-3169 337 39 Европа,Украина,Черкасская обл.,Золотоноша
-3016 337 39 Европа,Украина,Черкасская обл.,Канев
-3333 337 39 Европа,Украина,Черкасская обл.,Полонное
-718 337 39 Европа,Украина,Черкасская обл.,Умань
-719 337 39 Европа,Украина,Черкасская обл.,Христиновка
-720 337 39 Европа,Украина,Черкасская обл.,Черкассы
-2545 337 39 Европа,Украина,Черкасская обл.,Другое
-338 338 39 Европа,Украина,Черниговская обл.
-721 338 39 Европа,Украина,Черниговская обл.,Нежин
-722 338 39 Европа,Украина,Черниговская обл.,Прилуки
-723 338 39 Европа,Украина,Черниговская обл.,Чернигов
-2544 338 39 Европа,Украина,Черниговская обл.,Другое
-339 339 39 Европа,Украина,Черновицкая обл.
-724 339 39 Европа,Украина,Черновицкая обл.,Черновцы
-2543 339 39 Европа,Украина,Черновицкая обл.,Другое
-40 0 40 Европа,Австрия
-602 602 40 Европа,Австрия,Бад Халл
-604 604 40 Европа,Австрия,Брегенц
-603 603 40 Европа,Австрия,Вена
-608 608 40 Европа,Австрия,Грац
-606 606 40 Европа,Австрия,Зальцбург
-3099 3099 40 Европа,Австрия,Зель-ам-Зее
-605 605 40 Европа,Австрия,Инсбрук
-3174 3174 40 Европа,Австрия,Кирхберг
-609 609 40 Европа,Австрия,Клагенфурт
-607 607 40 Европа,Австрия,Линц
-610 610 40 Европа,Австрия,Обдах
-611 611 40 Европа,Австрия,Щтубайтал
-2541 2541 40 Европа,Австрия,Другое
-32 0 32 Европа,Албания
-612 612 32 Европа,Албания,Тирана
-2540 2540 32 Европа,Албания,Другое
-33 0 33 Европа,Андорра
-613 613 33 Европа,Андорра,Андорра-ла-Велья
-2539 2539 33 Европа,Андорра,Другое
-340 0 340 Европа,Белоруссия
-341 341 340 Европа,Белоруссия,Минск
-342 342 340 Европа,Белоруссия,Брестская обл.
-725 342 340 Европа,Белоруссия,Брестская обл.,Барановичи
-726 342 340 Европа,Белоруссия,Брестская обл.,Белоозерск
-727 342 340 Европа,Белоруссия,Брестская обл.,Береза
-728 342 340 Европа,Белоруссия,Брестская обл.,Брест
-3172 342 340 Европа,Белоруссия,Брестская обл.,Дрогичин
-729 342 340 Европа,Белоруссия,Брестская обл.,Кобрин
-730 342 340 Европа,Белоруссия,Брестская обл.,Ляховичи
-731 342 340 Европа,Белоруссия,Брестская обл.,Малорита
-732 342 340 Европа,Белоруссия,Брестская обл.,Пинск
-2538 342 340 Европа,Белоруссия,Брестская обл.,Другое
-343 343 340 Европа,Белоруссия,Витебская обл.
-733 343 340 Европа,Белоруссия,Витебская обл.,Браслав
-735 343 340 Европа,Белоруссия,Витебская обл.,Витебск
-734 343 340 Европа,Белоруссия,Витебская обл.,Новолукомоль
-736 343 340 Европа,Белоруссия,Витебская обл.,Новополоцк
-737 343 340 Европа,Белоруссия,Витебская обл.,Орша
-738 343 340 Европа,Белоруссия,Витебская обл.,Толочин
-2537 343 340 Европа,Белоруссия,Витебская обл.,Другое
-344 344 340 Европа,Белоруссия,Гомельская обл.
-739 344 340 Европа,Белоруссия,Гомельская обл.,Гомель
-740 344 340 Европа,Белоруссия,Гомельская обл.,Жлобин
-741 344 340 Европа,Белоруссия,Гомельская обл.,Мозырь
-742 344 340 Европа,Белоруссия,Гомельская обл.,Речица
-743 344 340 Европа,Белоруссия,Гомельская обл.,Рогачев
-744 344 340 Европа,Белоруссия,Гомельская обл.,Светлогорск
-2536 344 340 Европа,Белоруссия,Гомельская обл.,Другое
-345 345 340 Европа,Белоруссия,Гродненская обл.
-745 345 340 Европа,Белоруссия,Гродненская обл.,Волковыск
-746 345 340 Европа,Белоруссия,Гродненская обл.,Гродно
-747 345 340 Европа,Белоруссия,Гродненская обл.,Лида
-3244 345 340 Европа,Белоруссия,Гродненская обл.,Слоним
-748 345 340 Европа,Белоруссия,Гродненская обл.,Сморгонь
-2535 345 340 Европа,Белоруссия,Гродненская обл.,Другое
-346 346 340 Европа,Белоруссия,Минская обл.
-3149 346 340 Европа,Белоруссия,Минская обл.,Березино
-749 346 340 Европа,Белоруссия,Минская обл.,Борисов
-750 346 340 Европа,Белоруссия,Минская обл.,Вилейка
-751 346 340 Европа,Белоруссия,Минская обл.,Жодино
-752 346 340 Европа,Белоруссия,Минская обл.,Марьина Горка
-753 346 340 Европа,Белоруссия,Минская обл.,Молодечно
-2896 346 340 Европа,Белоруссия,Минская обл.,Слуцк
-754 346 340 Европа,Белоруссия,Минская обл.,Смолевичи
-755 346 340 Европа,Белоруссия,Минская обл.,Солигорск
-756 346 340 Европа,Белоруссия,Минская обл.,Червень
-2534 346 340 Европа,Белоруссия,Минская обл.,Другое
-347 347 340 Европа,Белоруссия,Могилевская обл.
-757 347 340 Европа,Белоруссия,Могилевская обл.,Бобруйск
-758 347 340 Европа,Белоруссия,Могилевская обл.,Могилев
-759 347 340 Европа,Белоруссия,Могилевская обл.,Осиповичи
-2533 347 340 Европа,Белоруссия,Могилевская обл.,Другое
-38 0 38 Европа,Бельгия
-760 760 38 Европа,Бельгия,Антверпен
-767 767 38 Европа,Бельгия,Арлон
-762 762 38 Европа,Бельгия,Брюгге
-761 761 38 Европа,Бельгия,Брюссель
-763 763 38 Европа,Бельгия,Гент
-769 769 38 Европа,Бельгия,Лувен
-765 765 38 Европа,Бельгия,Льеж
-764 764 38 Европа,Бельгия,Монс
-3117 3117 38 Европа,Бельгия,Мортсель
-766 766 38 Европа,Бельгия,Намюр
-768 768 38 Европа,Бельгия,Хасселт
-2532 2532 38 Европа,Бельгия,Другое
-41 0 41 Европа,Болгария
-3098 3098 41 Европа,Болгария,Банско
-792 792 41 Европа,Болгария,Благоевград
-770 770 41 Европа,Болгария,Бургас
-771 771 41 Европа,Болгария,Бяла
-773 773 41 Европа,Болгария,Варна
-776 776 41 Европа,Болгария,Велико-Тырново
-788 788 41 Европа,Болгария,Видин
-789 789 41 Европа,Болгария,Враца
-796 796 41 Европа,Болгария,Габрово
-777 777 41 Европа,Болгария,Димитровград
-781 781 41 Европа,Болгария,Каварна
-786 786 41 Европа,Болгария,Кырджали
-791 791 41 Европа,Болгария,Кюстендил
-793 793 41 Европа,Болгария,Лазарджик
-795 795 41 Европа,Болгария,Ловеч
-787 787 41 Европа,Болгария,Михайловград
-790 790 41 Европа,Болгария,Перник
-3133 3133 41 Европа,Болгария,Пирдоп
-794 794 41 Европа,Болгария,Плевен
-782 782 41 Европа,Болгария,Пловдив
-780 780 41 Европа,Болгария,Разград
-779 779 41 Европа,Болгария,Русе
-774 774 41 Европа,Болгария,Силистра
-784 784 41 Европа,Болгария,Сливен
-772 772 41 Европа,Болгария,София
-775 775 41 Европа,Болгария,Толбухин
-3116 3116 41 Европа,Болгария,Тырново
-785 785 41 Европа,Болгария,Хасково
-778 778 41 Европа,Болгария,Шумен
-783 783 41 Европа,Болгария,Ямбол
-2531 2531 41 Европа,Болгария,Другое
-42 0 42 Европа,Босния и Герцеговина
-797 797 42 Европа,Босния и Герцеговина,Баня-Лука
-799 799 42 Европа,Босния и Герцеговина,Зеница
-798 798 42 Европа,Босния и Герцеговина,Сараево
-800 800 42 Европа,Босния и Герцеговина,Тузла
-2530 2530 42 Европа,Босния и Герцеговина,Другое
-43 0 43 Европа,Ватикан
-45 0 45 Европа,Великобритания
-802 802 45 Европа,Великобритания,Абердин
-3075 3075 45 Европа,Великобритания,Айслворт
-801 801 45 Европа,Великобритания,Алнвик
-804 804 45 Европа,Великобритания,Бидефорд
-803 803 45 Европа,Великобритания,Бирмингем
-805 805 45 Европа,Великобритания,Блоксвич
-3168 3168 45 Европа,Великобритания,Бостон
-806 806 45 Европа,Великобритания,Брайтон
-807 807 45 Европа,Великобритания,Бредфорд
-808 808 45 Европа,Великобритания,Бристоль
-809 809 45 Европа,Великобритания,Вилленхолл
-3131 3131 45 Европа,Великобритания,Воррингтон
-810 810 45 Европа,Великобритания,Вудбридж
-3342 3342 45 Европа,Великобритания,Гилфорд
-811 811 45 Европа,Великобритания,Глазго
-812 812 45 Европа,Великобритания,Дадли
-813 813 45 Европа,Великобритания,Дарем
-814 814 45 Европа,Великобритания,Дуглас
-3089 3089 45 Европа,Великобритания,Кардиф
-815 815 45 Европа,Великобритания,Кембридж
-816 816 45 Европа,Великобритания,Кентербери
-817 817 45 Европа,Великобритания,Ливерпуль
-818 818 45 Европа,Великобритания,Лидс
-819 819 45 Европа,Великобритания,Лондон
-820 820 45 Европа,Великобритания,Манчестер
-2976 2976 45 Европа,Великобритания,Митчем
-2988 2988 45 Европа,Великобритания,Мэйденхед
-821 821 45 Европа,Великобритания,Ноттингем
-3088 3088 45 Европа,Великобритания,Ньюпорт
-822 822 45 Европа,Великобритания,Оксфорд
-823 823 45 Европа,Великобритания,Плимут
-824 824 45 Европа,Великобритания,Портсмут
-825 825 45 Европа,Великобритания,Престон
-3343 3343 45 Европа,Великобритания,Райд
-2867 2867 45 Европа,Великобритания,Ридинг
-2986 2986 45 Европа,Великобритания,Сент-Албанс
-826 826 45 Европа,Великобритания,Стаффорд
-3063 3063 45 Европа,Великобритания,Стокпорт
-827 827 45 Европа,Великобритания,Уэймут
-3140 3140 45 Европа,Великобритания,Челтенхэм
-828 828 45 Европа,Великобритания,Честер
-829 829 45 Европа,Великобритания,Шеффилд
-830 830 45 Европа,Великобритания,Эдинбург
-2529 2529 45 Европа,Великобритания,Другое
-44 0 44 Европа,Венгрия
-831 831 44 Европа,Венгрия,Будапешт
-832 832 44 Европа,Венгрия,Геделле
-836 836 44 Европа,Венгрия,Дебрецен
-835 835 44 Европа,Венгрия,Мишкольц
-834 834 44 Европа,Венгрия,Сегед
-833 833 44 Европа,Венгрия,Шиофок
-2528 2528 44 Европа,Венгрия,Другое
-46 0 46 Европа,Германия
-3007 3007 46 Европа,Германия,Аахен
-837 837 46 Европа,Германия,Аугсбург
-838 838 46 Европа,Германия,Баден-Баден
-3371 3371 46 Европа,Германия,Бамберг
-839 839 46 Европа,Германия,Бергиш-Гладбах
-840 840 46 Европа,Германия,Берлин
-841 841 46 Европа,Германия,Билефельд
-3163 3163 46 Европа,Германия,Бовенден
-842 842 46 Европа,Германия,Бонн
-843 843 46 Европа,Германия,Браденбург
-3015 3015 46 Европа,Германия,Брауншвейг
-844 844 46 Европа,Германия,Бремен
-2921 2921 46 Европа,Германия,Варштайн
-845 845 46 Европа,Германия,Веймар
-846 846 46 Европа,Германия,Вупперталь
-847 847 46 Европа,Германия,Гамбург
-848 848 46 Европа,Германия,Ганновер
-849 849 46 Европа,Германия,Гарделеген
-3010 3010 46 Европа,Германия,Гейдельберг
-850 850 46 Европа,Германия,Гота
-851 851 46 Европа,Германия,Дармштадт
-3072 3072 46 Европа,Германия,Дессау
-852 852 46 Европа,Германия,Детмольд
-853 853 46 Европа,Германия,Дортмунд
-854 854 46 Европа,Германия,Дрезден
-855 855 46 Европа,Германия,Дюссельдорф
-3082 3082 46 Европа,Германия,Иффецхайм
-3309 3309 46 Европа,Германия,Кассел
-856 856 46 Европа,Германия,Кельн
-857 857 46 Европа,Германия,Киль
-3138 3138 46 Европа,Германия,Кобленц
-858 858 46 Европа,Германия,Крефельд
-859 859 46 Европа,Германия,Лейпциг
-2872 2872 46 Европа,Германия,Лимбург
-2965 2965 46 Европа,Германия,Линген
-3135 3135 46 Европа,Германия,Любек
-3156 3156 46 Европа,Германия,Мангейм
-3192 3192 46 Европа,Германия,Меерсбург
-860 860 46 Европа,Германия,Мюнстер
-861 861 46 Европа,Германия,Мюнхен
-2864 2864 46 Европа,Германия,Нойштадт
-862 862 46 Европа,Германия,Нюрнберг
-3009 3009 46 Европа,Германия,Оффенбург
-2993 2993 46 Европа,Германия,Падерборн
-863 863 46 Европа,Германия,Равенсбург
-864 864 46 Европа,Германия,Регенсбург
-865 865 46 Европа,Германия,Рейнен
-866 866 46 Европа,Германия,Росток
-3191 3191 46 Европа,Германия,Саарбрюкен
-2974 2974 46 Европа,Германия,Санкт-Августин
-3127 3127 46 Европа,Германия,Тюринген
-867 867 46 Европа,Германия,Фрайберг
-868 868 46 Европа,Германия,Фрайбург
-869 869 46 Европа,Германия,Франкфурт-на-Майне
-3373 3373 46 Европа,Германия,Хемнитц
-3313 3313 46 Европа,Германия,Хильден
-870 870 46 Европа,Германия,Штутгарт
-3045 3045 46 Европа,Германия,Эрланген
-2906 2906 46 Европа,Германия,Эшборн
-2527 2527 46 Европа,Германия,Другое
-3193 0 3193 Европа,Гернси (Брит.)
-47 0 47 Европа,Гибралтар (Брит.)
-48 0 48 Европа,Греция
-871 871 48 Европа,Греция,Афины
-873 873 48 Европа,Греция,Ираклион
-3147 3147 48 Европа,Греция,Корфу
-872 872 48 Европа,Греция,Салоники
-3178 3178 48 Европа,Греция,Халкидики
-2526 2526 48 Европа,Греция,Другое
-49 0 49 Европа,Дания
-3006 3006 49 Европа,Дания,Архус
-874 874 49 Европа,Дания,Копенгаген
-875 875 49 Европа,Дания,Оденсе
-3285 3285 49 Европа,Дания,Ольборг
-876 876 49 Европа,Дания,Сванеке
-3126 3126 49 Европа,Дания,Скиве
-2525 2525 49 Европа,Дания,Другое
-3194 0 3194 Европа,Джерси (Брит.)
-50 0 50 Европа,Ирландия
-3377 3377 50 Европа,Ирландия,Виклоу
-3067 3067 50 Европа,Ирландия,Голвей
-877 877 50 Европа,Ирландия,Дублин
-3065 3065 50 Европа,Ирландия,Килларней
-3066 3066 50 Европа,Ирландия,Корк
-878 878 50 Европа,Ирландия,Лимерик
-3069 3069 50 Европа,Ирландия,Нейс
-3068 3068 50 Европа,Ирландия,Типперэри
-2524 2524 50 Европа,Ирландия,Другое
-51 0 51 Европа,Исландия
-879 879 51 Европа,Исландия,Рейкьявик
-2523 2523 51 Европа,Исландия,Другое
-34 0 34 Европа,Испания
-880 880 34 Европа,Испания,Аликанте
-3125 3125 34 Европа,Испания,Альмерия
-881 881 34 Европа,Испания,Барселона
-890 890 34 Европа,Испания,Бильбао
-3076 3076 34 Европа,Испания,Бланес
-882 882 34 Европа,Испания,Валенсия
-3070 3070 34 Европа,Испания,Ибица
-888 888 34 Европа,Испания,Кадис
-886 886 34 Европа,Испания,Картахена
-891 891 34 Европа,Испания,Ла-Корунья
-3310 3310 34 Европа,Испания,Лорет де Мар
-883 883 34 Европа,Испания,Мадрид
-884 884 34 Европа,Испания,Малага
-885 885 34 Европа,Испания,Марбелья
-892 892 34 Европа,Испания,Овьедо
-3179 3179 34 Европа,Испания,Пальма де Майорка
-3177 3177 34 Европа,Испания,Сан-Агустин
-3289 3289 34 Европа,Испания,Санта-Крус-де-Тенерифе
-889 889 34 Европа,Испания,Сарагоса
-887 887 34 Европа,Испания,Севилья
-893 893 34 Европа,Испания,Хихон
-2522 2522 34 Европа,Испания,Другое
-52 0 52 Европа,Италия
-3318 3318 52 Европа,Италия,Аоста
-3278 3278 52 Европа,Италия,Беллариа
-906 906 52 Европа,Италия,Болонья
-894 894 52 Европа,Италия,Брешиа
-895 895 52 Европа,Италия,Венеция
-905 905 52 Европа,Италия,Верона
-896 896 52 Европа,Италия,Генуя
-897 897 52 Европа,Италия,Лекко
-3369 3369 52 Европа,Италия,Ливорно
-3327 3327 52 Европа,Италия,Марсала
-898 898 52 Европа,Италия,Милан
-899 899 52 Европа,Италия,Модена
-907 907 52 Европа,Италия,Неаполь
-908 908 52 Европа,Италия,Перуджа
-900 900 52 Европа,Италия,Пиза
-901 901 52 Европа,Италия,Рим
-3368 3368 52 Европа,Италия,Сан-Ремо
-3384 3384 52 Европа,Италия,Сиракуза
-3252 3252 52 Европа,Италия,Терамо
-902 902 52 Европа,Италия,Триест
-903 903 52 Европа,Италия,Турин
-3130 3130 52 Европа,Италия,Фано
-904 904 52 Европа,Италия,Флоренция
-2521 2521 52 Европа,Италия,Другое
-53 0 53 Европа,Латвия
-2939 2939 53 Европа,Латвия,Айзкраукле
-3054 3054 53 Европа,Латвия,Валка
-909 909 53 Европа,Латвия,Даугавпилс
-2934 2934 53 Европа,Латвия,Екабпилс
-913 913 53 Европа,Латвия,Елгава
-2935 2935 53 Европа,Латвия,Кокнесе
-912 912 53 Европа,Латвия,Лиепая
-2905 2905 53 Европа,Латвия,Резекне
-911 911 53 Европа,Латвия,Рига
-2936 2936 53 Европа,Латвия,Саласпилс
-2937 2937 53 Европа,Латвия,Смилтене
-910 910 53 Европа,Латвия,Юрмала
-2520 2520 53 Европа,Латвия,Другое
-54 0 54 Европа,Литва
-914 914 54 Европа,Литва,Вильнюс
-915 915 54 Европа,Литва,Висагинас
-916 916 54 Европа,Литва,Каунас
-918 918 54 Европа,Литва,Клайпеда
-919 919 54 Европа,Литва,Паланга
-3173 3173 54 Европа,Литва,Пеневежис
-917 917 54 Европа,Литва,Шауляй
-2519 2519 54 Европа,Литва,Другое
-55 0 55 Европа,Лихтенштейн
-920 920 55 Европа,Лихтенштейн,Вадуц
-2518 2518 55 Европа,Лихтенштейн,Другое
-56 0 56 Европа,Люксембург
-3376 3376 56 Европа,Люксембург,Бетцдорф
-921 921 56 Европа,Люксембург,Люксембург
-2517 2517 56 Европа,Люксембург,Другое
-57 0 57 Европа,Македония
-3142 3142 57 Европа,Македония,Битола
-922 922 57 Европа,Македония,Скопье
-2516 2516 57 Европа,Македония,Другое
-58 0 58 Европа,Мальта
-923 923 58 Европа,Мальта,Валлетта
-3154 3154 58 Европа,Мальта,Мзида
-924 924 58 Европа,Мальта,Слима
-2515 2515 58 Европа,Мальта,Другое
-59 0 59 Европа,Молдавия
-925 925 59 Европа,Молдавия,Бельцы
-926 926 59 Европа,Молдавия,Бендеры
-3234 3234 59 Европа,Молдавия,Дубоссары
-3275 3275 59 Европа,Молдавия,Кахул
-927 927 59 Европа,Молдавия,Кишинев
-3321 3321 59 Европа,Молдавия,Резина
-928 928 59 Европа,Молдавия,Рыбница
-929 929 59 Европа,Молдавия,Тирасполь
-3281 3281 59 Европа,Молдавия,Чадыр-Лунга
-2514 2514 59 Европа,Молдавия,Другое
-36 0 36 Европа,Монако
-930 930 36 Европа,Монако,Монте-Карло
-2513 2513 36 Европа,Монако,Другое
-60 0 60 Европа,Нидерланды
-931 931 60 Европа,Нидерланды,Амстердам
-933 933 60 Европа,Нидерланды,Бреда
-932 932 60 Европа,Нидерланды,Гаага
-934 934 60 Европа,Нидерланды,Гауда
-935 935 60 Европа,Нидерланды,Делфт
-2977 2977 60 Европа,Нидерланды,Донген
-3030 3030 60 Европа,Нидерланды,Зволле
-3091 3091 60 Европа,Нидерланды,Ниймеген
-936 936 60 Европа,Нидерланды,Роттердам
-937 937 60 Европа,Нидерланды,Утрехт
-3044 3044 60 Европа,Нидерланды,Эйндховен
-3380 3380 60 Европа,Нидерланды,Эншеде
-2512 2512 60 Европа,Нидерланды,Другое
-61 0 61 Европа,Норвегия
-3190 3190 61 Европа,Норвегия,Кристиансанд
-2857 2857 61 Европа,Норвегия,Лиллехаммер
-938 938 61 Европа,Норвегия,Осло
-3355 3355 61 Европа,Норвегия,Ставангер
-939 939 61 Европа,Норвегия,Тронхейм
-2511 2511 61 Европа,Норвегия,Другое
-3195 0 3195 Европа,Остров Мэн (Брит.)
-62 0 62 Европа,Польша
-940 940 62 Европа,Польша,Белосток
-941 941 62 Европа,Польша,Варшава
-3164 3164 62 Европа,Польша,Вроцлав
-942 942 62 Европа,Польша,Гданьск
-943 943 62 Европа,Польша,Гливице
-3237 3237 62 Европа,Польша,Закопане
-3165 3165 62 Европа,Польша,Зелена Гура
-944 944 62 Европа,Польша,Катовице
-945 945 62 Европа,Польша,Краков
-3008 3008 62 Европа,Польша,Лодзь
-3150 3150 62 Европа,Польша,Ольштын
-946 946 62 Европа,Польша,Познань
-947 947 62 Европа,Польша,Радом
-948 948 62 Европа,Польша,Сопот
-2958 2958 62 Европа,Польша,Тыхы
-2510 2510 62 Европа,Польша,Другое
-35 0 35 Европа,Португалия
-949 949 35 Европа,Португалия,Лиссабон
-950 950 35 Европа,Португалия,Порто
-2509 2509 35 Европа,Португалия,Другое
-63 0 63 Европа,Румыния
-952 952 63 Европа,Румыния,Брашов
-951 951 63 Европа,Румыния,Бухарест
-954 954 63 Европа,Румыния,Констанца
-955 955 63 Европа,Румыния,Плоешти
-953 953 63 Европа,Румыния,Яссы
-2508 2508 63 Европа,Румыния,Другое
-64 0 64 Европа,Сан-Марино
-956 956 64 Европа,Сан-Марино,Сан-Марино
-2507 2507 64 Европа,Сан-Марино,Другое
-74 0 74 Европа,Сербия и Черногория
-957 957 74 Европа,Сербия и Черногория,Белград
-960 960 74 Европа,Сербия и Черногория,Ниш
-958 958 74 Европа,Сербия и Черногория,Нови-Сад
-959 959 74 Европа,Сербия и Черногория,Сараево
-2506 2506 74 Европа,Сербия и Черногория,Другое
-65 0 65 Европа,Словакия
-961 961 65 Европа,Словакия,Братислава
-962 962 65 Европа,Словакия,Кошице
-3101 3101 65 Европа,Словакия,Липтов
-963 963 65 Европа,Словакия,Попрад
-964 964 65 Европа,Словакия,Прешов
-965 965 65 Европа,Словакия,Ружемберок
-966 966 65 Европа,Словакия,Тврдошин
-2505 2505 65 Европа,Словакия,Другое
-66 0 66 Европа,Словения
-968 968 66 Европа,Словения,Копар
-967 967 66 Европа,Словения,Любляна
-969 969 66 Европа,Словения,Марибор
-2504 2504 66 Европа,Словения,Другое
-67 0 67 Европа,Фарерские о-ва (Дания)
-970 970 67 Европа,Фарерские о-ва (Дания),Торсхавн
-2503 2503 67 Европа,Фарерские о-ва (Дания),Другое
-68 0 68 Европа,Финляндия
-2888 2888 68 Европа,Финляндия,Вантаа
-971 971 68 Европа,Финляндия,Васа
-979 979 68 Европа,Финляндия,Котка
-972 972 68 Европа,Финляндия,Коувола
-980 980 68 Европа,Финляндия,Лахти
-973 973 68 Европа,Финляндия,Оулу
-3375 3375 68 Европа,Финляндия,Риихимяки
-3159 3159 68 Европа,Финляндия,Руовеси
-974 974 68 Европа,Финляндия,Тампере
-975 975 68 Европа,Финляндия,Турку
-976 976 68 Европа,Финляндия,Хельсинки
-977 977 68 Европа,Финляндия,Эспо
-978 978 68 Европа,Финляндия,Ювяскюля
-2502 2502 68 Европа,Финляндия,Другое
-37 0 37 Европа,Франция
-996 996 37 Европа,Франция,Авиньон
-983 983 37 Европа,Франция,Бержерак
-997 997 37 Европа,Франция,Блуа
-984 984 37 Европа,Франция,Бордо
-998 998 37 Европа,Франция,Дижон
-987 987 37 Европа,Франция,Канн
-988 988 37 Европа,Франция,Кастр
-993 993 37 Европа,Франция,Клермон-Ферран
-3037 3037 37 Европа,Франция,Лилль
-989 989 37 Европа,Франция,Лион
-985 985 37 Европа,Франция,Марсель
-991 991 37 Европа,Франция,Мец
-3161 3161 37 Европа,Франция,Мобеж
-990 990 37 Европа,Франция,Нанси
-994 994 37 Европа,Франция,Нант
-995 995 37 Европа,Франция,Ницца
-999 999 37 Европа,Франция,Орлеан
-981 981 37 Европа,Франция,Париж
-3374 3374 37 Европа,Франция,Перпиньян
-992 992 37 Европа,Франция,Руан
-982 982 37 Европа,Франция,Страсбург
-986 986 37 Европа,Франция,Тулуза
-3314 3314 37 Европа,Франция,Шамбери
-2501 2501 37 Европа,Франция,Другое
-69 0 69 Европа,Хорватия
-1003 1003 69 Европа,Хорватия,Дубровник
-1000 1000 69 Европа,Хорватия,Загреб
-1001 1001 69 Европа,Хорватия,Задар
-1004 1004 69 Европа,Хорватия,Риека
-1002 1002 69 Европа,Хорватия,Сплит
-2500 2500 69 Европа,Хорватия,Другое
-70 0 70 Европа,Чехия
-1005 1005 70 Европа,Чехия,Брно
-3291 3291 70 Европа,Чехия,Гавличкув-Брод
-1007 1007 70 Европа,Чехия,Градец-Кралове
-1008 1008 70 Европа,Чехия,Карлови-Вари
-3019 3019 70 Европа,Чехия,Кладрубы
-1010 1010 70 Европа,Чехия,Лоуни
-1009 1009 70 Европа,Чехия,Острава
-1015 1015 70 Европа,Чехия,Пльзень
-3105 3105 70 Европа,Чехия,Правчицка Брана
-1006 1006 70 Европа,Чехия,Прага
-3246 3246 70 Европа,Чехия,Тачов
-1011 1011 70 Европа,Чехия,Тршебич
-1012 1012 70 Европа,Чехия,Усти-над-Лабем
-1014 1014 70 Европа,Чехия,Ческе-Будеевице
-1013 1013 70 Европа,Чехия,Яблонец-над-Нисоу
-2499 2499 70 Европа,Чехия,Другое
-71 0 71 Европа,Швейцария
-1016 1016 71 Европа,Швейцария,Арау
-1019 1019 71 Европа,Швейцария,Баден
-1017 1017 71 Европа,Швейцария,Базель
-1018 1018 71 Европа,Швейцария,Берн
-1020 1020 71 Европа,Швейцария,Биль
-1021 1021 71 Европа,Швейцария,Винтертур
-1022 1022 71 Европа,Швейцария,Давос
-3189 3189 71 Европа,Швейцария,Делемонт
-1023 1023 71 Европа,Швейцария,Женева
-1024 1024 71 Европа,Швейцария,Золотурн
-1025 1025 71 Европа,Швейцария,Лозанна
-1026 1026 71 Европа,Швейцария,Локарно
-1027 1027 71 Европа,Швейцария,Лугано
-1028 1028 71 Европа,Швейцария,Люцерн
-1029 1029 71 Европа,Швейцария,Монтре
-1030 1030 71 Европа,Швейцария,Цюрих
-2498 2498 71 Европа,Швейцария,Другое
-72 0 72 Европа,Швеция
-2883 2883 72 Европа,Швеция,Арбога
-1031 1031 72 Европа,Швеция,Гетеборг
-1032 1032 72 Европа,Швеция,Кальмар
-1037 1037 72 Европа,Швеция,Лахольм
-1036 1036 72 Европа,Швеция,Лулео
-1042 1042 72 Европа,Швеция,Лунд
-1033 1033 72 Европа,Швеция,Мальме
-1034 1034 72 Европа,Швеция,Стокгольм
-1041 1041 72 Европа,Швеция,Умео
-1039 1039 72 Европа,Швеция,Фалун
-1043 1043 72 Европа,Швеция,Хельсинборг
-1040 1040 72 Европа,Швеция,Хернесанд
-1038 1038 72 Европа,Швеция,Эстерсунд
-2497 2497 72 Европа,Швеция,Другое
-3196 0 3196 Европа,Шпицберген (Норв.)
-73 0 73 Европа,Эстония
-3013 3013 73 Европа,Эстония,Валга
-1044 1044 73 Европа,Эстония,Кейла
-1045 1045 73 Европа,Эстония,Кохтла-Ярве
-1046 1046 73 Европа,Эстония,Маарду
-1047 1047 73 Европа,Эстония,Мыйзакюла
-1048 1048 73 Европа,Эстония,Нарва
-1049 1049 73 Европа,Эстония,Пярну
-1050 1050 73 Европа,Эстония,Раквере
-1051 1051 73 Европа,Эстония,Силламяэ
-1052 1052 73 Европа,Эстония,Таллин
-1053 1053 73 Европа,Эстония,Тарту
-1054 1054 73 Европа,Эстония,Хаапсалу
-2496 2496 73 Европа,Эстония,Другое
diff --git a/protocols/MRA/docs/region_m.txt b/protocols/MRA/docs/region_m.txt
deleted file mode 100644
index b495eb5f4d..0000000000
--- a/protocols/MRA/docs/region_m.txt
+++ /dev/null
@@ -1,3150 +0,0 @@
-24 0 24 Россия
-25 25 24 Россия,Москва
-1734 25 24 Россия,Москва,г. Зеленоград
-226 226 24 Россия,Санкт-Петербург
-233 233 24 Россия,Саха (Якутия)
-474 233 24 Россия,Саха (Якутия),Алдан
-2809 233 24 Россия,Саха (Якутия),Верхоянск
-2804 233 24 Россия,Саха (Якутия),Вилюйск
-475 233 24 Россия,Саха (Якутия),Ленск
-477 233 24 Россия,Саха (Якутия),Мирный
-476 233 24 Россия,Саха (Якутия),Нерюнгри
-2806 233 24 Россия,Саха (Якутия),Олекминск
-3115 233 24 Россия,Саха (Якутия),Покровск
-2808 233 24 Россия,Саха (Якутия),Среднеколымск
-2807 233 24 Россия,Саха (Якутия),Томмот
-2805 233 24 Россия,Саха (Якутия),Удачный
-478 233 24 Россия,Саха (Якутия),Усть-Нера
-479 233 24 Россия,Саха (Якутия),Якутск
-2263 233 24 Россия,Саха (Якутия),Другое
-232 232 24 Россия,Приморский край
-2819 232 24 Россия,Приморский край,Арсеньев
-464 232 24 Россия,Приморский край,Артем
-465 232 24 Россия,Приморский край,Большой Камень
-466 232 24 Россия,Приморский край,Владивосток
-2817 232 24 Россия,Приморский край,Дальнегорск
-2818 232 24 Россия,Приморский край,Дальнереченск
-3359 232 24 Россия,Приморский край,Кавалерово
-467 232 24 Россия,Приморский край,Камень-Рыболов
-468 232 24 Россия,Приморский край,Лесозаводск
-469 232 24 Россия,Приморский край,Лучегорск
-470 232 24 Россия,Приморский край,Находка
-471 232 24 Россия,Приморский край,Партизанск
-472 232 24 Россия,Приморский край,Пластун
-2816 232 24 Россия,Приморский край,Спасск-Дальний
-473 232 24 Россия,Приморский край,Уссурийск
-2258 232 24 Россия,Приморский край,Другое
-235 235 24 Россия,Хабаровский край
-487 235 24 Россия,Хабаровский край,Амурск
-2821 235 24 Россия,Хабаровский край,Бикин
-488 235 24 Россия,Хабаровский край,Ванино
-2820 235 24 Россия,Хабаровский край,Вяземский
-489 235 24 Россия,Хабаровский край,Комсомольск-на-Амуре
-490 235 24 Россия,Хабаровский край,Николаевск-на-Амуре
-491 235 24 Россия,Хабаровский край,Советская Гавань
-3353 235 24 Россия,Хабаровский край,Солнечный
-492 235 24 Россия,Хабаровский край,Хабаровск
-2280 235 24 Россия,Хабаровский край,Другое
-227 227 24 Россия,Амурская обл.
-455 227 24 Россия,Амурская обл.,Белогорск
-456 227 24 Россия,Амурская обл.,Благовещенск
-2814 227 24 Россия,Амурская обл.,Завитинск
-2813 227 24 Россия,Амурская обл.,Зея
-2815 227 24 Россия,Амурская обл.,Райчихинск
-2812 227 24 Россия,Амурская обл.,Свободный
-2811 227 24 Россия,Амурская обл.,Сковородино
-457 227 24 Россия,Амурская обл.,Тында
-2217 227 24 Россия,Амурская обл.,Шимановск
-2218 227 24 Россия,Амурская обл.,Другое
-229 229 24 Россия,Камчатская обл.
-460 229 24 Россия,Камчатская обл.,Елизово
-2822 229 24 Россия,Камчатская обл.,Ключи
-459 229 24 Россия,Камчатская обл.,Петропавловск-Камч.
-2234 229 24 Россия,Камчатская обл.,Другое
-231 231 24 Россия,Магаданская обл.
-462 231 24 Россия,Магаданская обл.,Магадан
-2823 231 24 Россия,Магаданская обл.,Сусуман
-463 231 24 Россия,Магаданская обл.,Ягодное
-2246 231 24 Россия,Магаданская обл.,Другое
-234 234 24 Россия,Сахалинская обл.
-480 234 24 Россия,Сахалинская обл.,Александровск-Сахалинский
-2829 234 24 Россия,Сахалинская обл.,Анива
-2833 234 24 Россия,Сахалинская обл.,Горнозаводск
-2825 234 24 Россия,Сахалинская обл.,Долинск
-481 234 24 Россия,Сахалинская обл.,Корсаков
-482 234 24 Россия,Сахалинская обл.,Красногорск
-2826 234 24 Россия,Сахалинская обл.,Курильск
-2832 234 24 Россия,Сахалинская обл.,Лесогорск
-2836 234 24 Россия,Сахалинская обл.,Макаров
-2830 234 24 Россия,Сахалинская обл.,Невельск
-483 234 24 Россия,Сахалинская обл.,Оха
-2828 234 24 Россия,Сахалинская обл.,Поронайск
-2824 234 24 Россия,Сахалинская обл.,Северо-Курильск
-2827 234 24 Россия,Сахалинская обл.,Томари
-2831 234 24 Россия,Сахалинская обл.,Углегорск
-484 234 24 Россия,Сахалинская обл.,Холмск
-2834 234 24 Россия,Сахалинская обл.,Чехов
-2835 234 24 Россия,Сахалинская обл.,Шахтерск
-485 234 24 Россия,Сахалинская обл.,Южно-Курильск
-486 234 24 Россия,Сахалинская обл.,Южно-Сахалинск
-2264 234 24 Россия,Сахалинская обл.,Другое
-228 228 24 Россия,Еврейская АО
-458 228 24 Россия,Еврейская АО,Биробиджан
-2810 228 24 Россия,Еврейская АО,Облучье
-2226 228 24 Россия,Еврейская АО,Другое
-230 230 24 Россия,Корякский АО
-461 230 24 Россия,Корякский АО,Полана
-2239 230 24 Россия,Корякский АО,Другое
-236 236 24 Россия,Чукотский АО
-493 236 24 Россия,Чукотский АО,Анадырь
-2287 236 24 Россия,Чукотский АО,Другое
-237 237 24 Россия,Башкортостан
-2850 237 24 Россия,Башкортостан,Агидель
-2851 237 24 Россия,Башкортостан,Агидель
-2657 237 24 Россия,Башкортостан,Баймак
-2662 237 24 Россия,Башкортостан,Белебей
-494 237 24 Россия,Башкортостан,Белорецк
-2658 237 24 Россия,Башкортостан,Бирск
-2660 237 24 Россия,Башкортостан,Благовещенск
-2659 237 24 Россия,Башкортостан,Давлеканово
-2663 237 24 Россия,Башкортостан,Дюртюли
-495 237 24 Россия,Башкортостан,Ишимбай
-496 237 24 Россия,Башкортостан,Кумертау
-2655 237 24 Россия,Башкортостан,Мелеуз
-497 237 24 Россия,Башкортостан,Нефтекамск
-2654 237 24 Россия,Башкортостан,Октябрьский
-499 237 24 Россия,Башкортостан,Салават
-2656 237 24 Россия,Башкортостан,Сибай
-498 237 24 Россия,Башкортостан,Стерлитамак
-500 237 24 Россия,Башкортостан,Туймазы
-2661 237 24 Россия,Башкортостан,Туймазы
-501 237 24 Россия,Башкортостан,Уфа
-502 237 24 Россия,Башкортостан,Учалы
-2664 237 24 Россия,Башкортостан,Янаул
-2220 237 24 Россия,Башкортостан,Другое
-240 240 24 Россия,Марий-Эл
-509 240 24 Россия,Марий-Эл,Волжск
-510 240 24 Россия,Марий-Эл,Звенигово
-511 240 24 Россия,Марий-Эл,Йошкар-Ола
-512 240 24 Россия,Марий-Эл,Козьмодемьянск
-2247 240 24 Россия,Марий-Эл,Другое
-241 241 24 Россия,Мордовия
-513 241 24 Россия,Мордовия,Зубова Поляна
-2147 241 24 Россия,Мордовия,Инсар
-2150 241 24 Россия,Мордовия,Ковылкино
-2148 241 24 Россия,Мордовия,Краснослободск
-2910 241 24 Россия,Мордовия,Лямбирь
-515 241 24 Россия,Мордовия,Рузаевка
-514 241 24 Россия,Мордовия,Саранск
-2149 241 24 Россия,Мордовия,Темников
-2923 241 24 Россия,Мордовия,Чамзинка
-2248 241 24 Россия,Мордовия,Другое
-248 248 24 Россия,Татарстан
-2569 248 24 Россия,Татарстан,Агрыз
-2575 248 24 Россия,Татарстан,Азнакаево
-569 248 24 Россия,Татарстан,Альметьевск
-570 248 24 Россия,Татарстан,Апастово
-2571 248 24 Россия,Татарстан,Болгар
-571 248 24 Россия,Татарстан,Бугульма
-2570 248 24 Россия,Татарстан,Буинск
-572 248 24 Россия,Татарстан,Джалиль
-573 248 24 Россия,Татарстан,Елабуга
-2576 248 24 Россия,Татарстан,Заинск
-574 248 24 Россия,Татарстан,Зеленодольск
-575 248 24 Россия,Татарстан,Казань
-2577 248 24 Россия,Татарстан,Лениногорск
-2572 248 24 Россия,Татарстан,Мамадыш
-576 248 24 Россия,Татарстан,Менделеевск
-2573 248 24 Россия,Татарстан,Мензелинск
-577 248 24 Россия,Татарстан,Набережные Челны
-578 248 24 Россия,Татарстан,Нижнекамск
-579 248 24 Россия,Татарстан,Нурлат
-2574 248 24 Россия,Татарстан,Тетюши
-580 248 24 Россия,Татарстан,Чистополь
-2271 248 24 Россия,Татарстан,Другое
-249 249 24 Россия,Удмуртия
-3311 249 24 Россия,Удмуртия,Вавож
-581 249 24 Россия,Удмуртия,Воткинск
-582 249 24 Россия,Удмуртия,Глазов
-583 249 24 Россия,Удмуртия,Игра
-584 249 24 Россия,Удмуртия,Ижевск
-2665 249 24 Россия,Удмуртия,Камбарка
-585 249 24 Россия,Удмуртия,Можга
-586 249 24 Россия,Удмуртия,Сарапул
-587 249 24 Россия,Удмуртия,Ува
-2277 249 24 Россия,Удмуртия,Другое
-251 251 24 Россия,Чувашия
-2158 251 24 Россия,Чувашия,Алатырь
-2156 251 24 Россия,Чувашия,Канаш
-2151 251 24 Россия,Чувашия,Козловка
-2152 251 24 Россия,Чувашия,Марьинский Посад
-2155 251 24 Россия,Чувашия,Новочебоксарск
-2153 251 24 Россия,Чувашия,Цивильск
-592 251 24 Россия,Чувашия,Чебоксары
-2157 251 24 Россия,Чувашия,Шумерля
-2154 251 24 Россия,Чувашия,Ядрин
-2286 251 24 Россия,Чувашия,Другое
-238 238 24 Россия,Кировская обл.
-2168 238 24 Россия,Кировская обл.,Белая Холуница
-503 238 24 Россия,Кировская обл.,Вятские Поляны
-2164 238 24 Россия,Кировская обл.,Зуевка
-504 238 24 Россия,Кировская обл.,Киров
-505 238 24 Россия,Кировская обл.,Кирово-Чепецк
-2160 238 24 Россия,Кировская обл.,Кирс
-506 238 24 Россия,Кировская обл.,Котельнич
-2167 238 24 Россия,Кировская обл.,Луза
-2159 238 24 Россия,Кировская обл.,Малмыж
-2169 238 24 Россия,Кировская обл.,Мураши
-2163 238 24 Россия,Кировская обл.,Нолинск
-2170 238 24 Россия,Кировская обл.,Омутнинск
-2166 238 24 Россия,Кировская обл.,Слободской
-2165 238 24 Россия,Кировская обл.,Советск
-2162 238 24 Россия,Кировская обл.,Сосновка
-2171 238 24 Россия,Кировская обл.,Уржум
-2161 238 24 Россия,Кировская обл.,Халтурин
-507 238 24 Россия,Кировская обл.,Яранск
-2237 238 24 Россия,Кировская обл.,Другое
-242 242 24 Россия,Нижегородская обл.
-516 242 24 Россия,Нижегородская обл.,Арзамас
-517 242 24 Россия,Нижегородская обл.,Балахна
-2139 242 24 Россия,Нижегородская обл.,Богородск
-518 242 24 Россия,Нижегородская обл.,Бор
-519 242 24 Россия,Нижегородская обл.,Вахтан
-520 242 24 Россия,Нижегородская обл.,Ветлуга
-2140 242 24 Россия,Нижегородская обл.,Володарск
-2138 242 24 Россия,Нижегородская обл.,Ворсма
-521 242 24 Россия,Нижегородская обл.,Выкса
-2137 242 24 Россия,Нижегородская обл.,Горбатов
-522 242 24 Россия,Нижегородская обл.,Городец
-523 242 24 Россия,Нижегородская обл.,Дзержинск
-524 242 24 Россия,Нижегородская обл.,Заволжье
-2891 242 24 Россия,Нижегородская обл.,Ильиногорск
-525 242 24 Россия,Нижегородская обл.,Кстово
-2145 242 24 Россия,Нижегородская обл.,Кулебаки
-2143 242 24 Россия,Нижегородская обл.,Лукоянов
-2144 242 24 Россия,Нижегородская обл.,Лысково
-2146 242 24 Россия,Нижегородская обл.,Навашино
-526 242 24 Россия,Нижегородская обл.,Нижний Новгород
-527 242 24 Россия,Нижегородская обл.,Павлово
-2135 242 24 Россия,Нижегородская обл.,Первомайск
-528 242 24 Россия,Нижегородская обл.,Саров
-529 242 24 Россия,Нижегородская обл.,Семенов
-530 242 24 Россия,Нижегородская обл.,Сергач
-2141 242 24 Россия,Нижегородская обл.,Урень
-2136 242 24 Россия,Нижегородская обл.,Чкаловск
-2897 242 24 Россия,Нижегородская обл.,Шатки
-2142 242 24 Россия,Нижегородская обл.,Шахунья
-2251 242 24 Россия,Нижегородская обл.,Другое
-243 243 24 Россия,Оренбургская обл.
-2678 243 24 Россия,Оренбургская обл.,Абдулино
-2673 243 24 Россия,Оренбургская обл.,Бугуруслан
-531 243 24 Россия,Оренбургская обл.,Бузулук
-532 243 24 Россия,Оренбургская обл.,Гай
-2674 243 24 Россия,Оренбургская обл.,Кувандык
-2675 243 24 Россия,Оренбургская обл.,Медногорск
-533 243 24 Россия,Оренбургская обл.,Новотроицк
-535 243 24 Россия,Оренбургская обл.,Оренбург
-536 243 24 Россия,Оренбургская обл.,Орск
-3360 243 24 Россия,Оренбургская обл.,Саракташ
-2677 243 24 Россия,Оренбургская обл.,Соль-Илецк
-2676 243 24 Россия,Оренбургская обл.,Сорочинск
-537 243 24 Россия,Оренбургская обл.,Тоцкое
-538 243 24 Россия,Оренбургская обл.,Ясный
-2254 243 24 Россия,Оренбургская обл.,Другое
-244 244 24 Россия,Пензенская обл.
-539 244 24 Россия,Пензенская обл.,Беднодемьяновск
-2597 244 24 Россия,Пензенская обл.,Белинский
-2595 244 24 Россия,Пензенская обл.,Городище
-2593 244 24 Россия,Пензенская обл.,Каменка
-540 244 24 Россия,Пензенская обл.,Кузнецк
-2598 244 24 Россия,Пензенская обл.,Нижний Ломов
-2592 244 24 Россия,Пензенская обл.,Никольск
-541 244 24 Россия,Пензенская обл.,Пенза
-3304 244 24 Россия,Пензенская обл.,Русский Камешкир
-2596 244 24 Россия,Пензенская обл.,Сердобск
-2594 244 24 Россия,Пензенская обл.,Сурск
-2256 244 24 Россия,Пензенская обл.,Другое
-245 245 24 Россия,Пермская обл.
-2690 245 24 Россия,Пермская обл.,Александровск
-542 245 24 Россия,Пермская обл.,Березники
-2679 245 24 Россия,Пермская обл.,Верещагино
-2680 245 24 Россия,Пермская обл.,Горнозаводск
-2687 245 24 Россия,Пермская обл.,Гремячинск
-2686 245 24 Россия,Пермская обл.,Губаха
-543 245 24 Россия,Пермская обл.,Добрянка
-544 245 24 Россия,Пермская обл.,Кизел
-2681 245 24 Россия,Пермская обл.,Красновишерск
-545 245 24 Россия,Пермская обл.,Краснокамск
-546 245 24 Россия,Пермская обл.,Кунгур
-547 245 24 Россия,Пермская обл.,Лысьва
-548 245 24 Россия,Пермская обл.,Нытва
-2683 245 24 Россия,Пермская обл.,Оса
-2684 245 24 Россия,Пермская обл.,Оханск
-2682 245 24 Россия,Пермская обл.,Очер
-549 245 24 Россия,Пермская обл.,Пермь
-550 245 24 Россия,Пермская обл.,Соликамск
-2685 245 24 Россия,Пермская обл.,Усолье
-551 245 24 Россия,Пермская обл.,Чайковский
-2689 245 24 Россия,Пермская обл.,Чердынь
-2688 245 24 Россия,Пермская обл.,Чермоз
-552 245 24 Россия,Пермская обл.,Чернушка
-553 245 24 Россия,Пермская обл.,Чусовой
-2257 245 24 Россия,Пермская обл.,Другое
-246 246 24 Россия,Самарская обл.
-554 246 24 Россия,Самарская обл.,Волжский
-555 246 24 Россия,Самарская обл.,Жигулевск
-2599 246 24 Россия,Самарская обл.,Кинель
-3293 246 24 Россия,Самарская обл.,Красный Яр
-2602 246 24 Россия,Самарская обл.,Нефтегорск
-556 246 24 Россия,Самарская обл.,Новокуйбышевск
-2600 246 24 Россия,Самарская обл.,Октябрьск
-557 246 24 Россия,Самарская обл.,Отрадный
-558 246 24 Россия,Самарская обл.,Похвистнево
-559 246 24 Россия,Самарская обл.,Самара
-560 246 24 Россия,Самарская обл.,Сызрань
-561 246 24 Россия,Самарская обл.,Тольятти
-2601 246 24 Россия,Самарская обл.,Чапаевск
-562 246 24 Россия,Самарская обл.,Шигоны
-2261 246 24 Россия,Самарская обл.,Другое
-247 247 24 Россия,Саратовская обл.
-2613 247 24 Россия,Саратовская обл.,Аркадак
-2606 247 24 Россия,Саратовская обл.,Аткарск
-563 247 24 Россия,Саратовская обл.,Балаково
-564 247 24 Россия,Саратовская обл.,Балашов
-565 247 24 Россия,Саратовская обл.,Вольск
-2608 247 24 Россия,Саратовская обл.,Ершов
-2607 247 24 Россия,Саратовская обл.,Калининск
-2609 247 24 Россия,Саратовская обл.,Красноармейск
-2610 247 24 Россия,Саратовская обл.,Красный Кут
-2605 247 24 Россия,Саратовская обл.,Маркс
-566 247 24 Россия,Саратовская обл.,Новоузенск
-2603 247 24 Россия,Саратовская обл.,Петровск
-2604 247 24 Россия,Саратовская обл.,Пугачев
-2612 247 24 Россия,Саратовская обл.,Ртищево
-567 247 24 Россия,Саратовская обл.,Саратов
-2611 247 24 Россия,Саратовская обл.,Хвалынск
-568 247 24 Россия,Саратовская обл.,Энгельс
-3267 247 24 Россия,Саратовская обл.,Энгельс-12
-2262 247 24 Россия,Саратовская обл.,Другое
-250 250 24 Россия,Ульяновская обл.
-2614 250 24 Россия,Ульяновская обл.,Барыш
-588 250 24 Россия,Ульяновская обл.,Димитровград
-2615 250 24 Россия,Ульяновская обл.,Инза
-589 250 24 Россия,Ульяновская обл.,Новоспасское
-2616 250 24 Россия,Ульяновская обл.,Новоульяновск
-590 250 24 Россия,Ульяновская обл.,Сенгилей
-591 250 24 Россия,Ульяновская обл.,Ульяновск
-2278 250 24 Россия,Ульяновская обл.,Другое
-239 239 24 Россия,Коми-Пермяцкий АО
-508 239 24 Россия,Коми-Пермяцкий АО,Кудымкар
-2238 239 24 Россия,Коми-Пермяцкий АО,Другое
-255 255 24 Россия,Карелия
-1355 255 24 Россия,Карелия,Беломорск
-1356 255 24 Россия,Карелия,Кемь
-1357 255 24 Россия,Карелия,Кондопога
-1358 255 24 Россия,Карелия,Костомукша
-1359 255 24 Россия,Карелия,Коткозеро
-1360 255 24 Россия,Карелия,Лахденпохья
-1362 255 24 Россия,Карелия,Лоухи
-1361 255 24 Россия,Карелия,Медвежьегорск
-3286 255 24 Россия,Карелия,Муезерский
-1937 255 24 Россия,Карелия,Олонец
-1363 255 24 Россия,Карелия,Петрозаводск
-1938 255 24 Россия,Карелия,Питкяранта
-3287 255 24 Россия,Карелия,Пряжа
-1936 255 24 Россия,Карелия,Пудож
-1364 255 24 Россия,Карелия,Сегежа
-1365 255 24 Россия,Карелия,Сортавала
-1939 255 24 Россия,Карелия,Суоярви
-2201 255 24 Россия,Карелия,Другое
-256 256 24 Россия,Коми
-1366 256 24 Россия,Коми,Воркута
-1367 256 24 Россия,Коми,Вуктыл
-2202 256 24 Россия,Коми,Емва
-1368 256 24 Россия,Коми,Инта
-1940 256 24 Россия,Коми,Микунь
-1369 256 24 Россия,Коми,Печора
-1941 256 24 Россия,Коми,Сосногорск
-1370 256 24 Россия,Коми,Сыктывкар
-1371 256 24 Россия,Коми,Усинск
-1372 256 24 Россия,Коми,Ухта
-2203 256 24 Россия,Коми,Другое
-252 252 24 Россия,Архангельская обл.
-593 252 24 Россия,Архангельская обл.,Архангельск
-594 252 24 Россия,Архангельская обл.,Вельск
-1945 252 24 Россия,Архангельская обл.,Каргополь
-595 252 24 Россия,Архангельская обл.,Коряжма
-596 252 24 Россия,Архангельская обл.,Котлас
-1944 252 24 Россия,Архангельская обл.,Мезень
-597 252 24 Россия,Архангельская обл.,Мирный
-598 252 24 Россия,Архангельская обл.,Новодвинск
-1946 252 24 Россия,Архангельская обл.,Няндома
-599 252 24 Россия,Архангельская обл.,Онега
-600 252 24 Россия,Архангельская обл.,Пинега
-601 252 24 Россия,Архангельская обл.,Северодвинск
-1942 252 24 Россия,Архангельская обл.,Сольвычегодск
-3239 252 24 Россия,Архангельская обл.,Холмогоры
-1943 252 24 Россия,Архангельская обл.,Шенкурск
-2204 252 24 Россия,Архангельская обл.,Другое
-253 253 24 Россия,Вологодская обл.
-1950 253 24 Россия,Вологодская обл.,Бабаево
-1949 253 24 Россия,Вологодская обл.,Белозерск
-1338 253 24 Россия,Вологодская обл.,Великий Устюг
-1339 253 24 Россия,Вологодская обл.,Вологда
-1951 253 24 Россия,Вологодская обл.,Вытегра
-1340 253 24 Россия,Вологодская обл.,Грязовец
-1952 253 24 Россия,Вологодская обл.,Кадников
-2871 253 24 Россия,Вологодская обл.,Кадуй
-1341 253 24 Россия,Вологодская обл.,Кириллов
-1955 253 24 Россия,Вологодская обл.,Красавино
-1342 253 24 Россия,Вологодская обл.,Михайловка
-1947 253 24 Россия,Вологодская обл.,Никольск
-1343 253 24 Россия,Вологодская обл.,Сокол
-1953 253 24 Россия,Вологодская обл.,Тотьма
-1954 253 24 Россия,Вологодская обл.,Устюжна
-1948 253 24 Россия,Вологодская обл.,Харовск
-1344 253 24 Россия,Вологодская обл.,Череповец
-2205 253 24 Россия,Вологодская обл.,Другое
-254 254 24 Россия,Калининградская обл.
-2838 254 24 Россия,Калининградская обл.,Багратионовск
-1345 254 24 Россия,Калининградская обл.,Балтийск
-2846 254 24 Россия,Калининградская обл.,Гвардейск
-2843 254 24 Россия,Калининградская обл.,Гурьевск
-1346 254 24 Россия,Калининградская обл.,Гусев
-1347 254 24 Россия,Калининградская обл.,Зеленоградск
-1348 254 24 Россия,Калининградская обл.,Калининград
-2842 254 24 Россия,Калининградская обл.,Краснознаменск
-2845 254 24 Россия,Калининградская обл.,Ладушкин
-2848 254 24 Россия,Калининградская обл.,Мамоново
-2837 254 24 Россия,Калининградская обл.,Неман
-2844 254 24 Россия,Калининградская обл.,Нестеров
-1349 254 24 Россия,Калининградская обл.,Озерск
-2841 254 24 Россия,Калининградская обл.,Полесск
-2839 254 24 Россия,Калининградская обл.,Правдинск
-1350 254 24 Россия,Калининградская обл.,Приморск
-1351 254 24 Россия,Калининградская обл.,Светлогорск
-1352 254 24 Россия,Калининградская обл.,Светлый
-2840 254 24 Россия,Калининградская обл.,Славск
-1353 254 24 Россия,Калининградская обл.,Советск
-1354 254 24 Россия,Калининградская обл.,Черняховск
-2231 254 24 Россия,Калининградская обл.,Другое
-257 257 24 Россия,Ленинградская обл.
-1985 257 24 Россия,Ленинградская обл.,Бокситогорск
-1374 257 24 Россия,Ленинградская обл.,Волхов
-1373 257 24 Россия,Ленинградская обл.,Всеволожск
-1375 257 24 Россия,Ленинградская обл.,Выборг
-1995 257 24 Россия,Ленинградская обл.,Высоцк
-1376 257 24 Россия,Ленинградская обл.,Гатчина
-1378 257 24 Россия,Ленинградская обл.,Ивангород
-1993 257 24 Россия,Ленинградская обл.,Каменногорск
-1379 257 24 Россия,Ленинградская обл.,Кингисепп
-1380 257 24 Россия,Ленинградская обл.,Кириши
-1381 257 24 Россия,Ленинградская обл.,Кировск
-1384 257 24 Россия,Ленинградская обл.,Кузьмоловский
-1984 257 24 Россия,Ленинградская обл.,Лодейное Поле
-1990 257 24 Россия,Ленинградская обл.,Луга
-1994 257 24 Россия,Ленинградская обл.,Любань
-1386 257 24 Россия,Ленинградская обл.,Никольское
-1987 257 24 Россия,Ленинградская обл.,Новая Ладога
-1996 257 24 Россия,Ленинградская обл.,Отрадное
-1986 257 24 Россия,Ленинградская обл.,Пикалево
-1983 257 24 Россия,Ленинградская обл.,Подпорожье
-1992 257 24 Россия,Ленинградская обл.,Приморск
-1988 257 24 Россия,Ленинградская обл.,Приозерск
-3071 257 24 Россия,Ленинградская обл.,Пушкин
-1989 257 24 Россия,Ленинградская обл.,Светогорск
-1389 257 24 Россия,Ленинградская обл.,Сертолово
-1991 257 24 Россия,Ленинградская обл.,Сланцы
-1391 257 24 Россия,Ленинградская обл.,Сосновый Бор
-1392 257 24 Россия,Ленинградская обл.,Тихвин
-1393 257 24 Россия,Ленинградская обл.,Тосно
-1394 257 24 Россия,Ленинградская обл.,Шлиссельбург
-2207 257 24 Россия,Ленинградская обл.,Другое
-258 258 24 Россия,Мурманская обл.
-1395 258 24 Россия,Мурманская обл.,Апатиты
-1959 258 24 Россия,Мурманская обл.,Заполярный
-1396 258 24 Россия,Мурманская обл.,Зареченск
-1397 258 24 Россия,Мурманская обл.,Кандалакша
-1398 258 24 Россия,Мурманская обл.,Кировск
-1399 258 24 Россия,Мурманская обл.,Ковдор
-1958 258 24 Россия,Мурманская обл.,Кола
-1400 258 24 Россия,Мурманская обл.,Мончегорск
-1401 258 24 Россия,Мурманская обл.,Мурманск
-1402 258 24 Россия,Мурманская обл.,Мурмаши
-1403 258 24 Россия,Мурманская обл.,Оленегорск
-1404 258 24 Россия,Мурманская обл.,Полярные Зори
-1956 258 24 Россия,Мурманская обл.,Полярный
-1957 258 24 Россия,Мурманская обл.,Североморск
-3288 258 24 Россия,Мурманская обл.,Снежногорск
-2206 258 24 Россия,Мурманская обл.,Другое
-260 260 24 Россия,Новгородская обл.
-1406 260 24 Россия,Новгородская обл.,Батецкий
-2001 260 24 Россия,Новгородская обл.,Боровичи
-2003 260 24 Россия,Новгородская обл.,Валдай
-1407 260 24 Россия,Новгородская обл.,Великий Новгород
-1408 260 24 Россия,Новгородская обл.,Крестцы
-2002 260 24 Россия,Новгородская обл.,Малая Вишера
-1409 260 24 Россия,Новгородская обл.,Окуловка
-2000 260 24 Россия,Новгородская обл.,Пестово
-1997 260 24 Россия,Новгородская обл.,Сольцы
-1410 260 24 Россия,Новгородская обл.,Старая Русса
-1998 260 24 Россия,Новгородская обл.,Холм
-1999 260 24 Россия,Новгородская обл.,Чудово
-2208 260 24 Россия,Новгородская обл.,Другое
-261 261 24 Россия,Псковская обл.
-1412 261 24 Россия,Псковская обл.,Великие Луки
-2004 261 24 Россия,Псковская обл.,Гдов
-2009 261 24 Россия,Псковская обл.,Дно
-2005 261 24 Россия,Псковская обл.,Невель
-1413 261 24 Россия,Псковская обл.,Новоржев
-2006 261 24 Россия,Псковская обл.,Опочка
-2008 261 24 Россия,Псковская обл.,Остров
-1414 261 24 Россия,Псковская обл.,Печоры
-1415 261 24 Россия,Псковская обл.,Порхов
-1411 261 24 Россия,Псковская обл.,Псков
-1416 261 24 Россия,Псковская обл.,Пустошка
-2007 261 24 Россия,Псковская обл.,Пыталово
-1417 261 24 Россия,Псковская обл.,Себеж
-2209 261 24 Россия,Псковская обл.,Другое
-259 259 24 Россия,Ненецкий АО
-1405 259 24 Россия,Ненецкий АО,Нарьян-Мар
-2250 259 24 Россия,Ненецкий АО,Другое
-265 265 24 Россия,Бурятия
-2764 265 24 Россия,Бурятия,Бабушкин
-2760 265 24 Россия,Бурятия,Гусиноозерск
-2762 265 24 Россия,Бурятия,Закаменск
-2763 265 24 Россия,Бурятия,Кяхта
-2761 265 24 Россия,Бурятия,Северобайкальск
-1446 265 24 Россия,Бурятия,Улан-Удэ
-2222 265 24 Россия,Бурятия,Другое
-263 263 24 Россия,Республика Алтай
-1439 263 24 Россия,Республика Алтай,Горно-Алтайск
-2215 263 24 Россия,Республика Алтай,Другое
-273 273 24 Россия,Тыва
-2766 273 24 Россия,Тыва,Ак-Довурак
-1494 273 24 Россия,Тыва,Кызыл
-2768 273 24 Россия,Тыва,Новый Шагонар
-2767 273 24 Россия,Тыва,Туран
-2765 273 24 Россия,Тыва,Чадан
-2275 273 24 Россия,Тыва,Другое
-275 275 24 Россия,Хакасия
-2769 275 24 Россия,Хакасия,Абаза
-1496 275 24 Россия,Хакасия,Абакан
-1497 275 24 Россия,Хакасия,Саяногорск
-2770 275 24 Россия,Хакасия,Сорск
-2771 275 24 Россия,Хакасия,Черногорск
-2281 275 24 Россия,Хакасия,Другое
-264 264 24 Россия,Алтайский край
-1440 264 24 Россия,Алтайский край,Алейск
-1441 264 24 Россия,Алтайский край,Барнаул
-1442 264 24 Россия,Алтайский край,Белокуриха
-1443 264 24 Россия,Алтайский край,Бийск
-2728 264 24 Россия,Алтайский край,Горняк
-2731 264 24 Россия,Алтайский край,Заринск
-2729 264 24 Россия,Алтайский край,Змеиногорск
-2732 264 24 Россия,Алтайский край,Камень-на-Оби
-3292 264 24 Россия,Алтайский край,Кулунда
-2730 264 24 Россия,Алтайский край,Новоалтайск
-1444 264 24 Россия,Алтайский край,Рубцовск
-1445 264 24 Россия,Алтайский край,Славгород
-3231 264 24 Россия,Алтайский край,Яровое
-2216 264 24 Россия,Алтайский край,Другое
-268 268 24 Россия,Красноярский край
-2781 268 24 Россия,Красноярский край,Артемовск
-1469 268 24 Россия,Красноярский край,Ачинск
-2784 268 24 Россия,Красноярский край,Боготол
-2773 268 24 Россия,Красноярский край,Бородино
-2774 268 24 Россия,Красноярский край,Дивногорск
-3122 268 24 Россия,Красноярский край,Емельяновск
-2772 268 24 Россия,Красноярский край,Енисейск
-3294 268 24 Россия,Красноярский край,Железногорск
-2777 268 24 Россия,Красноярский край,Заозерный
-1470 268 24 Россия,Красноярский край,Игарка
-2778 268 24 Россия,Красноярский край,Иланский
-2782 268 24 Россия,Красноярский край,Канск
-2783 268 24 Россия,Красноярский край,Кодинский
-1471 268 24 Россия,Красноярский край,Красноярск
-1472 268 24 Россия,Красноярский край,Лесосибирск
-1473 268 24 Россия,Красноярский край,Минусинск
-2775 268 24 Россия,Красноярский край,Назарово
-2776 268 24 Россия,Красноярский край,Сосновоборск
-2780 268 24 Россия,Красноярский край,Ужур
-2779 268 24 Россия,Красноярский край,Уяр
-2785 268 24 Россия,Красноярский край,Шарыпово
-1474 268 24 Россия,Красноярский край,Шушенское
-2242 268 24 Россия,Красноярский край,Другое
-266 266 24 Россия,Иркутская обл.
-2792 266 24 Россия,Иркутская обл.,Алзамай
-1447 266 24 Россия,Иркутская обл.,Ангарск
-1448 266 24 Россия,Иркутская обл.,Байкальск
-2791 266 24 Россия,Иркутская обл.,Бирюсинск
-1450 266 24 Россия,Иркутская обл.,Бодайбо
-1451 266 24 Россия,Иркутская обл.,Братск
-2793 266 24 Россия,Иркутская обл.,Вихоревка
-2789 266 24 Россия,Иркутская обл.,Железногорск-Илимский
-2786 266 24 Россия,Иркутская обл.,Зима
-1452 266 24 Россия,Иркутская обл.,Иркутск
-2794 266 24 Россия,Иркутская обл.,Киренск
-2787 266 24 Россия,Иркутская обл.,Нижнеудинск
-1449 266 24 Россия,Иркутская обл.,Саянск
-2790 266 24 Россия,Иркутская обл.,Свирск
-1453 266 24 Россия,Иркутская обл.,Слюдянка
-2788 266 24 Россия,Иркутская обл.,Тайшет
-1454 266 24 Россия,Иркутская обл.,Тулун
-1455 266 24 Россия,Иркутская обл.,Усолье-Сибирское
-2908 266 24 Россия,Иркутская обл.,Усольск
-1456 266 24 Россия,Иркутская обл.,Усть-Илимск
-1457 266 24 Россия,Иркутская обл.,Усть-Кут
-1458 266 24 Россия,Иркутская обл.,Хужир
-1459 266 24 Россия,Иркутская обл.,Черемхово
-2795 266 24 Россия,Иркутская обл.,Шелехов
-2229 266 24 Россия,Иркутская обл.,Другое
-267 267 24 Россия,Кемеровская обл.
-2737 267 24 Россия,Кемеровская обл.,Анжеро-Суджинск
-2740 267 24 Россия,Кемеровская обл.,Белово
-2746 267 24 Россия,Кемеровская обл.,Березовский
-2739 267 24 Россия,Кемеровская обл.,Гурьевск
-2742 267 24 Россия,Кемеровская обл.,Калтан
-1460 267 24 Россия,Кемеровская обл.,Кемерово
-1461 267 24 Россия,Кемеровская обл.,Киселевск
-2738 267 24 Россия,Кемеровская обл.,Ленинск-Кузнецкий
-2745 267 24 Россия,Кемеровская обл.,Мариинск
-1462 267 24 Россия,Кемеровская обл.,Междуреченск
-1463 267 24 Россия,Кемеровская обл.,Мыски
-1464 267 24 Россия,Кемеровская обл.,Новокузнецк
-2744 267 24 Россия,Кемеровская обл.,Осинники
-3358 267 24 Россия,Кемеровская обл.,Полысаево
-1465 267 24 Россия,Кемеровская обл.,Прокопьевск
-1466 267 24 Россия,Кемеровская обл.,Салаир
-2743 267 24 Россия,Кемеровская обл.,Тайга
-2741 267 24 Россия,Кемеровская обл.,Таштагол
-1467 267 24 Россия,Кемеровская обл.,Топки
-1468 267 24 Россия,Кемеровская обл.,Юрга
-2236 267 24 Россия,Кемеровская обл.,Другое
-269 269 24 Россия,Новосибирская обл.
-1475 269 24 Россия,Новосибирская обл.,Баган
-1476 269 24 Россия,Новосибирская обл.,Барабинск
-1477 269 24 Россия,Новосибирская обл.,Бердск
-2750 269 24 Россия,Новосибирская обл.,Болотное
-1478 269 24 Россия,Новосибирская обл.,Искитим
-2752 269 24 Россия,Новосибирская обл.,Карасук
-2751 269 24 Россия,Новосибирская обл.,Каргат
-3107 269 24 Россия,Новосибирская обл.,Краснообск
-2753 269 24 Россия,Новосибирская обл.,Куйбышев
-2755 269 24 Россия,Новосибирская обл.,Купино
-1479 269 24 Россия,Новосибирская обл.,Новосибирск
-2759 269 24 Россия,Новосибирская обл.,Обь
-2756 269 24 Россия,Новосибирская обл.,Татарск
-2758 269 24 Россия,Новосибирская обл.,Тогучин
-2757 269 24 Россия,Новосибирская обл.,Черепаново
-2754 269 24 Россия,Новосибирская обл.,Чулым
-2252 269 24 Россия,Новосибирская обл.,Другое
-270 270 24 Россия,Омская обл.
-2733 270 24 Россия,Омская обл.,Исилькуль
-1480 270 24 Россия,Омская обл.,Калачинск
-1481 270 24 Россия,Омская обл.,Марьяновка
-2735 270 24 Россия,Омская обл.,Называевск
-1482 270 24 Россия,Омская обл.,Омск
-2734 270 24 Россия,Омская обл.,Тара
-2736 270 24 Россия,Омская обл.,Тюкалинск
-2253 270 24 Россия,Омская обл.,Другое
-272 272 24 Россия,Томская обл.
-1488 272 24 Россия,Томская обл.,Асино
-1489 272 24 Россия,Томская обл.,Белый Яр
-3295 272 24 Россия,Томская обл.,Каргасок
-1491 272 24 Россия,Томская обл.,Колпашево
-1492 272 24 Россия,Томская обл.,Северск
-1493 272 24 Россия,Томская обл.,Стрежевой
-1490 272 24 Россия,Томская обл.,Томск
-2273 272 24 Россия,Томская обл.,Другое
-276 276 24 Россия,Читинская обл.
-2803 276 24 Россия,Читинская обл.,Балей
-2799 276 24 Россия,Читинская обл.,Борзя
-1499 276 24 Россия,Читинская обл.,Краснокаменск
-2801 276 24 Россия,Читинская обл.,Могоча
-2800 276 24 Россия,Читинская обл.,Нерчинск
-2802 276 24 Россия,Читинская обл.,Петровск-Забайкальский
-2798 276 24 Россия,Читинская обл.,Сретенск
-2796 276 24 Россия,Читинская обл.,Хилок
-1498 276 24 Россия,Читинская обл.,Чита
-2797 276 24 Россия,Читинская обл.,Шилка
-2285 276 24 Россия,Читинская обл.,Другое
-262 262 24 Россия,Агинский Бурятский АО
-1438 262 24 Россия,Агинский Бурятский АО,Агинское
-2213 262 24 Россия,Агинский Бурятский АО,Другое
-271 271 24 Россия,Таймырский АО
-3233 271 24 Россия,Таймырский АО,Диксон
-1485 271 24 Россия,Таймырский АО,Дудинка
-1487 271 24 Россия,Таймырский АО,Кайеркан
-1483 271 24 Россия,Таймырский АО,Норильск
-1484 271 24 Россия,Таймырский АО,Талнах
-1486 271 24 Россия,Таймырский АО,Хатанга
-2269 271 24 Россия,Таймырский АО,Другое
-274 274 24 Россия,Усть-Ордынский Бурятский АО
-1495 274 24 Россия,Усть-Ордынский Бурятский АО,Усть-Ордынский
-2279 274 24 Россия,Усть-Ордынский Бурятский АО,Другое
-277 277 24 Россия,Эвенкийский АО
-1500 277 24 Россия,Эвенкийский АО,Тура
-2288 277 24 Россия,Эвенкийский АО,Другое
-278 278 24 Россия,Курганская обл.
-2668 278 24 Россия,Курганская обл.,Далматово
-2667 278 24 Россия,Курганская обл.,Катайск
-1524 278 24 Россия,Курганская обл.,Курган
-2669 278 24 Россия,Курганская обл.,Куртамыш
-2666 278 24 Россия,Курганская обл.,Макушино
-2671 278 24 Россия,Курганская обл.,Петухово
-1525 278 24 Россия,Курганская обл.,Шадринск
-2670 278 24 Россия,Курганская обл.,Шумиха
-2672 278 24 Россия,Курганская обл.,Щучье
-2243 278 24 Россия,Курганская обл.,Другое
-279 279 24 Россия,Свердловская обл.
-1526 279 24 Россия,Свердловская обл.,Алапаевск
-1527 279 24 Россия,Свердловская обл.,Арамиль
-2691 279 24 Россия,Свердловская обл.,Артемовский
-1528 279 24 Россия,Свердловская обл.,Асбест
-2924 279 24 Россия,Свердловская обл.,Белоярский
-2707 279 24 Россия,Свердловская обл.,Березовский
-1529 279 24 Россия,Свердловская обл.,Богданович
-2698 279 24 Россия,Свердловская обл.,Верхний Тагил
-1530 279 24 Россия,Свердловская обл.,Верхняя Пышма
-1531 279 24 Россия,Свердловская обл.,Верхняя Салда
-1532 279 24 Россия,Свердловская обл.,Верхняя Синячиха
-2696 279 24 Россия,Свердловская обл.,Верхняя Тура
-2692 279 24 Россия,Свердловская обл.,Верхотурье
-2706 279 24 Россия,Свердловская обл.,Волчанск
-2709 279 24 Россия,Свердловская обл.,Дегтярск
-1533 279 24 Россия,Свердловская обл.,Екатеринбург
-1534 279 24 Россия,Свердловская обл.,Заречный
-1535 279 24 Россия,Свердловская обл.,Ивдель
-1536 279 24 Россия,Свердловская обл.,Ирбит
-1537 279 24 Россия,Свердловская обл.,Каменск-Уральский
-1538 279 24 Россия,Свердловская обл.,Камышлов
-2708 279 24 Россия,Свердловская обл.,Карпинск
-1539 279 24 Россия,Свердловская обл.,Качканар
-2712 279 24 Россия,Свердловская обл.,Кировград
-1540 279 24 Россия,Свердловская обл.,Краснотурьинск
-2694 279 24 Россия,Свердловская обл.,Красноуральск
-2693 279 24 Россия,Свердловская обл.,Красноуфимск
-1541 279 24 Россия,Свердловская обл.,Кушва
-2711 279 24 Россия,Свердловская обл.,Михайловск
-2713 279 24 Россия,Свердловская обл.,Михайловск
-1542 279 24 Россия,Свердловская обл.,Невьянск
-2702 279 24 Россия,Свердловская обл.,Нижние Серги
-1543 279 24 Россия,Свердловская обл.,Нижний Тагил
-2695 279 24 Россия,Свердловская обл.,Нижняя Салда
-2697 279 24 Россия,Свердловская обл.,Нижняя Тура
-2699 279 24 Россия,Свердловская обл.,Новая Ляля
-2909 279 24 Россия,Свердловская обл.,Новоуральск
-1544 279 24 Россия,Свердловская обл.,Первоуральск
-1545 279 24 Россия,Свердловская обл.,Полевской
-1546 279 24 Россия,Свердловская обл.,Ревда
-1547 279 24 Россия,Свердловская обл.,Реж
-3296 279 24 Россия,Свердловская обл.,Рефтинский
-2700 279 24 Россия,Свердловская обл.,Североуральск
-1548 279 24 Россия,Свердловская обл.,Серов
-2710 279 24 Россия,Свердловская обл.,Среднеуральск
-2701 279 24 Россия,Свердловская обл.,Сухой Лог
-2703 279 24 Россия,Свердловская обл.,Сысерть
-1549 279 24 Россия,Свердловская обл.,Тавда
-2704 279 24 Россия,Свердловская обл.,Талица
-2705 279 24 Россия,Свердловская обл.,Туринск
-2265 279 24 Россия,Свердловская обл.,Другое
-280 280 24 Россия,Тюменская обл.
-1550 280 24 Россия,Тюменская обл.,Заводоуковск
-1551 280 24 Россия,Тюменская обл.,Ишим
-3326 280 24 Россия,Тюменская обл.,Сургут
-1552 280 24 Россия,Тюменская обл.,Тобольск
-1553 280 24 Россия,Тюменская обл.,Тюмень
-2748 280 24 Россия,Тюменская обл.,Ялуторовск
-2276 280 24 Россия,Тюменская обл.,Другое
-282 282 24 Россия,Челябинская обл.
-1564 282 24 Россия,Челябинская обл.,Аша
-2723 282 24 Россия,Челябинская обл.,Бакал
-2724 282 24 Россия,Челябинская обл.,Верхнеуральск
-2716 282 24 Россия,Челябинская обл.,Верхний Уфалей
-3297 282 24 Россия,Челябинская обл.,Всеволожск
-2725 282 24 Россия,Челябинская обл.,Еманжелинск
-1565 282 24 Россия,Челябинская обл.,Златоуст
-2722 282 24 Россия,Челябинская обл.,Карабаш
-1566 282 24 Россия,Челябинская обл.,Карталы
-2718 282 24 Россия,Челябинская обл.,Касли
-2720 282 24 Россия,Челябинская обл.,Катав-Ивановск
-1567 282 24 Россия,Челябинская обл.,Копейск
-2721 282 24 Россия,Челябинская обл.,Коркино
-2715 282 24 Россия,Челябинская обл.,Куса
-1568 282 24 Россия,Челябинская обл.,Кыштым
-1569 282 24 Россия,Челябинская обл.,Магнитогорск
-1570 282 24 Россия,Челябинская обл.,Миасс
-2726 282 24 Россия,Челябинская обл.,Миньяр
-2717 282 24 Россия,Челябинская обл.,Нязепетровск
-3100 282 24 Россия,Челябинская обл.,Озерск
-1571 282 24 Россия,Челябинская обл.,Пласт
-2719 282 24 Россия,Челябинская обл.,Сатка
-2727 282 24 Россия,Челябинская обл.,Сим
-1572 282 24 Россия,Челябинская обл.,Снежинск
-3332 282 24 Россия,Челябинская обл.,Трехгорный
-1573 282 24 Россия,Челябинская обл.,Троицк
-1574 282 24 Россия,Челябинская обл.,Усть-Катав
-1575 282 24 Россия,Челябинская обл.,Чебаркуль
-1576 282 24 Россия,Челябинская обл.,Челябинск
-1577 282 24 Россия,Челябинская обл.,Южноуральск
-2714 282 24 Россия,Челябинская обл.,Юрюзань
-2283 282 24 Россия,Челябинская обл.,Другое
-281 281 24 Россия,Ханты-Мансийский АО - Югра
-2749 281 24 Россия,Ханты-Мансийский АО - Югра,Белоярский
-1554 281 24 Россия,Ханты-Мансийский АО - Югра,Игрим
-1555 281 24 Россия,Ханты-Мансийский АО - Югра,Когалым
-1556 281 24 Россия,Ханты-Мансийский АО - Югра,Лангепас
-1561 281 24 Россия,Ханты-Мансийский АО - Югра,Мегион
-1562 281 24 Россия,Ханты-Мансийский АО - Югра,Нефтеюганск
-1559 281 24 Россия,Ханты-Мансийский АО - Югра,Нижневартовск
-2852 281 24 Россия,Ханты-Мансийский АО - Югра,Нягань
-2853 281 24 Россия,Ханты-Мансийский АО - Югра,Нягань
-2854 281 24 Россия,Ханты-Мансийский АО - Югра,Пыть-Ях
-1560 281 24 Россия,Ханты-Мансийский АО - Югра,Радужный
-1563 281 24 Россия,Ханты-Мансийский АО - Югра,Советский
-2747 281 24 Россия,Ханты-Мансийский АО - Югра,Сургут
-1557 281 24 Россия,Ханты-Мансийский АО - Югра,Урай
-1558 281 24 Россия,Ханты-Мансийский АО - Югра,Ханты-Мансийск
-3344 281 24 Россия,Ханты-Мансийский АО - Югра,Югорск
-2282 281 24 Россия,Ханты-Мансийский АО - Югра,Другое
-283 283 24 Россия,Ямало-Ненецкий АО
-3298 283 24 Россия,Ямало-Ненецкий АО,Губкинский
-1578 283 24 Россия,Ямало-Ненецкий АО,Лабытнанги
-2856 283 24 Россия,Ямало-Ненецкий АО,Муравленко
-1579 283 24 Россия,Ямало-Ненецкий АО,Надым
-1580 283 24 Россия,Ямало-Ненецкий АО,Новый Уренгой
-1581 283 24 Россия,Ямало-Ненецкий АО,Ноябрьск
-1582 283 24 Россия,Ямало-Ненецкий АО,Салехард
-1583 283 24 Россия,Ямало-Ненецкий АО,Уренгой
-2289 283 24 Россия,Ямало-Ненецкий АО,Другое
-284 284 24 Россия,Белгородская обл.
-1625 284 24 Россия,Белгородская обл.,Алексеевка
-1626 284 24 Россия,Белгородская обл.,Белгород
-2172 284 24 Россия,Белгородская обл.,Валуйки
-2173 284 24 Россия,Белгородская обл.,Грайворон
-1627 284 24 Россия,Белгородская обл.,Губкин
-2174 284 24 Россия,Белгородская обл.,Короча
-2175 284 24 Россия,Белгородская обл.,Новый Оскол
-1628 284 24 Россия,Белгородская обл.,Старый Оскол
-1629 284 24 Россия,Белгородская обл.,Шебекино
-2221 284 24 Россия,Белгородская обл.,Другое
-285 285 24 Россия,Брянская обл.
-1630 285 24 Россия,Брянская обл.,Брянск
-3283 285 24 Россия,Брянская обл.,Дебрянск
-1631 285 24 Россия,Брянская обл.,Дятьково
-2013 285 24 Россия,Брянская обл.,Жуковка
-2015 285 24 Россия,Брянская обл.,Злынка
-1632 285 24 Россия,Брянская обл.,Карачев
-1633 285 24 Россия,Брянская обл.,Клинцы
-1634 285 24 Россия,Брянская обл.,Мглин
-2016 285 24 Россия,Брянская обл.,Новозыбков
-2018 285 24 Россия,Брянская обл.,Почеп
-2017 285 24 Россия,Брянская обл.,Севск
-2020 285 24 Россия,Брянская обл.,Сельцо
-2014 285 24 Россия,Брянская обл.,Стародуб
-2010 285 24 Россия,Брянская обл.,Сураж
-2012 285 24 Россия,Брянская обл.,Трубчевск
-2011 285 24 Россия,Брянская обл.,Унеча
-2019 285 24 Россия,Брянская обл.,Фокино
-2210 285 24 Россия,Брянская обл.,Другое
-286 286 24 Россия,Владимирская обл.
-1635 286 24 Россия,Владимирская обл.,Александров
-1636 286 24 Россия,Владимирская обл.,Владимир
-2021 286 24 Россия,Владимирская обл.,Вязники
-1637 286 24 Россия,Владимирская обл.,Головино
-2022 286 24 Россия,Владимирская обл.,Гороховец
-1638 286 24 Россия,Владимирская обл.,Гусь-Хрустальный
-2023 286 24 Россия,Владимирская обл.,Камешково
-2031 286 24 Россия,Владимирская обл.,Карабаново
-2024 286 24 Россия,Владимирская обл.,Киржач
-1639 286 24 Россия,Владимирская обл.,Ковров
-1640 286 24 Россия,Владимирская обл.,Кольчугино
-2026 286 24 Россия,Владимирская обл.,Костерево
-3299 286 24 Россия,Владимирская обл.,Красная Горбатка
-2033 286 24 Россия,Владимирская обл.,Лакинск
-2025 286 24 Россия,Владимирская обл.,Меленки
-1641 286 24 Россия,Владимирская обл.,Муром
-1642 286 24 Россия,Владимирская обл.,Петушки
-2027 286 24 Россия,Владимирская обл.,Покров
-2211 286 24 Россия,Владимирская обл.,Радужный
-2028 286 24 Россия,Владимирская обл.,Собинка
-2032 286 24 Россия,Владимирская обл.,Струнино
-2029 286 24 Россия,Владимирская обл.,Судогда
-1643 286 24 Россия,Владимирская обл.,Суздаль
-2030 286 24 Россия,Владимирская обл.,Юрьев-Польский
-2212 286 24 Россия,Владимирская обл.,Другое
-287 287 24 Россия,Воронежская обл.
-1644 287 24 Россия,Воронежская обл.,Бобров
-1645 287 24 Россия,Воронежская обл.,Богучар
-1646 287 24 Россия,Воронежская обл.,Борисоглебск
-1647 287 24 Россия,Воронежская обл.,Бутурлиновка
-1648 287 24 Россия,Воронежская обл.,Воронеж
-2178 287 24 Россия,Воронежская обл.,Калач
-2176 287 24 Россия,Воронежская обл.,Лиски
-1649 287 24 Россия,Воронежская обл.,Нововоронеж
-2177 287 24 Россия,Воронежская обл.,Новохоперск
-2180 287 24 Россия,Воронежская обл.,Острогожск
-1650 287 24 Россия,Воронежская обл.,Павловск
-2181 287 24 Россия,Воронежская обл.,Поворино
-1651 287 24 Россия,Воронежская обл.,Россошь
-2179 287 24 Россия,Воронежская обл.,Семилуки
-2182 287 24 Россия,Воронежская обл.,Эртиль
-2224 287 24 Россия,Воронежская обл.,Другое
-288 288 24 Россия,Ивановская обл.
-1652 288 24 Россия,Ивановская обл.,Вичуга
-2036 288 24 Россия,Ивановская обл.,Гаврилов Посад
-1657 288 24 Россия,Ивановская обл.,Заволжск
-1653 288 24 Россия,Ивановская обл.,Иваново
-1656 288 24 Россия,Ивановская обл.,Кинешма
-2040 288 24 Россия,Ивановская обл.,Комсомольск
-2037 288 24 Россия,Ивановская обл.,Кохма
-2043 288 24 Россия,Ивановская обл.,Наволоки
-3300 288 24 Россия,Ивановская обл.,Палех
-2039 288 24 Россия,Ивановская обл.,Плес
-2038 288 24 Россия,Ивановская обл.,Приволжск
-2042 288 24 Россия,Ивановская обл.,Пучеж
-2044 288 24 Россия,Ивановская обл.,Родники
-1655 288 24 Россия,Ивановская обл.,Тейково
-2034 288 24 Россия,Ивановская обл.,Фурманов
-1654 288 24 Россия,Ивановская обл.,Шуя
-2041 288 24 Россия,Ивановская обл.,Южа
-2035 288 24 Россия,Ивановская обл.,Юрьевец
-2227 288 24 Россия,Ивановская обл.,Другое
-289 289 24 Россия,Калужская обл.
-2050 289 24 Россия,Калужская обл.,Балабаново
-2051 289 24 Россия,Калужская обл.,Боровск
-3301 289 24 Россия,Калужская обл.,Воротынск
-2052 289 24 Россия,Калужская обл.,Жиздра
-1660 289 24 Россия,Калужская обл.,Жуковка
-1658 289 24 Россия,Калужская обл.,Калуга
-2046 289 24 Россия,Калужская обл.,Киров
-1661 289 24 Россия,Калужская обл.,Козельск
-2053 289 24 Россия,Калужская обл.,Кондрово
-2049 289 24 Россия,Калужская обл.,Людиново
-1659 289 24 Россия,Калужская обл.,Малоярославец
-2054 289 24 Россия,Калужская обл.,Медынь
-2055 289 24 Россия,Калужская обл.,Мещовск
-2047 289 24 Россия,Калужская обл.,Мосальск
-1662 289 24 Россия,Калужская обл.,Обнинск
-2057 289 24 Россия,Калужская обл.,Сосенский
-2056 289 24 Россия,Калужская обл.,Спас-Демянск
-2045 289 24 Россия,Калужская обл.,Сухиничи
-1663 289 24 Россия,Калужская обл.,Таруса
-2131 289 24 Россия,Калужская обл.,Чекалин
-2048 289 24 Россия,Калужская обл.,Юхнов
-2233 289 24 Россия,Калужская обл.,Другое
-290 290 24 Россия,Костромская обл.
-1664 290 24 Россия,Костромская обл.,Буй
-1665 290 24 Россия,Костромская обл.,Волгореченск
-1666 290 24 Россия,Костромская обл.,Галич
-2059 290 24 Россия,Костромская обл.,Кологрив
-1667 290 24 Россия,Костромская обл.,Кострома
-3302 290 24 Россия,Костромская обл.,Красное-на-Волге
-1668 290 24 Россия,Костромская обл.,Макарьев
-2060 290 24 Россия,Костромская обл.,Мантурово
-1669 290 24 Россия,Костромская обл.,Нерехта
-2061 290 24 Россия,Костромская обл.,Нея
-2062 290 24 Россия,Костромская обл.,Солигалич
-2058 290 24 Россия,Костромская обл.,Чухлома
-1670 290 24 Россия,Костромская обл.,Шарья
-2240 290 24 Россия,Костромская обл.,Другое
-291 291 24 Россия,Курская обл.
-1671 291 24 Россия,Курская обл.,Дмитриев-Льговский
-1673 291 24 Россия,Курская обл.,Железногорск
-3279 291 24 Россия,Курская обл.,Железногорск
-1672 291 24 Россия,Курская обл.,Курск
-2187 291 24 Россия,Курская обл.,Курчатов
-2188 291 24 Россия,Курская обл.,Льгов
-2184 291 24 Россия,Курская обл.,Обоянь
-2185 291 24 Россия,Курская обл.,Рыльск
-2183 291 24 Россия,Курская обл.,Суджа
-2189 291 24 Россия,Курская обл.,Фатеж
-2186 291 24 Россия,Курская обл.,Щигры
-2244 291 24 Россия,Курская обл.,Другое
-292 292 24 Россия,Липецкая обл.
-2194 292 24 Россия,Липецкая обл.,Грязи
-2193 292 24 Россия,Липецкая обл.,Данков
-1674 292 24 Россия,Липецкая обл.,Елец
-2190 292 24 Россия,Липецкая обл.,Задонск
-2195 292 24 Россия,Липецкая обл.,Лебедянь
-1675 292 24 Россия,Липецкая обл.,Липецк
-2192 292 24 Россия,Липецкая обл.,Усмань
-2191 292 24 Россия,Липецкая обл.,Чаплыгин
-2245 292 24 Россия,Липецкая обл.,Другое
-293 293 24 Россия,Московская обл.
-1733 293 24 Россия,Московская обл.,Апрелевка
-1732 293 24 Россия,Московская обл.,Балашиха
-1731 293 24 Россия,Московская обл.,Бронницы
-1730 293 24 Россия,Московская обл.,Верея
-2063 293 24 Россия,Московская обл.,Видное
-2064 293 24 Россия,Московская обл.,Волоколамск
-1729 293 24 Россия,Московская обл.,Воскресенск
-1728 293 24 Россия,Московская обл.,Высоковск
-1727 293 24 Россия,Московская обл.,Голицыно
-2065 293 24 Россия,Московская обл.,Дедовск
-1726 293 24 Россия,Московская обл.,Дзержинский
-1725 293 24 Россия,Московская обл.,Дмитров
-1724 293 24 Россия,Московская обл.,Долгопрудный
-1723 293 24 Россия,Московская обл.,Домодедово
-2066 293 24 Россия,Московская обл.,Дрезна
-1722 293 24 Россия,Московская обл.,Дубна
-1721 293 24 Россия,Московская обл.,Егорьевск
-1720 293 24 Россия,Московская обл.,Железнодорожный
-1719 293 24 Россия,Московская обл.,Жуковский
-2067 293 24 Россия,Московская обл.,Зарайск
-1718 293 24 Россия,Московская обл.,Звенигород
-1715 293 24 Россия,Московская обл.,Ивантеевка
-1717 293 24 Россия,Московская обл.,Истра
-2068 293 24 Россия,Московская обл.,Калининград
-2069 293 24 Россия,Московская обл.,Кашира
-1716 293 24 Россия,Московская обл.,Климовск
-1714 293 24 Россия,Московская обл.,Клин
-1713 293 24 Россия,Московская обл.,Коломна
-1712 293 24 Россия,Московская обл.,Королев
-1711 293 24 Россия,Московская обл.,Красноармейск
-1710 293 24 Россия,Московская обл.,Красногорск
-2070 293 24 Россия,Московская обл.,Краснозаводск
-2071 293 24 Россия,Московская обл.,Куровское
-1709 293 24 Россия,Московская обл.,Ликино-Дулево
-1708 293 24 Россия,Московская обл.,Лобня
-2072 293 24 Россия,Московская обл.,Лосино-Петровский
-1707 293 24 Россия,Московская обл.,Луховицы
-1706 293 24 Россия,Московская обл.,Лыткарино
-1705 293 24 Россия,Московская обл.,Люберцы
-1704 293 24 Россия,Московская обл.,Менделеево
-1703 293 24 Россия,Московская обл.,Можайск
-1702 293 24 Россия,Московская обл.,Мытищи
-1701 293 24 Россия,Московская обл.,Наро-Фоминск
-1700 293 24 Россия,Московская обл.,Ногинск
-1698 293 24 Россия,Московская обл.,Одинцово
-2073 293 24 Россия,Московская обл.,Ожерелье
-2074 293 24 Россия,Московская обл.,Озеры
-1699 293 24 Россия,Московская обл.,Орехово-Зуево
-1697 293 24 Россия,Московская обл.,Павловский Посад
-1696 293 24 Россия,Московская обл.,Подольск
-1695 293 24 Россия,Московская обл.,Протвино
-1694 293 24 Россия,Московская обл.,Пушкино
-1693 293 24 Россия,Московская обл.,Пущино
-1692 293 24 Россия,Московская обл.,Раменское
-1691 293 24 Россия,Московская обл.,Реутов
-1690 293 24 Россия,Московская обл.,Решетников
-2075 293 24 Россия,Московская обл.,Рошаль
-2076 293 24 Россия,Московская обл.,Руза
-1689 293 24 Россия,Московская обл.,Сергиев Посад
-1688 293 24 Россия,Московская обл.,Серпухов
-1687 293 24 Россия,Московская обл.,Солнечногорск
-1686 293 24 Россия,Московская обл.,Ступино
-2077 293 24 Россия,Московская обл.,Сходня
-2078 293 24 Россия,Московская обл.,Талдом
-1685 293 24 Россия,Московская обл.,Троицк
-1684 293 24 Россия,Московская обл.,Фрязино
-1683 293 24 Россия,Московская обл.,Химки
-1682 293 24 Россия,Московская обл.,Хотьково
-1681 293 24 Россия,Московская обл.,Черноголовка
-1680 293 24 Россия,Московская обл.,Чехов
-1679 293 24 Россия,Московская обл.,Шатура
-1678 293 24 Россия,Московская обл.,Щелково
-2080 293 24 Россия,Московская обл.,Щербинка
-1677 293 24 Россия,Московская обл.,Электрогорск
-1676 293 24 Россия,Московская обл.,Электросталь
-2079 293 24 Россия,Московская обл.,Электроугли
-3031 293 24 Россия,Московская обл.,Юбилейный
-2081 293 24 Россия,Московская обл.,Яхрома
-2249 293 24 Россия,Московская обл.,Другое
-294 294 24 Россия,Орловская обл.
-2083 294 24 Россия,Орловская обл.,Болхов
-2082 294 24 Россия,Орловская обл.,Дмитровск-Орловский
-3160 294 24 Россия,Орловская обл.,Залегощь
-1736 294 24 Россия,Орловская обл.,Ливны
-2084 294 24 Россия,Орловская обл.,Малоархангельск
-1737 294 24 Россия,Орловская обл.,Мценск
-2085 294 24 Россия,Орловская обл.,Новосиль
-1735 294 24 Россия,Орловская обл.,Орел
-2255 294 24 Россия,Орловская обл.,Другое
-295 295 24 Россия,Рязанская обл.
-1740 295 24 Россия,Рязанская обл.,Гусь-Железный
-1741 295 24 Россия,Рязанская обл.,Касимов
-2086 295 24 Россия,Рязанская обл.,Кораблино
-2087 295 24 Россия,Рязанская обл.,Михайлов
-2089 295 24 Россия,Рязанская обл.,Новомичуринск
-2091 295 24 Россия,Рязанская обл.,Рыбное
-2093 295 24 Россия,Рязанская обл.,Ряжск
-1738 295 24 Россия,Рязанская обл.,Рязань
-3305 295 24 Россия,Рязанская обл.,Сапожок
-1739 295 24 Россия,Рязанская обл.,Сасово
-2090 295 24 Россия,Рязанская обл.,Скопин
-2088 295 24 Россия,Рязанская обл.,Спас-Клепики
-2092 295 24 Россия,Рязанская обл.,Спасск-Рязанский
-2094 295 24 Россия,Рязанская обл.,Шацк
-3320 295 24 Россия,Рязанская обл.,Шилово
-2260 295 24 Россия,Рязанская обл.,Другое
-296 296 24 Россия,Смоленская обл.
-2095 296 24 Россия,Смоленская обл.,Велиж
-1743 296 24 Россия,Смоленская обл.,Вязьма
-1744 296 24 Россия,Смоленская обл.,Гагарин
-2096 296 24 Россия,Смоленская обл.,Демидов
-1745 296 24 Россия,Смоленская обл.,Десногорск
-1746 296 24 Россия,Смоленская обл.,Дорогубуж
-2097 296 24 Россия,Смоленская обл.,Духовщина
-2098 296 24 Россия,Смоленская обл.,Ельня
-2099 296 24 Россия,Смоленская обл.,Починок
-2100 296 24 Россия,Смоленская обл.,Рославль
-2101 296 24 Россия,Смоленская обл.,Рудня
-1747 296 24 Россия,Смоленская обл.,Сафоново
-1742 296 24 Россия,Смоленская обл.,Смоленск
-2102 296 24 Россия,Смоленская обл.,Сычевка
-1748 296 24 Россия,Смоленская обл.,Ярцево
-2267 296 24 Россия,Смоленская обл.,Другое
-297 297 24 Россия,Тамбовская обл.
-2198 297 24 Россия,Тамбовская обл.,Жердевка
-2199 297 24 Россия,Тамбовская обл.,Кирсанов
-1752 297 24 Россия,Тамбовская обл.,Котовск
-1751 297 24 Россия,Тамбовская обл.,Мичуринск
-2196 297 24 Россия,Тамбовская обл.,Моршанск
-1750 297 24 Россия,Тамбовская обл.,Рассказово
-3271 297 24 Россия,Тамбовская обл.,Сатинка
-1749 297 24 Россия,Тамбовская обл.,Тамбов
-3272 297 24 Россия,Тамбовская обл.,Тулиновка
-2197 297 24 Россия,Тамбовская обл.,Уварово
-2270 297 24 Россия,Тамбовская обл.,Другое
-298 298 24 Россия,Тверская обл.
-2103 298 24 Россия,Тверская обл.,Андреаполь
-2104 298 24 Россия,Тверская обл.,Бежецк
-2105 298 24 Россия,Тверская обл.,Белый
-2106 298 24 Россия,Тверская обл.,Бологое
-2107 298 24 Россия,Тверская обл.,Весьегонск
-1753 298 24 Россия,Тверская обл.,Вышний Волочек
-2108 298 24 Россия,Тверская обл.,Западная Двина
-2109 298 24 Россия,Тверская обл.,Зубцов
-2110 298 24 Россия,Тверская обл.,Калязин
-2111 298 24 Россия,Тверская обл.,Кашин
-1758 298 24 Россия,Тверская обл.,Кимры
-1756 298 24 Россия,Тверская обл.,Конаково
-2112 298 24 Россия,Тверская обл.,Красный Холм
-1759 298 24 Россия,Тверская обл.,Кувшиново
-1760 298 24 Россия,Тверская обл.,Лихославль
-1761 298 24 Россия,Тверская обл.,Нелидово
-2113 298 24 Россия,Тверская обл.,Осташков
-1757 298 24 Россия,Тверская обл.,Ржев
-2114 298 24 Россия,Тверская обл.,Старица
-1754 298 24 Россия,Тверская обл.,Тверь
-2115 298 24 Россия,Тверская обл.,Торжок
-2116 298 24 Россия,Тверская обл.,Торопец
-1755 298 24 Россия,Тверская обл.,Удомля
-2272 298 24 Россия,Тверская обл.,Другое
-299 299 24 Россия,Тульская обл.
-2127 299 24 Россия,Тульская обл.,Алексин
-2126 299 24 Россия,Тульская обл.,Белев
-2118 299 24 Россия,Тульская обл.,Богородицк
-2122 299 24 Россия,Тульская обл.,Болохово
-2129 299 24 Россия,Тульская обл.,Венев
-1762 299 24 Россия,Тульская обл.,Донской
-2128 299 24 Россия,Тульская обл.,Ефремов
-3354 299 24 Россия,Тульская обл.,Заокский
-2124 299 24 Россия,Тульская обл.,Киреевск
-1763 299 24 Россия,Тульская обл.,Климовск
-2123 299 24 Россия,Тульская обл.,Липки
-1764 299 24 Россия,Тульская обл.,Новомосковск
-2117 299 24 Россия,Тульская обл.,Плавск
-2130 299 24 Россия,Тульская обл.,Северо-Задонск
-2120 299 24 Россия,Тульская обл.,Советск
-2119 299 24 Россия,Тульская обл.,Сокольники
-2125 299 24 Россия,Тульская обл.,Суворов
-1765 299 24 Россия,Тульская обл.,Тула
-1766 299 24 Россия,Тульская обл.,Узловая
-2121 299 24 Россия,Тульская обл.,Щекино
-1767 299 24 Россия,Тульская обл.,Ясногорск
-2274 299 24 Россия,Тульская обл.,Другое
-300 300 24 Россия,Ярославская обл.
-3053 300 24 Россия,Ярославская обл.,Большое Село
-3268 300 24 Россия,Ярославская обл.,Брейтово
-1773 300 24 Россия,Ярославская обл.,Гаврилов-Ям
-2132 300 24 Россия,Ярославская обл.,Данилов
-3269 300 24 Россия,Ярославская обл.,Красные Ткачи
-2133 300 24 Россия,Ярославская обл.,Любим
-3270 300 24 Россия,Ярославская обл.,Мокеевское
-1774 300 24 Россия,Ярославская обл.,Мышкин
-2994 300 24 Россия,Ярославская обл.,Некоуз
-1775 300 24 Россия,Ярославская обл.,Переславль-Залесский
-2134 300 24 Россия,Ярославская обл.,Пошехонье
-1769 300 24 Россия,Ярославская обл.,Ростов
-1771 300 24 Россия,Ярославская обл.,Рыбинск
-1772 300 24 Россия,Ярославская обл.,Тутаев
-1770 300 24 Россия,Ярославская обл.,Углич
-1768 300 24 Россия,Ярославская обл.,Ярославль
-2290 300 24 Россия,Ярославская обл.,Другое
-301 301 24 Россия,Адыгея
-2849 301 24 Россия,Адыгея,Адыгейск
-1776 301 24 Россия,Адыгея,Майкоп
-2214 301 24 Россия,Адыгея,Другое
-304 304 24 Россия,Дагестан
-2617 304 24 Россия,Дагестан,Буйнакск
-1791 304 24 Россия,Дагестан,Гуниб
-1788 304 24 Россия,Дагестан,Дербент
-2619 304 24 Россия,Дагестан,Избербаш
-1789 304 24 Россия,Дагестан,Каспийск
-2618 304 24 Россия,Дагестан,Кизилюрт
-1790 304 24 Россия,Дагестан,Кизляр
-1792 304 24 Россия,Дагестан,Махачкала
-2620 304 24 Россия,Дагестан,Хасавюрт
-2225 304 24 Россия,Дагестан,Другое
-305 305 24 Россия,Ингушетия
-3052 305 24 Россия,Ингушетия,Магас
-1787 305 24 Россия,Ингушетия,Назрань
-2228 305 24 Россия,Ингушетия,Другое
-306 306 24 Россия,Кабардино-Балкария
-2621 306 24 Россия,Кабардино-Балкария,Баксан
-1794 306 24 Россия,Кабардино-Балкария,Майский
-1793 306 24 Россия,Кабардино-Балкария,Нальчик
-2622 306 24 Россия,Кабардино-Балкария,Нарткала
-1795 306 24 Россия,Кабардино-Балкария,Прохладный
-2623 306 24 Россия,Кабардино-Балкария,Терек
-2624 306 24 Россия,Кабардино-Балкария,Тырныауз
-3274 306 24 Россия,Кабардино-Балкария,Чегем
-2230 306 24 Россия,Кабардино-Балкария,Другое
-307 307 24 Россия,Калмыкия
-2567 307 24 Россия,Калмыкия,Городовиково
-2568 307 24 Россия,Калмыкия,Лагань
-3324 307 24 Россия,Калмыкия,Троицкое
-1796 307 24 Россия,Калмыкия,Элиста
-2232 307 24 Россия,Калмыкия,Другое
-308 308 24 Россия,Карачаево-Черкессия
-1799 308 24 Россия,Карачаево-Черкессия,Домбай
-1798 308 24 Россия,Карачаево-Черкессия,Карачаевск
-2626 308 24 Россия,Карачаево-Черкессия,Теберда
-2625 308 24 Россия,Карачаево-Черкессия,Усть-Джегута
-1797 308 24 Россия,Карачаево-Черкессия,Черкесск
-2235 308 24 Россия,Карачаево-Черкессия,Другое
-311 311 24 Россия,Северная Осетия - Алания
-2630 311 24 Россия,Северная Осетия - Алания,Алагир
-2631 311 24 Россия,Северная Осетия - Алания,Ардон
-2628 311 24 Россия,Северная Осетия - Алания,Беслан
-1839 311 24 Россия,Северная Осетия - Алания,Владикавказ
-2629 311 24 Россия,Северная Осетия - Алания,Дигора
-2627 311 24 Россия,Северная Осетия - Алания,Моздок
-2266 311 24 Россия,Северная Осетия - Алания,Другое
-313 313 24 Россия,Чечня
-2632 313 24 Россия,Чечня,Аргун
-1853 313 24 Россия,Чечня,Грозный
-2633 313 24 Россия,Чечня,Гудермес
-2284 313 24 Россия,Чечня,Другое
-309 309 24 Россия,Краснодарский край
-2636 309 24 Россия,Краснодарский край,Абинск
-1800 309 24 Россия,Краснодарский край,Анапа
-1801 309 24 Россия,Краснодарский край,Апшеронск
-1802 309 24 Россия,Краснодарский край,Армавир
-1803 309 24 Россия,Краснодарский край,Белореченск
-1804 309 24 Россия,Краснодарский край,Геленджик
-1805 309 24 Россия,Краснодарский край,Горячий Ключ
-2637 309 24 Россия,Краснодарский край,Гулькевичи
-1806 309 24 Россия,Краснодарский край,Динская
-1807 309 24 Россия,Краснодарский край,Ейск
-2638 309 24 Россия,Краснодарский край,Кореновск
-1808 309 24 Россия,Краснодарский край,Краснодар
-1809 309 24 Россия,Краснодарский край,Кропоткин
-1810 309 24 Россия,Краснодарский край,Крымск
-1811 309 24 Россия,Краснодарский край,Курганинск
-3232 309 24 Россия,Краснодарский край,Лабинск
-2639 309 24 Россия,Краснодарский край,Новокубанск
-1812 309 24 Россия,Краснодарский край,Новороссийск
-1813 309 24 Россия,Краснодарский край,Пластуновская
-1814 309 24 Россия,Краснодарский край,Приморско-Ахтарск
-3102 309 24 Россия,Краснодарский край,Северская
-1815 309 24 Россия,Краснодарский край,Славянск-на-Кубани
-1816 309 24 Россия,Краснодарский край,Сочи
-3266 309 24 Россия,Краснодарский край,Староминская
-3039 309 24 Россия,Краснодарский край,Тамань
-1817 309 24 Россия,Краснодарский край,Темрюк
-2635 309 24 Россия,Краснодарский край,Тимашевск
-1818 309 24 Россия,Краснодарский край,Тихорецк
-1819 309 24 Россия,Краснодарский край,Туапсе
-1820 309 24 Россия,Краснодарский край,Усть-Лабинск
-2634 309 24 Россия,Краснодарский край,Хадыженск
-2241 309 24 Россия,Краснодарский край,Другое
-312 312 24 Россия,Ставропольский край
-1840 312 24 Россия,Ставропольский край,Александровское
-2644 312 24 Россия,Ставропольский край,Благодарный
-1841 312 24 Россия,Ставропольский край,Буденновск
-1842 312 24 Россия,Ставропольский край,Георгиевск
-1843 312 24 Россия,Ставропольский край,Ессентуки
-1844 312 24 Россия,Ставропольский край,Железноводск
-2647 312 24 Россия,Ставропольский край,Зеленокумск
-2641 312 24 Россия,Ставропольский край,Изобильный
-2642 312 24 Россия,Ставропольский край,Ипатово
-1845 312 24 Россия,Ставропольский край,Кисловодск
-1846 312 24 Россия,Ставропольский край,Кочубеевское
-3367 312 24 Россия,Ставропольский край,Курсавка
-3265 312 24 Россия,Ставропольский край,Левокумское
-1847 312 24 Россия,Ставропольский край,Лермонтов
-1848 312 24 Россия,Ставропольский край,Минеральные Воды
-1849 312 24 Россия,Ставропольский край,Невинномысск
-2645 312 24 Россия,Ставропольский край,Нефтекумск
-2643 312 24 Россия,Ставропольский край,Новоалександровск
-1850 312 24 Россия,Ставропольский край,Новопавловск
-1851 312 24 Россия,Ставропольский край,Новоселицкое
-1852 312 24 Россия,Ставропольский край,Пятигорск
-2646 312 24 Россия,Ставропольский край,Светлоград
-2640 312 24 Россия,Ставропольский край,Ставрополь
-2268 312 24 Россия,Ставропольский край,Другое
-302 302 24 Россия,Астраханская обл.
-1777 302 24 Россия,Астраханская обл.,Астрахань
-1778 302 24 Россия,Астраханская обл.,Ахтубинск
-3383 302 24 Россия,Астраханская обл.,Знаменск
-2578 302 24 Россия,Астраханская обл.,Камызяк
-2579 302 24 Россия,Астраханская обл.,Нариманов
-1786 302 24 Россия,Астраханская обл.,Харабали
-2219 302 24 Россия,Астраханская обл.,Другое
-303 303 24 Россия,Волгоградская обл.
-1779 303 24 Россия,Волгоградская обл.,Волгоград
-1780 303 24 Россия,Волгоградская обл.,Волжский
-2584 303 24 Россия,Волгоградская обл.,Дубовка
-1781 303 24 Россия,Волгоградская обл.,Жирновск
-1782 303 24 Россия,Волгоградская обл.,Калач-на-Дону
-1783 303 24 Россия,Волгоградская обл.,Камышин
-2588 303 24 Россия,Волгоградская обл.,Котельниково
-2591 303 24 Россия,Волгоградская обл.,Котово
-2587 303 24 Россия,Волгоградская обл.,Краснослободск
-2582 303 24 Россия,Волгоградская обл.,Ленинск
-2590 303 24 Россия,Волгоградская обл.,Михайловка
-1784 303 24 Россия,Волгоградская обл.,Николаевск
-2581 303 24 Россия,Волгоградская обл.,Новоаннинский
-2583 303 24 Россия,Волгоградская обл.,Палласовка
-2580 303 24 Россия,Волгоградская обл.,Петров Вал
-2589 303 24 Россия,Волгоградская обл.,Серафимович
-2585 303 24 Россия,Волгоградская обл.,Суровикино
-1785 303 24 Россия,Волгоградская обл.,Урюпинск
-2586 303 24 Россия,Волгоградская обл.,Фролово
-2223 303 24 Россия,Волгоградская обл.,Другое
-310 310 24 Россия,Ростовская обл.
-1821 310 24 Россия,Ростовская обл.,Азов
-1822 310 24 Россия,Ростовская обл.,Аксай
-1823 310 24 Россия,Ростовская обл.,Багаевская
-1824 310 24 Россия,Ростовская обл.,Батайск
-1825 310 24 Россия,Ростовская обл.,Белая Калитва
-1826 310 24 Россия,Ростовская обл.,Волгодонск
-1827 310 24 Россия,Ростовская обл.,Гуково
-2651 310 24 Россия,Ростовская обл.,Донецк
-1828 310 24 Россия,Ростовская обл.,Зерноград
-3264 310 24 Россия,Ростовская обл.,Каменоломни
-2652 310 24 Россия,Ростовская обл.,Каменск-Шахтинский
-2649 310 24 Россия,Ростовская обл.,Константиновск
-2648 310 24 Россия,Ростовская обл.,Красный Сулин
-1829 310 24 Россия,Ростовская обл.,Миллерово
-2653 310 24 Россия,Ростовская обл.,Морозовск
-1830 310 24 Россия,Ростовская обл.,Новочеркасск
-1831 310 24 Россия,Ростовская обл.,Новошахтинск
-1832 310 24 Россия,Ростовская обл.,Пролетарск
-1833 310 24 Россия,Ростовская обл.,Ростов-на-Дону
-1834 310 24 Россия,Ростовская обл.,Сальск
-1835 310 24 Россия,Ростовская обл.,Семикаракорск
-1836 310 24 Россия,Ростовская обл.,Таганрог
-1837 310 24 Россия,Ростовская обл.,Усть-Донецкий
-3263 310 24 Россия,Ростовская обл.,Целина
-2650 310 24 Россия,Ростовская обл.,Цимлянск
-1838 310 24 Россия,Ростовская обл.,Шахты
-2259 310 24 Россия,Ростовская обл.,Другое
-81 0 81 Азербайджан
-1055 1055 81 Азербайджан,Баку
-1058 1058 81 Азербайджан,Гянджа
-1056 1056 81 Азербайджан,Нахичевань
-1057 1057 81 Азербайджан,Ханкенди
-3153 3153 81 Азербайджан,Шеки
-2291 2291 81 Азербайджан,Другое
-82 0 82 Армения
-2932 2932 82 Армения,Абовян
-1060 1060 82 Армения,Аштарак
-3084 3084 82 Армения,Ванадзор
-3011 3011 82 Армения,Гюмри
-3306 3306 82 Армения,Дилижан
-1059 1059 82 Армения,Ереван
-3145 3145 82 Армения,Ханкенди
-2292 2292 82 Армения,Другое
-97 0 97 Афганистан
-1061 1061 97 Афганистан,Кабул
-2293 2293 97 Афганистан,Другое
-96 0 96 Бангладеш
-1062 1062 96 Бангладеш,Дакка
-2294 2294 96 Бангладеш,Другое
-99 0 99 Бахрейн
-1063 1063 99 Бахрейн,Манама
-2295 2295 99 Бахрейн,Другое
-100 0 100 Бруней-Даруссалам
-1064 1064 100 Бруней-Даруссалам,Бандар-Сери-Бегаван
-2296 2296 100 Бруней-Даруссалам,Другое
-101 0 101 Бутан
-1065 1065 101 Бутан,Тхимпху
-2297 2297 101 Бутан,Другое
-102 0 102 Вьетнам
-1066 1066 102 Вьетнам,Ханой
-2298 2298 102 Вьетнам,Другое
-83 0 83 Грузия
-1067 1067 83 Грузия,Батуми
-3158 3158 83 Грузия,Боржоми
-1068 1068 83 Грузия,Поти
-3129 3129 83 Грузия,Рустави
-1069 1069 83 Грузия,Сухуми
-1070 1070 83 Грузия,Тбилиси
-2299 2299 83 Грузия,Другое
-86 0 86 Израиль
-3345 3345 86 Израиль,Ариэль
-1071 1071 86 Израиль,Афула
-2992 2992 86 Израиль,Ашдод
-3175 3175 86 Израиль,Ашкелон
-3363 3363 86 Израиль,Бат-Ям
-2884 2884 86 Израиль,Беер-Яков
-3243 3243 86 Израиль,Бейт-Шемеш
-1074 1074 86 Израиль,Беэр-Шева
-3348 3348 86 Израиль,Герцелия
-3241 3241 86 Израиль,Димона
-1075 1075 86 Израиль,Иерусалим
-3350 3350 86 Израиль,Йокнеам-Иллит
-2982 2982 86 Израиль,Кармиэль
-2971 2971 86 Израиль,Кфар-Саба
-3136 3136 86 Израиль,Назарет
-1080 1080 86 Израиль,Натания
-3303 3303 86 Израиль,Офаким
-3050 3050 86 Израиль,Раанана
-3151 3151 86 Израиль,Рамат Ган
-3141 3141 86 Израиль,Реховот
-3012 3012 86 Израиль,Ришон ле Цион
-1081 1081 86 Израиль,Тверия
-1077 1077 86 Израиль,Тель-Авив
-1079 1079 86 Израиль,Хадера
-1078 1078 86 Израиль,Хайфа
-1076 1076 86 Израиль,Хеврон
-2929 2929 86 Израиль,Цфат
-2928 2928 86 Израиль,Эйлат
-2300 2300 86 Израиль,Другое
-95 0 95 Индия
-3315 3315 95 Индия,Бангалор
-1082 1082 95 Индия,Дели
-1083 1083 95 Индия,Джайпур
-3144 3144 95 Индия,Калькутта
-3025 3025 95 Индия,Мумбаи
-3277 3277 95 Индия,Панаджи
-1084 1084 95 Индия,Ченнаи
-2301 2301 95 Индия,Другое
-103 0 103 Индонезия
-1085 1085 103 Индонезия,Джакарта
-2302 2302 103 Индонезия,Другое
-79 0 79 Иордания
-1086 1086 79 Иордания,Амман
-2303 2303 79 Иордания,Другое
-85 0 85 Ирак
-1087 1087 85 Ирак,Багдад
-2304 2304 85 Ирак,Другое
-87 0 87 Иран
-1088 1088 87 Иран,Тегеран
-2305 2305 87 Иран,Другое
-104 0 104 Йемен
-1089 1089 104 Йемен,Сана
-2306 2306 104 Йемен,Другое
-84 0 84 Казахстан
-1090 1090 84 Казахстан,Актау
-1091 1091 84 Казахстан,Актюбинск
-1092 1092 84 Казахстан,Алма-Ата
-3242 3242 84 Казахстан,Аршалы
-1093 1093 84 Казахстан,Астана
-1094 1094 84 Казахстан,Атырау (Гурьев)
-1095 1095 84 Казахстан,Байконур
-3245 3245 84 Казахстан,Балхаш
-3083 3083 84 Казахстан,Жезказган
-1096 1096 84 Казахстан,Капчагай
-1097 1097 84 Казахстан,Караганда
-1098 1098 84 Казахстан,Кокшетау
-1099 1099 84 Казахстан,Кустанай
-2868 2868 84 Казахстан,Лисаковск
-1100 1100 84 Казахстан,Павлодар
-1101 1101 84 Казахстан,Петропавловск (Сев.-Каз. обл.)
-1102 1102 84 Казахстан,Рудный
-1103 1103 84 Казахстан,Семипалатинск
-1104 1104 84 Казахстан,Степногорск
-3166 3166 84 Казахстан,Талгар
-1105 1105 84 Казахстан,Талды-Курган
-2927 2927 84 Казахстан,Тараз
-1106 1106 84 Казахстан,Темиртау
-1107 1107 84 Казахстан,Уральск
-1108 1108 84 Казахстан,Усть-Каменогорск
-1109 1109 84 Казахстан,Чимкент
-1110 1110 84 Казахстан,Экибастуз
-2307 2307 84 Казахстан,Другое
-105 0 105 Камбоджа
-1111 1111 105 Камбоджа,Пномпень
-2308 2308 105 Камбоджа,Другое
-106 0 106 Катар
-1112 1112 106 Катар,Доха
-2309 2309 106 Катар,Другое
-107 0 107 Кипр
-1113 1113 107 Кипр,Ларнака
-1114 1114 107 Кипр,Лимассол
-1115 1115 107 Кипр,Никосия
-2954 2954 107 Кипр,Пафос
-2310 2310 107 Кипр,Другое
-92 0 92 Киргизия (Кыргызстан)
-1116 1116 92 Киргизия (Кыргызстан),Бишкек
-1117 1117 92 Киргизия (Кыргызстан),Джалал-Абад
-3027 3027 92 Киргизия (Кыргызстан),Кара-Балта
-1118 1118 92 Киргизия (Кыргызстан),Каракол
-1119 1119 92 Киргизия (Кыргызстан),Ош
-1120 1120 92 Киргизия (Кыргызстан),Талас
-2933 2933 92 Киргизия (Кыргызстан),Хайдаркен
-2311 2311 92 Киргизия (Кыргызстан),Другое
-76 0 76 Китай
-3214 3214 76 Китай,Аомынь (Макао)
-1121 1121 76 Китай,Гонконг
-2869 2869 76 Китай,Гуанчжоу
-3262 3262 76 Китай,Далянь
-1122 1122 76 Китай,Пекин
-1123 1123 76 Китай,Харбин
-1124 1124 76 Китай,Шанхай
-3043 3043 76 Китай,Шеньян
-2312 2312 76 Китай,Другое
-3215 0 3215 Кокосовые острова (Австр.)
-29 0 29 Корея (КНДР)
-1125 1125 29 Корея (КНДР),Пхеньян
-2313 2313 29 Корея (КНДР),Другое
-108 0 108 Корея
-1126 1126 108 Корея,Сеул
-3240 3240 108 Корея,Тейджон
-2314 2314 108 Корея,Другое
-88 0 88 Кувейт
-1127 1127 88 Кувейт,Эль-Кувейт
-2315 2315 88 Кувейт,Другое
-109 0 109 Лаос
-1128 1128 109 Лаос,Вьентьян
-2316 2316 109 Лаос,Другое
-110 0 110 Ливан
-1129 1129 110 Ливан,Бейрут
-2317 2317 110 Ливан,Другое
-111 0 111 Малайзия
-1130 1130 111 Малайзия,Джохор-Бару
-1131 1131 111 Малайзия,Куала-Лумпур
-2318 2318 111 Малайзия,Другое
-112 0 112 Мальдивы
-1132 1132 112 Мальдивы,Мале
-2319 2319 112 Мальдивы,Другое
-113 0 113 Монголия
-1133 1133 113 Монголия,Улан-Батор
-1134 1134 113 Монголия,Эрдэнэт
-2320 2320 113 Монголия,Другое
-114 0 114 Мьянма
-1135 1135 114 Мьянма,Янгон
-2321 2321 114 Мьянма,Другое
-115 0 115 Непал
-1136 1136 115 Непал,Катманду
-2322 2322 115 Непал,Другое
-116 0 116 Объединенные Арабские Эмираты
-1137 1137 116 Объединенные Арабские Эмираты,Абу-Даби
-1138 1138 116 Объединенные Арабские Эмираты,Дубай
-1139 1139 116 Объединенные Арабские Эмираты,Шарджа
-2323 2323 116 Объединенные Арабские Эмираты,Другое
-117 0 117 Оман
-1140 1140 117 Оман,Маскат
-2324 2324 117 Оман,Другое
-3216 0 3216 Остров Рождества (Австр.)
-122 0 122 Пакистан
-1141 1141 122 Пакистан,Исламабад
-2325 2325 122 Пакистан,Другое
-89 0 89 Палестина
-1072 1072 89 Палестина,Ашдод
-1073 1073 89 Палестина,Ашкелон
-1142 1142 89 Палестина,Газа
-2326 2326 89 Палестина,Другое
-94 0 94 Саудовская Аравия
-3250 3250 94 Саудовская Аравия,Медина
-1143 1143 94 Саудовская Аравия,Эр-Рияд
-2327 2327 94 Саудовская Аравия,Другое
-118 0 118 Сингапур
-78 0 78 Сирия
-1144 1144 78 Сирия,Дамаск
-2328 2328 78 Сирия,Другое
-91 0 91 Таджикистан
-1145 1145 91 Таджикистан,Душанбе
-3307 3307 91 Таджикистан,Кайраккум
-3308 3308 91 Таджикистан,Худжанд
-2329 2329 91 Таджикистан,Другое
-119 0 119 Таиланд
-1146 1146 119 Таиланд,Бангкок
-1147 1147 119 Таиланд,Пхукет
-2330 2330 119 Таиланд,Другое
-120 0 120 Тайвань
-1148 1148 120 Тайвань,Тайбэй
-2331 2331 120 Тайвань,Другое
-132 0 132 Тимор
-1149 1149 132 Тимор,Дили
-2332 2332 132 Тимор,Другое
-90 0 90 Туркмения
-1150 1150 90 Туркмения,Ашхабад
-3079 3079 90 Туркмения,Безмеин
-2333 2333 90 Туркмения,Другое
-77 0 77 Турция
-1152 1152 77 Турция,Анкара
-1153 1153 77 Турция,Анталия
-3080 3080 77 Турция,Бурса
-1151 1151 77 Турция,Мармарис
-1154 1154 77 Турция,Стамбул
-1155 1155 77 Турция,Трабзон
-2334 2334 77 Турция,Другое
-93 0 93 Узбекистан
-3362 3362 93 Узбекистан,Алмалык
-3137 3137 93 Узбекистан,Андижан
-3273 3273 93 Узбекистан,Асака
-1156 1156 93 Узбекистан,Ахангаран
-1157 1157 93 Узбекистан,Бухара
-3167 3167 93 Узбекистан,Джизак
-3347 3347 93 Узбекистан,Кунград
-1158 1158 93 Узбекистан,Навои
-1159 1159 93 Узбекистан,Наманган
-1160 1160 93 Узбекистан,Самарканд
-1161 1161 93 Узбекистан,Ташкент
-1162 1162 93 Узбекистан,Ургенч
-1163 1163 93 Узбекистан,Фергана
-1164 1164 93 Узбекистан,Чирчик
-2335 2335 93 Узбекистан,Другое
-121 0 121 Филиппины
-1165 1165 121 Филиппины,Манила
-3319 3319 121 Филиппины,Себу
-2336 2336 121 Филиппины,Другое
-98 0 98 Шри Ланка
-1166 1166 98 Шри Ланка,Коломбо
-2337 2337 98 Шри Ланка,Другое
-75 0 75 Япония
-3176 3176 75 Япония,Исесаки
-3339 3339 75 Япония,Корияма
-1167 1167 75 Япония,Саппоро
-1168 1168 75 Япония,Токио
-2338 2338 75 Япония,Другое
-123 0 123 Австралия
-1914 1914 123 Австралия,Аделаида
-2957 2957 123 Австралия,Блэк Рок
-1915 1915 123 Австралия,Брисбен
-3331 3331 123 Австралия,Горокан
-1916 1916 123 Австралия,Канберра
-3001 3001 123 Австралия,Лидкомб
-1917 1917 123 Австралия,Мельбурн
-3217 3217 123 Австралия,Норфолк
-3064 3064 123 Австралия,Перт
-3020 3020 123 Австралия,Санта Люсиа
-1918 1918 123 Австралия,Сидней
-3238 3238 123 Австралия,Энеабба
-2339 2339 123 Австралия,Другое
-454 0 454 Американское Самоа
-1192 1192 454 Американское Самоа,Паго-Паго
-2366 2366 454 Американское Самоа,Другое
-124 0 124 Вануату
-1919 1919 124 Вануату,Порт-Вила
-2340 2340 124 Вануату,Другое
-453 0 453 Гуам (США)
-1193 1193 453 Гуам (США),Аганья
-2368 2368 453 Гуам (США),Другое
-126 0 126 Кирибати
-1921 1921 126 Кирибати,Баирики
-2342 2342 126 Кирибати,Другое
-127 0 127 Маршалловы Острова
-1922 1922 127 Маршалловы Острова,Маджуро
-2343 2343 127 Маршалловы Острова,Другое
-128 0 128 Микронезия (Федеративные Штаты Микронезии)
-1923 1923 128 Микронезия (Федеративные Штаты Микронезии),Паликир
-2344 2344 128 Микронезия (Федеративные Штаты Микронезии),Другое
-129 0 129 Науру
-1924 1924 129 Науру,Ярен
-2345 2345 129 Науру,Другое
-3220 0 3220 Ниуэ (Н.Зел.)
-130 0 130 Новая Зеландия
-1925 1925 130 Новая Зеландия,Веллингтон
-1926 1926 130 Новая Зеландия,Гамильтон
-1928 1928 130 Новая Зеландия,Данидин
-1929 1929 130 Новая Зеландия,Крайстчерч
-3235 3235 130 Новая Зеландия,Кромвель
-1927 1927 130 Новая Зеландия,Окленд
-3323 3323 130 Новая Зеландия,Тауранга
-2346 2346 130 Новая Зеландия,Другое
-3218 0 3218 Новая Каледония (Фр.)
-3221 0 3221 Острова Кука (Н.Зел.)
-3230 0 3230 Острова Херд и Макдональд (Австр.)
-131 0 131 Палау
-1930 1930 131 Палау,Корор
-2347 2347 131 Палау,Другое
-133 0 133 Папуа - Новая Гвинея
-1931 1931 133 Папуа - Новая Гвинея,Порт-Морсби
-2348 2348 133 Папуа - Новая Гвинея,Другое
-3222 0 3222 Питкерн (Брит.)
-125 0 125 Самоа
-1920 1920 125 Самоа,Апиа
-2341 2341 125 Самоа,Другое
-3219 0 3219 Сев. Марианские острова (США)
-134 0 134 Соломоновы Острова
-1932 1932 134 Соломоновы Острова,Хониара
-2349 2349 134 Соломоновы Острова,Другое
-3223 0 3223 Токелау (Н.Зел.)
-135 0 135 Тонга
-1933 1933 135 Тонга,Нукуалофа
-2350 2350 135 Тонга,Другое
-136 0 136 Тувалу
-1934 1934 136 Тувалу,Фунафути
-2351 2351 136 Тувалу,Другое
-3224 0 3224 Уоллис и Футуна острова (Фр.)
-137 0 137 Фиджи
-1935 1935 137 Фиджи,Сува
-2352 2352 137 Фиджи,Другое
-3226 0 3226 Французская Полинезия
-3225 0 3225 Французские Южные территории
-138 0 138 Канада
-3055 3055 138 Канада,Барлингтон
-3049 3049 138 Канада,Броссард
-3330 3330 138 Канада,Бурнаби
-1169 1169 138 Канада,Ванкувер
-3106 3106 138 Канада,Ватерлоо
-1170 1170 138 Канада,Виннипег
-1171 1171 138 Канада,Галифакс
-1172 1172 138 Канада,Гамильтон
-3365 3365 138 Канада,Денвер
-1173 1173 138 Канада,Калгари
-3104 3104 138 Канада,Камлупс
-3366 3366 138 Канада,Каннингтон
-1174 1174 138 Канада,Квебек
-2964 2964 138 Канада,Кингстон
-3113 3113 138 Канада,Коквитлам
-1175 1175 138 Канада,Монреаль
-2920 2920 138 Канада,Ниагара-Фолс
-2889 2889 138 Канада,Норд-Йорк
-1176 1176 138 Канада,Оттава
-2903 2903 138 Канада,Порт Алберни
-1177 1177 138 Канада,Ричмонд
-1178 1178 138 Канада,Тимминс
-2946 2946 138 Канада,Торнхилл
-1179 1179 138 Канада,Торонто
-1180 1180 138 Канада,Эдмонтон
-2353 2353 138 Канада,Другое
-407 407 139 США,Вашингтон, столица
-426 426 139 США,Айдахо
-427 426 139 США,Айдахо,Бойсе
-2354 426 139 США,Айдахо,Другое
-378 378 139 США,Айова
-3109 378 139 США,Айова,Айова Сити
-379 378 139 США,Айова,Де-Мойн
-2963 378 139 США,Айова,Декора
-2355 378 139 США,Айова,Другое
-412 412 139 США,Алабама
-3236 412 139 США,Алабама,Бирмингем
-413 412 139 США,Алабама,Монтгомери
-1181 412 139 США,Алабама,Хантсвилл
-2356 412 139 США,Алабама,Другое
-446 446 139 США,Аляска
-1182 446 139 США,Аляска,Анкоридж
-447 446 139 США,Аляска,Джуно
-1183 446 139 США,Аляска,Фэрбенкс
-2357 446 139 США,Аляска,Другое
-434 434 139 США,Аризона
-2917 434 139 США,Аризона,Темпе
-1184 434 139 США,Аризона,Тусон
-435 434 139 США,Аризона,Финикс
-3061 434 139 США,Аризона,Чандлер
-2358 434 139 США,Аризона,Другое
-416 416 139 США,Арканзас
-417 416 139 США,Арканзас,Литл-Рок
-2359 416 139 США,Арканзас,Другое
-428 428 139 США,Вайоминг
-3017 428 139 США,Вайоминг,Ларами
-429 428 139 США,Вайоминг,Шайенн
-2360 428 139 США,Вайоминг,Другое
-440 440 139 США,Вашингтон
-2956 440 139 США,Вашингтон,Беллевью
-2967 440 139 США,Вашингтон,Бремертон
-3385 440 139 США,Вашингтон,Ванкувер
-2865 440 139 США,Вашингтон,Линден
-441 440 139 США,Вашингтон,Олимпия
-3352 440 139 США,Вашингтон,Порт Орчард
-2876 440 139 США,Вашингтон,Редмонт
-3003 440 139 США,Вашингтон,Рентон
-1185 440 139 США,Вашингтон,Сиэтл
-2983 440 139 США,Вашингтон,Снохомиш
-1186 440 139 США,Вашингтон,Такома
-3152 440 139 США,Вашингтон,Фрайди Харбор
-2886 440 139 США,Вашингтон,Эверет
-2361 440 139 США,Вашингтон,Другое
-352 352 139 США,Вермонт
-353 352 139 США,Вермонт,Монтпильер
-2861 352 139 США,Вермонт,Норвич
-2362 352 139 США,Вермонт,Другое
-394 394 139 США,Виргиния
-1188 394 139 США,Виргиния,Александрия
-1187 394 139 США,Виргиния,Арлингтон
-2969 394 139 США,Виргиния,Даллес
-1189 394 139 США,Виргиния,Манассас
-3114 394 139 США,Виргиния,Норфолк
-2885 394 139 США,Виргиния,Ньюпорт-Ньюс
-2979 394 139 США,Виргиния,Раунд Хил
-3338 394 139 США,Виргиния,Рестон
-395 394 139 США,Виргиния,Ричмонд
-3005 394 139 США,Виргиния,Уоррентон
-2991 394 139 США,Виргиния,Херндон
-2996 394 139 США,Виргиния,Центрвиль
-3097 394 139 США,Виргиния,Чантилли
-2981 394 139 США,Виргиния,Шарлотесвиль
-2363 394 139 США,Виргиния,Другое
-374 374 139 США,Висконсин
-2995 374 139 США,Висконсин,Грин-Бей
-375 374 139 США,Висконсин,Мадисон
-2365 374 139 США,Висконсин,Другое
-448 448 139 США,Гавайи
-449 448 139 США,Гавайи,Гонолулу
-1191 448 139 США,Гавайи,Хило
-2367 448 139 США,Гавайи,Другое
-390 390 139 США,Делавер
-3021 390 139 США,Делавер,Вильмингтон
-391 390 139 США,Делавер,Довер
-2973 390 139 США,Делавер,Льюис
-2369 390 139 США,Делавер,Другое
-402 402 139 США,Джорджия
-403 402 139 США,Джорджия,Атланта
-2370 402 139 США,Джорджия,Другое
-396 396 139 США,Западная Виргиния
-397 396 139 США,Западная Виргиния,Чарлстон
-2371 396 139 США,Западная Виргиния,Другое
-370 370 139 США,Иллинойс
-2911 370 139 США,Иллинойс,Вестмонт
-3074 370 139 США,Иллинойс,Гарвард
-371 370 139 США,Иллинойс,Спрингфилд
-2930 370 139 США,Иллинойс,Урбана
-1194 370 139 США,Иллинойс,Чикаго
-2372 370 139 США,Иллинойс,Другое
-368 368 139 США,Индиана
-369 368 139 США,Индиана,Индианаполис
-1195 368 139 США,Индиана,Эвансвил
-2373 368 139 США,Индиана,Другое
-444 444 139 США,Калифорния
-2959 444 139 США,Калифорния,Анахайм
-2961 444 139 США,Калифорния,Аптос
-2912 444 139 США,Калифорния,Артезия
-2899 444 139 США,Калифорния,Беверли Хилз
-1196 444 139 США,Калифорния,Беркли
-3249 444 139 США,Калифорния,Бреа
-3014 444 139 США,Калифорния,Брисбейн
-3048 444 139 США,Калифорния,Венис
-2901 444 139 США,Калифорния,Вест-Голливуд
-2926 444 139 США,Калифорния,Вестлейк Вилладж
-2922 444 139 США,Калифорния,Гардена
-1203 444 139 США,Калифорния,Глендейл
-2978 444 139 США,Калифорния,Денвиль
-2990 444 139 США,Калифорния,Дублин
-3077 444 139 США,Калифорния,Дэвис
-2918 444 139 США,Калифорния,Ирвайн
-2881 444 139 США,Калифорния,Карсон
-3247 444 139 США,Калифорния,Кипресс
-3092 444 139 США,Калифорния,Коста Меса
-2948 444 139 США,Калифорния,Купертино
-1197 444 139 США,Калифорния,Лонг-Бич
-1198 444 139 США,Калифорния,Лос-Анджелес
-3058 444 139 США,Калифорния,Лос-Гатос
-3328 444 139 США,Калифорния,Марина-дель-Рей
-2874 444 139 США,Калифорния,Маунтин-Вью
-2998 444 139 США,Калифорния,Милпитас
-3087 444 139 США,Калифорния,Монтерей
-2947 444 139 США,Калифорния,Окленд
-2900 444 139 США,Калифорния,Пало Альто
-1199 444 139 США,Калифорния,Пасадена
-3335 444 139 США,Калифорния,Редвуд
-2966 444 139 США,Калифорния,Розамонд
-445 444 139 США,Калифорния,Сакраменто
-1200 444 139 США,Калифорния,Сан-Диего
-3317 444 139 США,Калифорния,Сан-Мартин
-1201 444 139 США,Калифорния,Сан-Франциско
-1202 444 139 США,Калифорния,Сан-Хосе
-2878 444 139 США,Калифорния,Саннивейл
-2925 444 139 США,Калифорния,Санта-Барбара
-2875 444 139 США,Калифорния,Санта-Клара
-1204 444 139 США,Калифорния,Санта-Круз
-2859 444 139 США,Калифорния,Санта-Моника
-3157 444 139 США,Калифорния,Студио Сити
-3146 444 139 США,Калифорния,Торранс
-2970 444 139 США,Калифорния,Тысяча Дубов
-2949 444 139 США,Калифорния,Универсал-Сити
-3057 444 139 США,Калифорния,Форт Брэгг
-3032 444 139 США,Калифорния,Фостер-Сити
-3381 444 139 США,Калифорния,Фремонт
-3028 444 139 США,Калифорния,Фуллертон
-2858 444 139 США,Калифорния,Эмервиль
-3040 444 139 США,Калифорния,Эскондидо
-2374 444 139 США,Калифорния,Другое
-388 388 139 США,Канзас
-3041 388 139 США,Канзас,Лоуренс
-389 388 139 США,Канзас,Топика
-2375 388 139 США,Канзас,Другое
-408 408 139 США,Кентукки
-3004 408 139 США,Кентукки,Лексингтон
-1205 408 139 США,Кентукки,Луисвилл
-409 408 139 США,Кентукки,Франкфорт
-2376 408 139 США,Кентукки,Другое
-430 430 139 США,Колорадо
-1206 430 139 США,Колорадо,Боулдер
-3095 430 139 США,Колорадо,Грили
-431 430 139 США,Колорадо,Денвер
-1207 430 139 США,Колорадо,Колорадо-Спрингс
-3046 430 139 США,Колорадо,Литлтон
-2377 430 139 США,Колорадо,Другое
-358 358 139 США,Коннектикут
-2968 358 139 США,Коннектикут,Дариен
-3018 358 139 США,Коннектикут,Денбери
-2882 358 139 США,Коннектикут,Стэмфорд
-359 358 139 США,Коннектикут,Хартфорд
-3047 358 139 США,Коннектикут,Шелтон
-2378 358 139 США,Коннектикут,Другое
-418 418 139 США,Луизиана
-419 418 139 США,Луизиана,Батон-Руж
-1208 418 139 США,Луизиана,Новый Орлеан
-2408 418 139 США,Луизиана,Другое
-354 354 139 США,Массачусетс
-2931 354 139 США,Массачусетс,Аттлеборо
-3334 354 139 США,Массачусетс,Билерика
-355 354 139 США,Массачусетс,Бостон
-3059 354 139 США,Массачусетс,Вестгемптон
-2919 354 139 США,Массачусетс,Вобурн
-2902 354 139 США,Массачусетс,Дедхэм
-1209 354 139 США,Массачусетс,Кеймбридж
-3336 354 139 США,Массачусетс,Нидхем
-2985 354 139 США,Массачусетс,Ньютонвиль
-3022 354 139 США,Массачусетс,Уолтхэм
-2407 354 139 США,Массачусетс,Другое
-376 376 139 США,Миннесота
-1210 376 139 США,Миннесота,Миннеаполис
-2980 376 139 США,Миннесота,Плимут
-377 376 139 США,Миннесота,Сент-Пол
-3035 376 139 США,Миннесота,Эден Прейри
-2406 376 139 США,Миннесота,Другое
-414 414 139 США,Миссисипи
-415 414 139 США,Миссисипи,Джэксон
-2405 414 139 США,Миссисипи,Другое
-380 380 139 США,Миссури
-381 380 139 США,Миссури,Джефферсон-Сити
-3062 380 139 США,Миссури,Канзас Сити
-3038 380 139 США,Миссури,Ли Саммит
-1211 380 139 США,Миссури,Сент-Луис
-2895 380 139 США,Миссури,Эллисвил
-2404 380 139 США,Миссури,Другое
-372 372 139 США,Мичиган
-3357 372 139 США,Мичиган,Вест Блюмфельд
-1212 372 139 США,Мичиган,Гранд-Рапидс
-1213 372 139 США,Мичиган,Детройт
-3103 372 139 США,Мичиган,Каламазу
-373 372 139 США,Мичиган,Лансинг
-2987 372 139 США,Мичиган,Новай
-2887 372 139 США,Мичиган,Сагино
-2403 372 139 США,Мичиган,Другое
-424 424 139 США,Монтана
-1214 424 139 США,Монтана,Грейт-Фолс
-425 424 139 США,Монтана,Хелина
-2402 424 139 США,Монтана,Другое
-348 348 139 США,Мэн
-349 348 139 США,Мэн,Огаста
-3000 348 139 США,Мэн,Ярмут
-2401 348 139 США,Мэн,Другое
-392 392 139 США,Мэриленд
-393 392 139 США,Мэриленд,Аннаполис
-1215 392 139 США,Мэриленд,Балтимор
-3143 392 139 США,Мэриленд,Гринбелт
-3337 392 139 США,Мэриленд,Колледж Парк
-2904 392 139 США,Мэриленд,Маунт Эйри
-3329 392 139 США,Мэриленд,Роквилль
-2400 392 139 США,Мэриленд,Другое
-386 386 139 США,Небраска
-387 386 139 США,Небраска,Линкольн
-1216 386 139 США,Небраска,Омаха
-2399 386 139 США,Небраска,Другое
-438 438 139 США,Невада
-439 438 139 США,Невада,Карсон-Сити
-1217 438 139 США,Невада,Лас-Вегас
-2890 438 139 США,Невада,Рено
-2398 438 139 США,Невада,Другое
-362 362 139 США,Нью-Джерси
-1219 362 139 США,Нью-Джерси,Атлантик-Сити
-1218 362 139 США,Нью-Джерси,Ньюарк
-3276 362 139 США,Нью-Джерси,Оклин
-3073 362 139 США,Нью-Джерси,Принстон
-2955 362 139 США,Нью-Джерси,Рузерфорд
-3349 362 139 США,Нью-Джерси,Сомервиль
-363 362 139 США,Нью-Джерси,Трентон
-3078 362 139 США,Нью-Джерси,Хакеттстоун
-3248 362 139 США,Нью-Джерси,Черри Хилл
-2397 362 139 США,Нью-Джерси,Другое
-360 360 139 США,Нью-Йорк
-3134 360 139 США,Нью-Йорк,Баффало
-3081 360 139 США,Нью-Йорк,Бингхэмптон
-2997 360 139 США,Нью-Йорк,Бруклин
-2999 360 139 США,Нью-Йорк,Варвик
-3139 360 139 США,Нью-Йорк,Ирвингтон
-3060 360 139 США,Нью-Йорк,Итака
-1220 360 139 США,Нью-Йорк,Нью-Йорк
-361 360 139 США,Нью-Йорк,Олбани
-2914 360 139 США,Нью-Йорк,Погкипси
-3056 360 139 США,Нью-Йорк,Саратога Спрингс
-2396 360 139 США,Нью-Йорк,Другое
-432 432 139 США,Нью-Мексико
-1222 432 139 США,Нью-Мексико,Альбукерке
-433 432 139 США,Нью-Мексико,Санта-Фе
-2395 432 139 США,Нью-Мексико,Другое
-350 350 139 США,Нью-Хэмпшир
-2989 350 139 США,Нью-Хэмпшир,Амхерст
-351 350 139 США,Нью-Хэмпшир,Конкорд
-2950 350 139 США,Нью-Хэмпшир,Лондондерри
-1221 350 139 США,Нью-Хэмпшир,Манчестер
-3111 350 139 США,Нью-Хэмпшир,Рочестер
-2898 350 139 США,Нью-Хэмпшир,Салем
-2938 350 139 США,Нью-Хэмпшир,Хадсон
-2394 350 139 США,Нью-Хэмпшир,Другое
-366 366 139 США,Огайо
-2953 366 139 США,Огайо,Варрен
-3112 366 139 США,Огайо,Гроув Сити
-1223 366 139 США,Огайо,Кливленд
-367 366 139 США,Огайо,Колумбус
-2951 366 139 США,Огайо,Лавленд
-2862 366 139 США,Огайо,Оберлин
-3034 366 139 США,Огайо,Рейнольдсбург
-2860 366 139 США,Огайо,Цинциннати
-2393 366 139 США,Огайо,Другое
-420 420 139 США,Оклахома
-421 420 139 США,Оклахома,Оклахома-Сити
-1224 420 139 США,Оклахома,Талса
-2392 420 139 США,Оклахома,Другое
-442 442 139 США,Орегон
-2877 442 139 США,Орегон,Кламат-Фолс
-2945 442 139 США,Орегон,Коттедж-Гроув
-1225 442 139 США,Орегон,Портленд
-443 442 139 США,Орегон,Сейлем
-1226 442 139 США,Орегон,Юджин
-2391 442 139 США,Орегон,Другое
-364 364 139 США,Пенсильвания
-3316 364 139 США,Пенсильвания,Вифлием
-3282 364 139 США,Пенсильвания,Колледжвиль
-2972 364 139 США,Пенсильвания,Нью Фридом
-1227 364 139 США,Пенсильвания,Питтсбург
-2893 364 139 США,Пенсильвания,Рандор
-3110 364 139 США,Пенсильвания,Слиппери Рок
-1228 364 139 США,Пенсильвания,Филадельфия
-365 364 139 США,Пенсильвания,Харрисберг
-2390 364 139 США,Пенсильвания,Другое
-450 450 139 США,Пуэрто-Рико
-451 450 139 США,Пуэрто-Рико,Понсе
-3093 450 139 США,Пуэрто-Рико,Сан-Хуан
-2389 450 139 США,Пуэрто-Рико,Другое
-356 356 139 США,Род-Айленд
-357 356 139 США,Род-Айленд,Провиденс
-2388 356 139 США,Род-Айленд,Другое
-382 382 139 США,Северная Дакота
-383 382 139 США,Северная Дакота,Бисмарк
-2387 382 139 США,Северная Дакота,Другое
-398 398 139 США,Северная Каролина
-2960 398 139 США,Северная Каролина,Вильмингтон
-2915 398 139 США,Северная Каролина,Дурхам
-399 398 139 США,Северная Каролина,Роли
-2386 398 139 США,Северная Каролина,Другое
-410 410 139 США,Теннесси
-2863 410 139 США,Теннесси,Мемфис
-411 410 139 США,Теннесси,Нашвилл
-1229 410 139 США,Теннесси,Ноксвилл
-2385 410 139 США,Теннесси,Другое
-422 422 139 США,Техас
-3085 422 139 США,Техас,Бедфорд
-2913 422 139 США,Техас,Брейди
-1233 422 139 США,Техас,Даллас
-2916 422 139 США,Техас,Ирвинг
-3123 422 139 США,Техас,Кингсвилл
-2873 422 139 США,Техас,Конрой
-3096 422 139 США,Техас,Корпус Кристи
-423 422 139 США,Техас,Остин
-1232 422 139 США,Техас,Сан-Антонио
-3023 422 139 США,Техас,Уайли
-1231 422 139 США,Техас,Хьюстон
-1230 422 139 США,Техас,Эль-Пасо
-2384 422 139 США,Техас,Другое
-406 406 139 США,Федеральный округ Колумбия
-2383 406 139 США,Федеральный округ Колумбия,Другое
-404 404 139 США,Флорида
-2879 404 139 США,Флорида,Бока-Рейтон
-2880 404 139 США,Флорида,Гейнсвил
-3086 404 139 США,Флорида,Джексонвиль
-3002 404 139 США,Флорида,Киссимми
-3124 404 139 США,Флорида,Корал Гейблс
-2894 404 139 США,Флорида,Корал-Спрингс
-3290 404 139 США,Флорида,Лейк-Ворт
-1234 404 139 США,Флорида,Майами
-1236 404 139 США,Флорида,Орландо
-3372 404 139 США,Флорида,Пинеллас Парк
-2952 404 139 США,Флорида,Пунта-Горда
-3340 404 139 США,Флорида,Сарасота
-1235 404 139 США,Флорида,Сент-Питерсберг
-405 404 139 США,Флорида,Таллахасси
-2962 404 139 США,Флорида,Форт Лаудердейл
-2382 404 139 США,Флорида,Другое
-384 384 139 США,Южная Дакота
-385 384 139 США,Южная Дакота,Пирр
-2381 384 139 США,Южная Дакота,Другое
-400 400 139 США,Южная Каролина
-401 400 139 США,Южная Каролина,Колумбия
-3090 400 139 США,Южная Каролина,Спартанбург
-1237 400 139 США,Южная Каролина,Чарлстон
-2380 400 139 США,Южная Каролина,Другое
-436 436 139 США,Юта
-3036 436 139 США,Юта,Кейсвилл
-3024 436 139 США,Юта,Линдон
-3108 436 139 США,Юта,Орем
-2866 436 139 США,Юта,Сент-Джордж
-437 436 139 США,Юта,Солт-Лейк-Сити
-2379 436 139 США,Юта,Другое
-3200 0 3200 Ангилья (Брит.)
-140 0 140 Антигуа и Барбуда
-1238 1238 140 Антигуа и Барбуда,Сент-Джонс
-2442 2442 140 Антигуа и Барбуда,Другое
-141 0 141 Аргентина
-1239 1239 141 Аргентина,Буэнос-Айрес
-2441 2441 141 Аргентина,Другое
-3202 0 3202 Аруба (Нид.)
-142 0 142 Багамы
-1240 1240 142 Багамы,Нассау
-2440 2440 142 Багамы,Другое
-143 0 143 Барбадос
-1241 1241 143 Барбадос,Бриджтаун
-2439 2439 143 Барбадос,Другое
-146 0 146 Белиз
-1242 1242 146 Белиз,Бельмопан
-2438 2438 146 Белиз,Другое
-3203 0 3203 Бермуды (Брит.)
-144 0 144 Боливия
-1243 1243 144 Боливия,Ла-Пас
-2437 2437 144 Боливия,Другое
-145 0 145 Бразилия
-1244 1244 145 Бразилия,Бразилиа
-3094 3094 145 Бразилия,Пассо Фундо
-1245 1245 145 Бразилия,Рио-де-Жанейро
-1246 1246 145 Бразилия,Сан-Паулу
-2436 2436 145 Бразилия,Другое
-147 0 147 Венесуэла
-1247 1247 147 Венесуэла,Каракас
-2435 2435 147 Венесуэла,Другое
-3204 0 3204 Виргинские острова (Брит.)
-452 0 452 Виргинские острова (США)
-1190 1190 452 Виргинские острова (США),Шарлотта-Амалия
-2364 2364 452 Виргинские острова (США),Другое
-149 0 149 Гаити
-1248 1248 149 Гаити,Порт-о-Пренс
-2434 2434 149 Гаити,Другое
-148 0 148 Гайана
-1249 1249 148 Гайана,Джоржтаун
-2433 2433 148 Гайана,Другое
-3205 0 3205 Гваделупа (Фр.)
-173 0 173 Гватемала
-1250 1250 173 Гватемала,Гватемала
-2432 2432 173 Гватемала,Другое
-150 0 150 Гондурас
-1251 1251 150 Гондурас,Тегусигальпа
-2431 2431 150 Гондурас,Другое
-151 0 151 Гренада
-1252 1252 151 Гренада,Сент-Джорджес
-2430 2430 151 Гренада,Другое
-152 0 152 Гренландия (Дат.)
-1253 1253 152 Гренландия (Дат.),Уманак
-2429 2429 152 Гренландия (Дат.),Другое
-153 0 153 Доминика
-1254 1254 153 Доминика,Розо
-2428 2428 153 Доминика,Другое
-154 0 154 Доминиканская Республика
-1255 1255 154 Доминиканская Республика,Санто-Доминго
-2427 2427 154 Доминиканская Республика,Другое
-155 0 155 Колумбия
-1256 1256 155 Колумбия,Богота
-2426 2426 155 Колумбия,Другое
-156 0 156 Коста-Рика
-1257 1257 156 Коста-Рика,Сан-Хосе
-2425 2425 156 Коста-Рика,Другое
-157 0 157 Куба
-1258 1258 157 Куба,Гавана
-2424 2424 157 Куба,Другое
-3208 0 3208 Мартиника (Фр.)
-158 0 158 Мексика
-1259 1259 158 Мексика,Акапулько
-1260 1260 158 Мексика,Мехико
-2423 2423 158 Мексика,Другое
-3209 0 3209 Монтсеррат (Брит)
-3201 0 3201 Нидерландские Антилы
-159 0 159 Никарагуа
-1261 1261 159 Никарагуа,Манагуа
-2422 2422 159 Никарагуа,Другое
-3207 0 3207 Остров Кайман (Брит.)
-3211 0 3211 Острова Теркс и Кайкос (Брит.)
-160 0 160 Панама
-1262 1262 160 Панама,Панама
-2421 2421 160 Панама,Другое
-161 0 161 Парагвай
-1263 1263 161 Парагвай,Асунсьон
-2420 2420 161 Парагвай,Другое
-162 0 162 Перу
-1264 1264 162 Перу,Лима
-2419 2419 162 Перу,Другое
-163 0 163 Сальвадор
-1265 1265 163 Сальвадор,Сан-Сальвадор
-2418 2418 163 Сальвадор,Другое
-164 0 164 Сент-Винсент и Гренадины
-1266 1266 164 Сент-Винсент и Гренадины,Кингстаун
-2417 2417 164 Сент-Винсент и Гренадины,Другое
-165 0 165 Сент-Китс и Невис
-1267 1267 165 Сент-Китс и Невис,Бастер
-2416 2416 165 Сент-Китс и Невис,Другое
-166 0 166 Сент-Люсия
-1268 1268 166 Сент-Люсия,Кастри
-2415 2415 166 Сент-Люсия,Другое
-3210 0 3210 Сент-Пьер и Микелон (Фр.)
-167 0 167 Суринам
-1269 1269 167 Суринам,Парамарибо
-2414 2414 167 Суринам,Другое
-168 0 168 Тринидат и Тобаго
-1270 1270 168 Тринидат и Тобаго,Порт-оф-Спейн
-2413 2413 168 Тринидат и Тобаго,Другое
-169 0 169 Уругвай
-1271 1271 169 Уругвай,Монтевидео
-2412 2412 169 Уругвай,Другое
-3212 0 3212 Фолклендские острова (Брит.)
-3206 0 3206 Французская Гвиана
-170 0 170 Чили
-1272 1272 170 Чили,Сантьяго
-2411 2411 170 Чили,Другое
-171 0 171 Эквадор
-1273 1273 171 Эквадор,Гуаякиль
-1274 1274 171 Эквадор,Кито
-2410 2410 171 Эквадор,Другое
-3213 0 3213 Юж. Джорджия и Юж. Сандвичевы о-ва (Брит.)
-172 0 172 Ямайка
-1275 1275 172 Ямайка,Кингстон
-2409 2409 172 Ямайка,Другое
-174 0 174 Алжир
-1854 1854 174 Алжир,Алжир
-2495 2495 174 Алжир,Другое
-175 0 175 Ангола
-1855 1855 175 Ангола,Луанда
-2494 2494 175 Ангола,Другое
-176 0 176 Бенин
-1856 1856 176 Бенин,Котону
-1857 1857 176 Бенин,Порто-Ново
-2493 2493 176 Бенин,Другое
-177 0 177 Ботсвана
-1858 1858 177 Ботсвана,Габороне
-2492 2492 177 Ботсвана,Другое
-3228 0 3228 Британская территория в Индийском океане
-178 0 178 Буркина-Фасо
-1859 1859 178 Буркина-Фасо,Уагадугу
-2491 2491 178 Буркина-Фасо,Другое
-179 0 179 Бурунди
-1860 1860 179 Бурунди,Бужумбуру
-2490 2490 179 Бурунди,Другое
-180 0 180 Габон
-1861 1861 180 Габон,Либревиль
-2489 2489 180 Габон,Другое
-181 0 181 Гамбия
-1862 1862 181 Гамбия,Банжул
-2488 2488 181 Гамбия,Другое
-182 0 182 Гана
-1863 1863 182 Гана,Аккра
-2487 2487 182 Гана,Другое
-183 0 183 Гвинея
-1864 1864 183 Гвинея,Конакри
-2486 2486 183 Гвинея,Другое
-184 0 184 Гвинея-Бисау
-1865 1865 184 Гвинея-Бисау,Бисау
-2485 2485 184 Гвинея-Бисау,Другое
-185 0 185 Джибути
-1866 1866 185 Джибути,Джибути
-2484 2484 185 Джибути,Другое
-186 0 186 Египет
-3312 3312 186 Египет,Дахаб
-1867 1867 186 Египет,Каир
-1868 1868 186 Египет,Хургада
-2483 2483 186 Египет,Другое
-187 0 187 Замбия
-1869 1869 187 Замбия,Лусака
-2482 2482 187 Замбия,Другое
-3198 0 3198 Зап. Сахара
-23 0 23 Зимбабве
-1870 1870 23 Зимбабве,Хараре
-2481 2481 23 Зимбабве,Другое
-188 0 188 Кабо-Верде
-1871 1871 188 Кабо-Верде,Прая
-2480 2480 188 Кабо-Верде,Другое
-189 0 189 Камерун
-1872 1872 189 Камерун,Яунде
-2479 2479 189 Камерун,Другое
-190 0 190 Кения
-1873 1873 190 Кения,Найроби
-2478 2478 190 Кения,Другое
-191 0 191 Коморы
-1874 1874 191 Коморы,Морони
-2477 2477 191 Коморы,Другое
-193 0 193 Конго (Заир)
-1875 1875 193 Конго (Заир),Киншаса
-2476 2476 193 Конго (Заир),Другое
-192 0 192 Конго
-1876 1876 192 Конго,Браззавиль
-2475 2475 192 Конго,Другое
-194 0 194 Кот-д`Ивуар
-1877 1877 194 Кот-д`Ивуар,Ямусукро
-2474 2474 194 Кот-д`Ивуар,Другое
-195 0 195 Лесото
-1878 1878 195 Лесото,Масеру
-2473 2473 195 Лесото,Другое
-196 0 196 Либерия
-1879 1879 196 Либерия,Монровия
-2472 2472 196 Либерия,Другое
-197 0 197 Ливия
-1880 1880 197 Ливия,Триполи
-2471 2471 197 Ливия,Другое
-198 0 198 Маврикий
-1881 1881 198 Маврикий,Порт-Луи
-2470 2470 198 Маврикий,Другое
-199 0 199 Мавритания
-1882 1882 199 Мавритания,Нуакшот
-2469 2469 199 Мавритания,Другое
-200 0 200 Мадагаскар
-1883 1883 200 Мадагаскар,Антананариву
-2468 2468 200 Мадагаскар,Другое
-3229 0 3229 Майотт (Фр.)
-201 0 201 Малави
-1884 1884 201 Малави,Лилонгве
-2467 2467 201 Малави,Другое
-202 0 202 Мали
-1885 1885 202 Мали,Бамако
-2466 2466 202 Мали,Другое
-203 0 203 Марокко
-1886 1886 203 Марокко,Агадир
-1887 1887 203 Марокко,Рабат
-2465 2465 203 Марокко,Другое
-204 0 204 Мозамбик
-1888 1888 204 Мозамбик,Мапуту
-2464 2464 204 Мозамбик,Другое
-205 0 205 Намибия
-1889 1889 205 Намибия,Виндхук
-2463 2463 205 Намибия,Другое
-206 0 206 Нигер
-1890 1890 206 Нигер,Ниамей
-2462 2462 206 Нигер,Другое
-207 0 207 Нигерия
-1891 1891 207 Нигерия,Абуджа
-2461 2461 207 Нигерия,Другое
-3227 0 3227 Остров Буве (Норв.)
-3197 0 3197 Реюньон (Фр.)
-208 0 208 Руанда
-1892 1892 208 Руанда,Кигали
-2460 2460 208 Руанда,Другое
-209 0 209 Сан-Томе и Принсипи
-1893 1893 209 Сан-Томе и Принсипи,Сан-Томе
-2459 2459 209 Сан-Томе и Принсипи,Другое
-210 0 210 Свазиленд
-1894 1894 210 Свазиленд,Мбабане
-2458 2458 210 Свазиленд,Другое
-3199 0 3199 Святая Елена (Брит.)
-211 0 211 Сейшелы
-1895 1895 211 Сейшелы,Виктория
-2457 2457 211 Сейшелы,Другое
-212 0 212 Сенегал
-1896 1896 212 Сенегал,Дакар
-2456 2456 212 Сенегал,Другое
-213 0 213 Сомали
-1897 1897 213 Сомали,Могадишо
-2455 2455 213 Сомали,Другое
-214 0 214 Судан
-1898 1898 214 Судан,Хартум
-2454 2454 214 Судан,Другое
-215 0 215 Сьерра-Леоне
-1899 1899 215 Сьерра-Леоне,Фритаун
-2453 2453 215 Сьерра-Леоне,Другое
-216 0 216 Танзания
-1900 1900 216 Танзания,Дар-эс-Салам
-1901 1901 216 Танзания,Додома
-2452 2452 216 Танзания,Другое
-217 0 217 Того
-1902 1902 217 Того,Ломе
-2451 2451 217 Того,Другое
-218 0 218 Тунис
-1903 1903 218 Тунис,Тунис
-2450 2450 218 Тунис,Другое
-219 0 219 Уганда
-1904 1904 219 Уганда,Кампала
-2449 2449 219 Уганда,Другое
-220 0 220 Центральноафриканская Республика
-1905 1905 220 Центральноафриканская Республика,Банги
-2448 2448 220 Центральноафриканская Республика,Другое
-222 0 222 Чад
-1906 1906 222 Чад,Нджамена
-2447 2447 222 Чад,Другое
-223 0 223 Экваториальная Гвинея
-1907 1907 223 Экваториальная Гвинея,Малабо
-2446 2446 223 Экваториальная Гвинея,Другое
-221 0 221 Эритрея
-1908 1908 221 Эритрея,Асмэра
-2445 2445 221 Эритрея,Другое
-224 0 224 Эфиопия
-1909 1909 224 Эфиопия,Аддис-Абеба
-2444 2444 224 Эфиопия,Другое
-225 0 225 Южно-Африканская Республика (ЮАР)
-1910 1910 225 Южно-Африканская Республика (ЮАР),Дурбан
-1913 1913 225 Южно-Африканская Республика (ЮАР),Йоханнесбург
-1912 1912 225 Южно-Африканская Республика (ЮАР),Кейптаун
-3033 3033 225 Южно-Африканская Республика (ЮАР),Пайнтаун
-1911 1911 225 Южно-Африканская Республика (ЮАР),Претория
-2443 2443 225 Южно-Африканская Республика (ЮАР),Другое
-39 0 39 Украина
-314 314 39 Украина,Киев
-315 315 39 Украина,Винницкая обл.
-614 315 39 Украина,Винницкая обл.,Винница
-615 315 39 Украина,Винницкая обл.,Хмельник
-2566 315 39 Украина,Винницкая обл.,Другое
-316 316 39 Украина,Волынская обл.
-2940 316 39 Украина,Волынская обл.,Ковель
-616 316 39 Украина,Волынская обл.,Луцк
-2565 316 39 Украина,Волынская обл.,Другое
-317 317 39 Украина,Днепропетровская обл.
-617 317 39 Украина,Днепропетровская обл.,Днепродзержинск
-618 317 39 Украина,Днепропетровская обл.,Днепропетровск
-619 317 39 Украина,Днепропетровская обл.,Кривой Рог
-620 317 39 Украина,Днепропетровская обл.,Никополь
-621 317 39 Украина,Днепропетровская обл.,Новомосковск
-622 317 39 Украина,Днепропетровская обл.,Орджоникидзе
-623 317 39 Украина,Днепропетровская обл.,Павлоград
-2564 317 39 Украина,Днепропетровская обл.,Другое
-318 318 39 Украина,Донецкая обл.
-624 318 39 Украина,Донецкая обл.,Артемовск
-625 318 39 Украина,Донецкая обл.,Горловка
-626 318 39 Украина,Донецкая обл.,Донецк
-627 318 39 Украина,Донецкая обл.,Дружковка
-628 318 39 Украина,Донецкая обл.,Енакиево
-629 318 39 Украина,Донецкая обл.,Константиновка
-630 318 39 Украина,Донецкая обл.,Краматорск
-2944 318 39 Украина,Донецкая обл.,Красноармейск
-631 318 39 Украина,Донецкая обл.,Макеевка
-632 318 39 Украина,Донецкая обл.,Мариуполь
-633 318 39 Украина,Донецкая обл.,Николаевка
-634 318 39 Украина,Донецкая обл.,Славянск
-635 318 39 Украина,Донецкая обл.,Харцызск
-2563 318 39 Украина,Донецкая обл.,Другое
-319 319 39 Украина,Житомирская обл.
-636 319 39 Украина,Житомирская обл.,Бердичев
-637 319 39 Украина,Житомирская обл.,Житомир
-2942 319 39 Украина,Житомирская обл.,Коростень
-638 319 39 Украина,Житомирская обл.,Коростышев
-2907 319 39 Украина,Житомирская обл.,Малин
-639 319 39 Украина,Житомирская обл.,Новоград-Волынский
-2562 319 39 Украина,Житомирская обл.,Другое
-320 320 39 Украина,Закарпатская обл.
-640 320 39 Украина,Закарпатская обл.,Берегово
-641 320 39 Украина,Закарпатская обл.,Воловец
-3119 320 39 Украина,Закарпатская обл.,Мукачево
-3162 320 39 Украина,Закарпатская обл.,Свалява
-642 320 39 Украина,Закарпатская обл.,Ужгород
-643 320 39 Украина,Закарпатская обл.,Хуст
-2561 320 39 Украина,Закарпатская обл.,Другое
-321 321 39 Украина,Запорожская обл.
-644 321 39 Украина,Запорожская обл.,Бердянск
-3128 321 39 Украина,Запорожская обл.,Гуляйполе
-645 321 39 Украина,Запорожская обл.,Запорожье
-646 321 39 Украина,Запорожская обл.,Мелитополь
-3121 321 39 Украина,Запорожская обл.,Приморск
-3378 321 39 Украина,Запорожская обл.,Энергодар
-2560 321 39 Украина,Запорожская обл.,Другое
-322 322 39 Украина,Ивано-Франковская обл.
-3379 322 39 Украина,Ивано-Франковская обл.,Галич
-647 322 39 Украина,Ивано-Франковская обл.,Ивано-Франковск
-3170 322 39 Украина,Ивано-Франковская обл.,Яремче
-2559 322 39 Украина,Ивано-Франковская обл.,Другое
-323 323 39 Украина,Киевская обл.
-648 323 39 Украина,Киевская обл.,Белая Церковь
-649 323 39 Украина,Киевская обл.,Борисполь
-651 323 39 Украина,Киевская обл.,Бровары
-650 323 39 Украина,Киевская обл.,Васильков
-652 323 39 Украина,Киевская обл.,Ирпень
-3341 323 39 Украина,Киевская обл.,Переяслав-Хмельницкий
-653 323 39 Украина,Киевская обл.,Славутич
-654 323 39 Украина,Киевская обл.,Фастов
-655 323 39 Украина,Киевская обл.,Чернобыль
-2558 323 39 Украина,Киевская обл.,Другое
-324 324 39 Украина,Кировоградская обл.
-656 324 39 Украина,Кировоградская обл.,Александрия
-657 324 39 Украина,Кировоградская обл.,Кировоград
-658 324 39 Украина,Кировоградская обл.,Светловодск
-2557 324 39 Украина,Кировоградская обл.,Другое
-325 325 39 Украина,Крым
-659 325 39 Украина,Крым,Алушта
-2984 325 39 Украина,Крым,Армянск
-3042 325 39 Украина,Крым,Балаклава
-660 325 39 Украина,Крым,Бахчисарай
-662 325 39 Украина,Крым,Гурзуф
-3382 325 39 Украина,Крым,Джанкой
-663 325 39 Украина,Крым,Евпатория
-667 325 39 Украина,Крым,Керчь
-666 325 39 Украина,Крым,Коктебель
-668 325 39 Украина,Крым,Мысовое
-669 325 39 Украина,Крым,Саки
-665 325 39 Украина,Крым,Севастополь
-661 325 39 Украина,Крым,Симферополь
-3370 325 39 Украина,Крым,Старый Крым
-670 325 39 Украина,Крым,Судак
-664 325 39 Украина,Крым,Феодосия
-3148 325 39 Украина,Крым,Черноморское
-671 325 39 Украина,Крым,Ялта
-2556 325 39 Украина,Крым,Другое
-326 326 39 Украина,Луганская обл.
-672 326 39 Украина,Луганская обл.,Алчевск
-673 326 39 Украина,Луганская обл.,Антрацит
-674 326 39 Украина,Луганская обл.,Лисичанск
-675 326 39 Украина,Луганская обл.,Луганск
-3364 326 39 Украина,Луганская обл.,Молодогвардейск
-676 326 39 Украина,Луганская обл.,Петровское
-677 326 39 Украина,Луганская обл.,Ровеньки
-678 326 39 Украина,Луганская обл.,Рубежное
-679 326 39 Украина,Луганская обл.,Северодонецк
-680 326 39 Украина,Луганская обл.,Стаханов
-2555 326 39 Украина,Луганская обл.,Другое
-327 327 39 Украина,Львовская обл.
-3284 327 39 Украина,Львовская обл.,Дрогобыч
-681 327 39 Украина,Львовская обл.,Львов
-682 327 39 Украина,Львовская обл.,Трускавец
-2554 327 39 Украина,Львовская обл.,Другое
-328 328 39 Украина,Николаевская обл.
-3322 328 39 Украина,Николаевская обл.,Вознесенск
-2870 328 39 Украина,Николаевская обл.,Жовтневое
-683 328 39 Украина,Николаевская обл.,Николаев
-3118 328 39 Украина,Николаевская обл.,Очаков
-3325 328 39 Украина,Николаевская обл.,Южноукраинск
-2553 328 39 Украина,Николаевская обл.,Другое
-329 329 39 Украина,Одесская обл.
-684 329 39 Украина,Одесская обл.,Белгород-Днестровский
-685 329 39 Украина,Одесская обл.,Измаил
-689 329 39 Украина,Одесская обл.,Ильичевск
-686 329 39 Украина,Одесская обл.,Одесса
-688 329 39 Украина,Одесская обл.,Рени
-687 329 39 Украина,Одесская обл.,Слободка
-2552 329 39 Украина,Одесская обл.,Другое
-330 330 39 Украина,Полтавская обл.
-690 330 39 Украина,Полтавская обл.,Гадяч
-691 330 39 Украина,Полтавская обл.,Комсомольск
-693 330 39 Украина,Полтавская обл.,Кременчуг
-694 330 39 Украина,Полтавская обл.,Лубны
-695 330 39 Украина,Полтавская обл.,Миргород
-692 330 39 Украина,Полтавская обл.,Полтава
-2551 330 39 Украина,Полтавская обл.,Другое
-331 331 39 Украина,Ровенская обл.
-696 331 39 Украина,Ровенская обл.,Здолбунов
-697 331 39 Украина,Ровенская обл.,Ровно
-3361 331 39 Украина,Ровенская обл.,Сарны
-2550 331 39 Украина,Ровенская обл.,Другое
-332 332 39 Украина,Сумская обл.
-3356 332 39 Украина,Сумская обл.,Бурынь
-698 332 39 Украина,Сумская обл.,Конотоп
-700 332 39 Украина,Сумская обл.,Ромны
-699 332 39 Украина,Сумская обл.,Сумы
-701 332 39 Украина,Сумская обл.,Шостка
-2549 332 39 Украина,Сумская обл.,Другое
-333 333 39 Украина,Тернопольская обл.
-702 333 39 Украина,Тернопольская обл.,Бережаны
-3171 333 39 Украина,Тернопольская обл.,Борщев
-703 333 39 Украина,Тернопольская обл.,Тернополь
-704 333 39 Украина,Тернопольская обл.,Чортков
-2548 333 39 Украина,Тернопольская обл.,Другое
-334 334 39 Украина,Харьковская обл.
-705 334 39 Украина,Харьковская обл.,Изюм
-3346 334 39 Украина,Харьковская обл.,Купянск
-3351 334 39 Украина,Харьковская обл.,Купянск
-706 334 39 Украина,Харьковская обл.,Лозовая
-708 334 39 Украина,Харьковская обл.,Мерефа
-707 334 39 Украина,Харьковская обл.,Харьков
-709 334 39 Украина,Харьковская обл.,Чугуев
-2547 334 39 Украина,Харьковская обл.,Другое
-335 335 39 Украина,Херсонская обл.
-710 335 39 Украина,Херсонская обл.,Геническ
-711 335 39 Украина,Херсонская обл.,Каховка
-712 335 39 Украина,Херсонская обл.,Новая Каховка
-3280 335 39 Украина,Херсонская обл.,Скадовск
-713 335 39 Украина,Херсонская обл.,Херсон
-2546 335 39 Украина,Херсонская обл.,Другое
-336 336 39 Украина,Хмельницкая обл.
-714 336 39 Украина,Хмельницкая обл.,Каменец-Подольский
-715 336 39 Украина,Хмельницкая обл.,Красилов
-2941 336 39 Украина,Хмельницкая обл.,Нетишин
-716 336 39 Украина,Хмельницкая обл.,Полонное
-3120 336 39 Украина,Хмельницкая обл.,Сатанов
-2943 336 39 Украина,Хмельницкая обл.,Славута
-717 336 39 Украина,Хмельницкая обл.,Хмельницкий
-3155 336 39 Украина,Хмельницкая обл.,Чемировцы
-2542 336 39 Украина,Хмельницкая обл.,Другое
-337 337 39 Украина,Черкасская обл.
-3169 337 39 Украина,Черкасская обл.,Золотоноша
-3016 337 39 Украина,Черкасская обл.,Канев
-3333 337 39 Украина,Черкасская обл.,Полонное
-718 337 39 Украина,Черкасская обл.,Умань
-719 337 39 Украина,Черкасская обл.,Христиновка
-720 337 39 Украина,Черкасская обл.,Черкассы
-2545 337 39 Украина,Черкасская обл.,Другое
-338 338 39 Украина,Черниговская обл.
-721 338 39 Украина,Черниговская обл.,Нежин
-722 338 39 Украина,Черниговская обл.,Прилуки
-723 338 39 Украина,Черниговская обл.,Чернигов
-2544 338 39 Украина,Черниговская обл.,Другое
-339 339 39 Украина,Черновицкая обл.
-724 339 39 Украина,Черновицкая обл.,Черновцы
-2543 339 39 Украина,Черновицкая обл.,Другое
-40 0 40 Австрия
-602 602 40 Австрия,Бад Халл
-604 604 40 Австрия,Брегенц
-603 603 40 Австрия,Вена
-608 608 40 Австрия,Грац
-606 606 40 Австрия,Зальцбург
-3099 3099 40 Австрия,Зель-ам-Зее
-605 605 40 Австрия,Инсбрук
-3174 3174 40 Австрия,Кирхберг
-609 609 40 Австрия,Клагенфурт
-607 607 40 Австрия,Линц
-610 610 40 Австрия,Обдах
-611 611 40 Австрия,Щтубайтал
-2541 2541 40 Австрия,Другое
-32 0 32 Албания
-612 612 32 Албания,Тирана
-2540 2540 32 Албания,Другое
-33 0 33 Андорра
-613 613 33 Андорра,Андорра-ла-Велья
-2539 2539 33 Андорра,Другое
-340 0 340 Белоруссия
-341 341 340 Белоруссия,Минск
-342 342 340 Белоруссия,Брестская обл.
-725 342 340 Белоруссия,Брестская обл.,Барановичи
-726 342 340 Белоруссия,Брестская обл.,Белоозерск
-727 342 340 Белоруссия,Брестская обл.,Береза
-728 342 340 Белоруссия,Брестская обл.,Брест
-3172 342 340 Белоруссия,Брестская обл.,Дрогичин
-729 342 340 Белоруссия,Брестская обл.,Кобрин
-730 342 340 Белоруссия,Брестская обл.,Ляховичи
-731 342 340 Белоруссия,Брестская обл.,Малорита
-732 342 340 Белоруссия,Брестская обл.,Пинск
-2538 342 340 Белоруссия,Брестская обл.,Другое
-343 343 340 Белоруссия,Витебская обл.
-733 343 340 Белоруссия,Витебская обл.,Браслав
-735 343 340 Белоруссия,Витебская обл.,Витебск
-734 343 340 Белоруссия,Витебская обл.,Новолукомоль
-736 343 340 Белоруссия,Витебская обл.,Новополоцк
-737 343 340 Белоруссия,Витебская обл.,Орша
-738 343 340 Белоруссия,Витебская обл.,Толочин
-2537 343 340 Белоруссия,Витебская обл.,Другое
-344 344 340 Белоруссия,Гомельская обл.
-739 344 340 Белоруссия,Гомельская обл.,Гомель
-740 344 340 Белоруссия,Гомельская обл.,Жлобин
-741 344 340 Белоруссия,Гомельская обл.,Мозырь
-742 344 340 Белоруссия,Гомельская обл.,Речица
-743 344 340 Белоруссия,Гомельская обл.,Рогачев
-744 344 340 Белоруссия,Гомельская обл.,Светлогорск
-2536 344 340 Белоруссия,Гомельская обл.,Другое
-345 345 340 Белоруссия,Гродненская обл.
-745 345 340 Белоруссия,Гродненская обл.,Волковыск
-746 345 340 Белоруссия,Гродненская обл.,Гродно
-747 345 340 Белоруссия,Гродненская обл.,Лида
-3244 345 340 Белоруссия,Гродненская обл.,Слоним
-748 345 340 Белоруссия,Гродненская обл.,Сморгонь
-2535 345 340 Белоруссия,Гродненская обл.,Другое
-346 346 340 Белоруссия,Минская обл.
-3149 346 340 Белоруссия,Минская обл.,Березино
-749 346 340 Белоруссия,Минская обл.,Борисов
-750 346 340 Белоруссия,Минская обл.,Вилейка
-751 346 340 Белоруссия,Минская обл.,Жодино
-752 346 340 Белоруссия,Минская обл.,Марьина Горка
-753 346 340 Белоруссия,Минская обл.,Молодечно
-2896 346 340 Белоруссия,Минская обл.,Слуцк
-754 346 340 Белоруссия,Минская обл.,Смолевичи
-755 346 340 Белоруссия,Минская обл.,Солигорск
-756 346 340 Белоруссия,Минская обл.,Червень
-2534 346 340 Белоруссия,Минская обл.,Другое
-347 347 340 Белоруссия,Могилевская обл.
-757 347 340 Белоруссия,Могилевская обл.,Бобруйск
-758 347 340 Белоруссия,Могилевская обл.,Могилев
-759 347 340 Белоруссия,Могилевская обл.,Осиповичи
-2533 347 340 Белоруссия,Могилевская обл.,Другое
-38 0 38 Бельгия
-760 760 38 Бельгия,Антверпен
-767 767 38 Бельгия,Арлон
-762 762 38 Бельгия,Брюгге
-761 761 38 Бельгия,Брюссель
-763 763 38 Бельгия,Гент
-769 769 38 Бельгия,Лувен
-765 765 38 Бельгия,Льеж
-764 764 38 Бельгия,Монс
-3117 3117 38 Бельгия,Мортсель
-766 766 38 Бельгия,Намюр
-768 768 38 Бельгия,Хасселт
-2532 2532 38 Бельгия,Другое
-41 0 41 Болгария
-3098 3098 41 Болгария,Банско
-792 792 41 Болгария,Благоевград
-770 770 41 Болгария,Бургас
-771 771 41 Болгария,Бяла
-773 773 41 Болгария,Варна
-776 776 41 Болгария,Велико-Тырново
-788 788 41 Болгария,Видин
-789 789 41 Болгария,Враца
-796 796 41 Болгария,Габрово
-777 777 41 Болгария,Димитровград
-781 781 41 Болгария,Каварна
-786 786 41 Болгария,Кырджали
-791 791 41 Болгария,Кюстендил
-793 793 41 Болгария,Лазарджик
-795 795 41 Болгария,Ловеч
-787 787 41 Болгария,Михайловград
-790 790 41 Болгария,Перник
-3133 3133 41 Болгария,Пирдоп
-794 794 41 Болгария,Плевен
-782 782 41 Болгария,Пловдив
-780 780 41 Болгария,Разград
-779 779 41 Болгария,Русе
-774 774 41 Болгария,Силистра
-784 784 41 Болгария,Сливен
-772 772 41 Болгария,София
-775 775 41 Болгария,Толбухин
-3116 3116 41 Болгария,Тырново
-785 785 41 Болгария,Хасково
-778 778 41 Болгария,Шумен
-783 783 41 Болгария,Ямбол
-2531 2531 41 Болгария,Другое
-42 0 42 Босния и Герцеговина
-797 797 42 Босния и Герцеговина,Баня-Лука
-799 799 42 Босния и Герцеговина,Зеница
-798 798 42 Босния и Герцеговина,Сараево
-800 800 42 Босния и Герцеговина,Тузла
-2530 2530 42 Босния и Герцеговина,Другое
-43 0 43 Ватикан
-45 0 45 Великобритания
-802 802 45 Великобритания,Абердин
-3075 3075 45 Великобритания,Айслворт
-801 801 45 Великобритания,Алнвик
-804 804 45 Великобритания,Бидефорд
-803 803 45 Великобритания,Бирмингем
-805 805 45 Великобритания,Блоксвич
-3168 3168 45 Великобритания,Бостон
-806 806 45 Великобритания,Брайтон
-807 807 45 Великобритания,Бредфорд
-808 808 45 Великобритания,Бристоль
-809 809 45 Великобритания,Вилленхолл
-3131 3131 45 Великобритания,Воррингтон
-810 810 45 Великобритания,Вудбридж
-3342 3342 45 Великобритания,Гилфорд
-811 811 45 Великобритания,Глазго
-812 812 45 Великобритания,Дадли
-813 813 45 Великобритания,Дарем
-814 814 45 Великобритания,Дуглас
-3089 3089 45 Великобритания,Кардиф
-815 815 45 Великобритания,Кембридж
-816 816 45 Великобритания,Кентербери
-817 817 45 Великобритания,Ливерпуль
-818 818 45 Великобритания,Лидс
-819 819 45 Великобритания,Лондон
-820 820 45 Великобритания,Манчестер
-2976 2976 45 Великобритания,Митчем
-2988 2988 45 Великобритания,Мэйденхед
-821 821 45 Великобритания,Ноттингем
-3088 3088 45 Великобритания,Ньюпорт
-822 822 45 Великобритания,Оксфорд
-823 823 45 Великобритания,Плимут
-824 824 45 Великобритания,Портсмут
-825 825 45 Великобритания,Престон
-3343 3343 45 Великобритания,Райд
-2867 2867 45 Великобритания,Ридинг
-2986 2986 45 Великобритания,Сент-Албанс
-826 826 45 Великобритания,Стаффорд
-3063 3063 45 Великобритания,Стокпорт
-827 827 45 Великобритания,Уэймут
-3140 3140 45 Великобритания,Челтенхэм
-828 828 45 Великобритания,Честер
-829 829 45 Великобритания,Шеффилд
-830 830 45 Великобритания,Эдинбург
-2529 2529 45 Великобритания,Другое
-44 0 44 Венгрия
-831 831 44 Венгрия,Будапешт
-832 832 44 Венгрия,Геделле
-836 836 44 Венгрия,Дебрецен
-835 835 44 Венгрия,Мишкольц
-834 834 44 Венгрия,Сегед
-833 833 44 Венгрия,Шиофок
-2528 2528 44 Венгрия,Другое
-46 0 46 Германия
-3007 3007 46 Германия,Аахен
-837 837 46 Германия,Аугсбург
-838 838 46 Германия,Баден-Баден
-3371 3371 46 Германия,Бамберг
-839 839 46 Германия,Бергиш-Гладбах
-840 840 46 Германия,Берлин
-841 841 46 Германия,Билефельд
-3163 3163 46 Германия,Бовенден
-842 842 46 Германия,Бонн
-843 843 46 Германия,Браденбург
-3015 3015 46 Германия,Брауншвейг
-844 844 46 Германия,Бремен
-2921 2921 46 Германия,Варштайн
-845 845 46 Германия,Веймар
-846 846 46 Германия,Вупперталь
-847 847 46 Германия,Гамбург
-848 848 46 Германия,Ганновер
-849 849 46 Германия,Гарделеген
-3010 3010 46 Германия,Гейдельберг
-850 850 46 Германия,Гота
-851 851 46 Германия,Дармштадт
-3072 3072 46 Германия,Дессау
-852 852 46 Германия,Детмольд
-853 853 46 Германия,Дортмунд
-854 854 46 Германия,Дрезден
-855 855 46 Германия,Дюссельдорф
-3082 3082 46 Германия,Иффецхайм
-3309 3309 46 Германия,Кассел
-856 856 46 Германия,Кельн
-857 857 46 Германия,Киль
-3138 3138 46 Германия,Кобленц
-858 858 46 Германия,Крефельд
-859 859 46 Германия,Лейпциг
-2872 2872 46 Германия,Лимбург
-2965 2965 46 Германия,Линген
-3135 3135 46 Германия,Любек
-3156 3156 46 Германия,Мангейм
-3192 3192 46 Германия,Меерсбург
-860 860 46 Германия,Мюнстер
-861 861 46 Германия,Мюнхен
-2864 2864 46 Германия,Нойштадт
-862 862 46 Германия,Нюрнберг
-3009 3009 46 Германия,Оффенбург
-2993 2993 46 Германия,Падерборн
-863 863 46 Германия,Равенсбург
-864 864 46 Германия,Регенсбург
-865 865 46 Германия,Рейнен
-866 866 46 Германия,Росток
-3191 3191 46 Германия,Саарбрюкен
-2974 2974 46 Германия,Санкт-Августин
-3127 3127 46 Германия,Тюринген
-867 867 46 Германия,Фрайберг
-868 868 46 Германия,Фрайбург
-869 869 46 Германия,Франкфурт-на-Майне
-3373 3373 46 Германия,Хемнитц
-3313 3313 46 Германия,Хильден
-870 870 46 Германия,Штутгарт
-3045 3045 46 Германия,Эрланген
-2906 2906 46 Германия,Эшборн
-2527 2527 46 Германия,Другое
-3193 0 3193 Гернси (Брит.)
-47 0 47 Гибралтар (Брит.)
-48 0 48 Греция
-871 871 48 Греция,Афины
-873 873 48 Греция,Ираклион
-3147 3147 48 Греция,Корфу
-872 872 48 Греция,Салоники
-3178 3178 48 Греция,Халкидики
-2526 2526 48 Греция,Другое
-49 0 49 Дания
-3006 3006 49 Дания,Архус
-874 874 49 Дания,Копенгаген
-875 875 49 Дания,Оденсе
-3285 3285 49 Дания,Ольборг
-876 876 49 Дания,Сванеке
-3126 3126 49 Дания,Скиве
-2525 2525 49 Дания,Другое
-3194 0 3194 Джерси (Брит.)
-50 0 50 Ирландия
-3377 3377 50 Ирландия,Виклоу
-3067 3067 50 Ирландия,Голвей
-877 877 50 Ирландия,Дублин
-3065 3065 50 Ирландия,Килларней
-3066 3066 50 Ирландия,Корк
-878 878 50 Ирландия,Лимерик
-3069 3069 50 Ирландия,Нейс
-3068 3068 50 Ирландия,Типперэри
-2524 2524 50 Ирландия,Другое
-51 0 51 Исландия
-879 879 51 Исландия,Рейкьявик
-2523 2523 51 Исландия,Другое
-34 0 34 Испания
-880 880 34 Испания,Аликанте
-3125 3125 34 Испания,Альмерия
-881 881 34 Испания,Барселона
-890 890 34 Испания,Бильбао
-3076 3076 34 Испания,Бланес
-882 882 34 Испания,Валенсия
-3070 3070 34 Испания,Ибица
-888 888 34 Испания,Кадис
-886 886 34 Испания,Картахена
-891 891 34 Испания,Ла-Корунья
-3310 3310 34 Испания,Лорет де Мар
-883 883 34 Испания,Мадрид
-884 884 34 Испания,Малага
-885 885 34 Испания,Марбелья
-892 892 34 Испания,Овьедо
-3179 3179 34 Испания,Пальма де Майорка
-3177 3177 34 Испания,Сан-Агустин
-3289 3289 34 Испания,Санта-Крус-де-Тенерифе
-889 889 34 Испания,Сарагоса
-887 887 34 Испания,Севилья
-893 893 34 Испания,Хихон
-2522 2522 34 Испания,Другое
-52 0 52 Италия
-3318 3318 52 Италия,Аоста
-3278 3278 52 Италия,Беллариа
-906 906 52 Италия,Болонья
-894 894 52 Италия,Брешиа
-895 895 52 Италия,Венеция
-905 905 52 Италия,Верона
-896 896 52 Италия,Генуя
-897 897 52 Италия,Лекко
-3369 3369 52 Италия,Ливорно
-3327 3327 52 Италия,Марсала
-898 898 52 Италия,Милан
-899 899 52 Италия,Модена
-907 907 52 Италия,Неаполь
-908 908 52 Италия,Перуджа
-900 900 52 Италия,Пиза
-901 901 52 Италия,Рим
-3368 3368 52 Италия,Сан-Ремо
-3384 3384 52 Италия,Сиракуза
-3252 3252 52 Италия,Терамо
-902 902 52 Италия,Триест
-903 903 52 Италия,Турин
-3130 3130 52 Италия,Фано
-904 904 52 Италия,Флоренция
-2521 2521 52 Италия,Другое
-53 0 53 Латвия
-2939 2939 53 Латвия,Айзкраукле
-3054 3054 53 Латвия,Валка
-909 909 53 Латвия,Даугавпилс
-2934 2934 53 Латвия,Екабпилс
-913 913 53 Латвия,Елгава
-2935 2935 53 Латвия,Кокнесе
-912 912 53 Латвия,Лиепая
-2905 2905 53 Латвия,Резекне
-911 911 53 Латвия,Рига
-2936 2936 53 Латвия,Саласпилс
-2937 2937 53 Латвия,Смилтене
-910 910 53 Латвия,Юрмала
-2520 2520 53 Латвия,Другое
-54 0 54 Литва
-914 914 54 Литва,Вильнюс
-915 915 54 Литва,Висагинас
-916 916 54 Литва,Каунас
-918 918 54 Литва,Клайпеда
-919 919 54 Литва,Паланга
-3173 3173 54 Литва,Пеневежис
-917 917 54 Литва,Шауляй
-2519 2519 54 Литва,Другое
-55 0 55 Лихтенштейн
-920 920 55 Лихтенштейн,Вадуц
-2518 2518 55 Лихтенштейн,Другое
-56 0 56 Люксембург
-3376 3376 56 Люксембург,Бетцдорф
-921 921 56 Люксембург,Люксембург
-2517 2517 56 Люксембург,Другое
-57 0 57 Македония
-3142 3142 57 Македония,Битола
-922 922 57 Македония,Скопье
-2516 2516 57 Македония,Другое
-58 0 58 Мальта
-923 923 58 Мальта,Валлетта
-3154 3154 58 Мальта,Мзида
-924 924 58 Мальта,Слима
-2515 2515 58 Мальта,Другое
-59 0 59 Молдавия
-925 925 59 Молдавия,Бельцы
-926 926 59 Молдавия,Бендеры
-3234 3234 59 Молдавия,Дубоссары
-3275 3275 59 Молдавия,Кахул
-927 927 59 Молдавия,Кишинев
-3321 3321 59 Молдавия,Резина
-928 928 59 Молдавия,Рыбница
-929 929 59 Молдавия,Тирасполь
-3281 3281 59 Молдавия,Чадыр-Лунга
-2514 2514 59 Молдавия,Другое
-36 0 36 Монако
-930 930 36 Монако,Монте-Карло
-2513 2513 36 Монако,Другое
-60 0 60 Нидерланды
-931 931 60 Нидерланды,Амстердам
-933 933 60 Нидерланды,Бреда
-932 932 60 Нидерланды,Гаага
-934 934 60 Нидерланды,Гауда
-935 935 60 Нидерланды,Делфт
-2977 2977 60 Нидерланды,Донген
-3030 3030 60 Нидерланды,Зволле
-3091 3091 60 Нидерланды,Ниймеген
-936 936 60 Нидерланды,Роттердам
-937 937 60 Нидерланды,Утрехт
-3044 3044 60 Нидерланды,Эйндховен
-3380 3380 60 Нидерланды,Эншеде
-2512 2512 60 Нидерланды,Другое
-61 0 61 Норвегия
-3190 3190 61 Норвегия,Кристиансанд
-2857 2857 61 Норвегия,Лиллехаммер
-938 938 61 Норвегия,Осло
-3355 3355 61 Норвегия,Ставангер
-939 939 61 Норвегия,Тронхейм
-2511 2511 61 Норвегия,Другое
-3195 0 3195 Остров Мэн (Брит.)
-62 0 62 Польша
-940 940 62 Польша,Белосток
-941 941 62 Польша,Варшава
-3164 3164 62 Польша,Вроцлав
-942 942 62 Польша,Гданьск
-943 943 62 Польша,Гливице
-3237 3237 62 Польша,Закопане
-3165 3165 62 Польша,Зелена Гура
-944 944 62 Польша,Катовице
-945 945 62 Польша,Краков
-3008 3008 62 Польша,Лодзь
-3150 3150 62 Польша,Ольштын
-946 946 62 Польша,Познань
-947 947 62 Польша,Радом
-948 948 62 Польша,Сопот
-2958 2958 62 Польша,Тыхы
-2510 2510 62 Польша,Другое
-35 0 35 Португалия
-949 949 35 Португалия,Лиссабон
-950 950 35 Португалия,Порто
-2509 2509 35 Португалия,Другое
-63 0 63 Румыния
-952 952 63 Румыния,Брашов
-951 951 63 Румыния,Бухарест
-954 954 63 Румыния,Констанца
-955 955 63 Румыния,Плоешти
-953 953 63 Румыния,Яссы
-2508 2508 63 Румыния,Другое
-64 0 64 Сан-Марино
-956 956 64 Сан-Марино,Сан-Марино
-2507 2507 64 Сан-Марино,Другое
-74 0 74 Сербия и Черногория
-957 957 74 Сербия и Черногория,Белград
-960 960 74 Сербия и Черногория,Ниш
-958 958 74 Сербия и Черногория,Нови-Сад
-959 959 74 Сербия и Черногория,Сараево
-2506 2506 74 Сербия и Черногория,Другое
-65 0 65 Словакия
-961 961 65 Словакия,Братислава
-962 962 65 Словакия,Кошице
-3101 3101 65 Словакия,Липтов
-963 963 65 Словакия,Попрад
-964 964 65 Словакия,Прешов
-965 965 65 Словакия,Ружемберок
-966 966 65 Словакия,Тврдошин
-2505 2505 65 Словакия,Другое
-66 0 66 Словения
-968 968 66 Словения,Копар
-967 967 66 Словения,Любляна
-969 969 66 Словения,Марибор
-2504 2504 66 Словения,Другое
-67 0 67 Фарерские о-ва (Дания)
-970 970 67 Фарерские о-ва (Дания),Торсхавн
-2503 2503 67 Фарерские о-ва (Дания),Другое
-68 0 68 Финляндия
-2888 2888 68 Финляндия,Вантаа
-971 971 68 Финляндия,Васа
-979 979 68 Финляндия,Котка
-972 972 68 Финляндия,Коувола
-980 980 68 Финляндия,Лахти
-973 973 68 Финляндия,Оулу
-3375 3375 68 Финляндия,Риихимяки
-3159 3159 68 Финляндия,Руовеси
-974 974 68 Финляндия,Тампере
-975 975 68 Финляндия,Турку
-976 976 68 Финляндия,Хельсинки
-977 977 68 Финляндия,Эспо
-978 978 68 Финляндия,Ювяскюля
-2502 2502 68 Финляндия,Другое
-37 0 37 Франция
-996 996 37 Франция,Авиньон
-983 983 37 Франция,Бержерак
-997 997 37 Франция,Блуа
-984 984 37 Франция,Бордо
-998 998 37 Франция,Дижон
-987 987 37 Франция,Канн
-988 988 37 Франция,Кастр
-993 993 37 Франция,Клермон-Ферран
-3037 3037 37 Франция,Лилль
-989 989 37 Франция,Лион
-985 985 37 Франция,Марсель
-991 991 37 Франция,Мец
-3161 3161 37 Франция,Мобеж
-990 990 37 Франция,Нанси
-994 994 37 Франция,Нант
-995 995 37 Франция,Ницца
-999 999 37 Франция,Орлеан
-981 981 37 Франция,Париж
-3374 3374 37 Франция,Перпиньян
-992 992 37 Франция,Руан
-982 982 37 Франция,Страсбург
-986 986 37 Франция,Тулуза
-3314 3314 37 Франция,Шамбери
-2501 2501 37 Франция,Другое
-69 0 69 Хорватия
-1003 1003 69 Хорватия,Дубровник
-1000 1000 69 Хорватия,Загреб
-1001 1001 69 Хорватия,Задар
-1004 1004 69 Хорватия,Риека
-1002 1002 69 Хорватия,Сплит
-2500 2500 69 Хорватия,Другое
-70 0 70 Чехия
-1005 1005 70 Чехия,Брно
-3291 3291 70 Чехия,Гавличкув-Брод
-1007 1007 70 Чехия,Градец-Кралове
-1008 1008 70 Чехия,Карлови-Вари
-3019 3019 70 Чехия,Кладрубы
-1010 1010 70 Чехия,Лоуни
-1009 1009 70 Чехия,Острава
-1015 1015 70 Чехия,Пльзень
-3105 3105 70 Чехия,Правчицка Брана
-1006 1006 70 Чехия,Прага
-3246 3246 70 Чехия,Тачов
-1011 1011 70 Чехия,Тршебич
-1012 1012 70 Чехия,Усти-над-Лабем
-1014 1014 70 Чехия,Ческе-Будеевице
-1013 1013 70 Чехия,Яблонец-над-Нисоу
-2499 2499 70 Чехия,Другое
-71 0 71 Швейцария
-1016 1016 71 Швейцария,Арау
-1019 1019 71 Швейцария,Баден
-1017 1017 71 Швейцария,Базель
-1018 1018 71 Швейцария,Берн
-1020 1020 71 Швейцария,Биль
-1021 1021 71 Швейцария,Винтертур
-1022 1022 71 Швейцария,Давос
-3189 3189 71 Швейцария,Делемонт
-1023 1023 71 Швейцария,Женева
-1024 1024 71 Швейцария,Золотурн
-1025 1025 71 Швейцария,Лозанна
-1026 1026 71 Швейцария,Локарно
-1027 1027 71 Швейцария,Лугано
-1028 1028 71 Швейцария,Люцерн
-1029 1029 71 Швейцария,Монтре
-1030 1030 71 Швейцария,Цюрих
-2498 2498 71 Швейцария,Другое
-72 0 72 Швеция
-2883 2883 72 Швеция,Арбога
-1031 1031 72 Швеция,Гетеборг
-1032 1032 72 Швеция,Кальмар
-1037 1037 72 Швеция,Лахольм
-1036 1036 72 Швеция,Лулео
-1042 1042 72 Швеция,Лунд
-1033 1033 72 Швеция,Мальме
-1034 1034 72 Швеция,Стокгольм
-1041 1041 72 Швеция,Умео
-1039 1039 72 Швеция,Фалун
-1043 1043 72 Швеция,Хельсинборг
-1040 1040 72 Швеция,Хернесанд
-1038 1038 72 Швеция,Эстерсунд
-2497 2497 72 Швеция,Другое
-3196 0 3196 Шпицберген (Норв.)
-73 0 73 Эстония
-3013 3013 73 Эстония,Валга
-1044 1044 73 Эстония,Кейла
-1045 1045 73 Эстония,Кохтла-Ярве
-1046 1046 73 Эстония,Маарду
-1047 1047 73 Эстония,Мыйзакюла
-1048 1048 73 Эстония,Нарва
-1049 1049 73 Эстония,Пярну
-1050 1050 73 Эстония,Раквере
-1051 1051 73 Эстония,Силламяэ
-1052 1052 73 Эстония,Таллин
-1053 1053 73 Эстония,Тарту
-1054 1054 73 Эстония,Хаапсалу
-2496 2496 73 Эстония,Другое
diff --git a/protocols/MRA/proto_mra/CMakeLists.txt b/protocols/MRA/proto_mra/CMakeLists.txt
deleted file mode 100644
index f73e541f0b..0000000000
--- a/protocols/MRA/proto_mra/CMakeLists.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-set(TARGET Proto_MRA)
-include(${CMAKE_SOURCE_DIR}/cmake/icons.cmake) \ No newline at end of file
diff --git a/protocols/MRA/proto_mra/Proto_MRA.vcxproj b/protocols/MRA/proto_mra/Proto_MRA.vcxproj
deleted file mode 100644
index bff849c08d..0000000000
--- a/protocols/MRA/proto_mra/Proto_MRA.vcxproj
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup Label="ProjectConfigurations">
- <ProjectConfiguration Include="Debug|Win32">
- <Configuration>Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Debug|x64">
- <Configuration>Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|Win32">
- <Configuration>Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|x64">
- <Configuration>Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- </ItemGroup>
- <PropertyGroup Label="Globals">
- <ProjectName>Proto_MRA</ProjectName>
- <ProjectGuid>{38BF6F63-58E7-442D-A7E8-B4BD57D224E2}</ProjectGuid>
- </PropertyGroup>
- <ImportGroup Label="PropertySheets">
- <Import Project="$(ProjectDir)..\..\..\build\vc.common\icons.props" />
- </ImportGroup>
-</Project> \ No newline at end of file
diff --git a/protocols/MRA/proto_mra/Proto_MRA.vcxproj.filters b/protocols/MRA/proto_mra/Proto_MRA.vcxproj.filters
deleted file mode 100644
index e39f86d5d6..0000000000
--- a/protocols/MRA/proto_mra/Proto_MRA.vcxproj.filters
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$(ProjectDir)..\..\..\build\vc.common\common.filters" />
-</Project> \ No newline at end of file
diff --git a/protocols/MRA/proto_mra/res/Away.ico b/protocols/MRA/proto_mra/res/Away.ico
deleted file mode 100644
index 31a37341e4..0000000000
--- a/protocols/MRA/proto_mra/res/Away.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/proto_mra/res/DND.ico b/protocols/MRA/proto_mra/res/DND.ico
deleted file mode 100644
index 1c7b1d4d37..0000000000
--- a/protocols/MRA/proto_mra/res/DND.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/proto_mra/res/FFC.ico b/protocols/MRA/proto_mra/res/FFC.ico
deleted file mode 100644
index 147eacf251..0000000000
--- a/protocols/MRA/proto_mra/res/FFC.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/proto_mra/res/Invisible.ico b/protocols/MRA/proto_mra/res/Invisible.ico
deleted file mode 100644
index 10ea597f21..0000000000
--- a/protocols/MRA/proto_mra/res/Invisible.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/proto_mra/res/Mobile.ico b/protocols/MRA/proto_mra/res/Mobile.ico
deleted file mode 100644
index 7d6a716288..0000000000
--- a/protocols/MRA/proto_mra/res/Mobile.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/proto_mra/res/Offline.ico b/protocols/MRA/proto_mra/res/Offline.ico
deleted file mode 100644
index ec4af077db..0000000000
--- a/protocols/MRA/proto_mra/res/Offline.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/proto_mra/res/Online.ico b/protocols/MRA/proto_mra/res/Online.ico
deleted file mode 100644
index 41f825ad3b..0000000000
--- a/protocols/MRA/proto_mra/res/Online.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/proto_mra/res/Proto_MRA.rc b/protocols/MRA/proto_mra/res/Proto_MRA.rc
deleted file mode 100644
index 966ce0ddaf..0000000000
--- a/protocols/MRA/proto_mra/res/Proto_MRA.rc
+++ /dev/null
@@ -1,75 +0,0 @@
-// Microsoft Visual C++ generated resource script.
-//
-#include "..\src\resource.h"
-
-#define APSTUDIO_READONLY_SYMBOLS
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 2 resource.
-//
-#include "afxres.h"
-
-/////////////////////////////////////////////////////////////////////////////
-#undef APSTUDIO_READONLY_SYMBOLS
-
-/////////////////////////////////////////////////////////////////////////////
-// Russian (Russia) resources
-
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_RUS)
-LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT
-
-#ifdef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// TEXTINCLUDE
-//
-
-1 TEXTINCLUDE
-BEGIN
- "..\\src\\resource.h\0"
-END
-
-2 TEXTINCLUDE
-BEGIN
- "#include ""afxres.h""\r\n"
- "\0"
-END
-
-3 TEXTINCLUDE
-BEGIN
- "\r\n"
- "\0"
-END
-
-#endif // APSTUDIO_INVOKED
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Icon
-//
-
-// Icon with lowest ID value placed first to ensure application icon
-// remains consistent on all systems.
-IDI_ICON1 ICON "Offline.ico"
-IDI_ICON2 ICON "Online.ico"
-IDI_ICON3 ICON "Away.ico"
-IDI_ICON4 ICON "Invisible.ico"
-IDI_ICON5 ICON "DND.ico"
-IDI_ICON6 ICON "FFC.ico"
-IDI_ICON7 ICON "Mobile.ico"
-#endif // Russian (Russia) resources
-/////////////////////////////////////////////////////////////////////////////
-
-
-
-#ifndef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 3 resource.
-//
-
-
-/////////////////////////////////////////////////////////////////////////////
-#endif // not APSTUDIO_INVOKED
-
diff --git a/protocols/MRA/proto_mra/src/resource.h b/protocols/MRA/proto_mra/src/resource.h
deleted file mode 100644
index fc38bff6ce..0000000000
--- a/protocols/MRA/proto_mra/src/resource.h
+++ /dev/null
@@ -1,22 +0,0 @@
-//{{NO_DEPENDENCIES}}
-// Microsoft Visual C++ generated include file.
-// Used by Proto_MRA.rc
-//
-#define IDI_ICON1 105
-#define IDI_ICON2 104
-#define IDI_ICON3 128
-#define IDI_ICON4 130
-#define IDI_ICON5 158
-#define IDI_ICON6 129
-#define IDI_ICON7 1002
-
-// Next default values for new objects
-//
-#ifdef APSTUDIO_INVOKED
-#ifndef APSTUDIO_READONLY_SYMBOLS
-#define _APS_NEXT_RESOURCE_VALUE 109
-#define _APS_NEXT_COMMAND_VALUE 40001
-#define _APS_NEXT_CONTROL_VALUE 1001
-#define _APS_NEXT_SYMED_VALUE 101
-#endif
-#endif
diff --git a/protocols/MRA/res/Alarm.ico b/protocols/MRA/res/Alarm.ico
deleted file mode 100644
index e498efa7a2..0000000000
--- a/protocols/MRA/res/Alarm.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/res/AuthGrant.ico b/protocols/MRA/res/AuthGrant.ico
deleted file mode 100644
index 7227fc5097..0000000000
--- a/protocols/MRA/res/AuthGrant.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/res/AuthReguest.ico b/protocols/MRA/res/AuthReguest.ico
deleted file mode 100644
index 599fcce656..0000000000
--- a/protocols/MRA/res/AuthReguest.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/res/BlogStatus.ico b/protocols/MRA/res/BlogStatus.ico
deleted file mode 100644
index 018c7ba98d..0000000000
--- a/protocols/MRA/res/BlogStatus.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/res/Deleted.ico b/protocols/MRA/res/Deleted.ico
deleted file mode 100644
index a566cf9917..0000000000
--- a/protocols/MRA/res/Deleted.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/res/Info.ico b/protocols/MRA/res/Info.ico
deleted file mode 100644
index 564c84c896..0000000000
--- a/protocols/MRA/res/Info.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/res/Magent.ico b/protocols/MRA/res/Magent.ico
deleted file mode 100644
index 516f3b6070..0000000000
--- a/protocols/MRA/res/Magent.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/res/Mail.ico b/protocols/MRA/res/Mail.ico
deleted file mode 100644
index 25bedbfbb2..0000000000
--- a/protocols/MRA/res/Mail.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/res/MailNotify.ico b/protocols/MRA/res/MailNotify.ico
deleted file mode 100644
index 9e87d4bfcb..0000000000
--- a/protocols/MRA/res/MailNotify.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/res/Phone.ico b/protocols/MRA/res/Phone.ico
deleted file mode 100644
index c426ac0360..0000000000
--- a/protocols/MRA/res/Phone.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/res/Photo.ico b/protocols/MRA/res/Photo.ico
deleted file mode 100644
index 0928ed4fc3..0000000000
--- a/protocols/MRA/res/Photo.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/res/PostCards.ico b/protocols/MRA/res/PostCards.ico
deleted file mode 100644
index 3dc4e12d82..0000000000
--- a/protocols/MRA/res/PostCards.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/res/WebSearch.ico b/protocols/MRA/res/WebSearch.ico
deleted file mode 100644
index cb8700c440..0000000000
--- a/protocols/MRA/res/WebSearch.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/res/answers.ico b/protocols/MRA/res/answers.ico
deleted file mode 100644
index 635f7d052d..0000000000
--- a/protocols/MRA/res/answers.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/res/my world.ico b/protocols/MRA/res/my world.ico
deleted file mode 100644
index 04eada1e57..0000000000
--- a/protocols/MRA/res/my world.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/res/resource.rc b/protocols/MRA/res/resource.rc
deleted file mode 100644
index aa068ec25d..0000000000
--- a/protocols/MRA/res/resource.rc
+++ /dev/null
@@ -1,338 +0,0 @@
-// Microsoft Visual C++ generated resource script.
-//
-#include "..\src\resource.h"
-
-#define APSTUDIO_READONLY_SYMBOLS
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 2 resource.
-//
-#define APSTUDIO_HIDDEN_SYMBOLS
-#include "windows.h"
-#undef APSTUDIO_HIDDEN_SYMBOLS
-
-/////////////////////////////////////////////////////////////////////////////
-#undef APSTUDIO_READONLY_SYMBOLS
-
-/////////////////////////////////////////////////////////////////////////////
-// Neutral resources
-
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEU)
-LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
-#pragma code_page(1251)
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Icon
-//
-
-// Icon with lowest ID value placed first to ensure application icon
-// remains consistent on all systems.
-IDI_MRA ICON "Magent.ico"
-IDI_INBOX ICON "Mail.ico"
-IDI_PROFILE ICON "Info.ico"
-IDI_DELETED ICON "Deleted.ico"
-IDI_AUTHRUGUEST ICON "AuthReguest.ico"
-IDI_AUTHGRANT ICON "AuthGrant.ico"
-IDI_MAIL_NOTIFY ICON "MailNotify.ico"
-IDI_MRA_WEB_SEARCH ICON "WebSearch.ico"
-IDI_MRA_POSTCARD ICON "PostCards.ico"
-IDI_MRA_PHOTO ICON "Photo.ico"
-IDI_MRA_PHONE ICON "Phone.ico"
-IDI_BLOGSTATUS ICON "BlogStatus.ico"
-IDI_MRA_ALARM ICON "Alarm.ico"
-IDI_MRA_VIDEO ICON "video.ico"
-IDI_MRA_ANSWERS ICON "answers.ico"
-IDI_MRA_WORLD ICON "my world.ico"
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Dialog
-//
-
-IDD_MRAACCOUNT DIALOGEX 0, 0, 186, 134
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD
-EXSTYLE WS_EX_CONTROLPARENT
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-BEGIN
- LTEXT "E-mail:",IDC_STATIC,0,0,53,12
- EDITTEXT IDC_LOGIN,54,0,131,12,ES_AUTOHSCROLL
- LTEXT "Password:",IDC_STATIC,0,16,53,12
- EDITTEXT IDC_PASSWORD,54,16,131,12,ES_PASSWORD | ES_AUTOHSCROLL
- CONTROL "Create a new Mail.ru account",IDC_NEW_ACCOUNT_LINK,"Hyperlink",WS_TABSTOP,0,40,174,12
-END
-
-IDD_OPT_CONNECTIONS DIALOGEX 0, 0, 295, 230
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD
-EXSTYLE WS_EX_CONTROLPARENT
-FONT 8, "MS Shell Dlg", 0, 0, 0x1
-BEGIN
- GROUPBOX "Configuration",IDC_GROUPCONFIG,8,7,277,185
- RTEXT "Login Server:",IDC_STATIC,14,19,52,8
- EDITTEXT IDC_SERVER,72,17,140,12,ES_AUTOHSCROLL
- RTEXT "Port:",IDC_STATIC,14,34,52,8
- EDITTEXT IDC_SERVERPORT,72,33,33,12,ES_AUTOHSCROLL | ES_NUMBER
- LTEXT "(2042, 443, 110, 25)",IDC_STATIC,110,35,167,10
- PUSHBUTTON "Default",IDC_BUTTON_DEFAULT,217,17,60,13
- CONTROL "Automatically request authorization on logon",IDC_AUTO_AUTH_REQ_ON_LOGON,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,50,263,8
- CONTROL "Automatically add contacts to server list on logon",IDC_AUTO_ADD_CONTACTS_TO_SERVER,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,61,263,8
- CONTROL "Automatically grant authorization to users in contact list",IDC_AUTO_AUTH_GRAND_IN_CLIST,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,72,263,8
- CONTROL "Automatically grant authorization to new users",IDC_AUTO_AUTH_GRAND_NEW_USERS,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,83,263,8
- CONTROL "Automatic authorization on Mail.ru web services",IDC_AUTO_AUTH_ON_WEB_SVCS,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,94,263,8
- CONTROL "Notify me when a message delivery has failed",IDC_SLOWSEND,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,107,263,8
- CONTROL "Notify about new mail if increment",IDC_INCREMENTAL_NEW_MAIL_NOTIFY,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,118,263,8
- CONTROL "Notify about new mail tray icon",IDC_TRAYICON_NEW_MAIL_NOTIFY,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,129,263,8
- CONTROL "Click to Inbox",IDC_TRAYICON_NEW_MAIL_NOTIFY_CLICK_TO_INBOX,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,24,140,253,8
- CONTROL "Show received formatted text (receive RTF)",IDC_RTF_RECEIVE_ENABLE,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,151,263,8
- CONTROL "Send formatted text (send RTF)",IDC_RTF_SEND_ENABLE,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,162,263,8
- LTEXT "Background color",IDC_STATIC,112,175,157,8
- PUSHBUTTON "Font",IDC_BUTTON_FONT,23,173,42,12
- CONTROL "",IDC_RTF_BGCOLOUR,"ColourPicker",WS_TABSTOP,70,173,38,12
-END
-
-IDD_MRAADVANCEDSEARCH DIALOGEX 0, 0, 220, 235
-STYLE DS_SETFONT | DS_3DLOOK | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_BORDER
-EXSTYLE WS_EX_CONTROLPARENT
-FONT 8, "MS Shell Dlg", 0, 0, 0x1
-BEGIN
- GROUPBOX "Summary",IDC_SUMMARYGROUP,8,5,205,147
- LTEXT "Nickname:",IDC_STATIC,15,20,50,8
- EDITTEXT IDC_NICK,65,18,139,12,ES_AUTOHSCROLL
- LTEXT "First name:",IDC_STATIC,15,35,50,8
- EDITTEXT IDC_FIRSTNAME,65,33,139,12,ES_AUTOHSCROLL
- LTEXT "Last name:",IDC_STATIC,15,50,50,8
- EDITTEXT IDC_LASTNAME,65,48,139,12,ES_AUTOHSCROLL
- LTEXT "E-mail:",IDC_STATIC,15,65,50,8
- EDITTEXT IDC_EMAIL_USER,65,63,69,12,ES_AUTOHSCROLL
- CTEXT "@",IDC_STATIC,137,64,9,9
- COMBOBOX IDC_EMAIL_DOMAIN,147,63,57,71,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
- LTEXT "Gender:",IDC_STATIC,15,87,50,8
- COMBOBOX IDC_GENDER,65,85,139,47,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP
- LTEXT "Age:",IDC_STATIC,15,102,50,8
- RTEXT "from:",IDC_STATIC,65,102,26,9
- COMBOBOX IDC_AGERANGE_FROM,94,100,37,90,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
- RTEXT "to:",IDC_STATIC,134,102,30,9
- COMBOBOX IDC_AGERANGE_TO,167,100,37,90,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
- LTEXT "Birthday:",IDC_STATIC,15,118,50,8
- COMBOBOX IDC_BIRTHDAY_DAY,65,117,29,204,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
- COMBOBOX IDC_BIRTHDAY_MONTH,102,117,59,90,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
- COMBOBOX IDC_BIRTHDAY_YEAR,167,117,37,188,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
- LTEXT "Zodiac:",IDC_STATIC,15,134,50,8
- COMBOBOX IDC_ZODIAK,65,133,139,47,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
- GROUPBOX "Location",IDC_LOCATIONGROUP,7,157,207,60
- LTEXT "Country:",IDC_STATIC,14,170,50,8
- COMBOBOX IDC_COUNTRY,64,167,143,172,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP
- LTEXT "State:",IDC_STATIC,14,184,50,8
- COMBOBOX IDC_STATE,64,183,143,172,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
- CONTROL "Search online users only",IDC_ONLINEONLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,222,143,8
- LTEXT "City:",IDC_STATIC,14,200,50,8
- COMBOBOX IDC_CITY,64,199,143,172,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
- CONTROL "Remember",IDC_CHK_REMEMBER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,157,222,56,8
-END
-
-IDD_OPT_AVATRS DIALOGEX 0, 0, 295, 195
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD
-EXSTYLE WS_EX_CONTROLPARENT
-FONT 8, "MS Shell Dlg", 0, 0, 0x1
-BEGIN
- GROUPBOX "Configuration",IDC_GROUPCONFIG,8,6,277,110
- CONTROL "Enable avatars support (loading)",IDC_ENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,18,259,9
- RTEXT "Server:",IDC_STATIC,16,31,53,8
- EDITTEXT IDC_SERVER,72,29,140,12,ES_AUTOHSCROLL
- RTEXT "Port:",IDC_STATIC,16,46,53,8
- EDITTEXT IDC_SERVERPORT,72,44,34,12,ES_AUTOHSCROLL | ES_NUMBER
- LTEXT "(80, 443, 2041)",IDC_STATIC,110,46,103,10
- PUSHBUTTON "Default",IDC_BUTTON_DEFAULT,216,29,60,13
- EDITTEXT IDC_UPD_CHECK_INTERVAL,14,71,34,12,ES_AUTOHSCROLL | ES_NUMBER
- LTEXT "Updates check interval, min",IDC_STATIC,51,72,222,8
- CONTROL "Return absolute path",IDC_RETURN_ABC_PATH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,89,259,9
- CONTROL "Delete avatar file with contact",IDC_DELETE_AVT_ON_CONTACT_DELETE,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,100,259,9
- CONTROL "Use keep-alive connections",IDC_USE_KEEPALIVE_CONN,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,72,59,201,9
-END
-
-IDD_OPT_FILES DIALOGEX 0, 0, 295, 160
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD
-EXSTYLE WS_EX_CONTROLPARENT
-FONT 8, "MS Shell Dlg", 0, 0, 0x1
-BEGIN
- GROUPBOX "Files exchange",IDC_GROUPCONFIG2,8,7,277,143
- CONTROL "No out connection on send",IDC_FILE_SEND_NOOUTCONNECTIONONSEND,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,25,28,244,8
- CONTROL "No out connection on receive",IDC_FILE_SEND_NOOUTCONNECTIONONRECEIVE,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,25,39,244,8
- CONTROL "Out connections: ignore additional ports (443, 2041)",IDC_FILE_SEND_IGNORYADDITIONALPORTS,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,25,50,244,8
- CONTROL "Hide my IP addresses",IDC_FILE_SEND_HIDE_MY_ADDRESSES,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,25,61,244,8
- CONTROL "Add extra address",IDC_FILE_SEND_ADD_EXTRA_ADDRESS,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,25,72,244,8
- RTEXT "Your host (or router):",IDC_STATIC,13,84,92,8
- EDITTEXT IDC_FILE_SEND_EXTRA_ADDRESS,108,83,170,12,ES_AUTOHSCROLL
- LTEXT "File send block size:",IDC_STATIC,14,112,263,8
- EDITTEXT IDC_FILE_SEND_BLOCK_SIZE,26,123,52,12,ES_AUTOHSCROLL | ES_NUMBER
- LTEXT "512 - 65536 bytes",IDC_STATIC,82,125,97,10
- CONTROL "Enable direct connections",IDC_FILE_SEND_ENABLE_DIRECT_CONN,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,18,263,8
- CONTROL "Enable MRIM proxy connections",IDC_FILE_SEND_ENABLE_MRIMPROXY_CONS,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,98,263,8
-END
-
-IDD_OPT_ACCOUNT DIALOGEX 0, 0, 295, 149
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD
-EXSTYLE WS_EX_CONTROLPARENT
-FONT 8, "MS Shell Dlg", 0, 0, 0x1
-BEGIN
- GROUPBOX "Mail.ru Agent",IDC_GROUPMAIN,9,5,276,98,WS_GROUP
- RTEXT "Full e-mail:",IDC_STATIC,14,22,52,8
- EDITTEXT IDC_LOGIN,72,18,100,12,ES_AUTOHSCROLL
- LTEXT "Example: Petrov_Ivan@mail.ru",IDC_STATIC,175,19,104,10
- RTEXT "Password:",IDC_STATIC,14,37,52,8
- EDITTEXT IDC_PASSWORD,72,33,100,12,ES_PASSWORD | ES_AUTOHSCROLL
- CONTROL "Create a new Mail.ru account using the Mail.ru website",IDC_NEW_ACCOUNT_LINK,
- "Hyperlink",WS_TABSTOP,18,72,258,9
- CONTROL "Retrieve a lost password",IDC_LOOKUPLINK,"Hyperlink",WS_TABSTOP,18,85,258,9
- LTEXT "Leave empty if you don't want to change password",IDC_STATIC,72,48,212,8
-END
-
-IDD_OPT_POPUPS DIALOGEX 0, 0, 295, 150
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD
-EXSTYLE WS_EX_CONTROLPARENT
-FONT 8, "MS Shell Dlg", 0, 0, 0x1
-BEGIN
- RTEXT "Popup type",IDC_STATIC,9,11,52,8
- COMBOBOX IDC_COMBO_POPUP_TYPE,65,9,220,97,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
- GROUPBOX "Popup settings",IDC_GROUPMAIN,9,25,276,90,WS_GROUP
- CONTROL "Enable",IDC_CHK_ENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,38,260,10
- CONTROL "&Use Windows colors",IDC_CHK_USE_WIN_COLORS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,29,50,246,10
- RTEXT "Back Color",IDC_STATIC,29,65,57,8
- CONTROL "",IDC_POPUP_BACKCOLOR,"ColourPicker",WS_TABSTOP,92,65,38,10
- RTEXT "Text Color",IDC_STATIC,29,80,57,8
- CONTROL "",IDC_POPUP_TEXTCOLOR,"ColourPicker",WS_TABSTOP,92,80,38,10
- RTEXT "Timeout",IDC_STATIC,29,96,57,8
- EDITTEXT IDC_POPUP_TIMEOUT,92,94,38,12,ES_AUTOHSCROLL | ES_NUMBER
- PUSHBUTTON "Previe&w",IDC_PREVIEW,237,119,46,12
-END
-
-IDD_SETXSTATUS DIALOGEX 0, 0, 189, 98
-STYLE DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-EXSTYLE WS_EX_CONTROLPARENT
-CAPTION "Custom Status ""%s"" Details"
-FONT 8, "MS Shell Dlg", 0, 0, 0x1
-BEGIN
- DEFPUSHBUTTON "Closing in %d",IDOK,49,79,91,14
- LTEXT "Title:",IDC_STATIC,5,0,179,8
- EDITTEXT IDC_XTITLE,5,8,179,13
- LTEXT "Message:",IDC_STATIC,5,22,179,8
- EDITTEXT IDC_XMSG,5,31,179,43,ES_MULTILINE | ES_AUTOVSCROLL | ES_WANTRETURN | WS_VSCROLL
-END
-
-IDD_MINIBLOG DIALOGEX 0, 0, 256, 134
-STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
-BEGIN
- DEFPUSHBUTTON "OK",IDOK,76,113,50,14,WS_DISABLED
- PUSHBUTTON "Cancel",IDCANCEL,130,113,50,14
- EDITTEXT IDC_USER_BLOG_STATUS_MSG,7,19,242,38,ES_MULTILINE | ES_READONLY
- EDITTEXT IDC_MSG_TO_SEND,7,61,242,38,ES_MULTILINE
- CONTROL "Notify",IDC_CHK_NOTIFY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,102,125,9
- LTEXT "Written:",IDC_STATIC_WRITED_TIME,7,7,242,11
- LTEXT "0/500",IDC_STATIC_CHARS_COUNTER,211,103,38,11,0,WS_EX_RIGHT
-END
-
-IDD_DIALOG_SELECT_EMAIL DIALOGEX 0, 0, 177, 169
-STYLE DS_SETFONT | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION
-CAPTION "Select e-mail"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-BEGIN
- LISTBOX IDC_LIST_EMAILS,7,7,163,133,LBS_SORT | LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | NOT WS_BORDER | WS_VSCROLL | WS_TABSTOP,WS_EX_STATICEDGE
- DEFPUSHBUTTON "OK",IDOK,39,147,51,15
- PUSHBUTTON "Cancel",IDCANCEL,93,147,51,15
-END
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// DESIGNINFO
-//
-
-#ifdef APSTUDIO_INVOKED
-GUIDELINES DESIGNINFO
-BEGIN
- IDD_OPT_CONNECTIONS, DIALOG
- BEGIN
- END
-
- IDD_MRAADVANCEDSEARCH, DIALOG
- BEGIN
- BOTTOMMARGIN, 230
- END
-
- IDD_OPT_FILES, DIALOG
- BEGIN
- BOTTOMMARGIN, 150
- END
-
- IDD_OPT_ACCOUNT, DIALOG
- BEGIN
- END
-
- IDD_MINIBLOG, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 249
- TOPMARGIN, 7
- BOTTOMMARGIN, 127
- END
-
- IDD_DIALOG_SELECT_EMAIL, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 170
- TOPMARGIN, 7
- BOTTOMMARGIN, 162
- END
-END
-#endif // APSTUDIO_INVOKED
-
-
-#ifdef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// TEXTINCLUDE
-//
-
-1 TEXTINCLUDE
-BEGIN
- "..\\src\\resource.h\0"
-END
-
-2 TEXTINCLUDE
-BEGIN
- "#define APSTUDIO_HIDDEN_SYMBOLS\r\n"
- "#include ""windows.h""\r\n"
- "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n"
- "\0"
-END
-
-3 TEXTINCLUDE
-BEGIN
- "\r\n"
- "\0"
-END
-
-#endif // APSTUDIO_INVOKED
-
-#endif
-/////////////////////////////////////////////////////////////////////////////
diff --git a/protocols/MRA/res/version.rc b/protocols/MRA/res/version.rc
deleted file mode 100644
index 5a5ddd63ed..0000000000
--- a/protocols/MRA/res/version.rc
+++ /dev/null
@@ -1,9 +0,0 @@
-// Microsoft Visual C++ generated resource script.
-//
-#ifdef APSTUDIO_INVOKED
-#error this file is not editable by Microsoft Visual C++
-#endif //APSTUDIO_INVOKED
-
-#include "..\src\version.h"
-
-#include "..\..\build\Version.rc"
diff --git a/protocols/MRA/res/video.ico b/protocols/MRA/res/video.ico
deleted file mode 100644
index 6041293d82..0000000000
--- a/protocols/MRA/res/video.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/src/Mra.cpp b/protocols/MRA/src/Mra.cpp
deleted file mode 100644
index f2ab1ca447..0000000000
--- a/protocols/MRA/src/Mra.cpp
+++ /dev/null
@@ -1,60 +0,0 @@
-#include "stdafx.h"
-
-CMPlugin g_plugin;
-
-HMODULE g_hDLLXStatusIcons;
-HICON g_hMainIcon;
-
-bool g_bChatExist;
-
-size_t g_dwMirWorkDirPathLen;
-WCHAR g_szMirWorkDirPath[MAX_FILEPATH];
-
-void IconsLoad();
-
-/////////////////////////////////////////////////////////////////////////////////////////
-
-PLUGININFOEX pluginInfoEx = {
- sizeof(PLUGININFOEX),
- PROTOCOL_DISPLAY_NAME_ORIGA,
- PLUGIN_MAKE_VERSION(__MAJOR_VERSION, __MINOR_VERSION, __RELEASE_NUM, __BUILD_NUM),
- __DESCRIPTION,
- __AUTHOR,
- __COPYRIGHT,
- __AUTHORWEB,
- UNICODE_AWARE,
- // {E7C48BAB-8ACE-4CB3-8446-D4B73481F497}
- { 0xe7c48bab, 0x8ace, 0x4cb3, { 0x84, 0x46, 0xd4, 0xb7, 0x34, 0x81, 0xf4, 0x97 } }
-};
-
-CMPlugin::CMPlugin() :
- ACCPROTOPLUGIN<CMraProto>("MRA", pluginInfoEx)
-{
- SetUniqueId("e-mail");
-}
-
-/////////////////////////////////////////////////////////////////////////////////////////
-
-extern "C" __declspec(dllexport) const MUUID MirandaInterfaces[] = { MIID_PROTOCOL, MIID_LAST };
-
-///////////////////////////////////////////////////////////////////////////////
-
-int CMPlugin::Load()
-{
- IconsLoad();
- InitXStatusIcons();
- return 0;
-}
-
-/////////////////////////////////////////////////////////////////////////////////////////
-
-int CMPlugin::Unload()
-{
- DestroyXStatusIcons();
- if (g_hDLLXStatusIcons) {
- FreeLibrary(g_hDLLXStatusIcons);
- g_hDLLXStatusIcons = nullptr;
- }
-
- return 0;
-}
diff --git a/protocols/MRA/src/MraAdvancedSearch.cpp b/protocols/MRA/src/MraAdvancedSearch.cpp
deleted file mode 100644
index 7377f97d1b..0000000000
--- a/protocols/MRA/src/MraAdvancedSearch.cpp
+++ /dev/null
@@ -1,313 +0,0 @@
-#include "stdafx.h"
-#include "proto.h"
-#include "MraPlaces.h"
-
-
-
-struct FieldNames
-{
- BYTE dwCode;
- LPWSTR lpszText;
-};
-
-static const FieldNames GenderField[] =
-{
- { 1, LPGENW("Male") },
- { 2, LPGENW("Female") },
- { 0, nullptr }
-};
-
-static const FieldNames MonthField[] =
-{
- { 1, LPGENW("January") },
- { 2, LPGENW("February") },
- { 3, LPGENW("March") },
- { 4, LPGENW("April") },
- { 5, LPGENW("May") },
- { 6, LPGENW("June") },
- { 7, LPGENW("July") },
- { 8, LPGENW("August") },
- { 9, LPGENW("September") },
- { 10, LPGENW("October") },
- { 11, LPGENW("November") },
- { 12, LPGENW("December") },
- { 0, nullptr }
-};
-
-static const FieldNames ZodiakField[] =
-{
- { 1, LPGENW("Aries") },
- { 2, LPGENW("Taurus") },
- { 3, LPGENW("Gemini") },
- { 4, LPGENW("Cancer") },
- { 5, LPGENW("Leo") },
- { 6, LPGENW("Virgo") },
- { 7, LPGENW("Libra") },
- { 8, LPGENW("Scorpio") },
- { 9, LPGENW("Sagittarius") },
- { 10, LPGENW("Capricorn") },
- { 11, LPGENW("Aquarius") },
- { 12, LPGENW("Pisces") },
- { 0, nullptr }
-};
-
-void ResetComboBox(HWND hWndCombo)
-{
- SendMessage(hWndCombo, CB_RESETCONTENT, 0, 0);
- DWORD dwItem = SendMessage(hWndCombo, CB_ADDSTRING, 0, (LPARAM)L"");
- SendMessage(hWndCombo, CB_SETITEMDATA, dwItem, 0);
- SendMessage(hWndCombo, CB_SETCURSEL, dwItem, 0);
-}
-
-
-void InitComboBox(HWND hWndCombo, FieldNames *lpNames)
-{
- ResetComboBox(hWndCombo);
-
- for (size_t i = 0; lpNames[i].lpszText; i++) {
- DWORD dwItem = SendMessage(hWndCombo, CB_ADDSTRING, 0, (LPARAM)TranslateW(lpNames[i].lpszText));
- SendMessage(hWndCombo, CB_SETITEMDATA, dwItem, lpNames[i].dwCode);
- }
-}
-
-
-void InitComboBoxNumders(HWND hWndCombo, DWORD dwStart, DWORD dwEnd)
-{
- ResetComboBox(hWndCombo);
-
- for (DWORD i = dwStart; i <= dwEnd; i++) {
- wchar_t szBuff[MAX_PATH];
- mir_snwprintf(szBuff, L"%lu", i);
- DWORD dwItem = SendMessage(hWndCombo, CB_ADDSTRING, 0, (LPARAM)szBuff);
- SendMessage(hWndCombo, CB_SETITEMDATA, dwItem, i);
- }
-}
-
-
-INT_PTR CALLBACK AdvancedSearchDlgProc(HWND hWndDlg, UINT message, WPARAM wParam, LPARAM lParam)
-{
- CMraProto *ppro = (CMraProto*)GetWindowLongPtr(hWndDlg, GWLP_USERDATA);
-
- switch (message) {
- case WM_INITDIALOG:
- SetWindowLongPtr(hWndDlg, GWLP_USERDATA, lParam);
- {
- DWORD dwItem;
- WCHAR wszBuff[MAX_PATH];
- SYSTEMTIME stTime;
- GetLocalTime(&stTime);
-
- ppro = (CMraProto*)lParam;
-
- HWND hWndCombo = GetDlgItem(hWndDlg, IDC_EMAIL_DOMAIN);
- ResetComboBox(hWndCombo);
- for (size_t i = 0; lpcszMailRuDomains[i]; i++) {
- MultiByteToWideChar(MRA_CODE_PAGE, 0, lpcszMailRuDomains[i], -1, wszBuff, _countof(wszBuff));
- SendMessage(hWndCombo, CB_ADDSTRING, 0, (LPARAM)wszBuff);
- }
-
- InitComboBox(GetDlgItem(hWndDlg, IDC_GENDER), (FieldNames*)GenderField);
- InitComboBoxNumders(GetDlgItem(hWndDlg, IDC_AGERANGE_FROM), 1, 100);
- InitComboBoxNumders(GetDlgItem(hWndDlg, IDC_AGERANGE_TO), 1, 100);
- InitComboBoxNumders(GetDlgItem(hWndDlg, IDC_BIRTHDAY_DAY), 1, 31);
- InitComboBox(GetDlgItem(hWndDlg, IDC_BIRTHDAY_MONTH), (FieldNames*)MonthField);
- InitComboBoxNumders(GetDlgItem(hWndDlg, IDC_BIRTHDAY_YEAR), 1900, (DWORD)stTime.wYear);
- InitComboBox(GetDlgItem(hWndDlg, IDC_ZODIAK), (FieldNames*)ZodiakField);
-
- hWndCombo = GetDlgItem(hWndDlg, IDC_COUNTRY);
- ResetComboBox(hWndCombo);
- for (size_t i = 0; mrapPlaces[i].lpszData; i++) {
- if (mrapPlaces[i].dwCityID == 0 && mrapPlaces[i].dwPlaceID == 0) {
- dwItem = SendMessage(hWndCombo, CB_ADDSTRING, 0, (LPARAM)mrapPlaces[i].lpszData);
- SendMessage(hWndCombo, CB_SETITEMDATA, dwItem, mrapPlaces[i].dwCountryID);
- }
- }
-
- ResetComboBox(GetDlgItem(hWndDlg, IDC_CITY));
-
- if (ppro->getByte("AdvancedSearchRemember", MRA_DEFAULT_SEARCH_REMEMBER)) {
- SendDlgItemMessage(hWndDlg, IDC_GENDER, CB_SETCURSEL, ppro->getWord("AdvancedSearchGender", 0), 0);
- SendDlgItemMessage(hWndDlg, IDC_AGERANGE_FROM, CB_SETCURSEL, ppro->getWord("AdvancedSearchAgeFrom", 0), 0);
- SendDlgItemMessage(hWndDlg, IDC_AGERANGE_TO, CB_SETCURSEL, ppro->getWord("AdvancedSearchAgeTo", 0), 0);
- SendDlgItemMessage(hWndDlg, IDC_BIRTHDAY_MONTH, CB_SETCURSEL, ppro->getWord("AdvancedSearchBirthDayMonth", 0), 0);
- SendDlgItemMessage(hWndDlg, IDC_BIRTHDAY_DAY, CB_SETCURSEL, ppro->getWord("AdvancedSearchBirthDayDay", 0), 0);
-
- SendDlgItemMessage(hWndDlg, IDC_ZODIAK, CB_SETCURSEL, ppro->getWord("AdvancedSearchZodiakID", 0), 0);
-
-
- SendDlgItemMessage(hWndDlg, IDC_COUNTRY, CB_SETCURSEL, ppro->getWord("AdvancedSearchCountryID", 0), 0);
- SendMessageW(hWndDlg, WM_COMMAND, (WPARAM)MAKELONG(IDC_COUNTRY, CBN_SELCHANGE), (LPARAM)GetDlgItem(hWndDlg, IDC_COUNTRY));
-
- SendDlgItemMessage(hWndDlg, IDC_STATE, CB_SETCURSEL, ppro->getWord("AdvancedSearchStateID", 0), 0);
- SendMessage(hWndDlg, WM_COMMAND, (WPARAM)MAKELONG(IDC_STATE, CBN_SELCHANGE), (LPARAM)GetDlgItem(hWndDlg, IDC_STATE));
-
- SendDlgItemMessage(hWndDlg, IDC_CITY, CB_SETCURSEL, ppro->getWord("AdvancedSearchCityID", 0), 0);
-
-
- CheckDlgButton(hWndDlg, IDC_ONLINEONLY, ppro->getByte("AdvancedSearchOnlineOnly", FALSE) ? BST_CHECKED : BST_UNCHECKED);
- CheckDlgButton(hWndDlg, IDC_CHK_REMEMBER, BST_CHECKED);
- }
- TranslateDialogDefault(hWndDlg);
- }
- return TRUE;
-
- case WM_DESTROY:
- ppro->setWord("AdvancedSearchGender", SendDlgItemMessage(hWndDlg, IDC_GENDER, CB_GETCURSEL, 0, 0));
- ppro->setWord("AdvancedSearchAgeFrom", SendDlgItemMessage(hWndDlg, IDC_AGERANGE_FROM, CB_GETCURSEL, 0, 0));
- ppro->setWord("AdvancedSearchAgeTo", SendDlgItemMessage(hWndDlg, IDC_AGERANGE_TO, CB_GETCURSEL, 0, 0));
- ppro->setWord("AdvancedSearchBirthDayMonth", SendDlgItemMessage(hWndDlg, IDC_BIRTHDAY_MONTH, CB_GETCURSEL, 0, 0));
- ppro->setWord("AdvancedSearchBirthDayDay", SendDlgItemMessage(hWndDlg, IDC_BIRTHDAY_DAY, CB_GETCURSEL, 0, 0));
-
- ppro->setWord("AdvancedSearchZodiakID", SendDlgItemMessage(hWndDlg, IDC_ZODIAK, CB_GETCURSEL, 0, 0));
-
- ppro->setWord("AdvancedSearchCityID", SendDlgItemMessage(hWndDlg, IDC_CITY, CB_GETCURSEL, 0, 0));
- ppro->setWord("AdvancedSearchStateID", SendDlgItemMessage(hWndDlg, IDC_STATE, CB_GETCURSEL, 0, 0));
- ppro->setWord("AdvancedSearchCountryID", SendDlgItemMessage(hWndDlg, IDC_COUNTRY, CB_GETCURSEL, 0, 0));
-
- ppro->setByte("AdvancedSearchOnlineOnly", IsDlgButtonChecked(hWndDlg, IDC_ONLINEONLY));
- ppro->setByte("AdvancedSearchRemember", IsDlgButtonChecked(hWndDlg, IDC_CHK_REMEMBER));
- break;
-
- case WM_COMMAND:
- switch (LOWORD(wParam)) {
- case IDC_AGERANGE_FROM:
- case IDC_AGERANGE_TO:
- if (HIWORD(wParam) == CBN_SELCHANGE) {
- if (LOWORD(wParam) == IDC_AGERANGE_FROM) {
- DWORD dwAgeFrom = GET_CURRENT_COMBO_DATA(hWndDlg, IDC_AGERANGE_FROM);
- DWORD dwAgeTo = GET_CURRENT_COMBO_DATA(hWndDlg, IDC_AGERANGE_TO);
- if (dwAgeFrom == 0) dwAgeFrom++;
- InitComboBoxNumders(GetDlgItem(hWndDlg, IDC_AGERANGE_TO), dwAgeFrom, 100);
- SendDlgItemMessage(hWndDlg, IDC_AGERANGE_TO, CB_SETCURSEL, ((dwAgeTo - dwAgeFrom) + 1), 0);
- }
- SendDlgItemMessage(hWndDlg, IDC_BIRTHDAY_YEAR, CB_SETCURSEL, 0, 0);
- }
- break;
-
- case IDC_BIRTHDAY_DAY:
- case IDC_BIRTHDAY_MONTH:
- case IDC_BIRTHDAY_YEAR:
- if (HIWORD(wParam) == CBN_SELCHANGE) {
- SYSTEMTIME stTime = { 0 };
-
- stTime.wYear = (WORD)GET_CURRENT_COMBO_DATA(hWndDlg, IDC_BIRTHDAY_YEAR);
- stTime.wMonth = (WORD)GET_CURRENT_COMBO_DATA(hWndDlg, IDC_BIRTHDAY_MONTH);
- stTime.wDay = (WORD)GET_CURRENT_COMBO_DATA(hWndDlg, IDC_BIRTHDAY_DAY);
-
- DWORD dwAge = GetYears(&stTime);
- SendDlgItemMessage(hWndDlg, IDC_AGERANGE_FROM, CB_SETCURSEL, dwAge, 0);
- SendDlgItemMessage(hWndDlg, IDC_AGERANGE_TO, CB_SETCURSEL, dwAge, 0);
- SendDlgItemMessage(hWndDlg, IDC_ZODIAK, CB_SETCURSEL, 0, 0);
- }
- break;
-
- case IDC_ZODIAK:
- if (HIWORD(wParam) == CBN_SELCHANGE) {
- SendDlgItemMessage(hWndDlg, IDC_BIRTHDAY_DAY, CB_SETCURSEL, 0, 0);
- SendDlgItemMessage(hWndDlg, IDC_BIRTHDAY_MONTH, CB_SETCURSEL, 0, 0);
- //SendDlgItemMessage(hWndDlg, IDC_BIRTHDAY_YEAR, CB_SETCURSEL, 0, 0);
- }
- break;
-
- case IDC_COUNTRY:
- if (HIWORD(wParam) == CBN_SELCHANGE) {
- DWORD dwCountryID = GET_CURRENT_COMBO_DATA(hWndDlg, IDC_COUNTRY);
- HWND hWndCombo = GetDlgItem(hWndDlg, IDC_STATE);
- SendMessage(hWndCombo, CB_RESETCONTENT, 0, 0);
- ResetComboBox(GetDlgItem(hWndDlg, IDC_CITY));
- DWORD dwItem = SendMessage(hWndCombo, CB_ADDSTRING, 0, (LPARAM)L"");
- SendMessage(hWndCombo, CB_SETITEMDATA, dwItem, 0);
- SendMessage(hWndCombo, CB_SETCURSEL, dwItem, 0);
-
- for (size_t i = 0; mrapPlaces[i].lpszData; i++) {
- if (mrapPlaces[i].dwCountryID == dwCountryID && mrapPlaces[i].dwCityID && mrapPlaces[i].dwPlaceID == 0) {
- dwItem = SendMessage(hWndCombo, CB_ADDSTRING, 0, (LPARAM)mrapPlaces[i].lpszData);
- SendMessage(hWndCombo, CB_SETITEMDATA, dwItem, mrapPlaces[i].dwCityID);
- }
- }
- }
- break;
-
- case IDC_STATE:
- if (HIWORD(wParam) == CBN_SELCHANGE) {
- DWORD dwCountryID = GET_CURRENT_COMBO_DATA(hWndDlg, IDC_COUNTRY);
- DWORD dwStateID = GET_CURRENT_COMBO_DATA(hWndDlg, IDC_STATE);
- HWND hWndCombo = GetDlgItem(hWndDlg, IDC_CITY);
- SendMessage(hWndCombo, CB_RESETCONTENT, 0, 0);
- DWORD dwItem = SendMessage(hWndCombo, CB_ADDSTRING, 0, (LPARAM)L"");
- SendMessage(hWndCombo, CB_SETITEMDATA, dwItem, 0);
- SendMessage(hWndCombo, CB_SETCURSEL, dwItem, 0);
-
- for (size_t i = 0; mrapPlaces[i].lpszData; i++) {
- if (mrapPlaces[i].dwCountryID == dwCountryID && mrapPlaces[i].dwCityID == dwStateID && mrapPlaces[i].dwPlaceID) {
- dwItem = SendMessage(hWndCombo, CB_ADDSTRING, 0, (LPARAM)mrapPlaces[i].lpszData);
- SendMessage(hWndCombo, CB_SETITEMDATA, dwItem, mrapPlaces[i].dwPlaceID);
- }
- }
- }
- }
- }
- return FALSE;
-}
-
-HWND CMraProto::SearchAdvanced(HWND hWndDlg)
-{
- DWORD dwRequestFlags = 0;
- char szUser[MAX_PATH], szDomain[MAX_PATH];
- wchar_t wszNickName[MAX_PATH], wszFirstName[MAX_PATH], wszLastName[MAX_PATH];
-
- size_t dwUserSize = GetDlgItemTextA(hWndDlg, IDC_EMAIL_USER, szUser, _countof(szUser));
- size_t dwDomainSize = GetDlgItemTextA(hWndDlg, IDC_EMAIL_DOMAIN, szDomain, _countof(szDomain));
- if (dwUserSize && dwDomainSize) {
- SetBit(dwRequestFlags, MRIM_CS_WP_REQUEST_PARAM_USER);
- SetBit(dwRequestFlags, MRIM_CS_WP_REQUEST_PARAM_DOMAIN);
- }
-
- size_t dwNickNameSize = GetDlgItemText(hWndDlg, IDC_NICK, wszNickName, _countof(wszNickName));
- if (dwNickNameSize) SetBit(dwRequestFlags, MRIM_CS_WP_REQUEST_PARAM_NICKNAME);
-
- size_t dwFirstNameSize = GetDlgItemText(hWndDlg, IDC_FIRSTNAME, wszFirstName, _countof(wszFirstName));
- if (dwFirstNameSize) SetBit(dwRequestFlags, MRIM_CS_WP_REQUEST_PARAM_FIRSTNAME);
-
- size_t dwLastNameSize = GetDlgItemText(hWndDlg, IDC_LASTNAME, wszLastName, _countof(wszLastName));
- if (dwLastNameSize) SetBit(dwRequestFlags, MRIM_CS_WP_REQUEST_PARAM_LASTNAME);
-
- DWORD dwSex = GET_CURRENT_COMBO_DATA(hWndDlg, IDC_GENDER);
- if (dwSex) SetBit(dwRequestFlags, MRIM_CS_WP_REQUEST_PARAM_SEX);
-
- DWORD dwDate1 = GET_CURRENT_COMBO_DATA(hWndDlg, IDC_AGERANGE_FROM);
- if (dwDate1) SetBit(dwRequestFlags, MRIM_CS_WP_REQUEST_PARAM_DATE1);
-
- DWORD dwDate2 = GET_CURRENT_COMBO_DATA(hWndDlg, IDC_AGERANGE_TO);
- if (dwDate2) SetBit(dwRequestFlags, MRIM_CS_WP_REQUEST_PARAM_DATE2);
-
- DWORD dwCityID = GET_CURRENT_COMBO_DATA(hWndDlg, IDC_CITY);
- if (dwCityID == 0) dwCityID = GET_CURRENT_COMBO_DATA(hWndDlg, IDC_STATE);
- if (dwCityID) SetBit(dwRequestFlags, MRIM_CS_WP_REQUEST_PARAM_CITY_ID);
-
- DWORD dwZodiak = GET_CURRENT_COMBO_DATA(hWndDlg, IDC_ZODIAK);
- if (dwZodiak) SetBit(dwRequestFlags, MRIM_CS_WP_REQUEST_PARAM_ZODIAC);
-
- DWORD dwBirthdayMonth = GET_CURRENT_COMBO_DATA(hWndDlg, IDC_BIRTHDAY_MONTH);
- if (dwBirthdayMonth) SetBit(dwRequestFlags, MRIM_CS_WP_REQUEST_PARAM_BIRTHDAY_MONTH);
-
- DWORD dwBirthdayDay = GET_CURRENT_COMBO_DATA(hWndDlg, IDC_BIRTHDAY_DAY);
- if (dwBirthdayMonth) SetBit(dwRequestFlags, MRIM_CS_WP_REQUEST_PARAM_BIRTHDAY_DAY);
-
- DWORD dwCountryID = GET_CURRENT_COMBO_DATA(hWndDlg, IDC_COUNTRY);
- if (dwCountryID) SetBit(dwRequestFlags, MRIM_CS_WP_REQUEST_PARAM_COUNTRY_ID);
-
-
- DWORD dwOnline = IsDlgButtonChecked(hWndDlg, IDC_ONLINEONLY);
- if (dwOnline) SetBit(dwRequestFlags, MRIM_CS_WP_REQUEST_PARAM_ONLINE);
-
- return (HWND)MraWPRequestW(NULL, ACKTYPE_SEARCH, dwRequestFlags, szUser, szDomain, wszNickName, wszFirstName, wszLastName, dwSex, dwDate1, dwDate2, dwCityID, dwZodiak, dwBirthdayMonth, dwBirthdayDay, dwCountryID, dwOnline);
-}
-
-HWND CMraProto::CreateExtendedSearchUI(HWND owner)
-{
- if (g_plugin.getInst() && owner)
- return CreateDialogParam(g_plugin.getInst(), MAKEINTRESOURCE(IDD_MRAADVANCEDSEARCH), owner, AdvancedSearchDlgProc, (LPARAM)this);
-
- return nullptr;
-}
diff --git a/protocols/MRA/src/MraAvatars.cpp b/protocols/MRA/src/MraAvatars.cpp
deleted file mode 100644
index 76257b46e9..0000000000
--- a/protocols/MRA/src/MraAvatars.cpp
+++ /dev/null
@@ -1,636 +0,0 @@
-#include "stdafx.h"
-#include "MraAvatars.h"
-
-#define PA_FORMAT_MAX 7
-
-struct MRA_AVATARS_QUEUE : public FIFO_MT
-{
- HNETLIBUSER hNetlibUser;
- HANDLE hThreadEvents[64];
- int iThreadsCount, iThreadsRunning;
-};
-
-struct MRA_AVATARS_QUEUE_ITEM : public FIFO_MT_ITEM
-{
- DWORD dwAvatarsQueueID;
- DWORD dwFlags;
- MCONTACT hContact;
-};
-
-#define FILETIME_SECOND ((DWORDLONG)10000000)
-#define FILETIME_MINUTE ((DWORDLONG)FILETIME_SECOND * 60)
-
-
-char szAvtSectName[MAX_PATH];
-#define MRA_AVT_SECT_NAME szAvtSectName
-
-HNETLIBCONN MraAvatarsHttpConnect(HNETLIBUSER hNetlibUser, LPCSTR lpszHost, DWORD dwPort);
-
-#define MAHTRO_AVT 0
-#define MAHTRO_AVTMRIM 1
-#define MAHTRO_AVTSMALL 2
-#define MAHTRO_AVTSMALLMRIM 3
-
-DWORD MraAvatarsHttpTransaction(HNETLIBCONN hConnection, DWORD dwRequestType, LPCSTR lpszUser, LPCSTR lpszDomain, LPCSTR lpszHost, DWORD dwReqObj, BOOL bUseKeepAliveConn, DWORD *pdwResultCode, BOOL *pbKeepAlive, DWORD *pdwFormat, size_t *pdwAvatarSize, INTERNET_TIME *pitLastModifiedTime);
-
-DWORD CMraProto::MraAvatarsQueueInitialize(HANDLE *phAvatarsQueueHandle)
-{
- mir_snprintf(szAvtSectName, "%s Avatars", m_szModuleName);
-
- if (phAvatarsQueueHandle == nullptr)
- return ERROR_INVALID_HANDLE;
-
- MRA_AVATARS_QUEUE *pmraaqAvatarsQueue = new MRA_AVATARS_QUEUE();
-
- wchar_t szBuffer[MAX_PATH];
- mir_snwprintf(szBuffer, L"%s %s", m_tszUserName, TranslateT("Avatars' plugin connections"));
-
- NETLIBUSER nlu = {};
- nlu.flags = NUF_OUTGOING | NUF_HTTPCONNS | NUF_UNICODE;
- nlu.szSettingsModule = MRA_AVT_SECT_NAME;
- nlu.szDescriptiveName.w = szBuffer;
- pmraaqAvatarsQueue->hNetlibUser = Netlib_RegisterUser(&nlu);
- if (pmraaqAvatarsQueue->hNetlibUser) {
- pmraaqAvatarsQueue->iThreadsCount = db_get_dw(0, MRA_AVT_SECT_NAME, "WorkThreadsCount", MRA_AVT_DEFAULT_WRK_THREAD_COUNTS);
- if (pmraaqAvatarsQueue->iThreadsCount == 0)
- pmraaqAvatarsQueue->iThreadsCount = 1;
- if (pmraaqAvatarsQueue->iThreadsCount > 64)
- pmraaqAvatarsQueue->iThreadsCount = 64;
-
- pmraaqAvatarsQueue->iThreadsRunning = 0;
- for (int i = 0; i < pmraaqAvatarsQueue->iThreadsCount; i++)
- ForkThread(&CMraProto::MraAvatarsThreadProc, pmraaqAvatarsQueue);
-
- *phAvatarsQueueHandle = (HANDLE)pmraaqAvatarsQueue;
- }
- return NO_ERROR;
-}
-
-void CMraProto::MraAvatarsQueueClear(HANDLE hQueue)
-{
- if (!hQueue)
- return;
-
- MRA_AVATARS_QUEUE *pmraaqAvatarsQueue = (MRA_AVATARS_QUEUE*)hQueue;
- MRA_AVATARS_QUEUE_ITEM *pmraaqiAvatarsQueueItem;
-
- PROTO_AVATAR_INFORMATION ai = { 0 };
- ai.format = PA_FORMAT_UNKNOWN;
-
- while (FifoMTItemPop(pmraaqAvatarsQueue, nullptr, (LPVOID*)&pmraaqiAvatarsQueueItem) == NO_ERROR) {
- ai.hContact = pmraaqiAvatarsQueueItem->hContact;
- ProtoBroadcastAck(pmraaqiAvatarsQueueItem->hContact, ACKTYPE_AVATAR, ACKRESULT_FAILED, (HANDLE)&ai, 0);
- mir_free(pmraaqiAvatarsQueueItem);
- }
-}
-
-void CMraProto::MraAvatarsQueueSuspend(HANDLE hQueue)
-{
- MRA_AVATARS_QUEUE *pmraaqAvatarsQueue = (MRA_AVATARS_QUEUE*)hQueue;
- MraAvatarsQueueClear(hQueue);
- for (int i = 0; i < pmraaqAvatarsQueue->iThreadsCount; i++)
- SetEvent(pmraaqAvatarsQueue->hThreadEvents[i]);
-}
-
-void CMraProto::MraAvatarsQueueDestroy(HANDLE hQueue)
-{
- if (!hQueue)
- return;
-
- MRA_AVATARS_QUEUE *pmraaqAvatarsQueue = (MRA_AVATARS_QUEUE*)hQueue;
- Netlib_CloseHandle(pmraaqAvatarsQueue->hNetlibUser);
- delete pmraaqAvatarsQueue;
-}
-
-DWORD CMraProto::MraAvatarsQueueAdd(HANDLE hQueue, DWORD dwFlags, MCONTACT hContact, DWORD *pdwAvatarsQueueID)
-{
- MRA_AVATARS_QUEUE *pmraaqAvatarsQueue = (MRA_AVATARS_QUEUE*)hQueue;
- if (pmraaqAvatarsQueue == nullptr || Miranda_IsTerminated())
- return ERROR_INVALID_HANDLE;
-
- MRA_AVATARS_QUEUE_ITEM *pmraaqiAvatarsQueueItem = (MRA_AVATARS_QUEUE_ITEM*)mir_calloc(sizeof(MRA_AVATARS_QUEUE_ITEM));
- if (!pmraaqiAvatarsQueueItem)
- return GetLastError();
-
- pmraaqiAvatarsQueueItem->dwAvatarsQueueID = GetTickCount();
- pmraaqiAvatarsQueueItem->dwFlags = dwFlags;
- pmraaqiAvatarsQueueItem->hContact = hContact;
-
- FifoMTItemPush(pmraaqAvatarsQueue, pmraaqiAvatarsQueueItem, (LPVOID)pmraaqiAvatarsQueueItem);
- if (pdwAvatarsQueueID)
- *pdwAvatarsQueueID = pmraaqiAvatarsQueueItem->dwAvatarsQueueID;
-
- mir_cslock(pmraaqAvatarsQueue->cs);
- int threadno = (pmraaqAvatarsQueue->iThreadsRunning + 1) % pmraaqAvatarsQueue->iThreadsCount;
- SetEvent(pmraaqAvatarsQueue->hThreadEvents[threadno]);
- return NO_ERROR;
-}
-
-void CMraProto::MraAvatarsThreadProc(LPVOID lpParameter)
-{
- MRA_AVATARS_QUEUE *pmraaqAvatarsQueue = (MRA_AVATARS_QUEUE*)lpParameter;
- MRA_AVATARS_QUEUE_ITEM *pmraaqiAvatarsQueueItem;
-
- CMStringA szEmail, szServer;
- CMStringW wszFileName;
- BOOL bContinue, bKeepAlive, bUseKeepAliveConn, bFailed, bDownloadNew;
- BYTE btBuff[BUFF_SIZE_RCV];
- DWORD dwResultCode, dwAvatarFormat = PA_FORMAT_DEFAULT, dwReceived, dwServerPort, dwErrorCode;
- size_t dwAvatarSizeServer;
- FILETIME ftLastModifiedTimeServer, ftLastModifiedTimeLocal;
- SYSTEMTIME stAvatarLastModifiedTimeLocal;
- HNETLIBCONN hConnection = nullptr;
- NETLIBSELECT nls = { 0 };
- INTERNET_TIME itAvatarLastModifiedTimeServer;
- WCHAR szErrorText[2048];
-
- Thread_SetName("MRA: AvatarsThreadProc");
-
- HANDLE hThreadEvent = CreateEvent(nullptr, FALSE, FALSE, nullptr);
- {
- mir_cslock lck(pmraaqAvatarsQueue->cs);
- pmraaqAvatarsQueue->hThreadEvents[pmraaqAvatarsQueue->iThreadsRunning++] = hThreadEvent;
- }
-
- while (!Miranda_IsTerminated()) {
- if (FifoMTItemPop(pmraaqAvatarsQueue, nullptr, (LPVOID*)&pmraaqiAvatarsQueueItem) != NO_ERROR) { // waiting until service stop or new task
- NETLIB_CLOSEHANDLE(hConnection);
- WaitForSingleObjectEx(hThreadEvent, INFINITE, FALSE);
- continue;
- }
-
- // Try download.
- bFailed = TRUE;
- bDownloadNew = FALSE;
-
- if (!DB_GetStringA(NULL, MRA_AVT_SECT_NAME, "Server", szServer))
- szServer = MRA_AVT_DEFAULT_SERVER;
- dwServerPort = db_get_dw(0, MRA_AVT_SECT_NAME, "ServerPort", MRA_AVT_DEFAULT_SERVER_PORT);
- bUseKeepAliveConn = db_get_b(0, MRA_AVT_SECT_NAME, "UseKeepAliveConn", MRA_AVT_DEFAULT_USE_KEEPALIVE_CONN);
-
- if (mraGetStringA(pmraaqiAvatarsQueueItem->hContact, "e-mail", szEmail)) {
- szEmail.MakeLower();
-
- int iStart = 0;
- CMStringA szUser = szEmail.Tokenize("@", iStart);
- CMStringA szDomain = szEmail.Tokenize("@", iStart);
- if (!szUser.IsEmpty() && !szDomain.IsEmpty()) {
- ProtoBroadcastAck(pmraaqiAvatarsQueueItem->hContact, ACKTYPE_AVATAR, ACKRESULT_CONNECTING, nullptr, 0);
- if (hConnection == nullptr)
- hConnection = MraAvatarsHttpConnect(pmraaqAvatarsQueue->hNetlibUser, szServer, dwServerPort);
- if (hConnection) {
- ProtoBroadcastAck(pmraaqiAvatarsQueueItem->hContact, ACKTYPE_AVATAR, ACKRESULT_CONNECTED, nullptr, 0);
- ProtoBroadcastAck(pmraaqiAvatarsQueueItem->hContact, ACKTYPE_AVATAR, ACKRESULT_SENTREQUEST, nullptr, 0);
- if (!MraAvatarsHttpTransaction(hConnection, REQUEST_HEAD, szUser, szDomain, szServer, MAHTRO_AVTMRIM, bUseKeepAliveConn, &dwResultCode, &bKeepAlive, &dwAvatarFormat, &dwAvatarSizeServer, &itAvatarLastModifiedTimeServer)) {
- switch (dwResultCode) {
- case 200:
- if (MraAvatarsGetContactTime(pmraaqiAvatarsQueueItem->hContact, "AvatarLastModifiedTime", &stAvatarLastModifiedTimeLocal)) {
- SystemTimeToFileTime(&itAvatarLastModifiedTimeServer.stTime, &ftLastModifiedTimeServer);
- SystemTimeToFileTime(&stAvatarLastModifiedTimeLocal, &ftLastModifiedTimeLocal);
-
- if ((*((DWORDLONG*)&ftLastModifiedTimeServer)) != (*((DWORDLONG*)&ftLastModifiedTimeLocal))) {// need check for update
- bDownloadNew = TRUE;
- //ProtoBroadcastAck(pmraaqiAvatarsQueueItem->hContact, ACKTYPE_AVATAR, ACKRESULT_STATUS, 0, 0);
- }
- else {// avatar is valid
- if (MraAvatarsGetFileName(pmraaqAvatarsQueue, pmraaqiAvatarsQueueItem->hContact, dwAvatarFormat, wszFileName) == NO_ERROR) {
- if (IsFileExist(wszFileName))
- bFailed = FALSE;
- else
- bDownloadNew = TRUE;
- }
- }
- }
- else // need update
- bDownloadNew = TRUE;
-
- break;
- case 404:// return def avatar
- if (MraAvatarsGetFileName((HANDLE)pmraaqAvatarsQueue, NULL, PA_FORMAT_DEFAULT, wszFileName) == NO_ERROR) {
- if (IsFileExist(wszFileName)) {
- dwAvatarFormat = ProtoGetAvatarFormat(wszFileName);
- bFailed = FALSE;
- }
- else//loading default avatar
- bDownloadNew = TRUE;
- }
- break;
-
- default:
- mir_snwprintf(szErrorText, TranslateT("Avatars: server return HTTP code: %lu"), dwResultCode);
- ShowFormattedErrorMessage(szErrorText, NO_ERROR);
- break;
- }
- }
- if (bUseKeepAliveConn == FALSE || bKeepAlive == FALSE) NETLIB_CLOSEHANDLE(hConnection);
- }
-
- if (bDownloadNew) {
- if (hConnection == nullptr)
- hConnection = MraAvatarsHttpConnect(pmraaqAvatarsQueue->hNetlibUser, szServer, dwServerPort);
-
- if (hConnection) {
- ProtoBroadcastAck(pmraaqiAvatarsQueueItem->hContact, ACKTYPE_AVATAR, ACKRESULT_DATA, nullptr, 0);
- if (MraAvatarsHttpTransaction(hConnection, REQUEST_GET, szUser, szDomain, szServer, MAHTRO_AVT, bUseKeepAliveConn, &dwResultCode, &bKeepAlive, &dwAvatarFormat, &dwAvatarSizeServer, &itAvatarLastModifiedTimeServer) == NO_ERROR && dwResultCode == 200) {
- if (!MraAvatarsGetFileName(pmraaqAvatarsQueue, pmraaqiAvatarsQueueItem->hContact, dwAvatarFormat, wszFileName)) {
- HANDLE hFile = CreateFile(wszFileName, GENERIC_WRITE, FILE_SHARE_READ, nullptr, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, nullptr);
- if (hFile != INVALID_HANDLE_VALUE) {
- DWORD dwWritten = 0;
- bContinue = TRUE;
- nls.dwTimeout = (1000 * db_get_dw(0, MRA_AVT_SECT_NAME, "TimeOutReceive", MRA_AVT_DEFAULT_TIMEOUT_RECV));
- nls.hReadConns[0] = hConnection;
-
- while (bContinue) {
- switch (Netlib_Select(&nls)) {
- case SOCKET_ERROR:
- case 0:// Time out
- dwErrorCode = GetLastError();
- ShowFormattedErrorMessage(L"Avatars: error on receive file data", dwErrorCode);
- bContinue = FALSE;
- break;
- case 1:
- dwReceived = Netlib_Recv(hConnection, (LPSTR)&btBuff, _countof(btBuff), 0);
- if (dwReceived == 0 || dwReceived == SOCKET_ERROR) {
- dwErrorCode = GetLastError();
- ShowFormattedErrorMessage(L"Avatars: error on receive file data", dwErrorCode);
- bContinue = FALSE;
- }
- else {
- if (WriteFile(hFile, (LPVOID)&btBuff, dwReceived, &dwReceived, nullptr)) {
- dwWritten += dwReceived;
- if (dwWritten >= dwAvatarSizeServer)
- bContinue = FALSE;
- }
- else {
- dwErrorCode = GetLastError();
- ShowFormattedErrorMessage(L"Avatars: cant write file data, error", dwErrorCode);
- bContinue = FALSE;
- }
- }
- break;
- }
- }
- CloseHandle(hFile);
- bFailed = FALSE;
- }
- else {
- dwErrorCode = GetLastError();
- mir_snwprintf(szErrorText, TranslateT("Avatars: can't open file %s, error"), wszFileName.c_str());
- ShowFormattedErrorMessage(szErrorText, dwErrorCode);
- }
- }
- }
- else _CrtDbgBreak();
-
- if (bUseKeepAliveConn == FALSE || bKeepAlive == FALSE)
- NETLIB_CLOSEHANDLE(hConnection);
- }
- }
- }
- }
-
- PROTO_AVATAR_INFORMATION ai;
- if (bFailed) {
- DeleteFile(wszFileName);
- ai.hContact = pmraaqiAvatarsQueueItem->hContact;
- ai.format = PA_FORMAT_UNKNOWN;
- ai.filename[0] = 0;
- ProtoBroadcastAck(pmraaqiAvatarsQueueItem->hContact, ACKTYPE_AVATAR, ACKRESULT_FAILED, (HANDLE)&ai, 0);
- }
- else {
- ai.hContact = pmraaqiAvatarsQueueItem->hContact;
- ai.format = dwAvatarFormat;
- if (db_get_b(0, MRA_AVT_SECT_NAME, "ReturnAbsolutePath", MRA_AVT_DEFAULT_RET_ABC_PATH))
- wcsncpy_s(ai.filename, wszFileName, _TRUNCATE);
- else
- PathToRelativeW(wszFileName, ai.filename);
-
- SetContactAvatarFormat(pmraaqiAvatarsQueueItem->hContact, dwAvatarFormat);
- MraAvatarsSetContactTime(pmraaqiAvatarsQueueItem->hContact, "AvatarLastModifiedTime", &itAvatarLastModifiedTimeServer.stTime);
- // write owner avatar file name to DB
- if (pmraaqiAvatarsQueueItem->hContact == NULL) // proto avatar
- CallService(MS_AV_REPORTMYAVATARCHANGED, (WPARAM)m_szModuleName, 0);
-
- ProtoBroadcastAck(pmraaqiAvatarsQueueItem->hContact, ACKTYPE_AVATAR, ACKRESULT_SUCCESS, (HANDLE)&ai, 0);
- }
- mir_free(pmraaqiAvatarsQueueItem);
- }
- CloseHandle(hThreadEvent);
-}
-
-HNETLIBCONN MraAvatarsHttpConnect(HNETLIBUSER hNetlibUser, LPCSTR lpszHost, DWORD dwPort)
-{
- NETLIBOPENCONNECTION nloc = { 0 };
- nloc.cbSize = sizeof(nloc);
- nloc.flags = (NLOCF_HTTP | NLOCF_V2);
- nloc.szHost = lpszHost;
- nloc.wPort = (IsHTTPSProxyUsed(hNetlibUser)) ? MRA_SERVER_PORT_HTTPS : dwPort;
- nloc.timeout = db_get_dw(0, MRA_AVT_SECT_NAME, "TimeOutConnect", MRA_AVT_DEFAULT_TIMEOUT_CONN);
- if (nloc.timeout < MRA_TIMEOUT_CONN_MIN) nloc.timeout = MRA_TIMEOUT_CONN_MIN;
- if (nloc.timeout > MRA_TIMEOUT_CONN_MAX) nloc.timeout = MRA_TIMEOUT_CONN_MAX;
-
- DWORD dwConnectReTryCount = db_get_dw(0, MRA_AVT_SECT_NAME, "ConnectReTryCount", MRA_AVT_DEFAULT_CONN_RETRY_COUNT);
- DWORD dwCurConnectReTryCount = dwConnectReTryCount;
- HNETLIBCONN hConnection;
- do {
- hConnection = Netlib_OpenConnection(hNetlibUser, &nloc);
- }
- while (--dwCurConnectReTryCount && hConnection == nullptr);
-
- return hConnection;
-}
-
-DWORD MraAvatarsHttpTransaction(HNETLIBCONN hConnection, DWORD dwRequestType, LPCSTR lpszUser, LPCSTR lpszDomain, LPCSTR lpszHost, DWORD dwReqObj, BOOL bUseKeepAliveConn, DWORD *pdwResultCode, BOOL *pbKeepAlive, DWORD *pdwFormat, size_t *pdwAvatarSize, INTERNET_TIME *pitLastModifiedTime)
-{
- if (pdwResultCode) *pdwResultCode = 0;
- if (pbKeepAlive) *pbKeepAlive = FALSE;
- if (pdwFormat) *pdwFormat = PA_FORMAT_UNKNOWN;
- if (pdwAvatarSize) *pdwAvatarSize = 0;
- if (pitLastModifiedTime) memset(pitLastModifiedTime, 0, sizeof(INTERNET_TIME));
-
- if (!hConnection)
- return ERROR_INVALID_HANDLE;
-
- LPSTR lpszReqObj;
-
- switch (dwReqObj) {
- case MAHTRO_AVT: lpszReqObj = "_avatar"; break;
- case MAHTRO_AVTMRIM: lpszReqObj = "_mrimavatar"; break;
- case MAHTRO_AVTSMALL: lpszReqObj = "_avatarsmall"; break;
- case MAHTRO_AVTSMALLMRIM: lpszReqObj = "_mrimavatarsmall"; break;
- default: lpszReqObj = ""; break;
- }
-
- char szBuff[4096];
- mir_snprintf(szBuff, "http://%s/%s/%s/%s", lpszHost, lpszDomain, lpszUser, lpszReqObj);
- CMStringA szSelfVersionString = MraGetSelfVersionString();
-
- NETLIBHTTPHEADER nlbhHeaders[8] = {};
- nlbhHeaders[0].szName = "User-Agent"; nlbhHeaders[0].szValue = (LPSTR)szSelfVersionString.c_str();
- nlbhHeaders[1].szName = "Accept-Encoding"; nlbhHeaders[1].szValue = "deflate";
- nlbhHeaders[2].szName = "Pragma"; nlbhHeaders[2].szValue = "no-cache";
- nlbhHeaders[3].szName = "Connection"; nlbhHeaders[3].szValue = (bUseKeepAliveConn) ? "keep-alive" : "close";
-
- NETLIBHTTPREQUEST nlhr = { 0 };
- nlhr.cbSize = sizeof(nlhr);
- nlhr.requestType = dwRequestType;
- nlhr.szUrl = szBuff;
- nlhr.headers = (NETLIBHTTPHEADER*)&nlbhHeaders;
- nlhr.headersCount = 4;
-
- DWORD dwSent = Netlib_SendHttpRequest(hConnection, &nlhr);
- if (dwSent == SOCKET_ERROR || !dwSent)
- return GetLastError();
-
- NETLIBHTTPREQUEST *pnlhr = Netlib_RecvHttpHeaders(hConnection);
- if (!pnlhr)
- return GetLastError();
-
- for (int i = 0; i < pnlhr->headersCount; i++) {
- if (!_strnicmp(pnlhr->headers[i].szName, "Connection", 10)) {
- if (pbKeepAlive)
- *pbKeepAlive = !_strnicmp(pnlhr->headers[i].szValue, "keep-alive", 10);
- }
- else if (!_strnicmp(pnlhr->headers[i].szName, "Content-Type", 12)) {
- if (pdwFormat)
- *pdwFormat = ProtoGetAvatarFormatByMimeType(_A2T(pnlhr->headers[i].szValue));
- }
- else if (!_strnicmp(pnlhr->headers[i].szName, "Content-Length", 14)) {
- if (pdwAvatarSize)
- *pdwAvatarSize = atol(pnlhr->headers[i].szValue);
- }
- else if (!_strnicmp(pnlhr->headers[i].szName, "Last-Modified", 13)) {
- if (pitLastModifiedTime)
- InternetTimeGetTime(pnlhr->headers[i].szValue, *pitLastModifiedTime);
- }
- }
-
- if (pdwResultCode)
- *pdwResultCode = pnlhr->resultCode;
- Netlib_FreeHttpRequest(pnlhr);
- return 0;
-}
-
-bool CMraProto::MraAvatarsGetContactTime(MCONTACT hContact, LPSTR lpszValueName, SYSTEMTIME *pstTime)
-{
- INTERNET_TIME itAvatarLastModifiedTimeLocal;
- CMStringA szBuff;
-
- if (nullptr == lpszValueName ||
- nullptr == pstTime)
- return false;
- if (false == mraGetStringA(hContact, lpszValueName, szBuff))
- return false;
- if (InternetTimeGetTime(szBuff, itAvatarLastModifiedTimeLocal) != NO_ERROR)
- return false;
- memcpy(pstTime, &itAvatarLastModifiedTimeLocal.stTime, sizeof(SYSTEMTIME));
- return true;
-}
-
-void CMraProto::MraAvatarsSetContactTime(MCONTACT hContact, LPSTR lpszValueName, SYSTEMTIME *pstTime)
-{
- if (!lpszValueName)
- return;
-
- INTERNET_TIME itTime;
- if (pstTime) {
- itTime.lTimeZone = 0;
- memcpy(&itTime.stTime, pstTime, sizeof(SYSTEMTIME));
- }
- else InternetTimeGetCurrentTime(&itTime);
-
- if (itTime.stTime.wYear)
- mraSetStringExA(hContact, lpszValueName, InternetTimeGetString(&itTime));
- else
- delSetting(hContact, lpszValueName);
-}
-
-DWORD CMraProto::MraAvatarsGetFileName(HANDLE hQueue, MCONTACT hContact, DWORD dwFormat, CMStringW &res)
-{
- res.Empty();
- if (hQueue == nullptr)
- return ERROR_INVALID_HANDLE;
-
- if (IsContactChatAgent(hContact))
- return ERROR_NOT_SUPPORTED;
-
- wchar_t tszBase[MAX_PATH];
- mir_snwprintf(tszBase, L"%s\\%s\\", VARSW(L"%miranda_avatarcache%"), m_tszUserName);
- res = tszBase;
-
- // some path in buff and free space for file name is avaible
- CreateDirectoryTreeW(res);
-
- if (dwFormat != PA_FORMAT_DEFAULT) {
- CMStringW szEmail;
- if (mraGetStringW(hContact, "e-mail", szEmail)) {
- szEmail.MakeLower();
- res += szEmail + ProtoGetAvatarExtension(dwFormat);
- return NO_ERROR;
- }
- }
- else {
- CMStringW szDefName;
- if (!DB_GetStringW(NULL, MRA_AVT_SECT_NAME, "DefaultAvatarFileName", szDefName)) {
- res += MRA_AVT_DEFAULT_AVT_FILENAME;
- return NO_ERROR;
- }
- }
-
- return ERROR_INSUFFICIENT_BUFFER;
-}
-
-DWORD CMraProto::MraAvatarsQueueGetAvatar(HANDLE hQueue, DWORD dwFlags, MCONTACT hContact, DWORD *pdwAvatarsQueueID, DWORD *pdwFormat, LPTSTR lpszPath)
-{
- DWORD dwRetCode = GAIR_NOAVATAR;
-
- if ( !hQueue)
- return GAIR_NOAVATAR;
- if ( !db_get_b(0, MRA_AVT_SECT_NAME, "Enable", MRA_AVT_DEFAULT_ENABLE))
- return GAIR_NOAVATAR;
- if (IsContactChatAgent(hContact)) // @chat.agent conference
- return GAIR_NOAVATAR;
-
- BOOL bQueueAdd = TRUE;// check for updates
- SYSTEMTIME stAvatarLastCheckTime;
-
- if ((dwFlags & GAIF_FORCE) == 0)// если флаг принудит. обновления, то даже не проверяем времени последнего обновления
- if (MraAvatarsGetContactTime(hContact, "AvatarLastCheckTime", &stAvatarLastCheckTime)) {
- CMStringW wszFileName;
- FILETIME ftCurrentTime, ftExpireTime;
-
- GetSystemTimeAsFileTime(&ftCurrentTime);
- SystemTimeToFileTime(&stAvatarLastCheckTime, &ftExpireTime);
- (*((DWORDLONG*)&ftExpireTime)) += (FILETIME_MINUTE*(DWORDLONG)db_get_dw(0, MRA_AVT_SECT_NAME, "CheckInterval", MRA_AVT_DEFAULT_CHK_INTERVAL));
-
- if ((*((DWORDLONG*)&ftExpireTime)) > (*((DWORDLONG*)&ftCurrentTime)))
- if (MraAvatarsGetFileName(hQueue, hContact, GetContactAvatarFormat(hContact, PA_FORMAT_DEFAULT), wszFileName) == NO_ERROR)
- if (IsFileExist(wszFileName)) {
- // файл с аватаром существует и не устарел/не было комманды обновлять(просто запрос имени)
- if (lpszPath) {
- if (db_get_b(0, MRA_AVT_SECT_NAME, "ReturnAbsolutePath", MRA_AVT_DEFAULT_RET_ABC_PATH))
- mir_wstrncpy(lpszPath, wszFileName, MAX_PATH);
- else
- PathToRelativeW(wszFileName, lpszPath);
- }
- if (pdwFormat)
- *pdwFormat = ProtoGetAvatarFormat(lpszPath);
- dwRetCode = GAIR_SUCCESS;
- bQueueAdd = FALSE;
- }
- }
-
- if (bQueueAdd || (dwFlags & GAIF_FORCE))
- if (!MraAvatarsQueueAdd(hQueue, dwFlags, hContact, pdwAvatarsQueueID)) {
- MraAvatarsSetContactTime(hContact, "AvatarLastCheckTime", nullptr);
- dwRetCode = GAIR_WAITFOR;
- }
- return dwRetCode;
-}
-
-DWORD CMraProto::MraAvatarsQueueGetAvatarSimple(HANDLE hQueue, DWORD dwFlags, MCONTACT hContact)
-{
- if ( !hQueue)
- return GAIR_NOAVATAR;
-
- PROTO_AVATAR_INFORMATION ai = { 0 };
- ai.hContact = hContact;
- DWORD dwRetCode = MraAvatarsQueueGetAvatar(hQueue, dwFlags, hContact, nullptr, (DWORD*)&ai.format, ai.filename);
- if (dwRetCode != GAIR_SUCCESS)
- return dwRetCode;
-
- // write owner avatar file name to DB
- if (hContact == NULL)
- CallService(MS_AV_REPORTMYAVATARCHANGED, (WPARAM)m_szModuleName, 0);
- ProtoBroadcastAck(hContact, ACKTYPE_AVATAR, ACKRESULT_SUCCESS, (HANDLE)&ai, 0);
- return GAIR_SUCCESS;
-}
-
-/////////////////////////////////////////////////////////////////////////////////////////
-// Avatars options
-
-WORD wMraAvatarsControlsList[] = {
- IDC_SERVER,
- IDC_SERVERPORT,
- IDC_BUTTON_DEFAULT,
- IDC_USE_KEEPALIVE_CONN,
- IDC_UPD_CHECK_INTERVAL,
- IDC_RETURN_ABC_PATH,
- IDC_DELETE_AVT_ON_CONTACT_DELETE
-};
-
-INT_PTR CALLBACK MraAvatarsQueueDlgProcOpts(HWND hWndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
-{
- CMraProto *ppro = (CMraProto*)GetWindowLongPtr(hWndDlg, GWLP_USERDATA);
-
- switch (msg) {
- case WM_INITDIALOG:
- TranslateDialogDefault(hWndDlg);
- SetWindowLongPtr(hWndDlg, GWLP_USERDATA, lParam);
- ppro = (CMraProto*)lParam;
- {
- CheckDlgButton(hWndDlg, IDC_ENABLE, db_get_b(0, MRA_AVT_SECT_NAME, "Enable", MRA_AVT_DEFAULT_ENABLE) ? BST_CHECKED : BST_UNCHECKED);
-
- CMStringW szServer;
- if (DB_GetStringW(NULL, MRA_AVT_SECT_NAME, "Server", szServer))
- SetDlgItemText(hWndDlg, IDC_SERVER, szServer.c_str());
- else
- SetDlgItemTextA(hWndDlg, IDC_SERVER, MRA_AVT_DEFAULT_SERVER);
-
- SetDlgItemInt(hWndDlg, IDC_SERVERPORT, db_get_dw(0, MRA_AVT_SECT_NAME, "ServerPort", MRA_AVT_DEFAULT_SERVER_PORT), FALSE);
- CheckDlgButton(hWndDlg, IDC_USE_KEEPALIVE_CONN, db_get_b(0, MRA_AVT_SECT_NAME, "UseKeepAliveConn", MRA_AVT_DEFAULT_USE_KEEPALIVE_CONN) ? BST_CHECKED : BST_UNCHECKED);
- SetDlgItemInt(hWndDlg, IDC_UPD_CHECK_INTERVAL, db_get_dw(0, MRA_AVT_SECT_NAME, "CheckInterval", MRA_AVT_DEFAULT_CHK_INTERVAL), FALSE);
- CheckDlgButton(hWndDlg, IDC_RETURN_ABC_PATH, db_get_b(0, MRA_AVT_SECT_NAME, "ReturnAbsolutePath", MRA_AVT_DEFAULT_RET_ABC_PATH) ? BST_CHECKED : BST_UNCHECKED);
- CheckDlgButton(hWndDlg, IDC_DELETE_AVT_ON_CONTACT_DELETE, db_get_b(0, MRA_AVT_SECT_NAME, "DeleteAvtOnContactDelete", MRA_DELETE_AVT_ON_CONTACT_DELETE) ? BST_CHECKED : BST_UNCHECKED);
-
- EnableControlsArray(hWndDlg, (WORD*)&wMraAvatarsControlsList, _countof(wMraAvatarsControlsList), IsDlgButtonChecked(hWndDlg, IDC_ENABLE));
- }
- return TRUE;
-
- case WM_COMMAND:
- if (LOWORD(wParam) == IDC_ENABLE)
- EnableControlsArray(hWndDlg, (WORD*)&wMraAvatarsControlsList, _countof(wMraAvatarsControlsList), IsDlgButtonChecked(hWndDlg, IDC_ENABLE));
-
- if (LOWORD(wParam) == IDC_BUTTON_DEFAULT) {
- SetDlgItemTextA(hWndDlg, IDC_SERVER, MRA_AVT_DEFAULT_SERVER);
- SetDlgItemInt(hWndDlg, IDC_SERVERPORT, MRA_AVT_DEFAULT_SERVER_PORT, FALSE);
- }
-
- if ((LOWORD(wParam) == IDC_SERVER || LOWORD(wParam) == IDC_SERVERPORT || LOWORD(wParam) == IDC_UPD_CHECK_INTERVAL) && (HIWORD(wParam) != EN_CHANGE || (HWND)lParam != GetFocus())) return FALSE;
- SendMessage(GetParent(hWndDlg), PSM_CHANGED, 0, 0);
- break;
-
- case WM_NOTIFY:
- switch (((LPNMHDR)lParam)->code) {
- case PSN_APPLY:
- db_set_b(0, MRA_AVT_SECT_NAME, "Enable", IsDlgButtonChecked(hWndDlg, IDC_ENABLE));
- db_set_b(0, MRA_AVT_SECT_NAME, "DeleteAvtOnContactDelete", IsDlgButtonChecked(hWndDlg, IDC_DELETE_AVT_ON_CONTACT_DELETE));
- db_set_b(0, MRA_AVT_SECT_NAME, "ReturnAbsolutePath", IsDlgButtonChecked(hWndDlg, IDC_RETURN_ABC_PATH));
- db_set_dw(0, MRA_AVT_SECT_NAME, "CheckInterval", GetDlgItemInt(hWndDlg, IDC_UPD_CHECK_INTERVAL, nullptr, FALSE));
- db_set_b(0, MRA_AVT_SECT_NAME, "UseKeepAliveConn", IsDlgButtonChecked(hWndDlg, IDC_USE_KEEPALIVE_CONN));
- db_set_dw(0, MRA_AVT_SECT_NAME, "ServerPort", GetDlgItemInt(hWndDlg, IDC_SERVERPORT, nullptr, FALSE));
-
- wchar_t szServer[MAX_PATH];
- GetDlgItemText(hWndDlg, IDC_SERVER, szServer, _countof(szServer));
- db_set_ws(0, MRA_AVT_SECT_NAME, "Server", szServer);
- return TRUE;
- }
- break;
- }
- return FALSE;
-}
-
-
-DWORD CMraProto::MraAvatarsDeleteContactAvatarFile(HANDLE hQueue, MCONTACT hContact)
-{
- if (hQueue == nullptr)
- return ERROR_INVALID_HANDLE;
-
- DWORD dwAvatarFormat = GetContactAvatarFormat(hContact, PA_FORMAT_UNKNOWN);
- if (db_get_b(0, MRA_AVT_SECT_NAME, "DeleteAvtOnContactDelete", MRA_DELETE_AVT_ON_CONTACT_DELETE) && dwAvatarFormat != PA_FORMAT_DEFAULT) {
- CMStringW szFileName;
- if (!MraAvatarsGetFileName(hQueue, hContact, dwAvatarFormat, szFileName))
- return DeleteFile(szFileName);
- }
- return NO_ERROR;
-}
diff --git a/protocols/MRA/src/MraAvatars.h b/protocols/MRA/src/MraAvatars.h
deleted file mode 100644
index 2e65e9a026..0000000000
--- a/protocols/MRA/src/MraAvatars.h
+++ /dev/null
@@ -1,14 +0,0 @@
-#if !defined(AFX_MRA_AVATARS_H__F58D13FF_F6F2_476C_B8F0_7B9E9357CF48__INCLUDED_)
-#define AFX_MRA_AVATARS_H__F58D13FF_F6F2_476C_B8F0_7B9E9357CF48__INCLUDED_
-
-
-#pragma once
-
-#define PA_FORMAT_DEFAULT 255 // return file name of def avatar
-#define GetContactAvatarFormat(hContact, dwDefaultFormat) getByte(hContact, "AvatarType", dwDefaultFormat)
-#define SetContactAvatarFormat(hContact, dwFormat) setByte(hContact, "AvatarType", (BYTE)dwFormat)
-
-INT_PTR CALLBACK MraAvatarsQueueDlgProcOpts(HWND hWndDlg, UINT msg, WPARAM wParam, LPARAM lParam);
-
-
-#endif // !defined(AFX_MRA_AVATARS_H__F58D13FF_F6F2_476C_B8F0_7B9E9357CF48__INCLUDED_)
diff --git a/protocols/MRA/src/MraChat.cpp b/protocols/MRA/src/MraChat.cpp
deleted file mode 100644
index 938441ee00..0000000000
--- a/protocols/MRA/src/MraChat.cpp
+++ /dev/null
@@ -1,221 +0,0 @@
-#include "stdafx.h"
-#include "proto.h"
-
-static LPWSTR lpwszStatuses[] = { LPGENW("Owners"), LPGENW("Inviter"), LPGENW("Visitors") };
-#define MRA_CHAT_STATUS_OWNER 0
-#define MRA_CHAT_STATUS_INVITER 1
-#define MRA_CHAT_STATUS_VISITOR 2
-
-
-bool CMraProto::MraChatRegister()
-{
- GCREGISTER gcr = {};
- gcr.iMaxText = MRA_MAXLENOFMESSAGE;
- gcr.ptszDispName = m_tszUserName;
- gcr.pszModule = m_szModuleName;
- Chat_Register(&gcr);
-
- HookProtoEvent(ME_GC_EVENT, &CMraProto::MraChatGcEventHook);
- return TRUE;
-}
-
-INT_PTR CMraProto::MraChatSessionNew(MCONTACT hContact)
-{
- if (bChatExists)
- if (!hContact)
- return 1;
-
- CMStringW wszEMail;
- mraGetStringW(hContact, "e-mail", wszEMail);
-
- SESSION_INFO *si = Chat_NewSession(GCW_CHATROOM, m_szModuleName, wszEMail, Clist_GetContactDisplayName(hContact), (void*)hContact);
- if (si == nullptr)
- return 1;
-
- for (auto &it : lpwszStatuses)
- Chat_AddGroup(si, TranslateW(it));
-
- Chat_Control(m_szModuleName, wszEMail, SESSION_INITDONE);
- Chat_Control(m_szModuleName, wszEMail, SESSION_ONLINE);
-
- DWORD opcode = MULTICHAT_GET_MEMBERS;
- CMStringA szEmail;
- if (mraGetStringA(hContact, "e-mail", szEmail))
- MraMessage(FALSE, NULL, 0, MESSAGE_FLAG_MULTICHAT, szEmail, L"", (LPBYTE)&opcode, sizeof(opcode));
- return 0;
-}
-
-void CMraProto::MraChatSessionDestroy(MCONTACT hContact)
-{
- if (!bChatExists || hContact == NULL)
- return;
-
- CMStringW wszEMail;
- mraGetStringW(hContact, "e-mail", wszEMail);
-
- Chat_Terminate(m_szModuleName, wszEMail);
- Chat_Control(m_szModuleName, wszEMail, WINDOW_CLEARLOG);
-}
-
-INT_PTR CMraProto::MraChatSessionEventSendByHandle(MCONTACT hContactChatSession, int iType, DWORD dwFlags, const CMStringA &lpszUID, LPCWSTR lpwszStatus, LPCWSTR lpwszMessage, DWORD_PTR dwItemData, DWORD dwTime)
-{
- if (!bChatExists)
- return 1;
-
- CMStringW wszID, wszUID, wszNick;
-
- GCEVENT gce = { m_szModuleName, nullptr, iType };
- if (hContactChatSession) {
- mraGetStringW(hContactChatSession, "e-mail", wszID);
- gce.ptszID = wszID.c_str();
- }
-
- gce.dwFlags = dwFlags;
- gce.ptszUID = wszUID;
- gce.ptszStatus = lpwszStatus;
- gce.ptszText = lpwszMessage;
- gce.dwItemData = dwItemData;
- gce.time = dwTime;
-
- if (!lpszUID.IsEmpty())
- gce.bIsMe = IsEMailMy(lpszUID);
- else
- gce.bIsMe = TRUE;
-
- if (gce.bIsMe) {
- mraGetStringW(NULL, "e-mail", wszUID);
- mraGetStringW(NULL, "Nick", wszNick);
- gce.ptszNick = wszNick;
- }
- else {
- MCONTACT hContactSender = MraHContactFromEmail(lpszUID, FALSE, TRUE, nullptr);
- wszUID = lpszUID;
- if (hContactSender)
- gce.ptszNick = Clist_GetContactDisplayName(hContactSender);
- else
- gce.ptszNick = wszUID;
- }
-
- return Chat_Event(&gce);
-}
-
-INT_PTR CMraProto::MraChatSessionInvite(MCONTACT hContactChatSession, const CMStringA &lpszEMailInMultiChat, DWORD dwTime)
-{
- if (!hContactChatSession)
- return 1;
-
- CMStringW wszBuff;
- wszBuff.Format(L"[%s]: %s", _A2T(lpszEMailInMultiChat.c_str()), TranslateT("invite sender"));
- return MraChatSessionEventSendByHandle(hContactChatSession, GC_EVENT_ACTION, GCEF_ADDTOLOG, lpszEMailInMultiChat, nullptr, wszBuff, 0, dwTime);
-}
-
-INT_PTR CMraProto::MraChatSessionMembersAdd(MCONTACT hContactChatSession, const CMStringA &lpszEMailInMultiChat, DWORD dwTime)
-{
- if (!hContactChatSession)
- return 1;
-
- CMStringW wszBuff;
- wszBuff.Format(L"[%s]: %s", _A2T(lpszEMailInMultiChat), TranslateT("invite new members"));
- return MraChatSessionEventSendByHandle(hContactChatSession, GC_EVENT_ACTION, GCEF_ADDTOLOG, lpszEMailInMultiChat, nullptr, wszBuff, 0, dwTime);
-}
-
-INT_PTR CMraProto::MraChatSessionJoinUser(MCONTACT hContactChatSession, const CMStringA &lpszEMailInMultiChat, DWORD dwTime)
-{
- if (hContactChatSession)
- return MraChatSessionEventSendByHandle(hContactChatSession, GC_EVENT_JOIN, GCEF_ADDTOLOG, lpszEMailInMultiChat, lpwszStatuses[MRA_CHAT_STATUS_VISITOR], L"", 0, dwTime);
-
- return 1;
-}
-
-INT_PTR CMraProto::MraChatSessionLeftUser(MCONTACT hContactChatSession, const CMStringA &lpszEMailInMultiChat, DWORD dwTime)
-{
- if (hContactChatSession)
- return MraChatSessionEventSendByHandle(hContactChatSession, GC_EVENT_PART, GCEF_ADDTOLOG, lpszEMailInMultiChat, nullptr, nullptr, 0, dwTime);
-
- return 1;
-}
-
-INT_PTR CMraProto::MraChatSessionSetIviter(MCONTACT hContactChatSession, const CMStringA &lpszEMailInMultiChat)
-{
- if (hContactChatSession && !lpszEMailInMultiChat.IsEmpty())
- return MraChatSessionEventSendByHandle(hContactChatSession, GC_EVENT_ADDSTATUS, 0, lpszEMailInMultiChat, lpwszStatuses[MRA_CHAT_STATUS_INVITER], nullptr, 0, 0);
-
- return 1;
-}
-
-INT_PTR CMraProto::MraChatSessionSetOwner(MCONTACT hContactChatSession, const CMStringA &lpszEMailInMultiChat)
-{
- if (hContactChatSession && !lpszEMailInMultiChat.IsEmpty())
- return MraChatSessionEventSendByHandle(hContactChatSession, GC_EVENT_ADDSTATUS, 0, lpszEMailInMultiChat, lpwszStatuses[MRA_CHAT_STATUS_OWNER], nullptr, 0, 0);
-
- return 1;
-}
-
-
-INT_PTR CMraProto::MraChatSessionMessageAdd(MCONTACT hContactChatSession, const CMStringA &lpszEMailInMultiChat, const CMStringW &lpwszMessage, DWORD dwTime)
-{
- if (hContactChatSession)
- return MraChatSessionEventSendByHandle(hContactChatSession, GC_EVENT_MESSAGE, GCEF_ADDTOLOG, lpszEMailInMultiChat, nullptr, lpwszMessage, 0, dwTime);
-
- return 1;
-}
-
-int CMraProto::MraChatGcEventHook(WPARAM, LPARAM lParam)
-{
- if (lParam)
- if (bChatExists) {
- GCHOOK* gch = (GCHOOK*)lParam;
-
- if (!_stricmp(gch->pszModule, m_szModuleName)) {
- switch (gch->iType) {
- case GC_USER_MESSAGE:
- if (gch->ptszText && mir_wstrlen(gch->ptszText)) {
- CMStringA szEmail = gch->ptszID;
- MCONTACT hContact = MraHContactFromEmail(szEmail, FALSE, TRUE, nullptr);
- BOOL bSlowSend = getByte("SlowSend", MRA_DEFAULT_SLOW_SEND);
-
- DWORD dwFlags = 0;
- if (getByte("RTFSendEnable", MRA_DEFAULT_RTF_SEND_ENABLE) && (MraContactCapabilitiesGet(hContact)&FEATURE_FLAG_RTF_MESSAGE))
- dwFlags |= MESSAGE_FLAG_RTF;
-
- INT_PTR iSendRet = MraMessage(bSlowSend, hContact, ACKTYPE_MESSAGE, dwFlags, szEmail, gch->ptszText, nullptr, 0);
- if (bSlowSend == FALSE)
- ProtoBroadcastAck(hContact, ACKTYPE_MESSAGE, ACKRESULT_SUCCESS, (HANDLE)iSendRet, 0);
-
- MraChatSessionEventSendByHandle(hContact, GC_EVENT_MESSAGE, GCEF_ADDTOLOG, "", nullptr, gch->ptszText, 0, (DWORD)_time32(nullptr));
- }
- break;
-
- case GC_USER_PRIVMESS:
- MraChatSendPrivateMessage(_T2A(gch->ptszUID));
- break;
-
- case GC_USER_LOGMENU:
- //sttLogListHook( this, item, gch );
- break;
-
- case GC_USER_NICKLISTMENU:
- //sttNickListHook( this, item, gch );
- break;
-
- case GC_USER_CHANMGR:
- //int iqId = SerialNext();
- //IqAdd( iqId, IQ_PROC_NONE, &CJabberProto::OnIqResultGetMuc );
- //m_ThreadInfo->send( XmlNodeIq( L"get", iqId, item->jid ) << XQUERY( xmlnsOwner ));
- break;
- }
- }
- }
- return 0;
-}
-
-void CMraProto::MraChatSendPrivateMessage(LPSTR lpszEMail)
-{
- BOOL bAdded;
- MCONTACT hContact = MraHContactFromEmail(lpszEMail, TRUE, TRUE, &bAdded);
- if (bAdded)
- db_set_b(hContact, "CList", "Hidden", 1);
-
- CallService(MS_IGNORE_UNIGNORE, hContact, IGNOREEVENT_ALL);
- CallService(MS_MSG_SENDMESSAGE, hContact, 0);
-}
diff --git a/protocols/MRA/src/MraConstans.h b/protocols/MRA/src/MraConstans.h
deleted file mode 100644
index f46f67fe0d..0000000000
--- a/protocols/MRA/src/MraConstans.h
+++ /dev/null
@@ -1,243 +0,0 @@
-#if !defined(AFX_MRA_CONSTANS_H__F58D13FF_F6F2_476C_B8F0_7B9E9357CF48__INCLUDED_)
-#define AFX_MRA_CONSTANS_H__F58D13FF_F6F2_476C_B8F0_7B9E9357CF48__INCLUDED_
-
-#include "proto.h"
-
-#pragma once
-
-#define PROTOCOL_DISPLAY_NAME_ORIGA "Mail.ru Agent"
-
-#define MIRVER_UNKNOWN ("Mail.ru Agent unknown client")
-
-#define MRA_PLUGIN_UPDATER_ID 2544 //появляется после первого выкладывания на сайт
-#define MRA_SERVER_PORT_STANDART_NLB 2042
-#define MRA_SERVER_PORT_STANDART 2041
-#define MRA_SERVER_PORT_HTTPS 443
-static const LPSTR lpcszMailRuDomains[] =
-{
- ("mail.ru"),
- ("list.ru"),
- ("bk.ru"),
- ("inbox.ru"),
- ("corp.mail.ru"),
- NULL
-};
-#define MAILRU_CHAT_CONF_DOMAIN "chat.agent"
-
-
-#define MAX_EMAIL_LEN 1024
-#define MAX_FILEPATH 32768 //internal
-#define BUFF_SIZE_RCV (64 * 1024) //internal
-#define BUFF_SIZE_RCV_MIN_FREE (16 * 1024) //internal
-#define BUFF_SIZE_BLOB 16384 //internal
-#define BUFF_SIZE_URL 4096 //internal
-#define WAIT_FOR_THREAD_TIMEOUT 15 //internal // время ожидания завершения потока
-#define THREAD_SLEEP_TIME 100 //internal
-#define THREAD_MAX_PING_TIME 20 // sec, internal
-#define THREAD_MAX_PING_FAIL_COUNT 3 // internal
-#define SEND_QUEUE_TIMEOUT 600 //internal // время удаления недоставленных сообщений из очереди отправки
-#define ALLOCATED_COUNT 32 //internal // колличество элементов
-#define EMAILS_MIN_COUNT 16 //internal // колличество элементов обязательно проверяемых при извлечении email адреса из инфы юзера
-#define PHONES_MIN_COUNT 4 //internal // колличество элементов обязательно проверяемых при извлечении email адреса из инфы юзера
-
-#define MRA_ALARM_MESSAGE LPGENW("Your contact wakes you")
-
-#define MRA_GOTO_INBOX "/GotoInbox"
-#define MRA_GOTO_INBOX_STR LPGEN("Display &Inbox")
-#define MRA_SHOW_INBOX_STATUS "/ShowInboxStatus"
-#define MRA_SHOW_INBOX_STATUS_STR LPGEN("Display &Inbox status")
-#define MRA_EDIT_PROFILE "/EditProfile"
-#define MRA_EDIT_PROFILE_STR LPGEN("Edit &Profile")
-#define MRA_MY_ALBUM_STR LPGEN("My Album")
-#define MRA_MY_BLOGSTATUS_STR LPGEN("My Blog Status")
-#define MRA_MY_VIDEO_STR LPGEN("My Video")
-#define MRA_MY_ANSWERS_STR LPGEN("My Answers")
-#define MRA_MY_WORLD_STR LPGEN("My World")
-#define MRA_WEB_SEARCH "/WebSearch"
-#define MRA_WEB_SEARCH_STR LPGEN("Web search")
-#define MRA_UPD_ALL_USERS_INFO "/UpdateAllUsersInfo"
-#define MRA_UPD_ALL_USERS_INFO_STR LPGEN("Update all users info")
-#define MRA_CHK_USERS_AVATARS "/CheckUpdatesUsersAvatars"
-#define MRA_CHK_USERS_AVATARS_STR LPGEN("Check users avatars updates")
-#define MRA_REQ_AUTH_FOR_ALL "/ReqAuthForAll"
-#define MRA_REQ_AUTH_FOR_ALL_STR LPGEN("Request authorization for all")
-
-//#define MRA_MPOP_AUTH_URL "http://swa.mail.ru/cgi-bin/auth?Login=%s&agent=%s&page=%s"
-#define MRA_MPOP_AUTH_URL "https://auth.mail.ru/cgi-bin/auth?Login=%s&agent=%s&noredirecttologin=1&page=%s"
-
-#define MRA_WIN_INBOX_URL "https://win.mail.ru/cgi-bin/start"
-#define MRA_PDA_INBOX_URL "http://pda.mail.ru/cgi-bin/start"
-#define MRA_EDIT_PROFILE_URL "https://win.mail.ru/cgi-bin/userinfo?mra=1"
-#define MRA_SEARCH_URL "http://go.mail.ru"
-
-// used spesialy! added: /domain/user
-#define MRA_BLOGS_URL "http://blogs.mail.ru"
-#define MRA_FOTO_URL "http://foto.mail.ru"
-#define MRA_VIDEO_URL "http://video.mail.ru"
-#define MRA_ANSWERS_URL "http://otvet.mail.ru"
-#define MRA_WORLD_URL "http://my.mail.ru"
-
-// without auth
-#define MRA_REGISTER_URL "https://win.mail.ru/cgi-bin/signup"
-#define MRA_FORGOT_PASSWORD_URL "https://win.mail.ru/cgi-bin/passremind"
-
-
-// wParam = hContact
-#define MRA_REQ_AUTH "/ReqAuth"
-#define MRA_REQ_AUTH_STR LPGEN("Request authorization")
-#define MRA_GRANT_AUTH "/GrantAuth"
-#define MRA_GRANT_AUTH_STR LPGEN("Grant authorization")
-#define MRA_SEND_EMAIL "/SendEMail"
-#define MRA_SEND_EMAIL_STR LPGEN("&Send E-Mail")
-#define MRA_SEND_POSTCARD "/SendPostcard"
-#define MRA_SEND_POSTCARD_STR LPGEN("&Send postcard")
-#define MRA_VIEW_ALBUM "/ViewAlbum"
-#define MRA_VIEW_ALBUM_STR LPGEN("&View Album")
-#define MRA_REPLY_BLOG_STATUS "/ReplyBlogStatus"
-#define MRA_REPLY_BLOG_STATUS_STR LPGEN("Reply Blog Status")
-#define MRA_VIEW_VIDEO "/ViewVideo"
-#define MRA_VIEW_VIDEO_STR LPGEN("View Video")
-#define MRA_ANSWERS "/Answers"
-#define MRA_ANSWERS_STR LPGEN("Answers")
-#define MRA_WORLD "/World"
-#define MRA_WORLD_STR LPGEN("World")
-#define MRA_SENDNUDGE_STR LPGEN("Send &Nudge")
-
-#define ADV_ICON_DELETED 0
-#define ADV_ICON_DELETED_ID "ADV_ICON_DELETED"
-#define ADV_ICON_DELETED_STR LPGEN("Mail box deleted")
-#define ADV_ICON_NOT_ON_SERVER 1
-#define ADV_ICON_NOT_ON_SERVER_ID "ADV_ICON_NOT_ON_SERVER"
-#define ADV_ICON_NOT_ON_SERVER_STR LPGEN("Contact not on server")
-#define ADV_ICON_NOT_AUTHORIZED 2
-#define ADV_ICON_NOT_AUTHORIZED_ID "ADV_ICON_NOT_AUTHORIZED"
-#define ADV_ICON_NOT_AUTHORIZED_STR LPGEN("Not authorized")
-#define ADV_ICON_PHONE 3
-#define ADV_ICON_PHONE_ID "ADV_ICON_PHONE"
-#define ADV_ICON_PHONE_STR LPGEN("Phone/SMS only contact")
-#define ADV_ICON_BLOGSTATUS 4
-#define ADV_ICON_BLOGSTATUS_ID "ADV_ICON_BLOGSTATUS"
-#define ADV_ICON_BLOGSTATUS_STR LPGEN("Blog status message")
-
-#define MRA_SOUND_NEW_EMAIL LPGENW("New E-mail available in Inbox")
-
-#define MAILRU_SERVER_TIME_ZONE -180 //internal // +0300
-#define MAILRU_CONTACTISTYPING_TIMEOUT 10 //internal
-#define MRA_DEFAULT_SERVER "mrim.mail.ru"
-#define MRA_DEFAULT_SERVER_PORT MRA_SERVER_PORT_STANDART_NLB
-#define MRA_MAX_MRIM_SERVER 46
-#define MRA_DEFAULT_TIMEOUT_CONN_MRIM 20
-#define MRA_DEFAULT_CONN_RETRY_COUNT_MRIM 2
-#define MRA_DEFAULT_TIMEOUT_CONN_NLB 20
-#define MRA_DEFAULT_CONN_RETRY_COUNT_NLB 3
-#define MRA_DEFAULT_TIMEOUT_RECV_NLB 20
-#define MRA_DEFAULT_CONN_RETRY_COUNT_FILES 2
-#define MRA_DEFAULT_CONN_RETRY_COUNT_MRIMPROXY 3
-#define MRA_TIMEOUT_DIRECT_CONN 30 //internal; время после которого клиент считает что к нему подключится не удалось
-#define MRA_TIMEOUT_CONN_MIN 2 //internal; минимальное время ожидания пока устанавливается исходящее подключение
-#define MRA_TIMEOUT_CONN_MAX 16 //internal; максимальное время ожидания пока устанавливается исходящее подключение
-#define MRA_MAXLENOFMESSAGE 32768 //internal
-#define MRA_MAXCONTACTSPERPACKET 256 //internal
-#define MRA_CODE_PAGE 1251 //internal
-#define MRA_FEATURE_FLAGS (FEATURE_FLAG_BASE_SMILES|FEATURE_FLAG_ADVANCED_SMILES|FEATURE_FLAG_CONTACTS_EXCH|FEATURE_FLAG_WAKEUP|FEATURE_FLAG_MULTS|FEATURE_FLAG_FILE_TRANSFER|FEATURE_FLAG_GAMES)
-
-#define MRA_DEFAULT_POPUPS_ENABLED TRUE
-#define MRA_DEFAULT_POPUPS_EVENT_FILTER -1
-#define MRA_DEFAULT_POPUP_TIMEOUT 8
-#define MRA_DEFAULT_POPUP_USE_WIN_COLORS TRUE
-#define MRA_DEFAULT_POPUP_COLOR_BACK RGB(191, 0, 0) //Red
-#define MRA_DEFAULT_POPUP_COLOR_TEXT RGB(255, 245, 225) //Yellow
-
-#define MRA_DEFAULT_NLB_FAIL_DIRECT_CONNECT FALSE // hidden option
-#define MRA_DEFAULT_AUTO_ADD_CONTACTS_TO_SERVER TRUE
-#define MRA_DEFAULT_AUTO_AUTH_REQ_ON_LOGON FALSE
-#define MRA_DEFAULT_AUTO_AUTH_GRAND_IN_CLIST FALSE
-#define MRA_DEFAULT_AUTO_AUTH_GRAND_NEW_USERS FALSE
-#define MRA_DEFAULT_AUTO_AUTH_ON_WEB_SVCS TRUE
-#define MRA_DEFAULT_SLOW_SEND TRUE
-#define MRA_DEFAULT_CVT_SMILES_TO_TAGS TRUE
-#define MRA_DEFAULT_MIRVER_RAW FALSE // hidden option
-#define MRA_DEFAULT_AUTH_MESSAGE LPGENW("Please authorize me")
-
-#define MRA_DEFAULT_RTF_RECEIVE_ENABLE FALSE
-#define MRA_DEFAULT_RTF_SEND_ENABLE TRUE
-#define MRA_DEFAULT_RTF_SEND_SMART TRUE
-#define MRA_DEFAULT_RTF_BACKGROUND_COLOUR RGB(255, 255, 255)
-#define MRA_DEFAULT_RTF_FONT_COLOUR RGB(255, 0, 0)
-#define MRA_DEFAULT_RTF_FONT_SIZE 12
-#define MRA_DEFAULT_RTF_FONT_CHARSET RUSSIAN_CHARSET
-#define MRA_DEFAULT_RTF_FONT_NAME L"Tahoma"
-
-#define MRA_DEFAULT_SEARCH_REMEMBER TRUE
-#define MRA_DEFAULT_LAST_SEARCH_COUTRY 0
-
-
-#define MRA_DEFAULT_FILE_SEND_BLOCK_SIZE 8192 //hidden, размер блока при отправке файла
-
-#define MRA_DEFAULT_HIDE_MENU_ITEMS_FOR_NON_MRA FALSE
-
-#define MRA_DEFAULT_INC_NEW_MAIL_NOTIFY FALSE
-#define MRA_DEFAULT_TRAYICON_NEW_MAIL_NOTIFY FALSE
-#define MRA_DEFAULT_TRAYICON_NEW_MAIL_CLK_TO_INBOX FALSE
-
-#define MRA_DEFAULT_SHOW_ALL_XSTATUSES FALSE /* Do not display some x statuses (like dating) in menu. */
-
-#define MRA_AVT_DEFAULT_ENABLE TRUE
-#define MRA_AVT_DEFAULT_WRK_THREAD_COUNTS 1 // hidden
-#define MRA_AVT_DEFAULT_SERVER "obraz.foto.mail.ru"
-#define MRA_AVT_DEFAULT_SERVER_PORT 80
-#define MRA_AVT_DEFAULT_TIMEOUT_CONN 10
-#define MRA_AVT_DEFAULT_CONN_RETRY_COUNT 3
-#define MRA_AVT_DEFAULT_TIMEOUT_RECV 30
-#define MRA_AVT_DEFAULT_USE_KEEPALIVE_CONN TRUE
-#define MRA_AVT_DEFAULT_CHK_INTERVAL 60
-#define MRA_AVT_DEFAULT_AVT_FILENAME L"_default.jpg"
-#define MRA_AVT_DEFAULT_RET_ABC_PATH TRUE
-#define MRA_DELETE_AVT_ON_CONTACT_DELETE TRUE
-
-#define MRA_FILES_QUEUE_PROGRESS_INTERVAL 250 //internal
-#define MRA_FILES_NULL_ADDRR "192.168.0.1:26666;"
-#define MRA_DEF_FS_TIMEOUT_RECV 600
-#define MRA_DEF_FS_ENABLE_DIRECT_CONN TRUE
-#define MRA_DEF_FS_NO_OUT_CONN_ON_RCV FALSE
-#define MRA_DEF_FS_NO_OUT_CONN_ON_SEND FALSE
-#define MRA_DEF_FS_IGNORY_ADDITIONAL_PORTS FALSE
-#define MRA_DEF_FS_HIDE_MY_ADDRESSES FALSE
-#define MRA_DEF_FS_ADD_EXTRA_ADDRESSES FALSE
-#define MRA_DEF_FS_ENABLE_MRIM_PROXY_CONS TRUE
-
-#define ICQACKTYPE_SMS 1001
-#define MS_ICQ_SENDSMS "/SendSMS"
-
-// Database setting names
-#define DBSETTING_CAPABILITIES "caps"
-#define DBSETTING_XSTATUSID "XStatusId"
-#define DBSETTING_XSTATUSNAME "XStatusName"
-#define DBSETTING_XSTATUSMSG "XStatusMsg"
-#define DBSETTING_BLOGSTATUSTIME "BlogStatusTime"
-#define DBSETTING_BLOGSTATUSID "BlogStatusID"
-#define DBSETTING_BLOGSTATUS "BlogStatus"
-#define DBSETTING_BLOGSTATUSMUSIC "ListeningTo"
-
-extern LPCSTR lpcszStatusUri[];
-extern LPCWSTR lpcszXStatusNameDef[];
-
-#define MRA_XSTATUS_COUNT 50 /* index = 0 - virtual status "none" */
-#define MRA_XSTATUS_OFF_CLI_COUNT 49 /* MRA_XSTATUS_COUNT - dating */
-#define MRA_MIR_XSTATUS_NONE 0
-#define MRA_MIR_XSTATUS_UNKNOWN MRA_XSTATUS_COUNT
-
-/* Indexes in lpcszStatusUrip[]. */
-#define MRA_XSTATUS_OFFLINE 0
-#define MRA_XSTATUS_ONLINE 1
-#define MRA_XSTATUS_AWAY 2
-#define MRA_XSTATUS_INVISIBLE 3
-#define MRA_XSTATUS_DND 4
-#define MRA_XSTATUS_CHAT 5
-#define MRA_XSTATUS_MOBILE 6
-#define MRA_XSTATUS_UNKNOWN 255
-#define MRA_XSTATUS_UNKNOWN_STR "mra_xstatus50" // For icon name, keep sync with MRA_XSTATUS_COUNT
-
-#define MRA_XSTATUS_INDEX_OFFSET 7
-
-#endif // !defined(AFX_MRA_CONSTANS_H__F58D13FF_F6F2_476C_B8F0_7B9E9357CF48__INCLUDED_)
diff --git a/protocols/MRA/src/MraFilesQueue.cpp b/protocols/MRA/src/MraFilesQueue.cpp
deleted file mode 100644
index dee5082350..0000000000
--- a/protocols/MRA/src/MraFilesQueue.cpp
+++ /dev/null
@@ -1,1146 +0,0 @@
-#include "stdafx.h"
-#include "MraFilesQueue.h"
-#include "proto.h"
-
-#define MRA_FT_HELLO "MRA_FT_HELLO"
-#define MRA_FT_GET_FILE "MRA_FT_GET_FILE"
-
-struct MRA_FILES_QUEUE : public LIST_MT
-{
- DWORD dwSendTimeOutInterval;
-};
-
-struct MRA_FILES_QUEUE_FILE
-{
- LPWSTR lpwszName;
- size_t dwNameLen;
- DWORDLONG dwSize;
-};
-
-struct MRA_FILES_QUEUE_ITEM : public LIST_MT_ITEM
-{
- // internal
- bool bIsWorking;
- DWORD dwSendTime;
-
- // external
- CMraProto *ppro;
- DWORD dwIDRequest;
- DWORD dwFlags;
- MCONTACT hContact;
- DWORDLONG dwFilesCount;
- DWORDLONG dwFilesTotalSize;
- MRA_FILES_QUEUE_FILE *pmfqfFiles;
- LPWSTR pwszFilesList;
- LPWSTR pwszDescription;
- MRA_ADDR_LIST malAddrList;
- LPWSTR lpwszPath;
- size_t dwPathSize;
- bool bSending;
- HNETLIBCONN hConnection;
- HANDLE hListen;
- HANDLE hThread;
- HANDLE hWaitHandle;
- HANDLE hMraMrimProxyData;
-};
-
-struct MRA_FILES_THREADPROC_PARAMS
-{
- HANDLE hFilesQueueHandle;
- MRA_FILES_QUEUE_ITEM *dat;
-};
-
-DWORD MraFilesQueueItemFindByID(HANDLE hQueue, DWORD dwIDRequest, MRA_FILES_QUEUE_ITEM **ppmrafqFilesQueueItem);
-void MraFilesQueueItemFree(MRA_FILES_QUEUE_ITEM *dat);
-
-/////////////////////////////////////////////////////////////////////////////////////////
-// File transfer options
-
-static WORD wMraFilesControlsList[] = {
- IDC_FILE_SEND_NOOUTCONNECTIONONRECEIVE,
- IDC_FILE_SEND_NOOUTCONNECTIONONSEND,
- IDC_FILE_SEND_IGNORYADDITIONALPORTS,
- IDC_FILE_SEND_HIDE_MY_ADDRESSES,
- IDC_FILE_SEND_ADD_EXTRA_ADDRESS,
- IDC_FILE_SEND_EXTRA_ADDRESS
-};
-
-void MraFilesQueueDlgEnableDirectConsControls(HWND hWndDlg, BOOL bEnabled)
-{
- EnableControlsArray(hWndDlg, (WORD*)&wMraFilesControlsList, _countof(wMraFilesControlsList), bEnabled);
- EnableWindow(GetDlgItem(hWndDlg, IDC_FILE_SEND_EXTRA_ADDRESS), (bEnabled && IsDlgButtonChecked(hWndDlg, IDC_FILE_SEND_ADD_EXTRA_ADDRESS)));
-}
-
-INT_PTR CALLBACK MraFilesQueueDlgProcOpts(HWND hWndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
-{
- CMraProto *ppro = (CMraProto*)GetWindowLongPtr(hWndDlg, GWLP_USERDATA);
-
- switch (msg) {
- case WM_INITDIALOG:
- TranslateDialogDefault(hWndDlg);
- SetWindowLongPtr(hWndDlg, GWLP_USERDATA, lParam);
- ppro = (CMraProto*)lParam;
- {
- CheckDlgButton(hWndDlg, IDC_FILE_SEND_ENABLE_DIRECT_CONN, ppro->getByte("FileSendEnableDirectConn", MRA_DEF_FS_ENABLE_DIRECT_CONN) ? BST_CHECKED : BST_UNCHECKED);
- CheckDlgButton(hWndDlg, IDC_FILE_SEND_NOOUTCONNECTIONONRECEIVE, ppro->getByte("FileSendNoOutConnOnRcv", MRA_DEF_FS_NO_OUT_CONN_ON_RCV) ? BST_CHECKED : BST_UNCHECKED);
- CheckDlgButton(hWndDlg, IDC_FILE_SEND_NOOUTCONNECTIONONSEND, ppro->getByte("FileSendNoOutConnOnSend", MRA_DEF_FS_NO_OUT_CONN_ON_SEND) ? BST_CHECKED : BST_UNCHECKED);
- CheckDlgButton(hWndDlg, IDC_FILE_SEND_IGNORYADDITIONALPORTS, ppro->getByte("FileSendIgnoryAdditionalPorts", MRA_DEF_FS_IGNORY_ADDITIONAL_PORTS) ? BST_CHECKED : BST_UNCHECKED);
- CheckDlgButton(hWndDlg, IDC_FILE_SEND_HIDE_MY_ADDRESSES, ppro->getByte("FileSendHideMyAddresses", MRA_DEF_FS_HIDE_MY_ADDRESSES) ? BST_CHECKED : BST_UNCHECKED);
- CheckDlgButton(hWndDlg, IDC_FILE_SEND_ADD_EXTRA_ADDRESS, ppro->getByte("FileSendAddExtraAddresses", MRA_DEF_FS_ADD_EXTRA_ADDRESSES) ? BST_CHECKED : BST_UNCHECKED);
-
- CMStringW szBuff;
- if (ppro->mraGetStringW(NULL, "FileSendExtraAddresses", szBuff))
- SetDlgItemText(hWndDlg, IDC_FILE_SEND_EXTRA_ADDRESS, szBuff.c_str());
-
- CheckDlgButton(hWndDlg, IDC_FILE_SEND_ENABLE_MRIMPROXY_CONS, ppro->getByte("FileSendEnableMRIMProxyCons", MRA_DEF_FS_ENABLE_MRIM_PROXY_CONS) ? BST_CHECKED : BST_UNCHECKED);
-
- SetDlgItemInt(hWndDlg, IDC_FILE_SEND_BLOCK_SIZE, ppro->getDword("FileSendBlockSize", MRA_DEFAULT_FILE_SEND_BLOCK_SIZE), FALSE);
-
- MraFilesQueueDlgEnableDirectConsControls(hWndDlg, IsDlgButtonChecked(hWndDlg, IDC_FILE_SEND_ENABLE_DIRECT_CONN));
- }
- return TRUE;
-
- case WM_COMMAND:
- if (LOWORD(wParam) == IDC_FILE_SEND_ENABLE_DIRECT_CONN)
- MraFilesQueueDlgEnableDirectConsControls(hWndDlg, IsDlgButtonChecked(hWndDlg, IDC_FILE_SEND_ENABLE_DIRECT_CONN));
-
- if (LOWORD(wParam) == IDC_FILE_SEND_ADD_EXTRA_ADDRESS)
- EnableWindow(GetDlgItem(hWndDlg, IDC_FILE_SEND_EXTRA_ADDRESS), IsDlgButtonChecked(hWndDlg, IDC_FILE_SEND_ADD_EXTRA_ADDRESS));
-
- if ((LOWORD(wParam) == IDC_FILE_SEND_EXTRA_ADDRESS || LOWORD(wParam) == IDC_FILE_SEND_BLOCK_SIZE) && (HIWORD(wParam) != EN_CHANGE || (HWND)lParam != GetFocus())) return FALSE;
- SendMessage(GetParent(hWndDlg), PSM_CHANGED, 0, 0);
- break;
-
- case WM_NOTIFY:
- switch (((LPNMHDR)lParam)->code) {
- case PSN_APPLY:
- ppro->setByte("FileSendEnableDirectConn", IsDlgButtonChecked(hWndDlg, IDC_FILE_SEND_ENABLE_DIRECT_CONN));
- ppro->setByte("FileSendNoOutConnOnRcv", IsDlgButtonChecked(hWndDlg, IDC_FILE_SEND_NOOUTCONNECTIONONRECEIVE));
- ppro->setByte("FileSendNoOutConnOnSend", IsDlgButtonChecked(hWndDlg, IDC_FILE_SEND_NOOUTCONNECTIONONSEND));
- ppro->setByte("FileSendIgnoryAdditionalPorts", IsDlgButtonChecked(hWndDlg, IDC_FILE_SEND_IGNORYADDITIONALPORTS));
- ppro->setByte("FileSendHideMyAddresses", IsDlgButtonChecked(hWndDlg, IDC_FILE_SEND_HIDE_MY_ADDRESSES));
- ppro->setByte("FileSendAddExtraAddresses", IsDlgButtonChecked(hWndDlg, IDC_FILE_SEND_ADD_EXTRA_ADDRESS));
-
- WCHAR szBuff[MAX_PATH];
- GetDlgItemText(hWndDlg, IDC_FILE_SEND_EXTRA_ADDRESS, szBuff, _countof(szBuff));
- ppro->mraSetStringW(NULL, "FileSendExtraAddresses", szBuff);
- ppro->setDword("FileSendBlockSize", (DWORD)GetDlgItemInt(hWndDlg, IDC_FILE_SEND_BLOCK_SIZE, nullptr, FALSE));
- ppro->setByte("FileSendEnableMRIMProxyCons", IsDlgButtonChecked(hWndDlg, IDC_FILE_SEND_ENABLE_MRIMPROXY_CONS));
- return TRUE;
- }
- break;
- }
- return FALSE;
-}
-
-/////////////////////////////////////////////////////////////////////////////////////////
-// MRA files' queue
-
-DWORD MraFilesQueueInitialize(DWORD dwSendTimeOutInterval, HANDLE *phFilesQueueHandle)
-{
- if (!phFilesQueueHandle)
- return ERROR_INVALID_HANDLE;
-
- MRA_FILES_QUEUE *pmrafqFilesQueue = new MRA_FILES_QUEUE();
- if (!pmrafqFilesQueue)
- return GetLastError();
-
- pmrafqFilesQueue->dwSendTimeOutInterval = dwSendTimeOutInterval;
- *phFilesQueueHandle = (HANDLE)pmrafqFilesQueue;
- return NO_ERROR;
-}
-
-void MraFilesQueueDestroy(HANDLE hQueue)
-{
- if (!hQueue)
- return;
-
- MRA_FILES_QUEUE *pmrafqFilesQueue = (MRA_FILES_QUEUE*)hQueue;
- MRA_FILES_QUEUE_ITEM *dat;
- {
- mir_cslock l(pmrafqFilesQueue->cs);
- while (ListMTItemGetFirst(pmrafqFilesQueue, nullptr, (LPVOID*)&dat) == NO_ERROR)
- MraFilesQueueItemFree(dat);
- }
- delete pmrafqFilesQueue;
-}
-
-DWORD MraFilesQueueItemFindByID(HANDLE hQueue, DWORD dwIDRequest, MRA_FILES_QUEUE_ITEM **ppmrafqFilesQueueItem)
-{
- if (!hQueue)
- return ERROR_INVALID_HANDLE;
-
- MRA_FILES_QUEUE *pmrafqFilesQueue = (MRA_FILES_QUEUE*)hQueue;
- MRA_FILES_QUEUE_ITEM *dat;
- LIST_MT_ITERATOR lmtiIterator;
-
- mir_cslock l(pmrafqFilesQueue->cs);
- ListMTIteratorMoveFirst(pmrafqFilesQueue, &lmtiIterator);
- do {
- if (ListMTIteratorGet(&lmtiIterator, nullptr, (LPVOID*)&dat) == NO_ERROR)
- if (dat->dwIDRequest == dwIDRequest) {
- if (ppmrafqFilesQueueItem)
- *ppmrafqFilesQueueItem = dat;
- return 0;
- }
- }
- while (ListMTIteratorMoveNext(&lmtiIterator));
-
- return ERROR_NOT_FOUND;
-}
-
-HANDLE MraFilesQueueItemProxyByID(HANDLE hQueue, DWORD dwIDRequest)
-{
- MRA_FILES_QUEUE_ITEM *dat;
- if (!MraFilesQueueItemFindByID(hQueue, dwIDRequest, &dat))
- return dat->hMraMrimProxyData;
-
- return nullptr;
-}
-
-void MraFilesQueueItemFree(MRA_FILES_QUEUE_ITEM *dat)
-{
- LIST_MT *plmtListMT = (LIST_MT*)dat->lpListMT;
-
- for (size_t i = 0; i < dat->dwFilesCount; i++)
- mir_free(dat->pmfqfFiles[i].lpwszName);
-
- mir_free(dat->pmfqfFiles);
- mir_free(dat->pwszFilesList);
- mir_free(dat->pwszDescription);
- MraAddrListFree(&dat->malAddrList);
- MraMrimProxyFree(dat->hMraMrimProxyData);
- mir_free(dat->lpwszPath);
- {
- mir_cslock l(plmtListMT->cs);
- ListMTItemDelete(plmtListMT, dat);
- }
- mir_free(dat);
-}
-
-size_t CMraProto::MraFilesQueueGetLocalAddressesList(LPSTR lpszBuff, size_t dwBuffSize, DWORD dwPort)
-{
- LPSTR lpszCurPos = lpszBuff;
-
- if (getByte("FileSendHideMyAddresses", MRA_DEF_FS_HIDE_MY_ADDRESSES)) {// не выдаём врагу наш IP адрес!!! :)
- if (getByte("FileSendAddExtraAddresses", MRA_DEF_FS_ADD_EXTRA_ADDRESSES) == FALSE) {// только если не добавляем адрес роутера
- lpszCurPos += mir_snprintf(lpszCurPos, (dwBuffSize - ((size_t)lpszCurPos - (size_t)lpszBuff)), MRA_FILES_NULL_ADDRR);
- }
- }
- else {// создаём список наших IP адресов
- BYTE btAddress[32];
- DWORD dwSelfExternalIP;
- size_t dwAdapter = 0;
- hostent *sh;
-
- dwSelfExternalIP = ntohl(getDword("IP", 0));
- if (dwSelfExternalIP) {
- memcpy(&btAddress, &dwSelfExternalIP, sizeof(DWORD));
- lpszCurPos += mir_snprintf(lpszCurPos, (dwBuffSize - ((size_t)lpszCurPos - (size_t)lpszBuff)), "%lu.%lu.%lu.%lu:%lu;", btAddress[0], btAddress[1], btAddress[2], btAddress[3], dwPort);
- }
-
- CHAR szHostName[MAX_PATH] = { 0 };
- if (gethostname(szHostName, _countof(szHostName)) == 0)
- if ((sh = gethostbyname((LPSTR)&szHostName))) {
- while (sh->h_addr_list[dwAdapter]) {
- lpszCurPos += mir_snprintf(lpszCurPos, (dwBuffSize - ((size_t)lpszCurPos - (size_t)lpszBuff)), "%s:%lu;", inet_ntoa(*((struct in_addr*)sh->h_addr_list[dwAdapter])), dwPort);
- dwAdapter++;
- }
- }
- }
-
- CMStringA szHostName;
- if (getByte("FileSendAddExtraAddresses", MRA_DEF_FS_ADD_EXTRA_ADDRESSES))// добавляем произвольный адрес
- if (mraGetStringA(NULL, "FileSendExtraAddresses", szHostName))
- lpszCurPos += mir_snprintf(lpszCurPos, (dwBuffSize - ((size_t)lpszCurPos - (size_t)lpszBuff)), "%s:%lu;", szHostName.c_str(), dwPort);
-
- return lpszCurPos - lpszBuff;
-}
-
-DWORD CMraProto::MraFilesQueueAccept(HANDLE hQueue, DWORD dwIDRequest, LPCWSTR lpwszPath, size_t dwPathSize)
-{
- if (!hQueue || !lpwszPath || !dwPathSize)
- return ERROR_INVALID_HANDLE;
-
- MRA_FILES_QUEUE *pmrafqFilesQueue = (MRA_FILES_QUEUE*)hQueue;
- MRA_FILES_QUEUE_ITEM *dat;
-
- mir_cslock l(pmrafqFilesQueue->cs);
- DWORD dwRetErrorCode = MraFilesQueueItemFindByID(hQueue, dwIDRequest, &dat);
- if (dwRetErrorCode == NO_ERROR) {
- MRA_FILES_THREADPROC_PARAMS *pmftpp = (MRA_FILES_THREADPROC_PARAMS*)mir_calloc(sizeof(MRA_FILES_THREADPROC_PARAMS));
- dat->lpwszPath = (LPWSTR)mir_calloc(((dwPathSize+2)*sizeof(WCHAR)));
- dat->dwPathSize = dwPathSize;
- memcpy(dat->lpwszPath, lpwszPath, (dwPathSize*sizeof(WCHAR)));
-
- if ((*(WCHAR*)(dat->lpwszPath + (dat->dwPathSize - 1))) != '\\') {// add slash at the end if needed
- (*(WCHAR*)(dat->lpwszPath + dat->dwPathSize)) = '\\';
- dat->dwPathSize++;
- (*(WCHAR*)(dat->lpwszPath + dat->dwPathSize)) = 0;
- }
-
- pmftpp->hFilesQueueHandle = hFilesQueueHandle;
- pmftpp->dat = dat;
-
- dat->hThread = ForkThreadEx(&CMraProto::MraFilesQueueRecvThreadProc, pmftpp, nullptr);
- }
- return dwRetErrorCode;
-}
-
-DWORD CMraProto::MraFilesQueueCancel(HANDLE hQueue, DWORD dwIDRequest, BOOL bSendDecline)
-{
- if (!hQueue)
- return ERROR_INVALID_HANDLE;
-
- MRA_FILES_QUEUE *pmrafqFilesQueue = (MRA_FILES_QUEUE*)hQueue;
- MRA_FILES_QUEUE_ITEM *dat;
-
- mir_cslock l(pmrafqFilesQueue->cs);
- DWORD dwRetErrorCode = MraFilesQueueItemFindByID(hQueue, dwIDRequest, &dat);
- if (dwRetErrorCode == NO_ERROR) { //***deb closesocket, send message to thread
- InterlockedExchange((volatile LONG*)&dat->bIsWorking, FALSE);
-
- if (bSendDecline) {
- CMStringA szEmail;
- if (mraGetStringA(dat->hContact, "e-mail", szEmail))
- MraFileTransferAck(FILE_TRANSFER_STATUS_DECLINE, szEmail, dwIDRequest, CMStringA());
- }
-
- MraMrimProxyCloseConnection(dat->hMraMrimProxyData);
-
- NETLIB_CLOSEHANDLE(dat->hListen);
- NETLIB_CLOSEHANDLE(dat->hConnection);
-
- SetEvent(dat->hWaitHandle);
-
- if (dat->hThread == nullptr)
- MraFilesQueueItemFree(dat);
- }
- return dwRetErrorCode;
-}
-
-DWORD CMraProto::MraFilesQueueStartMrimProxy(HANDLE hQueue, DWORD dwIDRequest)
-{
- if (!hQueue || !getByte("FileSendEnableMRIMProxyCons", MRA_DEF_FS_ENABLE_MRIM_PROXY_CONS))
- return ERROR_INVALID_HANDLE;
-
- MRA_FILES_QUEUE *pmrafqFilesQueue = (MRA_FILES_QUEUE*)hQueue;
- MRA_FILES_QUEUE_ITEM *dat;
-
- mir_cslock l(pmrafqFilesQueue->cs);
- if (!MraFilesQueueItemFindByID(hQueue, dwIDRequest, &dat))
- if (dat->bSending == FALSE)
- SetEvent(dat->hWaitHandle);// cancel wait incomming connection
-
- return 0;
-}
-
-DWORD MraFilesQueueFree(HANDLE hQueue, DWORD dwIDRequest)
-{
- if (!hQueue)
- return ERROR_INVALID_HANDLE;
-
- MRA_FILES_QUEUE *pmrafqFilesQueue = (MRA_FILES_QUEUE*)hQueue;
- MRA_FILES_QUEUE_ITEM *dat;
- LIST_MT_ITERATOR lmtiIterator;
-
- mir_cslock l(pmrafqFilesQueue->cs);
- ListMTIteratorMoveFirst(pmrafqFilesQueue, &lmtiIterator);
- do {
- if (ListMTIteratorGet(&lmtiIterator, nullptr, (LPVOID*)&dat) == NO_ERROR)
- if (dat->dwIDRequest == dwIDRequest) {
- MraFilesQueueItemFree(dat);
- return 0;
- }
- }
- while (ListMTIteratorMoveNext(&lmtiIterator));
-
- return ERROR_NOT_FOUND;
-}
-
-DWORD CMraProto::MraFilesQueueSendMirror(HANDLE hQueue, DWORD dwIDRequest, const CMStringA &szAddresses)
-{
- if (!hQueue)
- return ERROR_INVALID_HANDLE;
-
- MRA_FILES_QUEUE *pmrafqFilesQueue = (MRA_FILES_QUEUE*)hQueue;
- MRA_FILES_QUEUE_ITEM *dat;
-
- mir_cslock l(pmrafqFilesQueue->cs);
- DWORD dwRetErrorCode = MraFilesQueueItemFindByID(hQueue, dwIDRequest, &dat);
- if (dwRetErrorCode == NO_ERROR) {
- MraAddrListGetFromBuff(szAddresses, &dat->malAddrList);
- MraAddrListStoreToContact(dat->hContact, &dat->malAddrList);
-
- dat->hConnection = nullptr;
- SetEvent(dat->hWaitHandle);
- }
- return dwRetErrorCode;
-}
-
-bool CMraProto::MraFilesQueueHandCheck(HNETLIBCONN hConnection, MRA_FILES_QUEUE_ITEM *dat)
-{
- if (hConnection && dat) {
- BYTE btBuff[((MAX_EMAIL_LEN * 2) + (sizeof(MRA_FT_HELLO)* 2) + 8)] = { 0 };
- size_t dwBuffSize;
-
- CMStringA szEmail, szEmailMy;
- if (!mraGetStringA(NULL, "e-mail", szEmailMy) || !mraGetStringA(dat->hContact, "e-mail", szEmail))
- return false;
-
- szEmailMy.MakeLower();
- szEmail.MakeLower();
-
- if (dat->bSending == FALSE) {
- // receiving
- dwBuffSize = mir_snprintf((LPSTR)btBuff, _countof(btBuff), "%s %s", MRA_FT_HELLO, szEmailMy.c_str()) + 1;
- if (dwBuffSize == (size_t)Netlib_Send(hConnection, (LPSTR)btBuff, (int)dwBuffSize, 0)) {
- // my email sended
- ProtoBroadcastAck(dat->hContact, ACKTYPE_FILE, ACKRESULT_INITIALISING, (HANDLE)dat->dwIDRequest, 0);
- dwBuffSize = Netlib_Recv(hConnection, (LPSTR)btBuff, sizeof(btBuff), 0);
- if ((szEmail.GetLength() + sizeof(MRA_FT_HELLO)+1) == dwBuffSize) {
- // email received
- mir_snprintf(((LPSTR)btBuff + dwBuffSize), (_countof(btBuff) - dwBuffSize), "%s %s", MRA_FT_HELLO, szEmail.c_str());
- if (!_memicmp(btBuff, btBuff + dwBuffSize, dwBuffSize))
- return true;
- }
- }
- }
- else {// sending
- dwBuffSize = Netlib_Recv(hConnection, (LPSTR)btBuff, sizeof(btBuff), 0);
- if ((szEmail.GetLength() + sizeof(MRA_FT_HELLO)+1) == dwBuffSize) {
- // email received
- ProtoBroadcastAck(dat->hContact, ACKTYPE_FILE, ACKRESULT_INITIALISING, (HANDLE)dat->dwIDRequest, 0);
- mir_snprintf(((LPSTR)btBuff + dwBuffSize), (_countof(btBuff) - dwBuffSize), "%s %s", MRA_FT_HELLO, szEmail.c_str());
- if (!_memicmp(btBuff, btBuff + dwBuffSize, dwBuffSize)) {
- // email verified
- dwBuffSize = (mir_snprintf((LPSTR)btBuff, _countof(btBuff), "%s %s", MRA_FT_HELLO, szEmailMy.c_str()) + 1);
- if (dwBuffSize == (size_t)Netlib_Send(hConnection, (LPSTR)btBuff, (int)dwBuffSize, 0))
- return true;
- }
- }
- }
- }
- return false;
-}
-
-HANDLE CMraProto::MraFilesQueueConnectOut(MRA_FILES_QUEUE_ITEM *dat)
-{
- if (!dat)
- return nullptr;
-
- if (getByte("FileSendEnableDirectConn", MRA_DEF_FS_ENABLE_DIRECT_CONN) && InterlockedExchangeAdd((volatile LONG*)&dat->bIsWorking, 0) && ((dat->bSending == FALSE && getByte("FileSendNoOutConnOnRcv", MRA_DEF_FS_NO_OUT_CONN_ON_RCV) == FALSE) || (dat->bSending == TRUE && getByte("FileSendNoOutConnOnSend", MRA_DEF_FS_NO_OUT_CONN_ON_SEND) == FALSE))) {
- BOOL bFiltering = FALSE, bIsHTTPSProxyUsed = IsHTTPSProxyUsed(m_hNetlibUser);
- DWORD dwLocalPort = 0, dwConnectReTryCount, dwCurConnectReTryCount;
- size_t dwAddrCount = 0;
- NETLIBOPENCONNECTION nloc = { 0 };
-
- if (getByte("FileSendIgnoryAdditionalPorts", MRA_DEF_FS_IGNORY_ADDITIONAL_PORTS) || bIsHTTPSProxyUsed) {// фильтруем порты для одного IP, вместо 3 будем коннектится только к одному
- if (bIsHTTPSProxyUsed)
- dwLocalPort = MRA_SERVER_PORT_HTTPS;
- else if ((dwLocalPort = getWord("ServerPort", MRA_DEFAULT_SERVER_PORT)) == MRA_SERVER_PORT_STANDART_NLB)
- dwLocalPort = MRA_SERVER_PORT_STANDART;
-
- for (size_t i = 0; i < dat->malAddrList.dwAddrCount; i++) {
- if (dwLocalPort == dat->malAddrList.pMailAddress[i].dwPort) {
- bFiltering = TRUE;
- dwAddrCount++;
- }
- }
- }
-
- if (bFiltering == FALSE)
- dwAddrCount = dat->malAddrList.dwAddrCount;
-
- if (dwAddrCount) {
- dat->hConnection = nullptr;
- dwConnectReTryCount = getDword("ConnectReTryCountFileSend", MRA_DEFAULT_CONN_RETRY_COUNT_FILES);
- nloc.cbSize = sizeof(nloc);
- nloc.flags = NLOCF_V2;
- nloc.timeout = getDword("TimeOutConnectFileSend", (int)((MRA_TIMEOUT_DIRECT_CONN - 1) / (dwAddrCount*dwConnectReTryCount)));// -1 сек чтобы был запас
- if (nloc.timeout < MRA_TIMEOUT_CONN_MIN) nloc.timeout = MRA_TIMEOUT_CONN_MIN;
- if (nloc.timeout > MRA_TIMEOUT_CONN_MAX) nloc.timeout = MRA_TIMEOUT_CONN_MAX;
-
- // Set up the sockaddr structure
- for (size_t i = 0; i < dat->malAddrList.dwAddrCount; i++) {
- if (dwLocalPort == dat->malAddrList.pMailAddress[i].dwPort || bFiltering == FALSE) {
- ProtoBroadcastAck(dat->hContact, ACKTYPE_FILE, ACKRESULT_CONNECTING, (HANDLE)dat->dwIDRequest, 0);
-
- nloc.szHost = inet_ntoa((*((in_addr*)&dat->malAddrList.pMailAddress[i].dwAddr)));
- nloc.wPort = (WORD)dat->malAddrList.pMailAddress[i].dwPort;
-
- dwCurConnectReTryCount = dwConnectReTryCount;
- do {
- dat->hConnection = Netlib_OpenConnection(m_hNetlibUser, &nloc);
- }
- while (--dwCurConnectReTryCount && dat->hConnection == nullptr);
-
- if (dat->hConnection) {
- ProtoBroadcastAck(dat->hContact, ACKTYPE_FILE, ACKRESULT_CONNECTED, (HANDLE)dat->dwIDRequest, 0);
- if (MraFilesQueueHandCheck(dat->hConnection, dat)) {
- // связь установленная с тем кем нужно
- setDword(dat->hContact, "OldIP", getDword(dat->hContact, "IP", 0));
- setDword(dat->hContact, "IP", ntohl(dat->malAddrList.pMailAddress[i].dwAddr));
- break;
- }
- else // кажется не туда подключились :)
- NETLIB_CLOSEHANDLE(dat->hConnection);
- }
- }
- }
- }
- }
- return dat->hConnection;
-}
-
-LPWSTR GetFileNameFromFullPathW(LPWSTR lpwszFullPath, size_t dwFullPathSize)
-{
- LPWSTR lpwszFileName = lpwszFullPath, lpwszCurPos;
-
- lpwszCurPos = (lpwszFullPath + dwFullPathSize);
- for (; lpwszCurPos > lpwszFullPath; lpwszCurPos--) {
- if ((*lpwszCurPos) == '\\') {
- lpwszFileName = (lpwszCurPos + 1);
- break;
- }
- }
- return lpwszFileName;
-}
-
-HANDLE CMraProto::MraFilesQueueConnectIn(MRA_FILES_QUEUE_ITEM *dat)
-{
- if (!dat)
- return nullptr;
- if (!InterlockedExchangeAdd((volatile LONG*)&dat->bIsWorking, 0))
- return nullptr;
-
- CMStringA szEmail;
- if (mraGetStringA(dat->hContact, "e-mail", szEmail)) {
- CHAR szAddrList[2048] = { 0 };
- size_t dwAddrListSize;
-
- // копируем адреса в соответствии с правилами и начинаем слушать порт
- if (getByte("FileSendEnableDirectConn", MRA_DEF_FS_ENABLE_DIRECT_CONN)) {
- NETLIBBIND nlbBind = {};
- nlbBind.pfnNewConnectionV2 = MraFilesQueueConnectionReceived;
- nlbBind.wPort = 0;
- nlbBind.pExtra = (LPVOID)dat;
-
- dat->hListen = Netlib_BindPort(m_hNetlibUser, &nlbBind);
- if (dat->hListen) {
- ProtoBroadcastAck(dat->hContact, ACKTYPE_FILE, ACKRESULT_LISTENING, (HANDLE)dat->dwIDRequest, 0);
- dwAddrListSize = MraFilesQueueGetLocalAddressesList(szAddrList, sizeof(szAddrList), nlbBind.wPort);
- }
- // не смогли слушать порт, хз почему.
- else {
- ShowFormattedErrorMessage(L"Files exchange: cant create listen soscket, will try connect to remonte host. Error", GetLastError());
-
- //dwAddrListSize = 0;
- memcpy(szAddrList, MRA_FILES_NULL_ADDRR, sizeof(MRA_FILES_NULL_ADDRR));
- dwAddrListSize = (sizeof(MRA_FILES_NULL_ADDRR)-1);
- }
- }
- // подставляем ложный адрес, чтобы точно не подключились и не слушаем порт
- else {
- memcpy(szAddrList, MRA_FILES_NULL_ADDRR, sizeof(MRA_FILES_NULL_ADDRR));
- dwAddrListSize = (sizeof(MRA_FILES_NULL_ADDRR)-1);
- }
-
- if (dwAddrListSize) {
- dat->hWaitHandle = CreateEvent(nullptr, TRUE, FALSE, nullptr);
- if (dat->bSending == FALSE) // запрашиваем зеркальное соединение, тк сами подключится не смогли
- MraFileTransferAck(FILE_TRANSFER_MIRROR, szEmail, dat->dwIDRequest, szAddrList);
- else { // здесь отправляем запрос на передачу(установление соединения)
- // создаём текстовый список файлов для отправки другой стороне
- LPWSTR lpwszFiles, lpwszCurPos;
- size_t dwFilesSize;
-
- dwFilesSize = ((MAX_PATH * 2)*dat->dwFilesCount);
- lpwszFiles = (LPWSTR)mir_calloc((dwFilesSize*sizeof(WCHAR)));
- if (lpwszFiles) {
- lpwszCurPos = lpwszFiles;
- for (size_t i = 0; i < dat->dwFilesCount; i++) {
- MRA_FILES_QUEUE_FILE &p = dat->pmfqfFiles[i];
- lpwszCurPos += mir_snwprintf(lpwszCurPos, (dwFilesSize - ((size_t)lpwszCurPos - (size_t)lpwszFiles)), L"%s;%I64u;",
- GetFileNameFromFullPathW(p.lpwszName, p.dwNameLen), p.dwSize);
- }
- dwFilesSize = (lpwszCurPos - lpwszFiles);// size in WCHARs
-
- if (dat->hMraMrimProxyData) {
- // устанавливаем данные для майловской прокси, если она разрешена
- CMStringA lpszFiles = lpwszFiles;
- MraMrimProxySetData(dat->hMraMrimProxyData, szEmail, dat->dwIDRequest, MRIM_PROXY_TYPE_FILES, lpszFiles, "", nullptr);
- }
- MraFileTransfer(szEmail, dat->dwIDRequest, dat->dwFilesTotalSize, lpwszFiles, szAddrList);
-
- mir_free(lpwszFiles);
- }
- }
- WaitForSingleObjectEx(dat->hWaitHandle, INFINITE, FALSE);
- CloseHandle(dat->hWaitHandle);
- dat->hWaitHandle = nullptr;
- }
- }
- return dat->hConnection;
-}
-
-// This function is called from the Netlib when someone is connecting to
-// one of our incomming DC ports
-void MraFilesQueueConnectionReceived(HNETLIBCONN hNewConnection, DWORD dwRemoteIP, void *pExtra)
-{
- if (pExtra) {
- MRA_FILES_QUEUE_ITEM *dat = (MRA_FILES_QUEUE_ITEM*)pExtra;
-
- ProtoBroadcastAck(dat->ppro->m_szModuleName, dat->hContact, ACKTYPE_FILE, ACKRESULT_CONNECTED, (HANDLE)dat->dwIDRequest, 0);
- if (dat->ppro->MraFilesQueueHandCheck(hNewConnection, dat)) { // связь установленная с тем кем нужно
- dat->hConnection = hNewConnection;
- ProtoBroadcastAck(dat->ppro->m_szModuleName, dat->hContact, ACKTYPE_FILE, ACKRESULT_CONNECTED, (HANDLE)dat->dwIDRequest, 0);
- dat->ppro->setDword(dat->hContact, "OldIP", dat->ppro->getDword(dat->hContact, "IP", 0));
- dat->ppro->setDword(dat->hContact, "IP", dwRemoteIP);
- SetEvent(dat->hWaitHandle);
- }
- else {// кажется кто то не туда подключилися :)
- ProtoBroadcastAck(dat->ppro->m_szModuleName, dat->hContact, ACKTYPE_FILE, ACKRESULT_LISTENING, (HANDLE)dat->dwIDRequest, 0);
- Netlib_CloseHandle(hNewConnection);
- }
- }
- else Netlib_CloseHandle(hNewConnection);
-}
-
-/////////////////////////////////////////////////////////////////////////////////////////
-// Receive files
-
-DWORD CMraProto::MraFilesQueueAddReceive(HANDLE hQueue, DWORD dwFlags, MCONTACT hContact, DWORD dwIDRequest, const CMStringW &lpwszFiles, const CMStringA &szAddresses)
-{
- if (!hQueue || !dwIDRequest)
- return ERROR_INVALID_HANDLE;
-
- MRA_FILES_QUEUE *pmrafqFilesQueue = (MRA_FILES_QUEUE*)hQueue;
- MRA_FILES_QUEUE_ITEM *dat = (MRA_FILES_QUEUE_ITEM*)mir_calloc(sizeof(MRA_FILES_QUEUE_ITEM)+sizeof(LPSTR)+64);
- if (!dat)
- return GetLastError();
-
- WCHAR szBuff[MAX_PATH];
- size_t dwMemSize, dwAllocatedCount, dwFileNameTotalSize;
-
- //dat->lmtListMTItem;
- dat->ppro = this;
- dat->bIsWorking = TRUE;
- dat->dwSendTime = GetTickCount();
- dat->dwIDRequest = dwIDRequest;
- dat->dwFlags = dwFlags;
- dat->hContact = hContact;
- if (getByte("FileSendEnableMRIMProxyCons", MRA_DEF_FS_ENABLE_MRIM_PROXY_CONS))
- dat->hMraMrimProxyData = MraMrimProxyCreate();
-
- dwFileNameTotalSize = 0;
- dwAllocatedCount = ALLOCATED_COUNT;
- dat->dwFilesCount = 0;
- dat->dwFilesTotalSize = 0;
- dat->pmfqfFiles = (MRA_FILES_QUEUE_FILE*)mir_calloc((sizeof(MRA_FILES_QUEUE_FILE)*dwAllocatedCount));
-
- int iStart = 0;
- while (TRUE) {
- CMStringW wszCurrFile = lpwszFiles.Tokenize(L";", iStart);
- if (iStart == -1)
- break;
-
- CMStringW wszCurrSize = lpwszFiles.Tokenize(L";", iStart);
- if (iStart == -1)
- break;
-
- if (dat->dwFilesCount == dwAllocatedCount) {
- dwAllocatedCount *= 2;
- dat->pmfqfFiles = (MRA_FILES_QUEUE_FILE*)mir_realloc(dat->pmfqfFiles, (sizeof(MRA_FILES_QUEUE_FILE)*dwAllocatedCount));
- }
-
- MRA_FILES_QUEUE_FILE &p = dat->pmfqfFiles[dat->dwFilesCount];
- p.lpwszName = mir_wstrdup(wszCurrFile);
- p.dwNameLen = mir_wstrlen(p.lpwszName);
- p.dwSize = _wtoi(wszCurrSize);
- dat->dwFilesTotalSize += p.dwSize;
- dwFileNameTotalSize += p.dwNameLen * sizeof(wchar_t);
-
- dat->dwFilesCount++;
- }
- dat->pmfqfFiles = (MRA_FILES_QUEUE_FILE*)mir_realloc(dat->pmfqfFiles, (sizeof(MRA_FILES_QUEUE_FILE)*(dat->dwFilesCount + 4)));
-
- dwMemSize = (((dat->dwFilesCount + 4) * 64) + (dwFileNameTotalSize*sizeof(WCHAR)) + (szAddresses.GetLength()*sizeof(WCHAR)) + 128);
- dat->pwszFilesList = (LPWSTR)mir_calloc(dwMemSize);
- dat->pwszDescription = (LPWSTR)mir_calloc(dwMemSize);
-
- LPWSTR lpwszDelimiter = dat->pwszFilesList;
- LPWSTR lpwszCurrentItem = dat->pwszDescription;
- StrFormatByteSizeW(dat->dwFilesTotalSize, szBuff, _countof(szBuff));
- lpwszCurrentItem += mir_snwprintf(lpwszCurrentItem, ((dwMemSize - ((size_t)lpwszCurrentItem - (size_t)dat->pwszDescription)) / sizeof(WCHAR)), L"%I64u Files (%s)\r\n", dat->dwFilesCount, szBuff);
-
- // description + filesnames
- for (size_t i = 0; i < dat->dwFilesCount; i++) {
- lpwszDelimiter += mir_snwprintf(lpwszDelimiter, ((dwMemSize - ((size_t)lpwszDelimiter - (size_t)dat->pwszFilesList)) / sizeof(WCHAR)), L"%s", dat->pmfqfFiles[i].lpwszName);
- StrFormatByteSizeW(dat->pmfqfFiles[i].dwSize, szBuff, _countof(szBuff));
- lpwszCurrentItem += mir_snwprintf(lpwszCurrentItem, ((dwMemSize - ((size_t)lpwszCurrentItem - (size_t)dat->pwszDescription)) / sizeof(WCHAR)), L"%s - %s\r\n", dat->pmfqfFiles[i].lpwszName, szBuff);
- }
-
- lpwszCurrentItem += MultiByteToWideChar(MRA_CODE_PAGE, 0, szAddresses, (int)szAddresses.GetLength(), lpwszCurrentItem, (int)((dwMemSize - ((size_t)lpwszCurrentItem - (size_t)dat->pwszDescription)) / sizeof(WCHAR)));
- *lpwszCurrentItem = 0;
-
- MraAddrListGetFromBuff(szAddresses, &dat->malAddrList);
- MraAddrListStoreToContact(dat->hContact, &dat->malAddrList);
- {
- mir_cslock l(pmrafqFilesQueue->cs);
- ListMTItemAdd(pmrafqFilesQueue, dat, dat);
- }
-
- // Send chain event
- PROTORECVFILE prf;
- prf.dwFlags = PRFF_UNICODE;
- prf.timestamp = _time32(nullptr);
- prf.descr.w = dat->pwszDescription;
- prf.fileCount = 1;
- prf.files.w = &dat->pwszFilesList;
- prf.lParam = dwIDRequest;
- ProtoChainRecvFile(hContact, &prf);
- return NO_ERROR;
-}
-
-void CMraProto::MraFilesQueueRecvThreadProc(LPVOID lpParameter)
-{
- DWORD dwRetErrorCode = NO_ERROR;
-
- Thread_SetName("MRA: FilesQueueRecv");
-
- if (lpParameter) {
- MRA_FILES_QUEUE *pmrafqFilesQueue = (MRA_FILES_QUEUE*)((MRA_FILES_THREADPROC_PARAMS*)lpParameter)->hFilesQueueHandle;
- MRA_FILES_QUEUE_ITEM *dat = ((MRA_FILES_THREADPROC_PARAMS*)lpParameter)->dat;
-
- WCHAR wszFileName[MAX_FILEPATH] = { 0 };
- WCHAR szErrorText[2048];
- BYTE btBuff[BUFF_SIZE_RCV];
- BOOL bContinue, bFailed, bOK, bConnected;
- DWORD dwReceived, dwUpdateTimeNext, dwUpdateTimeCur;
- HANDLE hFile;
- size_t i, dwBuffSizeUsed;
- LARGE_INTEGER liFileSize;
- NETLIBSELECT nls = { 0 };
- PROTOFILETRANSFERSTATUS pfts = {};
-
- mir_free(lpParameter);
-
- bFailed = TRUE;
- bConnected = FALSE;
- pfts.hContact = dat->hContact;
- pfts.flags = (PFTS_RECEIVING | PFTS_UNICODE);// pfts.sending = dat->bSending; //true if sending, false if receiving
- //pfts.files;
- pfts.totalFiles = dat->dwFilesCount;
- //pfts.currentFileNumber = 0;
- pfts.totalBytes = dat->dwFilesTotalSize;
- //pfts.totalProgress = 0;
- pfts.szWorkingDir.w = dat->lpwszPath;
- //pfts.currentFile;
- //pfts.currentFileSize;
- //pfts.currentFileProgress;
- //pfts.currentFileTime; //as seconds since 1970
-
- if (MraFilesQueueConnectOut(dat)) {
- bConnected = TRUE;
- }
- else {
- if (MraFilesQueueConnectIn(dat)) {
- bConnected = TRUE;
- }
- else {
- if (InterlockedExchangeAdd((volatile LONG*)&dat->bIsWorking, 0)) {
- ProtoBroadcastAck(dat->hContact, ACKRESULT_CONNECTPROXY, ACKRESULT_CONNECTED, (HANDLE)dat->dwIDRequest, 0);
- if (MraMrimProxyConnect(dat->hMraMrimProxyData, &dat->hConnection) == NO_ERROR) {// подключились к прокси, проверяем та ли сессия (ещё раз, на этот раз сами)
- if (MraFilesQueueHandCheck(dat->hConnection, dat)) {// связь установленная с тем кем нужно// dat->bSending
- ProtoBroadcastAck(dat->hContact, ACKTYPE_FILE, ACKRESULT_CONNECTED, (HANDLE)dat->dwIDRequest, 0);
- bConnected = TRUE;
- }
- }
- }
- }
- }
-
- if (bConnected) {// email verified
- bFailed = FALSE;
- for (i = 0; i < dat->dwFilesCount; i++) {// receiving files
- pfts.currentFileNumber = (int)i;
- pfts.szCurrentFile.w = wszFileName;
- pfts.currentFileSize = dat->pmfqfFiles[i].dwSize;
- pfts.currentFileProgress = 0;
- //pfts.currentFileTime; //as seconds since 1970
-
- if ((dat->dwPathSize + dat->pmfqfFiles[i].dwNameLen) < _countof(wszFileName)) {
- memcpy(wszFileName, dat->lpwszPath, (dat->dwPathSize*sizeof(WCHAR)));
- memcpy((wszFileName + dat->dwPathSize), dat->pmfqfFiles[i].lpwszName, ((dat->pmfqfFiles[i].dwNameLen + 1)*sizeof(WCHAR)));
- wszFileName[dat->dwPathSize + dat->pmfqfFiles[i].dwNameLen] = 0;
- }
- else {
- dwRetErrorCode = ERROR_BAD_PATHNAME;
- ShowFormattedErrorMessage(L"Receive files: error", dwRetErrorCode);
- bFailed = TRUE;
- break;
- }
-
- //***deb add
- //dwBuffSizeUsed = ProtoBroadcastAck(dat->hContact, ACKTYPE_FILE, ACKRESULT_FILERESUME, (HANDLE)dat->dwIDRequest, (LPARAM)&pfts);
-
- ProtoBroadcastAck(dat->hContact, ACKTYPE_FILE, ACKRESULT_NEXTFILE, (HANDLE)dat->dwIDRequest, 0);
-
- //dwBuffSizeUsed = (mir_snprintf((LPSTR)btBuff, _countof(btBuff), "%s %S", MRA_FT_GET_FILE, dat->pmfqfFiles[i].lpwszName)+1);
- memcpy(btBuff, MRA_FT_GET_FILE, sizeof(MRA_FT_GET_FILE));
- btBuff[(sizeof(MRA_FT_GET_FILE)-1)] = ' ';
- dwBuffSizeUsed = sizeof(MRA_FT_GET_FILE) + WideCharToMultiByte(MRA_CODE_PAGE, 0, dat->pmfqfFiles[i].lpwszName, (int)dat->pmfqfFiles[i].dwNameLen, (LPSTR)(btBuff + sizeof(MRA_FT_GET_FILE)), (int)(_countof(btBuff) - sizeof(MRA_FT_GET_FILE)), nullptr, nullptr);
- btBuff[dwBuffSizeUsed] = 0;
- dwBuffSizeUsed++;
-
- if (dwBuffSizeUsed == (size_t)Netlib_Send(dat->hConnection, (LPSTR)btBuff, (int)dwBuffSizeUsed, 0)) {// file request sended
- hFile = CreateFileW(wszFileName, GENERIC_WRITE, FILE_SHARE_READ, nullptr, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, nullptr);
- if (hFile != INVALID_HANDLE_VALUE) {// file opened/created, pre allocating disk space, for best perfomance
- bOK = FALSE;
-
- liFileSize.QuadPart = (LONGLONG)dat->pmfqfFiles[i].dwSize;
- if (SetFilePointerEx(hFile, liFileSize, nullptr, FILE_BEGIN))
- if (SetEndOfFile(hFile)) {
- liFileSize.QuadPart = 0;
- bOK = SetFilePointerEx(hFile, liFileSize, nullptr, FILE_BEGIN);
- }
-
- if (bOK) {// disk space pre allocated
- bOK = FALSE;
- bContinue = TRUE;
- dwUpdateTimeNext = GetTickCount();
- nls.dwTimeout = (1000 * getDword("TimeOutReceiveFileData", MRA_DEF_FS_TIMEOUT_RECV));
- nls.hReadConns[0] = dat->hConnection;
- ProtoBroadcastAck(dat->hContact, ACKTYPE_FILE, ACKRESULT_DATA, (HANDLE)dat->dwIDRequest, (LPARAM)&pfts);
-
- while (bContinue) {
- switch (Netlib_Select(&nls)) {
- case SOCKET_ERROR:
- case 0:// Time out
- dwRetErrorCode = GetLastError();
- ShowFormattedErrorMessage(L"Receive files: error on receive file data", dwRetErrorCode);
- bContinue = FALSE;
- break;
- case 1:
- dwReceived = Netlib_Recv(dat->hConnection, (LPSTR)&btBuff, _countof(btBuff), 0);
- if (dwReceived == 0 || dwReceived == SOCKET_ERROR) {
- dwRetErrorCode = GetLastError();
- ShowFormattedErrorMessage(L"Receive files: error on receive file data", dwRetErrorCode);
- bContinue = FALSE;
- }
- else {
- if (WriteFile(hFile, (LPVOID)&btBuff, dwReceived, &dwReceived, nullptr)) {
- pfts.currentFileProgress += dwReceived;
- pfts.totalProgress += dwReceived;
-
- // progress updates
- dwUpdateTimeCur = GetTickCount();
- if (dwUpdateTimeNext <= dwUpdateTimeCur || pfts.currentFileProgress >= dat->pmfqfFiles[i].dwSize) {// we update it
- dwUpdateTimeNext = dwUpdateTimeCur + MRA_FILES_QUEUE_PROGRESS_INTERVAL;
- ProtoBroadcastAck(dat->hContact, ACKTYPE_FILE, ACKRESULT_DATA, (HANDLE)dat->dwIDRequest, (LPARAM)&pfts);
-
- if (pfts.currentFileProgress >= dat->pmfqfFiles[i].dwSize) {// file received
- bOK = TRUE;
- bContinue = FALSE;
- }
- }
- }
- else {// err on write file
- dwRetErrorCode = GetLastError();
- ShowFormattedErrorMessage(L"Receive files: cant write file data, error", dwRetErrorCode);
- bContinue = FALSE;
- }
- }
- break;
- }
- }// end while
- }
- else {// err allocating file disk space
- dwRetErrorCode = GetLastError();
- mir_snwprintf(szErrorText, TranslateT("Receive files: can't allocate disk space for file, size %lu bytes, error"), dat->pmfqfFiles[i].dwSize);
- ShowFormattedErrorMessage(szErrorText, dwRetErrorCode);
- }
- CloseHandle(hFile);
-
- if (bOK == FALSE) {// file recv failed
- DeleteFileW(wszFileName);
- bFailed = TRUE;
- break;
- }
- }
- else {// err on open file
- dwRetErrorCode = GetLastError();
- mir_snwprintf(szErrorText, TranslateT("Receive files: can't open file %s, error"), wszFileName);
- ShowFormattedErrorMessage(szErrorText, dwRetErrorCode);
- bFailed = TRUE;
- break;
- }
- }
- else {// err on send request for file
- dwRetErrorCode = GetLastError();
- mir_snwprintf(szErrorText, TranslateT("Receive files: request for file %s not sent, error"), dat->pmfqfFiles[i].lpwszName);
- ShowFormattedErrorMessage(szErrorText, NO_ERROR);
- bFailed = TRUE;
- break;
- }
- }// end for
-
- NETLIB_CLOSEHANDLE(dat->hConnection);
- }
-
- if (bFailed) {
- CMStringA szEmail;
- if (mraGetStringA(dat->hContact, "e-mail", szEmail))
- MraFileTransferAck(FILE_TRANSFER_STATUS_ERROR, szEmail, dat->dwIDRequest, CMStringA());
-
- ProtoBroadcastAck(dat->hContact, ACKTYPE_FILE, ACKRESULT_FAILED, (HANDLE)dat->dwIDRequest, 0);
- }
- else ProtoBroadcastAck(dat->hContact, ACKTYPE_FILE, ACKRESULT_SUCCESS, (HANDLE)dat->dwIDRequest, 0);
-
- mir_cslock l(pmrafqFilesQueue->cs);
- MraFilesQueueItemFree(dat);
- }
-}
-
-/////////////////////////////////////////////////////////////////////////////////////////
-// Send files
-
-DWORD CMraProto::MraFilesQueueAddSend(HANDLE hQueue, DWORD dwFlags, MCONTACT hContact, LPWSTR *plpwszFiles, size_t dwFilesCount, DWORD *pdwIDRequest)
-{
- if (!hQueue)
- return ERROR_INVALID_HANDLE;
-
- MRA_FILES_QUEUE *pmrafqFilesQueue = (MRA_FILES_QUEUE*)hQueue;
- MRA_FILES_QUEUE_ITEM *dat = (MRA_FILES_QUEUE_ITEM*)mir_calloc(sizeof(MRA_FILES_QUEUE_ITEM)+sizeof(LPSTR)+64);
- if (!dat)
- return GetLastError();
-
- ULARGE_INTEGER uliFileSize;
- WIN32_FILE_ATTRIBUTE_DATA wfad;
-
- dat->ppro = this;
- dat->bIsWorking = TRUE;
- dat->dwSendTime = GetTickCount();
- dat->dwIDRequest = InterlockedIncrement((LONG volatile*)&dwCMDNum);// уникальный, рандомный идентификатор
- dat->dwFlags = dwFlags;
- dat->hContact = hContact;
- if (getByte("FileSendEnableMRIMProxyCons", MRA_DEF_FS_ENABLE_MRIM_PROXY_CONS)) dat->hMraMrimProxyData = MraMrimProxyCreate();
- dat->dwFilesCount = dwFilesCount;
- dat->pmfqfFiles = (MRA_FILES_QUEUE_FILE*)mir_calloc((sizeof(MRA_FILES_QUEUE_FILE)*(dat->dwFilesCount + 1)));
- dat->dwFilesTotalSize = 0;
-
- for (size_t i = 0; i < dat->dwFilesCount; i++) {
- MRA_FILES_QUEUE_FILE &p = dat->pmfqfFiles[i];
- if (GetFileAttributesExW(plpwszFiles[i], GetFileExInfoStandard, &wfad)) {
- uliFileSize.LowPart = wfad.nFileSizeLow;
- uliFileSize.HighPart = wfad.nFileSizeHigh;
- p.dwSize = uliFileSize.QuadPart;
- dat->dwFilesTotalSize += uliFileSize.QuadPart;
- }
- else p.dwSize = 0;
-
- p.dwNameLen = mir_wstrlen(plpwszFiles[i]);
- p.lpwszName = mir_wstrdup(plpwszFiles[i]);
- }
-
- dat->bSending = TRUE;
- if (pdwIDRequest) *pdwIDRequest = dat->dwIDRequest;
-
- {
- mir_cslock l(pmrafqFilesQueue->cs);
- ListMTItemAdd(pmrafqFilesQueue, dat, dat);
- }
- MRA_FILES_THREADPROC_PARAMS *pmftpp = (MRA_FILES_THREADPROC_PARAMS*)mir_calloc(sizeof(MRA_FILES_THREADPROC_PARAMS));
- pmftpp->hFilesQueueHandle = hQueue;
- pmftpp->dat = dat;
- dat->hThread = ForkThreadEx(&CMraProto::MraFilesQueueSendThreadProc, pmftpp, nullptr);
-
- return NO_ERROR;
-}
-
-void CMraProto::MraFilesQueueSendThreadProc(LPVOID lpParameter)
-{
- DWORD dwRetErrorCode = NO_ERROR;
-
- Thread_SetName("MRA: FilesQueueSend");
-
- if (!lpParameter)
- return;
-
- MRA_FILES_QUEUE *pmrafqFilesQueue = (MRA_FILES_QUEUE*)((MRA_FILES_THREADPROC_PARAMS*)lpParameter)->hFilesQueueHandle;
- MRA_FILES_QUEUE_ITEM *dat = ((MRA_FILES_THREADPROC_PARAMS*)lpParameter)->dat;
- mir_free(lpParameter);
-
- CHAR szFileName[MAX_FILEPATH] = { 0 };
- WCHAR szErrorText[2048];
- BYTE btBuff[BUFF_SIZE_RCV];
- BOOL bFailed = TRUE, bOK, bConnected = FALSE;
- DWORD dwReceived, dwSendBlockSize, dwUpdateTimeNext, dwUpdateTimeCur;
- size_t i, j, dwBuffSizeUsed = 0;
- LPWSTR lpwszFileName;
-
- PROTOFILETRANSFERSTATUS pfts = {};
- pfts.hContact = dat->hContact;
- pfts.flags = (PFTS_SENDING | PFTS_UNICODE);// pfts.sending = dat->bSending; //true if sending, false if receiving
- pfts.totalFiles = dat->dwFilesCount;
- pfts.totalBytes = dat->dwFilesTotalSize;
- pfts.szWorkingDir.w = dat->lpwszPath;
-
- dwSendBlockSize = getDword("FileSendBlockSize", MRA_DEFAULT_FILE_SEND_BLOCK_SIZE);
- if (dwSendBlockSize > _countof(btBuff)) dwSendBlockSize = _countof(btBuff);
- if (dwSendBlockSize < 512) dwSendBlockSize = MRA_DEFAULT_FILE_SEND_BLOCK_SIZE;
-
- if (MraFilesQueueConnectIn(dat))
- bConnected = TRUE;
- else if (MraFilesQueueConnectOut(dat))
- bConnected = TRUE;
- else {
- if (InterlockedExchangeAdd((volatile LONG*)&dat->bIsWorking, 0)) {
- ProtoBroadcastAck(dat->hContact, ACKRESULT_CONNECTPROXY, ACKRESULT_CONNECTED, (HANDLE)dat->dwIDRequest, 0);
- if (MraMrimProxyConnect(dat->hMraMrimProxyData, &dat->hConnection) == NO_ERROR) {
- // подключились к прокси, проверяем та ли сессия (ещё раз, на этот раз сами)
- if (MraFilesQueueHandCheck(dat->hConnection, dat)) {
- // связь установленная с тем кем нужно// dat->bSending
- ProtoBroadcastAck(dat->hContact, ACKTYPE_FILE, ACKRESULT_CONNECTED, (HANDLE)dat->dwIDRequest, 0);
- bConnected = TRUE;
- }
- }
- }
- }
-
- if (bConnected) { // email verified
- bFailed = FALSE;
- for (i = 0; i < dat->dwFilesCount; i++) { // sending files
- ProtoBroadcastAck(dat->hContact, ACKTYPE_FILE, ACKRESULT_NEXTFILE, (HANDLE)dat->dwIDRequest, 0);
-
- dwBuffSizeUsed = 0;
- while (TRUE) {
- dwReceived = Netlib_Recv(dat->hConnection, ((LPSTR)btBuff + dwBuffSizeUsed), (int)(_countof(btBuff) - dwBuffSizeUsed), 0);
- if (dwReceived == 0 || dwReceived == SOCKET_ERROR) { // err on receive file name to send
- dwRetErrorCode = GetLastError();
- ShowFormattedErrorMessage(L"Send files: file send request not received, error", dwRetErrorCode);
- bFailed = TRUE;
- break;
- }
- else {
- dwBuffSizeUsed += dwReceived;
- if (MemoryFindByte((dwBuffSizeUsed - dwReceived), btBuff, dwBuffSizeUsed, 0))
- break;
- }
- }// end while (file name passible received)*/
-
- if (bFailed)
- break;
-
- // ...received
- if (dwBuffSizeUsed > (sizeof(MRA_FT_GET_FILE)+1)) {// file name received
- if (!_memicmp(btBuff, MRA_FT_GET_FILE, sizeof(MRA_FT_GET_FILE)-1)) {
- // MRA_FT_GET_FILE verified
- bFailed = TRUE;
- for (j = 0; j < dat->dwFilesCount; j++) {
- lpwszFileName = GetFileNameFromFullPathW(dat->pmfqfFiles[j].lpwszName, dat->pmfqfFiles[j].dwNameLen);
- szFileName[WideCharToMultiByte(MRA_CODE_PAGE, 0, lpwszFileName, (int)(dat->pmfqfFiles[j].dwNameLen - (lpwszFileName - dat->pmfqfFiles[j].lpwszName)), szFileName, _countof(szFileName), nullptr, nullptr)] = 0;
-
- if (!_memicmp(btBuff + sizeof(MRA_FT_GET_FILE), szFileName, dwBuffSizeUsed - (sizeof(MRA_FT_GET_FILE)+1))) {
- bFailed = FALSE;
- break;
- }
- }
-
- if (bFailed == FALSE) {
- HANDLE hFile = CreateFileW(dat->pmfqfFiles[j].lpwszName, GENERIC_READ, FILE_SHARE_READ, nullptr, OPEN_EXISTING, (FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN), nullptr);
- if (hFile != INVALID_HANDLE_VALUE) {
- bOK = FALSE;
- dwUpdateTimeNext = GetTickCount();
- pfts.currentFileNumber = (int)i;
- pfts.szCurrentFile.w = dat->pmfqfFiles[j].lpwszName;
- pfts.currentFileSize = dat->pmfqfFiles[j].dwSize;
- pfts.currentFileProgress = 0;
- //pfts.currentFileTime; //as seconds since 1970
-
- WideCharToMultiByte(MRA_CODE_PAGE, 0, dat->pmfqfFiles[j].lpwszName, (int)dat->pmfqfFiles[j].dwNameLen, szFileName, _countof(szFileName), nullptr, nullptr);
- ProtoBroadcastAck(dat->hContact, ACKTYPE_FILE, ACKRESULT_DATA, (HANDLE)dat->dwIDRequest, (LPARAM)&pfts);
-
- while (TRUE) { // read and sending
- if (ReadFile(hFile, btBuff, dwSendBlockSize, (DWORD*)&dwBuffSizeUsed, nullptr)) {
- dwReceived = Netlib_Send(dat->hConnection, (LPSTR)btBuff, (int)dwBuffSizeUsed, 0);
- if (dwBuffSizeUsed == dwReceived) {
- pfts.currentFileProgress += dwBuffSizeUsed;
- pfts.totalProgress += dwBuffSizeUsed;
-
- // progress updates
- dwUpdateTimeCur = GetTickCount();
- if (dwUpdateTimeNext <= dwUpdateTimeCur || pfts.currentFileProgress >= dat->pmfqfFiles[j].dwSize) { // we update it
- dwUpdateTimeNext = dwUpdateTimeCur + MRA_FILES_QUEUE_PROGRESS_INTERVAL;
-
- ProtoBroadcastAck(dat->hContact, ACKTYPE_FILE, ACKRESULT_DATA, (HANDLE)dat->dwIDRequest, (LPARAM)&pfts);
-
- if (pfts.currentFileProgress >= dat->pmfqfFiles[j].dwSize) { // file received
- bOK = TRUE;
- break;
- }
- }
- }
- else { // err on send file data
- dwRetErrorCode = GetLastError();
- ShowFormattedErrorMessage(L"Send files: error on send file data", dwRetErrorCode);
- break;
- }
- }
- else {// read failure
- dwRetErrorCode = GetLastError();
- ShowFormattedErrorMessage(L"Send files: cant read file data, error", dwRetErrorCode);
- break;
- }
- }// end while
- CloseHandle(hFile);
-
- if (bOK == FALSE) { // file recv failed
- bFailed = TRUE;
- break;
- }
- }
- else { // err on open file
- dwRetErrorCode = GetLastError();
- mir_snwprintf(szErrorText, TranslateT("Send files: can't open file %s, error"), dat->pmfqfFiles[j].lpwszName);
- ShowFormattedErrorMessage(szErrorText, dwRetErrorCode);
- bFailed = TRUE;
- break;
- }
- }
- else {
- mir_snwprintf(szErrorText, TranslateT("Send files: requested file: %S - not found in send files list."), (((LPSTR)btBuff) + sizeof(MRA_FT_GET_FILE)));
- ShowFormattedErrorMessage(szErrorText, NO_ERROR);
- bFailed = TRUE;
- break;
- }
- }
- else { // err on receive, trash
- ShowFormattedErrorMessage(L"Send files: bad file send request - invalid header", NO_ERROR);
- bFailed = TRUE;
- break;
- }
- }
- else { // bad file name or trash
- ShowFormattedErrorMessage(L"Send files: bad file send request - to small packet", NO_ERROR);
- bFailed = TRUE;
- break;
- }
- }// end for
-
- NETLIB_CLOSEHANDLE(dat->hConnection);
- }
-
- if (bFailed) {
- CMStringA szEmail;
- if (mraGetStringA(dat->hContact, "e-mail", szEmail))
- MraFileTransferAck(FILE_TRANSFER_STATUS_ERROR, szEmail, dat->dwIDRequest, CMStringA());
-
- ProtoBroadcastAck(dat->hContact, ACKTYPE_FILE, ACKRESULT_FAILED, (HANDLE)dat->dwIDRequest, 0);
- }
- else ProtoBroadcastAck(dat->hContact, ACKTYPE_FILE, ACKRESULT_SUCCESS, (HANDLE)dat->dwIDRequest, 0);
-
- mir_cslock l(pmrafqFilesQueue->cs);
- MraFilesQueueItemFree(dat);
-}
diff --git a/protocols/MRA/src/MraFilesQueue.h b/protocols/MRA/src/MraFilesQueue.h
deleted file mode 100644
index c833c02fa5..0000000000
--- a/protocols/MRA/src/MraFilesQueue.h
+++ /dev/null
@@ -1,17 +0,0 @@
-#if !defined(AFX_MRA_FILESQUEUE_H__F58D13FF_F6F2_476C_B8F0_7B9E9357CF48__INCLUDED_)
-#define AFX_MRA_FILESQUEUE_H__F58D13FF_F6F2_476C_B8F0_7B9E9357CF48__INCLUDED_
-
-#pragma once
-
-INT_PTR CALLBACK MraFilesQueueDlgProcOpts(HWND hWndDlg, UINT msg, WPARAM wParam, LPARAM lParam);
-
-DWORD MraFilesQueueInitialize(DWORD dwFilesTimeOutInterval, HANDLE *phFilesQueueHandle);
-void MraFilesQueueDestroy(HANDLE hFilesQueueHandle);
-
-void MraFilesQueueConnectionReceived(HNETLIBCONN hNewConnection, DWORD dwRemoteIP, void *pExtra);
-
-HANDLE MraFilesQueueItemProxyByID(HANDLE hFilesQueueHandle, DWORD dwIDRequest);
-DWORD MraFilesQueueStartMrimProxy(HANDLE hFilesQueueHandle, DWORD dwIDRequest);
-DWORD MraFilesQueueFree(HANDLE hFilesQueueHandle, DWORD dwCMDNum);
-
-#endif // !defined(AFX_MRA_FILESQUEUE_H__F58D13FF_F6F2_476C_B8F0_7B9E9357CF48__INCLUDED_)
diff --git a/protocols/MRA/src/MraIcons.cpp b/protocols/MRA/src/MraIcons.cpp
deleted file mode 100644
index 7569b3fe53..0000000000
--- a/protocols/MRA/src/MraIcons.cpp
+++ /dev/null
@@ -1,145 +0,0 @@
-#include "stdafx.h"
-#include "MraIcons.h"
-
-HANDLE hXStatusAdvancedStatusIcons[MRA_XSTATUS_COUNT+4];
-
-IconItem gdiMainIcon[1] =
-{
- { LPGEN("Main icon"), "main", IDI_MRA }
-};
-
-IconItem gdiMenuItems[MAIN_MENU_ITEMS_COUNT] =
-{
- { MRA_GOTO_INBOX_STR, MRA_GOTO_INBOX, IDI_INBOX },
- { MRA_SHOW_INBOX_STATUS_STR, MRA_SHOW_INBOX_STATUS, IDI_MAIL_NOTIFY },
- { MRA_EDIT_PROFILE_STR, MRA_EDIT_PROFILE, IDI_PROFILE },
- { MRA_MY_ALBUM_STR, MRA_VIEW_ALBUM, IDI_MRA_PHOTO },
- { MRA_MY_BLOGSTATUS_STR, MRA_REPLY_BLOG_STATUS, IDI_BLOGSTATUS },
- { MRA_MY_VIDEO_STR, MRA_VIEW_VIDEO, IDI_MRA_VIDEO },
- { MRA_MY_ANSWERS_STR, MRA_ANSWERS, IDI_MRA_ANSWERS },
- { MRA_MY_WORLD_STR, MRA_WORLD, IDI_MRA_WORLD },
- { MRA_WEB_SEARCH_STR, MRA_WEB_SEARCH, IDI_MRA_WEB_SEARCH },
- { MRA_UPD_ALL_USERS_INFO_STR, MRA_UPD_ALL_USERS_INFO, IDI_PROFILE },
- { MRA_CHK_USERS_AVATARS_STR, MRA_CHK_USERS_AVATARS, IDI_PROFILE },
- { MRA_REQ_AUTH_FOR_ALL_STR, MRA_REQ_AUTH_FOR_ALL, IDI_AUTHRUGUEST }
-};
-
-IconItem gdiContactMenuItems[CONTACT_MENU_ITEMS_COUNT] =
-{
- { MRA_REQ_AUTH_STR, MRA_REQ_AUTH, IDI_AUTHRUGUEST },
- { MRA_GRANT_AUTH_STR, MRA_GRANT_AUTH, IDI_AUTHGRANT },
- { MRA_SEND_EMAIL_STR, MRA_SEND_EMAIL, IDI_INBOX },
- { MRA_SEND_POSTCARD_STR, MRA_SEND_POSTCARD, IDI_MRA_POSTCARD },
- { MRA_VIEW_ALBUM_STR, MRA_VIEW_ALBUM, IDI_MRA_PHOTO },
- { MRA_REPLY_BLOG_STATUS_STR, MRA_REPLY_BLOG_STATUS, IDI_BLOGSTATUS },
- { MRA_VIEW_VIDEO_STR, MRA_VIEW_VIDEO, IDI_MRA_VIDEO },
- { MRA_ANSWERS_STR, MRA_ANSWERS, IDI_MRA_ANSWERS },
- { MRA_WORLD_STR, MRA_WORLD, IDI_MRA_WORLD },
- { MRA_SENDNUDGE_STR, PS_SEND_NUDGE, IDI_MRA_ALARM }
-};
-
-IconItem gdiExtraStatusIconsItems[ADV_ICON_MAX] =
-{
- { ADV_ICON_DELETED_STR, ADV_ICON_DELETED_ID, IDI_DELETED },
- { ADV_ICON_NOT_ON_SERVER_STR, ADV_ICON_NOT_ON_SERVER_ID, IDI_AUTHGRANT },
- { ADV_ICON_NOT_AUTHORIZED_STR, ADV_ICON_NOT_AUTHORIZED_ID, IDI_AUTHRUGUEST },
- { ADV_ICON_PHONE_STR, ADV_ICON_PHONE_ID, IDI_MRA_PHONE },
- { ADV_ICON_BLOGSTATUS_STR, ADV_ICON_BLOGSTATUS_ID, IDI_BLOGSTATUS }
-};
-
-//////////////////////////////////////////////////////////////////////////////////////
-
-void CMraProto::OnBuildProtoMenu()
-{
- CListCreateMenu(2000060000, 500085000, TRUE, gdiMenuItems, MAIN_MENU_ITEMS_COUNT, hMainMenuItems);
-}
-
-//////////////////////////////////////////////////////////////////////////////////////
-
-HICON IconLibGetIcon(HANDLE hIcon)
-{
- return IconLibGetIconEx(hIcon, LR_SHARED);
-}
-
-HICON IconLibGetIconEx(HANDLE hIcon, DWORD dwFlags)
-{
- HICON hiIcon = nullptr;
- if (hIcon) {
- hiIcon = IcoLib_GetIconByHandle(hIcon);
- if ((dwFlags & LR_SHARED) == 0)
- hiIcon = CopyIcon(hiIcon);
- }
- return hiIcon;
-}
-
-//////////////////////////////////////////////////////////////////////////////////////
-
-void IconsLoad()
-{
- g_plugin.registerIcon(LPGEN("Protocols") "/" LPGEN("MRA"), gdiMainIcon, "MRA_");
- g_plugin.registerIcon(LPGEN("Protocols") "/" LPGEN("MRA") "/" LPGEN("Main Menu"), gdiMenuItems, "MRA_");
- g_plugin.registerIcon(LPGEN("Protocols") "/" LPGEN("MRA") "/" LPGEN("Contact Menu"), gdiContactMenuItems, "MRA_");
- g_plugin.registerIcon(LPGEN("Protocols") "/" LPGEN("MRA") "/" LPGEN("Extra status"), gdiExtraStatusIconsItems, "MRA_");
-
- g_hMainIcon = IconLibGetIcon(gdiMainIcon[0].hIcolib);
-}
-
-void InitXStatusIcons()
-{
- // load libs
- wchar_t szBuff[MAX_FILEPATH];
- if (GetModuleFileName(nullptr, szBuff, _countof(szBuff))) {
- LPWSTR lpwszFileName;
- g_dwMirWorkDirPathLen = GetFullPathName(szBuff, MAX_FILEPATH, g_szMirWorkDirPath, &lpwszFileName);
- if (g_dwMirWorkDirPathLen) {
- g_dwMirWorkDirPathLen -= mir_wstrlen(lpwszFileName);
- g_szMirWorkDirPath[g_dwMirWorkDirPathLen] = 0;
-
- // load xstatus icons lib
- DWORD dwBuffLen;
- DWORD dwErrorCode = FindFile(g_szMirWorkDirPath, (DWORD)g_dwMirWorkDirPathLen, L"xstatus_MRA.dll", -1, szBuff, _countof(szBuff), &dwBuffLen);
- if (dwErrorCode == NO_ERROR) {
- g_hDLLXStatusIcons = LoadLibraryEx(szBuff, nullptr, 0);
- if (g_hDLLXStatusIcons) {
- dwBuffLen = LoadString(g_hDLLXStatusIcons, IDS_IDENTIFY, szBuff, MAX_FILEPATH);
- if (dwBuffLen == 0 || wcsnicmp(L"# Custom Status Icons #", szBuff, 23)) {
- FreeLibrary(g_hDLLXStatusIcons);
- g_hDLLXStatusIcons = nullptr;
- }
- }
- }
- }
- }
-
- GetModuleFileName((g_hDLLXStatusIcons != nullptr) ? g_hDLLXStatusIcons : g_plugin.getInst(), szBuff, _countof(szBuff));
-
- SKINICONDESC sid = {};
- sid.section.w = LPGENW("Protocols")L"/" LPGENW("MRA") L"/" LPGENW("Custom Status");
- sid.defaultFile.w = szBuff;
- sid.flags = SIDF_ALL_UNICODE;
-
- hXStatusAdvancedStatusIcons[0] = nullptr;
- for (DWORD i = 1; i < MRA_XSTATUS_COUNT+1; i++) {
- char szIconName[MAX_PATH];
- mir_snprintf(szIconName, "mra_xstatus%ld", i);
- sid.pszName = szIconName;
-
- int iCurIndex = i+IDI_XSTATUS1-1;
- sid.description.w = (wchar_t*)lpcszXStatusNameDef[i];
- sid.iDefaultIndex = -iCurIndex;
-
- hXStatusAdvancedStatusIcons[i] = g_plugin.addIcon(&sid);
- }
-}
-
-void DestroyXStatusIcons()
-{
- char szBuff[MAX_PATH];
-
- for (DWORD i = 1; i < MRA_XSTATUS_COUNT+1; i++) {
- mir_snprintf(szBuff, "mra_xstatus%ld", i);
- IcoLib_RemoveIcon(szBuff);
- }
-
- memset(hXStatusAdvancedStatusIcons, 0, sizeof(hXStatusAdvancedStatusIcons));
-}
diff --git a/protocols/MRA/src/MraIcons.h b/protocols/MRA/src/MraIcons.h
deleted file mode 100644
index 527f3d403f..0000000000
--- a/protocols/MRA/src/MraIcons.h
+++ /dev/null
@@ -1,10 +0,0 @@
-#if !defined(AFX_MRA_ICONS_H__F58D13FF_F6F2_476C_B8F0_7B9E9357CF48__INCLUDED_)
-#define AFX_MRA_ICONS_H__F58D13FF_F6F2_476C_B8F0_7B9E9357CF48__INCLUDED_
-
-
-#pragma once
-
-HICON IconLibGetIcon(HANDLE hIcon);
-HICON IconLibGetIconEx(HANDLE hIcon, DWORD dwFlags);
-
-#endif // !defined(AFX_MRA_ICONS_H__F58D13FF_F6F2_476C_B8F0_7B9E9357CF48__INCLUDED_) \ No newline at end of file
diff --git a/protocols/MRA/src/MraMPop.cpp b/protocols/MRA/src/MraMPop.cpp
deleted file mode 100644
index 397cb0a51b..0000000000
--- a/protocols/MRA/src/MraMPop.cpp
+++ /dev/null
@@ -1,174 +0,0 @@
-#include "stdafx.h"
-#include "MraMPop.h"
-
-// MPOP_SESSION
-struct MRA_MPOP_SESSION_QUEUE : public FIFO_MT
-{
- bool bKeyValid; /* lpszMPOPKey contain valid key. */
- LPSTR lpszMPOPKey; /* Key for web auth on mail.ru services. */
- size_t dwMPOPKeySize; /* Key size. */
-};
-
-struct MRA_MPOP_SESSION_QUEUE_ITEM : public FIFO_MT_ITEM
-{
- LPSTR lpszUrl; /* Url to open. */
- size_t dwUrlSize;
-};
-
-DWORD MraMPopSessionQueueInitialize(HANDLE *phMPopSessionQueue)
-{
- if (!phMPopSessionQueue)
- return ERROR_INVALID_HANDLE;
- if ((*phMPopSessionQueue))
- return ERROR_ALREADY_INITIALIZED;
-
- MRA_MPOP_SESSION_QUEUE *pmpsqMPopSessionQueue = new MRA_MPOP_SESSION_QUEUE();
- if (!pmpsqMPopSessionQueue)
- return GetLastError();
-
- *phMPopSessionQueue = (HANDLE)pmpsqMPopSessionQueue;
- return NO_ERROR;
-}
-
-void MraMPopSessionQueueClear(HANDLE hQueue)
-{
- if (!hQueue)
- return;
-
- MRA_MPOP_SESSION_QUEUE *pmpsqMPopSessionQueue = (MRA_MPOP_SESSION_QUEUE*)hQueue;
- pmpsqMPopSessionQueue->bKeyValid = false;
- mir_free(pmpsqMPopSessionQueue->lpszMPOPKey);
- pmpsqMPopSessionQueue->lpszMPOPKey = nullptr;
- pmpsqMPopSessionQueue->dwMPOPKeySize = 0;
-
- MRA_MPOP_SESSION_QUEUE_ITEM *pmpsqi;
- while ( !FifoMTItemPop(pmpsqMPopSessionQueue, nullptr, (LPVOID*)&pmpsqi))
- mir_free(pmpsqi);
-}
-
-void MraMPopSessionQueueDestroy(HANDLE hQueue)
-{
- if (!hQueue)
- return;
-
- MRA_MPOP_SESSION_QUEUE *pmpsqMPopSessionQueue = (MRA_MPOP_SESSION_QUEUE*)hQueue;
- MraMPopSessionQueueClear(hQueue);
- delete pmpsqMPopSessionQueue;
-}
-
-DWORD CMraProto::MraMPopSessionQueueAddUrl(HANDLE hQueue, const CMStringA &lpszUrl)
-{
- if (!hQueue)
- return ERROR_INVALID_HANDLE;
- if (lpszUrl.IsEmpty())
- return ERROR_INVALID_DATA;
- MRA_MPOP_SESSION_QUEUE *pmpsqMPopSessionQueue = (MRA_MPOP_SESSION_QUEUE*)hQueue;
- MRA_MPOP_SESSION_QUEUE_ITEM *pmpsqi;
-
- if (!getByte("AutoAuthOnWebServices", MRA_DEFAULT_AUTO_AUTH_ON_WEB_SVCS) || !m_bLoggedIn) { /* Open without web auth. / Not loggedIn. */
- Utils_OpenUrl(lpszUrl);
- return NO_ERROR;
- }
- /* Add to queue. */
- pmpsqi = (MRA_MPOP_SESSION_QUEUE_ITEM*)mir_calloc((sizeof(MRA_MPOP_SESSION_QUEUE_ITEM) + lpszUrl.GetLength() + sizeof(size_t)));
- if (!pmpsqi)
- return GetLastError();
-
- pmpsqi->dwUrlSize = lpszUrl.GetLength();
- pmpsqi->lpszUrl = (LPSTR)(pmpsqi + 1);
- memcpy(pmpsqi->lpszUrl, lpszUrl, lpszUrl.GetLength());
- FifoMTItemPush(pmpsqMPopSessionQueue, pmpsqi, (LPVOID)pmpsqi);
- MraMPopSessionQueueStart(hQueue);
- return NO_ERROR;
-}
-
-DWORD CMraProto::MraMPopSessionQueueAddUrlAndEMail(HANDLE hQueue, const CMStringA &lpszUrl, CMStringA &szEmail)
-{
- if (!hQueue)
- return ERROR_INVALID_HANDLE;
- if (lpszUrl.IsEmpty() || szEmail.IsEmpty())
- return ERROR_INVALID_DATA;
-
- szEmail.MakeLower();
-
- int iStart = 0;
- CMStringA szUser = szEmail.Tokenize("@", iStart);
- CMStringA szDomain = szEmail.Tokenize("@", iStart);
-
- CMStringA szUrl;
- szUrl.Format("%s/%s/%s", lpszUrl.c_str(), szDomain.c_str(), szUser.c_str());
- return MraMPopSessionQueueAddUrl(hQueue, szUrl);
-}
-
-void CMraProto::MraMPopSessionQueueStart(HANDLE hQueue)
-{
- if (!hQueue)
- return;
-
- MRA_MPOP_SESSION_QUEUE *pmpsqMPopSessionQueue = (MRA_MPOP_SESSION_QUEUE*)hQueue;
- MRA_MPOP_SESSION_QUEUE_ITEM *pmpsqi;
-
- if (!getByte("AutoAuthOnWebServices", MRA_DEFAULT_AUTO_AUTH_ON_WEB_SVCS) || !m_bLoggedIn) { /* Open without web auth. / Not loggedIn. */
- MraMPopSessionQueueFlush(hQueue);
- return;
- }
-
- while ( FifoMTGetCount(pmpsqMPopSessionQueue)) {
- if (!pmpsqMPopSessionQueue->bKeyValid) { /* We have no key, try to get one. */
- if (0 == MraSendCMD(MRIM_CS_GET_MPOP_SESSION, nullptr, 0)) /* Fail to send. */
- MraMPopSessionQueueFlush(hQueue);
- return;
- }
-
- if ( FifoMTItemPop(pmpsqMPopSessionQueue, nullptr, (LPVOID*)&pmpsqi) == NO_ERROR) {
- CMStringA szUrl, szEmail;
- if (mraGetStringA(NULL, "e-mail", szEmail)) {
- pmpsqMPopSessionQueue->bKeyValid = false;
- szEmail.MakeLower();
- szUrl.Format(MRA_MPOP_AUTH_URL, szEmail.c_str(), pmpsqMPopSessionQueue->lpszMPOPKey, pmpsqi->lpszUrl);
- Utils_OpenUrl(szUrl);
- debugLogA("Opening URL: %s\n", szUrl.c_str());
- }
- mir_free(pmpsqi);
- }
- }
-}
-
-void CMraProto::MraMPopSessionQueueFlush(HANDLE hQueue)
-{
- if (!hQueue)
- return;
-
- MRA_MPOP_SESSION_QUEUE *pmpsqMPopSessionQueue = (MRA_MPOP_SESSION_QUEUE*)hQueue;
- MRA_MPOP_SESSION_QUEUE_ITEM *pmpsqi;
-
- while (FifoMTItemPop(pmpsqMPopSessionQueue, nullptr, (LPVOID*)&pmpsqi) == NO_ERROR) {
- Utils_OpenUrl(pmpsqi->lpszUrl);
- mir_free(pmpsqi);
- }
-}
-
-DWORD MraMPopSessionQueueSetNewMPopKey(HANDLE hQueue, const CMStringA &szKey)
-{
- if (!hQueue)
- return ERROR_INVALID_HANDLE;
-
- MRA_MPOP_SESSION_QUEUE *pmpsqMPopSessionQueue = (MRA_MPOP_SESSION_QUEUE*)hQueue;
- if (pmpsqMPopSessionQueue->dwMPOPKeySize < (size_t)szKey.GetLength() || szKey.IsEmpty()) {
- mir_free(pmpsqMPopSessionQueue->lpszMPOPKey);
- pmpsqMPopSessionQueue->lpszMPOPKey = (LPSTR)mir_calloc(szKey.GetLength() + sizeof(size_t));
- }
-
- if (pmpsqMPopSessionQueue->lpszMPOPKey) {
- pmpsqMPopSessionQueue->bKeyValid = true;
- pmpsqMPopSessionQueue->dwMPOPKeySize = szKey.GetLength();
- memcpy(pmpsqMPopSessionQueue->lpszMPOPKey, szKey, szKey.GetLength());
- *(pmpsqMPopSessionQueue->lpszMPOPKey + szKey.GetLength()) = 0;
- return NO_ERROR;
- }
-
- pmpsqMPopSessionQueue->bKeyValid = false;
- pmpsqMPopSessionQueue->lpszMPOPKey = nullptr;
- pmpsqMPopSessionQueue->dwMPOPKeySize = 0;
- return GetLastError();
-}
diff --git a/protocols/MRA/src/MraMPop.h b/protocols/MRA/src/MraMPop.h
deleted file mode 100644
index a0a1ee348e..0000000000
--- a/protocols/MRA/src/MraMPop.h
+++ /dev/null
@@ -1,11 +0,0 @@
-#if !defined(AFX_MRA_MPOP_H__F58D13FF_F6F2_476C_B8F0_7B9E9357CF48__INCLUDED_)
-#define AFX_MRA_MPOP_H__F58D13FF_F6F2_476C_B8F0_7B9E9357CF48__INCLUDED_
-
-
-#pragma once
-
-DWORD MraMPopSessionQueueInitialize (HANDLE *phMPopSessionQueue);
-void MraMPopSessionQueueDestroy (HANDLE hMPopSessionQueue);
-DWORD MraMPopSessionQueueSetNewMPopKey (HANDLE hMPopSessionQueue, const CMStringA &szKey);
-
-#endif // !defined(AFX_MRA_MPOP_H__F58D13FF_F6F2_476C_B8F0_7B9E9357CF48__INCLUDED_)
diff --git a/protocols/MRA/src/MraMRIMProxy.cpp b/protocols/MRA/src/MraMRIMProxy.cpp
deleted file mode 100644
index c8811720d0..0000000000
--- a/protocols/MRA/src/MraMRIMProxy.cpp
+++ /dev/null
@@ -1,199 +0,0 @@
-#include "stdafx.h"
-#include "MraMRIMProxy.h"
-#include "proto.h"
-
-struct MRA_MRIMPROXY_DATA
-{
- LPSTR szEmail; // LPS to
- DWORD dwIDRequest; // DWORD id_request
- DWORD dwDataType; // DWORD data_type
- LPSTR lpszUserData; // LPS user_data
- size_t dwUserDataSize;
- MRA_ADDR_LIST malAddrList; // LPS lps_ip_port
- MRA_GUID mguidSessionID; // DWORD session_id[4]
- HNETLIBCONN hConnection;
- HANDLE hWaitHandle; // internal
-};
-
-HANDLE MraMrimProxyCreate()
-{
- MRA_MRIMPROXY_DATA *pmmpd = (MRA_MRIMPROXY_DATA*)mir_calloc(sizeof(MRA_MRIMPROXY_DATA));
- return (HANDLE)pmmpd;
-}
-
-DWORD MraMrimProxySetData(HANDLE hMraMrimProxyData, const CMStringA &szEmail, DWORD dwIDRequest, DWORD dwDataType, const CMStringA &lpszUserData, const CMStringA &szAddresses, MRA_GUID *pmguidSessionID)
-{
- if (!hMraMrimProxyData)
- return ERROR_INVALID_HANDLE;
-
- MRA_MRIMPROXY_DATA *pmmpd = (MRA_MRIMPROXY_DATA*)hMraMrimProxyData;
-
- if (!szEmail.IsEmpty())
- replaceStr(pmmpd->szEmail, szEmail);
-
- if (dwIDRequest) pmmpd->dwIDRequest = dwIDRequest;
- if (dwDataType) pmmpd->dwDataType = dwDataType;
-
- if (!lpszUserData.IsEmpty())
- replaceStr(pmmpd->lpszUserData, lpszUserData);
-
- if (!szAddresses.IsEmpty())
- MraAddrListGetFromBuff(szAddresses, &pmmpd->malAddrList);
- if (pmguidSessionID)
- memcpy(&pmmpd->mguidSessionID, pmguidSessionID, sizeof(MRA_GUID));
-
- SetEvent(pmmpd->hWaitHandle);
- return 0;
-}
-
-void MraMrimProxyFree(HANDLE hMraMrimProxyData)
-{
- if (hMraMrimProxyData) {
- MRA_MRIMPROXY_DATA *pmmpd = (MRA_MRIMPROXY_DATA*)hMraMrimProxyData;
-
- CloseHandle(pmmpd->hWaitHandle);
- Netlib_CloseHandle(pmmpd->hConnection);
- mir_free(pmmpd->szEmail);
- mir_free(pmmpd->lpszUserData);
- MraAddrListFree(&pmmpd->malAddrList);
- mir_free(hMraMrimProxyData);
- }
-}
-
-void MraMrimProxyCloseConnection(HANDLE hMraMrimProxyData)
-{
- if (hMraMrimProxyData) {
- MRA_MRIMPROXY_DATA *pmmpd = (MRA_MRIMPROXY_DATA*)hMraMrimProxyData;
- SetEvent(pmmpd->hWaitHandle);
- NETLIB_CLOSEHANDLE(pmmpd->hConnection);
- }
-}
-
-DWORD CMraProto::MraMrimProxyConnect(HANDLE hMraMrimProxyData, HNETLIBCONN *phConnection)
-{
- DWORD dwRetErrorCode;
-
- if (hMraMrimProxyData && phConnection) {
- BOOL bIsHTTPSProxyUsed, bContinue;
- BYTE lpbBufferRcv[BUFF_SIZE_RCV_MIN_FREE];
- DWORD dwBytesReceived, dwConnectReTryCount, dwCurConnectReTryCount;
- size_t dwRcvBuffSize = BUFF_SIZE_RCV_MIN_FREE, dwRcvBuffSizeUsed;
- NETLIBSELECT nls = {0};
- MRA_MRIMPROXY_DATA *pmmpd = (MRA_MRIMPROXY_DATA*)hMraMrimProxyData;
- NETLIBOPENCONNECTION nloc = {0};
-
- // адреса есть, значит инициаторы не мы
- if (pmmpd->malAddrList.dwAddrCount) {
- CMStringA szAddresses = MraAddrListGetToBuff(&pmmpd->malAddrList);
- MraProxyAck(PROXY_STATUS_OK, pmmpd->szEmail, pmmpd->dwIDRequest, pmmpd->dwDataType, pmmpd->lpszUserData, szAddresses, pmmpd->mguidSessionID);
- }
- // мы инициаторы
- else {
- pmmpd->hWaitHandle = CreateEvent(nullptr, TRUE, FALSE, nullptr);
- if (pmmpd->szEmail)
- if (MraProxy(pmmpd->szEmail, pmmpd->dwIDRequest, pmmpd->dwDataType, pmmpd->lpszUserData, "", pmmpd->mguidSessionID))
- WaitForSingleObjectEx(pmmpd->hWaitHandle, INFINITE, FALSE);
-
- CloseHandle(pmmpd->hWaitHandle);
- pmmpd->hWaitHandle = nullptr;
- }
-
- dwRetErrorCode = ERROR_NO_NETWORK;
- if (pmmpd->malAddrList.dwAddrCount) {
- pmmpd->hConnection = nullptr;
- bIsHTTPSProxyUsed = IsHTTPSProxyUsed(m_hNetlibUser);
- dwConnectReTryCount = getDword("ConnectReTryCountMRIMProxy", MRA_DEFAULT_CONN_RETRY_COUNT_MRIMPROXY);
- nloc.cbSize = sizeof(nloc);
- nloc.flags = NLOCF_V2;
- nloc.timeout = ((MRA_TIMEOUT_DIRECT_CONN-1)/(pmmpd->malAddrList.dwAddrCount*dwConnectReTryCount));// -1 сек чтобы был запас
- if (nloc.timeout < MRA_TIMEOUT_CONN_MIN) nloc.timeout = MRA_TIMEOUT_CONN_MIN;
- if (nloc.timeout > MRA_TIMEOUT_CONN_MAX) nloc.timeout = MRA_TIMEOUT_CONN_MAX;
-
- // Set up the sockaddr structure
- for (size_t i = 0; i < pmmpd->malAddrList.dwAddrCount && dwRetErrorCode != NO_ERROR; i++) {
- // через https прокси только 443 порт
- if ((pmmpd->malAddrList.pMailAddress[i].dwPort == MRA_SERVER_PORT_HTTPS && bIsHTTPSProxyUsed) || bIsHTTPSProxyUsed == FALSE) {
- if (pmmpd->dwDataType == MRIM_PROXY_TYPE_FILES)
- ProtoBroadcastAck(MraHContactFromEmail(pmmpd->szEmail, FALSE, TRUE, nullptr), ACKTYPE_FILE, ACKRESULT_CONNECTING, (HANDLE)pmmpd->dwIDRequest, 0);
-
- nloc.szHost = inet_ntoa((*((in_addr*)&pmmpd->malAddrList.pMailAddress[i].dwAddr)));
- nloc.wPort = (WORD)pmmpd->malAddrList.pMailAddress[i].dwPort;
-
- dwCurConnectReTryCount = dwConnectReTryCount;
- do {
- pmmpd->hConnection = Netlib_OpenConnection(m_hNetlibUser, &nloc);
- }
- while (--dwCurConnectReTryCount && pmmpd->hConnection == nullptr);
-
- if (pmmpd->hConnection) {
- nls.dwTimeout = (MRA_TIMEOUT_DIRECT_CONN*1000*2);
- nls.hReadConns[0] = pmmpd->hConnection;
- bContinue = TRUE;
- dwRcvBuffSizeUsed = 0;
-
- if (pmmpd->dwDataType == MRIM_PROXY_TYPE_FILES)
- ProtoBroadcastAck(MraHContactFromEmail(pmmpd->szEmail, FALSE, TRUE, nullptr), ACKTYPE_FILE, ACKRESULT_CONNECTED, (HANDLE)pmmpd->dwIDRequest, 0);
- MraSendPacket(nls.hReadConns[0], 0, MRIM_CS_PROXY_HELLO, &pmmpd->mguidSessionID, sizeof(MRA_GUID));
-
- while (bContinue) {
- switch (Netlib_Select(&nls)) {
- case SOCKET_ERROR:
- case 0:// Time out
- dwRetErrorCode = GetLastError();
- ShowFormattedErrorMessage(L"Disconnected, socket error", dwRetErrorCode);
- bContinue = FALSE;
- break;
-
- case 1:
- if (dwRcvBuffSizeUsed == BUFF_SIZE_RCV_MIN_FREE) { // bad packet
- bContinue = FALSE;
- _CrtDbgBreak();
- }
- else {
- dwBytesReceived = Netlib_Recv(nls.hReadConns[0], (LPSTR)(lpbBufferRcv + dwRcvBuffSizeUsed), (int)(dwRcvBuffSize - dwRcvBuffSizeUsed), 0);
- if (dwBytesReceived && dwBytesReceived != SOCKET_ERROR) { // connected
- dwRcvBuffSizeUsed += dwBytesReceived;
- if (dwRcvBuffSizeUsed >= sizeof(mrim_packet_header_t)) { // packet header received
- if (((mrim_packet_header_t*)lpbBufferRcv)->magic == CS_MAGIC) { // packet OK
- if ((dwRcvBuffSizeUsed-sizeof(mrim_packet_header_t)) >= ((mrim_packet_header_t*)lpbBufferRcv)->dlen) { // full packet received, may be more than one
- if (((mrim_packet_header_t*)lpbBufferRcv)->msg == MRIM_CS_PROXY_HELLO_ACK) // connect OK!
- dwRetErrorCode = NO_ERROR;
- else // bad/wrong
- _CrtDbgBreak();
-
- bContinue = FALSE;
- }
- else // not all packet received, continue receiving
- debugLogA("Not all packet received, continue receiving\n");
- }
- else { // bad packet
- debugLogA("Bad packet\n");
- _ASSERT(false);
- bContinue = FALSE;
- }
- }
- else // packet too small, continue receiving
- debugLogA("Packet to small, continue receiving\n");
- }
- else { // disconnected
- dwRetErrorCode = GetLastError();
- debugLogA("Disconnected, socket read error %d", dwRetErrorCode);
- bContinue = FALSE;
- }
- }
- break;
- }// end switch
- }// end while
- }
- else dwRetErrorCode = GetLastError();
- }// filtered
- }// end for
-
- if (dwRetErrorCode != NO_ERROR) // кажется не туда подключились :)
- NETLIB_CLOSEHANDLE(pmmpd->hConnection);
- }
- *phConnection = pmmpd->hConnection;
- }
- else dwRetErrorCode = ERROR_INVALID_HANDLE;
- return dwRetErrorCode;
-}
diff --git a/protocols/MRA/src/MraMRIMProxy.h b/protocols/MRA/src/MraMRIMProxy.h
deleted file mode 100644
index 5b8b2ad75a..0000000000
--- a/protocols/MRA/src/MraMRIMProxy.h
+++ /dev/null
@@ -1,13 +0,0 @@
-#if !defined(AFX_MRA_MRIMPROXY_H__F58D13FF_F6F2_476C_B8F0_7B9E9357CF48__INCLUDED_)
-#define AFX_MRA_MRIMPROXY_H__F58D13FF_F6F2_476C_B8F0_7B9E9357CF48__INCLUDED_
-
-
-#pragma once
-
-DWORD MraMrimProxySetData(HANDLE hMraMrimProxyData, const CMStringA &szEmail, DWORD dwIDRequest, DWORD dwDataType, const CMStringA &lpszUserData, const CMStringA &szAddresses, MRA_GUID *pmguidSessionID);
-
-HANDLE MraMrimProxyCreate();
-void MraMrimProxyFree(HANDLE hMraMrimProxyData);
-void MraMrimProxyCloseConnection(HANDLE hMraMrimProxyData);
-
-#endif // !defined(AFX_MRA_MRIMPROXY_H__F58D13FF_F6F2_476C_B8F0_7B9E9357CF48__INCLUDED_)
diff --git a/protocols/MRA/src/MraOfflineMsg.cpp b/protocols/MRA/src/MraOfflineMsg.cpp
deleted file mode 100644
index 4c2b621c92..0000000000
--- a/protocols/MRA/src/MraOfflineMsg.cpp
+++ /dev/null
@@ -1,264 +0,0 @@
-#include "stdafx.h"
-#include "MraOfflineMsg.h"
-#include "MraConstans.h"
-
-#define LF "\n"
-#define LFLF "\n\n"
-#define CRLF "\r\n"
-#define CRLFCRLF "\r\n\r\n"
-
-static DWORD MraOfflineMessageConvertTime(INTERNET_TIME *pitTime)
-{
- SYSTEMTIME stTime, stUniversalTime;
- TIME_ZONE_INFORMATION tziTimeZoneMailRu = {0};
- tziTimeZoneMailRu.Bias = pitTime->lTimeZone/100*60;
- tziTimeZoneMailRu.DaylightBias = pitTime->lTimeZone%100;
- SystemTimeToTzSpecificLocalTime(&tziTimeZoneMailRu, &pitTime->stTime, &stUniversalTime);
- SystemTimeToTzSpecificLocalTime(nullptr, &stUniversalTime, &stTime);
-
- return (DWORD)MakeTime32FromLocalSystemTime(&stTime);
-}
-
-static DWORD MraOfflineMessageGetHeaderValueLow(LPSTR lpszHeaderLow, size_t dwHeaderSize, LPSTR lpszValueName, size_t dwValueNameSize, LPSTR *plpszValue, size_t *pdwValueSize)
-{
- LPSTR lpszValue = (LPSTR)MemoryFind(0, lpszHeaderLow, dwHeaderSize, lpszValueName, dwValueNameSize);
- if (lpszValue) {
- lpszValue += dwValueNameSize;
- LPSTR lpszValueEnd = (LPSTR)MemoryFind((lpszValue-lpszHeaderLow), lpszHeaderLow, dwHeaderSize, CRLF, (sizeof(CRLF)-1));
- if (lpszValueEnd == nullptr) lpszValueEnd = (LPSTR)MemoryFind((lpszValue-lpszHeaderLow), lpszHeaderLow, dwHeaderSize, LF, (sizeof(LF)-1));
- if (lpszValueEnd == nullptr) lpszValueEnd = (LPSTR)(lpszHeaderLow+dwHeaderSize);
-
- lpszValue = (LPSTR)MemoryFind((lpszValue-lpszHeaderLow), lpszHeaderLow, (lpszValueEnd-lpszHeaderLow), ":", 1);
- if (lpszValue) {
- lpszValue++;
- SkeepSPWSP(lpszValue, lpszValueEnd - lpszValue, plpszValue, pdwValueSize);
- return NO_ERROR;
- }
- }
- return ERROR_NOT_FOUND;
-}
-
-static DWORD MraOfflineMessageGetMIMEHeadAndBody(LPCSTR lpszMessage, size_t dwMessageSize, LPSTR *plpszHeader, size_t *pdwHeaderSize, LPSTR *plpszBody, size_t *pdwBodySize)
-{
- if (!lpszMessage || !dwMessageSize)
- return ERROR_NOT_FOUND;
-
- // затычка: майл не придерживается RFC и вместо CRLFCRLF ставит LFLF в MIME частях, иногда ставит
- LPSTR lpszBody = (LPSTR)MemoryFind(0, lpszMessage, dwMessageSize, CRLFCRLF, (sizeof(CRLFCRLF)-1));
- if (lpszBody)
- lpszBody += (sizeof(CRLFCRLF)-1);
- else {
- lpszBody = (LPSTR)MemoryFind(0, lpszMessage, dwMessageSize, LFLF, (sizeof(LFLF)-1));
- if (lpszBody) lpszBody += (sizeof(LFLF)-1);
- }
-
- if (!lpszBody)
- return ERROR_NOT_FOUND;
-
- // нашли начало контента миме части
- size_t dwBodySize = (dwMessageSize-(lpszBody-lpszMessage));
- if (plpszHeader) (*plpszHeader) = (LPSTR)lpszMessage;
- if (pdwHeaderSize) (*pdwHeaderSize) = ((lpszBody-(sizeof(LFLF)-1))-lpszMessage);
- if (plpszBody) (*plpszBody) = lpszBody;
- if (pdwBodySize) (*pdwBodySize) = dwBodySize;
- return NO_ERROR;
-}
-
-static DWORD MraOfflineMessageGetHeaderValue(LPSTR lpszHeader, LPSTR lpszHeaderLow, size_t dwHeaderSize, LPSTR lpszValueName, size_t dwValueNameSize, CMStringA &plpszValue)
-{
- LPSTR lpszValue = (LPSTR)MemoryFind(0, lpszHeaderLow, dwHeaderSize, lpszValueName, dwValueNameSize);
- if (lpszValue) {
- lpszValue += dwValueNameSize;
- LPSTR lpszValueEnd = (LPSTR)MemoryFind((lpszValue-lpszHeaderLow), lpszHeaderLow, dwHeaderSize, CRLF, (sizeof(CRLF)-1));
- if (lpszValueEnd == nullptr)
- lpszValueEnd = (LPSTR)MemoryFind((lpszValue-lpszHeaderLow), lpszHeaderLow, dwHeaderSize, LF, (sizeof(LF)-1));
- if (lpszValueEnd == nullptr)
- lpszValueEnd = (LPSTR)(lpszHeaderLow+dwHeaderSize);
-
- lpszValue = (LPSTR)MemoryFind((lpszValue-lpszHeaderLow), lpszHeaderLow, (lpszValueEnd-lpszHeaderLow), ":", 1);
- if (lpszValue) {
- lpszValue++;
- size_t dwValueSize = lpszValueEnd - lpszValue;
- lpszValue = lpszHeader + (lpszValue-lpszHeaderLow);
- SkeepSPWSP(lpszValue, dwValueSize, &lpszValue, &dwValueSize);
- plpszValue = CMStringA(lpszValue, (int)dwValueSize);
- return NO_ERROR;
- }
- }
- return ERROR_NOT_FOUND;
-}
-
-static DWORD MraOfflineMessageGetNextMIMEPart(LPSTR lpszBody, size_t dwBodySize, LPSTR lpszBoundary, size_t dwBoundarySize, LPSTR &plpszCurMIMEPos, LPSTR *plpszMIMEPart, size_t *pdwMIMEPartSize)
-{
- if (!lpszBody || !dwBodySize)
- return ERROR_INVALID_HANDLE;
-
- LPSTR lpszCurMIMEPos = plpszCurMIMEPos;
-
- LPSTR lpszMIMEPart = (LPSTR)MemoryFind((lpszCurMIMEPos-lpszBody), lpszBody, dwBodySize, lpszBoundary, dwBoundarySize);
- if (lpszMIMEPart) {// первая миме часть
- lpszMIMEPart += dwBoundarySize;
-
- // затычка: майл не придерживается RFC и вместо CRLF ставит LF в MIME частях, иногда ставит
- if ((*((WORD*)lpszMIMEPart)) == (*((WORD*)CRLF)))
- lpszMIMEPart += (sizeof(CRLF)-1);
- else if ((*((BYTE*)lpszMIMEPart)) == (*((BYTE*)LF)))
- lpszMIMEPart += (sizeof(LF)-1);
- else if ((*((WORD*)lpszMIMEPart)) == '--')
- lpszMIMEPart = nullptr;
- else
- _CrtDbgBreak();
-
- if (lpszMIMEPart == nullptr)
- return ERROR_NO_MORE_ITEMS;
- LPSTR lpszTemp = (LPSTR)MemoryFind((lpszMIMEPart-lpszBody), lpszBody, dwBodySize, lpszBoundary, dwBoundarySize);
- if (lpszTemp) {// нашли конец миме части с текстом
- size_t dwMIMEPartSize = (lpszTemp-lpszMIMEPart);// 4 = CRLF"--"Boundary / 3 = LF"--"Boundary
- // затычка: майл не придерживается RFC и вместо CRLF ставит LF в MIME частях, иногда ставит
- if ((*((WORD*)(lpszTemp-4))) == (*((WORD*)CRLF)))
- dwMIMEPartSize -= 4;
- else if ((*((BYTE*)(lpszTemp-3))) == (*((BYTE*)LF)))
- dwMIMEPartSize -= 3;
- else
- _CrtDbgBreak();
-
- if (plpszMIMEPart) (*plpszMIMEPart) = lpszMIMEPart;
- if (pdwMIMEPartSize) (*pdwMIMEPartSize) = dwMIMEPartSize;
- plpszCurMIMEPos = lpszTemp;
- return NO_ERROR;
- }
- }
-
- return ERROR_NOT_FOUND;
-}
-
-// Сообщение
-static DWORD PlainText2message(const CMStringA &szContentType, const CMStringA &szBody, CMStringA &plpsText, DWORD *pdwFlags)
-{
- // Content-Type: text/plain; charset = CP-1251
- if ( strstr(szContentType, "utf-16le")) {
- // charset = UTF-16LE// предполагаем что оно в base64
- size_t dwTextSize;
- ptrA lpszText((LPSTR)mir_base64_decode(szBody, &dwTextSize));
- if (lpszText) {
- plpsText = CMStringA(lpszText, (int)dwTextSize);
- if (pdwFlags) {
- (*pdwFlags) |= MESSAGE_FLAG_v1p16; // set unicode flag if not exist
- (*pdwFlags) &= ~MESSAGE_FLAG_CP1251; // reset ansi flag if exist
- }
- return NO_ERROR;
- }
- }
- else if ( strstr(szContentType, "cp-1251")) { // charset = CP-1251
- plpsText = szBody;
- if (pdwFlags) {
- (*pdwFlags) &= ~MESSAGE_FLAG_v1p16; // reset unicode flag if exist
- (*pdwFlags) |= MESSAGE_FLAG_CP1251; // set ansi flag
- }
- return NO_ERROR;
- }
- else _CrtDbgBreak();
-
- return ERROR_INVALID_HANDLE;
-}
-
-DWORD MraOfflineMessageGet(const CMStringA &plpsMsg, DWORD &pdwTime, DWORD &pdwFlags, CMStringA &plpsEMail, CMStringA &plpsText, CMStringA &plpsRTFText, CMStringA &plpsMultiChatData)
-{
- if (plpsMsg.IsEmpty())
- return ERROR_INVALID_HANDLE;
-
- LPSTR lpszHeader, lpszBody, lpszContentTypeLow;
- size_t dwHeaderSize, dwBodySize, dwContentTypeSize;
- CMStringA szTemp;
-
- if (MraOfflineMessageGetMIMEHeadAndBody(plpsMsg.GetString(), plpsMsg.GetLength(), &lpszHeader, &dwHeaderSize, &lpszBody, &dwBodySize) != NO_ERROR)
- return ERROR_INVALID_HANDLE;
-
- ptrA lpszHeaderLow((LPSTR)mir_calloc(dwHeaderSize));
- if (lpszHeaderLow == NULL)
- return ERROR_OUTOFMEMORY;
- BuffToLowerCase(lpszHeaderLow, lpszHeader, dwHeaderSize);
-
- if (MraOfflineMessageGetHeaderValue(lpszHeader, lpszHeaderLow, dwHeaderSize, "date", 4, szTemp) == NO_ERROR) {
- INTERNET_TIME itTime;
- InternetTimeGetTime(szTemp, itTime);
- pdwTime = MraOfflineMessageConvertTime(&itTime);
- }
- else pdwTime = 0;
-
- if (MraOfflineMessageGetHeaderValue(lpszHeader, lpszHeaderLow, dwHeaderSize, "x-mrim-flags", 12, szTemp) == NO_ERROR)
- pdwFlags = StrHexToUNum32(szTemp, szTemp.GetLength());
- else
- pdwFlags = 0;
-
- DWORD dwMultichatType;
- if (MraOfflineMessageGetHeaderValue(lpszHeader, lpszHeaderLow, dwHeaderSize, "x-mrim-multichat-type", 21, szTemp) == NO_ERROR)
- dwMultichatType = StrHexToUNum32(szTemp, szTemp.GetLength());
- else
- dwMultichatType = 0;
-
- if (MraOfflineMessageGetHeaderValue(lpszHeader, lpszHeaderLow, dwHeaderSize, "from", 4, plpsEMail) != NO_ERROR)
- plpsEMail.Empty();
-
- plpsText.Empty();
- plpsRTFText.Empty();
- plpsMultiChatData.Empty();
-
- if (MraOfflineMessageGetHeaderValueLow(lpszHeaderLow, dwHeaderSize, "content-type", 12, &lpszContentTypeLow, &dwContentTypeSize) != NO_ERROR)
- return ERROR_NOT_FOUND;
-
- if (MemoryFind(0, lpszContentTypeLow, dwContentTypeSize, "multipart/alternative", 21)) {
- // Content-Type: multipart/alternative; boundary = 1217508709J3777283291217508709T31197726
- LPSTR lpszBoundary = (LPSTR)MemoryFind(0, lpszContentTypeLow, dwContentTypeSize, "boundary=", 9);
- if (lpszBoundary) {
- size_t dwBoundarySize = ((dwContentTypeSize - (lpszBoundary - lpszContentTypeLow)) - 9);
- lpszBoundary = lpszHeader + (lpszBoundary + 9 - (LPSTR)lpszHeaderLow);
-
- int i = 0;
- size_t dwMIMEPartSize, dwMIMEHeaderSize, dwMIMEBodySize, dwMIMEContentTypeSize;
- LPSTR lpszCurMIMEPos = lpszBody, lpszMIMEPart, lpszMIMEHeader, lpszMIMEBody;
- while (MraOfflineMessageGetNextMIMEPart(lpszBody, dwBodySize, lpszBoundary, dwBoundarySize, lpszCurMIMEPos, &lpszMIMEPart, &dwMIMEPartSize) == NO_ERROR) {
- if (MraOfflineMessageGetMIMEHeadAndBody(lpszMIMEPart, dwMIMEPartSize, &lpszMIMEHeader, &dwMIMEHeaderSize, &lpszMIMEBody, &dwMIMEBodySize) == NO_ERROR) {
- ptrA lpszMIMEHeaderLow((LPSTR)mir_calloc(dwMIMEHeaderSize));
- if (lpszMIMEHeaderLow == NULL)
- return ERROR_OUTOFMEMORY;
-
- BuffToLowerCase(lpszMIMEHeaderLow, lpszMIMEHeader, dwMIMEHeaderSize);
-
- LPSTR lpszMIMEContentType;
- if (MraOfflineMessageGetHeaderValueLow(lpszMIMEHeaderLow, dwMIMEHeaderSize, "content-type", 12, &lpszMIMEContentType, &dwMIMEContentTypeSize) == NO_ERROR) {
- if (MemoryFind(0, lpszMIMEContentType, dwMIMEContentTypeSize, "text/plain", 10)) {
- // this is simple text part: text/plain
- return PlainText2message(CMStringA(lpszMIMEContentType, (int)dwMIMEContentTypeSize), CMStringA(lpszMIMEBody, (int)dwMIMEBodySize), plpsText, &pdwFlags);
- }
- if (MemoryFind(0, lpszMIMEContentType, dwMIMEContentTypeSize, "application/x-mrim-rtf", 22)) {
- plpsRTFText = CMStringA(lpszMIMEBody, (int)dwMIMEBodySize);
- pdwFlags |= MESSAGE_FLAG_RTF; // set RTF flag if not exist
- return NO_ERROR;
- }
- if (MemoryFind(0, lpszMIMEContentType, dwMIMEContentTypeSize, "application/x-mrim+xml", 22)) {
- plpsMultiChatData = CMStringA(lpszMIMEBody, (int)dwMIMEBodySize);
- pdwFlags |= MESSAGE_FLAG_MULTICHAT; // set MESSAGE_FLAG_MULTICHAT flag if not exist
- return NO_ERROR;
- }
- _CrtDbgBreak();
- }
- }
- i++;
- }
-
- _ASSERTE((i > 3 || i == 0));
- }
- return ERROR_NOT_FOUND;
- }
-
- if (MemoryFind(0, lpszContentTypeLow, dwContentTypeSize, "text/plain", 10))
- return PlainText2message(CMStringA(lpszContentTypeLow, (int)dwContentTypeSize), CMStringA(lpszBody, (int)dwBodySize), plpsText, &pdwFlags);
-
- if (MemoryFind(0, lpszContentTypeLow, dwContentTypeSize, "application/x-mrim-auth-req", 27)) { // Content-Type: application/x-mrim-auth-req
- plpsText = CMStringA(lpszBody, (int)dwBodySize);
- return NO_ERROR;
- }
-
- return ERROR_INVALID_HANDLE;
-}
diff --git a/protocols/MRA/src/MraOfflineMsg.h b/protocols/MRA/src/MraOfflineMsg.h
deleted file mode 100644
index 5abb292ec3..0000000000
--- a/protocols/MRA/src/MraOfflineMsg.h
+++ /dev/null
@@ -1,8 +0,0 @@
-#if !defined(AFX_MRA_OFFLINEMSG_H__F58D13FF_F6F2_476C_B8F0_7B9E9357CF48__INCLUDED_)
-#define AFX_MRA_OFFLINEMSG_H__F58D13FF_F6F2_476C_B8F0_7B9E9357CF48__INCLUDED_
-
-#pragma once
-
-DWORD MraOfflineMessageGet(const CMStringA &plpsMsg, DWORD &pdwTime, DWORD &pdwFlags, CMStringA &plpsEMail, CMStringA &plpsText, CMStringA &plpsRTFText, CMStringA &plpsMultiChatData);
-
-#endif // !defined(AFX_MRA_OFFLINEMSG_H__F58D13FF_F6F2_476C_B8F0_7B9E9357CF48__INCLUDED_)
diff --git a/protocols/MRA/src/MraPlaces.h b/protocols/MRA/src/MraPlaces.h
deleted file mode 100644
index 98a5e535b2..0000000000
--- a/protocols/MRA/src/MraPlaces.h
+++ /dev/null
@@ -1,5956 +0,0 @@
-#if !defined(AFX_MRA_PLACES_H__INCLUDED_)
-#define AFX_MRA_PLACES_H__INCLUDED_
-
-
-#pragma once
-
-#define lpwszOther L"Другое"
-//static LPWSTR lpwszOther = L"Другое";
-
-
-typedef struct
-{
- WORD dwCountryID;
- LPWSTR lpszData;
-} MRA_COUNTRY;
-
-
-typedef struct
-{
- WORD dwCountryID;
- WORD dwCityID;
- LPWSTR lpszData;
-} MRA_CITY;
-
-
-
-
-typedef struct
-{
- WORD dwCountryID;
- WORD dwCityID;
- WORD dwPlaceID;
- LPWSTR lpszData;
-} MRA_PLACE;
-
-
-/* WCHAR szBuff[MAX_FILEPATH];
-
- DebugPrintCRLFA("static const MRA_COUNTRY mracCountrys[] = \r\n{");
- for (size_t i = 0;mrapPlaces[i].lpszData;i++)
- {
- if (mrapPlaces[i].dwCityID == 0 && mrapPlaces[i].dwPlaceID == 0)
- {
- mir_snwprintf(szBuff, L" {%ld, TEXT(\"%s\")}, ", mrapPlaces[i].dwCountryID, mrapPlaces[i].lpszData);
- DebugPrintCRLFW(szBuff);
- }
- }
- DebugPrintCRLFA(" {0, NULL}\r\n};");
-
-
- DebugPrintCRLFA("static const MRA_CITY mracCitys[] = \r\n{");
- for (size_t i = 0;mrapPlaces[i].lpszData;i++)
- {
- if (mrapPlaces[i].dwCityID && mrapPlaces[i].dwPlaceID == 0)
- {
- mir_snwprintf(szBuff, L" {%ld, %ld, TEXT(\"%s\")}, ", mrapPlaces[i].dwCountryID, mrapPlaces[i].dwCityID, mrapPlaces[i].lpszData);
- DebugPrintCRLFW(szBuff);
- }
- }
- DebugPrintCRLFA(" {0, NULL}\r\n};");
-
-
-
-static const MRA_PLACE mrapPlaces[] =
-{
- {24, 0, 0, L"Россия"},
- {81, 0, 0, L"Азербайджан"},
- {82, 0, 0, L"Армения"},
- {97, 0, 0, L"Афганистан"},
- {96, 0, 0, L"Бангладеш"},
- {99, 0, 0, L"Бахрейн"},
- {100, 0, 0, L"Бруней-Даруссалам"},
- {101, 0, 0, L"Бутан"},
- {102, 0, 0, L"Вьетнам"},
- {83, 0, 0, L"Грузия"},
- {86, 0, 0, L"Израиль"},
- {95, 0, 0, L"Индия"},
- {103, 0, 0, L"Индонезия"},
- {79, 0, 0, L"Иордания"},
- {85, 0, 0, L"Ирак"},
- {87, 0, 0, L"Иран"},
- {104, 0, 0, L"Йемен"},
- {84, 0, 0, L"Казахстан"},
- {105, 0, 0, L"Камбоджа"},
- {106, 0, 0, L"Катар"},
- {107, 0, 0, L"Кипр"},
- {92, 0, 0, L"Киргизия (Кыргызстан)"},
- {76, 0, 0, L"Китай"},
- {3215, 0, 0, L"Кокосовые острова (Австр.)"},
- {29, 0, 0, L"Корея (КНДР)"},
- {108, 0, 0, L"Корея"},
- {88, 0, 0, L"Кувейт"},
- {109, 0, 0, L"Лаос"},
- {110, 0, 0, L"Ливан"},
- {111, 0, 0, L"Малайзия"},
- {112, 0, 0, L"Мальдивы"},
- {113, 0, 0, L"Монголия"},
- {114, 0, 0, L"Мьянма"},
- {115, 0, 0, L"Непал"},
- {116, 0, 0, L"Объединенные Арабские Эмираты"},
- {117, 0, 0, L"Оман"},
- {3216, 0, 0, L"Остров Рождества (Австр.)"},
- {122, 0, 0, L"Пакистан"},
- {89, 0, 0, L"Палестина"},
- {94, 0, 0, L"Саудовская Аравия"},
- {118, 0, 0, L"Сингапур"},
- {78, 0, 0, L"Сирия"},
- {91, 0, 0, L"Таджикистан"},
- {119, 0, 0, L"Таиланд"},
- {120, 0, 0, L"Тайвань"},
- {132, 0, 0, L"Тимор"},
- {90, 0, 0, L"Туркмения"},
- {77, 0, 0, L"Турция"},
- {93, 0, 0, L"Узбекистан"},
- {121, 0, 0, L"Филиппины"},
- {98, 0, 0, L"Шри Ланка"},
- {75, 0, 0, L"Япония"},
- {123, 0, 0, L"Австралия"},
- {454, 0, 0, L"Американское Самоа"},
- {124, 0, 0, L"Вануату"},
- {453, 0, 0, L"Гуам (США)"},
- {126, 0, 0, L"Кирибати"},
- {127, 0, 0, L"Маршалловы Острова"},
- {128, 0, 0, L"Микронезия (Федеративные Штаты Микронезии)"},
- {129, 0, 0, L"Науру"},
- {3220, 0, 0, L"Ниуэ (Н.Зел.)"},
- {130, 0, 0, L"Новая Зеландия"},
- {3218, 0, 0, L"Новая Каледония (Фр.)"},
- {3221, 0, 0, L"Острова Кука (Н.Зел.)"},
- {3230, 0, 0, L"Острова Херд и Макдональд (Австр.)"},
- {131, 0, 0, L"Палау"},
- {133, 0, 0, L"Папуа - Новая Гвинея"},
- {3222, 0, 0, L"Питкерн (Брит.)"},
- {125, 0, 0, L"Самоа"},
- {3219, 0, 0, L"Сев. Марианские острова (США)"},
- {134, 0, 0, L"Соломоновы Острова"},
- {3223, 0, 0, L"Токелау (Н.Зел.)"},
- {135, 0, 0, L"Тонга"},
- {136, 0, 0, L"Тувалу"},
- {3224, 0, 0, L"Уоллис и Футуна острова (Фр.)"},
- {137, 0, 0, L"Фиджи"},
- {3226, 0, 0, L"Французская Полинезия"},
- {3225, 0, 0, L"Французские Южные территории"},
- {138, 0, 0, L"Канада"},
- {139, 0, 0, L"США"},
- {3200, 0, 0, L"Ангилья (Брит.)"},
- {140, 0, 0, L"Антигуа и Барбуда"},
- {141, 0, 0, L"Аргентина"},
- {3202, 0, 0, L"Аруба (Нид.)"},
- {142, 0, 0, L"Багамы"},
- {143, 0, 0, L"Барбадос"},
- {146, 0, 0, L"Белиз"},
- {3203, 0, 0, L"Бермуды (Брит.)"},
- {144, 0, 0, L"Боливия"},
- {145, 0, 0, L"Бразилия"},
- {147, 0, 0, L"Венесуэла"},
- {3204, 0, 0, L"Виргинские острова (Брит.)"},
- {452, 0, 0, L"Виргинские острова (США)"},
- {149, 0, 0, L"Гаити"},
- {148, 0, 0, L"Гайана"},
- {3205, 0, 0, L"Гваделупа (Фр.)"},
- {173, 0, 0, L"Гватемала"},
- {150, 0, 0, L"Гондурас"},
- {151, 0, 0, L"Гренада"},
- {152, 0, 0, L"Гренландия (Дат.)"},
- {153, 0, 0, L"Доминика"},
- {154, 0, 0, L"Доминиканская Республика"},
- {155, 0, 0, L"Колумбия"},
- {156, 0, 0, L"Коста-Рика"},
- {157, 0, 0, L"Куба"},
- {3208, 0, 0, L"Мартиника (Фр.)"},
- {158, 0, 0, L"Мексика"},
- {3209, 0, 0, L"Монтсеррат (Брит)"},
- {3201, 0, 0, L"Нидерландские Антилы"},
- {159, 0, 0, L"Никарагуа"},
- {3207, 0, 0, L"Остров Кайман (Брит.)"},
- {3211, 0, 0, L"Острова Теркс и Кайкос (Брит.)"},
- {160, 0, 0, L"Панама"},
- {161, 0, 0, L"Парагвай"},
- {162, 0, 0, L"Перу"},
- {163, 0, 0, L"Сальвадор"},
- {164, 0, 0, L"Сент-Винсент и Гренадины"},
- {165, 0, 0, L"Сент-Китс и Невис"},
- {166, 0, 0, L"Сент-Люсия"},
- {3210, 0, 0, L"Сент-Пьер и Микелон (Фр.)"},
- {167, 0, 0, L"Суринам"},
- {168, 0, 0, L"Тринидат и Тобаго"},
- {169, 0, 0, L"Уругвай"},
- {3212, 0, 0, L"Фолклендские острова (Брит.)"},
- {3206, 0, 0, L"Французская Гвиана"},
- {170, 0, 0, L"Чили"},
- {171, 0, 0, L"Эквадор"},
- {3213, 0, 0, L"Юж. Джорджия и Юж. Сандвичевы о-ва (Брит.)"},
- {172, 0, 0, L"Ямайка"},
- {174, 0, 0, L"Алжир"},
- {175, 0, 0, L"Ангола"},
- {176, 0, 0, L"Бенин"},
- {177, 0, 0, L"Ботсвана"},
- {3228, 0, 0, L"Британская территория в Индийском океане"},
- {178, 0, 0, L"Буркина-Фасо"},
- {179, 0, 0, L"Бурунди"},
- {180, 0, 0, L"Габон"},
- {181, 0, 0, L"Гамбия"},
- {182, 0, 0, L"Гана"},
- {183, 0, 0, L"Гвинея"},
- {184, 0, 0, L"Гвинея-Бисау"},
- {185, 0, 0, L"Джибути"},
- {186, 0, 0, L"Египет"},
- {187, 0, 0, L"Замбия"},
- {3198, 0, 0, L"Зап. Сахара"},
- {23, 0, 0, L"Зимбабве"},
- {188, 0, 0, L"Кабо-Верде"},
- {189, 0, 0, L"Камерун"},
- {190, 0, 0, L"Кения"},
- {191, 0, 0, L"Коморы"},
- {193, 0, 0, L"Конго (Заир)"},
- {192, 0, 0, L"Конго"},
- {194, 0, 0, L"Кот-д`Ивуар"},
- {195, 0, 0, L"Лесото"},
- {196, 0, 0, L"Либерия"},
- {197, 0, 0, L"Ливия"},
- {198, 0, 0, L"Маврикий"},
- {199, 0, 0, L"Мавритания"},
- {200, 0, 0, L"Мадагаскар"},
- {3229, 0, 0, L"Майотт (Фр.)"},
- {201, 0, 0, L"Малави"},
- {202, 0, 0, L"Мали"},
- {203, 0, 0, L"Марокко"},
- {204, 0, 0, L"Мозамбик"},
- {205, 0, 0, L"Намибия"},
- {206, 0, 0, L"Нигер"},
- {207, 0, 0, L"Нигерия"},
- {3227, 0, 0, L"Остров Буве (Норв.)"},
- {3197, 0, 0, L"Реюньон (Фр.)"},
- {208, 0, 0, L"Руанда"},
- {209, 0, 0, L"Сан-Томе и Принсипи"},
- {210, 0, 0, L"Свазиленд"},
- {3199, 0, 0, L"Святая Елена (Брит.)"},
- {211, 0, 0, L"Сейшелы"},
- {212, 0, 0, L"Сенегал"},
- {213, 0, 0, L"Сомали"},
- {214, 0, 0, L"Судан"},
- {215, 0, 0, L"Сьерра-Леоне"},
- {216, 0, 0, L"Танзания"},
- {217, 0, 0, L"Того"},
- {218, 0, 0, L"Тунис"},
- {219, 0, 0, L"Уганда"},
- {220, 0, 0, L"Центральноафриканская Республика"},
- {222, 0, 0, L"Чад"},
- {223, 0, 0, L"Экваториальная Гвинея"},
- {221, 0, 0, L"Эритрея"},
- {224, 0, 0, L"Эфиопия"},
- {225, 0, 0, L"Южно-Африканская Республика (ЮАР)"},
- {39, 0, 0, L"Украина"},
- {40, 0, 0, L"Австрия"},
- {32, 0, 0, L"Албания"},
- {33, 0, 0, L"Андорра"},
- {340, 0, 0, L"Белоруссия"},
- {38, 0, 0, L"Бельгия"},
- {41, 0, 0, L"Болгария"},
- {42, 0, 0, L"Босния и Герцеговина"},
- {43, 0, 0, L"Ватикан"},
- {45, 0, 0, L"Великобритания"},
- {44, 0, 0, L"Венгрия"},
- {46, 0, 0, L"Германия"},
- {3193, 0, 0, L"Гернси (Брит.)"},
- {47, 0, 0, L"Гибралтар (Брит.)"},
- {48, 0, 0, L"Греция"},
- {49, 0, 0, L"Дания"},
- {3194, 0, 0, L"Джерси (Брит.)"},
- {50, 0, 0, L"Ирландия"},
- {51, 0, 0, L"Исландия"},
- {34, 0, 0, L"Испания"},
- {52, 0, 0, L"Италия"},
- {53, 0, 0, L"Латвия"},
- {54, 0, 0, L"Литва"},
- {55, 0, 0, L"Лихтенштейн"},
- {56, 0, 0, L"Люксембург"},
- {57, 0, 0, L"Македония"},
- {58, 0, 0, L"Мальта"},
- {59, 0, 0, L"Молдавия"},
- {36, 0, 0, L"Монако"},
- {60, 0, 0, L"Нидерланды"},
- {61, 0, 0, L"Норвегия"},
- {3195, 0, 0, L"Остров Мэн (Брит.)"},
- {62, 0, 0, L"Польша"},
- {35, 0, 0, L"Португалия"},
- {63, 0, 0, L"Румыния"},
- {64, 0, 0, L"Сан-Марино"},
- {74, 0, 0, L"Сербия и Черногория"},
- {65, 0, 0, L"Словакия"},
- {66, 0, 0, L"Словения"},
- {67, 0, 0, L"Фарерские о-ва (Дания)"},
- {68, 0, 0, L"Финляндия"},
- {37, 0, 0, L"Франция"},
- {69, 0, 0, L"Хорватия"},
- {70, 0, 0, L"Чехия"},
- {71, 0, 0, L"Швейцария"},
- {72, 0, 0, L"Швеция"},
- {3196, 0, 0, L"Шпицберген (Норв.)"},
- {73, 0, 0, L"Эстония"},
- {24, 25, 0, L"Москва"},
- {24, 226, 0, L"Санкт-Петербург"},
- {24, 233, 0, L"Саха (Якутия)"},
- {24, 232, 0, L"Приморский край"},
- {24, 235, 0, L"Хабаровский край"},
- {24, 227, 0, L"Амурская обл."},
- {24, 229, 0, L"Камчатская обл."},
- {24, 231, 0, L"Магаданская обл."},
- {24, 234, 0, L"Сахалинская обл."},
- {24, 228, 0, L"Еврейская АО"},
- {24, 230, 0, L"Корякский АО"},
- {24, 236, 0, L"Чукотский АО"},
- {24, 237, 0, L"Башкортостан"},
- {24, 240, 0, L"Марий-Эл"},
- {24, 241, 0, L"Мордовия"},
- {24, 248, 0, L"Татарстан"},
- {24, 249, 0, L"Удмуртия"},
- {24, 251, 0, L"Чувашия"},
- {24, 238, 0, L"Кировская обл."},
- {24, 242, 0, L"Нижегородская обл."},
- {24, 243, 0, L"Оренбургская обл."},
- {24, 244, 0, L"Пензенская обл."},
- {24, 245, 0, L"Пермская обл."},
- {24, 246, 0, L"Самарская обл."},
- {24, 247, 0, L"Саратовская обл."},
- {24, 250, 0, L"Ульяновская обл."},
- {24, 239, 0, L"Коми-Пермяцкий АО"},
- {24, 255, 0, L"Карелия"},
- {24, 256, 0, L"Коми"},
- {24, 252, 0, L"Архангельская обл."},
- {24, 253, 0, L"Вологодская обл."},
- {24, 254, 0, L"Калининградская обл."},
- {24, 257, 0, L"Ленинградская обл."},
- {24, 258, 0, L"Мурманская обл."},
- {24, 260, 0, L"Новгородская обл."},
- {24, 261, 0, L"Псковская обл."},
- {24, 259, 0, L"Ненецкий АО"},
- {24, 265, 0, L"Бурятия"},
- {24, 263, 0, L"Республика Алтай"},
- {24, 273, 0, L"Тыва"},
- {24, 275, 0, L"Хакасия"},
- {24, 264, 0, L"Алтайский край"},
- {24, 268, 0, L"Красноярский край"},
- {24, 266, 0, L"Иркутская обл."},
- {24, 267, 0, L"Кемеровская обл."},
- {24, 269, 0, L"Новосибирская обл."},
- {24, 270, 0, L"Омская обл."},
- {24, 272, 0, L"Томская обл."},
- {24, 276, 0, L"Читинская обл."},
- {24, 262, 0, L"Агинский Бурятский АО"},
- {24, 271, 0, L"Таймырский АО"},
- {24, 274, 0, L"Усть-Ордынский Бурятский АО"},
- {24, 277, 0, L"Эвенкийский АО"},
- {24, 278, 0, L"Курганская обл."},
- {24, 279, 0, L"Свердловская обл."},
- {24, 280, 0, L"Тюменская обл."},
- {24, 282, 0, L"Челябинская обл."},
- {24, 281, 0, L"Ханты-Мансийский АО - Югра"},
- {24, 283, 0, L"Ямало-Ненецкий АО"},
- {24, 284, 0, L"Белгородская обл."},
- {24, 285, 0, L"Брянская обл."},
- {24, 286, 0, L"Владимирская обл."},
- {24, 287, 0, L"Воронежская обл."},
- {24, 288, 0, L"Ивановская обл."},
- {24, 289, 0, L"Калужская обл."},
- {24, 290, 0, L"Костромская обл."},
- {24, 291, 0, L"Курская обл."},
- {24, 292, 0, L"Липецкая обл."},
- {24, 293, 0, L"Московская обл."},
- {24, 294, 0, L"Орловская обл."},
- {24, 295, 0, L"Рязанская обл."},
- {24, 296, 0, L"Смоленская обл."},
- {24, 297, 0, L"Тамбовская обл."},
- {24, 298, 0, L"Тверская обл."},
- {24, 299, 0, L"Тульская обл."},
- {24, 300, 0, L"Ярославская обл."},
- {24, 301, 0, L"Адыгея"},
- {24, 304, 0, L"Дагестан"},
- {24, 305, 0, L"Ингушетия"},
- {24, 306, 0, L"Кабардино-Балкария"},
- {24, 307, 0, L"Калмыкия"},
- {24, 308, 0, L"Карачаево-Черкессия"},
- {24, 311, 0, L"Северная Осетия - Алания"},
- {24, 313, 0, L"Чечня"},
- {24, 309, 0, L"Краснодарский край"},
- {24, 312, 0, L"Ставропольский край"},
- {24, 302, 0, L"Астраханская обл."},
- {24, 303, 0, L"Волгоградская обл."},
- {24, 310, 0, L"Ростовская обл."},
- {81, 1055, 0, L"Баку"},
- {81, 1058, 0, L"Гянджа"},
- {81, 1056, 0, L"Нахичевань"},
- {81, 1057, 0, L"Ханкенди"},
- {81, 3153, 0, L"Шеки"},
- {81, 2291, 0, lpwszOther},
- {82, 2932, 0, L"Абовян"},
- {82, 1060, 0, L"Аштарак"},
- {82, 3084, 0, L"Ванадзор"},
- {82, 3011, 0, L"Гюмри"},
- {82, 3306, 0, L"Дилижан"},
- {82, 1059, 0, L"Ереван"},
- {82, 3145, 0, L"Ханкенди"},
- {82, 2292, 0, lpwszOther},
- {97, 1061, 0, L"Кабул"},
- {97, 2293, 0, lpwszOther},
- {96, 1062, 0, L"Дакка"},
- {96, 2294, 0, lpwszOther},
- {99, 1063, 0, L"Манама"},
- {99, 2295, 0, lpwszOther},
- {100, 1064, 0, L"Бандар-Сери-Бегаван"},
- {100, 2296, 0, lpwszOther},
- {101, 1065, 0, L"Тхимпху"},
- {101, 2297, 0, lpwszOther},
- {102, 1066, 0, L"Ханой"},
- {102, 2298, 0, lpwszOther},
- {83, 1067, 0, L"Батуми"},
- {83, 3158, 0, L"Боржоми"},
- {83, 1068, 0, L"Поти"},
- {83, 3129, 0, L"Рустави"},
- {83, 1069, 0, L"Сухуми"},
- {83, 1070, 0, L"Тбилиси"},
- {83, 2299, 0, lpwszOther},
- {86, 3345, 0, L"Ариэль"},
- {86, 1071, 0, L"Афула"},
- {86, 2992, 0, L"Ашдод"},
- {86, 3175, 0, L"Ашкелон"},
- {86, 3363, 0, L"Бат-Ям"},
- {86, 2884, 0, L"Беер-Яков"},
- {86, 3243, 0, L"Бейт-Шемеш"},
- {86, 1074, 0, L"Беэр-Шева"},
- {86, 3348, 0, L"Герцелия"},
- {86, 3241, 0, L"Димона"},
- {86, 1075, 0, L"Иерусалим"},
- {86, 3350, 0, L"Йокнеам-Иллит"},
- {86, 2982, 0, L"Кармиэль"},
- {86, 2971, 0, L"Кфар-Саба"},
- {86, 3136, 0, L"Назарет"},
- {86, 1080, 0, L"Натания"},
- {86, 3303, 0, L"Офаким"},
- {86, 3050, 0, L"Раанана"},
- {86, 3151, 0, L"Рамат Ган"},
- {86, 3141, 0, L"Реховот"},
- {86, 3012, 0, L"Ришон ле Цион"},
- {86, 1081, 0, L"Тверия"},
- {86, 1077, 0, L"Тель-Авив"},
- {86, 1079, 0, L"Хадера"},
- {86, 1078, 0, L"Хайфа"},
- {86, 1076, 0, L"Хеврон"},
- {86, 2929, 0, L"Цфат"},
- {86, 2928, 0, L"Эйлат"},
- {86, 2300, 0, lpwszOther},
- {95, 3315, 0, L"Бангалор"},
- {95, 1082, 0, L"Дели"},
- {95, 1083, 0, L"Джайпур"},
- {95, 3144, 0, L"Калькутта"},
- {95, 3025, 0, L"Мумбаи"},
- {95, 3277, 0, L"Панаджи"},
- {95, 1084, 0, L"Ченнаи"},
- {95, 2301, 0, lpwszOther},
- {103, 1085, 0, L"Джакарта"},
- {103, 2302, 0, lpwszOther},
- {79, 1086, 0, L"Амман"},
- {79, 2303, 0, lpwszOther},
- {85, 1087, 0, L"Багдад"},
- {85, 2304, 0, lpwszOther},
- {87, 1088, 0, L"Тегеран"},
- {87, 2305, 0, lpwszOther},
- {104, 1089, 0, L"Сана"},
- {104, 2306, 0, lpwszOther},
- {84, 1090, 0, L"Актау"},
- {84, 1091, 0, L"Актюбинск"},
- {84, 1092, 0, L"Алма-Ата"},
- {84, 3242, 0, L"Аршалы"},
- {84, 1093, 0, L"Астана"},
- {84, 1094, 0, L"Атырау (Гурьев)"},
- {84, 1095, 0, L"Байконур"},
- {84, 3245, 0, L"Балхаш"},
- {84, 3083, 0, L"Жезказган"},
- {84, 1096, 0, L"Капчагай"},
- {84, 1097, 0, L"Караганда"},
- {84, 1098, 0, L"Кокшетау"},
- {84, 1099, 0, L"Кустанай"},
- {84, 2868, 0, L"Лисаковск"},
- {84, 1100, 0, L"Павлодар"},
- {84, 1101, 0, L"Петропавловск (Сев.-Каз. обл.)"},
- {84, 1102, 0, L"Рудный"},
- {84, 1103, 0, L"Семипалатинск"},
- {84, 1104, 0, L"Степногорск"},
- {84, 3166, 0, L"Талгар"},
- {84, 1105, 0, L"Талды-Курган"},
- {84, 2927, 0, L"Тараз"},
- {84, 1106, 0, L"Темиртау"},
- {84, 1107, 0, L"Уральск"},
- {84, 1108, 0, L"Усть-Каменогорск"},
- {84, 1109, 0, L"Чимкент"},
- {84, 1110, 0, L"Экибастуз"},
- {84, 2307, 0, lpwszOther},
- {105, 1111, 0, L"Пномпень"},
- {105, 2308, 0, lpwszOther},
- {106, 1112, 0, L"Доха"},
- {106, 2309, 0, lpwszOther},
- {107, 1113, 0, L"Ларнака"},
- {107, 1114, 0, L"Лимассол"},
- {107, 1115, 0, L"Никосия"},
- {107, 2954, 0, L"Пафос"},
- {107, 2310, 0, lpwszOther},
- {92, 1116, 0, L"Бишкек"},
- {92, 1117, 0, L"Джалал-Абад"},
- {92, 3027, 0, L"Кара-Балта"},
- {92, 1118, 0, L"Каракол"},
- {92, 1119, 0, L"Ош"},
- {92, 1120, 0, L"Талас"},
- {92, 2933, 0, L"Хайдаркен"},
- {92, 2311, 0, lpwszOther},
- {76, 3214, 0, L"Аомынь (Макао)"},
- {76, 1121, 0, L"Гонконг"},
- {76, 2869, 0, L"Гуанчжоу"},
- {76, 3262, 0, L"Далянь"},
- {76, 1122, 0, L"Пекин"},
- {76, 1123, 0, L"Харбин"},
- {76, 1124, 0, L"Шанхай"},
- {76, 3043, 0, L"Шеньян"},
- {76, 2312, 0, lpwszOther},
- {29, 1125, 0, L"Пхеньян"},
- {29, 2313, 0, lpwszOther},
- {108, 1126, 0, L"Сеул"},
- {108, 3240, 0, L"Тейджон"},
- {108, 2314, 0, lpwszOther},
- {88, 1127, 0, L"Эль-Кувейт"},
- {88, 2315, 0, lpwszOther},
- {109, 1128, 0, L"Вьентьян"},
- {109, 2316, 0, lpwszOther},
- {110, 1129, 0, L"Бейрут"},
- {110, 2317, 0, lpwszOther},
- {111, 1130, 0, L"Джохор-Бару"},
- {111, 1131, 0, L"Куала-Лумпур"},
- {111, 2318, 0, lpwszOther},
- {112, 1132, 0, L"Мале"},
- {112, 2319, 0, lpwszOther},
- {113, 1133, 0, L"Улан-Батор"},
- {113, 1134, 0, L"Эрдэнэт"},
- {113, 2320, 0, lpwszOther},
- {114, 1135, 0, L"Янгон"},
- {114, 2321, 0, lpwszOther},
- {115, 1136, 0, L"Катманду"},
- {115, 2322, 0, lpwszOther},
- {116, 1137, 0, L"Абу-Даби"},
- {116, 1138, 0, L"Дубай"},
- {116, 1139, 0, L"Шарджа"},
- {116, 2323, 0, lpwszOther},
- {117, 1140, 0, L"Маскат"},
- {117, 2324, 0, lpwszOther},
- {122, 1141, 0, L"Исламабад"},
- {122, 2325, 0, lpwszOther},
- {89, 1072, 0, L"Ашдод"},
- {89, 1073, 0, L"Ашкелон"},
- {89, 1142, 0, L"Газа"},
- {89, 2326, 0, lpwszOther},
- {94, 3250, 0, L"Медина"},
- {94, 1143, 0, L"Эр-Рияд"},
- {94, 2327, 0, lpwszOther},
- {78, 1144, 0, L"Дамаск"},
- {78, 2328, 0, lpwszOther},
- {91, 1145, 0, L"Душанбе"},
- {91, 3307, 0, L"Кайраккум"},
- {91, 3308, 0, L"Худжанд"},
- {91, 2329, 0, lpwszOther},
- {119, 1146, 0, L"Бангкок"},
- {119, 1147, 0, L"Пхукет"},
- {119, 2330, 0, lpwszOther},
- {120, 1148, 0, L"Тайбэй"},
- {120, 2331, 0, lpwszOther},
- {132, 1149, 0, L"Дили"},
- {132, 2332, 0, lpwszOther},
- {90, 1150, 0, L"Ашхабад"},
- {90, 3079, 0, L"Безмеин"},
- {90, 2333, 0, lpwszOther},
- {77, 1152, 0, L"Анкара"},
- {77, 1153, 0, L"Анталия"},
- {77, 3080, 0, L"Бурса"},
- {77, 1151, 0, L"Мармарис"},
- {77, 1154, 0, L"Стамбул"},
- {77, 1155, 0, L"Трабзон"},
- {77, 2334, 0, lpwszOther},
- {93, 3362, 0, L"Алмалык"},
- {93, 3137, 0, L"Андижан"},
- {93, 3273, 0, L"Асака"},
- {93, 1156, 0, L"Ахангаран"},
- {93, 1157, 0, L"Бухара"},
- {93, 3167, 0, L"Джизак"},
- {93, 3347, 0, L"Кунград"},
- {93, 1158, 0, L"Навои"},
- {93, 1159, 0, L"Наманган"},
- {93, 1160, 0, L"Самарканд"},
- {93, 1161, 0, L"Ташкент"},
- {93, 1162, 0, L"Ургенч"},
- {93, 1163, 0, L"Фергана"},
- {93, 1164, 0, L"Чирчик"},
- {93, 2335, 0, lpwszOther},
- {121, 1165, 0, L"Манила"},
- {121, 3319, 0, L"Себу"},
- {121, 2336, 0, lpwszOther},
- {98, 1166, 0, L"Коломбо"},
- {98, 2337, 0, lpwszOther},
- {75, 3176, 0, L"Исесаки"},
- {75, 3339, 0, L"Корияма"},
- {75, 1167, 0, L"Саппоро"},
- {75, 1168, 0, L"Токио"},
- {75, 2338, 0, lpwszOther},
- {123, 1914, 0, L"Аделаида"},
- {123, 2957, 0, L"Блэк Рок"},
- {123, 1915, 0, L"Брисбен"},
- {123, 3331, 0, L"Горокан"},
- {123, 1916, 0, L"Канберра"},
- {123, 3001, 0, L"Лидкомб"},
- {123, 1917, 0, L"Мельбурн"},
- {123, 3217, 0, L"Норфолк"},
- {123, 3064, 0, L"Перт"},
- {123, 3020, 0, L"Санта Люсиа"},
- {123, 1918, 0, L"Сидней"},
- {123, 3238, 0, L"Энеабба"},
- {123, 2339, 0, lpwszOther},
- {454, 1192, 0, L"Паго-Паго"},
- {454, 2366, 0, lpwszOther},
- {124, 1919, 0, L"Порт-Вила"},
- {124, 2340, 0, lpwszOther},
- {453, 1193, 0, L"Аганья"},
- {453, 2368, 0, lpwszOther},
- {126, 1921, 0, L"Баирики"},
- {126, 2342, 0, lpwszOther},
- {127, 1922, 0, L"Маджуро"},
- {127, 2343, 0, lpwszOther},
- {128, 1923, 0, L"Паликир"},
- {128, 2344, 0, lpwszOther},
- {129, 1924, 0, L"Ярен"},
- {129, 2345, 0, lpwszOther},
- {130, 1925, 0, L"Веллингтон"},
- {130, 1926, 0, L"Гамильтон"},
- {130, 1928, 0, L"Данидин"},
- {130, 1929, 0, L"Крайстчерч"},
- {130, 3235, 0, L"Кромвель"},
- {130, 1927, 0, L"Окленд"},
- {130, 3323, 0, L"Тауранга"},
- {130, 2346, 0, lpwszOther},
- {131, 1930, 0, L"Корор"},
- {131, 2347, 0, lpwszOther},
- {133, 1931, 0, L"Порт-Морсби"},
- {133, 2348, 0, lpwszOther},
- {125, 1920, 0, L"Апиа"},
- {125, 2341, 0, lpwszOther},
- {134, 1932, 0, L"Хониара"},
- {134, 2349, 0, lpwszOther},
- {135, 1933, 0, L"Нукуалофа"},
- {135, 2350, 0, lpwszOther},
- {136, 1934, 0, L"Фунафути"},
- {136, 2351, 0, lpwszOther},
- {137, 1935, 0, L"Сува"},
- {137, 2352, 0, lpwszOther},
- {138, 3055, 0, L"Барлингтон"},
- {138, 3049, 0, L"Броссард"},
- {138, 3330, 0, L"Бурнаби"},
- {138, 1169, 0, L"Ванкувер"},
- {138, 3106, 0, L"Ватерлоо"},
- {138, 1170, 0, L"Виннипег"},
- {138, 1171, 0, L"Галифакс"},
- {138, 1172, 0, L"Гамильтон"},
- {138, 3365, 0, L"Денвер"},
- {138, 1173, 0, L"Калгари"},
- {138, 3104, 0, L"Камлупс"},
- {138, 3366, 0, L"Каннингтон"},
- {138, 1174, 0, L"Квебек"},
- {138, 2964, 0, L"Кингстон"},
- {138, 3113, 0, L"Коквитлам"},
- {138, 1175, 0, L"Монреаль"},
- {138, 2920, 0, L"Ниагара-Фолс"},
- {138, 2889, 0, L"Норд-Йорк"},
- {138, 1176, 0, L"Оттава"},
- {138, 2903, 0, L"Порт Алберни"},
- {138, 1177, 0, L"Ричмонд"},
- {138, 1178, 0, L"Тимминс"},
- {138, 2946, 0, L"Торнхилл"},
- {138, 1179, 0, L"Торонто"},
- {138, 1180, 0, L"Эдмонтон"},
- {138, 2353, 0, lpwszOther},
- {139, 407, 0, L"Вашингтон"},
- {139, 426, 0, L"Айдахо"},
- {139, 378, 0, L"Айова"},
- {139, 412, 0, L"Алабама"},
- {139, 446, 0, L"Аляска"},
- {139, 434, 0, L"Аризона"},
- {139, 416, 0, L"Арканзас"},
- {139, 428, 0, L"Вайоминг"},
- {139, 440, 0, L"Вашингтон"},
- {139, 352, 0, L"Вермонт"},
- {139, 394, 0, L"Виргиния"},
- {139, 374, 0, L"Висконсин"},
- {139, 448, 0, L"Гавайи"},
- {139, 390, 0, L"Делавер"},
- {139, 402, 0, L"Джорджия"},
- {139, 396, 0, L"Западная Виргиния"},
- {139, 370, 0, L"Иллинойс"},
- {139, 368, 0, L"Индиана"},
- {139, 444, 0, L"Калифорния"},
- {139, 388, 0, L"Канзас"},
- {139, 408, 0, L"Кентукки"},
- {139, 430, 0, L"Колорадо"},
- {139, 358, 0, L"Коннектикут"},
- {139, 418, 0, L"Луизиана"},
- {139, 354, 0, L"Массачусетс"},
- {139, 376, 0, L"Миннесота"},
- {139, 414, 0, L"Миссисипи"},
- {139, 380, 0, L"Миссури"},
- {139, 372, 0, L"Мичиган"},
- {139, 424, 0, L"Монтана"},
- {139, 348, 0, L"Мэн"},
- {139, 392, 0, L"Мэриленд"},
- {139, 386, 0, L"Небраска"},
- {139, 438, 0, L"Невада"},
- {139, 362, 0, L"Нью-Джерси"},
- {139, 360, 0, L"Нью-Йорк"},
- {139, 432, 0, L"Нью-Мексико"},
- {139, 350, 0, L"Нью-Хэмпшир"},
- {139, 366, 0, L"Огайо"},
- {139, 420, 0, L"Оклахома"},
- {139, 442, 0, L"Орегон"},
- {139, 364, 0, L"Пенсильвания"},
- {139, 450, 0, L"Пуэрто-Рико"},
- {139, 356, 0, L"Род-Айленд"},
- {139, 382, 0, L"Северная Дакота"},
- {139, 398, 0, L"Северная Каролина"},
- {139, 410, 0, L"Теннесси"},
- {139, 422, 0, L"Техас"},
- {139, 406, 0, L"Федеральный округ Колумбия"},
- {139, 404, 0, L"Флорида"},
- {139, 384, 0, L"Южная Дакота"},
- {139, 400, 0, L"Южная Каролина"},
- {139, 436, 0, L"Юта"},
- {140, 1238, 0, L"Сент-Джонс"},
- {140, 2442, 0, lpwszOther},
- {141, 1239, 0, L"Буэнос-Айрес"},
- {141, 2441, 0, lpwszOther},
- {142, 1240, 0, L"Нассау"},
- {142, 2440, 0, lpwszOther},
- {143, 1241, 0, L"Бриджтаун"},
- {143, 2439, 0, lpwszOther},
- {146, 1242, 0, L"Бельмопан"},
- {146, 2438, 0, lpwszOther},
- {144, 1243, 0, L"Ла-Пас"},
- {144, 2437, 0, lpwszOther},
- {145, 1244, 0, L"Бразилиа"},
- {145, 3094, 0, L"Пассо Фундо"},
- {145, 1245, 0, L"Рио-де-Жанейро"},
- {145, 1246, 0, L"Сан-Паулу"},
- {145, 2436, 0, lpwszOther},
- {147, 1247, 0, L"Каракас"},
- {147, 2435, 0, lpwszOther},
- {452, 1190, 0, L"Шарлотта-Амалия"},
- {452, 2364, 0, lpwszOther},
- {149, 1248, 0, L"Порт-о-Пренс"},
- {149, 2434, 0, lpwszOther},
- {148, 1249, 0, L"Джоржтаун"},
- {148, 2433, 0, lpwszOther},
- {173, 1250, 0, L"Гватемала"},
- {173, 2432, 0, lpwszOther},
- {150, 1251, 0, L"Тегусигальпа"},
- {150, 2431, 0, lpwszOther},
- {151, 1252, 0, L"Сент-Джорджес"},
- {151, 2430, 0, lpwszOther},
- {152, 1253, 0, L"Уманак"},
- {152, 2429, 0, lpwszOther},
- {153, 1254, 0, L"Розо"},
- {153, 2428, 0, lpwszOther},
- {154, 1255, 0, L"Санто-Доминго"},
- {154, 2427, 0, lpwszOther},
- {155, 1256, 0, L"Богота"},
- {155, 2426, 0, lpwszOther},
- {156, 1257, 0, L"Сан-Хосе"},
- {156, 2425, 0, lpwszOther},
- {157, 1258, 0, L"Гавана"},
- {157, 2424, 0, lpwszOther},
- {158, 1259, 0, L"Акапулько"},
- {158, 1260, 0, L"Мехико"},
- {158, 2423, 0, lpwszOther},
- {159, 1261, 0, L"Манагуа"},
- {159, 2422, 0, lpwszOther},
- {160, 1262, 0, L"Панама"},
- {160, 2421, 0, lpwszOther},
- {161, 1263, 0, L"Асунсьон"},
- {161, 2420, 0, lpwszOther},
- {162, 1264, 0, L"Лима"},
- {162, 2419, 0, lpwszOther},
- {163, 1265, 0, L"Сан-Сальвадор"},
- {163, 2418, 0, lpwszOther},
- {164, 1266, 0, L"Кингстаун"},
- {164, 2417, 0, lpwszOther},
- {165, 1267, 0, L"Бастер"},
- {165, 2416, 0, lpwszOther},
- {166, 1268, 0, L"Кастри"},
- {166, 2415, 0, lpwszOther},
- {167, 1269, 0, L"Парамарибо"},
- {167, 2414, 0, lpwszOther},
- {168, 1270, 0, L"Порт-оф-Спейн"},
- {168, 2413, 0, lpwszOther},
- {169, 1271, 0, L"Монтевидео"},
- {169, 2412, 0, lpwszOther},
- {170, 1272, 0, L"Сантьяго"},
- {170, 2411, 0, lpwszOther},
- {171, 1273, 0, L"Гуаякиль"},
- {171, 1274, 0, L"Кито"},
- {171, 2410, 0, lpwszOther},
- {172, 1275, 0, L"Кингстон"},
- {172, 2409, 0, lpwszOther},
- {174, 1854, 0, L"Алжир"},
- {174, 2495, 0, lpwszOther},
- {175, 1855, 0, L"Луанда"},
- {175, 2494, 0, lpwszOther},
- {176, 1856, 0, L"Котону"},
- {176, 1857, 0, L"Порто-Ново"},
- {176, 2493, 0, lpwszOther},
- {177, 1858, 0, L"Габороне"},
- {177, 2492, 0, lpwszOther},
- {178, 1859, 0, L"Уагадугу"},
- {178, 2491, 0, lpwszOther},
- {179, 1860, 0, L"Бужумбуру"},
- {179, 2490, 0, lpwszOther},
- {180, 1861, 0, L"Либревиль"},
- {180, 2489, 0, lpwszOther},
- {181, 1862, 0, L"Банжул"},
- {181, 2488, 0, lpwszOther},
- {182, 1863, 0, L"Аккра"},
- {182, 2487, 0, lpwszOther},
- {183, 1864, 0, L"Конакри"},
- {183, 2486, 0, lpwszOther},
- {184, 1865, 0, L"Бисау"},
- {184, 2485, 0, lpwszOther},
- {185, 1866, 0, L"Джибути"},
- {185, 2484, 0, lpwszOther},
- {186, 3312, 0, L"Дахаб"},
- {186, 1867, 0, L"Каир"},
- {186, 1868, 0, L"Хургада"},
- {186, 2483, 0, lpwszOther},
- {187, 1869, 0, L"Лусака"},
- {187, 2482, 0, lpwszOther},
- {23, 1870, 0, L"Хараре"},
- {23, 2481, 0, lpwszOther},
- {188, 1871, 0, L"Прая"},
- {188, 2480, 0, lpwszOther},
- {189, 1872, 0, L"Яунде"},
- {189, 2479, 0, lpwszOther},
- {190, 1873, 0, L"Найроби"},
- {190, 2478, 0, lpwszOther},
- {191, 1874, 0, L"Морони"},
- {191, 2477, 0, lpwszOther},
- {193, 1875, 0, L"Киншаса"},
- {193, 2476, 0, lpwszOther},
- {192, 1876, 0, L"Браззавиль"},
- {192, 2475, 0, lpwszOther},
- {194, 1877, 0, L"Ямусукро"},
- {194, 2474, 0, lpwszOther},
- {195, 1878, 0, L"Масеру"},
- {195, 2473, 0, lpwszOther},
- {196, 1879, 0, L"Монровия"},
- {196, 2472, 0, lpwszOther},
- {197, 1880, 0, L"Триполи"},
- {197, 2471, 0, lpwszOther},
- {198, 1881, 0, L"Порт-Луи"},
- {198, 2470, 0, lpwszOther},
- {199, 1882, 0, L"Нуакшот"},
- {199, 2469, 0, lpwszOther},
- {200, 1883, 0, L"Антананариву"},
- {200, 2468, 0, lpwszOther},
- {201, 1884, 0, L"Лилонгве"},
- {201, 2467, 0, lpwszOther},
- {202, 1885, 0, L"Бамако"},
- {202, 2466, 0, lpwszOther},
- {203, 1886, 0, L"Агадир"},
- {203, 1887, 0, L"Рабат"},
- {203, 2465, 0, lpwszOther},
- {204, 1888, 0, L"Мапуту"},
- {204, 2464, 0, lpwszOther},
- {205, 1889, 0, L"Виндхук"},
- {205, 2463, 0, lpwszOther},
- {206, 1890, 0, L"Ниамей"},
- {206, 2462, 0, lpwszOther},
- {207, 1891, 0, L"Абуджа"},
- {207, 2461, 0, lpwszOther},
- {208, 1892, 0, L"Кигали"},
- {208, 2460, 0, lpwszOther},
- {209, 1893, 0, L"Сан-Томе"},
- {209, 2459, 0, lpwszOther},
- {210, 1894, 0, L"Мбабане"},
- {210, 2458, 0, lpwszOther},
- {211, 1895, 0, L"Виктория"},
- {211, 2457, 0, lpwszOther},
- {212, 1896, 0, L"Дакар"},
- {212, 2456, 0, lpwszOther},
- {213, 1897, 0, L"Могадишо"},
- {213, 2455, 0, lpwszOther},
- {214, 1898, 0, L"Хартум"},
- {214, 2454, 0, lpwszOther},
- {215, 1899, 0, L"Фритаун"},
- {215, 2453, 0, lpwszOther},
- {216, 1900, 0, L"Дар-эс-Салам"},
- {216, 1901, 0, L"Додома"},
- {216, 2452, 0, lpwszOther},
- {217, 1902, 0, L"Ломе"},
- {217, 2451, 0, lpwszOther},
- {218, 1903, 0, L"Тунис"},
- {218, 2450, 0, lpwszOther},
- {219, 1904, 0, L"Кампала"},
- {219, 2449, 0, lpwszOther},
- {220, 1905, 0, L"Банги"},
- {220, 2448, 0, lpwszOther},
- {222, 1906, 0, L"Нджамена"},
- {222, 2447, 0, lpwszOther},
- {223, 1907, 0, L"Малабо"},
- {223, 2446, 0, lpwszOther},
- {221, 1908, 0, L"Асмэра"},
- {221, 2445, 0, lpwszOther},
- {224, 1909, 0, L"Аддис-Абеба"},
- {224, 2444, 0, lpwszOther},
- {225, 1910, 0, L"Дурбан"},
- {225, 1913, 0, L"Йоханнесбург"},
- {225, 1912, 0, L"Кейптаун"},
- {225, 3033, 0, L"Пайнтаун"},
- {225, 1911, 0, L"Претория"},
- {225, 2443, 0, lpwszOther},
- {39, 314, 0, L"Киев"},
- {39, 315, 0, L"Винницкая обл."},
- {39, 316, 0, L"Волынская обл."},
- {39, 317, 0, L"Днепропетровская обл."},
- {39, 318, 0, L"Донецкая обл."},
- {39, 319, 0, L"Житомирская обл."},
- {39, 320, 0, L"Закарпатская обл."},
- {39, 321, 0, L"Запорожская обл."},
- {39, 322, 0, L"Ивано-Франковская обл."},
- {39, 323, 0, L"Киевская обл."},
- {39, 324, 0, L"Кировоградская обл."},
- {39, 325, 0, L"Крым"},
- {39, 326, 0, L"Луганская обл."},
- {39, 327, 0, L"Львовская обл."},
- {39, 328, 0, L"Николаевская обл."},
- {39, 329, 0, L"Одесская обл."},
- {39, 330, 0, L"Полтавская обл."},
- {39, 331, 0, L"Ровенская обл."},
- {39, 332, 0, L"Сумская обл."},
- {39, 333, 0, L"Тернопольская обл."},
- {39, 334, 0, L"Харьковская обл."},
- {39, 335, 0, L"Херсонская обл."},
- {39, 336, 0, L"Хмельницкая обл."},
- {39, 337, 0, L"Черкасская обл."},
- {39, 338, 0, L"Черниговская обл."},
- {39, 339, 0, L"Черновицкая обл."},
- {40, 602, 0, L"Бад Халл"},
- {40, 604, 0, L"Брегенц"},
- {40, 603, 0, L"Вена"},
- {40, 608, 0, L"Грац"},
- {40, 606, 0, L"Зальцбург"},
- {40, 3099, 0, L"Зель-ам-Зее"},
- {40, 605, 0, L"Инсбрук"},
- {40, 3174, 0, L"Кирхберг"},
- {40, 609, 0, L"Клагенфурт"},
- {40, 607, 0, L"Линц"},
- {40, 610, 0, L"Обдах"},
- {40, 611, 0, L"Щтубайтал"},
- {40, 2541, 0, lpwszOther},
- {32, 612, 0, L"Тирана"},
- {32, 2540, 0, lpwszOther},
- {33, 613, 0, L"Андорра-ла-Велья"},
- {33, 2539, 0, lpwszOther},
- {340, 341, 0, L"Минск"},
- {340, 342, 0, L"Брестская обл."},
- {340, 343, 0, L"Витебская обл."},
- {340, 344, 0, L"Гомельская обл."},
- {340, 345, 0, L"Гродненская обл."},
- {340, 346, 0, L"Минская обл."},
- {340, 347, 0, L"Могилевская обл."},
- {38, 760, 0, L"Антверпен"},
- {38, 767, 0, L"Арлон"},
- {38, 762, 0, L"Брюгге"},
- {38, 761, 0, L"Брюссель"},
- {38, 763, 0, L"Гент"},
- {38, 769, 0, L"Лувен"},
- {38, 765, 0, L"Льеж"},
- {38, 764, 0, L"Монс"},
- {38, 3117, 0, L"Мортсель"},
- {38, 766, 0, L"Намюр"},
- {38, 768, 0, L"Хасселт"},
- {38, 2532, 0, lpwszOther},
- {41, 3098, 0, L"Банско"},
- {41, 792, 0, L"Благоевград"},
- {41, 770, 0, L"Бургас"},
- {41, 771, 0, L"Бяла"},
- {41, 773, 0, L"Варна"},
- {41, 776, 0, L"Велико-Тырново"},
- {41, 788, 0, L"Видин"},
- {41, 789, 0, L"Враца"},
- {41, 796, 0, L"Габрово"},
- {41, 777, 0, L"Димитровград"},
- {41, 781, 0, L"Каварна"},
- {41, 786, 0, L"Кырджали"},
- {41, 791, 0, L"Кюстендил"},
- {41, 793, 0, L"Лазарджик"},
- {41, 795, 0, L"Ловеч"},
- {41, 787, 0, L"Михайловград"},
- {41, 790, 0, L"Перник"},
- {41, 3133, 0, L"Пирдоп"},
- {41, 794, 0, L"Плевен"},
- {41, 782, 0, L"Пловдив"},
- {41, 780, 0, L"Разград"},
- {41, 779, 0, L"Русе"},
- {41, 774, 0, L"Силистра"},
- {41, 784, 0, L"Сливен"},
- {41, 772, 0, L"София"},
- {41, 775, 0, L"Толбухин"},
- {41, 3116, 0, L"Тырново"},
- {41, 785, 0, L"Хасково"},
- {41, 778, 0, L"Шумен"},
- {41, 783, 0, L"Ямбол"},
- {41, 2531, 0, lpwszOther},
- {42, 797, 0, L"Баня-Лука"},
- {42, 799, 0, L"Зеница"},
- {42, 798, 0, L"Сараево"},
- {42, 800, 0, L"Тузла"},
- {42, 2530, 0, lpwszOther},
- {45, 802, 0, L"Абердин"},
- {45, 3075, 0, L"Айслворт"},
- {45, 801, 0, L"Алнвик"},
- {45, 804, 0, L"Бидефорд"},
- {45, 803, 0, L"Бирмингем"},
- {45, 805, 0, L"Блоксвич"},
- {45, 3168, 0, L"Бостон"},
- {45, 806, 0, L"Брайтон"},
- {45, 807, 0, L"Бредфорд"},
- {45, 808, 0, L"Бристоль"},
- {45, 809, 0, L"Вилленхолл"},
- {45, 3131, 0, L"Воррингтон"},
- {45, 810, 0, L"Вудбридж"},
- {45, 3342, 0, L"Гилфорд"},
- {45, 811, 0, L"Глазго"},
- {45, 812, 0, L"Дадли"},
- {45, 813, 0, L"Дарем"},
- {45, 814, 0, L"Дуглас"},
- {45, 3089, 0, L"Кардиф"},
- {45, 815, 0, L"Кембридж"},
- {45, 816, 0, L"Кентербери"},
- {45, 817, 0, L"Ливерпуль"},
- {45, 818, 0, L"Лидс"},
- {45, 819, 0, L"Лондон"},
- {45, 820, 0, L"Манчестер"},
- {45, 2976, 0, L"Митчем"},
- {45, 2988, 0, L"Мэйденхед"},
- {45, 821, 0, L"Ноттингем"},
- {45, 3088, 0, L"Ньюпорт"},
- {45, 822, 0, L"Оксфорд"},
- {45, 823, 0, L"Плимут"},
- {45, 824, 0, L"Портсмут"},
- {45, 825, 0, L"Престон"},
- {45, 3343, 0, L"Райд"},
- {45, 2867, 0, L"Ридинг"},
- {45, 2986, 0, L"Сент-Албанс"},
- {45, 826, 0, L"Стаффорд"},
- {45, 3063, 0, L"Стокпорт"},
- {45, 827, 0, L"Уэймут"},
- {45, 3140, 0, L"Челтенхэм"},
- {45, 828, 0, L"Честер"},
- {45, 829, 0, L"Шеффилд"},
- {45, 830, 0, L"Эдинбург"},
- {45, 2529, 0, lpwszOther},
- {44, 831, 0, L"Будапешт"},
- {44, 832, 0, L"Геделле"},
- {44, 836, 0, L"Дебрецен"},
- {44, 835, 0, L"Мишкольц"},
- {44, 834, 0, L"Сегед"},
- {44, 833, 0, L"Шиофок"},
- {44, 2528, 0, lpwszOther},
- {46, 3007, 0, L"Аахен"},
- {46, 837, 0, L"Аугсбург"},
- {46, 838, 0, L"Баден-Баден"},
- {46, 3371, 0, L"Бамберг"},
- {46, 839, 0, L"Бергиш-Гладбах"},
- {46, 840, 0, L"Берлин"},
- {46, 841, 0, L"Билефельд"},
- {46, 3163, 0, L"Бовенден"},
- {46, 842, 0, L"Бонн"},
- {46, 843, 0, L"Браденбург"},
- {46, 3015, 0, L"Брауншвейг"},
- {46, 844, 0, L"Бремен"},
- {46, 2921, 0, L"Варштайн"},
- {46, 845, 0, L"Веймар"},
- {46, 846, 0, L"Вупперталь"},
- {46, 847, 0, L"Гамбург"},
- {46, 848, 0, L"Ганновер"},
- {46, 849, 0, L"Гарделеген"},
- {46, 3010, 0, L"Гейдельберг"},
- {46, 850, 0, L"Гота"},
- {46, 851, 0, L"Дармштадт"},
- {46, 3072, 0, L"Дессау"},
- {46, 852, 0, L"Детмольд"},
- {46, 853, 0, L"Дортмунд"},
- {46, 854, 0, L"Дрезден"},
- {46, 855, 0, L"Дюссельдорф"},
- {46, 3082, 0, L"Иффецхайм"},
- {46, 3309, 0, L"Кассел"},
- {46, 856, 0, L"Кельн"},
- {46, 857, 0, L"Киль"},
- {46, 3138, 0, L"Кобленц"},
- {46, 858, 0, L"Крефельд"},
- {46, 859, 0, L"Лейпциг"},
- {46, 2872, 0, L"Лимбург"},
- {46, 2965, 0, L"Линген"},
- {46, 3135, 0, L"Любек"},
- {46, 3156, 0, L"Мангейм"},
- {46, 3192, 0, L"Меерсбург"},
- {46, 860, 0, L"Мюнстер"},
- {46, 861, 0, L"Мюнхен"},
- {46, 2864, 0, L"Нойштадт"},
- {46, 862, 0, L"Нюрнберг"},
- {46, 3009, 0, L"Оффенбург"},
- {46, 2993, 0, L"Падерборн"},
- {46, 863, 0, L"Равенсбург"},
- {46, 864, 0, L"Регенсбург"},
- {46, 865, 0, L"Рейнен"},
- {46, 866, 0, L"Росток"},
- {46, 3191, 0, L"Саарбрюкен"},
- {46, 2974, 0, L"Санкт-Августин"},
- {46, 3127, 0, L"Тюринген"},
- {46, 867, 0, L"Фрайберг"},
- {46, 868, 0, L"Фрайбург"},
- {46, 869, 0, L"Франкфурт-на-Майне"},
- {46, 3373, 0, L"Хемнитц"},
- {46, 3313, 0, L"Хильден"},
- {46, 870, 0, L"Штутгарт"},
- {46, 3045, 0, L"Эрланген"},
- {46, 2906, 0, L"Эшборн"},
- {46, 2527, 0, lpwszOther},
- {48, 871, 0, L"Афины"},
- {48, 873, 0, L"Ираклион"},
- {48, 3147, 0, L"Корфу"},
- {48, 872, 0, L"Салоники"},
- {48, 3178, 0, L"Халкидики"},
- {48, 2526, 0, lpwszOther},
- {49, 3006, 0, L"Архус"},
- {49, 874, 0, L"Копенгаген"},
- {49, 875, 0, L"Оденсе"},
- {49, 3285, 0, L"Ольборг"},
- {49, 876, 0, L"Сванеке"},
- {49, 3126, 0, L"Скиве"},
- {49, 2525, 0, lpwszOther},
- {50, 3377, 0, L"Виклоу"},
- {50, 3067, 0, L"Голвей"},
- {50, 877, 0, L"Дублин"},
- {50, 3065, 0, L"Килларней"},
- {50, 3066, 0, L"Корк"},
- {50, 878, 0, L"Лимерик"},
- {50, 3069, 0, L"Нейс"},
- {50, 3068, 0, L"Типперэри"},
- {50, 2524, 0, lpwszOther},
- {51, 879, 0, L"Рейкьявик"},
- {51, 2523, 0, lpwszOther},
- {34, 880, 0, L"Аликанте"},
- {34, 3125, 0, L"Альмерия"},
- {34, 881, 0, L"Барселона"},
- {34, 890, 0, L"Бильбао"},
- {34, 3076, 0, L"Бланес"},
- {34, 882, 0, L"Валенсия"},
- {34, 3070, 0, L"Ибица"},
- {34, 888, 0, L"Кадис"},
- {34, 886, 0, L"Картахена"},
- {34, 891, 0, L"Ла-Корунья"},
- {34, 3310, 0, L"Лорет де Мар"},
- {34, 883, 0, L"Мадрид"},
- {34, 884, 0, L"Малага"},
- {34, 885, 0, L"Марбелья"},
- {34, 892, 0, L"Овьедо"},
- {34, 3179, 0, L"Пальма де Майорка"},
- {34, 3177, 0, L"Сан-Агустин"},
- {34, 3289, 0, L"Санта-Крус-де-Тенерифе"},
- {34, 889, 0, L"Сарагоса"},
- {34, 887, 0, L"Севилья"},
- {34, 893, 0, L"Хихон"},
- {34, 2522, 0, lpwszOther},
- {52, 3318, 0, L"Аоста"},
- {52, 3278, 0, L"Беллариа"},
- {52, 906, 0, L"Болонья"},
- {52, 894, 0, L"Брешиа"},
- {52, 895, 0, L"Венеция"},
- {52, 905, 0, L"Верона"},
- {52, 896, 0, L"Генуя"},
- {52, 897, 0, L"Лекко"},
- {52, 3369, 0, L"Ливорно"},
- {52, 3327, 0, L"Марсала"},
- {52, 898, 0, L"Милан"},
- {52, 899, 0, L"Модена"},
- {52, 907, 0, L"Неаполь"},
- {52, 908, 0, L"Перуджа"},
- {52, 900, 0, L"Пиза"},
- {52, 901, 0, L"Рим"},
- {52, 3368, 0, L"Сан-Ремо"},
- {52, 3384, 0, L"Сиракуза"},
- {52, 3252, 0, L"Терамо"},
- {52, 902, 0, L"Триест"},
- {52, 903, 0, L"Турин"},
- {52, 3130, 0, L"Фано"},
- {52, 904, 0, L"Флоренция"},
- {52, 2521, 0, lpwszOther},
- {53, 2939, 0, L"Айзкраукле"},
- {53, 3054, 0, L"Валка"},
- {53, 909, 0, L"Даугавпилс"},
- {53, 2934, 0, L"Екабпилс"},
- {53, 913, 0, L"Елгава"},
- {53, 2935, 0, L"Кокнесе"},
- {53, 912, 0, L"Лиепая"},
- {53, 2905, 0, L"Резекне"},
- {53, 911, 0, L"Рига"},
- {53, 2936, 0, L"Саласпилс"},
- {53, 2937, 0, L"Смилтене"},
- {53, 910, 0, L"Юрмала"},
- {53, 2520, 0, lpwszOther},
- {54, 914, 0, L"Вильнюс"},
- {54, 915, 0, L"Висагинас"},
- {54, 916, 0, L"Каунас"},
- {54, 918, 0, L"Клайпеда"},
- {54, 919, 0, L"Паланга"},
- {54, 3173, 0, L"Пеневежис"},
- {54, 917, 0, L"Шауляй"},
- {54, 2519, 0, lpwszOther},
- {55, 920, 0, L"Вадуц"},
- {55, 2518, 0, lpwszOther},
- {56, 3376, 0, L"Бетцдорф"},
- {56, 921, 0, L"Люксембург"},
- {56, 2517, 0, lpwszOther},
- {57, 3142, 0, L"Битола"},
- {57, 922, 0, L"Скопье"},
- {57, 2516, 0, lpwszOther},
- {58, 923, 0, L"Валлетта"},
- {58, 3154, 0, L"Мзида"},
- {58, 924, 0, L"Слима"},
- {58, 2515, 0, lpwszOther},
- {59, 925, 0, L"Бельцы"},
- {59, 926, 0, L"Бендеры"},
- {59, 3234, 0, L"Дубоссары"},
- {59, 3275, 0, L"Кахул"},
- {59, 927, 0, L"Кишинев"},
- {59, 3321, 0, L"Резина"},
- {59, 928, 0, L"Рыбница"},
- {59, 929, 0, L"Тирасполь"},
- {59, 3281, 0, L"Чадыр-Лунга"},
- {59, 2514, 0, lpwszOther},
- {36, 930, 0, L"Монте-Карло"},
- {36, 2513, 0, lpwszOther},
- {60, 931, 0, L"Амстердам"},
- {60, 933, 0, L"Бреда"},
- {60, 932, 0, L"Гаага"},
- {60, 934, 0, L"Гауда"},
- {60, 935, 0, L"Делфт"},
- {60, 2977, 0, L"Донген"},
- {60, 3030, 0, L"Зволле"},
- {60, 3091, 0, L"Ниймеген"},
- {60, 936, 0, L"Роттердам"},
- {60, 937, 0, L"Утрехт"},
- {60, 3044, 0, L"Эйндховен"},
- {60, 3380, 0, L"Эншеде"},
- {60, 2512, 0, lpwszOther},
- {61, 3190, 0, L"Кристиансанд"},
- {61, 2857, 0, L"Лиллехаммер"},
- {61, 938, 0, L"Осло"},
- {61, 3355, 0, L"Ставангер"},
- {61, 939, 0, L"Тронхейм"},
- {61, 2511, 0, lpwszOther},
- {62, 940, 0, L"Белосток"},
- {62, 941, 0, L"Варшава"},
- {62, 3164, 0, L"Вроцлав"},
- {62, 942, 0, L"Гданьск"},
- {62, 943, 0, L"Гливице"},
- {62, 3237, 0, L"Закопане"},
- {62, 3165, 0, L"Зелена Гура"},
- {62, 944, 0, L"Катовице"},
- {62, 945, 0, L"Краков"},
- {62, 3008, 0, L"Лодзь"},
- {62, 3150, 0, L"Ольштын"},
- {62, 946, 0, L"Познань"},
- {62, 947, 0, L"Радом"},
- {62, 948, 0, L"Сопот"},
- {62, 2958, 0, L"Тыхы"},
- {62, 2510, 0, lpwszOther},
- {35, 949, 0, L"Лиссабон"},
- {35, 950, 0, L"Порто"},
- {35, 2509, 0, lpwszOther},
- {63, 952, 0, L"Брашов"},
- {63, 951, 0, L"Бухарест"},
- {63, 954, 0, L"Констанца"},
- {63, 955, 0, L"Плоешти"},
- {63, 953, 0, L"Яссы"},
- {63, 2508, 0, lpwszOther},
- {64, 956, 0, L"Сан-Марино"},
- {64, 2507, 0, lpwszOther},
- {74, 957, 0, L"Белград"},
- {74, 960, 0, L"Ниш"},
- {74, 958, 0, L"Нови-Сад"},
- {74, 959, 0, L"Сараево"},
- {74, 2506, 0, lpwszOther},
- {65, 961, 0, L"Братислава"},
- {65, 962, 0, L"Кошице"},
- {65, 3101, 0, L"Липтов"},
- {65, 963, 0, L"Попрад"},
- {65, 964, 0, L"Прешов"},
- {65, 965, 0, L"Ружемберок"},
- {65, 966, 0, L"Тврдошин"},
- {65, 2505, 0, lpwszOther},
- {66, 968, 0, L"Копар"},
- {66, 967, 0, L"Любляна"},
- {66, 969, 0, L"Марибор"},
- {66, 2504, 0, lpwszOther},
- {67, 970, 0, L"Торсхавн"},
- {67, 2503, 0, lpwszOther},
- {68, 2888, 0, L"Вантаа"},
- {68, 971, 0, L"Васа"},
- {68, 979, 0, L"Котка"},
- {68, 972, 0, L"Коувола"},
- {68, 980, 0, L"Лахти"},
- {68, 973, 0, L"Оулу"},
- {68, 3375, 0, L"Риихимяки"},
- {68, 3159, 0, L"Руовеси"},
- {68, 974, 0, L"Тампере"},
- {68, 975, 0, L"Турку"},
- {68, 976, 0, L"Хельсинки"},
- {68, 977, 0, L"Эспо"},
- {68, 978, 0, L"Ювяскюля"},
- {68, 2502, 0, lpwszOther},
- {37, 996, 0, L"Авиньон"},
- {37, 983, 0, L"Бержерак"},
- {37, 997, 0, L"Блуа"},
- {37, 984, 0, L"Бордо"},
- {37, 998, 0, L"Дижон"},
- {37, 987, 0, L"Канн"},
- {37, 988, 0, L"Кастр"},
- {37, 993, 0, L"Клермон-Ферран"},
- {37, 3037, 0, L"Лилль"},
- {37, 989, 0, L"Лион"},
- {37, 985, 0, L"Марсель"},
- {37, 991, 0, L"Мец"},
- {37, 3161, 0, L"Мобеж"},
- {37, 990, 0, L"Нанси"},
- {37, 994, 0, L"Нант"},
- {37, 995, 0, L"Ницца"},
- {37, 999, 0, L"Орлеан"},
- {37, 981, 0, L"Париж"},
- {37, 3374, 0, L"Перпиньян"},
- {37, 992, 0, L"Руан"},
- {37, 982, 0, L"Страсбург"},
- {37, 986, 0, L"Тулуза"},
- {37, 3314, 0, L"Шамбери"},
- {37, 2501, 0, lpwszOther},
- {69, 1003, 0, L"Дубровник"},
- {69, 1000, 0, L"Загреб"},
- {69, 1001, 0, L"Задар"},
- {69, 1004, 0, L"Риека"},
- {69, 1002, 0, L"Сплит"},
- {69, 2500, 0, lpwszOther},
- {70, 1005, 0, L"Брно"},
- {70, 3291, 0, L"Гавличкув-Брод"},
- {70, 1007, 0, L"Градец-Кралове"},
- {70, 1008, 0, L"Карлови-Вари"},
- {70, 3019, 0, L"Кладрубы"},
- {70, 1010, 0, L"Лоуни"},
- {70, 1009, 0, L"Острава"},
- {70, 1015, 0, L"Пльзень"},
- {70, 3105, 0, L"Правчицка Брана"},
- {70, 1006, 0, L"Прага"},
- {70, 3246, 0, L"Тачов"},
- {70, 1011, 0, L"Тршебич"},
- {70, 1012, 0, L"Усти-над-Лабем"},
- {70, 1014, 0, L"Ческе-Будеевице"},
- {70, 1013, 0, L"Яблонец-над-Нисоу"},
- {70, 2499, 0, lpwszOther},
- {71, 1016, 0, L"Арау"},
- {71, 1019, 0, L"Баден"},
- {71, 1017, 0, L"Базель"},
- {71, 1018, 0, L"Берн"},
- {71, 1020, 0, L"Биль"},
- {71, 1021, 0, L"Винтертур"},
- {71, 1022, 0, L"Давос"},
- {71, 3189, 0, L"Делемонт"},
- {71, 1023, 0, L"Женева"},
- {71, 1024, 0, L"Золотурн"},
- {71, 1025, 0, L"Лозанна"},
- {71, 1026, 0, L"Локарно"},
- {71, 1027, 0, L"Лугано"},
- {71, 1028, 0, L"Люцерн"},
- {71, 1029, 0, L"Монтре"},
- {71, 1030, 0, L"Цюрих"},
- {71, 2498, 0, lpwszOther},
- {72, 2883, 0, L"Арбога"},
- {72, 1031, 0, L"Гетеборг"},
- {72, 1032, 0, L"Кальмар"},
- {72, 1037, 0, L"Лахольм"},
- {72, 1036, 0, L"Лулео"},
- {72, 1042, 0, L"Лунд"},
- {72, 1033, 0, L"Мальме"},
- {72, 1034, 0, L"Стокгольм"},
- {72, 1041, 0, L"Умео"},
- {72, 1039, 0, L"Фалун"},
- {72, 1043, 0, L"Хельсинборг"},
- {72, 1040, 0, L"Хернесанд"},
- {72, 1038, 0, L"Эстерсунд"},
- {72, 2497, 0, lpwszOther},
- {73, 3013, 0, L"Валга"},
- {73, 1044, 0, L"Кейла"},
- {73, 1045, 0, L"Кохтла-Ярве"},
- {73, 1046, 0, L"Маарду"},
- {73, 1047, 0, L"Мыйзакюла"},
- {73, 1048, 0, L"Нарва"},
- {73, 1049, 0, L"Пярну"},
- {73, 1050, 0, L"Раквере"},
- {73, 1051, 0, L"Силламяэ"},
- {73, 1052, 0, L"Таллин"},
- {73, 1053, 0, L"Тарту"},
- {73, 1054, 0, L"Хаапсалу"},
- {0, 0, 0, NULL}
-};//*/
-
-/*
-static const MRA_COUNTRY mracCountrys[] =
-{
- {24, L"Россия"},
- {81, L"Азербайджан"},
- {82, L"Армения"},
- {97, L"Афганистан"},
- {96, L"Бангладеш"},
- {99, L"Бахрейн"},
- {100, L"Бруней-Даруссалам"},
- {101, L"Бутан"},
- {102, L"Вьетнам"},
- {83, L"Грузия"},
- {86, L"Израиль"},
- {95, L"Индия"},
- {103, L"Индонезия"},
- {79, L"Иордания"},
- {85, L"Ирак"},
- {87, L"Иран"},
- {104, L"Йемен"},
- {84, L"Казахстан"},
- {105, L"Камбоджа"},
- {106, L"Катар"},
- {107, L"Кипр"},
- {92, L"Киргизия (Кыргызстан)"},
- {76, L"Китай"},
- {3215, L"Кокосовые острова (Австр.)"},
- {29, L"Корея (КНДР)"},
- {108, L"Корея"},
- {88, L"Кувейт"},
- {109, L"Лаос"},
- {110, L"Ливан"},
- {111, L"Малайзия"},
- {112, L"Мальдивы"},
- {113, L"Монголия"},
- {114, L"Мьянма"},
- {115, L"Непал"},
- {116, L"Объединенные Арабские Эмираты"},
- {117, L"Оман"},
- {3216, L"Остров Рождества (Австр.)"},
- {122, L"Пакистан"},
- {89, L"Палестина"},
- {94, L"Саудовская Аравия"},
- {118, L"Сингапур"},
- {78, L"Сирия"},
- {91, L"Таджикистан"},
- {119, L"Таиланд"},
- {120, L"Тайвань"},
- {132, L"Тимор"},
- {90, L"Туркмения"},
- {77, L"Турция"},
- {93, L"Узбекистан"},
- {121, L"Филиппины"},
- {98, L"Шри Ланка"},
- {75, L"Япония"},
- {123, L"Австралия"},
- {454, L"Американское Самоа"},
- {124, L"Вануату"},
- {453, L"Гуам (США)"},
- {126, L"Кирибати"},
- {127, L"Маршалловы Острова"},
- {128, L"Микронезия (Федеративные Штаты Микронезии)"},
- {129, L"Науру"},
- {3220, L"Ниуэ (Н.Зел.)"},
- {130, L"Новая Зеландия"},
- {3218, L"Новая Каледония (Фр.)"},
- {3221, L"Острова Кука (Н.Зел.)"},
- {3230, L"Острова Херд и Макдональд (Австр.)"},
- {131, L"Палау"},
- {133, L"Папуа - Новая Гвинея"},
- {3222, L"Питкерн (Брит.)"},
- {125, L"Самоа"},
- {3219, L"Сев. Марианские острова (США)"},
- {134, L"Соломоновы Острова"},
- {3223, L"Токелау (Н.Зел.)"},
- {135, L"Тонга"},
- {136, L"Тувалу"},
- {3224, L"Уоллис и Футуна острова (Фр.)"},
- {137, L"Фиджи"},
- {3226, L"Французская Полинезия"},
- {3225, L"Французские Южные территории"},
- {138, L"Канада"},
- {139, L"США"},
- {3200, L"Ангилья (Брит.)"},
- {140, L"Антигуа и Барбуда"},
- {141, L"Аргентина"},
- {3202, L"Аруба (Нид.)"},
- {142, L"Багамы"},
- {143, L"Барбадос"},
- {146, L"Белиз"},
- {3203, L"Бермуды (Брит.)"},
- {144, L"Боливия"},
- {145, L"Бразилия"},
- {147, L"Венесуэла"},
- {3204, L"Виргинские острова (Брит.)"},
- {452, L"Виргинские острова (США)"},
- {149, L"Гаити"},
- {148, L"Гайана"},
- {3205, L"Гваделупа (Фр.)"},
- {173, L"Гватемала"},
- {150, L"Гондурас"},
- {151, L"Гренада"},
- {152, L"Гренландия (Дат.)"},
- {153, L"Доминика"},
- {154, L"Доминиканская Республика"},
- {155, L"Колумбия"},
- {156, L"Коста-Рика"},
- {157, L"Куба"},
- {3208, L"Мартиника (Фр.)"},
- {158, L"Мексика"},
- {3209, L"Монтсеррат (Брит)"},
- {3201, L"Нидерландские Антилы"},
- {159, L"Никарагуа"},
- {3207, L"Остров Кайман (Брит.)"},
- {3211, L"Острова Теркс и Кайкос (Брит.)"},
- {160, L"Панама"},
- {161, L"Парагвай"},
- {162, L"Перу"},
- {163, L"Сальвадор"},
- {164, L"Сент-Винсент и Гренадины"},
- {165, L"Сент-Китс и Невис"},
- {166, L"Сент-Люсия"},
- {3210, L"Сент-Пьер и Микелон (Фр.)"},
- {167, L"Суринам"},
- {168, L"Тринидат и Тобаго"},
- {169, L"Уругвай"},
- {3212, L"Фолклендские острова (Брит.)"},
- {3206, L"Французская Гвиана"},
- {170, L"Чили"},
- {171, L"Эквадор"},
- {3213, L"Юж. Джорджия и Юж. Сандвичевы о-ва (Брит.)"},
- {172, L"Ямайка"},
- {174, L"Алжир"},
- {175, L"Ангола"},
- {176, L"Бенин"},
- {177, L"Ботсвана"},
- {3228, L"Британская территория в Индийском океане"},
- {178, L"Буркина-Фасо"},
- {179, L"Бурунди"},
- {180, L"Габон"},
- {181, L"Гамбия"},
- {182, L"Гана"},
- {183, L"Гвинея"},
- {184, L"Гвинея-Бисау"},
- {185, L"Джибути"},
- {186, L"Египет"},
- {187, L"Замбия"},
- {3198, L"Зап. Сахара"},
- {23, L"Зимбабве"},
- {188, L"Кабо-Верде"},
- {189, L"Камерун"},
- {190, L"Кения"},
- {191, L"Коморы"},
- {193, L"Конго (Заир)"},
- {192, L"Конго"},
- {194, L"Кот-д`Ивуар"},
- {195, L"Лесото"},
- {196, L"Либерия"},
- {197, L"Ливия"},
- {198, L"Маврикий"},
- {199, L"Мавритания"},
- {200, L"Мадагаскар"},
- {3229, L"Майотт (Фр.)"},
- {201, L"Малави"},
- {202, L"Мали"},
- {203, L"Марокко"},
- {204, L"Мозамбик"},
- {205, L"Намибия"},
- {206, L"Нигер"},
- {207, L"Нигерия"},
- {3227, L"Остров Буве (Норв.)"},
- {3197, L"Реюньон (Фр.)"},
- {208, L"Руанда"},
- {209, L"Сан-Томе и Принсипи"},
- {210, L"Свазиленд"},
- {3199, L"Святая Елена (Брит.)"},
- {211, L"Сейшелы"},
- {212, L"Сенегал"},
- {213, L"Сомали"},
- {214, L"Судан"},
- {215, L"Сьерра-Леоне"},
- {216, L"Танзания"},
- {217, L"Того"},
- {218, L"Тунис"},
- {219, L"Уганда"},
- {220, L"Центральноафриканская Республика"},
- {222, L"Чад"},
- {223, L"Экваториальная Гвинея"},
- {221, L"Эритрея"},
- {224, L"Эфиопия"},
- {225, L"Южно-Африканская Республика (ЮАР)"},
- {39, L"Украина"},
- {40, L"Австрия"},
- {32, L"Албания"},
- {33, L"Андорра"},
- {340, L"Белоруссия"},
- {38, L"Бельгия"},
- {41, L"Болгария"},
- {42, L"Босния и Герцеговина"},
- {43, L"Ватикан"},
- {45, L"Великобритания"},
- {44, L"Венгрия"},
- {46, L"Германия"},
- {3193, L"Гернси (Брит.)"},
- {47, L"Гибралтар (Брит.)"},
- {48, L"Греция"},
- {49, L"Дания"},
- {3194, L"Джерси (Брит.)"},
- {50, L"Ирландия"},
- {51, L"Исландия"},
- {34, L"Испания"},
- {52, L"Италия"},
- {53, L"Латвия"},
- {54, L"Литва"},
- {55, L"Лихтенштейн"},
- {56, L"Люксембург"},
- {57, L"Македония"},
- {58, L"Мальта"},
- {59, L"Молдавия"},
- {36, L"Монако"},
- {60, L"Нидерланды"},
- {61, L"Норвегия"},
- {3195, L"Остров Мэн (Брит.)"},
- {62, L"Польша"},
- {35, L"Португалия"},
- {63, L"Румыния"},
- {64, L"Сан-Марино"},
- {74, L"Сербия и Черногория"},
- {65, L"Словакия"},
- {66, L"Словения"},
- {67, L"Фарерские о-ва (Дания)"},
- {68, L"Финляндия"},
- {37, L"Франция"},
- {69, L"Хорватия"},
- {70, L"Чехия"},
- {71, L"Швейцария"},
- {72, L"Швеция"},
- {3196, L"Шпицберген (Норв.)"},
- {73, L"Эстония"},
- {0, NULL}
-};
-
-
-
-static const MRA_CITY mracCitys[] =
-{
- {24, 25, L"Москва"},
- {24, 226, L"Санкт-Петербург"},
- {24, 233, L"Саха (Якутия)"},
- {24, 232, L"Приморский край"},
- {24, 235, L"Хабаровский край"},
- {24, 227, L"Амурская обл."},
- {24, 229, L"Камчатская обл."},
- {24, 231, L"Магаданская обл."},
- {24, 234, L"Сахалинская обл."},
- {24, 228, L"Еврейская АО"},
- {24, 230, L"Корякский АО"},
- {24, 236, L"Чукотский АО"},
- {24, 237, L"Башкортостан"},
- {24, 240, L"Марий-Эл"},
- {24, 241, L"Мордовия"},
- {24, 248, L"Татарстан"},
- {24, 249, L"Удмуртия"},
- {24, 251, L"Чувашия"},
- {24, 238, L"Кировская обл."},
- {24, 242, L"Нижегородская обл."},
- {24, 243, L"Оренбургская обл."},
- {24, 244, L"Пензенская обл."},
- {24, 245, L"Пермская обл."},
- {24, 246, L"Самарская обл."},
- {24, 247, L"Саратовская обл."},
- {24, 250, L"Ульяновская обл."},
- {24, 239, L"Коми-Пермяцкий АО"},
- {24, 255, L"Карелия"},
- {24, 256, L"Коми"},
- {24, 252, L"Архангельская обл."},
- {24, 253, L"Вологодская обл."},
- {24, 254, L"Калининградская обл."},
- {24, 257, L"Ленинградская обл."},
- {24, 258, L"Мурманская обл."},
- {24, 260, L"Новгородская обл."},
- {24, 261, L"Псковская обл."},
- {24, 259, L"Ненецкий АО"},
- {24, 265, L"Бурятия"},
- {24, 263, L"Республика Алтай"},
- {24, 273, L"Тыва"},
- {24, 275, L"Хакасия"},
- {24, 264, L"Алтайский край"},
- {24, 268, L"Красноярский край"},
- {24, 266, L"Иркутская обл."},
- {24, 267, L"Кемеровская обл."},
- {24, 269, L"Новосибирская обл."},
- {24, 270, L"Омская обл."},
- {24, 272, L"Томская обл."},
- {24, 276, L"Читинская обл."},
- {24, 262, L"Агинский Бурятский АО"},
- {24, 271, L"Таймырский АО"},
- {24, 274, L"Усть-Ордынский Бурятский АО"},
- {24, 277, L"Эвенкийский АО"},
- {24, 278, L"Курганская обл."},
- {24, 279, L"Свердловская обл."},
- {24, 280, L"Тюменская обл."},
- {24, 282, L"Челябинская обл."},
- {24, 281, L"Ханты-Мансийский АО - Югра"},
- {24, 283, L"Ямало-Ненецкий АО"},
- {24, 284, L"Белгородская обл."},
- {24, 285, L"Брянская обл."},
- {24, 286, L"Владимирская обл."},
- {24, 287, L"Воронежская обл."},
- {24, 288, L"Ивановская обл."},
- {24, 289, L"Калужская обл."},
- {24, 290, L"Костромская обл."},
- {24, 291, L"Курская обл."},
- {24, 292, L"Липецкая обл."},
- {24, 293, L"Московская обл."},
- {24, 294, L"Орловская обл."},
- {24, 295, L"Рязанская обл."},
- {24, 296, L"Смоленская обл."},
- {24, 297, L"Тамбовская обл."},
- {24, 298, L"Тверская обл."},
- {24, 299, L"Тульская обл."},
- {24, 300, L"Ярославская обл."},
- {24, 301, L"Адыгея"},
- {24, 304, L"Дагестан"},
- {24, 305, L"Ингушетия"},
- {24, 306, L"Кабардино-Балкария"},
- {24, 307, L"Калмыкия"},
- {24, 308, L"Карачаево-Черкессия"},
- {24, 311, L"Северная Осетия - Алания"},
- {24, 313, L"Чечня"},
- {24, 309, L"Краснодарский край"},
- {24, 312, L"Ставропольский край"},
- {24, 302, L"Астраханская обл."},
- {24, 303, L"Волгоградская обл."},
- {24, 310, L"Ростовская обл."},
- {81, 1055, L"Баку"},
- {81, 1058, L"Гянджа"},
- {81, 1056, L"Нахичевань"},
- {81, 1057, L"Ханкенди"},
- {81, 3153, L"Шеки"},
- {81, 2291, lpwszOther},
- {82, 2932, L"Абовян"},
- {82, 1060, L"Аштарак"},
- {82, 3084, L"Ванадзор"},
- {82, 3011, L"Гюмри"},
- {82, 3306, L"Дилижан"},
- {82, 1059, L"Ереван"},
- {82, 3145, L"Ханкенди"},
- {82, 2292, lpwszOther},
- {97, 1061, L"Кабул"},
- {97, 2293, lpwszOther},
- {96, 1062, L"Дакка"},
- {96, 2294, lpwszOther},
- {99, 1063, L"Манама"},
- {99, 2295, lpwszOther},
- {100, 1064, L"Бандар-Сери-Бегаван"},
- {100, 2296, lpwszOther},
- {101, 1065, L"Тхимпху"},
- {101, 2297, lpwszOther},
- {102, 1066, L"Ханой"},
- {102, 2298, lpwszOther},
- {83, 1067, L"Батуми"},
- {83, 3158, L"Боржоми"},
- {83, 1068, L"Поти"},
- {83, 3129, L"Рустави"},
- {83, 1069, L"Сухуми"},
- {83, 1070, L"Тбилиси"},
- {83, 2299, lpwszOther},
- {86, 3345, L"Ариэль"},
- {86, 1071, L"Афула"},
- {86, 2992, L"Ашдод"},
- {86, 3175, L"Ашкелон"},
- {86, 3363, L"Бат-Ям"},
- {86, 2884, L"Беер-Яков"},
- {86, 3243, L"Бейт-Шемеш"},
- {86, 1074, L"Беэр-Шева"},
- {86, 3348, L"Герцелия"},
- {86, 3241, L"Димона"},
- {86, 1075, L"Иерусалим"},
- {86, 3350, L"Йокнеам-Иллит"},
- {86, 2982, L"Кармиэль"},
- {86, 2971, L"Кфар-Саба"},
- {86, 3136, L"Назарет"},
- {86, 1080, L"Натания"},
- {86, 3303, L"Офаким"},
- {86, 3050, L"Раанана"},
- {86, 3151, L"Рамат Ган"},
- {86, 3141, L"Реховот"},
- {86, 3012, L"Ришон ле Цион"},
- {86, 1081, L"Тверия"},
- {86, 1077, L"Тель-Авив"},
- {86, 1079, L"Хадера"},
- {86, 1078, L"Хайфа"},
- {86, 1076, L"Хеврон"},
- {86, 2929, L"Цфат"},
- {86, 2928, L"Эйлат"},
- {86, 2300, lpwszOther},
- {95, 3315, L"Бангалор"},
- {95, 1082, L"Дели"},
- {95, 1083, L"Джайпур"},
- {95, 3144, L"Калькутта"},
- {95, 3025, L"Мумбаи"},
- {95, 3277, L"Панаджи"},
- {95, 1084, L"Ченнаи"},
- {95, 2301, lpwszOther},
- {103, 1085, L"Джакарта"},
- {103, 2302, lpwszOther},
- {79, 1086, L"Амман"},
- {79, 2303, lpwszOther},
- {85, 1087, L"Багдад"},
- {85, 2304, lpwszOther},
- {87, 1088, L"Тегеран"},
- {87, 2305, lpwszOther},
- {104, 1089, L"Сана"},
- {104, 2306, lpwszOther},
- {84, 1090, L"Актау"},
- {84, 1091, L"Актюбинск"},
- {84, 1092, L"Алма-Ата"},
- {84, 3242, L"Аршалы"},
- {84, 1093, L"Астана"},
- {84, 1094, L"Атырау (Гурьев)"},
- {84, 1095, L"Байконур"},
- {84, 3245, L"Балхаш"},
- {84, 3083, L"Жезказган"},
- {84, 1096, L"Капчагай"},
- {84, 1097, L"Караганда"},
- {84, 1098, L"Кокшетау"},
- {84, 1099, L"Кустанай"},
- {84, 2868, L"Лисаковск"},
- {84, 1100, L"Павлодар"},
- {84, 1101, L"Петропавловск (Сев.-Каз. обл.)"},
- {84, 1102, L"Рудный"},
- {84, 1103, L"Семипалатинск"},
- {84, 1104, L"Степногорск"},
- {84, 3166, L"Талгар"},
- {84, 1105, L"Талды-Курган"},
- {84, 2927, L"Тараз"},
- {84, 1106, L"Темиртау"},
- {84, 1107, L"Уральск"},
- {84, 1108, L"Усть-Каменогорск"},
- {84, 1109, L"Чимкент"},
- {84, 1110, L"Экибастуз"},
- {84, 2307, lpwszOther},
- {105, 1111, L"Пномпень"},
- {105, 2308, lpwszOther},
- {106, 1112, L"Доха"},
- {106, 2309, lpwszOther},
- {107, 1113, L"Ларнака"},
- {107, 1114, L"Лимассол"},
- {107, 1115, L"Никосия"},
- {107, 2954, L"Пафос"},
- {107, 2310, lpwszOther},
- {92, 1116, L"Бишкек"},
- {92, 1117, L"Джалал-Абад"},
- {92, 3027, L"Кара-Балта"},
- {92, 1118, L"Каракол"},
- {92, 1119, L"Ош"},
- {92, 1120, L"Талас"},
- {92, 2933, L"Хайдаркен"},
- {92, 2311, lpwszOther},
- {76, 3214, L"Аомынь (Макао)"},
- {76, 1121, L"Гонконг"},
- {76, 2869, L"Гуанчжоу"},
- {76, 3262, L"Далянь"},
- {76, 1122, L"Пекин"},
- {76, 1123, L"Харбин"},
- {76, 1124, L"Шанхай"},
- {76, 3043, L"Шеньян"},
- {76, 2312, lpwszOther},
- {29, 1125, L"Пхеньян"},
- {29, 2313, lpwszOther},
- {108, 1126, L"Сеул"},
- {108, 3240, L"Тейджон"},
- {108, 2314, lpwszOther},
- {88, 1127, L"Эль-Кувейт"},
- {88, 2315, lpwszOther},
- {109, 1128, L"Вьентьян"},
- {109, 2316, lpwszOther},
- {110, 1129, L"Бейрут"},
- {110, 2317, lpwszOther},
- {111, 1130, L"Джохор-Бару"},
- {111, 1131, L"Куала-Лумпур"},
- {111, 2318, lpwszOther},
- {112, 1132, L"Мале"},
- {112, 2319, lpwszOther},
- {113, 1133, L"Улан-Батор"},
- {113, 1134, L"Эрдэнэт"},
- {113, 2320, lpwszOther},
- {114, 1135, L"Янгон"},
- {114, 2321, lpwszOther},
- {115, 1136, L"Катманду"},
- {115, 2322, lpwszOther},
- {116, 1137, L"Абу-Даби"},
- {116, 1138, L"Дубай"},
- {116, 1139, L"Шарджа"},
- {116, 2323, lpwszOther},
- {117, 1140, L"Маскат"},
- {117, 2324, lpwszOther},
- {122, 1141, L"Исламабад"},
- {122, 2325, lpwszOther},
- {89, 1072, L"Ашдод"},
- {89, 1073, L"Ашкелон"},
- {89, 1142, L"Газа"},
- {89, 2326, lpwszOther},
- {94, 3250, L"Медина"},
- {94, 1143, L"Эр-Рияд"},
- {94, 2327, lpwszOther},
- {78, 1144, L"Дамаск"},
- {78, 2328, lpwszOther},
- {91, 1145, L"Душанбе"},
- {91, 3307, L"Кайраккум"},
- {91, 3308, L"Худжанд"},
- {91, 2329, lpwszOther},
- {119, 1146, L"Бангкок"},
- {119, 1147, L"Пхукет"},
- {119, 2330, lpwszOther},
- {120, 1148, L"Тайбэй"},
- {120, 2331, lpwszOther},
- {132, 1149, L"Дили"},
- {132, 2332, lpwszOther},
- {90, 1150, L"Ашхабад"},
- {90, 3079, L"Безмеин"},
- {90, 2333, lpwszOther},
- {77, 1152, L"Анкара"},
- {77, 1153, L"Анталия"},
- {77, 3080, L"Бурса"},
- {77, 1151, L"Мармарис"},
- {77, 1154, L"Стамбул"},
- {77, 1155, L"Трабзон"},
- {77, 2334, lpwszOther},
- {93, 3362, L"Алмалык"},
- {93, 3137, L"Андижан"},
- {93, 3273, L"Асака"},
- {93, 1156, L"Ахангаран"},
- {93, 1157, L"Бухара"},
- {93, 3167, L"Джизак"},
- {93, 3347, L"Кунград"},
- {93, 1158, L"Навои"},
- {93, 1159, L"Наманган"},
- {93, 1160, L"Самарканд"},
- {93, 1161, L"Ташкент"},
- {93, 1162, L"Ургенч"},
- {93, 1163, L"Фергана"},
- {93, 1164, L"Чирчик"},
- {93, 2335, lpwszOther},
- {121, 1165, L"Манила"},
- {121, 3319, L"Себу"},
- {121, 2336, lpwszOther},
- {98, 1166, L"Коломбо"},
- {98, 2337, lpwszOther},
- {75, 3176, L"Исесаки"},
- {75, 3339, L"Корияма"},
- {75, 1167, L"Саппоро"},
- {75, 1168, L"Токио"},
- {75, 2338, lpwszOther},
- {123, 1914, L"Аделаида"},
- {123, 2957, L"Блэк Рок"},
- {123, 1915, L"Брисбен"},
- {123, 3331, L"Горокан"},
- {123, 1916, L"Канберра"},
- {123, 3001, L"Лидкомб"},
- {123, 1917, L"Мельбурн"},
- {123, 3217, L"Норфолк"},
- {123, 3064, L"Перт"},
- {123, 3020, L"Санта Люсиа"},
- {123, 1918, L"Сидней"},
- {123, 3238, L"Энеабба"},
- {123, 2339, lpwszOther},
- {454, 1192, L"Паго-Паго"},
- {454, 2366, lpwszOther},
- {124, 1919, L"Порт-Вила"},
- {124, 2340, lpwszOther},
- {453, 1193, L"Аганья"},
- {453, 2368, lpwszOther},
- {126, 1921, L"Баирики"},
- {126, 2342, lpwszOther},
- {127, 1922, L"Маджуро"},
- {127, 2343, lpwszOther},
- {128, 1923, L"Паликир"},
- {128, 2344, lpwszOther},
- {129, 1924, L"Ярен"},
- {129, 2345, lpwszOther},
- {130, 1925, L"Веллингтон"},
- {130, 1926, L"Гамильтон"},
- {130, 1928, L"Данидин"},
- {130, 1929, L"Крайстчерч"},
- {130, 3235, L"Кромвель"},
- {130, 1927, L"Окленд"},
- {130, 3323, L"Тауранга"},
- {130, 2346, lpwszOther},
- {131, 1930, L"Корор"},
- {131, 2347, lpwszOther},
- {133, 1931, L"Порт-Морсби"},
- {133, 2348, lpwszOther},
- {125, 1920, L"Апиа"},
- {125, 2341, lpwszOther},
- {134, 1932, L"Хониара"},
- {134, 2349, lpwszOther},
- {135, 1933, L"Нукуалофа"},
- {135, 2350, lpwszOther},
- {136, 1934, L"Фунафути"},
- {136, 2351, lpwszOther},
- {137, 1935, L"Сува"},
- {137, 2352, lpwszOther},
- {138, 3055, L"Барлингтон"},
- {138, 3049, L"Броссард"},
- {138, 3330, L"Бурнаби"},
- {138, 1169, L"Ванкувер"},
- {138, 3106, L"Ватерлоо"},
- {138, 1170, L"Виннипег"},
- {138, 1171, L"Галифакс"},
- {138, 1172, L"Гамильтон"},
- {138, 3365, L"Денвер"},
- {138, 1173, L"Калгари"},
- {138, 3104, L"Камлупс"},
- {138, 3366, L"Каннингтон"},
- {138, 1174, L"Квебек"},
- {138, 2964, L"Кингстон"},
- {138, 3113, L"Коквитлам"},
- {138, 1175, L"Монреаль"},
- {138, 2920, L"Ниагара-Фолс"},
- {138, 2889, L"Норд-Йорк"},
- {138, 1176, L"Оттава"},
- {138, 2903, L"Порт Алберни"},
- {138, 1177, L"Ричмонд"},
- {138, 1178, L"Тимминс"},
- {138, 2946, L"Торнхилл"},
- {138, 1179, L"Торонто"},
- {138, 1180, L"Эдмонтон"},
- {138, 2353, lpwszOther},
- {139, 407, L"Вашингтон"},
- {139, 426, L"Айдахо"},
- {139, 378, L"Айова"},
- {139, 412, L"Алабама"},
- {139, 446, L"Аляска"},
- {139, 434, L"Аризона"},
- {139, 416, L"Арканзас"},
- {139, 428, L"Вайоминг"},
- {139, 440, L"Вашингтон"},
- {139, 352, L"Вермонт"},
- {139, 394, L"Виргиния"},
- {139, 374, L"Висконсин"},
- {139, 448, L"Гавайи"},
- {139, 390, L"Делавер"},
- {139, 402, L"Джорджия"},
- {139, 396, L"Западная Виргиния"},
- {139, 370, L"Иллинойс"},
- {139, 368, L"Индиана"},
- {139, 444, L"Калифорния"},
- {139, 388, L"Канзас"},
- {139, 408, L"Кентукки"},
- {139, 430, L"Колорадо"},
- {139, 358, L"Коннектикут"},
- {139, 418, L"Луизиана"},
- {139, 354, L"Массачусетс"},
- {139, 376, L"Миннесота"},
- {139, 414, L"Миссисипи"},
- {139, 380, L"Миссури"},
- {139, 372, L"Мичиган"},
- {139, 424, L"Монтана"},
- {139, 348, L"Мэн"},
- {139, 392, L"Мэриленд"},
- {139, 386, L"Небраска"},
- {139, 438, L"Невада"},
- {139, 362, L"Нью-Джерси"},
- {139, 360, L"Нью-Йорк"},
- {139, 432, L"Нью-Мексико"},
- {139, 350, L"Нью-Хэмпшир"},
- {139, 366, L"Огайо"},
- {139, 420, L"Оклахома"},
- {139, 442, L"Орегон"},
- {139, 364, L"Пенсильвания"},
- {139, 450, L"Пуэрто-Рико"},
- {139, 356, L"Род-Айленд"},
- {139, 382, L"Северная Дакота"},
- {139, 398, L"Северная Каролина"},
- {139, 410, L"Теннесси"},
- {139, 422, L"Техас"},
- {139, 406, L"Федеральный округ Колумбия"},
- {139, 404, L"Флорида"},
- {139, 384, L"Южная Дакота"},
- {139, 400, L"Южная Каролина"},
- {139, 436, L"Юта"},
- {140, 1238, L"Сент-Джонс"},
- {140, 2442, lpwszOther},
- {141, 1239, L"Буэнос-Айрес"},
- {141, 2441, lpwszOther},
- {142, 1240, L"Нассау"},
- {142, 2440, lpwszOther},
- {143, 1241, L"Бриджтаун"},
- {143, 2439, lpwszOther},
- {146, 1242, L"Бельмопан"},
- {146, 2438, lpwszOther},
- {144, 1243, L"Ла-Пас"},
- {144, 2437, lpwszOther},
- {145, 1244, L"Бразилиа"},
- {145, 3094, L"Пассо Фундо"},
- {145, 1245, L"Рио-де-Жанейро"},
- {145, 1246, L"Сан-Паулу"},
- {145, 2436, lpwszOther},
- {147, 1247, L"Каракас"},
- {147, 2435, lpwszOther},
- {452, 1190, L"Шарлотта-Амалия"},
- {452, 2364, lpwszOther},
- {149, 1248, L"Порт-о-Пренс"},
- {149, 2434, lpwszOther},
- {148, 1249, L"Джоржтаун"},
- {148, 2433, lpwszOther},
- {173, 1250, L"Гватемала"},
- {173, 2432, lpwszOther},
- {150, 1251, L"Тегусигальпа"},
- {150, 2431, lpwszOther},
- {151, 1252, L"Сент-Джорджес"},
- {151, 2430, lpwszOther},
- {152, 1253, L"Уманак"},
- {152, 2429, lpwszOther},
- {153, 1254, L"Розо"},
- {153, 2428, lpwszOther},
- {154, 1255, L"Санто-Доминго"},
- {154, 2427, lpwszOther},
- {155, 1256, L"Богота"},
- {155, 2426, lpwszOther},
- {156, 1257, L"Сан-Хосе"},
- {156, 2425, lpwszOther},
- {157, 1258, L"Гавана"},
- {157, 2424, lpwszOther},
- {158, 1259, L"Акапулько"},
- {158, 1260, L"Мехико"},
- {158, 2423, lpwszOther},
- {159, 1261, L"Манагуа"},
- {159, 2422, lpwszOther},
- {160, 1262, L"Панама"},
- {160, 2421, lpwszOther},
- {161, 1263, L"Асунсьон"},
- {161, 2420, lpwszOther},
- {162, 1264, L"Лима"},
- {162, 2419, lpwszOther},
- {163, 1265, L"Сан-Сальвадор"},
- {163, 2418, lpwszOther},
- {164, 1266, L"Кингстаун"},
- {164, 2417, lpwszOther},
- {165, 1267, L"Бастер"},
- {165, 2416, lpwszOther},
- {166, 1268, L"Кастри"},
- {166, 2415, lpwszOther},
- {167, 1269, L"Парамарибо"},
- {167, 2414, lpwszOther},
- {168, 1270, L"Порт-оф-Спейн"},
- {168, 2413, lpwszOther},
- {169, 1271, L"Монтевидео"},
- {169, 2412, lpwszOther},
- {170, 1272, L"Сантьяго"},
- {170, 2411, lpwszOther},
- {171, 1273, L"Гуаякиль"},
- {171, 1274, L"Кито"},
- {171, 2410, lpwszOther},
- {172, 1275, L"Кингстон"},
- {172, 2409, lpwszOther},
- {174, 1854, L"Алжир"},
- {174, 2495, lpwszOther},
- {175, 1855, L"Луанда"},
- {175, 2494, lpwszOther},
- {176, 1856, L"Котону"},
- {176, 1857, L"Порто-Ново"},
- {176, 2493, lpwszOther},
- {177, 1858, L"Габороне"},
- {177, 2492, lpwszOther},
- {178, 1859, L"Уагадугу"},
- {178, 2491, lpwszOther},
- {179, 1860, L"Бужумбуру"},
- {179, 2490, lpwszOther},
- {180, 1861, L"Либревиль"},
- {180, 2489, lpwszOther},
- {181, 1862, L"Банжул"},
- {181, 2488, lpwszOther},
- {182, 1863, L"Аккра"},
- {182, 2487, lpwszOther},
- {183, 1864, L"Конакри"},
- {183, 2486, lpwszOther},
- {184, 1865, L"Бисау"},
- {184, 2485, lpwszOther},
- {185, 1866, L"Джибути"},
- {185, 2484, lpwszOther},
- {186, 3312, L"Дахаб"},
- {186, 1867, L"Каир"},
- {186, 1868, L"Хургада"},
- {186, 2483, lpwszOther},
- {187, 1869, L"Лусака"},
- {187, 2482, lpwszOther},
- {23, 1870, L"Хараре"},
- {23, 2481, lpwszOther},
- {188, 1871, L"Прая"},
- {188, 2480, lpwszOther},
- {189, 1872, L"Яунде"},
- {189, 2479, lpwszOther},
- {190, 1873, L"Найроби"},
- {190, 2478, lpwszOther},
- {191, 1874, L"Морони"},
- {191, 2477, lpwszOther},
- {193, 1875, L"Киншаса"},
- {193, 2476, lpwszOther},
- {192, 1876, L"Браззавиль"},
- {192, 2475, lpwszOther},
- {194, 1877, L"Ямусукро"},
- {194, 2474, lpwszOther},
- {195, 1878, L"Масеру"},
- {195, 2473, lpwszOther},
- {196, 1879, L"Монровия"},
- {196, 2472, lpwszOther},
- {197, 1880, L"Триполи"},
- {197, 2471, lpwszOther},
- {198, 1881, L"Порт-Луи"},
- {198, 2470, lpwszOther},
- {199, 1882, L"Нуакшот"},
- {199, 2469, lpwszOther},
- {200, 1883, L"Антананариву"},
- {200, 2468, lpwszOther},
- {201, 1884, L"Лилонгве"},
- {201, 2467, lpwszOther},
- {202, 1885, L"Бамако"},
- {202, 2466, lpwszOther},
- {203, 1886, L"Агадир"},
- {203, 1887, L"Рабат"},
- {203, 2465, lpwszOther},
- {204, 1888, L"Мапуту"},
- {204, 2464, lpwszOther},
- {205, 1889, L"Виндхук"},
- {205, 2463, lpwszOther},
- {206, 1890, L"Ниамей"},
- {206, 2462, lpwszOther},
- {207, 1891, L"Абуджа"},
- {207, 2461, lpwszOther},
- {208, 1892, L"Кигали"},
- {208, 2460, lpwszOther},
- {209, 1893, L"Сан-Томе"},
- {209, 2459, lpwszOther},
- {210, 1894, L"Мбабане"},
- {210, 2458, lpwszOther},
- {211, 1895, L"Виктория"},
- {211, 2457, lpwszOther},
- {212, 1896, L"Дакар"},
- {212, 2456, lpwszOther},
- {213, 1897, L"Могадишо"},
- {213, 2455, lpwszOther},
- {214, 1898, L"Хартум"},
- {214, 2454, lpwszOther},
- {215, 1899, L"Фритаун"},
- {215, 2453, lpwszOther},
- {216, 1900, L"Дар-эс-Салам"},
- {216, 1901, L"Додома"},
- {216, 2452, lpwszOther},
- {217, 1902, L"Ломе"},
- {217, 2451, lpwszOther},
- {218, 1903, L"Тунис"},
- {218, 2450, lpwszOther},
- {219, 1904, L"Кампала"},
- {219, 2449, lpwszOther},
- {220, 1905, L"Банги"},
- {220, 2448, lpwszOther},
- {222, 1906, L"Нджамена"},
- {222, 2447, lpwszOther},
- {223, 1907, L"Малабо"},
- {223, 2446, lpwszOther},
- {221, 1908, L"Асмэра"},
- {221, 2445, lpwszOther},
- {224, 1909, L"Аддис-Абеба"},
- {224, 2444, lpwszOther},
- {225, 1910, L"Дурбан"},
- {225, 1913, L"Йоханнесбург"},
- {225, 1912, L"Кейптаун"},
- {225, 3033, L"Пайнтаун"},
- {225, 1911, L"Претория"},
- {225, 2443, lpwszOther},
- {39, 314, L"Киев"},
- {39, 315, L"Винницкая обл."},
- {39, 316, L"Волынская обл."},
- {39, 317, L"Днепропетровская обл."},
- {39, 318, L"Донецкая обл."},
- {39, 319, L"Житомирская обл."},
- {39, 320, L"Закарпатская обл."},
- {39, 321, L"Запорожская обл."},
- {39, 322, L"Ивано-Франковская обл."},
- {39, 323, L"Киевская обл."},
- {39, 324, L"Кировоградская обл."},
- {39, 325, L"Крым"},
- {39, 326, L"Луганская обл."},
- {39, 327, L"Львовская обл."},
- {39, 328, L"Николаевская обл."},
- {39, 329, L"Одесская обл."},
- {39, 330, L"Полтавская обл."},
- {39, 331, L"Ровенская обл."},
- {39, 332, L"Сумская обл."},
- {39, 333, L"Тернопольская обл."},
- {39, 334, L"Харьковская обл."},
- {39, 335, L"Херсонская обл."},
- {39, 336, L"Хмельницкая обл."},
- {39, 337, L"Черкасская обл."},
- {39, 338, L"Черниговская обл."},
- {39, 339, L"Черновицкая обл."},
- {40, 602, L"Бад Халл"},
- {40, 604, L"Брегенц"},
- {40, 603, L"Вена"},
- {40, 608, L"Грац"},
- {40, 606, L"Зальцбург"},
- {40, 3099, L"Зель-ам-Зее"},
- {40, 605, L"Инсбрук"},
- {40, 3174, L"Кирхберг"},
- {40, 609, L"Клагенфурт"},
- {40, 607, L"Линц"},
- {40, 610, L"Обдах"},
- {40, 611, L"Щтубайтал"},
- {40, 2541, lpwszOther},
- {32, 612, L"Тирана"},
- {32, 2540, lpwszOther},
- {33, 613, L"Андорра-ла-Велья"},
- {33, 2539, lpwszOther},
- {340, 341, L"Минск"},
- {340, 342, L"Брестская обл."},
- {340, 343, L"Витебская обл."},
- {340, 344, L"Гомельская обл."},
- {340, 345, L"Гродненская обл."},
- {340, 346, L"Минская обл."},
- {340, 347, L"Могилевская обл."},
- {38, 760, L"Антверпен"},
- {38, 767, L"Арлон"},
- {38, 762, L"Брюгге"},
- {38, 761, L"Брюссель"},
- {38, 763, L"Гент"},
- {38, 769, L"Лувен"},
- {38, 765, L"Льеж"},
- {38, 764, L"Монс"},
- {38, 3117, L"Мортсель"},
- {38, 766, L"Намюр"},
- {38, 768, L"Хасселт"},
- {38, 2532, lpwszOther},
- {41, 3098, L"Банско"},
- {41, 792, L"Благоевград"},
- {41, 770, L"Бургас"},
- {41, 771, L"Бяла"},
- {41, 773, L"Варна"},
- {41, 776, L"Велико-Тырново"},
- {41, 788, L"Видин"},
- {41, 789, L"Враца"},
- {41, 796, L"Габрово"},
- {41, 777, L"Димитровград"},
- {41, 781, L"Каварна"},
- {41, 786, L"Кырджали"},
- {41, 791, L"Кюстендил"},
- {41, 793, L"Лазарджик"},
- {41, 795, L"Ловеч"},
- {41, 787, L"Михайловград"},
- {41, 790, L"Перник"},
- {41, 3133, L"Пирдоп"},
- {41, 794, L"Плевен"},
- {41, 782, L"Пловдив"},
- {41, 780, L"Разград"},
- {41, 779, L"Русе"},
- {41, 774, L"Силистра"},
- {41, 784, L"Сливен"},
- {41, 772, L"София"},
- {41, 775, L"Толбухин"},
- {41, 3116, L"Тырново"},
- {41, 785, L"Хасково"},
- {41, 778, L"Шумен"},
- {41, 783, L"Ямбол"},
- {41, 2531, lpwszOther},
- {42, 797, L"Баня-Лука"},
- {42, 799, L"Зеница"},
- {42, 798, L"Сараево"},
- {42, 800, L"Тузла"},
- {42, 2530, lpwszOther},
- {45, 802, L"Абердин"},
- {45, 3075, L"Айслворт"},
- {45, 801, L"Алнвик"},
- {45, 804, L"Бидефорд"},
- {45, 803, L"Бирмингем"},
- {45, 805, L"Блоксвич"},
- {45, 3168, L"Бостон"},
- {45, 806, L"Брайтон"},
- {45, 807, L"Бредфорд"},
- {45, 808, L"Бристоль"},
- {45, 809, L"Вилленхолл"},
- {45, 3131, L"Воррингтон"},
- {45, 810, L"Вудбридж"},
- {45, 3342, L"Гилфорд"},
- {45, 811, L"Глазго"},
- {45, 812, L"Дадли"},
- {45, 813, L"Дарем"},
- {45, 814, L"Дуглас"},
- {45, 3089, L"Кардиф"},
- {45, 815, L"Кембридж"},
- {45, 816, L"Кентербери"},
- {45, 817, L"Ливерпуль"},
- {45, 818, L"Лидс"},
- {45, 819, L"Лондон"},
- {45, 820, L"Манчестер"},
- {45, 2976, L"Митчем"},
- {45, 2988, L"Мэйденхед"},
- {45, 821, L"Ноттингем"},
- {45, 3088, L"Ньюпорт"},
- {45, 822, L"Оксфорд"},
- {45, 823, L"Плимут"},
- {45, 824, L"Портсмут"},
- {45, 825, L"Престон"},
- {45, 3343, L"Райд"},
- {45, 2867, L"Ридинг"},
- {45, 2986, L"Сент-Албанс"},
- {45, 826, L"Стаффорд"},
- {45, 3063, L"Стокпорт"},
- {45, 827, L"Уэймут"},
- {45, 3140, L"Челтенхэм"},
- {45, 828, L"Честер"},
- {45, 829, L"Шеффилд"},
- {45, 830, L"Эдинбург"},
- {45, 2529, lpwszOther},
- {44, 831, L"Будапешт"},
- {44, 832, L"Геделле"},
- {44, 836, L"Дебрецен"},
- {44, 835, L"Мишкольц"},
- {44, 834, L"Сегед"},
- {44, 833, L"Шиофок"},
- {44, 2528, lpwszOther},
- {46, 3007, L"Аахен"},
- {46, 837, L"Аугсбург"},
- {46, 838, L"Баден-Баден"},
- {46, 3371, L"Бамберг"},
- {46, 839, L"Бергиш-Гладбах"},
- {46, 840, L"Берлин"},
- {46, 841, L"Билефельд"},
- {46, 3163, L"Бовенден"},
- {46, 842, L"Бонн"},
- {46, 843, L"Браденбург"},
- {46, 3015, L"Брауншвейг"},
- {46, 844, L"Бремен"},
- {46, 2921, L"Варштайн"},
- {46, 845, L"Веймар"},
- {46, 846, L"Вупперталь"},
- {46, 847, L"Гамбург"},
- {46, 848, L"Ганновер"},
- {46, 849, L"Гарделеген"},
- {46, 3010, L"Гейдельберг"},
- {46, 850, L"Гота"},
- {46, 851, L"Дармштадт"},
- {46, 3072, L"Дессау"},
- {46, 852, L"Детмольд"},
- {46, 853, L"Дортмунд"},
- {46, 854, L"Дрезден"},
- {46, 855, L"Дюссельдорф"},
- {46, 3082, L"Иффецхайм"},
- {46, 3309, L"Кассел"},
- {46, 856, L"Кельн"},
- {46, 857, L"Киль"},
- {46, 3138, L"Кобленц"},
- {46, 858, L"Крефельд"},
- {46, 859, L"Лейпциг"},
- {46, 2872, L"Лимбург"},
- {46, 2965, L"Линген"},
- {46, 3135, L"Любек"},
- {46, 3156, L"Мангейм"},
- {46, 3192, L"Меерсбург"},
- {46, 860, L"Мюнстер"},
- {46, 861, L"Мюнхен"},
- {46, 2864, L"Нойштадт"},
- {46, 862, L"Нюрнберг"},
- {46, 3009, L"Оффенбург"},
- {46, 2993, L"Падерборн"},
- {46, 863, L"Равенсбург"},
- {46, 864, L"Регенсбург"},
- {46, 865, L"Рейнен"},
- {46, 866, L"Росток"},
- {46, 3191, L"Саарбрюкен"},
- {46, 2974, L"Санкт-Августин"},
- {46, 3127, L"Тюринген"},
- {46, 867, L"Фрайберг"},
- {46, 868, L"Фрайбург"},
- {46, 869, L"Франкфурт-на-Майне"},
- {46, 3373, L"Хемнитц"},
- {46, 3313, L"Хильден"},
- {46, 870, L"Штутгарт"},
- {46, 3045, L"Эрланген"},
- {46, 2906, L"Эшборн"},
- {46, 2527, lpwszOther},
- {48, 871, L"Афины"},
- {48, 873, L"Ираклион"},
- {48, 3147, L"Корфу"},
- {48, 872, L"Салоники"},
- {48, 3178, L"Халкидики"},
- {48, 2526, lpwszOther},
- {49, 3006, L"Архус"},
- {49, 874, L"Копенгаген"},
- {49, 875, L"Оденсе"},
- {49, 3285, L"Ольборг"},
- {49, 876, L"Сванеке"},
- {49, 3126, L"Скиве"},
- {49, 2525, lpwszOther},
- {50, 3377, L"Виклоу"},
- {50, 3067, L"Голвей"},
- {50, 877, L"Дублин"},
- {50, 3065, L"Килларней"},
- {50, 3066, L"Корк"},
- {50, 878, L"Лимерик"},
- {50, 3069, L"Нейс"},
- {50, 3068, L"Типперэри"},
- {50, 2524, lpwszOther},
- {51, 879, L"Рейкьявик"},
- {51, 2523, lpwszOther},
- {34, 880, L"Аликанте"},
- {34, 3125, L"Альмерия"},
- {34, 881, L"Барселона"},
- {34, 890, L"Бильбао"},
- {34, 3076, L"Бланес"},
- {34, 882, L"Валенсия"},
- {34, 3070, L"Ибица"},
- {34, 888, L"Кадис"},
- {34, 886, L"Картахена"},
- {34, 891, L"Ла-Корунья"},
- {34, 3310, L"Лорет де Мар"},
- {34, 883, L"Мадрид"},
- {34, 884, L"Малага"},
- {34, 885, L"Марбелья"},
- {34, 892, L"Овьедо"},
- {34, 3179, L"Пальма де Майорка"},
- {34, 3177, L"Сан-Агустин"},
- {34, 3289, L"Санта-Крус-де-Тенерифе"},
- {34, 889, L"Сарагоса"},
- {34, 887, L"Севилья"},
- {34, 893, L"Хихон"},
- {34, 2522, lpwszOther},
- {52, 3318, L"Аоста"},
- {52, 3278, L"Беллариа"},
- {52, 906, L"Болонья"},
- {52, 894, L"Брешиа"},
- {52, 895, L"Венеция"},
- {52, 905, L"Верона"},
- {52, 896, L"Генуя"},
- {52, 897, L"Лекко"},
- {52, 3369, L"Ливорно"},
- {52, 3327, L"Марсала"},
- {52, 898, L"Милан"},
- {52, 899, L"Модена"},
- {52, 907, L"Неаполь"},
- {52, 908, L"Перуджа"},
- {52, 900, L"Пиза"},
- {52, 901, L"Рим"},
- {52, 3368, L"Сан-Ремо"},
- {52, 3384, L"Сиракуза"},
- {52, 3252, L"Терамо"},
- {52, 902, L"Триест"},
- {52, 903, L"Турин"},
- {52, 3130, L"Фано"},
- {52, 904, L"Флоренция"},
- {52, 2521, lpwszOther},
- {53, 2939, L"Айзкраукле"},
- {53, 3054, L"Валка"},
- {53, 909, L"Даугавпилс"},
- {53, 2934, L"Екабпилс"},
- {53, 913, L"Елгава"},
- {53, 2935, L"Кокнесе"},
- {53, 912, L"Лиепая"},
- {53, 2905, L"Резекне"},
- {53, 911, L"Рига"},
- {53, 2936, L"Саласпилс"},
- {53, 2937, L"Смилтене"},
- {53, 910, L"Юрмала"},
- {53, 2520, lpwszOther},
- {54, 914, L"Вильнюс"},
- {54, 915, L"Висагинас"},
- {54, 916, L"Каунас"},
- {54, 918, L"Клайпеда"},
- {54, 919, L"Паланга"},
- {54, 3173, L"Пеневежис"},
- {54, 917, L"Шауляй"},
- {54, 2519, lpwszOther},
- {55, 920, L"Вадуц"},
- {55, 2518, lpwszOther},
- {56, 3376, L"Бетцдорф"},
- {56, 921, L"Люксембург"},
- {56, 2517, lpwszOther},
- {57, 3142, L"Битола"},
- {57, 922, L"Скопье"},
- {57, 2516, lpwszOther},
- {58, 923, L"Валлетта"},
- {58, 3154, L"Мзида"},
- {58, 924, L"Слима"},
- {58, 2515, lpwszOther},
- {59, 925, L"Бельцы"},
- {59, 926, L"Бендеры"},
- {59, 3234, L"Дубоссары"},
- {59, 3275, L"Кахул"},
- {59, 927, L"Кишинев"},
- {59, 3321, L"Резина"},
- {59, 928, L"Рыбница"},
- {59, 929, L"Тирасполь"},
- {59, 3281, L"Чадыр-Лунга"},
- {59, 2514, lpwszOther},
- {36, 930, L"Монте-Карло"},
- {36, 2513, lpwszOther},
- {60, 931, L"Амстердам"},
- {60, 933, L"Бреда"},
- {60, 932, L"Гаага"},
- {60, 934, L"Гауда"},
- {60, 935, L"Делфт"},
- {60, 2977, L"Донген"},
- {60, 3030, L"Зволле"},
- {60, 3091, L"Ниймеген"},
- {60, 936, L"Роттердам"},
- {60, 937, L"Утрехт"},
- {60, 3044, L"Эйндховен"},
- {60, 3380, L"Эншеде"},
- {60, 2512, lpwszOther},
- {61, 3190, L"Кристиансанд"},
- {61, 2857, L"Лиллехаммер"},
- {61, 938, L"Осло"},
- {61, 3355, L"Ставангер"},
- {61, 939, L"Тронхейм"},
- {61, 2511, lpwszOther},
- {62, 940, L"Белосток"},
- {62, 941, L"Варшава"},
- {62, 3164, L"Вроцлав"},
- {62, 942, L"Гданьск"},
- {62, 943, L"Гливице"},
- {62, 3237, L"Закопане"},
- {62, 3165, L"Зелена Гура"},
- {62, 944, L"Катовице"},
- {62, 945, L"Краков"},
- {62, 3008, L"Лодзь"},
- {62, 3150, L"Ольштын"},
- {62, 946, L"Познань"},
- {62, 947, L"Радом"},
- {62, 948, L"Сопот"},
- {62, 2958, L"Тыхы"},
- {62, 2510, lpwszOther},
- {35, 949, L"Лиссабон"},
- {35, 950, L"Порто"},
- {35, 2509, lpwszOther},
- {63, 952, L"Брашов"},
- {63, 951, L"Бухарест"},
- {63, 954, L"Констанца"},
- {63, 955, L"Плоешти"},
- {63, 953, L"Яссы"},
- {63, 2508, lpwszOther},
- {64, 956, L"Сан-Марино"},
- {64, 2507, lpwszOther},
- {74, 957, L"Белград"},
- {74, 960, L"Ниш"},
- {74, 958, L"Нови-Сад"},
- {74, 959, L"Сараево"},
- {74, 2506, lpwszOther},
- {65, 961, L"Братислава"},
- {65, 962, L"Кошице"},
- {65, 3101, L"Липтов"},
- {65, 963, L"Попрад"},
- {65, 964, L"Прешов"},
- {65, 965, L"Ружемберок"},
- {65, 966, L"Тврдошин"},
- {65, 2505, lpwszOther},
- {66, 968, L"Копар"},
- {66, 967, L"Любляна"},
- {66, 969, L"Марибор"},
- {66, 2504, lpwszOther},
- {67, 970, L"Торсхавн"},
- {67, 2503, lpwszOther},
- {68, 2888, L"Вантаа"},
- {68, 971, L"Васа"},
- {68, 979, L"Котка"},
- {68, 972, L"Коувола"},
- {68, 980, L"Лахти"},
- {68, 973, L"Оулу"},
- {68, 3375, L"Риихимяки"},
- {68, 3159, L"Руовеси"},
- {68, 974, L"Тампере"},
- {68, 975, L"Турку"},
- {68, 976, L"Хельсинки"},
- {68, 977, L"Эспо"},
- {68, 978, L"Ювяскюля"},
- {68, 2502, lpwszOther},
- {37, 996, L"Авиньон"},
- {37, 983, L"Бержерак"},
- {37, 997, L"Блуа"},
- {37, 984, L"Бордо"},
- {37, 998, L"Дижон"},
- {37, 987, L"Канн"},
- {37, 988, L"Кастр"},
- {37, 993, L"Клермон-Ферран"},
- {37, 3037, L"Лилль"},
- {37, 989, L"Лион"},
- {37, 985, L"Марсель"},
- {37, 991, L"Мец"},
- {37, 3161, L"Мобеж"},
- {37, 990, L"Нанси"},
- {37, 994, L"Нант"},
- {37, 995, L"Ницца"},
- {37, 999, L"Орлеан"},
- {37, 981, L"Париж"},
- {37, 3374, L"Перпиньян"},
- {37, 992, L"Руан"},
- {37, 982, L"Страсбург"},
- {37, 986, L"Тулуза"},
- {37, 3314, L"Шамбери"},
- {37, 2501, lpwszOther},
- {69, 1003, L"Дубровник"},
- {69, 1000, L"Загреб"},
- {69, 1001, L"Задар"},
- {69, 1004, L"Риека"},
- {69, 1002, L"Сплит"},
- {69, 2500, lpwszOther},
- {70, 1005, L"Брно"},
- {70, 3291, L"Гавличкув-Брод"},
- {70, 1007, L"Градец-Кралове"},
- {70, 1008, L"Карлови-Вари"},
- {70, 3019, L"Кладрубы"},
- {70, 1010, L"Лоуни"},
- {70, 1009, L"Острава"},
- {70, 1015, L"Пльзень"},
- {70, 3105, L"Правчицка Брана"},
- {70, 1006, L"Прага"},
- {70, 3246, L"Тачов"},
- {70, 1011, L"Тршебич"},
- {70, 1012, L"Усти-над-Лабем"},
- {70, 1014, L"Ческе-Будеевице"},
- {70, 1013, L"Яблонец-над-Нисоу"},
- {70, 2499, lpwszOther},
- {71, 1016, L"Арау"},
- {71, 1019, L"Баден"},
- {71, 1017, L"Базель"},
- {71, 1018, L"Берн"},
- {71, 1020, L"Биль"},
- {71, 1021, L"Винтертур"},
- {71, 1022, L"Давос"},
- {71, 3189, L"Делемонт"},
- {71, 1023, L"Женева"},
- {71, 1024, L"Золотурн"},
- {71, 1025, L"Лозанна"},
- {71, 1026, L"Локарно"},
- {71, 1027, L"Лугано"},
- {71, 1028, L"Люцерн"},
- {71, 1029, L"Монтре"},
- {71, 1030, L"Цюрих"},
- {71, 2498, lpwszOther},
- {72, 2883, L"Арбога"},
- {72, 1031, L"Гетеборг"},
- {72, 1032, L"Кальмар"},
- {72, 1037, L"Лахольм"},
- {72, 1036, L"Лулео"},
- {72, 1042, L"Лунд"},
- {72, 1033, L"Мальме"},
- {72, 1034, L"Стокгольм"},
- {72, 1041, L"Умео"},
- {72, 1039, L"Фалун"},
- {72, 1043, L"Хельсинборг"},
- {72, 1040, L"Хернесанд"},
- {72, 1038, L"Эстерсунд"},
- {72, 2497, lpwszOther},
- {73, 3013, L"Валга"},
- {73, 1044, L"Кейла"},
- {73, 1045, L"Кохтла-Ярве"},
- {73, 1046, L"Маарду"},
- {73, 1047, L"Мыйзакюла"},
- {73, 1048, L"Нарва"},
- {73, 1049, L"Пярну"},
- {73, 1050, L"Раквере"},
- {73, 1051, L"Силламяэ"},
- {73, 1052, L"Таллин"},
- {73, 1053, L"Тарту"},
- {73, 1054, L"Хаапсалу"},
- {0, NULL}
-};//*/
-
-
-
-
-
-
-static const MRA_PLACE mrapPlaces[] =
-{
- {24, 0, 0, L"Россия"},
- {81, 0, 0, L"Азербайджан"},
- {82, 0, 0, L"Армения"},
- {97, 0, 0, L"Афганистан"},
- {96, 0, 0, L"Бангладеш"},
- {99, 0, 0, L"Бахрейн"},
- {100, 0, 0, L"Бруней-Даруссалам"},
- {101, 0, 0, L"Бутан"},
- {102, 0, 0, L"Вьетнам"},
- {83, 0, 0, L"Грузия"},
- {86, 0, 0, L"Израиль"},
- {95, 0, 0, L"Индия"},
- {103, 0, 0, L"Индонезия"},
- {79, 0, 0, L"Иордания"},
- {85, 0, 0, L"Ирак"},
- {87, 0, 0, L"Иран"},
- {104, 0, 0, L"Йемен"},
- {84, 0, 0, L"Казахстан"},
- {105, 0, 0, L"Камбоджа"},
- {106, 0, 0, L"Катар"},
- {107, 0, 0, L"Кипр"},
- {92, 0, 0, L"Киргизия (Кыргызстан)"},
- {76, 0, 0, L"Китай"},
- {3215, 0, 0, L"Кокосовые острова (Австр.)"},
- {29, 0, 0, L"Корея (КНДР)"},
- {108, 0, 0, L"Корея"},
- {88, 0, 0, L"Кувейт"},
- {109, 0, 0, L"Лаос"},
- {110, 0, 0, L"Ливан"},
- {111, 0, 0, L"Малайзия"},
- {112, 0, 0, L"Мальдивы"},
- {113, 0, 0, L"Монголия"},
- {114, 0, 0, L"Мьянма"},
- {115, 0, 0, L"Непал"},
- {116, 0, 0, L"Объединенные Арабские Эмираты"},
- {117, 0, 0, L"Оман"},
- {3216, 0, 0, L"Остров Рождества (Австр.)"},
- {122, 0, 0, L"Пакистан"},
- {89, 0, 0, L"Палестина"},
- {94, 0, 0, L"Саудовская Аравия"},
- {118, 0, 0, L"Сингапур"},
- {78, 0, 0, L"Сирия"},
- {91, 0, 0, L"Таджикистан"},
- {119, 0, 0, L"Таиланд"},
- {120, 0, 0, L"Тайвань"},
- {132, 0, 0, L"Тимор"},
- {90, 0, 0, L"Туркмения"},
- {77, 0, 0, L"Турция"},
- {93, 0, 0, L"Узбекистан"},
- {121, 0, 0, L"Филиппины"},
- {98, 0, 0, L"Шри Ланка"},
- {75, 0, 0, L"Япония"},
- {123, 0, 0, L"Австралия"},
- {454, 0, 0, L"Американское Самоа"},
- {124, 0, 0, L"Вануату"},
- {453, 0, 0, L"Гуам (США)"},
- {126, 0, 0, L"Кирибати"},
- {127, 0, 0, L"Маршалловы Острова"},
- {128, 0, 0, L"Микронезия (Федеративные Штаты Микронезии)"},
- {129, 0, 0, L"Науру"},
- {3220, 0, 0, L"Ниуэ (Н.Зел.)"},
- {130, 0, 0, L"Новая Зеландия"},
- {3218, 0, 0, L"Новая Каледония (Фр.)"},
- {3221, 0, 0, L"Острова Кука (Н.Зел.)"},
- {3230, 0, 0, L"Острова Херд и Макдональд (Австр.)"},
- {131, 0, 0, L"Палау"},
- {133, 0, 0, L"Папуа - Новая Гвинея"},
- {3222, 0, 0, L"Питкерн (Брит.)"},
- {125, 0, 0, L"Самоа"},
- {3219, 0, 0, L"Сев. Марианские острова (США)"},
- {134, 0, 0, L"Соломоновы Острова"},
- {3223, 0, 0, L"Токелау (Н.Зел.)"},
- {135, 0, 0, L"Тонга"},
- {136, 0, 0, L"Тувалу"},
- {3224, 0, 0, L"Уоллис и Футуна острова (Фр.)"},
- {137, 0, 0, L"Фиджи"},
- {3226, 0, 0, L"Французская Полинезия"},
- {3225, 0, 0, L"Французские Южные территории"},
- {138, 0, 0, L"Канада"},
- {139, 0, 0, L"США"},
- {3200, 0, 0, L"Ангилья (Брит.)"},
- {140, 0, 0, L"Антигуа и Барбуда"},
- {141, 0, 0, L"Аргентина"},
- {3202, 0, 0, L"Аруба (Нид.)"},
- {142, 0, 0, L"Багамы"},
- {143, 0, 0, L"Барбадос"},
- {146, 0, 0, L"Белиз"},
- {3203, 0, 0, L"Бермуды (Брит.)"},
- {144, 0, 0, L"Боливия"},
- {145, 0, 0, L"Бразилия"},
- {147, 0, 0, L"Венесуэла"},
- {3204, 0, 0, L"Виргинские острова (Брит.)"},
- {452, 0, 0, L"Виргинские острова (США)"},
- {149, 0, 0, L"Гаити"},
- {148, 0, 0, L"Гайана"},
- {3205, 0, 0, L"Гваделупа (Фр.)"},
- {173, 0, 0, L"Гватемала"},
- {150, 0, 0, L"Гондурас"},
- {151, 0, 0, L"Гренада"},
- {152, 0, 0, L"Гренландия (Дат.)"},
- {153, 0, 0, L"Доминика"},
- {154, 0, 0, L"Доминиканская Республика"},
- {155, 0, 0, L"Колумбия"},
- {156, 0, 0, L"Коста-Рика"},
- {157, 0, 0, L"Куба"},
- {3208, 0, 0, L"Мартиника (Фр.)"},
- {158, 0, 0, L"Мексика"},
- {3209, 0, 0, L"Монтсеррат (Брит)"},
- {3201, 0, 0, L"Нидерландские Антилы"},
- {159, 0, 0, L"Никарагуа"},
- {3207, 0, 0, L"Остров Кайман (Брит.)"},
- {3211, 0, 0, L"Острова Теркс и Кайкос (Брит.)"},
- {160, 0, 0, L"Панама"},
- {161, 0, 0, L"Парагвай"},
- {162, 0, 0, L"Перу"},
- {163, 0, 0, L"Сальвадор"},
- {164, 0, 0, L"Сент-Винсент и Гренадины"},
- {165, 0, 0, L"Сент-Китс и Невис"},
- {166, 0, 0, L"Сент-Люсия"},
- {3210, 0, 0, L"Сент-Пьер и Микелон (Фр.)"},
- {167, 0, 0, L"Суринам"},
- {168, 0, 0, L"Тринидат и Тобаго"},
- {169, 0, 0, L"Уругвай"},
- {3212, 0, 0, L"Фолклендские острова (Брит.)"},
- {3206, 0, 0, L"Французская Гвиана"},
- {170, 0, 0, L"Чили"},
- {171, 0, 0, L"Эквадор"},
- {3213, 0, 0, L"Юж. Джорджия и Юж. Сандвичевы о-ва (Брит.)"},
- {172, 0, 0, L"Ямайка"},
- {174, 0, 0, L"Алжир"},
- {175, 0, 0, L"Ангола"},
- {176, 0, 0, L"Бенин"},
- {177, 0, 0, L"Ботсвана"},
- {3228, 0, 0, L"Британская территория в Индийском океане"},
- {178, 0, 0, L"Буркина-Фасо"},
- {179, 0, 0, L"Бурунди"},
- {180, 0, 0, L"Габон"},
- {181, 0, 0, L"Гамбия"},
- {182, 0, 0, L"Гана"},
- {183, 0, 0, L"Гвинея"},
- {184, 0, 0, L"Гвинея-Бисау"},
- {185, 0, 0, L"Джибути"},
- {186, 0, 0, L"Египет"},
- {187, 0, 0, L"Замбия"},
- {3198, 0, 0, L"Зап. Сахара"},
- {23, 0, 0, L"Зимбабве"},
- {188, 0, 0, L"Кабо-Верде"},
- {189, 0, 0, L"Камерун"},
- {190, 0, 0, L"Кения"},
- {191, 0, 0, L"Коморы"},
- {193, 0, 0, L"Конго (Заир)"},
- {192, 0, 0, L"Конго"},
- {194, 0, 0, L"Кот-д`Ивуар"},
- {195, 0, 0, L"Лесото"},
- {196, 0, 0, L"Либерия"},
- {197, 0, 0, L"Ливия"},
- {198, 0, 0, L"Маврикий"},
- {199, 0, 0, L"Мавритания"},
- {200, 0, 0, L"Мадагаскар"},
- {3229, 0, 0, L"Майотт (Фр.)"},
- {201, 0, 0, L"Малави"},
- {202, 0, 0, L"Мали"},
- {203, 0, 0, L"Марокко"},
- {204, 0, 0, L"Мозамбик"},
- {205, 0, 0, L"Намибия"},
- {206, 0, 0, L"Нигер"},
- {207, 0, 0, L"Нигерия"},
- {3227, 0, 0, L"Остров Буве (Норв.)"},
- {3197, 0, 0, L"Реюньон (Фр.)"},
- {208, 0, 0, L"Руанда"},
- {209, 0, 0, L"Сан-Томе и Принсипи"},
- {210, 0, 0, L"Свазиленд"},
- {3199, 0, 0, L"Святая Елена (Брит.)"},
- {211, 0, 0, L"Сейшелы"},
- {212, 0, 0, L"Сенегал"},
- {213, 0, 0, L"Сомали"},
- {214, 0, 0, L"Судан"},
- {215, 0, 0, L"Сьерра-Леоне"},
- {216, 0, 0, L"Танзания"},
- {217, 0, 0, L"Того"},
- {218, 0, 0, L"Тунис"},
- {219, 0, 0, L"Уганда"},
- {220, 0, 0, L"Центральноафриканская Республика"},
- {222, 0, 0, L"Чад"},
- {223, 0, 0, L"Экваториальная Гвинея"},
- {221, 0, 0, L"Эритрея"},
- {224, 0, 0, L"Эфиопия"},
- {225, 0, 0, L"Южно-Африканская Республика (ЮАР)"},
- {39, 0, 0, L"Украина"},
- {40, 0, 0, L"Австрия"},
- {32, 0, 0, L"Албания"},
- {33, 0, 0, L"Андорра"},
- {340, 0, 0, L"Белоруссия"},
- {38, 0, 0, L"Бельгия"},
- {41, 0, 0, L"Болгария"},
- {42, 0, 0, L"Босния и Герцеговина"},
- {43, 0, 0, L"Ватикан"},
- {45, 0, 0, L"Великобритания"},
- {44, 0, 0, L"Венгрия"},
- {46, 0, 0, L"Германия"},
- {3193, 0, 0, L"Гернси (Брит.)"},
- {47, 0, 0, L"Гибралтар (Брит.)"},
- {48, 0, 0, L"Греция"},
- {49, 0, 0, L"Дания"},
- {3194, 0, 0, L"Джерси (Брит.)"},
- {50, 0, 0, L"Ирландия"},
- {51, 0, 0, L"Исландия"},
- {34, 0, 0, L"Испания"},
- {52, 0, 0, L"Италия"},
- {53, 0, 0, L"Латвия"},
- {54, 0, 0, L"Литва"},
- {55, 0, 0, L"Лихтенштейн"},
- {56, 0, 0, L"Люксембург"},
- {57, 0, 0, L"Македония"},
- {58, 0, 0, L"Мальта"},
- {59, 0, 0, L"Молдавия"},
- {36, 0, 0, L"Монако"},
- {60, 0, 0, L"Нидерланды"},
- {61, 0, 0, L"Норвегия"},
- {3195, 0, 0, L"Остров Мэн (Брит.)"},
- {62, 0, 0, L"Польша"},
- {35, 0, 0, L"Португалия"},
- {63, 0, 0, L"Румыния"},
- {64, 0, 0, L"Сан-Марино"},
- {74, 0, 0, L"Сербия и Черногория"},
- {65, 0, 0, L"Словакия"},
- {66, 0, 0, L"Словения"},
- {67, 0, 0, L"Фарерские о-ва (Дания)"},
- {68, 0, 0, L"Финляндия"},
- {37, 0, 0, L"Франция"},
- {69, 0, 0, L"Хорватия"},
- {70, 0, 0, L"Чехия"},
- {71, 0, 0, L"Швейцария"},
- {72, 0, 0, L"Швеция"},
- {3196, 0, 0, L"Шпицберген (Норв.)"},
- {73, 0, 0, L"Эстония"},
- {24, 25, 0, L"Москва"},
- {24, 226, 0, L"Санкт-Петербург"},
- {24, 233, 0, L"Саха (Якутия)"},
- {24, 232, 0, L"Приморский край"},
- {24, 235, 0, L"Хабаровский край"},
- {24, 227, 0, L"Амурская обл."},
- {24, 229, 0, L"Камчатская обл."},
- {24, 231, 0, L"Магаданская обл."},
- {24, 234, 0, L"Сахалинская обл."},
- {24, 228, 0, L"Еврейская АО"},
- {24, 230, 0, L"Корякский АО"},
- {24, 236, 0, L"Чукотский АО"},
- {24, 237, 0, L"Башкортостан"},
- {24, 240, 0, L"Марий-Эл"},
- {24, 241, 0, L"Мордовия"},
- {24, 248, 0, L"Татарстан"},
- {24, 249, 0, L"Удмуртия"},
- {24, 251, 0, L"Чувашия"},
- {24, 238, 0, L"Кировская обл."},
- {24, 242, 0, L"Нижегородская обл."},
- {24, 243, 0, L"Оренбургская обл."},
- {24, 244, 0, L"Пензенская обл."},
- {24, 245, 0, L"Пермская обл."},
- {24, 246, 0, L"Самарская обл."},
- {24, 247, 0, L"Саратовская обл."},
- {24, 250, 0, L"Ульяновская обл."},
- {24, 239, 0, L"Коми-Пермяцкий АО"},
- {24, 255, 0, L"Карелия"},
- {24, 256, 0, L"Коми"},
- {24, 252, 0, L"Архангельская обл."},
- {24, 253, 0, L"Вологодская обл."},
- {24, 254, 0, L"Калининградская обл."},
- {24, 257, 0, L"Ленинградская обл."},
- {24, 258, 0, L"Мурманская обл."},
- {24, 260, 0, L"Новгородская обл."},
- {24, 261, 0, L"Псковская обл."},
- {24, 259, 0, L"Ненецкий АО"},
- {24, 265, 0, L"Бурятия"},
- {24, 263, 0, L"Республика Алтай"},
- {24, 273, 0, L"Тыва"},
- {24, 275, 0, L"Хакасия"},
- {24, 264, 0, L"Алтайский край"},
- {24, 268, 0, L"Красноярский край"},
- {24, 266, 0, L"Иркутская обл."},
- {24, 267, 0, L"Кемеровская обл."},
- {24, 269, 0, L"Новосибирская обл."},
- {24, 270, 0, L"Омская обл."},
- {24, 272, 0, L"Томская обл."},
- {24, 276, 0, L"Читинская обл."},
- {24, 262, 0, L"Агинский Бурятский АО"},
- {24, 271, 0, L"Таймырский АО"},
- {24, 274, 0, L"Усть-Ордынский Бурятский АО"},
- {24, 277, 0, L"Эвенкийский АО"},
- {24, 278, 0, L"Курганская обл."},
- {24, 279, 0, L"Свердловская обл."},
- {24, 280, 0, L"Тюменская обл."},
- {24, 282, 0, L"Челябинская обл."},
- {24, 281, 0, L"Ханты-Мансийский АО - Югра"},
- {24, 283, 0, L"Ямало-Ненецкий АО"},
- {24, 284, 0, L"Белгородская обл."},
- {24, 285, 0, L"Брянская обл."},
- {24, 286, 0, L"Владимирская обл."},
- {24, 287, 0, L"Воронежская обл."},
- {24, 288, 0, L"Ивановская обл."},
- {24, 289, 0, L"Калужская обл."},
- {24, 290, 0, L"Костромская обл."},
- {24, 291, 0, L"Курская обл."},
- {24, 292, 0, L"Липецкая обл."},
- {24, 293, 0, L"Московская обл."},
- {24, 294, 0, L"Орловская обл."},
- {24, 295, 0, L"Рязанская обл."},
- {24, 296, 0, L"Смоленская обл."},
- {24, 297, 0, L"Тамбовская обл."},
- {24, 298, 0, L"Тверская обл."},
- {24, 299, 0, L"Тульская обл."},
- {24, 300, 0, L"Ярославская обл."},
- {24, 301, 0, L"Адыгея"},
- {24, 304, 0, L"Дагестан"},
- {24, 305, 0, L"Ингушетия"},
- {24, 306, 0, L"Кабардино-Балкария"},
- {24, 307, 0, L"Калмыкия"},
- {24, 308, 0, L"Карачаево-Черкессия"},
- {24, 311, 0, L"Северная Осетия - Алания"},
- {24, 313, 0, L"Чечня"},
- {24, 309, 0, L"Краснодарский край"},
- {24, 312, 0, L"Ставропольский край"},
- {24, 302, 0, L"Астраханская обл."},
- {24, 303, 0, L"Волгоградская обл."},
- {24, 310, 0, L"Ростовская обл."},
- {81, 1055, 0, L"Баку"},
- {81, 1058, 0, L"Гянджа"},
- {81, 1056, 0, L"Нахичевань"},
- {81, 1057, 0, L"Ханкенди"},
- {81, 3153, 0, L"Шеки"},
- {81, 2291, 0, L"Другое"},
- {82, 2932, 0, L"Абовян"},
- {82, 1060, 0, L"Аштарак"},
- {82, 3084, 0, L"Ванадзор"},
- {82, 3011, 0, L"Гюмри"},
- {82, 3306, 0, L"Дилижан"},
- {82, 1059, 0, L"Ереван"},
- {82, 3145, 0, L"Ханкенди"},
- {82, 2292, 0, L"Другое"},
- {97, 1061, 0, L"Кабул"},
- {97, 2293, 0, L"Другое"},
- {96, 1062, 0, L"Дакка"},
- {96, 2294, 0, L"Другое"},
- {99, 1063, 0, L"Манама"},
- {99, 2295, 0, L"Другое"},
- {100, 1064, 0, L"Бандар-Сери-Бегаван"},
- {100, 2296, 0, L"Другое"},
- {101, 1065, 0, L"Тхимпху"},
- {101, 2297, 0, L"Другое"},
- {102, 1066, 0, L"Ханой"},
- {102, 2298, 0, L"Другое"},
- {83, 1067, 0, L"Батуми"},
- {83, 3158, 0, L"Боржоми"},
- {83, 1068, 0, L"Поти"},
- {83, 3129, 0, L"Рустави"},
- {83, 1069, 0, L"Сухуми"},
- {83, 1070, 0, L"Тбилиси"},
- {83, 2299, 0, L"Другое"},
- {86, 3345, 0, L"Ариэль"},
- {86, 1071, 0, L"Афула"},
- {86, 2992, 0, L"Ашдод"},
- {86, 3175, 0, L"Ашкелон"},
- {86, 3363, 0, L"Бат-Ям"},
- {86, 2884, 0, L"Беер-Яков"},
- {86, 3243, 0, L"Бейт-Шемеш"},
- {86, 1074, 0, L"Беэр-Шева"},
- {86, 3348, 0, L"Герцелия"},
- {86, 3241, 0, L"Димона"},
- {86, 1075, 0, L"Иерусалим"},
- {86, 3350, 0, L"Йокнеам-Иллит"},
- {86, 2982, 0, L"Кармиэль"},
- {86, 2971, 0, L"Кфар-Саба"},
- {86, 3136, 0, L"Назарет"},
- {86, 1080, 0, L"Натания"},
- {86, 3303, 0, L"Офаким"},
- {86, 3050, 0, L"Раанана"},
- {86, 3151, 0, L"Рамат Ган"},
- {86, 3141, 0, L"Реховот"},
- {86, 3012, 0, L"Ришон ле Цион"},
- {86, 1081, 0, L"Тверия"},
- {86, 1077, 0, L"Тель-Авив"},
- {86, 1079, 0, L"Хадера"},
- {86, 1078, 0, L"Хайфа"},
- {86, 1076, 0, L"Хеврон"},
- {86, 2929, 0, L"Цфат"},
- {86, 2928, 0, L"Эйлат"},
- {86, 2300, 0, L"Другое"},
- {95, 3315, 0, L"Бангалор"},
- {95, 1082, 0, L"Дели"},
- {95, 1083, 0, L"Джайпур"},
- {95, 3144, 0, L"Калькутта"},
- {95, 3025, 0, L"Мумбаи"},
- {95, 3277, 0, L"Панаджи"},
- {95, 1084, 0, L"Ченнаи"},
- {95, 2301, 0, L"Другое"},
- {103, 1085, 0, L"Джакарта"},
- {103, 2302, 0, L"Другое"},
- {79, 1086, 0, L"Амман"},
- {79, 2303, 0, L"Другое"},
- {85, 1087, 0, L"Багдад"},
- {85, 2304, 0, L"Другое"},
- {87, 1088, 0, L"Тегеран"},
- {87, 2305, 0, L"Другое"},
- {104, 1089, 0, L"Сана"},
- {104, 2306, 0, L"Другое"},
- {84, 1090, 0, L"Актау"},
- {84, 1091, 0, L"Актюбинск"},
- {84, 1092, 0, L"Алма-Ата"},
- {84, 3242, 0, L"Аршалы"},
- {84, 1093, 0, L"Астана"},
- {84, 1094, 0, L"Атырау (Гурьев)"},
- {84, 1095, 0, L"Байконур"},
- {84, 3245, 0, L"Балхаш"},
- {84, 3083, 0, L"Жезказган"},
- {84, 1096, 0, L"Капчагай"},
- {84, 1097, 0, L"Караганда"},
- {84, 1098, 0, L"Кокшетау"},
- {84, 1099, 0, L"Кустанай"},
- {84, 2868, 0, L"Лисаковск"},
- {84, 1100, 0, L"Павлодар"},
- {84, 1101, 0, L"Петропавловск (Сев.-Каз. обл.)"},
- {84, 1102, 0, L"Рудный"},
- {84, 1103, 0, L"Семипалатинск"},
- {84, 1104, 0, L"Степногорск"},
- {84, 3166, 0, L"Талгар"},
- {84, 1105, 0, L"Талды-Курган"},
- {84, 2927, 0, L"Тараз"},
- {84, 1106, 0, L"Темиртау"},
- {84, 1107, 0, L"Уральск"},
- {84, 1108, 0, L"Усть-Каменогорск"},
- {84, 1109, 0, L"Чимкент"},
- {84, 1110, 0, L"Экибастуз"},
- {84, 2307, 0, L"Другое"},
- {105, 1111, 0, L"Пномпень"},
- {105, 2308, 0, L"Другое"},
- {106, 1112, 0, L"Доха"},
- {106, 2309, 0, L"Другое"},
- {107, 1113, 0, L"Ларнака"},
- {107, 1114, 0, L"Лимассол"},
- {107, 1115, 0, L"Никосия"},
- {107, 2954, 0, L"Пафос"},
- {107, 2310, 0, L"Другое"},
- {92, 1116, 0, L"Бишкек"},
- {92, 1117, 0, L"Джалал-Абад"},
- {92, 3027, 0, L"Кара-Балта"},
- {92, 1118, 0, L"Каракол"},
- {92, 1119, 0, L"Ош"},
- {92, 1120, 0, L"Талас"},
- {92, 2933, 0, L"Хайдаркен"},
- {92, 2311, 0, L"Другое"},
- {76, 3214, 0, L"Аомынь (Макао)"},
- {76, 1121, 0, L"Гонконг"},
- {76, 2869, 0, L"Гуанчжоу"},
- {76, 3262, 0, L"Далянь"},
- {76, 1122, 0, L"Пекин"},
- {76, 1123, 0, L"Харбин"},
- {76, 1124, 0, L"Шанхай"},
- {76, 3043, 0, L"Шеньян"},
- {76, 2312, 0, L"Другое"},
- {29, 1125, 0, L"Пхеньян"},
- {29, 2313, 0, L"Другое"},
- {108, 1126, 0, L"Сеул"},
- {108, 3240, 0, L"Тейджон"},
- {108, 2314, 0, L"Другое"},
- {88, 1127, 0, L"Эль-Кувейт"},
- {88, 2315, 0, L"Другое"},
- {109, 1128, 0, L"Вьентьян"},
- {109, 2316, 0, L"Другое"},
- {110, 1129, 0, L"Бейрут"},
- {110, 2317, 0, L"Другое"},
- {111, 1130, 0, L"Джохор-Бару"},
- {111, 1131, 0, L"Куала-Лумпур"},
- {111, 2318, 0, L"Другое"},
- {112, 1132, 0, L"Мале"},
- {112, 2319, 0, L"Другое"},
- {113, 1133, 0, L"Улан-Батор"},
- {113, 1134, 0, L"Эрдэнэт"},
- {113, 2320, 0, L"Другое"},
- {114, 1135, 0, L"Янгон"},
- {114, 2321, 0, L"Другое"},
- {115, 1136, 0, L"Катманду"},
- {115, 2322, 0, L"Другое"},
- {116, 1137, 0, L"Абу-Даби"},
- {116, 1138, 0, L"Дубай"},
- {116, 1139, 0, L"Шарджа"},
- {116, 2323, 0, L"Другое"},
- {117, 1140, 0, L"Маскат"},
- {117, 2324, 0, L"Другое"},
- {122, 1141, 0, L"Исламабад"},
- {122, 2325, 0, L"Другое"},
- {89, 1072, 0, L"Ашдод"},
- {89, 1073, 0, L"Ашкелон"},
- {89, 1142, 0, L"Газа"},
- {89, 2326, 0, L"Другое"},
- {94, 3250, 0, L"Медина"},
- {94, 1143, 0, L"Эр-Рияд"},
- {94, 2327, 0, L"Другое"},
- {78, 1144, 0, L"Дамаск"},
- {78, 2328, 0, L"Другое"},
- {91, 1145, 0, L"Душанбе"},
- {91, 3307, 0, L"Кайраккум"},
- {91, 3308, 0, L"Худжанд"},
- {91, 2329, 0, L"Другое"},
- {119, 1146, 0, L"Бангкок"},
- {119, 1147, 0, L"Пхукет"},
- {119, 2330, 0, L"Другое"},
- {120, 1148, 0, L"Тайбэй"},
- {120, 2331, 0, L"Другое"},
- {132, 1149, 0, L"Дили"},
- {132, 2332, 0, L"Другое"},
- {90, 1150, 0, L"Ашхабад"},
- {90, 3079, 0, L"Безмеин"},
- {90, 2333, 0, L"Другое"},
- {77, 1152, 0, L"Анкара"},
- {77, 1153, 0, L"Анталия"},
- {77, 3080, 0, L"Бурса"},
- {77, 1151, 0, L"Мармарис"},
- {77, 1154, 0, L"Стамбул"},
- {77, 1155, 0, L"Трабзон"},
- {77, 2334, 0, L"Другое"},
- {93, 3362, 0, L"Алмалык"},
- {93, 3137, 0, L"Андижан"},
- {93, 3273, 0, L"Асака"},
- {93, 1156, 0, L"Ахангаран"},
- {93, 1157, 0, L"Бухара"},
- {93, 3167, 0, L"Джизак"},
- {93, 3347, 0, L"Кунград"},
- {93, 1158, 0, L"Навои"},
- {93, 1159, 0, L"Наманган"},
- {93, 1160, 0, L"Самарканд"},
- {93, 1161, 0, L"Ташкент"},
- {93, 1162, 0, L"Ургенч"},
- {93, 1163, 0, L"Фергана"},
- {93, 1164, 0, L"Чирчик"},
- {93, 2335, 0, L"Другое"},
- {121, 1165, 0, L"Манила"},
- {121, 3319, 0, L"Себу"},
- {121, 2336, 0, L"Другое"},
- {98, 1166, 0, L"Коломбо"},
- {98, 2337, 0, L"Другое"},
- {75, 3176, 0, L"Исесаки"},
- {75, 3339, 0, L"Корияма"},
- {75, 1167, 0, L"Саппоро"},
- {75, 1168, 0, L"Токио"},
- {75, 2338, 0, L"Другое"},
- {123, 1914, 0, L"Аделаида"},
- {123, 2957, 0, L"Блэк Рок"},
- {123, 1915, 0, L"Брисбен"},
- {123, 3331, 0, L"Горокан"},
- {123, 1916, 0, L"Канберра"},
- {123, 3001, 0, L"Лидкомб"},
- {123, 1917, 0, L"Мельбурн"},
- {123, 3217, 0, L"Норфолк"},
- {123, 3064, 0, L"Перт"},
- {123, 3020, 0, L"Санта Люсиа"},
- {123, 1918, 0, L"Сидней"},
- {123, 3238, 0, L"Энеабба"},
- {123, 2339, 0, L"Другое"},
- {454, 1192, 0, L"Паго-Паго"},
- {454, 2366, 0, L"Другое"},
- {124, 1919, 0, L"Порт-Вила"},
- {124, 2340, 0, L"Другое"},
- {453, 1193, 0, L"Аганья"},
- {453, 2368, 0, L"Другое"},
- {126, 1921, 0, L"Баирики"},
- {126, 2342, 0, L"Другое"},
- {127, 1922, 0, L"Маджуро"},
- {127, 2343, 0, L"Другое"},
- {128, 1923, 0, L"Паликир"},
- {128, 2344, 0, L"Другое"},
- {129, 1924, 0, L"Ярен"},
- {129, 2345, 0, L"Другое"},
- {130, 1925, 0, L"Веллингтон"},
- {130, 1926, 0, L"Гамильтон"},
- {130, 1928, 0, L"Данидин"},
- {130, 1929, 0, L"Крайстчерч"},
- {130, 3235, 0, L"Кромвель"},
- {130, 1927, 0, L"Окленд"},
- {130, 3323, 0, L"Тауранга"},
- {130, 2346, 0, L"Другое"},
- {131, 1930, 0, L"Корор"},
- {131, 2347, 0, L"Другое"},
- {133, 1931, 0, L"Порт-Морсби"},
- {133, 2348, 0, L"Другое"},
- {125, 1920, 0, L"Апиа"},
- {125, 2341, 0, L"Другое"},
- {134, 1932, 0, L"Хониара"},
- {134, 2349, 0, L"Другое"},
- {135, 1933, 0, L"Нукуалофа"},
- {135, 2350, 0, L"Другое"},
- {136, 1934, 0, L"Фунафути"},
- {136, 2351, 0, L"Другое"},
- {137, 1935, 0, L"Сува"},
- {137, 2352, 0, L"Другое"},
- {138, 3055, 0, L"Барлингтон"},
- {138, 3049, 0, L"Броссард"},
- {138, 3330, 0, L"Бурнаби"},
- {138, 1169, 0, L"Ванкувер"},
- {138, 3106, 0, L"Ватерлоо"},
- {138, 1170, 0, L"Виннипег"},
- {138, 1171, 0, L"Галифакс"},
- {138, 1172, 0, L"Гамильтон"},
- {138, 3365, 0, L"Денвер"},
- {138, 1173, 0, L"Калгари"},
- {138, 3104, 0, L"Камлупс"},
- {138, 3366, 0, L"Каннингтон"},
- {138, 1174, 0, L"Квебек"},
- {138, 2964, 0, L"Кингстон"},
- {138, 3113, 0, L"Коквитлам"},
- {138, 1175, 0, L"Монреаль"},
- {138, 2920, 0, L"Ниагара-Фолс"},
- {138, 2889, 0, L"Норд-Йорк"},
- {138, 1176, 0, L"Оттава"},
- {138, 2903, 0, L"Порт Алберни"},
- {138, 1177, 0, L"Ричмонд"},
- {138, 1178, 0, L"Тимминс"},
- {138, 2946, 0, L"Торнхилл"},
- {138, 1179, 0, L"Торонто"},
- {138, 1180, 0, L"Эдмонтон"},
- {138, 2353, 0, L"Другое"},
- {139, 407, 0, L"Вашингтон"},
- {139, 426, 0, L"Айдахо"},
- {139, 378, 0, L"Айова"},
- {139, 412, 0, L"Алабама"},
- {139, 446, 0, L"Аляска"},
- {139, 434, 0, L"Аризона"},
- {139, 416, 0, L"Арканзас"},
- {139, 428, 0, L"Вайоминг"},
- {139, 440, 0, L"Вашингтон"},
- {139, 352, 0, L"Вермонт"},
- {139, 394, 0, L"Виргиния"},
- {139, 374, 0, L"Висконсин"},
- {139, 448, 0, L"Гавайи"},
- {139, 390, 0, L"Делавер"},
- {139, 402, 0, L"Джорджия"},
- {139, 396, 0, L"Западная Виргиния"},
- {139, 370, 0, L"Иллинойс"},
- {139, 368, 0, L"Индиана"},
- {139, 444, 0, L"Калифорния"},
- {139, 388, 0, L"Канзас"},
- {139, 408, 0, L"Кентукки"},
- {139, 430, 0, L"Колорадо"},
- {139, 358, 0, L"Коннектикут"},
- {139, 418, 0, L"Луизиана"},
- {139, 354, 0, L"Массачусетс"},
- {139, 376, 0, L"Миннесота"},
- {139, 414, 0, L"Миссисипи"},
- {139, 380, 0, L"Миссури"},
- {139, 372, 0, L"Мичиган"},
- {139, 424, 0, L"Монтана"},
- {139, 348, 0, L"Мэн"},
- {139, 392, 0, L"Мэриленд"},
- {139, 386, 0, L"Небраска"},
- {139, 438, 0, L"Невада"},
- {139, 362, 0, L"Нью-Джерси"},
- {139, 360, 0, L"Нью-Йорк"},
- {139, 432, 0, L"Нью-Мексико"},
- {139, 350, 0, L"Нью-Хэмпшир"},
- {139, 366, 0, L"Огайо"},
- {139, 420, 0, L"Оклахома"},
- {139, 442, 0, L"Орегон"},
- {139, 364, 0, L"Пенсильвания"},
- {139, 450, 0, L"Пуэрто-Рико"},
- {139, 356, 0, L"Род-Айленд"},
- {139, 382, 0, L"Северная Дакота"},
- {139, 398, 0, L"Северная Каролина"},
- {139, 410, 0, L"Теннесси"},
- {139, 422, 0, L"Техас"},
- {139, 406, 0, L"Федеральный округ Колумбия"},
- {139, 404, 0, L"Флорида"},
- {139, 384, 0, L"Южная Дакота"},
- {139, 400, 0, L"Южная Каролина"},
- {139, 436, 0, L"Юта"},
- {140, 1238, 0, L"Сент-Джонс"},
- {140, 2442, 0, L"Другое"},
- {141, 1239, 0, L"Буэнос-Айрес"},
- {141, 2441, 0, L"Другое"},
- {142, 1240, 0, L"Нассау"},
- {142, 2440, 0, L"Другое"},
- {143, 1241, 0, L"Бриджтаун"},
- {143, 2439, 0, L"Другое"},
- {146, 1242, 0, L"Бельмопан"},
- {146, 2438, 0, L"Другое"},
- {144, 1243, 0, L"Ла-Пас"},
- {144, 2437, 0, L"Другое"},
- {145, 1244, 0, L"Бразилиа"},
- {145, 3094, 0, L"Пассо Фундо"},
- {145, 1245, 0, L"Рио-де-Жанейро"},
- {145, 1246, 0, L"Сан-Паулу"},
- {145, 2436, 0, L"Другое"},
- {147, 1247, 0, L"Каракас"},
- {147, 2435, 0, L"Другое"},
- {452, 1190, 0, L"Шарлотта-Амалия"},
- {452, 2364, 0, L"Другое"},
- {149, 1248, 0, L"Порт-о-Пренс"},
- {149, 2434, 0, L"Другое"},
- {148, 1249, 0, L"Джоржтаун"},
- {148, 2433, 0, L"Другое"},
- {173, 1250, 0, L"Гватемала"},
- {173, 2432, 0, L"Другое"},
- {150, 1251, 0, L"Тегусигальпа"},
- {150, 2431, 0, L"Другое"},
- {151, 1252, 0, L"Сент-Джорджес"},
- {151, 2430, 0, L"Другое"},
- {152, 1253, 0, L"Уманак"},
- {152, 2429, 0, L"Другое"},
- {153, 1254, 0, L"Розо"},
- {153, 2428, 0, L"Другое"},
- {154, 1255, 0, L"Санто-Доминго"},
- {154, 2427, 0, L"Другое"},
- {155, 1256, 0, L"Богота"},
- {155, 2426, 0, L"Другое"},
- {156, 1257, 0, L"Сан-Хосе"},
- {156, 2425, 0, L"Другое"},
- {157, 1258, 0, L"Гавана"},
- {157, 2424, 0, L"Другое"},
- {158, 1259, 0, L"Акапулько"},
- {158, 1260, 0, L"Мехико"},
- {158, 2423, 0, L"Другое"},
- {159, 1261, 0, L"Манагуа"},
- {159, 2422, 0, L"Другое"},
- {160, 1262, 0, L"Панама"},
- {160, 2421, 0, L"Другое"},
- {161, 1263, 0, L"Асунсьон"},
- {161, 2420, 0, L"Другое"},
- {162, 1264, 0, L"Лима"},
- {162, 2419, 0, L"Другое"},
- {163, 1265, 0, L"Сан-Сальвадор"},
- {163, 2418, 0, L"Другое"},
- {164, 1266, 0, L"Кингстаун"},
- {164, 2417, 0, L"Другое"},
- {165, 1267, 0, L"Бастер"},
- {165, 2416, 0, L"Другое"},
- {166, 1268, 0, L"Кастри"},
- {166, 2415, 0, L"Другое"},
- {167, 1269, 0, L"Парамарибо"},
- {167, 2414, 0, L"Другое"},
- {168, 1270, 0, L"Порт-оф-Спейн"},
- {168, 2413, 0, L"Другое"},
- {169, 1271, 0, L"Монтевидео"},
- {169, 2412, 0, L"Другое"},
- {170, 1272, 0, L"Сантьяго"},
- {170, 2411, 0, L"Другое"},
- {171, 1273, 0, L"Гуаякиль"},
- {171, 1274, 0, L"Кито"},
- {171, 2410, 0, L"Другое"},
- {172, 1275, 0, L"Кингстон"},
- {172, 2409, 0, L"Другое"},
- {174, 1854, 0, L"Алжир"},
- {174, 2495, 0, L"Другое"},
- {175, 1855, 0, L"Луанда"},
- {175, 2494, 0, L"Другое"},
- {176, 1856, 0, L"Котону"},
- {176, 1857, 0, L"Порто-Ново"},
- {176, 2493, 0, L"Другое"},
- {177, 1858, 0, L"Габороне"},
- {177, 2492, 0, L"Другое"},
- {178, 1859, 0, L"Уагадугу"},
- {178, 2491, 0, L"Другое"},
- {179, 1860, 0, L"Бужумбуру"},
- {179, 2490, 0, L"Другое"},
- {180, 1861, 0, L"Либревиль"},
- {180, 2489, 0, L"Другое"},
- {181, 1862, 0, L"Банжул"},
- {181, 2488, 0, L"Другое"},
- {182, 1863, 0, L"Аккра"},
- {182, 2487, 0, L"Другое"},
- {183, 1864, 0, L"Конакри"},
- {183, 2486, 0, L"Другое"},
- {184, 1865, 0, L"Бисау"},
- {184, 2485, 0, L"Другое"},
- {185, 1866, 0, L"Джибути"},
- {185, 2484, 0, L"Другое"},
- {186, 3312, 0, L"Дахаб"},
- {186, 1867, 0, L"Каир"},
- {186, 1868, 0, L"Хургада"},
- {186, 2483, 0, L"Другое"},
- {187, 1869, 0, L"Лусака"},
- {187, 2482, 0, L"Другое"},
- {23, 1870, 0, L"Хараре"},
- {23, 2481, 0, L"Другое"},
- {188, 1871, 0, L"Прая"},
- {188, 2480, 0, L"Другое"},
- {189, 1872, 0, L"Яунде"},
- {189, 2479, 0, L"Другое"},
- {190, 1873, 0, L"Найроби"},
- {190, 2478, 0, L"Другое"},
- {191, 1874, 0, L"Морони"},
- {191, 2477, 0, L"Другое"},
- {193, 1875, 0, L"Киншаса"},
- {193, 2476, 0, L"Другое"},
- {192, 1876, 0, L"Браззавиль"},
- {192, 2475, 0, L"Другое"},
- {194, 1877, 0, L"Ямусукро"},
- {194, 2474, 0, L"Другое"},
- {195, 1878, 0, L"Масеру"},
- {195, 2473, 0, L"Другое"},
- {196, 1879, 0, L"Монровия"},
- {196, 2472, 0, L"Другое"},
- {197, 1880, 0, L"Триполи"},
- {197, 2471, 0, L"Другое"},
- {198, 1881, 0, L"Порт-Луи"},
- {198, 2470, 0, L"Другое"},
- {199, 1882, 0, L"Нуакшот"},
- {199, 2469, 0, L"Другое"},
- {200, 1883, 0, L"Антананариву"},
- {200, 2468, 0, L"Другое"},
- {201, 1884, 0, L"Лилонгве"},
- {201, 2467, 0, L"Другое"},
- {202, 1885, 0, L"Бамако"},
- {202, 2466, 0, L"Другое"},
- {203, 1886, 0, L"Агадир"},
- {203, 1887, 0, L"Рабат"},
- {203, 2465, 0, L"Другое"},
- {204, 1888, 0, L"Мапуту"},
- {204, 2464, 0, L"Другое"},
- {205, 1889, 0, L"Виндхук"},
- {205, 2463, 0, L"Другое"},
- {206, 1890, 0, L"Ниамей"},
- {206, 2462, 0, L"Другое"},
- {207, 1891, 0, L"Абуджа"},
- {207, 2461, 0, L"Другое"},
- {208, 1892, 0, L"Кигали"},
- {208, 2460, 0, L"Другое"},
- {209, 1893, 0, L"Сан-Томе"},
- {209, 2459, 0, L"Другое"},
- {210, 1894, 0, L"Мбабане"},
- {210, 2458, 0, L"Другое"},
- {211, 1895, 0, L"Виктория"},
- {211, 2457, 0, L"Другое"},
- {212, 1896, 0, L"Дакар"},
- {212, 2456, 0, L"Другое"},
- {213, 1897, 0, L"Могадишо"},
- {213, 2455, 0, L"Другое"},
- {214, 1898, 0, L"Хартум"},
- {214, 2454, 0, L"Другое"},
- {215, 1899, 0, L"Фритаун"},
- {215, 2453, 0, L"Другое"},
- {216, 1900, 0, L"Дар-эс-Салам"},
- {216, 1901, 0, L"Додома"},
- {216, 2452, 0, L"Другое"},
- {217, 1902, 0, L"Ломе"},
- {217, 2451, 0, L"Другое"},
- {218, 1903, 0, L"Тунис"},
- {218, 2450, 0, L"Другое"},
- {219, 1904, 0, L"Кампала"},
- {219, 2449, 0, L"Другое"},
- {220, 1905, 0, L"Банги"},
- {220, 2448, 0, L"Другое"},
- {222, 1906, 0, L"Нджамена"},
- {222, 2447, 0, L"Другое"},
- {223, 1907, 0, L"Малабо"},
- {223, 2446, 0, L"Другое"},
- {221, 1908, 0, L"Асмэра"},
- {221, 2445, 0, L"Другое"},
- {224, 1909, 0, L"Аддис-Абеба"},
- {224, 2444, 0, L"Другое"},
- {225, 1910, 0, L"Дурбан"},
- {225, 1913, 0, L"Йоханнесбург"},
- {225, 1912, 0, L"Кейптаун"},
- {225, 3033, 0, L"Пайнтаун"},
- {225, 1911, 0, L"Претория"},
- {225, 2443, 0, L"Другое"},
- {39, 314, 0, L"Киев"},
- {39, 315, 0, L"Винницкая обл."},
- {39, 316, 0, L"Волынская обл."},
- {39, 317, 0, L"Днепропетровская обл."},
- {39, 318, 0, L"Донецкая обл."},
- {39, 319, 0, L"Житомирская обл."},
- {39, 320, 0, L"Закарпатская обл."},
- {39, 321, 0, L"Запорожская обл."},
- {39, 322, 0, L"Ивано-Франковская обл."},
- {39, 323, 0, L"Киевская обл."},
- {39, 324, 0, L"Кировоградская обл."},
- {39, 325, 0, L"Крым"},
- {39, 326, 0, L"Луганская обл."},
- {39, 327, 0, L"Львовская обл."},
- {39, 328, 0, L"Николаевская обл."},
- {39, 329, 0, L"Одесская обл."},
- {39, 330, 0, L"Полтавская обл."},
- {39, 331, 0, L"Ровенская обл."},
- {39, 332, 0, L"Сумская обл."},
- {39, 333, 0, L"Тернопольская обл."},
- {39, 334, 0, L"Харьковская обл."},
- {39, 335, 0, L"Херсонская обл."},
- {39, 336, 0, L"Хмельницкая обл."},
- {39, 337, 0, L"Черкасская обл."},
- {39, 338, 0, L"Черниговская обл."},
- {39, 339, 0, L"Черновицкая обл."},
- {40, 602, 0, L"Бад Халл"},
- {40, 604, 0, L"Брегенц"},
- {40, 603, 0, L"Вена"},
- {40, 608, 0, L"Грац"},
- {40, 606, 0, L"Зальцбург"},
- {40, 3099, 0, L"Зель-ам-Зее"},
- {40, 605, 0, L"Инсбрук"},
- {40, 3174, 0, L"Кирхберг"},
- {40, 609, 0, L"Клагенфурт"},
- {40, 607, 0, L"Линц"},
- {40, 610, 0, L"Обдах"},
- {40, 611, 0, L"Щтубайтал"},
- {40, 2541, 0, L"Другое"},
- {32, 612, 0, L"Тирана"},
- {32, 2540, 0, L"Другое"},
- {33, 613, 0, L"Андорра-ла-Велья"},
- {33, 2539, 0, L"Другое"},
- {340, 341, 0, L"Минск"},
- {340, 342, 0, L"Брестская обл."},
- {340, 343, 0, L"Витебская обл."},
- {340, 344, 0, L"Гомельская обл."},
- {340, 345, 0, L"Гродненская обл."},
- {340, 346, 0, L"Минская обл."},
- {340, 347, 0, L"Могилевская обл."},
- {38, 760, 0, L"Антверпен"},
- {38, 767, 0, L"Арлон"},
- {38, 762, 0, L"Брюгге"},
- {38, 761, 0, L"Брюссель"},
- {38, 763, 0, L"Гент"},
- {38, 769, 0, L"Лувен"},
- {38, 765, 0, L"Льеж"},
- {38, 764, 0, L"Монс"},
- {38, 3117, 0, L"Мортсель"},
- {38, 766, 0, L"Намюр"},
- {38, 768, 0, L"Хасселт"},
- {38, 2532, 0, L"Другое"},
- {41, 3098, 0, L"Банско"},
- {41, 792, 0, L"Благоевград"},
- {41, 770, 0, L"Бургас"},
- {41, 771, 0, L"Бяла"},
- {41, 773, 0, L"Варна"},
- {41, 776, 0, L"Велико-Тырново"},
- {41, 788, 0, L"Видин"},
- {41, 789, 0, L"Враца"},
- {41, 796, 0, L"Габрово"},
- {41, 777, 0, L"Димитровград"},
- {41, 781, 0, L"Каварна"},
- {41, 786, 0, L"Кырджали"},
- {41, 791, 0, L"Кюстендил"},
- {41, 793, 0, L"Лазарджик"},
- {41, 795, 0, L"Ловеч"},
- {41, 787, 0, L"Михайловград"},
- {41, 790, 0, L"Перник"},
- {41, 3133, 0, L"Пирдоп"},
- {41, 794, 0, L"Плевен"},
- {41, 782, 0, L"Пловдив"},
- {41, 780, 0, L"Разград"},
- {41, 779, 0, L"Русе"},
- {41, 774, 0, L"Силистра"},
- {41, 784, 0, L"Сливен"},
- {41, 772, 0, L"София"},
- {41, 775, 0, L"Толбухин"},
- {41, 3116, 0, L"Тырново"},
- {41, 785, 0, L"Хасково"},
- {41, 778, 0, L"Шумен"},
- {41, 783, 0, L"Ямбол"},
- {41, 2531, 0, L"Другое"},
- {42, 797, 0, L"Баня-Лука"},
- {42, 799, 0, L"Зеница"},
- {42, 798, 0, L"Сараево"},
- {42, 800, 0, L"Тузла"},
- {42, 2530, 0, L"Другое"},
- {45, 802, 0, L"Абердин"},
- {45, 3075, 0, L"Айслворт"},
- {45, 801, 0, L"Алнвик"},
- {45, 804, 0, L"Бидефорд"},
- {45, 803, 0, L"Бирмингем"},
- {45, 805, 0, L"Блоксвич"},
- {45, 3168, 0, L"Бостон"},
- {45, 806, 0, L"Брайтон"},
- {45, 807, 0, L"Бредфорд"},
- {45, 808, 0, L"Бристоль"},
- {45, 809, 0, L"Вилленхолл"},
- {45, 3131, 0, L"Воррингтон"},
- {45, 810, 0, L"Вудбридж"},
- {45, 3342, 0, L"Гилфорд"},
- {45, 811, 0, L"Глазго"},
- {45, 812, 0, L"Дадли"},
- {45, 813, 0, L"Дарем"},
- {45, 814, 0, L"Дуглас"},
- {45, 3089, 0, L"Кардиф"},
- {45, 815, 0, L"Кембридж"},
- {45, 816, 0, L"Кентербери"},
- {45, 817, 0, L"Ливерпуль"},
- {45, 818, 0, L"Лидс"},
- {45, 819, 0, L"Лондон"},
- {45, 820, 0, L"Манчестер"},
- {45, 2976, 0, L"Митчем"},
- {45, 2988, 0, L"Мэйденхед"},
- {45, 821, 0, L"Ноттингем"},
- {45, 3088, 0, L"Ньюпорт"},
- {45, 822, 0, L"Оксфорд"},
- {45, 823, 0, L"Плимут"},
- {45, 824, 0, L"Портсмут"},
- {45, 825, 0, L"Престон"},
- {45, 3343, 0, L"Райд"},
- {45, 2867, 0, L"Ридинг"},
- {45, 2986, 0, L"Сент-Албанс"},
- {45, 826, 0, L"Стаффорд"},
- {45, 3063, 0, L"Стокпорт"},
- {45, 827, 0, L"Уэймут"},
- {45, 3140, 0, L"Челтенхэм"},
- {45, 828, 0, L"Честер"},
- {45, 829, 0, L"Шеффилд"},
- {45, 830, 0, L"Эдинбург"},
- {45, 2529, 0, L"Другое"},
- {44, 831, 0, L"Будапешт"},
- {44, 832, 0, L"Геделле"},
- {44, 836, 0, L"Дебрецен"},
- {44, 835, 0, L"Мишкольц"},
- {44, 834, 0, L"Сегед"},
- {44, 833, 0, L"Шиофок"},
- {44, 2528, 0, L"Другое"},
- {46, 3007, 0, L"Аахен"},
- {46, 837, 0, L"Аугсбург"},
- {46, 838, 0, L"Баден-Баден"},
- {46, 3371, 0, L"Бамберг"},
- {46, 839, 0, L"Бергиш-Гладбах"},
- {46, 840, 0, L"Берлин"},
- {46, 841, 0, L"Билефельд"},
- {46, 3163, 0, L"Бовенден"},
- {46, 842, 0, L"Бонн"},
- {46, 843, 0, L"Браденбург"},
- {46, 3015, 0, L"Брауншвейг"},
- {46, 844, 0, L"Бремен"},
- {46, 2921, 0, L"Варштайн"},
- {46, 845, 0, L"Веймар"},
- {46, 846, 0, L"Вупперталь"},
- {46, 847, 0, L"Гамбург"},
- {46, 848, 0, L"Ганновер"},
- {46, 849, 0, L"Гарделеген"},
- {46, 3010, 0, L"Гейдельберг"},
- {46, 850, 0, L"Гота"},
- {46, 851, 0, L"Дармштадт"},
- {46, 3072, 0, L"Дессау"},
- {46, 852, 0, L"Детмольд"},
- {46, 853, 0, L"Дортмунд"},
- {46, 854, 0, L"Дрезден"},
- {46, 855, 0, L"Дюссельдорф"},
- {46, 3082, 0, L"Иффецхайм"},
- {46, 3309, 0, L"Кассел"},
- {46, 856, 0, L"Кельн"},
- {46, 857, 0, L"Киль"},
- {46, 3138, 0, L"Кобленц"},
- {46, 858, 0, L"Крефельд"},
- {46, 859, 0, L"Лейпциг"},
- {46, 2872, 0, L"Лимбург"},
- {46, 2965, 0, L"Линген"},
- {46, 3135, 0, L"Любек"},
- {46, 3156, 0, L"Мангейм"},
- {46, 3192, 0, L"Меерсбург"},
- {46, 860, 0, L"Мюнстер"},
- {46, 861, 0, L"Мюнхен"},
- {46, 2864, 0, L"Нойштадт"},
- {46, 862, 0, L"Нюрнберг"},
- {46, 3009, 0, L"Оффенбург"},
- {46, 2993, 0, L"Падерборн"},
- {46, 863, 0, L"Равенсбург"},
- {46, 864, 0, L"Регенсбург"},
- {46, 865, 0, L"Рейнен"},
- {46, 866, 0, L"Росток"},
- {46, 3191, 0, L"Саарбрюкен"},
- {46, 2974, 0, L"Санкт-Августин"},
- {46, 3127, 0, L"Тюринген"},
- {46, 867, 0, L"Фрайберг"},
- {46, 868, 0, L"Фрайбург"},
- {46, 869, 0, L"Франкфурт-на-Майне"},
- {46, 3373, 0, L"Хемнитц"},
- {46, 3313, 0, L"Хильден"},
- {46, 870, 0, L"Штутгарт"},
- {46, 3045, 0, L"Эрланген"},
- {46, 2906, 0, L"Эшборн"},
- {46, 2527, 0, L"Другое"},
- {48, 871, 0, L"Афины"},
- {48, 873, 0, L"Ираклион"},
- {48, 3147, 0, L"Корфу"},
- {48, 872, 0, L"Салоники"},
- {48, 3178, 0, L"Халкидики"},
- {48, 2526, 0, L"Другое"},
- {49, 3006, 0, L"Архус"},
- {49, 874, 0, L"Копенгаген"},
- {49, 875, 0, L"Оденсе"},
- {49, 3285, 0, L"Ольборг"},
- {49, 876, 0, L"Сванеке"},
- {49, 3126, 0, L"Скиве"},
- {49, 2525, 0, L"Другое"},
- {50, 3377, 0, L"Виклоу"},
- {50, 3067, 0, L"Голвей"},
- {50, 877, 0, L"Дублин"},
- {50, 3065, 0, L"Килларней"},
- {50, 3066, 0, L"Корк"},
- {50, 878, 0, L"Лимерик"},
- {50, 3069, 0, L"Нейс"},
- {50, 3068, 0, L"Типперэри"},
- {50, 2524, 0, L"Другое"},
- {51, 879, 0, L"Рейкьявик"},
- {51, 2523, 0, L"Другое"},
- {34, 880, 0, L"Аликанте"},
- {34, 3125, 0, L"Альмерия"},
- {34, 881, 0, L"Барселона"},
- {34, 890, 0, L"Бильбао"},
- {34, 3076, 0, L"Бланес"},
- {34, 882, 0, L"Валенсия"},
- {34, 3070, 0, L"Ибица"},
- {34, 888, 0, L"Кадис"},
- {34, 886, 0, L"Картахена"},
- {34, 891, 0, L"Ла-Корунья"},
- {34, 3310, 0, L"Лорет де Мар"},
- {34, 883, 0, L"Мадрид"},
- {34, 884, 0, L"Малага"},
- {34, 885, 0, L"Марбелья"},
- {34, 892, 0, L"Овьедо"},
- {34, 3179, 0, L"Пальма де Майорка"},
- {34, 3177, 0, L"Сан-Агустин"},
- {34, 3289, 0, L"Санта-Крус-де-Тенерифе"},
- {34, 889, 0, L"Сарагоса"},
- {34, 887, 0, L"Севилья"},
- {34, 893, 0, L"Хихон"},
- {34, 2522, 0, L"Другое"},
- {52, 3318, 0, L"Аоста"},
- {52, 3278, 0, L"Беллариа"},
- {52, 906, 0, L"Болонья"},
- {52, 894, 0, L"Брешиа"},
- {52, 895, 0, L"Венеция"},
- {52, 905, 0, L"Верона"},
- {52, 896, 0, L"Генуя"},
- {52, 897, 0, L"Лекко"},
- {52, 3369, 0, L"Ливорно"},
- {52, 3327, 0, L"Марсала"},
- {52, 898, 0, L"Милан"},
- {52, 899, 0, L"Модена"},
- {52, 907, 0, L"Неаполь"},
- {52, 908, 0, L"Перуджа"},
- {52, 900, 0, L"Пиза"},
- {52, 901, 0, L"Рим"},
- {52, 3368, 0, L"Сан-Ремо"},
- {52, 3384, 0, L"Сиракуза"},
- {52, 3252, 0, L"Терамо"},
- {52, 902, 0, L"Триест"},
- {52, 903, 0, L"Турин"},
- {52, 3130, 0, L"Фано"},
- {52, 904, 0, L"Флоренция"},
- {52, 2521, 0, L"Другое"},
- {53, 2939, 0, L"Айзкраукле"},
- {53, 3054, 0, L"Валка"},
- {53, 909, 0, L"Даугавпилс"},
- {53, 2934, 0, L"Екабпилс"},
- {53, 913, 0, L"Елгава"},
- {53, 2935, 0, L"Кокнесе"},
- {53, 912, 0, L"Лиепая"},
- {53, 2905, 0, L"Резекне"},
- {53, 911, 0, L"Рига"},
- {53, 2936, 0, L"Саласпилс"},
- {53, 2937, 0, L"Смилтене"},
- {53, 910, 0, L"Юрмала"},
- {53, 2520, 0, L"Другое"},
- {54, 914, 0, L"Вильнюс"},
- {54, 915, 0, L"Висагинас"},
- {54, 916, 0, L"Каунас"},
- {54, 918, 0, L"Клайпеда"},
- {54, 919, 0, L"Паланга"},
- {54, 3173, 0, L"Пеневежис"},
- {54, 917, 0, L"Шауляй"},
- {54, 2519, 0, L"Другое"},
- {55, 920, 0, L"Вадуц"},
- {55, 2518, 0, L"Другое"},
- {56, 3376, 0, L"Бетцдорф"},
- {56, 921, 0, L"Люксембург"},
- {56, 2517, 0, L"Другое"},
- {57, 3142, 0, L"Битола"},
- {57, 922, 0, L"Скопье"},
- {57, 2516, 0, L"Другое"},
- {58, 923, 0, L"Валлетта"},
- {58, 3154, 0, L"Мзида"},
- {58, 924, 0, L"Слима"},
- {58, 2515, 0, L"Другое"},
- {59, 925, 0, L"Бельцы"},
- {59, 926, 0, L"Бендеры"},
- {59, 3234, 0, L"Дубоссары"},
- {59, 3275, 0, L"Кахул"},
- {59, 927, 0, L"Кишинев"},
- {59, 3321, 0, L"Резина"},
- {59, 928, 0, L"Рыбница"},
- {59, 929, 0, L"Тирасполь"},
- {59, 3281, 0, L"Чадыр-Лунга"},
- {59, 2514, 0, L"Другое"},
- {36, 930, 0, L"Монте-Карло"},
- {36, 2513, 0, L"Другое"},
- {60, 931, 0, L"Амстердам"},
- {60, 933, 0, L"Бреда"},
- {60, 932, 0, L"Гаага"},
- {60, 934, 0, L"Гауда"},
- {60, 935, 0, L"Делфт"},
- {60, 2977, 0, L"Донген"},
- {60, 3030, 0, L"Зволле"},
- {60, 3091, 0, L"Ниймеген"},
- {60, 936, 0, L"Роттердам"},
- {60, 937, 0, L"Утрехт"},
- {60, 3044, 0, L"Эйндховен"},
- {60, 3380, 0, L"Эншеде"},
- {60, 2512, 0, L"Другое"},
- {61, 3190, 0, L"Кристиансанд"},
- {61, 2857, 0, L"Лиллехаммер"},
- {61, 938, 0, L"Осло"},
- {61, 3355, 0, L"Ставангер"},
- {61, 939, 0, L"Тронхейм"},
- {61, 2511, 0, L"Другое"},
- {62, 940, 0, L"Белосток"},
- {62, 941, 0, L"Варшава"},
- {62, 3164, 0, L"Вроцлав"},
- {62, 942, 0, L"Гданьск"},
- {62, 943, 0, L"Гливице"},
- {62, 3237, 0, L"Закопане"},
- {62, 3165, 0, L"Зелена Гура"},
- {62, 944, 0, L"Катовице"},
- {62, 945, 0, L"Краков"},
- {62, 3008, 0, L"Лодзь"},
- {62, 3150, 0, L"Ольштын"},
- {62, 946, 0, L"Познань"},
- {62, 947, 0, L"Радом"},
- {62, 948, 0, L"Сопот"},
- {62, 2958, 0, L"Тыхы"},
- {62, 2510, 0, L"Другое"},
- {35, 949, 0, L"Лиссабон"},
- {35, 950, 0, L"Порто"},
- {35, 2509, 0, L"Другое"},
- {63, 952, 0, L"Брашов"},
- {63, 951, 0, L"Бухарест"},
- {63, 954, 0, L"Констанца"},
- {63, 955, 0, L"Плоешти"},
- {63, 953, 0, L"Яссы"},
- {63, 2508, 0, L"Другое"},
- {64, 956, 0, L"Сан-Марино"},
- {64, 2507, 0, L"Другое"},
- {74, 957, 0, L"Белград"},
- {74, 960, 0, L"Ниш"},
- {74, 958, 0, L"Нови-Сад"},
- {74, 959, 0, L"Сараево"},
- {74, 2506, 0, L"Другое"},
- {65, 961, 0, L"Братислава"},
- {65, 962, 0, L"Кошице"},
- {65, 3101, 0, L"Липтов"},
- {65, 963, 0, L"Попрад"},
- {65, 964, 0, L"Прешов"},
- {65, 965, 0, L"Ружемберок"},
- {65, 966, 0, L"Тврдошин"},
- {65, 2505, 0, L"Другое"},
- {66, 968, 0, L"Копар"},
- {66, 967, 0, L"Любляна"},
- {66, 969, 0, L"Марибор"},
- {66, 2504, 0, L"Другое"},
- {67, 970, 0, L"Торсхавн"},
- {67, 2503, 0, L"Другое"},
- {68, 2888, 0, L"Вантаа"},
- {68, 971, 0, L"Васа"},
- {68, 979, 0, L"Котка"},
- {68, 972, 0, L"Коувола"},
- {68, 980, 0, L"Лахти"},
- {68, 973, 0, L"Оулу"},
- {68, 3375, 0, L"Риихимяки"},
- {68, 3159, 0, L"Руовеси"},
- {68, 974, 0, L"Тампере"},
- {68, 975, 0, L"Турку"},
- {68, 976, 0, L"Хельсинки"},
- {68, 977, 0, L"Эспо"},
- {68, 978, 0, L"Ювяскюля"},
- {68, 2502, 0, L"Другое"},
- {37, 996, 0, L"Авиньон"},
- {37, 983, 0, L"Бержерак"},
- {37, 997, 0, L"Блуа"},
- {37, 984, 0, L"Бордо"},
- {37, 998, 0, L"Дижон"},
- {37, 987, 0, L"Канн"},
- {37, 988, 0, L"Кастр"},
- {37, 993, 0, L"Клермон-Ферран"},
- {37, 3037, 0, L"Лилль"},
- {37, 989, 0, L"Лион"},
- {37, 985, 0, L"Марсель"},
- {37, 991, 0, L"Мец"},
- {37, 3161, 0, L"Мобеж"},
- {37, 990, 0, L"Нанси"},
- {37, 994, 0, L"Нант"},
- {37, 995, 0, L"Ницца"},
- {37, 999, 0, L"Орлеан"},
- {37, 981, 0, L"Париж"},
- {37, 3374, 0, L"Перпиньян"},
- {37, 992, 0, L"Руан"},
- {37, 982, 0, L"Страсбург"},
- {37, 986, 0, L"Тулуза"},
- {37, 3314, 0, L"Шамбери"},
- {37, 2501, 0, L"Другое"},
- {69, 1003, 0, L"Дубровник"},
- {69, 1000, 0, L"Загреб"},
- {69, 1001, 0, L"Задар"},
- {69, 1004, 0, L"Риека"},
- {69, 1002, 0, L"Сплит"},
- {69, 2500, 0, L"Другое"},
- {70, 1005, 0, L"Брно"},
- {70, 3291, 0, L"Гавличкув-Брод"},
- {70, 1007, 0, L"Градец-Кралове"},
- {70, 1008, 0, L"Карлови-Вари"},
- {70, 3019, 0, L"Кладрубы"},
- {70, 1010, 0, L"Лоуни"},
- {70, 1009, 0, L"Острава"},
- {70, 1015, 0, L"Пльзень"},
- {70, 3105, 0, L"Правчицка Брана"},
- {70, 1006, 0, L"Прага"},
- {70, 3246, 0, L"Тачов"},
- {70, 1011, 0, L"Тршебич"},
- {70, 1012, 0, L"Усти-над-Лабем"},
- {70, 1014, 0, L"Ческе-Будеевице"},
- {70, 1013, 0, L"Яблонец-над-Нисоу"},
- {70, 2499, 0, L"Другое"},
- {71, 1016, 0, L"Арау"},
- {71, 1019, 0, L"Баден"},
- {71, 1017, 0, L"Базель"},
- {71, 1018, 0, L"Берн"},
- {71, 1020, 0, L"Биль"},
- {71, 1021, 0, L"Винтертур"},
- {71, 1022, 0, L"Давос"},
- {71, 3189, 0, L"Делемонт"},
- {71, 1023, 0, L"Женева"},
- {71, 1024, 0, L"Золотурн"},
- {71, 1025, 0, L"Лозанна"},
- {71, 1026, 0, L"Локарно"},
- {71, 1027, 0, L"Лугано"},
- {71, 1028, 0, L"Люцерн"},
- {71, 1029, 0, L"Монтре"},
- {71, 1030, 0, L"Цюрих"},
- {71, 2498, 0, L"Другое"},
- {72, 2883, 0, L"Арбога"},
- {72, 1031, 0, L"Гетеборг"},
- {72, 1032, 0, L"Кальмар"},
- {72, 1037, 0, L"Лахольм"},
- {72, 1036, 0, L"Лулео"},
- {72, 1042, 0, L"Лунд"},
- {72, 1033, 0, L"Мальме"},
- {72, 1034, 0, L"Стокгольм"},
- {72, 1041, 0, L"Умео"},
- {72, 1039, 0, L"Фалун"},
- {72, 1043, 0, L"Хельсинборг"},
- {72, 1040, 0, L"Хернесанд"},
- {72, 1038, 0, L"Эстерсунд"},
- {72, 2497, 0, L"Другое"},
- {73, 3013, 0, L"Валга"},
- {73, 1044, 0, L"Кейла"},
- {73, 1045, 0, L"Кохтла-Ярве"},
- {73, 1046, 0, L"Маарду"},
- {73, 1047, 0, L"Мыйзакюла"},
- {73, 1048, 0, L"Нарва"},
- {73, 1049, 0, L"Пярну"},
- {73, 1050, 0, L"Раквере"},
- {73, 1051, 0, L"Силламяэ"},
- {73, 1052, 0, L"Таллин"},
- {73, 1053, 0, L"Тарту"},
- {73, 1054, 0, L"Хаапсалу"},
- {24, 233, 474, L"Алдан"},
- {24, 233, 2809, L"Верхоянск"},
- {24, 233, 2804, L"Вилюйск"},
- {24, 233, 475, L"Ленск"},
- {24, 233, 477, L"Мирный"},
- {24, 233, 476, L"Нерюнгри"},
- {24, 233, 2806, L"Олекминск"},
- {24, 233, 3115, L"Покровск"},
- {24, 233, 2808, L"Среднеколымск"},
- {24, 233, 2807, L"Томмот"},
- {24, 233, 2805, L"Удачный"},
- {24, 233, 478, L"Усть-Нера"},
- {24, 233, 479, L"Якутск"},
- {24, 233, 2263, L"Другое"},
- {24, 232, 2819, L"Арсеньев"},
- {24, 232, 464, L"Артем"},
- {24, 232, 465, L"Большой Камень"},
- {24, 232, 466, L"Владивосток"},
- {24, 232, 2817, L"Дальнегорск"},
- {24, 232, 2818, L"Дальнереченск"},
- {24, 232, 3359, L"Кавалерово"},
- {24, 232, 467, L"Камень-Рыболов"},
- {24, 232, 468, L"Лесозаводск"},
- {24, 232, 469, L"Лучегорск"},
- {24, 232, 470, L"Находка"},
- {24, 232, 471, L"Партизанск"},
- {24, 232, 472, L"Пластун"},
- {24, 232, 2816, L"Спасск-Дальний"},
- {24, 232, 473, L"Уссурийск"},
- {24, 232, 2258, L"Другое"},
- {24, 235, 487, L"Амурск"},
- {24, 235, 2821, L"Бикин"},
- {24, 235, 488, L"Ванино"},
- {24, 235, 2820, L"Вяземский"},
- {24, 235, 489, L"Комсомольск-на-Амуре"},
- {24, 235, 490, L"Николаевск-на-Амуре"},
- {24, 235, 491, L"Советская Гавань"},
- {24, 235, 3353, L"Солнечный"},
- {24, 235, 492, L"Хабаровск"},
- {24, 235, 2280, L"Другое"},
- {24, 227, 455, L"Белогорск"},
- {24, 227, 456, L"Благовещенск"},
- {24, 227, 2814, L"Завитинск"},
- {24, 227, 2813, L"Зея"},
- {24, 227, 2815, L"Райчихинск"},
- {24, 227, 2812, L"Свободный"},
- {24, 227, 2811, L"Сковородино"},
- {24, 227, 457, L"Тында"},
- {24, 227, 2217, L"Шимановск"},
- {24, 227, 2218, L"Другое"},
- {24, 229, 460, L"Елизово"},
- {24, 229, 2822, L"Ключи"},
- {24, 229, 459, L"Петропавловск-Камч."},
- {24, 229, 2234, L"Другое"},
- {24, 231, 462, L"Магадан"},
- {24, 231, 2823, L"Сусуман"},
- {24, 231, 463, L"Ягодное"},
- {24, 231, 2246, L"Другое"},
- {24, 234, 480, L"Александровск-Сахалинский"},
- {24, 234, 2829, L"Анива"},
- {24, 234, 2833, L"Горнозаводск"},
- {24, 234, 2825, L"Долинск"},
- {24, 234, 481, L"Корсаков"},
- {24, 234, 482, L"Красногорск"},
- {24, 234, 2826, L"Курильск"},
- {24, 234, 2832, L"Лесогорск"},
- {24, 234, 2836, L"Макаров"},
- {24, 234, 2830, L"Невельск"},
- {24, 234, 483, L"Оха"},
- {24, 234, 2828, L"Поронайск"},
- {24, 234, 2824, L"Северо-Курильск"},
- {24, 234, 2827, L"Томари"},
- {24, 234, 2831, L"Углегорск"},
- {24, 234, 484, L"Холмск"},
- {24, 234, 2834, L"Чехов"},
- {24, 234, 2835, L"Шахтерск"},
- {24, 234, 485, L"Южно-Курильск"},
- {24, 234, 486, L"Южно-Сахалинск"},
- {24, 234, 2264, L"Другое"},
- {24, 228, 458, L"Биробиджан"},
- {24, 228, 2810, L"Облучье"},
- {24, 228, 2226, L"Другое"},
- {24, 230, 461, L"Полана"},
- {24, 230, 2239, L"Другое"},
- {24, 236, 493, L"Анадырь"},
- {24, 236, 2287, L"Другое"},
- {24, 237, 2850, L"Агидель"},
- {24, 237, 2851, L"Агидель"},
- {24, 237, 2657, L"Баймак"},
- {24, 237, 2662, L"Белебей"},
- {24, 237, 494, L"Белорецк"},
- {24, 237, 2658, L"Бирск"},
- {24, 237, 2660, L"Благовещенск"},
- {24, 237, 2659, L"Давлеканово"},
- {24, 237, 2663, L"Дюртюли"},
- {24, 237, 495, L"Ишимбай"},
- {24, 237, 496, L"Кумертау"},
- {24, 237, 2655, L"Мелеуз"},
- {24, 237, 497, L"Нефтекамск"},
- {24, 237, 2654, L"Октябрьский"},
- {24, 237, 499, L"Салават"},
- {24, 237, 2656, L"Сибай"},
- {24, 237, 498, L"Стерлитамак"},
- {24, 237, 500, L"Туймазы"},
- {24, 237, 2661, L"Туймазы"},
- {24, 237, 501, L"Уфа"},
- {24, 237, 502, L"Учалы"},
- {24, 237, 2664, L"Янаул"},
- {24, 237, 2220, L"Другое"},
- {24, 240, 509, L"Волжск"},
- {24, 240, 510, L"Звенигово"},
- {24, 240, 511, L"Йошкар-Ола"},
- {24, 240, 512, L"Козьмодемьянск"},
- {24, 240, 2247, L"Другое"},
- {24, 241, 513, L"Зубова Поляна"},
- {24, 241, 2147, L"Инсар"},
- {24, 241, 2150, L"Ковылкино"},
- {24, 241, 2148, L"Краснослободск"},
- {24, 241, 2910, L"Лямбирь"},
- {24, 241, 515, L"Рузаевка"},
- {24, 241, 514, L"Саранск"},
- {24, 241, 2149, L"Темников"},
- {24, 241, 2923, L"Чамзинка"},
- {24, 241, 2248, L"Другое"},
- {24, 248, 2569, L"Агрыз"},
- {24, 248, 2575, L"Азнакаево"},
- {24, 248, 569, L"Альметьевск"},
- {24, 248, 570, L"Апастово"},
- {24, 248, 2571, L"Болгар"},
- {24, 248, 571, L"Бугульма"},
- {24, 248, 2570, L"Буинск"},
- {24, 248, 572, L"Джалиль"},
- {24, 248, 573, L"Елабуга"},
- {24, 248, 2576, L"Заинск"},
- {24, 248, 574, L"Зеленодольск"},
- {24, 248, 575, L"Казань"},
- {24, 248, 2577, L"Лениногорск"},
- {24, 248, 2572, L"Мамадыш"},
- {24, 248, 576, L"Менделеевск"},
- {24, 248, 2573, L"Мензелинск"},
- {24, 248, 577, L"Набережные Челны"},
- {24, 248, 578, L"Нижнекамск"},
- {24, 248, 579, L"Нурлат"},
- {24, 248, 2574, L"Тетюши"},
- {24, 248, 580, L"Чистополь"},
- {24, 248, 2271, L"Другое"},
- {24, 249, 3311, L"Вавож"},
- {24, 249, 581, L"Воткинск"},
- {24, 249, 582, L"Глазов"},
- {24, 249, 583, L"Игра"},
- {24, 249, 584, L"Ижевск"},
- {24, 249, 2665, L"Камбарка"},
- {24, 249, 585, L"Можга"},
- {24, 249, 586, L"Сарапул"},
- {24, 249, 587, L"Ува"},
- {24, 249, 2277, L"Другое"},
- {24, 251, 2158, L"Алатырь"},
- {24, 251, 2156, L"Канаш"},
- {24, 251, 2151, L"Козловка"},
- {24, 251, 2152, L"Марьинский Посад"},
- {24, 251, 2155, L"Новочебоксарск"},
- {24, 251, 2153, L"Цивильск"},
- {24, 251, 592, L"Чебоксары"},
- {24, 251, 2157, L"Шумерля"},
- {24, 251, 2154, L"Ядрин"},
- {24, 251, 2286, L"Другое"},
- {24, 238, 2168, L"Белая Холуница"},
- {24, 238, 503, L"Вятские Поляны"},
- {24, 238, 2164, L"Зуевка"},
- {24, 238, 504, L"Киров"},
- {24, 238, 505, L"Кирово-Чепецк"},
- {24, 238, 2160, L"Кирс"},
- {24, 238, 506, L"Котельнич"},
- {24, 238, 2167, L"Луза"},
- {24, 238, 2159, L"Малмыж"},
- {24, 238, 2169, L"Мураши"},
- {24, 238, 2163, L"Нолинск"},
- {24, 238, 2170, L"Омутнинск"},
- {24, 238, 2166, L"Слободской"},
- {24, 238, 2165, L"Советск"},
- {24, 238, 2162, L"Сосновка"},
- {24, 238, 2171, L"Уржум"},
- {24, 238, 2161, L"Халтурин"},
- {24, 238, 507, L"Яранск"},
- {24, 238, 2237, L"Другое"},
- {24, 242, 516, L"Арзамас"},
- {24, 242, 517, L"Балахна"},
- {24, 242, 2139, L"Богородск"},
- {24, 242, 518, L"Бор"},
- {24, 242, 519, L"Вахтан"},
- {24, 242, 520, L"Ветлуга"},
- {24, 242, 2140, L"Володарск"},
- {24, 242, 2138, L"Ворсма"},
- {24, 242, 521, L"Выкса"},
- {24, 242, 2137, L"Горбатов"},
- {24, 242, 522, L"Городец"},
- {24, 242, 523, L"Дзержинск"},
- {24, 242, 524, L"Заволжье"},
- {24, 242, 2891, L"Ильиногорск"},
- {24, 242, 525, L"Кстово"},
- {24, 242, 2145, L"Кулебаки"},
- {24, 242, 2143, L"Лукоянов"},
- {24, 242, 2144, L"Лысково"},
- {24, 242, 2146, L"Навашино"},
- {24, 242, 526, L"Нижний Новгород"},
- {24, 242, 527, L"Павлово"},
- {24, 242, 2135, L"Первомайск"},
- {24, 242, 528, L"Саров"},
- {24, 242, 529, L"Семенов"},
- {24, 242, 530, L"Сергач"},
- {24, 242, 2141, L"Урень"},
- {24, 242, 2136, L"Чкаловск"},
- {24, 242, 2897, L"Шатки"},
- {24, 242, 2142, L"Шахунья"},
- {24, 242, 2251, L"Другое"},
- {24, 243, 2678, L"Абдулино"},
- {24, 243, 2673, L"Бугуруслан"},
- {24, 243, 531, L"Бузулук"},
- {24, 243, 532, L"Гай"},
- {24, 243, 2674, L"Кувандык"},
- {24, 243, 2675, L"Медногорск"},
- {24, 243, 533, L"Новотроицк"},
- {24, 243, 535, L"Оренбург"},
- {24, 243, 536, L"Орск"},
- {24, 243, 3360, L"Саракташ"},
- {24, 243, 2677, L"Соль-Илецк"},
- {24, 243, 2676, L"Сорочинск"},
- {24, 243, 537, L"Тоцкое"},
- {24, 243, 538, L"Ясный"},
- {24, 243, 2254, L"Другое"},
- {24, 244, 539, L"Беднодемьяновск"},
- {24, 244, 2597, L"Белинский"},
- {24, 244, 2595, L"Городище"},
- {24, 244, 2593, L"Каменка"},
- {24, 244, 540, L"Кузнецк"},
- {24, 244, 2598, L"Нижний Ломов"},
- {24, 244, 2592, L"Никольск"},
- {24, 244, 541, L"Пенза"},
- {24, 244, 3304, L"Русский Камешкир"},
- {24, 244, 2596, L"Сердобск"},
- {24, 244, 2594, L"Сурск"},
- {24, 244, 2256, L"Другое"},
- {24, 245, 2690, L"Александровск"},
- {24, 245, 542, L"Березники"},
- {24, 245, 2679, L"Верещагино"},
- {24, 245, 2680, L"Горнозаводск"},
- {24, 245, 2687, L"Гремячинск"},
- {24, 245, 2686, L"Губаха"},
- {24, 245, 543, L"Добрянка"},
- {24, 245, 544, L"Кизел"},
- {24, 245, 2681, L"Красновишерск"},
- {24, 245, 545, L"Краснокамск"},
- {24, 245, 546, L"Кунгур"},
- {24, 245, 547, L"Лысьва"},
- {24, 245, 548, L"Нытва"},
- {24, 245, 2683, L"Оса"},
- {24, 245, 2684, L"Оханск"},
- {24, 245, 2682, L"Очер"},
- {24, 245, 549, L"Пермь"},
- {24, 245, 550, L"Соликамск"},
- {24, 245, 2685, L"Усолье"},
- {24, 245, 551, L"Чайковский"},
- {24, 245, 2689, L"Чердынь"},
- {24, 245, 2688, L"Чермоз"},
- {24, 245, 552, L"Чернушка"},
- {24, 245, 553, L"Чусовой"},
- {24, 245, 2257, L"Другое"},
- {24, 246, 554, L"Волжский"},
- {24, 246, 555, L"Жигулевск"},
- {24, 246, 2599, L"Кинель"},
- {24, 246, 3293, L"Красный Яр"},
- {24, 246, 2602, L"Нефтегорск"},
- {24, 246, 556, L"Новокуйбышевск"},
- {24, 246, 2600, L"Октябрьск"},
- {24, 246, 557, L"Отрадный"},
- {24, 246, 558, L"Похвистнево"},
- {24, 246, 559, L"Самара"},
- {24, 246, 560, L"Сызрань"},
- {24, 246, 561, L"Тольятти"},
- {24, 246, 2601, L"Чапаевск"},
- {24, 246, 562, L"Шигоны"},
- {24, 246, 2261, L"Другое"},
- {24, 247, 2613, L"Аркадак"},
- {24, 247, 2606, L"Аткарск"},
- {24, 247, 563, L"Балаково"},
- {24, 247, 564, L"Балашов"},
- {24, 247, 565, L"Вольск"},
- {24, 247, 2608, L"Ершов"},
- {24, 247, 2607, L"Калининск"},
- {24, 247, 2609, L"Красноармейск"},
- {24, 247, 2610, L"Красный Кут"},
- {24, 247, 2605, L"Маркс"},
- {24, 247, 566, L"Новоузенск"},
- {24, 247, 2603, L"Петровск"},
- {24, 247, 2604, L"Пугачев"},
- {24, 247, 2612, L"Ртищево"},
- {24, 247, 567, L"Саратов"},
- {24, 247, 2611, L"Хвалынск"},
- {24, 247, 568, L"Энгельс"},
- {24, 247, 3267, L"Энгельс-12"},
- {24, 247, 2262, L"Другое"},
- {24, 250, 2614, L"Барыш"},
- {24, 250, 588, L"Димитровград"},
- {24, 250, 2615, L"Инза"},
- {24, 250, 589, L"Новоспасское"},
- {24, 250, 2616, L"Новоульяновск"},
- {24, 250, 590, L"Сенгилей"},
- {24, 250, 591, L"Ульяновск"},
- {24, 250, 2278, L"Другое"},
- {24, 239, 508, L"Кудымкар"},
- {24, 239, 2238, L"Другое"},
- {24, 255, 1355, L"Беломорск"},
- {24, 255, 1356, L"Кемь"},
- {24, 255, 1357, L"Кондопога"},
- {24, 255, 1358, L"Костомукша"},
- {24, 255, 1359, L"Коткозеро"},
- {24, 255, 1360, L"Лахденпохья"},
- {24, 255, 1362, L"Лоухи"},
- {24, 255, 1361, L"Медвежьегорск"},
- {24, 255, 3286, L"Муезерский"},
- {24, 255, 1937, L"Олонец"},
- {24, 255, 1363, L"Петрозаводск"},
- {24, 255, 1938, L"Питкяранта"},
- {24, 255, 3287, L"Пряжа"},
- {24, 255, 1936, L"Пудож"},
- {24, 255, 1364, L"Сегежа"},
- {24, 255, 1365, L"Сортавала"},
- {24, 255, 1939, L"Суоярви"},
- {24, 255, 2201, L"Другое"},
- {24, 256, 1366, L"Воркута"},
- {24, 256, 1367, L"Вуктыл"},
- {24, 256, 2202, L"Емва"},
- {24, 256, 1368, L"Инта"},
- {24, 256, 1940, L"Микунь"},
- {24, 256, 1369, L"Печора"},
- {24, 256, 1941, L"Сосногорск"},
- {24, 256, 1370, L"Сыктывкар"},
- {24, 256, 1371, L"Усинск"},
- {24, 256, 1372, L"Ухта"},
- {24, 256, 2203, L"Другое"},
- {24, 252, 593, L"Архангельск"},
- {24, 252, 594, L"Вельск"},
- {24, 252, 1945, L"Каргополь"},
- {24, 252, 595, L"Коряжма"},
- {24, 252, 596, L"Котлас"},
- {24, 252, 1944, L"Мезень"},
- {24, 252, 597, L"Мирный"},
- {24, 252, 598, L"Новодвинск"},
- {24, 252, 1946, L"Няндома"},
- {24, 252, 599, L"Онега"},
- {24, 252, 600, L"Пинега"},
- {24, 252, 601, L"Северодвинск"},
- {24, 252, 1942, L"Сольвычегодск"},
- {24, 252, 3239, L"Холмогоры"},
- {24, 252, 1943, L"Шенкурск"},
- {24, 252, 2204, L"Другое"},
- {24, 253, 1950, L"Бабаево"},
- {24, 253, 1949, L"Белозерск"},
- {24, 253, 1338, L"Великий Устюг"},
- {24, 253, 1339, L"Вологда"},
- {24, 253, 1951, L"Вытегра"},
- {24, 253, 1340, L"Грязовец"},
- {24, 253, 1952, L"Кадников"},
- {24, 253, 2871, L"Кадуй"},
- {24, 253, 1341, L"Кириллов"},
- {24, 253, 1955, L"Красавино"},
- {24, 253, 1342, L"Михайловка"},
- {24, 253, 1947, L"Никольск"},
- {24, 253, 1343, L"Сокол"},
- {24, 253, 1953, L"Тотьма"},
- {24, 253, 1954, L"Устюжна"},
- {24, 253, 1948, L"Харовск"},
- {24, 253, 1344, L"Череповец"},
- {24, 253, 2205, L"Другое"},
- {24, 254, 2838, L"Багратионовск"},
- {24, 254, 1345, L"Балтийск"},
- {24, 254, 2846, L"Гвардейск"},
- {24, 254, 2843, L"Гурьевск"},
- {24, 254, 1346, L"Гусев"},
- {24, 254, 1347, L"Зеленоградск"},
- {24, 254, 1348, L"Калининград"},
- {24, 254, 2842, L"Краснознаменск"},
- {24, 254, 2845, L"Ладушкин"},
- {24, 254, 2848, L"Мамоново"},
- {24, 254, 2837, L"Неман"},
- {24, 254, 2844, L"Нестеров"},
- {24, 254, 1349, L"Озерск"},
- {24, 254, 2841, L"Полесск"},
- {24, 254, 2839, L"Правдинск"},
- {24, 254, 1350, L"Приморск"},
- {24, 254, 1351, L"Светлогорск"},
- {24, 254, 1352, L"Светлый"},
- {24, 254, 2840, L"Славск"},
- {24, 254, 1353, L"Советск"},
- {24, 254, 1354, L"Черняховск"},
- {24, 254, 2231, L"Другое"},
- {24, 257, 1985, L"Бокситогорск"},
- {24, 257, 1374, L"Волхов"},
- {24, 257, 1373, L"Всеволожск"},
- {24, 257, 1375, L"Выборг"},
- {24, 257, 1995, L"Высоцк"},
- {24, 257, 1376, L"Гатчина"},
- {24, 257, 1378, L"Ивангород"},
- {24, 257, 1993, L"Каменногорск"},
- {24, 257, 1379, L"Кингисепп"},
- {24, 257, 1380, L"Кириши"},
- {24, 257, 1381, L"Кировск"},
- {24, 257, 1384, L"Кузьмоловский"},
- {24, 257, 1984, L"Лодейное Поле"},
- {24, 257, 1990, L"Луга"},
- {24, 257, 1994, L"Любань"},
- {24, 257, 1386, L"Никольское"},
- {24, 257, 1987, L"Новая Ладога"},
- {24, 257, 1996, L"Отрадное"},
- {24, 257, 1986, L"Пикалево"},
- {24, 257, 1983, L"Подпорожье"},
- {24, 257, 1992, L"Приморск"},
- {24, 257, 1988, L"Приозерск"},
- {24, 257, 3071, L"Пушкин"},
- {24, 257, 1989, L"Светогорск"},
- {24, 257, 1389, L"Сертолово"},
- {24, 257, 1991, L"Сланцы"},
- {24, 257, 1391, L"Сосновый Бор"},
- {24, 257, 1392, L"Тихвин"},
- {24, 257, 1393, L"Тосно"},
- {24, 257, 1394, L"Шлиссельбург"},
- {24, 257, 2207, L"Другое"},
- {24, 258, 1395, L"Апатиты"},
- {24, 258, 1959, L"Заполярный"},
- {24, 258, 1396, L"Зареченск"},
- {24, 258, 1397, L"Кандалакша"},
- {24, 258, 1398, L"Кировск"},
- {24, 258, 1399, L"Ковдор"},
- {24, 258, 1958, L"Кола"},
- {24, 258, 1400, L"Мончегорск"},
- {24, 258, 1401, L"Мурманск"},
- {24, 258, 1402, L"Мурмаши"},
- {24, 258, 1403, L"Оленегорск"},
- {24, 258, 1404, L"Полярные Зори"},
- {24, 258, 1956, L"Полярный"},
- {24, 258, 1957, L"Североморск"},
- {24, 258, 3288, L"Снежногорск"},
- {24, 258, 2206, L"Другое"},
- {24, 260, 1406, L"Батецкий"},
- {24, 260, 2001, L"Боровичи"},
- {24, 260, 2003, L"Валдай"},
- {24, 260, 1407, L"Великий Новгород"},
- {24, 260, 1408, L"Крестцы"},
- {24, 260, 2002, L"Малая Вишера"},
- {24, 260, 1409, L"Окуловка"},
- {24, 260, 2000, L"Пестово"},
- {24, 260, 1997, L"Сольцы"},
- {24, 260, 1410, L"Старая Русса"},
- {24, 260, 1998, L"Холм"},
- {24, 260, 1999, L"Чудово"},
- {24, 260, 2208, L"Другое"},
- {24, 261, 1412, L"Великие Луки"},
- {24, 261, 2004, L"Гдов"},
- {24, 261, 2009, L"Дно"},
- {24, 261, 2005, L"Невель"},
- {24, 261, 1413, L"Новоржев"},
- {24, 261, 2006, L"Опочка"},
- {24, 261, 2008, L"Остров"},
- {24, 261, 1414, L"Печоры"},
- {24, 261, 1415, L"Порхов"},
- {24, 261, 1411, L"Псков"},
- {24, 261, 1416, L"Пустошка"},
- {24, 261, 2007, L"Пыталово"},
- {24, 261, 1417, L"Себеж"},
- {24, 261, 2209, L"Другое"},
- {24, 259, 1405, L"Нарьян-Мар"},
- {24, 259, 2250, L"Другое"},
- {24, 265, 2764, L"Бабушкин"},
- {24, 265, 2760, L"Гусиноозерск"},
- {24, 265, 2762, L"Закаменск"},
- {24, 265, 2763, L"Кяхта"},
- {24, 265, 2761, L"Северобайкальск"},
- {24, 265, 1446, L"Улан-Удэ"},
- {24, 265, 2222, L"Другое"},
- {24, 263, 1439, L"Горно-Алтайск"},
- {24, 263, 2215, L"Другое"},
- {24, 273, 2766, L"Ак-Довурак"},
- {24, 273, 1494, L"Кызыл"},
- {24, 273, 2768, L"Новый Шагонар"},
- {24, 273, 2767, L"Туран"},
- {24, 273, 2765, L"Чадан"},
- {24, 273, 2275, L"Другое"},
- {24, 275, 2769, L"Абаза"},
- {24, 275, 1496, L"Абакан"},
- {24, 275, 1497, L"Саяногорск"},
- {24, 275, 2770, L"Сорск"},
- {24, 275, 2771, L"Черногорск"},
- {24, 275, 2281, L"Другое"},
- {24, 264, 1440, L"Алейск"},
- {24, 264, 1441, L"Барнаул"},
- {24, 264, 1442, L"Белокуриха"},
- {24, 264, 1443, L"Бийск"},
- {24, 264, 2728, L"Горняк"},
- {24, 264, 2731, L"Заринск"},
- {24, 264, 2729, L"Змеиногорск"},
- {24, 264, 2732, L"Камень-на-Оби"},
- {24, 264, 3292, L"Кулунда"},
- {24, 264, 2730, L"Новоалтайск"},
- {24, 264, 1444, L"Рубцовск"},
- {24, 264, 1445, L"Славгород"},
- {24, 264, 3231, L"Яровое"},
- {24, 264, 2216, L"Другое"},
- {24, 268, 2781, L"Артемовск"},
- {24, 268, 1469, L"Ачинск"},
- {24, 268, 2784, L"Боготол"},
- {24, 268, 2773, L"Бородино"},
- {24, 268, 2774, L"Дивногорск"},
- {24, 268, 3122, L"Емельяновск"},
- {24, 268, 2772, L"Енисейск"},
- {24, 268, 3294, L"Железногорск"},
- {24, 268, 2777, L"Заозерный"},
- {24, 268, 1470, L"Игарка"},
- {24, 268, 2778, L"Иланский"},
- {24, 268, 2782, L"Канск"},
- {24, 268, 2783, L"Кодинский"},
- {24, 268, 1471, L"Красноярск"},
- {24, 268, 1472, L"Лесосибирск"},
- {24, 268, 1473, L"Минусинск"},
- {24, 268, 2775, L"Назарово"},
- {24, 268, 2776, L"Сосновоборск"},
- {24, 268, 2780, L"Ужур"},
- {24, 268, 2779, L"Уяр"},
- {24, 268, 2785, L"Шарыпово"},
- {24, 268, 1474, L"Шушенское"},
- {24, 268, 2242, L"Другое"},
- {24, 266, 2792, L"Алзамай"},
- {24, 266, 1447, L"Ангарск"},
- {24, 266, 1448, L"Байкальск"},
- {24, 266, 2791, L"Бирюсинск"},
- {24, 266, 1450, L"Бодайбо"},
- {24, 266, 1451, L"Братск"},
- {24, 266, 2793, L"Вихоревка"},
- {24, 266, 2789, L"Железногорск-Илимский"},
- {24, 266, 2786, L"Зима"},
- {24, 266, 1452, L"Иркутск"},
- {24, 266, 2794, L"Киренск"},
- {24, 266, 2787, L"Нижнеудинск"},
- {24, 266, 1449, L"Саянск"},
- {24, 266, 2790, L"Свирск"},
- {24, 266, 1453, L"Слюдянка"},
- {24, 266, 2788, L"Тайшет"},
- {24, 266, 1454, L"Тулун"},
- {24, 266, 1455, L"Усолье-Сибирское"},
- {24, 266, 2908, L"Усольск"},
- {24, 266, 1456, L"Усть-Илимск"},
- {24, 266, 1457, L"Усть-Кут"},
- {24, 266, 1458, L"Хужир"},
- {24, 266, 1459, L"Черемхово"},
- {24, 266, 2795, L"Шелехов"},
- {24, 266, 2229, L"Другое"},
- {24, 267, 2737, L"Анжеро-Суджинск"},
- {24, 267, 2740, L"Белово"},
- {24, 267, 2746, L"Березовский"},
- {24, 267, 2739, L"Гурьевск"},
- {24, 267, 2742, L"Калтан"},
- {24, 267, 1460, L"Кемерово"},
- {24, 267, 1461, L"Киселевск"},
- {24, 267, 2738, L"Ленинск-Кузнецкий"},
- {24, 267, 2745, L"Мариинск"},
- {24, 267, 1462, L"Междуреченск"},
- {24, 267, 1463, L"Мыски"},
- {24, 267, 1464, L"Новокузнецк"},
- {24, 267, 2744, L"Осинники"},
- {24, 267, 3358, L"Полысаево"},
- {24, 267, 1465, L"Прокопьевск"},
- {24, 267, 1466, L"Салаир"},
- {24, 267, 2743, L"Тайга"},
- {24, 267, 2741, L"Таштагол"},
- {24, 267, 1467, L"Топки"},
- {24, 267, 1468, L"Юрга"},
- {24, 267, 2236, L"Другое"},
- {24, 269, 1475, L"Баган"},
- {24, 269, 1476, L"Барабинск"},
- {24, 269, 1477, L"Бердск"},
- {24, 269, 2750, L"Болотное"},
- {24, 269, 1478, L"Искитим"},
- {24, 269, 2752, L"Карасук"},
- {24, 269, 2751, L"Каргат"},
- {24, 269, 3107, L"Краснообск"},
- {24, 269, 2753, L"Куйбышев"},
- {24, 269, 2755, L"Купино"},
- {24, 269, 1479, L"Новосибирск"},
- {24, 269, 2759, L"Обь"},
- {24, 269, 2756, L"Татарск"},
- {24, 269, 2758, L"Тогучин"},
- {24, 269, 2757, L"Черепаново"},
- {24, 269, 2754, L"Чулым"},
- {24, 269, 2252, L"Другое"},
- {24, 270, 2733, L"Исилькуль"},
- {24, 270, 1480, L"Калачинск"},
- {24, 270, 1481, L"Марьяновка"},
- {24, 270, 2735, L"Называевск"},
- {24, 270, 1482, L"Омск"},
- {24, 270, 2734, L"Тара"},
- {24, 270, 2736, L"Тюкалинск"},
- {24, 270, 2253, L"Другое"},
- {24, 272, 1488, L"Асино"},
- {24, 272, 1489, L"Белый Яр"},
- {24, 272, 3295, L"Каргасок"},
- {24, 272, 1491, L"Колпашево"},
- {24, 272, 1492, L"Северск"},
- {24, 272, 1493, L"Стрежевой"},
- {24, 272, 1490, L"Томск"},
- {24, 272, 2273, L"Другое"},
- {24, 276, 2803, L"Балей"},
- {24, 276, 2799, L"Борзя"},
- {24, 276, 1499, L"Краснокаменск"},
- {24, 276, 2801, L"Могоча"},
- {24, 276, 2800, L"Нерчинск"},
- {24, 276, 2802, L"Петровск-Забайкальский"},
- {24, 276, 2798, L"Сретенск"},
- {24, 276, 2796, L"Хилок"},
- {24, 276, 1498, L"Чита"},
- {24, 276, 2797, L"Шилка"},
- {24, 276, 2285, L"Другое"},
- {24, 262, 1438, L"Агинское"},
- {24, 262, 2213, L"Другое"},
- {24, 271, 3233, L"Диксон"},
- {24, 271, 1485, L"Дудинка"},
- {24, 271, 1487, L"Кайеркан"},
- {24, 271, 1483, L"Норильск"},
- {24, 271, 1484, L"Талнах"},
- {24, 271, 1486, L"Хатанга"},
- {24, 271, 2269, L"Другое"},
- {24, 274, 1495, L"Усть-Ордынский"},
- {24, 274, 2279, L"Другое"},
- {24, 277, 1500, L"Тура"},
- {24, 277, 2288, L"Другое"},
- {24, 278, 2668, L"Далматово"},
- {24, 278, 2667, L"Катайск"},
- {24, 278, 1524, L"Курган"},
- {24, 278, 2669, L"Куртамыш"},
- {24, 278, 2666, L"Макушино"},
- {24, 278, 2671, L"Петухово"},
- {24, 278, 1525, L"Шадринск"},
- {24, 278, 2670, L"Шумиха"},
- {24, 278, 2672, L"Щучье"},
- {24, 278, 2243, L"Другое"},
- {24, 279, 1526, L"Алапаевск"},
- {24, 279, 1527, L"Арамиль"},
- {24, 279, 2691, L"Артемовский"},
- {24, 279, 1528, L"Асбест"},
- {24, 279, 2924, L"Белоярский"},
- {24, 279, 2707, L"Березовский"},
- {24, 279, 1529, L"Богданович"},
- {24, 279, 2698, L"Верхний Тагил"},
- {24, 279, 1530, L"Верхняя Пышма"},
- {24, 279, 1531, L"Верхняя Салда"},
- {24, 279, 1532, L"Верхняя Синячиха"},
- {24, 279, 2696, L"Верхняя Тура"},
- {24, 279, 2692, L"Верхотурье"},
- {24, 279, 2706, L"Волчанск"},
- {24, 279, 2709, L"Дегтярск"},
- {24, 279, 1533, L"Екатеринбург"},
- {24, 279, 1534, L"Заречный"},
- {24, 279, 1535, L"Ивдель"},
- {24, 279, 1536, L"Ирбит"},
- {24, 279, 1537, L"Каменск-Уральский"},
- {24, 279, 1538, L"Камышлов"},
- {24, 279, 2708, L"Карпинск"},
- {24, 279, 1539, L"Качканар"},
- {24, 279, 2712, L"Кировград"},
- {24, 279, 1540, L"Краснотурьинск"},
- {24, 279, 2694, L"Красноуральск"},
- {24, 279, 2693, L"Красноуфимск"},
- {24, 279, 1541, L"Кушва"},
- {24, 279, 2711, L"Михайловск"},
- {24, 279, 2713, L"Михайловск"},
- {24, 279, 1542, L"Невьянск"},
- {24, 279, 2702, L"Нижние Серги"},
- {24, 279, 1543, L"Нижний Тагил"},
- {24, 279, 2695, L"Нижняя Салда"},
- {24, 279, 2697, L"Нижняя Тура"},
- {24, 279, 2699, L"Новая Ляля"},
- {24, 279, 2909, L"Новоуральск"},
- {24, 279, 1544, L"Первоуральск"},
- {24, 279, 1545, L"Полевской"},
- {24, 279, 1546, L"Ревда"},
- {24, 279, 1547, L"Реж"},
- {24, 279, 3296, L"Рефтинский"},
- {24, 279, 2700, L"Североуральск"},
- {24, 279, 1548, L"Серов"},
- {24, 279, 2710, L"Среднеуральск"},
- {24, 279, 2701, L"Сухой Лог"},
- {24, 279, 2703, L"Сысерть"},
- {24, 279, 1549, L"Тавда"},
- {24, 279, 2704, L"Талица"},
- {24, 279, 2705, L"Туринск"},
- {24, 279, 2265, L"Другое"},
- {24, 280, 1550, L"Заводоуковск"},
- {24, 280, 1551, L"Ишим"},
- {24, 280, 3326, L"Сургут"},
- {24, 280, 1552, L"Тобольск"},
- {24, 280, 1553, L"Тюмень"},
- {24, 280, 2748, L"Ялуторовск"},
- {24, 280, 2276, L"Другое"},
- {24, 282, 1564, L"Аша"},
- {24, 282, 2723, L"Бакал"},
- {24, 282, 2724, L"Верхнеуральск"},
- {24, 282, 2716, L"Верхний Уфалей"},
- {24, 282, 3297, L"Всеволожск"},
- {24, 282, 2725, L"Еманжелинск"},
- {24, 282, 1565, L"Златоуст"},
- {24, 282, 2722, L"Карабаш"},
- {24, 282, 1566, L"Карталы"},
- {24, 282, 2718, L"Касли"},
- {24, 282, 2720, L"Катав-Ивановск"},
- {24, 282, 1567, L"Копейск"},
- {24, 282, 2721, L"Коркино"},
- {24, 282, 2715, L"Куса"},
- {24, 282, 1568, L"Кыштым"},
- {24, 282, 1569, L"Магнитогорск"},
- {24, 282, 1570, L"Миасс"},
- {24, 282, 2726, L"Миньяр"},
- {24, 282, 2717, L"Нязепетровск"},
- {24, 282, 3100, L"Озерск"},
- {24, 282, 1571, L"Пласт"},
- {24, 282, 2719, L"Сатка"},
- {24, 282, 2727, L"Сим"},
- {24, 282, 1572, L"Снежинск"},
- {24, 282, 3332, L"Трехгорный"},
- {24, 282, 1573, L"Троицк"},
- {24, 282, 1574, L"Усть-Катав"},
- {24, 282, 1575, L"Чебаркуль"},
- {24, 282, 1576, L"Челябинск"},
- {24, 282, 1577, L"Южноуральск"},
- {24, 282, 2714, L"Юрюзань"},
- {24, 282, 2283, L"Другое"},
- {24, 281, 2749, L"Белоярский"},
- {24, 281, 1554, L"Игрим"},
- {24, 281, 1555, L"Когалым"},
- {24, 281, 1556, L"Лангепас"},
- {24, 281, 1561, L"Мегион"},
- {24, 281, 1562, L"Нефтеюганск"},
- {24, 281, 1559, L"Нижневартовск"},
- {24, 281, 2852, L"Нягань"},
- {24, 281, 2853, L"Нягань"},
- {24, 281, 2854, L"Пыть-Ях"},
- {24, 281, 1560, L"Радужный"},
- {24, 281, 1563, L"Советский"},
- {24, 281, 2747, L"Сургут"},
- {24, 281, 1557, L"Урай"},
- {24, 281, 1558, L"Ханты-Мансийск"},
- {24, 281, 3344, L"Югорск"},
- {24, 281, 2282, L"Другое"},
- {24, 283, 3298, L"Губкинский"},
- {24, 283, 1578, L"Лабытнанги"},
- {24, 283, 2856, L"Муравленко"},
- {24, 283, 1579, L"Надым"},
- {24, 283, 1580, L"Новый Уренгой"},
- {24, 283, 1581, L"Ноябрьск"},
- {24, 283, 1582, L"Салехард"},
- {24, 283, 1583, L"Уренгой"},
- {24, 283, 2289, L"Другое"},
- {24, 284, 1625, L"Алексеевка"},
- {24, 284, 1626, L"Белгород"},
- {24, 284, 2172, L"Валуйки"},
- {24, 284, 2173, L"Грайворон"},
- {24, 284, 1627, L"Губкин"},
- {24, 284, 2174, L"Короча"},
- {24, 284, 2175, L"Новый Оскол"},
- {24, 284, 1628, L"Старый Оскол"},
- {24, 284, 1629, L"Шебекино"},
- {24, 284, 2221, L"Другое"},
- {24, 285, 1630, L"Брянск"},
- {24, 285, 3283, L"Дебрянск"},
- {24, 285, 1631, L"Дятьково"},
- {24, 285, 2013, L"Жуковка"},
- {24, 285, 2015, L"Злынка"},
- {24, 285, 1632, L"Карачев"},
- {24, 285, 1633, L"Клинцы"},
- {24, 285, 1634, L"Мглин"},
- {24, 285, 2016, L"Новозыбков"},
- {24, 285, 2018, L"Почеп"},
- {24, 285, 2017, L"Севск"},
- {24, 285, 2020, L"Сельцо"},
- {24, 285, 2014, L"Стародуб"},
- {24, 285, 2010, L"Сураж"},
- {24, 285, 2012, L"Трубчевск"},
- {24, 285, 2011, L"Унеча"},
- {24, 285, 2019, L"Фокино"},
- {24, 285, 2210, L"Другое"},
- {24, 286, 1635, L"Александров"},
- {24, 286, 1636, L"Владимир"},
- {24, 286, 2021, L"Вязники"},
- {24, 286, 1637, L"Головино"},
- {24, 286, 2022, L"Гороховец"},
- {24, 286, 1638, L"Гусь-Хрустальный"},
- {24, 286, 2023, L"Камешково"},
- {24, 286, 2031, L"Карабаново"},
- {24, 286, 2024, L"Киржач"},
- {24, 286, 1639, L"Ковров"},
- {24, 286, 1640, L"Кольчугино"},
- {24, 286, 2026, L"Костерево"},
- {24, 286, 3299, L"Красная Горбатка"},
- {24, 286, 2033, L"Лакинск"},
- {24, 286, 2025, L"Меленки"},
- {24, 286, 1641, L"Муром"},
- {24, 286, 1642, L"Петушки"},
- {24, 286, 2027, L"Покров"},
- {24, 286, 2211, L"Радужный"},
- {24, 286, 2028, L"Собинка"},
- {24, 286, 2032, L"Струнино"},
- {24, 286, 2029, L"Судогда"},
- {24, 286, 1643, L"Суздаль"},
- {24, 286, 2030, L"Юрьев-Польский"},
- {24, 286, 2212, L"Другое"},
- {24, 287, 1644, L"Бобров"},
- {24, 287, 1645, L"Богучар"},
- {24, 287, 1646, L"Борисоглебск"},
- {24, 287, 1647, L"Бутурлиновка"},
- {24, 287, 1648, L"Воронеж"},
- {24, 287, 2178, L"Калач"},
- {24, 287, 2176, L"Лиски"},
- {24, 287, 1649, L"Нововоронеж"},
- {24, 287, 2177, L"Новохоперск"},
- {24, 287, 2180, L"Острогожск"},
- {24, 287, 1650, L"Павловск"},
- {24, 287, 2181, L"Поворино"},
- {24, 287, 1651, L"Россошь"},
- {24, 287, 2179, L"Семилуки"},
- {24, 287, 2182, L"Эртиль"},
- {24, 287, 2224, L"Другое"},
- {24, 288, 1652, L"Вичуга"},
- {24, 288, 2036, L"Гаврилов Посад"},
- {24, 288, 1657, L"Заволжск"},
- {24, 288, 1653, L"Иваново"},
- {24, 288, 1656, L"Кинешма"},
- {24, 288, 2040, L"Комсомольск"},
- {24, 288, 2037, L"Кохма"},
- {24, 288, 2043, L"Наволоки"},
- {24, 288, 3300, L"Палех"},
- {24, 288, 2039, L"Плес"},
- {24, 288, 2038, L"Приволжск"},
- {24, 288, 2042, L"Пучеж"},
- {24, 288, 2044, L"Родники"},
- {24, 288, 1655, L"Тейково"},
- {24, 288, 2034, L"Фурманов"},
- {24, 288, 1654, L"Шуя"},
- {24, 288, 2041, L"Южа"},
- {24, 288, 2035, L"Юрьевец"},
- {24, 288, 2227, L"Другое"},
- {24, 289, 2050, L"Балабаново"},
- {24, 289, 2051, L"Боровск"},
- {24, 289, 3301, L"Воротынск"},
- {24, 289, 2052, L"Жиздра"},
- {24, 289, 1660, L"Жуковка"},
- {24, 289, 1658, L"Калуга"},
- {24, 289, 2046, L"Киров"},
- {24, 289, 1661, L"Козельск"},
- {24, 289, 2053, L"Кондрово"},
- {24, 289, 2049, L"Людиново"},
- {24, 289, 1659, L"Малоярославец"},
- {24, 289, 2054, L"Медынь"},
- {24, 289, 2055, L"Мещовск"},
- {24, 289, 2047, L"Мосальск"},
- {24, 289, 1662, L"Обнинск"},
- {24, 289, 2057, L"Сосенский"},
- {24, 289, 2056, L"Спас-Демянск"},
- {24, 289, 2045, L"Сухиничи"},
- {24, 289, 1663, L"Таруса"},
- {24, 289, 2131, L"Чекалин"},
- {24, 289, 2048, L"Юхнов"},
- {24, 289, 2233, L"Другое"},
- {24, 290, 1664, L"Буй"},
- {24, 290, 1665, L"Волгореченск"},
- {24, 290, 1666, L"Галич"},
- {24, 290, 2059, L"Кологрив"},
- {24, 290, 1667, L"Кострома"},
- {24, 290, 3302, L"Красное-на-Волге"},
- {24, 290, 1668, L"Макарьев"},
- {24, 290, 2060, L"Мантурово"},
- {24, 290, 1669, L"Нерехта"},
- {24, 290, 2061, L"Нея"},
- {24, 290, 2062, L"Солигалич"},
- {24, 290, 2058, L"Чухлома"},
- {24, 290, 1670, L"Шарья"},
- {24, 290, 2240, L"Другое"},
- {24, 291, 1671, L"Дмитриев-Льговский"},
- {24, 291, 1673, L"Железногорск"},
- {24, 291, 3279, L"Железногорск"},
- {24, 291, 1672, L"Курск"},
- {24, 291, 2187, L"Курчатов"},
- {24, 291, 2188, L"Льгов"},
- {24, 291, 2184, L"Обоянь"},
- {24, 291, 2185, L"Рыльск"},
- {24, 291, 2183, L"Суджа"},
- {24, 291, 2189, L"Фатеж"},
- {24, 291, 2186, L"Щигры"},
- {24, 291, 2244, L"Другое"},
- {24, 292, 2194, L"Грязи"},
- {24, 292, 2193, L"Данков"},
- {24, 292, 1674, L"Елец"},
- {24, 292, 2190, L"Задонск"},
- {24, 292, 2195, L"Лебедянь"},
- {24, 292, 1675, L"Липецк"},
- {24, 292, 2192, L"Усмань"},
- {24, 292, 2191, L"Чаплыгин"},
- {24, 292, 2245, L"Другое"},
- {24, 293, 1733, L"Апрелевка"},
- {24, 293, 1732, L"Балашиха"},
- {24, 293, 1731, L"Бронницы"},
- {24, 293, 1730, L"Верея"},
- {24, 293, 2063, L"Видное"},
- {24, 293, 2064, L"Волоколамск"},
- {24, 293, 1729, L"Воскресенск"},
- {24, 293, 1728, L"Высоковск"},
- {24, 293, 1727, L"Голицыно"},
- {24, 293, 2065, L"Дедовск"},
- {24, 293, 1726, L"Дзержинский"},
- {24, 293, 1725, L"Дмитров"},
- {24, 293, 1724, L"Долгопрудный"},
- {24, 293, 1723, L"Домодедово"},
- {24, 293, 2066, L"Дрезна"},
- {24, 293, 1722, L"Дубна"},
- {24, 293, 1721, L"Егорьевск"},
- {24, 293, 1720, L"Железнодорожный"},
- {24, 293, 1719, L"Жуковский"},
- {24, 293, 2067, L"Зарайск"},
- {24, 293, 1718, L"Звенигород"},
- {24, 293, 1715, L"Ивантеевка"},
- {24, 293, 1717, L"Истра"},
- {24, 293, 2068, L"Калининград"},
- {24, 293, 2069, L"Кашира"},
- {24, 293, 1716, L"Климовск"},
- {24, 293, 1714, L"Клин"},
- {24, 293, 1713, L"Коломна"},
- {24, 293, 1712, L"Королев"},
- {24, 293, 1711, L"Красноармейск"},
- {24, 293, 1710, L"Красногорск"},
- {24, 293, 2070, L"Краснозаводск"},
- {24, 293, 2071, L"Куровское"},
- {24, 293, 1709, L"Ликино-Дулево"},
- {24, 293, 1708, L"Лобня"},
- {24, 293, 2072, L"Лосино-Петровский"},
- {24, 293, 1707, L"Луховицы"},
- {24, 293, 1706, L"Лыткарино"},
- {24, 293, 1705, L"Люберцы"},
- {24, 293, 1704, L"Менделеево"},
- {24, 293, 1703, L"Можайск"},
- {24, 293, 1702, L"Мытищи"},
- {24, 293, 1701, L"Наро-Фоминск"},
- {24, 293, 1700, L"Ногинск"},
- {24, 293, 1698, L"Одинцово"},
- {24, 293, 2073, L"Ожерелье"},
- {24, 293, 2074, L"Озеры"},
- {24, 293, 1699, L"Орехово-Зуево"},
- {24, 293, 1697, L"Павловский Посад"},
- {24, 293, 1696, L"Подольск"},
- {24, 293, 1695, L"Протвино"},
- {24, 293, 1694, L"Пушкино"},
- {24, 293, 1693, L"Пущино"},
- {24, 293, 1692, L"Раменское"},
- {24, 293, 1691, L"Реутов"},
- {24, 293, 1690, L"Решетников"},
- {24, 293, 2075, L"Рошаль"},
- {24, 293, 2076, L"Руза"},
- {24, 293, 1689, L"Сергиев Посад"},
- {24, 293, 1688, L"Серпухов"},
- {24, 293, 1687, L"Солнечногорск"},
- {24, 293, 1686, L"Ступино"},
- {24, 293, 2077, L"Сходня"},
- {24, 293, 2078, L"Талдом"},
- {24, 293, 1685, L"Троицк"},
- {24, 293, 1684, L"Фрязино"},
- {24, 293, 1683, L"Химки"},
- {24, 293, 1682, L"Хотьково"},
- {24, 293, 1681, L"Черноголовка"},
- {24, 293, 1680, L"Чехов"},
- {24, 293, 1679, L"Шатура"},
- {24, 293, 1678, L"Щелково"},
- {24, 293, 2080, L"Щербинка"},
- {24, 293, 1677, L"Электрогорск"},
- {24, 293, 1676, L"Электросталь"},
- {24, 293, 2079, L"Электроугли"},
- {24, 293, 3031, L"Юбилейный"},
- {24, 293, 2081, L"Яхрома"},
- {24, 293, 2249, L"Другое"},
- {24, 294, 2083, L"Болхов"},
- {24, 294, 2082, L"Дмитровск-Орловский"},
- {24, 294, 3160, L"Залегощь"},
- {24, 294, 1736, L"Ливны"},
- {24, 294, 2084, L"Малоархангельск"},
- {24, 294, 1737, L"Мценск"},
- {24, 294, 2085, L"Новосиль"},
- {24, 294, 1735, L"Орел"},
- {24, 294, 2255, L"Другое"},
- {24, 295, 1740, L"Гусь-Железный"},
- {24, 295, 1741, L"Касимов"},
- {24, 295, 2086, L"Кораблино"},
- {24, 295, 2087, L"Михайлов"},
- {24, 295, 2089, L"Новомичуринск"},
- {24, 295, 2091, L"Рыбное"},
- {24, 295, 2093, L"Ряжск"},
- {24, 295, 1738, L"Рязань"},
- {24, 295, 3305, L"Сапожок"},
- {24, 295, 1739, L"Сасово"},
- {24, 295, 2090, L"Скопин"},
- {24, 295, 2088, L"Спас-Клепики"},
- {24, 295, 2092, L"Спасск-Рязанский"},
- {24, 295, 2094, L"Шацк"},
- {24, 295, 3320, L"Шилово"},
- {24, 295, 2260, L"Другое"},
- {24, 296, 2095, L"Велиж"},
- {24, 296, 1743, L"Вязьма"},
- {24, 296, 1744, L"Гагарин"},
- {24, 296, 2096, L"Демидов"},
- {24, 296, 1745, L"Десногорск"},
- {24, 296, 1746, L"Дорогубуж"},
- {24, 296, 2097, L"Духовщина"},
- {24, 296, 2098, L"Ельня"},
- {24, 296, 2099, L"Починок"},
- {24, 296, 2100, L"Рославль"},
- {24, 296, 2101, L"Рудня"},
- {24, 296, 1747, L"Сафоново"},
- {24, 296, 1742, L"Смоленск"},
- {24, 296, 2102, L"Сычевка"},
- {24, 296, 1748, L"Ярцево"},
- {24, 296, 2267, L"Другое"},
- {24, 297, 2198, L"Жердевка"},
- {24, 297, 2199, L"Кирсанов"},
- {24, 297, 1752, L"Котовск"},
- {24, 297, 1751, L"Мичуринск"},
- {24, 297, 2196, L"Моршанск"},
- {24, 297, 1750, L"Рассказово"},
- {24, 297, 3271, L"Сатинка"},
- {24, 297, 1749, L"Тамбов"},
- {24, 297, 3272, L"Тулиновка"},
- {24, 297, 2197, L"Уварово"},
- {24, 297, 2270, L"Другое"},
- {24, 298, 2103, L"Андреаполь"},
- {24, 298, 2104, L"Бежецк"},
- {24, 298, 2105, L"Белый"},
- {24, 298, 2106, L"Бологое"},
- {24, 298, 2107, L"Весьегонск"},
- {24, 298, 1753, L"Вышний Волочек"},
- {24, 298, 2108, L"Западная Двина"},
- {24, 298, 2109, L"Зубцов"},
- {24, 298, 2110, L"Калязин"},
- {24, 298, 2111, L"Кашин"},
- {24, 298, 1758, L"Кимры"},
- {24, 298, 1756, L"Конаково"},
- {24, 298, 2112, L"Красный Холм"},
- {24, 298, 1759, L"Кувшиново"},
- {24, 298, 1760, L"Лихославль"},
- {24, 298, 1761, L"Нелидово"},
- {24, 298, 2113, L"Осташков"},
- {24, 298, 1757, L"Ржев"},
- {24, 298, 2114, L"Старица"},
- {24, 298, 1754, L"Тверь"},
- {24, 298, 2115, L"Торжок"},
- {24, 298, 2116, L"Торопец"},
- {24, 298, 1755, L"Удомля"},
- {24, 298, 2272, L"Другое"},
- {24, 299, 2127, L"Алексин"},
- {24, 299, 2126, L"Белев"},
- {24, 299, 2118, L"Богородицк"},
- {24, 299, 2122, L"Болохово"},
- {24, 299, 2129, L"Венев"},
- {24, 299, 1762, L"Донской"},
- {24, 299, 2128, L"Ефремов"},
- {24, 299, 3354, L"Заокский"},
- {24, 299, 2124, L"Киреевск"},
- {24, 299, 1763, L"Климовск"},
- {24, 299, 2123, L"Липки"},
- {24, 299, 1764, L"Новомосковск"},
- {24, 299, 2117, L"Плавск"},
- {24, 299, 2130, L"Северо-Задонск"},
- {24, 299, 2120, L"Советск"},
- {24, 299, 2119, L"Сокольники"},
- {24, 299, 2125, L"Суворов"},
- {24, 299, 1765, L"Тула"},
- {24, 299, 1766, L"Узловая"},
- {24, 299, 2121, L"Щекино"},
- {24, 299, 1767, L"Ясногорск"},
- {24, 299, 2274, L"Другое"},
- {24, 300, 3053, L"Большое Село"},
- {24, 300, 3268, L"Брейтово"},
- {24, 300, 1773, L"Гаврилов-Ям"},
- {24, 300, 2132, L"Данилов"},
- {24, 300, 3269, L"Красные Ткачи"},
- {24, 300, 2133, L"Любим"},
- {24, 300, 3270, L"Мокеевское"},
- {24, 300, 1774, L"Мышкин"},
- {24, 300, 2994, L"Некоуз"},
- {24, 300, 1775, L"Переславль-Залесский"},
- {24, 300, 2134, L"Пошехонье"},
- {24, 300, 1769, L"Ростов"},
- {24, 300, 1771, L"Рыбинск"},
- {24, 300, 1772, L"Тутаев"},
- {24, 300, 1770, L"Углич"},
- {24, 300, 1768, L"Ярославль"},
- {24, 300, 2290, L"Другое"},
- {24, 301, 2849, L"Адыгейск"},
- {24, 301, 1776, L"Майкоп"},
- {24, 301, 2214, L"Другое"},
- {24, 304, 2617, L"Буйнакск"},
- {24, 304, 1791, L"Гуниб"},
- {24, 304, 1788, L"Дербент"},
- {24, 304, 2619, L"Избербаш"},
- {24, 304, 1789, L"Каспийск"},
- {24, 304, 2618, L"Кизилюрт"},
- {24, 304, 1790, L"Кизляр"},
- {24, 304, 1792, L"Махачкала"},
- {24, 304, 2620, L"Хасавюрт"},
- {24, 304, 2225, L"Другое"},
- {24, 305, 3052, L"Магас"},
- {24, 305, 1787, L"Назрань"},
- {24, 305, 2228, L"Другое"},
- {24, 306, 2621, L"Баксан"},
- {24, 306, 1794, L"Майский"},
- {24, 306, 1793, L"Нальчик"},
- {24, 306, 2622, L"Нарткала"},
- {24, 306, 1795, L"Прохладный"},
- {24, 306, 2623, L"Терек"},
- {24, 306, 2624, L"Тырныауз"},
- {24, 306, 3274, L"Чегем"},
- {24, 306, 2230, L"Другое"},
- {24, 307, 2567, L"Городовиково"},
- {24, 307, 2568, L"Лагань"},
- {24, 307, 3324, L"Троицкое"},
- {24, 307, 1796, L"Элиста"},
- {24, 307, 2232, L"Другое"},
- {24, 308, 1799, L"Домбай"},
- {24, 308, 1798, L"Карачаевск"},
- {24, 308, 2626, L"Теберда"},
- {24, 308, 2625, L"Усть-Джегута"},
- {24, 308, 1797, L"Черкесск"},
- {24, 308, 2235, L"Другое"},
- {24, 311, 2630, L"Алагир"},
- {24, 311, 2631, L"Ардон"},
- {24, 311, 2628, L"Беслан"},
- {24, 311, 1839, L"Владикавказ"},
- {24, 311, 2629, L"Дигора"},
- {24, 311, 2627, L"Моздок"},
- {24, 311, 2266, L"Другое"},
- {24, 313, 2632, L"Аргун"},
- {24, 313, 1853, L"Грозный"},
- {24, 313, 2633, L"Гудермес"},
- {24, 313, 2284, L"Другое"},
- {24, 309, 2636, L"Абинск"},
- {24, 309, 1800, L"Анапа"},
- {24, 309, 1801, L"Апшеронск"},
- {24, 309, 1802, L"Армавир"},
- {24, 309, 1803, L"Белореченск"},
- {24, 309, 1804, L"Геленджик"},
- {24, 309, 1805, L"Горячий Ключ"},
- {24, 309, 2637, L"Гулькевичи"},
- {24, 309, 1806, L"Динская"},
- {24, 309, 1807, L"Ейск"},
- {24, 309, 2638, L"Кореновск"},
- {24, 309, 1808, L"Краснодар"},
- {24, 309, 1809, L"Кропоткин"},
- {24, 309, 1810, L"Крымск"},
- {24, 309, 1811, L"Курганинск"},
- {24, 309, 3232, L"Лабинск"},
- {24, 309, 2639, L"Новокубанск"},
- {24, 309, 1812, L"Новороссийск"},
- {24, 309, 1813, L"Пластуновская"},
- {24, 309, 1814, L"Приморско-Ахтарск"},
- {24, 309, 3102, L"Северская"},
- {24, 309, 1815, L"Славянск-на-Кубани"},
- {24, 309, 1816, L"Сочи"},
- {24, 309, 3266, L"Староминская"},
- {24, 309, 3039, L"Тамань"},
- {24, 309, 1817, L"Темрюк"},
- {24, 309, 2635, L"Тимашевск"},
- {24, 309, 1818, L"Тихорецк"},
- {24, 309, 1819, L"Туапсе"},
- {24, 309, 1820, L"Усть-Лабинск"},
- {24, 309, 2634, L"Хадыженск"},
- {24, 309, 2241, L"Другое"},
- {24, 312, 1840, L"Александровское"},
- {24, 312, 2644, L"Благодарный"},
- {24, 312, 1841, L"Буденновск"},
- {24, 312, 1842, L"Георгиевск"},
- {24, 312, 1843, L"Ессентуки"},
- {24, 312, 1844, L"Железноводск"},
- {24, 312, 2647, L"Зеленокумск"},
- {24, 312, 2641, L"Изобильный"},
- {24, 312, 2642, L"Ипатово"},
- {24, 312, 1845, L"Кисловодск"},
- {24, 312, 1846, L"Кочубеевское"},
- {24, 312, 3367, L"Курсавка"},
- {24, 312, 3265, L"Левокумское"},
- {24, 312, 1847, L"Лермонтов"},
- {24, 312, 1848, L"Минеральные Воды"},
- {24, 312, 1849, L"Невинномысск"},
- {24, 312, 2645, L"Нефтекумск"},
- {24, 312, 2643, L"Новоалександровск"},
- {24, 312, 1850, L"Новопавловск"},
- {24, 312, 1851, L"Новоселицкое"},
- {24, 312, 1852, L"Пятигорск"},
- {24, 312, 2646, L"Светлоград"},
- {24, 312, 2640, L"Ставрополь"},
- {24, 312, 2268, L"Другое"},
- {24, 302, 1777, L"Астрахань"},
- {24, 302, 1778, L"Ахтубинск"},
- {24, 302, 3383, L"Знаменск"},
- {24, 302, 2578, L"Камызяк"},
- {24, 302, 2579, L"Нариманов"},
- {24, 302, 1786, L"Харабали"},
- {24, 302, 2219, L"Другое"},
- {24, 303, 1779, L"Волгоград"},
- {24, 303, 1780, L"Волжский"},
- {24, 303, 2584, L"Дубовка"},
- {24, 303, 1781, L"Жирновск"},
- {24, 303, 1782, L"Калач-на-Дону"},
- {24, 303, 1783, L"Камышин"},
- {24, 303, 2588, L"Котельниково"},
- {24, 303, 2591, L"Котово"},
- {24, 303, 2587, L"Краснослободск"},
- {24, 303, 2582, L"Ленинск"},
- {24, 303, 2590, L"Михайловка"},
- {24, 303, 1784, L"Николаевск"},
- {24, 303, 2581, L"Новоаннинский"},
- {24, 303, 2583, L"Палласовка"},
- {24, 303, 2580, L"Петров Вал"},
- {24, 303, 2589, L"Серафимович"},
- {24, 303, 2585, L"Суровикино"},
- {24, 303, 1785, L"Урюпинск"},
- {24, 303, 2586, L"Фролово"},
- {24, 303, 2223, L"Другое"},
- {24, 310, 1821, L"Азов"},
- {24, 310, 1822, L"Аксай"},
- {24, 310, 1823, L"Багаевская"},
- {24, 310, 1824, L"Батайск"},
- {24, 310, 1825, L"Белая Калитва"},
- {24, 310, 1826, L"Волгодонск"},
- {24, 310, 1827, L"Гуково"},
- {24, 310, 2651, L"Донецк"},
- {24, 310, 1828, L"Зерноград"},
- {24, 310, 3264, L"Каменоломни"},
- {24, 310, 2652, L"Каменск-Шахтинский"},
- {24, 310, 2649, L"Константиновск"},
- {24, 310, 2648, L"Красный Сулин"},
- {24, 310, 1829, L"Миллерово"},
- {24, 310, 2653, L"Морозовск"},
- {24, 310, 1830, L"Новочеркасск"},
- {24, 310, 1831, L"Новошахтинск"},
- {24, 310, 1832, L"Пролетарск"},
- {24, 310, 1833, L"Ростов-на-Дону"},
- {24, 310, 1834, L"Сальск"},
- {24, 310, 1835, L"Семикаракорск"},
- {24, 310, 1836, L"Таганрог"},
- {24, 310, 1837, L"Усть-Донецкий"},
- {24, 310, 3263, L"Целина"},
- {24, 310, 2650, L"Цимлянск"},
- {24, 310, 1838, L"Шахты"},
- {24, 310, 2259, L"Другое"},
- {139, 407, 407, L" столица"},
- {139, 426, 427, L"Бойсе"},
- {139, 426, 2354, L"Другое"},
- {139, 378, 3109, L"Айова Сити"},
- {139, 378, 379, L"Де-Мойн"},
- {139, 378, 2963, L"Декора"},
- {139, 378, 2355, L"Другое"},
- {139, 412, 3236, L"Бирмингем"},
- {139, 412, 413, L"Монтгомери"},
- {139, 412, 1181, L"Хантсвилл"},
- {139, 412, 2356, L"Другое"},
- {139, 446, 1182, L"Анкоридж"},
- {139, 446, 447, L"Джуно"},
- {139, 446, 1183, L"Фэрбенкс"},
- {139, 446, 2357, L"Другое"},
- {139, 434, 2917, L"Темпе"},
- {139, 434, 1184, L"Тусон"},
- {139, 434, 435, L"Финикс"},
- {139, 434, 3061, L"Чандлер"},
- {139, 434, 2358, L"Другое"},
- {139, 416, 417, L"Литл-Рок"},
- {139, 416, 2359, L"Другое"},
- {139, 428, 3017, L"Ларами"},
- {139, 428, 429, L"Шайенн"},
- {139, 428, 2360, L"Другое"},
- {139, 440, 2956, L"Беллевью"},
- {139, 440, 2967, L"Бремертон"},
- {139, 440, 3385, L"Ванкувер"},
- {139, 440, 2865, L"Линден"},
- {139, 440, 441, L"Олимпия"},
- {139, 440, 3352, L"Порт Орчард"},
- {139, 440, 2876, L"Редмонт"},
- {139, 440, 3003, L"Рентон"},
- {139, 440, 1185, L"Сиэтл"},
- {139, 440, 2983, L"Снохомиш"},
- {139, 440, 1186, L"Такома"},
- {139, 440, 3152, L"Фрайди Харбор"},
- {139, 440, 2886, L"Эверет"},
- {139, 440, 2361, L"Другое"},
- {139, 352, 353, L"Монтпильер"},
- {139, 352, 2861, L"Норвич"},
- {139, 352, 2362, L"Другое"},
- {139, 394, 1188, L"Александрия"},
- {139, 394, 1187, L"Арлингтон"},
- {139, 394, 2969, L"Даллес"},
- {139, 394, 1189, L"Манассас"},
- {139, 394, 3114, L"Норфолк"},
- {139, 394, 2885, L"Ньюпорт-Ньюс"},
- {139, 394, 2979, L"Раунд Хил"},
- {139, 394, 3338, L"Рестон"},
- {139, 394, 395, L"Ричмонд"},
- {139, 394, 3005, L"Уоррентон"},
- {139, 394, 2991, L"Херндон"},
- {139, 394, 2996, L"Центрвиль"},
- {139, 394, 3097, L"Чантилли"},
- {139, 394, 2981, L"Шарлотесвиль"},
- {139, 394, 2363, L"Другое"},
- {139, 374, 2995, L"Грин-Бей"},
- {139, 374, 375, L"Мадисон"},
- {139, 374, 2365, L"Другое"},
- {139, 448, 449, L"Гонолулу"},
- {139, 448, 1191, L"Хило"},
- {139, 448, 2367, L"Другое"},
- {139, 390, 3021, L"Вильмингтон"},
- {139, 390, 391, L"Довер"},
- {139, 390, 2973, L"Льюис"},
- {139, 390, 2369, L"Другое"},
- {139, 402, 403, L"Атланта"},
- {139, 402, 2370, L"Другое"},
- {139, 396, 397, L"Чарлстон"},
- {139, 396, 2371, L"Другое"},
- {139, 370, 2911, L"Вестмонт"},
- {139, 370, 3074, L"Гарвард"},
- {139, 370, 371, L"Спрингфилд"},
- {139, 370, 2930, L"Урбана"},
- {139, 370, 1194, L"Чикаго"},
- {139, 370, 2372, L"Другое"},
- {139, 368, 369, L"Индианаполис"},
- {139, 368, 1195, L"Эвансвил"},
- {139, 368, 2373, L"Другое"},
- {139, 444, 2959, L"Анахайм"},
- {139, 444, 2961, L"Аптос"},
- {139, 444, 2912, L"Артезия"},
- {139, 444, 2899, L"Беверли Хилз"},
- {139, 444, 1196, L"Беркли"},
- {139, 444, 3249, L"Бреа"},
- {139, 444, 3014, L"Брисбейн"},
- {139, 444, 3048, L"Венис"},
- {139, 444, 2901, L"Вест-Голливуд"},
- {139, 444, 2926, L"Вестлейк Вилладж"},
- {139, 444, 2922, L"Гардена"},
- {139, 444, 1203, L"Глендейл"},
- {139, 444, 2978, L"Денвиль"},
- {139, 444, 2990, L"Дублин"},
- {139, 444, 3077, L"Дэвис"},
- {139, 444, 2918, L"Ирвайн"},
- {139, 444, 2881, L"Карсон"},
- {139, 444, 3247, L"Кипресс"},
- {139, 444, 3092, L"Коста Меса"},
- {139, 444, 2948, L"Купертино"},
- {139, 444, 1197, L"Лонг-Бич"},
- {139, 444, 1198, L"Лос-Анджелес"},
- {139, 444, 3058, L"Лос-Гатос"},
- {139, 444, 3328, L"Марина-дель-Рей"},
- {139, 444, 2874, L"Маунтин-Вью"},
- {139, 444, 2998, L"Милпитас"},
- {139, 444, 3087, L"Монтерей"},
- {139, 444, 2947, L"Окленд"},
- {139, 444, 2900, L"Пало Альто"},
- {139, 444, 1199, L"Пасадена"},
- {139, 444, 3335, L"Редвуд"},
- {139, 444, 2966, L"Розамонд"},
- {139, 444, 445, L"Сакраменто"},
- {139, 444, 1200, L"Сан-Диего"},
- {139, 444, 3317, L"Сан-Мартин"},
- {139, 444, 1201, L"Сан-Франциско"},
- {139, 444, 1202, L"Сан-Хосе"},
- {139, 444, 2878, L"Саннивейл"},
- {139, 444, 2925, L"Санта-Барбара"},
- {139, 444, 2875, L"Санта-Клара"},
- {139, 444, 1204, L"Санта-Круз"},
- {139, 444, 2859, L"Санта-Моника"},
- {139, 444, 3157, L"Студио Сити"},
- {139, 444, 3146, L"Торранс"},
- {139, 444, 2970, L"Тысяча Дубов"},
- {139, 444, 2949, L"Универсал-Сити"},
- {139, 444, 3057, L"Форт Брэгг"},
- {139, 444, 3032, L"Фостер-Сити"},
- {139, 444, 3381, L"Фремонт"},
- {139, 444, 3028, L"Фуллертон"},
- {139, 444, 2858, L"Эмервиль"},
- {139, 444, 3040, L"Эскондидо"},
- {139, 444, 2374, L"Другое"},
- {139, 388, 3041, L"Лоуренс"},
- {139, 388, 389, L"Топика"},
- {139, 388, 2375, L"Другое"},
- {139, 408, 3004, L"Лексингтон"},
- {139, 408, 1205, L"Луисвилл"},
- {139, 408, 409, L"Франкфорт"},
- {139, 408, 2376, L"Другое"},
- {139, 430, 1206, L"Боулдер"},
- {139, 430, 3095, L"Грили"},
- {139, 430, 431, L"Денвер"},
- {139, 430, 1207, L"Колорадо-Спрингс"},
- {139, 430, 3046, L"Литлтон"},
- {139, 430, 2377, L"Другое"},
- {139, 358, 2968, L"Дариен"},
- {139, 358, 3018, L"Денбери"},
- {139, 358, 2882, L"Стэмфорд"},
- {139, 358, 359, L"Хартфорд"},
- {139, 358, 3047, L"Шелтон"},
- {139, 358, 2378, L"Другое"},
- {139, 418, 419, L"Батон-Руж"},
- {139, 418, 1208, L"Новый Орлеан"},
- {139, 418, 2408, L"Другое"},
- {139, 354, 2931, L"Аттлеборо"},
- {139, 354, 3334, L"Билерика"},
- {139, 354, 355, L"Бостон"},
- {139, 354, 3059, L"Вестгемптон"},
- {139, 354, 2919, L"Вобурн"},
- {139, 354, 2902, L"Дедхэм"},
- {139, 354, 1209, L"Кеймбридж"},
- {139, 354, 3336, L"Нидхем"},
- {139, 354, 2985, L"Ньютонвиль"},
- {139, 354, 3022, L"Уолтхэм"},
- {139, 354, 2407, L"Другое"},
- {139, 376, 1210, L"Миннеаполис"},
- {139, 376, 2980, L"Плимут"},
- {139, 376, 377, L"Сент-Пол"},
- {139, 376, 3035, L"Эден Прейри"},
- {139, 376, 2406, L"Другое"},
- {139, 414, 415, L"Джэксон"},
- {139, 414, 2405, L"Другое"},
- {139, 380, 381, L"Джефферсон-Сити"},
- {139, 380, 3062, L"Канзас Сити"},
- {139, 380, 3038, L"Ли Саммит"},
- {139, 380, 1211, L"Сент-Луис"},
- {139, 380, 2895, L"Эллисвил"},
- {139, 380, 2404, L"Другое"},
- {139, 372, 3357, L"Вест Блюмфельд"},
- {139, 372, 1212, L"Гранд-Рапидс"},
- {139, 372, 1213, L"Детройт"},
- {139, 372, 3103, L"Каламазу"},
- {139, 372, 373, L"Лансинг"},
- {139, 372, 2987, L"Новай"},
- {139, 372, 2887, L"Сагино"},
- {139, 372, 2403, L"Другое"},
- {139, 424, 1214, L"Грейт-Фолс"},
- {139, 424, 425, L"Хелина"},
- {139, 424, 2402, L"Другое"},
- {139, 348, 349, L"Огаста"},
- {139, 348, 3000, L"Ярмут"},
- {139, 348, 2401, L"Другое"},
- {139, 392, 393, L"Аннаполис"},
- {139, 392, 1215, L"Балтимор"},
- {139, 392, 3143, L"Гринбелт"},
- {139, 392, 3337, L"Колледж Парк"},
- {139, 392, 2904, L"Маунт Эйри"},
- {139, 392, 3329, L"Роквилль"},
- {139, 392, 2400, L"Другое"},
- {139, 386, 387, L"Линкольн"},
- {139, 386, 1216, L"Омаха"},
- {139, 386, 2399, L"Другое"},
- {139, 438, 439, L"Карсон-Сити"},
- {139, 438, 1217, L"Лас-Вегас"},
- {139, 438, 2890, L"Рено"},
- {139, 438, 2398, L"Другое"},
- {139, 362, 1219, L"Атлантик-Сити"},
- {139, 362, 1218, L"Ньюарк"},
- {139, 362, 3276, L"Оклин"},
- {139, 362, 3073, L"Принстон"},
- {139, 362, 2955, L"Рузерфорд"},
- {139, 362, 3349, L"Сомервиль"},
- {139, 362, 363, L"Трентон"},
- {139, 362, 3078, L"Хакеттстоун"},
- {139, 362, 3248, L"Черри Хилл"},
- {139, 362, 2397, L"Другое"},
- {139, 360, 3134, L"Баффало"},
- {139, 360, 3081, L"Бингхэмптон"},
- {139, 360, 2997, L"Бруклин"},
- {139, 360, 2999, L"Варвик"},
- {139, 360, 3139, L"Ирвингтон"},
- {139, 360, 3060, L"Итака"},
- {139, 360, 1220, L"Нью-Йорк"},
- {139, 360, 361, L"Олбани"},
- {139, 360, 2914, L"Погкипси"},
- {139, 360, 3056, L"Саратога Спрингс"},
- {139, 360, 2396, L"Другое"},
- {139, 432, 1222, L"Альбукерке"},
- {139, 432, 433, L"Санта-Фе"},
- {139, 432, 2395, L"Другое"},
- {139, 350, 2989, L"Амхерст"},
- {139, 350, 351, L"Конкорд"},
- {139, 350, 2950, L"Лондондерри"},
- {139, 350, 1221, L"Манчестер"},
- {139, 350, 3111, L"Рочестер"},
- {139, 350, 2898, L"Салем"},
- {139, 350, 2938, L"Хадсон"},
- {139, 350, 2394, L"Другое"},
- {139, 366, 2953, L"Варрен"},
- {139, 366, 3112, L"Гроув Сити"},
- {139, 366, 1223, L"Кливленд"},
- {139, 366, 367, L"Колумбус"},
- {139, 366, 2951, L"Лавленд"},
- {139, 366, 2862, L"Оберлин"},
- {139, 366, 3034, L"Рейнольдсбург"},
- {139, 366, 2860, L"Цинциннати"},
- {139, 366, 2393, L"Другое"},
- {139, 420, 421, L"Оклахома-Сити"},
- {139, 420, 1224, L"Талса"},
- {139, 420, 2392, L"Другое"},
- {139, 442, 2877, L"Кламат-Фолс"},
- {139, 442, 2945, L"Коттедж-Гроув"},
- {139, 442, 1225, L"Портленд"},
- {139, 442, 443, L"Сейлем"},
- {139, 442, 1226, L"Юджин"},
- {139, 442, 2391, L"Другое"},
- {139, 364, 3316, L"Вифлием"},
- {139, 364, 3282, L"Колледжвиль"},
- {139, 364, 2972, L"Нью Фридом"},
- {139, 364, 1227, L"Питтсбург"},
- {139, 364, 2893, L"Рандор"},
- {139, 364, 3110, L"Слиппери Рок"},
- {139, 364, 1228, L"Филадельфия"},
- {139, 364, 365, L"Харрисберг"},
- {139, 364, 2390, L"Другое"},
- {139, 450, 451, L"Понсе"},
- {139, 450, 3093, L"Сан-Хуан"},
- {139, 450, 2389, L"Другое"},
- {139, 356, 357, L"Провиденс"},
- {139, 356, 2388, L"Другое"},
- {139, 382, 383, L"Бисмарк"},
- {139, 382, 2387, L"Другое"},
- {139, 398, 2960, L"Вильмингтон"},
- {139, 398, 2915, L"Дурхам"},
- {139, 398, 399, L"Роли"},
- {139, 398, 2386, L"Другое"},
- {139, 410, 2863, L"Мемфис"},
- {139, 410, 411, L"Нашвилл"},
- {139, 410, 1229, L"Ноксвилл"},
- {139, 410, 2385, L"Другое"},
- {139, 422, 3085, L"Бедфорд"},
- {139, 422, 2913, L"Брейди"},
- {139, 422, 1233, L"Даллас"},
- {139, 422, 2916, L"Ирвинг"},
- {139, 422, 3123, L"Кингсвилл"},
- {139, 422, 2873, L"Конрой"},
- {139, 422, 3096, L"Корпус Кристи"},
- {139, 422, 423, L"Остин"},
- {139, 422, 1232, L"Сан-Антонио"},
- {139, 422, 3023, L"Уайли"},
- {139, 422, 1231, L"Хьюстон"},
- {139, 422, 1230, L"Эль-Пасо"},
- {139, 422, 2384, L"Другое"},
- {139, 406, 2383, L"Другое"},
- {139, 404, 2879, L"Бока-Рейтон"},
- {139, 404, 2880, L"Гейнсвил"},
- {139, 404, 3086, L"Джексонвиль"},
- {139, 404, 3002, L"Киссимми"},
- {139, 404, 3124, L"Корал Гейблс"},
- {139, 404, 2894, L"Корал-Спрингс"},
- {139, 404, 3290, L"Лейк-Ворт"},
- {139, 404, 1234, L"Майами"},
- {139, 404, 1236, L"Орландо"},
- {139, 404, 3372, L"Пинеллас Парк"},
- {139, 404, 2952, L"Пунта-Горда"},
- {139, 404, 3340, L"Сарасота"},
- {139, 404, 1235, L"Сент-Питерсберг"},
- {139, 404, 405, L"Таллахасси"},
- {139, 404, 2962, L"Форт Лаудердейл"},
- {139, 404, 2382, L"Другое"},
- {139, 384, 385, L"Пирр"},
- {139, 384, 2381, L"Другое"},
- {139, 400, 401, L"Колумбия"},
- {139, 400, 3090, L"Спартанбург"},
- {139, 400, 1237, L"Чарлстон"},
- {139, 400, 2380, L"Другое"},
- {139, 436, 3036, L"Кейсвилл"},
- {139, 436, 3024, L"Линдон"},
- {139, 436, 3108, L"Орем"},
- {139, 436, 2866, L"Сент-Джордж"},
- {139, 436, 437, L"Солт-Лейк-Сити"},
- {139, 436, 2379, L"Другое"},
- {39, 315, 614, L"Винница"},
- {39, 315, 615, L"Хмельник"},
- {39, 315, 2566, L"Другое"},
- {39, 316, 2940, L"Ковель"},
- {39, 316, 616, L"Луцк"},
- {39, 316, 2565, L"Другое"},
- {39, 317, 617, L"Днепродзержинск"},
- {39, 317, 618, L"Днепропетровск"},
- {39, 317, 619, L"Кривой Рог"},
- {39, 317, 620, L"Никополь"},
- {39, 317, 621, L"Новомосковск"},
- {39, 317, 622, L"Орджоникидзе"},
- {39, 317, 623, L"Павлоград"},
- {39, 317, 2564, L"Другое"},
- {39, 318, 624, L"Артемовск"},
- {39, 318, 625, L"Горловка"},
- {39, 318, 626, L"Донецк"},
- {39, 318, 627, L"Дружковка"},
- {39, 318, 628, L"Енакиево"},
- {39, 318, 629, L"Константиновка"},
- {39, 318, 630, L"Краматорск"},
- {39, 318, 2944, L"Красноармейск"},
- {39, 318, 631, L"Макеевка"},
- {39, 318, 632, L"Мариуполь"},
- {39, 318, 633, L"Николаевка"},
- {39, 318, 634, L"Славянск"},
- {39, 318, 635, L"Харцызск"},
- {39, 318, 2563, L"Другое"},
- {39, 319, 636, L"Бердичев"},
- {39, 319, 637, L"Житомир"},
- {39, 319, 2942, L"Коростень"},
- {39, 319, 638, L"Коростышев"},
- {39, 319, 2907, L"Малин"},
- {39, 319, 639, L"Новоград-Волынский"},
- {39, 319, 2562, L"Другое"},
- {39, 320, 640, L"Берегово"},
- {39, 320, 641, L"Воловец"},
- {39, 320, 3119, L"Мукачево"},
- {39, 320, 3162, L"Свалява"},
- {39, 320, 642, L"Ужгород"},
- {39, 320, 643, L"Хуст"},
- {39, 320, 2561, L"Другое"},
- {39, 321, 644, L"Бердянск"},
- {39, 321, 3128, L"Гуляйполе"},
- {39, 321, 645, L"Запорожье"},
- {39, 321, 646, L"Мелитополь"},
- {39, 321, 3121, L"Приморск"},
- {39, 321, 3378, L"Энергодар"},
- {39, 321, 2560, L"Другое"},
- {39, 322, 3379, L"Галич"},
- {39, 322, 647, L"Ивано-Франковск"},
- {39, 322, 3170, L"Яремче"},
- {39, 322, 2559, L"Другое"},
- {39, 323, 648, L"Белая Церковь"},
- {39, 323, 649, L"Борисполь"},
- {39, 323, 651, L"Бровары"},
- {39, 323, 650, L"Васильков"},
- {39, 323, 652, L"Ирпень"},
- {39, 323, 3341, L"Переяслав-Хмельницкий"},
- {39, 323, 653, L"Славутич"},
- {39, 323, 654, L"Фастов"},
- {39, 323, 655, L"Чернобыль"},
- {39, 323, 2558, L"Другое"},
- {39, 324, 656, L"Александрия"},
- {39, 324, 657, L"Кировоград"},
- {39, 324, 658, L"Светловодск"},
- {39, 324, 2557, L"Другое"},
- {39, 325, 659, L"Алушта"},
- {39, 325, 2984, L"Армянск"},
- {39, 325, 3042, L"Балаклава"},
- {39, 325, 660, L"Бахчисарай"},
- {39, 325, 662, L"Гурзуф"},
- {39, 325, 3382, L"Джанкой"},
- {39, 325, 663, L"Евпатория"},
- {39, 325, 667, L"Керчь"},
- {39, 325, 666, L"Коктебель"},
- {39, 325, 668, L"Мысовое"},
- {39, 325, 669, L"Саки"},
- {39, 325, 665, L"Севастополь"},
- {39, 325, 661, L"Симферополь"},
- {39, 325, 3370, L"Старый Крым"},
- {39, 325, 670, L"Судак"},
- {39, 325, 664, L"Феодосия"},
- {39, 325, 3148, L"Черноморское"},
- {39, 325, 671, L"Ялта"},
- {39, 325, 2556, L"Другое"},
- {39, 326, 672, L"Алчевск"},
- {39, 326, 673, L"Антрацит"},
- {39, 326, 674, L"Лисичанск"},
- {39, 326, 675, L"Луганск"},
- {39, 326, 3364, L"Молодогвардейск"},
- {39, 326, 676, L"Петровское"},
- {39, 326, 677, L"Ровеньки"},
- {39, 326, 678, L"Рубежное"},
- {39, 326, 679, L"Северодонецк"},
- {39, 326, 680, L"Стаханов"},
- {39, 326, 2555, L"Другое"},
- {39, 327, 3284, L"Дрогобыч"},
- {39, 327, 681, L"Львов"},
- {39, 327, 682, L"Трускавец"},
- {39, 327, 2554, L"Другое"},
- {39, 328, 3322, L"Вознесенск"},
- {39, 328, 2870, L"Жовтневое"},
- {39, 328, 683, L"Николаев"},
- {39, 328, 3118, L"Очаков"},
- {39, 328, 3325, L"Южноукраинск"},
- {39, 328, 2553, L"Другое"},
- {39, 329, 684, L"Белгород-Днестровский"},
- {39, 329, 685, L"Измаил"},
- {39, 329, 689, L"Ильичевск"},
- {39, 329, 686, L"Одесса"},
- {39, 329, 688, L"Рени"},
- {39, 329, 687, L"Слободка"},
- {39, 329, 2552, L"Другое"},
- {39, 330, 690, L"Гадяч"},
- {39, 330, 691, L"Комсомольск"},
- {39, 330, 693, L"Кременчуг"},
- {39, 330, 694, L"Лубны"},
- {39, 330, 695, L"Миргород"},
- {39, 330, 692, L"Полтава"},
- {39, 330, 2551, L"Другое"},
- {39, 331, 696, L"Здолбунов"},
- {39, 331, 697, L"Ровно"},
- {39, 331, 3361, L"Сарны"},
- {39, 331, 2550, L"Другое"},
- {39, 332, 3356, L"Бурынь"},
- {39, 332, 698, L"Конотоп"},
- {39, 332, 700, L"Ромны"},
- {39, 332, 699, L"Сумы"},
- {39, 332, 701, L"Шостка"},
- {39, 332, 2549, L"Другое"},
- {39, 333, 702, L"Бережаны"},
- {39, 333, 3171, L"Борщев"},
- {39, 333, 703, L"Тернополь"},
- {39, 333, 704, L"Чортков"},
- {39, 333, 2548, L"Другое"},
- {39, 334, 705, L"Изюм"},
- {39, 334, 3346, L"Купянск"},
- {39, 334, 3351, L"Купянск"},
- {39, 334, 706, L"Лозовая"},
- {39, 334, 708, L"Мерефа"},
- {39, 334, 707, L"Харьков"},
- {39, 334, 709, L"Чугуев"},
- {39, 334, 2547, L"Другое"},
- {39, 335, 710, L"Геническ"},
- {39, 335, 711, L"Каховка"},
- {39, 335, 712, L"Новая Каховка"},
- {39, 335, 3280, L"Скадовск"},
- {39, 335, 713, L"Херсон"},
- {39, 335, 2546, L"Другое"},
- {39, 336, 714, L"Каменец-Подольский"},
- {39, 336, 715, L"Красилов"},
- {39, 336, 2941, L"Нетишин"},
- {39, 336, 716, L"Полонное"},
- {39, 336, 3120, L"Сатанов"},
- {39, 336, 2943, L"Славута"},
- {39, 336, 717, L"Хмельницкий"},
- {39, 336, 3155, L"Чемировцы"},
- {39, 336, 2542, L"Другое"},
- {39, 337, 3169, L"Золотоноша"},
- {39, 337, 3016, L"Канев"},
- {39, 337, 3333, L"Полонное"},
- {39, 337, 718, L"Умань"},
- {39, 337, 719, L"Христиновка"},
- {39, 337, 720, L"Черкассы"},
- {39, 337, 2545, L"Другое"},
- {39, 338, 721, L"Нежин"},
- {39, 338, 722, L"Прилуки"},
- {39, 338, 723, L"Чернигов"},
- {39, 338, 2544, L"Другое"},
- {39, 339, 724, L"Черновцы"},
- {39, 339, 2543, L"Другое"},
- {340, 342, 725, L"Барановичи"},
- {340, 342, 726, L"Белоозерск"},
- {340, 342, 727, L"Береза"},
- {340, 342, 728, L"Брест"},
- {340, 342, 3172, L"Дрогичин"},
- {340, 342, 729, L"Кобрин"},
- {340, 342, 730, L"Ляховичи"},
- {340, 342, 731, L"Малорита"},
- {340, 342, 732, L"Пинск"},
- {340, 342, 2538, L"Другое"},
- {340, 343, 733, L"Браслав"},
- {340, 343, 735, L"Витебск"},
- {340, 343, 734, L"Новолукомоль"},
- {340, 343, 736, L"Новополоцк"},
- {340, 343, 737, L"Орша"},
- {340, 343, 738, L"Толочин"},
- {340, 343, 2537, L"Другое"},
- {340, 344, 739, L"Гомель"},
- {340, 344, 740, L"Жлобин"},
- {340, 344, 741, L"Мозырь"},
- {340, 344, 742, L"Речица"},
- {340, 344, 743, L"Рогачев"},
- {340, 344, 744, L"Светлогорск"},
- {340, 344, 2536, L"Другое"},
- {340, 345, 745, L"Волковыск"},
- {340, 345, 746, L"Гродно"},
- {340, 345, 747, L"Лида"},
- {340, 345, 3244, L"Слоним"},
- {340, 345, 748, L"Сморгонь"},
- {340, 345, 2535, L"Другое"},
- {340, 346, 3149, L"Березино"},
- {340, 346, 749, L"Борисов"},
- {340, 346, 750, L"Вилейка"},
- {340, 346, 751, L"Жодино"},
- {340, 346, 752, L"Марьина Горка"},
- {340, 346, 753, L"Молодечно"},
- {340, 346, 2896, L"Слуцк"},
- {340, 346, 754, L"Смолевичи"},
- {340, 346, 755, L"Солигорск"},
- {340, 346, 756, L"Червень"},
- {340, 346, 2534, L"Другое"},
- {340, 347, 757, L"Бобруйск"},
- {340, 347, 758, L"Могилев"},
- {340, 347, 759, L"Осиповичи"},
- {340, 347, 2533, L"Другое"},
- {0, 0, 0, NULL}
-};
-
-
-
-
-
-#endif // !defined(AFX_MRA_PLACES_H__INCLUDED_) \ No newline at end of file
diff --git a/protocols/MRA/src/MraPopUp.cpp b/protocols/MRA/src/MraPopUp.cpp
deleted file mode 100644
index e6d20a55a0..0000000000
--- a/protocols/MRA/src/MraPopUp.cpp
+++ /dev/null
@@ -1,284 +0,0 @@
-#include "stdafx.h"
-#include "MraPopup.h"
-
-#define POPUPS_TYPES_COUNT 7
-static LPCWSTR lpcwszPopupsTypes[] =
-{
- LPGENW("None"),
- LPGENW("Debug"),
- LPGENW("Information"),
- LPGENW("Question"),
- LPGENW("Warning"),
- LPGENW("Error"),
- LPGENW("NewMail"),
- nullptr
-};
-
-INT_PTR CALLBACK MraPopupDlgProcOpts(HWND hWndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
-{
- CMraProto *ppro = (CMraProto*)GetWindowLongPtr(hWndDlg, GWLP_USERDATA);
-
- switch (msg) {
- case WM_INITDIALOG:
- TranslateDialogDefault(hWndDlg);
- SetWindowLongPtr(hWndDlg, GWLP_USERDATA, lParam);
- ppro = (CMraProto*)lParam;
- {
- HWND hWndCombo = GetDlgItem(hWndDlg, IDC_COMBO_POPUP_TYPE);
- SendMessage(hWndCombo, CB_RESETCONTENT, 0, 0);
-
- for (size_t i = 0; i < POPUPS_TYPES_COUNT; i++) {
- DWORD dwItem = SendMessage(hWndCombo, CB_ADDSTRING, 0, (LPARAM)TranslateW(lpcwszPopupsTypes[i]));
- SendMessage(hWndCombo, CB_SETITEMDATA, dwItem, i);
- }
- SendMessage(hWndCombo, CB_SETCURSEL, 0, 0);
- SendMessage(hWndDlg, WM_COMMAND, MAKELONG(IDC_COMBO_POPUP_TYPE, CBN_SELCHANGE), 0);
- }
- return TRUE;
-
- case WM_COMMAND:
- switch (LOWORD(wParam)) {
- case IDC_COMBO_POPUP_TYPE:
- if (HIWORD(wParam) == CBN_SELCHANGE) {
- BOOL bEnabled, bUseWinColors;
- char szBuff[MAX_PATH];
- DWORD dwType = GET_CURRENT_COMBO_DATA(hWndDlg, IDC_COMBO_POPUP_TYPE);
-
- bEnabled = GetBit(ppro->getDword("PopupsEventFilter", MRA_DEFAULT_POPUPS_EVENT_FILTER), dwType);
- CheckDlgButton(hWndDlg, IDC_CHK_ENABLE, bEnabled ? BST_CHECKED : BST_UNCHECKED);
-
- mir_snprintf(szBuff, "PopupType%SUseWinColors", lpcwszPopupsTypes[dwType]);
- bUseWinColors = ppro->getByte(szBuff, MRA_DEFAULT_POPUP_USE_WIN_COLORS);
- CheckDlgButton(hWndDlg, IDC_CHK_USE_WIN_COLORS, bUseWinColors ? BST_CHECKED : BST_UNCHECKED);
- EnableWindow(GetDlgItem(hWndDlg, IDC_CHK_USE_WIN_COLORS), bEnabled);
-
- mir_snprintf(szBuff, "PopupType%SColorBack", lpcwszPopupsTypes[dwType]);
- SendDlgItemMessage(hWndDlg, IDC_POPUP_BACKCOLOR, CPM_SETCOLOUR, 0, ppro->getDword(szBuff, MRA_DEFAULT_POPUP_COLOR_BACK));
- EnableWindow(GetDlgItem(hWndDlg, IDC_POPUP_BACKCOLOR), (bEnabled && bUseWinColors == FALSE));
-
- mir_snprintf(szBuff, "PopupType%SColorText", lpcwszPopupsTypes[dwType]);
- SendDlgItemMessage(hWndDlg, IDC_POPUP_TEXTCOLOR, CPM_SETCOLOUR, 0, ppro->getDword(szBuff, MRA_DEFAULT_POPUP_COLOR_TEXT));
- EnableWindow(GetDlgItem(hWndDlg, IDC_POPUP_TEXTCOLOR), (bEnabled && bUseWinColors == FALSE));
-
- mir_snprintf(szBuff, "PopupType%STimeout", lpcwszPopupsTypes[dwType]);
- SetDlgItemInt(hWndDlg, IDC_POPUP_TIMEOUT, ppro->getDword(szBuff, MRA_DEFAULT_POPUP_TIMEOUT), FALSE);
- EnableWindow(GetDlgItem(hWndDlg, IDC_POPUP_TIMEOUT), bEnabled);
- }
- break;
-
- case IDC_PREVIEW:
- for (int i = 0; i < POPUPS_TYPES_COUNT; i++)
- ppro->MraPopupShowFromAgentW(i, TranslateW(lpcwszPopupsTypes[i]));
- break;
-
- case IDC_CHK_ENABLE:
- case IDC_CHK_USE_WIN_COLORS:
- {
- BOOL bEnabled = IsDlgButtonChecked(hWndDlg, IDC_CHK_ENABLE);
- BOOL bUseWinColors = IsDlgButtonChecked(hWndDlg, IDC_CHK_USE_WIN_COLORS);
-
- EnableWindow(GetDlgItem(hWndDlg, IDC_CHK_USE_WIN_COLORS), bEnabled);
- EnableWindow(GetDlgItem(hWndDlg, IDC_POPUP_BACKCOLOR), (bEnabled && bUseWinColors == FALSE));
- EnableWindow(GetDlgItem(hWndDlg, IDC_POPUP_TEXTCOLOR), (bEnabled && bUseWinColors == FALSE));
- EnableWindow(GetDlgItem(hWndDlg, IDC_POPUP_TIMEOUT), bEnabled);
- }
- __fallthrough;
-
- default:
- if ((LOWORD(wParam) == IDC_POPUP_TIMEOUT) && (HIWORD(wParam) != EN_CHANGE || (HWND)lParam != GetFocus()))
- return FALSE;
- SendMessage(GetParent(hWndDlg), PSM_CHANGED, 0, 0);
- }
- break;
-
- case WM_NOTIFY:
- switch (((LPNMHDR)lParam)->code) {
- case PSN_APPLY:
- {
- char szBuff[MAX_PATH];
- DWORD dwType = GET_CURRENT_COMBO_DATA(hWndDlg, IDC_COMBO_POPUP_TYPE);
- DWORD dwPopupsEventFilter = ppro->getDword("PopupsEventFilter", MRA_DEFAULT_POPUPS_EVENT_FILTER);
- if (IsDlgButtonChecked(hWndDlg, IDC_CHK_ENABLE))
- dwPopupsEventFilter |= (1 << dwType);
- else
- dwPopupsEventFilter &= ~(1 << dwType);
-
- ppro->setDword("PopupsEventFilter", dwPopupsEventFilter);
-
- mir_snprintf(szBuff, "PopupType%SUseWinColors", lpcwszPopupsTypes[dwType]);
- ppro->setByte(szBuff, IsDlgButtonChecked(hWndDlg, IDC_CHK_USE_WIN_COLORS));
-
- mir_snprintf(szBuff, "PopupType%SColorBack", lpcwszPopupsTypes[dwType]);
- ppro->setDword(szBuff, SendDlgItemMessage(hWndDlg, IDC_POPUP_BACKCOLOR, CPM_GETCOLOUR, 0, 0));
-
- mir_snprintf(szBuff, "PopupType%SColorText", lpcwszPopupsTypes[dwType]);
- ppro->setDword(szBuff, SendDlgItemMessage(hWndDlg, IDC_POPUP_TEXTCOLOR, CPM_GETCOLOUR, 0, 0));
-
- mir_snprintf(szBuff, "PopupType%STimeout", lpcwszPopupsTypes[dwType]);
- ppro->setDword(szBuff, GetDlgItemInt(hWndDlg, IDC_POPUP_TIMEOUT, nullptr, FALSE));
- }
- return TRUE;
- }
- break;
- }
- return FALSE;
-}
-
-int CMraProto::OnPopupOptInit(WPARAM wParam, LPARAM)
-{
- if (ServiceExists(MS_POPUP_ADDPOPUPT)) {
- OPTIONSDIALOGPAGE odp = {};
- odp.dwInitParam = (LPARAM)this;
- odp.position = 100000000;
- odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_POPUPS);
- odp.szTitle.w = m_tszUserName;
- odp.szGroup.w = LPGENW("Popups");
- odp.flags = ODPF_BOLDGROUPS | ODPF_UNICODE;
- odp.pfnDlgProc = MraPopupDlgProcOpts;
- g_plugin.addOptions(wParam, &odp);
- }
- return 0;
-}
-
-/////////////////////////////////////////////////////////////////////////////////////////
-// ShowPopup - popup plugin support
-
-struct MraPopupData
-{
- CMraProto *ppro;
- int iPopupType;
-};
-
-/////////////////////////////////////////////////////////////////////////////////////////
-// Popup plugin window proc
-
-LRESULT CALLBACK MraPopupDlgProc(HWND hWndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
-{
- MraPopupData* dat = (MraPopupData*)PUGetPluginData(hWndDlg);
-
- switch (msg) {
- case UM_INITPOPUP:
- if (dat->iPopupType == MRA_POPUP_TYPE_EMAIL_STATUS) {
- // update/load avatar
- dat->ppro->MraAvatarsQueueGetAvatarSimple(dat->ppro->hAvatarsQueueHandle, GAIF_FORCE, PUGetContact(hWndDlg));
-
- // delete old email popup
- if (dat->ppro->hWndEMailPopupStatus)
- PUDeletePopup(dat->ppro->hWndEMailPopupStatus);
-
- dat->ppro->hWndEMailPopupStatus = hWndDlg;
- }
- break;
-
- case WM_COMMAND:
- if (HIWORD(wParam) == STN_CLICKED) { //It was a click on the Popup.
- if (dat->iPopupType == MRA_POPUP_TYPE_EMAIL_STATUS) {
- CallProtoService(dat->ppro->m_szModuleName, MRA_GOTO_INBOX, 0, 0);
- dat->ppro->hWndEMailPopupStatus = nullptr;
- }
- }
- PUDeletePopup(hWndDlg);
- break;
-
- case WM_CONTEXTMENU:
- if (dat->iPopupType == MRA_POPUP_TYPE_EMAIL_STATUS)
- dat->ppro->hWndEMailPopupStatus = nullptr;
- PUDeletePopup(hWndDlg);
- break;
-
- case UM_FREEPLUGINDATA:
- if (dat->iPopupType == MRA_POPUP_TYPE_EMAIL_STATUS)
- dat->ppro->hWndEMailPopupStatus = nullptr;
- mir_free(dat);
- break;
- }
- return DefWindowProc(hWndDlg, msg, wParam, lParam);
-}
-
-void CMraProto::MraPopupShowFromContactW(MCONTACT hContact, DWORD dwType, LPCWSTR lpszMessage)
-{
- WCHAR szTitle[MAX_CONTACTNAME];
- CMStringW szNick, szEmail;
- mraGetStringW(hContact, "Nick", szNick);
- mraGetStringW(hContact, "e-mail", szEmail);
- if (hContact)
- mir_snwprintf(szTitle, L"%s <%s>", szNick.c_str(), szEmail.c_str());
- else
- mir_snwprintf(szTitle, L"%s: %s <%s>", m_tszUserName, szNick.c_str(), szEmail.c_str());
-
- MraPopupShowW(hContact, dwType, szTitle, lpszMessage);
-}
-
-void CMraProto::MraPopupShowW(MCONTACT hContact, DWORD dwType, LPWSTR lpszTitle, LPCWSTR lpszMessage)
-{
- if (getByte("PopupsEnabled", MRA_DEFAULT_POPUPS_ENABLED))
- if (GetBit(getDword("PopupsEventFilter", MRA_DEFAULT_POPUPS_EVENT_FILTER), dwType))
- if (ServiceExists(MS_POPUP_ADDPOPUPW)) {
- // delete old email popup
- if (dwType == MRA_POPUP_TYPE_EMAIL_STATUS && hWndEMailPopupStatus) {
- PUDeletePopup(hWndEMailPopupStatus);
- hWndEMailPopupStatus = nullptr;
- }
-
- POPUPDATAT ppd = { 0 };
- // load icon
- switch (dwType) {
- case MRA_POPUP_TYPE_NONE:// proto icon
- ppd.lchIcon = g_hMainIcon;
- break;
- case MRA_POPUP_TYPE_DEBUG:// IDI_APPLICATION
- ppd.lchIcon = (HICON)LoadImage(nullptr, IDI_APPLICATION, IMAGE_ICON, 0, 0, LR_SHARED);
- break;
- case MRA_POPUP_TYPE_INFORMATION:// IDI_INFORMATION
- ppd.lchIcon = (HICON)LoadImage(nullptr, IDI_INFORMATION, IMAGE_ICON, 0, 0, LR_SHARED);
- break;
- case MRA_POPUP_TYPE_QUESTION:// IDI_QUESTION
- ppd.lchIcon = (HICON)LoadImage(nullptr, IDI_QUESTION, IMAGE_ICON, 0, 0, LR_SHARED);
- break;
- case MRA_POPUP_TYPE_WARNING:// IDI_WARNING
- ppd.lchIcon = (HICON)LoadImage(nullptr, IDI_WARNING, IMAGE_ICON, 0, 0, LR_SHARED);
- break;
- case MRA_POPUP_TYPE_ERROR:// IDI_ERROR
- ppd.lchIcon = (HICON)LoadImage(nullptr, IDI_ERROR, IMAGE_ICON, 0, 0, LR_SHARED);
- break;
- case MRA_POPUP_TYPE_EMAIL_STATUS:
- ppd.lchIcon = (HICON)LoadImage(g_plugin.getInst(), MAKEINTRESOURCE(IDI_MAIL_NOTIFY), IMAGE_ICON, 0, 0, LR_SHARED);
- break;
- }
-
- MraPopupData *dat = (MraPopupData*)mir_calloc(sizeof(MraPopupData));
- dat->iPopupType = dwType;
- dat->ppro = this;
-
- ppd.lchContact = hContact;
- if (lpszTitle)
- mir_wstrncpy(ppd.lptzContactName, lpszTitle, MAX_CONTACTNAME);
- if (lpszMessage)
- mir_wstrncpy(ppd.lptzText, lpszMessage, MAX_SECONDLINE);
- ppd.PluginWindowProc = MraPopupDlgProc;
- ppd.PluginData = dat;
-
- char szBuff[MAX_PATH];
- mir_snprintf(szBuff, "PopupType%SUseWinColors", lpcwszPopupsTypes[dwType]);
- BOOL bUseWinColors = getByte(szBuff, MRA_DEFAULT_POPUP_USE_WIN_COLORS);
- if (bUseWinColors) {
- ppd.colorBack = GetSysColor(COLOR_BTNFACE);
- ppd.colorText = GetSysColor(COLOR_WINDOWTEXT);
- }
- else {
- mir_snprintf(szBuff, "PopupType%SColorBack", lpcwszPopupsTypes[dwType]);
- ppd.colorBack = getDword(szBuff, MRA_DEFAULT_POPUP_COLOR_BACK);
-
- mir_snprintf(szBuff, "PopupType%SColorText", lpcwszPopupsTypes[dwType]);
- ppd.colorText = getDword(szBuff, MRA_DEFAULT_POPUP_COLOR_TEXT);
- }
-
- mir_snprintf(szBuff, "PopupType%STimeout", lpcwszPopupsTypes[dwType]);
- ppd.iSeconds = getDword(szBuff, MRA_DEFAULT_POPUP_TIMEOUT);
-
- if (dat->iPopupType == MRA_POPUP_TYPE_EMAIL_STATUS && dat->ppro->hWndEMailPopupStatus)
- PUChangeTextW(dat->ppro->hWndEMailPopupStatus, ppd.lpwzText);
- else
- PUAddPopupW(&ppd);
- }
-}
diff --git a/protocols/MRA/src/MraPopUp.h b/protocols/MRA/src/MraPopUp.h
deleted file mode 100644
index 893aac7546..0000000000
--- a/protocols/MRA/src/MraPopUp.h
+++ /dev/null
@@ -1,15 +0,0 @@
-#if !defined(AFX_MRA_POPUP_H__F58D13FF_F6F2_476C_B8F0_7B9E9357CF48__INCLUDED_)
-#define AFX_MRA_POPUP_H__F58D13FF_F6F2_476C_B8F0_7B9E9357CF48__INCLUDED_
-
-
-#pragma once
-
-#define MRA_POPUP_TYPE_NONE 0 // proto icon
-#define MRA_POPUP_TYPE_DEBUG 1 // IDI_APPLICATION
-#define MRA_POPUP_TYPE_INFORMATION 2 // IDI_INFORMATION
-#define MRA_POPUP_TYPE_QUESTION 3 // IDI_QUESTION
-#define MRA_POPUP_TYPE_WARNING 4 // IDI_WARNING
-#define MRA_POPUP_TYPE_ERROR 5 // IDI_ERROR
-#define MRA_POPUP_TYPE_EMAIL_STATUS 6 //
-
-#endif // !defined(AFX_MRA_POPUP_H__F58D13FF_F6F2_476C_B8F0_7B9E9357CF48__INCLUDED_)
diff --git a/protocols/MRA/src/MraProto.cpp b/protocols/MRA/src/MraProto.cpp
deleted file mode 100644
index 5cc4d7de2d..0000000000
--- a/protocols/MRA/src/MraProto.cpp
+++ /dev/null
@@ -1,554 +0,0 @@
-#include "stdafx.h"
-
-static int MraExtraIconsApplyAll(WPARAM, LPARAM)
-{
- for (auto &it : CMPlugin::g_arInstances)
- it->MraExtraIconsApply(0, 0);
- return 0;
-}
-
-CMraProto::CMraProto(const char* _module, const wchar_t* _displayName) :
- PROTO<CMraProto>(_module, _displayName),
- m_bLoggedIn(false),
- m_groups(5, NumericKeySortT)
-{
- MraSendQueueInitialize(0, &hSendQueueHandle);
- MraFilesQueueInitialize(0, &hFilesQueueHandle);
- MraMPopSessionQueueInitialize(&hMPopSessionQueue);//getByte("AutoAuthOnWebServices", MRA_DEFAULT_AUTO_AUTH_ON_WEB_SVCS)
- MraAvatarsQueueInitialize(&hAvatarsQueueHandle);
-
- CreateProtoService(PS_SETCUSTOMSTATUSEX, &CMraProto::MraSetXStatusEx);
- CreateProtoService(PS_GETCUSTOMSTATUSEX, &CMraProto::MraGetXStatusEx);
- CreateProtoService(PS_GETCUSTOMSTATUSICON, &CMraProto::MraGetXStatusIcon);
-
- CreateProtoService(PS_SET_LISTENINGTO, &CMraProto::MraSetListeningTo);
-
- CreateProtoService(PS_CREATEACCMGRUI, &CMraProto::MraCreateAccMgrUI);
- CreateProtoService(PS_GETAVATARCAPS, &CMraProto::MraGetAvatarCaps);
- CreateProtoService(PS_GETAVATARINFO, &CMraProto::MraGetAvatarInfo);
- CreateProtoService(PS_GETMYAVATAR, &CMraProto::MraGetMyAvatar);
-
- CreateProtoService(MS_ICQ_SENDSMS, &CMraProto::MraSendSMS);
- CreateProtoService(PS_SEND_NUDGE, &CMraProto::MraSendNudge);
- CreateProtoService(PS_GETUNREADEMAILCOUNT, &CMraProto::GetUnreadEmailCount);
-
- HookProtoEvent(ME_OPT_INITIALISE, &CMraProto::OnOptionsInit);
- HookProtoEvent(ME_DB_CONTACT_DELETED, &CMraProto::MraContactDeleted);
- HookProtoEvent(ME_DB_CONTACT_SETTINGCHANGED, &CMraProto::MraDbSettingChanged);
-
- m_heNudgeReceived = CreateProtoEvent(PE_NUDGE);
-
- wchar_t name[MAX_PATH];
- mir_snwprintf(name, TranslateT("%s connection"), m_tszUserName);
-
- NETLIBUSER nlu = {};
- nlu.flags = NUF_INCOMING | NUF_OUTGOING | NUF_HTTPCONNS | NUF_UNICODE;
- nlu.szSettingsModule = m_szModuleName;
- nlu.szDescriptiveName.w = name;
- m_hNetlibUser = Netlib_RegisterUser(&nlu);
-
- InitMenus();
-
- mir_snprintf(szNewMailSound, "%s_new_email", m_szModuleName);
- g_plugin.addSound(szNewMailSound, m_tszUserName, MRA_SOUND_NEW_EMAIL);
-
- HookProtoEvent(ME_CLIST_PREBUILDSTATUSMENU, &CMraProto::MraRebuildStatusMenu);
-
- hExtraXstatusIcon = ExtraIcon_RegisterIcolib("MRAXstatus", LPGEN("Mail.ru xStatus"), "mra_xstatus25");
- hExtraInfo = ExtraIcon_RegisterIcolib("MRAStatus", LPGEN("Mail.ru extra info"), MRA_XSTATUS_UNKNOWN_STR);
-
- m_bHideXStatusUI = false;
- m_iXStatus = getByte(DBSETTING_XSTATUSID, MRA_MIR_XSTATUS_NONE);
- if (!IsXStatusValid(m_iXStatus))
- m_iXStatus = MRA_MIR_XSTATUS_NONE;
-}
-
-CMraProto::~CMraProto()
-{
- Netlib_CloseHandle(m_hNetlibUser);
-
- DestroyHookableEvent(m_heNudgeReceived);
-
- MraAvatarsQueueDestroy(hAvatarsQueueHandle);
- MraMPopSessionQueueDestroy(hMPopSessionQueue);
- MraFilesQueueDestroy(hFilesQueueHandle);
- MraSendQueueDestroy(hSendQueueHandle);
-}
-
-INT_PTR CMraProto::MraCreateAccMgrUI(WPARAM, LPARAM lParam)
-{
- return (INT_PTR)CreateDialogParam(g_plugin.getInst(), MAKEINTRESOURCE(IDD_MRAACCOUNT),
- (HWND)lParam, DlgProcAccount, LPARAM(this));
-}
-
-void CMraProto::OnModulesLoaded()
-{
- HookProtoEvent(ME_CLIST_EXTRA_IMAGE_APPLY, &CMraProto::MraExtraIconsApply);
- HookProtoEvent(ME_CLIST_PREBUILDCONTACTMENU, &CMraProto::MraRebuildContactMenu);
- HookProtoEvent(ME_WAT_NEWSTATUS, &CMraProto::MraMusicChanged);
- HookProtoEvent(ME_CLIST_GROUPCHANGE, &CMraProto::OnGroupChanged);
-
- // всех в offline // тк unsaved values сохран¤ютс¤ их нужно инициализировать
- for (auto &hContact : AccContacts())
- SetContactBasicInfoW(hContact, SCBIFSI_LOCK_CHANGES_EVENTS, (SCBIF_ID | SCBIF_GROUP_ID | SCBIF_SERVER_FLAG | SCBIF_STATUS), -1, -1, 0, 0, ID_STATUS_OFFLINE, nullptr, nullptr, nullptr);
-
- // unsaved values
- db_set_resident(m_szModuleName, "LogonTS");
- db_set_resident(m_szModuleName, "ContactID");
- db_set_resident(m_szModuleName, "GroupID");
- db_set_resident(m_szModuleName, "ContactFlags");
- db_set_resident(m_szModuleName, "ContactServerFlags");
- db_set_resident(m_szModuleName, "HooksLocked");
- db_set_resident(m_szModuleName, DBSETTING_CAPABILITIES);
- db_set_resident(m_szModuleName, DBSETTING_XSTATUSNAME);
- db_set_resident(m_szModuleName, DBSETTING_XSTATUSMSG);
- db_set_resident(m_szModuleName, DBSETTING_BLOGSTATUSTIME);
- db_set_resident(m_szModuleName, DBSETTING_BLOGSTATUSID);
- db_set_resident(m_szModuleName, DBSETTING_BLOGSTATUS);
- db_set_resident(m_szModuleName, DBSETTING_BLOGSTATUSMUSIC);
-
- // destroy all chat sessions
- bChatExists = MraChatRegister();
-}
-
-void CMraProto::OnShutdown()
-{
- m_bShutdown = true;
- SetStatus(ID_STATUS_OFFLINE);
-
- if (hAvatarsQueueHandle != nullptr)
- MraAvatarsQueueSuspend(hAvatarsQueueHandle);
-}
-
-/////////////////////////////////////////////////////////////////////////////////////////
-
-MCONTACT CMraProto::AddToListByEmail(LPCTSTR plpsEMail, LPCTSTR plpsNick, LPCTSTR plpsFirstName, LPCTSTR plpsLastName, DWORD dwFlags)
-{
- if (!plpsEMail)
- return NULL;
-
- BOOL bAdded;
- MCONTACT hContact = MraHContactFromEmail(plpsEMail, TRUE, TRUE, &bAdded);
- if (hContact == NULL)
- return NULL;
-
- if (plpsNick)
- mraSetStringW(hContact, "Nick", plpsNick);
- if (plpsFirstName)
- mraSetStringW(hContact, "FirstName", plpsFirstName);
- if (plpsLastName)
- mraSetStringW(hContact, "LastName", plpsLastName);
-
- if (dwFlags & PALF_TEMPORARY)
- db_set_b(hContact, "CList", "Hidden", 1);
- else
- db_unset(hContact, "CList", "NotOnList");
-
- if (bAdded)
- MraUpdateContactInfo(hContact);
- return hContact;
-}
-
-MCONTACT CMraProto::AddToList(int flags, PROTOSEARCHRESULT *psr)
-{
- if (psr->cbSize != sizeof(PROTOSEARCHRESULT))
- return 0;
-
- return AddToListByEmail(psr->email.w, psr->nick.w, psr->firstName.w, psr->lastName.w, flags);
-}
-
-MCONTACT CMraProto::AddToListByEvent(int, int, MEVENT hDbEvent)
-{
- DBEVENTINFO dbei = {};
- if ((dbei.cbBlob = db_event_getBlobSize(hDbEvent)) != -1) {
- dbei.pBlob = (PBYTE)alloca(dbei.cbBlob);
- if (db_event_get(hDbEvent, &dbei) == 0 &&
- !mir_strcmp(dbei.szModule, m_szModuleName) &&
- (dbei.eventType == EVENTTYPE_AUTHREQUEST || dbei.eventType == EVENTTYPE_CONTACTS))
- {
- DB_AUTH_BLOB blob(dbei.pBlob);
- return AddToListByEmail(dbei.getString(blob.get_email()), dbei.getString(blob.get_nick()), dbei.getString(blob.get_firstName()), dbei.getString(blob.get_lastName()), 0);
- }
- }
- return 0;
-}
-
-/////////////////////////////////////////////////////////////////////////////////////////
-
-int CMraProto::Authorize(MEVENT hDBEvent)
-{
- if (!m_bLoggedIn) return 1;
-
- DBEVENTINFO dbei = {};
- if ((dbei.cbBlob = db_event_getBlobSize(hDBEvent)) == -1)
- return 1;
-
- dbei.pBlob = (PBYTE)alloca(dbei.cbBlob);
- if (db_event_get(hDBEvent, &dbei)) return 1;
- if (dbei.eventType != EVENTTYPE_AUTHREQUEST) return 1;
- if (mir_strcmp(dbei.szModule, m_szModuleName)) return 1;
-
- DB_AUTH_BLOB blob(dbei.pBlob);
- MraAuthorize(blob.get_email());
- return 0;
-}
-
-int CMraProto::AuthDeny(MEVENT hDBEvent, const wchar_t* szReason)
-{
- if (!m_bLoggedIn) return 1;
-
- DBEVENTINFO dbei = {};
- if ((dbei.cbBlob = db_event_getBlobSize(hDBEvent)) == -1)
- return 1;
-
- dbei.pBlob = (PBYTE)alloca(dbei.cbBlob);
- if (db_event_get(hDBEvent, &dbei)) return 1;
- if (dbei.eventType != EVENTTYPE_AUTHREQUEST) return 1;
- if (mir_strcmp(dbei.szModule, m_szModuleName)) return 1;
-
- DB_AUTH_BLOB blob(dbei.pBlob);
- MraMessage(FALSE, NULL, 0, 0, blob.get_email(), szReason, nullptr, 0);
- return 0;
-}
-
-int CMraProto::AuthRecv(MCONTACT, PROTORECVEVENT* pre)
-{
- return Proto_AuthRecv(m_szModuleName, pre);
-}
-
-/////////////////////////////////////////////////////////////////////////////////////////
-
-HANDLE CMraProto::FileAllow(MCONTACT, HANDLE hTransfer, const wchar_t *szPath)
-{
- if (szPath != nullptr)
- if (MraFilesQueueAccept(hFilesQueueHandle, (DWORD_PTR)hTransfer, szPath, mir_wstrlen(szPath)) == NO_ERROR)
- return hTransfer; // Success
-
- return nullptr;
-}
-
-int CMraProto::FileCancel(MCONTACT hContact, HANDLE hTransfer)
-{
- if (hContact && hTransfer) {
- MraFilesQueueCancel(hFilesQueueHandle, (DWORD_PTR)hTransfer, TRUE);
- return 0; // Success
- }
-
- return 1;
-}
-
-int CMraProto::FileDeny(MCONTACT hContact, HANDLE hTransfer, const wchar_t*)
-{
- return FileCancel(hContact, hTransfer);
-}
-
-/////////////////////////////////////////////////////////////////////////////////////////
-
-INT_PTR CMraProto::GetCaps(int type, MCONTACT)
-{
- switch (type) {
- case PFLAGNUM_1:
- return PF1_IM | PF1_FILE | PF1_MODEMSG | PF1_SERVERCLIST | PF1_AUTHREQ | PF1_ADDED | PF1_VISLIST | PF1_INVISLIST |
- PF1_INDIVSTATUS | PF1_PEER2PEER | PF1_CHAT | PF1_BASICSEARCH | PF1_EXTSEARCH | PF1_CANRENAMEFILE | PF1_FILERESUME |
- PF1_ADDSEARCHRES | PF1_CONTACT | PF1_SEARCHBYEMAIL | PF1_USERIDISEMAIL | PF1_SEARCHBYNAME | PF1_EXTSEARCHUI;
-
- case PFLAGNUM_2:
- return PF2_ONLINE | PF2_INVISIBLE | PF2_SHORTAWAY | PF2_HEAVYDND | PF2_FREECHAT | PF2_ONTHEPHONE;
-
- case PFLAGNUM_3:
- return PF2_ONLINE | PF2_INVISIBLE | PF2_SHORTAWAY | PF2_HEAVYDND | PF2_FREECHAT | PF2_ONTHEPHONE;
-
- case PFLAGNUM_4:
- return PF4_FORCEAUTH | PF4_FORCEADDED | PF4_SUPPORTTYPING | PF4_AVATARS;
-
- case PFLAGNUM_5:
- return PF2_ONTHEPHONE;
-
- case PFLAG_UNIQUEIDTEXT:
- return (INT_PTR)Translate("E-mail address");
-
- case PFLAG_MAXCONTACTSPERPACKET:
- return MRA_MAXCONTACTSPERPACKET;
-
- case PFLAG_MAXLENOFMESSAGE:
- return MRA_MAXLENOFMESSAGE;
-
- default:
- return 0;
- }
-}
-
-int CMraProto::GetInfo(MCONTACT hContact, int)
-{
- return MraUpdateContactInfo(hContact) != 0;
-}
-
-/////////////////////////////////////////////////////////////////////////////////////////
-
-HANDLE CMraProto::SearchBasic(const wchar_t *id)
-{
- return SearchByEmail(id);
-}
-
-HANDLE CMraProto::SearchByEmail(const wchar_t *email)
-{
- if (m_bLoggedIn && email) {
- CMStringA szEmail(email);
- return MraWPRequestByEMail(NULL, ACKTYPE_SEARCH, szEmail);
- }
-
- return nullptr;
-}
-
-HANDLE CMraProto::SearchByName(const wchar_t *pszNick, const wchar_t *pszFirstName, const wchar_t *pszLastName)
-{
- if (m_bLoggedIn && (*pszNick || *pszFirstName || *pszLastName)) {
- DWORD dwRequestFlags = 0;
- if (*pszNick) SetBit(dwRequestFlags, MRIM_CS_WP_REQUEST_PARAM_NICKNAME);
- if (*pszFirstName) SetBit(dwRequestFlags, MRIM_CS_WP_REQUEST_PARAM_FIRSTNAME);
- if (*pszLastName) SetBit(dwRequestFlags, MRIM_CS_WP_REQUEST_PARAM_LASTNAME);
- return MraWPRequestW(NULL, ACKTYPE_SEARCH, dwRequestFlags, "", "", pszNick, pszFirstName, pszLastName, 0, 0, 0, 0, 0, 0, 0, 0, 0);
- }
-
- return nullptr;
-}
-
-/////////////////////////////////////////////////////////////////////////////////////////
-
-int CMraProto::RecvContacts(MCONTACT hContact, PROTORECVEVENT* pre)
-{
- DBEVENTINFO dbei = {};
- dbei.szModule = m_szModuleName;
- dbei.timestamp = pre->timestamp;
- dbei.flags = (pre->flags & PREF_CREATEREAD) ? DBEF_READ : 0;
- dbei.eventType = EVENTTYPE_CONTACTS;
- dbei.cbBlob = pre->lParam;
- dbei.pBlob = (PBYTE)pre->szMessage;
- db_event_add(hContact, &dbei);
- return 0;
-}
-
-/////////////////////////////////////////////////////////////////////////////////////////
-
-int CMraProto::SendContacts(MCONTACT hContact, int, int nContacts, MCONTACT *hContactsList)
-{
- INT_PTR iRet = 0;
-
- if (m_bLoggedIn && hContact) {
- BOOL bSlowSend;
- CMStringW wszData, wszEmail;
- CMStringA szEmail;
- if (mraGetStringA(hContact, "e-mail", szEmail)) {
- for (int i = 0; i < nContacts; i++) {
- if (IsContactMra(hContactsList[i]))
- if (mraGetStringW(hContactsList[i], "e-mail", wszEmail))
- wszData += wszEmail + ';' + Clist_GetContactDisplayName(hContactsList[i]) + ';';
- }
-
- bSlowSend = getByte("SlowSend", MRA_DEFAULT_SLOW_SEND);
- iRet = MraMessage(bSlowSend, hContact, ACKTYPE_CONTACTS, MESSAGE_FLAG_CONTACT, szEmail, wszData, nullptr, 0);
- if (bSlowSend == FALSE)
- ProtoBroadcastAck(hContact, ACKTYPE_CONTACTS, ACKRESULT_SUCCESS, (HANDLE)iRet, 0);
- }
- }
- else ProtoBroadcastAck(hContact, ACKTYPE_CONTACTS, ACKRESULT_FAILED, nullptr, (LPARAM)"You cannot send when you are offline.");
-
- return iRet;
-}
-
-HANDLE CMraProto::SendFile(MCONTACT hContact, const wchar_t*, wchar_t **ppszFiles)
-{
- if (!m_bLoggedIn || !hContact || !ppszFiles)
- return nullptr;
-
- size_t dwFilesCount;
- for (dwFilesCount = 0; ppszFiles[dwFilesCount]; dwFilesCount++);
-
- DWORD iRet = 0;
- MraFilesQueueAddSend(hFilesQueueHandle, 0, hContact, ppszFiles, dwFilesCount, &iRet);
- return (HANDLE)iRet;
-}
-
-int CMraProto::SendMsg(MCONTACT hContact, int, const char *lpszMessage)
-{
- if (!m_bLoggedIn) {
- ProtoBroadcastAck(hContact, ACKTYPE_MESSAGE, ACKRESULT_FAILED, nullptr, (LPARAM)TranslateT("You cannot send when you are offline."));
- return 0;
- }
-
- DWORD dwFlags = 0;
- CMStringW wszMessage(ptrW(mir_utf8decodeW(lpszMessage)));
- if (wszMessage.IsEmpty()) {
- ProtoBroadcastAck(hContact, ACKTYPE_MESSAGE, ACKRESULT_FAILED, nullptr, (LPARAM)TranslateT("Can't allocate buffer for convert to Unicode."));
- return 0;
- }
-
- CMStringA szEmail;
- if (!mraGetStringA(hContact, "e-mail", szEmail))
- return 0;
-
- BOOL bSlowSend = getByte("SlowSend", MRA_DEFAULT_SLOW_SEND);
- if (getByte("RTFSendEnable", MRA_DEFAULT_RTF_SEND_ENABLE) && (MraContactCapabilitiesGet(hContact) & FEATURE_FLAG_RTF_MESSAGE))
- dwFlags |= MESSAGE_FLAG_RTF;
-
- int iRet = MraMessage(bSlowSend, hContact, ACKTYPE_MESSAGE, dwFlags, szEmail, wszMessage, NULL, 0);
- if (bSlowSend == FALSE)
- ProtoBroadcastAckAsync(hContact, ACKTYPE_MESSAGE, ACKRESULT_SUCCESS, (HANDLE)iRet, 0);
- return iRet;
-}
-
-/////////////////////////////////////////////////////////////////////////////////////////
-
-int CMraProto::SetApparentMode(MCONTACT hContact, int mode)
-{
- if (!m_bLoggedIn || !hContact)
- return 1;
-
- // Only 3 modes are supported
- if (hContact && (mode == 0 || mode == ID_STATUS_ONLINE || mode == ID_STATUS_OFFLINE)) {
- int dwOldMode = (int)getDword(hContact, "ApparentMode", 0);
-
- // Dont send redundant updates
- if (mode != dwOldMode) {
- DWORD dwContactFlag = 0;
-
- switch (mode) {
- case ID_STATUS_OFFLINE:
- dwContactFlag |= CONTACT_FLAG_INVISIBLE;
- break;
- case ID_STATUS_ONLINE:
- dwContactFlag |= CONTACT_FLAG_VISIBLE;
- break;
- }
-
- if (MraModifyContact(hContact, nullptr, &dwContactFlag)) {
- SetContactBasicInfoW(hContact, 0, SCBIF_FLAG, 0, 0, dwContactFlag, 0, 0, nullptr, nullptr, nullptr);
- return 0; // Success
- }
- }
- }
-
- return 1;
-}
-
-int CMraProto::SetStatus(int iNewStatus)
-{
- // remap global statuses to local supported
- switch (iNewStatus) {
- case ID_STATUS_OCCUPIED:
- iNewStatus = ID_STATUS_DND;
- break;
- case ID_STATUS_NA:
- case ID_STATUS_ONTHEPHONE:
- case ID_STATUS_OUTTOLUNCH:
- iNewStatus = ID_STATUS_AWAY;
- break;
- }
-
- // nothing to change
- if (m_iStatus == iNewStatus)
- return 0;
-
- DWORD dwOldStatusMode;
-
- //set all contacts to offline
- if ((m_iDesiredStatus = iNewStatus) == ID_STATUS_OFFLINE) {
- m_bLoggedIn = FALSE;
- dwOldStatusMode = InterlockedExchange((volatile LONG*)&m_iStatus, m_iDesiredStatus);
-
- // всех в offline, только если мы бывали подключены
- if (dwOldStatusMode > ID_STATUS_OFFLINE)
- for (auto &hContact : AccContacts())
- SetContactBasicInfoW(hContact, SCBIFSI_LOCK_CHANGES_EVENTS, (SCBIF_ID | SCBIF_GROUP_ID | SCBIF_SERVER_FLAG | SCBIF_STATUS), -1, -1, 0, 0, ID_STATUS_OFFLINE, nullptr, nullptr, nullptr);
-
- if (m_hConnection != nullptr)
- Netlib_Shutdown(m_hConnection);
- }
- else {
- // если offline то сразу ставим connecting, но обработка как offline
- dwOldStatusMode = InterlockedCompareExchange((volatile LONG*)&m_iStatus, ID_STATUS_CONNECTING, ID_STATUS_OFFLINE);
-
- switch (dwOldStatusMode) {
- case ID_STATUS_OFFLINE: // offline, connecting
- if (StartConnect() != NO_ERROR) {
- m_bLoggedIn = FALSE;
- m_iDesiredStatus = ID_STATUS_OFFLINE;
- dwOldStatusMode = InterlockedExchange((volatile LONG*)&m_iStatus, m_iDesiredStatus);
- }
- break;
- case ID_STATUS_ONLINE:// connected, change status
- case ID_STATUS_AWAY:
- case ID_STATUS_DND:
- case ID_STATUS_FREECHAT:
- case ID_STATUS_INVISIBLE:
- MraSendNewStatus(m_iDesiredStatus, m_iXStatus, L"", L"");
- case ID_STATUS_CONNECTING:
- // предотвращаем переход в любой статус (кроме offline) из статуса connecting, если он не вызван самим плагином
- if (dwOldStatusMode == ID_STATUS_CONNECTING && iNewStatus != m_iDesiredStatus)
- break;
-
- default:
- dwOldStatusMode = InterlockedExchange((volatile LONG*)&m_iStatus, m_iDesiredStatus);
- break;
- }
- }
- MraSetContactStatus(NULL, m_iStatus);
- ProtoBroadcastAck(NULL, ACKTYPE_STATUS, ACKRESULT_SUCCESS, (HANDLE)dwOldStatusMode, m_iStatus);
- return 0;
-}
-
-HANDLE CMraProto::GetAwayMsg(MCONTACT hContact)
-{
- if (!m_bLoggedIn || !hContact)
- return nullptr;
-
- wchar_t szStatusDesc[MICBLOG_STATUS_MAX + MICBLOG_STATUS_MAX + MAX_PATH], szTime[64];
- DWORD dwTime;
- int iRet = 0;
-
- CMStringW szBlogStatus;
- if (mraGetStringW(hContact, DBSETTING_BLOGSTATUS, szBlogStatus)) {
- SYSTEMTIME tt = { 0 };
- dwTime = getDword(hContact, DBSETTING_BLOGSTATUSTIME, 0);
- if (dwTime && MakeLocalSystemTimeFromTime32(dwTime, &tt))
- mir_snwprintf(szTime, L"%04ld.%02ld.%02ld %02ld:%02ld: ", tt.wYear, tt.wMonth, tt.wDay, tt.wHour, tt.wMinute);
- else
- szTime[0] = 0;
-
- mir_snwprintf(szStatusDesc, L"%s%s", szTime, szBlogStatus.c_str());
- iRet = GetTickCount();
- ProtoBroadcastAck(hContact, ACKTYPE_AWAYMSG, ACKRESULT_SUCCESS, (HANDLE)iRet, (LPARAM)szStatusDesc);
- }
- return (HANDLE)iRet;
-}
-
-int CMraProto::SetAwayMsg(int iStatus, const wchar_t *msg)
-{
- if (!m_bLoggedIn)
- return 1;
-
- size_t dwStatusDescSize = mir_wstrlen(msg);
- DWORD dwStatus = iStatus;
- DWORD dwXStatus = m_iXStatus;
-
- // не отправл¤ем новый статусный текст дл¤ хстатусов, дл¤ хстатусов только эвей сообщени¤
- if (dwStatus != ID_STATUS_ONLINE || IsXStatusValid(dwXStatus) == FALSE) {
- dwStatusDescSize = min(dwStatusDescSize, STATUS_DESC_MAX);
- MraSendNewStatus(dwStatus, dwXStatus, L"", msg);
- }
- return 0;
-}
-
-int CMraProto::UserIsTyping(MCONTACT hContact, int type)
-{
- if (!m_bLoggedIn || m_iStatus == ID_STATUS_INVISIBLE || !hContact || type == PROTOTYPE_SELFTYPING_OFF)
- return 1;
-
- CMStringA szEmail;
- if (MraGetContactStatus(hContact) != ID_STATUS_OFFLINE)
- if (mraGetStringA(hContact, "e-mail", szEmail))
- if (MraMessage(FALSE, hContact, 0, MESSAGE_FLAG_NOTIFY, szEmail, L" ", nullptr, 0))
- return 0;
-
- return 1;
-}
diff --git a/protocols/MRA/src/MraProto.h b/protocols/MRA/src/MraProto.h
deleted file mode 100644
index ac8e327669..0000000000
--- a/protocols/MRA/src/MraProto.h
+++ /dev/null
@@ -1,349 +0,0 @@
-#pragma once
-
-#define SCBIFSI_LOCK_CHANGES_EVENTS 1
-#define SCBIF_ID 1
-#define SCBIF_GROUP_ID 2
-#define SCBIF_FLAG 4
-#define SCBIF_SERVER_FLAG 8
-#define SCBIF_STATUS 16
-#define SCBIF_EMAIL 32
-#define SCBIF_NICK 64
-#define SCBIF_PHONES 128
-
-#define MAIN_MENU_ITEMS_COUNT 12
-#define CONTACT_MENU_ITEMS_COUNT 10
-#define ADV_ICON_MAX 5
-
-struct MRA_FILES_QUEUE_ITEM;
-
-struct MraGroupItem
-{
- MraGroupItem(DWORD id, DWORD flags, const CMStringW &name) :
- m_id(id), m_flags(flags), m_name(name)
- {}
-
- ~MraGroupItem()
- {}
-
- DWORD m_id, m_flags;
- CMStringW m_name;
-};
-
-struct CMraProto : public PROTO<CMraProto>
-{
- CMraProto(const char*, const wchar_t*);
- ~CMraProto();
-
- //====================================================================================
- // PROTO_INTERFACE
-
- MCONTACT AddToList(int flags, PROTOSEARCHRESULT* psr) override;
- MCONTACT AddToListByEvent(int flags, int iContact, MEVENT hDbEvent) override;
-
- int Authorize(MEVENT hDBEvent) override;
- int AuthDeny(MEVENT hDBEvent, const wchar_t* szReason) override;
- int AuthRecv(MCONTACT hContact, PROTORECVEVENT*) override;
-
- HANDLE FileAllow(MCONTACT hContact, HANDLE hTransfer, const wchar_t* szPath) override;
- int FileCancel(MCONTACT hContact, HANDLE hTransfer) override;
- int FileDeny(MCONTACT hContact, HANDLE hTransfer, const wchar_t* szReason) override;
-
- INT_PTR GetCaps(int type, MCONTACT hContact) override;
- int GetInfo(MCONTACT hContact, int infoType) override;
-
- HANDLE SearchBasic(const wchar_t* id) override;
- HANDLE SearchByEmail(const wchar_t* email) override;
- HANDLE SearchByName(const wchar_t* nick, const wchar_t* firstName, const wchar_t* lastName) override;
- HWND SearchAdvanced(HWND owner) override;
- HWND CreateExtendedSearchUI(HWND owner) override;
-
- int RecvContacts(MCONTACT hContact, PROTORECVEVENT*) override;
-
- int SendContacts(MCONTACT hContact, int flags, int nContacts, MCONTACT *hContactsList) override;
- HANDLE SendFile(MCONTACT hContact, const wchar_t *szDescription, wchar_t **ppszFiles) override;
- int SendMsg(MCONTACT hContact, int flags, const char* msg) override;
-
- int SetApparentMode(MCONTACT hContact, int mode) override;
- int SetStatus(int iNewStatus) override;
-
- HANDLE GetAwayMsg(MCONTACT hContact) override;
- int SetAwayMsg(int m_iStatus, const wchar_t* msg) override;
-
- int UserIsTyping(MCONTACT hContact, int type) override;
-
- void OnBuildProtoMenu(void) override;
- void OnModulesLoaded() override;
- void OnShutdown() override;
-
- //====================================================================================
- void ShowFormattedErrorMessage(LPWSTR lpwszErrText, DWORD dwErrorCode);
- void MraPopupShowW(MCONTACT hContact, DWORD dwType, LPWSTR lpszTitle, LPCWSTR lpszMessage);
- void MraPopupShowFromContactW(MCONTACT hContact, DWORD dwType, LPCWSTR lpszMessage);
- __forceinline void MraPopupShowFromAgentW(DWORD dwType, LPCWSTR lpszMessage) {
- MraPopupShowFromContactW(NULL, dwType, lpszMessage); }
-
- __forceinline bool mraGetStaticStringA(MCONTACT Contact, const char *ValueName, char *Ret, size_t RetBuffSize, size_t *pRetBuffSize) {
- return DB_GetStaticStringA(Contact, m_szModuleName, ValueName, Ret, RetBuffSize, pRetBuffSize); }
- __forceinline bool mraGetStaticStringW(MCONTACT Contact, const char *ValueName, WCHAR *Ret, size_t RetBuffSize, size_t *pRetBuffSize) {
- return DB_GetStaticStringW(Contact, m_szModuleName, ValueName, Ret, RetBuffSize, pRetBuffSize); }
-
- __forceinline bool mraGetStringA(MCONTACT Contact, const char *ValueName, CMStringA &Ret) {
- return DB_GetStringA(Contact, m_szModuleName, ValueName, Ret); }
- __forceinline bool mraGetStringW(MCONTACT Contact, const char *ValueName, CMStringW &Ret) {
- return DB_GetStringW(Contact, m_szModuleName, ValueName, Ret); }
-
- __forceinline bool mraSetStringA(MCONTACT Contact, const char *valueName, const CMStringA &parValue) {
- return DB_SetStringExA(Contact, m_szModuleName, valueName, parValue); }
- __forceinline bool mraSetStringW(MCONTACT Contact, const char *valueName, const CMStringW &parValue) {
- return DB_SetStringExW(Contact, m_szModuleName, valueName, parValue); }
-
- __forceinline bool mraSetStringExA(MCONTACT Contact, const char *valueName, const CMStringA &parValue) {
- return DB_SetStringExA(Contact, m_szModuleName, valueName, parValue); }
- __forceinline bool mraSetStringExW(MCONTACT Contact, const char *valueName, const CMStringW &parValue) {
- return DB_SetStringExW(Contact, m_szModuleName, valueName, parValue); }
-
- __forceinline bool mraWriteContactSettingBlob(MCONTACT hContact, const char *lpszValueName, LPVOID lpbValue, size_t dwValueSize) {
- return db_set_blob(hContact, m_szModuleName, lpszValueName, lpbValue, (unsigned int)dwValueSize) != 0;
- }
- __forceinline bool mraGetContactSettingBlob(MCONTACT hContact, const char *lpszValueName, LPVOID lpbRet, size_t dwRetBuffSize, size_t *pdwRetBuffSize) {
- return DB_GetContactSettingBlob(hContact, m_szModuleName, lpszValueName, lpbRet, dwRetBuffSize, pdwRetBuffSize); }
-
- // ====| Services |====================================================================
- INT_PTR __cdecl MraSetXStatusEx(WPARAM, LPARAM);
- INT_PTR __cdecl MraGetXStatusEx(WPARAM, LPARAM);
- INT_PTR __cdecl MraGetXStatusIcon(WPARAM, LPARAM);
- INT_PTR __cdecl MraXStatusMenu(WPARAM, LPARAM, LPARAM param);
-
- INT_PTR __cdecl MraSetListeningTo(WPARAM, LPARAM);
-
- INT_PTR __cdecl MraSendSMS(WPARAM, LPARAM);
-
- INT_PTR __cdecl MraSendNudge(WPARAM, LPARAM);
-
- INT_PTR __cdecl GetUnreadEmailCount(WPARAM, LPARAM);
-
- INT_PTR __cdecl MraGetAvatarCaps(WPARAM, LPARAM);
- INT_PTR __cdecl MraGetAvatarInfo(WPARAM, LPARAM);
- INT_PTR __cdecl MraGetMyAvatar(WPARAM, LPARAM);
-
- INT_PTR __cdecl MraGotoInbox(WPARAM, LPARAM);
- INT_PTR __cdecl MraShowInboxStatus(WPARAM, LPARAM);
- INT_PTR __cdecl MraEditProfile(WPARAM, LPARAM);
- INT_PTR __cdecl MraWebSearch(WPARAM, LPARAM);
- INT_PTR __cdecl MraUpdateAllUsersInfo(WPARAM, LPARAM);
- INT_PTR __cdecl MraCheckUpdatesUsersAvt(WPARAM, LPARAM);
- INT_PTR __cdecl MraRequestAuthForAll(WPARAM, LPARAM);
-
- INT_PTR __cdecl MraRequestAuthorization(WPARAM, LPARAM);
- INT_PTR __cdecl MraGrantAuthorization(WPARAM, LPARAM);
- INT_PTR __cdecl MraSendEmail(WPARAM, LPARAM);
- INT_PTR __cdecl MraSendPostcard(WPARAM, LPARAM);
- INT_PTR __cdecl MraViewAlbum(WPARAM, LPARAM);
- INT_PTR __cdecl MraReplyBlogStatus(WPARAM, LPARAM);
- INT_PTR __cdecl MraViewVideo(WPARAM, LPARAM);
- INT_PTR __cdecl MraAnswers(WPARAM, LPARAM);
- INT_PTR __cdecl MraWorld(WPARAM, LPARAM);
- INT_PTR __cdecl MraCreateAccMgrUI(WPARAM, LPARAM);
-
- // ====| Events |======================================================================
- int __cdecl OnOptionsInit(WPARAM, LPARAM);
- int __cdecl OnPopupOptInit(WPARAM, LPARAM);
- int __cdecl OnGroupChanged(WPARAM, LPARAM);
-
- int __cdecl MraChatGcEventHook(WPARAM, LPARAM);
-
- int __cdecl MraExtraIconsApply(WPARAM, LPARAM);
-
- int __cdecl MraContactDeleted(WPARAM, LPARAM);
- int __cdecl MraDbSettingChanged(WPARAM, LPARAM);
- int __cdecl MraRebuildContactMenu(WPARAM, LPARAM);
- int __cdecl MraRebuildStatusMenu(WPARAM, LPARAM);
- int __cdecl MraMusicChanged(WPARAM, LPARAM);
-
- // ====| Data |========================================================================
- bool m_bLoggedIn;
-
- HANDLE hSendQueueHandle, hFilesQueueHandle, hMPopSessionQueue;
-
- HANDLE m_heNudgeReceived;
- HNETLIBCONN m_hConnection;
- DWORD m_dwNextPingSendTickTime;
- DWORD m_dwPingPeriod;
- volatile DWORD m_dwThreadWorkerLastPingTime;
- volatile DWORD m_dwThreadWorkerRunning;
- volatile DWORD dwCMDNum;
-
- OBJLIST<MraGroupItem> m_groups;
-
- HANDLE hAvatarsQueueHandle;
-
- HGENMENU hMainMenuItems[MAIN_MENU_ITEMS_COUNT];
- HGENMENU hContactMenuItems[CONTACT_MENU_ITEMS_COUNT];
-
- HWND hWndEMailPopupStatus;
- DWORD dwEmailMessagesTotal, m_dwEmailMessagesUnread;
-
- bool m_bShutdown;
- bool m_bHideXStatusUI;
- HGENMENU hXStatusMenuItems[MRA_XSTATUS_COUNT+4], hContactMenuRoot;
- HANDLE hExtraXstatusIcon;
- HANDLE hExtraInfo;
-
- char szNewMailSound[MAX_PATH];
-
- mir_cs csCriticalSectionSend;
-
- MCONTACT AddToListByEmail(LPCTSTR plpsEMail, LPCTSTR plpsNick, LPCTSTR plpsFirstName, LPCTSTR plpsLastName, DWORD dwFlags);
-
- DWORD MraMessage(BOOL bAddToQueue, MCONTACT hContact, DWORD dwAckType, DWORD dwFlags, const CMStringA &szEmail, const CMStringW &wszMessage, LPBYTE lpbMultiChatData, size_t dwMultiChatDataSize);
- DWORD MraMessageAsk(DWORD dwMsgID, DWORD dwFlags, const CMStringA &szEmail, const CMStringW &wszMessage, const CMStringW &wszMessageRTF);
- DWORD MraMessageRecv(const CMStringA &szFrom, DWORD dwMsgID);
- DWORD MraAddContact(MCONTACT hContact, DWORD dwContactFlag, DWORD dwGroupID, const CMStringA &szEmail, const CMStringW &wszCustomName, const CMStringA *szPhones = nullptr, const CMStringW *wszAuthMessage = nullptr);
- DWORD MraModifyContact(MCONTACT hContact, DWORD *pdwID = nullptr, DWORD *pdwContactFlag = nullptr, DWORD *pdwGroupID = nullptr, const CMStringA *pszEmail = nullptr, const CMStringW *pwszCustomName = nullptr, const CMStringA *pszPhones = nullptr);
- DWORD MraOfflineMessageDel(DWORDLONG dwMsgUIDL);
- DWORD MraMoveContactToGroup(MCONTACT hContact, DWORD dwGroupID, LPCTSTR ptszGroup);
- DWORD MraAuthorize(const CMStringA &szEmail);
- DWORD MraChangeStatus(DWORD dwStatus, const CMStringA &szStatusUri, const CMStringW &wszStatusTitle, const CMStringW &wszStatusDesc, DWORD dwFutureFlags);
- DWORD MraFileTransfer(const CMStringA &szEmail, DWORD dwIdRequest, DWORD dwFilesTotalSize, const CMStringW &lpwszFiles, const CMStringA &szAddresses);
- DWORD MraFileTransferAck(DWORD dwStatus, const CMStringA &szEmail, DWORD dwIdRequest, const CMStringA &szDescription);
- HANDLE MraWPRequestW(MCONTACT hContact, DWORD dwAckType, DWORD dwRequestFlags, const CMStringA &szUser, const CMStringA &szDomain, const CMStringW &wszNickName, const CMStringW &wszFirstName, const CMStringW &wszLastName, DWORD dwSex, DWORD dwDate1, DWORD dwDate2, DWORD dwCityID, DWORD dwZodiak, DWORD dwBirthdayMonth, DWORD dwBirthdayDay, DWORD dwCountryID, DWORD dwOnline);
- HANDLE MraWPRequestByEMail(MCONTACT hContact, DWORD dwAckType, CMStringA &szEmail);
- DWORD MraGame(const CMStringA &szEmail, DWORD dwGameSessionID, DWORD dwGameMsg, DWORD dwGameMsgID, const CMStringA &lpszData);
- DWORD MraLogin2W(const CMStringA &szLogin, const CMStringA &szPassword, DWORD dwStatus, const CMStringA &szStatusUri, CMStringW &wszStatusTitle, CMStringW &wszStatusDesc, DWORD dwFutureFlags, CMStringA &szUserAgentFormatted, CMStringA &szUserAgent);
- DWORD MraSMSW(MCONTACT hContact, const CMStringA &lpszPhone, const CMStringW &lpwszMessage);
- DWORD MraProxy(const CMStringA &szEmail, DWORD dwIDRequest, DWORD dwDataType, const CMStringA &lpszData, const CMStringA &szAddresses, MRA_GUID mguidSessionID);
- DWORD MraProxyAck(DWORD dwStatus, const CMStringA &szEmail, DWORD dwIDRequest, DWORD dwDataType, const CMStringA &lpszData, const CMStringA &szAddresses, MRA_GUID mguidSessionID);
- DWORD MraChangeUserBlogStatus(DWORD dwFlags, const CMStringW &wszText, DWORDLONG dwBlogStatusID);
-
- DWORD MraSendPacket(HNETLIBCONN hConnection, DWORD dwCMDNum, DWORD dwType, LPVOID lpData, size_t dwDataSize);
- DWORD MraSendCMD(DWORD dwType, LPVOID lpData, size_t dwDataSize);
- DWORD MraSendQueueCMD(HANDLE hSendQueueHandle, DWORD dwFlags, MCONTACT hContact, DWORD dwAckType, LPBYTE lpbDataQueue, size_t dwDataQueueSize, DWORD dwType, LPVOID lpData, size_t dwDataSize);
-
- DWORD MraSendNewStatus(DWORD dwStatusMir, DWORD dwXStatusMir, const CMStringW &wszStatusTitle, const CMStringW &wszStatusDesc);
-
- void MraAddrListStoreToContact(MCONTACT hContact, MRA_ADDR_LIST *pmalAddrList);
-
- DWORD GetContactFlags(MCONTACT hContact);
- DWORD SetContactFlags(MCONTACT hContact, DWORD dwContactFlag);
- DWORD GetContactBasicInfoW(MCONTACT hContact, DWORD *pdwID, DWORD *pdwGroupID, DWORD *pdwContactFlag, DWORD *pdwContactSeverFlags, DWORD *pdwStatus, CMStringA *szEmail, CMStringW *wszNick, CMStringA *szPhones);
- DWORD SetContactBasicInfoW(MCONTACT hContact, DWORD dwSetInfoFlags, DWORD dwFlags, DWORD dwID, DWORD dwGroupID, DWORD dwContactFlag, DWORD dwContactSeverFlags, DWORD dwStatus, const CMStringA *szEmail, const CMStringW *wszNick, const CMStringA *szPhones);
-
- DWORD GetContactEMailCount(MCONTACT hContact, BOOL bMRAOnly);
- bool GetContactFirstEMail(MCONTACT hContact, BOOL bMRAOnly, CMStringA &szRetBuff);
-
- bool IsContactMra(MCONTACT hContact);
- bool IsEMailMy(const CMStringA &szEmail);
- bool IsEMailChatAgent(const CMStringA &szEmail);
- bool IsContactChatAgent(MCONTACT hContact);
-
- MCONTACT MraHContactFromEmail(const CMStringA &szEmail, BOOL bAddIfNeeded, BOOL bTemporary, BOOL *pbAdded);
- bool MraUpdateContactInfo(MCONTACT hContact);
- DWORD MraSetXStatusInternal(DWORD dwXStatus);
- DWORD MraGetContactStatus(MCONTACT hContact);
- DWORD MraSetContactStatus(MCONTACT hContact, DWORD dwNewStatus);
- DWORD MraContactCapabilitiesGet(MCONTACT hContact);
- void MraContactCapabilitiesSet(MCONTACT hContact, DWORD dwFutureFlags);
- void MraUpdateEmailStatus(const CMStringA &szFrom, const CMStringA &szSubject, bool force_display);
- DWORD MraConvertToRTFW(const CMStringW &wszMessage, CMStringA &szMessageRTF);
-
- DWORD StartConnect();
- void __cdecl MraThreadProc(LPVOID lpParameter);
- DWORD MraGetNLBData(CMStringA &szHost, WORD *pwPort);
- DWORD MraNetworkDispatcher();
-
- bool MraCommandDispatcher(struct mrim_packet_header_t *pmaHeader);
- bool CmdHelloAck(BinBuffer &buf);
- bool CmdLoginAck();
- bool CmdLoginRejected(BinBuffer &buf);
- bool CmdMessageAck(BinBuffer &buf);
- bool CmdMessageStatus(ULONG seq, BinBuffer &buf);
- bool CmdOfflineMessageAck(BinBuffer &buf);
- bool CmdAuthAck(BinBuffer &buf);
- bool CmdPopSession(BinBuffer &buf);
- bool CmdFileTransfer(BinBuffer &buf);
- bool CmdFileTransferAck(BinBuffer &buf);
- bool CmdUserInfo(BinBuffer &buf);
- bool CmdUserStatus(BinBuffer &buf);
- bool CmdContactAck(int cmd, int seq, BinBuffer &buf);
- bool CmdAnketaInfo(int seq, BinBuffer &buf);
- bool CmdGame(BinBuffer &buf);
- bool CmdClist2(BinBuffer &buf);
- bool CmdProxy(BinBuffer &buf);
- bool CmdProxyAck(BinBuffer &buf);
- bool CmdNewMail(BinBuffer &buf);
- bool CmdBlogStatus(BinBuffer &buf);
-
- DWORD MraRecvCommand_Message(DWORD dwTime, DWORD dwFlags, CMStringA &plpsFrom, CMStringA &plpsText, CMStringA &plpsRFTText, CMStringA &plpsMultiChatData);
-
- void SetExtraIcons(MCONTACT hContact);
-
- void InitMenus(void);
- HGENMENU CListCreateMenu(LONG lPosition, LONG lPopupPosition, BOOL bIsStatus, const IconItem *pgdiItems, size_t dwCount, HGENMENU *hResult);
-
- DWORD ProtoBroadcastAckAsync(MCONTACT hContact, int type, int hResult, HANDLE hProcess, LPARAM lParam);
- CMStringA CreateBlobFromContact(MCONTACT hContact, const CMStringW &wszRequestReason);
-
- bool GetPassDB(CMStringA& pass);
-
- bool MraRequestXStatusDetails(DWORD dwXStatus);
- bool MraSendReplyBlogStatus(MCONTACT hContact);
- DWORD MraSelectEMailDlgShow(MCONTACT hContact, DWORD dwType);
-
- DWORD MraMrimProxyConnect(HANDLE hMraMrimProxyData, HNETLIBCONN *phConnection);
-
- DWORD MraMPopSessionQueueAddUrl(HANDLE hMPopSessionQueue, const CMStringA &szUrl);
- DWORD MraMPopSessionQueueAddUrlAndEMail(HANDLE hMPopSessionQueue, const CMStringA &, CMStringA &szEmail);
- void MraMPopSessionQueueStart(HANDLE hMPopSessionQueue);
- void MraMPopSessionQueueFlush(HANDLE hMPopSessionQueue);
-
- size_t MraFilesQueueGetLocalAddressesList(LPSTR lpszBuff, size_t dwBuffSize, DWORD dwPort);
- DWORD MraFilesQueueAddReceive(HANDLE hFilesQueueHandle, DWORD dwFlags, MCONTACT hContact, DWORD dwIDRequest, const CMStringW &wszFiles, const CMStringA &szAddresses);
- DWORD MraFilesQueueAddSend(HANDLE hFilesQueueHandle, DWORD dwFlags, MCONTACT hContact, LPWSTR *plpwszFiles, size_t dwFilesCount, DWORD *pdwIDRequest);
- DWORD MraFilesQueueCancel(HANDLE hFilesQueueHandle, DWORD dwIDRequest, BOOL bSendDecline);
- DWORD MraFilesQueueStartMrimProxy(HANDLE hFilesQueueHandle, DWORD dwIDRequest);
- DWORD MraFilesQueueSendMirror(HANDLE hFilesQueueHandle, DWORD dwIDRequest, const CMStringA &szAddresses);
- bool MraFilesQueueHandCheck(HNETLIBCONN hConnection, MRA_FILES_QUEUE_ITEM *pmrafqFilesQueueItem);
- HANDLE MraFilesQueueConnectOut(MRA_FILES_QUEUE_ITEM *pmrafqFilesQueueItem);
- HANDLE MraFilesQueueConnectIn(MRA_FILES_QUEUE_ITEM *pmrafqFilesQueueItem);
- DWORD MraFilesQueueAccept(HANDLE hFilesQueueHandle, DWORD dwIDRequest, LPCWSTR lpwszPath, size_t dwPathSize);
-
- void __cdecl MraFilesQueueRecvThreadProc(LPVOID lpParameter);
- void __cdecl MraFilesQueueSendThreadProc(LPVOID lpParameter);
-
- bool bChatExists;
- bool MraChatRegister();
- INT_PTR MraChatSessionNew(MCONTACT hContactChatSession);
- void MraChatSessionDestroy(MCONTACT hContactChatSession);
- void MraChatSendPrivateMessage(LPSTR lpwszEMail);
-
- INT_PTR MraChatSessionEventSendByHandle(MCONTACT hContactChatSession, int iType, DWORD dwFlags, const CMStringA &szUID, LPCWSTR lpwszStatus, LPCWSTR lpwszMessage, DWORD_PTR dwItemData, DWORD dwTime);
- INT_PTR MraChatSessionInvite(MCONTACT hContactChatSession, const CMStringA &lpszEMailInMultiChat, DWORD dwTime);
- INT_PTR MraChatSessionMembersAdd(MCONTACT hContactChatSession, const CMStringA &lpszEMailInMultiChat, DWORD dwTime);
- INT_PTR MraChatSessionJoinUser(MCONTACT hContactChatSession, const CMStringA &lpszEMailInMultiChat, DWORD dwTime);
- INT_PTR MraChatSessionLeftUser(MCONTACT hContactChatSession, const CMStringA &lpszEMailInMultiChat, DWORD dwTime);
- INT_PTR MraChatSessionSetIviter(MCONTACT hContactChatSession, const CMStringA &lpszEMailInMultiChat);
- INT_PTR MraChatSessionSetOwner(MCONTACT hContactChatSession, const CMStringA &lpszEMailInMultiChat);
- INT_PTR MraChatSessionMessageAdd(MCONTACT hContactChatSession, const CMStringA &lpszEMailInMultiChat, const CMStringW &wszMessage, DWORD dwTime);
-
- DWORD MraAvatarsQueueInitialize(HANDLE *phAvatarsQueueHandle);
- void MraAvatarsQueueClear(HANDLE hAvatarsQueueHandle);
- void MraAvatarsQueueSuspend(HANDLE hAvatarsQueueHandle);
- void MraAvatarsQueueDestroy(HANDLE hAvatarsQueueHandle);
- DWORD MraAvatarsQueueAdd(HANDLE hAvatarsQueueHandle, DWORD dwFlags, MCONTACT hContact, DWORD *pdwAvatarsQueueID);
- bool MraAvatarsGetContactTime (MCONTACT hContact, LPSTR lpszValueName, SYSTEMTIME *pstTime);
- void MraAvatarsSetContactTime (MCONTACT hContact, LPSTR lpszValueName, SYSTEMTIME *pstTime);
- DWORD MraAvatarsGetFileName(HANDLE hAvatarsQueueHandle, MCONTACT hContact, DWORD dwFormat, CMStringW &res);
- DWORD MraAvatarsQueueGetAvatar(HANDLE hAvatarsQueueHandle, DWORD dwFlags, MCONTACT hContact, DWORD *pdwAvatarsQueueID, DWORD *pdwFormat, LPTSTR lpszPath);
- DWORD MraAvatarsQueueGetAvatarSimple(HANDLE hAvatarsQueueHandle, DWORD dwFlags, MCONTACT hContact);
- DWORD MraAvatarsDeleteContactAvatarFile(HANDLE hAvatarsQueueHandle, MCONTACT hContact);
-
- void __cdecl MraAvatarsThreadProc(LPVOID lpParameter);
-};
-
-struct CMPlugin : public ACCPROTOPLUGIN<CMraProto>
-{
- CMPlugin();
-
- int Load() override;
- int Unload() override;
-};
diff --git a/protocols/MRA/src/MraRTFMsg.cpp b/protocols/MRA/src/MraRTFMsg.cpp
deleted file mode 100644
index 5cec2d80a6..0000000000
--- a/protocols/MRA/src/MraRTFMsg.cpp
+++ /dev/null
@@ -1,246 +0,0 @@
-#include "stdafx.h"
-#include "MraRTFMsg.h"
-
-
-#define COLORTABLE_COUNT 8
-#define RTF_COLORTBLCOLOURS "\\red255\\green0\\blue0;\\red0\\green255\\blue0;\\red0\\green0\\blue255;\\red255\\green0\\blue255;\\red255\\green255\\blue0;\\red0\\green255\\blue255;\\red0\\green0\\blue0;\\red255\\green255\\blue255;"
-static const LPSTR lpszColours[COLORTABLE_COUNT] =
-{
- "red",
- "green",
- "blue",
- "magenta",
- "yellow",
- "cyan",
- "black",
- "white"
-};
-
-#define CRLF "\r\n"
-#define PAR "\\par "
-
-
-#define BB_COLOR_TAG "[color="
-#define SYMBOLS_COUNT 19
-static const LPSTR lpszSimbols[SYMBOLS_COUNT] =
-{
- "\r\n",
- "\\",
- "{",
- "}",
- "[b]",
- "[/b]",
- "[u]",
- "[/u]",
- "[i]",
- "[/i]",
- "[/color]",
- "[color = red]",
- "[color = green]",
- "[color = blue]",
- "[color = magenta]",
- "[color = yellow]",
- "[color = cyan]",
- "[color = black]",
- "[color = white]",
-};
-
-static const size_t dwcSimbolsCount[SYMBOLS_COUNT] =
-{
- 2,
- 1,
- 1,
- 1,
- 3,
- 4,
- 3,
- 4,
- 3,
- 4,
- 8,
- 11,
- 13,
- 12,
- 15,
- 14,
- 12,
- 13,
- 13,
-};
-
-static const LPSTR lpszRTFTags[SYMBOLS_COUNT] =
-{
- "\\par",
- "\\\\",
- "\\{",
- "\\}",
- "{\\b ",
- "}",
- "{\\ul ",
- "}",
- "{\\i ",
- "}",
- "}",
- "{\\cf2 ",
- "{\\cf3 ",
- "{\\cf4 ",
- "{\\cf5 ",
- "{\\cf6 ",
- "{\\cf7 ",
- "{\\cf8 ",
- "{\\cf9 ",
-};
-
-static const size_t dwcRTFTagsCount[SYMBOLS_COUNT] =
-{
- 4, 2, 2, 2, 4, 1, 5, 1, 4, 1, 1, 6, 6, 6, 6, 6, 6, 6, 6
-};
-
-DWORD MraTextToRTFData(LPSTR lpszMessage, size_t dwMessageSize, LPSTR lpszMessageConverted, size_t dwMessageConvertedBuffSize, size_t *pdwMessageConvertedSize);
-
-bool MraIsMessageFlashAnimation(const CMStringW &lpwszMessage)
-{
- int iStart = lpwszMessage.Find(L"<SMILE>id=flas");
- if (iStart != -1)
- if (lpwszMessage.Find(L"'</SMILE>", iStart) != -1)
- return true;
-
- return false;
-}
-
-DWORD MraTextToRTFData(LPSTR lpszMessage, size_t dwMessageSize, LPSTR lpszMessageConverted, size_t dwMessageConvertedBuffSize, size_t *pdwMessageConvertedSize)
-{
- if (lpszMessage && dwMessageSize && lpszMessageConverted && dwMessageConvertedBuffSize) {
- BYTE tm, bCurByte;
- LPSTR lpszMessageConvertedCur, lpszMessageConvertedMax;
- size_t i;
-
- lpszMessageConvertedCur = lpszMessageConverted;
- lpszMessageConvertedMax = (lpszMessageConverted+dwMessageConvertedBuffSize);
- for (i = 0; i < dwMessageSize && lpszMessageConvertedMax-lpszMessageConvertedCur > 3; i++) {
- *((WORD*)lpszMessageConvertedCur) = *((WORD*)"\\'");
- bCurByte = (*((BYTE*)lpszMessage+i));
- tm = (bCurByte>>4)&0xf;
- lpszMessageConvertedCur[2] = (tm>9)? ('a'+tm-10):('0'+tm);
-
- tm = bCurByte&0xf;
- lpszMessageConvertedCur[3] = (tm>9)? ('a'+tm-10):('0'+tm);
- lpszMessageConvertedCur += 4;
- (*((BYTE*)lpszMessageConvertedCur)) = 0;
- }
- if (pdwMessageConvertedSize)
- *pdwMessageConvertedSize = lpszMessageConvertedCur - lpszMessageConverted;
- return NO_ERROR;
- }
-
- if (pdwMessageConvertedSize)
- *pdwMessageConvertedSize = 0;
- return ERROR_INVALID_HANDLE;
-}
-
-DWORD MraSymbolsToRTFTags(LPSTR lpszMessage, size_t dwMessageSize, LPSTR lpszMessageConverted, size_t dwMessageConvertedBuffSize, size_t *pdwMessageConvertedSize)
-{
- DWORD dwRetErrorCode = NO_ERROR;
- LPSTR lpszFounded[SYMBOLS_COUNT], lpszMessageConvertedCur, lpszMessageCur, lpszMessageCurPrev, lpszMessageConvertedMax;
- size_t i, dwFirstFoundIndex = 0, dwFoundCount = 0, dwMemPartToCopy;
-
- lpszMessageCurPrev = lpszMessage;
- lpszMessageConvertedCur = lpszMessageConverted;
- lpszMessageConvertedMax = (lpszMessageConverted+dwMessageConvertedBuffSize);
- for (i = 0; i < SYMBOLS_COUNT; i++) { // loking for first time
- lpszFounded[i] = (LPSTR)MemoryFind((lpszMessageCurPrev-lpszMessage), lpszMessage, dwMessageSize, lpszSimbols[i], dwcSimbolsCount[i]);
- if (lpszFounded[i]) dwFoundCount++;
- }
-
- while (dwFoundCount) {
- for (i = 0;i<SYMBOLS_COUNT;i++)
- if (lpszFounded[i] && (lpszFounded[i]<lpszFounded[dwFirstFoundIndex] || lpszFounded[dwFirstFoundIndex] == nullptr))
- dwFirstFoundIndex = i;
-
- if (lpszFounded[dwFirstFoundIndex]) { // found
- dwMemPartToCopy = (lpszFounded[dwFirstFoundIndex]-lpszMessageCurPrev);
- if (lpszMessageConvertedMax > (lpszMessageConvertedCur+(dwMemPartToCopy+dwcRTFTagsCount[dwFirstFoundIndex]))) {
- MraTextToRTFData(lpszMessageCurPrev, dwMemPartToCopy, lpszMessageConvertedCur, (lpszMessageConvertedMax-lpszMessageConvertedCur), &i);lpszMessageConvertedCur += i;
- memcpy(lpszMessageConvertedCur, lpszRTFTags[dwFirstFoundIndex], dwcRTFTagsCount[dwFirstFoundIndex]);lpszMessageConvertedCur += dwcRTFTagsCount[dwFirstFoundIndex];
- lpszMessageCurPrev = (lpszFounded[dwFirstFoundIndex]+dwcSimbolsCount[dwFirstFoundIndex]);
-
- for (i = 0;i<SYMBOLS_COUNT;i++) { // looking for the next time
- if (lpszFounded[i] && lpszFounded[i] < lpszMessageCurPrev) {
- dwFoundCount--;// вычитаем тут, чтобы учесть схожие смайлы: "):-(" и ":-("
- lpszFounded[i] = (LPSTR)MemoryFind((lpszMessageCurPrev-lpszMessage), lpszMessage, dwMessageSize, lpszSimbols[i], dwcSimbolsCount[i]);
- if (lpszFounded[i]) dwFoundCount++;
- }
- }
- }
- else {
- dwRetErrorCode = ERROR_BUFFER_OVERFLOW;
- _CrtDbgBreak();
- break;
- }
- }
- }
-
- lpszMessageCur = (lpszMessage+dwMessageSize);
- MraTextToRTFData(lpszMessageCurPrev, (lpszMessageCur-lpszMessageCurPrev), lpszMessageConvertedCur, (lpszMessageConvertedMax-lpszMessageConvertedCur), &i);lpszMessageConvertedCur += i;
- *((WORD*)lpszMessageConvertedCur) = 0;
-
- if (pdwMessageConvertedSize)
- *pdwMessageConvertedSize = lpszMessageConvertedCur - lpszMessageConverted;
-
- return(dwRetErrorCode);
-}
-
-DWORD CMraProto::MraConvertToRTFW(const CMStringW &wszMessage, CMStringA &szMessageRTF)
-{
- if (wszMessage.IsEmpty())
- return ERROR_INVALID_HANDLE;
-
- ptrA lpszMessage( mir_u2a(wszMessage));
- if (!lpszMessage)
- return GetLastError();
-
- LPCSTR lpszBase = szMessageRTF;
- LPSTR lpszMessageRTFCur = (LPSTR)lpszBase;
- size_t dwtm;
- DWORD dwRTFFontColour, dwFontSize;
- LOGFONT lf = {0};
-
- dwRTFFontColour = getDword("RTFFontColour", MRA_DEFAULT_RTF_FONT_COLOUR);
- if ( !mraGetContactSettingBlob(NULL, "RTFFont", &lf, sizeof(LOGFONT), nullptr)) {
- HDC hDC = GetDC(nullptr);// kegl
- lf.lfCharSet = MRA_DEFAULT_RTF_FONT_CHARSET;
- lf.lfHeight = -MulDiv(MRA_DEFAULT_RTF_FONT_SIZE, GetDeviceCaps(hDC, LOGPIXELSY), 72);
- mir_wstrncpy(lf.lfFaceName, MRA_DEFAULT_RTF_FONT_NAME, LF_FACESIZE);
- ReleaseDC(nullptr, hDC);
- }
- dwFontSize = ((-lf.lfHeight)+(((-lf.lfHeight)+4)/8));
-
- lpszMessageRTFCur += mir_snprintf(lpszMessageRTFCur, (szMessageRTF.GetLength()-(lpszMessageRTFCur-lpszBase)), "{\\rtf1\\ansi\\ansicpg1251\\deff0\\deflang1049{\\fonttbl{\\f0\\fnil\\fcharset%lu %s;}}\r\n", lf.lfCharSet, lf.lfFaceName);
-
- if (MemoryFind(0, lpszMessage, wszMessage.GetLength(), BB_COLOR_TAG, (sizeof(BB_COLOR_TAG)-1)))
- lpszMessageRTFCur += mir_snprintf(lpszMessageRTFCur, (szMessageRTF.GetLength()-(lpszMessageRTFCur-lpszBase)), "{\\colortbl;\\red%lu\\green%lu\\blue%lu;%s}\r\n", (*((RGBTRIPLE*)&dwRTFFontColour)).rgbtBlue, (*((RGBTRIPLE*)&dwRTFFontColour)).rgbtGreen, (*((RGBTRIPLE*)&dwRTFFontColour)).rgbtRed, RTF_COLORTBLCOLOURS);
- else
- lpszMessageRTFCur += mir_snprintf(lpszMessageRTFCur, (szMessageRTF.GetLength()-(lpszMessageRTFCur-lpszBase)), "{\\colortbl;\\red%lu\\green%lu\\blue%lu;}\r\n", (*((RGBTRIPLE*)&dwRTFFontColour)).rgbtBlue, (*((RGBTRIPLE*)&dwRTFFontColour)).rgbtGreen, (*((RGBTRIPLE*)&dwRTFFontColour)).rgbtRed);
-
- LPSTR lpszNotfink = "",
- lpszBold = ((lf.lfWeight == FW_BOLD)? "\\b1":lpszNotfink),
- lpszItalic = (lf.lfItalic? "\\i1":lpszNotfink),
- lpszUnderline = (lf.lfUnderline? "\\ul1":lpszNotfink),
- lpszStrikeOut = (lf.lfStrikeOut? "\\strike1":lpszNotfink);
- lpszMessageRTFCur += mir_snprintf(lpszMessageRTFCur, (szMessageRTF.GetLength()-(lpszMessageRTFCur-lpszBase)), "\\viewkind4\\uc1\\pard\\cf1\\f0\\fs%lu%s%s%s%s", dwFontSize, lpszBold, lpszItalic, lpszUnderline, lpszStrikeOut);
-
- if (!MraSymbolsToRTFTags(lpszMessage, wszMessage.GetLength(), lpszMessageRTFCur, (szMessageRTF.GetLength() - (lpszMessageRTFCur - lpszBase)), &dwtm)) {
- lpszMessageRTFCur += dwtm;
- if ((lpszBase + szMessageRTF.GetLength()) >= (lpszMessageRTFCur + sizeof(PAR) + sizeof(CRLF) + 2)) {
- memcpy(lpszMessageRTFCur, PAR, sizeof(PAR)); lpszMessageRTFCur += (sizeof(PAR) - 1);
- memcpy(lpszMessageRTFCur, CRLF, sizeof(CRLF)); lpszMessageRTFCur += (sizeof(CRLF) - 1);
- memcpy(lpszMessageRTFCur, "}", 2); lpszMessageRTFCur += 2;
- debugLogA("%s\n", szMessageRTF.c_str());
- return NO_ERROR;
- }
-
- return ERROR_BUFFER_OVERFLOW;
- }
-
- return 0;
-}
diff --git a/protocols/MRA/src/MraRTFMsg.h b/protocols/MRA/src/MraRTFMsg.h
deleted file mode 100644
index b0abacf5e5..0000000000
--- a/protocols/MRA/src/MraRTFMsg.h
+++ /dev/null
@@ -1,9 +0,0 @@
-#if !defined(AFX_MRA_RTFMSG_H__F58D13FF_F6F2_476C_B8F0_7B9E9357CF48__INCLUDED_)
-#define AFX_MRA_RTFMSG_H__F58D13FF_F6F2_476C_B8F0_7B9E9357CF48__INCLUDED_
-
-
-#pragma once
-
-bool MraIsMessageFlashAnimation(const CMStringW &lpwszMessage);
-
-#endif // !defined(AFX_MRA_RTFMSG_H__F58D13FF_F6F2_476C_B8F0_7B9E9357CF48__INCLUDED_)
diff --git a/protocols/MRA/src/MraSelectEMail.cpp b/protocols/MRA/src/MraSelectEMail.cpp
deleted file mode 100644
index 19dac7a061..0000000000
--- a/protocols/MRA/src/MraSelectEMail.cpp
+++ /dev/null
@@ -1,152 +0,0 @@
-#include "stdafx.h"
-#include "MraSelectEMail.h"
-
-struct MraSelectEMailDlgData
-{
- CMraProto *ppro;
- MCONTACT hContact;
- DWORD dwType;
-};
-
-void AddContactEMailToListParam(MCONTACT hContact, BOOL bMRAOnly, LPSTR lpszModule, LPSTR lpszValueName, HWND hWndList)
-{
- CMStringA szEmail;
- if (DB_GetStringA(hContact, lpszModule, lpszValueName, szEmail)) {
- if (bMRAOnly == FALSE || IsEMailMR(szEmail)) {
- WCHAR wszBuff[MAX_EMAIL_LEN];
- MultiByteToWideChar(MRA_CODE_PAGE, 0, szEmail, -1, wszBuff, _countof(wszBuff));
- if (SendMessage(hWndList, LB_FINDSTRING, -1, (LPARAM)wszBuff) == LB_ERR)
- SendMessage(hWndList, LB_ADDSTRING, 0, (LPARAM)wszBuff);
- }
- }
-
- for (int i = 0; true; i++) {
- char szBuff[MAX_PATH];
- mir_snprintf(szBuff, "%s%lu", lpszValueName, i);
- if (DB_GetStringA(hContact, lpszModule, szBuff, szEmail)) {
- if (bMRAOnly == FALSE || IsEMailMR(szEmail)) {
- WCHAR wszBuff[MAX_EMAIL_LEN];
- MultiByteToWideChar(MRA_CODE_PAGE, 0, szEmail, -1, wszBuff, _countof(wszBuff));
- if (SendMessage(hWndList, LB_FINDSTRING, -1, (LPARAM)wszBuff) == LB_ERR)
- SendMessage(hWndList, LB_ADDSTRING, 0, (LPARAM)wszBuff);
- }
- }
- else if (i > EMAILS_MIN_COUNT)
- break;
- }
-}
-
-INT_PTR CALLBACK MraSelectEMailDlgProc(HWND hWndDlg, UINT message, WPARAM wParam, LPARAM lParam)
-{
- MraSelectEMailDlgData *dat = (MraSelectEMailDlgData*)GetWindowLongPtr(hWndDlg, GWLP_USERDATA);
-
- switch (message) {
- case WM_INITDIALOG:
- TranslateDialogDefault(hWndDlg);
- dat = (MraSelectEMailDlgData*)lParam;
- {
- BOOL bMRAOnly;
-
- SetWindowLongPtr(hWndDlg, GWLP_USERDATA, (LONG_PTR)lParam);
- HWND hWndList = GetDlgItem(hWndDlg, IDC_LIST_EMAILS);
-
- switch (dat->dwType) {
- case MRA_SELECT_EMAIL_TYPE_SEND_POSTCARD:
- bMRAOnly = FALSE;
- break;
- case MRA_SELECT_EMAIL_TYPE_VIEW_ALBUM:
- case MRA_SELECT_EMAIL_TYPE_READ_BLOG:
- bMRAOnly = TRUE;
- break;
- default:
- bMRAOnly = FALSE;
- break;
- }
-
- LPSTR lpszProto = dat->hContact ? GetContactProto(dat->hContact) : dat->ppro->m_szModuleName;
-
- AddContactEMailToListParam(dat->hContact, bMRAOnly, lpszProto, "e-mail", hWndList);
- AddContactEMailToListParam(dat->hContact, bMRAOnly, "UserInfo", "e-mail", hWndList);
- AddContactEMailToListParam(dat->hContact, bMRAOnly, "UserInfo", "Mye-mail", hWndList);
- AddContactEMailToListParam(dat->hContact, bMRAOnly, "UserInfo", "Companye-mail", hWndList);
- AddContactEMailToListParam(dat->hContact, bMRAOnly, "UserInfo", "MyCompanye-mail", hWndList);
- }
- return TRUE;
-
- case WM_CLOSE:
- DestroyWindow(hWndDlg);
- break;
-
- case WM_DESTROY:
- SetWindowLongPtr(hWndDlg, GWLP_USERDATA, 0);
- mir_free(dat);
- EndDialog(hWndDlg, NO_ERROR);
- break;
-
- case WM_COMMAND:
- switch (LOWORD(wParam)) {
- case IDC_LIST_EMAILS:
- if (HIWORD(wParam) == LBN_DBLCLK)
- SendMessage(hWndDlg, WM_COMMAND, MAKEWPARAM(IDOK, BN_CLICKED), (LPARAM)GetDlgItem(hWndDlg, IDOK));
- break;
-
- case IDOK:
- {
- CMStringA szEmail;
- WCHAR wszBuff[MAX_PATH];
-
- SendDlgItemMessage(hWndDlg, IDC_LIST_EMAILS, LB_GETTEXT, SendDlgItemMessage(hWndDlg, IDC_LIST_EMAILS, LB_GETCURSEL, 0, 0), (LPARAM)wszBuff);
- szEmail = wszBuff;
- szEmail.MakeLower();
-
- switch (dat->dwType) {
- case MRA_SELECT_EMAIL_TYPE_SEND_POSTCARD:
- {
- CMStringA szUrl;
- szUrl.Format("http://cards.mail.ru/event.html?rcptname=%s&rcptemail=%s", _T2A(Clist_GetContactDisplayName(dat->hContact)), szEmail.c_str());
- dat->ppro->MraMPopSessionQueueAddUrl(dat->ppro->hMPopSessionQueue, szUrl);
- }
- break;
- case MRA_SELECT_EMAIL_TYPE_VIEW_ALBUM:
- dat->ppro->MraMPopSessionQueueAddUrlAndEMail(dat->ppro->hMPopSessionQueue, MRA_FOTO_URL, szEmail);
- break;
- case MRA_SELECT_EMAIL_TYPE_READ_BLOG:
- dat->ppro->MraMPopSessionQueueAddUrlAndEMail(dat->ppro->hMPopSessionQueue, MRA_BLOGS_URL, szEmail);
- break;
- case MRA_SELECT_EMAIL_TYPE_VIEW_VIDEO:
- dat->ppro->MraMPopSessionQueueAddUrlAndEMail(dat->ppro->hMPopSessionQueue, MRA_VIDEO_URL, szEmail);
- break;
- case MRA_SELECT_EMAIL_TYPE_ANSWERS:
- dat->ppro->MraMPopSessionQueueAddUrlAndEMail(dat->ppro->hMPopSessionQueue, MRA_ANSWERS_URL, szEmail);
- break;
- case MRA_SELECT_EMAIL_TYPE_WORLD:
- dat->ppro->MraMPopSessionQueueAddUrlAndEMail(dat->ppro->hMPopSessionQueue, MRA_WORLD_URL, szEmail);
- break;
- }
- }
- //break;
- case IDCANCEL:
- DestroyWindow(hWndDlg);
- break;
- default:
- break;
- }
- break;
- default:
- break;
- }
-
- return FALSE;
-}
-
-DWORD CMraProto::MraSelectEMailDlgShow(MCONTACT hContact, DWORD dwType)
-{
- MraSelectEMailDlgData *dat = (MraSelectEMailDlgData*)mir_calloc(sizeof(MraSelectEMailDlgData));
- if (dat) {
- dat->ppro = this;
- dat->hContact = hContact;
- dat->dwType = dwType;
- DialogBoxParam(g_plugin.getInst(), MAKEINTRESOURCE(IDD_DIALOG_SELECT_EMAIL), nullptr, MraSelectEMailDlgProc, (LPARAM)dat);
- }
- return 0;
-}
diff --git a/protocols/MRA/src/MraSelectEMail.h b/protocols/MRA/src/MraSelectEMail.h
deleted file mode 100644
index e0ba9e078c..0000000000
--- a/protocols/MRA/src/MraSelectEMail.h
+++ /dev/null
@@ -1,15 +0,0 @@
-#if !defined(AFX_MRA_SELECT_EMAIL_H__F58D13FF_F6F2_476C_B8F0_7B9E9357CF48__INCLUDED_)
-#define AFX_MRA_SELECT_EMAIL_H__F58D13FF_F6F2_476C_B8F0_7B9E9357CF48__INCLUDED_
-
-
-#pragma once
-
-#define MRA_SELECT_EMAIL_TYPE_SEND_POSTCARD 1
-#define MRA_SELECT_EMAIL_TYPE_VIEW_ALBUM 2
-#define MRA_SELECT_EMAIL_TYPE_READ_BLOG 3
-#define MRA_SELECT_EMAIL_TYPE_VIEW_VIDEO 4
-#define MRA_SELECT_EMAIL_TYPE_ANSWERS 5
-#define MRA_SELECT_EMAIL_TYPE_WORLD 6
-
-
-#endif // !defined(AFX_MRA_SELECT_EMAIL_H__F58D13FF_F6F2_476C_B8F0_7B9E9357CF48__INCLUDED_)
diff --git a/protocols/MRA/src/MraSendCommand.cpp b/protocols/MRA/src/MraSendCommand.cpp
deleted file mode 100644
index 15764f7c08..0000000000
--- a/protocols/MRA/src/MraSendCommand.cpp
+++ /dev/null
@@ -1,542 +0,0 @@
-#include "stdafx.h"
-#include "MraRTFMsg.h"
-#include "proto.h"
-
-class OutBuffer
-{
- PBYTE m_buf;
- size_t m_max, m_actual;
-
-public:
- OutBuffer() : m_buf(nullptr), m_max(0), m_actual(0) {}
- ~OutBuffer() { if (m_buf) free(m_buf); }
-
- void* Allocate(size_t len)
- {
- if (m_actual + len >= m_max) {
- size_t increment = (len > 4096) ? len + 4096 : 4096;
- m_buf = (PBYTE)realloc(m_buf, m_max += increment);
- }
-
- void *res = m_buf + m_actual; m_actual += len;
- return res;
- }
-
- PBYTE Data() const { return m_buf; }
- size_t Len() const { return m_actual; }
-
- void SetUL(DWORD dwData)
- {
- *(DWORD*)Allocate(sizeof(DWORD)) = dwData;
- }
-
- void SetUIDL(DWORDLONG dwData)
- {
- *(DWORDLONG*)Allocate(sizeof(dwData)) = dwData;
- }
-
- void SetGUID(MRA_GUID guidData)
- {
- *(MRA_GUID*)Allocate(sizeof(guidData)) = guidData;
- }
-
- void SetLPS(const CMStringA &str)
- {
- SetUL(str.GetLength());
- memcpy(Allocate(str.GetLength()), str, str.GetLength());
- }
-
- void SetLPSW(const CMStringW &str)
- {
- DWORD dwBytes = str.GetLength() * sizeof(WCHAR);
- SetUL(dwBytes);
- memcpy(Allocate(dwBytes), str, dwBytes);
- }
-
- void SetLPSLowerCase(const CMStringA &str)
- {
- SetUL(str.GetLength());
- BuffToLowerCase((LPSTR)Allocate(str.GetLength()), str, str.GetLength());
- }
-
- void SetLPSLowerCaseW(const CMStringW &str)
- {
- DWORD dwSize = str.GetLength() * sizeof(WCHAR);
- SetUL(dwSize);
- WCHAR *buf = (WCHAR*)Allocate(dwSize);
- memcpy(buf, str, dwSize);
- CharLowerBuff(buf, str.GetLength());
- }
-};
-
-/////////////////////////////////////////////////////////////////////////////////////////
-
-DWORD CMraProto::MraMessage(BOOL bAddToQueue, MCONTACT hContact, DWORD dwAckType, DWORD dwFlags, const CMStringA &szEmail, const CMStringW &lpwszMessage, LPBYTE lpbMultiChatData, size_t dwMultiChatDataSize)
-{
- debugLogA("Sending message: flags %08x, to '%s', message '%S'\n", dwFlags, szEmail.c_str(), lpwszMessage.c_str());
-
- DWORD dwRet = 0;
- LPSTR lpszMessageConverted = (LPSTR)lpwszMessage.GetString();
- LPSTR lpszMessageRTF = nullptr;
- size_t dwMessageConvertedSize = lpwszMessage.GetLength()*sizeof(WCHAR), dwMessageRTFSize = 0;
-
- if (MraIsMessageFlashAnimation(lpwszMessage))
- dwFlags |= MESSAGE_FLAG_FLASH;
-
- // pack auth message
- if (dwFlags & MESSAGE_FLAG_AUTHORIZE) {
- OutBuffer buf;
- buf.SetUL(2);
- buf.SetLPSW(L"");//***deb possible nick here
- buf.SetLPSW(lpwszMessage);
- lpszMessageConverted = mir_base64_encode(buf.Data(), buf.Len());
- dwMessageConvertedSize = mir_strlen(lpszMessageConverted);
- }
- // messages with Flash
- else if (dwFlags & MESSAGE_FLAG_FLASH) {
- dwFlags |= MESSAGE_FLAG_RTF;
-
- CMStringA lpszBuf(mir_u2a(lpwszMessage));
-
- OutBuffer buf;
- buf.SetUL(4);
- buf.SetLPS(lpszBuf);// сообщение что у собеседника плохая версия :)
- buf.SetUL(4);
- buf.SetUL(getDword("RTFBackgroundColour", MRA_DEFAULT_RTF_BACKGROUND_COLOUR));
- buf.SetLPS(lpszBuf);// сам мульт ANSI
- buf.SetLPSW(lpwszMessage);// сам мульт UNICODE
-
- DWORD dwBufSize = DWORD(buf.Len() + 128);
- lpszBuf.Truncate(dwBufSize);
- if (compress2((LPBYTE)(LPCSTR)lpszBuf, &dwBufSize, buf.Data(), (int)buf.Len(), Z_BEST_COMPRESSION) == Z_OK) {
- lpszMessageRTF = mir_base64_encode(lpszBuf, dwBufSize);
- dwMessageRTFSize = mir_strlen(lpszMessageRTF);
- }
- }
- // standart message
- else if ((dwFlags & (MESSAGE_FLAG_CONTACT | MESSAGE_FLAG_NOTIFY | MESSAGE_FLAG_SMS)) == 0) {
- // Only if message is simple text message or RTF or ALARM
- if (dwFlags & MESSAGE_FLAG_RTF) { // add RFT part
- CMStringA lpbRTFData; lpbRTFData.Truncate(lpwszMessage.GetLength() * 16 + 4096);
- if (!MraConvertToRTFW(lpwszMessage, lpbRTFData)) {
- DWORD dwBackColour = getDword("RTFBackgroundColour", MRA_DEFAULT_RTF_BACKGROUND_COLOUR);
-
- OutBuffer buf;
- buf.SetUL(2);
- buf.SetLPS(lpbRTFData);
- buf.SetUL(4);
- buf.SetUL(dwBackColour);
-
- DWORD dwRTFDataSize = lpbRTFData.GetLength();
- if (compress2((LPBYTE)(LPCSTR)lpbRTFData, &dwRTFDataSize, buf.Data(), (int)buf.Len(), Z_BEST_COMPRESSION) == Z_OK) {
- lpszMessageRTF = mir_base64_encode(lpbRTFData, dwRTFDataSize);
- dwMessageRTFSize = mir_strlen(lpszMessageRTF);
- }
- }
- }
- }
-
- if (lpszMessageRTF == nullptr || dwMessageRTFSize == 0) dwFlags &= ~(MESSAGE_FLAG_RTF | MESSAGE_FLAG_FLASH);
- if (lpbMultiChatData == nullptr || dwMultiChatDataSize == 0) dwFlags &= ~MESSAGE_FLAG_MULTICHAT;
-
- OutBuffer buf;
- buf.SetUL(dwFlags);
- buf.SetLPSLowerCase(szEmail);
- buf.SetLPS(CMStringA(lpszMessageConverted, (int)dwMessageConvertedSize));
- buf.SetLPS(lpszMessageRTF);
- if (dwFlags & MESSAGE_FLAG_MULTICHAT)
- buf.SetLPS(CMStringA((LPSTR)lpbMultiChatData, (int)dwMultiChatDataSize));
-
- if (bAddToQueue)
- dwRet = MraSendQueueCMD(hSendQueueHandle, 0, hContact, dwAckType, nullptr, 0, MRIM_CS_MESSAGE, buf.Data(), buf.Len());
- else
- dwRet = MraSendCMD(MRIM_CS_MESSAGE, buf.Data(), buf.Len());
-
- return dwRet;
-}
-
-// Send confirmation
-DWORD CMraProto::MraMessageAsk(DWORD dwMsgID, DWORD dwFlags, const CMStringA &szEmail, const CMStringW &lpwszMessage, const CMStringW &lpwszMessageRTF)
-{
- if (szEmail.GetLength() <= 4 || lpwszMessage.IsEmpty())
- return 0;
-
- OutBuffer buf;
- buf.SetUL(dwMsgID);//UL msg_id
- buf.SetUL(dwFlags);//UL flags
- buf.SetLPSLowerCase(szEmail);// LPS from e-mail ANSI
- buf.SetLPSW(lpwszMessage);// LPS message UNICODE
- if (dwFlags & MESSAGE_FLAG_RTF)
- buf.SetLPSW(lpwszMessageRTF);// LPS //rtf-formatted message ( >= 1.1) - MESSAGE_FLAG_RTF
-
- return MraSendCMD(MRIM_CS_MESSAGE_ACK, buf.Data(), buf.Len());
-}
-
-DWORD CMraProto::MraMessageRecv(const CMStringA &szFrom, DWORD dwMsgID)
-{
- if (szFrom.GetLength() <= 4)
- return 0;
-
- OutBuffer buf;
- buf.SetLPSLowerCase(szFrom);
- buf.SetUL(dwMsgID);
- return MraSendCMD(MRIM_CS_MESSAGE_RECV, buf.Data(), buf.Len());
-}
-
-// Adds new contact
-DWORD CMraProto::MraAddContact(MCONTACT hContact, DWORD dwContactFlag, DWORD dwGroupID, const CMStringA &szEmail, const CMStringW &wszCustomName, const CMStringA *szPhones, const CMStringW* wszAuthMessage)
-{
- if (szEmail.GetLength() <= 4 && !(dwContactFlag & CONTACT_FLAG_GROUP))
- return 0;
-
- dwContactFlag |= CONTACT_FLAG_UNICODE_NAME;
- if (dwGroupID == -1)
- dwGroupID = 0;
-
- OutBuffer buf;
- buf.SetUL(dwContactFlag);
- buf.SetUL(dwGroupID);
- buf.SetLPSLowerCase(szEmail);
- buf.SetLPSW(wszCustomName);
- buf.SetLPS((szPhones == nullptr) ? "" : *szPhones);
-
- // pack auth message
- OutBuffer buf2;
- buf2.SetUL(2);
- buf2.SetLPSW(L"");//***deb possible nick here
- buf2.SetLPSW((wszAuthMessage == nullptr) ? L"" : *wszAuthMessage);
- buf.SetLPS(CMStringA(ptrA(mir_base64_encode(buf2.Data(), buf2.Len()))));
-
- buf.SetUL(0);
-
- return MraSendQueueCMD(hSendQueueHandle, 0, hContact, ACKTYPE_ADDED, nullptr, 0, MRIM_CS_ADD_CONTACT, buf.Data(), buf.Len());
-}
-
-// change contact
-DWORD CMraProto::MraModifyContact(MCONTACT hContact, DWORD *pdwID, DWORD *pdwContactFlag, DWORD *pdwGroupID, const CMStringA *pszEmail, const CMStringW *pwszCustomName, const CMStringA *pszPhones)
-{
- CMStringA szEmail, szPhones;
- CMStringW wszNick, wszCustomName;
- DWORD dwID, dwGroupID, dwContactFlag;
- if (hContact)
- GetContactBasicInfoW(hContact, &dwID, &dwGroupID, &dwContactFlag, nullptr, nullptr, &szEmail, &wszNick, &szPhones);
- else
- dwID = dwGroupID = dwContactFlag = 0;
-
- if (pdwID) dwID = *pdwID;
- if (dwID == -1)
- return 0;
-
- if (pszEmail) szEmail = *pszEmail;
- if (pszPhones) szPhones = *pszPhones;
- if (pdwGroupID) dwGroupID = *pdwGroupID;
- if (pdwContactFlag) dwContactFlag = *pdwContactFlag;
- if (pwszCustomName) wszCustomName = *pwszCustomName;
-
- OutBuffer buf;
- buf.SetUL(dwID);
- buf.SetUL(dwContactFlag | CONTACT_FLAG_UNICODE_NAME);
- buf.SetUL(dwGroupID);
- if (hContact)
- buf.SetLPSLowerCase(szEmail);
- else
- buf.SetLPSW(wszCustomName);
- buf.SetLPSW(wszCustomName);
- buf.SetLPS(szPhones);
-
- return MraSendQueueCMD(hSendQueueHandle, 0, hContact, ACKTYPE_ADDED, nullptr, 0, MRIM_CS_MODIFY_CONTACT, buf.Data(), buf.Len());
-}
-
-// remove stored message
-DWORD CMraProto::MraOfflineMessageDel(DWORDLONG dwMsgUIDL)
-{
- return MraSendCMD(MRIM_CS_DELETE_OFFLINE_MESSAGE, &dwMsgUIDL, sizeof(DWORDLONG));
-}
-
-// autorize a user & add him to a roster
-DWORD CMraProto::MraAuthorize(const CMStringA& szEmail)
-{
- if (szEmail.GetLength() <= 4)
- return 0;
-
- OutBuffer buf;
- buf.SetLPSLowerCase(szEmail);
- return MraSendCMD(MRIM_CS_AUTHORIZE, buf.Data(), buf.Len());
-}
-
-// change status
-DWORD CMraProto::MraChangeStatus(DWORD dwStatus, const CMStringA &szStatusUri, const CMStringW &wszStatusTitle, const CMStringW &wszStatusDesc, DWORD dwFutureFlags)
-{
- OutBuffer buf;
- buf.SetUL(dwStatus);
- buf.SetLPS(szStatusUri);
- buf.SetLPSW(wszStatusTitle);
- buf.SetLPSW(wszStatusDesc);
- buf.SetUL(dwFutureFlags);
- return MraSendCMD(MRIM_CS_CHANGE_STATUS, buf.Data(), buf.Len());
-}
-
-// Отправка файлов
-DWORD CMraProto::MraFileTransfer(const CMStringA &szEmail, DWORD dwIDRequest, DWORD dwFilesTotalSize, const CMStringW &wszFiles, const CMStringA &szAddresses)
-{
- if (szEmail.GetLength() <= 4)
- return 0;
-
- CMStringA szFiles = wszFiles;
-
- OutBuffer buf;
- buf.SetLPSLowerCase(szEmail);
- buf.SetUL(dwIDRequest);
- buf.SetUL(dwFilesTotalSize);
- buf.SetUL(sizeof(DWORD) * 5 + szFiles.GetLength() + wszFiles.GetLength()*sizeof(WCHAR) + szAddresses.GetLength());
-
- buf.SetLPS(szFiles);
- buf.SetUL(sizeof(DWORD) * 2 + wszFiles.GetLength()*sizeof(WCHAR));
-
- buf.SetUL(1);
- buf.SetLPSW(wszFiles);
-
- buf.SetLPS(szAddresses);
- return MraSendCMD(MRIM_CS_FILE_TRANSFER, buf.Data(), buf.Len());
-}
-
-// Ответ на отправку файлов
-DWORD CMraProto::MraFileTransferAck(DWORD dwStatus, const CMStringA &szEmail, DWORD dwIDRequest, const CMStringA &szDescription)
-{
- if (szEmail.GetLength() <= 4)
- return 0;
-
- OutBuffer buf;
- buf.SetUL(dwStatus);
- buf.SetLPSLowerCase(szEmail);
- buf.SetUL(dwIDRequest);
- buf.SetLPS(szDescription);
- return MraSendCMD(MRIM_CS_FILE_TRANSFER_ACK, buf.Data(), buf.Len());
-}
-
-// Поиск контакта
-HANDLE CMraProto::MraWPRequestW(MCONTACT hContact, DWORD dwAckType, DWORD dwRequestFlags, const CMStringA &szUser, const CMStringA &szDomain, const CMStringW &wszNickName, const CMStringW &wszFirstName, const CMStringW &wszLastName, DWORD dwSex, DWORD dwDate1, DWORD dwDate2, DWORD dwCityID, DWORD dwZodiak, DWORD dwBirthdayMonth, DWORD dwBirthdayDay, DWORD dwCountryID, DWORD dwOnline)
-{
- OutBuffer buf;
- CMStringA tmp;
-
- if (GetBit(dwRequestFlags, MRIM_CS_WP_REQUEST_PARAM_USER)) { buf.SetUL(MRIM_CS_WP_REQUEST_PARAM_USER); buf.SetLPSLowerCase(szUser); }
- if (GetBit(dwRequestFlags, MRIM_CS_WP_REQUEST_PARAM_DOMAIN)) { buf.SetUL(MRIM_CS_WP_REQUEST_PARAM_DOMAIN); buf.SetLPSLowerCase(szDomain); }
- if (GetBit(dwRequestFlags, MRIM_CS_WP_REQUEST_PARAM_NICKNAME)) { buf.SetUL(MRIM_CS_WP_REQUEST_PARAM_NICKNAME); buf.SetLPSW(wszNickName); }
- if (GetBit(dwRequestFlags, MRIM_CS_WP_REQUEST_PARAM_FIRSTNAME)) { buf.SetUL(MRIM_CS_WP_REQUEST_PARAM_FIRSTNAME); buf.SetLPSW(wszFirstName); }
- if (GetBit(dwRequestFlags, MRIM_CS_WP_REQUEST_PARAM_LASTNAME)) { buf.SetUL(MRIM_CS_WP_REQUEST_PARAM_LASTNAME); buf.SetLPSW(wszLastName); }
-
- if (GetBit(dwRequestFlags, MRIM_CS_WP_REQUEST_PARAM_SEX)) {
- tmp.Format("%lu", dwSex);
- buf.SetUL(MRIM_CS_WP_REQUEST_PARAM_SEX);
- buf.SetLPS(tmp);
- }
-
- if (GetBit(dwRequestFlags, MRIM_CS_WP_REQUEST_PARAM_DATE1)) {
- tmp.Format("%lu", dwDate1);
- buf.SetUL(MRIM_CS_WP_REQUEST_PARAM_DATE1);
- buf.SetLPS(tmp);
- }
-
- if (GetBit(dwRequestFlags, MRIM_CS_WP_REQUEST_PARAM_DATE2)) {
- tmp.Format("%lu", dwDate2);
- buf.SetUL(MRIM_CS_WP_REQUEST_PARAM_DATE2);
- buf.SetLPS(tmp);
- }
-
- if (GetBit(dwRequestFlags, MRIM_CS_WP_REQUEST_PARAM_CITY_ID)) {
- tmp.Format("%lu", dwCityID);
- buf.SetUL(MRIM_CS_WP_REQUEST_PARAM_CITY_ID);
- buf.SetLPS(tmp);
- }
-
- if (GetBit(dwRequestFlags, MRIM_CS_WP_REQUEST_PARAM_ZODIAC)) {
- tmp.Format("%lu", dwZodiak);
- buf.SetUL(MRIM_CS_WP_REQUEST_PARAM_ZODIAC);
- buf.SetLPS(tmp);
- }
-
- if (GetBit(dwRequestFlags, MRIM_CS_WP_REQUEST_PARAM_BIRTHDAY_MONTH)) {
- tmp.Format("%lu", dwBirthdayMonth);
- buf.SetUL(MRIM_CS_WP_REQUEST_PARAM_BIRTHDAY_MONTH);
- buf.SetLPS(tmp);
- }
-
- if (GetBit(dwRequestFlags, MRIM_CS_WP_REQUEST_PARAM_BIRTHDAY_DAY)) {
- tmp.Format("%lu", dwBirthdayDay);
- buf.SetUL(MRIM_CS_WP_REQUEST_PARAM_BIRTHDAY_DAY);
- buf.SetLPS(tmp);
- }
-
- if (GetBit(dwRequestFlags, MRIM_CS_WP_REQUEST_PARAM_COUNTRY_ID)) {
- tmp.Format("%lu", dwCountryID);
- buf.SetUL(MRIM_CS_WP_REQUEST_PARAM_COUNTRY_ID);
- buf.SetLPS(tmp);
- }
-
- if (GetBit(dwRequestFlags, MRIM_CS_WP_REQUEST_PARAM_ONLINE)) {
- tmp.Format("%lu", dwOnline);
- buf.SetUL(MRIM_CS_WP_REQUEST_PARAM_ONLINE);
- buf.SetLPS(tmp);
- }
-
- return (HANDLE)MraSendQueueCMD(hSendQueueHandle, dwRequestFlags, hContact, dwAckType, nullptr, 0, MRIM_CS_WP_REQUEST, buf.Data(), buf.Len());
-}
-
-// Поиск контакта по EMail
-HANDLE CMraProto::MraWPRequestByEMail(MCONTACT hContact, DWORD dwAckType, CMStringA &szEmail)
-{
- if (szEmail.GetLength() <= 4)
- return 0;
-
- int iStart = 0;
- CMStringA szUser = szEmail.Tokenize("@", iStart);
- CMStringA szDomain = szEmail.Tokenize("@", iStart);
-
- DWORD dwRequestFlags = 0;
- SetBit(dwRequestFlags, MRIM_CS_WP_REQUEST_PARAM_USER);
- SetBit(dwRequestFlags, MRIM_CS_WP_REQUEST_PARAM_DOMAIN);
- return MraWPRequestW(hContact, dwAckType, dwRequestFlags, szUser, szDomain, L"", L"", L"", 0, 0, 0, 0, 0, 0, 0, 0, 0);
-}
-
-// Отправка файлов
-DWORD CMraProto::MraGame(const CMStringA &szEmail, DWORD dwGameSessionID, DWORD dwGameMsg, DWORD dwGameMsgID, const CMStringA &szData)
-{
- if (szEmail.GetLength() <= 4)
- return 0;
-
- OutBuffer buf;
- buf.SetLPSLowerCase(szEmail);
- buf.SetUL(dwGameSessionID);
- buf.SetUL(dwGameMsg);
- buf.SetUL(dwGameMsgID);
- buf.SetUL(_time32(nullptr));
- buf.SetLPS(szData);
- return MraSendCMD(MRIM_CS_GAME, buf.Data(), buf.Len());
-}
-
-// Авторизация
-DWORD CMraProto::MraLogin2W(const CMStringA &szLogin, const CMStringA &szPassword, DWORD dwStatus, const CMStringA &szStatusUri, CMStringW &wszStatusTitle, CMStringW &wszStatusDesc, DWORD dwFutureFlags, CMStringA &szUserAgentFormatted, CMStringA &szUserAgent)
-{
- if (wszStatusTitle.GetLength() > STATUS_TITLE_MAX) wszStatusTitle.Truncate(STATUS_TITLE_MAX);
- if (wszStatusDesc.GetLength() > STATUS_DESC_MAX) wszStatusDesc.Truncate(STATUS_DESC_MAX);
- if (szUserAgentFormatted.GetLength() > USER_AGENT_MAX) szUserAgentFormatted.Truncate(USER_AGENT_MAX);
- if (szUserAgent.GetLength() > MAX_CLIENT_DESCRIPTION) szUserAgent.Truncate(MAX_CLIENT_DESCRIPTION);
-
- OutBuffer buf;
- buf.SetLPS(szLogin);
- buf.SetLPS(szPassword);
- buf.SetUL(dwStatus);
- buf.SetLPS(szStatusUri);
- buf.SetLPSW(wszStatusTitle);
- buf.SetLPSW(wszStatusDesc);
- buf.SetUL(dwFutureFlags);
- buf.SetLPS(szUserAgentFormatted);
- buf.SetLPS("ru");
- buf.SetLPS("");
- buf.SetLPS("");
- buf.SetLPS(szUserAgent);// LPS client description /max 256
-
- return MraSendCMD(MRIM_CS_LOGIN2, buf.Data(), buf.Len());
-}
-
-// Отправка SMS
-DWORD CMraProto::MraSMSW(MCONTACT hContact, const CMStringA &lpszPhone, const CMStringW &lpwszMessage)
-{
- CMStringA szPhoneLocal = "+" + CopyNumber(lpszPhone);
-
- OutBuffer buf;
- buf.SetUL(0);
- buf.SetLPS(szPhoneLocal);
- buf.SetLPSW(lpwszMessage);
-
- /* Save phone number for ack notify after send. */
- LPBYTE lpbData = (LPBYTE)mir_calloc(lpszPhone.GetLength() + sizeof(size_t));
- if (nullptr == lpbData)
- return (0);
- memcpy(lpbData, lpszPhone, lpszPhone.GetLength());
- return MraSendQueueCMD(hSendQueueHandle, 0, hContact, ICQACKTYPE_SMS, lpbData, lpszPhone.GetLength(), MRIM_CS_SMS, buf.Data(), buf.Len());
-}
-
-// Соединение с прокси
-DWORD CMraProto::MraProxy(const CMStringA &szEmail, DWORD dwIDRequest, DWORD dwDataType, const CMStringA &lpszData, const CMStringA &szAddresses, MRA_GUID mguidSessionID)
-{
- if (szEmail.GetLength() <= 4)
- return 0;
-
- OutBuffer buf;
- buf.SetLPSLowerCase(szEmail);
- buf.SetUL(dwIDRequest);
- buf.SetUL(dwDataType);
- buf.SetLPS(lpszData);
- buf.SetLPS(szAddresses);
- buf.SetGUID(mguidSessionID);
- return MraSendCMD(MRIM_CS_PROXY, buf.Data(), buf.Len());
-}
-
-// Ответ на соединение с прокси
-DWORD CMraProto::MraProxyAck(DWORD dwStatus, const CMStringA &szEmail, DWORD dwIDRequest, DWORD dwDataType, const CMStringA &lpszData, const CMStringA &szAddresses, MRA_GUID mguidSessionID)
-{
- if (szEmail.GetLength() <= 4)
- return 0;
-
- OutBuffer buf;
- buf.SetUL(dwStatus);
- buf.SetLPSLowerCase(szEmail);
- buf.SetUL(dwIDRequest);
- buf.SetUL(dwDataType);
- buf.SetLPS(lpszData);
- buf.SetLPS(szAddresses);
- buf.SetGUID(mguidSessionID);
- return MraSendCMD(MRIM_CS_PROXY_ACK, buf.Data(), buf.Len());
-}
-
-// Отправка сообщения в микроблог
-DWORD CMraProto::MraChangeUserBlogStatus(DWORD dwFlags, const CMStringW &wszText, DWORDLONG dwBlogStatusID)
-{
- OutBuffer buf;
- buf.SetUL(dwFlags);
- buf.SetLPSW(wszText);
- buf.SetUIDL(dwBlogStatusID);
- return MraSendCMD(MRIM_CS_CHANGE_USER_BLOG_STATUS, buf.Data(), buf.Len());
-}
-
-DWORD CMraProto::MraSendPacket(HNETLIBCONN hConnection, DWORD dwCmdNum, DWORD dwType, LPVOID lpData, size_t dwDataSize)
-{
- LPBYTE lpbData = (LPBYTE)_alloca(dwDataSize + sizeof(mrim_packet_header_t));
-
- mrim_packet_header_t *pmaHeader = (mrim_packet_header_t*)lpbData;
- memset(pmaHeader, 0, sizeof(mrim_packet_header_t));
- pmaHeader->magic = CS_MAGIC;
- pmaHeader->proto = (PROTO_VERSION_MAJOR << 16) + PROTO_VERSION_MINOR; // Версия протокола
- pmaHeader->seq = dwCmdNum;// Sequence
- pmaHeader->msg = dwType;// Тип пакета
- pmaHeader->dlen = (unsigned)dwDataSize;// Длина данных
-
- debugLogA("Sending packet %08x\n", dwType);
-
- memcpy((lpbData + sizeof(mrim_packet_header_t)), lpData, dwDataSize);
- return Netlib_Send(hConnection, (LPSTR)lpbData, (int)(dwDataSize + sizeof(mrim_packet_header_t)), 0);
-}
-
-DWORD CMraProto::MraSendCMD(DWORD dwType, LPVOID lpData, size_t dwDataSize)
-{
- DWORD dwRet = InterlockedIncrement((LONG volatile*)&dwCMDNum);
-
- mir_cslock l(csCriticalSectionSend); // guarding winsock internal buffers
- return !MraSendPacket(m_hConnection, dwRet, dwType, lpData, dwDataSize) ? 0 : dwRet;
-}
-
-
-DWORD CMraProto::MraSendQueueCMD(HANDLE hQueue, DWORD dwFlags, MCONTACT hContact, DWORD dwAckType, LPBYTE lpbDataQueue, size_t dwDataQueueSize, DWORD dwType, LPVOID lpData, size_t dwDataSize)
-{
- DWORD dwRet = InterlockedIncrement((LONG volatile*)&dwCMDNum);
- if (!MraSendQueueAdd(hQueue, dwRet, dwFlags, hContact, dwAckType, lpbDataQueue, dwDataQueueSize)) {
- mir_cslock l(csCriticalSectionSend); // guarding winsock internal buffers
- if (!MraSendPacket(m_hConnection, dwRet, dwType, lpData, dwDataSize)) {
- MraSendQueueFree(hQueue, dwRet);
- dwRet = 0;
- }
- }
- return dwRet;
-}
diff --git a/protocols/MRA/src/MraSendQueue.cpp b/protocols/MRA/src/MraSendQueue.cpp
deleted file mode 100644
index 52661d4fb1..0000000000
--- a/protocols/MRA/src/MraSendQueue.cpp
+++ /dev/null
@@ -1,161 +0,0 @@
-#include "stdafx.h"
-#include "MraSendQueue.h"
-
-struct MRA_SEND_QUEUE : public LIST_MT
-{
- DWORD dwSendTimeOutInterval;
-};
-
-struct MRA_SEND_QUEUE_ITEM : public LIST_MT_ITEM
-{
- // internal
- FILETIME ftSendTime;
-
- // external
- DWORD dwCMDNum;
- DWORD dwFlags;
- MCONTACT hContact;
- DWORD dwAckType;
- LPBYTE lpbData;
- size_t dwDataSize;
-};
-
-#define FILETIME_SECOND ((DWORDLONG)10000000)
-
-DWORD MraSendQueueInitialize(DWORD dwSendTimeOutInterval, HANDLE *phSendQueueHandle)
-{
- if (!phSendQueueHandle)
- return ERROR_INVALID_HANDLE;
-
- MRA_SEND_QUEUE *pmrasqSendQueue = new MRA_SEND_QUEUE();
- pmrasqSendQueue->dwSendTimeOutInterval = dwSendTimeOutInterval;
- *phSendQueueHandle = (HANDLE)pmrasqSendQueue;
- return NO_ERROR;
-}
-
-void MraSendQueueDestroy(HANDLE hSendQueueHandle)
-{
- if (!hSendQueueHandle)
- return;
-
- MRA_SEND_QUEUE *pmrasqSendQueue = (MRA_SEND_QUEUE*)hSendQueueHandle;
- MRA_SEND_QUEUE_ITEM *pmrasqiSendQueueItem;
- {
- mir_cslock l(pmrasqSendQueue->cs);
- while ( !ListMTItemGetFirst(pmrasqSendQueue, nullptr, (LPVOID*)&pmrasqiSendQueueItem)) {
- ListMTItemDelete(pmrasqSendQueue, pmrasqiSendQueueItem);
- mir_free(pmrasqiSendQueueItem);
- }
- }
-
- delete pmrasqSendQueue;
-}
-
-
-DWORD MraSendQueueAdd(HANDLE hSendQueueHandle, DWORD dwCMDNum, DWORD dwFlags, MCONTACT hContact, DWORD dwAckType, LPBYTE lpbData, size_t dwDataSize)
-{
- if (!hSendQueueHandle || !dwCMDNum)
- return ERROR_INVALID_HANDLE;
-
- MRA_SEND_QUEUE *pmrasqSendQueue = (MRA_SEND_QUEUE*)hSendQueueHandle;
- MRA_SEND_QUEUE_ITEM *pmrasqiSendQueueItem;
-
- pmrasqiSendQueueItem = (MRA_SEND_QUEUE_ITEM*)mir_calloc(sizeof(MRA_SEND_QUEUE_ITEM));
- if (!pmrasqiSendQueueItem)
- return GetLastError();
-
- GetSystemTimeAsFileTime(&pmrasqiSendQueueItem->ftSendTime);
- pmrasqiSendQueueItem->dwCMDNum = dwCMDNum;
- pmrasqiSendQueueItem->dwFlags = dwFlags;
- pmrasqiSendQueueItem->hContact = hContact;
- pmrasqiSendQueueItem->dwAckType = dwAckType;
- pmrasqiSendQueueItem->lpbData = lpbData;
- pmrasqiSendQueueItem->dwDataSize = dwDataSize;
-
- mir_cslock l(pmrasqSendQueue->cs);
- ListMTItemAdd(pmrasqSendQueue, pmrasqiSendQueueItem, pmrasqiSendQueueItem);
- return 0;
-}
-
-DWORD MraSendQueueFree(HANDLE hSendQueueHandle, DWORD dwCMDNum)
-{
- if (!hSendQueueHandle)
- return ERROR_INVALID_HANDLE;
-
- MRA_SEND_QUEUE *pmrasqSendQueue = (MRA_SEND_QUEUE*)hSendQueueHandle;
- MRA_SEND_QUEUE_ITEM *pmrasqiSendQueueItem;
- LIST_MT_ITERATOR lmtiIterator;
-
- mir_cslock l(pmrasqSendQueue->cs);
- ListMTIteratorMoveFirst(pmrasqSendQueue, &lmtiIterator);
- do {
- if ( !ListMTIteratorGet(&lmtiIterator, nullptr, (LPVOID*)&pmrasqiSendQueueItem))
- if (pmrasqiSendQueueItem->dwCMDNum == dwCMDNum) {
- ListMTItemDelete(pmrasqSendQueue, pmrasqiSendQueueItem);
- mir_free(pmrasqiSendQueueItem);
- return 0;
- }
- }
- while (ListMTIteratorMoveNext(&lmtiIterator));
-
- return ERROR_NOT_FOUND;
-}
-
-DWORD MraSendQueueFind(HANDLE hSendQueueHandle, DWORD dwCMDNum, DWORD *pdwFlags, MCONTACT *phContact, DWORD *pdwAckType, LPBYTE *plpbData, size_t *pdwDataSize)
-{
- if (!hSendQueueHandle)
- return ERROR_INVALID_HANDLE;
-
- MRA_SEND_QUEUE *pmrasqSendQueue = (MRA_SEND_QUEUE*)hSendQueueHandle;
- MRA_SEND_QUEUE_ITEM *pmrasqiSendQueueItem;
- LIST_MT_ITERATOR lmtiIterator;
-
- mir_cslock l(pmrasqSendQueue->cs);
- ListMTIteratorMoveFirst(pmrasqSendQueue, &lmtiIterator);
- do {
- if ( !ListMTIteratorGet(&lmtiIterator, nullptr, (LPVOID*)&pmrasqiSendQueueItem))
- if (pmrasqiSendQueueItem->dwCMDNum == dwCMDNum) {
- if (pdwFlags) (*pdwFlags) = pmrasqiSendQueueItem->dwFlags;
- if (phContact) (*phContact) = pmrasqiSendQueueItem->hContact;
- if (pdwAckType) (*pdwAckType) = pmrasqiSendQueueItem->dwAckType;
- if (plpbData) (*plpbData) = pmrasqiSendQueueItem->lpbData;
- if (pdwDataSize) (*pdwDataSize) = pmrasqiSendQueueItem->dwDataSize;
- return 0;
- }
- }
- while (ListMTIteratorMoveNext(&lmtiIterator));
-
- return ERROR_NOT_FOUND;
-}
-
-DWORD MraSendQueueFindOlderThan(HANDLE hSendQueueHandle, DWORD dwTime, DWORD *pdwCMDNum, DWORD *pdwFlags, MCONTACT *phContact, DWORD *pdwAckType, LPBYTE *plpbData, size_t *pdwDataSize)
-{
- if (!hSendQueueHandle)
- return ERROR_INVALID_HANDLE;
-
- FILETIME ftExpireTime;
- GetSystemTimeAsFileTime(&ftExpireTime);
- (*((DWORDLONG*)&ftExpireTime))-=((DWORDLONG)dwTime*FILETIME_SECOND);
-
- MRA_SEND_QUEUE *pmrasqSendQueue = (MRA_SEND_QUEUE*)hSendQueueHandle;
- mir_cslock l(pmrasqSendQueue->cs);
-
- LIST_MT_ITERATOR lmtiIterator;
- ListMTIteratorMoveFirst(pmrasqSendQueue, &lmtiIterator);
- do {
- MRA_SEND_QUEUE_ITEM *pmrasqiSendQueueItem;
- if ( !ListMTIteratorGet(&lmtiIterator, nullptr, (LPVOID*)&pmrasqiSendQueueItem))
- if ((*((DWORDLONG*)&ftExpireTime))>(*((DWORDLONG*)&pmrasqiSendQueueItem->ftSendTime))) {
- if (pdwCMDNum) *pdwCMDNum = pmrasqiSendQueueItem->dwCMDNum;
- if (pdwFlags) *pdwFlags = pmrasqiSendQueueItem->dwFlags;
- if (phContact) *phContact = pmrasqiSendQueueItem->hContact;
- if (pdwAckType) *pdwAckType = pmrasqiSendQueueItem->dwAckType;
- if (plpbData) *plpbData = pmrasqiSendQueueItem->lpbData;
- if (pdwDataSize) *pdwDataSize = pmrasqiSendQueueItem->dwDataSize;
- return 0;
- }
- }
- while (ListMTIteratorMoveNext(&lmtiIterator));
-
- return ERROR_NOT_FOUND;
-}
diff --git a/protocols/MRA/src/MraSendQueue.h b/protocols/MRA/src/MraSendQueue.h
deleted file mode 100644
index cb3a62b4e3..0000000000
--- a/protocols/MRA/src/MraSendQueue.h
+++ /dev/null
@@ -1,16 +0,0 @@
-#if !defined(AFX_MRA_SENDQUEUE_H__F58D13FF_F6F2_476C_B8F0_7B9E9357CF48__INCLUDED_)
-#define AFX_MRA_SENDQUEUE_H__F58D13FF_F6F2_476C_B8F0_7B9E9357CF48__INCLUDED_
-
-
-#pragma once
-
-DWORD MraSendQueueInitialize(DWORD dwSendTimeOutInterval, HANDLE *phSendQueueHandle);
-void MraSendQueueDestroy(HANDLE hSendQueueHandle);
-
-DWORD MraSendQueueAdd(HANDLE hSendQueueHandle, DWORD dwCMDNum, DWORD dwFlags, MCONTACT hContact, DWORD dwAckType, LPBYTE lpbData, size_t dwDataSize);
-DWORD MraSendQueueFree(HANDLE hSendQueueHandle, DWORD dwCMDNum);
-
-DWORD MraSendQueueFind(HANDLE hSendQueueHandle, DWORD dwCMDNum, DWORD *pdwFlags, MCONTACT *phContact, DWORD *pdwAckType, LPBYTE *plpbData, size_t *pdwDataSize);
-DWORD MraSendQueueFindOlderThan(HANDLE hSendQueueHandle, DWORD dwTime, DWORD *pdwCMDNum, DWORD *pdwFlags, MCONTACT *phContact, DWORD *pdwAckType, LPBYTE *plpbData, size_t *pdwDataSize);
-
-#endif // !defined(AFX_MRA_SENDQUEUE_H__F58D13FF_F6F2_476C_B8F0_7B9E9357CF48__INCLUDED_)
diff --git a/protocols/MRA/src/Mra_functions.cpp b/protocols/MRA/src/Mra_functions.cpp
deleted file mode 100644
index 39c95922d4..0000000000
--- a/protocols/MRA/src/Mra_functions.cpp
+++ /dev/null
@@ -1,1439 +0,0 @@
-#include "stdafx.h"
-
-#define MRA_PASS_CRYPT_VER 2
-
-struct SetXStatusData
-{
- CMraProto *ppro;
- DWORD dwXStatus;
- DWORD dwCountdown;
- HICON hDlgIcon;
-};
-
-struct SetBlogStatusData
-{
- CMraProto *ppro;
- MCONTACT hContact;
-};
-
-#define RECURSION_DATA_STACK_ITEMS_MIN 128
-struct RECURSION_DATA_STACK_ITEM
-{
- HANDLE hFind;
- DWORD dwFileNameLen;
- WIN32_FIND_DATA w32fdFindFileData;
-};
-
-CMStringA MraGetSelfVersionString()
-{
- LPSTR lpszSecIM = ServiceExists("SecureIM/IsContactSecured") ? " + SecureIM" : "";
-
- MFileVersion v;
- Miranda_GetFileVersion(&v);
-
- CMStringA szSelfVersion;
- szSelfVersion.Format("Miranda NG %lu.%lu.%lu.%lu Unicode (MRA v%lu.%lu.%lu.%lu)%s, version: %lu.%lu",
- v[0], v[1], v[2], v[3], __FILEVERSION_STRING, lpszSecIM, PROTO_VERSION_MAJOR, PROTO_VERSION_MINOR);
- return szSelfVersion;
-}
-
-static DWORD GetParamValue(const CMStringA &szData, LPCSTR szParamName, DWORD dwParamNameSize, CMStringA &szParamValue)
-{
- if (szData.IsEmpty())
- return ERROR_INVALID_HANDLE;
-
- char *tmp = NEWSTR_ALLOCA(szData.c_str());
- _strlwr(tmp);
-
- LPSTR lpszParamDataStart = strstr(tmp, szParamName);
- if (lpszParamDataStart)
- if ((*((WORD*)(lpszParamDataStart + dwParamNameSize))) == (*((WORD*)"=\""))) {
- lpszParamDataStart += dwParamNameSize + 2;
- LPSTR lpszParamDataEnd = strchr(lpszParamDataStart, '"');
- if (lpszParamDataEnd) {
- szParamValue = CMStringA(szData.c_str() + (lpszParamDataStart - tmp), lpszParamDataEnd - lpszParamDataStart);
- return NO_ERROR;
- }
- }
- return ERROR_NOT_FOUND;
-}
-
-CMStringA MraGetVersionStringFromFormatted(const CMStringA &szUserAgentFormatted)
-{
- if (szUserAgentFormatted.IsEmpty())
- return "";
-
- CMStringA res, tmp;
-
- if (!GetParamValue(szUserAgentFormatted, "name", 4, tmp))
- if (tmp == "Miranda IM" || tmp == "Miranda NG") {
- GetParamValue(szUserAgentFormatted, "title", 5, res);
- return res;
- }
-
- if (!GetParamValue(szUserAgentFormatted, "client", 6, tmp)) {
- if (tmp == "wmagent")
- tmp = "MobileAgent for WM";
- else if (tmp == "jagent")
- tmp = "MobileAgent for Java";
- else if (tmp == "android")
- tmp = "MobileAgent for Android";
- else if (tmp == "iphoneagent")
- tmp = "MobileAgent for Iphone";
- else if (tmp == "sagent")
- tmp = "MobileAgent for Symbian";
- res += tmp + " ";
- }
-
- if (!GetParamValue(szUserAgentFormatted, "name", 4, tmp))
- res += tmp + " ";
-
- if (!GetParamValue(szUserAgentFormatted, "title", 5, tmp))
- res += tmp + " ";
-
- if (!GetParamValue(szUserAgentFormatted, "version", 7, tmp)) {
- res += tmp + " ";
- if (!GetParamValue(szUserAgentFormatted, "build", 5, tmp))
- res += tmp;
- }
-
- // no data extracted, copy raw
- return (res.IsEmpty()) ? szUserAgentFormatted : res;
-}
-
-DWORD MraAddrListGetFromBuff(const CMStringA &szAddresses, MRA_ADDR_LIST *pmalAddrList)
-{
- if (szAddresses.IsEmpty() || !pmalAddrList)
- return ERROR_INVALID_HANDLE;
-
- DWORD dwAllocatedCount = ALLOCATED_COUNT;
- pmalAddrList->dwAddrCount = 0;
- pmalAddrList->pMailAddress = (MRA_ADDR_LIST_ITEM*)mir_calloc(sizeof(MRA_ADDR_LIST_ITEM)*dwAllocatedCount);
-
- LPSTR buf = NEWSTR_ALLOCA(szAddresses.c_str()), lpszCurrentItem = buf;
-
- while (TRUE) {
- LPSTR lpszEndItem = strchr(lpszCurrentItem, ';');
- if (lpszEndItem == nullptr)
- lpszEndItem = buf + szAddresses.GetLength();
- if (!lpszEndItem)
- break;
-
- LPSTR lpszDelimiter = strchr(lpszCurrentItem, ':');
- if (!lpszDelimiter)
- break;
-
- if (pmalAddrList->dwAddrCount == dwAllocatedCount) {
- dwAllocatedCount += ALLOCATED_COUNT;
- pmalAddrList->pMailAddress = (MRA_ADDR_LIST_ITEM*)mir_realloc(pmalAddrList->pMailAddress, (sizeof(MRA_ADDR_LIST_ITEM)*dwAllocatedCount));
- }
-
- *lpszDelimiter = 0;
- pmalAddrList->pMailAddress[pmalAddrList->dwAddrCount].dwAddr = inet_addr(lpszCurrentItem);
- pmalAddrList->pMailAddress[pmalAddrList->dwAddrCount].dwPort = StrToUNum32((lpszDelimiter + 1), (lpszEndItem - (lpszDelimiter + 1)));
- *lpszDelimiter = ':';
- pmalAddrList->dwAddrCount++;
- lpszCurrentItem = lpszEndItem + 1;
-
- if (lpszEndItem == buf + szAddresses.GetLength())
- break;
- }
- pmalAddrList->pMailAddress = (MRA_ADDR_LIST_ITEM*)mir_realloc(pmalAddrList->pMailAddress, (sizeof(MRA_ADDR_LIST_ITEM)*pmalAddrList->dwAddrCount));
- return NO_ERROR;
-}
-
-CMStringA MraAddrListGetToBuff(MRA_ADDR_LIST *pmalAddrList)
-{
- if (!pmalAddrList)
- return "";
-
- CMStringA res;
- for (size_t i = 0; i < pmalAddrList->dwAddrCount; i++) {
- char buf[100];
- mir_snprintf(buf, "%s:%lu;", inet_ntoa((*((in_addr*)&pmalAddrList->pMailAddress[i].dwAddr))), pmalAddrList->pMailAddress[i].dwPort);
- res += buf;
- }
-
- return res;
-}
-
-void CMraProto::MraAddrListStoreToContact(MCONTACT hContact, MRA_ADDR_LIST *pmalAddrList)
-{
- if (!hContact || !pmalAddrList)
- return;
-
- if (!pmalAddrList->dwAddrCount)
- return;
-
- setDword(hContact, "OldIP", getDword(hContact, "IP", 0));
- setDword(hContact, "IP", ntohl(pmalAddrList->pMailAddress[0].dwAddr));
- if (pmalAddrList->dwAddrCount > 1) {
- setDword(hContact, "OldRealIP", getDword(hContact, "RealIP", 0));
- setDword(hContact, "RealIP", ntohl(pmalAddrList->pMailAddress[1].dwAddr));
- }
-}
-
-void MraAddrListFree(MRA_ADDR_LIST *pmalAddrList)
-{
- if (pmalAddrList) {
- mir_free(pmalAddrList->pMailAddress);
- pmalAddrList->dwAddrCount = 0;
- }
-}
-
-bool DB_GetStaticStringA(MCONTACT hContact, LPCSTR lpszModule, LPCSTR lpszValueName, LPSTR lpszRetBuff, size_t dwRetBuffSize, size_t *pdwRetBuffSize)
-{
- bool bRet = false;
-
- DBVARIANT dbv = { 0 };
- if (db_get_ws(hContact, lpszModule, lpszValueName, &dbv) == 0) {
- size_t dwRetBuffSizeLocal, dwReadedStringLen = mir_wstrlen(dbv.pwszVal);
- if (lpszRetBuff && (dwRetBuffSize > dwReadedStringLen)) {
- dwRetBuffSizeLocal = WideCharToMultiByte(MRA_CODE_PAGE, 0, dbv.pwszVal, (int)dwReadedStringLen, lpszRetBuff, (int)dwRetBuffSize, nullptr, nullptr);
- (*((CHAR*)(lpszRetBuff + dwRetBuffSizeLocal))) = 0;
- bRet = true;
- }
- else {
- dwRetBuffSizeLocal = dwReadedStringLen;
- if (lpszRetBuff && dwRetBuffSize >= sizeof(WORD)) (*((WORD*)lpszRetBuff)) = 0;
- }
- if (pdwRetBuffSize) (*pdwRetBuffSize) = dwRetBuffSizeLocal;
-
- db_free(&dbv);
- }
- else {
- if (lpszRetBuff && dwRetBuffSize >= sizeof(WORD)) (*((WORD*)lpszRetBuff)) = 0;
- if (pdwRetBuffSize) (*pdwRetBuffSize) = 0;
- }
- return bRet;
-}
-
-// sizes in wchars
-bool DB_GetStaticStringW(MCONTACT hContact, LPCSTR lpszModule, LPCSTR lpszValueName, LPWSTR lpwszRetBuff, size_t dwRetBuffSize, size_t *pdwRetBuffSize)
-{
- bool bRet = false;
- size_t dwReadedStringLen;
- DBVARIANT dbv = { 0 };
- if (db_get_ws(hContact, lpszModule, lpszValueName, &dbv) == 0) {
- dwReadedStringLen = mir_wstrlen(dbv.pwszVal);
- if (lpwszRetBuff && (dwRetBuffSize > dwReadedStringLen)) {
- memcpy(lpwszRetBuff, dbv.pszVal, (dwReadedStringLen * sizeof(WCHAR)));//include null terminated
- (*((WCHAR*)(lpwszRetBuff + dwReadedStringLen))) = 0;
- bRet = true;
- }
- else {
- if (lpwszRetBuff && dwRetBuffSize >= sizeof(WCHAR)) (*((WCHAR*)lpwszRetBuff)) = 0;
- }
- if (pdwRetBuffSize) (*pdwRetBuffSize) = dwReadedStringLen;
-
- db_free(&dbv);
- }
- else {
- if (lpwszRetBuff && dwRetBuffSize >= sizeof(WCHAR)) (*((WCHAR*)lpwszRetBuff)) = 0;
- if (pdwRetBuffSize) (*pdwRetBuffSize) = 0;
- }
- return bRet;
-}
-
-bool DB_GetStringA(MCONTACT hContact, LPCSTR lpszModule, LPCSTR lpszValueName, CMStringA& res)
-{
- char *szRes = db_get_sa(hContact, lpszModule, lpszValueName);
- if (szRes) {
- res = szRes;
- mir_free(szRes);
- return true;
- }
-
- res.Empty();
- return false;
-}
-
-
-bool DB_GetStringW(MCONTACT hContact, LPCSTR lpszModule, LPCSTR lpszValueName, CMStringW& res)
-{
- WCHAR *szRes = db_get_wsa(hContact, lpszModule, lpszValueName);
- if (szRes) {
- res = szRes;
- mir_free(szRes);
- return true;
- }
-
- res.Empty();
- return false;
-}
-
-bool DB_SetStringExA(MCONTACT hContact, LPCSTR lpszModule, LPCSTR lpszValueName, const CMStringA &szValue)
-{
- if (szValue.IsEmpty()) {
- db_unset(hContact, lpszModule, lpszValueName);
- return true;
- }
-
- return db_set_s(hContact, lpszModule, lpszValueName, szValue) != 0;
-}
-
-bool DB_SetStringExW(MCONTACT hContact, LPCSTR lpszModule, LPCSTR lpszValueName, const CMStringW &szValue)
-{
- if (szValue.IsEmpty()) {
- db_unset(hContact, lpszModule, lpszValueName);
- return true;
- }
-
- return db_set_ws(hContact, lpszModule, lpszValueName, szValue) != 0;
-}
-
-bool DB_GetContactSettingBlob(MCONTACT hContact, LPCSTR lpszModule, LPCSTR lpszValueName, LPVOID lpRet, size_t dwRetBuffSize, size_t *pdwRetBuffSize)
-{
- bool bRet = false;
- DBVARIANT dbv;
- if (db_get(hContact, lpszModule, lpszValueName, &dbv) == 0) {
- if (dbv.type == DBVT_BLOB) {
- if (dwRetBuffSize >= dbv.cpbVal) {
- memcpy(lpRet, dbv.pbVal, dbv.cpbVal);
- bRet = true;
- }
- if (pdwRetBuffSize) (*pdwRetBuffSize) = dbv.cpbVal;
- }
- db_free(&dbv);
- }
- else {
- if (pdwRetBuffSize) (*pdwRetBuffSize) = 0;
- bRet = false;
- }
- return bRet;
-}
-
-DWORD CMraProto::MraMoveContactToGroup(MCONTACT hContact, DWORD dwGroupID, LPCTSTR ptszName)
-{
- MraGroupItem *p = nullptr;
-
- for (auto &it : m_groups)
- if (it->m_name == ptszName) {
- p = it;
- break;
- }
-
- if (p == nullptr) {
- if (m_groups.getCount() == 20)
- return 0;
-
- DWORD id;
- for (id = 0; id < 20; id++)
- if (m_groups.find((MraGroupItem*)&id) == nullptr)
- break;
-
- DWORD dwContactFlags = CONTACT_FLAG_UNICODE_NAME | CONTACT_FLAG_GROUP | (id << 24);
- p = new MraGroupItem(id, dwContactFlags, ptszName);
- m_groups.insert(p);
- MraAddContact(NULL, dwContactFlags, 0, ptszName, p->m_name);
- }
-
- if (dwGroupID != p->m_id) {
- setDword(hContact, "GroupID", p->m_id);
- MraModifyContact(hContact, 0, 0, &p->m_id);
- }
- return p->m_id;
-}
-
-DWORD CMraProto::GetContactFlags(MCONTACT hContact)
-{
- DWORD dwRet = 0;
-
- if (IsContactMra(hContact)) {
- dwRet = getDword(hContact, "ContactFlags", 0);
- dwRet &= ~(CONTACT_FLAG_REMOVED | CONTACT_FLAG_GROUP | CONTACT_FLAG_INVISIBLE | CONTACT_FLAG_VISIBLE | CONTACT_FLAG_IGNORE | CONTACT_FLAG_SHADOW | CONTACT_FLAG_MULTICHAT);
- dwRet |= CONTACT_FLAG_UNICODE_NAME;
-
- CMStringA szEmail;
- if (mraGetStringA(hContact, "e-mail", szEmail))
- if (IsEMailChatAgent(szEmail))
- dwRet |= CONTACT_FLAG_MULTICHAT;
-
- if (db_get_b(hContact, "CList", "Hidden", 0))
- dwRet |= CONTACT_FLAG_SHADOW;
-
- switch (getWord(hContact, "ApparentMode", 0)) {
- case ID_STATUS_OFFLINE:
- dwRet |= CONTACT_FLAG_INVISIBLE;
- break;
- case ID_STATUS_ONLINE:
- dwRet |= CONTACT_FLAG_VISIBLE;
- break;
- }
-
- if (CallService(MS_IGNORE_ISIGNORED, hContact, IGNOREEVENT_MESSAGE)) dwRet |= CONTACT_FLAG_IGNORE;
- }
- return(dwRet);
-}
-
-DWORD CMraProto::SetContactFlags(MCONTACT hContact, DWORD dwContactFlag)
-{
- if (!IsContactMra(hContact))
- return ERROR_INVALID_HANDLE;
-
- setDword(hContact, "ContactFlags", dwContactFlag);
-
- if (dwContactFlag & CONTACT_FLAG_SHADOW)
- db_set_b(hContact, "CList", "Hidden", 1);
- else
- db_unset(hContact, "CList", "Hidden");
-
- switch (dwContactFlag & (CONTACT_FLAG_INVISIBLE | CONTACT_FLAG_VISIBLE)) {
- case CONTACT_FLAG_INVISIBLE:
- setWord(hContact, "ApparentMode", ID_STATUS_OFFLINE);
- break;
- case CONTACT_FLAG_VISIBLE:
- setWord(hContact, "ApparentMode", ID_STATUS_ONLINE);
- break;
- default:
- setWord(hContact, "ApparentMode", 0);
- break;
- }
-
- if (dwContactFlag & CONTACT_FLAG_IGNORE)
- CallService(MS_IGNORE_IGNORE, hContact, IGNOREEVENT_MESSAGE);
- else
- CallService(MS_IGNORE_UNIGNORE, hContact, IGNOREEVENT_MESSAGE);
-
- return 0;
-}
-
-DWORD CMraProto::GetContactBasicInfoW(MCONTACT hContact, DWORD *pdwID, DWORD *pdwGroupID, DWORD *pdwContactFlag, DWORD *pdwContactSeverFlags, DWORD *pdwStatus, CMStringA *szEmail, CMStringW *wszNick, CMStringA *szPhones)
-{
- if (!IsContactMra(hContact))
- return ERROR_INVALID_HANDLE;
-
- if (pdwID)
- *pdwID = getDword(hContact, "ContactID", -1);
- if (pdwGroupID)
- *pdwGroupID = getDword(hContact, "GroupID", -1);
- if (pdwContactSeverFlags)
- *pdwContactSeverFlags = getDword(hContact, "ContactServerFlags", 0);
- if (pdwStatus)
- *pdwStatus = MraGetContactStatus(hContact);
- if (pdwContactFlag)
- *pdwContactFlag = GetContactFlags(hContact);
- if (szEmail)
- if (!mraGetStringA(hContact, "e-mail", *szEmail))
- return 0;
- if (wszNick)
- DB_GetStringW(hContact, "CList", "MyHandle", *wszNick);
-
- if (szPhones) {
- CMStringA szPhone;
-
- for (int i = 0; i < 3; i++) {
- char szValue[50];
- mir_snprintf(szValue, "MyPhone%d", i);
- if (DB_GetStringA(hContact, "UserInfo", szValue, szPhone)) {
- if (szPhones->GetLength())
- szPhones->AppendChar(',');
- szPhones->Append(szPhone);
- }
- }
- }
- return 0;
-}
-
-DWORD CMraProto::SetContactBasicInfoW(MCONTACT hContact, DWORD dwSetInfoFlags, DWORD dwFlags, DWORD dwID, DWORD dwGroupID, DWORD dwContactFlag, DWORD dwContactSeverFlags, DWORD dwStatus, const CMStringA *szEmail, const CMStringW *wszNick, const CMStringA *szPhones)
-{
- if (!IsContactMra(hContact))
- return ERROR_INVALID_HANDLE;
-
- // LOCK
- if (dwSetInfoFlags & SCBIFSI_LOCK_CHANGES_EVENTS)
- setDword(hContact, "HooksLocked", TRUE);
-
- // поля которые нужны, и изменения которых не отслеживаются
- if (dwFlags & SCBIF_ID)
- setDword(hContact, "ContactID", dwID);
-
- if ((dwFlags & SCBIF_EMAIL) && szEmail != nullptr && !szEmail->IsEmpty())
- mraSetStringExA(hContact, "e-mail", *szEmail);
-
- // поля изменения которых отслеживаются
- if (dwFlags & SCBIF_GROUP_ID) {
- setDword(hContact, "GroupID", dwGroupID);
-
- MraGroupItem *grp = m_groups.find((MraGroupItem*)&dwGroupID);
- if (grp) {
- ptrW tszGroup(db_get_wsa(hContact, "CList", "Group"));
- if (mir_wstrcmp(tszGroup, grp->m_name))
- db_set_ws(hContact, "CList", "Group", grp->m_name);
- }
- }
-
- if ((dwFlags & SCBIF_NICK) && wszNick != nullptr && !wszNick->IsEmpty()) {
- if ((dwFlags & SCBIF_FLAG) && ((dwContactFlag & CONTACT_FLAG_UNICODE_NAME) == 0))
- DB_SetStringExA(hContact, "CList", "MyHandle", CMStringA(*wszNick));
- else
- DB_SetStringExW(hContact, "CList", "MyHandle", *wszNick);
- }
-
- if ((dwFlags & SCBIF_PHONES) && szPhones != nullptr && !szPhones->IsEmpty()) {
- int iStart = 0, i = 0;
- while (true) {
- CMStringA szPhone = szPhones->Tokenize(",", iStart);
- if (iStart == -1)
- break;
-
- char szValue[MAX_PATH];
- mir_snprintf(szValue, "MyPhone%d", i++);
- DB_SetStringExA(hContact, "UserInfo", szValue, "+" + szPhone);
- }
- }
-
- if (dwFlags & SCBIF_FLAG)
- SetContactFlags(hContact, dwContactFlag);
-
- if (dwFlags & SCBIF_SERVER_FLAG)
- setDword(hContact, "ContactServerFlags", dwContactSeverFlags);
-
- if (dwFlags & SCBIF_STATUS)
- MraSetContactStatus(hContact, dwStatus);
-
- SetExtraIcons(hContact);
- // UNLOCK
- if (dwSetInfoFlags & SCBIFSI_LOCK_CHANGES_EVENTS)
- setDword(hContact, "HooksLocked", FALSE);
-
- return 0;
-}
-
-MCONTACT CMraProto::MraHContactFromEmail(const CMStringA &szEmail, BOOL bAddIfNeeded, BOOL bTemporary, BOOL *pbAdded)
-{
- if (szEmail.IsEmpty())
- return NULL;
-
- MCONTACT hContact = NULL;
- bool bFound = false;
-
- // check not already on list
- CMStringA szEMailLocal;
- for (auto &cc : AccContacts()) {
- if (mraGetStringA(cc, "e-mail", szEMailLocal)) {
- if (szEMailLocal == szEmail) {
- if (bTemporary == FALSE)
- db_unset(cc, "CList", "NotOnList");
- hContact = cc;
- bFound = true;
- break;
- }
- }
- }
-
- if (!bFound && bAddIfNeeded) {
- //not already there: add
- if (IsEMailChatAgent(szEmail)) {
- CMStringW wszEMail = szEmail;
- SESSION_INFO *si = Chat_NewSession(GCW_CHATROOM, m_szModuleName, wszEMail, wszEMail);
- if (si != nullptr) {
- bool bChatAdded = (si->hContact != NULL);
- if (bChatAdded == FALSE)
- hContact = NULL;
- }
- }
- else {
- hContact = db_add_contact();
- Proto_AddToContact(hContact, m_szModuleName);
- }
-
- if (hContact) {
- if (IsEMailChatAgent(szEmail))
- SetContactBasicInfoW(hContact, SCBIFSI_LOCK_CHANGES_EVENTS, (SCBIF_ID | SCBIF_GROUP_ID | SCBIF_SERVER_FLAG | SCBIF_STATUS | SCBIF_EMAIL), -1, -1, 0, CONTACT_INTFLAG_NOT_AUTHORIZED, ID_STATUS_ONLINE, &szEmail, nullptr, nullptr);
- else {
- if (bTemporary)
- db_set_b(hContact, "CList", "NotOnList", 1);
- mraSetStringExA(hContact, "MirVer", MIRVER_UNKNOWN);
- SetContactBasicInfoW(hContact, SCBIFSI_LOCK_CHANGES_EVENTS, (SCBIF_ID | SCBIF_GROUP_ID | SCBIF_SERVER_FLAG | SCBIF_STATUS | SCBIF_EMAIL), -1, -1, 0, CONTACT_INTFLAG_NOT_AUTHORIZED, ID_STATUS_OFFLINE, &szEmail, nullptr, nullptr);
- }
- }
- }
-
- if (pbAdded)
- *pbAdded = (bFound == false && bAddIfNeeded && hContact);
-
- return hContact;
-}
-
-bool CMraProto::MraUpdateContactInfo(MCONTACT hContact)
-{
- if (m_bLoggedIn && hContact)
- if (IsContactMra(hContact)) {
- CMStringA szEmail;
- if (mraGetStringA(hContact, "e-mail", szEmail)) {
- MraAvatarsQueueGetAvatarSimple(hAvatarsQueueHandle, GAIF_FORCE, hContact);
- if (MraWPRequestByEMail(hContact, ACKTYPE_GETINFO, szEmail))
- return true;
- }
- }
- return false;
-}
-
-DWORD CMraProto::MraContactCapabilitiesGet(MCONTACT hContact)
-{
- return getDword(hContact, DBSETTING_CAPABILITIES, 0);
-}
-
-void CMraProto::MraContactCapabilitiesSet(MCONTACT hContact, DWORD dwFutureFlags)
-{
- setDword(hContact, DBSETTING_CAPABILITIES, dwFutureFlags);
-}
-
-DWORD CMraProto::MraGetContactStatus(MCONTACT hContact)
-{
- return getWord(hContact, "Status", ID_STATUS_OFFLINE);
-}
-
-DWORD CMraProto::MraSetContactStatus(MCONTACT hContact, DWORD dwNewStatus)
-{
- DWORD dwOldStatus = MraGetContactStatus(hContact);
-
- if (dwNewStatus != dwOldStatus) {
- bool bChatAgent = IsContactChatAgent(hContact);
- if (dwNewStatus == ID_STATUS_OFFLINE) {
- if (hContact) {
- setByte(hContact, DBSETTING_XSTATUSID, MRA_MIR_XSTATUS_NONE);
- delSetting(hContact, DBSETTING_XSTATUSNAME);
- delSetting(hContact, DBSETTING_XSTATUSMSG);
- delSetting(hContact, DBSETTING_BLOGSTATUSTIME);
- delSetting(hContact, DBSETTING_BLOGSTATUSID);
- delSetting(hContact, DBSETTING_BLOGSTATUS);
- delSetting(hContact, DBSETTING_BLOGSTATUSMUSIC);
- MraContactCapabilitiesSet(hContact, 0);
- if (bChatAgent)
- MraChatSessionDestroy(hContact);
- }
- setDword(hContact, "LogonTS", 0);
- delSetting(hContact, "IP");
- delSetting(hContact, "RealIP");
- }
- else {
- if (dwOldStatus == ID_STATUS_OFFLINE) {
- DWORD dwTime = (DWORD)_time32(nullptr);
- setDword(hContact, "LogonTS", dwTime);
-
- if (bChatAgent)
- MraChatSessionNew(hContact);
- }
- MraAvatarsQueueGetAvatarSimple(hAvatarsQueueHandle, 0, hContact);
- }
-
- setWord(hContact, "Status", (WORD)dwNewStatus);
- }
- return dwOldStatus;
-}
-
-void CMraProto::MraUpdateEmailStatus(const CMStringA &pszFrom, const CMStringA &pszSubject, bool force_display)
-{
- BOOL bTrayIconNewMailNotify;
- WCHAR szStatusText[MAX_SECONDLINE];
-
- bTrayIconNewMailNotify = getByte("TrayIconNewMailNotify", MRA_DEFAULT_TRAYICON_NEW_MAIL_NOTIFY);
-
- if (m_dwEmailMessagesUnread) {
- CMStringA szEmail;
- MCONTACT hContact = NULL;
-
- wchar_t szMailBoxStatus[MAX_SECONDLINE];
- mir_snwprintf(szMailBoxStatus, TranslateT("Unread mail is available: %lu/%lu messages"), m_dwEmailMessagesUnread, dwEmailMessagesTotal);
-
- if (!pszFrom.IsEmpty() || !pszSubject.IsEmpty()) {
- CMStringA szFrom, szSubject;
- if (GetEMailFromString(szFrom, szEmail))
- hContact = MraHContactFromEmail(szEmail, FALSE, TRUE, nullptr);
-
- mir_snwprintf(szStatusText, TranslateT("From: %S\r\nSubject: %S\r\n%s"), pszFrom.c_str(), szSubject.c_str(), szMailBoxStatus);
- }
- else wcsncpy_s(szStatusText, szMailBoxStatus, _TRUNCATE);
-
- if (bTrayIconNewMailNotify) {
- char szServiceFunction[MAX_PATH] = { 0 }, *pszServiceFunctionName;
- CLISTEVENT cle = {};
- cle.lpszProtocol = m_szModuleName;
- cle.hIcon = IconLibGetIcon(gdiMenuItems[0].hIcolib);
- cle.flags = (CLEF_UNICODE | CLEF_PROTOCOLGLOBAL);
- cle.pszService = "";
- cle.szTooltip.w = szStatusText;
-
- if (getByte("TrayIconNewMailClkToInbox", MRA_DEFAULT_TRAYICON_NEW_MAIL_CLK_TO_INBOX)) {
- strncpy(szServiceFunction, m_szModuleName, MAX_PATH - 1);
- pszServiceFunctionName = szServiceFunction + mir_strlen(m_szModuleName);
- memcpy(pszServiceFunctionName, MRA_GOTO_INBOX, sizeof(MRA_GOTO_INBOX));
- cle.pszService = szServiceFunction;
- }
- g_clistApi.pfnAddEvent(&cle);
- }
-
- Skin_PlaySound(szNewMailSound);
- if (hContact) {// update user info
- MraUpdateContactInfo(hContact);
- MraPopupShowFromContactW(hContact, MRA_POPUP_TYPE_EMAIL_STATUS, szStatusText);
- }
- else MraPopupShowFromAgentW(MRA_POPUP_TYPE_EMAIL_STATUS, szStatusText);
- }
- else {
- if (!force_display && getByte("IncrementalNewMailNotify", MRA_DEFAULT_INC_NEW_MAIL_NOTIFY)) {
- if (bTrayIconNewMailNotify)
- g_clistApi.pfnRemoveEvent(0, (LPARAM)m_szModuleName);
- PUDeletePopup(hWndEMailPopupStatus);
- hWndEMailPopupStatus = nullptr;
- }
- else {
- mir_snwprintf(szStatusText, TranslateT("No unread mail is available\r\nTotal messages: %lu"), dwEmailMessagesTotal);
- MraPopupShowFromAgentW(MRA_POPUP_TYPE_EMAIL_STATUS, szStatusText);
- }
- }
-}
-
-bool IsHTTPSProxyUsed(HNETLIBUSER hNetlibUser)
-{
- NETLIBUSERSETTINGS nlus = { sizeof(nlus) };
- Netlib_GetUserSettings(hNetlibUser, &nlus);
- if (nlus.useProxy && nlus.proxyType == PROXYTYPE_HTTPS)
- return true;
-
- return false;
-}
-
-// определяет принадлежность контакта данной копии плагина
-bool CMraProto::IsContactMra(MCONTACT hContact)
-{
- return Proto_IsProtoOnContact(hContact, m_szModuleName) != 0;
-}
-
-// определяется является ли контакт контактом MRA протокола, не зависимо от того какому плагину он принадлежит
-bool IsContactMraProto(MCONTACT hContact)
-{
- LPSTR lpszProto = GetContactProto(hContact);
- if (lpszProto) {
- CMStringW szBuff;
- if (DB_GetStringW(hContact, lpszProto, "AvatarLastCheckTime", szBuff))
- if (DB_GetStringW(hContact, lpszProto, "AvatarLastModifiedTime", szBuff))
- return true;
- }
- return false;
-}
-
-bool CMraProto::IsEMailMy(const CMStringA &szEmail)
-{
- if (!szEmail.IsEmpty()) {
- CMStringA szEmailMy;
- if (mraGetStringA(NULL, "e-mail", szEmailMy)) {
- if (szEmail.GetLength() == szEmailMy.GetLength())
- if (!_stricmp(szEmail, szEmailMy))
- return true;
- }
- }
- return false;
-}
-
-
-bool CMraProto::IsEMailChatAgent(const CMStringA &szEmail)
-{
- if (!szEmail.IsEmpty()) {
- CMStringA domain = szEmail.Right(sizeof(MAILRU_CHAT_CONF_DOMAIN));
- if (domain[0] == '@' && _stricmp(domain.c_str() + 1, MAILRU_CHAT_CONF_DOMAIN))
- return true;
- }
- return false;
-}
-
-bool CMraProto::IsContactChatAgent(MCONTACT hContact)
-{
- if (hContact == NULL)
- return false;
-
- CMStringA szEmail;
- return mraGetStringA(hContact, "e-mail", szEmail) ? IsEMailChatAgent(szEmail) : false;
-}
-
-bool IsEMailMR(const CMStringA &szEmail)
-{
- if (szEmail) {
- for (int i = 0; lpcszMailRuDomains[i]; i++) {
- size_t dwDomainLen = mir_strlen(lpcszMailRuDomains[i]);
- if (dwDomainLen < szEmail.GetLength())
- if (!_stricmp(lpcszMailRuDomains[i], szEmail.c_str() + szEmail.GetLength() - dwDomainLen))
- if (szEmail[szEmail.GetLength() - (int)dwDomainLen - 1] == '@')
- return true;
- }
- }
- return false;
-}
-
-bool GetEMailFromString(const CMStringA& szBuff, CMStringA& szEmail)
-{
- if (!szBuff.IsEmpty()) {
- int Start, End;
- if ((Start = szBuff.Find('<')) != -1) {
- Start++;
- if ((End = szBuff.Find('>', Start)) != -1) {
- szEmail = szBuff.Mid(Start, End - Start - 1);
- return true;
- }
- }
- }
-
- szEmail.Empty();
- return false;
-}
-
-DWORD GetContactEMailCountParam(MCONTACT hContact, BOOL bMRAOnly, LPSTR lpszModule, LPSTR lpszValueName)
-{
- DWORD dwRet = 0;
- CMStringA szEmail;
-
- if (DB_GetStringA(hContact, lpszModule, lpszValueName, szEmail))
- if (bMRAOnly == FALSE || IsEMailMR(szEmail))
- dwRet++;
-
- for (int i = 0; TRUE; i++) {
- char szBuff[100];
- mir_snprintf(szBuff, "%s%lu", lpszValueName, i);
- if (DB_GetStringA(hContact, lpszModule, szBuff, szEmail)) {
- if (bMRAOnly == FALSE || IsEMailMR(szEmail))
- dwRet++;
- }
- else {
- if (i > EMAILS_MIN_COUNT)
- break;
- }
- }
- return dwRet;
-}
-
-DWORD CMraProto::GetContactEMailCount(MCONTACT hContact, BOOL bMRAOnly)
-{
- LPSTR lpszProto = (hContact) ? GetContactProto(hContact) : m_szModuleName;
-
- DWORD dwRet = 0;
- dwRet += GetContactEMailCountParam(hContact, bMRAOnly, lpszProto, "e-mail");
- dwRet += GetContactEMailCountParam(hContact, bMRAOnly, "UserInfo", "e-mail");
- dwRet += GetContactEMailCountParam(hContact, bMRAOnly, "UserInfo", "Mye-mail");
- dwRet += GetContactEMailCountParam(hContact, bMRAOnly, "UserInfo", "Companye-mail");
- dwRet += GetContactEMailCountParam(hContact, bMRAOnly, "UserInfo", "MyCompanye-mail");
- return dwRet;
-}
-
-bool GetContactFirstEMailParam(MCONTACT hContact, BOOL bMRAOnly, LPSTR lpszModule, LPSTR lpszValueName, CMStringA &res)
-{
- CMStringA szEmail;
-
- if (DB_GetStringA(hContact, lpszModule, lpszValueName, szEmail))
- if (bMRAOnly == FALSE || IsEMailMR(szEmail)) {
- res = szEmail;
- return true;
- }
-
- for (int i = 0; true; i++) {
- char szBuff[100];
- mir_snprintf(szBuff, "%s%lu", lpszValueName, i);
- if (DB_GetStringA(hContact, lpszModule, szBuff, szEmail)) {
- if (bMRAOnly == FALSE || IsEMailMR(szEmail)) {
- res = szEmail;
- return true;
- }
- }
- else if (i > EMAILS_MIN_COUNT)
- break;
- }
- return false;
-}
-
-bool CMraProto::GetContactFirstEMail(MCONTACT hContact, BOOL bMRAOnly, CMStringA &res)
-{
- LPSTR lpszProto = (hContact) ? GetContactProto(hContact) : m_szModuleName;
-
- bool bRet = GetContactFirstEMailParam(hContact, bMRAOnly, lpszProto, "e-mail", res);
- if (!bRet) bRet = GetContactFirstEMailParam(hContact, bMRAOnly, "UserInfo", "e-mail", res);
- if (!bRet) bRet = GetContactFirstEMailParam(hContact, bMRAOnly, "UserInfo", "Mye-mail", res);
- if (!bRet) bRet = GetContactFirstEMailParam(hContact, bMRAOnly, "UserInfo", "Companye-mail", res);
- if (!bRet) bRet = GetContactFirstEMailParam(hContact, bMRAOnly, "UserInfo", "MyCompanye-mail", res);
- return bRet;
-}
-
-/////////////////////////////////////////////////////////////////////////////////////////
-
-void CMraProto::ShowFormattedErrorMessage(LPWSTR lpwszErrText, DWORD dwErrorCode)
-{
- wchar_t szErrorText[2048], szErrDescription[1024];
- size_t dwErrDescriptionSize;
-
- if (dwErrorCode == NO_ERROR)
- wcsncpy_s(szErrorText, TranslateW(lpwszErrText), _TRUNCATE);
- else {
- dwErrDescriptionSize = (FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, nullptr, dwErrorCode, 0, szErrDescription, (_countof(szErrDescription) - sizeof(WCHAR)), nullptr) - 2);
- szErrDescription[dwErrDescriptionSize] = 0;
- mir_snwprintf(szErrorText, L"%s %lu: %s", TranslateW(lpwszErrText), dwErrorCode, szErrDescription);
- }
- debugLogA("Error happened: %S", szErrorText);
- MraPopupShowFromAgentW(MRA_POPUP_TYPE_ERROR, szErrorText);
-}
-
-/////////////////////////////////////////////////////////////////////////////////////////
-
-static void __cdecl FakeThread(ACKDATA *ack)
-{
- Thread_SetName("MRA: ProtoBroadcastAckAsync");
- Sleep(100);
-
- ProtoBroadcastAck(ack->szModule, ack->hContact, ack->type, ack->result, ack->hProcess, ack->lParam);
- mir_free(ack);
-}
-
-DWORD CMraProto::ProtoBroadcastAckAsync(MCONTACT hContact, int type, int hResult, HANDLE hProcess, LPARAM lParam)
-{
- ACKDATA *ack = (ACKDATA*)::mir_calloc(sizeof(ACKDATA));
- ack->szModule = m_szModuleName;
- ack->hContact = hContact;
- ack->type = type;
- ack->result = hResult;
- ack->hProcess = hProcess;
- ack->lParam = lParam;
- mir_forkThread<ACKDATA>(FakeThread, ack);
- return 0;
-}
-
-CMStringA CMraProto::CreateBlobFromContact(MCONTACT hContact, const CMStringW &wszRequestReason)
-{
- CMStringA res('\0', 8);
- CMStringW tmp;
- DWORD *p = (DWORD*)res.c_str();
- p[0] = 0; p[1] = (DWORD)hContact;
-
- mraGetStringW(hContact, "Nick", tmp);
- res.Append(ptrA(mir_utf8encodeW(tmp))); res.AppendChar(0);
-
- mraGetStringW(hContact, "FirstName", tmp);
- res.Append(ptrA(mir_utf8encodeW(tmp))); res.AppendChar(0);
-
- mraGetStringW(hContact, "LastName", tmp);
- res.Append(ptrA(mir_utf8encodeW(tmp))); res.AppendChar(0);
-
- mraGetStringW(hContact, "e-mail", tmp);
- res.Append(ptrA(mir_utf8encodeW(tmp))); res.AppendChar(0);
-
- res.Append(ptrA(mir_utf8encodeW(wszRequestReason))); res.AppendChar(0);
- return res;
-}
-
-CMStringA CopyNumber(const CMStringA &str)
-{
- CMStringA res;
-
- for (LPCSTR p = str; *p; p++)
- if (*p >= '0' && *p <= '9')
- res.AppendChar(*p);
-
- return res;
-}
-
-void EnableControlsArray(HWND hWndDlg, WORD *pwControlsList, size_t dwControlsListCount, BOOL bEnabled)
-{
- for (size_t i = 0; i < dwControlsListCount; i++)
- EnableWindow(GetDlgItem(hWndDlg, pwControlsList[i]), bEnabled);
-}
-
-static LRESULT CALLBACK MessageEditSubclassProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
-{
- if (msg == WM_CHAR)
- if (GetKeyState(VK_CONTROL) & 0x8000) {
- if (wParam == '\n') {
- PostMessage(GetParent(hwnd), WM_COMMAND, IDOK, 0);
- return 0;
- }
- if (wParam == 1) { // ctrl-a
- SendMessage(hwnd, EM_SETSEL, 0, -1);
- return 0;
- }
- if (wParam == 23) { // ctrl-w
- SendMessage(GetParent(hwnd), WM_CLOSE, 0, 0);
- return 0;
- }
- }
-
- return mir_callNextSubclass(hwnd, MessageEditSubclassProc, msg, wParam, lParam);
-}
-
-/////////////////////////////////////////////////////////////////////////////////////////
-
-INT_PTR CALLBACK SetXStatusDlgProc(HWND hWndDlg, UINT message, WPARAM wParam, LPARAM lParam)
-{
- INT_PTR iRet = FALSE;
- SetXStatusData *dat = (SetXStatusData*)GetWindowLongPtr(hWndDlg, GWLP_USERDATA);
-
- switch (message) {
- case WM_INITDIALOG:// set our xStatus
- TranslateDialogDefault(hWndDlg);
-
- dat = (SetXStatusData*)lParam;
- if (dat) {
- char szValueName[MAX_PATH];
- CMStringW szBuff;
-
- dat->hDlgIcon = IconLibGetIcon(hXStatusAdvancedStatusIcons[dat->dwXStatus]);
- dat->dwCountdown = 5;
-
- mir_subclassWindow(GetDlgItem(hWndDlg, IDC_XTITLE), MessageEditSubclassProc);
- mir_subclassWindow(GetDlgItem(hWndDlg, IDC_XMSG), MessageEditSubclassProc);
-
- SetWindowLongPtr(hWndDlg, GWLP_USERDATA, (LONG_PTR)dat);
- SendDlgItemMessage(hWndDlg, IDC_XTITLE, EM_LIMITTEXT, STATUS_TITLE_MAX, 0);
- SendDlgItemMessage(hWndDlg, IDC_XMSG, EM_LIMITTEXT, STATUS_DESC_MAX, 0);
- SendMessage(hWndDlg, WM_SETICON, ICON_BIG, (LPARAM)dat->hDlgIcon);
- SetWindowText(hWndDlg, TranslateW(lpcszXStatusNameDef[dat->dwXStatus]));
-
- mir_snprintf(szValueName, "XStatus%ldName", dat->dwXStatus);
- if (dat->ppro->mraGetStringW(NULL, szValueName, szBuff))
- SetDlgItemText(hWndDlg, IDC_XTITLE, szBuff.c_str()); // custom xstatus name
- else // default xstatus name
- SetDlgItemText(hWndDlg, IDC_XTITLE, TranslateW(lpcszXStatusNameDef[dat->dwXStatus]));
-
- mir_snprintf(szValueName, "XStatus%ldMsg", dat->dwXStatus);
- if (dat->ppro->mraGetStringW(NULL, szValueName, szBuff))
- SetDlgItemText(hWndDlg, IDC_XMSG, szBuff.c_str()); // custom xstatus description
- else // default xstatus description
- SetDlgItemText(hWndDlg, IDC_XMSG, L"");
-
- SendMessage(hWndDlg, WM_TIMER, 0, 0);
- SetTimer(hWndDlg, 1, 1000, nullptr);
- iRet = TRUE;
- }
- break;
-
- case WM_TIMER:
- if (dat->dwCountdown != -1) {
- wchar_t szBuff[MAX_PATH];
- mir_snwprintf(szBuff, TranslateT("Closing in %ld"), dat->dwCountdown--);
- SetDlgItemText(hWndDlg, IDOK, szBuff);
- break;
- }
-
- case WM_CLOSE:
- DestroyWindow(hWndDlg);
- break;
-
- case WM_COMMAND:
- switch (LOWORD(wParam)) {
- case IDOK:
- DestroyWindow(hWndDlg);
- break;
- case IDC_XTITLE:
- case IDC_XMSG:
- KillTimer(hWndDlg, 1);
- SetDlgItemText(hWndDlg, IDOK, TranslateT("OK"));
- break;
- }
- break;
-
- case WM_DESTROY:
- SetWindowLongPtr(hWndDlg, GWLP_USERDATA, 0);
- if (dat) { // set our xStatus
-
- wchar_t szBuff[STATUS_TITLE_MAX + STATUS_DESC_MAX];
- DWORD dwBuffSize = GetDlgItemText(hWndDlg, IDC_XMSG, szBuff, (STATUS_DESC_MAX + 1));
-
- char szValueName[MAX_PATH];
- mir_snprintf(szValueName, "XStatus%ldMsg", dat->dwXStatus);
- dat->ppro->mraSetStringExW(NULL, szValueName, szBuff);
- dat->ppro->mraSetStringExW(NULL, DBSETTING_XSTATUSMSG, szBuff);
-
- dwBuffSize = GetDlgItemText(hWndDlg, IDC_XTITLE, szBuff, (STATUS_TITLE_MAX + 1));
- if (dwBuffSize == 0) { // user delete all text
- mir_wstrncpy(szBuff, TranslateW(lpcszXStatusNameDef[dat->dwXStatus]), STATUS_TITLE_MAX + 1);
- dwBuffSize = (DWORD)mir_wstrlen(szBuff);
- }
- mir_snprintf(szValueName, "XStatus%dName", dat->dwXStatus);
- dat->ppro->mraSetStringExW(NULL, szValueName, szBuff);
- dat->ppro->mraSetStringExW(NULL, DBSETTING_XSTATUSNAME, szBuff);
-
- Menu_ModifyItem(dat->ppro->hXStatusMenuItems[dat->dwXStatus], szBuff);
-
- dat->ppro->MraSetXStatusInternal(dat->dwXStatus);
-
- mir_free(dat);
- }
- EndDialog(hWndDlg, NO_ERROR);
- break;
- }
- return iRet;
-}
-
-bool CMraProto::MraRequestXStatusDetails(DWORD dwXStatus)
-{
- if (IsXStatusValid(dwXStatus)) {
- SetXStatusData *dat = (SetXStatusData*)mir_calloc(sizeof(SetXStatusData));
- dat->dwXStatus = dwXStatus;
- dat->ppro = this;
- return DialogBoxParam(g_plugin.getInst(), MAKEINTRESOURCE(IDD_SETXSTATUS), nullptr, SetXStatusDlgProc, (LPARAM)dat) != -1;
- }
-
- return false;
-}
-
-/////////////////////////////////////////////////////////////////////////////////////////
-
-INT_PTR CALLBACK SendReplyBlogStatusDlgProc(HWND hWndDlg, UINT message, WPARAM wParam, LPARAM lParam)
-{
- INT_PTR iRet = FALSE;
- SetBlogStatusData *dat = (SetBlogStatusData*)GetWindowLongPtr(hWndDlg, GWLP_USERDATA);
-
- switch (message) {
- case WM_INITDIALOG:// set our xStatus
- TranslateDialogDefault(hWndDlg);
-
- dat = (SetBlogStatusData*)lParam;
- if (dat) {
- SYSTEMTIME stBlogStatusTime = { 0 };
-
- SetWindowLongPtr(hWndDlg, GWLP_USERDATA, (LONG_PTR)dat);
-
- HWND hWndEdit = GetDlgItem(hWndDlg, IDC_MSG_TO_SEND);
- mir_subclassWindow(GetDlgItem(hWndDlg, IDC_MSG_TO_SEND), MessageEditSubclassProc);
- SendMessage(hWndEdit, EM_LIMITTEXT, MICBLOG_STATUS_MAX, 0);
-
- Window_SetIcon_IcoLib(hWndDlg, gdiMenuItems[4].hIcolib);
-
- // blog status message
- CMStringW szBuff;
- if (dat->ppro->mraGetStringW(dat->hContact, DBSETTING_BLOGSTATUS, szBuff))
- SetDlgItemText(hWndDlg, IDC_USER_BLOG_STATUS_MSG, szBuff.c_str());
-
- // reply to some user blog
- if (dat->hContact) {
- szBuff.Format(TranslateT("Reply to %s blog status"), Clist_GetContactDisplayName(dat->hContact));
- SetWindowText(hWndDlg, szBuff.c_str());
- }
- else SetWindowText(hWndDlg, TranslateT("Set my blog status"));
-
- DWORD dwTime = dat->ppro->getDword(dat->hContact, DBSETTING_BLOGSTATUSTIME, 0);
- if (dwTime && MakeLocalSystemTimeFromTime32(dwTime, &stBlogStatusTime))
- szBuff.Format(L"%s: %04ld.%02ld.%02ld %02ld:%02ld", TranslateT("Written"),
- stBlogStatusTime.wYear, stBlogStatusTime.wMonth, stBlogStatusTime.wDay, stBlogStatusTime.wHour, stBlogStatusTime.wMinute);
- else
- szBuff.Empty();
-
- SetDlgItemText(hWndDlg, IDC_STATIC_WRITED_TIME, szBuff.c_str());
- EnableWindow(GetDlgItem(hWndDlg, IDC_CHK_NOTIFY), (dat->hContact == NULL));
- iRet = TRUE;
- }
- break;
-
- case WM_CLOSE:
- DestroyWindow(hWndDlg);
- break;
-
- case WM_COMMAND:
- switch (LOWORD(wParam)) {
- case IDOK:
- {
- DWORD dwFlags;
- DWORDLONG dwBlogStatusID;
- wchar_t szBuff[MICBLOG_STATUS_MAX];
-
- GetDlgItemText(hWndDlg, IDC_MSG_TO_SEND, szBuff, _countof(szBuff));
-
- if (dat->hContact) {
- dwFlags = (MRIM_BLOG_STATUS_REPLY | MRIM_BLOG_STATUS_NOTIFY);
-
- DBVARIANT dbv;
- dbv.type = DBVT_BLOB;
- dbv.pbVal = (PBYTE)&dwBlogStatusID;
- dbv.cpbVal = sizeof(DWORDLONG);
- db_set(dat->hContact, dat->ppro->m_szModuleName, DBSETTING_BLOGSTATUSID, &dbv);
- }
- else {
- dwFlags = MRIM_BLOG_STATUS_UPDATE;
- if (IsDlgButtonChecked(hWndDlg, IDC_CHK_NOTIFY))
- dwFlags |= MRIM_BLOG_STATUS_NOTIFY;
- dwBlogStatusID = 0;
- }
- dat->ppro->MraChangeUserBlogStatus(dwFlags, szBuff, dwBlogStatusID);
- } // fallthrough
- case IDCANCEL:
- DestroyWindow(hWndDlg);
- break;
-
- case IDC_MSG_TO_SEND:
- if (HIWORD(wParam) == EN_CHANGE) {
- wchar_t tszBuff[MAX_PATH];
- size_t dwMessageSize = GetWindowTextLength(GetDlgItem(hWndDlg, IDC_MSG_TO_SEND));
-
- EnableWindow(GetDlgItem(hWndDlg, IDOK), (int)dwMessageSize);
- mir_snwprintf(tszBuff, L"%d/%d", dwMessageSize, MICBLOG_STATUS_MAX);
- SetDlgItemText(hWndDlg, IDC_STATIC_CHARS_COUNTER, tszBuff);
- }
- break;
- }
- break;
-
- case WM_DESTROY:
- SetWindowLongPtr(hWndDlg, GWLP_USERDATA, 0);
- mir_free(dat);
- EndDialog(hWndDlg, NO_ERROR);
- break;
- }
- return iRet;
-}
-
-bool CMraProto::MraSendReplyBlogStatus(MCONTACT hContact)
-{
- SetBlogStatusData* dat = (SetBlogStatusData*)mir_calloc(sizeof(SetBlogStatusData));
- dat->ppro = this;
- dat->hContact = hContact;
- return CreateDialogParam(g_plugin.getInst(), MAKEINTRESOURCE(IDD_MINIBLOG), nullptr, SendReplyBlogStatusDlgProc, (LPARAM)dat) != nullptr;
-}
-
-/////////////////////////////////////////////////////////////////////////////////////////
-
-DWORD GetYears(CONST PSYSTEMTIME pcstSystemTime)
-{
- DWORD dwRet = 0;
-
- if (pcstSystemTime) {
- SYSTEMTIME stTime;
- GetLocalTime(&stTime);
- dwRet = stTime.wYear - pcstSystemTime->wYear;
- // день рожденья будет в след месяце
- if (stTime.wMonth < pcstSystemTime->wMonth)
- dwRet--;
- // др ещё будет в этом месяце или уже был...
- else {
- // др в этом месяце
- if (stTime.wMonth == pcstSystemTime->wMonth)
- // ещё только будет, не сегодня
- if (stTime.wDay < pcstSystemTime->wDay)
- dwRet--;
- }
- }
- return dwRet;
-}
-
-/////////////////////////////////////////////////////////////////////////////////////////
-
-DWORD FindFile(LPWSTR lpszFolder, DWORD dwFolderLen, LPWSTR lpszFileName, DWORD dwFileNameLen, LPWSTR lpszRetFilePathName, DWORD dwRetFilePathLen, DWORD *pdwRetFilePathLen)
-{
- DWORD dwRetErrorCode;
-
- if (lpszFolder && dwFolderLen && lpszFileName && dwFileNameLen) {
- wchar_t szPath[32768];
- DWORD dwPathLen, dwRecDeepAllocated, dwRecDeepCurPos, dwFilePathLen;
- RECURSION_DATA_STACK_ITEM *prdsiItems;
-
- if (dwFolderLen == -1) dwFolderLen = (int)mir_wstrlen(lpszFolder);
- if (dwFileNameLen == -1) dwFileNameLen = (int)mir_wstrlen(lpszFileName);
-
- dwRecDeepCurPos = 0;
- dwRecDeepAllocated = RECURSION_DATA_STACK_ITEMS_MIN;
- prdsiItems = (RECURSION_DATA_STACK_ITEM*)mir_calloc(dwRecDeepAllocated * sizeof(RECURSION_DATA_STACK_ITEM));
- if (prdsiItems) {
- dwPathLen = dwFolderLen;
- memcpy(szPath, lpszFolder, (dwPathLen * sizeof(WCHAR)));
- if (szPath[(dwPathLen - 1)] != '\\') {
- szPath[dwPathLen] = '\\';
- dwPathLen++;
- }
- szPath[dwPathLen] = 0;
- mir_wstrcat(szPath, L"*.*");
-
- dwRetErrorCode = ERROR_FILE_NOT_FOUND;
- prdsiItems[dwRecDeepCurPos].dwFileNameLen = 0;
- prdsiItems[dwRecDeepCurPos].hFind = FindFirstFileEx(szPath, FindExInfoStandard, &prdsiItems[dwRecDeepCurPos].w32fdFindFileData, FindExSearchNameMatch, nullptr, 0);
- if (prdsiItems[dwRecDeepCurPos].hFind != INVALID_HANDLE_VALUE) {
- do {
- dwPathLen -= prdsiItems[dwRecDeepCurPos].dwFileNameLen;
-
- while (dwRetErrorCode == ERROR_FILE_NOT_FOUND && FindNextFile(prdsiItems[dwRecDeepCurPos].hFind, &prdsiItems[dwRecDeepCurPos].w32fdFindFileData)) {
- if (prdsiItems[dwRecDeepCurPos].w32fdFindFileData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY) {// folder
- if (CompareString(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), NORM_IGNORECASE, prdsiItems[dwRecDeepCurPos].w32fdFindFileData.cFileName, -1, L".", 1) != CSTR_EQUAL)
- if (CompareString(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), NORM_IGNORECASE, prdsiItems[dwRecDeepCurPos].w32fdFindFileData.cFileName, -1, L"..", 2) != CSTR_EQUAL) {
- prdsiItems[dwRecDeepCurPos].dwFileNameLen = (int)mir_wstrlen(prdsiItems[dwRecDeepCurPos].w32fdFindFileData.cFileName) + 1;
- memcpy((szPath + dwPathLen), prdsiItems[dwRecDeepCurPos].w32fdFindFileData.cFileName, (prdsiItems[dwRecDeepCurPos].dwFileNameLen * sizeof(WCHAR)));
- mir_wstrcat(szPath, L"\\*.*");
- dwPathLen += prdsiItems[dwRecDeepCurPos].dwFileNameLen;
-
- dwRecDeepCurPos++;
- if (dwRecDeepCurPos == dwRecDeepAllocated) { // need more space
- dwRecDeepAllocated += RECURSION_DATA_STACK_ITEMS_MIN;
- prdsiItems = (RECURSION_DATA_STACK_ITEM*)mir_realloc(prdsiItems, dwRecDeepAllocated * sizeof(RECURSION_DATA_STACK_ITEM));
- if (prdsiItems == nullptr) {
- dwRecDeepCurPos = 0;
- dwRetErrorCode = GetLastError();
- break;
- }
- }
- prdsiItems[dwRecDeepCurPos].hFind = FindFirstFileEx(szPath, FindExInfoStandard, &prdsiItems[dwRecDeepCurPos].w32fdFindFileData, FindExSearchNameMatch, nullptr, 0);
- }
- }
- else {// file
- if (CompareString(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), NORM_IGNORECASE, prdsiItems[dwRecDeepCurPos].w32fdFindFileData.cFileName, -1, lpszFileName, dwFileNameLen) == CSTR_EQUAL) {
- prdsiItems[dwRecDeepCurPos].dwFileNameLen = (int)mir_wstrlen(prdsiItems[dwRecDeepCurPos].w32fdFindFileData.cFileName);
- memcpy((szPath + dwPathLen), prdsiItems[dwRecDeepCurPos].w32fdFindFileData.cFileName, ((prdsiItems[dwRecDeepCurPos].dwFileNameLen + 1) * sizeof(WCHAR)));
- dwFilePathLen = (dwPathLen + prdsiItems[dwRecDeepCurPos].dwFileNameLen);
-
- if (pdwRetFilePathLen) (*pdwRetFilePathLen) = dwFilePathLen;
- if (lpszRetFilePathName && dwRetFilePathLen) {
- dwFilePathLen = min(dwFilePathLen, dwRetFilePathLen);
- memcpy(lpszRetFilePathName, szPath, ((dwFilePathLen + 1) * sizeof(WCHAR)));
- }
-
- dwRetErrorCode = NO_ERROR;
- }
- }
- }
-
- if (prdsiItems) FindClose(prdsiItems[dwRecDeepCurPos].hFind);
- dwRecDeepCurPos--;
- } while (dwRecDeepCurPos != -1);
- }
- mir_free(prdsiItems);
- }
- else dwRetErrorCode = GetLastError();
- }
- else dwRetErrorCode = ERROR_INVALID_HANDLE;
-
- return dwRetErrorCode;
-}
-
-/////////////////////////////////////////////////////////////////////////////////////////
-
-bool CMraProto::GetPassDB(CMStringA &res)
-{
- int storageType = getDword("pCryptVer", 0);
- if (storageType == 0)
- return mraGetStringA(NULL, "Password", res) != 0;
-
- BYTE btRandomData[256] = { 0 }, btCryptedPass[256] = { 0 }, bthmacSHA1[MIR_SHA1_HASH_SIZE] = { 0 };
- size_t dwRandomDataSize, dwCryptedPass, dwPassSize;
- CMStringA szEmail;
-
- if (mraGetContactSettingBlob(NULL, "pCryptData", btRandomData, sizeof(btRandomData), &dwRandomDataSize))
- if (dwRandomDataSize == sizeof(btRandomData))
- if (mraGetContactSettingBlob(NULL, "pCryptPass", btCryptedPass, sizeof(btCryptedPass), &dwCryptedPass))
- if (dwCryptedPass == sizeof(btCryptedPass))
- if (mraGetStringA(NULL, "e-mail", szEmail)) {
- mir_hmac_sha1(bthmacSHA1, (BYTE*)szEmail.c_str(), szEmail.GetLength(), btRandomData, sizeof(btRandomData));
-
- if (storageType == 2) {
- RC4(btCryptedPass, sizeof(btCryptedPass), bthmacSHA1, MIR_SHA1_HASH_SIZE);
- CopyMemoryReverseDWORD(btCryptedPass, btCryptedPass, sizeof(btCryptedPass));
- RC4(btCryptedPass, sizeof(btCryptedPass), btRandomData, dwRandomDataSize);
- RC4(btCryptedPass, sizeof(btCryptedPass), bthmacSHA1, MIR_SHA1_HASH_SIZE);
-
- dwPassSize = btCryptedPass[0];
- SHA1GetDigest(&btCryptedPass[(1 + MIR_SHA1_HASH_SIZE)], dwPassSize, btRandomData);
- if (0 != memcmp(&btCryptedPass[1], btRandomData, MIR_SHA1_HASH_SIZE))
- return false;
-
- res = CMStringA((char*)&btCryptedPass[(1 + MIR_SHA1_HASH_SIZE)], (int)dwPassSize);
- }
- else if (storageType == 1) {
- RC4(btCryptedPass, sizeof(btCryptedPass), bthmacSHA1, MIR_SHA1_HASH_SIZE);
- CopyMemoryReverseDWORD(btCryptedPass, btCryptedPass, sizeof(btCryptedPass));
- RC4(btCryptedPass, sizeof(btCryptedPass), btRandomData, dwRandomDataSize);
- RC4(btCryptedPass, sizeof(btCryptedPass), bthmacSHA1, MIR_SHA1_HASH_SIZE);
-
- dwPassSize = (*btCryptedPass);
- btCryptedPass[dwPassSize + 1 + MIR_SHA1_HASH_SIZE] = 0;
-
- size_t dwDecodedSize;
- mir_ptr<BYTE> pDecoded((PBYTE)mir_base64_decode((LPCSTR)&btCryptedPass[1 + MIR_SHA1_HASH_SIZE], &dwDecodedSize));
- SHA1GetDigest(pDecoded, dwDecodedSize, btRandomData);
- if (0 != memcmp(&btCryptedPass[1], btRandomData, MIR_SHA1_HASH_SIZE))
- return false;
- res = CMStringA((LPSTR)(PBYTE)pDecoded, (int)dwDecodedSize);
- }
- else return false;
- }
-
- delSetting("pCryptData");
- delSetting("pCryptPass");
- delSetting("pCryptVer");
- setString("Password", res);
- return true;
-}
-
-/////////////////////////////////////////////////////////////////////////////////////////
-
-static DWORD ReplaceInBuff(LPVOID lpInBuff, size_t dwInBuffSize, size_t dwReplaceItemsCount, LPVOID *plpInReplaceItems, size_t *pdwInReplaceItemsCounts, LPVOID *plpOutReplaceItems, size_t *pdwOutReplaceItemsCounts, CMStringW &ret)
-{
- DWORD dwRetErrorCode = NO_ERROR;
-
- LPBYTE *plpbtFounded = (LPBYTE*)mir_calloc((sizeof(LPBYTE)*dwReplaceItemsCount));
- if (plpbtFounded) {
- LPBYTE lpbtOutBuffCur, lpbtInBuffCur, lpbtInBuffCurPrev, lpbtOutBuffMax;
- size_t i, dwFirstFoundIndex = 0, dwFoundCount = 0, dwMemPartToCopy;
-
- lpbtInBuffCurPrev = (LPBYTE)lpInBuff;
- lpbtOutBuffCur = (LPBYTE)ret.GetString();
- lpbtOutBuffMax = LPBYTE(lpbtOutBuffCur) + ret.GetLength();
- for (i = 0; i < dwReplaceItemsCount; i++) {// looking for the first time
- plpbtFounded[i] = (LPBYTE)MemoryFind((lpbtInBuffCurPrev - (LPBYTE)lpInBuff), lpInBuff, dwInBuffSize, plpInReplaceItems[i], pdwInReplaceItemsCounts[i]);
- if (plpbtFounded[i])
- dwFoundCount++;
- }
-
- while (dwFoundCount) {
- for (i = 0; i < dwReplaceItemsCount; i++)
- if (plpbtFounded[i] && (plpbtFounded[i] < plpbtFounded[dwFirstFoundIndex] || plpbtFounded[dwFirstFoundIndex] == nullptr))
- dwFirstFoundIndex = i;
-
- if (plpbtFounded[dwFirstFoundIndex]) {// in found
- dwMemPartToCopy = (plpbtFounded[dwFirstFoundIndex] - lpbtInBuffCurPrev);
- if (lpbtOutBuffMax > (lpbtOutBuffCur + (dwMemPartToCopy + pdwInReplaceItemsCounts[dwFirstFoundIndex]))) {
- memmove(lpbtOutBuffCur, lpbtInBuffCurPrev, dwMemPartToCopy); lpbtOutBuffCur += dwMemPartToCopy;
- memmove(lpbtOutBuffCur, plpOutReplaceItems[dwFirstFoundIndex], pdwOutReplaceItemsCounts[dwFirstFoundIndex]); lpbtOutBuffCur += pdwOutReplaceItemsCounts[dwFirstFoundIndex];
- lpbtInBuffCurPrev = (plpbtFounded[dwFirstFoundIndex] + pdwInReplaceItemsCounts[dwFirstFoundIndex]);
-
- for (i = 0; i < dwReplaceItemsCount; i++) {// looking for in next time
- if (plpbtFounded[i] && plpbtFounded[i] < lpbtInBuffCurPrev) {
- plpbtFounded[i] = (LPBYTE)MemoryFind((lpbtInBuffCurPrev - (LPBYTE)lpInBuff), lpInBuff, dwInBuffSize, plpInReplaceItems[i], pdwInReplaceItemsCounts[i]);
- if (plpbtFounded[i] == nullptr) dwFoundCount--;
- }
- }
- }
- else {
- dwRetErrorCode = ERROR_BUFFER_OVERFLOW;
- _CrtDbgBreak();
- break;
- }
- }
- else {// сюда по идее никогда не попадём, на всякий случай.
- _CrtDbgBreak();
- break;
- }
- }
- lpbtInBuffCur = (((LPBYTE)lpInBuff) + dwInBuffSize);
- memmove(lpbtOutBuffCur, lpbtInBuffCurPrev, (lpbtInBuffCur - lpbtInBuffCurPrev)); lpbtOutBuffCur += (lpbtInBuffCur - lpbtInBuffCurPrev);
- (*((WORD*)lpbtOutBuffCur)) = 0;
-
- mir_free(plpbtFounded);
-
- ret.Truncate(lpbtOutBuffCur - ((LPBYTE)ret.GetString()));
- }
- else dwRetErrorCode = GetLastError();
-
- return dwRetErrorCode;
-}
-
-static const LPTSTR lpszXMLTags[] = { L"&apos;", L"&quot;", L"&amp;", L"&lt;", L"&gt;" };
-static const size_t dwXMLTagsCount[] = { (6 * sizeof(wchar_t)), (6 * sizeof(wchar_t)), (5 * sizeof(wchar_t)), (4 * sizeof(wchar_t)), (4 * sizeof(wchar_t)) };
-static const LPTSTR lpszXMLSymbols[] = { L"\'", L"\"", L"&", L"<", L">" };
-static const size_t dwXMLSymbolsCount[] = { sizeof(wchar_t), sizeof(wchar_t), sizeof(wchar_t), sizeof(wchar_t), sizeof(wchar_t) };
-
-//Decode XML coded string. The function translate special xml code into standard characters.
-CMStringW DecodeXML(const CMStringW &lptszMessage)
-{
- CMStringW ret('\0', (lptszMessage.GetLength() * 4));
- ReplaceInBuff((void*)lptszMessage.GetString(), lptszMessage.GetLength() * sizeof(wchar_t), _countof(lpszXMLTags), (LPVOID*)lpszXMLTags, (size_t*)dwXMLTagsCount, (LPVOID*)lpszXMLSymbols, (size_t*)dwXMLSymbolsCount, ret);
- return ret;
-}
-
-//Encode XML coded string. The function translate special saved xml characters into special characters.
-CMStringW EncodeXML(const CMStringW &lptszMessage)
-{
- CMStringW ret('\0', (lptszMessage.GetLength() * 4));
- ReplaceInBuff((void*)lptszMessage.GetString(), lptszMessage.GetLength() * sizeof(wchar_t), _countof(lpszXMLTags), (LPVOID*)lpszXMLSymbols, (size_t*)dwXMLSymbolsCount, (LPVOID*)lpszXMLTags, (size_t*)dwXMLTagsCount, ret);
- return ret;
-}
diff --git a/protocols/MRA/src/Mra_menus.cpp b/protocols/MRA/src/Mra_menus.cpp
deleted file mode 100644
index 4b72f0f850..0000000000
--- a/protocols/MRA/src/Mra_menus.cpp
+++ /dev/null
@@ -1,408 +0,0 @@
-#include "stdafx.h"
-#include "proto.h"
-
-INT_PTR CMraProto::MraGotoInbox(WPARAM, LPARAM)
-{
- MraMPopSessionQueueAddUrl(hMPopSessionQueue, MRA_WIN_INBOX_URL);
- return 0;
-}
-
-INT_PTR CMraProto::MraShowInboxStatus(WPARAM, LPARAM)
-{
- MraUpdateEmailStatus("", "", true);
- return 0;
-}
-
-INT_PTR CMraProto::MraEditProfile(WPARAM, LPARAM)
-{
- MraMPopSessionQueueAddUrl(hMPopSessionQueue, MRA_EDIT_PROFILE_URL);
- return 0;
-}
-
-INT_PTR CMraProto::MraWebSearch(WPARAM, LPARAM)
-{
- Utils_OpenUrl(MRA_SEARCH_URL);
- return 0;
-}
-
-INT_PTR CMraProto::MraUpdateAllUsersInfo(WPARAM, LPARAM)
-{
- if (!m_bLoggedIn)
- return 0;
-
- if (MessageBox(nullptr, TranslateT("Are you sure?"), TranslateT(MRA_UPD_ALL_USERS_INFO_STR), MB_YESNO | MB_ICONQUESTION) == IDYES) {
- for (auto &hContact : AccContacts()) {
- CMStringA szEmail;
- if (mraGetStringA(hContact, "e-mail", szEmail))
- MraWPRequestByEMail(hContact, ACKTYPE_GETINFO, szEmail);
- }
- }
- return 0;
-}
-
-INT_PTR CMraProto::MraCheckUpdatesUsersAvt(WPARAM, LPARAM)
-{
- if (MessageBox(nullptr, TranslateT("Are you sure?"), TranslateT(MRA_CHK_USERS_AVATARS_STR), MB_YESNO | MB_ICONQUESTION) == IDYES) {
- for (auto &hContact : AccContacts()) {
- CMStringA szEmail;
- if (mraGetStringA(hContact, "e-mail", szEmail))
- if (!IsEMailChatAgent(szEmail))
- MraAvatarsQueueGetAvatarSimple(hAvatarsQueueHandle, 0, hContact);
- }
- }
- return 0;
-}
-
-INT_PTR CMraProto::MraRequestAuthForAll(WPARAM, LPARAM)
-{
- if (!m_bLoggedIn)
- return 0;
-
- if (MessageBox(nullptr, TranslateT("Are you sure?"), TranslateT(MRA_REQ_AUTH_FOR_ALL_STR), MB_YESNO | MB_ICONQUESTION) == IDYES) {
- for (auto &hContact : AccContacts()) {
- DWORD dwContactSeverFlags;
- if (GetContactBasicInfoW(hContact, nullptr, nullptr, nullptr, &dwContactSeverFlags, nullptr, nullptr, nullptr, nullptr) == NO_ERROR)
- if (dwContactSeverFlags & CONTACT_INTFLAG_NOT_AUTHORIZED && dwContactSeverFlags != -1)
- MraRequestAuthorization(hContact, 0);
- }
- }
- return 0;
-}
-
-INT_PTR CMraProto::MraRequestAuthorization(WPARAM hContact, LPARAM)
-{
- if (!hContact || !m_bLoggedIn)
- return 0;
-
- CMStringW wszAuthMessage;
- if (!mraGetStringW(NULL, "AuthMessage", wszAuthMessage))
- wszAuthMessage = TranslateW(MRA_DEFAULT_AUTH_MESSAGE);
-
- if (wszAuthMessage.IsEmpty())
- return 1;
-
- CMStringA szEmail;
- if (mraGetStringA(hContact, "e-mail", szEmail)) {
- BOOL bSlowSend = getByte("SlowSend", MRA_DEFAULT_SLOW_SEND);
- int iRet = MraMessage(bSlowSend, hContact, ACKTYPE_AUTHREQ, MESSAGE_FLAG_AUTHORIZE, szEmail, wszAuthMessage, nullptr, 0);
- if (bSlowSend == FALSE)
- ProtoBroadcastAck(hContact, ACKTYPE_AUTHREQ, ACKRESULT_SUCCESS, (HANDLE)iRet, 0);
-
- return 0;
- }
- return 1;
-}
-
-INT_PTR CMraProto::MraGrantAuthorization(WPARAM wParam, LPARAM)
-{
- if (!m_bLoggedIn || !wParam)
- return 0;
-
- // send without reason, do we need any ?
- CMStringA szEmail;
- if (mraGetStringA(wParam, "e-mail", szEmail))
- MraAuthorize(szEmail);
-
- return 0;
-}
-
-INT_PTR CMraProto::MraSendEmail(WPARAM wParam, LPARAM)
-{
- DWORD dwContactEMailCount = GetContactEMailCount(wParam, FALSE);
- if (dwContactEMailCount) {
- if (dwContactEMailCount == 1) {
- CMStringA szEmail;
- if (GetContactFirstEMail(wParam, FALSE, szEmail)) {
- szEmail.MakeLower();
- MraMPopSessionQueueAddUrl(hMPopSessionQueue, "https://e.mail.ru/cgi-bin/sentmsg?To=" + szEmail);
- }
- }
- else MraSelectEMailDlgShow(wParam, MRA_SELECT_EMAIL_TYPE_SEND_POSTCARD);
- }
- return 0;
-}
-
-INT_PTR CMraProto::MraSendPostcard(WPARAM wParam, LPARAM)
-{
- DWORD dwContactEMailCount = GetContactEMailCount(wParam, FALSE);
- if (dwContactEMailCount) {
- if (dwContactEMailCount == 1) {
- CMStringA szUrl, szEmail;
- if (GetContactFirstEMail(wParam, FALSE, szEmail)) {
- szEmail.MakeLower();
- szUrl.Format("http://cards.mail.ru/event.html?rcptname=%S&rcptemail=%s", _T2A(Clist_GetContactDisplayName(wParam)), szEmail.c_str());
- MraMPopSessionQueueAddUrl(hMPopSessionQueue, szUrl);
- }
- }
- else MraSelectEMailDlgShow(wParam, MRA_SELECT_EMAIL_TYPE_SEND_POSTCARD);
- }
- return 0;
-}
-
-INT_PTR CMraProto::MraViewAlbum(WPARAM wParam, LPARAM)
-{
- DWORD dwContactEMailMRCount = GetContactEMailCount(wParam, TRUE);
- if (dwContactEMailMRCount) {
- if (dwContactEMailMRCount == 1) {
- CMStringA szEmail;
- if (GetContactFirstEMail(wParam, TRUE, szEmail))
- MraMPopSessionQueueAddUrlAndEMail(hMPopSessionQueue, MRA_FOTO_URL, szEmail);
- }
- else MraSelectEMailDlgShow(wParam, MRA_SELECT_EMAIL_TYPE_VIEW_ALBUM);
- }
- return 0;
-}
-
-INT_PTR CMraProto::MraReplyBlogStatus(WPARAM wParam, LPARAM)
-{
- if (!m_bLoggedIn)
- return 0;
-
- CMStringW blogStatusMsg;
- mraGetStringW(wParam, DBSETTING_BLOGSTATUS, blogStatusMsg);
- if (!blogStatusMsg.IsEmpty() || wParam == 0)
- MraSendReplyBlogStatus(wParam);
-
- return 0;
-}
-
-INT_PTR CMraProto::MraViewVideo(WPARAM wParam, LPARAM)
-{
- DWORD dwContactEMailMRCount = GetContactEMailCount(wParam, TRUE);
- if (dwContactEMailMRCount) {
- if (dwContactEMailMRCount == 1) {
- CMStringA szEmail;
- if (GetContactFirstEMail(wParam, TRUE, szEmail))
- MraMPopSessionQueueAddUrlAndEMail(hMPopSessionQueue, MRA_VIDEO_URL, szEmail);
- }
- else MraSelectEMailDlgShow(wParam, MRA_SELECT_EMAIL_TYPE_VIEW_VIDEO);
- }
- return 0;
-}
-
-INT_PTR CMraProto::MraAnswers(WPARAM wParam, LPARAM)
-{
- DWORD dwContactEMailMRCount = GetContactEMailCount(wParam, TRUE);
- if (dwContactEMailMRCount) {
- if (dwContactEMailMRCount == 1) {
- CMStringA szEmail;
- if (GetContactFirstEMail(wParam, TRUE, szEmail))
- MraMPopSessionQueueAddUrlAndEMail(hMPopSessionQueue, MRA_ANSWERS_URL, szEmail);
- }
- else MraSelectEMailDlgShow(wParam, MRA_SELECT_EMAIL_TYPE_ANSWERS);
- }
- return 0;
-}
-
-INT_PTR CMraProto::MraWorld(WPARAM wParam, LPARAM)
-{
- DWORD dwContactEMailMRCount = GetContactEMailCount(wParam, TRUE);
- if (dwContactEMailMRCount) {
- if (dwContactEMailMRCount == 1) {
- CMStringA szEmail;
- if (GetContactFirstEMail(wParam, TRUE, szEmail))
- MraMPopSessionQueueAddUrlAndEMail(hMPopSessionQueue, MRA_WORLD_URL, szEmail);
- }
- else MraSelectEMailDlgShow(wParam, MRA_SELECT_EMAIL_TYPE_WORLD);
- }
- return 0;
-}
-
-/////////////////////////////////////////////////////////////////////////////////////////
-
-int CMraProto::MraRebuildContactMenu(WPARAM hContact, LPARAM)
-{
- bool bIsContactMRA, bHasEMail, bHasEMailMR, bChatAgent;
- DWORD dwContactSeverFlags = 0;
- CMStringW blogStatusMsgSize;
-
- // proto own contact
- bIsContactMRA = IsContactMra(hContact);
- if (bIsContactMRA) {
- bHasEMail = true;
- bHasEMailMR = true;
- bChatAgent = IsContactChatAgent(hContact);
- GetContactBasicInfoW(hContact, nullptr, nullptr, nullptr, &dwContactSeverFlags, nullptr, nullptr, nullptr, nullptr);
- mraGetStringW(hContact, DBSETTING_BLOGSTATUS, blogStatusMsgSize);
- }
- // non proto contact
- else {
- bHasEMail = false;
- bHasEMailMR = false;
- bChatAgent = false;
- if (!getByte(NULL, "HideMenuItemsForNonMRAContacts", MRA_DEFAULT_HIDE_MENU_ITEMS_FOR_NON_MRA))
- if (!IsContactMraProto(hContact))// избегаем добавления менюшек в контакты других копий MRA
- if (GetContactEMailCount(hContact, FALSE)) {
- bHasEMail = true;
- if (GetContactEMailCount(hContact, TRUE)) bHasEMailMR = true;
- }
- }
- // menu root;
- Menu_ShowItem(hContactMenuRoot, bHasEMail);
-
- //"Request authorization"
- Menu_ShowItem(hContactMenuItems[0], (m_bLoggedIn && bIsContactMRA));// && (dwContactSeverFlags&CONTACT_INTFLAG_NOT_AUTHORIZED)
-
- //"Grant authorization"
- Menu_ShowItem(hContactMenuItems[1], (m_bLoggedIn && bIsContactMRA && !bChatAgent));
-
- //"&Send E-Mail"
- Menu_ShowItem(hContactMenuItems[2], (bHasEMail && !bChatAgent));
-
- //"&Send postcard"
- Menu_ShowItem(hContactMenuItems[3], (bHasEMail && !bChatAgent));
-
- //"&View Album"
- Menu_ShowItem(hContactMenuItems[4], (bHasEMailMR && !bChatAgent));
-
- //"Reply Blog Status"
- Menu_ShowItem(hContactMenuItems[5], (m_bLoggedIn && blogStatusMsgSize.GetLength() && !bChatAgent));
-
- //"View Video"
- Menu_ShowItem(hContactMenuItems[6], (bHasEMailMR && !bChatAgent));
-
- //"Answers"
- Menu_ShowItem(hContactMenuItems[7], (bHasEMailMR && !bChatAgent));
-
- //"World"
- Menu_ShowItem(hContactMenuItems[8], (bHasEMailMR && !bChatAgent));
-
- //"Send &Nudge"
- Menu_ShowItem(hContactMenuItems[9], (!m_heNudgeReceived) ? (m_bLoggedIn && bIsContactMRA) : 0);
- return 0;
-}
-
-/////////////////////////////////////////////////////////////////////////////////////////
-
-int CMraProto::MraRebuildStatusMenu(WPARAM, LPARAM)
-{
- CHAR szServiceFunction[MAX_PATH], szValueName[MAX_PATH];
-
- HGENMENU hRoot;
- {
- wchar_t szItem[MAX_PATH + 64];
- mir_snwprintf(szItem, L"%s Custom Status", m_tszUserName);
-
- CMenuItem mi(&g_plugin);
- mi.root = Menu_GetProtocolMenu(m_szModuleName);
- mi.name.w = szItem;
- mi.position = 10001;
- hRoot = Menu_AddStatusMenuItem(&mi, m_szModuleName);
- }
-
- CMenuItem mi(&g_plugin);
- mi.position = 2000060000;
- mi.root = hRoot;
- mi.flags = CMIF_UNICODE;
- mi.pszService = szServiceFunction;
-
- CMStringW szStatusTitle;
-
- DWORD dwCount = MRA_XSTATUS_OFF_CLI_COUNT;
- if (getByte(NULL, "xStatusShowAll", MRA_DEFAULT_SHOW_ALL_XSTATUSES))
- dwCount = MRA_XSTATUS_COUNT;
- for (DWORD i = 0; i < dwCount; i ++) {
- mir_snprintf(szServiceFunction, "/menuXStatus%ld", i);
- mi.position ++;
- if (i) {
- mir_snprintf(szValueName, "XStatus%ldName", i);
- if (mraGetStringW(NULL, szValueName, szStatusTitle))
- mi.name.w = (wchar_t*)szStatusTitle.c_str();
- else
- mi.name.w = (wchar_t*)lpcszXStatusNameDef[i];
-
- mi.hIcolibItem = hXStatusAdvancedStatusIcons[i];
- }
- else {
- mi.name.w = (wchar_t*)lpcszXStatusNameDef[i];
- mi.hIcolibItem = nullptr;
- }
- hXStatusMenuItems[i] = Menu_AddStatusMenuItem(&mi, m_szModuleName);
- }
- return 0;
-}
-
-/////////////////////////////////////////////////////////////////////////////////////////
-
-HGENMENU CMraProto::CListCreateMenu(LONG lPosition, LONG lPopupPosition, BOOL bIsMain, const IconItem *pgdiItems, size_t dwCount, HGENMENU *hResult)
-{
- if (!pgdiItems || !dwCount || !hResult)
- return nullptr;
-
- char szServiceFunction[MAX_PATH];
-
- CMenuItem mi(&g_plugin);
-
- HGENMENU hRootMenu, (__stdcall *fnAddFunc)(TMO_MenuItem*, const char*);
- if (bIsMain) {
- fnAddFunc = Menu_AddProtoMenuItem;
-
- hRootMenu = Menu_GetProtocolRoot(this);
- if (hRootMenu == nullptr) {
- mi.name.w = m_tszUserName;
- mi.flags = CMIF_UNICODE | CMIF_KEEPUNTRANSLATED;
- mi.hIcolibItem = g_hMainIcon;
- hRootMenu = Menu_AddProtoMenuItem(&mi);
- }
-
- mi.position = 20003;
- mi.root = hRootMenu;
- }
- else {
- fnAddFunc = Menu_AddContactMenuItem;
- mi.position = lPosition;
- }
-
- SET_UID(mi, 0x83C8B6A7, 0xEC0D, 0x41D6, 0x8A, 0x0E, 0xAC, 0x90, 0x8C, 0xEE, 0xAF, 0xFE);
- mi.flags = 0;
- mi.name.a = LPGEN("Services...");
- mi.hIcolibItem = g_hMainIcon;
- hRootMenu = fnAddFunc(&mi, m_szModuleName);
- UNSET_UID(mi);
-
- mi.flags = CMIF_SYSTEM;
- mi.root = hRootMenu;
- mi.pszService = szServiceFunction;
-
- for (size_t i = 0; i < dwCount; i++) {
- mi.pszService = pgdiItems[i].szName;
- mi.position = int(lPosition + i);
- mi.hIcolibItem = pgdiItems[i].hIcolib;
- mi.name.a = pgdiItems[i].szDescr;
- hResult[i] = fnAddFunc(&mi, m_szModuleName);
- Menu_ConfigureItem(hResult[i], MCI_OPT_EXECPARAM, lPopupPosition);
- }
-
- return hRootMenu;
-}
-
-void CMraProto::InitMenus()
-{
- /* Main menu and contacts services. */
- CreateProtoService(MRA_GOTO_INBOX, &CMraProto::MraGotoInbox);
- CreateProtoService(MRA_SHOW_INBOX_STATUS, &CMraProto::MraShowInboxStatus);
- CreateProtoService(MRA_EDIT_PROFILE, &CMraProto::MraEditProfile);
- CreateProtoService(MRA_VIEW_ALBUM, &CMraProto::MraViewAlbum);
- CreateProtoService(MRA_REPLY_BLOG_STATUS, &CMraProto::MraReplyBlogStatus);
- CreateProtoService(MRA_VIEW_VIDEO, &CMraProto::MraViewVideo);
- CreateProtoService(MRA_ANSWERS, &CMraProto::MraAnswers);
- CreateProtoService(MRA_WORLD, &CMraProto::MraWorld);
- CreateProtoService(MRA_WEB_SEARCH, &CMraProto::MraWebSearch);
- CreateProtoService(MRA_UPD_ALL_USERS_INFO, &CMraProto::MraUpdateAllUsersInfo);
- CreateProtoService(MRA_CHK_USERS_AVATARS, &CMraProto::MraCheckUpdatesUsersAvt);
- CreateProtoService(MRA_REQ_AUTH_FOR_ALL, &CMraProto::MraRequestAuthForAll);
- /* Contacts only services. */
- CreateProtoService(MRA_REQ_AUTH, &CMraProto::MraRequestAuthorization);
- CreateProtoService(MRA_GRANT_AUTH, &CMraProto::MraGrantAuthorization);
- CreateProtoService(MRA_SEND_EMAIL, &CMraProto::MraSendEmail);
- CreateProtoService(MRA_SEND_POSTCARD, &CMraProto::MraSendPostcard);
-
- hContactMenuRoot = CListCreateMenu(-2000001001, -500050000, FALSE, gdiContactMenuItems, CONTACT_MENU_ITEMS_COUNT, hContactMenuItems);
-
- // xstatus menu
- for (DWORD i = 0; i < MRA_XSTATUS_COUNT; i++) {
- char szServiceName[100];
- mir_snprintf(szServiceName, "/menuXStatus%d", i);
- CreateProtoServiceParam(szServiceName, &CMraProto::MraXStatusMenu, i);
- }
-}
diff --git a/protocols/MRA/src/Mra_options.cpp b/protocols/MRA/src/Mra_options.cpp
deleted file mode 100644
index d1d36a3fef..0000000000
--- a/protocols/MRA/src/Mra_options.cpp
+++ /dev/null
@@ -1,244 +0,0 @@
-#include "stdafx.h"
-
-INT_PTR CALLBACK DlgProcOptsAccount(HWND hWndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
-{
- CMraProto *ppro = (CMraProto*)GetWindowLongPtr(hWndDlg, GWLP_USERDATA);
-
- switch (msg) {
- case WM_INITDIALOG:
- TranslateDialogDefault(hWndDlg);
- SetWindowLongPtr(hWndDlg, GWLP_USERDATA, lParam);
- ppro = (CMraProto*)lParam;
- {
- CMStringW szBuff;
- if (ppro->mraGetStringW(NULL, "e-mail", szBuff))
- SetDlgItemText(hWndDlg, IDC_LOGIN, szBuff.c_str());
- }
- SetDlgItemText(hWndDlg, IDC_PASSWORD, L"");
- return TRUE;
-
- case WM_COMMAND:
- switch (LOWORD(wParam)) {
- case IDC_NEW_ACCOUNT_LINK:
- Utils_OpenUrl(MRA_REGISTER_URL);
- return TRUE;
-
- case IDC_LOOKUPLINK:
- Utils_OpenUrl(MRA_FORGOT_PASSWORD_URL);
- return TRUE;
- }
- if ((LOWORD(wParam) == IDC_LOGIN || LOWORD(wParam) == IDC_PASSWORD) && (HIWORD(wParam) != EN_CHANGE || (HWND)lParam != GetFocus()))
- return 0;
-
- SendMessage(GetParent(hWndDlg), PSM_CHANGED, 0, 0);
- break;
-
- case WM_NOTIFY:
- switch (((LPNMHDR)lParam)->code) {
- case PSN_APPLY:
- wchar_t szBuff[MAX_EMAIL_LEN];
- GetDlgItemText(hWndDlg, IDC_LOGIN, szBuff, _countof(szBuff));
- ppro->setWString(NULL, "e-mail", szBuff);
-
- if (GetDlgItemText(hWndDlg, IDC_PASSWORD, szBuff, _countof(szBuff))) {
- ppro->setWString("Password", szBuff);
- SecureZeroMemory(szBuff, sizeof(szBuff));
- }
- return TRUE;
- }
- break;
- }
- return FALSE;
-}
-
-INT_PTR CALLBACK DlgProcAccount(HWND hWndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
-{
- CMraProto *ppro = (CMraProto*)GetWindowLongPtr(hWndDlg, GWLP_USERDATA);
-
- switch (msg) {
- case WM_INITDIALOG:
- TranslateDialogDefault(hWndDlg);
- SetWindowLongPtr(hWndDlg, GWLP_USERDATA, lParam);
- ppro = (CMraProto*)lParam;
- {
- CMStringW szBuff;
- if (ppro->mraGetStringW(NULL, "e-mail", szBuff))
- SetDlgItemText(hWndDlg, IDC_LOGIN, szBuff.c_str());
- }
- SetDlgItemText(hWndDlg, IDC_PASSWORD, L"");
- return TRUE;
-
- case WM_COMMAND:
- switch (LOWORD(wParam)) {
- case IDC_NEW_ACCOUNT_LINK:
- Utils_OpenUrl(MRA_REGISTER_URL);
- return TRUE;
- }
- if (HIWORD(wParam) == EN_CHANGE && (HWND)lParam == GetFocus()) {
- switch (LOWORD(wParam)) {
- case IDC_LOGIN:
- case IDC_PASSWORD:
- SendMessage(GetParent(hWndDlg), PSM_CHANGED, 0, 0);
- }
- }
- break;
-
- case WM_NOTIFY:
- switch (((LPNMHDR)lParam)->code) {
- case PSN_APPLY:
- wchar_t szBuff[MAX_EMAIL_LEN];
- GetDlgItemText(hWndDlg, IDC_LOGIN, szBuff, _countof(szBuff));
- ppro->mraSetStringW(NULL, "e-mail", szBuff);
-
- if (GetDlgItemText(hWndDlg, IDC_PASSWORD, szBuff, _countof(szBuff))) {
- ppro->setWString("Password", szBuff);
- SecureZeroMemory(szBuff, sizeof(szBuff));
- }
- return TRUE;
- }
- break;
- }
- return FALSE;
-}
-
-INT_PTR CALLBACK DlgProcOptsConnections(HWND hWndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
-{
- CMraProto *ppro = (CMraProto*)GetWindowLongPtr(hWndDlg, GWLP_USERDATA);
-
- switch (msg) {
- case WM_INITDIALOG:
- TranslateDialogDefault(hWndDlg);
- SetWindowLongPtr(hWndDlg, GWLP_USERDATA, lParam);
- ppro = (CMraProto*)lParam;
- {
- CMStringW szBuff;
- if (ppro->mraGetStringW(NULL, "Server", szBuff))
- SetDlgItemText(hWndDlg, IDC_SERVER, szBuff.c_str());
- else
- SetDlgItemTextA(hWndDlg, IDC_SERVER, MRA_DEFAULT_SERVER);
- }
-
- SetDlgItemInt(hWndDlg, IDC_SERVERPORT, ppro->getWord("ServerPort", MRA_DEFAULT_SERVER_PORT), FALSE);
- // if set SSL proxy, setting will ignored
-
- //CheckDlgButton(hWndDlg, IDC_KEEPALIVE, getByte("keepalive", 0) ? BST_CHECKED : BST_UNCHECKED);
- CheckDlgButton(hWndDlg, IDC_AUTO_ADD_CONTACTS_TO_SERVER, ppro->getByte("AutoAddContactsToServer", MRA_DEFAULT_AUTO_ADD_CONTACTS_TO_SERVER)) ? BST_CHECKED : BST_UNCHECKED;
- CheckDlgButton(hWndDlg, IDC_AUTO_AUTH_REQ_ON_LOGON, ppro->getByte("AutoAuthRequestOnLogon", MRA_DEFAULT_AUTO_AUTH_REQ_ON_LOGON) ? BST_CHECKED : BST_UNCHECKED);
- CheckDlgButton(hWndDlg, IDC_AUTO_AUTH_GRAND_IN_CLIST, ppro->getByte("AutoAuthGrandUsersInCList", MRA_DEFAULT_AUTO_AUTH_GRAND_IN_CLIST) ? BST_CHECKED : BST_UNCHECKED);
- CheckDlgButton(hWndDlg, IDC_AUTO_AUTH_GRAND_NEW_USERS, ppro->getByte("AutoAuthGrandNewUsers", MRA_DEFAULT_AUTO_AUTH_GRAND_NEW_USERS) ? BST_CHECKED : BST_UNCHECKED);
- CheckDlgButton(hWndDlg, IDC_AUTO_AUTH_ON_WEB_SVCS, ppro->getByte("AutoAuthOnWebServices", MRA_DEFAULT_AUTO_AUTH_ON_WEB_SVCS) ? BST_CHECKED : BST_UNCHECKED);
-
- CheckDlgButton(hWndDlg, IDC_SLOWSEND, ppro->getByte("SlowSend", MRA_DEFAULT_SLOW_SEND) ? BST_CHECKED : BST_UNCHECKED);
- CheckDlgButton(hWndDlg, IDC_INCREMENTAL_NEW_MAIL_NOTIFY, ppro->getByte("IncrementalNewMailNotify", MRA_DEFAULT_INC_NEW_MAIL_NOTIFY) ? BST_CHECKED : BST_UNCHECKED);
- CheckDlgButton(hWndDlg, IDC_TRAYICON_NEW_MAIL_NOTIFY, ppro->getByte("TrayIconNewMailNotify", MRA_DEFAULT_TRAYICON_NEW_MAIL_NOTIFY) ? BST_CHECKED : BST_UNCHECKED);
- CheckDlgButton(hWndDlg, IDC_TRAYICON_NEW_MAIL_NOTIFY_CLICK_TO_INBOX, ppro->getByte("TrayIconNewMailClkToInbox", MRA_DEFAULT_TRAYICON_NEW_MAIL_CLK_TO_INBOX) ? BST_CHECKED : BST_UNCHECKED);
- EnableWindow(GetDlgItem(hWndDlg, IDC_TRAYICON_NEW_MAIL_NOTIFY_CLICK_TO_INBOX), ppro->getByte("TrayIconNewMailNotify", MRA_DEFAULT_TRAYICON_NEW_MAIL_NOTIFY));
-
- CheckDlgButton(hWndDlg, IDC_RTF_RECEIVE_ENABLE, ppro->getByte("RTFReceiveEnable", MRA_DEFAULT_RTF_RECEIVE_ENABLE) ? BST_CHECKED : BST_UNCHECKED);
-
- CheckDlgButton(hWndDlg, IDC_RTF_SEND_ENABLE, ppro->getByte("RTFSendEnable", MRA_DEFAULT_RTF_SEND_ENABLE) ? BST_CHECKED : BST_UNCHECKED);
- EnableWindow(GetDlgItem(hWndDlg, IDC_RTF_SEND_SMART), ppro->getByte("RTFSendEnable", MRA_DEFAULT_RTF_SEND_ENABLE));
- EnableWindow(GetDlgItem(hWndDlg, IDC_BUTTON_FONT), ppro->getByte("RTFSendEnable", MRA_DEFAULT_RTF_SEND_ENABLE));
- EnableWindow(GetDlgItem(hWndDlg, IDC_RTF_BGCOLOUR), ppro->getByte("RTFSendEnable", MRA_DEFAULT_RTF_SEND_ENABLE));
- SendDlgItemMessage(hWndDlg, IDC_RTF_BGCOLOUR, CPM_SETCOLOUR, 0, ppro->getDword("RTFBackgroundColour", MRA_DEFAULT_RTF_BACKGROUND_COLOUR));
- return TRUE;
-
- case WM_COMMAND:
- switch (LOWORD(wParam)) {
- case IDC_BUTTON_DEFAULT:
- SetDlgItemTextA(hWndDlg, IDC_SERVER, MRA_DEFAULT_SERVER);
- SetDlgItemInt(hWndDlg, IDC_SERVERPORT, MRA_DEFAULT_SERVER_PORT, FALSE);
- break;
- case IDC_TRAYICON_NEW_MAIL_NOTIFY:
- EnableWindow(GetDlgItem(hWndDlg, IDC_TRAYICON_NEW_MAIL_NOTIFY_CLICK_TO_INBOX), IsDlgButtonChecked(hWndDlg, IDC_TRAYICON_NEW_MAIL_NOTIFY));
- break;
- case IDC_RTF_SEND_ENABLE:
- EnableWindow(GetDlgItem(hWndDlg, IDC_RTF_SEND_SMART), IsDlgButtonChecked(hWndDlg, IDC_RTF_SEND_ENABLE));
- EnableWindow(GetDlgItem(hWndDlg, IDC_BUTTON_FONT), IsDlgButtonChecked(hWndDlg, IDC_RTF_SEND_ENABLE));
- EnableWindow(GetDlgItem(hWndDlg, IDC_RTF_BGCOLOUR), IsDlgButtonChecked(hWndDlg, IDC_RTF_SEND_ENABLE));
- break;
- case IDC_BUTTON_FONT:
- LOGFONT lf = { 0 };
- CHOOSEFONT cf = { 0 };
-
- cf.lStructSize = sizeof(cf);
- cf.lpLogFont = &lf;
- cf.rgbColors = ppro->getDword("RTFFontColour", MRA_DEFAULT_RTF_FONT_COLOUR);
- cf.Flags = (CF_SCREENFONTS | CF_EFFECTS | CF_FORCEFONTEXIST | CF_INITTOLOGFONTSTRUCT);
- if (ppro->mraGetContactSettingBlob(NULL, "RTFFont", &lf, sizeof(LOGFONT), nullptr) == FALSE) {
- HDC hDC = GetDC(nullptr);// kegl
- lf.lfCharSet = MRA_DEFAULT_RTF_FONT_CHARSET;
- lf.lfHeight = -MulDiv(MRA_DEFAULT_RTF_FONT_SIZE, GetDeviceCaps(hDC, LOGPIXELSY), 72);
- mir_wstrncpy(lf.lfFaceName, MRA_DEFAULT_RTF_FONT_NAME, LF_FACESIZE);
- ReleaseDC(nullptr, hDC);
- }
-
- if (ChooseFont(&cf)) {
- ppro->mraWriteContactSettingBlob(NULL, "RTFFont", &lf, sizeof(LOGFONT));
- ppro->setDword("RTFFontColour", cf.rgbColors);
- }
- break;
- }
-
- if ((LOWORD(wParam) == IDC_SERVER || LOWORD(wParam) == IDC_SERVERPORT) && (HIWORD(wParam) != EN_CHANGE || (HWND)lParam != GetFocus())) return FALSE;
- SendMessage(GetParent(hWndDlg), PSM_CHANGED, 0, 0);
- break;
- case WM_NOTIFY:
- switch (((LPNMHDR)lParam)->code) {
- case PSN_APPLY:
- wchar_t szBuff[MAX_PATH];
- GetDlgItemText(hWndDlg, IDC_SERVER, szBuff, _countof(szBuff));
- ppro->mraSetStringW(NULL, "Server", szBuff);
- ppro->setWord("ServerPort", (WORD)GetDlgItemInt(hWndDlg, IDC_SERVERPORT, nullptr, FALSE));
- ppro->setByte("AutoAddContactsToServer", IsDlgButtonChecked(hWndDlg, IDC_AUTO_ADD_CONTACTS_TO_SERVER));
- ppro->setByte("AutoAuthRequestOnLogon", IsDlgButtonChecked(hWndDlg, IDC_AUTO_AUTH_REQ_ON_LOGON));
- ppro->setByte("AutoAuthGrandUsersInCList", IsDlgButtonChecked(hWndDlg, IDC_AUTO_AUTH_GRAND_IN_CLIST));
- ppro->setByte("AutoAuthGrandNewUsers", IsDlgButtonChecked(hWndDlg, IDC_AUTO_AUTH_GRAND_NEW_USERS));
- ppro->setByte("AutoAuthOnWebServices", IsDlgButtonChecked(hWndDlg, IDC_AUTO_AUTH_ON_WEB_SVCS));
-
- ppro->setByte("SlowSend", IsDlgButtonChecked(hWndDlg, IDC_SLOWSEND));
- ppro->setByte("IncrementalNewMailNotify", IsDlgButtonChecked(hWndDlg, IDC_INCREMENTAL_NEW_MAIL_NOTIFY));
- ppro->setByte("TrayIconNewMailNotify", IsDlgButtonChecked(hWndDlg, IDC_TRAYICON_NEW_MAIL_NOTIFY));
- ppro->setByte("TrayIconNewMailClkToInbox", IsDlgButtonChecked(hWndDlg, IDC_TRAYICON_NEW_MAIL_NOTIFY_CLICK_TO_INBOX));
-
- ppro->setByte("RTFReceiveEnable", IsDlgButtonChecked(hWndDlg, IDC_RTF_RECEIVE_ENABLE));
- ppro->setByte("RTFSendEnable", IsDlgButtonChecked(hWndDlg, IDC_RTF_SEND_ENABLE));
- ppro->setDword("RTFBackgroundColour", SendDlgItemMessage(hWndDlg, IDC_RTF_BGCOLOUR, CPM_GETCOLOUR, 0, 0));
- return TRUE;
- }
- break;
- }
- return FALSE;
-}
-
-int CMraProto::OnOptionsInit(WPARAM wParam, LPARAM lParam)
-{
- OPTIONSDIALOGPAGE odp = {};
- odp.dwInitParam = (LPARAM)this;
- odp.szTitle.w = m_tszUserName;
- odp.szGroup.w = LPGENW("Network");
- odp.flags = ODPF_BOLDGROUPS | ODPF_UNICODE;
-
- odp.szTab.w = LPGENW("Account");
- odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_ACCOUNT);
- odp.pfnDlgProc = DlgProcOptsAccount;
- g_plugin.addOptions(wParam, &odp);
-
- odp.szTab.w = LPGENW("Connections");
- odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_CONNECTIONS);
- odp.pfnDlgProc = DlgProcOptsConnections;
- g_plugin.addOptions(wParam, &odp);
-
- odp.szTab.w = LPGENW("Files");
- odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_FILES);
- odp.pfnDlgProc = MraFilesQueueDlgProcOpts;
- g_plugin.addOptions(wParam, &odp);
-
- odp.szTab.w = LPGENW("Avatars");
- odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_AVATRS);
- odp.pfnDlgProc = MraAvatarsQueueDlgProcOpts;
- g_plugin.addOptions(wParam, &odp);
-
- OnPopupOptInit(wParam, lParam);
- return 0;
-}
diff --git a/protocols/MRA/src/Mra_proto.cpp b/protocols/MRA/src/Mra_proto.cpp
deleted file mode 100644
index 39999c7557..0000000000
--- a/protocols/MRA/src/Mra_proto.cpp
+++ /dev/null
@@ -1,1966 +0,0 @@
-#include "stdafx.h"
-#include "MraOfflineMsg.h"
-#include "MraRTFMsg.h"
-#include "MraPlaces.h"
-
-DWORD CMraProto::StartConnect()
-{
- if (m_bShutdown)
- return ERROR_OPERATION_ABORTED;
-
- // поток ещё/уже не работал, поставили статус что работает и запускаем
- if (InterlockedCompareExchange((volatile LONG*)&m_dwThreadWorkerRunning, TRUE, FALSE))
- return 0;
-
- CMStringA szEmail;
- if (!mraGetStringA(NULL, "e-mail", szEmail))
- return 0;
-
- CMStringA szPass;
- if (szEmail.GetLength() <= 5)
- MraPopupShowFromAgentW(MRA_POPUP_TYPE_WARNING, TranslateT("Please, setup e-mail in options"));
- else if (!GetPassDB(szPass))
- MraPopupShowFromAgentW(MRA_POPUP_TYPE_WARNING, TranslateT("Please, setup password in options"));
- else {
- InterlockedExchange((volatile LONG*)&m_dwThreadWorkerLastPingTime, GetTickCount());
- if (INVALID_HANDLE_VALUE != ForkThreadEx(&CMraProto::MraThreadProc, nullptr, nullptr))
- return 0; /* OK. */
- MraPopupShowFromAgentW(MRA_POPUP_TYPE_ERROR, TranslateT("Thread creation failure"));
- }
- InterlockedExchange((volatile LONG*)&m_dwThreadWorkerRunning, FALSE);
- return ERROR_OPERATION_ABORTED;
-}
-
-void CMraProto::MraThreadProc(LPVOID)
-{
- BOOL bConnected = FALSE;
- CMStringA szHost;
- DWORD dwConnectReTryCount, dwCurConnectReTryCount;
-
- Thread_SetName("MRA: ProtoThreadProc");
-
- SleepEx(100, FALSE);// to prevent high CPU load by some status plugins like allwaysonline
-
- dwConnectReTryCount = getDword("ConnectReTryCountMRIM", MRA_DEFAULT_CONN_RETRY_COUNT_MRIM);
-
- NETLIBOPENCONNECTION nloc = { 0 };
- nloc.cbSize = sizeof(nloc);
- nloc.flags = NLOCF_V2;
- nloc.timeout = getDword("TimeOutConnectMRIM", MRA_DEFAULT_TIMEOUT_CONN_MRIM);
- if (nloc.timeout < MRA_TIMEOUT_CONN_MIN) nloc.timeout = MRA_TIMEOUT_CONN_MIN;
- if (nloc.timeout > MRA_TIMEOUT_CONN_MAX) nloc.timeout = MRA_TIMEOUT_CONN_MAX;
-
- InterlockedExchange((volatile LONG*)&m_dwThreadWorkerLastPingTime, GetTickCount());
- if (MraGetNLBData(szHost, &nloc.wPort) == NO_ERROR) {
- nloc.szHost = szHost;
- //nloc.szHost = "217.69.141.245";
- //nloc.wPort = 443;
- //nloc.flags |= NLOCF_SSL;
- dwCurConnectReTryCount = dwConnectReTryCount;
- do {
- InterlockedExchange((volatile LONG*)&m_dwThreadWorkerLastPingTime, GetTickCount());
- m_hConnection = Netlib_OpenConnection(m_hNetlibUser, &nloc);
- }
- while (--dwCurConnectReTryCount && m_hConnection == nullptr);
-
- if (m_hConnection)
- bConnected = TRUE;
- }
-
- if (bConnected == FALSE)
- if (getByte("NLBFailDirectConnect", MRA_DEFAULT_NLB_FAIL_DIRECT_CONNECT)) {
- if (IsHTTPSProxyUsed(m_hNetlibUser))
- nloc.wPort = MRA_SERVER_PORT_HTTPS;
- else {
- nloc.wPort = getWord("ServerPort", MRA_DEFAULT_SERVER_PORT);
- if (nloc.wPort == MRA_SERVER_PORT_STANDART_NLB) nloc.wPort = MRA_SERVER_PORT_STANDART;
- }
-
- for (DWORD i = 1; (i < MRA_MAX_MRIM_SERVER && m_iStatus != ID_STATUS_OFFLINE); i++) {
- szHost.Format("mrim%lu.mail.ru", i);
-
- dwCurConnectReTryCount = dwConnectReTryCount;
- do {
- InterlockedExchange((volatile LONG*)&m_dwThreadWorkerLastPingTime, GetTickCount());
- m_hConnection = Netlib_OpenConnection(m_hNetlibUser, &nloc);
- }
- while (--dwCurConnectReTryCount && m_hConnection == nullptr);
-
- if (m_hConnection) {
- bConnected = TRUE;
- break;
- }
- }
- }
-
- if (bConnected && m_iStatus != ID_STATUS_OFFLINE)
- MraNetworkDispatcher();
- else {
- if (bConnected == FALSE) {
- ShowFormattedErrorMessage(L"Can't connect to MRIM server, error", GetLastError());
- ProtoBroadcastAck(NULL, ACKTYPE_LOGIN, ACKRESULT_FAILED, nullptr, LOGINERR_NONETWORK);
- }
- }
-
- MraMPopSessionQueueFlush(hMPopSessionQueue);
- NETLIB_CLOSEHANDLE(m_hConnection);
- dwCMDNum = 0;
-
- InterlockedExchange((volatile LONG*)&m_dwThreadWorkerRunning, FALSE);
- SetStatus(ID_STATUS_OFFLINE);
-}
-
-DWORD CMraProto::MraGetNLBData(CMStringA &szHost, WORD *pwPort)
-{
- DWORD dwRetErrorCode;
-
- BOOL bContinue = TRUE;
- BYTE btBuff[MAX_PATH];
- DWORD dwConnectReTryCount, dwCurConnectReTryCount;
- LPSTR lpszPort;
- size_t dwBytesReceived, dwRcvBuffSizeUsed = 0;
- NETLIBSELECT nls = { 0 };
- NETLIBOPENCONNECTION nloc = { 0 };
-
- dwConnectReTryCount = getDword("ConnectReTryCountNLB", MRA_DEFAULT_CONN_RETRY_COUNT_NLB);
-
- nloc.cbSize = sizeof(nloc);
- nloc.flags = NLOCF_V2;
- if (mraGetStringA(NULL, "Server", szHost))
- nloc.szHost = szHost;
- else
- nloc.szHost = MRA_DEFAULT_SERVER;
-
- if (IsHTTPSProxyUsed(m_hNetlibUser))
- nloc.wPort = MRA_SERVER_PORT_HTTPS;
- else
- nloc.wPort = getWord("ServerPort", MRA_DEFAULT_SERVER_PORT);
-
- nloc.timeout = getDword("TimeOutConnectNLB", MRA_DEFAULT_TIMEOUT_CONN_NLB);
- if (nloc.timeout < MRA_TIMEOUT_CONN_MIN) nloc.timeout = MRA_TIMEOUT_CONN_MIN;
- if (nloc.timeout > MRA_TIMEOUT_CONN_MAX) nloc.timeout = MRA_TIMEOUT_CONN_MAX;
-
- dwCurConnectReTryCount = dwConnectReTryCount;
- do {
- InterlockedExchange((volatile LONG*)&m_dwThreadWorkerLastPingTime, GetTickCount());
- nls.hReadConns[0] = Netlib_OpenConnection(m_hNetlibUser, &nloc);
- }
- while (--dwCurConnectReTryCount && nls.hReadConns[0] == nullptr);
-
- if (nls.hReadConns[0]) {
- nls.dwTimeout = 1000 * getDword("TimeOutReceiveNLB", MRA_DEFAULT_TIMEOUT_RECV_NLB);
- InterlockedExchange((volatile LONG*)&m_dwThreadWorkerLastPingTime, GetTickCount());
-
- while (m_iStatus != ID_STATUS_OFFLINE && bContinue) {
- switch (Netlib_Select(&nls)) {
- case SOCKET_ERROR:
- case 0:// Time out
- bContinue = FALSE;
- break;
- case 1:
- dwBytesReceived = Netlib_Recv(nls.hReadConns[0], (LPSTR)(btBuff + dwRcvBuffSizeUsed), (int)(_countof(btBuff) - dwRcvBuffSizeUsed), 0);
- if (dwBytesReceived && dwBytesReceived != SOCKET_ERROR)
- dwRcvBuffSizeUsed += dwBytesReceived;
- else
- bContinue = FALSE;
- break;
- }
- InterlockedExchange((volatile LONG*)&m_dwThreadWorkerLastPingTime, GetTickCount());
- }
- Netlib_CloseHandle(nls.hReadConns[0]);
-
- if (dwRcvBuffSizeUsed) {
- lpszPort = (LPSTR)MemoryFindByte(0, btBuff, dwRcvBuffSizeUsed, ':');
- if (lpszPort) {
- (*lpszPort) = 0;
- lpszPort++;
-
- szHost = (LPSTR)btBuff;
- if (pwPort) (*pwPort) = (WORD)StrToUNum32(lpszPort, (dwRcvBuffSizeUsed - (lpszPort - (LPSTR)btBuff)));
- dwRetErrorCode = NO_ERROR;
- }
- else {
- dwRetErrorCode = ERROR_INVALID_USER_BUFFER;
- ShowFormattedErrorMessage(L"NLB data corrupted", NO_ERROR);
- }
- }
- else {
- dwRetErrorCode = GetLastError();
- ShowFormattedErrorMessage(L"Can't get data for NLB, error", dwRetErrorCode);
- }
- }
- else {
- dwRetErrorCode = GetLastError();
- ShowFormattedErrorMessage(L"Can't connect to NLB server, error", dwRetErrorCode);
- }
-
- return dwRetErrorCode;
-}
-
-DWORD CMraProto::MraNetworkDispatcher()
-{
- DWORD dwRetErrorCode = NO_ERROR;
-
- bool bContinue = true;
- DWORD dwDataCurrentBuffSize, dwDataCurrentBuffSizeUsed;
- size_t dwRcvBuffSize = BUFF_SIZE_RCV, dwRcvBuffSizeUsed = 0, dwDataCurrentBuffOffset = 0;
- LPBYTE lpbBufferRcv;
- mrim_packet_header_t *pmaHeader;
-
- NETLIBSELECT nls = { sizeof(nls) };
- nls.dwTimeout = 30000;
- nls.hReadConns[0] = m_hConnection;
-
- lpbBufferRcv = (LPBYTE)mir_calloc(dwRcvBuffSize);
-
- m_dwNextPingSendTickTime = m_dwPingPeriod = MAXDWORD;
- dwCMDNum = 0;
- MraSendCMD(MRIM_CS_HELLO, nullptr, 0);
- while (m_iStatus != ID_STATUS_OFFLINE && bContinue) {
- int iSelectRet = Netlib_Select(&nls);
- if (SOCKET_ERROR == iSelectRet) {
- if (m_iStatus != ID_STATUS_OFFLINE) {
- dwRetErrorCode = GetLastError();
- ShowFormattedErrorMessage(L"Disconnected, socket error", dwRetErrorCode);
- }
- break;
- }
- // Time out or normal
- m_dwThreadWorkerLastPingTime = GetTickCount();
- /* Server ping. */
- if (m_dwNextPingSendTickTime <= m_dwThreadWorkerLastPingTime) {
- nls.dwTimeout = (m_dwPingPeriod * 1000);
- m_dwNextPingSendTickTime = (m_dwThreadWorkerLastPingTime + nls.dwTimeout);
- MraSendCMD(MRIM_CS_PING, nullptr, 0);
- } else {
- if (MAXDWORD != m_dwNextPingSendTickTime)
- nls.dwTimeout = (m_dwNextPingSendTickTime - m_dwThreadWorkerLastPingTime);
- }
- { /* Remove old items from send queue. */
- DWORD dwCmdNum, dwFlags, dwAckType;
- MCONTACT hContact;
- LPBYTE lpbData;
- size_t dwDataSize;
- while (!MraSendQueueFindOlderThan(hSendQueueHandle, SEND_QUEUE_TIMEOUT, &dwCmdNum, &dwFlags, &hContact, &dwAckType, &lpbData, &dwDataSize)) {
- switch (dwAckType) {
- case ACKTYPE_ADDED:
- case ACKTYPE_AUTHREQ:
- case ACKTYPE_CONTACTS:
- //nothing to do
- break;
- case ACKTYPE_MESSAGE:
- ProtoBroadcastAck(hContact, dwAckType, ACKRESULT_FAILED, (HANDLE)dwCmdNum, (LPARAM)"Undefined message deliver error, time out");
- break;
- case ACKTYPE_GETINFO:
- ProtoBroadcastAck(hContact, dwAckType, ACKRESULT_FAILED, (HANDLE)1, 0);
- break;
- case ACKTYPE_SEARCH:
- ProtoBroadcastAck(hContact, dwAckType, ACKRESULT_SUCCESS, (HANDLE)dwCmdNum, 0);
- break;
- case ICQACKTYPE_SMS:
- ProtoBroadcastAck(NULL, dwAckType, ACKRESULT_FAILED, (HANDLE)dwCmdNum, 0);
- mir_free(lpbData);
- break;
- }
- MraSendQueueFree(hSendQueueHandle, dwCmdNum);
- }
- }
-
- if (iSelectRet == 0) // Time out
- continue;
-
- // expand receive buffer dynamically
- if ((dwRcvBuffSize - dwRcvBuffSizeUsed) < BUFF_SIZE_RCV_MIN_FREE) {
- dwRcvBuffSize += BUFF_SIZE_RCV;
- lpbBufferRcv = (LPBYTE)mir_realloc(lpbBufferRcv, dwRcvBuffSize);
- }
-
- DWORD dwBytesReceived = Netlib_Recv(nls.hReadConns[0], (LPSTR)(lpbBufferRcv + dwRcvBuffSizeUsed), (int)(dwRcvBuffSize - dwRcvBuffSizeUsed), 0);
- if ( !dwBytesReceived || dwBytesReceived == SOCKET_ERROR) { // disconnected
- if (m_iStatus != ID_STATUS_OFFLINE) {
- dwRetErrorCode = GetLastError();
- debugLogA("Disconnected, socket read error %d", dwRetErrorCode);
- }
- break;
- }
-
- dwRcvBuffSizeUsed += dwBytesReceived;
- while (TRUE) {
- dwDataCurrentBuffSize = (int)(dwRcvBuffSize - dwDataCurrentBuffOffset);
- dwDataCurrentBuffSizeUsed = (int)(dwRcvBuffSizeUsed - dwDataCurrentBuffOffset);
- pmaHeader = (mrim_packet_header_t*)(lpbBufferRcv + dwDataCurrentBuffOffset);
-
- // packet header received
- if (dwDataCurrentBuffSizeUsed < sizeof(mrim_packet_header_t)) { // packet to small, continue receiving
- debugLogW(L"Packet to small, continue receiving\n");
- memmove(lpbBufferRcv, (lpbBufferRcv + dwDataCurrentBuffOffset), dwDataCurrentBuffSizeUsed);
- dwRcvBuffSizeUsed = dwDataCurrentBuffSizeUsed;
- dwDataCurrentBuffOffset = 0;
- break;
- }
- if (pmaHeader->magic != CS_MAGIC) { // bad packet
- debugLogW(L"Bad packet\n");
- dwDataCurrentBuffOffset = 0;
- dwRcvBuffSizeUsed = 0;
- break;
- }
- // packet OK
- if ((dwDataCurrentBuffSizeUsed - sizeof(mrim_packet_header_t)) < pmaHeader->dlen) { // not all packet received, continue receiving
- if (dwDataCurrentBuffOffset) {
- memmove(lpbBufferRcv, (lpbBufferRcv + dwDataCurrentBuffOffset), dwDataCurrentBuffSizeUsed);
- dwRcvBuffSizeUsed = dwDataCurrentBuffSizeUsed;
- dwDataCurrentBuffOffset = 0;
- }
- debugLogW(L"Not all packet received, continue receiving\n");
- break;
- }
- // full packet received, may be more than one
- bContinue = MraCommandDispatcher(pmaHeader);
-
- // move pointer to next packet in buffer
- if (dwDataCurrentBuffSizeUsed - sizeof(mrim_packet_header_t) > pmaHeader->dlen)
- dwDataCurrentBuffOffset += sizeof(mrim_packet_header_t)+pmaHeader->dlen;
- // move pointer to begin of buffer
- else {
- // динамическое уменьшение буффера приёма
- if (dwRcvBuffSize > BUFF_SIZE_RCV) {
- dwRcvBuffSize = BUFF_SIZE_RCV;
- lpbBufferRcv = (LPBYTE)mir_realloc(lpbBufferRcv, dwRcvBuffSize);
- }
- dwDataCurrentBuffOffset = 0;
- dwRcvBuffSizeUsed = 0;
- break;
- }
- }
- }
- mir_free(lpbBufferRcv);
-
- return dwRetErrorCode;
-}
-
-//Подтверждение установки соединения// UL ## ping_period ## Ожидаемая частота подтверждения соединения (в секундах)
-bool CMraProto::CmdHelloAck(BinBuffer &buf)
-{
- buf >> m_dwPingPeriod;
-
- CMStringA szPass;
- if (!GetPassDB(szPass))
- return false;
-
- char szValueName[MAX_PATH];
- CMStringA szUserAgentFormatted, szEmail;
- CMStringW wszStatusTitle, wszStatusDesc;
-
- DWORD dwXStatusMir = m_iXStatus, dwXStatus;
- DWORD dwStatus = GetMraStatusFromMiradaStatus(m_iDesiredStatus, dwXStatusMir, &dwXStatus);
- if (IsXStatusValid(dwXStatusMir)) {// xstatuses
- mir_snprintf(szValueName, "XStatus%ldName", dwXStatusMir);
- if (!mraGetStringW(NULL, szValueName, wszStatusTitle))
- wszStatusTitle = TranslateW(lpcszXStatusNameDef[dwXStatusMir]);
-
- mir_snprintf(szValueName, "XStatus%ldMsg", dwXStatusMir);
- mraGetStringW(NULL, szValueName, wszStatusDesc);
- }
- else wszStatusTitle = Clist_GetStatusModeDescription(m_iDesiredStatus, 0);
-
- CMStringA szSelfVersionString = MraGetSelfVersionString();
- if (!mraGetStringA(NULL, "MirVerCustom", szUserAgentFormatted))
- szUserAgentFormatted.Format(
- "client=\"magent\" name=\"Miranda NG\" title=\"%s\" version=\"777.%lu.%lu.%lu\" build=\"%lu\" protocol=\"%lu.%lu\"",
- szSelfVersionString.c_str(), __FILEVERSION_STRING, PROTO_VERSION_MAJOR, PROTO_VERSION_MINOR);
-
- DWORD dwFutureFlags = (getByte("RTFReceiveEnable", MRA_DEFAULT_RTF_RECEIVE_ENABLE) ? FEATURE_FLAG_RTF_MESSAGE : 0) | MRA_FEATURE_FLAGS;
-
- if (!mraGetStringA(NULL, "e-mail", szEmail))
- return false;
-
- MraLogin2W(szEmail, szPass, dwStatus, lpcszStatusUri[dwXStatus], wszStatusTitle, wszStatusDesc, dwFutureFlags, szUserAgentFormatted, szSelfVersionString);
- return true;
-}
-
-// Successful authorization
-bool CMraProto::CmdLoginAck()
-{
- m_bLoggedIn = TRUE;
- m_dwNextPingSendTickTime = 0; // force send ping
- MraSendCMD(MRIM_CS_PING, nullptr, 0);
- SetStatus(m_iDesiredStatus);
- MraAvatarsQueueGetAvatarSimple(hAvatarsQueueHandle, GAIF_FORCE, NULL);
- return true;
-}
-
-// Unsuccessful authorization //LPS ## reason ## причина отказа
-bool CMraProto::CmdLoginRejected(BinBuffer &buf)
-{
- ProtoBroadcastAck(NULL, ACKTYPE_LOGIN, ACKRESULT_FAILED, nullptr, LOGINERR_WRONGPASSWORD);
-
- CMStringA reason; buf >> reason;
- MraPopupShowW(NULL, MRA_POPUP_TYPE_ERROR, TranslateT("Logon error: invalid login/password"), _A2T(reason.c_str()));
- return false;
-}
-
-// Message delivery
-//LPS ## from ## Адрес отправителя
-//LPS ## message ## текстовая версия сообщения
-//LPS ## rtf-message ## форматированная версия сообщения
-bool CMraProto::CmdMessageAck(BinBuffer &buf)
-{
- DWORD dwMsgID, dwFlags;
- CMStringA szEmail, szText, szRTFText, szMultiChatData;
- buf >> dwMsgID >> dwFlags >> szEmail >> szText >> szRTFText;
- if (dwFlags & MESSAGE_FLAG_MULTICHAT)
- buf >> szMultiChatData; // LPS multichat_data
-
- // подтверждаем получение, только если удалось его обработать
- if (MraRecvCommand_Message((DWORD)_time32(nullptr), dwFlags, szEmail, szText, szRTFText, szMultiChatData) == NO_ERROR)
- if ((dwFlags & MESSAGE_FLAG_NORECV) == 0)
- MraMessageRecv(szEmail, dwMsgID);
- return true;
-}
-
-bool CMraProto::CmdMessageStatus(ULONG seq, BinBuffer &buf)
-{
- DWORD dwAckType, dwTemp = buf.getDword();
- MCONTACT hContact;
- if (!MraSendQueueFind(hSendQueueHandle, seq, nullptr, &hContact, &dwAckType, nullptr, nullptr)) {
- switch (dwTemp) {
- case MESSAGE_DELIVERED:// Message delivered directly to user
- ProtoBroadcastAckAsync(hContact, dwAckType, ACKRESULT_SUCCESS, (HANDLE)seq, 0);
- break;//***deb возможны сбои из-за асинхронности тк там передаётся указатель
- case MESSAGE_REJECTED_NOUSER:// Message rejected - no such user
- ProtoBroadcastAck(hContact, dwAckType, ACKRESULT_FAILED, (HANDLE)seq, (LPARAM)"Message rejected - no such user");
- break;
- case MESSAGE_REJECTED_INTERR:// Internal server error
- ProtoBroadcastAck(hContact, dwAckType, ACKRESULT_FAILED, (HANDLE)seq, (LPARAM)"Internal server error");
- break;
- case MESSAGE_REJECTED_LIMIT_EXCEEDED:// Offline messages limit exceeded
- ProtoBroadcastAck(hContact, dwAckType, ACKRESULT_FAILED, (HANDLE)seq, (LPARAM)"Offline messages limit exceeded");
- break;
- case MESSAGE_REJECTED_TOO_LARGE:// Message is too large
- ProtoBroadcastAck(hContact, dwAckType, ACKRESULT_FAILED, (HANDLE)seq, (LPARAM)"Message is too large");
- break;
- case MESSAGE_REJECTED_DENY_OFFMSG:// User does not accept offline messages
- ProtoBroadcastAck(hContact, dwAckType, ACKRESULT_FAILED, (HANDLE)seq, (LPARAM)"User does not accept offline messages");
- break;
- case MESSAGE_REJECTED_DENY_OFFFLSH:// User does not accept offline flash animation
- ProtoBroadcastAck(hContact, dwAckType, ACKRESULT_FAILED, (HANDLE)seq, (LPARAM)"User does not accept offline flash animation");
- break;
- default:
- ProtoBroadcastAck(hContact, dwAckType, ACKRESULT_FAILED, (HANDLE)seq, (LPARAM)CMStringA().Format("Undefined message delivery error, code: %lu", dwTemp));
- break;
- }
- MraSendQueueFree(hSendQueueHandle, seq);
- }
- // not found in queue
- else if (dwTemp != MESSAGE_DELIVERED)
- MraPopupShowFromAgentW(MRA_POPUP_TYPE_DEBUG, TranslateT("MRIM_CS_MESSAGE_STATUS: not found in queue"));
- return true;
-}
-
-bool CMraProto::CmdUserInfo(BinBuffer &buf)
-{
- CMStringA szString;
- CMStringW szStringW;
- while (!buf.eof()) {
- buf >> szString;
- if (szString == "MESSAGES.TOTAL") {
- buf >> szString;
- dwEmailMessagesTotal = atoi(szString);
- }
- else if (szString == "MESSAGES.UNREAD") {
- buf >> szString;
- m_dwEmailMessagesUnread = atoi(szString);
- }
- else if (szString == "MRIM.NICKNAME") {
- buf >> szStringW;
- mraSetStringW(NULL, "Nick", szStringW);
- }
- else if (szString == "client.endpoint") {
- buf >> szStringW;
- szString = szStringW;
- int lpszDelimiter = szString.Find(':');
- if (lpszDelimiter != -1) {
- CMStringA szAddr(szString, lpszDelimiter);
- setDword("IP", ntohl(inet_addr(szAddr.c_str())));
- }
- }
- else if (szString == "connect.xml") {
- debugLogA(szString);
- buf >> szStringW;
- debugLogW(szStringW);
- }
- else if (szString == "micblog.show_title") {
- debugLogA(szString);
- buf >> szString;
- debugLogW(szStringW);
- }
- else if (szString == "micblog.status.xml") {
- debugLogA(szString);
- buf >> szString;
- debugLogA(szString);
- }
- else if (szString == "micblog.status.id") {
- buf >> szStringW;
- DWORDLONG dwBlogStatusID = _wtoi64(szStringW);
- mraWriteContactSettingBlob(NULL, DBSETTING_BLOGSTATUSID, &dwBlogStatusID, sizeof(DWORDLONG));
- }
- else if (szString == "micblog.status.time") {
- buf >> szStringW;
- setDword(DBSETTING_BLOGSTATUSTIME, _wtoi(szStringW));
- }
- else if (szString == "micblog.status.text") {
- buf >> szStringW;
- mraSetStringW(NULL, DBSETTING_BLOGSTATUS, szStringW);
- }
- else if (szString == "HAS_MYMAIL" || szString == "mrim.status.open_search" || szString == "rb.target.cookie" ||
- szString == "show_web_history_link" || szString == "friends_suggest" || szString == "timestamp" ||
- szString == "trusted_update" || szString == "mrim.wp.dating") {
- debugLogA(szString);
- buf >> szStringW;
- debugLogW(szStringW);
- }
- else _CrtDbgBreak();
- }
- MraUpdateEmailStatus("", "", false);
- return true;
-}
-
-//Сообщение доставленное, пока пользователь не был подключен к сети
-bool CMraProto::CmdOfflineMessageAck(BinBuffer &buf)
-{
- CMStringA szEmail, szText, lpsRTFText, lpsMultiChatData, szString;
- DWORDLONG dwMsgUIDL;
- buf >> dwMsgUIDL >> szString;
-
- DWORD dwTime, dwFlags;
- if (MraOfflineMessageGet(szString, dwTime, dwFlags, szEmail, szText, lpsRTFText, lpsMultiChatData) == NO_ERROR) {
- DWORD dwTemp = MraRecvCommand_Message(dwTime, dwFlags, szEmail, szText, lpsRTFText, lpsMultiChatData);
- if (dwTemp == NO_ERROR || dwTemp == ERROR_ACCESS_DENIED)
- MraOfflineMessageDel(dwMsgUIDL);
- else
- ShowFormattedErrorMessage(L"Offline message processing error, message will not deleted from server", NO_ERROR);
- }
- else ShowFormattedErrorMessage(L"Offline message processing error, message will not deleted from server", NO_ERROR);
-
- return true;
-}
-
-// Auth confirmation
-bool CMraProto::CmdAuthAck(BinBuffer &buf)
-{
- CMStringA szEmail;
- buf >> szEmail;
-
- BOOL bAdded;
- MCONTACT hContact = MraHContactFromEmail(szEmail, TRUE, TRUE, &bAdded);
- if (bAdded)
- MraUpdateContactInfo(hContact);
-
- if (IsEMailChatAgent(szEmail) == FALSE) {
- CMStringA szBuff = CreateBlobFromContact(hContact, L"");
-
- DBEVENTINFO dbei = {};
- dbei.flags = DBEF_UTF;
- dbei.szModule = m_szModuleName;
- dbei.timestamp = (DWORD)_time32(nullptr);
- dbei.eventType = EVENTTYPE_ADDED;
- dbei.cbBlob = szBuff.GetLength();
- dbei.pBlob = (PBYTE)szBuff.GetString();
- db_event_add(0, &dbei);
- }
-
- DWORD dwTemp;
- GetContactBasicInfoW(hContact, nullptr, nullptr, nullptr, &dwTemp, nullptr, nullptr, nullptr, nullptr);
- dwTemp &= ~CONTACT_INTFLAG_NOT_AUTHORIZED;
- SetContactBasicInfoW(hContact, SCBIFSI_LOCK_CHANGES_EVENTS, SCBIF_SERVER_FLAG, 0, 0, 0, dwTemp, 0, nullptr, nullptr, nullptr);
- setDword(hContact, "HooksLocked", TRUE);
- db_unset(hContact, "CList", "NotOnList");
- setDword(hContact, "HooksLocked", FALSE);
- return true;
-}
-
-// Web auth key
-bool CMraProto::CmdPopSession(BinBuffer &buf)
-{
- DWORD dwTemp = buf.getDword();
- if (dwTemp) {
- CMStringA szString; buf >> szString;
- if (NO_ERROR == MraMPopSessionQueueSetNewMPopKey(hMPopSessionQueue, szString)) {
- MraMPopSessionQueueStart(hMPopSessionQueue);
- return true;
- }
- }
- //error
- MraPopupShowFromAgentW(MRA_POPUP_TYPE_WARNING, TranslateT("Server error: can't get MPOP key for web authorize"));
- MraMPopSessionQueueFlush(hMPopSessionQueue);
-
- return true;
-}
-
-bool CMraProto::CmdFileTransfer(BinBuffer &buf)
-{
- DWORD dwIDRequest, dwFilesTotalSize, dwTemp;
- CMStringA szFiles, szEmail, szAddresses;
- CMStringW wszFilesW;
-
- buf >> szEmail >> dwIDRequest >> dwFilesTotalSize >> dwTemp;
- if (dwTemp) {
- buf >> szFiles >> dwTemp;
- if (dwTemp) { // LPS DESCRIPTION
- buf >> dwTemp >> wszFilesW;
- _ASSERTE(dwTemp != 1);
- }
- buf >> szAddresses;
- }
-
- BOOL bAdded = FALSE;
- MCONTACT hContact = MraHContactFromEmail(szEmail, TRUE, TRUE, &bAdded);
- if (bAdded)
- MraUpdateContactInfo(hContact);
-
- if (wszFilesW.IsEmpty())
- wszFilesW = szFiles;
-
- if (!wszFilesW.IsEmpty())
- MraFilesQueueAddReceive(hFilesQueueHandle, 0, hContact, dwIDRequest, wszFilesW, szAddresses);
- return true;
-}
-
-bool CMraProto::CmdFileTransferAck(BinBuffer &buf)
-{
- CMStringA szEmail, szString;
- DWORD dwAckType, dwTemp;
- buf >> dwAckType >> szEmail >> dwTemp >> szString;
-
- switch (dwAckType) {
- case FILE_TRANSFER_STATUS_OK:// игнорируем, мы и так уже слушаем порт(ждём), то что кто то согласился ничего не меняет
- //hContact = MraHContactFromEmail(szEmail.lpszData, szEmail.dwSize, TRUE, TRUE, NULL);
- break;
- case FILE_TRANSFER_STATUS_DECLINE:
- MraFilesQueueCancel(hFilesQueueHandle, dwTemp, FALSE);
- break;
- case FILE_TRANSFER_STATUS_ERROR:
- ShowFormattedErrorMessage(L"File transfer: error", NO_ERROR);
- MraFilesQueueCancel(hFilesQueueHandle, dwTemp, FALSE);
- break;
- case FILE_TRANSFER_STATUS_INCOMPATIBLE_VERS:
- ShowFormattedErrorMessage(L"File transfer: incompatible versions", NO_ERROR);
- MraFilesQueueCancel(hFilesQueueHandle, dwTemp, FALSE);
- break;
- case FILE_TRANSFER_MIRROR:
- MraFilesQueueSendMirror(hFilesQueueHandle, dwTemp, szString);
- break;
- default:// ## unknown error
- wchar_t szBuff[1024];
- mir_snwprintf(szBuff, TranslateT("MRIM_CS_FILE_TRANSFER_ACK: unknown error, code: %lu"), dwAckType);
- ShowFormattedErrorMessage(szBuff, NO_ERROR);
- break;
- }
- return true;
-}
-
-// Смена статуса другого пользователя
-bool CMraProto::CmdUserStatus(BinBuffer &buf)
-{
- DWORD dwStatus, dwXStatus, dwFutureFlags;
- CMStringA szSpecStatusUri, szUserAgentFormatted, szEmail;
- CMStringW szStatusTitle, szStatusDesc;
- buf >> dwStatus >> szSpecStatusUri >> szStatusTitle >> szStatusDesc >> szEmail >> dwFutureFlags >> szUserAgentFormatted;
-
- BOOL bAdded;
- if (MCONTACT hContact = MraHContactFromEmail(szEmail, TRUE, TRUE, &bAdded)) {
- if (bAdded)
- MraUpdateContactInfo(hContact);
-
- DWORD dwTemp = GetMirandaStatusFromMraStatus(dwStatus, GetMraXStatusIDFromMraUriStatus(szSpecStatusUri), &dwXStatus);
-
- MraContactCapabilitiesSet(hContact, dwFutureFlags);
- setByte(hContact, DBSETTING_XSTATUSID, (BYTE)dwXStatus);
- if (dwXStatus) {
- mraSetStringW(hContact, DBSETTING_XSTATUSNAME, szStatusTitle);
- mraSetStringW(hContact, DBSETTING_XSTATUSMSG, szStatusDesc);
- }
- else {
- delSetting(hContact, DBSETTING_XSTATUSNAME);
- delSetting(hContact, DBSETTING_XSTATUSMSG);
- }
-
- if (dwTemp != ID_STATUS_OFFLINE) { // пишем клиента только если юзер не отключён, иначе не затираем старое
- if (!szUserAgentFormatted.IsEmpty()) {
- if (getByte("MirVerRaw", MRA_DEFAULT_MIRVER_RAW) == FALSE)
- szUserAgentFormatted = MraGetVersionStringFromFormatted(szUserAgentFormatted);
- }
- else szUserAgentFormatted = (szEmail.Find("@uin.icq") == -1) ? MIRVER_UNKNOWN : "ICQ client";
-
- mraSetStringA(hContact, "MirVer", szUserAgentFormatted);
- }
-
- if (dwTemp == MraGetContactStatus(hContact)) {// меняем шило на шило, подозрительно? ;)
- if (dwTemp == ID_STATUS_OFFLINE) { // was/now invisible
- CMStringW wszEmail, wszBuff;
- mraGetStringW(hContact, "e-mail", wszEmail);
- wszBuff.Format(L"%s <%s> - %s", Clist_GetContactDisplayName(hContact), wszEmail.c_str(), TranslateT("invisible status changed"));
- MraPopupShowFromContactW(hContact, MRA_POPUP_TYPE_INFORMATION, wszBuff);
-
- MraSetContactStatus(hContact, ID_STATUS_INVISIBLE);
- }
- }
- MraSetContactStatus(hContact, dwTemp);
- SetExtraIcons(hContact);
- }
- return true;
-}
-
-bool CMraProto::CmdContactAck(int cmd, int seq, BinBuffer &buf)
-{
- DWORD dwAckType; MCONTACT hContact;
- if (!MraSendQueueFind(hSendQueueHandle, seq, nullptr, &hContact, &dwAckType, nullptr, nullptr)) {
- DWORD dwTemp = buf.getDword();
- switch (dwTemp) {
- case CONTACT_OPER_SUCCESS:// ## добавление произведено успешно
- if (cmd == MRIM_CS_ADD_CONTACT_ACK) {
- DWORD dwFlags = SCBIF_ID | SCBIF_SERVER_FLAG, dwGroupID = 0;
- ptrW grpName(db_get_wsa(hContact, "CList", "Group"));
- if (grpName) {
- dwFlags |= SCBIF_GROUP_ID;
- dwGroupID = MraMoveContactToGroup(hContact, -1, grpName);
- }
- SetContactBasicInfoW(hContact, 0, dwFlags, buf.getDword(), dwGroupID, 0, CONTACT_INTFLAG_NOT_AUTHORIZED, 0, nullptr, nullptr, nullptr);
- }
- break;
- case CONTACT_OPER_ERROR:// ## переданные данные были некорректны
- ShowFormattedErrorMessage(L"Data been sent are invalid", NO_ERROR);
- break;
- case CONTACT_OPER_INTERR:// ## при обработке запроса произошла внутренняя ошибка
- ShowFormattedErrorMessage(L"Internal server error", NO_ERROR);
- break;
- case CONTACT_OPER_NO_SUCH_USER:// ## добавляемого пользователя не существует в системе
- SetContactBasicInfoW(hContact, 0, SCBIF_SERVER_FLAG, 0, 0, 0, -1, 0, nullptr, nullptr, nullptr);
- ShowFormattedErrorMessage(L"No such user to add", NO_ERROR);
- break;
- case CONTACT_OPER_INVALID_INFO:// ## некорректное имя пользователя
- ShowFormattedErrorMessage(L"Invalid user name", NO_ERROR);
- break;
- case CONTACT_OPER_USER_EXISTS:// ## пользователь уже есть в контакт-листе
- ShowFormattedErrorMessage(L"User already added", NO_ERROR);
- break;
- case CONTACT_OPER_GROUP_LIMIT:// ## превышено максимально допустимое количество групп (20)
- ShowFormattedErrorMessage(L"Group limit is 20", NO_ERROR);
- break;
- default:// ## unknown error
- wchar_t szBuff[1024];
- mir_snwprintf(szBuff, TranslateT("MRIM_CS_*_CONTACT_ACK: unknown server error, code: %lu"), dwTemp);
- MraPopupShowFromAgentW(MRA_POPUP_TYPE_DEBUG, szBuff);
- break;
- }
- MraSendQueueFree(hSendQueueHandle, seq);
- }
- else MraPopupShowFromAgentW(MRA_POPUP_TYPE_DEBUG, TranslateT("MRIM_CS_*_CONTACT_ACK: not found in queue"));
- return true;
-}
-
-bool CMraProto::CmdAnketaInfo(int seq, BinBuffer &buf)
-{
- DWORD dwAckType, dwFlags; MCONTACT hContact;
- if (MraSendQueueFind(hSendQueueHandle, seq, &dwFlags, &hContact, &dwAckType, nullptr, nullptr)) {
- MraPopupShowFromAgentW(MRA_POPUP_TYPE_DEBUG, TranslateT("MRIM_ANKETA_INFO: not found in queue"));
- return true;
- }
-
- switch (buf.getDword()) {
- case MRIM_ANKETA_INFO_STATUS_NOUSER:// не найдено ни одной подходящей записи
- SetContactBasicInfoW(hContact, 0, SCBIF_SERVER_FLAG, 0, 0, 0, -1, 0, nullptr, nullptr, nullptr);
- case MRIM_ANKETA_INFO_STATUS_DBERR:// ошибка базы данных
- case MRIM_ANKETA_INFO_STATUS_RATELIMERR:// слишком много запросов, поиск временно запрещен
- switch (dwAckType) {
- case ACKTYPE_GETINFO:
- ProtoBroadcastAck(hContact, dwAckType, ACKRESULT_FAILED, (HANDLE)1, 0);
- break;
- case ACKTYPE_SEARCH:
- ProtoBroadcastAck(hContact, dwAckType, ACKRESULT_SUCCESS, (HANDLE)seq, 0);
- break;
- }
- break;
-
- case MRIM_ANKETA_INFO_STATUS_OK:
- // поиск успешно завершен
- DWORD dwFieldsNum, dwMaxRows, dwServerTime;
- DWORD dwID, dwContactSeverFlags, dwStatus, dwXStatus;
- buf >> dwFieldsNum >> dwMaxRows >> dwServerTime;
-
- CMStringA *pmralpsFields = new CMStringA[dwFieldsNum];
- CMStringA val;
- CMStringW valW, StatusNameW, StatusMsgW;
-
- /* Default contact statuses in mail.ru format. */
- dwStatus = STATUS_OFFLINE;
- dwXStatus = MRA_XSTATUS_OFFLINE;
-
- // read headers name
- for (DWORD i = 0; i < dwFieldsNum; i++) {
- buf >> pmralpsFields[i];
- debugLogA(pmralpsFields[i] + " ");
- }
-
- while (!buf.eof()) {
- // write to DB and exit loop
- if (dwAckType == ACKTYPE_GETINFO && hContact) {
- setDword(hContact, "InfoTS", (DWORD)_time32(nullptr));
- //MRA_LPS mralpsUsernameValue;
- for (DWORD i = 0; i < dwFieldsNum; i++) {
- CMStringA &fld = pmralpsFields[i];
- if (fld == "Nickname") {
- buf >> valW;
- mraSetStringW(hContact, "Nick", valW);
- }
- else if (fld == "FirstName") {
- buf >> valW;
- mraSetStringW(hContact, "FirstName", valW);
- }
- else if (fld == "LastName") {
- buf >> valW;
- mraSetStringW(hContact, "LastName", valW);
- }
- else if (fld == "Sex") {
- buf >> val;
- switch (atoi(val)) {
- case 1:// мужской
- setByte(hContact, "Gender", 'M');
- break;
- case 2:// женский
- setByte(hContact, "Gender", 'F');
- break;
- default:// а фиг его знает
- delSetting(hContact, "Gender");
- break;
- }
- }
- else if (fld == "Birthday") {
- buf >> val;
- if (val.GetLength() > 9) {// calc "Age"
- SYSTEMTIME stTime = { 0 };
- stTime.wYear = (WORD)StrToUNum32(val.c_str(), 4);
- stTime.wMonth = (WORD)StrToUNum32(val.c_str() + 5, 2);
- stTime.wDay = (WORD)StrToUNum32(val.c_str() + 8, 2);
- setWord(hContact, "BirthYear", stTime.wYear);
- setByte(hContact, "BirthMonth", (BYTE)stTime.wMonth);
- setByte(hContact, "BirthDay", (BYTE)stTime.wDay);
- setWord(hContact, "Age", (WORD)GetYears(&stTime));
- }
- else {
- delSetting(hContact, "BirthYear");
- delSetting(hContact, "BirthMonth");
- delSetting(hContact, "BirthDay");
- delSetting(hContact, "Age");
- }
- }
- else if (fld == "City_id") {
- buf >> val;
- DWORD dwTemp = atoi(val);
- if (dwTemp) {
- for (size_t j = 0; mrapPlaces[j].lpszData; j++) {
- if (mrapPlaces[j].dwCityID == dwTemp) {
- mraSetStringW(hContact, "City", mrapPlaces[j].lpszData);
- break;
- }
- }
- }
- else delSetting(hContact, "City");
- }
- else if (fld == "Location") {
- buf >> valW;
- mraSetStringW(hContact, "About", valW);
- }
- else if (fld == "Country_id") {
- buf >> val;
- DWORD dwTemp = atoi(val);
- if (dwTemp) {
- for (size_t j = 0; mrapPlaces[j].lpszData; j++) {
- if (mrapPlaces[j].dwCountryID == dwTemp) {
- mraSetStringW(hContact, "Country", mrapPlaces[j].lpszData);
- break;
- }
- }
- }
- else delSetting(hContact, "Country");
- }
- else if (fld == "Phone") {
- delSetting(hContact, "Phone");
- delSetting(hContact, "Cellular");
- delSetting(hContact, "Fax");
-
- buf >> val;
- if (val.GetLength()) {
- int iStart = 0;
- CMStringA szPhone = val.Tokenize(",", iStart);
- if (iStart != -1) {
- mraSetStringA(hContact, "Phone", szPhone);
- szPhone = val.Tokenize(",", iStart);
- }
- if (iStart != -1) {
- mraSetStringA(hContact, "Cellular", szPhone);
- szPhone = val.Tokenize(",", iStart);
- }
- if (iStart != -1)
- mraSetStringA(hContact, "Fax", szPhone);
- }
- }
- else if (fld == "mrim_status") {
- buf >> val;
- if (val.GetLength())
- dwStatus = atoi(val);
- }
- else if (fld == "status_uri") {
- buf >> val;
- if (val.GetLength())
- dwXStatus = GetMraXStatusIDFromMraUriStatus(val);
- }
- else if (fld == "status_title") {
- buf >> StatusNameW;
- }
- else if (fld == "status_desc") {
- buf >> StatusMsgW;
- }
- else {// for DEBUG ONLY
- buf >> val;
- debugLogA("%s = %s\n", fld.c_str(), val.c_str());
- }
- } /* for */
- // для авторизованного нам и так присылают правильный статус
- GetContactBasicInfoW(hContact, &dwID, nullptr, nullptr, &dwContactSeverFlags, nullptr, nullptr, nullptr, nullptr);
- if (dwID == -1 || (dwContactSeverFlags & CONTACT_INTFLAG_NOT_AUTHORIZED)) {
- /* Convert mail.ru statuses to miranda. */
- dwStatus = GetMirandaStatusFromMraStatus(dwStatus, dwXStatus, &dwXStatus);
- MraSetContactStatus(hContact, dwStatus);
- setByte(hContact, DBSETTING_XSTATUSID, (BYTE)dwXStatus);
- if (StatusNameW.GetLength())
- mraSetStringW(hContact, DBSETTING_XSTATUSNAME, StatusNameW);
- if (StatusMsgW.GetLength())
- mraSetStringW(hContact, DBSETTING_XSTATUSMSG, StatusMsgW);
- }
- }
- else if (dwAckType == ACKTYPE_SEARCH) {
- wchar_t szNick[MAX_EMAIL_LEN] = { 0 },
- szFirstName[MAX_EMAIL_LEN] = { 0 },
- szLastName[MAX_EMAIL_LEN] = { 0 },
- szEmail[MAX_EMAIL_LEN] = { 0 };
- CMStringA mralpsUsernameValue;
- PROTOSEARCHRESULT psr = { 0 };
-
- psr.cbSize = sizeof(psr);
- psr.flags = PSR_UNICODE;
- psr.nick.w = szNick;
- psr.firstName.w = szFirstName;
- psr.lastName.w = szLastName;
- psr.email.w = szEmail;
- psr.id.w = szEmail;
-
- for (DWORD i = 0; i < dwFieldsNum; i++) {
- CMStringA &fld = pmralpsFields[i];
- if (fld == "Username") {
- buf >> val;
- mralpsUsernameValue = val;
- }
- else if (fld == "Domain") { // имя было уже задано ранее
- buf >> val;
- wcsncpy_s(szEmail, _A2T(mralpsUsernameValue + "@" + val), _TRUNCATE);
- }
- else if (fld == "Nickname") {
- buf >> valW;
- wcsncpy_s(szNick, valW, _TRUNCATE);
- }
- else if (fld == "FirstName") {
- buf >> valW;
- wcsncpy_s(szFirstName, valW, _TRUNCATE);
- }
- else if (fld == "LastName") {
- buf >> valW;
- wcsncpy_s(szLastName, valW, _TRUNCATE);
- }
- else buf >> val;
- }
- ProtoBroadcastAck(hContact, dwAckType, ACKRESULT_DATA, (HANDLE)seq, (LPARAM)&psr);
- }
- }
-
- delete[] pmralpsFields;
-
- switch (dwAckType) {
- case ACKTYPE_GETINFO:
- ProtoBroadcastAck(hContact, dwAckType, ACKRESULT_SUCCESS, (HANDLE)1, 0);
- break;
- case ACKTYPE_SEARCH:
- default:
- ProtoBroadcastAck(hContact, dwAckType, ACKRESULT_SUCCESS, (HANDLE)seq, 0);
- break;
- }
- break;
- }
- MraSendQueueFree(hSendQueueHandle, seq);
- return true;
-}
-
-bool CMraProto::CmdGame(BinBuffer &buf)
-{
- MCONTACT hContact;
- CMStringA szEmail, szData;
- DWORD dwGameSessionID, dwGameMsg, dwGameMsgID, dwTemp;
- buf >> szEmail >> dwGameSessionID >> dwGameMsg >> dwGameMsgID >> dwTemp >> szData;
-
- switch (dwGameMsg) {
- case GAME_CONNECTION_INVITE:
- if (m_iStatus != ID_STATUS_INVISIBLE)
- MraGame(szEmail, dwGameSessionID, GAME_DECLINE, dwGameMsgID, szData);
- break;
- case GAME_CONNECTION_ACCEPT:
- break;
- case GAME_DECLINE:
- break;
- case GAME_INC_VERSION:
- break;
- case GAME_NO_SUCH_GAME:// user invisible
- if ((hContact = MraHContactFromEmail(szEmail, FALSE, TRUE, nullptr)))
- if (MraGetContactStatus(hContact) == ID_STATUS_OFFLINE)
- MraSetContactStatus(hContact, ID_STATUS_INVISIBLE);
- break;
- case GAME_JOIN:
- break;
- case GAME_CLOSE:
- break;
- case GAME_SPEED:
- break;
- case GAME_SYNCHRONIZATION:
- break;
- case GAME_USER_NOT_FOUND:
- break;
- case GAME_ACCEPT_ACK:
- break;
- case GAME_PING:
- break;
- case GAME_RESULT:
- break;
- case GAME_MESSAGES_NUMBER:
- break;
- default:
- wchar_t szBuff[1024];
- mir_snwprintf(szBuff, TranslateT("MRIM_CS_GAME: unknown internal game message code: %lu"), dwGameMsg);
- MraPopupShowFromAgentW(MRA_POPUP_TYPE_DEBUG, szBuff);
- break;
- }
- return true;
-}
-
-bool CMraProto::CmdClist2(BinBuffer &buf)
-{
- DWORD dwTemp = buf.getDword();
- if (dwTemp == GET_CONTACTS_OK) { // received contact list
- m_groups.destroy();
-
- DWORD dwGroupsCount, dwContactFlag = 0, dwGroupID = 0, dwContactSeverFlags = 0, dwStatus = 0, dwXStatus, dwFutureFlags = 0, dwBlogStatusTime = 0;
- ULARGE_INTEGER dwBlogStatusID;
- CMStringA szGroupMask, szContactMask, szEmail, szString;
- CMStringA szCustomPhones, szSpecStatusUri, szUserAgentFormatted;
- CMStringW wszNick, wszString, wszGroupName, wszStatusTitle, wszStatusDesc, wszBlogStatus, wszBlogStatusMusic;
- buf >> dwGroupsCount >> szGroupMask >> szContactMask;
-
- int iGroupMode = getByte("GroupMode", 100);
-
- debugLogA("Groups: %s\n", szGroupMask.c_str());
- DWORD dwID = 0;
- for (DWORD i = 0; i < dwGroupsCount; i++) { //groups handle
- DWORD dwControlParam = 0, dwGroupFlags = 0;
- for (int j = 0; j < szGroupMask.GetLength(); j++) { //enumerating parameters
- switch (szGroupMask[j]) {
- case 's'://LPS
- buf >> wszString;
- break;
- case 'u'://UL
- buf >> dwTemp;
- break;
- }
-
- if (j == 0 && szGroupMask[j] == 'u') { // GroupFlags
- dwGroupFlags = dwTemp;
- dwControlParam++;
- }
- else if (j == 1 && szGroupMask[j] == 's') { // GroupName
- wszGroupName = wszString;
- dwControlParam++;
- }
- }
-
- // add/modify group
- if (dwControlParam > 1) { // все параметры правильно инициализированны!
- if (!(dwGroupFlags & CONTACT_FLAG_REMOVED)) {
- m_groups.insert(new MraGroupItem(dwID, dwGroupFlags, wszGroupName));
- Clist_GroupCreate(0, wszGroupName);
- }
-
- debugLogW(L"'%s', flags: %lu (", wszGroupName.c_str(), dwGroupFlags);
- if (dwGroupFlags & CONTACT_FLAG_REMOVED) debugLogA("CONTACT_FLAG_REMOVED, ");
- if (dwGroupFlags & CONTACT_FLAG_GROUP) debugLogA("CONTACT_FLAG_GROUP, ");
- if (dwGroupFlags & CONTACT_FLAG_INVISIBLE) debugLogA("CONTACT_FLAG_INVISIBLE, ");
- if (dwGroupFlags & CONTACT_FLAG_VISIBLE) debugLogA("CONTACT_FLAG_VISIBLE, ");
- if (dwGroupFlags & CONTACT_FLAG_IGNORE) debugLogA("CONTACT_FLAG_IGNORE, ");
- if (dwGroupFlags & CONTACT_FLAG_SHADOW) debugLogA("CONTACT_FLAG_SHADOW, ");
- if (dwGroupFlags & CONTACT_FLAG_AUTHORIZED) debugLogA("CONTACT_FLAG_AUTHORIZED, ");
- if (dwGroupFlags & CONTACT_FLAG_MULTICHAT) debugLogA("CONTACT_FLAG_MULTICHAT, ");
- if (dwGroupFlags & CONTACT_FLAG_UNICODE_NAME) debugLogA("CONTACT_FLAG_UNICODE_NAME, ");
- if (dwGroupFlags & CONTACT_FLAG_PHONE) debugLogA("CONTACT_FLAG_PHONE, ");
- debugLogA(")");
- }
- dwID++;
- }
-
- debugLogA("Contacts: %s\n", szContactMask.c_str());
- dwID = 20;
- while (!buf.eof()) {
- DWORD dwControlParam = 0;
- for (int j = 0; j < szContactMask.GetLength(); j++) { //enumerating parameters
- BYTE fieldType = szContactMask[j];
- if (fieldType == 'u')
- buf >> dwTemp;
-
- if (j == 0 && fieldType == 'u') { // Flags
- dwContactFlag = dwTemp;
- dwControlParam++;
- }
- else if (j == 1 && fieldType == 'u') { // Group id
- dwGroupID = dwTemp;
- dwControlParam++;
- }
- else if (j == 2 && fieldType == 's') { // Email
- buf >> szEmail;
- dwControlParam++;
- }
- else if (j == 3 && fieldType == 's') { // Nick
- buf >> wszNick;
- dwControlParam++;
- }
- else if (j == 4 && fieldType == 'u') { // Server flags
- dwContactSeverFlags = dwTemp;
- dwControlParam++;
- }
- else if (j == 5 && fieldType == 'u') { // Status
- dwStatus = dwTemp;
- dwControlParam++;
- }
- else if (j == 6 && fieldType == 's') { // Custom Phone number,
- buf >> szCustomPhones;
- dwControlParam++;
- }
- else if (j == 7 && fieldType == 's') { // spec_status_uri
- buf >> szSpecStatusUri;
- dwControlParam++;
- }
- else if (j == 8 && fieldType == 's') { // status_title
- buf >> wszStatusTitle;
- dwControlParam++;
- }
- else if (j == 9 && fieldType == 's') { // status_desc
- buf >> wszStatusDesc;
- dwControlParam++;
- }
- else if (j == 10 && fieldType == 'u') { // com_support (future flags)
- dwFutureFlags = dwTemp;
- dwControlParam++;
- }
- else if (j == 11 && fieldType == 's') { // user_agent (formated string)
- buf >> szUserAgentFormatted;
- dwControlParam++;
- }
- else if (j == 12 && fieldType == 'u') { // BlogStatusID
- dwBlogStatusID.LowPart = dwTemp;
- dwControlParam++;
- }
- else if (j == 13 && fieldType == 'u') { // BlogStatusID
- dwBlogStatusID.HighPart = dwTemp;
- dwControlParam++;
- }
- else if (j == 14 && fieldType == 'u') { // BlogStatusTime
- dwBlogStatusTime = dwTemp;
- dwControlParam++;
- }
- else if (j == 15 && fieldType == 's') { // BlogStatus
- buf >> wszBlogStatus;
- dwControlParam++;
- }
- else if (j == 16 && fieldType == 's') { // BlogStatusMusic
- buf >> wszBlogStatusMusic;
- dwControlParam++;
- }
- else if (j == 17 && fieldType == 's') { // BlogStatusSender // ignory
- buf >> szString;
- dwControlParam++;
- }
- else if (j == 18 && fieldType == 's') { // geo data ?
- buf >> szString;
- dwControlParam++;
- }
- else if (j == 19 && fieldType == 's') { // ?????? ?
- buf >> szString;
- dwControlParam++;
- _ASSERTE(szString.GetLength());
- }
- else {
- if (fieldType == 's') {
- buf >> szString;
- if (szString.GetLength()) {
- debugLogA(szString + " ");
- }
- }
- else if (fieldType == 'u') {
- char szBuff[50];
- mir_snprintf(szBuff, "%lu, ", dwTemp);//;
- debugLogA("%s ", szBuff);
- }
- else _CrtDbgBreak();
- }
- }
-
- debugLogA("ID: %lu, Group id: %lu, %s: flags: %lu (", dwID, dwGroupID, szEmail.c_str(), dwContactFlag);
- if (dwContactFlag & CONTACT_FLAG_REMOVED) debugLogA("CONTACT_FLAG_REMOVED, ");
- if (dwContactFlag & CONTACT_FLAG_GROUP) debugLogA("CONTACT_FLAG_GROUP, ");
- if (dwContactFlag & CONTACT_FLAG_INVISIBLE) debugLogA("CONTACT_FLAG_INVISIBLE, ");
- if (dwContactFlag & CONTACT_FLAG_VISIBLE) debugLogA("CONTACT_FLAG_VISIBLE, ");
- if (dwContactFlag & CONTACT_FLAG_IGNORE) debugLogA("CONTACT_FLAG_IGNORE, ");
- if (dwContactFlag & CONTACT_FLAG_SHADOW) debugLogA("CONTACT_FLAG_SHADOW, ");
- if (dwContactFlag & CONTACT_FLAG_AUTHORIZED) debugLogA("CONTACT_FLAG_AUTHORIZED, ");
- if (dwContactFlag & CONTACT_FLAG_MULTICHAT) debugLogA("CONTACT_FLAG_MULTICHAT, ");
- if (dwContactFlag & CONTACT_FLAG_UNICODE_NAME) debugLogA("CONTACT_FLAG_UNICODE_NAME, ");
- if (dwContactFlag & CONTACT_FLAG_PHONE) debugLogA("CONTACT_FLAG_PHONE, ");
- debugLogA(")");
-
- debugLogA(": server flags: %lu (", dwContactSeverFlags);
- if (dwContactSeverFlags & CONTACT_INTFLAG_NOT_AUTHORIZED) debugLogA("CONTACT_INTFLAG_NOT_AUTHORIZED, ");
- debugLogA(")");
-
- // add/modify contact
- if (dwGroupID != 103)//***deb filtering phone/sms contats
- if (_strnicmp(szEmail, "phone", 5))
- if (dwControlParam > 5)// все параметры правильно инициализированны!
- if ((dwContactFlag & (CONTACT_FLAG_GROUP | CONTACT_FLAG_REMOVED)) == 0) {
- BOOL bAdded;
- MCONTACT hContact = MraHContactFromEmail(szEmail, TRUE, FALSE, &bAdded);
- if (hContact) {
- // already in list, remove the duplicate
- if (GetContactBasicInfoW(hContact, &dwTemp, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr) == NO_ERROR && dwTemp != -1) {
- _CrtDbgBreak();
- }
- else {
- dwTemp = GetMirandaStatusFromMraStatus(dwStatus, GetMraXStatusIDFromMraUriStatus(szSpecStatusUri), &dwXStatus);
-
- if (bAdded) { // update user info
- SetContactBasicInfoW(hContact, SCBIFSI_LOCK_CHANGES_EVENTS, (SCBIF_ID | SCBIF_GROUP_ID | SCBIF_FLAG | SCBIF_SERVER_FLAG | SCBIF_STATUS | SCBIF_NICK | SCBIF_PHONES),
- dwID, dwGroupID, dwContactFlag, dwContactSeverFlags, dwTemp, nullptr, &wszNick, &szCustomPhones);
- // request user info from server
- MraUpdateContactInfo(hContact);
- }
- else {
- if (iGroupMode == 100) { // first start
- ptrW tszGroup(db_get_wsa(hContact, "CList", "Group"));
- if (tszGroup)
- dwGroupID = MraMoveContactToGroup(hContact, dwGroupID, tszGroup);
- }
-
- SetContactBasicInfoW(hContact, SCBIFSI_LOCK_CHANGES_EVENTS, (SCBIF_ID | SCBIF_GROUP_ID | SCBIF_SERVER_FLAG | SCBIF_STATUS),
- dwID, dwGroupID, dwContactFlag, dwContactSeverFlags, dwTemp, nullptr, &wszNick, &szCustomPhones);
- if (wszNick.IsEmpty()) { // set the server-side nick
- wszNick = Clist_GetContactDisplayName(hContact);
- MraModifyContact(hContact, &dwID, &dwContactFlag, &dwGroupID, &szEmail, &wszNick, &szCustomPhones);
- }
- }
-
- MraContactCapabilitiesSet(hContact, dwFutureFlags);
- setByte(hContact, DBSETTING_XSTATUSID, (BYTE)dwXStatus);
- mraSetStringW(hContact, DBSETTING_XSTATUSNAME, wszStatusTitle);
- mraSetStringW(hContact, DBSETTING_XSTATUSMSG, wszStatusDesc);
- setDword(hContact, DBSETTING_BLOGSTATUSTIME, dwBlogStatusTime);
- mraWriteContactSettingBlob(hContact, DBSETTING_BLOGSTATUSID, &dwBlogStatusID.QuadPart, sizeof(DWORDLONG));
- mraSetStringW(hContact, DBSETTING_BLOGSTATUS, wszBlogStatus);
- mraSetStringW(hContact, DBSETTING_BLOGSTATUSMUSIC, wszBlogStatusMusic);
- if (IsXStatusValid(dwXStatus) || wszBlogStatus.GetLength())
- SetExtraIcons(hContact);
-
- if (dwTemp != ID_STATUS_OFFLINE) { // пишем клиента только если юзер не отключён, иначе не затираем старое
- if (!szUserAgentFormatted.IsEmpty()) {
- if (getByte("MirVerRaw", MRA_DEFAULT_MIRVER_RAW) == FALSE)
- szUserAgentFormatted = MraGetVersionStringFromFormatted(szUserAgentFormatted);
- }
- else szUserAgentFormatted = MIRVER_UNKNOWN;
- mraSetStringA(hContact, "MirVer", szUserAgentFormatted);
- }
-
- if (dwContactSeverFlags & CONTACT_INTFLAG_NOT_AUTHORIZED)
- if (getByte("AutoAuthRequestOnLogon", MRA_DEFAULT_AUTO_AUTH_REQ_ON_LOGON))
- CallProtoService(m_szModuleName, MRA_REQ_AUTH, hContact, 0);
- }
- }
- }
- dwID++;
- }// end while (processing contacts)
-
- // post processing contact list
- {
- CMStringA email, phones;
- CMStringW wszAuthMessage, nick;
-
- if (mraGetStringW(NULL, "AuthMessage", wszAuthMessage) == FALSE) // def auth message
- wszAuthMessage = TranslateW(MRA_DEFAULT_AUTH_MESSAGE);
-
- for (auto &hContact : AccContacts()) {
- if (GetContactBasicInfoW(hContact, &dwID, nullptr, nullptr, nullptr, nullptr, &email, nullptr, nullptr) == NO_ERROR)
- if (dwID == -1) {
- if (IsEMailChatAgent(email)) {// чат: ещё раз запросим авторизацию, пометим как видимый в списке, постоянный
- db_unset(hContact, "CList", "Hidden");
- db_unset(hContact, "CList", "NotOnList");
- SetExtraIcons(hContact);
- MraSetContactStatus(hContact, ID_STATUS_ONLINE);
-
- CMStringW wszCustomName = Clist_GetContactDisplayName(hContact);
- MraAddContact(hContact, (CONTACT_FLAG_VISIBLE | CONTACT_FLAG_MULTICHAT), -1, email, wszCustomName);
- }
- else {
- if (db_get_b(hContact, "CList", "NotOnList", 0) == 0) { // set extra icons and upload contact
- SetExtraIcons(hContact);
- if (getByte("AutoAddContactsToServer", MRA_DEFAULT_AUTO_ADD_CONTACTS_TO_SERVER)) { //add all contacts to server
- GetContactBasicInfoW(hContact, nullptr, &dwGroupID, nullptr, nullptr, nullptr, nullptr, &nick, &phones);
- MraAddContact(hContact, (CONTACT_FLAG_VISIBLE | CONTACT_FLAG_UNICODE_NAME), dwGroupID, email, nick, &phones, &wszAuthMessage);
- }
- }
- }
- MraUpdateContactInfo(hContact);
- }
- }
- }
- setByte("GroupMode", 1);
- }
- else { // контакт лист почемуто не получили
- // всех в offline и id в нестандарт
- for (auto &hContact : AccContacts()) {
- SetContactBasicInfoW(hContact, SCBIFSI_LOCK_CHANGES_EVENTS, (SCBIF_ID | SCBIF_GROUP_ID | SCBIF_SERVER_FLAG | SCBIF_STATUS),
- -1, -2, 0, 0, ID_STATUS_OFFLINE, nullptr, nullptr, nullptr);
- // request user info from server
- MraUpdateContactInfo(hContact);
- }
-
- if (dwTemp == GET_CONTACTS_ERROR) // найденный контакт-лист некорректен
- ShowFormattedErrorMessage(L"MRIM_CS_CONTACT_LIST2: bad contact list", NO_ERROR);
- else if (dwTemp == GET_CONTACTS_INTERR) // произошла внутренняя ошибка
- ShowFormattedErrorMessage(L"MRIM_CS_CONTACT_LIST2: internal server error", NO_ERROR);
- else {
- wchar_t szBuff[1024];
- mir_snwprintf(szBuff, TranslateT("MRIM_CS_CONTACT_LIST2: unknown server error, code: %lu"), dwTemp);
- MraPopupShowFromAgentW(MRA_POPUP_TYPE_DEBUG, szBuff);
- }
- }
- return true;
-}
-
-bool CMraProto::CmdProxy(BinBuffer &buf)
-{
- DWORD dwIDRequest, dwAckType;
- CMStringA szAddresses, szEmail, szString;
- MRA_GUID mguidSessionID;
-
- buf >> szEmail >> dwIDRequest >> dwAckType >> szString >> szAddresses >> mguidSessionID;
- if (dwAckType == MRIM_PROXY_TYPE_FILES) { // файлы, on file recv
- // set proxy info to file transfer context
- if (!MraMrimProxySetData(MraFilesQueueItemProxyByID(hFilesQueueHandle, dwIDRequest), szEmail, dwIDRequest, dwAckType, szString, szAddresses, &mguidSessionID))
- MraFilesQueueStartMrimProxy(hFilesQueueHandle, dwIDRequest);
- else { // empty/invalid session
- MraProxyAck(PROXY_STATUS_ERROR, szEmail, dwIDRequest, dwAckType, szString, szAddresses, mguidSessionID);
- _CrtDbgBreak();
- }
- }
- return true;
-}
-
-bool CMraProto::CmdProxyAck(BinBuffer &buf)
-{
- DWORD dwIDRequest, dwTemp, dwAckType;
- HANDLE hMraMrimProxyData;
- CMStringA szAddresses, szEmail, szString;
- MRA_GUID mguidSessionID;
- buf >> dwTemp >> szEmail >> dwIDRequest >> dwAckType >> szString >> szAddresses >> mguidSessionID;
-
- if (dwAckType == MRIM_PROXY_TYPE_FILES) { // on file send
- if ((hMraMrimProxyData = MraFilesQueueItemProxyByID(hFilesQueueHandle, dwIDRequest))) {
- switch (dwTemp) {
- case PROXY_STATUS_DECLINE:
- MraFilesQueueCancel(hFilesQueueHandle, dwIDRequest, FALSE);
- break;
- case PROXY_STATUS_OK:
- // set proxy info to file transfer context
- if (!MraMrimProxySetData(hMraMrimProxyData, szEmail, dwIDRequest, dwAckType, szString, szAddresses, &mguidSessionID))
- MraFilesQueueStartMrimProxy(hFilesQueueHandle, dwIDRequest);
- break;
- case PROXY_STATUS_ERROR:
- ShowFormattedErrorMessage(L"Proxy File transfer: error", NO_ERROR);
- MraFilesQueueCancel(hFilesQueueHandle, dwIDRequest, FALSE);
- break;
- case PROXY_STATUS_INCOMPATIBLE_VERS:
- ShowFormattedErrorMessage(L"Proxy File transfer: incompatible versions", NO_ERROR);
- MraFilesQueueCancel(hFilesQueueHandle, dwIDRequest, FALSE);
- break;
- case PROXY_STATUS_NOHARDWARE:
- case PROXY_STATUS_MIRROR:
- case PROXY_STATUS_CLOSED:
- default:
- _CrtDbgBreak();
- break;
- }
- }
- else _CrtDbgBreak();
- }
- return true;
-}
-
-bool CMraProto::CmdNewMail(BinBuffer &buf)
-{
- DWORD dwDate, dwUIDL, dwUnreadCount;
- CMStringA szEmail, szString;
- buf >> dwUnreadCount >> szEmail >> szString >> dwDate >> dwUIDL;
-
- if (dwUnreadCount > dwEmailMessagesTotal)
- dwEmailMessagesTotal += (dwUnreadCount - m_dwEmailMessagesUnread);
-
- DWORD dwSave = m_dwEmailMessagesUnread;
- m_dwEmailMessagesUnread = dwUnreadCount;// store new value
- if (getByte("IncrementalNewMailNotify", MRA_DEFAULT_INC_NEW_MAIL_NOTIFY) == 0 || dwSave < dwUnreadCount || dwUnreadCount == 0)
- MraUpdateEmailStatus(szEmail, szString, false);
- return true;
-}
-
-bool CMraProto::CmdBlogStatus(BinBuffer &buf)
-{
- DWORD dwTime, dwFlags;
- CMStringA szEmail, szString;
- CMStringW wszText;
- DWORDLONG dwBlogStatusID;
-
- buf >> dwFlags >> szEmail >> dwBlogStatusID >> dwTime >> wszText >> szString;
-
- if (MCONTACT hContact = MraHContactFromEmail(szEmail, FALSE, TRUE, nullptr)) {
- if (dwFlags & MRIM_BLOG_STATUS_MUSIC)
- mraSetStringW(hContact, DBSETTING_BLOGSTATUSMUSIC, wszText);
- else {
- setDword(hContact, DBSETTING_BLOGSTATUSTIME, dwTime);
- mraWriteContactSettingBlob(hContact, DBSETTING_BLOGSTATUSID, &dwBlogStatusID, sizeof(DWORDLONG));
- mraSetStringW(hContact, DBSETTING_BLOGSTATUS, wszText);
- }
- SetExtraIcons(hContact);
- }
- return true;
-}
-
-bool CMraProto::MraCommandDispatcher(mrim_packet_header_t *pmaHeader)
-{
- WCHAR szBuff[4096] = { 0 };
- DWORD dwTemp, dwAckType;
- size_t dwSize;
- MCONTACT hContact = NULL;
- LPBYTE pByte;
-
- debugLogA("Received packet %x\n", pmaHeader->msg);
-
- BinBuffer buf((LPBYTE)pmaHeader + sizeof(mrim_packet_header_t), pmaHeader->dlen);
-
- switch (pmaHeader->msg) {
- case MRIM_CS_HELLO_ACK: return CmdHelloAck(buf);
- case MRIM_CS_LOGIN_ACK: return CmdLoginAck();
- case MRIM_CS_LOGIN_REJ: return CmdLoginRejected(buf);
- case MRIM_CS_MESSAGE_ACK: return CmdMessageAck(buf);
- case MRIM_CS_MESSAGE_STATUS: return CmdMessageStatus(pmaHeader->seq, buf);
- case MRIM_CS_USER_INFO: return CmdUserInfo(buf);
- case MRIM_CS_OFFLINE_MESSAGE_ACK: return CmdOfflineMessageAck(buf);
- case MRIM_CS_AUTHORIZE_ACK: return CmdAuthAck(buf);
- case MRIM_CS_MPOP_SESSION: return CmdPopSession(buf);
- case MRIM_CS_FILE_TRANSFER: return CmdFileTransfer(buf);
- case MRIM_CS_FILE_TRANSFER_ACK: return CmdFileTransferAck(buf);
- case MRIM_CS_USER_STATUS: return CmdUserStatus(buf);
- case MRIM_CS_ADD_CONTACT_ACK:
- case MRIM_CS_MODIFY_CONTACT_ACK: return CmdContactAck(pmaHeader->msg, pmaHeader->seq, buf);
- case MRIM_CS_ANKETA_INFO: return CmdAnketaInfo(pmaHeader->seq, buf);
- case MRIM_CS_GAME: return CmdGame(buf);
- case MRIM_CS_CONTACT_LIST2: return CmdClist2(buf);
- case MRIM_CS_PROXY: return CmdProxy(buf);
- case MRIM_CS_PROXY_ACK: return CmdProxyAck(buf);
- case MRIM_CS_NEW_MAIL: return CmdNewMail(buf);
- case MRIM_CS_USER_BLOG_STATUS: return CmdBlogStatus(buf);
-
- case MRIM_CS_CONNECTION_PARAMS:// Изменение параметров соединения
- buf >> m_dwPingPeriod;
- m_dwNextPingSendTickTime = 0; // force send ping
- MraSendCMD(MRIM_CS_PING, nullptr, 0);
- break;
-
- case MRIM_CS_LOGOUT:// Пользователь отключен из-за параллельного входа с его логином.
- buf >> dwTemp;
- if (dwTemp == LOGOUT_NO_RELOGIN_FLAG)
- ShowFormattedErrorMessage(L"Another user connected with your login", NO_ERROR);
- return false;
-
- case MRIM_CS_MAILBOX_STATUS:
- buf >> dwTemp;
- if (dwTemp > dwEmailMessagesTotal)
- dwEmailMessagesTotal += (dwTemp - m_dwEmailMessagesUnread);
-
- dwAckType = m_dwEmailMessagesUnread;// save old value
- m_dwEmailMessagesUnread = dwTemp;// store new value
- if (getByte("IncrementalNewMailNotify", MRA_DEFAULT_INC_NEW_MAIL_NOTIFY) == 0 || dwAckType < dwTemp || dwTemp == 0)
- MraUpdateEmailStatus("", "", false);
- break;
-
- case MRIM_CS_SMS_ACK:
- buf >> dwTemp;
- if (MraSendQueueFind(hSendQueueHandle, pmaHeader->seq, nullptr, &hContact, &dwAckType, &pByte, &dwSize) == NO_ERROR) {
- /* pByte point to phone number ansi string. */
- /* dwAckType = ICQACKTYPE_SMS */
- CMStringA szEmail;
- if (mraGetStringA(NULL, "e-mail", szEmail)) {
- mir_snprintf((LPSTR)szBuff, sizeof(szBuff),
- "<sms_response><source>Mail.ru</source><deliverable>Yes</deliverable><network>Mail.ru, Russia</network><message_id>%s-1-1955988055-%s</message_id><destination>%s</destination><messages_left>0</messages_left></sms_response>\r\n",
- szEmail.c_str(), (LPSTR)pByte, (LPSTR)pByte);
- ProtoBroadcastAck(NULL, ICQACKTYPE_SMS, ACKRESULT_SENTREQUEST, (HANDLE)pmaHeader->seq, (LPARAM)szBuff);
- }
- mir_free(pByte);
- MraSendQueueFree(hSendQueueHandle, pmaHeader->seq);
- }
- else MraPopupShowFromAgentW(MRA_POPUP_TYPE_DEBUG, TranslateT("MRIM_CS_SMS_ACK: not found in queue"));
- break;
-
- case MRIM_CS_PROXY_HELLO:
- _CrtDbgBreak();
- break;
-
- case MRIM_CS_PROXY_HELLO_ACK:
- _CrtDbgBreak();
- break;
-
- case MRIM_CS_UNKNOWN:
- case MRIM_CS_UNKNOWN2:
- case MRIM_CS_USER_GEO:
- case MRIM_CS_SERVER_SETTINGS:
- break;
-
- default:
- debugLogA("Uknown packet type: %d", pmaHeader->msg);
- break;
- }
- return true;
-}
-
-// Сообщение
-DWORD CMraProto::MraRecvCommand_Message(DWORD dwTime, DWORD dwFlags, CMStringA &plpsFrom, CMStringA &plpsText, CMStringA &plpsRFTText, CMStringA &plpsMultiChatData)
-{
- DWORD dwBackColour;
- CMStringA lpszMessageExt;
- CMStringW wszMessage;
-
- PROTORECVEVENT pre = { 0 };
- pre.timestamp = dwTime;
-
- // check flags and datas
- if ((dwFlags & MESSAGE_FLAG_RTF) && plpsRFTText.IsEmpty())
- dwFlags &= ~MESSAGE_FLAG_RTF;
-
- if ((dwFlags & MESSAGE_FLAG_MULTICHAT) && plpsMultiChatData.IsEmpty())
- dwFlags &= ~MESSAGE_FLAG_MULTICHAT;
-
- // pre processing - extracting/decoding
- if (dwFlags & MESSAGE_FLAG_AUTHORIZE) { // extract auth message из обычного текста
- size_t dwAuthDataSize;
- LPBYTE lpbAuthData = (LPBYTE)mir_base64_decode(plpsText, &dwAuthDataSize);
- if (lpbAuthData) {
- BinBuffer buf(lpbAuthData, dwAuthDataSize);
-
- DWORD dwAuthPartsCount;
- CMStringA lpsAuthFrom;
- buf >> dwAuthPartsCount >> lpsAuthFrom;
- if (dwFlags & MESSAGE_FLAG_v1p16 && (dwFlags & MESSAGE_FLAG_CP1251) == 0) { // unicode text
- CMStringW lpsAuthMessageW;
- buf >> lpsAuthMessageW;
- wszMessage = lpsAuthMessageW;
- }
- else { // преобразуем в юникод текст только если он в АНСИ и если это не Флэш мультик и будильник тоже не нуждается в этом
- CMStringA lpsAuthMessage;
- buf >> lpsAuthMessage;
- wszMessage = ptrW(mir_a2u_cp(lpsAuthMessage, MRA_CODE_PAGE));
- }
- mir_free(lpbAuthData);
- }
- }
- else {
- // unicode text
- if ((dwFlags & (MESSAGE_FLAG_ALARM | MESSAGE_FLAG_FLASH | MESSAGE_FLAG_v1p16)) && (dwFlags & MESSAGE_FLAG_CP1251) == 0) {
- plpsText.AppendChar(0); // compensate difference between ASCIIZ & WCHARZ
- wszMessage = (WCHAR*)plpsText.GetString();
- }
- else wszMessage = plpsText;
-
- if (dwFlags & (MESSAGE_FLAG_CONTACT | MESSAGE_FLAG_NOTIFY | MESSAGE_FLAG_SMS | MESSAGE_SMS_DELIVERY_REPORT | MESSAGE_FLAG_ALARM))
- ; // do nothing; there's no extra part in a message
- else {
- if ((dwFlags & MESSAGE_FLAG_RTF) && !plpsRFTText.IsEmpty()) { //MESSAGE_FLAG_FLASH there
- size_t dwRFTBuffSize = ((plpsRFTText.GetLength() * 16) + 8192);
-
- mir_ptr<BYTE> lpbRTFData((LPBYTE)mir_calloc(dwRFTBuffSize));
- if (lpbRTFData) {
- size_t dwCompressedSize;
- mir_ptr<BYTE> lpbCompressed((LPBYTE)mir_base64_decode(plpsRFTText, &dwCompressedSize));
- DWORD dwRTFDataSize = (DWORD)dwRFTBuffSize;
- if (uncompress(lpbRTFData, &dwRTFDataSize, lpbCompressed, (uLong)dwCompressedSize) == Z_OK) {
- BinBuffer buf(lpbRTFData, dwRTFDataSize);
-
- CMStringA lpsRTFString, lpsBackColour, szString;
- DWORD dwRTFPartsCount;
-
- // количество частей в некоторых случаях больше 2, тогда нужно игнорировать первый текст, тк там сообщения об ущербности
- buf >> dwRTFPartsCount >> lpsRTFString >> dwBackColour;
- if (dwFlags & MESSAGE_FLAG_FLASH) {
- if (dwRTFPartsCount == 4) {
- buf >> szString;
- dwRTFPartsCount--;
- }
- if (dwRTFPartsCount == 3) { // ansi text only
- buf >> szString;
- wszMessage = ptrW(mir_a2u_cp(szString, MRA_CODE_PAGE));
- }
- else _CrtDbgBreak();
- }
- else { // RTF text
- if (dwRTFPartsCount > 2) {
- buf >> szString;
- _CrtDbgBreak();
- }
-
- lpszMessageExt = lpsRTFString;
- }
- }
- else _CrtDbgBreak();
- }
- }
- }
- }
-
- debugLogA("Processing message: %08X, from '%s', text '%S'\n", dwFlags, plpsFrom.c_str(), wszMessage.c_str());
-
- // processing
- if (dwFlags & (MESSAGE_FLAG_SMS | MESSAGE_SMS_DELIVERY_REPORT)) { // SMS
- INTERNET_TIME itTime;
- InternetTimeGetCurrentTime(&itTime);
- CMStringA szTime = InternetTimeGetString(&itTime);
- CMStringA szPhone = CopyNumber(plpsFrom), szEmail;
- if (!mraGetStringA(NULL, "e-mail", szEmail))
- return 0;
-
- CMStringW wszMessageXMLEncoded = EncodeXML(wszMessage);
- ptrA lpszMessageUTF(mir_utf8encodeW(wszMessageXMLEncoded));
-
- CMStringA szText;
- if (dwFlags & MESSAGE_SMS_DELIVERY_REPORT) {
- szText.Format("<sms_delivery_receipt><message_id>%s-1-1955988055-%s</message_id><destination>%s</destination><delivered>No</delivered><submition_time>%s</submition_time><error_code>0</error_code><error><id>15</id><params><param>%s</param></params></error></sms_delivery_receipt>",
- szEmail.c_str(), szPhone.c_str(), szPhone.c_str(), szTime.c_str(), lpszMessageUTF);
- ProtoBroadcastAck(NULL, ICQACKTYPE_SMS, ACKRESULT_FAILED, nullptr, (LPARAM)szText.GetString());
- }
- else { // new sms
- szText.Format("<sms_message><source>Mail.ru</source><destination_UIN>%s</destination_UIN><sender>%s</sender><senders_network>Mail.ru</senders_network><text>%s</text><time>%s</time></sms_message>",
- szEmail.c_str(), szPhone.c_str(), lpszMessageUTF, szTime.c_str());
- ProtoBroadcastAck(NULL, ICQACKTYPE_SMS, ACKRESULT_SUCCESS, nullptr, (LPARAM)szText.GetString());
- }
- }
- else {
- BOOL bAdded;
- MCONTACT hContact = MraHContactFromEmail(plpsFrom, TRUE, TRUE, &bAdded);
- if (bAdded)
- MraUpdateContactInfo(hContact);
-
- // user typing
- if (dwFlags & MESSAGE_FLAG_NOTIFY)
- CallService(MS_PROTO_CONTACTISTYPING, hContact, MAILRU_CONTACTISTYPING_TIMEOUT);
- else { // text/contact/auth // typing OFF
- CallService(MS_PROTO_CONTACTISTYPING, hContact, PROTOTYPE_CONTACTTYPING_OFF);
-
- if (dwFlags & MESSAGE_FLAG_MULTICHAT) {
- DWORD dwMultiChatEventType;
- CMStringA lpsEMailInMultiChat, szString;
- CMStringW lpsMultichatName;
-
- BinBuffer buf((PBYTE)plpsMultiChatData.GetString(), plpsMultiChatData.GetLength());
- buf >> dwMultiChatEventType >> lpsMultichatName >> lpsEMailInMultiChat;
-
- switch (dwMultiChatEventType) {
- case MULTICHAT_MESSAGE:
- MraChatSessionMessageAdd(hContact, lpsEMailInMultiChat, wszMessage, dwTime);// LPS sender
- break;
- case MULTICHAT_ADD_MEMBERS:
- MraChatSessionMembersAdd(hContact, lpsEMailInMultiChat, dwTime);// LPS sender
- buf >> szString;// CLPS members
- MraChatSessionSetIviter(hContact, lpsEMailInMultiChat);
- case MULTICHAT_MEMBERS:
- {
- DWORD dwMultiChatMembersCount;
- BinBuffer binBuf((PBYTE)lpsEMailInMultiChat.GetString(), lpsEMailInMultiChat.GetLength());
- binBuf >> dwMultiChatMembersCount;// count
- for (unsigned i = 0; i < dwMultiChatMembersCount && !binBuf.eof(); i++) {
- binBuf >> szString;
- MraChatSessionJoinUser(hContact, szString, ((dwMultiChatEventType == MULTICHAT_MEMBERS) ? 0 : dwTime));
- }
-
- if (dwMultiChatEventType == MULTICHAT_MEMBERS) {
- binBuf >> szString; // [ LPS owner ]
- MraChatSessionSetOwner(hContact, szString);
- }
- }
- break;
- case MULTICHAT_ATTACHED:
- MraChatSessionJoinUser(hContact, lpsEMailInMultiChat, dwTime);// LPS member
- break;
- case MULTICHAT_DETACHED:
- MraChatSessionLeftUser(hContact, lpsEMailInMultiChat, dwTime);// LPS member
- break;
- case MULTICHAT_INVITE:
- MraChatSessionInvite(hContact, lpsEMailInMultiChat, dwTime);// LPS sender
- MraAddContact(hContact, (CONTACT_FLAG_VISIBLE | CONTACT_FLAG_MULTICHAT | CONTACT_FLAG_UNICODE_NAME), -1, plpsFrom, lpsMultichatName);
- break;
- default:
- _CrtDbgBreak();
- break;
- }
- }
- else if (dwFlags & MESSAGE_FLAG_AUTHORIZE) { // auth request
- BOOL bAutoGrantAuth = FALSE;
-
- if (IsEMailChatAgent(plpsFrom))
- bAutoGrantAuth = FALSE;
- else {
- // temporary contact
- if (db_get_b(hContact, "CList", "NotOnList", 0)) {
- if (getByte("AutoAuthGrandNewUsers", MRA_DEFAULT_AUTO_AUTH_GRAND_NEW_USERS))
- bAutoGrantAuth = TRUE;
- }
- else if (getByte("AutoAuthGrandUsersInCList", MRA_DEFAULT_AUTO_AUTH_GRAND_IN_CLIST))
- bAutoGrantAuth = TRUE;
- }
-
- CMStringA szBlob = CreateBlobFromContact(hContact, wszMessage);
- if (bAutoGrantAuth) { // auto grant auth
- DBEVENTINFO dbei = {};
- dbei.szModule = m_szModuleName;
- dbei.timestamp = _time32(nullptr);
- dbei.flags = DBEF_READ | DBEF_UTF;
- dbei.eventType = EVENTTYPE_AUTHREQUEST;
- dbei.pBlob = (PBYTE)szBlob.c_str();
- dbei.cbBlob = szBlob.GetLength();
- db_event_add(0, &dbei);
- MraAuthorize(plpsFrom);
- }
- else {
- pre.szMessage = (LPSTR)szBlob.GetString();
- pre.lParam = szBlob.GetLength();
- ProtoChainRecv(hContact, PSR_AUTH, 0, (LPARAM)&pre);
- }
- }
- else {
- db_unset(hContact, "CList", "Hidden");
-
- if (dwFlags & MESSAGE_FLAG_CONTACT) { // contacts received
- ptrA lpbBuffer(mir_u2a_cp(wszMessage, MRA_CODE_PAGE));
- pre.flags = 0;
- pre.szMessage = (LPSTR)lpbBuffer;
- pre.lParam = mir_strlen(lpbBuffer);
-
- LPSTR lpbBufferCurPos = lpbBuffer;
- while (TRUE) { // цикл замены ; на 0
- lpbBufferCurPos = (LPSTR)MemoryFindByte((lpbBufferCurPos - (LPSTR)lpbBuffer), lpbBuffer, pre.lParam, ';');
- if (!lpbBufferCurPos)
- break;
-
- // found
- (*lpbBufferCurPos) = 0;
- lpbBufferCurPos ++;
- }
- ProtoChainRecv(hContact, PSR_CONTACTS, 0, (LPARAM)&pre);
- }
- else if (dwFlags & MESSAGE_FLAG_ALARM) { // alarm
- if (m_heNudgeReceived)
- NotifyEventHooks(m_heNudgeReceived, hContact, NULL);
- else {
- T2Utf szMsg(TranslateW(MRA_ALARM_MESSAGE));
- pre.szMessage = szMsg;
- ProtoChainRecvMsg(hContact, &pre);
- }
- }
- else { // standart message// flash animation
- // пишем в ANSI, всё равно RTF
- if ((dwFlags & MESSAGE_FLAG_RTF) && (dwFlags & MESSAGE_FLAG_FLASH) == 0 && !lpszMessageExt.IsEmpty() && getByte("RTFReceiveEnable", MRA_DEFAULT_RTF_RECEIVE_ENABLE)) {
- pre.flags = 0;
- pre.szMessage = (LPSTR)lpszMessageExt.GetString();
- ProtoChainRecvMsg(hContact, &pre);
- }
- else {
- // some plugins can change pre.szMessage pointer and we failed to free it
- ptrA lpszMessageUTF(mir_utf8encodeW(wszMessage));
- pre.szMessage = lpszMessageUTF;
- ProtoChainRecvMsg(hContact, &pre);
- }
-
- if (dwFlags & MESSAGE_FLAG_SYSTEM)
- MraPopupShowW(hContact, MRA_POPUP_TYPE_INFORMATION, TranslateT("Mail.ru System notify"), (LPWSTR)pre.szMessage);
- }
- }
- }
- }
-
- return NO_ERROR;
-}
-
-DWORD GetMraXStatusIDFromMraUriStatus(const char *szStatusUri)
-{
- if (szStatusUri)
- for (DWORD i = 0; lpcszStatusUri[i]; i++)
- if (!_stricmp(lpcszStatusUri[i], szStatusUri))
- return i;
-
- return MRA_XSTATUS_UNKNOWN;
-}
-
-DWORD GetMraStatusFromMiradaStatus(DWORD dwMirandaStatus, DWORD dwXStatusMir, DWORD *pdwXStatusMra)
-{
- if (IsXStatusValid(dwXStatusMir)) {
- if (pdwXStatusMra)
- *pdwXStatusMra = (dwXStatusMir + MRA_XSTATUS_INDEX_OFFSET - 1);
- return STATUS_USER_DEFINED;
- }
-
- switch (dwMirandaStatus) {
- case ID_STATUS_OFFLINE:
- if (pdwXStatusMra) *pdwXStatusMra = MRA_XSTATUS_OFFLINE;
- return STATUS_OFFLINE;
-
- case ID_STATUS_ONLINE:
- if (pdwXStatusMra) *pdwXStatusMra = MRA_XSTATUS_ONLINE;
- return STATUS_ONLINE;
-
- case ID_STATUS_AWAY:
- case ID_STATUS_NA:
- case ID_STATUS_ONTHEPHONE:
- case ID_STATUS_OUTTOLUNCH:
- if (pdwXStatusMra) *pdwXStatusMra = MRA_XSTATUS_AWAY;
- return STATUS_AWAY;
-
- case ID_STATUS_DND:
- case ID_STATUS_OCCUPIED:
- if (pdwXStatusMra) *pdwXStatusMra = MRA_XSTATUS_DND;
- return STATUS_USER_DEFINED;
-
- case ID_STATUS_FREECHAT:
- if (pdwXStatusMra) *pdwXStatusMra = MRA_XSTATUS_CHAT;
- return STATUS_USER_DEFINED;
-
- case ID_STATUS_INVISIBLE:
- if (pdwXStatusMra) *pdwXStatusMra = MRA_XSTATUS_INVISIBLE;
- return (STATUS_ONLINE | STATUS_FLAG_INVISIBLE);
- }
-
- if (pdwXStatusMra) *pdwXStatusMra = MRA_XSTATUS_OFFLINE;
- return STATUS_OFFLINE;
-}
-
-DWORD GetMirandaStatusFromMraStatus(DWORD dwMraStatus, DWORD dwXStatusMra, DWORD *pdwXStatusMir)
-{
- if (pdwXStatusMir) *pdwXStatusMir = 0;
-
- switch (dwMraStatus) {
- case STATUS_OFFLINE: return ID_STATUS_OFFLINE;
- case STATUS_ONLINE: return ID_STATUS_ONLINE;
- case STATUS_AWAY: return ID_STATUS_AWAY;
- case STATUS_UNDETERMINATED: return ID_STATUS_OFFLINE;
- case STATUS_USER_DEFINED:
- switch (dwXStatusMra) {
- case MRA_XSTATUS_DND: return ID_STATUS_DND;
- case MRA_XSTATUS_CHAT: return ID_STATUS_FREECHAT;
- case MRA_XSTATUS_MOBILE: return ID_STATUS_ONTHEPHONE;
- case MRA_XSTATUS_UNKNOWN:
- if (pdwXStatusMir) *pdwXStatusMir = MRA_MIR_XSTATUS_UNKNOWN;
- return ID_STATUS_ONLINE;
- }
- if (pdwXStatusMir) *pdwXStatusMir = dwXStatusMra - MRA_XSTATUS_INDEX_OFFSET + 1;
- return ID_STATUS_ONLINE;
- default:
- if (dwMraStatus & STATUS_FLAG_INVISIBLE)
- return ID_STATUS_INVISIBLE;
- }
-
- return ID_STATUS_OFFLINE;
-}
-
-/////////////////////////////////////////////////////////////////////////////////////////////////
-
-DWORD BinBuffer::getDword()
-{
- if (m_len >= sizeof(DWORD)) {
- DWORD ret = *(DWORD*)m_data;
- m_data += sizeof(DWORD);
- m_len -= sizeof(DWORD);
- return ret;
- }
- return 0;
-}
-
-DWORDLONG BinBuffer::getInt64()
-{
- if (m_len >= sizeof(DWORDLONG)) {
- DWORDLONG ret = *(DWORDLONG*)m_data;
- m_data += sizeof(DWORDLONG);
- m_len -= sizeof(DWORDLONG);
- return ret;
- }
- return 0;
-}
-
-MRA_GUID BinBuffer::getGuid()
-{
- MRA_GUID ret;
- if (m_len >= sizeof(MRA_GUID)) {
- ret = *(MRA_GUID*)m_data;
- m_data += sizeof(MRA_GUID);
- m_len -= sizeof(MRA_GUID);
- return ret;
- }
- else memset(&ret, 0, sizeof(ret));
- return ret;
-}
-
-void BinBuffer::getStringA(CMStringA& ret)
-{
- if (m_len >= sizeof(DWORD)) {
- DWORD dwLen = *(DWORD*)m_data;
- m_data += sizeof(DWORD);
- m_len -= sizeof(DWORD);
- if (m_len >= dwLen) {
- ret = CMStringA((LPSTR)m_data, dwLen);
- m_data += dwLen;
- m_len -= dwLen;
- return;
- }
- }
- ret.Empty();
-}
-
-void BinBuffer::getStringW(CMStringW& ret)
-{
- if (m_len >= sizeof(DWORD)) {
- DWORD dwLen = *(DWORD*)m_data;
- m_data += sizeof(DWORD);
- m_len -= sizeof(DWORD);
- if (m_len >= dwLen) {
- ret = CMStringW((LPWSTR)m_data, dwLen / 2);
- m_data += dwLen;
- m_len -= dwLen;
- return;
- }
- }
- ret.Empty();
-}
diff --git a/protocols/MRA/src/Mra_svcs.cpp b/protocols/MRA/src/Mra_svcs.cpp
deleted file mode 100644
index dc40f9f915..0000000000
--- a/protocols/MRA/src/Mra_svcs.cpp
+++ /dev/null
@@ -1,667 +0,0 @@
-#include "stdafx.h"
-#include "proto.h"
-
-LPCSTR lpcszStatusUri[] =
-{
- "", // offline // "status_0",
- "STATUS_ONLINE", // "status_1",
- "STATUS_AWAY", // "status_2",
- "STATUS_INVISIBLE", // "status_3",
- "status_dnd",
- "status_chat",
- "status_mobile",
- "status_4", // first xstatus
- "status_5",
- "status_6",
- "status_7", // 10
- "status_8",
- "status_9",
- "status_10",
- "status_11",
- "status_12",
- "status_13",
- "status_14",
- "status_15",
- "status_16",
- "status_17", // 20
- "status_18",
- "status_19",
- "status_20",
- "status_21",
- "status_22",
- "status_23",
- "status_24",
- //"status_25", // chat/dnd
- "status_26",
- "status_27",
- "status_28", // 30
- "status_29",
- "status_30",
- //"status_31", // chat/dnd
- "status_32",
- "status_33",
- "status_34",
- "status_35",
- "status_36",
- "status_37",
- "status_38",
- "status_39", // 40
- "status_40",
- "status_41",
- "status_42",
- "status_43",
- "status_44",
- "status_45",
- "status_46",
- "status_47",
- "status_48",
- "status_49", // 50
- "status_50",
- "status_51",
- "status_52",
- "status_53",
- "status_dating",
- nullptr
-};
-
-LPCWSTR lpcszXStatusNameDef[] =
-{
- LPGENW("None"),
- LPGENW("Sick"),
- LPGENW("Home"),
- LPGENW("Eating"),
- LPGENW("Compass"),
- LPGENW("On WC"),
- LPGENW("Cooking"),
- LPGENW("Walking"),
- LPGENW("Alien"),
- LPGENW("Shrimp"),
- LPGENW("Got lost"),
- LPGENW("Crazy"),
- LPGENW("Duck"),
- LPGENW("Playing"),
- LPGENW("Smoking"),
- LPGENW("Office"),
- LPGENW("Meeting"),
- LPGENW("Beer"),
- LPGENW("Coffee"),
- LPGENW("Working"),
- LPGENW("Relaxing"),
- LPGENW("On the phone"),
- LPGENW("In institute"),
- LPGENW("At school"),
- LPGENW("Wrong number"),
- LPGENW("Laughing"),
- LPGENW("Malicious"),
- LPGENW("Imp"),
- LPGENW("Blind"),
- LPGENW("Disappointed"),
- LPGENW("Almost crying"),
- LPGENW("Fearful"),
- LPGENW("Angry"),
- LPGENW("Vampire"),
- LPGENW("Ass"),
- LPGENW("Love"),
- LPGENW("Sleeping"),
- LPGENW("Cool!"),
- LPGENW("Peace!"),
- LPGENW("Cock a snook"),
- LPGENW("Get out"),
- LPGENW("Death"),
- LPGENW("Rocket"),
- LPGENW("Devil-fish"),
- LPGENW("Heavy metal"),
- LPGENW("Things look bad"),
- LPGENW("Squirrel"),
- LPGENW("Star"),
- LPGENW("Music"),
- LPGENW("Dating"),
- nullptr
-};
-
-//////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-void CMraProto::SetExtraIcons(MCONTACT hContact)
-{
- DWORD dwID, dwGroupID, dwContactSeverFlags;
- if (GetContactBasicInfoW(hContact, &dwID, &dwGroupID, nullptr, &dwContactSeverFlags, nullptr, nullptr, nullptr, nullptr))
- return;
-
- DWORD dwIconID = -1;
- DWORD dwXStatus = MRA_MIR_XSTATUS_NONE;
-
- if (m_bLoggedIn) {
- dwXStatus = getByte(hContact, DBSETTING_XSTATUSID, MRA_MIR_XSTATUS_NONE);
- if (dwID == -1)
- dwIconID = (dwContactSeverFlags == -1) ? ADV_ICON_DELETED : ADV_ICON_NOT_ON_SERVER;
- else {
- if (dwGroupID == 103)
- dwIconID = ADV_ICON_PHONE;
- else {
- if (dwContactSeverFlags)
- if (dwContactSeverFlags == -1)
- dwIconID = ADV_ICON_DELETED;
- else
- dwIconID = ADV_ICON_NOT_AUTHORIZED;
- }
- }
- }
-
- if (dwIconID == -1) {
- CMStringW statusMsg;
- mraGetStringW(hContact, DBSETTING_BLOGSTATUS, statusMsg);
- if (statusMsg.GetLength())
- dwIconID = ADV_ICON_BLOGSTATUS;
- }
-
- ExtraIcon_SetIcon(hExtraXstatusIcon, hContact,
- (IsXStatusValid(dwXStatus) || dwXStatus == MRA_MIR_XSTATUS_UNKNOWN) ? hXStatusAdvancedStatusIcons[dwXStatus] : nullptr);
- ExtraIcon_SetIcon(hExtraInfo, hContact, (dwIconID != -1) ? gdiExtraStatusIconsItems[dwIconID].hIcolib : nullptr);
-}
-
-INT_PTR CMraProto::MraXStatusMenu(WPARAM, LPARAM, LPARAM param)
-{
- if (MraRequestXStatusDetails(param) == FALSE)
- MraSetXStatusInternal(param);
- return 0;
-}
-
-/////////////////////////////////////////////////////////////////////////////////////////
-
-int CMraProto::MraContactDeleted(WPARAM hContact, LPARAM)
-{
- if (!m_bLoggedIn || !hContact)
- return 0;
-
- if (IsContactMra(hContact)) {
- DWORD dwID, dwGroupID;
- GetContactBasicInfoW(hContact, &dwID, &dwGroupID, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr);
-
- MraSetContactStatus(hContact, ID_STATUS_OFFLINE);
- if (!db_get_b(hContact, "CList", "NotOnList", 0) || dwID != -1) {
- DWORD dwFlags = CONTACT_FLAG_REMOVED;
- MraModifyContact(hContact, &dwID, &dwFlags);
- }
- MraAvatarsDeleteContactAvatarFile(hAvatarsQueueHandle, hContact);
- }
- return 0;
-}
-
-int CMraProto::MraDbSettingChanged(WPARAM hContact, LPARAM lParam)
-{
- if (!m_bLoggedIn || !lParam || !hContact)
- return 0;
-
- DBCONTACTWRITESETTING *cws = (DBCONTACTWRITESETTING*)lParam;
-
- // это наш контакт, он не временный (есть в списке на сервере) и его обновление разрешено
- if (IsContactMra(hContact) && !db_get_b(hContact, "CList", "NotOnList", 0) && getDword(hContact, "HooksLocked", FALSE) == FALSE) {
- if (!strcmp(cws->szModule, "CList")) {
- // MyHandle setting
- if (!strcmp(cws->szSetting, "MyHandle")) {
- // always store custom nick
- CMStringW wszNick;
- if (cws->value.type == DBVT_DELETED) {
- wszNick = Clist_GetContactDisplayName(hContact);
- db_set_ws(hContact, "CList", "MyHandle", wszNick);
- }
- else if (cws->value.pszVal) {
- switch (cws->value.type) {
- case DBVT_WCHAR:
- wszNick = cws->value.pwszVal;
- break;
- case DBVT_UTF8:
- wszNick = ptrW(mir_utf8decodeW(cws->value.pszVal));
- break;
- case DBVT_ASCIIZ:
- wszNick = ptrW(mir_a2u_cp(cws->value.pszVal, MRA_CODE_PAGE));
- break;
- }
- if (wszNick.GetLength())
- MraModifyContact(hContact, nullptr, nullptr, nullptr, nullptr, &wszNick);
- }
- }
- // Group setting
- else if (!strcmp(cws->szSetting, "Group")) {
- CMStringW wszGroup;
- // manage group on server
- switch (cws->value.type) {
- case DBVT_WCHAR:
- wszGroup = cws->value.pwszVal;
- break;
- case DBVT_UTF8:
- wszGroup = ptrW(mir_utf8decodeW(cws->value.pszVal));
- break;
- case DBVT_ASCIIZ:
- wszGroup = ptrW(mir_a2u_cp(cws->value.pszVal, MRA_CODE_PAGE));
- break;
- }
- if (wszGroup.GetLength()) {
- DWORD dwGroupID = getDword(hContact, "GroupID", -1);
- if (dwGroupID != -1)
- MraMoveContactToGroup(hContact, dwGroupID, wszGroup);
- }
- }
- // NotOnList setting. Has a temporary contact just been added permanently?
- else if (!strcmp(cws->szSetting, "NotOnList")) {
- if (cws->value.type == DBVT_DELETED || (cws->value.type == DBVT_BYTE && cws->value.bVal == 0)) {
- CMStringW wszAuthMessage;
- if (!mraGetStringW(NULL, "AuthMessage", wszAuthMessage))
- wszAuthMessage = TranslateW(MRA_DEFAULT_AUTH_MESSAGE);
-
- db_unset(hContact, "CList", "Hidden");
-
- CMStringA szEmail, szPhones;
- CMStringW wszNick;
- DWORD dwGroupID, dwContactFlag;
- GetContactBasicInfoW(hContact, nullptr, &dwGroupID, &dwContactFlag, nullptr, nullptr, &szEmail, &wszNick, &szPhones);
- MraAddContact(hContact, dwContactFlag, dwGroupID, szEmail, wszNick, &szPhones, &wszAuthMessage);
- }
- }
- // Hidden setting
- else if (!strcmp(cws->szSetting, "Hidden")) {
- DWORD dwContactFlag = GetContactFlags(hContact);
- if (cws->value.type == DBVT_DELETED || (cws->value.type == DBVT_BYTE && cws->value.bVal == 0))
- dwContactFlag &= ~CONTACT_FLAG_SHADOW;
- else
- dwContactFlag |= CONTACT_FLAG_SHADOW;
-
- MraModifyContact(hContact, nullptr, &dwContactFlag);
- }
- }
- // Ignore section
- else if (!strcmp(cws->szModule, "Ignore")) {
- if (!strcmp(cws->szSetting, "Mask1")) {
- DWORD dwContactFlag = GetContactFlags(hContact);
- if (cws->value.type == DBVT_DELETED || (cws->value.type == DBVT_DWORD && cws->value.dVal&IGNOREEVENT_MESSAGE) == 0)
- dwContactFlag &= ~CONTACT_FLAG_IGNORE;
- else
- dwContactFlag |= CONTACT_FLAG_IGNORE;
-
- MraModifyContact(hContact, nullptr, &dwContactFlag);
- }
- }
- // User info section
- else if (!strcmp(cws->szModule, "UserInfo")) {
- if (!strcmp(cws->szSetting, "MyPhone0") || !strcmp(cws->szSetting, "MyPhone1") || !strcmp(cws->szSetting, "MyPhone2"))
- MraModifyContact(hContact);
- }
- }
- return 0;
-}
-
-/////////////////////////////////////////////////////////////////////////////////////////
-// Extra icons
-
-int CMraProto::MraExtraIconsApply(WPARAM wParam, LPARAM)
-{
- SetExtraIcons(wParam);
- return 0;
-}
-
-INT_PTR CMraProto::MraSetListeningTo(WPARAM, LPARAM lParam)
-{
- LISTENINGTOINFO *pliInfo = (LISTENINGTOINFO*)lParam;
-
- if (pliInfo == nullptr || pliInfo->cbSize != sizeof(LISTENINGTOINFO)) {
- MraChangeUserBlogStatus(MRIM_BLOG_STATUS_MUSIC, L"", 0);
- delSetting(DBSETTING_BLOGSTATUSMUSIC);
- }
- else if (pliInfo->dwFlags & LTI_UNICODE) {
- CMStringW wszListeningTo;
- if (ServiceExists(MS_LISTENINGTO_GETPARSEDTEXT))
- wszListeningTo = ptrW((LPWSTR)CallService(MS_LISTENINGTO_GETPARSEDTEXT, (WPARAM)L"%track%. %title% - %artist% - %player%", (LPARAM)pliInfo));
- else
- wszListeningTo.Format(L"%s. %s - %s - %s", pliInfo->ptszTrack ? pliInfo->ptszTrack : L"", pliInfo->ptszTitle ? pliInfo->ptszTitle : L"", pliInfo->ptszArtist ? pliInfo->ptszArtist : L"", pliInfo->ptszPlayer ? pliInfo->ptszPlayer : L"");
-
- mraSetStringExW(NULL, DBSETTING_BLOGSTATUSMUSIC, wszListeningTo);
- MraChangeUserBlogStatus(MRIM_BLOG_STATUS_MUSIC, wszListeningTo, 0);
- }
-
- return 0;
-}
-
-int CMraProto::MraMusicChanged(WPARAM wParam, LPARAM lParam)
-{
- switch (wParam) {
- case WAT_EVENT_PLAYERSTATUS:
- // stopped
- if (1 == lParam) {
- delSetting(DBSETTING_BLOGSTATUSMUSIC);
- MraChangeUserBlogStatus(MRIM_BLOG_STATUS_MUSIC, L"", 0);
- }
- break;
-
- case WAT_EVENT_NEWTRACK:
- SONGINFO *psiSongInfo;
- if (WAT_RES_OK == CallService(MS_WAT_GETMUSICINFO, WAT_INF_UNICODE, (LPARAM)&psiSongInfo)) {
- CMStringW wszMusic;
- wszMusic.Format(L"%ld. %s - %s - %s", psiSongInfo->track, psiSongInfo->artist, psiSongInfo->title, psiSongInfo->player);
- mraSetStringExW(NULL, DBSETTING_BLOGSTATUSMUSIC, wszMusic);
- MraChangeUserBlogStatus(MRIM_BLOG_STATUS_MUSIC, wszMusic, 0);
- }
- break;
- }
-
- return 0;
-}
-
-DWORD CMraProto::MraSetXStatusInternal(DWORD dwXStatus)
-{
- if (IsXStatusValid(dwXStatus)) {
- CMStringW szBuff;
-
- // obsolete (TODO: remove in next version)
- char szValueName[MAX_PATH];
- mir_snprintf(szValueName, "XStatus%ldName", dwXStatus);
- if (!mraGetStringW(NULL, szValueName, szBuff))
- szBuff = lpcszXStatusNameDef[dwXStatus];
- mraSetStringExW(NULL, DBSETTING_XSTATUSNAME, szBuff);
-
- // obsolete (TODO: remove in next version)
- mir_snprintf(szValueName, "XStatus%ldMsg", dwXStatus);
- if (mraGetStringW(NULL, szValueName, szBuff))
- mraSetStringExW(NULL, DBSETTING_XSTATUSMSG, szBuff);
- else
- delSetting(DBSETTING_XSTATUSMSG);
- }
- else {
- delSetting(DBSETTING_XSTATUSNAME);
- delSetting(DBSETTING_XSTATUSMSG);
- dwXStatus = MRA_MIR_XSTATUS_NONE;
- }
-
- DWORD dwOldStatusMode = InterlockedExchange((volatile LONG*)&m_iXStatus, dwXStatus);
- setByte(DBSETTING_XSTATUSID, (BYTE)dwXStatus);
-
- MraSendNewStatus(m_iStatus, dwXStatus, L"", L"");
-
- return dwOldStatusMode;
-}
-
-INT_PTR CMraProto::MraSetXStatusEx(WPARAM, LPARAM lParam)
-{
- INT_PTR iRet = 1;
- DWORD dwXStatus;
- CUSTOM_STATUS *pData = (CUSTOM_STATUS*)lParam;
-
- if (pData->cbSize >= sizeof(CUSTOM_STATUS)) {
- iRet = 0;
-
- if (pData->flags & CSSF_MASK_STATUS) {
- dwXStatus = *pData->status;
- if (IsXStatusValid(dwXStatus) == FALSE && dwXStatus != MRA_MIR_XSTATUS_NONE)
- iRet = 1;
- }
- else dwXStatus = m_iXStatus;
-
- if (pData->flags & (CSSF_MASK_NAME | CSSF_MASK_MESSAGE) && iRet == 0) {
- if (IsXStatusValid(dwXStatus) || dwXStatus == MRA_MIR_XSTATUS_NONE) {
- CHAR szValueName[MAX_PATH];
-
- // set custom status name
- if (pData->flags & CSSF_MASK_NAME) {
- mir_snprintf(szValueName, "XStatus%ldName", dwXStatus);
- if (pData->flags & CSSF_UNICODE) {
- mraSetStringExW(NULL, szValueName, pData->pwszName);
- mraSetStringExW(NULL, DBSETTING_XSTATUSNAME, pData->pwszName);
- }
- else {
- mraSetStringExA(NULL, szValueName, pData->pszName);
- mraSetStringExA(NULL, DBSETTING_XSTATUSNAME, pData->pszName);
- }
- }
-
- // set custom status message
- if (pData->flags & CSSF_MASK_MESSAGE) {
- mir_snprintf(szValueName, "XStatus%ldMsg", dwXStatus);
- if (pData->flags & CSSF_UNICODE) {
- mraSetStringExW(NULL, szValueName, pData->pwszMessage);
- mraSetStringExW(NULL, DBSETTING_XSTATUSMSG, pData->pwszMessage);
- }
- else {
- mraSetStringExA(NULL, szValueName, pData->pszMessage);
- mraSetStringExA(NULL, DBSETTING_XSTATUSMSG, pData->pszMessage);
- }
- }
- }
- // неудача только если мы не ставили Хстатус и попытались записать сообщения для "нет" статуса
- else if (!(pData->flags & CSSF_MASK_STATUS))
- iRet = 1;
- }
-
- // set/update xstatus code and/or message
- if (pData->flags & (CSSF_MASK_STATUS | CSSF_MASK_NAME | CSSF_MASK_MESSAGE) && iRet == 0)
- MraSetXStatusInternal(dwXStatus);
-
- // hide menu items
- if (pData->flags & CSSF_DISABLE_UI) {
- m_bHideXStatusUI = (*pData->wParam) ? false : true;
- DWORD dwCount = MRA_XSTATUS_OFF_CLI_COUNT;
- if (getByte(NULL, "xStatusShowAll", MRA_DEFAULT_SHOW_ALL_XSTATUSES))
- dwCount = MRA_XSTATUS_COUNT;
- for (DWORD i = 0; i < dwCount; i++)
- Menu_ShowItem(hXStatusMenuItems[i], !m_bHideXStatusUI);
- }
- }
- return iRet;
-}
-
-INT_PTR CMraProto::MraGetXStatusEx(WPARAM hContact, LPARAM lParam)
-{
- CUSTOM_STATUS *pData = (CUSTOM_STATUS*)lParam;
-
- if (pData->cbSize < sizeof(CUSTOM_STATUS))
- return 1;
-
- // fill status member
- if (pData->flags & CSSF_MASK_STATUS)
- *pData->status = m_iXStatus;
-
- // fill status name member
- if (pData->flags & CSSF_MASK_NAME) {
- if (pData->flags & CSSF_DEFAULT_NAME) {
- DWORD dwXStatus = (pData->wParam == nullptr) ? m_iXStatus : *pData->wParam;
- if (!IsXStatusValid(dwXStatus))
- return 1;
-
- if (pData->flags & CSSF_UNICODE)
- mir_wstrncpy(pData->ptszName, lpcszXStatusNameDef[dwXStatus], (STATUS_TITLE_MAX + 1));
- else {
- size_t dwStatusTitleSize = mir_wstrlen(lpcszXStatusNameDef[dwXStatus]);
- if (dwStatusTitleSize > STATUS_TITLE_MAX)
- dwStatusTitleSize = STATUS_TITLE_MAX;
-
- WideCharToMultiByte(MRA_CODE_PAGE, 0, lpcszXStatusNameDef[dwXStatus], (DWORD)dwStatusTitleSize, pData->pszName, MAX_PATH, nullptr, nullptr);
- (*((CHAR*)(pData->pszName + dwStatusTitleSize))) = 0;
- }
- }
- else {
- if (pData->flags & CSSF_UNICODE)
- mraGetStaticStringW(hContact, DBSETTING_XSTATUSNAME, pData->pwszName, (STATUS_TITLE_MAX + 1), nullptr);
- else
- mraGetStaticStringA(hContact, DBSETTING_XSTATUSNAME, pData->pszName, (STATUS_TITLE_MAX + 1), nullptr);
- }
- }
-
- // fill status message member
- if (pData->flags & CSSF_MASK_MESSAGE) {
- char szSetting[100];
- mir_snprintf(szSetting, "XStatus%dMsg", m_iXStatus);
- if (pData->flags & CSSF_UNICODE)
- mraGetStaticStringW(hContact, szSetting, pData->pwszMessage, (STATUS_DESC_MAX + 1), nullptr);
- else
- mraGetStaticStringA(hContact, szSetting, pData->pszMessage, (STATUS_DESC_MAX + 1), nullptr);
- }
-
- if ((pData->flags & CSSF_DISABLE_UI) && pData->wParam)
- *pData->wParam = m_bHideXStatusUI;
-
- if ((pData->flags & CSSF_STATUSES_COUNT) && pData->wParam)
- *pData->wParam = MRA_XSTATUS_COUNT - 1;
-
- //**deb можно оптимизировать, данный параметр возможно уже был вычислен при получении самих текстов
- if (pData->flags & CSSF_STR_SIZES) {
- if (pData->wParam) mraGetStaticStringW(hContact, DBSETTING_XSTATUSNAME, nullptr, 0, (size_t*)pData->wParam);
- if (pData->lParam) mraGetStaticStringW(hContact, DBSETTING_XSTATUSMSG, nullptr, 0, (size_t*)pData->lParam);
- }
- return 0;
-}
-
-INT_PTR CMraProto::MraGetXStatusIcon(WPARAM wParam, LPARAM lParam)
-{
- if (wParam == 0)
- wParam = m_iXStatus;
- if ( !IsXStatusValid(wParam))
- return 0;
-
- return (INT_PTR)IconLibGetIconEx(hXStatusAdvancedStatusIcons[wParam], lParam);
-}
-
-DWORD CMraProto::MraSendNewStatus(DWORD dwStatusMir, DWORD dwXStatusMir, const CMStringW &pwszStatusTitle, const CMStringW &pwszStatusDesc)
-{
- if (!m_bLoggedIn)
- return 0;
-
- CMStringW wszStatusTitle, wszStatusDesc;
- DWORD dwXStatus, dwStatus = GetMraStatusFromMiradaStatus(dwStatusMir, dwXStatusMir, &dwXStatus);
- if (IsXStatusValid(dwXStatusMir)) {
- char szValueName[MAX_PATH];
- if (pwszStatusTitle.IsEmpty()) {
- mir_snprintf(szValueName, "XStatus%ldName", dwXStatusMir);
- // custom xstatus name
- if (!mraGetStringW(NULL, szValueName, wszStatusTitle))
- wszStatusTitle = TranslateW(lpcszXStatusNameDef[dwXStatusMir]);
- }
- else wszStatusTitle = pwszStatusTitle;
-
- if (pwszStatusDesc.IsEmpty()) {
- mir_snprintf(szValueName, "XStatus%ldMsg", dwXStatusMir);
- // custom xstatus description
- mraGetStringW(NULL, szValueName, wszStatusDesc);
- }
- else wszStatusDesc = pwszStatusDesc;
- }
- else if (pwszStatusTitle.IsEmpty())
- wszStatusTitle = Clist_GetStatusModeDescription(dwStatusMir, 0);
-
- MraChangeStatus(dwStatus, lpcszStatusUri[dwXStatus], wszStatusTitle, wszStatusDesc, ((getByte("RTFReceiveEnable", MRA_DEFAULT_RTF_RECEIVE_ENABLE) ? FEATURE_FLAG_RTF_MESSAGE : 0) | MRA_FEATURE_FLAGS));
- return 0;
-}
-
-INT_PTR CMraProto::MraSendSMS(WPARAM wParam, LPARAM lParam)
-{
- if (!m_bLoggedIn || !wParam || !lParam)
- return 0;
-
- ptrW lpwszMessageXMLEncoded(mir_utf8decodeW((LPSTR)lParam));
- if (lpwszMessageXMLEncoded) {
- CMStringW decoded = DecodeXML(CMStringW(lpwszMessageXMLEncoded));
- if (decoded.GetLength())
- return (MraSMSW(NULL, CMStringA((LPSTR)wParam), decoded));
- }
-
- return 0;
-}
-
-INT_PTR CMraProto::MraSendNudge(WPARAM hContact, LPARAM)
-{
- if (m_bLoggedIn && hContact) {
- LPWSTR lpwszAlarmMessage = TranslateW(MRA_ALARM_MESSAGE);
-
- CMStringA szEmail;
- if (mraGetStringA(hContact, "e-mail", szEmail))
- if (MraMessage(FALSE, hContact, 0, (MESSAGE_FLAG_RTF | MESSAGE_FLAG_ALARM), szEmail, lpwszAlarmMessage, nullptr, 0))
- return 0;
- }
- return 1;
-}
-
-INT_PTR CMraProto::GetUnreadEmailCount(WPARAM, LPARAM)
-{
- if (!m_bLoggedIn)
- return 0;
- return m_dwEmailMessagesUnread;
-}
-
-/////////////////////////////////////////////////////////////////////////////////////////
-// Avatars
-
-INT_PTR CMraProto::MraGetAvatarCaps(WPARAM wParam, LPARAM)
-{
-
- switch (wParam) {
- case AF_MAXSIZE:
- return -1;
- case AF_PROPORTION:
- return PIP_NONE;
- case AF_FORMATSUPPORTED:
- return 0; // no formats to set
- case AF_ENABLED:
- return 1; // always on
- case AF_DONTNEEDDELAYS:
- return 0; // need delay
- case AF_MAXFILESIZE:
- return 0;
- case AF_DELAYAFTERFAIL:
- return 5000;
- }
-
- return 0;
-}
-
-
-INT_PTR CMraProto::MraGetAvatarInfo(WPARAM wParam, LPARAM lParam)
-{
- if (lParam) {
- PROTO_AVATAR_INFORMATION *pai = (PROTO_AVATAR_INFORMATION*)lParam;
- return (INT_PTR)MraAvatarsQueueGetAvatar(hAvatarsQueueHandle, (DWORD)wParam, pai->hContact, nullptr, (DWORD*)&pai->format, pai->filename);
- }
- return GAIR_NOAVATAR;
-}
-
-
-INT_PTR CMraProto::MraGetMyAvatar(WPARAM wParam, LPARAM lParam)
-{
- CMStringW wszFileName;
- if (MraAvatarsGetFileName(hAvatarsQueueHandle, NULL, GetContactAvatarFormat(NULL, PA_FORMAT_DEFAULT), wszFileName) == NO_ERROR) {
- mir_wstrncpy((LPTSTR)wParam, wszFileName, (size_t)lParam);
- return 0;
- }
- return 1;
-}
-
-////////////////////////////////////////////////////////////////////////////////////////////////
-// processes clist group removal
-
-int CMraProto::OnGroupChanged(WPARAM hContact, LPARAM lParam)
-{
- if (hContact == NULL) {
- CLISTGROUPCHANGE *cgc = (CLISTGROUPCHANGE*)lParam;
- if (cgc->pszOldName == nullptr)
- return 0;
-
- debugLogA("removing group %S", cgc->pszOldName);
- MraGroupItem *pGrp = nullptr;
- for (auto &it : m_groups) {
- if (!mir_wstrcmp(it->m_name, cgc->pszOldName)) {
- pGrp = it;
- debugLogA("found a group at the server, idx = %d", it->m_id);
- break;
- }
- }
- if (pGrp == nullptr) // no MRA contacts in it
- return 0;
-
- DWORD dwFlags = CONTACT_FLAG_GROUP;
- CMStringW wszGroup;
- if (cgc->pszNewName != nullptr) // renaming group
- wszGroup = cgc->pszNewName;
- else { // removing group
- dwFlags |= CONTACT_FLAG_REMOVED;
- wszGroup = cgc->pszOldName;
- }
- MraModifyContact(NULL, &pGrp->m_id, &dwFlags, nullptr, nullptr, &wszGroup);
- }
- return 0;
-}
diff --git a/protocols/MRA/src/Sdk/BuffToLowerCase.h b/protocols/MRA/src/Sdk/BuffToLowerCase.h
deleted file mode 100644
index 5c1c231222..0000000000
--- a/protocols/MRA/src/Sdk/BuffToLowerCase.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright (c) 2003 Rozhuk Ivan <rozhuk.im@gmail.com>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- */
-
-
-#if !defined(AFX_BUFFTOLOWERCASE__H__INCLUDED_)
-#define AFX_BUFFTOLOWERCASE__H__INCLUDED_
-
-#pragma once
-
-
-__inline BOOL BuffToLowerCase(LPCVOID lpcOutBuff,LPCVOID lpcBuff,size_t dwLen)
-{
- BOOL bRet=TRUE;
-
-#if defined(_WIN64) || !defined(_WIN32)
- if (lpcOutBuff && lpcBuff && dwLen)
- {
- BYTE bt;
- LPBYTE lpbtIn=(LPBYTE)lpcBuff,lpbtOut=(LPBYTE)lpcOutBuff;
-
- for(size_t i=dwLen;i;i--)
- {
- bt=(*(lpbtIn++));
- if (bt>='A' && bt<='Z') bt|=32;
- (*(lpbtOut++))=bt;
- }
- }
-#else
- __asm
- {
- mov ecx,dwLen
- test ecx,ecx
- jz short end_func
-
- push ebx // сохраняем регистр
- push edi // сохраняем регистр
- push esi // сохраняем регистр
- mov esi,lpcBuff
- mov edi,lpcOutBuff
- mov bl,'A'
- mov bh,'Z'
- mov ah,32
- cld
-
- lowcaseloop:
- lodsb
- cmp al,bl
- jl short savebyte
- cmp al,bh
- jg short savebyte
- or al,ah
-
- savebyte:
- stosb
-
- dec ecx
- jnz short lowcaseloop
-
- pop esi // восстанавливаем содержимое регистра
- pop edi // восстанавливаем содержимое регистра
- pop ebx // восстанавливаем содержимое регистра
- end_func:
- }
-#endif
-return(bRet);
-}
-
-
-
-
-#endif // !defined(AFX_BUFFTOLOWERCASE__H__INCLUDED_) \ No newline at end of file
diff --git a/protocols/MRA/src/Sdk/FIFOMT.h b/protocols/MRA/src/Sdk/FIFOMT.h
deleted file mode 100644
index 0cff1914d5..0000000000
--- a/protocols/MRA/src/Sdk/FIFOMT.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (c) 2003 Rozhuk Ivan <rozhuk.im@gmail.com>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- */
-
-
-
-#if !defined(AFX_FIFO_MT__H__INCLUDED_)
-#define AFX_FIFO_MT__H__INCLUDED_
-
-#pragma once
-
-#include "Sdk/ListMT.h"
-#include "Sdk/InterlockedFunctions.h"
-
-typedef LIST_MT FIFO_MT, *PFIFO_MT, *LPFIFO_MT;
-typedef PCLIST_MT PCFIFO_MT, LPCFIFO_MT;
-
-typedef LIST_MT_ITEM FIFO_MT_ITEM, *PFIFO_MT_ITEM, *LPFIFO_MT_ITEM;
-typedef PCLIST_MT_ITEM PCFIFO_MT_ITEM, LPCFIFO_MT_ITEM;
-
-typedef LIST_MT_ITERATOR FIFO_MT_ITERATOR, *PFIFO_MT_ITERATOR, *LPFIFO_MT_ITERATOR;
-typedef PCLIST_MT_ITERATOR PCFIFO_MT_ITERATOR, LPCFIFO_MT_ITERATOR;
-
-
-__inline size_t FifoMTItemPush(PCFIFO_MT pcpmtFifoMT,PCFIFO_MT_ITEM pcffmtiFifoItem,LPVOID lpData)
-{
- mir_cslock l(pcpmtFifoMT->cs);
- return ListMTItemAdd(pcpmtFifoMT,pcffmtiFifoItem,lpData);
-}
-
-
-__inline DWORD FifoMTItemPop(PCFIFO_MT pcpmtFifoMT,PFIFO_MT_ITEM *ppffmtiFifoItem,LPVOID *plpData)
-{
- DWORD dwRetErrorCode;
- PLIST_MT_ITEM plmtiItem;
-
- mir_cslock l(pcpmtFifoMT->cs);
- if ((dwRetErrorCode=ListMTItemGetFirst(pcpmtFifoMT,&plmtiItem,plpData))==NO_ERROR)
- {
- if (ppffmtiFifoItem) (*ppffmtiFifoItem)=plmtiItem;
- return ListMTItemDelete(pcpmtFifoMT,plmtiItem);
- }
-
- return dwRetErrorCode;
-}
-
-#define FifoMTGetCount(pcpmtFifoMT) ListMTGetCount(pcpmtFifoMT)
-
-
-#endif // !defined(AFX_FIFO_MT__H__INCLUDED_)
diff --git a/protocols/MRA/src/Sdk/InterlockedFunctions.h b/protocols/MRA/src/Sdk/InterlockedFunctions.h
deleted file mode 100644
index 49b7332fd8..0000000000
--- a/protocols/MRA/src/Sdk/InterlockedFunctions.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (c) 2003 Rozhuk Ivan <rozhuk.im@gmail.com>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- */
-
-
-
-#if !defined(AFX_INTERLOCKED_FUNCTIONS__H__INCLUDED_)
-#define AFX_INTERLOCKED_FUNCTIONS__H__INCLUDED_
-
-#pragma once
-
-#ifndef InterlockedIncrementPointer
-#if defined(_WIN64)
-#define InterlockedIncrementPointer(lpAddend) (LPVOID)InterlockedIncrement64((LONGLONG volatile*)lpAddend)
-#else
-#define InterlockedIncrementPointer(lpAddend) (LPVOID)InterlockedIncrement((LONG volatile*)lpAddend)
-#endif
-#endif //InterlockedIncrementPointer
-
-
-#ifndef InterlockedDecrementPointer
-#if defined(_WIN64)
-#define InterlockedDecrementPointer(lpAddend) (LPVOID)InterlockedDecrement64((LONGLONG volatile*)lpAddend)
-#else
-#define InterlockedDecrementPointer(lpAddend) (LPVOID)InterlockedDecrement((LONG volatile*)lpAddend)
-#endif
-#endif //InterlockedDecrementPointer
-
-
-#endif // !defined(AFX_INTERLOCKED_FUNCTIONS__H__INCLUDED_)
diff --git a/protocols/MRA/src/Sdk/InternetTime.h b/protocols/MRA/src/Sdk/InternetTime.h
deleted file mode 100644
index 865d02a3e5..0000000000
--- a/protocols/MRA/src/Sdk/InternetTime.h
+++ /dev/null
@@ -1,290 +0,0 @@
-/*
- * Copyright (c) 2003 Rozhuk Ivan <rozhuk.im@gmail.com>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- */
-
-
-
-#if !defined(AFX_INTERNET_TIME_H__F58D13FF_F6F2_476C_B8F0_7B9E9357CF48__INCLUDED_)
-#define AFX_INTERNET_TIME_H__F58D13FF_F6F2_476C_B8F0_7B9E9357CF48__INCLUDED_
-
-
-#pragma once
-
-#include "Sdk/StrToNum.h"
-#include "Sdk/MemoryFind.h"
-#include "Sdk/MemoryFindByte.h"
-
-typedef struct
-{
- LONG lTimeZone;
- SYSTEMTIME stTime;
-} INTERNET_TIME;
-
-
-static LPCSTR lpcszenmMonthEnum[13]= {"---","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};
-static LPCSTR lpcszenmDayOfWeakEnum[7]= {"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
-
-#define CRLF "\r\n"
-
-__inline BOOL SkeepSPWSP(LPCSTR lpszBuff,size_t dwBuffSize,LPSTR *plpszRetBuff,size_t *pdwRetBuffSize)
-{
- BOOL bRet=TRUE;
-
- if (lpszBuff && dwBuffSize && (plpszRetBuff || pdwRetBuffSize))
- {
- while ((*lpszBuff)<33 && dwBuffSize)
- {
- dwBuffSize--;
- lpszBuff++;
- }
-
- if (plpszRetBuff) (*plpszRetBuff)=(LPSTR)lpszBuff;
- if (pdwRetBuffSize) (*pdwRetBuffSize)=dwBuffSize;
- }else{
- bRet=FALSE;
- }
-return(bRet);
-}
-
-
-__inline BOOL WSP2SP(LPCSTR lpszBuff,size_t dwBuffSize,LPSTR lpszRetBuff,size_t *pdwRetBuffSize)
-{// WSP->SP
- BOOL bRet=TRUE;
-
- if (lpszBuff && dwBuffSize && lpszRetBuff)
- {
- LPSTR lpszCurReadPos,pCRLF,lpszCurWritePos;
- size_t dwToCopy,dwRetBuffSize;
-
- pCRLF=(LPSTR)lpszBuff;
- lpszCurReadPos=(LPSTR)lpszBuff;
- lpszCurWritePos=lpszRetBuff;
- dwRetBuffSize=0;
-
- while(pCRLF)
- {
- pCRLF=(LPSTR)MemoryFind((pCRLF-lpszBuff),lpszBuff,(dwBuffSize-1),CRLF,2);
- if (pCRLF)
- {
- pCRLF+=2;
- if ((*pCRLF)==9 || (*pCRLF)==32)// LWS: <US-ASCII HT, horizontal-tab (9)> || <US-ASCII SP, space (32)>
- {
- dwToCopy=((pCRLF-2)-lpszCurReadPos);
- pCRLF++;
-
- memmove((LPVOID)lpszCurWritePos,(CONST VOID*)lpszCurReadPos,dwToCopy);
- dwRetBuffSize+=(dwToCopy+1);
- lpszCurWritePos+=dwToCopy;
- lpszCurWritePos[0]=32;
- lpszCurWritePos++;
- lpszCurReadPos=pCRLF;
- }
- }else{
- dwToCopy=((lpszBuff+dwBuffSize)-lpszCurReadPos);
- dwRetBuffSize+=dwToCopy;
- memmove((LPVOID)lpszCurWritePos,(CONST VOID*)lpszCurReadPos,dwToCopy);
- }
- }
-
- if (pdwRetBuffSize) (*pdwRetBuffSize)=dwRetBuffSize;
- }else{
- bRet=FALSE;
- }
-return(bRet);
-}
-
-__inline void InternetTimeGetCurrentTime(INTERNET_TIME *pitTime)
-{
- TIME_ZONE_INFORMATION tzi={0};
- GetTimeZoneInformation(&tzi);
- pitTime->lTimeZone=tzi.Bias;
- GetSystemTime(&pitTime->stTime);
-}
-
-// Переводит время из MAILTIME в строковое
-__inline CMStringA InternetTimeGetString(INTERNET_TIME *pitTime)
-{
- char lpszBuff[100];
- LPSTR lpszCurPos = lpszBuff;
- size_t dwTimeLen = 0, dwtm;
-
- // day of weak// date of mounth// mounth name// year// hours // minutes// seconds
- dwtm = wsprintfA(lpszCurPos, "%s, %02lu %s %04lu %02lu:%02lu:%02lu ",
- lpcszenmDayOfWeakEnum[pitTime->stTime.wDayOfWeek],
- pitTime->stTime.wDay,
- lpcszenmMonthEnum[pitTime->stTime.wMonth],
- pitTime->stTime.wYear,
- pitTime->stTime.wHour,
- pitTime->stTime.wMinute,
- pitTime->stTime.wSecond);
- lpszCurPos += dwtm;
- dwTimeLen += dwtm;
-
- // time zone
- if (pitTime->lTimeZone) {
- if (pitTime->lTimeZone < 0) { // нужно добавить плюсик, минус добавляется автоматом
- (*((BYTE*)lpszCurPos)) = '+';
- lpszCurPos ++;
- dwTimeLen ++;
- }
-
- dwtm = wsprintfA(lpszCurPos, "%04ld", -(((pitTime->lTimeZone / 60) * 100) + pitTime->lTimeZone % 60));
- lpszCurPos += dwtm;
- dwTimeLen += dwtm;
- } else {
- dwtm = wsprintfA(lpszCurPos, "GMT");
- lpszCurPos += dwtm;
- dwTimeLen += dwtm;
- }
-
- return lpszBuff;
-}
-
-// Переводит время из строкового в INTERNET_TIME
-__inline DWORD InternetTimeGetTime(const CMStringA &lpszTime, INTERNET_TIME &pitTime)
-{
- if (lpszTime.IsEmpty())
- return ERROR_INVALID_HANDLE;
-
- // = Thu, 21 May 1998 05:33:29 -0700 =
- char sztmBuff[4096];
- LPSTR lpszCurPos=sztmBuff,lpszTemp;
- size_t dwCurSize=4096,dwTemp;
-
- memset(&pitTime, 0, sizeof(INTERNET_TIME));
- WSP2SP(lpszTime, lpszTime.GetLength(), lpszCurPos, &dwCurSize);
-
- if (dwCurSize > 3) { // день недели
- if (lpszCurPos[3] == ',') {
- for (unsigned short i=0; i < 7; i++) {
- if ( !_memicmp(lpcszenmDayOfWeakEnum[i], lpszCurPos, 3)) {
- pitTime.stTime.wDayOfWeek = i;
- break;
- }
- }
-
- lpszCurPos+=4;
- dwCurSize-=4;
- }
-
- if (dwCurSize>2) { // день месяца
- SkeepSPWSP(lpszCurPos,dwCurSize,&lpszCurPos,&dwCurSize);
- if ((lpszTemp = (LPSTR)MemoryFindByte(0, lpszCurPos, dwCurSize,' '))) {
- dwTemp=(lpszTemp-lpszCurPos);
- pitTime.stTime.wDay=(unsigned short)StrToUNum32(lpszCurPos,dwTemp);
-
- lpszCurPos=(lpszTemp+1);
- dwCurSize-=(dwTemp+1);
-
- if (dwCurSize > 3) { // месяц
- SkeepSPWSP(lpszCurPos,dwCurSize,&lpszCurPos,&dwCurSize);
-
- for (unsigned short i=1; i < 13; i++)
- if ( !_memicmp(lpcszenmMonthEnum[i], lpszCurPos, 3)) {
- pitTime.stTime.wMonth = i;
- break;
- }
-
- lpszCurPos += 3;
- dwCurSize -= 3;
-
- if (dwCurSize > 3) { // год
- SkeepSPWSP(lpszCurPos,dwCurSize,&lpszCurPos,&dwCurSize);
- if ((lpszTemp = (LPSTR)MemoryFindByte(0,lpszCurPos,dwCurSize,' '))) {
- dwTemp=(lpszTemp-lpszCurPos);
- pitTime.stTime.wYear=(unsigned short)StrToUNum32(lpszCurPos,dwTemp);
-
- lpszCurPos=(lpszTemp+1);
- dwCurSize-=(dwTemp+1);
-
- if (dwCurSize > 2) { // часы
- SkeepSPWSP(lpszCurPos,dwCurSize,&lpszCurPos,&dwCurSize);
- if ((lpszTemp = (LPSTR)MemoryFindByte(0,lpszCurPos,dwCurSize,':'))) {
- dwTemp=(lpszTemp-lpszCurPos);
- pitTime.stTime.wHour=(unsigned short)StrToUNum32(lpszCurPos,dwTemp);
-
- lpszCurPos=(lpszTemp+1);
- dwCurSize-=(dwTemp+1);
-
- if (dwCurSize > 2) { // минуты
- SkeepSPWSP(lpszCurPos,dwCurSize,&lpszCurPos,&dwCurSize);
- if ((lpszTemp=(LPSTR)MemoryFindByte(0,lpszCurPos,dwCurSize,':')))
- {
- dwTemp=(lpszTemp-lpszCurPos);
- pitTime.stTime.wMinute=(unsigned short)StrToUNum32(lpszCurPos,dwTemp);
-
- lpszCurPos = (lpszTemp+1);
- dwCurSize -= (dwTemp+1);
-
- if (dwCurSize > 2) { // секунды, они есть
- if ((lpszTemp = (LPSTR)MemoryFindByte(0,lpszCurPos,dwCurSize,' '))) {
- dwTemp=(lpszTemp-lpszCurPos);
- pitTime.stTime.wSecond=(unsigned short)StrToUNum32(lpszCurPos,dwTemp);
-
- lpszCurPos=(lpszTemp+1);
- dwCurSize-=(dwTemp+1);
- }
- }
- else {// зоны нет
- if (dwCurSize) {
- pitTime.stTime.wSecond=(unsigned short)StrToUNum32(lpszCurPos,dwCurSize);
- lpszCurPos+=dwCurSize;
- dwCurSize=0;
- }
- }
- }
- else {
- if ((lpszTemp = (LPSTR)MemoryFindByte(0,lpszCurPos,dwCurSize,' '))) {
- dwTemp = (lpszTemp-lpszCurPos);
- pitTime.stTime.wMinute = (unsigned short)StrToUNum32(lpszCurPos,dwTemp);
-
- lpszCurPos = (lpszTemp+1);
- dwCurSize -= (dwTemp+1);
- }
- }
-
- if (dwCurSize) { // часовой пояс
- SkeepSPWSP(lpszCurPos, dwCurSize, &lpszCurPos, &dwCurSize);
- pitTime.lTimeZone = (LONG)StrToNum(lpszCurPos, dwCurSize);
- if (pitTime.lTimeZone > 1300 || pitTime.lTimeZone < -1200)
- pitTime.lTimeZone = 2400;
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
-
- return NO_ERROR;
-}
-
-
-
-#endif // !defined(AFX_INTERNET_TIME_H__F58D13FF_F6F2_476C_B8F0_7B9E9357CF48__INCLUDED_)
diff --git a/protocols/MRA/src/Sdk/ListMT.h b/protocols/MRA/src/Sdk/ListMT.h
deleted file mode 100644
index ed9b8cfec9..0000000000
--- a/protocols/MRA/src/Sdk/ListMT.h
+++ /dev/null
@@ -1,200 +0,0 @@
-/*
- * Copyright (c) 2003 Rozhuk Ivan <rozhuk.im@gmail.com>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- */
-
-
-
-#if !defined(AFX_LIST_MT__H__INCLUDED_)
-#define AFX_LIST_MT__H__INCLUDED_
-
-#pragma once
-
-#include "Sdk/InterlockedFunctions.h"
-
-#pragma warning(push)
-#pragma warning(disable:4312) // warning C4312: 'type cast' : conversion from 'LONG' to 'PVOID' of greater size
-
-
-// структура для работы со списком, элемент списка
-typedef struct _LIST_MT_ITEM
-{
-#ifdef __cplusplus
- _LIST_MT_ITEM *plmtiPrev; // *предыдущий элемент в списке
- _LIST_MT_ITEM *plmtiNext; // *следующий элемент в списке
-#else
- LPVOID *plmtiPrev; // *предыдущий элемент в списке
- LPVOID *plmtiNext; // *следующий элемент в списке
-#endif
- LPVOID lpListMT; // указатель на заголовок списка, см структуру ниже
- LPVOID lpData; // указатель на данные, связанные с элементом списка
-}LIST_MT_ITEM, *PLIST_MT_ITEM, *LPLIST_MT_ITEM;
-typedef CONST PLIST_MT_ITEM PCLIST_MT_ITEM, LPCLIST_MT_ITEM;
-
-
-// структура для работы со списком, заголовок списка
-typedef struct _LIST_MT : public MZeroedObject
-{
- size_t nCount; // *количество элементов в списке
- PLIST_MT_ITEM plmtiFirst; // *указывает на первый элемент в списке
- PLIST_MT_ITEM plmtiLast; // *указывает на последний элемент в списке
- mir_cs cs; // *section for exclysive access to List
-}LIST_MT, *PLIST_MT, *LPLIST_MT;
-typedef CONST PLIST_MT PCLIST_MT, LPCLIST_MT;
-
-
-// структура для работы с итератором
-typedef struct _LIST_MT_ITERATOR
-{
- PLIST_MT_ITEM plmtListMTItem;
-}LIST_MT_ITERATOR, *PLIST_MT_ITERATOR, *LPLIST_MT_ITERATOR;
-//typedef LIST_MT_ITEM LIST_MT_ITERATOR, *PLIST_MT_ITERATOR, *LPLIST_MT_ITERATOR;
-typedef CONST PLIST_MT_ITERATOR PCLIST_MT_ITERATOR, LPCLIST_MT_ITERATOR;
-
-
-__inline size_t ListMTGetCount(PCLIST_MT pclmtListMT)
-{
- return((size_t)InterlockedCompareExchangePointer((LPVOID*)&pclmtListMT->nCount, nullptr, nullptr));
-}
-
-
-__inline size_t ListMTItemAdd(PCLIST_MT pclmtListMT,PCLIST_MT_ITEM pclmtListMTItem,LPVOID lpData)
-{
- size_t dwRet=(size_t)InterlockedIncrementPointer(&pclmtListMT->nCount);//pclmtListMT->nCount++;
- pclmtListMTItem->lpData=lpData;
- pclmtListMTItem->lpListMT=pclmtListMT;
-
- if (pclmtListMT->plmtiLast)
- {// add node to end of list
- pclmtListMTItem->plmtiPrev=pclmtListMT->plmtiLast;
- pclmtListMTItem->plmtiNext= nullptr;
- pclmtListMT->plmtiLast->plmtiNext=pclmtListMTItem;
- pclmtListMT->plmtiLast=pclmtListMTItem;
- }else{// add the first node to the linked list
- pclmtListMTItem->plmtiPrev= nullptr;
- pclmtListMTItem->plmtiNext= nullptr;
- pclmtListMT->plmtiFirst=pclmtListMTItem;
- pclmtListMT->plmtiLast=pclmtListMTItem;
- }
-
-return(dwRet);
-}
-
-
-__inline DWORD ListMTItemDelete(PCLIST_MT pclmtListMT,PCLIST_MT_ITEM pclmtListMTItem)
-{
- DWORD dwRetErrorCode;
-
- if (pclmtListMTItem->lpListMT==pclmtListMT && pclmtListMT)
- {// Данный элемент принадлежит к этому списку, можно удалить.
- PLIST_MT_ITEM plmtiPrevNode=pclmtListMTItem->plmtiPrev,plmtiNextNode=pclmtListMTItem->plmtiNext;
-
- if (plmtiPrevNode || plmtiNextNode)
- {
- if (plmtiPrevNode && plmtiNextNode == nullptr)
- {// This is the start node in the list to delete
- // отключился последний подключившийся
- plmtiPrevNode->plmtiNext = nullptr;
- pclmtListMT->plmtiLast=plmtiPrevNode;
- }else{
- if (plmtiPrevNode == nullptr && plmtiNextNode)
- {// This is the end node in the list to delete
- // отключился первый подключившийся
- plmtiNextNode->plmtiPrev = nullptr;
- pclmtListMT->plmtiFirst=plmtiNextNode;
- }else{// оключился клиент не первый и не последний
- //if (plmtiPrev && plmtiNext)
- {// Neither start node nor end node in the list
- plmtiPrevNode->plmtiNext=plmtiNextNode;
- plmtiNextNode->plmtiPrev=plmtiPrevNode;
- }
- }
- }
- }else{// This is the only node in the list to delete
- pclmtListMT->plmtiFirst = nullptr;
- pclmtListMT->plmtiLast = nullptr;
- }
-
- pclmtListMTItem->lpListMT = nullptr;
- InterlockedDecrementPointer(&pclmtListMT->nCount);// pclmtListMT->nCount--;
- dwRetErrorCode=NO_ERROR;
- }else{// попытались удалить элемент не относящийся к данному списку
- dwRetErrorCode=ERROR_INVALID_HANDLE;
- }
-return(dwRetErrorCode);
-}
-
-__inline DWORD ListMTItemGetFirst(PCLIST_MT pclmtListMT,PLIST_MT_ITEM *pplmtListMTItem,LPVOID *plpData)
-{// если нужно гарантировать эксклюзивный доступ, то есть ListMTLock и ListMTUnLock
- DWORD dwRetErrorCode;
-
- if (pclmtListMT->plmtiFirst)
- {
- if (pplmtListMTItem) (*pplmtListMTItem)=pclmtListMT->plmtiFirst;
- if (plpData) (*plpData)=pclmtListMT->plmtiFirst->lpData;
- dwRetErrorCode=NO_ERROR;
- }else{
- dwRetErrorCode=ERROR_NO_MORE_ITEMS;
- }
-return(dwRetErrorCode);
-}
-
-__inline BOOL ListMTIteratorMoveFirst(PCLIST_MT pclmtListMT,PCLIST_MT_ITERATOR pclmtiIterator)
-{// если нужно гарантировать эксклюзивный доступ, то есть ListMTLock и ListMTUnLock
- return((pclmtiIterator->plmtListMTItem=pclmtListMT->plmtiFirst)? TRUE:FALSE);
-}
-
-
-__inline BOOL ListMTIteratorMoveNext(PCLIST_MT_ITERATOR pclmtiIterator)
-{// если нужно гарантировать эксклюзивный доступ, то есть ListMTLock и ListMTUnLock
- BOOL bRet=FALSE;
-
- if (pclmtiIterator->plmtListMTItem)
- {
- if (pclmtiIterator->plmtListMTItem=pclmtiIterator->plmtListMTItem->plmtiNext) bRet=TRUE;
- }
-return(bRet);
-}
-
-
-__inline DWORD ListMTIteratorGet(PCLIST_MT_ITERATOR pclmtiIterator,PLIST_MT_ITEM *pplmtListMTItem,LPVOID *plpData)
-{// если нужно гарантировать эксклюзивный доступ, то есть ListMTLock и ListMTUnLock
- DWORD dwRetErrorCode;
-
- if (pclmtiIterator->plmtListMTItem)
- {
- if (pplmtListMTItem) (*pplmtListMTItem)=pclmtiIterator->plmtListMTItem;
- if (plpData) (*plpData)=pclmtiIterator->plmtListMTItem->lpData;
- dwRetErrorCode=NO_ERROR;
- }else{
- dwRetErrorCode=ERROR_NO_MORE_ITEMS;
- }
-return(dwRetErrorCode);
-}
-
-#pragma warning(pop)
-#pragma warning(default:4312) // warning C4312: 'type cast' : conversion from 'LONG' to 'PVOID' of greater size
-
-#endif // !defined(AFX_LIST_MT__H__INCLUDED_)
diff --git a/protocols/MRA/src/Sdk/MemoryFind.h b/protocols/MRA/src/Sdk/MemoryFind.h
deleted file mode 100644
index f41ea64b6d..0000000000
--- a/protocols/MRA/src/Sdk/MemoryFind.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright (c) 2003 Rozhuk Ivan <rozhuk.im@gmail.com>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- */
-
-
-#if !defined(AFX_MEMORYFIND__H__INCLUDED_)
-#define AFX_MEMORYFIND__H__INCLUDED_
-
-
-#pragma once
-
-__inline void *MemoryFind(size_t dwFrom,const void *pBuff,size_t dwBuffSize,const void *pWhatFind,size_t dwWhatFindSize)
-{
- void *pRet = nullptr;
-
- if (pBuff && dwBuffSize && pWhatFind && dwWhatFindSize && (dwFrom+dwWhatFindSize)<=dwBuffSize)
- {
- if (dwWhatFindSize==1)
- {// MemoryFindByte
- pRet=(void*)memchr((const void*)(((size_t)pBuff)+dwFrom),(*((unsigned char*)pWhatFind)),(dwBuffSize-dwFrom));
- }else{
- void *pCurPos;
-
- pCurPos=(void*)(((size_t)pBuff)+dwFrom);
-
- if ((dwFrom+dwWhatFindSize)==dwBuffSize)
- {
- if (memcmp(pCurPos,pWhatFind,dwWhatFindSize)==0) pRet=pCurPos;
- }else{
- dwBuffSize-=(dwWhatFindSize-1);
-
- while(pCurPos)
- {
- pCurPos=memchr(pCurPos,(*((unsigned char*)pWhatFind)),(dwBuffSize-(((size_t)pCurPos)-((size_t)pBuff))));
- if (pCurPos)
- {
- if (memcmp(pCurPos,pWhatFind,dwWhatFindSize)==0)
- {
- pRet=pCurPos;
- break;
- }else{
- pCurPos=(void*)(((size_t)pCurPos)+1);
- }
- }
- }
- }
- }
- }
-return(pRet);
-}
-
-
-#endif // !defined(AFX_MEMORYFIND__H__INCLUDED_)
diff --git a/protocols/MRA/src/Sdk/MemoryFindByte.h b/protocols/MRA/src/Sdk/MemoryFindByte.h
deleted file mode 100644
index 146fd74b30..0000000000
--- a/protocols/MRA/src/Sdk/MemoryFindByte.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 2003 Rozhuk Ivan <rozhuk.im@gmail.com>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- */
-
-
-
-#if !defined(AFX_MEMORYFINDBYTE__H__INCLUDED_)
-#define AFX_MEMORYFINDBYTE__H__INCLUDED_
-
-#pragma once
-
-__inline void *MemoryFindByte(size_t dwFrom,const void *pBuff,size_t dwBuffSize,unsigned char chWhatFind)
-{
- void *pRet = nullptr;
-
- if (pBuff && dwBuffSize && dwFrom<dwBuffSize)
- {
- pRet=(void*)memchr((const void*)(((size_t)pBuff)+dwFrom),chWhatFind,(dwBuffSize-dwFrom));
- }
-return(pRet);
-}
-
-
-#endif // !defined(AFX_MEMORYFINDBYTE__H__INCLUDED_)
diff --git a/protocols/MRA/src/Sdk/RC4.h b/protocols/MRA/src/Sdk/RC4.h
deleted file mode 100644
index 4db7202c0a..0000000000
--- a/protocols/MRA/src/Sdk/RC4.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright (c) 2007 Rozhuk Ivan <rozhuk.im@gmail.com>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- */
-
-
-
-#if !defined(AFX_RC4__H__INCLUDED_)
-#define AFX_RC4__H__INCLUDED_
-
-#pragma once
-
-__inline void RC4(LPBYTE lpBuff,size_t dwBuffSize,LPBYTE lpKey,size_t dwKeySize)
-{// RC4
-// www.codeproject.com/cpp/crypt_routine.asp%3Fdf%3D100%26forumid%3D4418%26exp%3D0%26select%3D251879+RC4+c%2B%2B+source+DWORD&hl=ru&gl=ru&ct=clnk&cd=2
-// http://www.thecodeproject.com/cpp/crypt_routine.asp
-// http://forum.ixbt.com/topic.cgi?id=40:3020
-
- //we will consider size of sbox 256 bytes
- //(extra byte are only to prevent any mishep just in case)
- BYTE temp;
- BYTE Sbox[260]={0},Sbox2[260]={0};
- size_t i,j,t,x;
-
- i=j=t=x=0;
- temp=0;
-
- //initialize sbox i
- for(i=0;i<256;i++) Sbox[i]=(BYTE)i;
-
- j=0;
- //whether user has sent any inpur lpKey
- //initialize the sbox2 with user lpKey
- for(i=0;i<256;i++)
- {
- if (j==dwKeySize) j=0;
- Sbox2[i]=lpKey[j++];
- }
-
- j=0; //Initialize j
- //scramble sbox1 with sbox2
- for(i=0;i<256;i++)
- {
- j=(j+(unsigned long)Sbox[i]+(unsigned long)Sbox2[i]) % 256U;
- temp=Sbox[i];
- Sbox[i]=Sbox[j];
- Sbox[j]=temp;
- }
-
- i=j=0;
- for(x=0;x<dwBuffSize;x++)
- {
- //increment i
- i=(i+1U)%256U;
- //increment j
- j=(j+(unsigned long)Sbox[i])%256U;
-
- //Scramble SBox #1 further so encryption routine will
- //will repeat itself at great interval
- temp=Sbox[i];
- Sbox[i]=Sbox[j];
- Sbox[j]=temp;
-
- //Get ready to create pseudo random byte for encryption lpKey
- t=((unsigned long)Sbox[i]+(unsigned long)Sbox[j])%256U;
-
- //get the random byte
- //xor with the data and done
- lpBuff[x]=(lpBuff[x]^Sbox[t]);
- }
-}
-
-
-
-#endif // !defined(AFX_RC4__H__INCLUDED_)
-
-
diff --git a/protocols/MRA/src/Sdk/SHA1.h b/protocols/MRA/src/Sdk/SHA1.h
deleted file mode 100644
index ca78245454..0000000000
--- a/protocols/MRA/src/Sdk/SHA1.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright (c) 2003 Rozhuk Ivan <rozhuk.im@gmail.com>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- */
-
-#if !defined(AFX__SHA1_H__INCLUDED_)
-#define AFX__SHA1_H__INCLUDED_
-
-#pragma once
-
-////////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////////
-//////////////////////////////RFC 2104//////////////////////////////
-////////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////////
-
-__inline DWORD BSWAP(DWORD dwIn)
-{
- return((((dwIn<<8) & 0x00ff0000) | (dwIn<<24) | ((dwIn>>8) & 0x0000ff00) | (dwIn>>24)));
-}
-
-__inline void CopyMemoryReverseDWORD(LPCVOID lpcDestination,LPCVOID lpcSource,size_t dwSize)
-{
-#ifdef _WIN64
- BYTE *pDestination=(BYTE*)lpcDestination,*pSource=(BYTE*)lpcSource;
-
- //for(size_t i=0;i<dwSize;i++) pDestination[i]=pSource[(i&~0x00000003)+(3-(i&0x00000003))];
- for(size_t i=0;i<dwSize;i+=4) (*((DWORD*)(pDestination+i)))=BSWAP((*((DWORD*)(pSource+i))));
-
-#else
- __asm{
- push edi // сохраняем регистр
- push esi // сохраняем регистр
-
- mov ecx,dwSize // ecx = длинна входного буффера
- mov edi,lpcDestination // edi = адрес выходного буффера
- mov esi,lpcSource // esi = указатель на входной буффер
- cld
-
- read_loop:
- lodsd // читаем 4 байта
- bswap eax
- stosd
- sub ecx,4
- jg short read_loop // если длинна 3 и более байт, то продолжаем дальше
-
- pop esi // восстанавливаем содержимое регистра
- pop edi // восстанавливаем содержимое регистра
- }
-#endif
-}
-
-////////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////////
-
-__inline void SHA1GetDigest(LPVOID lpBuff,size_t dwBuffSize,BYTE *digest)
-{
- mir_sha1_ctx sha;
-
- mir_sha1_init(&sha);
- mir_sha1_append(&sha,(BYTE*)lpBuff,(int)dwBuffSize);
- mir_sha1_finish(&sha,digest);
-}
-
-#endif //AFX__SHA1_H__INCLUDED_
diff --git a/protocols/MRA/src/Sdk/StrHexToNum.h b/protocols/MRA/src/Sdk/StrHexToNum.h
deleted file mode 100644
index 3f36d0d4c3..0000000000
--- a/protocols/MRA/src/Sdk/StrHexToNum.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (c) 2005 Rozhuk Ivan <rozhuk.im@gmail.com>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- */
-
-
-
-#if !defined(AFX_STRHEXTONUM__H__INCLUDED_)
-#define AFX_STRHEXTONUM__H__INCLUDED_
-
-#pragma once
-
-__inline DWORD StrHexToUNum32(LPCSTR lpcszString,size_t dwStringLen)
-{
- DWORD dwNum=0;
- BYTE bCurentFigure;
-
-
- while(dwStringLen)
- {
- bCurentFigure=(*lpcszString);
- if ('0'<=bCurentFigure && bCurentFigure<='9')
- {
- bCurentFigure-='0';
- }else
- if ('a'<=bCurentFigure && bCurentFigure<='f')
- {
- bCurentFigure-=('a'+10);
- }else
- if ('A'<=bCurentFigure && bCurentFigure<='F')
- {
- bCurentFigure-=('A'+10);
- }else{
- bCurentFigure=255;
- }
-
- if (bCurentFigure!=255)
- {
- dwNum*=16;// сдвигаем предыдущее число на один разряд чтоб добавить в младший разряд новую цифру
- dwNum+=bCurentFigure;// добавляем цифру в младший разряд
- }
- lpcszString++;// перемещаем указатель на следующую позицию
- dwStringLen--;// уменьшаем длинну
- }
-
-return(dwNum);
-}
-
-
-#endif // !defined(AFX_STRHEXTONUM__H__INCLUDED_) \ No newline at end of file
diff --git a/protocols/MRA/src/Sdk/StrToNum.h b/protocols/MRA/src/Sdk/StrToNum.h
deleted file mode 100644
index ef3a95050e..0000000000
--- a/protocols/MRA/src/Sdk/StrToNum.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright (c) 2005 Rozhuk Ivan <rozhuk.im@gmail.com>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- */
-
-
-
-#if !defined(AFX_STRTONUM__H__INCLUDED_)
-#define AFX_STRTONUM__H__INCLUDED_
-
-#pragma once
-
-__inline DWORD StrToUNum32(LPCSTR lpcszString,size_t dwStringLen)
-{
- DWORD dwNum=0;
- BYTE bCurentFigure;
-
-
- while(dwStringLen)
- {
- if ((bCurentFigure=((*lpcszString)-48))<10)
- {
- dwNum*=10;// сдвигаем предыдущее число на один разряд чтоб добавить в младший разряд новую цифру
- dwNum+=bCurentFigure;// добавляем цифру в младший разряд
- }
- lpcszString++;// перемещаем указатель на следующую позицию
- dwStringLen--;// уменьшаем длинну
- }
-
- return(dwNum);
-}
-
-__inline SSIZE_T StrToNum(LPCSTR lpcszString,size_t dwStringLen)
-{
- SSIZE_T lNum=0,lSingn=1;
- BYTE bCurentFigure;
-
- while(dwStringLen && ((bCurentFigure=((*lpcszString)-48))>9))
- {
- if (bCurentFigure=='-') lSingn=-1;
- if (bCurentFigure=='+') lSingn=1;
-
- lpcszString++;// перемещаем указатель на следующую позицию
- dwStringLen--;// уменьшаем длинну
- }
-
- while(dwStringLen)
- {
- if ((bCurentFigure=((*lpcszString)-48))<10)
- {
- lNum*=10;// сдвигаем предыдущее число на один разряд чтоб добавить в младший разряд новую цифру
- lNum+=bCurentFigure;// добавляем цифру в младший разряд
- }
- lpcszString++;// перемещаем указатель на следующую позицию
- dwStringLen--;// уменьшаем длинну
- }
- lNum*=lSingn;
-
- return(lNum);
-}
-
-
-#endif // !defined(AFX_STRTONUM__H__INCLUDED_) \ No newline at end of file
diff --git a/protocols/MRA/src/Sdk/timefuncs.h b/protocols/MRA/src/Sdk/timefuncs.h
deleted file mode 100644
index 0bff545803..0000000000
--- a/protocols/MRA/src/Sdk/timefuncs.h
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Copyright (c) 2009 Rozhuk Ivan <rozhuk.im@gmail.com>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- */
-
-
-
-#if !defined(AFX_TIME_FUNCS__H__INCLUDED_)
-#define AFX_TIME_FUNCS__H__INCLUDED_
-
-#pragma once
-
-#include <windows.h>
-#include <time.h>
-
-
-
-#define _MAX__TIME32_T 0x7fffd27f // number of seconds from
- // 00:00:00, 01/01/1970 UTC to
- // 23:59:59, 01/18/2038 UTC
-
-// Number of 100 nanosecond units from 1/1/1601 to 1/1/1970
-#define EPOCH_BIAS 116444736000000000i64
-
-//nion to facilitate converting from FILETIME to unsigned __int64
-typedef union {
- unsigned __int64 ft_scalar;
- FILETIME ft_struct;
- } FT;
-
-
-inline __time32_t _time32(__time32_t *timeptr)
-{
- __time64_t tim;
- FT nt_time;
-
- GetSystemTimeAsFileTime(&(nt_time.ft_struct));
- tim=(__time64_t)((nt_time.ft_scalar-EPOCH_BIAS)/10000000i64);
- if (tim > (__time64_t)(_MAX__TIME32_T)) tim=(__time64_t)(-1);
- if (timeptr) *timeptr = (__time32_t)(tim);// store time if requested
-
-return(__time32_t)(tim);
-}
-
-
-inline __time32_t MakeTime32FromLocalSystemTime(CONST PSYSTEMTIME pcstSystemTime)
-{
- __time64_t tim=0;
- FT nt_time;
-
- if (SystemTimeToFileTime(pcstSystemTime,&(nt_time.ft_struct)))
- {
- if (LocalFileTimeToFileTime(&(nt_time.ft_struct),&(nt_time.ft_struct)))
- {
- tim=(__time64_t)((nt_time.ft_scalar-EPOCH_BIAS)/10000000i64);
- if (tim > (__time64_t)(_MAX__TIME32_T)) tim=(__time64_t)(-1);
- }
- }
-return(__time32_t)(tim);
-}
-
-
-inline BOOL MakeLocalSystemTimeFromTime32(__time32_t tim32,PSYSTEMTIME pstSystemTime)
-{
- BOOL bRet=FALSE;
-
- if (pstSystemTime)
- {
- __time64_t tim=(__time64_t)tim32;
- FT nt_time;
-
- //if (tim==(__time64_t)(-1)) tim=(__time64_t)(_MAX__TIME32_T);
- nt_time.ft_scalar=(__time64_t)((tim*10000000i64)+EPOCH_BIAS);
- if (FileTimeToLocalFileTime(&(nt_time.ft_struct),&(nt_time.ft_struct)))
- {
- bRet=FileTimeToSystemTime(&(nt_time.ft_struct),pstSystemTime);
- }
- }
-return(bRet);
-}
-
-
-#endif // !defined(AFX_TIME_FUNCS__H__INCLUDED_)
diff --git a/protocols/MRA/src/proto.h b/protocols/MRA/src/proto.h
deleted file mode 100644
index b46d21a47f..0000000000
--- a/protocols/MRA/src/proto.h
+++ /dev/null
@@ -1,611 +0,0 @@
-//***************************************************************************
-// $Id: proto.h, v 1.141 2005/10/24 15:32:33 shingrus Exp $
-//***************************************************************************
-
-#ifndef MRIM_PROTO_H
-#define MRIM_PROTO_H
-
-#include <sys/types.h>
-
-#include "version.h"
-
-typedef struct mrim_packet_header_t
-{
- u_long magic; // Magic
- u_long proto; // Версия протокола
- u_long seq; // Sequence
- u_long msg; // Тип пакета
- u_long dlen; // Длина данных
- u_char reserved[24]; // Зарезервировано
-}
-mrim_packet_header_t;
-
-#define CS_MAGIC 0xDEADBEEF // Клиентский Magic ( C <-> S )
-
-
-// UNICODE = (UTF-16LE) ( >= 1.17)
-
-/***************************************************************************
-
- ПРОТОКОЛ СВЯЗИ КЛИЕНТ-СЕРВЕР
-
- ***************************************************************************/
-
-#define MRIM_CS_HELLO 0x1001 // C->S
-// empty
-
-#define MRIM_CS_HELLO_ACK 0x1002 // S->C
-// mrim_connection_params_t
-
-
-#define MRIM_CS_LOGIN_ACK 0x1004 // S->C
-// empty
-
-#define MRIM_CS_LOGIN_REJ 0x1005 // S->C
-// LPS reason ???
-
-#define MRIM_CS_PING 0x1006 // C->S
-// empty
-
-#define MRIM_CS_MESSAGE 0x1008 // C->S
-// UL flags
- #define MESSAGE_FLAG_OFFLINE 0x00000001
- #define MESSAGE_FLAG_NORECV 0x00000004
- #define MESSAGE_FLAG_AUTHORIZE 0x00000008 // X-MRIM-Flags: 00000008
- #define MESSAGE_FLAG_SYSTEM 0x00000040
- #define MESSAGE_FLAG_RTF 0x00000080
- #define MESSAGE_FLAG_CONTACT 0x00000200
- #define MESSAGE_FLAG_NOTIFY 0x00000400
- #define MESSAGE_FLAG_SMS 0x00000800
- #define MESSAGE_FLAG_MULTICAST 0x00001000
- #define MESSAGE_SMS_DELIVERY_REPORT 0x00002000
- #define MESSAGE_FLAG_ALARM 0x00004000
- #define MESSAGE_FLAG_FLASH 0x00008000
- #define MESSAGE_FLAG_SPAMF_SPAM 0x00020000 // report spam back to the server
- #define MESSAGE_FLAG_MULTICHAT 0x00400000 //
- #define MULTICHAT_MESSAGE 0 // received message (s->c)
- #define MULTICHAT_GET_MEMBERS 1 // request members list from server (c->s)
- #define MULTICHAT_MEMBERS 2 // members list from server (s->c)
- #define MULTICHAT_ADD_MEMBERS 3 //
- #define MULTICHAT_ATTACHED 4 // user joined to chat (s->c)
- #define MULTICHAT_DETACHED 5 // user leave chat (s->c)
- #define MULTICHAT_DESTROYED 6 //
- #define MULTICHAT_INVITE 7 //
- #define MESSAGE_FLAG_v1p16 0x00100000 // для перекодировки юникода
- #define MESSAGE_FLAG_CP1251 0x00200000
-// LPS to e-mail ANSI
-// LPS message ANSI/UNICODE (see flags)
-// LPS rtf-formatted message ( >= 1.1) ???
-// LPS multichat_data ( >= 1.20) ???
-
-#define MAX_MULTICAST_RECIPIENTS 50
- #define MESSAGE_USERFLAGS_MASK 0x000036A8 // Flags that user is allowed to set himself
-
-
-#define MRIM_CS_MESSAGE_ACK 0x1009 // S->C
-// UL msg_id
-// UL flags
-// LPS from e-mail ANSI
-// LPS message UNICODE
-// LPS rtf-formatted message ( >= 1.1) - MESSAGE_FLAG_RTF
-// BASE64( - MESSAGE_FLAG_AUTHORIZE
-// UL parts count = 2
-// LPS auth_sender_nick UNICODE
-// LPS auth_request_text UNICODE
-//[ LPS multichat_data ] ( >= 1.20) - MESSAGE_FLAG_MULTICHAT
-// UL type
-// LPS multichat_name
-// switch (type) {
-// MULTICHAT_MESSAGE {
-// LPS sender ANSI
-// }
-// MULTICHAT_MEMBERS {
-// CLPS members
-// [ LPS owner ]
-// }
-// MULTICHAT_ADD_MEMBERS {
-// LPS sender ANSI
-// CLPS members
-// }
-// MULTICHAT_ATTACHED {
-// LPS member ANSI
-// }
-// MULTICHAT_DETACHED {
-// LPS member ANSI
-// }
-// MULTICHAT_INVITE {
-// LPS sender ANSI
-// }
-// }
-// )
-
-
-
-
-
-#define MRIM_CS_MESSAGE_RECV 0x1011 // C->S
-// LPS from e-mail ANSI
-// UL msg_id
-
-#define MRIM_CS_MESSAGE_STATUS 0x1012 // S->C
-// UL status
- #define MESSAGE_DELIVERED 0x0000 // Message delivered directly to user
- #define MESSAGE_REJECTED_NOUSER 0x8001 // Message rejected - no such user
- #define MESSAGE_REJECTED_INTERR 0x8003 // Internal server error
- #define MESSAGE_REJECTED_LIMIT_EXCEEDED 0x8004 // Offline messages limit exceeded
- #define MESSAGE_REJECTED_TOO_LARGE 0x8005 // Message is too large
- #define MESSAGE_REJECTED_DENY_OFFMSG 0x8006 // User does not accept offline messages
- #define MESSAGE_REJECTED_DENY_OFFFLSH 0x8007 // User does not accept offline flash animation
-
-#define MRIM_CS_USER_STATUS 0x100F // S->C
-// UL status
- #define STATUS_OFFLINE 0x00000000
- #define STATUS_ONLINE 0x00000001
- #define STATUS_AWAY 0x00000002
- #define STATUS_UNDETERMINATED 0x00000003
- #define STATUS_USER_DEFINED 0x00000004
- #define STATUS_FLAG_INVISIBLE 0x80000000
-// LPS spec_status_uri ANSI ( >= 1.14)
- #define SPEC_STATUS_URI_MAX 256
-// LPS status_title UNICODE ( >= 1.14)
- #define STATUS_TITLE_MAX 16
-// LPS status_desc UNICODE ( >= 1.14)
- #define STATUS_DESC_MAX 64
-// LPS user e-mail ANSI
-// UL com_support ( >= 1.14)
- #define FEATURE_FLAG_RTF_MESSAGE 0x00000001
- #define FEATURE_FLAG_BASE_SMILES 0x00000002
- #define FEATURE_FLAG_ADVANCED_SMILES 0x00000004
- #define FEATURE_FLAG_CONTACTS_EXCH 0x00000008
- #define FEATURE_FLAG_WAKEUP 0x00000010
- #define FEATURE_FLAG_MULTS 0x00000020
- #define FEATURE_FLAG_FILE_TRANSFER 0x00000040
- #define FEATURE_FLAG_VOICE 0x00000080
- #define FEATURE_FLAG_VIDEO 0x00000100
- #define FEATURE_FLAG_GAMES 0x00000200
- #define FEATURE_FLAG_LAST 0x00000200
- #define FEATURE_UA_FLAG_MASK ((FEATURE_FLAG_LAST << 1) - 1)
-// LPS user_agent ( >= 1.14) ANSI
- #define USER_AGENT_MAX 255
- // Format:
- // user_agent = param *(param )
- // param = pname "=" pvalue
- // pname = token
- // pvalue = token / quoted-string
- //
- // Params:
- // "client" - magent/jagent/???
- // "name" - sys-name.
- // "title" - display-name.
- // "version" - product internal numeration. Examples: "1.2", "1.3 pre".
- // "build" - product internal numeration (may be positive number or time).
- // "protocol" - MMP protocol number by format "<major>.<minor>".
-
-
-#define MRIM_CS_LOGOUT 0x1013 // S->C
-// UL reason
- #define LOGOUT_NO_RELOGIN_FLAG 0x0010 // Logout due to double login
-
-#define MRIM_CS_CONNECTION_PARAMS 0x1014 // S->C (>1.16 depricated ?)
-// mrim_connection_params_t
-
-#define MRIM_CS_USER_INFO 0x1015 // S->C
-// (LPS key, LPS value)* X ???
-// MESSAGES.TOTAL - num UNICODE
-// MESSAGES.UNREAD - num UNICODE
-// MRIM.NICKNAME - nick UNICODE
-// client.endpoint - ip:port UNICODE
-
-
-#define MRIM_CS_ADD_CONTACT 0x1019 // C->S
-// UL flags (group(2) or usual(0)
- #define CONTACT_FLAG_REMOVED 0x00000001
- #define CONTACT_FLAG_GROUP 0x00000002
- #define CONTACT_FLAG_INVISIBLE 0x00000004
- #define CONTACT_FLAG_VISIBLE 0x00000008
- #define CONTACT_FLAG_IGNORE 0x00000010
- #define CONTACT_FLAG_SHADOW 0x00000020
- #define CONTACT_FLAG_AUTHORIZED 0x00000040 // ( >= 1.15)
- #define CONTACT_FLAG_MULTICHAT 0x00000080 // ( >= 1.20) = 128
- #define CONTACT_FLAG_UNICODE_NAME 0x00000200 // = 512
- #define CONTACT_FLAG_PHONE 0x00100000
-
-// UL group id (unused if contact is group)
-// LPS contact e-mail ANSI
-// LPS name UNICODE
-// LPS custom phones ANSI
-// LPS BASE64(
-// UL parts count = 2
-// LPS auth_sender_nick ???
-// LPS auth_request_text ???
-// )
-// UL actions ( >= 1.15)
-// [LPS multichat_data]
-// CLPS members ( >= 1.20)
-// [ LPS owner ]
- #define ADD_CONTACT_FLAG_MYMAIL_INVITE 0x00000001
- #define ADD_CONTACT_FLAG_MULTICHAT_ATTACHE 0x00000002
- //used internal in win32 agent
- #define CONTACT_AWAITING_AUTHORIZATION_USER 0x00000100
- #define CONTACT_FLAG_TEMPORARY 0x00010000
-
-
-#define MRIM_CS_ADD_CONTACT_ACK 0x101A // S->C
-// UL status
- #define CONTACT_OPER_SUCCESS 0x0000
- #define CONTACT_OPER_ERROR 0x0001
- #define CONTACT_OPER_INTERR 0x0002
- #define CONTACT_OPER_NO_SUCH_USER 0x0003
- #define CONTACT_OPER_INVALID_INFO 0x0004
- #define CONTACT_OPER_USER_EXISTS 0x0005
- #define CONTACT_OPER_GROUP_LIMIT 0x0006
-// UL contact_id or (u_long)-1 if status is not OK
-// [LPS multichat_contact ( >= 1.20)]
-
-
-#define MRIM_CS_MODIFY_CONTACT 0x101B // C->S
-// UL id
-// UL flags - same as for MRIM_CS_ADD_CONTACT
-// UL group id (unused if contact is group)
-// LPS contact e-mail ANSI
-// LPS name UNICODE
-// LPS custom phones ANSI
-
-#define MRIM_CS_MODIFY_CONTACT_ACK 0x101C // S->C
-// UL status, same as for MRIM_CS_ADD_CONTACT_ACK
-
-#define MRIM_CS_OFFLINE_MESSAGE_ACK 0x101D // S->C
-// UIDL
-// LPS offline message ???
-
-#define MRIM_CS_DELETE_OFFLINE_MESSAGE 0x101E // C->S
-// UIDL
-
-
-#define MRIM_CS_AUTHORIZE 0x1020 // C->S
-// LPS user e-mail ANSI
-
-#define MRIM_CS_AUTHORIZE_ACK 0x1021 // S->C
-// LPS user e-mail ANSI
-
-#define MRIM_CS_CHANGE_STATUS 0x1022 // C->S
-// UL new status
-// LPS spec_status_uri ANSI ( >= 1.14)
-// LPS status_title UNICODE ( >= 1.14)
-// LPS status_desc UNICODE ( >= 1.14)
-// UL com_support ( >= 1.14) (see MRIM_CS_USER_STATUS)
-
-
-#define MRIM_CS_GET_MPOP_SESSION 0x1024 // C->S
-
-
-#define MRIM_CS_MPOP_SESSION 0x1025 // S->C
-// UL status
- #define MRIM_GET_SESSION_FAIL 0
- #define MRIM_GET_SESSION_SUCCESS 1
-// LPS mpop session ???
-
-
-#define MRIM_CS_FILE_TRANSFER 0x1026 // C->S
-// LPS TO/FROM e-mail ANSI
-// DWORD id_request - uniq per connect
-// DWORD FILESIZE
-// LPS: // LPS Files (FileName;FileSize;FileName;FileSize;) ANSI
- // LPS DESCRIPTION:
- // UL ?
- // Files (FileName;FileSize;FileName;FileSize;) UNICODE
- // LPS Conn (IP:Port;IP:Port;) ANSI
-
-#define MRIM_CS_FILE_TRANSFER_ACK 0x1027 // S->C
-// DWORD status
- #define FILE_TRANSFER_STATUS_OK 1
- #define FILE_TRANSFER_STATUS_DECLINE 0
- #define FILE_TRANSFER_STATUS_ERROR 2
- #define FILE_TRANSFER_STATUS_INCOMPATIBLE_VERS 3
- #define FILE_TRANSFER_MIRROR 4
-// LPS TO/FROM e-mail ANSI
-// DWORD id_request
-// LPS DESCRIPTION [Conn (IP:Port;IP:Port;) ANSI]
-
-
-
-//white pages!
-#define MRIM_CS_WP_REQUEST 0x1029 // C->S
-// DWORD field
-// LPS value ???
-#define PARAMS_NUMBER_LIMIT 50
-#define PARAM_VALUE_LENGTH_LIMIT 64
-
-//if last symbol in value eq '*' it will be replaced by LIKE '%'
-// params define
-// must be in consecutive order (0..N) to quick check in check_anketa_info_request
- enum {
- MRIM_CS_WP_REQUEST_PARAM_USER = 0, // ANSI
- MRIM_CS_WP_REQUEST_PARAM_DOMAIN, // ANSI
- MRIM_CS_WP_REQUEST_PARAM_NICKNAME, // UNICODE
- MRIM_CS_WP_REQUEST_PARAM_FIRSTNAME, // UNICODE
- MRIM_CS_WP_REQUEST_PARAM_LASTNAME, // UNICODE
- MRIM_CS_WP_REQUEST_PARAM_SEX, // ANSI
- MRIM_CS_WP_REQUEST_PARAM_BIRTHDAY, // not used for search
- MRIM_CS_WP_REQUEST_PARAM_DATE1, // ANSI
- MRIM_CS_WP_REQUEST_PARAM_DATE2, // ANSI
- //!!!!!!!!!!!!!!!!!!!online request param must be at end of request!!!!!!!!!!!!!!!
- MRIM_CS_WP_REQUEST_PARAM_ONLINE, // ANSI
- MRIM_CS_WP_REQUEST_PARAM_STATUS, // we do not used it, yet
- MRIM_CS_WP_REQUEST_PARAM_CITY_ID, // ANSI
- MRIM_CS_WP_REQUEST_PARAM_ZODIAC, // ANSI
- MRIM_CS_WP_REQUEST_PARAM_BIRTHDAY_MONTH, // ANSI
- MRIM_CS_WP_REQUEST_PARAM_BIRTHDAY_DAY, // ANSI
- MRIM_CS_WP_REQUEST_PARAM_COUNTRY_ID, // ANSI
- MRIM_CS_WP_REQUEST_PARAM_MAX
- };
-
-#define MRIM_CS_ANKETA_INFO 0x1028 // S->C
-// DWORD status
- #define MRIM_ANKETA_INFO_STATUS_OK 1
- #define MRIM_ANKETA_INFO_STATUS_NOUSER 0
- #define MRIM_ANKETA_INFO_STATUS_DBERR 2
- #define MRIM_ANKETA_INFO_STATUS_RATELIMERR 3
-// DWORD fields_num
-// DWORD max_rows
-// DWORD server_time sec since 1970 (unixtime)
- // fields set //%fields_num == 0
- // values set //%fields_num == 0
-// LPS value (numbers too) ???
-
-
-#define MRIM_CS_MAILBOX_STATUS 0x1033
-// DWORD new messages in mailbox
-
-
-#define MRIM_CS_GAME 0x1035
-// LPS to/from e-mail ANSI
-// DWORD session unique per game
-// DWORD msg internal game message
- enum {
- GAME_BASE,
- GAME_CONNECTION_INVITE,
- GAME_CONNECTION_ACCEPT,
- GAME_DECLINE,
- GAME_INC_VERSION,
- GAME_NO_SUCH_GAME,
- GAME_JOIN,
- GAME_CLOSE,
- GAME_SPEED,
- GAME_SYNCHRONIZATION,
- GAME_USER_NOT_FOUND,
- GAME_ACCEPT_ACK,
- GAME_PING,
- GAME_RESULT,
- GAME_MESSAGES_NUMBER
- };
-// DWORD msg_id id for ack
-// DWORD time_send time of client
-// LPS data ???
-
-
-
-#define MRIM_CS_CONTACT_LIST2 0x1037 // S->C
-// UL status
- #define GET_CONTACTS_OK 0x0000
- #define GET_CONTACTS_ERROR 0x0001
- #define GET_CONTACTS_INTERR 0x0002
-// DWORD status - if ...OK than this staff:
-// DWORD groups number
- // mask symbols table:
- // 's' - lps
- // 'u' - unsigned long
- // 'z' - zero terminated string
- // LPS groups fields mask ANSI
- // LPS contacts fields mask ANSI
- // group fields
- // contacts fields
- // groups mask 'us' == flags, name UNICODE
- // contact mask 'uussuussssus' flags, group id, e-mail ANSI, nick UNICODE, server flags, status, custom phone numbers ANSI, spec_status_uri ANSI, status_title UNICODE, status_desc UNICODE, com_support (future flags), user_agent (formated string) ANSI, ul blog status id, ul blog status id, ul BlogStatusTime, blog status UNICODE, blog status music UNICODE, blog status sender, ?????
- // uussuussssusuuusssss
- #define CONTACT_INTFLAG_NOT_AUTHORIZED 0x0001
-
-
-//old packet cs_login with cs_statistic
-#define MRIM_CS_LOGIN2 0x1038 // C->S
-// LPS login e-mail ANSI
-// LPS password ANSI
-// DWORD status
-// LPS spec_status_uri ANSI ( >= 1.14)
-// LPS status_title UNICODE ( >= 1.14)
-// LPS status_desc UNICODE ( >= 1.14)
-// UL com_support ( >= 1.14) (see MRIM_CS_USER_STATUS)
-// LPS user_agent ANSI ( >= 1.14) (see MRIM_CS_USER_STATUS)
- // + statistic packet data:
-// LPS lang ( >= 1.16)
-// LPS ua session ( >= 1.20) - шли пустой
-// LPS replaced ua session ( >= 1.20) - шли пустой
-// LPS client description ANSI
- #define MAX_CLIENT_DESCRIPTION 256
-// unknown data
-// LPS unknown id (len = 32)
-/* SetUL(&lpbDataCurrent, 0);//00 00 00 00
- SetUL(&lpbDataCurrent, 0);//02 BA 0A 00
- SetUL(&lpbDataCurrent, 0);//00 00 00 03
- SetUL(&lpbDataCurrent, 0);//00 00 00 02
-
- SetUL(&lpbDataCurrent, 0);//E2 FD 1E 22
- SetUL(&lpbDataCurrent, 0);//04 00 00 00
- SetUL(&lpbDataCurrent, 0);//02 FF FF FF
- SetUL(&lpbDataCurrent, 0);//FF 05 00 00
-
- SetUL(&lpbDataCurrent, 0);//00 02 FF FF
- SetUL(&lpbDataCurrent, 0);//FF FF 06 00
- SetUL(&lpbDataCurrent, 0);//00 00 02 FF
- SetUL(&lpbDataCurrent, 0);//FF FF FF 07
-
- SetUL(&lpbDataCurrent, 0);//00 00 00 02
- SetUL(&lpbDataCurrent, 0);//FF FF FF FF
- SetUL(&lpbDataCurrent, 0);//14 00 00 00
- SetUL(&lpbDataCurrent, 0);//02 00 00 00
-
- SetUL(&lpbDataCurrent, 0);//00 16 00 00
- SetUL(&lpbDataCurrent, 0);//00 02 00 00
- SetUL(&lpbDataCurrent, 0);//00 00 17 00
- SetUL(&lpbDataCurrent, 0);//00 00 02 00
-
- SetUL(&lpbDataCurrent, 0);//00 00 00 18
- SetUL(&lpbDataCurrent, 0);//00 00 00 02
- SetUL(&lpbDataCurrent, 0);//00 00 00 00
- SetUL(&lpbDataCurrent, 0);//19 00 00 00
-
- SetUL(&lpbDataCurrent, 0);//02 00 00 00
- SetUL(&lpbDataCurrent, 0);//00 1A 00 00
- SetUL(&lpbDataCurrent, 0);//00 02 00 00
- SetUL(&lpbDataCurrent, 0);//00 00 1C 00
-
- SetUL(&lpbDataCurrent, 0);//00 00 02 00
- SetUL(&lpbDataCurrent, 0);//00 00 00 1D
- SetUL(&lpbDataCurrent, 0);//00 00 00 02
- SetUL(&lpbDataCurrent, 0);//00 00 00 00
-
- SetUL(&lpbDataCurrent, 0);//23 00 00 00
- SetUL(&lpbDataCurrent, 0);//02 01 00 00
- SetUL(&lpbDataCurrent, 0);//00 24 00 00
- SetUL(&lpbDataCurrent, 0);//00 02 01 00
-
- SetUL(&lpbDataCurrent, 0);//00 00 25 00
- SetUL(&lpbDataCurrent, 0);//00 00 02 01
- SetUL(&lpbDataCurrent, 0);//00 00 00 26
- SetUL(&lpbDataCurrent, 0);//00 00 00 02
-
- SetUL(&lpbDataCurrent, 0);//00 00 00 00
- SetUL(&lpbDataCurrent, 0);//27 00 00 00
- SetUL(&lpbDataCurrent, 0);//02 00 00 00
- SetUL(&lpbDataCurrent, 0);//00 28 00 00
-
- SetUL(&lpbDataCurrent, 0);//00 02 00 00
- SetUL(&lpbDataCurrent, 0);//00 00 29 00
- SetUL(&lpbDataCurrent, 0);//00 00 02 01
- SetUL(&lpbDataCurrent, 0);//00 00 00 2A
-
- SetUL(&lpbDataCurrent, 0);//00 00 00 02
- SetUL(&lpbDataCurrent, 0);//00 00 00 00
- SetUL(&lpbDataCurrent, 0);//2B 00 00 00
- SetUL(&lpbDataCurrent, 0);//02 00 00 00
-
- SetUL(&lpbDataCurrent, 0);//00 2C 00 00
- SetUL(&lpbDataCurrent, 0);//00 01
-
- SetLPS(&lpbDataCurrent, "d3a4a3d0c95e5ba24f160a499ec8b4ea", 32);
-*/
-
-
-#define MRIM_CS_SMS 0x1039 // C->S
-// UL flags
-// LPS to Phone ???
-// LPS message ???
-
-#define MRIM_CS_SMS_ACK 0x1040 // S->C
-// UL status
-
-
-
-#define MRIM_CS_PROXY 0x1044
-// LPS to e-mail ANSI
-// DWORD id_request
-// DWORD data_type
- #define MRIM_PROXY_TYPE_VOICE 1
- #define MRIM_PROXY_TYPE_FILES 2
- #define MRIM_PROXY_TYPE_CALLOUT 3
-// LPS user_data ???
-// LPS lps_ip_port ???
-// DWORD session_id[4]
-
-#define MRIM_CS_PROXY_ACK 0x1045
-//DWORD status
- #define PROXY_STATUS_OK 1
- #define PROXY_STATUS_DECLINE 0
- #define PROXY_STATUS_ERROR 2
- #define PROXY_STATUS_INCOMPATIBLE_VERS 3
- #define PROXY_STATUS_NOHARDWARE 4
- #define PROXY_STATUS_MIRROR 5
- #define PROXY_STATUS_CLOSED 6
-// LPS to e-mail ANSI
-// DWORD id_request
-// DWORD data_type
-// LPS user_data ???
-// LPS: lps_ip_port ???
-// DWORD[4] Session_id
-
-#define MRIM_CS_PROXY_HELLO 0x1046
-// DWORD[4] Session_id
-
-#define MRIM_CS_PROXY_HELLO_ACK 0x1047
-
-
-
-#define MRIM_CS_NEW_MAIL 0x1048 // S->C
-// UL unread count
-// LPS from e-mail ANSI
-// LPS subject ???
-// UL date
-// UL uidl
-
-
-
-
-#define MRIM_CS_USER_BLOG_STATUS 0x1063
-// DWORD flags
- #define MRIM_BLOG_STATUS_UPDATE 0x00000001
- #define MRIM_BLOG_STATUS_MUSIC 0x00000002 // add music to status
- #define MRIM_BLOG_STATUS_REPLY 0x00000004
- #define MRIM_BLOG_STATUS_NOTIFY 0x00000010 // not set self status, alert only
-// LPS user
-// UINT64 id
-// DWORD time
-// LPS text (MRIM_BLOG_STATUS_MUSIC: track)
-// LPS reply_user_nick
-
-#define MRIM_CS_CHANGE_USER_BLOG_STATUS 0x1064
-// DWORD flags
-// LPS text (MRIM_BLOG_STATUS_MUSIC: track)
- #define MICBLOG_STATUS_MAX 500
-// switch (flags) {
-// MRIM_BLOG_STATUS_REPLY:
-// UINT64 orig_id
-// }
-
-
-#define MRIM_CS_UNKNOWN 0x1073
-// DWORD ???
-// DWORD ???
-
-#define MRIM_CS_UNKNOWN2 0x1074 /* possible mail notification */
-
-
-
-#define MRIM_CS_USER_GEO 0x1077
-// LPS user
-// LPS: // DWORD flags?
-// LPS: "geo-point":
- // LPS dolgota
- // LPS shirota
- // LPS "MAPOBJECT"
- // LPS some data?
- // LPS/DWORD
- // LPS/DWORD
- // LPS some data?
- // LPS some data?
-
-
-#define MRIM_CS_SERVER_SETTINGS 0x1079
-
-
-
-
-
-typedef struct mrim_connection_params_t
-{
- unsigned long ping_period;
-}
-mrim_connection_params_t;
-
-
-
-#endif // MRIM_PROTO_H
diff --git a/protocols/MRA/src/resource.h b/protocols/MRA/src/resource.h
deleted file mode 100644
index b557ba8e37..0000000000
--- a/protocols/MRA/src/resource.h
+++ /dev/null
@@ -1,128 +0,0 @@
-//{{NO_DEPENDENCIES}}
-// Microsoft Visual C++ generated include file.
-// Used by resource.rc
-//
-#define IDI_MRA 101
-#define IDD_OPT 102
-#define IDD_OPT_CONNECTIONS 102
-#define IDI_INBOX 103
-#define IDD_DIALOG_SELECT_EMAIL 103
-#define IDI_PROFILE 104
-#define IDI_AUTHRUGUEST 106
-#define IDI_AUTHGRANT 107
-#define IDD_MRAADVANCEDSEARCH 108
-#define IDD_OPTAVATRS 109
-#define IDD_OPT_AVATRS 109
-#define IDI_MAIL_NOTIFY 111
-#define IDI_MRA_WEB_SEARCH 112
-#define IDI_MRA_POSTCARD 114
-#define IDI_MRA_PHOTO 117
-#define IDI_DELETED 118
-#define IDI_MRA_PHONE 122
-#define IDD_OPT_FILES 126
-#define IDD_OPT_ACCOUNT 127
-#define IDD_OPT_POPUPS 128
-#define IDD_MRAACCOUNT 129
-#define IDI_ICON1 130
-#define IDI_MRA_ALARM 130
-#define IDI_MRA_VIDEO 132
-#define IDI_MRA_ANSWERS 133
-#define IDI_MRA_WORLD 134
-#define IDD_MINIBLOG 135
-#define IDI_BLOGSTATUS 137
-#define IDD_SETXSTATUS 256
-#define IDC_GROUPCONFIG 1000
-#define IDC_GROUPCONFIG2 1001
-#define IDC_GROUPMAIN 1002
-#define IDC_REGISTER 1002
-#define IDC_SLOWSEND 1003
-#define IDC_RETURN_ABC_PATH 1004
-#define IDC_FILE_SEND_HIDE_MY_ADDRESSES 1004
-#define IDC_RTF_SEND_ENABLE 1005
-#define IDC_RTF_BGCOLOUR 1006
-#define IDC_CVT_SMILES_ON_SEND_TEXT 1007
-#define IDC_CVT_SMILES_TO_TAGS 1007
-#define IDC_DELETE_AVT_ON_CONTACT_DELETE 1008
-#define IDC_FILE_SEND_ADD_EXTRA_ADDRESS 1008
-#define IDC_INCREMENTAL_NEW_MAIL_NOTIFY 1008
-#define IDC_ENABLE 1009
-#define IDC_AUTO_ADD_CONTACTS_TO_SERVER 1009
-#define IDC_FILE_SEND_NOOUTCONNECTIONONSEND 1010
-#define IDC_AUTO_AUTH_REQ_ON_LOGON 1010
-#define IDC_KEEPALIVE 1011
-#define IDC_FILE_SEND_NOOUTCONNECTIONONRECEIVE 1011
-#define IDC_LIST_EMAILS 1011
-#define IDC_TRAYICON_NEW_MAIL_NOTIFY 1011
-#define IDC_FILE_SEND_IGNORYADDITIONALPORTS 1012
-#define IDC_RTF_RECEIVE_ENABLE 1012
-#define IDC_DELETE_SPAMBOT_CONTACT 1013
-#define IDC_RTF_SEND_SMART 1013
-#define IDC_COMBO_PHONE 1014
-#define IDC_TRAYICON_NEW_MAIL_NOTIFY_CLICK_TO_INBOX 1014
-#define IDC_FILE_SEND_ENABLE_DIRECT_CONN 1014
-#define IDC_EDIT_TEXT 1015
-#define IDC_FILE_SEND_ENABLE_MRIMPROXY_CONS 1015
-#define IDC_AUTO_AUTH_GRAND_IN_CLIST 1015
-#define IDC_AUTO_AUTH_GRAND_NEW_USERS 1016
-#define IDC_AUTO_AUTH_ON_WEB_SVCS 1017
-#define IDC_OPTIONSTAB 1017
-#define IDC_NEW_ACCOUNT_LINK 1018
-#define IDC_LOOKUPLINK 1019
-#define IDC_PASSWORD 1020
-#define IDC_BUTTON_DEFAULT 1020
-#define IDC_LOGIN 1022
-#define IDC_FILE_SEND_BLOCK_SIZE 1022
-#define IDC_COMBO_POPUP_TYPE 1023
-#define IDC_CHK_ENABLE 1024
-#define IDC_CHK_USE_WIN_COLORS 1025
-#define IDC_POPUP_BACKCOLOR 1026
-#define IDC_POPUP_TEXTCOLOR 1027
-#define IDC_POPUP_TIMEOUT 1028
-#define IDC_PREVIEW 1029
-#define IDC_USE_KEEPALIVE_CONN 1030
-#define IDC_BUTTON_FONT 1031
-#define IDC_EMAIL_USER 1048
-#define IDC_EMAIL_DOMAIN 1049
-#define IDC_NICK 1053
-#define IDC_GENDER 1060
-#define IDC_STATE 1061
-#define IDC_ZODIAK 1062
-#define IDC_COUNTRY 1063
-#define IDC_CITY2 1064
-#define IDC_CITY 1064
-#define IDC_XTITLE 1065
-#define IDC_XMSG 1066
-#define IDC_USER_BLOG_STATUS_MSG 1072
-#define IDC_MSG_TO_SEND 1073
-#define IDC_CHK_NOTIFY 1074
-#define IDC_STATIC_WRITED_TIME 1075
-#define IDC_STATIC_CHARS_COUNTER 1076
-#define IDC_CHECK1 1077
-#define IDC_CHK_REMEMBER 1077
-#define IDC_SERVER 1171
-#define IDC_SERVERPORT 1174
-#define IDC_UPD_CHECK_INTERVAL 1175
-#define IDC_FILE_SEND_EXTRA_ADDRESS 1175
-#define IDC_FIRSTNAME 1224
-#define IDC_LASTNAME 1225
-#define IDC_AGERANGE_FROM 1410
-#define IDC_AGERANGE_TO 1411
-#define IDC_BIRTHDAY_DAY 1412
-#define IDC_BIRTHDAY_MONTH 1413
-#define IDC_BIRTHDAY_YEAR 1414
-#define IDC_ONLINEONLY 1430
-#define IDC_SUMMARYGROUP 1434
-#define IDC_LOCATIONGROUP 1436
-#define IDC_STATIC -1
-
-// Next default values for new objects
-//
-#ifdef APSTUDIO_INVOKED
-#ifndef APSTUDIO_READONLY_SYMBOLS
-#define _APS_NO_MFC 1
-#define _APS_NEXT_RESOURCE_VALUE 138
-#define _APS_NEXT_COMMAND_VALUE 40001
-#define _APS_NEXT_CONTROL_VALUE 1078
-#define _APS_NEXT_SYMED_VALUE 101
-#endif
-#endif
diff --git a/protocols/MRA/src/stdafx.cxx b/protocols/MRA/src/stdafx.cxx
deleted file mode 100644
index e579779bcc..0000000000
--- a/protocols/MRA/src/stdafx.cxx
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
-Copyright (C) 2012-18 Miranda NG team (https://miranda-ng.org)
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation version 2
-of the License.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "stdafx.h" \ No newline at end of file
diff --git a/protocols/MRA/src/stdafx.h b/protocols/MRA/src/stdafx.h
deleted file mode 100644
index 54860e5227..0000000000
--- a/protocols/MRA/src/stdafx.h
+++ /dev/null
@@ -1,215 +0,0 @@
-#if !defined(AFX_MRA_H__F58D13FF_F6F2_476C_B8F0_7B9E9357CF48__INCLUDED_)
-#define AFX_MRA_H__F58D13FF_F6F2_476C_B8F0_7B9E9357CF48__INCLUDED_
-
-#pragma once
-
-#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
-
-#include <windows.h>
-#include <Commdlg.h>
-#include <shlwapi.h>
-#include <winsock2.h>
-
-#pragma comment(lib,"shlwapi.lib")
-
-#include <crtdbg.h>
-#include <malloc.h>
-#include <stdio.h>
-#include <time.h>
-#include <commctrl.h>
-
-#include "../../libs/zlib/src/zlib.h"
-
-#include <newpluginapi.h>
-#include <m_system.h>
-#include <m_protocols.h>
-#include <m_clistint.h>
-#include <m_cluiframes.h>
-#include <m_genmenu.h>
-#include <m_ignore.h>
-#include <m_message.h>
-#include <m_options.h>
-#include <m_protosvc.h>
-#include <m_protoint.h>
-#include <m_skin.h>
-#include <m_userinfo.h>
-#include <m_utils.h>
-#include <m_database.h>
-#include <m_langpack.h>
-#include <m_string.h>
-#include <m_netlib.h>
-#include <m_icolib.h>
-#include <win2k.h>
-#include <m_popup.h>
-#include <m_nudge.h>
-#include <m_folders.h>
-#include <m_avatars.h>
-#include <m_chat_int.h>
-#include <m_extraicons.h>
-#include <m_music.h>
-#include <m_xstatus.h>
-#include <m_nudge.h>
-#include <m_proto_listeningto.h>
-
-#define PROTO_VERSION_MAJOR 1
-#define PROTO_VERSION_MINOR 21
-
-#include "resource.h"
-#include "../xstatus_MRA/src/resource.h"
-
-#include "Sdk/MemoryFind.h"
-#include "Sdk/MemoryFindByte.h"
-#include "Sdk/BuffToLowerCase.h"
-#include "Sdk/StrHexToNum.h"
-#include "Sdk/timefuncs.h"
-#include "Sdk/InternetTime.h"
-#include "Sdk/ListMT.h"
-#include "Sdk/FIFOMT.h"
-#include "Sdk/RC4.h"
-#include "Sdk/SHA1.h"
-
-// LPS
-struct MRA_LPS
-{
- size_t dwSize;
-
- union {
- LPSTR lpszData;
- LPWSTR lpwszData;
- };
-};
-
-
-// GUID
-struct MRA_GUID
-{
- DWORD id[4];
-};
-
-struct MRA_ADDR_LIST_ITEM
-{
- DWORD dwPort;
- DWORD dwAddr;
-};
-
-struct MRA_ADDR_LIST
-{
- DWORD dwAddrCount;
- MRA_ADDR_LIST_ITEM *pMailAddress;
-};
-
-/////////////////////////////////////////////////////////////////////////////
-
-class BinBuffer
-{
- LPBYTE m_data;
- size_t m_len;
-
-public:
- BinBuffer(LPBYTE data, size_t len) : m_data(data), m_len(len) {}
-
- DWORD getDword();
- DWORDLONG getInt64();
- MRA_GUID getGuid();
- void getStringA(CMStringA&);
- void getStringW(CMStringW&);
-
- __forceinline bool eof() const { return m_len == 0; }
-};
-
-__forceinline BinBuffer& operator >>(BinBuffer& buf, DWORD &dwVar) { dwVar = buf.getDword(); return buf; }
-__forceinline BinBuffer& operator >>(BinBuffer& buf, DWORDLONG &llVar) { llVar = buf.getInt64(); return buf; }
-__forceinline BinBuffer& operator >>(BinBuffer& buf, MRA_GUID &guid) { guid = buf.getGuid(); return buf; }
-__forceinline BinBuffer& operator >>(BinBuffer& buf, CMStringA &sVar) { buf.getStringA(sVar); return buf; }
-__forceinline BinBuffer& operator >>(BinBuffer& buf, CMStringW &sVar) { buf.getStringW(sVar); return buf; }
-
-/////////////////////////////////////////////////////////////////////////////
-
-bool DB_GetStaticStringA(MCONTACT hContact, LPCSTR lpszModule, LPCSTR lpszValueName, LPSTR lpszRetBuff, size_t dwRetBuffSize, size_t *pdwRetBuffSize);
-bool DB_GetStaticStringW(MCONTACT hContact, LPCSTR lpszModule, LPCSTR lpszValueName, LPWSTR lpszRetBuff, size_t dwRetBuffSize, size_t *pdwRetBuffSize);
-
-bool DB_GetStringA(MCONTACT hContact, LPCSTR lpszModule, LPCSTR lpszValueName, CMStringA &Ret);
-bool DB_GetStringW(MCONTACT hContact, LPCSTR lpszModule, LPCSTR lpszValueName, CMStringW &Ret);
-
-bool DB_SetStringExA(MCONTACT hContact, LPCSTR lpszModule, LPCSTR lpszValueName, const CMStringA &value);
-bool DB_SetStringExW(MCONTACT hContact, LPCSTR lpszModule, LPCSTR lpszValueName, const CMStringW &value);
-
-bool DB_GetContactSettingBlob(MCONTACT hContact, LPCSTR lpszModule, LPCSTR lpszValueName, LPVOID lpRet, size_t dwRetBuffSize, size_t *pdwRetBuffSize);
-
-#include "MraConstans.h"
-#include "MraProto.h"
-
-extern IconItem gdiMenuItems[];
-extern IconItem gdiContactMenuItems[];
-extern IconItem gdiExtraStatusIconsItems[];
-
-#include "proto.h"
-#include "MraMRIMProxy.h"
-#include "MraSendQueue.h"
-#include "MraFilesQueue.h"
-#include "MraPopup.h"
-#include "MraAvatars.h"
-#include "MraIcons.h"
-#include "MraSelectEMail.h"
-#include "MraMPop.h"
-
-/////////////////////////////////////////////////////////////////////////////////////////
-// plugin options
-
-extern HMODULE g_hDLLXStatusIcons;
-extern HICON g_hMainIcon;
-
-extern bool g_bChatExist;
-
-extern size_t g_dwMirWorkDirPathLen;
-extern WCHAR g_szMirWorkDirPath[MAX_FILEPATH];
-
-/////////////////////////////////////////////////////////////////////////////////////////
-// External variables
-
-extern HANDLE hXStatusAdvancedStatusIcons[];
-
-CMStringA MraGetSelfVersionString();
-
-#define SetBit(bytes, bitpos) bytes |= (1<<bitpos)
-#define GetBit(bytes, bitpos) ((bytes&(1<<bitpos))? TRUE:FALSE)
-
-#define IsXStatusValid(XStatus) (((XStatus) && (XStatus) < MRA_XSTATUS_COUNT))
-
-#define GET_CURRENT_COMBO_DATA(hWndDlg, ControlID) SendDlgItemMessage(hWndDlg, ControlID, CB_GETITEMDATA, SendDlgItemMessage(hWndDlg, ControlID, CB_GETCURSEL, 0, 0), 0)
-
-#define IsFileExist(FileName) (GetFileAttributes(FileName) != INVALID_FILE_ATTRIBUTES)
-
-void MraAddrListFree(MRA_ADDR_LIST *pmalAddrList);
-DWORD MraAddrListGetFromBuff(const CMStringA &szAddresses, MRA_ADDR_LIST *pmalAddrList);
-CMStringA MraAddrListGetToBuff(MRA_ADDR_LIST *pmalAddrList);
-
-void InitXStatusIcons();
-void DestroyXStatusIcons();
-
-CMStringA MraGetVersionStringFromFormatted(const CMStringA& szUserAgentFormatted);
-CMStringA CopyNumber(const CMStringA&);
-
-CMStringW DecodeXML(const CMStringW &lptszMessage);
-CMStringW EncodeXML(const CMStringW &lptszMessage);
-
-bool IsHTTPSProxyUsed(HNETLIBUSER hConnection);
-bool IsContactMraProto(MCONTACT hContact);
-bool IsEMailMR(const CMStringA& szEmail);
-bool GetEMailFromString(const CMStringA& szBuff, CMStringA& szEmail);
-
-void EnableControlsArray(HWND hWndDlg, WORD *pwControlsList, size_t dwControlsListCount, BOOL bEnabled);
-DWORD GetYears(CONST PSYSTEMTIME pcstSystemTime);
-DWORD FindFile(LPWSTR lpszFolder, DWORD dwFolderLen, LPWSTR lpszFileName, DWORD dwFileNameLen, LPWSTR lpszRetFilePathName, DWORD dwRetFilePathLen, DWORD *pdwRetFilePathLen);
-
-DWORD GetMraStatusFromMiradaStatus(DWORD dwMirandaStatus, DWORD dwXStatusMir, DWORD *pdwXStatusMra);
-DWORD GetMirandaStatusFromMraStatus(DWORD dwMraStatus, DWORD dwXStatusMra, DWORD *pdwXStatusMir);
-DWORD GetMraXStatusIDFromMraUriStatus(const char *lpszStatusUri);
-
-INT_PTR CALLBACK DlgProcAccount(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam);
-
-#define LPS2ANSI(var, p, size) char *var = (char*)alloca(size+1); memcpy(var, p, size); var[size]=0;
-
-#define NETLIB_CLOSEHANDLE(hConnection) {Netlib_CloseHandle(hConnection); hConnection = NULL;}
-
-#endif // !defined(AFX_MRA_H__F58D13FF_F6F2_476C_B8F0_7B9E9357CF48__INCLUDED_)
diff --git a/protocols/MRA/src/version.h b/protocols/MRA/src/version.h
deleted file mode 100644
index f70f89ee4c..0000000000
--- a/protocols/MRA/src/version.h
+++ /dev/null
@@ -1,13 +0,0 @@
-#define __MAJOR_VERSION 2
-#define __MINOR_VERSION 1
-#define __RELEASE_NUM 1
-#define __BUILD_NUM 1
-
-#include <stdver.h>
-
-#define __PLUGIN_NAME "MRA protocol"
-#define __FILENAME "MRA.dll"
-#define __DESCRIPTION "Miranda Mail.ru Agent protocol plugin."
-#define __AUTHOR "Rozhuk Ivan"
-#define __AUTHORWEB "https://miranda-ng.org/p/MRA/"
-#define __COPYRIGHT "© 2005-18 Rozhuk Ivan"
diff --git a/protocols/MRA/xstatus_mra/CMakeLists.txt b/protocols/MRA/xstatus_mra/CMakeLists.txt
deleted file mode 100644
index 3f6ad79d54..0000000000
--- a/protocols/MRA/xstatus_mra/CMakeLists.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-set(TARGET xStatus_MRA)
-include(${CMAKE_SOURCE_DIR}/cmake/icons.cmake) \ No newline at end of file
diff --git a/protocols/MRA/xstatus_mra/res/10.ico b/protocols/MRA/xstatus_mra/res/10.ico
deleted file mode 100644
index 211e5bfcea..0000000000
--- a/protocols/MRA/xstatus_mra/res/10.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/xstatus_mra/res/11.ico b/protocols/MRA/xstatus_mra/res/11.ico
deleted file mode 100644
index 7307bad15b..0000000000
--- a/protocols/MRA/xstatus_mra/res/11.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/xstatus_mra/res/12.ico b/protocols/MRA/xstatus_mra/res/12.ico
deleted file mode 100644
index ec5f7551bd..0000000000
--- a/protocols/MRA/xstatus_mra/res/12.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/xstatus_mra/res/13.ico b/protocols/MRA/xstatus_mra/res/13.ico
deleted file mode 100644
index 1012d22fc5..0000000000
--- a/protocols/MRA/xstatus_mra/res/13.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/xstatus_mra/res/14.ico b/protocols/MRA/xstatus_mra/res/14.ico
deleted file mode 100644
index 1fb9bc47c5..0000000000
--- a/protocols/MRA/xstatus_mra/res/14.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/xstatus_mra/res/15.ico b/protocols/MRA/xstatus_mra/res/15.ico
deleted file mode 100644
index 4ce1c3f6f0..0000000000
--- a/protocols/MRA/xstatus_mra/res/15.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/xstatus_mra/res/16.ico b/protocols/MRA/xstatus_mra/res/16.ico
deleted file mode 100644
index 0741d3f339..0000000000
--- a/protocols/MRA/xstatus_mra/res/16.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/xstatus_mra/res/17.ico b/protocols/MRA/xstatus_mra/res/17.ico
deleted file mode 100644
index bc40df42ff..0000000000
--- a/protocols/MRA/xstatus_mra/res/17.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/xstatus_mra/res/18.ico b/protocols/MRA/xstatus_mra/res/18.ico
deleted file mode 100644
index 21238bee53..0000000000
--- a/protocols/MRA/xstatus_mra/res/18.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/xstatus_mra/res/19.ico b/protocols/MRA/xstatus_mra/res/19.ico
deleted file mode 100644
index 92f8ce1b75..0000000000
--- a/protocols/MRA/xstatus_mra/res/19.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/xstatus_mra/res/20.ico b/protocols/MRA/xstatus_mra/res/20.ico
deleted file mode 100644
index 4a3ca0bc05..0000000000
--- a/protocols/MRA/xstatus_mra/res/20.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/xstatus_mra/res/21.ico b/protocols/MRA/xstatus_mra/res/21.ico
deleted file mode 100644
index 82bf3e3c0f..0000000000
--- a/protocols/MRA/xstatus_mra/res/21.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/xstatus_mra/res/22.ico b/protocols/MRA/xstatus_mra/res/22.ico
deleted file mode 100644
index 59bed0d4e0..0000000000
--- a/protocols/MRA/xstatus_mra/res/22.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/xstatus_mra/res/23.ico b/protocols/MRA/xstatus_mra/res/23.ico
deleted file mode 100644
index 1aecb4f1e8..0000000000
--- a/protocols/MRA/xstatus_mra/res/23.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/xstatus_mra/res/24.ico b/protocols/MRA/xstatus_mra/res/24.ico
deleted file mode 100644
index 1799d2d8bc..0000000000
--- a/protocols/MRA/xstatus_mra/res/24.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/xstatus_mra/res/25.txt b/protocols/MRA/xstatus_mra/res/25.txt
deleted file mode 100644
index ff981d2f44..0000000000
--- a/protocols/MRA/xstatus_mra/res/25.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-no icon
-possible chat/dnd icon here \ No newline at end of file
diff --git a/protocols/MRA/xstatus_mra/res/26.ico b/protocols/MRA/xstatus_mra/res/26.ico
deleted file mode 100644
index 8d9cd9359f..0000000000
--- a/protocols/MRA/xstatus_mra/res/26.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/xstatus_mra/res/27.ico b/protocols/MRA/xstatus_mra/res/27.ico
deleted file mode 100644
index 17a7b5fc5a..0000000000
--- a/protocols/MRA/xstatus_mra/res/27.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/xstatus_mra/res/28.ico b/protocols/MRA/xstatus_mra/res/28.ico
deleted file mode 100644
index 3674a2fbc3..0000000000
--- a/protocols/MRA/xstatus_mra/res/28.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/xstatus_mra/res/29.ico b/protocols/MRA/xstatus_mra/res/29.ico
deleted file mode 100644
index ef57077e06..0000000000
--- a/protocols/MRA/xstatus_mra/res/29.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/xstatus_mra/res/30.ico b/protocols/MRA/xstatus_mra/res/30.ico
deleted file mode 100644
index 52936e7e1a..0000000000
--- a/protocols/MRA/xstatus_mra/res/30.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/xstatus_mra/res/31.ico b/protocols/MRA/xstatus_mra/res/31.ico
deleted file mode 100644
index da6953668e..0000000000
--- a/protocols/MRA/xstatus_mra/res/31.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/xstatus_mra/res/32.txt b/protocols/MRA/xstatus_mra/res/32.txt
deleted file mode 100644
index ff981d2f44..0000000000
--- a/protocols/MRA/xstatus_mra/res/32.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-no icon
-possible chat/dnd icon here \ No newline at end of file
diff --git a/protocols/MRA/xstatus_mra/res/33.ico b/protocols/MRA/xstatus_mra/res/33.ico
deleted file mode 100644
index df50b78ec3..0000000000
--- a/protocols/MRA/xstatus_mra/res/33.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/xstatus_mra/res/34.ico b/protocols/MRA/xstatus_mra/res/34.ico
deleted file mode 100644
index 78a08b3db3..0000000000
--- a/protocols/MRA/xstatus_mra/res/34.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/xstatus_mra/res/35.ico b/protocols/MRA/xstatus_mra/res/35.ico
deleted file mode 100644
index dca2ed3b8a..0000000000
--- a/protocols/MRA/xstatus_mra/res/35.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/xstatus_mra/res/36.ico b/protocols/MRA/xstatus_mra/res/36.ico
deleted file mode 100644
index 4bed603d19..0000000000
--- a/protocols/MRA/xstatus_mra/res/36.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/xstatus_mra/res/37.ico b/protocols/MRA/xstatus_mra/res/37.ico
deleted file mode 100644
index 1661e9a7eb..0000000000
--- a/protocols/MRA/xstatus_mra/res/37.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/xstatus_mra/res/38.ico b/protocols/MRA/xstatus_mra/res/38.ico
deleted file mode 100644
index ae6f82be87..0000000000
--- a/protocols/MRA/xstatus_mra/res/38.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/xstatus_mra/res/39.ico b/protocols/MRA/xstatus_mra/res/39.ico
deleted file mode 100644
index 07b650b983..0000000000
--- a/protocols/MRA/xstatus_mra/res/39.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/xstatus_mra/res/4.ico b/protocols/MRA/xstatus_mra/res/4.ico
deleted file mode 100644
index 400c638259..0000000000
--- a/protocols/MRA/xstatus_mra/res/4.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/xstatus_mra/res/40.ico b/protocols/MRA/xstatus_mra/res/40.ico
deleted file mode 100644
index 58b7d3c549..0000000000
--- a/protocols/MRA/xstatus_mra/res/40.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/xstatus_mra/res/41.ico b/protocols/MRA/xstatus_mra/res/41.ico
deleted file mode 100644
index bee5605d07..0000000000
--- a/protocols/MRA/xstatus_mra/res/41.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/xstatus_mra/res/42.ico b/protocols/MRA/xstatus_mra/res/42.ico
deleted file mode 100644
index abb61c728d..0000000000
--- a/protocols/MRA/xstatus_mra/res/42.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/xstatus_mra/res/43.ico b/protocols/MRA/xstatus_mra/res/43.ico
deleted file mode 100644
index fc79fd8970..0000000000
--- a/protocols/MRA/xstatus_mra/res/43.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/xstatus_mra/res/44.ico b/protocols/MRA/xstatus_mra/res/44.ico
deleted file mode 100644
index 4cea0293ca..0000000000
--- a/protocols/MRA/xstatus_mra/res/44.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/xstatus_mra/res/45.ico b/protocols/MRA/xstatus_mra/res/45.ico
deleted file mode 100644
index 2772b44f25..0000000000
--- a/protocols/MRA/xstatus_mra/res/45.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/xstatus_mra/res/46.ico b/protocols/MRA/xstatus_mra/res/46.ico
deleted file mode 100644
index acad35a963..0000000000
--- a/protocols/MRA/xstatus_mra/res/46.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/xstatus_mra/res/47.ico b/protocols/MRA/xstatus_mra/res/47.ico
deleted file mode 100644
index 10b1a8cc06..0000000000
--- a/protocols/MRA/xstatus_mra/res/47.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/xstatus_mra/res/48.ico b/protocols/MRA/xstatus_mra/res/48.ico
deleted file mode 100644
index c850f9b2a3..0000000000
--- a/protocols/MRA/xstatus_mra/res/48.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/xstatus_mra/res/49.ico b/protocols/MRA/xstatus_mra/res/49.ico
deleted file mode 100644
index a5f4789e64..0000000000
--- a/protocols/MRA/xstatus_mra/res/49.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/xstatus_mra/res/5.ico b/protocols/MRA/xstatus_mra/res/5.ico
deleted file mode 100644
index 8cd4bd0954..0000000000
--- a/protocols/MRA/xstatus_mra/res/5.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/xstatus_mra/res/50.ico b/protocols/MRA/xstatus_mra/res/50.ico
deleted file mode 100644
index 3d8e09c97c..0000000000
--- a/protocols/MRA/xstatus_mra/res/50.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/xstatus_mra/res/51.ico b/protocols/MRA/xstatus_mra/res/51.ico
deleted file mode 100644
index 3062e5c266..0000000000
--- a/protocols/MRA/xstatus_mra/res/51.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/xstatus_mra/res/52.ico b/protocols/MRA/xstatus_mra/res/52.ico
deleted file mode 100644
index f40255619e..0000000000
--- a/protocols/MRA/xstatus_mra/res/52.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/xstatus_mra/res/53.ico b/protocols/MRA/xstatus_mra/res/53.ico
deleted file mode 100644
index 6fe8784884..0000000000
--- a/protocols/MRA/xstatus_mra/res/53.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/xstatus_mra/res/54.ico b/protocols/MRA/xstatus_mra/res/54.ico
deleted file mode 100644
index bb60eba1aa..0000000000
--- a/protocols/MRA/xstatus_mra/res/54.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/xstatus_mra/res/6.ico b/protocols/MRA/xstatus_mra/res/6.ico
deleted file mode 100644
index 2b43187da0..0000000000
--- a/protocols/MRA/xstatus_mra/res/6.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/xstatus_mra/res/7.ico b/protocols/MRA/xstatus_mra/res/7.ico
deleted file mode 100644
index bc4bb050eb..0000000000
--- a/protocols/MRA/xstatus_mra/res/7.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/xstatus_mra/res/8.ico b/protocols/MRA/xstatus_mra/res/8.ico
deleted file mode 100644
index 6170fe8b1d..0000000000
--- a/protocols/MRA/xstatus_mra/res/8.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/xstatus_mra/res/9.ico b/protocols/MRA/xstatus_mra/res/9.ico
deleted file mode 100644
index a4e632672b..0000000000
--- a/protocols/MRA/xstatus_mra/res/9.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/xstatus_mra/res/icon1.ico b/protocols/MRA/xstatus_mra/res/icon1.ico
deleted file mode 100644
index 6a01d5380e..0000000000
--- a/protocols/MRA/xstatus_mra/res/icon1.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/xstatus_mra/res/unknown.ico b/protocols/MRA/xstatus_mra/res/unknown.ico
deleted file mode 100644
index 09e42b7767..0000000000
--- a/protocols/MRA/xstatus_mra/res/unknown.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/MRA/xstatus_mra/res/xstatus_MRA.rc b/protocols/MRA/xstatus_mra/res/xstatus_MRA.rc
deleted file mode 100644
index f7bdc005dc..0000000000
--- a/protocols/MRA/xstatus_mra/res/xstatus_MRA.rc
+++ /dev/null
@@ -1,144 +0,0 @@
-// Microsoft Visual C++ generated resource script.
-//
-#include "..\src\resource.h"
-
-#define APSTUDIO_READONLY_SYMBOLS
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 2 resource.
-//
-#include "afxres.h"
-
-/////////////////////////////////////////////////////////////////////////////
-#undef APSTUDIO_READONLY_SYMBOLS
-
-/////////////////////////////////////////////////////////////////////////////
-// Neutral resources
-
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEU)
-#ifdef _WIN32
-LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
-#pragma code_page(1251)
-#endif //_WIN32
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Icon
-//
-
-// Icon with lowest ID value placed first to ensure application icon
-// remains consistent on all systems.
-IDI_XSTATUS1 ICON "4.ico"
-IDI_XSTATUS2 ICON "5.ico"
-IDI_XSTATUS3 ICON "6.ico"
-IDI_XSTATUS4 ICON "7.ico"
-IDI_XSTATUS5 ICON "8.ico"
-IDI_XSTATUS6 ICON "9.ico"
-IDI_XSTATUS7 ICON "10.ico"
-IDI_XSTATUS8 ICON "11.ico"
-IDI_XSTATUS9 ICON "12.ico"
-IDI_XSTATUS10 ICON "13.ico"
-IDI_XSTATUS11 ICON "14.ico"
-IDI_XSTATUS12 ICON "15.ico"
-IDI_XSTATUS13 ICON "16.ico"
-IDI_XSTATUS14 ICON "17.ico"
-IDI_XSTATUS15 ICON "18.ico"
-IDI_XSTATUS16 ICON "19.ico"
-IDI_XSTATUS17 ICON "20.ico"
-IDI_XSTATUS18 ICON "21.ico"
-IDI_XSTATUS19 ICON "22.ico"
-IDI_XSTATUS20 ICON "23.ico"
-IDI_XSTATUS21 ICON "24.ico"
-IDI_XSTATUS22 ICON "26.ico"
-IDI_XSTATUS23 ICON "27.ico"
-IDI_XSTATUS24 ICON "28.ico"
-IDI_XSTATUS25 ICON "29.ico"
-IDI_XSTATUS26 ICON "30.ico"
-IDI_XSTATUS27 ICON "31.ico"
-IDI_XSTATUS28 ICON "33.ico"
-IDI_XSTATUS29 ICON "34.ico"
-IDI_XSTATUS30 ICON "35.ico"
-IDI_XSTATUS31 ICON "36.ico"
-IDI_XSTATUS32 ICON "37.ico"
-IDI_XSTATUS33 ICON "38.ico"
-IDI_XSTATUS34 ICON "39.ico"
-IDI_XSTATUS35 ICON "40.ico"
-IDI_XSTATUS36 ICON "41.ico"
-IDI_XSTATUS37 ICON "42.ico"
-IDI_XSTATUS38 ICON "43.ico"
-IDI_XSTATUS39 ICON "44.ico"
-IDI_XSTATUS40 ICON "45.ico"
-IDI_XSTATUS41 ICON "46.ico"
-IDI_XSTATUS42 ICON "47.ico"
-IDI_XSTATUS43 ICON "48.ico"
-IDI_XSTATUS44 ICON "49.ico"
-IDI_XSTATUS45 ICON "50.ico"
-IDI_XSTATUS46 ICON "51.ico"
-IDI_XSTATUS47 ICON "52.ico"
-IDI_XSTATUS48 ICON "53.ico"
-IDI_XSTATUS49 ICON "54.ico"
-IDI_XSTATUS_UNKNOWN ICON "unknown.ico"
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// String Table
-//
-
-STRINGTABLE
-BEGIN
- IDS_IDENTIFY "# Custom Status Icons #"
-END
-
-#endif // Neutral resources
-/////////////////////////////////////////////////////////////////////////////
-
-
-/////////////////////////////////////////////////////////////////////////////
-// English (U.S.) resources
-
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
-#ifdef _WIN32
-LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
-#pragma code_page(1252)
-#endif //_WIN32
-
-#ifdef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// TEXTINCLUDE
-//
-
-1 TEXTINCLUDE
-BEGIN
- "..\src\resource.h\0"
-END
-
-2 TEXTINCLUDE
-BEGIN
- "#include ""afxres.h""\r\n"
- "\0"
-END
-
-3 TEXTINCLUDE
-BEGIN
- "\r\n"
- "\0"
-END
-
-#endif // APSTUDIO_INVOKED
-
-#endif // English (U.S.) resources
-/////////////////////////////////////////////////////////////////////////////
-
-
-
-#ifndef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 3 resource.
-//
-
-
-/////////////////////////////////////////////////////////////////////////////
-#endif // not APSTUDIO_INVOKED
-
diff --git a/protocols/MRA/xstatus_mra/src/resource.h b/protocols/MRA/xstatus_mra/src/resource.h
deleted file mode 100644
index 9b8624eac7..0000000000
--- a/protocols/MRA/xstatus_mra/src/resource.h
+++ /dev/null
@@ -1,67 +0,0 @@
-//{{NO_DEPENDENCIES}}
-// Microsoft Visual C++ generated include file.
-// Used by xstatus_MRA.rc
-//
-#define IDS_IDENTIFY 102
-#define IDI_XSTATUS1 201
-#define IDI_XSTATUS2 202
-#define IDI_XSTATUS3 203
-#define IDI_XSTATUS4 204
-#define IDI_XSTATUS5 205
-#define IDI_XSTATUS6 206
-#define IDI_XSTATUS7 207
-#define IDI_XSTATUS8 208
-#define IDI_XSTATUS9 209
-#define IDI_XSTATUS10 210
-#define IDI_XSTATUS11 211
-#define IDI_XSTATUS12 212
-#define IDI_XSTATUS13 213
-#define IDI_XSTATUS14 214
-#define IDI_XSTATUS15 215
-#define IDI_XSTATUS16 216
-#define IDI_XSTATUS17 217
-#define IDI_XSTATUS18 218
-#define IDI_XSTATUS19 219
-#define IDI_XSTATUS20 220
-#define IDI_XSTATUS21 221
-#define IDI_XSTATUS22 222
-#define IDI_XSTATUS23 223
-#define IDI_XSTATUS24 224
-#define IDI_XSTATUS25 225
-#define IDI_XSTATUS26 226
-#define IDI_XSTATUS27 227
-#define IDI_XSTATUS28 228
-#define IDI_XSTATUS29 229
-#define IDI_XSTATUS30 230
-#define IDI_XSTATUS31 231
-#define IDI_XSTATUS32 232
-#define IDI_XSTATUS33 233
-#define IDI_XSTATUS34 234
-#define IDI_XSTATUS35 235
-#define IDI_XSTATUS36 236
-#define IDI_XSTATUS37 237
-#define IDI_XSTATUS38 238
-#define IDI_XSTATUS39 239
-#define IDI_XSTATUS40 240
-#define IDI_XSTATUS41 241
-#define IDI_XSTATUS42 242
-#define IDI_XSTATUS43 243
-#define IDI_XSTATUS44 244
-#define IDI_XSTATUS45 245
-#define IDI_XSTATUS46 246
-#define IDI_XSTATUS47 247
-#define IDI_XSTATUS48 248
-#define IDI_XSTATUS49 249
-#define IDI_XSTATUS_UNKNOWN 250
-
-
-// Next default values for new objects
-//
-#ifdef APSTUDIO_INVOKED
-#ifndef APSTUDIO_READONLY_SYMBOLS
-#define _APS_NEXT_RESOURCE_VALUE 253
-#define _APS_NEXT_COMMAND_VALUE 40001
-#define _APS_NEXT_CONTROL_VALUE 1001
-#define _APS_NEXT_SYMED_VALUE 101
-#endif
-#endif
diff --git a/protocols/MRA/xstatus_mra/xStatus_MRA.vcxproj b/protocols/MRA/xstatus_mra/xStatus_MRA.vcxproj
deleted file mode 100644
index 99282f8da4..0000000000
--- a/protocols/MRA/xstatus_mra/xStatus_MRA.vcxproj
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup Label="ProjectConfigurations">
- <ProjectConfiguration Include="Debug|Win32">
- <Configuration>Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Debug|x64">
- <Configuration>Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|Win32">
- <Configuration>Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|x64">
- <Configuration>Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- </ItemGroup>
- <PropertyGroup Label="Globals">
- <ProjectName>xStatus_MRA</ProjectName>
- <ProjectGuid>{5B84781D-F1C3-4535-99B7-B84B6C9BCF15}</ProjectGuid>
- </PropertyGroup>
- <ImportGroup Label="PropertySheets">
- <Import Project="$(ProjectDir)..\..\..\build\vc.common\icons.props" />
- </ImportGroup>
-</Project> \ No newline at end of file
diff --git a/protocols/MRA/xstatus_mra/xStatus_MRA.vcxproj.filters b/protocols/MRA/xstatus_mra/xStatus_MRA.vcxproj.filters
deleted file mode 100644
index e39f86d5d6..0000000000
--- a/protocols/MRA/xstatus_mra/xStatus_MRA.vcxproj.filters
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$(ProjectDir)..\..\..\build\vc.common\common.filters" />
-</Project> \ No newline at end of file
diff --git a/src/mir_app/src/newplugins.cpp b/src/mir_app/src/newplugins.cpp
index 6be83b3358..57e55df16d 100644
--- a/src/mir_app/src/newplugins.cpp
+++ b/src/mir_app/src/newplugins.cpp
@@ -111,6 +111,7 @@ static const MUUID pluginBannedList[] =
{ 0xa0138fc6, 0x4c52, 0x4501, { 0xaf, 0x93, 0x7d, 0x3e, 0x20, 0xbc, 0xae, 0x5b } }, // dbchecker
{ 0x53ac190b, 0xe223, 0x4341, { 0x82, 0x5f, 0x70, 0x9d, 0x85, 0x20, 0x21, 0x5b } }, // stdidle
{ 0x6f376b33, 0xd3f4, 0x4c4f, { 0xa9, 0x6b, 0x77, 0xda, 0x08, 0x04, 0x3b, 0x06 } }, // importtxt
+ { 0xe7c48bab, 0x8ace, 0x4cb3, { 0x84, 0x46, 0xd4, 0xb7, 0x34, 0x81, 0xf4, 0x97 } }, // mra
};
static bool isPluginBanned(const MUUID &u1)
diff --git a/tools/build_scripts/bin15/z2_PackPluginUpdater_x32.txt b/tools/build_scripts/bin15/z2_PackPluginUpdater_x32.txt
index 9b7874c346..6505ecdb85 100644
--- a/tools/build_scripts/bin15/z2_PackPluginUpdater_x32.txt
+++ b/tools/build_scripts/bin15/z2_PackPluginUpdater_x32.txt
@@ -85,7 +85,6 @@ Plugins\mirfox.dll
Plugins\mirlua.dll
Plugins\mirotr.dll
Plugins\mobilestate.dll
-Plugins\mra.dll
Plugins\mradio.dll
Plugins\msg_export.dll
Plugins\msgpopup.dll
diff --git a/tools/build_scripts/bin15/z2_PackPluginUpdater_x64.txt b/tools/build_scripts/bin15/z2_PackPluginUpdater_x64.txt
index 2f99ec7922..7644610106 100644
--- a/tools/build_scripts/bin15/z2_PackPluginUpdater_x64.txt
+++ b/tools/build_scripts/bin15/z2_PackPluginUpdater_x64.txt
@@ -84,7 +84,6 @@ Plugins\mirfox.dll
Plugins\mirlua.dll
Plugins\mirotr.dll
Plugins\mobilestate.dll
-Plugins\mra.dll
Plugins\mradio.dll
Plugins\msg_export.dll
Plugins\msgpopup.dll
diff --git a/tools/build_scripts/z2_PackPluginUpdater.bat b/tools/build_scripts/z2_PackPluginUpdater.bat
index dfa8917c16..2dfd837f7e 100644
--- a/tools/build_scripts/z2_PackPluginUpdater.bat
+++ b/tools/build_scripts/z2_PackPluginUpdater.bat
@@ -63,7 +63,6 @@ for /f %%a in ('dir plugins\*.dll /B /L') do (
if /I "%%a"=="Listeningto.dll" (%ZipIt% "%Arch%\Plugins\%%~na.zip" "Plugins\Listeningto\*.dll")
if /I "%%a"=="MinecraftDynmap.dll" (%ZipIt% "%Arch%\Plugins\%%~na.zip" "Icons\Proto_MinecraftDynmap.dll")
if /I "%%a"=="MirLua.dll" (%ZipIt% "%Arch%\Plugins\%%~na.zip" "Scripts\*.dll" "Libs\lua*.dll")
- if /I "%%a"=="MRA.dll" (%ZipIt% "%Arch%\Plugins\%%~na.zip" "Icons\Proto_MRA.dll" "Icons\xStatus_MRA.dll")
if /I "%%a"=="mRadio.dll" (%ZipIt% "%Arch%\Plugins\%%~na.zip" "Icons\Proto_mRadio.dll" "Plugins\BASS\*.dll")
if /I "%%a"=="MSN.dll" (%ZipIt% "%Arch%\Plugins\%%~na.zip" "Icons\Proto_MSN.dll")
if /I "%%a"=="NewsAggregator.dll" (%ZipIt% "%Arch%\Plugins\%%~na.zip" "Icons\Proto_NewsAggregator.dll")