diff --git a/.idea/.idea.Eclipse/.idea/dataSources/30725304-56d3-46dd-a0f3-bd883f7c02e7.xml b/.idea/.idea.Eclipse/.idea/dataSources/30725304-56d3-46dd-a0f3-bd883f7c02e7.xml
index bd04191..ad21724 100644
--- a/.idea/.idea.Eclipse/.idea/dataSources/30725304-56d3-46dd-a0f3-bd883f7c02e7.xml
+++ b/.idea/.idea.Eclipse/.idea/dataSources/30725304-56d3-46dd-a0f3-bd883f7c02e7.xml
@@ -3,7 +3,7 @@
mdy
- 779
+ 813
16.4
1728973241
true ACDT
@@ -46,9 +46,9 @@ false Africa/Bissau
false Africa/Blantyre
false Africa/Brazzaville
false Africa/Bujumbura
-true Africa/Cairo
+false Africa/Cairo
false Africa/Casablanca
-true Africa/Ceuta
+false Africa/Ceuta
false Africa/Conakry
false Africa/Dakar
false Africa/Dar_es_Salaam
@@ -87,8 +87,8 @@ false Africa/Timbuktu
false Africa/Tripoli
false Africa/Tunis
false Africa/Windhoek
-true America/Adak
-true America/Anchorage
+false America/Adak
+false America/Anchorage
false America/Anguilla
false America/Antigua
false America/Araguaina
@@ -108,7 +108,7 @@ false America/Argentina/Ushuaia
false America/Aruba
true America/Asuncion
false America/Atikokan
-true America/Atka
+false America/Atka
false America/Bahia
false America/Bahia_Banderas
false America/Barbados
@@ -117,18 +117,18 @@ false America/Belize
false America/Blanc-Sablon
false America/Boa_Vista
false America/Bogota
-true America/Boise
+false America/Boise
false America/Buenos_Aires
-true America/Cambridge_Bay
+false America/Cambridge_Bay
false America/Campo_Grande
false America/Cancun
false America/Caracas
false America/Catamarca
false America/Cayenne
false America/Cayman
-true America/Chicago
+false America/Chicago
false America/Chihuahua
-true America/Ciudad_Juarez
+false America/Ciudad_Juarez
false America/Coral_Harbour
false America/Cordoba
false America/Costa_Rica
@@ -138,123 +138,123 @@ false America/Curacao
false America/Danmarkshavn
false America/Dawson
false America/Dawson_Creek
-true America/Denver
-true America/Detroit
+false America/Denver
+false America/Detroit
false America/Dominica
-true America/Edmonton
+false America/Edmonton
false America/Eirunepe
false America/El_Salvador
-true America/Ensenada
+false America/Ensenada
false America/Fort_Nelson
-true America/Fort_Wayne
+false America/Fort_Wayne
false America/Fortaleza
-true America/Glace_Bay
-true America/Godthab
-true America/Goose_Bay
-true America/Grand_Turk
+false America/Glace_Bay
+false America/Godthab
+false America/Goose_Bay
+false America/Grand_Turk
false America/Grenada
false America/Guadeloupe
false America/Guatemala
false America/Guayaquil
false America/Guyana
-true America/Halifax
-true America/Havana
+false America/Halifax
+false America/Havana
false America/Hermosillo
-true America/Indiana/Indianapolis
-true America/Indiana/Knox
-true America/Indiana/Marengo
-true America/Indiana/Petersburg
-true America/Indiana/Tell_City
-true America/Indiana/Vevay
-true America/Indiana/Vincennes
-true America/Indiana/Winamac
-true America/Indianapolis
-true America/Inuvik
-true America/Iqaluit
+false America/Indiana/Indianapolis
+false America/Indiana/Knox
+false America/Indiana/Marengo
+false America/Indiana/Petersburg
+false America/Indiana/Tell_City
+false America/Indiana/Vevay
+false America/Indiana/Vincennes
+false America/Indiana/Winamac
+false America/Indianapolis
+false America/Inuvik
+false America/Iqaluit
false America/Jamaica
false America/Jujuy
-true America/Juneau
-true America/Kentucky/Louisville
-true America/Kentucky/Monticello
-true America/Knox_IN
+false America/Juneau
+false America/Kentucky/Louisville
+false America/Kentucky/Monticello
+false America/Knox_IN
false America/Kralendijk
false America/La_Paz
false America/Lima
-true America/Los_Angeles
-true America/Louisville
+false America/Los_Angeles
+false America/Louisville
false America/Lower_Princes
false America/Maceio
false America/Managua
false America/Manaus
false America/Marigot
false America/Martinique
-true America/Matamoros
+false America/Matamoros
false America/Mazatlan
false America/Mendoza
-true America/Menominee
+false America/Menominee
false America/Merida
-true America/Metlakatla
+false America/Metlakatla
false America/Mexico_City
-true America/Miquelon
-true America/Moncton
+false America/Miquelon
+false America/Moncton
false America/Monterrey
false America/Montevideo
-true America/Montreal
+false America/Montreal
false America/Montserrat
-true America/Nassau
-true America/New_York
-true America/Nipigon
-true America/Nome
+false America/Nassau
+false America/New_York
+false America/Nipigon
+false America/Nome
false America/Noronha
-true America/North_Dakota/Beulah
-true America/North_Dakota/Center
-true America/North_Dakota/New_Salem
-true America/Nuuk
-true America/Ojinaga
+false America/North_Dakota/Beulah
+false America/North_Dakota/Center
+false America/North_Dakota/New_Salem
+false America/Nuuk
+false America/Ojinaga
false America/Panama
-true America/Pangnirtung
+false America/Pangnirtung
false America/Paramaribo
false America/Phoenix
-true America/Port-au-Prince
+false America/Port-au-Prince
false America/Port_of_Spain
false America/Porto_Acre
false America/Porto_Velho
false America/Puerto_Rico
false America/Punta_Arenas
-true America/Rainy_River
-true America/Rankin_Inlet
+false America/Rainy_River
+false America/Rankin_Inlet
false America/Recife
false America/Regina
-true America/Resolute
+false America/Resolute
false America/Rio_Branco
false America/Rosario
-true America/Santa_Isabel
+false America/Santa_Isabel
false America/Santarem
true America/Santiago
false America/Santo_Domingo
false America/Sao_Paulo
-true America/Scoresbysund
-true America/Shiprock
-true America/Sitka
+false America/Scoresbysund
+false America/Shiprock
+false America/Sitka
false America/St_Barthelemy
-true America/St_Johns
+false America/St_Johns
false America/St_Kitts
false America/St_Lucia
false America/St_Thomas
false America/St_Vincent
false America/Swift_Current
false America/Tegucigalpa
-true America/Thule
-true America/Thunder_Bay
-true America/Tijuana
-true America/Toronto
+false America/Thule
+false America/Thunder_Bay
+false America/Tijuana
+false America/Toronto
false America/Tortola
-true America/Vancouver
+false America/Vancouver
false America/Virgin
false America/Whitehorse
-true America/Winnipeg
-true America/Yakutat
-true America/Yellowknife
+false America/Winnipeg
+false America/Yakutat
+false America/Yellowknife
false Antarctica/Casey
false Antarctica/Davis
false Antarctica/DumontDUrville
@@ -265,9 +265,9 @@ false Antarctica/Palmer
false Antarctica/Rothera
true Antarctica/South_Pole
false Antarctica/Syowa
-true Antarctica/Troll
+false Antarctica/Troll
false Antarctica/Vostok
-true Arctic/Longyearbyen
+false Arctic/Longyearbyen
false Asia/Aden
false Asia/Almaty
false Asia/Amman
@@ -282,7 +282,7 @@ false Asia/Bahrain
false Asia/Baku
false Asia/Bangkok
false Asia/Barnaul
-true Asia/Beirut
+false Asia/Beirut
false Asia/Bishkek
false Asia/Brunei
false Asia/Calcutta
@@ -297,10 +297,10 @@ false Asia/Dhaka
false Asia/Dili
false Asia/Dubai
false Asia/Dushanbe
-true Asia/Famagusta
-true Asia/Gaza
+false Asia/Famagusta
+false Asia/Gaza
false Asia/Harbin
-true Asia/Hebron
+false Asia/Hebron
false Asia/Ho_Chi_Minh
false Asia/Hong_Kong
false Asia/Hovd
@@ -308,7 +308,7 @@ false Asia/Irkutsk
false Asia/Istanbul
false Asia/Jakarta
false Asia/Jayapura
-true Asia/Jerusalem
+false Asia/Jerusalem
false Asia/Kabul
false Asia/Kamchatka
false Asia/Karachi
@@ -327,7 +327,7 @@ false Asia/Magadan
false Asia/Makassar
false Asia/Manila
false Asia/Muscat
-true Asia/Nicosia
+false Asia/Nicosia
false Asia/Novokuznetsk
false Asia/Novosibirsk
false Asia/Omsk
@@ -351,7 +351,7 @@ false Asia/Taipei
false Asia/Tashkent
false Asia/Tbilisi
false Asia/Tehran
-true Asia/Tel_Aviv
+false Asia/Tel_Aviv
false Asia/Thimbu
false Asia/Thimphu
false Asia/Tokyo
@@ -367,14 +367,14 @@ false Asia/Yakutsk
false Asia/Yangon
false Asia/Yekaterinburg
false Asia/Yerevan
-true Atlantic/Azores
-true Atlantic/Bermuda
-true Atlantic/Canary
+false Atlantic/Azores
+false Atlantic/Bermuda
+false Atlantic/Canary
false Atlantic/Cape_Verde
-true Atlantic/Faeroe
-true Atlantic/Faroe
-true Atlantic/Jan_Mayen
-true Atlantic/Madeira
+false Atlantic/Faeroe
+false Atlantic/Faroe
+false Atlantic/Jan_Mayen
+false Atlantic/Madeira
false Atlantic/Reykjavik
false Atlantic/South_Georgia
false Atlantic/St_Helena
@@ -431,19 +431,19 @@ true CLST
true CLT
false COT
false CST
-true CST6CDT
+false CST6CDT
false CXT
-true Canada/Atlantic
-true Canada/Central
-true Canada/Eastern
-true Canada/Mountain
-true Canada/Newfoundland
-true Canada/Pacific
+false Canada/Atlantic
+false Canada/Central
+false Canada/Eastern
+false Canada/Mountain
+false Canada/Newfoundland
+false Canada/Pacific
false Canada/Saskatchewan
false Canada/Yukon
true Chile/Continental
true Chile/EasterIsland
-true Cuba
+false Cuba
false DAVT
false DDUT
true EASST
@@ -456,9 +456,9 @@ true EETDST
true EGST
false EGT
false EST
-true EST5EDT
-true Egypt
-false Eire
+false EST5EDT
+false Egypt
+true Eire
false Etc/GMT
false Etc/GMT+0
false Etc/GMT+1
@@ -494,70 +494,70 @@ false Etc/UCT
false Etc/UTC
false Etc/Universal
false Etc/Zulu
-true Europe/Amsterdam
-true Europe/Andorra
+false Europe/Amsterdam
+false Europe/Andorra
false Europe/Astrakhan
-true Europe/Athens
-true Europe/Belfast
-true Europe/Belgrade
-true Europe/Berlin
-true Europe/Bratislava
-true Europe/Brussels
-true Europe/Bucharest
-true Europe/Budapest
-true Europe/Busingen
-true Europe/Chisinau
-true Europe/Copenhagen
-false Europe/Dublin
-true Europe/Gibraltar
-true Europe/Guernsey
-true Europe/Helsinki
-true Europe/Isle_of_Man
+false Europe/Athens
+false Europe/Belfast
+false Europe/Belgrade
+false Europe/Berlin
+false Europe/Bratislava
+false Europe/Brussels
+false Europe/Bucharest
+false Europe/Budapest
+false Europe/Busingen
+false Europe/Chisinau
+false Europe/Copenhagen
+true Europe/Dublin
+false Europe/Gibraltar
+false Europe/Guernsey
+false Europe/Helsinki
+false Europe/Isle_of_Man
false Europe/Istanbul
-true Europe/Jersey
+false Europe/Jersey
false Europe/Kaliningrad
-true Europe/Kiev
+false Europe/Kiev
false Europe/Kirov
-true Europe/Kyiv
-true Europe/Lisbon
-true Europe/Ljubljana
-true Europe/London
-true Europe/Luxembourg
-true Europe/Madrid
-true Europe/Malta
-true Europe/Mariehamn
+false Europe/Kyiv
+false Europe/Lisbon
+false Europe/Ljubljana
+false Europe/London
+false Europe/Luxembourg
+false Europe/Madrid
+false Europe/Malta
+false Europe/Mariehamn
false Europe/Minsk
-true Europe/Monaco
+false Europe/Monaco
false Europe/Moscow
-true Europe/Nicosia
-true Europe/Oslo
-true Europe/Paris
-true Europe/Podgorica
-true Europe/Prague
-true Europe/Riga
-true Europe/Rome
+false Europe/Nicosia
+false Europe/Oslo
+false Europe/Paris
+false Europe/Podgorica
+false Europe/Prague
+false Europe/Riga
+false Europe/Rome
false Europe/Samara
-true Europe/San_Marino
-true Europe/Sarajevo
+false Europe/San_Marino
+false Europe/Sarajevo
false Europe/Saratov
false Europe/Simferopol
-true Europe/Skopje
-true Europe/Sofia
-true Europe/Stockholm
-true Europe/Tallinn
-true Europe/Tirane
-true Europe/Tiraspol
+false Europe/Skopje
+false Europe/Sofia
+false Europe/Stockholm
+false Europe/Tallinn
+false Europe/Tirane
+false Europe/Tiraspol
false Europe/Ulyanovsk
-true Europe/Uzhgorod
-true Europe/Vaduz
-true Europe/Vatican
-true Europe/Vienna
-true Europe/Vilnius
+false Europe/Uzhgorod
+false Europe/Vaduz
+false Europe/Vatican
+false Europe/Vienna
+false Europe/Vilnius
false Europe/Volgograd
-true Europe/Warsaw
-true Europe/Zagreb
-true Europe/Zaporozhye
-true Europe/Zurich
+false Europe/Warsaw
+false Europe/Zagreb
+false Europe/Zaporozhye
+false Europe/Zurich
false FET
true FJST
false FJT
@@ -568,8 +568,8 @@ false FNT
false Factory
false GALT
false GAMT
-true GB
-true GB-Eire
+false GB
+false GB-Eire
false GEST
false GET
false GFT
@@ -603,7 +603,7 @@ false Indian/Mauritius
false Indian/Mayotte
false Indian/Reunion
false Iran
-true Israel
+false Israel
false JAYT
false JST
false Jamaica
@@ -629,7 +629,7 @@ false MAWT
true MDT
true MEST
true MESZ
-true MET
+false MET
true METDST
false MEZ
false MHT
@@ -638,12 +638,12 @@ false MPT
true MSD
false MSK
false MST
-true MST7MDT
+false MST7MDT
true MUST
false MUT
false MVT
false MYT
-true Mexico/BajaNorte
+false Mexico/BajaNorte
false Mexico/BajaSur
false Mexico/General
true NDT
@@ -658,7 +658,7 @@ true NZ-CHAT
true NZDT
false NZST
false NZT
-true Navajo
+false Navajo
false OMSST
false OMST
true PDT
@@ -674,7 +674,7 @@ false PMST
false PONT
false PRC
false PST
-true PST8PDT
+false PST8PDT
false PWT
true PYST
true PYT
@@ -722,8 +722,8 @@ false Pacific/Truk
false Pacific/Wake
false Pacific/Wallis
false Pacific/Yap
-true Poland
-true Portugal
+false Poland
+false Portugal
false RET
false ROC
false ROK
@@ -744,17 +744,17 @@ false Turkey
false UCT
true ULAST
false ULAT
-true US/Alaska
-true US/Aleutian
+false US/Alaska
+false US/Aleutian
false US/Arizona
-true US/Central
-true US/East-Indiana
-true US/Eastern
+false US/Central
+false US/East-Indiana
+false US/Eastern
false US/Hawaii
-true US/Indiana-Starke
-true US/Michigan
-true US/Mountain
-true US/Pacific
+false US/Indiana-Starke
+false US/Michigan
+false US/Mountain
+false US/Pacific
false US/Samoa
false UT
false UTC
@@ -774,7 +774,7 @@ false WAKT
false WAST
false WAT
true WDT
-true WET
+false WET
true WETDST
false WFT
true WGST
@@ -801,9 +801,9 @@ false posix/Africa/Bissau
false posix/Africa/Blantyre
false posix/Africa/Brazzaville
false posix/Africa/Bujumbura
-true posix/Africa/Cairo
+false posix/Africa/Cairo
false posix/Africa/Casablanca
-true posix/Africa/Ceuta
+false posix/Africa/Ceuta
false posix/Africa/Conakry
false posix/Africa/Dakar
false posix/Africa/Dar_es_Salaam
@@ -842,8 +842,8 @@ false posix/Africa/Timbuktu
false posix/Africa/Tripoli
false posix/Africa/Tunis
false posix/Africa/Windhoek
-true posix/America/Adak
-true posix/America/Anchorage
+false posix/America/Adak
+false posix/America/Anchorage
false posix/America/Anguilla
false posix/America/Antigua
false posix/America/Araguaina
@@ -863,7 +863,7 @@ false posix/America/Argentina/Ushuaia
false posix/America/Aruba
true posix/America/Asuncion
false posix/America/Atikokan
-true posix/America/Atka
+false posix/America/Atka
false posix/America/Bahia
false posix/America/Bahia_Banderas
false posix/America/Barbados
@@ -872,18 +872,18 @@ false posix/America/Belize
false posix/America/Blanc-Sablon
false posix/America/Boa_Vista
false posix/America/Bogota
-true posix/America/Boise
+false posix/America/Boise
false posix/America/Buenos_Aires
-true posix/America/Cambridge_Bay
+false posix/America/Cambridge_Bay
false posix/America/Campo_Grande
false posix/America/Cancun
false posix/America/Caracas
false posix/America/Catamarca
false posix/America/Cayenne
false posix/America/Cayman
-true posix/America/Chicago
+false posix/America/Chicago
false posix/America/Chihuahua
-true posix/America/Ciudad_Juarez
+false posix/America/Ciudad_Juarez
false posix/America/Coral_Harbour
false posix/America/Cordoba
false posix/America/Costa_Rica
@@ -893,123 +893,123 @@ false posix/America/Curacao
false posix/America/Danmarkshavn
false posix/America/Dawson
false posix/America/Dawson_Creek
-true posix/America/Denver
-true posix/America/Detroit
+false posix/America/Denver
+false posix/America/Detroit
false posix/America/Dominica
-true posix/America/Edmonton
+false posix/America/Edmonton
false posix/America/Eirunepe
false posix/America/El_Salvador
-true posix/America/Ensenada
+false posix/America/Ensenada
false posix/America/Fort_Nelson
-true posix/America/Fort_Wayne
+false posix/America/Fort_Wayne
false posix/America/Fortaleza
-true posix/America/Glace_Bay
-true posix/America/Godthab
-true posix/America/Goose_Bay
-true posix/America/Grand_Turk
+false posix/America/Glace_Bay
+false posix/America/Godthab
+false posix/America/Goose_Bay
+false posix/America/Grand_Turk
false posix/America/Grenada
false posix/America/Guadeloupe
false posix/America/Guatemala
false posix/America/Guayaquil
false posix/America/Guyana
-true posix/America/Halifax
-true posix/America/Havana
+false posix/America/Halifax
+false posix/America/Havana
false posix/America/Hermosillo
-true posix/America/Indiana/Indianapolis
-true posix/America/Indiana/Knox
-true posix/America/Indiana/Marengo
-true posix/America/Indiana/Petersburg
-true posix/America/Indiana/Tell_City
-true posix/America/Indiana/Vevay
-true posix/America/Indiana/Vincennes
-true posix/America/Indiana/Winamac
-true posix/America/Indianapolis
-true posix/America/Inuvik
-true posix/America/Iqaluit
+false posix/America/Indiana/Indianapolis
+false posix/America/Indiana/Knox
+false posix/America/Indiana/Marengo
+false posix/America/Indiana/Petersburg
+false posix/America/Indiana/Tell_City
+false posix/America/Indiana/Vevay
+false posix/America/Indiana/Vincennes
+false posix/America/Indiana/Winamac
+false posix/America/Indianapolis
+false posix/America/Inuvik
+false posix/America/Iqaluit
false posix/America/Jamaica
false posix/America/Jujuy
-true posix/America/Juneau
-true posix/America/Kentucky/Louisville
-true posix/America/Kentucky/Monticello
-true posix/America/Knox_IN
+false posix/America/Juneau
+false posix/America/Kentucky/Louisville
+false posix/America/Kentucky/Monticello
+false posix/America/Knox_IN
false posix/America/Kralendijk
false posix/America/La_Paz
false posix/America/Lima
-true posix/America/Los_Angeles
-true posix/America/Louisville
+false posix/America/Los_Angeles
+false posix/America/Louisville
false posix/America/Lower_Princes
false posix/America/Maceio
false posix/America/Managua
false posix/America/Manaus
false posix/America/Marigot
false posix/America/Martinique
-true posix/America/Matamoros
+false posix/America/Matamoros
false posix/America/Mazatlan
false posix/America/Mendoza
-true posix/America/Menominee
+false posix/America/Menominee
false posix/America/Merida
-true posix/America/Metlakatla
+false posix/America/Metlakatla
false posix/America/Mexico_City
-true posix/America/Miquelon
-true posix/America/Moncton
+false posix/America/Miquelon
+false posix/America/Moncton
false posix/America/Monterrey
false posix/America/Montevideo
-true posix/America/Montreal
+false posix/America/Montreal
false posix/America/Montserrat
-true posix/America/Nassau
-true posix/America/New_York
-true posix/America/Nipigon
-true posix/America/Nome
+false posix/America/Nassau
+false posix/America/New_York
+false posix/America/Nipigon
+false posix/America/Nome
false posix/America/Noronha
-true posix/America/North_Dakota/Beulah
-true posix/America/North_Dakota/Center
-true posix/America/North_Dakota/New_Salem
-true posix/America/Nuuk
-true posix/America/Ojinaga
+false posix/America/North_Dakota/Beulah
+false posix/America/North_Dakota/Center
+false posix/America/North_Dakota/New_Salem
+false posix/America/Nuuk
+false posix/America/Ojinaga
false posix/America/Panama
-true posix/America/Pangnirtung
+false posix/America/Pangnirtung
false posix/America/Paramaribo
false posix/America/Phoenix
-true posix/America/Port-au-Prince
+false posix/America/Port-au-Prince
false posix/America/Port_of_Spain
false posix/America/Porto_Acre
false posix/America/Porto_Velho
false posix/America/Puerto_Rico
false posix/America/Punta_Arenas
-true posix/America/Rainy_River
-true posix/America/Rankin_Inlet
+false posix/America/Rainy_River
+false posix/America/Rankin_Inlet
false posix/America/Recife
false posix/America/Regina
-true posix/America/Resolute
+false posix/America/Resolute
false posix/America/Rio_Branco
false posix/America/Rosario
-true posix/America/Santa_Isabel
+false posix/America/Santa_Isabel
false posix/America/Santarem
true posix/America/Santiago
false posix/America/Santo_Domingo
false posix/America/Sao_Paulo
-true posix/America/Scoresbysund
-true posix/America/Shiprock
-true posix/America/Sitka
+false posix/America/Scoresbysund
+false posix/America/Shiprock
+false posix/America/Sitka
false posix/America/St_Barthelemy
-true posix/America/St_Johns
+false posix/America/St_Johns
false posix/America/St_Kitts
false posix/America/St_Lucia
false posix/America/St_Thomas
false posix/America/St_Vincent
false posix/America/Swift_Current
false posix/America/Tegucigalpa
-true posix/America/Thule
-true posix/America/Thunder_Bay
-true posix/America/Tijuana
-true posix/America/Toronto
+false posix/America/Thule
+false posix/America/Thunder_Bay
+false posix/America/Tijuana
+false posix/America/Toronto
false posix/America/Tortola
-true posix/America/Vancouver
+false posix/America/Vancouver
false posix/America/Virgin
false posix/America/Whitehorse
-true posix/America/Winnipeg
-true posix/America/Yakutat
-true posix/America/Yellowknife
+false posix/America/Winnipeg
+false posix/America/Yakutat
+false posix/America/Yellowknife
false posix/Antarctica/Casey
false posix/Antarctica/Davis
false posix/Antarctica/DumontDUrville
@@ -1020,9 +1020,9 @@ false posix/Antarctica/Palmer
false posix/Antarctica/Rothera
true posix/Antarctica/South_Pole
false posix/Antarctica/Syowa
-true posix/Antarctica/Troll
+false posix/Antarctica/Troll
false posix/Antarctica/Vostok
-true posix/Arctic/Longyearbyen
+false posix/Arctic/Longyearbyen
false posix/Asia/Aden
false posix/Asia/Almaty
false posix/Asia/Amman
@@ -1037,7 +1037,7 @@ false posix/Asia/Bahrain
false posix/Asia/Baku
false posix/Asia/Bangkok
false posix/Asia/Barnaul
-true posix/Asia/Beirut
+false posix/Asia/Beirut
false posix/Asia/Bishkek
false posix/Asia/Brunei
false posix/Asia/Calcutta
@@ -1052,10 +1052,10 @@ false posix/Asia/Dhaka
false posix/Asia/Dili
false posix/Asia/Dubai
false posix/Asia/Dushanbe
-true posix/Asia/Famagusta
-true posix/Asia/Gaza
+false posix/Asia/Famagusta
+false posix/Asia/Gaza
false posix/Asia/Harbin
-true posix/Asia/Hebron
+false posix/Asia/Hebron
false posix/Asia/Ho_Chi_Minh
false posix/Asia/Hong_Kong
false posix/Asia/Hovd
@@ -1063,7 +1063,7 @@ false posix/Asia/Irkutsk
false posix/Asia/Istanbul
false posix/Asia/Jakarta
false posix/Asia/Jayapura
-true posix/Asia/Jerusalem
+false posix/Asia/Jerusalem
false posix/Asia/Kabul
false posix/Asia/Kamchatka
false posix/Asia/Karachi
@@ -1082,7 +1082,7 @@ false posix/Asia/Magadan
false posix/Asia/Makassar
false posix/Asia/Manila
false posix/Asia/Muscat
-true posix/Asia/Nicosia
+false posix/Asia/Nicosia
false posix/Asia/Novokuznetsk
false posix/Asia/Novosibirsk
false posix/Asia/Omsk
@@ -1106,7 +1106,7 @@ false posix/Asia/Taipei
false posix/Asia/Tashkent
false posix/Asia/Tbilisi
false posix/Asia/Tehran
-true posix/Asia/Tel_Aviv
+false posix/Asia/Tel_Aviv
false posix/Asia/Thimbu
false posix/Asia/Thimphu
false posix/Asia/Tokyo
@@ -1122,14 +1122,14 @@ false posix/Asia/Yakutsk
false posix/Asia/Yangon
false posix/Asia/Yekaterinburg
false posix/Asia/Yerevan
-true posix/Atlantic/Azores
-true posix/Atlantic/Bermuda
-true posix/Atlantic/Canary
+false posix/Atlantic/Azores
+false posix/Atlantic/Bermuda
+false posix/Atlantic/Canary
false posix/Atlantic/Cape_Verde
-true posix/Atlantic/Faeroe
-true posix/Atlantic/Faroe
-true posix/Atlantic/Jan_Mayen
-true posix/Atlantic/Madeira
+false posix/Atlantic/Faeroe
+false posix/Atlantic/Faroe
+false posix/Atlantic/Jan_Mayen
+false posix/Atlantic/Madeira
false posix/Atlantic/Reykjavik
false posix/Atlantic/South_Georgia
false posix/Atlantic/St_Helena
@@ -1161,24 +1161,24 @@ false posix/Brazil/Acre
false posix/Brazil/DeNoronha
false posix/Brazil/East
false posix/Brazil/West
-true posix/CET
-true posix/CST6CDT
-true posix/Canada/Atlantic
-true posix/Canada/Central
-true posix/Canada/Eastern
-true posix/Canada/Mountain
-true posix/Canada/Newfoundland
-true posix/Canada/Pacific
+false posix/CET
+false posix/CST6CDT
+false posix/Canada/Atlantic
+false posix/Canada/Central
+false posix/Canada/Eastern
+false posix/Canada/Mountain
+false posix/Canada/Newfoundland
+false posix/Canada/Pacific
false posix/Canada/Saskatchewan
false posix/Canada/Yukon
true posix/Chile/Continental
true posix/Chile/EasterIsland
-true posix/Cuba
-true posix/EET
+false posix/Cuba
+false posix/EET
false posix/EST
-true posix/EST5EDT
-true posix/Egypt
-false posix/Eire
+false posix/EST5EDT
+false posix/Egypt
+true posix/Eire
false posix/Etc/GMT
false posix/Etc/GMT+0
false posix/Etc/GMT+1
@@ -1214,73 +1214,73 @@ false posix/Etc/UCT
false posix/Etc/UTC
false posix/Etc/Universal
false posix/Etc/Zulu
-true posix/Europe/Amsterdam
-true posix/Europe/Andorra
+false posix/Europe/Amsterdam
+false posix/Europe/Andorra
false posix/Europe/Astrakhan
-true posix/Europe/Athens
-true posix/Europe/Belfast
-true posix/Europe/Belgrade
-true posix/Europe/Berlin
-true posix/Europe/Bratislava
-true posix/Europe/Brussels
-true posix/Europe/Bucharest
-true posix/Europe/Budapest
-true posix/Europe/Busingen
-true posix/Europe/Chisinau
-true posix/Europe/Copenhagen
-false posix/Europe/Dublin
-true posix/Europe/Gibraltar
-true posix/Europe/Guernsey
-true posix/Europe/Helsinki
-true posix/Europe/Isle_of_Man
+false posix/Europe/Athens
+false posix/Europe/Belfast
+false posix/Europe/Belgrade
+false posix/Europe/Berlin
+false posix/Europe/Bratislava
+false posix/Europe/Brussels
+false posix/Europe/Bucharest
+false posix/Europe/Budapest
+false posix/Europe/Busingen
+false posix/Europe/Chisinau
+false posix/Europe/Copenhagen
+true posix/Europe/Dublin
+false posix/Europe/Gibraltar
+false posix/Europe/Guernsey
+false posix/Europe/Helsinki
+false posix/Europe/Isle_of_Man
false posix/Europe/Istanbul
-true posix/Europe/Jersey
+false posix/Europe/Jersey
false posix/Europe/Kaliningrad
-true posix/Europe/Kiev
+false posix/Europe/Kiev
false posix/Europe/Kirov
-true posix/Europe/Kyiv
-true posix/Europe/Lisbon
-true posix/Europe/Ljubljana
-true posix/Europe/London
-true posix/Europe/Luxembourg
-true posix/Europe/Madrid
-true posix/Europe/Malta
-true posix/Europe/Mariehamn
+false posix/Europe/Kyiv
+false posix/Europe/Lisbon
+false posix/Europe/Ljubljana
+false posix/Europe/London
+false posix/Europe/Luxembourg
+false posix/Europe/Madrid
+false posix/Europe/Malta
+false posix/Europe/Mariehamn
false posix/Europe/Minsk
-true posix/Europe/Monaco
+false posix/Europe/Monaco
false posix/Europe/Moscow
-true posix/Europe/Nicosia
-true posix/Europe/Oslo
-true posix/Europe/Paris
-true posix/Europe/Podgorica
-true posix/Europe/Prague
-true posix/Europe/Riga
-true posix/Europe/Rome
+false posix/Europe/Nicosia
+false posix/Europe/Oslo
+false posix/Europe/Paris
+false posix/Europe/Podgorica
+false posix/Europe/Prague
+false posix/Europe/Riga
+false posix/Europe/Rome
false posix/Europe/Samara
-true posix/Europe/San_Marino
-true posix/Europe/Sarajevo
+false posix/Europe/San_Marino
+false posix/Europe/Sarajevo
false posix/Europe/Saratov
false posix/Europe/Simferopol
-true posix/Europe/Skopje
-true posix/Europe/Sofia
-true posix/Europe/Stockholm
-true posix/Europe/Tallinn
-true posix/Europe/Tirane
-true posix/Europe/Tiraspol
+false posix/Europe/Skopje
+false posix/Europe/Sofia
+false posix/Europe/Stockholm
+false posix/Europe/Tallinn
+false posix/Europe/Tirane
+false posix/Europe/Tiraspol
false posix/Europe/Ulyanovsk
-true posix/Europe/Uzhgorod
-true posix/Europe/Vaduz
-true posix/Europe/Vatican
-true posix/Europe/Vienna
-true posix/Europe/Vilnius
+false posix/Europe/Uzhgorod
+false posix/Europe/Vaduz
+false posix/Europe/Vatican
+false posix/Europe/Vienna
+false posix/Europe/Vilnius
false posix/Europe/Volgograd
-true posix/Europe/Warsaw
-true posix/Europe/Zagreb
-true posix/Europe/Zaporozhye
-true posix/Europe/Zurich
+false posix/Europe/Warsaw
+false posix/Europe/Zagreb
+false posix/Europe/Zaporozhye
+false posix/Europe/Zurich
false posix/Factory
-true posix/GB
-true posix/GB-Eire
+false posix/GB
+false posix/GB-Eire
false posix/GMT
false posix/GMT+0
false posix/GMT-0
@@ -1301,22 +1301,22 @@ false posix/Indian/Mauritius
false posix/Indian/Mayotte
false posix/Indian/Reunion
false posix/Iran
-true posix/Israel
+false posix/Israel
false posix/Jamaica
false posix/Japan
false posix/Kwajalein
false posix/Libya
-true posix/MET
+false posix/MET
false posix/MST
-true posix/MST7MDT
-true posix/Mexico/BajaNorte
+false posix/MST7MDT
+false posix/Mexico/BajaNorte
false posix/Mexico/BajaSur
false posix/Mexico/General
true posix/NZ
true posix/NZ-CHAT
-true posix/Navajo
+false posix/Navajo
false posix/PRC
-true posix/PST8PDT
+false posix/PST8PDT
false posix/Pacific/Apia
true posix/Pacific/Auckland
false posix/Pacific/Bougainville
@@ -1361,31 +1361,31 @@ false posix/Pacific/Truk
false posix/Pacific/Wake
false posix/Pacific/Wallis
false posix/Pacific/Yap
-true posix/Poland
-true posix/Portugal
+false posix/Poland
+false posix/Portugal
false posix/ROC
false posix/ROK
false posix/Singapore
false posix/Turkey
false posix/UCT
-true posix/US/Alaska
-true posix/US/Aleutian
+false posix/US/Alaska
+false posix/US/Aleutian
false posix/US/Arizona
-true posix/US/Central
-true posix/US/East-Indiana
-true posix/US/Eastern
+false posix/US/Central
+false posix/US/East-Indiana
+false posix/US/Eastern
false posix/US/Hawaii
-true posix/US/Indiana-Starke
-true posix/US/Michigan
-true posix/US/Mountain
-true posix/US/Pacific
+false posix/US/Indiana-Starke
+false posix/US/Michigan
+false posix/US/Mountain
+false posix/US/Pacific
false posix/US/Samoa
false posix/UTC
false posix/Universal
false posix/W-SU
-true posix/WET
+false posix/WET
false posix/Zulu
-true posixrules
+false posixrules
@@ -1404,7 +1404,7 @@ true posixrules
13212||10|C|G
13212||-9223372036854775808|U|G
13212||10|U|G
- 779
+ 813
16384
postgres
@@ -4823,527 +4823,534 @@ true posixrules
standard public schema
1
- 779
- 2024-10-22.11:09:00
+ 813
+ 2024-11-11.11:36:42
2200
524
pg_database_owner
- 16601
- 778
+ 16696
+ 808
2
postgres
- 16571
- 778
+ 16666
+ 808
2
postgres
- 16557
- 778
+ 16652
+ 808
2
postgres
- 16586
- 778
+ 16681
+ 808
2
postgres
- 16616
- 778
+ 16711
+ 808
2
postgres
- 16564
- 778
+ 16659
+ 808
2
postgres
- 16552
- 777
+ 16647
+ 807
2
postgres
1
1
- 778
+ 808
uuid|0s
2950
1
2
- 778
+ 808
uuid|0s
2950
1
3
- 778
+ 808
uuid|0s
2950
1
4
- 778
+ 808
uuid|0s
2950
5
- 778
+ 808
uuid|0s
2950
1
6
- 778
+ 808
uuid|0s
2950
UserId1
- 16606
+ 16701
restrict
- 778
+ 808
1
- 16564
+ 16659
UserId2
- 16611
+ 16706
restrict
- 778
+ 808
1
- 16564
+ 16659
PinnedMessageId1
- 16642
+ 16737
cascade
- 778
+ 808
1
- 16616
+ 16711
Id
- 16604
+ 16699
1
- 778
+ 808
1
403
UserId1
- 16634
- 778
+ 16729
+ 808
403
UserId2
- 16635
- 778
+ 16730
+ 808
403
PinnedMessageId1
- 16633
- 778
+ 16728
+ 808
403
- 16605
+ 16700
1
- 778
- 16604
+ 808
+ 16699
1
1
- 778
+ 808
uuid|0s
2950
1
2
- 778
+ 808
uuid|0s
2950
1
3
- 778
+ 808
uuid|0s
2950
1
4
- 778
+ 808
timestamp with time zone|0s
1184
1
5
- 778
+ 808
boolean|0s
16
ConferenceId
- 16576
- 778
+ 16671
+ 808
1
- 16557
+ 16652
MemberId
- 16581
- 778
+ 16676
+ 808
1
- 16564
+ 16659
Id
- 16574
+ 16669
1
- 778
+ 808
1
403
ConferenceId
- 16636
- 778
+ 16731
+ 808
403
MemberId
- 16637
- 778
+ 16732
+ 808
403
- 16575
+ 16670
1
- 778
- 16574
+ 808
+ 16669
1
1
- 778
+ 808
uuid|0s
2950
2
- 778
+ 808
text|0s
25
1
3
- 778
+ 808
integer|0s
23
4
- 778
+ 808
text|0s
25
Id
- 16562
+ 16657
1
- 778
+ 808
1
403
- 16563
+ 16658
1
- 778
- 16562
+ 808
+ 16657
1
1
- 778
+ 808
uuid|0s
2950
1
2
- 778
+ 808
uuid|0s
2950
1
3
- 778
+ 808
uuid|0s
2950
1
4
- 778
+ 808
timestamp with time zone|0s
1184
UserId
- 16596
+ 16691
cascade
- 778
+ 808
1
- 16564
+ 16659
ContactUserId
- 16591
+ 16686
restrict
- 778
+ 808
1
- 16564
+ 16659
Id
- 16589
+ 16684
1
- 778
+ 808
1
403
UserId
- 16639
- 778
+ 16734
+ 808
403
ContactUserId
- 16638
- 778
+ 16733
+ 808
403
- 16590
+ 16685
1
- 778
- 16589
+ 808
+ 16684
1
1
- 778
+ 808
uuid|0s
2950
1
2
- 778
+ 808
uuid|0s
2950
3
- 778
+ 808
uuid|0s
2950
4
- 778
+ 808
text|0s
25
5
- 778
+ 808
text|0s
25
6
- 778
+ 808
text|0s
25
1
7
- 778
+ 808
boolean|0s
16
1
8
- 778
+ 808
timestamp with time zone|0s
1184
ChatRoomId
- 16623
- 778
+ 16718
+ 808
1
- 16601
+ 16696
SenderId
- 16628
- 778
+ 16723
+ 808
1
- 16564
+ 16659
Id
- 16621
+ 16716
1
- 778
+ 808
1
403
ChatRoomId
- 16640
- 778
+ 16735
+ 808
403
SenderId
- 16641
- 778
+ 16736
+ 808
403
- 16622
+ 16717
1
- 778
- 16621
+ 808
+ 16716
1
1
- 778
+ 808
uuid|0s
2950
1
2
- 778
+ 808
varchar(100)|0s
1043
1
3
- 778
+ 808
varchar(100)|0s
1043
1
4
- 778
+ 808
text|0s
25
1
5
- 778
+ 808
text|0s
25
1
6
- 778
+ 808
text|0s
25
7
- 778
+ 808
text|0s
25
-
+
1
8
- 778
+ 808
timestamp with time zone|0s
1184
-
+
+ 1
+ 9
+ 808
+ timestamp with time zone|0s
+ 1184
+
+
Id
- 16569
+ 16664
1
- 778
+ 808
1
403
-
- 16570
+
+ 16665
1
- 778
- 16569
+ 808
+ 16664
-
+
1
1
- 777
+ 807
varchar(150)|0s
1043
-
+
1
2
- 777
+ 807
varchar(32)|0s
1043
-
+
MigrationId
- 16555
+ 16650
1
- 777
+ 807
1
403
default
100
pg_catalog
-
- 16556
+
+ 16651
1
- 777
- 16555
+ 807
+ 16650
\ No newline at end of file
diff --git a/.idea/.idea.Eclipse/.idea/dataSources/30725304-56d3-46dd-a0f3-bd883f7c02e7/storage_v2/_src_/database/railway.Hf4GOg/schema/public.abK9xQ.meta b/.idea/.idea.Eclipse/.idea/dataSources/30725304-56d3-46dd-a0f3-bd883f7c02e7/storage_v2/_src_/database/railway.Hf4GOg/schema/public.abK9xQ.meta
index 10d5d85..ba89736 100644
--- a/.idea/.idea.Eclipse/.idea/dataSources/30725304-56d3-46dd-a0f3-bd883f7c02e7/storage_v2/_src_/database/railway.Hf4GOg/schema/public.abK9xQ.meta
+++ b/.idea/.idea.Eclipse/.idea/dataSources/30725304-56d3-46dd-a0f3-bd883f7c02e7/storage_v2/_src_/database/railway.Hf4GOg/schema/public.abK9xQ.meta
@@ -1,2 +1,2 @@
#n:public
-! [779, 0, null, null, -2147483648, -2147483648]
+! [813, 0, null, null, -2147483648, -2147483648]
diff --git a/.idea/.idea.Eclipse/.idea/workspace.xml b/.idea/.idea.Eclipse/.idea/workspace.xml
index 9fdba4e..53c63c5 100644
--- a/.idea/.idea.Eclipse/.idea/workspace.xml
+++ b/.idea/.idea.Eclipse/.idea/workspace.xml
@@ -8,7 +8,17 @@
-
+
+
+
+
+
+
+
+
+
+
+
@@ -18,6 +28,11 @@
+
{
@@ -36,10 +51,10 @@
+
-
+
-
@@ -60,7 +75,7 @@
".NET Launch Settings Profile.Eclipse: http.executor": "Run",
"RunOnceActivity.ShowReadmeOnStart": "true",
"SONARLINT_PRECOMMIT_ANALYSIS": "true",
- "git-widget-placeholder": "master",
+ "git-widget-placeholder": "dev",
"node.js.detected.package.eslint": "true",
"node.js.detected.package.tslint": "true",
"node.js.selected.package.eslint": "(autodetect)",
@@ -191,111 +206,12 @@
-
-
-
-
- 1728296854777
-
-
-
- 1728296854777
-
-
-
- 1728304888534
-
-
-
- 1728304888534
-
-
-
- 1728647729467
-
-
-
- 1728647729467
-
-
-
- 1728647755020
-
-
-
- 1728647755020
-
-
-
- 1728647762931
-
-
-
- 1728647762931
-
-
-
- 1728647775626
-
-
-
- 1728647775626
-
-
-
- 1728647782589
-
-
-
- 1728647782589
-
-
-
- 1728647806154
-
-
-
- 1728647806154
-
-
-
- 1728975287561
-
-
-
- 1728975287561
-
-
-
- 1728977616727
-
-
-
- 1728977616727
-
-
-
- 1729587606271
-
-
-
- 1729587606271
-
-
-
- 1729587629124
-
-
-
- 1729587629124
-
-
-
- 1729587636316
-
-
-
- 1729587636316
+
+
+
+
+
+
@@ -529,7 +445,167 @@
1730890876994
-
+
+
+ 1730891360482
+
+
+
+ 1730891360482
+
+
+
+ 1730892375660
+
+
+
+ 1730892375660
+
+
+
+ 1730892398830
+
+
+
+ 1730892398830
+
+
+
+ 1730893319250
+
+
+
+ 1730893319250
+
+
+
+ 1730893547245
+
+
+
+ 1730893547245
+
+
+
+ 1730893576972
+
+
+
+ 1730893576972
+
+
+
+ 1731064088312
+
+
+
+ 1731064088312
+
+
+
+ 1731064193682
+
+
+
+ 1731064193682
+
+
+
+ 1731064772468
+
+
+
+ 1731064772468
+
+
+
+ 1731064897462
+
+
+
+ 1731064897462
+
+
+
+ 1731300947100
+
+
+
+ 1731300947100
+
+
+
+ 1731300957869
+
+
+
+ 1731300957869
+
+
+
+ 1731300987750
+
+
+
+ 1731300987751
+
+
+
+ 1731301000856
+
+
+
+ 1731301000856
+
+
+
+ 1731301019180
+
+
+
+ 1731301019181
+
+
+
+ 1731301043281
+
+
+
+ 1731301043281
+
+
+
+ 1731301083185
+
+
+
+ 1731301083185
+
+
+
+ 1731301096693
+
+
+
+ 1731301096693
+
+
+
+ 1731475545334
+
+
+
+ 1731475545335
+
+
+
+ 1731475577671
+
+
+
+ 1731475577671
+
+
@@ -539,24 +615,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -564,7 +622,57 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ file://$PROJECT_DIR$/Eclipse/Repositories/ContactRepository.cs
+ 50
+
+
+
+
+
+
+
+
+
+
+
+ file://$PROJECT_DIR$/Eclipse/Middlewares/LastSeenUpdateMiddleware.cs
+ 19
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Eclipse/Controllers/ContactController.cs b/Eclipse/Controllers/ContactController.cs
new file mode 100644
index 0000000..76a1fe7
--- /dev/null
+++ b/Eclipse/Controllers/ContactController.cs
@@ -0,0 +1,72 @@
+using Eclipse.Middlewares;
+using Eclipse.Models;
+using Eclipse.Models.Dto;
+using Eclipse.Repositories.Interfaces;
+using Eclipse.Services.Interfaces;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Mvc;
+
+namespace Eclipse.Controllers;
+
+[Route("api/contact")]
+[ApiController]
+public class ContactController : ControllerBase
+{
+ private readonly IContactService _contactService;
+ private readonly IContactRepository _contactRepository;
+ private readonly string _successMessage = "Success";
+
+ public ContactController(IContactService contactService, IContactRepository contactRepository)
+ {
+ _contactService = contactService;
+ _contactRepository = contactRepository;
+ }
+ [Authorize]
+ [HttpGet]
+ public async Task?>> GetAllContacts([FromQuery] string? sortOrder = null)
+ {
+ var userIdClaim = User.FindFirst("UserId")?.Value;
+ if (userIdClaim == null) throw new UnauthorizedAccessException();
+
+ var userId = Guid.Parse(userIdClaim);
+
+ List? contacts;
+
+ if (!string.IsNullOrWhiteSpace(sortOrder))
+ {
+ contacts = await _contactService.SortContactsByLastOnline(userId, sortOrder);
+ }
+ else
+ {
+ contacts = await _contactService.GetMappedListOfContacts(userId);
+ }
+
+ return new ApiResponse?> { Message = "Success", Data = contacts };
+ }
+
+ [Authorize]
+ [HttpPost]
+ [Route("{contactId}/add")]
+ public async Task> AddContact(Guid contactId)
+ {
+ var userIdClaim = User.FindFirst("UserId");
+ if (userIdClaim is { Value: null }) throw new UnauthorizedAccessException();
+
+ var userId = Guid.Parse(userIdClaim.Value);
+ var newContact = await _contactService.MapResponseOfNewContact(userId, contactId);
+ return new ApiResponse{ Message = _successMessage, Data = newContact };
+ }
+
+ [Authorize]
+ [HttpDelete]
+ [Route("{contactId}/remove")]
+ public async Task> RemoveContact(Guid contactId)
+ {
+ var userIdClaim = User.FindFirst("UserId");
+ if (userIdClaim is { Value: null }) throw new UnauthorizedAccessException();
+
+ var userId = Guid.Parse(userIdClaim.Value);
+ await _contactRepository.RemoveFromContacts(userId, contactId);
+ return new ApiResponse