[CalendarServer-changes] [13630] CalendarServer/branches/users/gaya/groupsharee
source_changes at macosforge.org
source_changes at macosforge.org
Tue Jun 10 20:50:42 PDT 2014
Revision: 13630
http://trac.calendarserver.org//changeset/13630
Author: gaya at apple.com
Date: 2014-06-10 20:50:42 -0700 (Tue, 10 Jun 2014)
Log Message:
-----------
merge from trunk to r13629
Revision Links:
--------------
http://trac.calendarserver.org//changeset/13629
Modified Paths:
--------------
CalendarServer/branches/users/gaya/groupsharee/bin/pyflakes
CalendarServer/branches/users/gaya/groupsharee/bin/python
CalendarServer/branches/users/gaya/groupsharee/bin/sim
CalendarServer/branches/users/gaya/groupsharee/bin/test
CalendarServer/branches/users/gaya/groupsharee/bin/trial
CalendarServer/branches/users/gaya/groupsharee/bin/twistd
CalendarServer/branches/users/gaya/groupsharee/calendarserver/dashboard_service.py
CalendarServer/branches/users/gaya/groupsharee/calendarserver/provision/root.py
CalendarServer/branches/users/gaya/groupsharee/calendarserver/tap/caldav.py
CalendarServer/branches/users/gaya/groupsharee/calendarserver/tap/test/test_caldav.py
CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/calverify.py
CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/cmdline.py
CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/dashboard.py
CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/gateway.py
CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/managetimezones.py
CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/migrate_verify.py
CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/resources.py
CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/test/test_gateway.py
CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/test/test_principals.py
CalendarServer/branches/users/gaya/groupsharee/conf/auth/generate_test_accounts.py
CalendarServer/branches/users/gaya/groupsharee/conf/caldavd-apple.plist
CalendarServer/branches/users/gaya/groupsharee/contrib/tools/monitoranalysis.py
CalendarServer/branches/users/gaya/groupsharee/requirements-dev.txt
CalendarServer/branches/users/gaya/groupsharee/requirements-stable.txt
CalendarServer/branches/users/gaya/groupsharee/support/_cache_deps
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/directory/util.py
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/directorybackedaddressbook.py
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/ical.py
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/memcacheclient.py
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/resource.py
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/scheduling_store/caldav/resource.py
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/sharing.py
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/stdconfig.py
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/storebridge.py
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/test/test_icalendar.py
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/test/test_resource.py
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/timezonestdservice.py
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/upgrade.py
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/links.txt
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/timezones.xml
CalendarServer/branches/users/gaya/groupsharee/txdav/base/propertystore/base.py
CalendarServer/branches/users/gaya/groupsharee/txdav/base/propertystore/sql.py
CalendarServer/branches/users/gaya/groupsharee/txdav/base/propertystore/test/base.py
CalendarServer/branches/users/gaya/groupsharee/txdav/base/propertystore/test/test_sql.py
CalendarServer/branches/users/gaya/groupsharee/txdav/base/propertystore/test/test_xattr.py
CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/file.py
CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/scheduling/icaldiff.py
CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/scheduling/work.py
CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/sql.py
CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/test/test_implicit.py
CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/test/test_sql.py
CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/test/test_sql_sharing.py
CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/icalendarstore.py
CalendarServer/branches/users/gaya/groupsharee/txdav/carddav/datastore/file.py
CalendarServer/branches/users/gaya/groupsharee/txdav/carddav/datastore/query/filter.py
CalendarServer/branches/users/gaya/groupsharee/txdav/carddav/datastore/sql.py
CalendarServer/branches/users/gaya/groupsharee/txdav/common/datastore/file.py
CalendarServer/branches/users/gaya/groupsharee/txdav/common/datastore/sql.py
CalendarServer/branches/users/gaya/groupsharee/txdav/common/datastore/sql_external.py
CalendarServer/branches/users/gaya/groupsharee/txdav/common/datastore/test/accounts/accounts.xml
CalendarServer/branches/users/gaya/groupsharee/txdav/dps/client.py
CalendarServer/branches/users/gaya/groupsharee/txdav/dps/commands.py
CalendarServer/branches/users/gaya/groupsharee/txdav/dps/json.py
CalendarServer/branches/users/gaya/groupsharee/txdav/dps/server.py
CalendarServer/branches/users/gaya/groupsharee/txdav/dps/test/test_client.py
CalendarServer/branches/users/gaya/groupsharee/txdav/who/augment.py
CalendarServer/branches/users/gaya/groupsharee/txdav/who/directory.py
CalendarServer/branches/users/gaya/groupsharee/txdav/who/opendirectory.py
CalendarServer/branches/users/gaya/groupsharee/txdav/who/test/support.py
CalendarServer/branches/users/gaya/groupsharee/txdav/who/vcard.py
CalendarServer/branches/users/gaya/groupsharee/txweb2/dav/method/report_expand.py
Added Paths:
-----------
CalendarServer/branches/users/gaya/groupsharee/contrib/od/
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/AUS Central Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/AUS Eastern Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Afghanistan Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Alaskan Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Arab Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Arabian Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Arabic Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Argentina Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Atlantic Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Azerbaijan Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Azores Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Bahia Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Bangladesh Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Canada Central Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Cape Verde Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Caucasus Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Cen. Australia Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central America Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central Asia Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central Brazilian Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central Europe Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central European Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central Pacific Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central Standard Time (Mexico).ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/China Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Dateline Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/E. Africa Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/E. Australia Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/E. South America Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Eastern Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Egypt Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Ekaterinburg Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/FLE Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Fiji Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/GMT Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/GTB Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Georgian Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Greenland Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Greenwich Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Hawaiian Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/India Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Iran Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Israel Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Jordan Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Kaliningrad Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Korea Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Libya Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Magadan Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Mauritius Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Middle East Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Montevideo Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Morocco Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Mountain Standard Time (Mexico).ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Mountain Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Myanmar Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/N. Central Asia Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Namibia Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Nepal Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/New Zealand Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Newfoundland Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/North Asia East Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/North Asia Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Pacific SA Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Pacific Standard Time (Mexico).ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Pacific Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Pakistan Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Paraguay Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Romance Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Russian Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/SA Eastern Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/SA Pacific Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/SA Western Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/SE Asia Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Samoa Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Singapore Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/South Africa Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Sri Lanka Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Syria Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Taipei Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Tasmania Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Tokyo Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Tonga Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Turkey Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/US Eastern Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/US Mountain Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/UTC+12.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/UTC-02.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/UTC-11.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Ulaanbaatar Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Venezuela Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Vladivostok Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/W. Australia Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/W. Central Africa Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/W. Europe Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/West Asia Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/West Pacific Standard Time.ics
CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Yakutsk Standard Time.ics
Modified: CalendarServer/branches/users/gaya/groupsharee/bin/pyflakes
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/bin/pyflakes 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/bin/pyflakes 2014-06-11 03:50:42 UTC (rev 13630)
@@ -24,7 +24,8 @@
. "${wd}/bin/_build.sh";
-init_build > /dev/null;
+do_setup="false";
+develop > /dev/null;
if [ $# -eq 0 ]; then
set - calendarserver contrib twisted twistedcaldav txdav txweb2;
Modified: CalendarServer/branches/users/gaya/groupsharee/bin/python
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/bin/python 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/bin/python 2014-06-11 03:50:42 UTC (rev 13630)
@@ -25,7 +25,6 @@
. "${wd}/bin/_build.sh";
do_setup="false";
-
develop > /dev/null;
exec "${python}" "$@";
Modified: CalendarServer/branches/users/gaya/groupsharee/bin/sim
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/bin/sim 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/bin/sim 2014-06-11 03:50:42 UTC (rev 13630)
@@ -24,7 +24,6 @@
. "${wd}/bin/_build.sh";
-init_build > /dev/null;
do_setup="false";
develop > /dev/null;
Modified: CalendarServer/branches/users/gaya/groupsharee/bin/test
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/bin/test 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/bin/test 2014-06-11 03:50:42 UTC (rev 13630)
@@ -96,8 +96,7 @@
# Dependencies
#
-c_dependencies >> "${dev_home}/setup.log";
-py_dependencies >> "${dev_home}/setup.log";
+develop > /dev/null "${dev_home}/setup.log";
Modified: CalendarServer/branches/users/gaya/groupsharee/bin/trial
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/bin/trial 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/bin/trial 2014-06-11 03:50:42 UTC (rev 13630)
@@ -24,7 +24,6 @@
. "${wd}/bin/_build.sh";
-init_build > /dev/null;
do_setup="false";
develop > /dev/null;
Modified: CalendarServer/branches/users/gaya/groupsharee/bin/twistd
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/bin/twistd 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/bin/twistd 2014-06-11 03:50:42 UTC (rev 13630)
@@ -24,7 +24,8 @@
. "${wd}/bin/_build.sh";
-init_build > /dev/null;
+do_setup="false";
+develop > /dev/null;
exec "${python}" \
-c "\
Modified: CalendarServer/branches/users/gaya/groupsharee/calendarserver/dashboard_service.py
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/calendarserver/dashboard_service.py 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/calendarserver/dashboard_service.py 2014-06-11 03:50:42 UTC (rev 13630)
@@ -28,6 +28,7 @@
a server admin or developer would like to keep an eye on.
"""
+
class DashboardProtocol (LineReceiver):
"""
A protocol that receives a line containing a JSON object representing a request,
@@ -153,7 +154,21 @@
return succeed({"workers": loads, "level": level})
+ def data_directory(self):
+ """
+ Return a summary of directory service calls.
+ @return: the JSON result.
+ @rtype: L{str}
+ """
+ directory = self.factory.store.directoryService()
+ if hasattr(directory, "stats"):
+ return succeed(directory.stats())
+ else:
+ return succeed({})
+
+
+
class DashboardServer(Factory):
protocol = DashboardProtocol
Modified: CalendarServer/branches/users/gaya/groupsharee/calendarserver/provision/root.py
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/calendarserver/provision/root.py 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/calendarserver/provision/root.py 2014-06-11 03:50:42 UTC (rev 13630)
@@ -364,12 +364,7 @@
.format(agent)
))
- if (
- config.EnableResponseCache and
- request.method == "PROPFIND" and
- not getattr(request, "notInCache", False) and
- len(segments) > 1
- ):
+ if not hasattr(request, "authzUser"):
try:
authnUser, authzUser = yield self.authenticate(request)
request.authnUser = authnUser
@@ -381,6 +376,13 @@
)
raise HTTPError(response)
+ if (
+ config.EnableResponseCache and
+ request.method == "PROPFIND" and
+ not getattr(request, "notInCache", False) and
+ len(segments) > 1
+ ):
+
try:
if not getattr(request, "checkingCache", False):
request.checkingCache = True
Modified: CalendarServer/branches/users/gaya/groupsharee/calendarserver/tap/caldav.py
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/calendarserver/tap/caldav.py 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/calendarserver/tap/caldav.py 2014-06-11 03:50:42 UTC (rev 13630)
@@ -38,6 +38,8 @@
from zope.interface import implements
+from twistedcaldav.stdconfig import config
+
from twisted.python.log import FileLogObserver, ILogObserver
from twisted.python.logfile import LogFile
from twisted.python.usage import Options, UsageError
@@ -70,6 +72,7 @@
from twext.enterprise.jobqueue import WorkerFactory as QueueWorkerFactory
from twext.application.service import ReExecService
from txdav.who.groups import GroupCacherPollingWork
+from calendarserver.tools.purge import PrincipalPurgePollingWork
from txweb2.channel.http import (
LimitingHTTPFactory, SSLRedirectRequest, HTTPChannel
@@ -96,7 +99,7 @@
from txdav.who.groups import GroupCacher
from twistedcaldav import memcachepool
-from twistedcaldav.config import config, ConfigurationError
+from twistedcaldav.config import ConfigurationError
from twistedcaldav.localization import processLocalizationFiles
from twistedcaldav.stdconfig import DEFAULT_CONFIG, DEFAULT_CONFIG_FILE
from twistedcaldav.upgrade import (
@@ -566,7 +569,7 @@
"""
log = Logger()
- def __init__(self, store, doImip, doGroupCaching):
+ def __init__(self, store, doImip, doGroupCaching, doPrincipalPurging):
"""
@param store: the Store to use for enqueuing work
@param doImip: whether to schedule imip polling
@@ -577,6 +580,7 @@
self.store = store
self.doImip = doImip
self.doGroupCaching = doGroupCaching
+ self.doPrincipalPurging = doPrincipalPurging
@inlineCallbacks
@@ -595,6 +599,11 @@
self.store,
int(config.LogID) if config.LogID else 5
)
+ if self.doPrincipalPurging:
+ yield PrincipalPurgePollingWork.initialSchedule(
+ self.store,
+ int(config.LogID) if config.LogID else 5
+ )
yield FindMinValidRevisionWork.initialSchedule(
self.store,
int(config.LogID) if config.LogID else 5
@@ -604,15 +613,8 @@
int(config.LogID) if config.LogID else 5
)
- # FIXME: uncomment this when purge is working
- # from calendarserver.tools.purge import scheduleNextPrincipalPurgeUpdate
- # yield PrincipalPurgePollingWork.initialSchedule(
- # self.store,
- # int(config.LogID) if config.LogID else 5
- # )
-
class PreProcessingService(Service):
"""
A Service responsible for running any work that needs to be finished prior
@@ -1098,7 +1100,8 @@
WorkSchedulingService(
store,
config.Scheduling.iMIP.Enabled,
- (config.GroupCaching.Enabled and config.GroupCaching.EnableUpdater)
+ (config.GroupCaching.Enabled and config.GroupCaching.EnableUpdater),
+ config.AutomaticPurging.Enabled
).setServiceParent(service)
# For calendarserver.tap.test
Modified: CalendarServer/branches/users/gaya/groupsharee/calendarserver/tap/test/test_caldav.py
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/calendarserver/tap/test/test_caldav.py 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/calendarserver/tap/test/test_caldav.py 2014-06-11 03:50:42 UTC (rev 13630)
@@ -1284,8 +1284,8 @@
deferred = Deferred()
proc = reactor.spawnProcess(
CapturingProcessProtocol(deferred, None),
- twistd,
- [twistd, reactorArg, '-n', '-y', tacFilePath],
+ sys.executable,
+ [sys.executable, twistd, reactorArg, '-n', '-y', tacFilePath],
env=os.environ
)
reactor.callLater(3, proc.signalProcess, "HUP")
Modified: CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/calverify.py
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/calverify.py 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/calverify.py 2014-06-11 03:50:42 UTC (rev 13630)
@@ -44,7 +44,7 @@
import sys
import time
import traceback
-import uuid
+from uuid import uuid4
from calendarserver.tools import tables
from calendarserver.tools.cmdline import utilityMain, WorkerService
@@ -1851,7 +1851,7 @@
_ignore_homeID, calendarID = yield self.getAllResourceInfoForResourceID(attresid)
calendar = yield home.childWithID(calendarID)
calendarObj = yield calendar.objectResourceWithID(attresid)
- calendarObj.scheduleTag = str(uuid.uuid4())
+ calendarObj.scheduleTag = str(uuid4())
yield calendarObj._setComponentInternal(attendee_calendar, internal_state=ComponentUpdateState.RAW)
self.results.setdefault("Fix change event", set()).add((home.name(), calendar.name(), attendee_calendar.resourceUID(),))
@@ -1862,7 +1862,7 @@
defaultCalendar = (yield self.defaultCalendarForAttendee(home))
if defaultCalendar is None:
raise ValueError("Cannot find suitable default calendar")
- new_name = str(uuid.uuid4()) + ".ics"
+ new_name = str(uuid4()) + ".ics"
calendarObj = (yield defaultCalendar._createCalendarObjectWithNameInternal(new_name, attendee_calendar, internal_state=ComponentUpdateState.RAW, options=self.metadata))
self.results.setdefault("Fix add event", set()).add((home.name(), defaultCalendar.name(), attendee_calendar.resourceUID(),))
@@ -1879,7 +1879,7 @@
details["title"] = instance.component.propertyValue("SUMMARY")
# Write new itip message to attendee inbox
- yield inbox.createCalendarObjectWithName(str(uuid.uuid4()) + ".ics", itipmsg, options=self.metadata_inbox)
+ yield inbox.createCalendarObjectWithName(str(uuid4()) + ".ics", itipmsg, options=self.metadata_inbox)
self.results.setdefault("Fix add inbox", set()).add((home.name(), itipmsg.resourceUID(),))
yield self.txn.commit()
Modified: CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/cmdline.py
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/cmdline.py 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/cmdline.py 2014-06-11 03:50:42 UTC (rev 13630)
@@ -18,7 +18,6 @@
Shared main-point between utilities.
"""
-from calendarserver.tap.caldav import CalDAVServiceMaker, CalDAVOptions
from calendarserver.tap.util import checkDirectories
from calendarserver.tools.util import loadConfig, autoDisableMemcached
@@ -36,7 +35,10 @@
# TODO: direct unit tests for these functions.
-def utilityMain(configFileName, serviceClass, reactor=None, serviceMaker=CalDAVServiceMaker, patchConfig=None, onShutdown=None, verbose=False):
+def utilityMain(
+ configFileName, serviceClass, reactor=None, serviceMaker=None,
+ patchConfig=None, onShutdown=None, verbose=False
+):
"""
Shared main-point for utilities.
@@ -68,6 +70,10 @@
will be imported and used.
"""
+ from calendarserver.tap.caldav import CalDAVServiceMaker, CalDAVOptions
+ if serviceMaker is None:
+ serviceMaker = CalDAVServiceMaker
+
# We want to validate that the actual service is always an instance of WorkerService, so wrap the
# service maker callback inside a function that does that check
def _makeValidService(store):
Modified: CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/dashboard.py
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/dashboard.py 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/dashboard.py 2014-06-11 03:50:42 UTC (rev 13630)
@@ -201,7 +201,7 @@
self.windows
):
window.update()
- except Exception as e: #@UnusedVariable
+ except Exception:
#print(str(e))
pass
if not self.usesCurses:
@@ -738,10 +738,12 @@
s = " {:<12}{:>8}{:>16}".format(
"Total:",
- sum([
- record["unacknowledged"] + record["acknowledged"]
- for record in records
- ]),
+ sum(
+ [
+ record["unacknowledged"] + record["acknowledged"]
+ for record in records
+ ]
+ ),
sum([record["total"] for record in records]),
)
if self.usesCurses:
@@ -919,11 +921,103 @@
self.lastResult = records
+class DirectoryStatsWindow(BaseWindow):
+ """
+ Displays the status of the server's directory service calls
+ """
+
+ help = "display directory service stats"
+ clientItem = "directory"
+ FORMAT_WIDTH = 89
+
+
+ def makeWindow(self, top=0, left=0):
+ nlines = len(defaultIfNone(self.readItem("directory"), {}))
+ self.rowCount = nlines
+ self._createWindow(
+ "Directory Service", self.rowCount + 6, ncols=self.FORMAT_WIDTH,
+ begin_y=top, begin_x=left
+ )
+ return self
+
+
+ def update(self):
+ records = defaultIfNone(self.clientData(), {})
+ if len(records) != self.rowCount:
+ self.needsReset = True
+ return
+
+ self.iter += 1
+
+ if self.usesCurses:
+ self.window.erase()
+ self.window.border()
+ self.window.addstr(0, 2, self.title + " {} ({})".format(len(records), self.iter,))
+
+ x = 1
+ y = 1
+ s1 = " {:<40}{:>15}{:>15}{:>15} ".format(
+ "Method", "Calls", "Total", "Average"
+ )
+ s2 = " {:<40}{:>15}{:>15}{:>15} ".format(
+ "", "", "(sec)", "(sec)"
+ )
+ if self.usesCurses:
+ self.window.addstr(y, x, s1, curses.A_REVERSE)
+ self.window.addstr(y + 1, x, s2, curses.A_REVERSE)
+ else:
+ print(s1)
+ print(s2)
+ y += 2
+
+ overallCount = 0
+ overallTimeSpent = 0.0
+
+ for methodName, (count, timeSpent) in sorted(records.items(), key=lambda x: x[0]):
+ overallCount += count
+ overallTimeSpent += timeSpent
+
+ s = " {:<40}{:>15d}{:>15.1f}{:>15.5f} ".format(
+ methodName,
+ count,
+ timeSpent,
+ timeSpent / count,
+ )
+ try:
+ if self.usesCurses:
+ self.window.addstr(y, x, s)
+ else:
+ print(s)
+ except curses.error:
+ pass
+ y += 1
+
+
+ s = " {:<40}{:>15d}{:>15.1f}{:>15.5f} ".format(
+ "Total:",
+ overallCount,
+ overallTimeSpent,
+ safeDivision(overallTimeSpent, overallCount, 1.0)
+ )
+ if self.usesCurses:
+ self.window.hline(y, x, "-", self.FORMAT_WIDTH - 2)
+ y += 1
+ self.window.addstr(y, x, s)
+ else:
+ print(s)
+ y += 1
+
+ if self.usesCurses:
+ self.window.refresh()
+
+
+
Dashboard.registerWindow(SystemWindow, "s")
Dashboard.registerWindow(RequestStatsWindow, "r")
Dashboard.registerWindow(JobsWindow, "j")
Dashboard.registerWindow(AssignmentsWindow, "w")
Dashboard.registerWindow(HTTPSlotsWindow, "c")
+Dashboard.registerWindow(DirectoryStatsWindow, "d")
Dashboard.registerWindow(HelpWindow, "h")
Modified: CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/gateway.py
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/gateway.py 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/gateway.py 2014-06-11 03:50:42 UTC (rev 13630)
@@ -25,11 +25,18 @@
import xml
from calendarserver.tools.cmdline import utilityMain
-from calendarserver.tools.config import WRITABLE_CONFIG_KEYS, setKeyPath, getKeyPath, flattenDictionary, WritableConfig
+from calendarserver.tools.config import (
+ WRITABLE_CONFIG_KEYS, setKeyPath, getKeyPath, flattenDictionary,
+ WritableConfig
+)
from calendarserver.tools.principals import (
getProxies, setProxies
)
-from calendarserver.tools.purge import WorkerService, PurgeOldEventsService, DEFAULT_BATCH_SIZE, DEFAULT_RETAIN_DAYS
+from calendarserver.tools.purge import (
+ WorkerService, PurgeOldEventsService,
+ DEFAULT_BATCH_SIZE, DEFAULT_RETAIN_DAYS,
+ PrincipalPurgeWork
+)
from calendarserver.tools.util import (
recordForPrincipalID, autoDisableMemcached
)
@@ -412,14 +419,26 @@
self.respondWithRecordsOfTypes(self.dir, command, [typeName])
+ @inlineCallbacks
def command_deleteLocation(self, command):
- return self._delete("locations", command)
+ txn = self.store.newTransaction()
+ uid = command['GeneratedUID']
+ yield txn.enqueue(PrincipalPurgeWork, uid=uid)
+ yield txn.commit()
+ yield self._delete("locations", command)
+
+ @inlineCallbacks
def command_deleteResource(self, command):
- return self._delete("resources", command)
+ txn = self.store.newTransaction()
+ uid = command['GeneratedUID']
+ yield txn.enqueue(PrincipalPurgeWork, uid=uid)
+ yield txn.commit()
+ yield self._delete("resources", command)
+
def command_deleteAddress(self, command):
return self._delete("addresses", command)
Modified: CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/managetimezones.py
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/managetimezones.py 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/managetimezones.py 2014-06-11 03:50:42 UTC (rev 13630)
@@ -105,7 +105,16 @@
for file in zonefiles:
parser.parse(os.path.join(zonedir, file))
- parser.generateZoneinfoFiles(os.path.join(rootdir, "zoneinfo"), startYear, endYear, filterzones=())
+ # Check for windows aliases
+ print("Downloading latest data from unicode.org")
+ path = "http://unicode.org/repos/cldr/tags/latest/common/supplemental/windowsZones.xml"
+ data = urllib.urlretrieve(path)
+ wpath = data[0]
+
+ # Generate the iCalendar data
+ print("Generating iCalendar data")
+ parser.generateZoneinfoFiles(os.path.join(rootdir, "zoneinfo"), startYear, endYear, windowsAliases=wpath, filterzones=())
+
print("Copy new zoneinfo to destination: %s" % (tzpath,))
z = FilePath(os.path.join(rootdir, "zoneinfo"))
tz = FilePath(tzpath)
@@ -251,7 +260,8 @@
Description:
This utility will create, update, or list an XML timezone database
summary file, or refresh iCalendar timezone from IANA (Olson). It can
- also be used to update the server's own zoneinfo database from IANA.
+ also be used to update the server's own zoneinfo database from IANA. It
+ also creates aliases for the unicode.org windowsZones.
""")
Modified: CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/migrate_verify.py
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/migrate_verify.py 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/migrate_verify.py 2014-06-11 03:50:42 UTC (rev 13630)
@@ -193,7 +193,7 @@
self.badPaths.append(line)
# Remove any invalid GUIDs that actuall were valid
- invalidGUIDs = [guid for guid in invalidGUIDs if guid not in self.pathsByGUID]
+ invalidGUIDs = [pguid for pguid in invalidGUIDs if pguid not in self.pathsByGUID]
self.output.write("\nTotal lines read: %d\n" % (total,))
self.output.write("Total guids: valid: %d invalid: %d overall: %d\n" % (
Modified: CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/resources.py
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/resources.py 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/resources.py 2014-06-11 03:50:42 UTC (rev 13630)
@@ -31,7 +31,7 @@
from twisted.internet.defer import inlineCallbacks, returnValue
from txdav.who.directory import CalendarDirectoryRecordMixin
from twext.who.directory import DirectoryRecord as BaseDirectoryRecord
-from txdav.who.opendirectory import RecordType
+from txdav.who.idirectory import RecordType
log = Logger()
@@ -42,7 +42,7 @@
@inlineCallbacks
def doWork(self):
try:
- from twext.who.opendirectory import (
+ from txdav.who.opendirectory import (
DirectoryService as OpenDirectoryService
)
except ImportError:
@@ -115,8 +115,8 @@
destRecords = []
for recordType in (
- sourceService.recordType.resource,
- sourceService.recordType.location,
+ RecordType.resource,
+ RecordType.location,
):
records = yield sourceService.recordsWithRecordType(recordType)
for sourceRecord in records:
Modified: CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/test/test_gateway.py
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/test/test_gateway.py 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/test/test_gateway.py 2014-06-11 03:50:42 UTC (rev 13630)
@@ -20,12 +20,12 @@
import plistlib
import xml
+from twistedcaldav.stdconfig import config
from twext.python.filepath import CachingFilePath as FilePath
from twisted.internet import reactor
from twisted.internet.defer import inlineCallbacks, Deferred, returnValue
from twisted.trial.unittest import TestCase
from twistedcaldav import memcacher
-from twistedcaldav.config import config
from twistedcaldav.memcacheclient import ClientFactory
from twistedcaldav.test.util import CapturingProcessProtocol
from txdav.common.datastore.test.util import (
Modified: CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/test/test_principals.py
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/test/test_principals.py 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/test/test_principals.py 2014-06-11 03:50:42 UTC (rev 13630)
@@ -16,6 +16,7 @@
import os
+from twistedcaldav.stdconfig import config
from calendarserver.tools.principals import (
parseCreationArgs, matchStrings,
recordForPrincipalID, getProxies, setProxies
@@ -23,7 +24,6 @@
from twext.python.filepath import CachingFilePath as FilePath
from twisted.internet import reactor
from twisted.internet.defer import inlineCallbacks, Deferred, returnValue
-from twistedcaldav.config import config
from twistedcaldav.test.util import (
TestCase, StoreTestCase, CapturingProcessProtocol, ErrorOutput
)
Modified: CalendarServer/branches/users/gaya/groupsharee/conf/auth/generate_test_accounts.py
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/conf/auth/generate_test_accounts.py 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/conf/auth/generate_test_accounts.py 2014-06-11 03:50:42 UTC (rev 13630)
@@ -220,7 +220,7 @@
<short-name>il1</short-name>
<full-name>IL1</full-name>
<street-address>1 Infinite Loop, Cupertino, CA 95014</street-address>
- <geographic-location>37.331741,-122.030333</geographic-location>
+ <geographic-location>geo:37.331741,-122.030333</geographic-location>
</record>
<record type="location">
<uid>fantastic</uid>
@@ -233,7 +233,7 @@
<short-name>il2</short-name>
<full-name>IL2</full-name>
<street-address>2 Infinite Loop, Cupertino, CA 95014</street-address>
- <geographic-location>37.332633,-122.030502</geographic-location>
+ <geographic-location>geo:37.332633,-122.030502</geographic-location>
</record>
<record type="location">
<uid>delegatedroom</uid>
Modified: CalendarServer/branches/users/gaya/groupsharee/conf/caldavd-apple.plist
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/conf/caldavd-apple.plist 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/conf/caldavd-apple.plist 2014-06-11 03:50:42 UTC (rev 13630)
@@ -528,19 +528,29 @@
<!-- Directory searching -->
<key>DirectoryAddressBook</key>
<dict>
- <key>Enabled</key>
- <true/>
- <key>params</key>
- <dict>
- <key>queryUserRecords</key>
- <false/>
- <key>queryPeopleRecords</key>
- <false/>
- </dict>
+ <key>Enabled</key>
+ <true/>
+ <key>params</key>
+ <dict>
+ <key>queryUserRecords</key>
+ <false/>
+ <key>queryPeopleRecords</key>
+ <false/>
+ </dict>
</dict>
+
<key>EnableSearchAddressBook</key>
<false/>
+
+ <!-- Automatic purging of data for principals no longer in the directory
+ -->
+ <key>AutomaticPurging</key>
+ <dict>
+ <key>Enabled</key>
+ <true/>
+ </dict>
+
<key>Includes</key>
<array>
<string>/Library/Preferences/com.apple.servermgr_calendar.plist</string>
Modified: CalendarServer/branches/users/gaya/groupsharee/contrib/tools/monitoranalysis.py
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/contrib/tools/monitoranalysis.py 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/contrib/tools/monitoranalysis.py 2014-06-11 03:50:42 UTC (rev 13630)
@@ -106,7 +106,7 @@
y2 = []
x3 = []
y3 = []
- for datetime, reqs, resp, lq, _ignore_cpu in data:
+ for _ignore_dt, reqs, resp, lq, _ignore_cpu in data:
if lq == 0:
x1.append(reqs)
y1.append(resp)
@@ -134,7 +134,7 @@
x = [[], [], [], []]
y = [[], [], [], []]
- for datetime, reqs, resp, _ignore_lq, cpu in data:
+ for _ignore_dt, reqs, resp, _ignore_lq, cpu in data:
if cpu > 75:
x[0].append(reqs)
y[0].append(resp)
Modified: CalendarServer/branches/users/gaya/groupsharee/requirements-dev.txt
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/requirements-dev.txt 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/requirements-dev.txt 2014-06-11 03:50:42 UTC (rev 13630)
@@ -7,4 +7,4 @@
mockldap
q
--editable svn+http://svn.calendarserver.org/repository/calendarserver/CalDAVClientLibrary/trunk@13420#egg=CalDAVClientLibrary
---editable svn+http://svn.calendarserver.org/repository/calendarserver/CalDAVTester/trunk@13547#egg=CalDAVTester
+--editable svn+http://svn.calendarserver.org/repository/calendarserver/CalDAVTester/trunk@13624#egg=CalDAVTester
Modified: CalendarServer/branches/users/gaya/groupsharee/requirements-stable.txt
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/requirements-stable.txt 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/requirements-stable.txt 2014-06-11 03:50:42 UTC (rev 13630)
@@ -5,9 +5,9 @@
# For CalendarServer development, don't try to get these projects from PyPI; use svn.
-e .
--e svn+http://svn.calendarserver.org/repository/calendarserver/twext/trunk@13580#egg=twextpy
+-e svn+http://svn.calendarserver.org/repository/calendarserver/twext/trunk@13610#egg=twextpy
-e svn+http://svn.calendarserver.org/repository/calendarserver/PyKerberos/trunk@13420#egg=kerberos
--e svn+http://svn.calendarserver.org/repository/calendarserver/PyCalendar/trunk@13576#egg=pycalendar
+-e svn+http://svn.calendarserver.org/repository/calendarserver/PyCalendar/trunk@13621#egg=pycalendar
# Specify specific versions of our dependencies so that we're all testing the same config.
Modified: CalendarServer/branches/users/gaya/groupsharee/support/_cache_deps
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/support/_cache_deps 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/support/_cache_deps 2014-06-11 03:50:42 UTC (rev 13630)
@@ -76,7 +76,7 @@
rev="$(grep egg=CalDAVTester "${wd}/requirements-dev.txt" | sed 's|^.*svn+[^@#]*@\([0-9]*\).*$|\1|')";
svn export -r "${rev}" "${url}@${rev}" "${wd}/CalDAVTester";
-tar -C "${wd}" -cvzf "${wd}/CalDAVTester.tgz" CalDAVTester;
+tar -C "${wd}" -cvzf "${wd}/CalDAVTester.tgz" CalDAVTester;
rm -r CalDAVTester;
@@ -85,7 +85,7 @@
# Remove .exe files from arvhives
#
-for archive in $(find "${wd}/.develop" -type f -name '*.tgz'); do
+for archive in $(find "${wd}/.develop" -type f -name '*.tgz' -or -name '*.tar.gz'); do
if tar -tvzf "${archive}" "*.exe" > /dev/null 2>&1; then
ruler "Removing binaries from ${archive}";
tmp="$(mktemp -t ccsXXXXX)";
Modified: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/directory/util.py
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/directory/util.py 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/directory/util.py 2014-06-11 03:50:42 UTC (rev 13630)
@@ -92,7 +92,11 @@
"""
transaction = getattr(request, TRANSACTION_KEY, None)
if transaction is None:
- transaction = newStore.newTransaction(repr(request))
+ if hasattr(request, "authzUser") and request.authzUser is not None:
+ authz_uid = request.authzUser.record.uid
+ else:
+ authz_uid = None
+ transaction = newStore.newTransaction(repr(request), authz_uid=authz_uid)
def abortIfUncommitted(request, response):
try:
# TODO: missing 'yield' here. For formal correctness as per
Modified: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/directorybackedaddressbook.py
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/directorybackedaddressbook.py 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/directorybackedaddressbook.py 2014-06-11 03:50:42 UTC (rev 13630)
@@ -182,48 +182,72 @@
}
propNames, expression = expressionFromABFilter(
- addressBookFilter, vcardPropToRecordFieldMap, vCardConstantProperties
+ addressBookFilter, vcardPropToRecordFieldMap, vCardConstantProperties,
)
if expression:
- if defaultKind and "KIND" not in propNames:
- defaultRecordExpression = MatchExpression(
- FieldName.recordType,
- vCardKindToRecordTypeMap[defaultKind],
- MatchType.equals
- )
- if expression is True:
- expression = defaultRecordExpression
- else:
- expression = CompoundExpression(
- (expression, defaultRecordExpression,),
- Operand.AND
+
+ queryRecordType = None
+ if "KIND" not in propNames:
+ queryRecordType = vCardKindToRecordTypeMap.get(defaultKind)
+
+ # if CompoundExpression of MatchExpression: recordsWithFieldValue() else recordsMatchingType()
+ fields = []
+ if expression is not True:
+
+ def fieldForMatchExpression(match):
+ return (
+ match.fieldName.name,
+ match.fieldValue,
+ match.flags,
+ match.matchType,
)
- elif expression is True: # True means all records
- allowedRecordTypes = set(self.directory.recordTypes()) & set(recordTypeToVCardKindMap.keys())
- expression = CompoundExpression(
- [
- MatchExpression(FieldName.recordType, recordType, MatchType.equals)
- for recordType in allowedRecordTypes
- ], Operand.OR
- )
+ if isinstance(expression, CompoundExpression):
+ operand = expression.operand
+ for match in expression.expressions:
+ if isinstance(match, MatchExpression):
+ if match.fieldName != FieldName.recordType:
+ fields.append(fieldForMatchExpression(match))
+ # else optimize: collect record type list for query
+ else:
+ # do all record types query
+ fields = []
+ break
+ elif isinstance(expression, MatchExpression):
+ operand = Operand.OR
+ if expression.fieldName != FieldName.recordType:
+ fields.append(fieldForMatchExpression(expression))
+ else:
+ recordType = expression.fieldValue
+
maxRecords = int(maxResults * 1.2)
# keep trying query till we get results based on filter. Especially when doing "all results" query
while True:
+ queryLimited = False
log.debug("doAddressBookDirectoryQuery: expression={expression!r}, propNames={propNames}", expression=expression, propNames=propNames)
- records = yield self.directory.recordsFromExpression(expression)
- log.debug("doAddressBookDirectoryQuery: #records={n}, records={records!r}", n=len(records), records=records)
- queryLimited = False
+ allRecords = set()
+ if fields:
+ records = yield self.directory.recordsMatchingFields(fields, operand, queryRecordType)
+ log.debug("doAddressBookDirectoryQuery: recordsMatchingFields({f}, {o}): #records={n}, records={records!r}",
+ f=fields, o=operand, n=len(records), records=records)
+ allRecords = set(records)
+ else:
+ recordTypes = set([queryRecordType]) if queryRecordType else set(self.directory.recordTypes()) & set(recordTypeToVCardKindMap.keys())
+ for recordType in recordTypes:
+ records = yield self.directory.recordsWithRecordType(recordType)
+ log.debug("doAddressBookDirectoryQuery: #records={n}, records={records!r}", n=len(records), records=records)
+ allRecords |= set(records)
- vCardsResults = [(yield ABDirectoryQueryResult(self).generate(record)) for record in records]
+ vCardsResults = [(yield ABDirectoryQueryResult(self).generate(record)) for record in allRecords]
filteredResults = set()
for vCardResult in vCardsResults:
if addressBookFilter.match(vCardResult.vCard()):
+ log.debug("doAddressBookDirectoryQuery: vCard did match filter:\n{vcard}", vcard=vCardResult.vCard())
filteredResults.add(vCardResult)
else:
log.debug("doAddressBookDirectoryQuery: vCard did not match filter:\n{vcard}", vcard=vCardResult.vCard())
@@ -266,9 +290,9 @@
propertyNames = []
if addressBookQuery.qname() == ("DAV:", "prop"):
- for property in addressBookQuery.children:
- if isinstance(property, carddavxml.AddressData):
- for addressProperty in property.children:
+ for prop in addressBookQuery.children:
+ if isinstance(prop, carddavxml.AddressData):
+ for addressProperty in prop.children:
if isinstance(addressProperty, carddavxml.Property):
propertyNames.append(addressProperty.attributes["name"])
@@ -360,7 +384,7 @@
def definedExpression(defined, allOf):
- if constant or propFilter.filter_name in ("N" , "FN", "UID", "SOURCE", "KIND",):
+ if constant or propFilter.filter_name in ("N" , "FN", "UID", "KIND",):
return defined # all records have this property so no records do not have it
else:
# FIXME: The startsWith expression below, which works with LDAP and OD. is not currently supported
@@ -386,11 +410,11 @@
params = vCardPropToParamMap.get(propFilter.filter_name.upper())
defined = params and paramFilterElement.filter_name.upper() in params
- #defined test
+ # defined test
if defined != paramFilterElement.defined:
return False
- #parameter value text match
+ # parameter value text match
if defined and paramFilterElement.filters:
paramValues = params[paramFilterElement.filter_name.upper()]
if paramValues and paramFilterElement.filters[0].text.upper() not in paramValues:
@@ -401,10 +425,10 @@
def textMatchElementExpression(propFilterAllOf, textMatchElement):
- # pre process text match strings for ds query
+ # preprocess text match strings for ds query
def getMatchStrings(propFilter, matchString):
- if propFilter.filter_name in ("REV" , "BDAY",):
+ if propFilter.filter_name in ("REV", "BDAY",):
rawString = matchString
matchString = ""
for c in rawString:
Modified: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/ical.py
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/ical.py 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/ical.py 2014-06-11 03:50:42 UTC (rev 13630)
@@ -1063,11 +1063,16 @@
"""
result = set()
- for property in self.properties():
- tzid = property.parameterValue("TZID")
- if tzid is not None:
- result.add(tzid)
- break
+ if self.name() == "VCALENDAR":
+ for component in self.subcomponents():
+ if component.name() != "VTIMEZONE":
+ result.update(component.timezoneIDs())
+ else:
+ for property in self.properties():
+ tzid = property.parameterValue("TZID")
+ if tzid is not None:
+ result.add(tzid)
+ break
return result
@@ -2032,6 +2037,12 @@
"Timezone {0} is not referenced by any non-timezone component".format(timezone,)
)
+ # TZIDs without a VTIMEZONE must be available in the server's TZ database
+ missing_timezones = timezone_refs - timezones
+ for tzid in missing_timezones:
+ # Will raise TimezoneException if tzid not present in server's database
+ hasTZ(tzid)
+
# Control character check - only HTAB, CR, LF allowed for characters in the range 0x00-0x1F
s = str(self)
if len(s.translate(None, "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x0B\x0C\x0E\x0F\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F")) != len(s):
Modified: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/memcacheclient.py
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/memcacheclient.py 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/memcacheclient.py 2014-06-11 03:50:42 UTC (rev 13630)
@@ -1417,7 +1417,6 @@
print("FAIL", end="")
else:
print("OK", end="")
- import pickle
s = pickle.loads('V\\u4f1a\np0\n.')
try:
x = mc.set((s*SERVER_MAX_KEY_LENGTH).encode('utf-8'), 1)
Modified: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/resource.py
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/resource.py 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/resource.py 2014-06-11 03:50:42 UTC (rev 13630)
@@ -858,7 +858,7 @@
Return the DAV:owner property value (MUST be a DAV:href or None).
"""
- if hasattr(self, "_newStoreObject"):
+ if getattr(self, "_newStoreObject", None) is not None:
if not hasattr(self._newStoreObject, "ownerHome"):
home = self._newStoreObject.parentCollection().ownerHome()
else:
@@ -2635,11 +2635,16 @@
if config.EnableProxyPrincipals:
# Server may be read only
if config.EnableReadOnlyServer:
- rw_proxy_privs = (
+ ro_proxy_privs = rw_proxy_privs = (
element.Privilege(element.Read()),
element.Privilege(element.ReadCurrentUserPrivilegeSet()),
)
else:
+ ro_proxy_privs = (
+ element.Privilege(element.Read()),
+ element.Privilege(element.ReadCurrentUserPrivilegeSet()),
+ element.Privilege(element.WriteProperties()),
+ )
rw_proxy_privs = (
element.Privilege(element.Read()),
element.Privilege(element.ReadCurrentUserPrivilegeSet()),
@@ -2650,10 +2655,7 @@
# DAV:read/DAV:read-current-user-privilege-set access for this principal's calendar-proxy-read users.
element.ACE(
element.Principal(element.HRef(joinURL(myPrincipal.principalURL(), "calendar-proxy-read/"))),
- element.Grant(
- element.Privilege(element.Read()),
- element.Privilege(element.ReadCurrentUserPrivilegeSet()),
- ),
+ element.Grant(*ro_proxy_privs),
element.Protected(),
TwistedACLInheritable(),
),
Modified: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/scheduling_store/caldav/resource.py
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/scheduling_store/caldav/resource.py 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/scheduling_store/caldav/resource.py 2014-06-11 03:50:42 UTC (rev 13630)
@@ -419,17 +419,6 @@
originator = (yield self.loadOriginatorFromRequestDetails(request))
recipients = self.loadRecipientsFromCalendarData(calendar)
- # storeComponent needs to know who the auth'd user is for access control
- # TODO: this needs to be done in a better way - ideally when the txn is created for the request,
- # we should set a txn.authzid attribute.
- authz = None
- authz_principal = self.parent.currentPrincipal(request).children[0]
- if isinstance(authz_principal, davxml.HRef):
- principalURL = str(authz_principal)
- if principalURL:
- authz = (yield request.locateResource(principalURL))
- self._associatedTransaction._authz_uid = authz.record.uid
-
# Log extended item
if not hasattr(request, "extendedLogItems"):
request.extendedLogItems = {}
Modified: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/sharing.py
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/sharing.py 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/sharing.py 2014-06-11 03:50:42 UTC (rev 13630)
@@ -383,6 +383,7 @@
element.Grant(
element.Privilege(element.Read()),
element.Privilege(element.ReadCurrentUserPrivilegeSet()),
+ element.Privilege(element.WriteProperties()),
),
element.Protected(),
TwistedACLInheritable(),
@@ -557,6 +558,13 @@
@inlineCallbacks
def _xmlHandleInvite(self, request, docroot):
+ # Sharing must be enabled for this collection
+ if not self.canBeShared():
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (customxml.calendarserver_namespace, "valid-request"),
+ "Sharing not supported on this resource",
+ ))
yield self.authorize(request, (element.Read(), element.Write()))
result = (yield self._handleInvite(request, docroot))
returnValue(result)
@@ -702,6 +710,13 @@
@inlineCallbacks
def _xmlHandleInviteReply(self, request, docroot):
+ # Sharing must be enabled for this collection
+ if not self.canShare():
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (customxml.calendarserver_namespace, "valid-request"),
+ "Sharing not supported on this resource",
+ ))
yield self.authorize(request, (element.Read(), element.Write()))
result = (yield self._handleInviteReply(request, docroot))
returnValue(result)
Modified: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/stdconfig.py
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/stdconfig.py 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/stdconfig.py 2014-06-11 03:50:42 UTC (rev 13630)
@@ -280,9 +280,9 @@
"UseDatabase": True, # True: database; False: files
- "TransactionTimeoutSeconds": 0, # Timeout transactions that take longer than
+ "TransactionTimeoutSeconds": 300, # Timeout transactions that take longer than
# the specified number of seconds. Zero means
- # no timeouts
+ # no timeouts. 5 minute default.
"DBType": "", # 2 possible values: empty, meaning 'spawn postgres
# yourself', or 'postgres', meaning 'connect to a
@@ -606,9 +606,31 @@
"IgnorePerUserProperties" : [
"X-APPLE-STRUCTURED-LOCATION",
],
+ "CollectionProperties": {
+ "Shadowable": [
+ "{urn:ietf:params:xml:ns:caldav}calendar-description",
+ ],
+ "ProxyOverride": [
+ "{urn:ietf:params:xml:ns:caldav}calendar-description",
+ "{com.apple.ical:}calendarcolor",
+ "{http://apple.com/ns/ical/}calendar-color",
+ "{http://apple.com/ns/ical/}calendar-order",
+ ],
+ "Global": [
+ ],
+ },
},
"AddressBooks" : {
"Enabled" : False, # Address Books on/off switch
+ "CollectionProperties": {
+ "Shadowable": [
+ "{urn:ietf:params:xml:ns:carddav}addressbook-description",
+ ],
+ "ProxyOverride": [
+ ],
+ "Global": [
+ ],
+ },
},
},
Modified: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/storebridge.py
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/storebridge.py 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/storebridge.py 2014-06-11 03:50:42 UTC (rev 13630)
@@ -60,7 +60,7 @@
InvalidPerUserDataMerge,
AttendeeAllowedError, ResourceDeletedError, InvalidAttachmentOperation,
ShareeAllowedError, DuplicatePrivateCommentsError, InvalidSplit
-, AttachmentSizeTooLarge)
+, AttachmentSizeTooLarge, UnknownTimezone)
from txdav.carddav.iaddressbookstore import (
KindChangeNotAllowedError, GroupWithUnsharedAddressNotAllowedError
)
@@ -1318,6 +1318,10 @@
returnValue(result)
+ def canBeShared(self):
+ return config.Sharing.Enabled and config.Sharing.Calendars.Enabled
+
+
@inlineCallbacks
def storeResourceData(self, newchild, component, returnChangedData=False):
@@ -1684,37 +1688,38 @@
proxyprivs.remove(davxml.Privilege(davxml.ReadACL()))
principal = yield self.principalForUID(invite.shareeUID)
- aces += (
- # Inheritable specific access for the resource's associated principal.
- davxml.ACE(
- davxml.Principal(davxml.HRef(principal.principalURL())),
- davxml.Grant(*userprivs),
- davxml.Protected(),
- TwistedACLInheritable(),
- ),
- )
-
- if config.EnableProxyPrincipals:
+ if principal is not None:
aces += (
- # DAV:read/DAV:read-current-user-privilege-set access for this principal's calendar-proxy-read users.
+ # Inheritable specific access for the resource's associated principal.
davxml.ACE(
- davxml.Principal(davxml.HRef(joinURL(principal.principalURL(), "calendar-proxy-read/"))),
- davxml.Grant(
- davxml.Privilege(davxml.Read()),
- davxml.Privilege(davxml.ReadCurrentUserPrivilegeSet()),
- ),
+ davxml.Principal(davxml.HRef(principal.principalURL())),
+ davxml.Grant(*userprivs),
davxml.Protected(),
TwistedACLInheritable(),
),
- # DAV:read/DAV:read-current-user-privilege-set/DAV:write access for this principal's calendar-proxy-write users.
- davxml.ACE(
- davxml.Principal(davxml.HRef(joinURL(principal.principalURL(), "calendar-proxy-write/"))),
- davxml.Grant(*proxyprivs),
- davxml.Protected(),
- TwistedACLInheritable(),
- ),
)
+ if config.EnableProxyPrincipals:
+ aces += (
+ # DAV:read/DAV:read-current-user-privilege-set access for this principal's calendar-proxy-read users.
+ davxml.ACE(
+ davxml.Principal(davxml.HRef(joinURL(principal.principalURL(), "calendar-proxy-read/"))),
+ davxml.Grant(
+ davxml.Privilege(davxml.Read()),
+ davxml.Privilege(davxml.ReadCurrentUserPrivilegeSet()),
+ ),
+ davxml.Protected(),
+ TwistedACLInheritable(),
+ ),
+ # DAV:read/DAV:read-current-user-privilege-set/DAV:write access for this principal's calendar-proxy-write users.
+ davxml.ACE(
+ davxml.Principal(davxml.HRef(joinURL(principal.principalURL(), "calendar-proxy-write/"))),
+ davxml.Grant(*proxyprivs),
+ davxml.Protected(),
+ TwistedACLInheritable(),
+ ),
+ )
+
returnValue(aces)
@@ -2729,6 +2734,7 @@
ShareeAllowedError: (_CommonObjectResource._storeExceptionError, (calendarserver_namespace, "sharee-privilege-needed",),),
DuplicatePrivateCommentsError: (_CommonObjectResource._storeExceptionError, (calendarserver_namespace, "no-duplicate-private-comments",),),
LockTimeout: (_CommonObjectResource._storeExceptionUnavailable, "Lock timed out.",),
+ UnknownTimezone: (_CommonObjectResource._storeExceptionError, (caldav_namespace, "valid-timezone"),),
}
StoreMoveExceptionsErrors = {
@@ -2823,6 +2829,10 @@
returnValue(response)
+ def canBeShared(self):
+ return False
+
+
@inlineCallbacks
def http_PUT(self, request):
@@ -2873,17 +2883,6 @@
"Can't parse calendar data: %s" % (str(e),)
))
- # storeComponent needs to know who the auth'd user is for access control
- # TODO: this needs to be done in a better way - ideally when the txn is created for the request,
- # we should set a txn.authzid attribute.
- authz = None
- authz_principal = self._parentResource.currentPrincipal(request).children[0]
- if isinstance(authz_principal, davxml.HRef):
- principalURL = str(authz_principal)
- if principalURL:
- authz = (yield request.locateResource(principalURL))
- self._parentResource._newStoreObject._txn._authz_uid = authz.record.uid
-
try:
response = (yield self.storeComponent(component, smart_merge=schedule_tag_match))
except ResourceDeletedError:
@@ -3296,6 +3295,10 @@
return carddavxml.AddressData
+ def canBeShared(self):
+ return config.Sharing.Enabled and config.Sharing.AddressBooks.Enabled
+
+
@inlineCallbacks
def storeResourceData(self, newchild, component, returnChangedData=False):
@@ -3566,6 +3569,10 @@
returnValue(response)
+ def canBeShared(self):
+ return config.Sharing.Enabled and config.Sharing.AddressBooks.Enabled
+
+
@inlineCallbacks
def http_PUT(self, request):
@@ -3606,17 +3613,6 @@
"Could not parse vCard",
))
- # storeComponent needs to know who the auth'd user is for access control
- # TODO: this needs to be done in a better way - ideally when the txn is created for the request,
- # we should set a txn.authzid attribute.
- authz = None
- authz_principal = self._parentResource.currentPrincipal(request).children[0]
- if isinstance(authz_principal, davxml.HRef):
- principalURL = str(authz_principal)
- if principalURL:
- authz = (yield request.locateResource(principalURL))
- self._parentResource._newStoreObject._txn._authz_uid = authz.record.uid
-
try:
response = (yield self.storeComponent(component))
except ResourceDeletedError:
Modified: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/test/test_icalendar.py
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/test/test_icalendar.py 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/test/test_icalendar.py 2014-06-11 03:50:42 UTC (rev 13630)
@@ -21,16 +21,17 @@
from twisted.trial.unittest import SkipTest
from twisted.internet.defer import inlineCallbacks, succeed
+from twistedcaldav.dateops import normalizeForExpand
from twistedcaldav.ical import Component, Property, InvalidICalendarDataError, \
normalizeCUAddress, normalize_iCalStr
+from twistedcaldav.ical import iCalendarProductID
from twistedcaldav.instance import InvalidOverriddenInstanceError
import twistedcaldav.test.util
+from twistedcaldav.timezones import TimezoneException
from pycalendar.datetime import DateTime
from pycalendar.timezone import Timezone
-from twistedcaldav.ical import iCalendarProductID
from pycalendar.duration import Duration
-from twistedcaldav.dateops import normalizeForExpand
from pycalendar.value import Value
@@ -654,9 +655,27 @@
self.assertEqual(end, DateTime(2004, 11, 27))
break
- # test_component_timerange.todo = "recurrence expansion should give us no end date here"
+ def test_component_timezone_validate(self):
+ """
+ CalDAV resource validation.
+ """
+ data = """BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+BEGIN:VEVENT
+UID:12345-67890
+DTSTART;TZID=BOGUS:20130806T000000
+DURATION:PT1H
+DTSTAMP:20051222T210507Z
+SUMMARY:1
+END:VEVENT
+END:VCALENDAR
+"""
+ calendar = Component.fromString(data)
+ self.failUnlessRaises(TimezoneException, calendar.validCalendarForCalDAV, False)
+
def test_parse_date(self):
"""
parse_date()
@@ -5235,8 +5254,8 @@
for title, calendar, tests in data:
ical = Component.fromString(calendar)
- rids = set([rid for rid, result in tests])
- expected_results = set([rid for rid, result in tests if result == True])
+ rids = set([trid for trid, _ignore_tresult in tests])
+ expected_results = set([trid for trid, tresult in tests if tresult == True])
actual_results = ical.validInstances(rids)
self.assertEqual(actual_results, expected_results, "Failed comparison: %s %s" % (title, actual_results,))
Modified: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/test/test_resource.py
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/test/test_resource.py 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/test/test_resource.py 2014-06-11 03:50:42 UTC (rev 13630)
@@ -160,6 +160,26 @@
@inlineCallbacks
+ def test_isOwnerYes_noStoreObject(self):
+ """
+ L{CalDAVResource.isOwner} returns C{True} for authenticated requests
+ with a principal that matches the resource's owner.
+ """
+ site = None
+ request = SimpleRequest(site, "GET", "/not/a/real/url/")
+ request.authzUser = request.authnUser = StubPrincipal("/yes-i-am-the-owner/")
+ parent = CalDAVResource()
+ parent.owner = lambda igreq: HRef("/yes-i-am-the-owner/")
+ rsrc = CalDAVResource()
+ rsrc._newStoreObject = None
+
+ request._rememberResource(parent, "/not/a/real/")
+ request._rememberResource(rsrc, "/not/a/real/url/")
+
+ self.assertEquals((yield rsrc.isOwner(request)), True)
+
+
+ @inlineCallbacks
def test_isOwnerAdmin(self):
"""
L{CalDAVResource.isOwner} returns C{True} for authenticated requests
Modified: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/timezonestdservice.py
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/timezonestdservice.py 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/timezonestdservice.py 2014-06-11 03:50:42 UTC (rev 13630)
@@ -663,7 +663,7 @@
try:
for alias in aliases.splitlines():
- alias_from, alias_to = alias.split()
+ alias_from, alias_to = alias.split("\t")
tzinfo = self.timezones.get(alias_to)
if tzinfo:
if alias_from != alias_to:
Modified: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/upgrade.py
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/upgrade.py 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/upgrade.py 2014-06-11 03:50:42 UTC (rev 13630)
@@ -775,7 +775,7 @@
if didUpdate:
property = caldavxml.CalendarFreeBusySet(
- *[element.HRef(href) for href in fbset]
+ *[element.HRef(fbhref) for fbhref in fbset]
)
value = compress(property.toxml())
returnValue(value)
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/AUS Central Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/AUS Central Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/AUS Central Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/AUS Central Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,48 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:AUS Central Standard Time
+X-LIC-LOCATION:AUS Central Standard Time
+BEGIN:STANDARD
+DTSTART:18950201T000000
+RDATE:18950201T000000
+TZNAME:CST
+TZOFFSETFROM:+084320
+TZOFFSETTO:+0900
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:18990501T000000
+RDATE:18990501T000000
+TZNAME:CST
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0930
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19170101T000100
+RDATE:19170101T000100
+RDATE:19420101T020000
+RDATE:19420927T020000
+RDATE:19431003T020000
+TZNAME:CST
+TZOFFSETFROM:+0930
+TZOFFSETTO:+1030
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19170325T020000
+RDATE:19170325T020000
+RDATE:19420329T020000
+TZNAME:CST
+TZOFFSETFROM:+1030
+TZOFFSETTO:+0930
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19430328T020000
+RRULE:FREQ=YEARLY;UNTIL=19440325T153000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:CST
+TZOFFSETFROM:+1030
+TZOFFSETTO:+0930
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/AUS Eastern Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/AUS Eastern Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/AUS Eastern Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/AUS Eastern Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,124 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:AUS Eastern Standard Time
+X-LIC-LOCATION:AUS Eastern Standard Time
+BEGIN:STANDARD
+DTSTART:18950201T000000
+RDATE:18950201T000000
+TZNAME:EST
+TZOFFSETFROM:+100452
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19170101T000100
+RDATE:19170101T000100
+RDATE:19420101T020000
+RDATE:19420927T020000
+RDATE:19431003T020000
+RDATE:19861019T020000
+RDATE:20000827T020000
+TZNAME:EST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19170325T020000
+RDATE:19170325T020000
+RDATE:19420329T020000
+RDATE:19720227T030000
+RDATE:19820404T030000
+RDATE:20060402T030000
+RDATE:20070325T030000
+TZNAME:EST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19430328T020000
+RRULE:FREQ=YEARLY;UNTIL=19440325T150000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19710101T000000
+RDATE:19710101T000000
+TZNAME:EST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19711031T020000
+RRULE:FREQ=YEARLY;UNTIL=19851026T160000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19730304T030000
+RRULE:FREQ=YEARLY;UNTIL=19810228T160000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:EST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19830306T030000
+RRULE:FREQ=YEARLY;UNTIL=19850302T160000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:EST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19860316T030000
+RRULE:FREQ=YEARLY;UNTIL=19890318T160000Z;BYDAY=3SU;BYMONTH=3
+TZNAME:EST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19871025T020000
+RRULE:FREQ=YEARLY;UNTIL=19991030T160000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19900304T030000
+RRULE:FREQ=YEARLY;UNTIL=19950304T160000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:EST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19960331T030000
+RRULE:FREQ=YEARLY;UNTIL=20050326T160000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20011028T020000
+RRULE:FREQ=YEARLY;UNTIL=20071027T160000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20080406T030000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
+TZNAME:EST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20081005T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Afghanistan Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Afghanistan Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Afghanistan Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Afghanistan Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Afghanistan Standard Time
+X-LIC-LOCATION:Afghanistan Standard Time
+BEGIN:STANDARD
+DTSTART:18900101T000000
+RDATE:18900101T000000
+TZNAME:AFT
+TZOFFSETFROM:+043648
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19450101T000000
+RDATE:19450101T000000
+TZNAME:AFT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0430
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Alaskan Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Alaskan Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Alaskan Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Alaskan Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,137 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Alaskan Standard Time
+X-LIC-LOCATION:Alaskan Standard Time
+BEGIN:STANDARD
+DTSTART:19000820T120000
+RDATE:19000820T120000
+TZNAME:CAT
+TZOFFSETFROM:-095936
+TZOFFSETTO:-1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19420101T000000
+RDATE:19420101T000000
+TZNAME:CAT/CAWT
+TZOFFSETFROM:-1000
+TZOFFSETTO:-1000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:CAT/CAWT
+TZOFFSETFROM:-1000
+TZOFFSETTO:-0900
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19450814T140000
+RDATE:19450814T140000
+TZNAME:CAT/CAPT
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0900
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19450930T020000
+RDATE:19450930T020000
+TZNAME:CAT/CAPT
+TZOFFSETFROM:-0900
+TZOFFSETTO:-1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19460101T000000
+RDATE:19460101T000000
+TZNAME:CAT
+TZOFFSETFROM:-1000
+TZOFFSETTO:-1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19670401T000000
+RDATE:19670401T000000
+RDATE:19690101T000000
+TZNAME:AHST
+TZOFFSETFROM:-1000
+TZOFFSETTO:-1000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19690427T020000
+RRULE:FREQ=YEARLY;UNTIL=19730429T120000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:AHDT
+TZOFFSETFROM:-1000
+TZOFFSETTO:-0900
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19691026T020000
+RRULE:FREQ=YEARLY;UNTIL=19821031T110000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:AHST
+TZOFFSETFROM:-0900
+TZOFFSETTO:-1000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19740106T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+TZNAME:AHDT
+TZOFFSETFROM:-1000
+TZOFFSETTO:-0900
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19760425T020000
+RRULE:FREQ=YEARLY;UNTIL=19830424T120000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:AHDT
+TZOFFSETFROM:-1000
+TZOFFSETTO:-0900
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19831030T020000
+RDATE:19831030T020000
+TZNAME:YST
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0900
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19831130T000000
+RDATE:19831130T000000
+TZNAME:AKST
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0900
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19840429T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T110000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:AKDT
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0800
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19841028T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T100000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:AKST
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0900
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T110000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:AKDT
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0800
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:AKDT
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0800
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:AKST
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0900
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Arab Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Arab Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Arab Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Arab Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Arab Standard Time
+X-LIC-LOCATION:Arab Standard Time
+BEGIN:STANDARD
+DTSTART:19500101T000000
+RDATE:19500101T000000
+TZNAME:AST
+TZOFFSETFROM:+030652
+TZOFFSETTO:+0300
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Arabian Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Arabian Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Arabian Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Arabian Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Arabian Standard Time
+X-LIC-LOCATION:Arabian Standard Time
+BEGIN:STANDARD
+DTSTART:19200101T000000
+RDATE:19200101T000000
+TZNAME:GST
+TZOFFSETFROM:+034112
+TZOFFSETTO:+0400
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Arabic Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Arabic Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Arabic Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Arabic Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,73 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Arabic Standard Time
+X-LIC-LOCATION:Arabic Standard Time
+BEGIN:STANDARD
+DTSTART:18900101T000000
+RDATE:18900101T000000
+TZNAME:BMT
+TZOFFSETFROM:+025740
+TZOFFSETTO:+025736
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19180101T000000
+RDATE:19180101T000000
+TZNAME:AST
+TZOFFSETFROM:+025736
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19820501T000000
+RDATE:19820501T000000
+RDATE:19830331T000000
+TZNAME:ADT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19821001T000000
+RRULE:FREQ=YEARLY;UNTIL=19840930T200000Z;BYMONTH=10
+TZNAME:AST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19840401T000000
+RRULE:FREQ=YEARLY;UNTIL=19850331T210000Z;BYMONTH=4
+TZNAME:ADT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19850929T020000
+RRULE:FREQ=YEARLY;UNTIL=19900929T220000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:AST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19860330T010000
+RRULE:FREQ=YEARLY;UNTIL=19900324T220000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:ADT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19910401T030000
+RRULE:FREQ=YEARLY;UNTIL=20070401T000000Z;BYMONTH=4
+TZNAME:ADT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19911001T040000
+RRULE:FREQ=YEARLY;UNTIL=20071001T000000Z;BYMONTH=10
+TZNAME:AST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Argentina Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Argentina Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Argentina Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Argentina Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,143 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Argentina Standard Time
+X-LIC-LOCATION:Argentina Standard Time
+BEGIN:STANDARD
+DTSTART:18941031T000000
+RDATE:18941031T000000
+TZNAME:CMT
+TZOFFSETFROM:-035348
+TZOFFSETTO:-041648
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19200501T000000
+RDATE:19200501T000000
+TZNAME:ART
+TZOFFSETFROM:-041648
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19301201T000000
+RDATE:19301201T000000
+RDATE:19311015T000000
+RDATE:19400701T000000
+RDATE:19411015T000000
+RDATE:19431015T000000
+RDATE:19461001T000000
+RDATE:19631215T000000
+TZNAME:ARST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19310401T000000
+RDATE:19310401T000000
+RDATE:19410615T000000
+RDATE:19430801T000000
+RDATE:19460301T000000
+RDATE:19631001T000000
+RDATE:19670402T000000
+TZNAME:ART
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19320301T000000
+RRULE:FREQ=YEARLY;UNTIL=19400301T030000Z;BYMONTH=3
+TZNAME:ART
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19321101T000000
+RRULE:FREQ=YEARLY;UNTIL=19391101T040000Z;BYMONTH=11
+TZNAME:ARST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19640301T000000
+RRULE:FREQ=YEARLY;UNTIL=19660301T030000Z;BYMONTH=3
+TZNAME:ART
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19641015T000000
+RRULE:FREQ=YEARLY;UNTIL=19661015T040000Z;BYMONTH=10
+TZNAME:ARST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19671001T000000
+RRULE:FREQ=YEARLY;UNTIL=19681006T040000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:ARST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19680407T000000
+RRULE:FREQ=YEARLY;UNTIL=19690406T030000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:ART
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19691005T000000
+RDATE:19691005T000000
+TZNAME:ARST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19740123T000000
+RDATE:19740123T000000
+RDATE:19881201T000000
+RDATE:20071230T000000
+RDATE:20081019T000000
+TZNAME:ARST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19740501T000000
+RDATE:19740501T000000
+TZNAME:ART
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19890305T000000
+RRULE:FREQ=YEARLY;UNTIL=19930307T020000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:ART
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19891015T000000
+RRULE:FREQ=YEARLY;UNTIL=19921018T030000Z;BYDAY=3SU;BYMONTH=10
+TZNAME:ARST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19991003T000000
+RDATE:19991003T000000
+RDATE:20000303T000000
+TZNAME:ARST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20080316T000000
+RRULE:FREQ=YEARLY;UNTIL=20090315T020000Z;BYDAY=3SU;BYMONTH=3
+TZNAME:ART
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Atlantic Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Atlantic Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Atlantic Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Atlantic Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,221 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Atlantic Standard Time
+X-LIC-LOCATION:Atlantic Standard Time
+BEGIN:STANDARD
+DTSTART:19020615T000000
+RDATE:19020615T000000
+TZNAME:AST
+TZOFFSETFROM:-041424
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19160401T000000
+RDATE:19160401T000000
+RDATE:19180414T020000
+RDATE:19200509T000000
+RDATE:19210506T000000
+RDATE:19220430T000000
+RDATE:19260516T000000
+RDATE:19270501T000000
+RDATE:19320501T000000
+RDATE:19330430T000000
+RDATE:19340520T000000
+RDATE:19350602T000000
+RDATE:19360601T000000
+RDATE:19390528T000000
+TZNAME:ADT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19161001T000000
+RDATE:19161001T000000
+RDATE:19181027T020000
+RDATE:19200829T000000
+RDATE:19230904T000000
+RDATE:19240915T000000
+RDATE:19250928T000000
+RDATE:19260913T000000
+RDATE:19270926T000000
+RDATE:19280909T000000
+RDATE:19290903T000000
+RDATE:19300915T000000
+RDATE:19331002T000000
+RDATE:19340916T000000
+RDATE:19350930T000000
+RDATE:19360914T000000
+RDATE:19450930T020000
+TZNAME:AST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19180101T000000
+RDATE:19180101T000000
+RDATE:19190101T000000
+RDATE:19460101T000000
+RDATE:19740101T000000
+TZNAME:AST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19210905T000000
+RRULE:FREQ=YEARLY;UNTIL=19220905T030000Z;BYMONTH=9
+TZNAME:AST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19230506T000000
+RRULE:FREQ=YEARLY;UNTIL=19250503T040000Z;BYDAY=1SU;BYMONTH=5
+TZNAME:ADT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19280513T000000
+RRULE:FREQ=YEARLY;UNTIL=19310510T040000Z;BYDAY=2SU;BYMONTH=5
+TZNAME:ADT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19310928T000000
+RRULE:FREQ=YEARLY;UNTIL=19320926T030000Z;BYDAY=-1MO;BYMONTH=9
+TZNAME:AST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19370502T000000
+RRULE:FREQ=YEARLY;UNTIL=19380501T040000Z;BYDAY=1SU;BYMONTH=5
+TZNAME:ADT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19370927T000000
+RRULE:FREQ=YEARLY;UNTIL=19410929T030000Z;BYDAY=-1MO;BYMONTH=9
+TZNAME:AST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19400505T000000
+RRULE:FREQ=YEARLY;UNTIL=19410504T040000Z;BYDAY=1SU;BYMONTH=5
+TZNAME:ADT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:AWT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19450814T200000
+RDATE:19450814T200000
+TZNAME:APT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19460428T020000
+RRULE:FREQ=YEARLY;UNTIL=19490424T060000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:ADT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19460929T020000
+RRULE:FREQ=YEARLY;UNTIL=19490925T050000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:AST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19510429T020000
+RRULE:FREQ=YEARLY;UNTIL=19540425T060000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:ADT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19510930T020000
+RRULE:FREQ=YEARLY;UNTIL=19540926T050000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:AST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19560429T020000
+RRULE:FREQ=YEARLY;UNTIL=19590426T060000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:ADT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19560930T020000
+RRULE:FREQ=YEARLY;UNTIL=19590927T050000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:AST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19620429T020000
+RRULE:FREQ=YEARLY;UNTIL=19730429T060000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:ADT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19621028T020000
+RRULE:FREQ=YEARLY;UNTIL=19731028T050000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:AST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19740428T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T060000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:ADT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19741027T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T050000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:AST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T060000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:ADT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:ADT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:AST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Azerbaijan Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Azerbaijan Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Azerbaijan Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Azerbaijan Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,116 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Azerbaijan Standard Time
+X-LIC-LOCATION:Azerbaijan Standard Time
+BEGIN:STANDARD
+DTSTART:19240502T000000
+RDATE:19240502T000000
+TZNAME:BAKT
+TZOFFSETFROM:+031924
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19570301T000000
+RDATE:19570301T000000
+TZNAME:BAKST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T200000Z;BYMONTH=4
+TZNAME:BAKST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T190000Z;BYMONTH=10
+TZNAME:BAKT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19900929T220000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:BAKT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19900324T220000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:BAKST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19910331T020000
+RDATE:19910331T020000
+TZNAME:BAKST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19910830T000000
+RDATE:19910830T000000
+RDATE:19960101T000000
+RDATE:19970101T000000
+TZNAME:AZST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19910929T030000
+RDATE:19910929T030000
+TZNAME:AZT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19920328T230000
+RDATE:19920328T230000
+TZNAME:AZST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19920926T230000
+RDATE:19920926T230000
+TZNAME:AZT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19960331T050000
+RDATE:19960331T050000
+TZNAME:AZST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19961027T060000
+RDATE:19961027T060000
+TZNAME:AZT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19970330T040000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:AZST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19971026T050000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:AZT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Azores Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Azores Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Azores Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Azores Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,266 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Azores Standard Time
+X-LIC-LOCATION:Azores Standard Time
+BEGIN:STANDARD
+DTSTART:18840101T000000
+RDATE:18840101T000000
+TZNAME:HMT
+TZOFFSETFROM:-014240
+TZOFFSETTO:-015432
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19110524T000000
+RDATE:19110524T000000
+TZNAME:AZOST
+TZOFFSETFROM:-015432
+TZOFFSETTO:-0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19160617T230000
+RDATE:19160617T230000
+RDATE:19170228T230000
+RDATE:19180301T230000
+RDATE:19190228T230000
+RDATE:19200229T230000
+RDATE:19210228T230000
+RDATE:19240416T230000
+RDATE:19260417T230000
+RDATE:19270409T230000
+RDATE:19280414T230000
+RDATE:19290420T230000
+RDATE:19310418T230000
+RDATE:19320402T230000
+RDATE:19340407T230000
+RDATE:19350330T230000
+RDATE:19360418T230000
+RDATE:19370403T230000
+RDATE:19380326T230000
+RDATE:19390415T230000
+RDATE:19400224T230000
+RDATE:19410405T230000
+RDATE:19460406T230000
+TZNAME:AZOST
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19161101T010000
+RDATE:19161101T010000
+RDATE:19241015T000000
+RDATE:19391119T000000
+RDATE:19461006T000000
+TZNAME:AZOT
+TZOFFSETFROM:-0100
+TZOFFSETTO:-0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19171015T000000
+RRULE:FREQ=YEARLY;UNTIL=19211015T010000Z;BYMONTH=10
+TZNAME:AZOT
+TZOFFSETFROM:-0100
+TZOFFSETTO:-0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19261003T000000
+RRULE:FREQ=YEARLY;UNTIL=19291006T010000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:AZOT
+TZOFFSETFROM:-0100
+TZOFFSETTO:-0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19311004T000000
+RRULE:FREQ=YEARLY;UNTIL=19321002T010000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:AZOT
+TZOFFSETFROM:-0100
+TZOFFSETTO:-0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19341007T000000
+RRULE:FREQ=YEARLY;UNTIL=19381002T010000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:AZOT
+TZOFFSETFROM:-0100
+TZOFFSETTO:-0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19401006T000000
+RRULE:FREQ=YEARLY;UNTIL=19411006T010000Z;BYMONTH=10
+TZNAME:AZOT
+TZOFFSETFROM:-0100
+TZOFFSETTO:-0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19420314T230000
+RRULE:FREQ=YEARLY;UNTIL=19450311T010000Z;BYDAY=2SA;BYMONTH=3
+TZNAME:AZOST
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0100
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19420425T230000
+RDATE:19420425T230000
+RDATE:19430417T230000
+TZNAME:AZOMT
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19420816T000000
+RDATE:19420816T000000
+TZNAME:AZOST
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19421025T000000
+RRULE:FREQ=YEARLY;UNTIL=19451028T010000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:AZOT
+TZOFFSETFROM:-0100
+TZOFFSETTO:-0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19430829T000000
+RRULE:FREQ=YEARLY;UNTIL=19450826T000000Z;BYDAY=SU;BYMONTHDAY=26,27,28,29,3
+ 0,31;BYMONTH=8
+TZNAME:AZOST
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0100
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19440422T230000
+RRULE:FREQ=YEARLY;UNTIL=19450422T000000Z;BYDAY=SA;BYMONTHDAY=21,22,23,24,2
+ 5,26,27;BYMONTH=4
+TZNAME:AZOMT
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19470406T020000
+RRULE:FREQ=YEARLY;UNTIL=19490403T040000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:AZOST
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19471005T030000
+RRULE:FREQ=YEARLY;UNTIL=19491002T040000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:AZOT
+TZOFFSETFROM:-0100
+TZOFFSETTO:-0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19510401T020000
+RRULE:FREQ=YEARLY;UNTIL=19650404T040000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:AZOST
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19511007T030000
+RRULE:FREQ=YEARLY;UNTIL=19651003T040000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:AZOT
+TZOFFSETFROM:-0100
+TZOFFSETTO:-0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19660403T020000
+RDATE:19660403T020000
+TZNAME:AZOST
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19770327T000000
+RDATE:19770327T000000
+RDATE:19800330T000000
+RDATE:19830327T020000
+TZNAME:AZOST
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19770925T010000
+RDATE:19770925T010000
+RDATE:19781001T010000
+TZNAME:AZOT
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19780402T000000
+RRULE:FREQ=YEARLY;UNTIL=19790401T010000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:AZOST
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19790930T020000
+RRULE:FREQ=YEARLY;UNTIL=19820926T020000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:AZOT
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810329T010000
+RRULE:FREQ=YEARLY;UNTIL=19820328T020000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:AZOST
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19830925T020000
+RRULE:FREQ=YEARLY;UNTIL=19910929T020000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:AZOT
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19840325T010000
+RRULE:FREQ=YEARLY;UNTIL=19920329T020000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:AZOST
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19920927T020000
+RDATE:19920927T020000
+TZNAME:WEST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19930328T010000
+RDATE:19930328T010000
+TZNAME:AZOST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0000
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19930926T010000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:AZOT
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19940327T000000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:AZOST
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19961027T010000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:AZOT
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0100
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Bahia Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Bahia Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Bahia Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Bahia Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,136 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Bahia Standard Time
+X-LIC-LOCATION:Bahia Standard Time
+BEGIN:STANDARD
+DTSTART:19140101T000000
+RDATE:19140101T000000
+TZNAME:BRST
+TZOFFSETFROM:-023404
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19311003T110000
+RDATE:19311003T110000
+RDATE:19321003T000000
+RDATE:19631209T000000
+RDATE:19650131T000000
+RDATE:19651201T000000
+RDATE:19851102T000000
+RDATE:19861025T000000
+RDATE:19871025T000000
+RDATE:19881016T000000
+RDATE:19891015T000000
+RDATE:19901021T000000
+RDATE:19911020T000000
+RDATE:19921025T000000
+RDATE:19961006T000000
+RDATE:19971006T000000
+RDATE:19981011T000000
+RDATE:19991003T000000
+RDATE:20021103T000000
+RDATE:20111016T000000
+TZNAME:BRST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19320401T000000
+RRULE:FREQ=YEARLY;UNTIL=19330401T020000Z;BYMONTH=4
+TZNAME:BRT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19491201T000000
+RRULE:FREQ=YEARLY;UNTIL=19521201T030000Z;BYMONTH=12
+TZNAME:BRST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19500416T010000
+RDATE:19500416T010000
+RDATE:19530301T000000
+RDATE:19640301T000000
+RDATE:19650331T000000
+RDATE:19860315T000000
+RDATE:19870214T000000
+RDATE:19880207T000000
+RDATE:19890129T000000
+RDATE:19900211T000000
+RDATE:19910217T000000
+RDATE:19920209T000000
+RDATE:19930131T000000
+RDATE:19960211T000000
+RDATE:19970216T000000
+RDATE:19980301T000000
+RDATE:19990221T000000
+RDATE:20000227T000000
+RDATE:20120226T000000
+TZNAME:BRT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19510401T000000
+RRULE:FREQ=YEARLY;UNTIL=19520401T020000Z;BYMONTH=4
+TZNAME:BRT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19660301T000000
+RRULE:FREQ=YEARLY;UNTIL=19680301T020000Z;BYMONTH=3
+TZNAME:BRT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19661101T000000
+RRULE:FREQ=YEARLY;UNTIL=19671101T030000Z;BYMONTH=11
+TZNAME:BRST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19931017T000000
+RRULE:FREQ=YEARLY;UNTIL=19951015T030000Z;BYDAY=-3SU;BYMONTH=10
+TZNAME:BRST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19940220T000000
+RRULE:FREQ=YEARLY;UNTIL=19950219T020000Z;BYDAY=3SU;BYMONTH=2
+TZNAME:BRT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20001008T000000
+RRULE:FREQ=YEARLY;UNTIL=20011014T030000Z;BYDAY=2SU;BYMONTH=10
+TZNAME:BRST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20010218T000000
+RRULE:FREQ=YEARLY;UNTIL=20030216T020000Z;BYDAY=3SU;BYMONTH=2
+TZNAME:BRT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20030924T000000
+RDATE:20030924T000000
+RDATE:20121021T000000
+TZNAME:BRT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Bangladesh Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Bangladesh Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Bangladesh Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Bangladesh Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,72 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Bangladesh Standard Time
+X-LIC-LOCATION:Bangladesh Standard Time
+BEGIN:STANDARD
+DTSTART:18900101T000000
+RDATE:18900101T000000
+TZNAME:HMT
+TZOFFSETFROM:+060140
+TZOFFSETTO:+055320
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19411001T000000
+RDATE:19411001T000000
+TZNAME:BURT
+TZOFFSETFROM:+055320
+TZOFFSETTO:+0630
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19420515T000000
+RDATE:19420515T000000
+TZNAME:IST
+TZOFFSETFROM:+0630
+TZOFFSETTO:+0530
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19420901T000000
+RDATE:19420901T000000
+TZNAME:BURT
+TZOFFSETFROM:+0530
+TZOFFSETTO:+0630
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19510930T000000
+RDATE:19510930T000000
+TZNAME:DACT
+TZOFFSETFROM:+0630
+TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19710326T000000
+RDATE:19710326T000000
+TZNAME:BDT
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20090101T000000
+RDATE:20090101T000000
+TZNAME:BDST
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20090619T230000
+RDATE:20090619T230000
+TZNAME:BDST
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0700
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20091231T235900
+RDATE:20091231T235900
+TZNAME:BDT
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0600
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Canada Central Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Canada Central Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Canada Central Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Canada Central Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,100 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Canada Central Standard Time
+X-LIC-LOCATION:Canada Central Standard Time
+BEGIN:STANDARD
+DTSTART:19050901T000000
+RDATE:19050901T000000
+TZNAME:MST
+TZOFFSETFROM:-065836
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19180414T020000
+RDATE:19180414T020000
+RDATE:19460414T020000
+RDATE:19590426T020000
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19181027T020000
+RDATE:19181027T020000
+RDATE:19371010T000000
+RDATE:19381002T000000
+RDATE:19450930T020000
+RDATE:19461013T020000
+RDATE:19591025T020000
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19300504T000000
+RRULE:FREQ=YEARLY;UNTIL=19340506T070000Z;BYDAY=1SU;BYMONTH=5
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19301005T000000
+RRULE:FREQ=YEARLY;UNTIL=19341007T060000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19370411T000000
+RRULE:FREQ=YEARLY;UNTIL=19410413T070000Z;BYDAY=2SU;BYMONTH=4
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19391008T000000
+RRULE:FREQ=YEARLY;UNTIL=19411012T060000Z;BYDAY=2SU;BYMONTH=10
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:MWT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19450814T170000
+RDATE:19450814T170000
+TZNAME:MPT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19470427T020000
+RRULE:FREQ=YEARLY;UNTIL=19570428T090000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19470928T020000
+RRULE:FREQ=YEARLY;UNTIL=19570929T080000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19600424T020000
+RDATE:19600424T020000
+TZNAME:CST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Cape Verde Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Cape Verde Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Cape Verde Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Cape Verde Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,37 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Cape Verde Standard Time
+X-LIC-LOCATION:Cape Verde Standard Time
+BEGIN:STANDARD
+DTSTART:19070101T000000
+RDATE:19070101T000000
+TZNAME:CVT
+TZOFFSETFROM:-013404
+TZOFFSETTO:-0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19420901T000000
+RDATE:19420901T000000
+TZNAME:CVST
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19451015T000000
+RDATE:19451015T000000
+TZNAME:CVT
+TZOFFSETFROM:-0100
+TZOFFSETTO:-0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19751125T020000
+RDATE:19751125T020000
+TZNAME:CVT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0100
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Caucasus Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Caucasus Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Caucasus Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Caucasus Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,117 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Caucasus Standard Time
+X-LIC-LOCATION:Caucasus Standard Time
+BEGIN:STANDARD
+DTSTART:19240502T000000
+RDATE:19240502T000000
+TZNAME:YERT
+TZOFFSETFROM:+0258
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19570301T000000
+RDATE:19570301T000000
+TZNAME:YERST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T200000Z;BYMONTH=4
+TZNAME:YERST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T190000Z;BYMONTH=10
+TZNAME:YERT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19900929T220000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:YERT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19900324T220000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:YERST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19910331T020000
+RDATE:19910331T020000
+TZNAME:YERST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19910923T000000
+RDATE:19910923T000000
+RDATE:19970101T000000
+TZNAME:AMST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19910929T030000
+RDATE:19910929T030000
+RDATE:19920926T230000
+TZNAME:AMT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19920328T230000
+RDATE:19920328T230000
+TZNAME:AMST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19930328T020000
+RRULE:FREQ=YEARLY;UNTIL=19950325T230000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:AMST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19930926T030000
+RRULE:FREQ=YEARLY;UNTIL=19940924T230000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:AMT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19950924T030000
+RDATE:19950924T030000
+RDATE:20120325T020000
+TZNAME:AMT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19970330T020000
+RRULE:FREQ=YEARLY;UNTIL=20110326T220000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:AMST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19971026T030000
+RRULE:FREQ=YEARLY;UNTIL=20111029T220000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:AMT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Cen. Australia Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Cen. Australia Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Cen. Australia Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Cen. Australia Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,112 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Cen. Australia Standard Time
+X-LIC-LOCATION:Cen. Australia Standard Time
+BEGIN:STANDARD
+DTSTART:18950201T000000
+RDATE:18950201T000000
+TZNAME:CST
+TZOFFSETFROM:+091420
+TZOFFSETTO:+0900
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:18990501T000000
+RDATE:18990501T000000
+TZNAME:CST
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0930
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19170101T000100
+RDATE:19170101T000100
+RDATE:19420101T020000
+RDATE:19420927T020000
+RDATE:19431003T020000
+RDATE:19861019T020000
+TZNAME:CST
+TZOFFSETFROM:+0930
+TZOFFSETTO:+1030
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19170325T020000
+RDATE:19170325T020000
+RDATE:19420329T020000
+RDATE:19720227T030000
+RDATE:19910303T030000
+RDATE:19920322T030000
+RDATE:19930307T030000
+RDATE:19940320T030000
+RDATE:20060402T030000
+RDATE:20070325T030000
+TZNAME:CST
+TZOFFSETFROM:+1030
+TZOFFSETTO:+0930
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19430328T020000
+RRULE:FREQ=YEARLY;UNTIL=19440325T153000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:CST
+TZOFFSETFROM:+1030
+TZOFFSETTO:+0930
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19710101T000000
+RDATE:19710101T000000
+TZNAME:CST
+TZOFFSETFROM:+0930
+TZOFFSETTO:+0930
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19711031T020000
+RRULE:FREQ=YEARLY;UNTIL=19851026T163000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
+TZOFFSETFROM:+0930
+TZOFFSETTO:+1030
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19730304T030000
+RRULE:FREQ=YEARLY;UNTIL=19850302T163000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:CST
+TZOFFSETFROM:+1030
+TZOFFSETTO:+0930
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19860316T030000
+RRULE:FREQ=YEARLY;UNTIL=19900317T163000Z;BYDAY=3SU;BYMONTH=3
+TZNAME:CST
+TZOFFSETFROM:+1030
+TZOFFSETTO:+0930
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19871025T020000
+RRULE:FREQ=YEARLY;UNTIL=20071027T163000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
+TZOFFSETFROM:+0930
+TZOFFSETTO:+1030
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19950326T030000
+RRULE:FREQ=YEARLY;UNTIL=20050326T163000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:CST
+TZOFFSETFROM:+1030
+TZOFFSETTO:+0930
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20080406T030000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
+TZNAME:CST
+TZOFFSETFROM:+1030
+TZOFFSETTO:+0930
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20081005T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=10
+TZNAME:CST
+TZOFFSETFROM:+0930
+TZOFFSETTO:+1030
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central America Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Central America Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central America Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central America Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,36 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Central America Standard Time
+X-LIC-LOCATION:Central America Standard Time
+BEGIN:STANDARD
+DTSTART:19181005T000000
+RDATE:19181005T000000
+TZNAME:CST
+TZOFFSETFROM:-060204
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19731125T000000
+RDATE:19731125T000000
+RDATE:19830521T000000
+RDATE:19910323T000000
+RDATE:20060430T000000
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19740224T000000
+RDATE:19740224T000000
+RDATE:19830922T000000
+RDATE:19910907T000000
+RDATE:20061001T000000
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central Asia Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Central Asia Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central Asia Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central Asia Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,101 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Central Asia Standard Time
+X-LIC-LOCATION:Central Asia Standard Time
+BEGIN:STANDARD
+DTSTART:19240502T000000
+RDATE:19240502T000000
+TZNAME:ALMT
+TZOFFSETFROM:+050748
+TZOFFSETTO:+0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19300621T000000
+RDATE:19300621T000000
+TZNAME:ALMST
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T180000Z;BYMONTH=4
+TZNAME:ALMST
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0700
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T170000Z;BYMONTH=10
+TZNAME:ALMT
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19900929T200000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:ALMT
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19900324T200000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:ALMST
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0700
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19910101T000000
+RDATE:19910101T000000
+RDATE:20050315T000000
+TZNAME:ALMT
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19920101T000000
+RDATE:19920101T000000
+TZNAME:ALMST
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19920328T230000
+RDATE:19920328T230000
+TZNAME:ALMST
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0700
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19920926T230000
+RDATE:19920926T230000
+TZNAME:ALMT
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19930328T020000
+RRULE:FREQ=YEARLY;UNTIL=20040327T200000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:ALMST
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0700
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19930926T030000
+RRULE:FREQ=YEARLY;UNTIL=19950923T200000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:ALMT
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;UNTIL=20041030T200000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:ALMT
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0600
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central Brazilian Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Central Brazilian Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central Brazilian Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central Brazilian Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,183 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Central Brazilian Standard Time
+X-LIC-LOCATION:Central Brazilian Standard Time
+BEGIN:STANDARD
+DTSTART:19140101T000000
+RDATE:19140101T000000
+TZNAME:AMST
+TZOFFSETFROM:-034420
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19311003T110000
+RDATE:19311003T110000
+RDATE:19321003T000000
+RDATE:19631209T000000
+RDATE:19650131T000000
+RDATE:19651201T000000
+RDATE:19851102T000000
+RDATE:19861025T000000
+RDATE:19871025T000000
+RDATE:19881016T000000
+RDATE:19891015T000000
+RDATE:19901021T000000
+RDATE:19911020T000000
+RDATE:19921025T000000
+RDATE:19961006T000000
+RDATE:19971006T000000
+RDATE:19981011T000000
+RDATE:19991003T000000
+RDATE:20021103T000000
+RDATE:20041102T000000
+RDATE:20051016T000000
+RDATE:20061105T000000
+RDATE:20071014T000000
+TZNAME:AMST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19320401T000000
+RRULE:FREQ=YEARLY;UNTIL=19330401T030000Z;BYMONTH=4
+TZNAME:AMT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19491201T000000
+RRULE:FREQ=YEARLY;UNTIL=19521201T040000Z;BYMONTH=12
+TZNAME:AMST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19500416T010000
+RDATE:19500416T010000
+RDATE:19530301T000000
+RDATE:19640301T000000
+RDATE:19650331T000000
+RDATE:19860315T000000
+RDATE:19870214T000000
+RDATE:19880207T000000
+RDATE:19890129T000000
+RDATE:19900211T000000
+RDATE:19910217T000000
+RDATE:19920209T000000
+RDATE:19930131T000000
+RDATE:19960211T000000
+RDATE:19970216T000000
+RDATE:19980301T000000
+RDATE:19990221T000000
+RDATE:20000227T000000
+RDATE:20070225T000000
+RDATE:20120226T000000
+RDATE:20150222T000000
+RDATE:20230226T000000
+TZNAME:AMT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19510401T000000
+RRULE:FREQ=YEARLY;UNTIL=19520401T030000Z;BYMONTH=4
+TZNAME:AMT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19660301T000000
+RRULE:FREQ=YEARLY;UNTIL=19680301T030000Z;BYMONTH=3
+TZNAME:AMT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19661101T000000
+RRULE:FREQ=YEARLY;UNTIL=19671101T040000Z;BYMONTH=11
+TZNAME:AMST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19931017T000000
+RRULE:FREQ=YEARLY;UNTIL=19951015T040000Z;BYDAY=-3SU;BYMONTH=10
+TZNAME:AMST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19940220T000000
+RRULE:FREQ=YEARLY;UNTIL=19950219T030000Z;BYDAY=3SU;BYMONTH=2
+TZNAME:AMT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20001008T000000
+RRULE:FREQ=YEARLY;UNTIL=20011014T040000Z;BYDAY=2SU;BYMONTH=10
+TZNAME:AMST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20010218T000000
+RRULE:FREQ=YEARLY;UNTIL=20030216T030000Z;BYDAY=3SU;BYMONTH=2
+TZNAME:AMT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20030924T000000
+RDATE:20030924T000000
+TZNAME:AMT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20041001T000000
+RDATE:20041001T000000
+TZNAME:AMST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20050220T000000
+RRULE:FREQ=YEARLY;UNTIL=20060219T030000Z;BYDAY=3SU;BYMONTH=2
+TZNAME:AMT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20080217T000000
+RRULE:FREQ=YEARLY;UNTIL=20110220T030000Z;BYDAY=3SU;BYMONTH=2
+TZNAME:AMT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20081019T000000
+RRULE:FREQ=YEARLY;BYDAY=3SU;BYMONTH=10
+TZNAME:AMST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20130217T000000
+RRULE:FREQ=YEARLY;UNTIL=20140216T030000Z;BYDAY=3SU;BYMONTH=2
+TZNAME:AMT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20160221T000000
+RRULE:FREQ=YEARLY;UNTIL=20220220T030000Z;BYDAY=3SU;BYMONTH=2
+TZNAME:AMT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central Europe Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Central Europe Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central Europe Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central Europe Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,118 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Central Europe Standard Time
+X-LIC-LOCATION:Central Europe Standard Time
+BEGIN:STANDARD
+DTSTART:18901001T000000
+RDATE:18901001T000000
+TZNAME:CEST
+TZOFFSETFROM:+011620
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19160430T230000
+RDATE:19160430T230000
+RDATE:19170416T020000
+RDATE:19180401T030000
+RDATE:19190415T030000
+RDATE:19200405T030000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19450501T230000
+RDATE:19460331T020000
+RDATE:19500417T020000
+RDATE:19560603T000000
+RDATE:19570602T010000
+RDATE:19800406T010000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19161001T010000
+RDATE:19161001T010000
+RDATE:19170917T030000
+RDATE:19180929T030000
+RDATE:19190915T030000
+RDATE:19200930T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19441002T030000
+RDATE:19451103T000000
+RDATE:19501023T030000
+RDATE:19560930T000000
+RDATE:19570929T030000
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19180101T000000
+RDATE:19180101T000000
+RDATE:19450101T000000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19410406T020000
+RDATE:19410406T020000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19461006T030000
+RRULE:FREQ=YEARLY;UNTIL=19491002T010000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19470406T020000
+RRULE:FREQ=YEARLY;UNTIL=19490410T010000Z;BYDAY=SU;BYMONTHDAY=4,5,6,7,8,9,1
+ 0;BYMONTH=4
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19540523T000000
+RRULE:FREQ=YEARLY;UNTIL=19550522T230000Z;BYMONTH=5
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19541003T000000
+RRULE:FREQ=YEARLY;UNTIL=19551002T220000Z;BYMONTH=10
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19800928T030000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central European Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Central European Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central European Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central European Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,190 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Central European Standard Time
+X-LIC-LOCATION:Central European Standard Time
+BEGIN:STANDARD
+DTSTART:18800101T000000
+RDATE:18800101T000000
+TZNAME:WMT
+TZOFFSETFROM:+0124
+TZOFFSETTO:+0124
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19150805T000000
+RDATE:19150805T000000
+TZNAME:CEST
+TZOFFSETFROM:+0124
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19160430T230000
+RDATE:19160430T230000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19450429T000000
+RDATE:19460414T000000
+RDATE:19470504T020000
+RDATE:19480418T020000
+RDATE:19490410T020000
+RDATE:19570602T010000
+RDATE:19580330T010000
+RDATE:19590531T010000
+RDATE:19600403T010000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19161001T010000
+RDATE:19161001T010000
+RDATE:19170917T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19441004T020000
+RDATE:19451101T000000
+RDATE:19461007T030000
+RDATE:19770925T020000
+RDATE:19781001T020000
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19170416T020000
+RRULE:FREQ=YEARLY;UNTIL=19180415T010000Z;BYDAY=3MO;BYMONTH=4
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19180916T030000
+RDATE:19180916T030000
+TZNAME:EET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19190415T020000
+RDATE:19190415T020000
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19190916T030000
+RRULE:FREQ=YEARLY;UNTIL=19190916T000000Z;BYMONTH=9
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19220601T000000
+RDATE:19220601T000000
+TZNAME:CEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19400623T020000
+RDATE:19400623T020000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19441001T000000
+RDATE:19441001T000000
+TZNAME:CEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19471005T030000
+RRULE:FREQ=YEARLY;UNTIL=19491002T010000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19570929T020000
+RRULE:FREQ=YEARLY;UNTIL=19580928T000000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19591004T020000
+RRULE:FREQ=YEARLY;UNTIL=19611001T000000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19610528T010000
+RRULE:FREQ=YEARLY;UNTIL=19640531T000000Z;BYDAY=-1SU;BYMONTH=5
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19620930T020000
+RRULE:FREQ=YEARLY;UNTIL=19640927T000000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19770101T000000
+RDATE:19770101T000000
+RDATE:19880101T000000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19770403T010000
+RRULE:FREQ=YEARLY;UNTIL=19800406T000000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19790930T020000
+RRULE:FREQ=YEARLY;UNTIL=19870927T000000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810329T010000
+RRULE:FREQ=YEARLY;UNTIL=19870329T000000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19880327T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19880925T030000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central Pacific Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Central Pacific Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central Pacific Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central Pacific Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Central Pacific Standard Time
+X-LIC-LOCATION:Central Pacific Standard Time
+BEGIN:STANDARD
+DTSTART:19121001T000000
+RDATE:19121001T000000
+TZNAME:SBT
+TZOFFSETFROM:+103948
+TZOFFSETTO:+1100
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central Standard Time (Mexico).ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Central Standard Time (Mexico).ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central Standard Time (Mexico).ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central Standard Time (Mexico).ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,96 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Central Standard Time (Mexico)
+X-LIC-LOCATION:Central Standard Time (Mexico)
+BEGIN:STANDARD
+DTSTART:19220101T002324
+RDATE:19220101T002324
+TZNAME:MST
+TZOFFSETFROM:-063636
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19270610T230000
+RDATE:19270610T230000
+RDATE:19310501T230000
+RDATE:19320401T000000
+TZNAME:CST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19301115T000000
+RDATE:19301115T000000
+RDATE:19311001T000000
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19390205T000000
+RDATE:19390205T000000
+RDATE:19401209T000000
+RDATE:19500212T000000
+RDATE:20010506T020000
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19390625T000000
+RDATE:19390625T000000
+RDATE:19410401T000000
+RDATE:19440501T000000
+RDATE:19500730T000000
+RDATE:20010930T020000
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19431216T000000
+RDATE:19431216T000000
+TZNAME:CWT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19960407T020000
+RRULE:FREQ=YEARLY;UNTIL=20000402T080000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19961027T020000
+RRULE:FREQ=YEARLY;UNTIL=20001029T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20020220T000000
+RDATE:20020220T000000
+TZNAME:CST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20020407T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20021027T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Central Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,177 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Central Standard Time
+X-LIC-LOCATION:Central Standard Time
+BEGIN:STANDARD
+DTSTART:18831118T120924
+RDATE:18831118T120924
+TZNAME:CST
+TZOFFSETFROM:-055036
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19180331T020000
+RRULE:FREQ=YEARLY;UNTIL=19190330T080000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19181027T020000
+RRULE:FREQ=YEARLY;UNTIL=19191026T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19200101T000000
+RDATE:19200101T000000
+RDATE:19420101T000000
+RDATE:19460101T000000
+RDATE:19670101T000000
+TZNAME:CST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19200613T020000
+RDATE:19200613T020000
+RDATE:19210327T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19201031T020000
+RRULE:FREQ=YEARLY;UNTIL=19211030T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19220430T020000
+RRULE:FREQ=YEARLY;UNTIL=19350428T080000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19220924T020000
+RRULE:FREQ=YEARLY;UNTIL=19350929T070000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19360301T020000
+RDATE:19360301T020000
+TZNAME:EST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19361115T020000
+RDATE:19361115T020000
+RDATE:19450930T020000
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19370425T020000
+RRULE:FREQ=YEARLY;UNTIL=19410427T080000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19370926T020000
+RRULE:FREQ=YEARLY;UNTIL=19410928T070000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:CWT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19450814T180000
+RDATE:19450814T180000
+TZNAME:CPT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19460428T020000
+RRULE:FREQ=YEARLY;UNTIL=19660424T080000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19460929T020000
+RRULE:FREQ=YEARLY;UNTIL=19540926T070000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19551030T020000
+RRULE:FREQ=YEARLY;UNTIL=19661030T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19670430T020000
+RRULE:FREQ=YEARLY;UNTIL=19730429T080000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19671029T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19760425T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T080000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T080000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/China Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/China Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/China Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/China Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,54 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:China Standard Time
+X-LIC-LOCATION:China Standard Time
+BEGIN:STANDARD
+DTSTART:19280101T000000
+RDATE:19280101T000000
+TZNAME:CST
+TZOFFSETFROM:+080557
+TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19400603T000000
+RDATE:19400603T000000
+RDATE:19410316T000000
+RDATE:19860504T000000
+TZNAME:CDT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19401001T000000
+RRULE:FREQ=YEARLY;UNTIL=19410930T150000Z;BYMONTH=10
+TZNAME:CST
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19490101T000000
+RDATE:19490101T000000
+TZNAME:CST
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19860914T000000
+RRULE:FREQ=YEARLY;UNTIL=19910914T150000Z;BYDAY=SU;BYMONTHDAY=11,12,13,14,1
+ 5,16,17;BYMONTH=9
+TZNAME:CST
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19870412T000000
+RRULE:FREQ=YEARLY;UNTIL=19910413T160000Z;BYDAY=-3SU;BYMONTH=4
+TZNAME:CDT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Dateline Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Dateline Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Dateline Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Dateline Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Dateline Standard Time
+X-LIC-LOCATION:Dateline Standard Time
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:GMT+12
+TZOFFSETFROM:-1200
+TZOFFSETTO:-1200
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/E. Africa Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/E. Africa Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/E. Africa Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/E. Africa Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,37 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:E. Africa Standard Time
+X-LIC-LOCATION:E. Africa Standard Time
+BEGIN:STANDARD
+DTSTART:19280701T000000
+RDATE:19280701T000000
+TZNAME:EAT
+TZOFFSETFROM:+022716
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19300101T000000
+RDATE:19300101T000000
+TZNAME:BEAT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0230
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19400101T000000
+RDATE:19400101T000000
+TZNAME:BEAUT
+TZOFFSETFROM:+0230
+TZOFFSETTO:+0245
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19600101T000000
+RDATE:19600101T000000
+TZNAME:EAT
+TZOFFSETFROM:+0245
+TZOFFSETTO:+0300
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/E. Australia Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/E. Australia Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/E. Australia Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/E. Australia Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,64 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:E. Australia Standard Time
+X-LIC-LOCATION:E. Australia Standard Time
+BEGIN:STANDARD
+DTSTART:18950101T000000
+RDATE:18950101T000000
+TZNAME:EST
+TZOFFSETFROM:+101208
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19170101T000100
+RDATE:19170101T000100
+RDATE:19420101T020000
+RDATE:19420927T020000
+RDATE:19431003T020000
+RDATE:19711031T020000
+TZNAME:EST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19170325T020000
+RDATE:19170325T020000
+RDATE:19420329T020000
+RDATE:19720227T030000
+TZNAME:EST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19430328T020000
+RRULE:FREQ=YEARLY;UNTIL=19440325T150000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19710101T000000
+RDATE:19710101T000000
+TZNAME:EST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19891029T020000
+RRULE:FREQ=YEARLY;UNTIL=19911026T160000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19900304T030000
+RRULE:FREQ=YEARLY;UNTIL=19920229T160000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:EST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/E. South America Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/E. South America Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/E. South America Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/E. South America Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,176 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:E. South America Standard Time
+X-LIC-LOCATION:E. South America Standard Time
+BEGIN:STANDARD
+DTSTART:19140101T000000
+RDATE:19140101T000000
+TZNAME:BRST
+TZOFFSETFROM:-030628
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19311003T110000
+RDATE:19311003T110000
+RDATE:19321003T000000
+RDATE:19650131T000000
+RDATE:19651201T000000
+RDATE:19851102T000000
+RDATE:19861025T000000
+RDATE:19871025T000000
+RDATE:19881016T000000
+RDATE:19891015T000000
+RDATE:19901021T000000
+RDATE:19911020T000000
+RDATE:19921025T000000
+RDATE:19961006T000000
+RDATE:19971006T000000
+RDATE:19981011T000000
+RDATE:19991003T000000
+RDATE:20021103T000000
+RDATE:20031019T000000
+RDATE:20041102T000000
+RDATE:20051016T000000
+RDATE:20061105T000000
+RDATE:20071014T000000
+TZNAME:BRST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19320401T000000
+RRULE:FREQ=YEARLY;UNTIL=19330401T020000Z;BYMONTH=4
+TZNAME:BRT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19491201T000000
+RRULE:FREQ=YEARLY;UNTIL=19521201T030000Z;BYMONTH=12
+TZNAME:BRST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19500416T010000
+RDATE:19500416T010000
+RDATE:19530301T000000
+RDATE:19640301T000000
+RDATE:19650331T000000
+RDATE:19860315T000000
+RDATE:19870214T000000
+RDATE:19880207T000000
+RDATE:19890129T000000
+RDATE:19900211T000000
+RDATE:19910217T000000
+RDATE:19920209T000000
+RDATE:19930131T000000
+RDATE:19960211T000000
+RDATE:19970216T000000
+RDATE:19980301T000000
+RDATE:19990221T000000
+RDATE:20000227T000000
+RDATE:20070225T000000
+RDATE:20120226T000000
+RDATE:20150222T000000
+RDATE:20230226T000000
+TZNAME:BRT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19510401T000000
+RRULE:FREQ=YEARLY;UNTIL=19520401T020000Z;BYMONTH=4
+TZNAME:BRT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19631023T000000
+RDATE:19631023T000000
+TZNAME:BRST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19640101T000000
+RDATE:19640101T000000
+TZNAME:BRST
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19660301T000000
+RRULE:FREQ=YEARLY;UNTIL=19680301T020000Z;BYMONTH=3
+TZNAME:BRT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19661101T000000
+RRULE:FREQ=YEARLY;UNTIL=19671101T030000Z;BYMONTH=11
+TZNAME:BRST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19931017T000000
+RRULE:FREQ=YEARLY;UNTIL=19951015T030000Z;BYDAY=-3SU;BYMONTH=10
+TZNAME:BRST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19940220T000000
+RRULE:FREQ=YEARLY;UNTIL=19950219T020000Z;BYDAY=3SU;BYMONTH=2
+TZNAME:BRT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20001008T000000
+RRULE:FREQ=YEARLY;UNTIL=20011014T030000Z;BYDAY=2SU;BYMONTH=10
+TZNAME:BRST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20010218T000000
+RRULE:FREQ=YEARLY;UNTIL=20060219T020000Z;BYDAY=3SU;BYMONTH=2
+TZNAME:BRT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20080217T000000
+RRULE:FREQ=YEARLY;UNTIL=20110220T020000Z;BYDAY=3SU;BYMONTH=2
+TZNAME:BRT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20081019T000000
+RRULE:FREQ=YEARLY;BYDAY=3SU;BYMONTH=10
+TZNAME:BRST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20130217T000000
+RRULE:FREQ=YEARLY;UNTIL=20140216T020000Z;BYDAY=3SU;BYMONTH=2
+TZNAME:BRT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20160221T000000
+RRULE:FREQ=YEARLY;UNTIL=20220220T020000Z;BYDAY=3SU;BYMONTH=2
+TZNAME:BRT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Eastern Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Eastern Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Eastern Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Eastern Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,148 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Eastern Standard Time
+X-LIC-LOCATION:Eastern Standard Time
+BEGIN:STANDARD
+DTSTART:18831118T120358
+RDATE:18831118T120358
+TZNAME:EST
+TZOFFSETFROM:-045602
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19180331T020000
+RRULE:FREQ=YEARLY;UNTIL=19190330T070000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19181027T020000
+RRULE:FREQ=YEARLY;UNTIL=19191026T060000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19200101T000000
+RDATE:19200101T000000
+RDATE:19420101T000000
+RDATE:19460101T000000
+RDATE:19670101T000000
+TZNAME:EST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19200328T020000
+RDATE:19200328T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19201031T020000
+RDATE:19201031T020000
+RDATE:19450930T020000
+TZNAME:EST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19210424T020000
+RRULE:FREQ=YEARLY;UNTIL=19410427T070000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19210925T020000
+RRULE:FREQ=YEARLY;UNTIL=19410928T060000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:EWT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19450814T190000
+RDATE:19450814T190000
+TZNAME:EPT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19460428T020000
+RRULE:FREQ=YEARLY;UNTIL=19660424T070000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19460929T020000
+RRULE:FREQ=YEARLY;UNTIL=19540926T060000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19551030T020000
+RRULE:FREQ=YEARLY;UNTIL=19661030T060000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19670430T020000
+RRULE:FREQ=YEARLY;UNTIL=19730429T070000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19671029T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T060000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19760425T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T070000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T070000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:EST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Egypt Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Egypt Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Egypt Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Egypt Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,148 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Egypt Standard Time
+X-LIC-LOCATION:Egypt Standard Time
+BEGIN:STANDARD
+DTSTART:19001001T000000
+RDATE:19001001T000000
+TZNAME:EEST
+TZOFFSETFROM:+020509
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19400715T000000
+RDATE:19400715T000000
+RDATE:19410415T000000
+RDATE:19450416T000000
+RDATE:19570510T000000
+RDATE:19580501T000000
+RDATE:19820725T010000
+RDATE:19830712T010000
+RDATE:19890506T010000
+RDATE:20100910T000000
+RDATE:20140515T235959
+RDATE:20140729T000000
+RDATE:20150718T000000
+RDATE:20160707T000000
+RDATE:20170626T000000
+RDATE:20180615T000000
+RDATE:20190605T000000
+RDATE:20200524T000000
+RDATE:20210513T000000
+RDATE:20220503T000000
+RDATE:20230428T000000
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19401001T000000
+RDATE:19401001T000000
+RDATE:19410916T000000
+RDATE:19421027T000000
+RDATE:20060922T000000
+RDATE:20070907T000000
+RDATE:20080829T000000
+RDATE:20090821T000000
+RDATE:20100811T000000
+RDATE:20101001T000000
+RDATE:20140629T010000
+RDATE:20150618T010000
+RDATE:20160607T010000
+RDATE:20170527T010000
+RDATE:20180516T010000
+RDATE:20190506T010000
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19420401T000000
+RRULE:FREQ=YEARLY;UNTIL=19440331T220000Z;BYMONTH=4
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19431101T000000
+RRULE:FREQ=YEARLY;UNTIL=19451031T210000Z;BYMONTH=11
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19571001T000000
+RRULE:FREQ=YEARLY;UNTIL=19580930T210000Z;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19590501T010000
+RRULE:FREQ=YEARLY;UNTIL=19810430T230000Z;BYMONTH=5
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19590930T030000
+RRULE:FREQ=YEARLY;UNTIL=19650930T000000Z;BYMONTH=9
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19661001T030000
+RRULE:FREQ=YEARLY;UNTIL=19941001T000000Z;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19840501T010000
+RRULE:FREQ=YEARLY;UNTIL=19880430T230000Z;BYMONTH=5
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19900501T010000
+RRULE:FREQ=YEARLY;UNTIL=19940430T230000Z;BYMONTH=5
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19950428T000000
+RRULE:FREQ=YEARLY;UNTIL=20100429T220000Z;BYDAY=-1FR;BYMONTH=4
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19950929T000000
+RRULE:FREQ=YEARLY;UNTIL=20050929T210000Z;BYDAY=FR;BYYEARDAY=-92,-93,-94,-9
+ 5,-96,-97,-98
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20140926T000000
+RRULE:FREQ=YEARLY;BYDAY=FR;BYYEARDAY=-92,-93,-94,-95,-96,-97,-98
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20150424T000000
+RRULE:FREQ=YEARLY;UNTIL=20190425T220000Z;BYDAY=-1FR;BYMONTH=4
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Ekaterinburg Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Ekaterinburg Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Ekaterinburg Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Ekaterinburg Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,114 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Ekaterinburg Standard Time
+X-LIC-LOCATION:Ekaterinburg Standard Time
+BEGIN:STANDARD
+DTSTART:19190715T040000
+RDATE:19190715T040000
+TZNAME:SVET
+TZOFFSETFROM:+040224
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19300621T000000
+RDATE:19300621T000000
+TZNAME:SVEST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T190000Z;BYMONTH=4
+TZNAME:SVEST
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T180000Z;BYMONTH=10
+TZNAME:SVET
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19900929T210000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:SVET
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19900324T210000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:SVEST
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19910331T020000
+RDATE:19910331T020000
+TZNAME:SVEST
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19910929T030000
+RDATE:19910929T030000
+TZNAME:SVET
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19920119T020000
+RDATE:19920119T020000
+TZNAME:YEKST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19920328T230000
+RDATE:19920328T230000
+TZNAME:YEKST
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19920926T230000
+RDATE:19920926T230000
+TZNAME:YEKT
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19930328T020000
+RRULE:FREQ=YEARLY;UNTIL=20100327T210000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:YEKST
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19930926T030000
+RRULE:FREQ=YEARLY;UNTIL=19950923T210000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:YEKT
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;UNTIL=20101030T210000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:YEKT
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20110327T020000
+RDATE:20110327T020000
+TZNAME:YEKT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/FLE Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/FLE Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/FLE Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/FLE Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,143 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:FLE Standard Time
+X-LIC-LOCATION:FLE Standard Time
+BEGIN:STANDARD
+DTSTART:18800101T000000
+RDATE:18800101T000000
+TZNAME:KMT
+TZOFFSETFROM:+020204
+TZOFFSETTO:+020204
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19240502T000000
+RDATE:19240502T000000
+TZNAME:EET
+TZOFFSETFROM:+020204
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19300621T000000
+RDATE:19300621T000000
+TZNAME:MSK
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19410920T000000
+RDATE:19410920T000000
+TZNAME:CEST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19421102T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19430329T020000
+RDATE:19430329T020000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19431106T000000
+RDATE:19431106T000000
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T210000Z;BYMONTH=4
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T200000Z;BYMONTH=10
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19890923T230000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19900324T230000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19900701T020000
+RDATE:19900701T020000
+TZNAME:EEST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19910929T030000
+RDATE:19910929T030000
+TZNAME:EEST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19920329T000000
+RRULE:FREQ=YEARLY;UNTIL=19940326T220000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19920927T000000
+RRULE:FREQ=YEARLY;UNTIL=19940924T210000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19950101T000000
+RDATE:19950101T000000
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19950326T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19950924T040000
+RDATE:19950924T040000
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19961027T040000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Fiji Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Fiji Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Fiji Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Fiji Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,66 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Fiji Standard Time
+X-LIC-LOCATION:Fiji Standard Time
+BEGIN:STANDARD
+DTSTART:19151026T000000
+RDATE:19151026T000000
+TZNAME:FJST
+TZOFFSETFROM:+115544
+TZOFFSETTO:+1200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19981101T020000
+RRULE:FREQ=YEARLY;UNTIL=19991106T140000Z;BYDAY=1SU;BYMONTH=11
+TZNAME:FJST
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19990228T030000
+RRULE:FREQ=YEARLY;UNTIL=20000226T140000Z;BYDAY=-1SU;BYMONTH=2
+TZNAME:FJT
+TZOFFSETFROM:+1300
+TZOFFSETTO:+1200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20091129T020000
+RDATE:20091129T020000
+TZNAME:FJST
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20100328T030000
+RDATE:20100328T030000
+RDATE:20110306T030000
+TZNAME:FJT
+TZOFFSETFROM:+1300
+TZOFFSETTO:+1200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20101024T020000
+RRULE:FREQ=YEARLY;BYDAY=SU;BYMONTHDAY=21,22,23,24,25,26,27;BYMONTH=10
+TZNAME:FJST
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20120122T030000
+RRULE:FREQ=YEARLY;UNTIL=20130119T140000Z;BYDAY=-2SU;BYMONTH=1
+TZNAME:FJT
+TZOFFSETFROM:+1300
+TZOFFSETTO:+1200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20140119T020000
+RRULE:FREQ=YEARLY;BYDAY=-2SU;BYMONTH=1
+TZNAME:FJT
+TZOFFSETFROM:+1300
+TZOFFSETTO:+1200
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/GMT Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/GMT Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/GMT Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/GMT Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,291 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:GMT Standard Time
+X-LIC-LOCATION:GMT Standard Time
+BEGIN:STANDARD
+DTSTART:18471201T000000
+RDATE:18471201T000000
+TZNAME:S
+TZOFFSETFROM:-000115
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19160521T020000
+RDATE:19160521T020000
+RDATE:19170408T020000
+RDATE:19180324T020000
+RDATE:19190330T020000
+RDATE:19200328T020000
+RDATE:19210403T020000
+RDATE:19220326T020000
+RDATE:19230422T020000
+RDATE:19240413T020000
+RDATE:19270410T020000
+RDATE:19300413T020000
+RDATE:19330409T020000
+RDATE:19340422T020000
+RDATE:19350414T020000
+RDATE:19380410T020000
+RDATE:19390416T020000
+RDATE:19400225T020000
+RDATE:19460414T020000
+RDATE:19470316T020000
+RDATE:19480314T020000
+RDATE:19490403T020000
+RDATE:19530419T020000
+RDATE:19540411T020000
+RDATE:19570414T020000
+RDATE:19600410T020000
+RDATE:19680218T020000
+TZNAME:BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19161001T030000
+RDATE:19161001T030000
+RDATE:19170917T030000
+RDATE:19180930T030000
+RDATE:19190929T030000
+RDATE:19201025T030000
+RDATE:19211003T030000
+RDATE:19221008T030000
+RDATE:19391119T030000
+RDATE:19471102T030000
+RDATE:19481031T030000
+RDATE:19491030T030000
+TZNAME:GMT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19230916T030000
+RRULE:FREQ=YEARLY;UNTIL=19240921T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=9
+TZNAME:GMT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19250419T020000
+RRULE:FREQ=YEARLY;UNTIL=19260418T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19251004T030000
+RRULE:FREQ=YEARLY;UNTIL=19381002T020000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:GMT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19280422T020000
+RRULE:FREQ=YEARLY;UNTIL=19290421T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19310419T020000
+RRULE:FREQ=YEARLY;UNTIL=19320417T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19360419T020000
+RRULE:FREQ=YEARLY;UNTIL=19370418T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19410504T020000
+RDATE:19410504T020000
+RDATE:19450402T020000
+RDATE:19470413T020000
+TZNAME:BDST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19410810T030000
+RRULE:FREQ=YEARLY;UNTIL=19430815T010000Z;BYDAY=SU;BYMONTHDAY=9,10,11,12,13
+ ,14,15;BYMONTH=8
+TZNAME:BST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19420405T020000
+RRULE:FREQ=YEARLY;UNTIL=19440402T010000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=4
+TZNAME:BDST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19440917T030000
+RDATE:19440917T030000
+RDATE:19450715T030000
+RDATE:19470810T030000
+TZNAME:BST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19451007T030000
+RRULE:FREQ=YEARLY;UNTIL=19461006T020000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:GMT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19500416T020000
+RRULE:FREQ=YEARLY;UNTIL=19520420T020000Z;BYDAY=SU;BYMONTHDAY=14,15,16,17,1
+ 8,19,20;BYMONTH=4
+TZNAME:BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19501022T030000
+RRULE:FREQ=YEARLY;UNTIL=19521026T020000Z;BYDAY=SU;BYMONTHDAY=21,22,23,24,2
+ 5,26,27;BYMONTH=10
+TZNAME:GMT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19531004T030000
+RRULE:FREQ=YEARLY;UNTIL=19601002T020000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:GMT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19550417T020000
+RRULE:FREQ=YEARLY;UNTIL=19560422T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19580420T020000
+RRULE:FREQ=YEARLY;UNTIL=19590419T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19610326T020000
+RRULE:FREQ=YEARLY;UNTIL=19630331T020000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19611029T030000
+RRULE:FREQ=YEARLY;UNTIL=19671029T020000Z;BYDAY=SU;BYMONTHDAY=23,24,25,26,2
+ 7,28,29;BYMONTH=10
+TZNAME:GMT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19640322T020000
+RRULE:FREQ=YEARLY;UNTIL=19670319T020000Z;BYDAY=SU;BYMONTHDAY=19,20,21,22,2
+ 3,24,25;BYMONTH=3
+TZNAME:BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19681027T000000
+RDATE:19681027T000000
+TZNAME:BST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19711031T030000
+RDATE:19711031T030000
+TZNAME:S
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19720319T020000
+RRULE:FREQ=YEARLY;UNTIL=19800316T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=3
+TZNAME:BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19721029T030000
+RRULE:FREQ=YEARLY;UNTIL=19801026T020000Z;BYDAY=SU;BYMONTHDAY=23,24,25,26,2
+ 7,28,29;BYMONTH=10
+TZNAME:GMT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810329T010000
+RRULE:FREQ=YEARLY;UNTIL=19950326T010000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19811025T020000
+RRULE:FREQ=YEARLY;UNTIL=19891029T010000Z;BYDAY=SU;BYMONTHDAY=23,24,25,26,2
+ 7,28,29;BYMONTH=10
+TZNAME:GMT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19901028T020000
+RRULE:FREQ=YEARLY;UNTIL=19951022T010000Z;BYDAY=4SU;BYMONTH=10
+TZNAME:GMT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19960101T000000
+RDATE:19960101T000000
+TZNAME:GMT/BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19960331T010000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:GMT/BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19961027T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:GMT/BST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/GTB Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/GTB Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/GTB Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/GTB Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,121 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:GTB Standard Time
+X-LIC-LOCATION:GTB Standard Time
+BEGIN:STANDARD
+DTSTART:18911001T000000
+RDATE:18911001T000000
+TZNAME:BMT
+TZOFFSETFROM:+014424
+TZOFFSETTO:+014424
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19310724T000000
+RDATE:19310724T000000
+TZNAME:EEST
+TZOFFSETFROM:+014424
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19320521T000000
+RDATE:19320521T000000
+RDATE:19790527T000000
+RDATE:19800405T230000
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19321002T010000
+RRULE:FREQ=YEARLY;UNTIL=19390930T220000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19330402T000000
+RRULE:FREQ=YEARLY;UNTIL=19390401T220000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=4
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19790930T000000
+RDATE:19790930T000000
+RDATE:19800928T010000
+RDATE:19961027T000000
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;UNTIL=19900325T000000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19810927T030000
+RRULE:FREQ=YEARLY;UNTIL=19900930T000000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19910101T000000
+RDATE:19910101T000000
+RDATE:19940101T000000
+RDATE:19970101T000000
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19910331T000000
+RRULE:FREQ=YEARLY;UNTIL=19930327T220000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19910929T010000
+RRULE:FREQ=YEARLY;UNTIL=19930925T220000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19940327T000000
+RRULE:FREQ=YEARLY;UNTIL=19960330T220000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19940925T000000
+RRULE:FREQ=YEARLY;UNTIL=19950923T210000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19970330T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19971026T040000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Georgian Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Georgian Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Georgian Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Georgian Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,152 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Georgian Standard Time
+X-LIC-LOCATION:Georgian Standard Time
+BEGIN:STANDARD
+DTSTART:18800101T000000
+RDATE:18800101T000000
+TZNAME:TBMT
+TZOFFSETFROM:+025916
+TZOFFSETTO:+025916
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19240502T000000
+RDATE:19240502T000000
+TZNAME:TBIT
+TZOFFSETFROM:+025916
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19570301T000000
+RDATE:19570301T000000
+TZNAME:TBIST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T200000Z;BYMONTH=4
+TZNAME:TBIST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T190000Z;BYMONTH=10
+TZNAME:TBIT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19900929T220000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:TBIT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19900324T220000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:TBIST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19910331T020000
+RDATE:19910331T020000
+TZNAME:TBIST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19910409T000000
+RDATE:19910409T000000
+RDATE:19940925T000000
+TZNAME:GEST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19910929T030000
+RDATE:19910929T030000
+RDATE:20041031T030000
+TZNAME:GET
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19920101T000000
+RDATE:19920101T000000
+TZNAME:GEST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19920329T000000
+RRULE:FREQ=YEARLY;UNTIL=19940326T210000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:GEST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19920927T000000
+RRULE:FREQ=YEARLY;UNTIL=19930925T200000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:GET
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19950326T000000
+RRULE:FREQ=YEARLY;UNTIL=19960330T200000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:GEST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19950924T000000
+RDATE:19950924T000000
+TZNAME:GET
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19961027T000000
+RDATE:19961027T000000
+RDATE:19970330T000000
+TZNAME:GEST
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19971026T000000
+RRULE:FREQ=YEARLY;UNTIL=20031025T190000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:GET
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19980329T000000
+RRULE:FREQ=YEARLY;UNTIL=20040327T200000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:GEST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20040627T000000
+RDATE:20040627T000000
+TZNAME:GEST
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20050327T020000
+RDATE:20050327T020000
+TZNAME:GET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Greenland Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Greenland Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Greenland Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Greenland Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,45 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Greenland Standard Time
+X-LIC-LOCATION:Greenland Standard Time
+BEGIN:STANDARD
+DTSTART:19160728T000000
+RDATE:19160728T000000
+TZNAME:WGT
+TZOFFSETFROM:-032656
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19800406T020000
+RDATE:19800406T020000
+TZNAME:WGST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19800927T230000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=SA;BYMONTHDAY=23,24,25,26,2
+ 7,28,29;BYMONTH=9
+TZNAME:WGT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810328T220000
+RRULE:FREQ=YEARLY;BYDAY=SA;BYMONTHDAY=24,25,26,27,28,29,30;BYMONTH=3
+TZNAME:WGST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19961026T230000
+RRULE:FREQ=YEARLY;BYDAY=SA;BYMONTHDAY=24,25,26,27,28,29,30;BYMONTH=10
+TZNAME:WGT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Greenwich Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Greenwich Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Greenwich Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Greenwich Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,89 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Greenwich Standard Time
+X-LIC-LOCATION:Greenwich Standard Time
+BEGIN:STANDARD
+DTSTART:18370101T000000
+RDATE:18370101T000000
+TZNAME:RMT
+TZOFFSETFROM:-012724
+TZOFFSETTO:-012748
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19080101T000000
+RDATE:19080101T000000
+TZNAME:ISST
+TZOFFSETFROM:-012748
+TZOFFSETTO:-0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19170219T230000
+RRULE:FREQ=YEARLY;UNTIL=19180220T000000Z;BYMONTH=2
+TZNAME:ISST
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19171021T010000
+RDATE:19171021T010000
+RDATE:19181116T010000
+RDATE:19391129T020000
+RDATE:19401103T020000
+RDATE:19411102T020000
+RDATE:19421025T020000
+RDATE:19491030T020000
+RDATE:19671029T020000
+TZNAME:IST
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19390429T230000
+RDATE:19390429T230000
+RDATE:19400225T020000
+RDATE:19410302T010000
+RDATE:19420308T010000
+TZNAME:ISST
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19430307T010000
+RRULE:FREQ=YEARLY;UNTIL=19460303T020000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:ISST
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19431024T020000
+RRULE:FREQ=YEARLY;UNTIL=19481024T020000Z;BYDAY=4SU;BYMONTH=10
+TZNAME:IST
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19470406T010000
+RRULE:FREQ=YEARLY;UNTIL=19670402T020000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:ISST
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19501022T020000
+RRULE:FREQ=YEARLY;UNTIL=19661023T020000Z;BYDAY=4SU;BYMONTH=10
+TZNAME:IST
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19680407T010000
+RDATE:19680407T010000
+TZNAME:GMT
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Hawaiian Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Hawaiian Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Hawaiian Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Hawaiian Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,39 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Hawaiian Standard Time
+X-LIC-LOCATION:Hawaiian Standard Time
+BEGIN:STANDARD
+DTSTART:18960113T120000
+RDATE:18960113T120000
+TZNAME:HST
+TZOFFSETFROM:-103126
+TZOFFSETTO:-1030
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19330430T020000
+RDATE:19330430T020000
+RDATE:19420209T020000
+TZNAME:HDT
+TZOFFSETFROM:-1030
+TZOFFSETTO:-0930
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19330521T120000
+RDATE:19330521T120000
+RDATE:19450930T020000
+TZNAME:HST
+TZOFFSETFROM:-0930
+TZOFFSETTO:-1030
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19470608T020000
+RDATE:19470608T020000
+TZNAME:HST
+TZOFFSETFROM:-1030
+TZOFFSETTO:-1000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/India Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/India Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/India Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/India Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,38 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:India Standard Time
+X-LIC-LOCATION:India Standard Time
+BEGIN:STANDARD
+DTSTART:18800101T000000
+RDATE:18800101T000000
+TZNAME:HMT
+TZOFFSETFROM:+055328
+TZOFFSETTO:+055320
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19411001T000000
+RDATE:19411001T000000
+TZNAME:BURT
+TZOFFSETFROM:+055320
+TZOFFSETTO:+0630
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19420515T000000
+RDATE:19420515T000000
+RDATE:19451015T000000
+TZNAME:IST
+TZOFFSETFROM:+0630
+TZOFFSETTO:+0530
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19420901T000000
+RDATE:19420901T000000
+TZNAME:IST
+TZOFFSETFROM:+0530
+TZOFFSETTO:+0630
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Iran Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Iran Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Iran Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Iran Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,187 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Iran Standard Time
+X-LIC-LOCATION:Iran Standard Time
+BEGIN:STANDARD
+DTSTART:19160101T000000
+RDATE:19160101T000000
+TZNAME:TMT
+TZOFFSETFROM:+032544
+TZOFFSETTO:+032544
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19460101T000000
+RDATE:19460101T000000
+TZNAME:IRST
+TZOFFSETFROM:+032544
+TZOFFSETTO:+0330
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19771101T000000
+RDATE:19771101T000000
+TZNAME:IRST
+TZOFFSETFROM:+0330
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19780321T000000
+RDATE:19780321T000000
+TZNAME:IRDT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19781021T000000
+RDATE:19781021T000000
+TZNAME:IRST
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19790101T000000
+RDATE:19790101T000000
+TZNAME:IRST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0330
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19790321T000000
+RRULE:FREQ=YEARLY;UNTIL=19800320T203000Z;BYMONTH=3
+TZNAME:IRDT
+TZOFFSETFROM:+0330
+TZOFFSETTO:+0430
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19790919T000000
+RDATE:19790919T000000
+RDATE:19800923T000000
+RDATE:19960921T000000
+RDATE:20000921T000000
+RDATE:20040921T000000
+RDATE:20050922T000000
+RDATE:20080921T000000
+RDATE:20120921T000000
+RDATE:20160921T000000
+RDATE:20200921T000000
+TZNAME:IRST
+TZOFFSETFROM:+0430
+TZOFFSETTO:+0330
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19910503T000000
+RDATE:19910503T000000
+RDATE:19960321T000000
+RDATE:20000321T000000
+RDATE:20040321T000000
+RDATE:20050322T000000
+RDATE:20080321T000000
+RDATE:20120321T000000
+RDATE:20160321T000000
+RDATE:20200321T000000
+TZNAME:IRDT
+TZOFFSETFROM:+0330
+TZOFFSETTO:+0430
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19910922T000000
+RRULE:FREQ=YEARLY;UNTIL=19950921T193000Z;BYMONTH=9
+TZNAME:IRST
+TZOFFSETFROM:+0430
+TZOFFSETTO:+0330
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19920322T000000
+RRULE:FREQ=YEARLY;UNTIL=19950321T203000Z;BYMONTH=3
+TZNAME:IRDT
+TZOFFSETFROM:+0330
+TZOFFSETTO:+0430
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19970322T000000
+RRULE:FREQ=YEARLY;UNTIL=19990321T203000Z;BYMONTH=3
+TZNAME:IRDT
+TZOFFSETFROM:+0330
+TZOFFSETTO:+0430
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19970922T000000
+RRULE:FREQ=YEARLY;UNTIL=19990921T193000Z;BYMONTH=9
+TZNAME:IRST
+TZOFFSETFROM:+0430
+TZOFFSETTO:+0330
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20010322T000000
+RRULE:FREQ=YEARLY;UNTIL=20030321T203000Z;BYMONTH=3
+TZNAME:IRDT
+TZOFFSETFROM:+0330
+TZOFFSETTO:+0430
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20010922T000000
+RRULE:FREQ=YEARLY;UNTIL=20030921T193000Z;BYMONTH=9
+TZNAME:IRST
+TZOFFSETFROM:+0430
+TZOFFSETTO:+0330
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20090322T000000
+RRULE:FREQ=YEARLY;UNTIL=20110321T203000Z;BYMONTH=3
+TZNAME:IRDT
+TZOFFSETFROM:+0330
+TZOFFSETTO:+0430
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20090922T000000
+RRULE:FREQ=YEARLY;UNTIL=20110921T193000Z;BYMONTH=9
+TZNAME:IRST
+TZOFFSETFROM:+0430
+TZOFFSETTO:+0330
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20130322T000000
+RRULE:FREQ=YEARLY;UNTIL=20150321T203000Z;BYMONTH=3
+TZNAME:IRDT
+TZOFFSETFROM:+0330
+TZOFFSETTO:+0430
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20130922T000000
+RRULE:FREQ=YEARLY;UNTIL=20150921T193000Z;BYMONTH=9
+TZNAME:IRST
+TZOFFSETFROM:+0430
+TZOFFSETTO:+0330
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20170322T000000
+RRULE:FREQ=YEARLY;UNTIL=20190321T203000Z;BYMONTH=3
+TZNAME:IRDT
+TZOFFSETFROM:+0330
+TZOFFSETTO:+0430
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20170922T000000
+RRULE:FREQ=YEARLY;UNTIL=20190921T193000Z;BYMONTH=9
+TZNAME:IRST
+TZOFFSETFROM:+0430
+TZOFFSETTO:+0330
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20210322T000000
+RRULE:FREQ=YEARLY;UNTIL=20230321T203000Z;BYMONTH=3
+TZNAME:IRDT
+TZOFFSETFROM:+0330
+TZOFFSETTO:+0430
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20210922T000000
+RRULE:FREQ=YEARLY;UNTIL=20230921T193000Z;BYMONTH=9
+TZNAME:IRST
+TZOFFSETFROM:+0430
+TZOFFSETTO:+0330
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Israel Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Israel Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Israel Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Israel Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,164 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Israel Standard Time
+X-LIC-LOCATION:Israel Standard Time
+BEGIN:STANDARD
+DTSTART:18800101T000000
+RDATE:18800101T000000
+TZNAME:JMT
+TZOFFSETFROM:+022054
+TZOFFSETTO:+022040
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19180101T000000
+RDATE:19180101T000000
+TZNAME:IST
+TZOFFSETFROM:+022040
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19400601T000000
+RDATE:19400601T000000
+RDATE:19430401T020000
+RDATE:19440401T000000
+RDATE:19450416T000000
+RDATE:19460416T020000
+RDATE:19490501T000000
+RDATE:19500416T000000
+RDATE:19510401T000000
+RDATE:19520420T020000
+RDATE:19530412T020000
+RDATE:19540613T000000
+RDATE:19550611T020000
+RDATE:19560603T000000
+RDATE:19570429T020000
+RDATE:19740707T000000
+RDATE:19750420T000000
+RDATE:19850414T000000
+RDATE:19860518T000000
+RDATE:19870415T000000
+RDATE:19880410T000000
+RDATE:19890430T000000
+RDATE:19900325T000000
+RDATE:19910324T000000
+RDATE:19920329T000000
+RDATE:19930402T000000
+RDATE:19940401T000000
+RDATE:19950331T000000
+RDATE:19960315T000000
+RDATE:19970321T000000
+RDATE:19980320T000000
+RDATE:19990402T020000
+RDATE:20000414T020000
+RDATE:20010409T010000
+RDATE:20020329T010000
+RDATE:20030328T010000
+RDATE:20040407T010000
+RDATE:20050401T020000
+RDATE:20110401T020000
+RDATE:20120330T020000
+TZNAME:IDT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19421101T000000
+RRULE:FREQ=YEARLY;UNTIL=19441031T210000Z;BYMONTH=11
+TZNAME:IST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19451101T020000
+RDATE:19451101T020000
+RDATE:19461101T000000
+RDATE:19500915T030000
+RDATE:19511111T030000
+RDATE:19521019T030000
+RDATE:19530913T030000
+RDATE:19540912T000000
+RDATE:19550911T000000
+RDATE:19560930T030000
+RDATE:19570922T000000
+RDATE:19741013T000000
+RDATE:19750831T000000
+RDATE:19850915T000000
+RDATE:19860907T000000
+RDATE:19870913T000000
+RDATE:19880904T000000
+RDATE:19890903T000000
+RDATE:19900826T000000
+RDATE:19910901T000000
+RDATE:19920906T000000
+RDATE:19930905T000000
+RDATE:19940828T000000
+RDATE:19950903T000000
+RDATE:19960916T000000
+RDATE:19970914T000000
+RDATE:19980906T000000
+RDATE:19990903T020000
+RDATE:20001006T010000
+RDATE:20010924T010000
+RDATE:20021007T010000
+RDATE:20031003T010000
+RDATE:20040922T010000
+RDATE:20051009T020000
+RDATE:20061001T020000
+RDATE:20070916T020000
+RDATE:20081005T020000
+RDATE:20090927T020000
+RDATE:20100912T020000
+RDATE:20111002T020000
+RDATE:20120923T020000
+TZNAME:IST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19480523T000000
+RDATE:19480523T000000
+TZNAME:IDDT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19480901T000000
+RDATE:19480901T000000
+TZNAME:IDT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19481101T020000
+RRULE:FREQ=YEARLY;UNTIL=19491031T230000Z;BYMONTH=11
+TZNAME:IST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20060331T020000
+RRULE:FREQ=YEARLY;UNTIL=20100326T000000Z;BYDAY=FR;BYMONTHDAY=26,27,28,29,3
+ 0,31;BYMONTH=3
+TZNAME:IDT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20130329T020000
+RRULE:FREQ=YEARLY;BYDAY=FR;BYMONTHDAY=23,24,25,26,27,28,29;BYMONTH=3
+TZNAME:IDT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20131027T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:IST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Jordan Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Jordan Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Jordan Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Jordan Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,137 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Jordan Standard Time
+X-LIC-LOCATION:Jordan Standard Time
+BEGIN:STANDARD
+DTSTART:19310101T000000
+RDATE:19310101T000000
+TZNAME:EEST
+TZOFFSETFROM:+022344
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19730606T000000
+RDATE:19730606T000000
+RDATE:19780430T000000
+RDATE:19850401T000000
+RDATE:19890508T000000
+RDATE:19900427T000000
+RDATE:19910417T000000
+RDATE:19920410T000000
+RDATE:19990701T000000
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19731001T000000
+RRULE:FREQ=YEARLY;UNTIL=19750930T210000Z;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19740501T000000
+RRULE:FREQ=YEARLY;UNTIL=19770430T220000Z;BYMONTH=5
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19761101T000000
+RDATE:19761101T000000
+RDATE:19771001T000000
+RDATE:19780930T000000
+RDATE:19851001T000000
+RDATE:19910927T000000
+RDATE:19940916T000000
+RDATE:20031024T010000
+RDATE:20041015T010000
+RDATE:20050930T010000
+RDATE:20131220T000000
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19860404T000000
+RRULE:FREQ=YEARLY;UNTIL=19880331T220000Z;BYDAY=1FR;BYMONTH=4
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19861003T000000
+RRULE:FREQ=YEARLY;UNTIL=19901004T210000Z;BYDAY=1FR;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19921002T000000
+RRULE:FREQ=YEARLY;UNTIL=19930930T210000Z;BYDAY=1FR;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19930402T000000
+RRULE:FREQ=YEARLY;UNTIL=19980402T220000Z;BYDAY=1FR;BYMONTH=4
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19950915T010000
+RRULE:FREQ=YEARLY;UNTIL=19980917T220000Z;BYDAY=3FR;BYMONTH=9
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19990924T010000
+RRULE:FREQ=YEARLY;UNTIL=20020926T220000Z;BYDAY=-1FR;BYMONTH=9
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20000330T000000
+RRULE:FREQ=YEARLY;UNTIL=20010328T220000Z;BYDAY=-1TH;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20020328T235959
+RRULE:FREQ=YEARLY;UNTIL=20120329T215959Z;BYDAY=-1TH;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20061027T010000
+RRULE:FREQ=YEARLY;UNTIL=20111027T220000Z;BYDAY=-1FR;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20140327T235959
+RRULE:FREQ=YEARLY;BYDAY=-1TH;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20141031T010000
+RRULE:FREQ=YEARLY;BYDAY=-1FR;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Kaliningrad Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Kaliningrad Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Kaliningrad Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Kaliningrad Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,156 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Kaliningrad Standard Time
+X-LIC-LOCATION:Kaliningrad Standard Time
+BEGIN:STANDARD
+DTSTART:18930401T000000
+RDATE:18930401T000000
+TZNAME:CEST
+TZOFFSETFROM:+0122
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19160430T230000
+RDATE:19160430T230000
+RDATE:19400401T020000
+RDATE:19430329T020000
+RDATE:19440403T020000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19161001T010000
+RDATE:19161001T010000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19441002T030000
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19170416T020000
+RRULE:FREQ=YEARLY;UNTIL=19180415T010000Z;BYDAY=3MO;BYMONTH=4
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19170917T030000
+RRULE:FREQ=YEARLY;UNTIL=19180916T010000Z;BYDAY=3MO;BYMONTH=9
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19450101T000000
+RDATE:19450101T000000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19450429T000000
+RDATE:19450429T000000
+TZNAME:CEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19451101T000000
+RDATE:19451101T000000
+TZNAME:CET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19460101T000000
+RDATE:19460101T000000
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T210000Z;BYMONTH=4
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T200000Z;BYMONTH=10
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19900929T230000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19900324T230000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19910331T020000
+RDATE:19910331T020000
+TZNAME:EEST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19910929T030000
+RDATE:19910929T030000
+RDATE:19920926T230000
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19920328T230000
+RDATE:19920328T230000
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19930328T020000
+RRULE:FREQ=YEARLY;UNTIL=20100328T000000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19930926T030000
+RRULE:FREQ=YEARLY;UNTIL=19950924T000000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;UNTIL=20101031T000000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20110327T020000
+RDATE:20110327T020000
+TZNAME:FET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Korea Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Korea Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Korea Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Korea Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,68 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Korea Standard Time
+X-LIC-LOCATION:Korea Standard Time
+BEGIN:STANDARD
+DTSTART:18900101T000000
+RDATE:18900101T000000
+TZNAME:KST
+TZOFFSETFROM:+082752
+TZOFFSETTO:+0830
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19041201T000000
+RDATE:19041201T000000
+RDATE:19320101T000000
+RDATE:19681001T000000
+TZNAME:KST
+TZOFFSETFROM:+0830
+TZOFFSETTO:+0900
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19280101T000000
+RDATE:19280101T000000
+TZNAME:KST
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0830
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19540321T000000
+RDATE:19540321T000000
+RDATE:19600913T000000
+TZNAME:KST
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19600515T000000
+RDATE:19600515T000000
+TZNAME:KDT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19610810T000000
+RDATE:19610810T000000
+TZNAME:KST
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0830
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19870510T000000
+RRULE:FREQ=YEARLY;UNTIL=19880507T150000Z;BYDAY=2SU;BYMONTH=5
+TZNAME:KDT
+TZOFFSETFROM:+0900
+TZOFFSETTO:+1000
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19871011T000000
+RRULE:FREQ=YEARLY;UNTIL=19881008T140000Z;BYDAY=2SU;BYMONTH=10
+TZNAME:KST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+0900
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Libya Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Libya Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Libya Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Libya Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,92 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Libya Standard Time
+X-LIC-LOCATION:Libya Standard Time
+BEGIN:STANDARD
+DTSTART:19200101T000000
+RDATE:19200101T000000
+TZNAME:CEST
+TZOFFSETFROM:+005244
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19511014T020000
+RDATE:19511014T020000
+RDATE:19531009T020000
+RDATE:19550930T000000
+RDATE:19850406T000000
+RDATE:19860404T000000
+RDATE:19970404T000000
+RDATE:20130329T010000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19520101T000000
+RDATE:19520101T000000
+RDATE:19540101T000000
+RDATE:19560101T000000
+RDATE:19861003T000000
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19590101T000000
+RDATE:19590101T000000
+RDATE:19900504T000000
+TZNAME:EET
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19820101T000000
+RDATE:19820101T000000
+RDATE:19960930T000000
+RDATE:20121110T020000
+TZNAME:CEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19820401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T230000Z;BYMONTH=4
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19821001T000000
+RRULE:FREQ=YEARLY;UNTIL=19850930T220000Z;BYMONTH=10
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19870401T000000
+RRULE:FREQ=YEARLY;UNTIL=19890331T230000Z;BYMONTH=4
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19871001T000000
+RRULE:FREQ=YEARLY;UNTIL=19890930T220000Z;BYMONTH=10
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19971004T000000
+RDATE:19971004T000000
+RDATE:20131025T020000
+TZNAME:EET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Magadan Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Magadan Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Magadan Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Magadan Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,108 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Magadan Standard Time
+X-LIC-LOCATION:Magadan Standard Time
+BEGIN:STANDARD
+DTSTART:19240502T000000
+RDATE:19240502T000000
+TZNAME:MAGT
+TZOFFSETFROM:+100312
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19300621T000000
+RDATE:19300621T000000
+RDATE:19920119T020000
+TZNAME:MAGST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T130000Z;BYMONTH=4
+TZNAME:MAGST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T120000Z;BYMONTH=10
+TZNAME:MAGT
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19900929T150000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:MAGT
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19900324T150000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:MAGST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19910331T020000
+RDATE:19910331T020000
+TZNAME:MAGST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19910929T030000
+RDATE:19910929T030000
+TZNAME:MAGT
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19920328T230000
+RDATE:19920328T230000
+TZNAME:MAGST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19920926T230000
+RDATE:19920926T230000
+TZNAME:MAGT
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19930328T020000
+RRULE:FREQ=YEARLY;UNTIL=20100327T150000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:MAGST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19930926T030000
+RRULE:FREQ=YEARLY;UNTIL=19950923T150000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:MAGT
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;UNTIL=20101030T150000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:MAGT
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20110327T020000
+RDATE:20110327T020000
+TZNAME:MAGT
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1200
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Mauritius Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Mauritius Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Mauritius Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Mauritius Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,32 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Mauritius Standard Time
+X-LIC-LOCATION:Mauritius Standard Time
+BEGIN:STANDARD
+DTSTART:19070101T000000
+RDATE:19070101T000000
+TZNAME:MUST
+TZOFFSETFROM:+0350
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19821010T000000
+RDATE:19821010T000000
+RDATE:20081026T020000
+TZNAME:MUST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19830321T000000
+RDATE:19830321T000000
+RDATE:20090329T020000
+TZNAME:MUT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Middle East Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Middle East Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Middle East Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Middle East Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,112 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Middle East Standard Time
+X-LIC-LOCATION:Middle East Standard Time
+BEGIN:STANDARD
+DTSTART:18800101T000000
+RDATE:18800101T000000
+TZNAME:EEST
+TZOFFSETFROM:+0222
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19200328T000000
+RDATE:19200328T000000
+RDATE:19210403T000000
+RDATE:19220326T000000
+RDATE:19230422T000000
+RDATE:19720622T000000
+RDATE:19780430T000000
+RDATE:19880601T000000
+RDATE:19890510T000000
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19201025T000000
+RDATE:19201025T000000
+RDATE:19211003T000000
+RDATE:19221008T000000
+RDATE:19230916T000000
+RDATE:19780930T000000
+RDATE:19921004T000000
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19570501T000000
+RRULE:FREQ=YEARLY;UNTIL=19610430T220000Z;BYMONTH=5
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19571001T000000
+RRULE:FREQ=YEARLY;UNTIL=19610930T210000Z;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19721001T000000
+RRULE:FREQ=YEARLY;UNTIL=19770930T210000Z;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19730501T000000
+RRULE:FREQ=YEARLY;UNTIL=19770430T220000Z;BYMONTH=5
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19840501T000000
+RRULE:FREQ=YEARLY;UNTIL=19870430T220000Z;BYMONTH=5
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19841016T000000
+RRULE:FREQ=YEARLY;UNTIL=19911015T210000Z;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19900501T000000
+RRULE:FREQ=YEARLY;UNTIL=19920430T220000Z;BYMONTH=5
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19930328T000000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19930926T000000
+RRULE:FREQ=YEARLY;UNTIL=19980926T210000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19991031T000000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Montevideo Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Montevideo Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Montevideo Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Montevideo Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,196 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Montevideo Standard Time
+X-LIC-LOCATION:Montevideo Standard Time
+BEGIN:STANDARD
+DTSTART:18980628T000000
+RDATE:18980628T000000
+TZNAME:MMT
+TZOFFSETFROM:-034444
+TZOFFSETTO:-034444
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19200501T000000
+RDATE:19200501T000000
+TZNAME:UYST
+TZOFFSETFROM:-034444
+TZOFFSETTO:-0330
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19231002T000000
+RDATE:19231002T000000
+RDATE:19361101T000000
+RDATE:19410801T000000
+TZNAME:UYHST
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19240401T000000
+RRULE:FREQ=YEARLY;UNTIL=19260401T030000Z;BYMONTH=4
+TZNAME:UYT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0330
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19241001T000000
+RRULE:FREQ=YEARLY;UNTIL=19251001T033000Z;BYMONTH=10
+TZNAME:UYHST
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19331029T000000
+RRULE:FREQ=YEARLY;UNTIL=19351027T033000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:UYHST
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19340401T000000
+RRULE:FREQ=YEARLY;UNTIL=19360329T030000Z;BYDAY=SU;BYMONTHDAY=26,27,28,29,3
+ 0,31;BYMONTH=3
+TZNAME:UYT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0330
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19370328T000000
+RRULE:FREQ=YEARLY;UNTIL=19410330T030000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:UYT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0330
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19371031T000000
+RRULE:FREQ=YEARLY;UNTIL=19401027T033000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:UYHST
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19420101T000000
+RDATE:19420101T000000
+TZNAME:UYT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0330
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19421214T000000
+RDATE:19421214T000000
+TZNAME:UYST
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19430314T000000
+RDATE:19430314T000000
+RDATE:19591115T000000
+RDATE:19600306T000000
+RDATE:19650926T000000
+RDATE:19720815T000000
+RDATE:19761001T000000
+RDATE:19780401T000000
+RDATE:19800501T000000
+RDATE:19880314T000000
+RDATE:19890312T000000
+RDATE:19930228T000000
+RDATE:20050327T020000
+RDATE:20060312T020000
+TZNAME:UYT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19590524T000000
+RDATE:19590524T000000
+RDATE:19600117T000000
+RDATE:19720424T000000
+RDATE:19771204T000000
+RDATE:19791001T000000
+RDATE:19871214T000000
+RDATE:19881211T000000
+RDATE:19891029T000000
+RDATE:19921018T000000
+RDATE:20040919T000000
+RDATE:20051009T020000
+TZNAME:UYST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19650404T000000
+RRULE:FREQ=YEARLY;UNTIL=19670402T030000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:UYST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19661031T000000
+RRULE:FREQ=YEARLY;UNTIL=19671031T020000Z;BYMONTH=10
+TZNAME:UYT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19680527T000000
+RRULE:FREQ=YEARLY;UNTIL=19700527T030000Z;BYMONTH=5
+TZNAME:UYHST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0230
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19681202T000000
+RRULE:FREQ=YEARLY;UNTIL=19701202T023000Z;BYMONTH=12
+TZNAME:UYT
+TZOFFSETFROM:-0230
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19740310T000000
+RDATE:19740310T000000
+TZNAME:UYHST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0230
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19741222T000000
+RDATE:19741222T000000
+TZNAME:UYST
+TZOFFSETFROM:-0230
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19900304T000000
+RRULE:FREQ=YEARLY;UNTIL=19920301T020000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:UYT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19901021T000000
+RRULE:FREQ=YEARLY;UNTIL=19911027T030000Z;BYDAY=SU;BYMONTHDAY=21,22,23,24,2
+ 5,26,27;BYMONTH=10
+TZNAME:UYST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20061001T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=10
+TZNAME:UYST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:UYT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Morocco Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Morocco Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Morocco Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Morocco Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,116 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Morocco Standard Time
+X-LIC-LOCATION:Morocco Standard Time
+BEGIN:STANDARD
+DTSTART:19131026T000000
+RDATE:19131026T000000
+TZNAME:WEST
+TZOFFSETFROM:-003020
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19390912T000000
+RDATE:19390912T000000
+RDATE:19400225T000000
+RDATE:19500611T000000
+RDATE:19670603T120000
+RDATE:19740624T000000
+RDATE:19780601T000000
+RDATE:20080601T000000
+RDATE:20090601T000000
+RDATE:20100502T000000
+RDATE:20110403T000000
+RDATE:20120820T020000
+RDATE:20130810T020000
+RDATE:20140729T020000
+RDATE:20150718T020000
+RDATE:20160707T020000
+RDATE:20170626T020000
+RDATE:20180615T020000
+RDATE:20190605T020000
+RDATE:20200524T020000
+RDATE:20210513T020000
+RDATE:20220503T020000
+RDATE:20230422T020000
+TZNAME:WEST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19391119T000000
+RDATE:19391119T000000
+RDATE:19451118T000000
+RDATE:19501029T000000
+RDATE:19671001T000000
+RDATE:19740901T000000
+RDATE:19760801T000000
+RDATE:19770928T000000
+RDATE:19780804T000000
+RDATE:20080901T000000
+RDATE:20090821T000000
+RDATE:20100808T000000
+RDATE:20110731T000000
+RDATE:20120720T030000
+RDATE:20120930T030000
+RDATE:20130707T030000
+RDATE:20140629T030000
+RDATE:20150618T030000
+RDATE:20160607T030000
+RDATE:20170527T030000
+RDATE:20180516T030000
+RDATE:20190506T030000
+RDATE:20200424T030000
+RDATE:20210413T030000
+RDATE:20220403T030000
+TZNAME:WET
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19760501T000000
+RRULE:FREQ=YEARLY;UNTIL=19770501T000000Z;BYMONTH=5
+TZNAME:WEST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19840316T000000
+RDATE:19840316T000000
+TZNAME:CET
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19860101T000000
+RDATE:19860101T000000
+TZNAME:WEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20120429T020000
+RRULE:FREQ=YEARLY;UNTIL=20130428T020000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:WEST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20131027T030000
+RRULE:FREQ=YEARLY;UNTIL=20231029T020000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:WET
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20140330T020000
+RRULE:FREQ=YEARLY;UNTIL=20220327T020000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:WEST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Mountain Standard Time (Mexico).ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Mountain Standard Time (Mexico).ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Mountain Standard Time (Mexico).ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Mountain Standard Time (Mexico).ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,98 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Mountain Standard Time (Mexico)
+X-LIC-LOCATION:Mountain Standard Time (Mexico)
+BEGIN:STANDARD
+DTSTART:19211231T235540
+RDATE:19211231T235540
+TZNAME:MST
+TZOFFSETFROM:-070420
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19270610T230000
+RDATE:19270610T230000
+RDATE:19310501T230000
+RDATE:19320401T000000
+TZNAME:CST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19301115T000000
+RDATE:19301115T000000
+RDATE:19311001T000000
+RDATE:20010930T020000
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19960101T000000
+RDATE:19960101T000000
+RDATE:19980101T000000
+TZNAME:CST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19960407T020000
+RRULE:FREQ=YEARLY;UNTIL=19970406T080000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19961027T020000
+RRULE:FREQ=YEARLY;UNTIL=19971026T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19980405T030000
+RDATE:19980405T030000
+TZNAME:MDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19981025T020000
+RRULE:FREQ=YEARLY;UNTIL=20001029T080000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19990404T020000
+RRULE:FREQ=YEARLY;UNTIL=20000402T090000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20010506T020000
+RDATE:20010506T020000
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20020407T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20021027T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Mountain Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Mountain Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Mountain Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Mountain Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,134 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Mountain Standard Time
+X-LIC-LOCATION:Mountain Standard Time
+BEGIN:STANDARD
+DTSTART:18831118T120004
+RDATE:18831118T120004
+TZNAME:MST
+TZOFFSETFROM:-065956
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19180331T020000
+RRULE:FREQ=YEARLY;UNTIL=19190330T090000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19181027T020000
+RRULE:FREQ=YEARLY;UNTIL=19191026T080000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19200101T000000
+RDATE:19200101T000000
+RDATE:19420101T000000
+RDATE:19460101T000000
+RDATE:19670101T000000
+TZNAME:MST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19200328T020000
+RRULE:FREQ=YEARLY;UNTIL=19210327T090000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19201031T020000
+RDATE:19201031T020000
+RDATE:19210522T020000
+RDATE:19450930T020000
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:MWT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19450814T170000
+RDATE:19450814T170000
+TZNAME:MPT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19650425T020000
+RRULE:FREQ=YEARLY;UNTIL=19660424T090000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19651031T020000
+RRULE:FREQ=YEARLY;UNTIL=19661030T080000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19670430T020000
+RRULE:FREQ=YEARLY;UNTIL=19730429T090000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19671029T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T080000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19740106T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19760425T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T090000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T090000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Myanmar Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Myanmar Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Myanmar Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Myanmar Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,37 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Myanmar Standard Time
+X-LIC-LOCATION:Myanmar Standard Time
+BEGIN:STANDARD
+DTSTART:18800101T000000
+RDATE:18800101T000000
+TZNAME:RMT
+TZOFFSETFROM:+062440
+TZOFFSETTO:+062440
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19200101T000000
+RDATE:19200101T000000
+TZNAME:BURT
+TZOFFSETFROM:+062440
+TZOFFSETTO:+0630
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19420501T000000
+RDATE:19420501T000000
+TZNAME:JST
+TZOFFSETFROM:+0630
+TZOFFSETTO:+0900
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19450503T000000
+RDATE:19450503T000000
+TZNAME:MMT
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0630
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/N. Central Asia Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/N. Central Asia Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/N. Central Asia Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/N. Central Asia Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,116 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:N. Central Asia Standard Time
+X-LIC-LOCATION:N. Central Asia Standard Time
+BEGIN:STANDARD
+DTSTART:19191214T060000
+RDATE:19191214T060000
+TZNAME:NOVT
+TZOFFSETFROM:+053140
+TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19300621T000000
+RDATE:19300621T000000
+RDATE:19920119T020000
+TZNAME:NOVST
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0700
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T170000Z;BYMONTH=4
+TZNAME:NOVST
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0800
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T160000Z;BYMONTH=10
+TZNAME:NOVT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19900929T190000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:NOVT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0700
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19900324T190000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:NOVST
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0800
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19910331T020000
+RDATE:19910331T020000
+TZNAME:NOVST
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19910929T030000
+RDATE:19910929T030000
+TZNAME:NOVT
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19920328T230000
+RDATE:19920328T230000
+RDATE:19930328T020000
+TZNAME:NOVST
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0800
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19920926T230000
+RDATE:19920926T230000
+TZNAME:NOVT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19930523T000000
+RDATE:19930523T000000
+TZNAME:NOVST
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19930926T030000
+RRULE:FREQ=YEARLY;UNTIL=19950923T200000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:NOVT
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19940327T020000
+RRULE:FREQ=YEARLY;UNTIL=20100327T200000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:NOVST
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0700
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;UNTIL=20101030T200000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:NOVT
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20110327T020000
+RDATE:20110327T020000
+TZNAME:NOVT
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0700
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Namibia Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Namibia Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Namibia Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Namibia Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,65 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Namibia Standard Time
+X-LIC-LOCATION:Namibia Standard Time
+BEGIN:STANDARD
+DTSTART:18920208T000000
+RDATE:18920208T000000
+TZNAME:SWAT
+TZOFFSETFROM:+010824
+TZOFFSETTO:+0130
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19030301T000000
+RDATE:19030301T000000
+TZNAME:SAST
+TZOFFSETFROM:+0130
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19420920T020000
+RDATE:19420920T020000
+TZNAME:SAST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19430321T020000
+RDATE:19430321T020000
+TZNAME:SAST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19900321T000000
+RDATE:19900321T000000
+TZNAME:CAT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19940403T000000
+RDATE:19940403T000000
+TZNAME:WAST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19940904T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=9
+TZNAME:WAST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19950402T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
+TZNAME:WAT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Nepal Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Nepal Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Nepal Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Nepal Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Nepal Standard Time
+X-LIC-LOCATION:Nepal Standard Time
+BEGIN:STANDARD
+DTSTART:19200101T000000
+RDATE:19200101T000000
+TZNAME:IST
+TZOFFSETFROM:+054116
+TZOFFSETTO:+0530
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19860101T000000
+RDATE:19860101T000000
+TZNAME:NPT
+TZOFFSETFROM:+0530
+TZOFFSETTO:+0545
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/New Zealand Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/New Zealand Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/New Zealand Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/New Zealand Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,122 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:New Zealand Standard Time
+X-LIC-LOCATION:New Zealand Standard Time
+BEGIN:STANDARD
+DTSTART:18681102T000000
+RDATE:18681102T000000
+TZNAME:NZST
+TZOFFSETFROM:+113904
+TZOFFSETTO:+1130
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19271106T020000
+RDATE:19271106T020000
+TZNAME:NZST
+TZOFFSETFROM:+1130
+TZOFFSETTO:+1230
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19280304T020000
+RDATE:19280304T020000
+TZNAME:NZMT
+TZOFFSETFROM:+1230
+TZOFFSETTO:+1130
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19281014T020000
+RRULE:FREQ=YEARLY;UNTIL=19331007T143000Z;BYDAY=2SU;BYMONTH=10
+TZNAME:NZST
+TZOFFSETFROM:+1130
+TZOFFSETTO:+1200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19290317T020000
+RRULE:FREQ=YEARLY;UNTIL=19330318T140000Z;BYDAY=3SU;BYMONTH=3
+TZNAME:NZMT
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1130
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19340429T020000
+RRULE:FREQ=YEARLY;UNTIL=19400427T140000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:NZMT
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1130
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19340930T020000
+RRULE:FREQ=YEARLY;UNTIL=19400928T143000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:NZST
+TZOFFSETFROM:+1130
+TZOFFSETTO:+1200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19460101T000000
+RDATE:19460101T000000
+TZNAME:NZST
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19741103T020000
+RDATE:19741103T020000
+RDATE:19891008T020000
+TZNAME:NZDT
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19750223T030000
+RDATE:19750223T030000
+TZNAME:NZST
+TZOFFSETFROM:+1300
+TZOFFSETTO:+1200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19751026T020000
+RRULE:FREQ=YEARLY;UNTIL=19881029T140000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:NZDT
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19760307T030000
+RRULE:FREQ=YEARLY;UNTIL=19890304T140000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:NZST
+TZOFFSETFROM:+1300
+TZOFFSETTO:+1200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19900318T030000
+RRULE:FREQ=YEARLY;UNTIL=20070317T140000Z;BYDAY=3SU;BYMONTH=3
+TZNAME:NZST
+TZOFFSETFROM:+1300
+TZOFFSETTO:+1200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19901007T020000
+RRULE:FREQ=YEARLY;UNTIL=20060930T140000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:NZDT
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20070930T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=9
+TZNAME:NZDT
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20080406T030000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
+TZNAME:NZST
+TZOFFSETFROM:+1300
+TZOFFSETTO:+1200
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Newfoundland Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Newfoundland Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Newfoundland Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Newfoundland Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,210 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Newfoundland Standard Time
+X-LIC-LOCATION:Newfoundland Standard Time
+BEGIN:STANDARD
+DTSTART:18840101T000000
+RDATE:18840101T000000
+RDATE:19180101T000000
+RDATE:19190101T000000
+TZNAME:NST
+TZOFFSETFROM:-033052
+TZOFFSETTO:-033052
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19170408T020000
+RDATE:19170408T020000
+RDATE:19180414T020000
+RDATE:19190505T230000
+TZNAME:NDT
+TZOFFSETFROM:-033052
+TZOFFSETTO:-023052
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19170917T020000
+RDATE:19170917T020000
+RDATE:19181027T020000
+RDATE:19190812T230000
+TZNAME:NST
+TZOFFSETFROM:-023052
+TZOFFSETTO:-033052
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19200502T230000
+RRULE:FREQ=YEARLY;UNTIL=19340507T023052Z;BYDAY=1SU;BYMONTH=5
+TZNAME:NDT
+TZOFFSETFROM:-033052
+TZOFFSETTO:-023052
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19201031T230000
+RRULE:FREQ=YEARLY;UNTIL=19341029T013052Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:NST
+TZOFFSETFROM:-023052
+TZOFFSETTO:-033052
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19350330T000000
+RDATE:19350330T000000
+TZNAME:NST
+TZOFFSETFROM:-033052
+TZOFFSETTO:-0330
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19350505T230000
+RDATE:19350505T230000
+RDATE:19870405T000100
+TZNAME:NDT
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0230
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19351027T230000
+RDATE:19351027T230000
+RDATE:19450930T020000
+RDATE:19871025T000100
+TZNAME:NST
+TZOFFSETFROM:-0230
+TZOFFSETTO:-0330
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19360511T000000
+RRULE:FREQ=YEARLY;UNTIL=19410512T033000Z;BYDAY=MO;BYMONTHDAY=9,10,11,12,13
+ ,14,15;BYMONTH=5
+TZNAME:NDT
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0230
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19361005T000000
+RRULE:FREQ=YEARLY;UNTIL=19411006T023000Z;BYDAY=MO;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:NST
+TZOFFSETFROM:-0230
+TZOFFSETTO:-0330
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19420511T000000
+RDATE:19420511T000000
+TZNAME:NST
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0230
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19450814T203000
+RDATE:19450814T203000
+TZNAME:NPT
+TZOFFSETFROM:-0230
+TZOFFSETTO:-0230
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19460101T000000
+RDATE:19460101T000000
+TZNAME:NST
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0330
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19460512T020000
+RRULE:FREQ=YEARLY;UNTIL=19500514T053000Z;BYDAY=2SU;BYMONTH=5
+TZNAME:NDT
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0230
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19461006T020000
+RRULE:FREQ=YEARLY;UNTIL=19501008T043000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:NST
+TZOFFSETFROM:-0230
+TZOFFSETTO:-0330
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19510429T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T053000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:NDT
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0230
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19510930T020000
+RRULE:FREQ=YEARLY;UNTIL=19590927T043000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:NST
+TZOFFSETFROM:-0230
+TZOFFSETTO:-0330
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19601030T020000
+RRULE:FREQ=YEARLY;UNTIL=19861026T043000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:NST
+TZOFFSETFROM:-0230
+TZOFFSETTO:-0330
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19880403T000100
+RDATE:19880403T000100
+TZNAME:NDDT
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0130
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19881030T000100
+RDATE:19881030T000100
+TZNAME:NST
+TZOFFSETFROM:-0130
+TZOFFSETTO:-0330
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19890402T000100
+RRULE:FREQ=YEARLY;UNTIL=20060402T033100Z;BYDAY=1SU;BYMONTH=4
+TZNAME:NDT
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0230
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19891029T000100
+RRULE:FREQ=YEARLY;UNTIL=20061029T023100Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:NST
+TZOFFSETFROM:-0230
+TZOFFSETTO:-0330
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20070311T000100
+RRULE:FREQ=YEARLY;UNTIL=20110313T033100Z;BYDAY=2SU;BYMONTH=3
+TZNAME:NDT
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0230
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071104T000100
+RRULE:FREQ=YEARLY;UNTIL=20101107T023100Z;BYDAY=1SU;BYMONTH=11
+TZNAME:NST
+TZOFFSETFROM:-0230
+TZOFFSETTO:-0330
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20111101T000000
+RDATE:20111101T000000
+TZNAME:NST
+TZOFFSETFROM:-0230
+TZOFFSETTO:-0230
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20111106T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:NST
+TZOFFSETFROM:-0230
+TZOFFSETTO:-0330
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20120311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:NDT
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0230
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/North Asia East Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/North Asia East Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/North Asia East Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/North Asia East Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,115 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:North Asia East Standard Time
+X-LIC-LOCATION:North Asia East Standard Time
+BEGIN:STANDARD
+DTSTART:18800101T000000
+RDATE:18800101T000000
+TZNAME:IMT
+TZOFFSETFROM:+065720
+TZOFFSETTO:+065720
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19200125T000000
+RDATE:19200125T000000
+TZNAME:IRKT
+TZOFFSETFROM:+065720
+TZOFFSETTO:+0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19300621T000000
+RDATE:19300621T000000
+RDATE:19920119T020000
+TZNAME:IRKST
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T160000Z;BYMONTH=4
+TZNAME:IRKST
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T150000Z;BYMONTH=10
+TZNAME:IRKT
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19900929T180000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:IRKT
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19900324T180000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:IRKST
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19910331T020000
+RDATE:19910331T020000
+TZNAME:IRKST
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19910929T030000
+RDATE:19910929T030000
+TZNAME:IRKT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0700
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19920328T230000
+RDATE:19920328T230000
+TZNAME:IRKST
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19920926T230000
+RDATE:19920926T230000
+TZNAME:IRKT
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19930328T020000
+RRULE:FREQ=YEARLY;UNTIL=20100327T180000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:IRKST
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19930926T030000
+RRULE:FREQ=YEARLY;UNTIL=19950923T180000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:IRKT
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;UNTIL=20101030T180000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:IRKT
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20110327T020000
+RDATE:20110327T020000
+TZNAME:IRKT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/North Asia Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/North Asia Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/North Asia Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/North Asia Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,108 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:North Asia Standard Time
+X-LIC-LOCATION:North Asia Standard Time
+BEGIN:STANDARD
+DTSTART:19200106T000000
+RDATE:19200106T000000
+TZNAME:KRAT
+TZOFFSETFROM:+061120
+TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19300621T000000
+RDATE:19300621T000000
+RDATE:19920119T020000
+TZNAME:KRAST
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0700
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T170000Z;BYMONTH=4
+TZNAME:KRAST
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0800
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T160000Z;BYMONTH=10
+TZNAME:KRAT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19900929T190000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:KRAT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0700
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19900324T190000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:KRAST
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0800
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19910331T020000
+RDATE:19910331T020000
+TZNAME:KRAST
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19910929T030000
+RDATE:19910929T030000
+TZNAME:KRAT
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19920328T230000
+RDATE:19920328T230000
+TZNAME:KRAST
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0800
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19920926T230000
+RDATE:19920926T230000
+TZNAME:KRAT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0700
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19930328T020000
+RRULE:FREQ=YEARLY;UNTIL=20100327T190000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:KRAST
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0800
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19930926T030000
+RRULE:FREQ=YEARLY;UNTIL=19950923T190000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:KRAT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;UNTIL=20101030T190000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:KRAT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20110327T020000
+RDATE:20110327T020000
+TZNAME:KRAT
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0800
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Pacific SA Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Pacific SA Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Pacific SA Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Pacific SA Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,211 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Pacific SA Standard Time
+X-LIC-LOCATION:Pacific SA Standard Time
+BEGIN:STANDARD
+DTSTART:18900101T000000
+RDATE:18900101T000000
+TZNAME:SMT
+TZOFFSETFROM:-044246
+TZOFFSETTO:-044246
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19100101T000000
+RDATE:19100101T000000
+TZNAME:CLT
+TZOFFSETFROM:-044246
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19160701T000000
+RDATE:19160701T000000
+TZNAME:SMT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-044246
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19180901T000000
+RDATE:19180901T000000
+TZNAME:CLT
+TZOFFSETFROM:-044246
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19190701T000000
+RDATE:19190701T000000
+TZNAME:SMT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-044246
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19270901T000000
+RDATE:19270901T000000
+TZNAME:CLST
+TZOFFSETFROM:-044246
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19280401T000000
+RRULE:FREQ=YEARLY;UNTIL=19320401T040000Z;BYMONTH=4
+TZNAME:CLT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19280901T000000
+RRULE:FREQ=YEARLY;UNTIL=19320901T050000Z;BYMONTH=9
+TZNAME:CLST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19420601T000000
+RDATE:19420601T000000
+RDATE:19460831T230000
+TZNAME:CLT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19420801T000000
+RDATE:19420801T000000
+TZNAME:CLST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19460715T000000
+RDATE:19460715T000000
+TZNAME:CLST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19470331T230000
+RDATE:19470331T230000
+TZNAME:CLT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19470522T000000
+RDATE:19470522T000000
+TZNAME:CLST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19681103T000000
+RDATE:19681103T000000
+RDATE:19691123T000000
+RDATE:19730930T000000
+RDATE:19881002T000000
+RDATE:19891015T000000
+RDATE:19900916T000000
+RDATE:19980927T000000
+RDATE:20110821T000000
+TZNAME:CLST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19690330T000000
+RDATE:19690330T000000
+RDATE:19700329T000000
+RDATE:19710314T000000
+RDATE:19870412T000000
+RDATE:19900318T000000
+RDATE:19970330T000000
+RDATE:19980315T000000
+RDATE:19990404T000000
+RDATE:20080330T000000
+RDATE:20090315T000000
+RDATE:20100404T000000
+RDATE:20110508T000000
+TZNAME:CLT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19701011T000000
+RRULE:FREQ=YEARLY;UNTIL=19721015T040000Z;BYDAY=SU;BYMONTHDAY=9,10,11,12,13
+ ,14,15;BYMONTH=10
+TZNAME:CLST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19720312T000000
+RRULE:FREQ=YEARLY;UNTIL=19860309T030000Z;BYDAY=SU;BYMONTHDAY=9,10,11,12,13
+ ,14,15;BYMONTH=3
+TZNAME:CLT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19741013T000000
+RRULE:FREQ=YEARLY;UNTIL=19871011T040000Z;BYDAY=SU;BYMONTHDAY=9,10,11,12,13
+ ,14,15;BYMONTH=10
+TZNAME:CLST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19880313T000000
+RRULE:FREQ=YEARLY;UNTIL=19890312T030000Z;BYDAY=SU;BYMONTHDAY=9,10,11,12,13
+ ,14,15;BYMONTH=3
+TZNAME:CLT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19910310T000000
+RRULE:FREQ=YEARLY;UNTIL=19960310T030000Z;BYDAY=SU;BYMONTHDAY=9,10,11,12,13
+ ,14,15;BYMONTH=3
+TZNAME:CLT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19911013T000000
+RRULE:FREQ=YEARLY;UNTIL=19971012T040000Z;BYDAY=SU;BYMONTHDAY=9,10,11,12,13
+ ,14,15;BYMONTH=10
+TZNAME:CLST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19991010T000000
+RRULE:FREQ=YEARLY;UNTIL=20101010T040000Z;BYDAY=SU;BYMONTHDAY=9,10,11,12,13
+ ,14,15;BYMONTH=10
+TZNAME:CLST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20000312T000000
+RRULE:FREQ=YEARLY;UNTIL=20070311T030000Z;BYDAY=SU;BYMONTHDAY=9,10,11,12,13
+ ,14,15;BYMONTH=3
+TZNAME:CLT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20120429T000000
+RRULE:FREQ=YEARLY;BYDAY=SU;BYMONTHDAY=23,24,25,26,27,28,29;BYMONTH=4
+TZNAME:CLT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20120902T000000
+RRULE:FREQ=YEARLY;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8;BYMONTH=9
+TZNAME:CLST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Pacific Standard Time (Mexico).ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Pacific Standard Time (Mexico).ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Pacific Standard Time (Mexico).ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Pacific Standard Time (Mexico).ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,139 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Pacific Standard Time (Mexico)
+X-LIC-LOCATION:Pacific Standard Time (Mexico)
+BEGIN:STANDARD
+DTSTART:19220101T002032
+RDATE:19220101T002032
+TZNAME:MST
+TZOFFSETFROM:-073928
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19240101T000000
+RDATE:19240101T000000
+RDATE:19301115T000000
+RDATE:19310930T000000
+RDATE:19451112T000000
+RDATE:19490114T000000
+RDATE:20011028T020000
+TZNAME:PST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19270610T230000
+RDATE:19270610T230000
+TZNAME:MST
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19310401T000000
+RDATE:19310401T000000
+RDATE:19480405T000000
+TZNAME:PDT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19420424T000000
+RDATE:19420424T000000
+TZNAME:PWT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19450814T160000
+RDATE:19450814T160000
+TZNAME:PPT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19540101T000000
+RDATE:19540101T000000
+RDATE:19610101T000000
+RDATE:19760101T000000
+RDATE:19960101T000000
+RDATE:20010101T000000
+RDATE:20020220T000000
+TZNAME:PST
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19540425T020000
+RRULE:FREQ=YEARLY;UNTIL=19600424T100000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:PDT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19540926T020000
+RRULE:FREQ=YEARLY;UNTIL=19600925T090000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:PST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19760425T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T100000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:PDT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19761031T020000
+RRULE:FREQ=YEARLY;UNTIL=19951029T090000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:PST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=19950402T100000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:PDT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19960407T020000
+RRULE:FREQ=YEARLY;UNTIL=20000402T100000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:PDT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19961027T020000
+RRULE:FREQ=YEARLY;UNTIL=20001029T090000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:PST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20010401T020000
+RDATE:20010401T020000
+TZNAME:PDT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20020407T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
+TZNAME:PDT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20021027T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:PST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Pacific Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Pacific Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Pacific Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Pacific Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,132 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Pacific Standard Time
+X-LIC-LOCATION:Pacific Standard Time
+BEGIN:STANDARD
+DTSTART:18831118T120702
+RDATE:18831118T120702
+TZNAME:PST
+TZOFFSETFROM:-075258
+TZOFFSETTO:-0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19180331T020000
+RRULE:FREQ=YEARLY;UNTIL=19190330T100000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:PDT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19181027T020000
+RRULE:FREQ=YEARLY;UNTIL=19191026T090000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:PST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:PWT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19450814T160000
+RDATE:19450814T160000
+TZNAME:PPT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19450930T020000
+RDATE:19450930T020000
+RDATE:19490101T020000
+TZNAME:PST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19460101T000000
+RDATE:19460101T000000
+RDATE:19670101T000000
+TZNAME:PST
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19480314T020000
+RDATE:19480314T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+TZNAME:PDT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19500430T020000
+RRULE:FREQ=YEARLY;UNTIL=19660424T100000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:PDT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19500924T020000
+RRULE:FREQ=YEARLY;UNTIL=19610924T090000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:PST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19621028T020000
+RRULE:FREQ=YEARLY;UNTIL=19661030T090000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:PST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19670430T020000
+RRULE:FREQ=YEARLY;UNTIL=19730429T100000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:PDT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19671029T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T090000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:PST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19760425T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T100000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:PDT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T100000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:PDT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:PDT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:PST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Pakistan Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Pakistan Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Pakistan Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Pakistan Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,62 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Pakistan Standard Time
+X-LIC-LOCATION:Pakistan Standard Time
+BEGIN:STANDARD
+DTSTART:19070101T000000
+RDATE:19070101T000000
+TZNAME:IST
+TZOFFSETFROM:+042812
+TZOFFSETTO:+0530
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19420901T000000
+RDATE:19420901T000000
+TZNAME:IST
+TZOFFSETFROM:+0530
+TZOFFSETTO:+0630
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19451015T000000
+RDATE:19451015T000000
+TZNAME:IST
+TZOFFSETFROM:+0630
+TZOFFSETTO:+0530
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19510930T000000
+RDATE:19510930T000000
+TZNAME:KART
+TZOFFSETFROM:+0530
+TZOFFSETTO:+0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19710326T000000
+RDATE:19710326T000000
+TZNAME:PKST
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20020407T000100
+RDATE:20020407T000100
+RDATE:20080601T000000
+RDATE:20090415T000000
+TZNAME:PKST
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20021006T000100
+RDATE:20021006T000100
+RDATE:20081101T000000
+RDATE:20091101T000000
+TZNAME:PKT
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0500
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Paraguay Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Paraguay Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Paraguay Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Paraguay Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,162 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Paraguay Standard Time
+X-LIC-LOCATION:Paraguay Standard Time
+BEGIN:STANDARD
+DTSTART:18900101T000000
+RDATE:18900101T000000
+TZNAME:AMT
+TZOFFSETFROM:-035040
+TZOFFSETTO:-035040
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19311010T000000
+RDATE:19311010T000000
+TZNAME:PYT
+TZOFFSETFROM:-035040
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19721001T000000
+RDATE:19721001T000000
+TZNAME:PYT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19740401T000000
+RDATE:19740401T000000
+TZNAME:PYST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19750301T000000
+RDATE:19750301T000000
+TZNAME:PYT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19751001T000000
+RRULE:FREQ=YEARLY;UNTIL=19881001T040000Z;BYMONTH=10
+TZNAME:PYST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19760301T000000
+RRULE:FREQ=YEARLY;UNTIL=19780301T030000Z;BYMONTH=3
+TZNAME:PYT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19790401T000000
+RRULE:FREQ=YEARLY;UNTIL=19910401T030000Z;BYMONTH=4
+TZNAME:PYT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19891022T000000
+RDATE:19891022T000000
+RDATE:19901001T000000
+RDATE:19911006T000000
+RDATE:19921005T000000
+TZNAME:PYST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19920301T000000
+RDATE:19920301T000000
+RDATE:19930331T000000
+RDATE:19960301T000000
+RDATE:19970223T000000
+TZNAME:PYT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19931001T000000
+RRULE:FREQ=YEARLY;UNTIL=19951001T040000Z;BYMONTH=10
+TZNAME:PYST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19940227T000000
+RRULE:FREQ=YEARLY;UNTIL=19950226T030000Z;BYDAY=-1SU;BYMONTH=2
+TZNAME:PYT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19961006T000000
+RRULE:FREQ=YEARLY;UNTIL=20011007T040000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:PYST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19980301T000000
+RRULE:FREQ=YEARLY;UNTIL=20010304T030000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:PYT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20020407T000000
+RRULE:FREQ=YEARLY;UNTIL=20040404T030000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:PYT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20020901T000000
+RRULE:FREQ=YEARLY;UNTIL=20030907T040000Z;BYDAY=1SU;BYMONTH=9
+TZNAME:PYST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20041017T000000
+RRULE:FREQ=YEARLY;UNTIL=20091018T040000Z;BYDAY=3SU;BYMONTH=10
+TZNAME:PYST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20050313T000000
+RRULE:FREQ=YEARLY;UNTIL=20090308T030000Z;BYDAY=2SU;BYMONTH=3
+TZNAME:PYT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20100411T000000
+RRULE:FREQ=YEARLY;UNTIL=20120408T030000Z;BYDAY=2SU;BYMONTH=4
+TZNAME:PYT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20101003T000000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=10
+TZNAME:PYST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20130324T000000
+RRULE:FREQ=YEARLY;BYDAY=4SU;BYMONTH=3
+TZNAME:PYT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Romance Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Romance Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Romance Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Romance Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,169 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Romance Standard Time
+X-LIC-LOCATION:Romance Standard Time
+BEGIN:STANDARD
+DTSTART:18910315T000100
+RDATE:18910315T000100
+TZNAME:PMT
+TZOFFSETFROM:+000921
+TZOFFSETTO:+000921
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19110311T000100
+RDATE:19110311T000100
+TZNAME:WEST
+TZOFFSETFROM:+000921
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19160614T230000
+RDATE:19160614T230000
+RDATE:19170324T230000
+RDATE:19180309T230000
+RDATE:19190301T230000
+RDATE:19200214T230000
+RDATE:19210314T230000
+RDATE:19220325T230000
+RDATE:19230526T230000
+RDATE:19240329T230000
+RDATE:19250404T230000
+RDATE:19260417T230000
+RDATE:19270409T230000
+RDATE:19280414T230000
+RDATE:19290420T230000
+RDATE:19300412T230000
+RDATE:19310418T230000
+RDATE:19320402T230000
+RDATE:19330325T230000
+RDATE:19340407T230000
+RDATE:19350330T230000
+RDATE:19360418T230000
+RDATE:19370403T230000
+RDATE:19380326T230000
+RDATE:19390415T230000
+RDATE:19400225T020000
+TZNAME:WEST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19161002T000000
+RRULE:FREQ=YEARLY;UNTIL=19191005T230000Z;BYDAY=MO;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:WET
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19201024T000000
+RDATE:19201024T000000
+RDATE:19211026T000000
+RDATE:19391119T000000
+TZNAME:WET
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19221008T000000
+RRULE:FREQ=YEARLY;UNTIL=19381001T230000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:WET
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19400614T230000
+RDATE:19400614T230000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19421102T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19760926T010000
+RDATE:19770925T030000
+RDATE:19781001T030000
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19430329T020000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19760328T010000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19440825T000000
+RDATE:19440825T000000
+TZNAME:WEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19441008T010000
+RDATE:19441008T010000
+TZNAME:WEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19450402T020000
+RDATE:19450402T020000
+TZNAME:WEMT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19450916T030000
+RDATE:19450916T030000
+TZNAME:CEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19770101T000000
+RDATE:19770101T000000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19770403T020000
+RRULE:FREQ=YEARLY;UNTIL=19800406T010000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19790930T030000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Russian Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Russian Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Russian Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Russian Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,175 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Russian Standard Time
+X-LIC-LOCATION:Russian Standard Time
+BEGIN:STANDARD
+DTSTART:18800101T000000
+RDATE:18800101T000000
+TZNAME:MMT
+TZOFFSETFROM:+023020
+TZOFFSETTO:+0230
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19160703T000000
+RDATE:19160703T000000
+TZNAME:S
+TZOFFSETFROM:+0230
+TZOFFSETTO:+023048
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19170701T230000
+RDATE:19170701T230000
+TZNAME:MST
+TZOFFSETFROM:+023048
+TZOFFSETTO:+033048
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19171228T000000
+RDATE:19171228T000000
+TZNAME:MMT
+TZOFFSETFROM:+033048
+TZOFFSETTO:+023048
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19180531T220000
+RDATE:19180531T220000
+TZNAME:MDST
+TZOFFSETFROM:+023048
+TZOFFSETTO:+043048
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19180916T010000
+RDATE:19180916T010000
+TZNAME:MST
+TZOFFSETFROM:+043048
+TZOFFSETTO:+033048
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19190531T230000
+RDATE:19190531T230000
+TZNAME:MDST
+TZOFFSETFROM:+033048
+TZOFFSETTO:+043048
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19190701T020000
+RDATE:19190701T020000
+TZNAME:MSK/MSD
+TZOFFSETFROM:+043048
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19190816T000000
+RDATE:19190816T000000
+RDATE:19211001T000000
+RDATE:19920926T230000
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19210214T230000
+RDATE:19210214T230000
+RDATE:19920328T230000
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19210320T230000
+RDATE:19210320T230000
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19210901T000000
+RDATE:19210901T000000
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19221001T000000
+RDATE:19221001T000000
+RDATE:19910929T030000
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19300621T000000
+RDATE:19300621T000000
+RDATE:19920119T020000
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T210000Z;BYMONTH=4
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T200000Z;BYMONTH=10
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19900929T230000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19900324T230000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19910331T020000
+RDATE:19910331T020000
+TZNAME:EEST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19930328T020000
+RRULE:FREQ=YEARLY;UNTIL=20100327T230000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19930926T030000
+RRULE:FREQ=YEARLY;UNTIL=19950923T230000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;UNTIL=20101030T230000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20110327T020000
+RDATE:20110327T020000
+TZNAME:MSK
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/SA Eastern Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/SA Eastern Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/SA Eastern Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/SA Eastern Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:SA Eastern Standard Time
+X-LIC-LOCATION:SA Eastern Standard Time
+BEGIN:STANDARD
+DTSTART:19110701T000000
+RDATE:19110701T000000
+TZNAME:GFT
+TZOFFSETFROM:-032920
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19671001T000000
+RDATE:19671001T000000
+TZNAME:GFT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/SA Pacific Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/SA Pacific Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/SA Pacific Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/SA Pacific Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,37 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:SA Pacific Standard Time
+X-LIC-LOCATION:SA Pacific Standard Time
+BEGIN:STANDARD
+DTSTART:18840313T000000
+RDATE:18840313T000000
+TZNAME:BMT
+TZOFFSETFROM:-045616
+TZOFFSETTO:-045616
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19141123T000000
+RDATE:19141123T000000
+TZNAME:COST
+TZOFFSETFROM:-045616
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19920503T000000
+RDATE:19920503T000000
+TZNAME:COST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19930404T000000
+RDATE:19930404T000000
+TZNAME:COT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/SA Western Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/SA Western Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/SA Western Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/SA Western Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,30 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:SA Western Standard Time
+X-LIC-LOCATION:SA Western Standard Time
+BEGIN:STANDARD
+DTSTART:18900101T000000
+RDATE:18900101T000000
+TZNAME:CMT
+TZOFFSETFROM:-043236
+TZOFFSETTO:-043236
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19311015T000000
+RDATE:19311015T000000
+TZNAME:BOST
+TZOFFSETFROM:-043236
+TZOFFSETTO:-033236
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19320321T000000
+RDATE:19320321T000000
+TZNAME:BOT
+TZOFFSETFROM:-033236
+TZOFFSETTO:-0400
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/SE Asia Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/SE Asia Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/SE Asia Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/SE Asia Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:SE Asia Standard Time
+X-LIC-LOCATION:SE Asia Standard Time
+BEGIN:STANDARD
+DTSTART:18800101T000000
+RDATE:18800101T000000
+TZNAME:BMT
+TZOFFSETFROM:+064204
+TZOFFSETTO:+064204
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19200401T000000
+RDATE:19200401T000000
+TZNAME:ICT
+TZOFFSETFROM:+064204
+TZOFFSETTO:+0700
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Samoa Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Samoa Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Samoa Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Samoa Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,59 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Samoa Standard Time
+X-LIC-LOCATION:Samoa Standard Time
+BEGIN:STANDARD
+DTSTART:19110101T000000
+RDATE:19110101T000000
+TZNAME:SAMT
+TZOFFSETFROM:-112656
+TZOFFSETTO:-1130
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19500101T000000
+RDATE:19500101T000000
+TZNAME:WST
+TZOFFSETFROM:-1130
+TZOFFSETTO:-1100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20100926T000000
+RDATE:20100926T000000
+RDATE:20110924T030000
+TZNAME:WSDT
+TZOFFSETFROM:-1100
+TZOFFSETTO:-1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20110402T040000
+RDATE:20110402T040000
+TZNAME:WST
+TZOFFSETFROM:-1000
+TZOFFSETTO:-1100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20111230T000000
+RDATE:20111230T000000
+TZNAME:WSDT
+TZOFFSETFROM:-1000
+TZOFFSETTO:+1400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20120401T040000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
+TZNAME:WST
+TZOFFSETFROM:+1400
+TZOFFSETTO:+1300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20120930T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=9
+TZNAME:WSDT
+TZOFFSETFROM:+1300
+TZOFFSETTO:+1400
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Singapore Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Singapore Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Singapore Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Singapore Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,72 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Singapore Standard Time
+X-LIC-LOCATION:Singapore Standard Time
+BEGIN:STANDARD
+DTSTART:19010101T000000
+RDATE:19010101T000000
+TZNAME:SMT
+TZOFFSETFROM:+065525
+TZOFFSETTO:+065525
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19050601T000000
+RDATE:19050601T000000
+TZNAME:MALT
+TZOFFSETFROM:+065525
+TZOFFSETTO:+0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19330101T000000
+RDATE:19330101T000000
+TZNAME:MALST
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0720
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19360101T000000
+RDATE:19360101T000000
+TZNAME:MALT
+TZOFFSETFROM:+0720
+TZOFFSETTO:+0720
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19410901T000000
+RDATE:19410901T000000
+TZNAME:MALT
+TZOFFSETFROM:+0720
+TZOFFSETTO:+0730
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19420216T000000
+RDATE:19420216T000000
+TZNAME:JST
+TZOFFSETFROM:+0730
+TZOFFSETTO:+0900
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19450912T000000
+RDATE:19450912T000000
+TZNAME:MALT
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0730
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19650809T000000
+RDATE:19650809T000000
+TZNAME:SGT
+TZOFFSETFROM:+0730
+TZOFFSETTO:+0730
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19820101T000000
+RDATE:19820101T000000
+TZNAME:SGT
+TZOFFSETFROM:+0730
+TZOFFSETTO:+0800
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/South Africa Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/South Africa Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/South Africa Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/South Africa Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,37 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:South Africa Standard Time
+X-LIC-LOCATION:South Africa Standard Time
+BEGIN:STANDARD
+DTSTART:18920208T000000
+RDATE:18920208T000000
+TZNAME:SAST
+TZOFFSETFROM:+0152
+TZOFFSETTO:+0130
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19030301T000000
+RDATE:19030301T000000
+TZNAME:SAST
+TZOFFSETFROM:+0130
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19420920T020000
+RRULE:FREQ=YEARLY;UNTIL=19430919T000000Z;BYDAY=3SU;BYMONTH=9
+TZNAME:SAST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19430321T020000
+RRULE:FREQ=YEARLY;UNTIL=19440318T230000Z;BYDAY=3SU;BYMONTH=3
+TZNAME:SAST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Sri Lanka Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Sri Lanka Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Sri Lanka Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Sri Lanka Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,65 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Sri Lanka Standard Time
+X-LIC-LOCATION:Sri Lanka Standard Time
+BEGIN:STANDARD
+DTSTART:18800101T000000
+RDATE:18800101T000000
+TZNAME:MMT
+TZOFFSETFROM:+051924
+TZOFFSETTO:+051932
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19060101T000000
+RDATE:19060101T000000
+TZNAME:IST
+TZOFFSETFROM:+051932
+TZOFFSETTO:+0530
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19420105T000000
+RDATE:19420105T000000
+TZNAME:IHST
+TZOFFSETFROM:+0530
+TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19420901T000000
+RDATE:19420901T000000
+TZNAME:IST
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0630
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19451016T020000
+RDATE:19451016T020000
+TZNAME:IST
+TZOFFSETFROM:+0630
+TZOFFSETTO:+0530
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19960525T000000
+RDATE:19960525T000000
+TZNAME:LKT
+TZOFFSETFROM:+0530
+TZOFFSETTO:+0630
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19961026T003000
+RDATE:19961026T003000
+TZNAME:LKT
+TZOFFSETFROM:+0630
+TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20060415T003000
+RDATE:20060415T003000
+TZNAME:IST
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0530
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Syria Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Syria Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Syria Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Syria Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,171 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Syria Standard Time
+X-LIC-LOCATION:Syria Standard Time
+BEGIN:STANDARD
+DTSTART:19200101T000000
+RDATE:19200101T000000
+TZNAME:EEST
+TZOFFSETFROM:+022512
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19200418T020000
+RRULE:FREQ=YEARLY;UNTIL=19230415T000000Z;BYDAY=3SU;BYMONTH=4
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19201003T020000
+RRULE:FREQ=YEARLY;UNTIL=19231006T230000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19620429T020000
+RDATE:19620429T020000
+RDATE:19660424T020000
+RDATE:19860216T020000
+RDATE:19870301T020000
+RDATE:19880315T020000
+RDATE:19890331T020000
+RDATE:19900401T020000
+RDATE:19910401T000000
+RDATE:19920408T000000
+RDATE:19930326T000000
+RDATE:20070330T000000
+RDATE:20080404T000000
+RDATE:20090327T000000
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19621001T020000
+RDATE:19621001T020000
+RDATE:19630930T020000
+RDATE:19641001T020000
+RDATE:19650930T020000
+RDATE:19861009T020000
+RDATE:19891001T020000
+RDATE:19900930T020000
+RDATE:19930925T000000
+RDATE:20060922T000000
+RDATE:20071102T000000
+RDATE:20081101T000000
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19630501T020000
+RRULE:FREQ=YEARLY;UNTIL=19650501T000000Z;BYMONTH=5
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19661001T020000
+RRULE:FREQ=YEARLY;UNTIL=19760930T230000Z;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19670501T020000
+RRULE:FREQ=YEARLY;UNTIL=19780501T000000Z;BYMONTH=5
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19770901T020000
+RRULE:FREQ=YEARLY;UNTIL=19780831T230000Z;BYMONTH=9
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19830409T020000
+RRULE:FREQ=YEARLY;UNTIL=19840409T000000Z;BYMONTH=4
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19831001T020000
+RRULE:FREQ=YEARLY;UNTIL=19840930T230000Z;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19871031T020000
+RRULE:FREQ=YEARLY;UNTIL=19881030T230000Z;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19911001T000000
+RRULE:FREQ=YEARLY;UNTIL=19920930T210000Z;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19940401T000000
+RRULE:FREQ=YEARLY;UNTIL=19960331T220000Z;BYMONTH=4
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19941001T000000
+RRULE:FREQ=YEARLY;UNTIL=20050930T210000Z;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19970331T000000
+RRULE:FREQ=YEARLY;UNTIL=19980329T220000Z;BYDAY=-1MO;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19990401T000000
+RRULE:FREQ=YEARLY;UNTIL=20060331T220000Z;BYMONTH=4
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20091030T000000
+RRULE:FREQ=YEARLY;BYDAY=-1FR;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20100402T000000
+RRULE:FREQ=YEARLY;UNTIL=20110331T220000Z;BYDAY=1FR;BYMONTH=4
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20120330T000000
+RRULE:FREQ=YEARLY;BYDAY=-1FR;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Taipei Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Taipei Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Taipei Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Taipei Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,87 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Taipei Standard Time
+X-LIC-LOCATION:Taipei Standard Time
+BEGIN:STANDARD
+DTSTART:18960101T000000
+RDATE:18960101T000000
+TZNAME:CST
+TZOFFSETFROM:+0806
+TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19450501T000000
+RRULE:FREQ=YEARLY;UNTIL=19510430T160000Z;BYMONTH=5
+TZNAME:CDT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19451001T000000
+RRULE:FREQ=YEARLY;UNTIL=19510930T150000Z;BYMONTH=10
+TZNAME:CST
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19520301T000000
+RDATE:19520301T000000
+RDATE:19790630T000000
+TZNAME:CDT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19521101T000000
+RRULE:FREQ=YEARLY;UNTIL=19541031T150000Z;BYMONTH=11
+TZNAME:CST
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19530401T000000
+RRULE:FREQ=YEARLY;UNTIL=19590331T160000Z;BYMONTH=4
+TZNAME:CDT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19551001T000000
+RRULE:FREQ=YEARLY;UNTIL=19610930T150000Z;BYMONTH=10
+TZNAME:CST
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19600601T000000
+RRULE:FREQ=YEARLY;UNTIL=19610531T160000Z;BYMONTH=6
+TZNAME:CDT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19740401T000000
+RRULE:FREQ=YEARLY;UNTIL=19750331T160000Z;BYMONTH=4
+TZNAME:CDT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19741001T000000
+RRULE:FREQ=YEARLY;UNTIL=19750930T150000Z;BYMONTH=10
+TZNAME:CST
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19790930T000000
+RDATE:19790930T000000
+TZNAME:CST
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Tasmania Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Tasmania Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Tasmania Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Tasmania Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,146 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Tasmania Standard Time
+X-LIC-LOCATION:Tasmania Standard Time
+BEGIN:STANDARD
+DTSTART:18950901T000000
+RDATE:18950901T000000
+TZNAME:EST
+TZOFFSETFROM:+094916
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19161001T020000
+RDATE:19161001T020000
+TZNAME:EST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19170201T000000
+RDATE:19170201T000000
+TZNAME:EST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19170325T020000
+RDATE:19170325T020000
+RDATE:19420329T020000
+RDATE:19680331T030000
+RDATE:19720227T030000
+RDATE:20060402T030000
+RDATE:20070325T030000
+TZNAME:EST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19420101T020000
+RDATE:19420101T020000
+RDATE:19420927T020000
+RDATE:19431003T020000
+RDATE:19671001T020000
+RDATE:19861019T020000
+RDATE:19871025T020000
+RDATE:20000827T020000
+TZNAME:EST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19430328T020000
+RRULE:FREQ=YEARLY;UNTIL=19440325T150000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19670101T000000
+RDATE:19670101T000000
+TZNAME:EST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19681027T020000
+RRULE:FREQ=YEARLY;UNTIL=19851026T160000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19690309T030000
+RRULE:FREQ=YEARLY;UNTIL=19710313T160000Z;BYDAY=2SU;BYMONTH=3
+TZNAME:EST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19730304T030000
+RRULE:FREQ=YEARLY;UNTIL=19810228T160000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:EST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19820328T030000
+RRULE:FREQ=YEARLY;UNTIL=19830326T160000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19840304T030000
+RRULE:FREQ=YEARLY;UNTIL=19860301T160000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:EST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19870315T030000
+RRULE:FREQ=YEARLY;UNTIL=19900317T160000Z;BYDAY=3SU;BYMONTH=3
+TZNAME:EST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19881030T020000
+RRULE:FREQ=YEARLY;UNTIL=19901027T160000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19910331T030000
+RRULE:FREQ=YEARLY;UNTIL=20050326T160000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19911006T020000
+RRULE:FREQ=YEARLY;UNTIL=19991002T160000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20011007T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20080406T030000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
+TZNAME:EST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Tokyo Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Tokyo Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Tokyo Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Tokyo Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,52 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Tokyo Standard Time
+X-LIC-LOCATION:Tokyo Standard Time
+BEGIN:STANDARD
+DTSTART:18880101T001859
+RDATE:18880101T001859
+TZNAME:JST
+TZOFFSETFROM:+091859
+TZOFFSETTO:+0900
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:18960101T000000
+RDATE:18960101T000000
+TZNAME:CJT
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0900
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19380101T000000
+RDATE:19380101T000000
+TZNAME:JST
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0900
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19480502T020000
+RDATE:19480502T020000
+RDATE:19490403T020000
+TZNAME:JDT
+TZOFFSETFROM:+0900
+TZOFFSETTO:+1000
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19480911T020000
+RRULE:FREQ=YEARLY;UNTIL=19510907T160000Z;BYDAY=2SA;BYMONTH=9
+TZNAME:JST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+0900
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19500507T020000
+RRULE:FREQ=YEARLY;UNTIL=19510505T170000Z;BYDAY=1SU;BYMONTH=5
+TZNAME:JDT
+TZOFFSETFROM:+0900
+TZOFFSETTO:+1000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Tonga Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Tonga Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Tonga Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Tonga Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,58 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Tonga Standard Time
+X-LIC-LOCATION:Tonga Standard Time
+BEGIN:STANDARD
+DTSTART:19010101T000000
+RDATE:19010101T000000
+TZNAME:TOT
+TZOFFSETFROM:+121920
+TZOFFSETTO:+1220
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19410101T000000
+RDATE:19410101T000000
+TZNAME:TOT
+TZOFFSETFROM:+1220
+TZOFFSETTO:+1300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19990101T000000
+RDATE:19990101T000000
+TZNAME:TOST
+TZOFFSETFROM:+1300
+TZOFFSETTO:+1300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19991007T020000
+RDATE:19991007T020000
+TZNAME:TOST
+TZOFFSETFROM:+1300
+TZOFFSETTO:+1400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20000319T030000
+RDATE:20000319T030000
+TZNAME:TOT
+TZOFFSETFROM:+1400
+TZOFFSETTO:+1300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20001105T020000
+RRULE:FREQ=YEARLY;UNTIL=20011103T130000Z;BYDAY=1SU;BYMONTH=11
+TZNAME:TOST
+TZOFFSETFROM:+1300
+TZOFFSETTO:+1400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20010128T020000
+RRULE:FREQ=YEARLY;UNTIL=20020126T120000Z;BYDAY=-1SU;BYMONTH=1
+TZNAME:TOT
+TZOFFSETFROM:+1400
+TZOFFSETTO:+1300
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Turkey Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Turkey Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Turkey Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Turkey Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,280 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Turkey Standard Time
+X-LIC-LOCATION:Turkey Standard Time
+BEGIN:STANDARD
+DTSTART:18800101T000000
+RDATE:18800101T000000
+TZNAME:IMT
+TZOFFSETFROM:+015552
+TZOFFSETTO:+015656
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19101001T000000
+RDATE:19101001T000000
+TZNAME:EEST
+TZOFFSETFROM:+015656
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19160501T000000
+RDATE:19160501T000000
+RDATE:19200328T000000
+RDATE:19210403T000000
+RDATE:19220326T000000
+RDATE:19240513T000000
+RDATE:19250501T000000
+RDATE:19400630T000000
+RDATE:19401201T000000
+RDATE:19420401T000000
+RDATE:19450402T000000
+RDATE:19460601T000000
+RDATE:19490410T000000
+RDATE:19500419T000000
+RDATE:19510422T000000
+RDATE:19620715T000000
+RDATE:19640515T000000
+RDATE:19730603T010000
+RDATE:19740331T020000
+RDATE:19750330T000000
+RDATE:19760601T000000
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19161001T000000
+RDATE:19161001T000000
+RDATE:19201025T000000
+RDATE:19211003T000000
+RDATE:19221008T000000
+RDATE:19401005T000000
+RDATE:19410921T000000
+RDATE:19421101T000000
+RDATE:19451008T000000
+RDATE:19461001T000000
+RDATE:19511008T000000
+RDATE:19621008T000000
+RDATE:19641001T000000
+RDATE:19731104T030000
+RDATE:19741103T050000
+RDATE:19771016T000000
+RDATE:19850928T000000
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19241001T000000
+RRULE:FREQ=YEARLY;UNTIL=19250930T210000Z;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19470420T000000
+RRULE:FREQ=YEARLY;UNTIL=19480417T220000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19471005T000000
+RRULE:FREQ=YEARLY;UNTIL=19501007T210000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19700503T000000
+RRULE:FREQ=YEARLY;UNTIL=19720506T220000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=5
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19701004T000000
+RRULE:FREQ=YEARLY;UNTIL=19721007T210000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19751026T000000
+RRULE:FREQ=YEARLY;UNTIL=19761030T210000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19770403T000000
+RRULE:FREQ=YEARLY;UNTIL=19780401T220000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19781015T000000
+RDATE:19781015T000000
+TZNAME:TRST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19790401T030000
+RDATE:19790401T030000
+TZNAME:TRST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19791015T000000
+RRULE:FREQ=YEARLY;UNTIL=19821010T200000Z;BYDAY=-3MO;BYMONTH=10
+TZNAME:TRT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19800406T030000
+RRULE:FREQ=YEARLY;UNTIL=19800406T000000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:TRST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19810329T030000
+RRULE:FREQ=YEARLY;UNTIL=19820328T000000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:TRST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19830731T000000
+RDATE:19830731T000000
+TZNAME:TRST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19831002T000000
+RDATE:19831002T000000
+TZNAME:TRT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19850420T000000
+RDATE:19850420T000000
+TZNAME:EEST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19860330T020000
+RRULE:FREQ=YEARLY;UNTIL=19900325T000000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19860928T030000
+RRULE:FREQ=YEARLY;UNTIL=19900930T000000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19910331T010000
+RRULE:FREQ=YEARLY;UNTIL=20060325T230000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19910929T020000
+RRULE:FREQ=YEARLY;UNTIL=19950923T230000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19961027T020000
+RRULE:FREQ=YEARLY;UNTIL=20061028T230000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20070101T000000
+RDATE:20070101T000000
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20070325T030000
+RRULE:FREQ=YEARLY;UNTIL=20100328T010000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071028T040000
+RRULE:FREQ=YEARLY;UNTIL=20101031T010000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20110327T030000
+RDATE:20110327T030000
+RDATE:20140330T030000
+TZNAME:EET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20110328T030000
+RDATE:20110328T030000
+RDATE:20140331T030000
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20111030T040000
+RRULE:FREQ=YEARLY;UNTIL=20131027T010000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20120325T030000
+RRULE:FREQ=YEARLY;UNTIL=20130331T010000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20141026T040000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20150329T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/US Eastern Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/US Eastern Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/US Eastern Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/US Eastern Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,142 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:US Eastern Standard Time
+X-LIC-LOCATION:US Eastern Standard Time
+BEGIN:STANDARD
+DTSTART:18831118T121522
+RDATE:18831118T121522
+TZNAME:CST
+TZOFFSETFROM:-054438
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19180331T020000
+RRULE:FREQ=YEARLY;UNTIL=19190330T080000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19181027T020000
+RRULE:FREQ=YEARLY;UNTIL=19191026T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19200101T000000
+RDATE:19200101T000000
+RDATE:19420101T000000
+RDATE:19460101T000000
+TZNAME:CST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19410622T020000
+RDATE:19410622T020000
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19410928T020000
+RDATE:19410928T020000
+RDATE:19450930T020000
+RDATE:19570929T020000
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:CWT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19450814T180000
+RDATE:19450814T180000
+TZNAME:CPT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19460428T020000
+RRULE:FREQ=YEARLY;UNTIL=19540425T080000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19460929T020000
+RRULE:FREQ=YEARLY;UNTIL=19540926T070000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19550424T020000
+RDATE:19550424T020000
+RDATE:19580427T020000
+TZNAME:EST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19690101T000000
+RDATE:19690101T000000
+RDATE:19710101T000000
+RDATE:20060101T000000
+TZNAME:EST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19690427T020000
+RRULE:FREQ=YEARLY;UNTIL=19700426T070000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19691026T020000
+RRULE:FREQ=YEARLY;UNTIL=19701025T060000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20060402T020000
+RDATE:20060402T020000
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20061029T020000
+RDATE:20061029T020000
+TZNAME:EST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:EST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/US Mountain Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/US Mountain Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/US Mountain Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/US Mountain Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,68 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:US Mountain Standard Time
+X-LIC-LOCATION:US Mountain Standard Time
+BEGIN:STANDARD
+DTSTART:18831118T113142
+RDATE:18831118T113142
+TZNAME:MST
+TZOFFSETFROM:-072818
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19180331T020000
+RRULE:FREQ=YEARLY;UNTIL=19190330T090000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19181027T020000
+RRULE:FREQ=YEARLY;UNTIL=19191026T080000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:MWT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19440101T000100
+RDATE:19440101T000100
+RDATE:19441001T000100
+RDATE:19671029T020000
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19440401T000100
+RDATE:19440401T000100
+TZNAME:MST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19670101T000000
+RDATE:19670101T000000
+RDATE:19680321T000000
+TZNAME:MST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19670430T020000
+RDATE:19670430T020000
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/UTC+12.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/UTC+12.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/UTC+12.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/UTC+12.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:UTC+12
+X-LIC-LOCATION:UTC+12
+BEGIN:STANDARD
+DTSTART:18000101T120000
+RDATE:18000101T120000
+TZNAME:GMT-12
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1200
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/UTC-02.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/UTC-02.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/UTC-02.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/UTC-02.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:UTC-02
+X-LIC-LOCATION:UTC-02
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:GMT+2
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0200
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/UTC-11.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/UTC-11.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/UTC-11.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/UTC-11.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:UTC-11
+X-LIC-LOCATION:UTC-11
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:GMT+11
+TZOFFSETFROM:-1100
+TZOFFSETTO:-1100
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Ulaanbaatar Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Ulaanbaatar Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Ulaanbaatar Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Ulaanbaatar Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,72 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Ulaanbaatar Standard Time
+X-LIC-LOCATION:Ulaanbaatar Standard Time
+BEGIN:STANDARD
+DTSTART:19050801T000000
+RDATE:19050801T000000
+TZNAME:ULAT
+TZOFFSETFROM:+070732
+TZOFFSETTO:+0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19780101T000000
+RDATE:19780101T000000
+TZNAME:ULAST
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19830401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T160000Z;BYMONTH=4
+TZNAME:ULAST
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19831001T000000
+RDATE:19831001T000000
+TZNAME:ULAT
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19840930T000000
+RRULE:FREQ=YEARLY;UNTIL=19980926T150000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:ULAT
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19850331T000000
+RRULE:FREQ=YEARLY;UNTIL=19980328T160000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:ULAST
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20010428T020000
+RDATE:20010428T020000
+TZNAME:ULAST
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20010929T020000
+RRULE:FREQ=YEARLY;UNTIL=20060929T170000Z;BYDAY=-1SA;BYMONTH=9
+TZNAME:ULAT
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20020330T020000
+RRULE:FREQ=YEARLY;UNTIL=20060324T180000Z;BYDAY=-1SA;BYMONTH=3
+TZNAME:ULAST
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Venezuela Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Venezuela Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Venezuela Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Venezuela Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,37 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Venezuela Standard Time
+X-LIC-LOCATION:Venezuela Standard Time
+BEGIN:STANDARD
+DTSTART:18900101T000000
+RDATE:18900101T000000
+TZNAME:CMT
+TZOFFSETFROM:-042744
+TZOFFSETTO:-042740
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19120212T000000
+RDATE:19120212T000000
+TZNAME:VET
+TZOFFSETFROM:-042740
+TZOFFSETTO:-0430
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19650101T000000
+RDATE:19650101T000000
+TZNAME:VET
+TZOFFSETFROM:-0430
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20071209T030000
+RDATE:20071209T030000
+TZNAME:VET
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0430
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Vladivostok Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Vladivostok Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Vladivostok Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Vladivostok Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,108 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Vladivostok Standard Time
+X-LIC-LOCATION:Vladivostok Standard Time
+BEGIN:STANDARD
+DTSTART:19221115T000000
+RDATE:19221115T000000
+TZNAME:VLAT
+TZOFFSETFROM:+084744
+TZOFFSETTO:+0900
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19300621T000000
+RDATE:19300621T000000
+RDATE:19920119T020000
+TZNAME:VLAST
+TZOFFSETFROM:+0900
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T140000Z;BYMONTH=4
+TZNAME:VLAST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T130000Z;BYMONTH=10
+TZNAME:VLAT
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19900929T160000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:VLAT
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19900324T160000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:VLAST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19910331T020000
+RDATE:19910331T020000
+TZNAME:VLASST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19910929T030000
+RDATE:19910929T030000
+TZNAME:VLAST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+0900
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19920328T230000
+RDATE:19920328T230000
+TZNAME:VLAST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19920926T230000
+RDATE:19920926T230000
+TZNAME:VLAT
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19930328T020000
+RRULE:FREQ=YEARLY;UNTIL=20100327T160000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:VLAST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19930926T030000
+RRULE:FREQ=YEARLY;UNTIL=19950923T160000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:VLAT
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;UNTIL=20101030T160000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:VLAT
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20110327T020000
+RDATE:20110327T020000
+TZNAME:VLAT
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/W. Australia Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/W. Australia Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/W. Australia Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/W. Australia Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,62 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:W. Australia Standard Time
+X-LIC-LOCATION:W. Australia Standard Time
+BEGIN:STANDARD
+DTSTART:18951201T000000
+RDATE:18951201T000000
+TZNAME:WST
+TZOFFSETFROM:+074324
+TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19170101T000100
+RDATE:19170101T000100
+RDATE:19420101T020000
+RDATE:19420927T020000
+RDATE:19741027T020000
+RDATE:19831030T020000
+RDATE:19911117T020000
+RDATE:20061203T020000
+TZNAME:WST
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19170325T020000
+RDATE:19170325T020000
+RDATE:19420329T020000
+RDATE:19430328T020000
+RDATE:19750302T030000
+RDATE:19840304T030000
+RDATE:19920301T030000
+TZNAME:WST
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19430701T000000
+RDATE:19430701T000000
+TZNAME:WST
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20070325T030000
+RRULE:FREQ=YEARLY;UNTIL=20090328T180000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:WST
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20071028T020000
+RRULE:FREQ=YEARLY;UNTIL=20081025T180000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:WST
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/W. Central Africa Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/W. Central Africa Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/W. Central Africa Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/W. Central Africa Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:W. Central Africa Standard Time
+X-LIC-LOCATION:W. Central Africa Standard Time
+BEGIN:STANDARD
+DTSTART:19190901T000000
+RDATE:19190901T000000
+TZNAME:WAT
+TZOFFSETFROM:+001336
+TZOFFSETTO:+0100
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/W. Europe Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/W. Europe Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/W. Europe Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/W. Europe Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,115 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:W. Europe Standard Time
+X-LIC-LOCATION:W. Europe Standard Time
+BEGIN:STANDARD
+DTSTART:18930401T000000
+RDATE:18930401T000000
+TZNAME:CEST
+TZOFFSETFROM:+005328
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19160430T230000
+RDATE:19160430T230000
+RDATE:19400401T020000
+RDATE:19430329T020000
+RDATE:19460414T020000
+RDATE:19470406T030000
+RDATE:19480418T020000
+RDATE:19490410T020000
+RDATE:19800406T020000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19161001T010000
+RDATE:19161001T010000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19441002T030000
+RDATE:19451118T030000
+RDATE:19461007T030000
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19170416T020000
+RRULE:FREQ=YEARLY;UNTIL=19180415T010000Z;BYDAY=3MO;BYMONTH=4
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19170917T030000
+RRULE:FREQ=YEARLY;UNTIL=19180916T010000Z;BYDAY=3MO;BYMONTH=9
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19440403T020000
+RRULE:FREQ=YEARLY;UNTIL=19450402T010000Z;BYDAY=1MO;BYMONTH=4
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19450524T020000
+RDATE:19450524T020000
+RDATE:19470511T030000
+TZNAME:CEMT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19450924T030000
+RDATE:19450924T030000
+RDATE:19470629T030000
+TZNAME:CEST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19460101T000000
+RDATE:19460101T000000
+RDATE:19800101T000000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19471005T030000
+RRULE:FREQ=YEARLY;UNTIL=19491002T010000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19800928T030000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/West Asia Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/West Asia Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/West Asia Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/West Asia Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,79 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:West Asia Standard Time
+X-LIC-LOCATION:West Asia Standard Time
+BEGIN:STANDARD
+DTSTART:19240502T000000
+RDATE:19240502T000000
+TZNAME:TAST
+TZOFFSETFROM:+043712
+TZOFFSETTO:+0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19300621T000000
+RDATE:19300621T000000
+TZNAME:TASST
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T180000Z;BYMONTH=4
+TZNAME:TASST
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0700
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T170000Z;BYMONTH=10
+TZNAME:TAST
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19900929T200000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:TAST
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19900324T200000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:TASST
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0700
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19910331T020000
+RDATE:19910331T020000
+TZNAME:TASST
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19910901T000000
+RDATE:19910901T000000
+TZNAME:UZST
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19910929T030000
+RDATE:19910929T030000
+TZNAME:UZT
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19920101T000000
+RDATE:19920101T000000
+TZNAME:UZT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0500
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/West Pacific Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/West Pacific Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/West Pacific Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/West Pacific Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:West Pacific Standard Time
+X-LIC-LOCATION:West Pacific Standard Time
+BEGIN:STANDARD
+DTSTART:18800101T000000
+RDATE:18800101T000000
+TZNAME:PMMT
+TZOFFSETFROM:+094840
+TZOFFSETTO:+094832
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:18950101T000000
+RDATE:18950101T000000
+TZNAME:PGT
+TZOFFSETFROM:+094832
+TZOFFSETTO:+1000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Yakutsk Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Yakutsk Standard Time.ics)
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Yakutsk Standard Time.ics (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Yakutsk Standard Time.ics 2014-06-11 03:50:42 UTC (rev 13630)
@@ -0,0 +1,108 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Yakutsk Standard Time
+X-LIC-LOCATION:Yakutsk Standard Time
+BEGIN:STANDARD
+DTSTART:19191215T000000
+RDATE:19191215T000000
+TZNAME:YAKT
+TZOFFSETFROM:+083840
+TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19300621T000000
+RDATE:19300621T000000
+RDATE:19920119T020000
+TZNAME:YAKST
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T150000Z;BYMONTH=4
+TZNAME:YAKST
+TZOFFSETFROM:+0900
+TZOFFSETTO:+1000
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T140000Z;BYMONTH=10
+TZNAME:YAKT
+TZOFFSETFROM:+1000
+TZOFFSETTO:+0900
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19900929T170000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:YAKT
+TZOFFSETFROM:+1000
+TZOFFSETTO:+0900
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19900324T170000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:YAKST
+TZOFFSETFROM:+0900
+TZOFFSETTO:+1000
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19910331T020000
+RDATE:19910331T020000
+TZNAME:YAKST
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0900
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19910929T030000
+RDATE:19910929T030000
+TZNAME:YAKT
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19920328T230000
+RDATE:19920328T230000
+TZNAME:YAKST
+TZOFFSETFROM:+0900
+TZOFFSETTO:+1000
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19920926T230000
+RDATE:19920926T230000
+TZNAME:YAKT
+TZOFFSETFROM:+1000
+TZOFFSETTO:+0900
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19930328T020000
+RRULE:FREQ=YEARLY;UNTIL=20100327T170000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:YAKST
+TZOFFSETFROM:+0900
+TZOFFSETTO:+1000
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19930926T030000
+RRULE:FREQ=YEARLY;UNTIL=19950923T170000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:YAKT
+TZOFFSETFROM:+1000
+TZOFFSETTO:+0900
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;UNTIL=20101030T170000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:YAKT
+TZOFFSETFROM:+1000
+TZOFFSETTO:+0900
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20110327T020000
+RDATE:20110327T020000
+TZNAME:YAKT
+TZOFFSETFROM:+0900
+TZOFFSETTO:+1000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Modified: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/links.txt
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/links.txt 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/links.txt 2014-06-11 03:50:42 UTC (rev 13630)
@@ -1,154 +1,252 @@
-America/Virgin America/Port_of_Spain
+AUS Central Standard Time Australia/Darwin
+AUS Eastern Standard Time Australia/Sydney
+Afghanistan Standard Time Asia/Kabul
+Africa/Asmera Africa/Asmara
+Africa/Juba Africa/Khartoum
+Africa/Timbuktu Africa/Bamako
+Alaskan Standard Time America/Anchorage
+America/Anguilla America/Port_of_Spain
+America/Argentina/ComodRivadavia America/Argentina/Catamarca
+America/Aruba America/Curacao
+America/Atka America/Adak
America/Buenos_Aires America/Argentina/Buenos_Aires
-Hongkong Asia/Hong_Kong
-Etc/GMT+0 Etc/GMT
-Asia/Calcutta Asia/Kolkata
-Australia/South Australia/Adelaide
-America/Atka America/Adak
+America/Catamarca America/Argentina/Catamarca
America/Coral_Harbour America/Atikokan
-America/St_Lucia America/Port_of_Spain
-Canada/Newfoundland America/St_Johns
-America/Montserrat America/Port_of_Spain
-PRC Asia/Shanghai
-US/Mountain America/Denver
-Asia/Thimbu Asia/Thimphu
-America/Shiprock America/Denver
+America/Cordoba America/Argentina/Cordoba
+America/Dominica America/Port_of_Spain
+America/Ensenada America/Tijuana
+America/Fort_Wayne America/Indiana/Indianapolis
America/Grenada America/Port_of_Spain
-Europe/Podgorica Europe/Belgrade
-Africa/Juba Africa/Khartoum
-Brazil/DeNoronha America/Noronha
-Jamaica America/Jamaica
-Arctic/Longyearbyen Europe/Oslo
-Europe/Guernsey Europe/London
-GB Europe/London
-America/Aruba America/Curacao
-Chile/EasterIsland Pacific/Easter
-Etc/Universal Etc/UTC
-Navajo America/Denver
+America/Guadeloupe America/Port_of_Spain
America/Indianapolis America/Indiana/Indianapolis
-Pacific/Truk Pacific/Chuuk
-Canada/Mountain America/Edmonton
-Pacific/Yap Pacific/Chuuk
-America/Ensenada America/Tijuana
-Europe/Sarajevo Europe/Belgrade
-Universal Etc/UTC
-Turkey Europe/Istanbul
America/Jujuy America/Argentina/Jujuy
-America/Cordoba America/Argentina/Cordoba
-Europe/Skopje Europe/Belgrade
+America/Knox_IN America/Indiana/Knox
America/Kralendijk America/Curacao
-Australia/Tasmania Australia/Hobart
-Europe/Jersey Europe/London
-Europe/Nicosia Asia/Nicosia
-Asia/Macao Asia/Macau
-Australia/Canberra Australia/Sydney
-ROK Asia/Seoul
-US/Hawaii Pacific/Honolulu
-Asia/Ujung_Pandang Asia/Makassar
-Cuba America/Havana
-Asia/Saigon Asia/Ho_Chi_Minh
-ROC Asia/Taipei
America/Louisville America/Kentucky/Louisville
+America/Lower_Princes America/Curacao
+America/Marigot America/Port_of_Spain
+America/Mendoza America/Argentina/Mendoza
+America/Montserrat America/Port_of_Spain
+America/Porto_Acre America/Rio_Branco
+America/Rosario America/Argentina/Cordoba
+America/Shiprock America/Denver
America/St_Barthelemy America/Port_of_Spain
+America/St_Kitts America/Port_of_Spain
+America/St_Lucia America/Port_of_Spain
America/St_Thomas America/Port_of_Spain
-America/Porto_Acre America/Rio_Branco
-America/Rosario America/Argentina/Cordoba
-America/Guadeloupe America/Port_of_Spain
-Australia/West Australia/Perth
-US/Eastern America/New_York
-Libya Africa/Tripoli
-America/Fort_Wayne America/Indiana/Indianapolis
+America/St_Vincent America/Port_of_Spain
+America/Tortola America/Port_of_Spain
+America/Virgin America/Port_of_Spain
Antarctica/McMurdo Pacific/Auckland
-Canada/Saskatchewan America/Regina
-Canada/Pacific America/Vancouver
-Canada/Eastern America/Toronto
-Iran Asia/Tehran
-GB-Eire Europe/London
-Etc/Greenwich Etc/GMT
-Atlantic/Jan_Mayen Europe/Oslo
-US/Central America/Chicago
-America/St_Vincent America/Port_of_Spain
-US/Pacific America/Los_Angeles
-Portugal Europe/Lisbon
-Europe/Tiraspol Europe/Chisinau
-Europe/Busingen Europe/Zurich
+Antarctica/South_Pole Pacific/Auckland
+Arab Standard Time Asia/Riyadh
+Arabian Standard Time Asia/Dubai
+Arabic Standard Time Asia/Baghdad
+Arctic/Longyearbyen Europe/Oslo
+Argentina Standard Time America/Buenos_Aires
+Asia/Ashkhabad Asia/Ashgabat
+Asia/Calcutta Asia/Kolkata
+Asia/Chungking Asia/Chongqing
+Asia/Dacca Asia/Dhaka
+Asia/Istanbul Europe/Istanbul
Asia/Katmandu Asia/Kathmandu
-Etc/GMT0 Etc/GMT
-Pacific/Ponape Pacific/Pohnpei
-Japan Asia/Tokyo
+Asia/Macao Asia/Macau
+Asia/Saigon Asia/Ho_Chi_Minh
+Asia/Tel_Aviv Asia/Jerusalem
+Asia/Thimbu Asia/Thimphu
+Asia/Ujung_Pandang Asia/Makassar
Asia/Ulan_Bator Asia/Ulaanbaatar
-Kwajalein Pacific/Kwajalein
+Atlantic Standard Time America/Halifax
+Atlantic/Faeroe Atlantic/Faroe
+Atlantic/Jan_Mayen Europe/Oslo
+Australia/ACT Australia/Sydney
+Australia/Canberra Australia/Sydney
+Australia/LHI Australia/Lord_Howe
+Australia/NSW Australia/Sydney
+Australia/North Australia/Darwin
+Australia/Queensland Australia/Brisbane
+Australia/South Australia/Adelaide
+Australia/Tasmania Australia/Hobart
+Australia/Victoria Australia/Melbourne
+Australia/West Australia/Perth
Australia/Yancowinna Australia/Broken_Hill
-America/Marigot America/Port_of_Spain
-America/Lower_Princes America/Curacao
-Greenwich Etc/GMT
-America/Mendoza America/Argentina/Mendoza
-Asia/Dacca Asia/Dhaka
-US/East-Indiana America/Indiana/Indianapolis
-America/Argentina/ComodRivadavia America/Argentina/Catamarca
+Azerbaijan Standard Time Asia/Baku
+Azores Standard Time Atlantic/Azores
+Bahia Standard Time America/Bahia
+Bangladesh Standard Time Asia/Dhaka
+Brazil/Acre America/Rio_Branco
+Brazil/DeNoronha America/Noronha
+Brazil/East America/Sao_Paulo
+Brazil/West America/Manaus
+Canada Central Standard Time America/Regina
+Canada/Atlantic America/Halifax
+Canada/Central America/Winnipeg
Canada/East-Saskatchewan America/Regina
+Canada/Eastern America/Toronto
+Canada/Mountain America/Edmonton
+Canada/Newfoundland America/St_Johns
+Canada/Pacific America/Vancouver
+Canada/Saskatchewan America/Regina
+Canada/Yukon America/Whitehorse
+Cape Verde Standard Time Atlantic/Cape_Verde
+Caucasus Standard Time Asia/Yerevan
+Cen. Australia Standard Time Australia/Adelaide
+Central America Standard Time America/Guatemala
+Central Asia Standard Time Asia/Almaty
+Central Brazilian Standard Time America/Cuiaba
+Central Europe Standard Time Europe/Budapest
+Central European Standard Time Europe/Warsaw
+Central Pacific Standard Time Pacific/Guadalcanal
+Central Standard Time America/Chicago
+Central Standard Time (Mexico) America/Mexico_City
Chile/Continental America/Santiago
-Asia/Tel_Aviv Asia/Jerusalem
-Mexico/General America/Mexico_City
-Asia/Istanbul Europe/Istanbul
+Chile/EasterIsland Pacific/Easter
+China Standard Time Asia/Shanghai
+Cuba America/Havana
+Dateline Standard Time Etc/GMT+12
+E. Africa Standard Time Africa/Nairobi
+E. Australia Standard Time Australia/Brisbane
+E. South America Standard Time America/Sao_Paulo
+Eastern Standard Time America/New_York
+Egypt Africa/Cairo
+Egypt Standard Time Africa/Cairo
+Eire Europe/Dublin
+Ekaterinburg Standard Time Asia/Yekaterinburg
+Etc/GMT+0 Etc/GMT
+Etc/GMT-0 Etc/GMT
+Etc/GMT0 Etc/GMT
+Etc/Greenwich Etc/GMT
+Etc/Universal Etc/UTC
+Etc/Zulu Etc/UTC
+Europe/Belfast Europe/London
+Europe/Bratislava Europe/Prague
+Europe/Busingen Europe/Zurich
+Europe/Guernsey Europe/London
Europe/Isle_of_Man Europe/London
+Europe/Jersey Europe/London
+Europe/Ljubljana Europe/Belgrade
+Europe/Mariehamn Europe/Helsinki
+Europe/Nicosia Asia/Nicosia
+Europe/Podgorica Europe/Belgrade
+Europe/San_Marino Europe/Rome
+Europe/Sarajevo Europe/Belgrade
+Europe/Skopje Europe/Belgrade
+Europe/Tiraspol Europe/Chisinau
+Europe/Vaduz Europe/Zurich
+Europe/Vatican Europe/Rome
+Europe/Zagreb Europe/Belgrade
+FLE Standard Time Europe/Kiev
+Fiji Standard Time Pacific/Fiji
+GB Europe/London
+GB-Eire Europe/London
+GMT Etc/GMT
+GMT Standard Time Europe/London
+GMT+0 Etc/GMT
+GMT-0 Etc/GMT
GMT0 Etc/GMT
-Europe/Mariehamn Europe/Helsinki
-Australia/Victoria Australia/Melbourne
-US/Aleutian America/Adak
-Australia/ACT Australia/Sydney
-Australia/North Australia/Darwin
-US/Samoa Pacific/Pago_Pago
-US/Michigan America/Detroit
-Asia/Chungking Asia/Chongqing
+GTB Standard Time Europe/Bucharest
+Georgian Standard Time Asia/Tbilisi
+Greenland Standard Time America/Godthab
+Greenwich Etc/GMT
+Greenwich Standard Time Atlantic/Reykjavik
+Hawaiian Standard Time Pacific/Honolulu
+Hongkong Asia/Hong_Kong
+Iceland Atlantic/Reykjavik
+India Standard Time Asia/Calcutta
+Iran Asia/Tehran
+Iran Standard Time Asia/Tehran
+Israel Asia/Jerusalem
+Israel Standard Time Asia/Jerusalem
+Jamaica America/Jamaica
+Japan Asia/Tokyo
+Jordan Standard Time Asia/Amman
+Kaliningrad Standard Time Europe/Kaliningrad
+Korea Standard Time Asia/Seoul
+Kwajalein Pacific/Kwajalein
+Libya Africa/Tripoli
+Libya Standard Time Africa/Tripoli
+Magadan Standard Time Asia/Magadan
+Mauritius Standard Time Indian/Mauritius
+Mexico/BajaNorte America/Tijuana
+Mexico/BajaSur America/Mazatlan
+Mexico/General America/Mexico_City
+Middle East Standard Time Asia/Beirut
+Montevideo Standard Time America/Montevideo
+Morocco Standard Time Africa/Casablanca
+Mountain Standard Time America/Denver
+Mountain Standard Time (Mexico) America/Chihuahua
+Myanmar Standard Time Asia/Rangoon
+N. Central Asia Standard Time Asia/Novosibirsk
NZ Pacific/Auckland
-Asia/Ashkhabad Asia/Ashgabat
-America/Knox_IN America/Indiana/Knox
-America/Catamarca America/Argentina/Catamarca
-Zulu Etc/UTC
-GMT+0 Etc/GMT
+NZ-CHAT Pacific/Chatham
+Namibia Standard Time Africa/Windhoek
+Navajo America/Denver
+Nepal Standard Time Asia/Katmandu
+New Zealand Standard Time Pacific/Auckland
+Newfoundland Standard Time America/St_Johns
+North Asia East Standard Time Asia/Irkutsk
+North Asia Standard Time Asia/Krasnoyarsk
+PRC Asia/Shanghai
+Pacific SA Standard Time America/Santiago
+Pacific Standard Time America/Los_Angeles
+Pacific Standard Time (Mexico) America/Santa_Isabel
+Pacific/Johnston Pacific/Honolulu
+Pacific/Ponape Pacific/Pohnpei
+Pacific/Samoa Pacific/Pago_Pago
+Pacific/Truk Pacific/Chuuk
+Pacific/Yap Pacific/Chuuk
+Pakistan Standard Time Asia/Karachi
+Paraguay Standard Time America/Asuncion
Poland Europe/Warsaw
-Pacific/Samoa Pacific/Pago_Pago
-US/Indiana-Starke America/Indiana/Knox
-Australia/LHI Australia/Lord_Howe
-Pacific/Johnston Pacific/Honolulu
-GMT Etc/GMT
-Canada/Yukon America/Whitehorse
-Canada/Atlantic America/Halifax
-US/Arizona America/Phoenix
-Europe/San_Marino Europe/Rome
-Australia/NSW Australia/Sydney
-America/St_Kitts America/Port_of_Spain
-Brazil/East America/Sao_Paulo
-Etc/Zulu Etc/UTC
+Portugal Europe/Lisbon
+ROC Asia/Taipei
+ROK Asia/Seoul
+Romance Standard Time Europe/Paris
+Russian Standard Time Europe/Moscow
+SA Eastern Standard Time America/Cayenne
+SA Pacific Standard Time America/Bogota
+SA Western Standard Time America/La_Paz
+SE Asia Standard Time Asia/Bangkok
+Samoa Standard Time Pacific/Apia
Singapore Asia/Singapore
-Europe/Ljubljana Europe/Belgrade
+Singapore Standard Time Asia/Singapore
+South Africa Standard Time Africa/Johannesburg
+Sri Lanka Standard Time Asia/Colombo
+Syria Standard Time Asia/Damascus
+Taipei Standard Time Asia/Taipei
+Tasmania Standard Time Australia/Hobart
+Tokyo Standard Time Asia/Tokyo
+Tonga Standard Time Pacific/Tongatapu
+Turkey Europe/Istanbul
+Turkey Standard Time Europe/Istanbul
+UCT Etc/UCT
+US Eastern Standard Time America/Indianapolis
+US Mountain Standard Time America/Phoenix
US/Alaska America/Anchorage
-Atlantic/Faeroe Atlantic/Faroe
-Etc/GMT-0 Etc/GMT
-America/Anguilla America/Port_of_Spain
-Israel Asia/Jerusalem
-UCT Etc/UCT
-NZ-CHAT Pacific/Chatham
-Iceland Atlantic/Reykjavik
-Brazil/Acre America/Rio_Branco
-Europe/Vatican Europe/Rome
-Australia/Queensland Australia/Brisbane
-Africa/Timbuktu Africa/Bamako
+US/Aleutian America/Adak
+US/Arizona America/Phoenix
+US/Central America/Chicago
+US/East-Indiana America/Indiana/Indianapolis
+US/Eastern America/New_York
+US/Hawaii Pacific/Honolulu
+US/Indiana-Starke America/Indiana/Knox
+US/Michigan America/Detroit
+US/Mountain America/Denver
+US/Pacific America/Los_Angeles
+US/Samoa Pacific/Pago_Pago
UTC Etc/UTC
-Mexico/BajaNorte America/Tijuana
-Eire Europe/Dublin
-Europe/Zagreb Europe/Belgrade
-Europe/Belfast Europe/London
-Brazil/West America/Manaus
-Mexico/BajaSur America/Mazatlan
-Europe/Bratislava Europe/Prague
-Canada/Central America/Winnipeg
-GMT-0 Etc/GMT
+UTC+12 Etc/GMT-12
+UTC-02 Etc/GMT+2
+UTC-11 Etc/GMT+11
+Ulaanbaatar Standard Time Asia/Ulaanbaatar
+Universal Etc/UTC
+Venezuela Standard Time America/Caracas
+Vladivostok Standard Time Asia/Vladivostok
W-SU Europe/Moscow
-America/Dominica America/Port_of_Spain
-Egypt Africa/Cairo
-America/Tortola America/Port_of_Spain
-Europe/Vaduz Europe/Zurich
-Africa/Asmera Africa/Asmara
-Antarctica/South_Pole Pacific/Auckland
\ No newline at end of file
+W. Australia Standard Time Australia/Perth
+W. Central Africa Standard Time Africa/Lagos
+W. Europe Standard Time Europe/Berlin
+West Asia Standard Time Asia/Tashkent
+West Pacific Standard Time Pacific/Port_Moresby
+Yakutsk Standard Time Asia/Yakutsk
+Zulu Etc/UTC
\ No newline at end of file
Modified: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/timezones.xml
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/timezones.xml 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/timezones.xml 2014-06-11 03:50:42 UTC (rev 13630)
@@ -2,8 +2,23 @@
<!DOCTYPE timezones SYSTEM "timezones.dtd">
<timezones>
- <dtstamp>2014-05-30T18:27:48Z</dtstamp>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
<timezone>
+ <tzid>AUS Central Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>942e93fd3bdd2d06bf96febe3bca4c11</md5>
+ </timezone>
+ <timezone>
+ <tzid>AUS Eastern Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>72b814a9cd04f2198b25d71f6099d0a1</md5>
+ </timezone>
+ <timezone>
+ <tzid>Afghanistan Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>411ffffe0c178625aa3f7f53c40f1319</md5>
+ </timezone>
+ <timezone>
<tzid>Africa/Abidjan</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
<md5>dc9468decb9742f08bafcd6d65a50f32</md5>
@@ -74,11 +89,13 @@
<tzid>Africa/Cairo</tzid>
<dtstamp>2014-05-30T18:27:48Z</dtstamp>
<alias>Egypt</alias>
+ <alias>Egypt Standard Time</alias>
<md5>42e3629db1f2e76ad81f9e078823ac99</md5>
</timezone>
<timezone>
<tzid>Africa/Casablanca</tzid>
<dtstamp>2014-05-30T18:27:48Z</dtstamp>
+ <alias>Morocco Standard Time</alias>
<md5>751312234a74ed078fc6ec8611615b11</md5>
</timezone>
<timezone>
@@ -134,6 +151,7 @@
<timezone>
<tzid>Africa/Johannesburg</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
+ <alias>South Africa Standard Time</alias>
<md5>a39046b0f33a7af0af58c951b8766453</md5>
</timezone>
<timezone>
@@ -165,6 +183,7 @@
<timezone>
<tzid>Africa/Lagos</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
+ <alias>W. Central Africa Standard Time</alias>
<md5>c22edde6ebc4dc407706841c17665286</md5>
</timezone>
<timezone>
@@ -225,6 +244,7 @@
<timezone>
<tzid>Africa/Nairobi</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
+ <alias>E. Africa Standard Time</alias>
<md5>0f834f9942a32756fcf3ecb8bcfd6459</md5>
</timezone>
<timezone>
@@ -266,6 +286,7 @@
<tzid>Africa/Tripoli</tzid>
<dtstamp>2013-11-15T16:10:31Z</dtstamp>
<alias>Libya</alias>
+ <alias>Libya Standard Time</alias>
<md5>6e8040bfd898654905bfd0a49c64e365</md5>
</timezone>
<timezone>
@@ -276,9 +297,15 @@
<timezone>
<tzid>Africa/Windhoek</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
+ <alias>Namibia Standard Time</alias>
<md5>f289f3354d98138b5946f174a4f6048c</md5>
</timezone>
<timezone>
+ <tzid>Alaskan Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>14f9eaaf054aa32faa7b75c0e08c067b</md5>
+ </timezone>
+ <timezone>
<tzid>America/Adak</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
<alias>America/Atka</alias>
@@ -289,6 +316,7 @@
<tzid>America/Anchorage</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
<alias>US/Alaska</alias>
+ <alias>Alaskan Standard Time</alias>
<md5>de9f2f0cfb6cf0265a48f3edf1dbfc8d</md5>
</timezone>
<timezone>
@@ -386,6 +414,7 @@
<timezone>
<tzid>America/Asuncion</tzid>
<dtstamp>2013-05-08T18:04:04Z</dtstamp>
+ <alias>Paraguay Standard Time</alias>
<md5>b6d9cc532c073706f4b628e9558ff341</md5>
</timezone>
<timezone>
@@ -402,6 +431,7 @@
<timezone>
<tzid>America/Bahia</tzid>
<dtstamp>2013-01-14T15:32:16Z</dtstamp>
+ <alias>Bahia Standard Time</alias>
<md5>2d34d74119af2d61ac357e112a064897</md5>
</timezone>
<timezone>
@@ -437,6 +467,7 @@
<timezone>
<tzid>America/Bogota</tzid>
<dtstamp>2013-05-08T18:04:04Z</dtstamp>
+ <alias>SA Pacific Standard Time</alias>
<md5>cca1c4cc5d1c3bf8c4253a8cd5456c09</md5>
</timezone>
<timezone>
@@ -447,6 +478,7 @@
<timezone>
<tzid>America/Buenos_Aires</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
+ <alias>Argentina Standard Time</alias>
<md5>8814f42968145e742683596ed2951683</md5>
</timezone>
<timezone>
@@ -467,6 +499,7 @@
<timezone>
<tzid>America/Caracas</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
+ <alias>Venezuela Standard Time</alias>
<md5>6a4df646dbe97d59022ea0aad3da0e48</md5>
</timezone>
<timezone>
@@ -477,6 +510,7 @@
<timezone>
<tzid>America/Cayenne</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
+ <alias>SA Eastern Standard Time</alias>
<md5>298d74a0126387086229e0e55f0d4ef3</md5>
</timezone>
<timezone>
@@ -488,11 +522,13 @@
<tzid>America/Chicago</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
<alias>US/Central</alias>
+ <alias>Central Standard Time</alias>
<md5>afaa6e4df36635addbf6aafbf639a99d</md5>
</timezone>
<timezone>
<tzid>America/Chihuahua</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
+ <alias>Mountain Standard Time (Mexico)</alias>
<md5>43622e982e100ca20b06991c4f938b50</md5>
</timezone>
<timezone>
@@ -518,6 +554,7 @@
<timezone>
<tzid>America/Cuiaba</tzid>
<dtstamp>2014-05-30T18:27:48Z</dtstamp>
+ <alias>Central Brazilian Standard Time</alias>
<md5>239010d1e747a2638bdd58b161aaba7b</md5>
</timezone>
<timezone>
@@ -549,6 +586,7 @@
<alias>US/Mountain</alias>
<alias>America/Shiprock</alias>
<alias>Navajo</alias>
+ <alias>Mountain Standard Time</alias>
<md5>436e14808b14901d516be96a6cb63709</md5>
</timezone>
<timezone>
@@ -601,6 +639,7 @@
<timezone>
<tzid>America/Godthab</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
+ <alias>Greenland Standard Time</alias>
<md5>b164983aee94fca41a9c8cc6c84425ee</md5>
</timezone>
<timezone>
@@ -626,6 +665,7 @@
<timezone>
<tzid>America/Guatemala</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
+ <alias>Central America Standard Time</alias>
<md5>3f5dcae7aa6bebf3c51fad853b57f91e</md5>
</timezone>
<timezone>
@@ -642,6 +682,7 @@
<tzid>America/Halifax</tzid>
<dtstamp>2012-05-18T14:15:25Z</dtstamp>
<alias>Canada/Atlantic</alias>
+ <alias>Atlantic Standard Time</alias>
<md5>2bb95748970884a8c3a7503062c06f79</md5>
</timezone>
<timezone>
@@ -703,6 +744,7 @@
<timezone>
<tzid>America/Indianapolis</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
+ <alias>US Eastern Standard Time</alias>
<md5>6e96ffc0ee1b866a61e213a74d73b92b</md5>
</timezone>
<timezone>
@@ -755,6 +797,7 @@
<timezone>
<tzid>America/La_Paz</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
+ <alias>SA Western Standard Time</alias>
<md5>098e905a3dc2d7342fd4a966448557c8</md5>
</timezone>
<timezone>
@@ -766,6 +809,7 @@
<tzid>America/Los_Angeles</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
<alias>US/Pacific</alias>
+ <alias>Pacific Standard Time</alias>
<md5>fca9e0d643cee547beae8212c0b53443</md5>
</timezone>
<timezone>
@@ -839,6 +883,7 @@
<tzid>America/Mexico_City</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
<alias>Mexico/General</alias>
+ <alias>Central Standard Time (Mexico)</alias>
<md5>2bf2d4a670f01d28901866cc57a13b62</md5>
</timezone>
<timezone>
@@ -859,6 +904,7 @@
<timezone>
<tzid>America/Montevideo</tzid>
<dtstamp>2012-05-18T16:58:42Z</dtstamp>
+ <alias>Montevideo Standard Time</alias>
<md5>c1279037560f5ffebea4f8ae500b751f</md5>
</timezone>
<timezone>
@@ -880,6 +926,7 @@
<tzid>America/New_York</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
<alias>US/Eastern</alias>
+ <alias>Eastern Standard Time</alias>
<md5>7f02ecc0b9c5f6a0145794886fb1e411</md5>
</timezone>
<timezone>
@@ -937,6 +984,7 @@
<tzid>America/Phoenix</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
<alias>US/Arizona</alias>
+ <alias>US Mountain Standard Time</alias>
<md5>36f6704008b6a5150fe6b7895c131c91</md5>
</timezone>
<timezone>
@@ -997,6 +1045,7 @@
<dtstamp>2012-05-18T14:15:25Z</dtstamp>
<alias>Canada/Saskatchewan</alias>
<alias>Canada/East-Saskatchewan</alias>
+ <alias>Canada Central Standard Time</alias>
<md5>2a81ea7d4cf13d375b6d23864f4e395e</md5>
</timezone>
<timezone>
@@ -1019,6 +1068,7 @@
<timezone>
<tzid>America/Santa_Isabel</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
+ <alias>Pacific Standard Time (Mexico)</alias>
<md5>258b10f97d147ad0fb9c3815fadf9b40</md5>
</timezone>
<timezone>
@@ -1030,6 +1080,7 @@
<tzid>America/Santiago</tzid>
<dtstamp>2013-05-08T18:04:04Z</dtstamp>
<alias>Chile/Continental</alias>
+ <alias>Pacific SA Standard Time</alias>
<md5>fadb4e11ac55c3afaf6a735bb521ccfd</md5>
</timezone>
<timezone>
@@ -1041,6 +1092,7 @@
<tzid>America/Sao_Paulo</tzid>
<dtstamp>2014-05-30T18:27:48Z</dtstamp>
<alias>Brazil/East</alias>
+ <alias>E. South America Standard Time</alias>
<md5>b1c3e7faf0b0f6ceef559e3eb0aac261</md5>
</timezone>
<timezone>
@@ -1067,6 +1119,7 @@
<tzid>America/St_Johns</tzid>
<dtstamp>2012-05-18T14:15:25Z</dtstamp>
<alias>Canada/Newfoundland</alias>
+ <alias>Newfoundland Standard Time</alias>
<md5>08674807ec2a8e109a5a989f222ad373</md5>
</timezone>
<timezone>
@@ -1221,11 +1274,31 @@
<md5>986ca28dcc682891b0833e0b1b2352d7</md5>
</timezone>
<timezone>
+ <tzid>Arab Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>af8262cea313e34b65ea6e9838b24677</md5>
+ </timezone>
+ <timezone>
+ <tzid>Arabian Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>813e9895a1797faa0d534b08246a440f</md5>
+ </timezone>
+ <timezone>
+ <tzid>Arabic Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>59bcbee64e678d36f5fcea326b28a24f</md5>
+ </timezone>
+ <timezone>
<tzid>Arctic/Longyearbyen</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
<md5>40145ed84de3f926275f1c2b5d68df7b</md5>
</timezone>
<timezone>
+ <tzid>Argentina Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>0c874bfea84dbfa02afe5d6ff96e3ac6</md5>
+ </timezone>
+ <timezone>
<tzid>Asia/Aden</tzid>
<dtstamp>2013-05-08T18:04:04Z</dtstamp>
<md5>0e3e302489cb9c9d747466337c84aa32</md5>
@@ -1233,11 +1306,13 @@
<timezone>
<tzid>Asia/Almaty</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
+ <alias>Central Asia Standard Time</alias>
<md5>2d28e8027a12d6bb578500fba1212a3d</md5>
</timezone>
<timezone>
<tzid>Asia/Amman</tzid>
<dtstamp>2014-05-30T18:27:48Z</dtstamp>
+ <alias>Jordan Standard Time</alias>
<md5>ba1a51f6f6b372cfcde53600efe2834f</md5>
</timezone>
<timezone>
@@ -1269,6 +1344,7 @@
<timezone>
<tzid>Asia/Baghdad</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
+ <alias>Arabic Standard Time</alias>
<md5>6b989fb5fc7f59e9b039e33d632361eb</md5>
</timezone>
<timezone>
@@ -1279,16 +1355,19 @@
<timezone>
<tzid>Asia/Baku</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
+ <alias>Azerbaijan Standard Time</alias>
<md5>89b1b87654cad2c27815ac8d7d5a82bb</md5>
</timezone>
<timezone>
<tzid>Asia/Bangkok</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
+ <alias>SE Asia Standard Time</alias>
<md5>0ee6b61e4db09003f6f98d6d285a7f5d</md5>
</timezone>
<timezone>
<tzid>Asia/Beirut</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
+ <alias>Middle East Standard Time</alias>
<md5>ec07a7c21ed6e237900981ba9c627313</md5>
</timezone>
<timezone>
@@ -1304,6 +1383,7 @@
<timezone>
<tzid>Asia/Calcutta</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
+ <alias>India Standard Time</alias>
<md5>43bbd7aad1dd165dc2343be99e5edffe</md5>
</timezone>
<timezone>
@@ -1325,6 +1405,7 @@
<timezone>
<tzid>Asia/Colombo</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
+ <alias>Sri Lanka Standard Time</alias>
<md5>db90d93971d1fcf94b3958ccab478003</md5>
</timezone>
<timezone>
@@ -1335,12 +1416,14 @@
<timezone>
<tzid>Asia/Damascus</tzid>
<dtstamp>2012-05-18T14:15:25Z</dtstamp>
+ <alias>Syria Standard Time</alias>
<md5>725cbf5cace73dba24d4b6a0a91859bd</md5>
</timezone>
<timezone>
<tzid>Asia/Dhaka</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
<alias>Asia/Dacca</alias>
+ <alias>Bangladesh Standard Time</alias>
<md5>88035bd99ca7de5590cd00d7fdf3a8c4</md5>
</timezone>
<timezone>
@@ -1351,6 +1434,7 @@
<timezone>
<tzid>Asia/Dubai</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
+ <alias>Arabian Standard Time</alias>
<md5>e762e58c96d3726bbaf84bb914949d8e</md5>
</timezone>
<timezone>
@@ -1393,6 +1477,7 @@
<timezone>
<tzid>Asia/Irkutsk</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
+ <alias>North Asia East Standard Time</alias>
<md5>29acf8ac702a7d7841a3356c3962ff88</md5>
</timezone>
<timezone>
@@ -1415,11 +1500,13 @@
<dtstamp>2014-05-30T18:27:48Z</dtstamp>
<alias>Asia/Tel_Aviv</alias>
<alias>Israel</alias>
+ <alias>Israel Standard Time</alias>
<md5>85a1cb333e19eb4b92038d6b056b6ef3</md5>
</timezone>
<timezone>
<tzid>Asia/Kabul</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
+ <alias>Afghanistan Standard Time</alias>
<md5>aed7a26e32e4c36ee37c5c82d54a362d</md5>
</timezone>
<timezone>
@@ -1430,6 +1517,7 @@
<timezone>
<tzid>Asia/Karachi</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
+ <alias>Pakistan Standard Time</alias>
<md5>a643fc5fed6a7cc9160a7d54da4c6e60</md5>
</timezone>
<timezone>
@@ -1446,6 +1534,7 @@
<timezone>
<tzid>Asia/Katmandu</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
+ <alias>Nepal Standard Time</alias>
<md5>dfcdb151e17499a38c4fa456c6d603f6</md5>
</timezone>
<timezone>
@@ -1462,6 +1551,7 @@
<timezone>
<tzid>Asia/Krasnoyarsk</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
+ <alias>North Asia Standard Time</alias>
<md5>3e4dbf51d4e4d8988d4d52bc8e3932ed</md5>
</timezone>
<timezone>
@@ -1493,6 +1583,7 @@
<timezone>
<tzid>Asia/Magadan</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
+ <alias>Magadan Standard Time</alias>
<md5>feb4df3f54948a62c9260a8ff0d8560c</md5>
</timezone>
<timezone>
@@ -1525,6 +1616,7 @@
<timezone>
<tzid>Asia/Novosibirsk</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
+ <alias>N. Central Asia Standard Time</alias>
<md5>b8e017738a63324214d6586cbf078d62</md5>
</timezone>
<timezone>
@@ -1565,11 +1657,13 @@
<timezone>
<tzid>Asia/Rangoon</tzid>
<dtstamp>2013-05-08T18:04:04Z</dtstamp>
+ <alias>Myanmar Standard Time</alias>
<md5>c0defadd7d4bfd7e533488677fba8b1e</md5>
</timezone>
<timezone>
<tzid>Asia/Riyadh</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
+ <alias>Arab Standard Time</alias>
<md5>6d11d7edcfa78b32acf9a17169ce728c</md5>
</timezone>
<timezone>
@@ -1591,40 +1685,47 @@
<tzid>Asia/Seoul</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
<alias>ROK</alias>
+ <alias>Korea Standard Time</alias>
<md5>ddab80bd6902fd85f4a75a99fe066c50</md5>
</timezone>
<timezone>
<tzid>Asia/Shanghai</tzid>
<dtstamp>2013-05-08T18:04:04Z</dtstamp>
<alias>PRC</alias>
+ <alias>China Standard Time</alias>
<md5>b96ef8cf7c74c16e15f25c292c9a9ae8</md5>
</timezone>
<timezone>
<tzid>Asia/Singapore</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
<alias>Singapore</alias>
+ <alias>Singapore Standard Time</alias>
<md5>f2f8be51082b2ede9114b3c78a24c608</md5>
</timezone>
<timezone>
<tzid>Asia/Taipei</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
<alias>ROC</alias>
+ <alias>Taipei Standard Time</alias>
<md5>392c0daab0b369c725eaef960e59cb77</md5>
</timezone>
<timezone>
<tzid>Asia/Tashkent</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
+ <alias>West Asia Standard Time</alias>
<md5>ed56064ae96e061f96e38e1414ff1e40</md5>
</timezone>
<timezone>
<tzid>Asia/Tbilisi</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
+ <alias>Georgian Standard Time</alias>
<md5>a473849976251aac174309b4c54cc7b8</md5>
</timezone>
<timezone>
<tzid>Asia/Tehran</tzid>
<dtstamp>2013-01-14T15:32:16Z</dtstamp>
<alias>Iran</alias>
+ <alias>Iran Standard Time</alias>
<md5>d21c79149c3ad3b5721cd6e05bdf65cd</md5>
</timezone>
<timezone>
@@ -1647,6 +1748,7 @@
<tzid>Asia/Tokyo</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
<alias>Japan</alias>
+ <alias>Tokyo Standard Time</alias>
<md5>596917b840456dcac60971ed275e06f9</md5>
</timezone>
<timezone>
@@ -1658,6 +1760,7 @@
<tzid>Asia/Ulaanbaatar</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
<alias>Asia/Ulan_Bator</alias>
+ <alias>Ulaanbaatar Standard Time</alias>
<md5>5aadca75f29da32a0ff78e3775363d06</md5>
</timezone>
<timezone>
@@ -1683,26 +1786,36 @@
<timezone>
<tzid>Asia/Vladivostok</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
+ <alias>Vladivostok Standard Time</alias>
<md5>2f8cf1b4ef5274cf8e117d0a8a591c44</md5>
</timezone>
<timezone>
<tzid>Asia/Yakutsk</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
+ <alias>Yakutsk Standard Time</alias>
<md5>c8446d91924f4f5f899e821604f6e2dd</md5>
</timezone>
<timezone>
<tzid>Asia/Yekaterinburg</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
+ <alias>Ekaterinburg Standard Time</alias>
<md5>ceb73b7be048c14a0ee0ecc9a91d3652</md5>
</timezone>
<timezone>
<tzid>Asia/Yerevan</tzid>
<dtstamp>2012-05-18T14:15:25Z</dtstamp>
+ <alias>Caucasus Standard Time</alias>
<md5>fbf2743ed30170109021b5d447184721</md5>
</timezone>
<timezone>
+ <tzid>Atlantic Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>21e4f77ac658a58c99a25f2d6ea2991b</md5>
+ </timezone>
+ <timezone>
<tzid>Atlantic/Azores</tzid>
<dtstamp>2012-05-18T16:58:42Z</dtstamp>
+ <alias>Azores Standard Time</alias>
<md5>353f9c84fde46bd2cf7069a30c4276ce</md5>
</timezone>
<timezone>
@@ -1718,6 +1831,7 @@
<timezone>
<tzid>Atlantic/Cape_Verde</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
+ <alias>Cape Verde Standard Time</alias>
<md5>486c6cca3174d50e3d3454c5f1f73480</md5>
</timezone>
<timezone>
@@ -1745,6 +1859,7 @@
<tzid>Atlantic/Reykjavik</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
<alias>Iceland</alias>
+ <alias>Greenwich Standard Time</alias>
<md5>992200e91e57b5dc3b4c1387c8b97466</md5>
</timezone>
<timezone>
@@ -1771,12 +1886,14 @@
<tzid>Australia/Adelaide</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
<alias>Australia/South</alias>
+ <alias>Cen. Australia Standard Time</alias>
<md5>ca7281d2d6822a955147c350b7b1cb71</md5>
</timezone>
<timezone>
<tzid>Australia/Brisbane</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
<alias>Australia/Queensland</alias>
+ <alias>E. Australia Standard Time</alias>
<md5>a35c97646a88eec10ad3a6e6b567e508</md5>
</timezone>
<timezone>
@@ -1799,6 +1916,7 @@
<tzid>Australia/Darwin</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
<alias>Australia/North</alias>
+ <alias>AUS Central Standard Time</alias>
<md5>73bbf21cb68354d5fab3393f9e0cc467</md5>
</timezone>
<timezone>
@@ -1810,6 +1928,7 @@
<tzid>Australia/Hobart</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
<alias>Australia/Tasmania</alias>
+ <alias>Tasmania Standard Time</alias>
<md5>3f93782299131bc5e257f74b156c7bff</md5>
</timezone>
<timezone>
@@ -1848,6 +1967,7 @@
<tzid>Australia/Perth</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
<alias>Australia/West</alias>
+ <alias>W. Australia Standard Time</alias>
<md5>a9da90a8b6373ae57da42a972cfa5e67</md5>
</timezone>
<timezone>
@@ -1866,6 +1986,7 @@
<alias>Australia/Canberra</alias>
<alias>Australia/ACT</alias>
<alias>Australia/NSW</alias>
+ <alias>AUS Eastern Standard Time</alias>
<md5>bcdd3fd1c6c326bdef770905bedab9d1</md5>
</timezone>
<timezone>
@@ -1889,6 +2010,26 @@
<md5>da6459a041f1b5580ffb691930c7c6ce</md5>
</timezone>
<timezone>
+ <tzid>Azerbaijan Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>bed1a98e3a47a721aee9a617f2d58a98</md5>
+ </timezone>
+ <timezone>
+ <tzid>Azores Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>8748bb405c66b4799bd3a5e8f0bdd0b4</md5>
+ </timezone>
+ <timezone>
+ <tzid>Bahia Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>d513507bb66cd7ecd78d48cc9021a075</md5>
+ </timezone>
+ <timezone>
+ <tzid>Bangladesh Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>12c3bc6450cd1158e2860dcd740d4791</md5>
+ </timezone>
+ <timezone>
<tzid>Brazil/Acre</tzid>
<dtstamp>2013-11-15T16:10:31Z</dtstamp>
<md5>ad33124888f5c5dd9bed9317ef0bb953</md5>
@@ -1919,6 +2060,11 @@
<md5>2ac180eb45fdda3460f26cee12a017e9</md5>
</timezone>
<timezone>
+ <tzid>Canada Central Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>6898e7f21111cf8bb23ea38120b46ae7</md5>
+ </timezone>
+ <timezone>
<tzid>Canada/Atlantic</tzid>
<dtstamp>2012-05-18T14:15:25Z</dtstamp>
<md5>2cbf7a81ab5bae956eedd4b27df8d8b4</md5>
@@ -1964,6 +2110,61 @@
<md5>ee6648283e8bedb3fdb8c57b9f434a26</md5>
</timezone>
<timezone>
+ <tzid>Cape Verde Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>b93b13bdd5fcf4b16cac38dc0d11feae</md5>
+ </timezone>
+ <timezone>
+ <tzid>Caucasus Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>36da51fb3b37186dabad22e92102019b</md5>
+ </timezone>
+ <timezone>
+ <tzid>Cen. Australia Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>54a9e6a2ce0acf942122fa53bf92079d</md5>
+ </timezone>
+ <timezone>
+ <tzid>Central America Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>869c3ada45ef0ed879d524817f0483fc</md5>
+ </timezone>
+ <timezone>
+ <tzid>Central Asia Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>4cb4c8ea99752e73ff168d6d1577d7f4</md5>
+ </timezone>
+ <timezone>
+ <tzid>Central Brazilian Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>1ce1fe25c75d08d220d462659a7ccb76</md5>
+ </timezone>
+ <timezone>
+ <tzid>Central Europe Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>a6253b4f08c997ace48d666a75dd609d</md5>
+ </timezone>
+ <timezone>
+ <tzid>Central European Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>0189d1130feba42091b5682423bb7231</md5>
+ </timezone>
+ <timezone>
+ <tzid>Central Pacific Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>994bfa6127b6275d9bd385a62f9e83e9</md5>
+ </timezone>
+ <timezone>
+ <tzid>Central Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>6ce7b2318b0e77e848bcfc995d1e75fa</md5>
+ </timezone>
+ <timezone>
+ <tzid>Central Standard Time (Mexico)</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>4007bb3b1f3ca2d493d3d5a98808f16c</md5>
+ </timezone>
+ <timezone>
<tzid>Chile/Continental</tzid>
<dtstamp>2013-05-08T18:04:04Z</dtstamp>
<md5>f317f76740e5c68894538a81fda87ad1</md5>
@@ -1974,11 +2175,36 @@
<md5>4b487f9ea07858d8d2e944204ed611cb</md5>
</timezone>
<timezone>
+ <tzid>China Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>2bb98ef96d017132ecf3facafbb35165</md5>
+ </timezone>
+ <timezone>
<tzid>Cuba</tzid>
<dtstamp>2014-05-30T18:27:48Z</dtstamp>
<md5>b4c7f04f9f4e20441be3042580cab3a8</md5>
</timezone>
<timezone>
+ <tzid>Dateline Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>879e35596cccdfa2788c0b36ead18877</md5>
+ </timezone>
+ <timezone>
+ <tzid>E. Africa Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>7f7652996d0f8bc04f30419bb017f2f9</md5>
+ </timezone>
+ <timezone>
+ <tzid>E. Australia Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>9e6975e3e2d7aa07fde3d48ee8ab76bb</md5>
+ </timezone>
+ <timezone>
+ <tzid>E. South America Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>56ebc3ee8c6ea0cae6e9f6d2890adb3b</md5>
+ </timezone>
+ <timezone>
<tzid>EET</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
<md5>4313a5a54018d63bbe5556966813bd9e</md5>
@@ -1994,16 +2220,31 @@
<md5>a9e719d7f0be1abb2846120179599a2c</md5>
</timezone>
<timezone>
+ <tzid>Eastern Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>13ff590689dc4c786ee53edfe9ee1b17</md5>
+ </timezone>
+ <timezone>
<tzid>Egypt</tzid>
<dtstamp>2014-05-30T18:27:48Z</dtstamp>
<md5>e5bdfeba2637858848136c41d6dd6592</md5>
</timezone>
<timezone>
+ <tzid>Egypt Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>a03e4c51b498c0942fe9c94e6c99942c</md5>
+ </timezone>
+ <timezone>
<tzid>Eire</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
<md5>f8c85e542a416cd7fd792f21241475bb</md5>
</timezone>
<timezone>
+ <tzid>Ekaterinburg Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>3a2fd3183b2fb59554aa605e8d246c34</md5>
+ </timezone>
+ <timezone>
<tzid>Etc/GMT</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
<alias>Etc/GMT+0</alias>
@@ -2035,16 +2276,19 @@
<timezone>
<tzid>Etc/GMT+11</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
+ <alias>UTC-11</alias>
<md5>e9f05290e38fd9ed728763e4b9e5439d</md5>
</timezone>
<timezone>
<tzid>Etc/GMT+12</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
+ <alias>Dateline Standard Time</alias>
<md5>aba6f221c1ac0cb8d72aea5956a7ef5d</md5>
</timezone>
<timezone>
<tzid>Etc/GMT+2</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
+ <alias>UTC-02</alias>
<md5>a9135520a98c2e3d61629c16e58e6017</md5>
</timezone>
<timezone>
@@ -2105,6 +2349,7 @@
<timezone>
<tzid>Etc/GMT-12</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
+ <alias>UTC+12</alias>
<md5>24e457e75e5a2ca8b4d5699a3b16a0c1</md5>
</timezone>
<timezone>
@@ -2226,6 +2471,7 @@
<timezone>
<tzid>Europe/Berlin</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
+ <alias>W. Europe Standard Time</alias>
<md5>7eff1fef65c43f08d542edcfa1d67180</md5>
</timezone>
<timezone>
@@ -2241,11 +2487,13 @@
<timezone>
<tzid>Europe/Bucharest</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
+ <alias>GTB Standard Time</alias>
<md5>06f5949f16196a72a928d48015af4da9</md5>
</timezone>
<timezone>
<tzid>Europe/Budapest</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
+ <alias>Central Europe Standard Time</alias>
<md5>5d9410ec171c22f3cb6af853666832b8</md5>
</timezone>
<timezone>
@@ -2296,6 +2544,7 @@
<dtstamp>2014-05-30T18:27:48Z</dtstamp>
<alias>Turkey</alias>
<alias>Asia/Istanbul</alias>
+ <alias>Turkey Standard Time</alias>
<md5>a8c5d66450ef94c0c1829b8ef0f3b08b</md5>
</timezone>
<timezone>
@@ -2306,11 +2555,13 @@
<timezone>
<tzid>Europe/Kaliningrad</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
+ <alias>Kaliningrad Standard Time</alias>
<md5>4c60c5a58f54e04b1e78ca79090900b5</md5>
</timezone>
<timezone>
<tzid>Europe/Kiev</tzid>
<dtstamp>2014-05-30T18:27:48Z</dtstamp>
+ <alias>FLE Standard Time</alias>
<md5>e8d3adb6ed0d6d1c5350086a9d0803c4</md5>
</timezone>
<timezone>
@@ -2333,6 +2584,7 @@
<alias>Europe/Isle_of_Man</alias>
<alias>GB-Eire</alias>
<alias>Europe/Belfast</alias>
+ <alias>GMT Standard Time</alias>
<md5>d9c25d5b2eb02260bc94730e235938b9</md5>
</timezone>
<timezone>
@@ -2369,6 +2621,7 @@
<tzid>Europe/Moscow</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
<alias>W-SU</alias>
+ <alias>Russian Standard Time</alias>
<md5>163c9f35321ad3b6d79c5e13d3de4a66</md5>
</timezone>
<timezone>
@@ -2386,6 +2639,7 @@
<timezone>
<tzid>Europe/Paris</tzid>
<dtstamp>2012-05-18T16:58:42Z</dtstamp>
+ <alias>Romance Standard Time</alias>
<md5>8dcfe790e26460e4850d07f032bee5a6</md5>
</timezone>
<timezone>
@@ -2495,6 +2749,7 @@
<tzid>Europe/Warsaw</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
<alias>Poland</alias>
+ <alias>Central European Standard Time</alias>
<md5>9011dff96ae67331fefb285befee32c7</md5>
</timezone>
<timezone>
@@ -2515,6 +2770,16 @@
<md5>f4cfe31d995ca98d545a03ef60ebbbee</md5>
</timezone>
<timezone>
+ <tzid>FLE Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>0ae1b4885ddb55aaa7bbb81318506844</md5>
+ </timezone>
+ <timezone>
+ <tzid>Fiji Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>f53a5ec8b50fc4a04b2fbf1ea0e7e577</md5>
+ </timezone>
+ <timezone>
<tzid>GB</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
<md5>cf499d3386c1547d82ada718d426302a</md5>
@@ -2530,6 +2795,11 @@
<md5>7e1ee359c14980b307a35b4ea42e2ddf</md5>
</timezone>
<timezone>
+ <tzid>GMT Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>a16951b9d79ec5d513253c4be09e8ad8</md5>
+ </timezone>
+ <timezone>
<tzid>GMT+0</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
<md5>ce675f57f78b3a1e213c8ad399205020</md5>
@@ -2545,16 +2815,41 @@
<md5>b02b3430b23d30714a470ed456a9f19a</md5>
</timezone>
<timezone>
+ <tzid>GTB Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>dfc95bb97b0cc61f39029dec1d7b3725</md5>
+ </timezone>
+ <timezone>
+ <tzid>Georgian Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>ce12e3a54f497a428ac320f8e44ebe1b</md5>
+ </timezone>
+ <timezone>
+ <tzid>Greenland Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>78c939588bf5314a272590a40857bd9c</md5>
+ </timezone>
+ <timezone>
<tzid>Greenwich</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
<md5>47885ad66487af94b749e903f8fcc942</md5>
</timezone>
<timezone>
+ <tzid>Greenwich Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>b04584eca67568cea6f7ad15fd69433a</md5>
+ </timezone>
+ <timezone>
<tzid>HST</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
<md5>406972d8f460561b5ed0cc9635075cec</md5>
</timezone>
<timezone>
+ <tzid>Hawaiian Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>78e49db8edd7865e4fbd4437d91b954d</md5>
+ </timezone>
+ <timezone>
<tzid>Hongkong</tzid>
<dtstamp>2013-05-08T18:04:04Z</dtstamp>
<md5>1166b6a5bb7094a4036ed80d6228cfc2</md5>
@@ -2565,6 +2860,11 @@
<md5>1f3e3f1d74ac62c6309335ba7def679e</md5>
</timezone>
<timezone>
+ <tzid>India Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>5bc101a49c9390078abf4fde42bf543d</md5>
+ </timezone>
+ <timezone>
<tzid>Indian/Antananarivo</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
<md5>54b8cf688972faef6254eda042d0b759</md5>
@@ -2607,6 +2907,7 @@
<timezone>
<tzid>Indian/Mauritius</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
+ <alias>Mauritius Standard Time</alias>
<md5>1ef668c409d1c581977fd40fc7505481</md5>
</timezone>
<timezone>
@@ -2625,11 +2926,21 @@
<md5>844f28e11094bef30381a7ebe5d0c7c6</md5>
</timezone>
<timezone>
+ <tzid>Iran Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>06d7f0cd5e0d1a8c440d1b89cd9a45ed</md5>
+ </timezone>
+ <timezone>
<tzid>Israel</tzid>
<dtstamp>2014-05-30T18:27:48Z</dtstamp>
<md5>332718eee8f091b1b00870c8e44bfa46</md5>
</timezone>
<timezone>
+ <tzid>Israel Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>e1773817be9273336abcf0858a7c6f7d</md5>
+ </timezone>
+ <timezone>
<tzid>Jamaica</tzid>
<dtstamp>2013-10-01T01:19:11Z</dtstamp>
<md5>b5f083a6081a40b4525e7c8e2da9e963</md5>
@@ -2640,6 +2951,21 @@
<md5>ff59375f1fd8af619f193e904888c448</md5>
</timezone>
<timezone>
+ <tzid>Jordan Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>239404fd4117c3070ea02c6cdcab0ed7</md5>
+ </timezone>
+ <timezone>
+ <tzid>Kaliningrad Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>e06d0cefda50969894397c8c2bdb132f</md5>
+ </timezone>
+ <timezone>
+ <tzid>Korea Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>756dd3b6d51cc197eb8c2a08fb88aa30</md5>
+ </timezone>
+ <timezone>
<tzid>Kwajalein</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
<md5>18865d3f0f1a93f2b96d77d8b63b86be</md5>
@@ -2650,6 +2976,11 @@
<md5>e6ac54ea0ab33dd6fd125a71fc34cf46</md5>
</timezone>
<timezone>
+ <tzid>Libya Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>354c1f845ab7ad751b6124e9a1619d6b</md5>
+ </timezone>
+ <timezone>
<tzid>MET</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
<md5>3176603f9d378e550950e8139ee1bfef</md5>
@@ -2665,6 +2996,16 @@
<md5>d43bd95c6a43197ff72e084d1bebb875</md5>
</timezone>
<timezone>
+ <tzid>Magadan Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>0399e537a95ae84af318fe49135304ec</md5>
+ </timezone>
+ <timezone>
+ <tzid>Mauritius Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>f87744abf69766482ade5da23e0ef240</md5>
+ </timezone>
+ <timezone>
<tzid>Mexico/BajaNorte</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
<md5>7ccf81b88f1e609f28623b2d917dbbde</md5>
@@ -2680,6 +3021,41 @@
<md5>3b33093afd8c0a554948130f54cc23f4</md5>
</timezone>
<timezone>
+ <tzid>Middle East Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>4e652b5c7f318678a5be15ae9fb14752</md5>
+ </timezone>
+ <timezone>
+ <tzid>Montevideo Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>4dc81b0fa971a57c57b710ca18b20bc9</md5>
+ </timezone>
+ <timezone>
+ <tzid>Morocco Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>e268fdccf45f90b9a0bb372521040c80</md5>
+ </timezone>
+ <timezone>
+ <tzid>Mountain Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>e0a262ac5ef311d51fca018b4e0ad456</md5>
+ </timezone>
+ <timezone>
+ <tzid>Mountain Standard Time (Mexico)</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>228bd4c26ec332e0ac8f521b22cbe0cd</md5>
+ </timezone>
+ <timezone>
+ <tzid>Myanmar Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>6b52c184b0ad0bf74a6792259d52aa62</md5>
+ </timezone>
+ <timezone>
+ <tzid>N. Central Asia Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>d77a6f9abab36065495b31edd8e77c80</md5>
+ </timezone>
+ <timezone>
<tzid>NZ</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
<md5>6f3e44f4f50b3e2e6e8fa002734e37a2</md5>
@@ -2690,11 +3066,41 @@
<md5>b7ab01dcc64ed6b0877b41a48a5f5bf1</md5>
</timezone>
<timezone>
+ <tzid>Namibia Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>29cc2769ce1179e449dc6cf6a957c7f5</md5>
+ </timezone>
+ <timezone>
<tzid>Navajo</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
<md5>46c72b3a055bd29862b55ac4bf1a62ed</md5>
</timezone>
<timezone>
+ <tzid>Nepal Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>947e08ee93b35119c551186fd4a19f9f</md5>
+ </timezone>
+ <timezone>
+ <tzid>New Zealand Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>9fced4d15fca067f5454d72929088c5d</md5>
+ </timezone>
+ <timezone>
+ <tzid>Newfoundland Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>48508a15a031b973a444b91a551cd28a</md5>
+ </timezone>
+ <timezone>
+ <tzid>North Asia East Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>095f1c445394d82adec64602d537a986</md5>
+ </timezone>
+ <timezone>
+ <tzid>North Asia Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>6fedb564e771afc51b219f2bae5da796</md5>
+ </timezone>
+ <timezone>
<tzid>PRC</tzid>
<dtstamp>2013-05-08T18:04:04Z</dtstamp>
<md5>4b00f46a2c83f3e58d09f75fbb92e2ba</md5>
@@ -2705,8 +3111,24 @@
<md5>b519fb841c7d3f389a584fdfa7372b93</md5>
</timezone>
<timezone>
+ <tzid>Pacific SA Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>b26c2e5cd71738f09e98ede5982fab5e</md5>
+ </timezone>
+ <timezone>
+ <tzid>Pacific Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>6ffa7272875d070d46bc8ec057225665</md5>
+ </timezone>
+ <timezone>
+ <tzid>Pacific Standard Time (Mexico)</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>48e275bef2a5475110835bdf3a7dbb49</md5>
+ </timezone>
+ <timezone>
<tzid>Pacific/Apia</tzid>
<dtstamp>2013-01-14T15:32:16Z</dtstamp>
+ <alias>Samoa Standard Time</alias>
<md5>c7fe6c219fb68825f1e065008bc06040</md5>
</timezone>
<timezone>
@@ -2715,6 +3137,7 @@
<alias>NZ</alias>
<alias>Antarctica/McMurdo</alias>
<alias>Antarctica/South_Pole</alias>
+ <alias>New Zealand Standard Time</alias>
<md5>31b52d15573225aff7940c24fbe45343</md5>
</timezone>
<timezone>
@@ -2754,6 +3177,7 @@
<timezone>
<tzid>Pacific/Fiji</tzid>
<dtstamp>2014-05-30T18:27:48Z</dtstamp>
+ <alias>Fiji Standard Time</alias>
<md5>78ca7c42aa407761c6804f0502976b83</md5>
</timezone>
<timezone>
@@ -2774,6 +3198,7 @@
<timezone>
<tzid>Pacific/Guadalcanal</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
+ <alias>Central Pacific Standard Time</alias>
<md5>ac17a77c46959df23f3d6d8f21ebf380</md5>
</timezone>
<timezone>
@@ -2786,6 +3211,7 @@
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
<alias>US/Hawaii</alias>
<alias>Pacific/Johnston</alias>
+ <alias>Hawaiian Standard Time</alias>
<md5>be013195b929c48b73f0234a5226a763</md5>
</timezone>
<timezone>
@@ -2875,6 +3301,7 @@
<timezone>
<tzid>Pacific/Port_Moresby</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
+ <alias>West Pacific Standard Time</alias>
<md5>042a04dfc570e2936ad064894529f41c</md5>
</timezone>
<timezone>
@@ -2905,6 +3332,7 @@
<timezone>
<tzid>Pacific/Tongatapu</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
+ <alias>Tonga Standard Time</alias>
<md5>2124717920b350ba81643915b321d139</md5>
</timezone>
<timezone>
@@ -2928,6 +3356,16 @@
<md5>721ea1e811f10f00a44b2079ceece1f3</md5>
</timezone>
<timezone>
+ <tzid>Pakistan Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>c8aceae74e764aceec483640afa45b86</md5>
+ </timezone>
+ <timezone>
+ <tzid>Paraguay Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>5de6fc55052ef5ac431356c060afc502</md5>
+ </timezone>
+ <timezone>
<tzid>Poland</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
<md5>95a5dc1d445e1abc4a5f3626f4552800</md5>
@@ -2948,21 +3386,111 @@
<md5>b4ce7399fc454c07647554d069239558</md5>
</timezone>
<timezone>
+ <tzid>Romance Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>f33b41c3b27c39b58a01d7e2bd15e891</md5>
+ </timezone>
+ <timezone>
+ <tzid>Russian Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>1651f23851e6f44162396c133a095d26</md5>
+ </timezone>
+ <timezone>
+ <tzid>SA Eastern Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>06f22d20ab3fe7b1c0c6ae309fe0b3cb</md5>
+ </timezone>
+ <timezone>
+ <tzid>SA Pacific Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>f8ed98409c9324eb2a5efb24b41f57ae</md5>
+ </timezone>
+ <timezone>
+ <tzid>SA Western Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>80dca707facf8efaaa36be9f9c89089d</md5>
+ </timezone>
+ <timezone>
+ <tzid>SE Asia Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>ad83f90b23aefd9d9dd450deac72ee2f</md5>
+ </timezone>
+ <timezone>
+ <tzid>Samoa Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>d14f124106dc5c45bc686eb62128e7e5</md5>
+ </timezone>
+ <timezone>
<tzid>Singapore</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
<md5>94dcb7e58cfd771fa8ec1bd1ea6a5248</md5>
</timezone>
<timezone>
+ <tzid>Singapore Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>94f8f3515c361ea9775ffcb6e9854e2f</md5>
+ </timezone>
+ <timezone>
+ <tzid>South Africa Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>6e229a8322a1b763928c28cfde3c6183</md5>
+ </timezone>
+ <timezone>
+ <tzid>Sri Lanka Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>105896be19d4cfc5866b9e7077491497</md5>
+ </timezone>
+ <timezone>
+ <tzid>Syria Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>42aceb769ea063799fde4f5c5c548a6e</md5>
+ </timezone>
+ <timezone>
+ <tzid>Taipei Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>ae23a32cf494ea76c848a68a7ae972f7</md5>
+ </timezone>
+ <timezone>
+ <tzid>Tasmania Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>656d5bff4d0c2340ae30a5e764538d68</md5>
+ </timezone>
+ <timezone>
+ <tzid>Tokyo Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>af0a29619e7caacdb24f136d4d9a9f57</md5>
+ </timezone>
+ <timezone>
+ <tzid>Tonga Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>396a4beadbdc3d50bcf6b07fd778c101</md5>
+ </timezone>
+ <timezone>
<tzid>Turkey</tzid>
<dtstamp>2014-05-30T18:27:48Z</dtstamp>
<md5>ea45d8a59e773676fec8d3bd1b31441d</md5>
</timezone>
<timezone>
+ <tzid>Turkey Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>0d84294523585a0799fe0c12d4a36872</md5>
+ </timezone>
+ <timezone>
<tzid>UCT</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
<md5>77ab109760c523113f36441e0a218999</md5>
</timezone>
<timezone>
+ <tzid>US Eastern Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>4708533536c230ec7eb92548b0e64bdd</md5>
+ </timezone>
+ <timezone>
+ <tzid>US Mountain Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>e3a68a8c3599e79bd333ad4fdd3c96fe</md5>
+ </timezone>
+ <timezone>
<tzid>US/Alaska</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
<md5>0079a04f2e0aafab32b4d4230d97cfde</md5>
@@ -3028,21 +3556,81 @@
<md5>3b4bdbd492aa1796c10f37c1969dbd4b</md5>
</timezone>
<timezone>
+ <tzid>UTC+12</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>5317101733f870b217196d4bdb5b67ff</md5>
+ </timezone>
+ <timezone>
+ <tzid>UTC-02</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>25ba389e4ccb8cf0dd6f129c7ff7f8c4</md5>
+ </timezone>
+ <timezone>
+ <tzid>UTC-11</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>fdc341a444c22d3308bd2a649ae0112c</md5>
+ </timezone>
+ <timezone>
+ <tzid>Ulaanbaatar Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>73b0a30b79c8034dafdba553910fe0e0</md5>
+ </timezone>
+ <timezone>
<tzid>Universal</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
<md5>50bcbcc5d95d03946dd65a7d53877ac7</md5>
</timezone>
<timezone>
+ <tzid>Venezuela Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>afd03b559b8bad714fe294bcb2cc1c9e</md5>
+ </timezone>
+ <timezone>
+ <tzid>Vladivostok Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>53e23ab867c6a9b4e87eefef6668ed7a</md5>
+ </timezone>
+ <timezone>
<tzid>W-SU</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
<md5>3fdc23a1e84d1e77026ef5134217ffa3</md5>
</timezone>
<timezone>
+ <tzid>W. Australia Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>adfbe5b5fd570ef3eefd7340a5e729cf</md5>
+ </timezone>
+ <timezone>
+ <tzid>W. Central Africa Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>2aad10d3015d5019dcada3b6cf6493f4</md5>
+ </timezone>
+ <timezone>
+ <tzid>W. Europe Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>8a85b21b39e21ab7d59f836b27b31d39</md5>
+ </timezone>
+ <timezone>
<tzid>WET</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
<md5>f7d652d5d227809a7c9a9d75fea34c08</md5>
</timezone>
<timezone>
+ <tzid>West Asia Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>3484ac60b5568e639e5683a32bc6cdcf</md5>
+ </timezone>
+ <timezone>
+ <tzid>West Pacific Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>f403c7129fb48cee288e856571f2ffd8</md5>
+ </timezone>
+ <timezone>
+ <tzid>Yakutsk Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>81e4af08c31bf752ca8b0f4ea3937518</md5>
+ </timezone>
+ <timezone>
<tzid>Zulu</tzid>
<dtstamp>2011-10-05T11:50:21Z</dtstamp>
<md5>fa5e48a172aaa63cbd2193b233b2d9a4</md5>
Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/base/propertystore/base.py
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/txdav/base/propertystore/base.py 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/txdav/base/propertystore/base.py 2014-06-11 03:50:42 UTC (rev 13630)
@@ -26,6 +26,7 @@
from twext.python.log import Logger
from txdav.xml import element as davxml
from txdav.xml.base import encodeXMLName
+from txdav.xml.element import lookupElement
from txweb2.dav.resource import TwistedGETContentMD5, \
TwistedQuotaRootProperty
@@ -98,7 +99,11 @@
return encodeXMLName(self.namespace, self.name)
+ def toElement(self):
+ return lookupElement((self.namespace, self.name,))
+
+
class AbstractPropertyStore(DictMixin, object):
"""
Base property store.
@@ -108,6 +113,7 @@
implements(IPropertyStore)
_defaultShadowableKeys = frozenset()
+ _defaultProxyOverrideKeys = frozenset()
_defaultGlobalKeys = frozenset((
PropertyName.fromElement(davxml.ACL),
PropertyName.fromElement(davxml.ResourceID),
@@ -117,7 +123,7 @@
PropertyName.fromElement(TwistedQuotaRootProperty),
))
- def __init__(self, defaultUser, shareeUser=None):
+ def __init__(self, defaultUser, shareeUser=None, proxyUser=None):
"""
Instantiate the property store for a user. The default is the default user
(owner) property to read in the case of global or shadowable properties.
@@ -128,12 +134,17 @@
@param shareeUser: the per user uid or None if the same as defaultUser
@type shareeUser: C{str}
+
+ @param proxyUser: the proxy uid or None if no proxy
+ @type proxyUser: C{str}
"""
assert(defaultUser is not None or shareeUser is not None)
self._defaultUser = shareeUser if defaultUser is None else defaultUser
self._perUser = defaultUser if shareeUser is None else shareeUser
+ self._proxyUser = self._perUser if proxyUser is None else proxyUser
self._shadowableKeys = set(AbstractPropertyStore._defaultShadowableKeys)
+ self._proxyOverrideKeys = set(AbstractPropertyStore._defaultProxyOverrideKeys)
self._globalKeys = set(AbstractPropertyStore._defaultGlobalKeys)
@@ -149,8 +160,13 @@
self._perUser = uid
- def setSpecialProperties(self, shadowableKeys, globalKeys):
+ def _setProxyUID(self, uid):
+ self._proxyUser = uid
+
+
+ def setSpecialProperties(self, shadowableKeys, globalKeys, proxyOverrideKeys):
self._shadowableKeys.update(shadowableKeys)
+ self._proxyOverrideKeys.update(proxyOverrideKeys)
self._globalKeys.update(globalKeys)
@@ -191,6 +207,13 @@
#
def __getitem__(self, key):
+ # Return proxy value if it exists, else fall through to normal logic
+ if self._proxyUser != self._perUser and self.isProxyOverrideProperty(key):
+ try:
+ return self._getitem_uid(key, self._proxyUser)
+ except KeyError:
+ pass
+
# Handle per-user behavior
if self.isShadowableProperty(key):
try:
@@ -208,11 +231,23 @@
# Handle per-user behavior
if self.isGlobalProperty(key):
return self._setitem_uid(key, value, self._defaultUser)
+ # Handle proxy behavior
+ elif self._proxyUser != self._perUser and self.isProxyOverrideProperty(key):
+ return self._setitem_uid(key, value, self._proxyUser)
+ # Remainder is per user
else:
return self._setitem_uid(key, value, self._perUser)
def __delitem__(self, key):
+ # Delete proxy value if it exists, else fall through to normal logic
+ if self._proxyUser != self._perUser and self.isProxyOverrideProperty(key):
+ try:
+ self._delitem_uid(key, self._proxyUser)
+ return
+ except KeyError:
+ pass
+
# Handle per-user behavior
if self.isShadowableProperty(key):
try:
@@ -245,11 +280,14 @@
self[key] = other[key]
- # Per-user property handling
def isShadowableProperty(self, key):
return key in self._shadowableKeys
+ def isProxyOverrideProperty(self, key):
+ return key in self._proxyOverrideKeys
+
+
def isGlobalProperty(self, key):
return key in self._globalKeys
Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/base/propertystore/sql.py
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/txdav/base/propertystore/sql.py 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/txdav/base/propertystore/sql.py 2014-06-11 03:50:42 UTC (rev 13630)
@@ -117,17 +117,19 @@
yield _cache_user_props(self._defaultUser)
if self._perUser != self._defaultUser:
yield _cache_user_props(self._perUser)
+ if self._proxyUser != self._perUser:
+ yield _cache_user_props(self._proxyUser)
@classmethod
@inlineCallbacks
- def load(cls, defaultuser, shareUser, txn, resourceID, created=False, notifyCallback=None):
+ def load(cls, defaultuser, shareUser, proxyUser, txn, resourceID, created=False, notifyCallback=None):
"""
@param notifyCallback: a callable used to trigger notifications when the
property store changes.
"""
self = cls.__new__(cls)
- super(PropertyStore, self).__init__(defaultuser, shareUser)
+ super(PropertyStore, self).__init__(defaultuser, shareUser, proxyUser)
self._txn = txn
self._resourceID = resourceID
if not self._txn.store().queryCachingEnabled():
@@ -141,7 +143,7 @@
@classmethod
@inlineCallbacks
- def forMultipleResources(cls, defaultUser, txn,
+ def forMultipleResources(cls, defaultUser, shareeUser, proxyUser, txn,
childColumn, parentColumn, parentID):
"""
Load all property stores for all objects in a collection. This is used
@@ -179,13 +181,13 @@
Where=parentColumn == parentID
)
rows = yield query.on(txn)
- stores = cls._createMultipleStores(defaultUser, txn, rows)
+ stores = cls._createMultipleStores(defaultUser, shareeUser, proxyUser, txn, rows)
returnValue(stores)
@classmethod
@inlineCallbacks
- def forMultipleResourcesWithResourceIDs(cls, defaultUser, txn, resourceIDs):
+ def forMultipleResourcesWithResourceIDs(cls, defaultUser, shareeUser, proxyUser, txn, resourceIDs):
"""
Load all property stores for all specified resources. This is used
to optimize Depth:1 operations on that collection, by loading all
@@ -214,13 +216,13 @@
Where=prop.RESOURCE_ID.In(Parameter("resourceIDs", len(resourceIDs)))
)
rows = yield query.on(txn, resourceIDs=resourceIDs)
- stores = cls._createMultipleStores(defaultUser, txn, rows)
+ stores = cls._createMultipleStores(defaultUser, shareeUser, proxyUser, txn, rows)
# Make sure we have a store for each resourceID even if no properties exist
for resourceID in resourceIDs:
if resourceID not in stores:
store = cls.__new__(cls)
- super(PropertyStore, store).__init__(defaultUser)
+ super(PropertyStore, store).__init__(defaultUser, shareeUser, proxyUser)
store._txn = txn
store._resourceID = resourceID
store._cached = {}
@@ -230,7 +232,7 @@
@classmethod
- def _createMultipleStores(cls, defaultUser, txn, rows):
+ def _createMultipleStores(cls, defaultUser, shareeUser, proxyUser, txn, rows):
"""
Create a set of stores for the set of rows passed in.
"""
@@ -245,7 +247,7 @@
if resource_id:
if resource_id not in createdStores:
store = cls.__new__(cls)
- super(PropertyStore, store).__init__(defaultUser)
+ super(PropertyStore, store).__init__(defaultUser, shareeUser, proxyUser)
store._txn = txn
store._resourceID = resource_id
store._cached = {}
@@ -253,7 +255,7 @@
createdStores[resource_id]._cached[(name, view_uid)] = value
elif object_resource_id:
store = cls.__new__(cls)
- super(PropertyStore, store).__init__(defaultUser)
+ super(PropertyStore, store).__init__(defaultUser, shareeUser, proxyUser)
store._txn = txn
store._resourceID = object_resource_id
store._cached = {}
Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/base/propertystore/test/base.py
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/txdav/base/propertystore/test/base.py 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/txdav/base/propertystore/test/base.py 2014-06-11 03:50:42 UTC (rev 13630)
@@ -140,29 +140,45 @@
yield self._changed(self.propertyStore1)
self.assertEquals(self.propertyStore1.get(name, None), value1)
self.assertEquals(self.propertyStore2.get(name, None), None)
+ self.assertEquals(self.propertyStore3.get(name, None), value1)
+ self.assertEquals(self.propertyStore4.get(name, None), None)
self.failUnless(name in self.propertyStore1)
self.failIf(name in self.propertyStore2)
+ self.failUnless(name in self.propertyStore3)
+ self.failIf(name in self.propertyStore4)
self.propertyStore2[name] = value2
yield self._changed(self.propertyStore2)
self.assertEquals(self.propertyStore1.get(name, None), value1)
self.assertEquals(self.propertyStore2.get(name, None), value2)
+ self.assertEquals(self.propertyStore3.get(name, None), value1)
+ self.assertEquals(self.propertyStore4.get(name, None), value2)
self.failUnless(name in self.propertyStore1)
self.failUnless(name in self.propertyStore2)
+ self.failUnless(name in self.propertyStore3)
+ self.failUnless(name in self.propertyStore4)
del self.propertyStore2[name]
yield self._changed(self.propertyStore2)
self.assertEquals(self.propertyStore1.get(name, None), value1)
self.assertEquals(self.propertyStore2.get(name, None), None)
+ self.assertEquals(self.propertyStore3.get(name, None), value1)
+ self.assertEquals(self.propertyStore4.get(name, None), None)
self.failUnless(name in self.propertyStore1)
self.failIf(name in self.propertyStore2)
+ self.failUnless(name in self.propertyStore3)
+ self.failIf(name in self.propertyStore4)
del self.propertyStore1[name]
yield self._changed(self.propertyStore1)
self.assertEquals(self.propertyStore1.get(name, None), None)
self.assertEquals(self.propertyStore2.get(name, None), None)
+ self.assertEquals(self.propertyStore3.get(name, None), None)
+ self.assertEquals(self.propertyStore4.get(name, None), None)
self.failIf(name in self.propertyStore1)
self.failIf(name in self.propertyStore2)
+ self.failIf(name in self.propertyStore3)
+ self.failIf(name in self.propertyStore4)
@inlineCallbacks
@@ -170,8 +186,10 @@
name = propertyName("shadow")
- self.propertyStore1.setSpecialProperties((name,), ())
- self.propertyStore2.setSpecialProperties((name,), ())
+ self.propertyStore1.setSpecialProperties((name,), (), ())
+ self.propertyStore2.setSpecialProperties((name,), (), ())
+ self.propertyStore3.setSpecialProperties((name,), (), ())
+ self.propertyStore4.setSpecialProperties((name,), (), ())
value1 = propertyValue("Hello, World1!")
value2 = propertyValue("Hello, World2!")
@@ -180,29 +198,45 @@
yield self._changed(self.propertyStore1)
self.assertEquals(self.propertyStore1.get(name, None), value1)
self.assertEquals(self.propertyStore2.get(name, None), value1)
+ self.assertEquals(self.propertyStore3.get(name, None), value1)
+ self.assertEquals(self.propertyStore4.get(name, None), value1)
self.failUnless(name in self.propertyStore1)
self.failUnless(name in self.propertyStore2)
+ self.failUnless(name in self.propertyStore3)
+ self.failUnless(name in self.propertyStore4)
self.propertyStore2[name] = value2
yield self._changed(self.propertyStore2)
self.assertEquals(self.propertyStore1.get(name, None), value1)
self.assertEquals(self.propertyStore2.get(name, None), value2)
+ self.assertEquals(self.propertyStore3.get(name, None), value1)
+ self.assertEquals(self.propertyStore4.get(name, None), value2)
self.failUnless(name in self.propertyStore1)
self.failUnless(name in self.propertyStore2)
+ self.failUnless(name in self.propertyStore3)
+ self.failUnless(name in self.propertyStore4)
del self.propertyStore2[name]
yield self._changed(self.propertyStore2)
self.assertEquals(self.propertyStore1.get(name, None), value1)
self.assertEquals(self.propertyStore2.get(name, None), value1)
+ self.assertEquals(self.propertyStore3.get(name, None), value1)
+ self.assertEquals(self.propertyStore4.get(name, None), value1)
self.failUnless(name in self.propertyStore1)
self.failUnless(name in self.propertyStore2)
+ self.failUnless(name in self.propertyStore3)
+ self.failUnless(name in self.propertyStore4)
del self.propertyStore1[name]
yield self._changed(self.propertyStore1)
self.assertEquals(self.propertyStore1.get(name, None), None)
self.assertEquals(self.propertyStore2.get(name, None), None)
+ self.assertEquals(self.propertyStore3.get(name, None), None)
+ self.assertEquals(self.propertyStore4.get(name, None), None)
self.failIf(name in self.propertyStore1)
self.failIf(name in self.propertyStore2)
+ self.failIf(name in self.propertyStore3)
+ self.failIf(name in self.propertyStore4)
@inlineCallbacks
@@ -213,8 +247,10 @@
name = propertyName("shadow")
- self.propertyStore1.setSpecialProperties((name,), ())
- self.propertyStore2.setSpecialProperties((name,), ())
+ self.propertyStore1.setSpecialProperties((name,), (), ())
+ self.propertyStore2.setSpecialProperties((name,), (), ())
+ self.propertyStore3.setSpecialProperties((name,), (), ())
+ self.propertyStore4.setSpecialProperties((name,), (), ())
value1 = propertyValue("Hello, World1!")
@@ -222,22 +258,34 @@
yield self._changed(self.propertyStore1)
self.assertEquals(self.propertyStore1.get(name, None), value1)
self.assertEquals(self.propertyStore2.get(name, None), value1)
+ self.assertEquals(self.propertyStore3.get(name, None), value1)
+ self.assertEquals(self.propertyStore4.get(name, None), value1)
self.failUnless(name in self.propertyStore1)
self.failUnless(name in self.propertyStore2)
+ self.failUnless(name in self.propertyStore3)
+ self.failUnless(name in self.propertyStore4)
del self.propertyStore2[name]
yield self._changed(self.propertyStore2)
self.assertEquals(self.propertyStore1.get(name, None), value1)
self.assertEquals(self.propertyStore2.get(name, None), value1)
+ self.assertEquals(self.propertyStore3.get(name, None), value1)
+ self.assertEquals(self.propertyStore4.get(name, None), value1)
self.failUnless(name in self.propertyStore1)
self.failUnless(name in self.propertyStore2)
+ self.failUnless(name in self.propertyStore3)
+ self.failUnless(name in self.propertyStore4)
del self.propertyStore1[name]
yield self._changed(self.propertyStore1)
self.assertEquals(self.propertyStore1.get(name, None), None)
self.assertEquals(self.propertyStore2.get(name, None), None)
+ self.assertEquals(self.propertyStore3.get(name, None), None)
+ self.assertEquals(self.propertyStore4.get(name, None), None)
self.failIf(name in self.propertyStore1)
self.failIf(name in self.propertyStore2)
+ self.failIf(name in self.propertyStore3)
+ self.failIf(name in self.propertyStore4)
@inlineCallbacks
@@ -245,8 +293,10 @@
name = propertyName("global")
- self.propertyStore1.setSpecialProperties((), (name,))
- self.propertyStore2.setSpecialProperties((), (name,))
+ self.propertyStore1.setSpecialProperties((), (name,), ())
+ self.propertyStore2.setSpecialProperties((), (name,), ())
+ self.propertyStore3.setSpecialProperties((), (name,), ())
+ self.propertyStore4.setSpecialProperties((), (name,), ())
value1 = propertyValue("Hello, World1!")
value2 = propertyValue("Hello, World2!")
@@ -255,24 +305,250 @@
yield self._changed(self.propertyStore1)
self.assertEquals(self.propertyStore1.get(name, None), value1)
self.assertEquals(self.propertyStore2.get(name, None), value1)
+ self.assertEquals(self.propertyStore3.get(name, None), value1)
+ self.assertEquals(self.propertyStore4.get(name, None), value1)
self.failUnless(name in self.propertyStore1)
self.failUnless(name in self.propertyStore2)
+ self.failUnless(name in self.propertyStore3)
+ self.failUnless(name in self.propertyStore4)
self.propertyStore2[name] = value2
yield self._changed(self.propertyStore2)
self.assertEquals(self.propertyStore1.get(name, None), value2)
self.assertEquals(self.propertyStore2.get(name, None), value2)
+ self.assertEquals(self.propertyStore3.get(name, None), value2)
+ self.assertEquals(self.propertyStore4.get(name, None), value2)
self.failUnless(name in self.propertyStore1)
self.failUnless(name in self.propertyStore2)
+ self.failUnless(name in self.propertyStore3)
+ self.failUnless(name in self.propertyStore4)
del self.propertyStore2[name]
yield self._changed(self.propertyStore2)
self.assertEquals(self.propertyStore1.get(name, None), None)
self.assertEquals(self.propertyStore2.get(name, None), None)
+ self.assertEquals(self.propertyStore3.get(name, None), None)
+ self.assertEquals(self.propertyStore4.get(name, None), None)
self.failIf(name in self.propertyStore1)
self.failIf(name in self.propertyStore2)
+ self.failIf(name in self.propertyStore3)
+ self.failIf(name in self.propertyStore4)
+ @inlineCallbacks
+ def test_proxy(self):
+
+ name = propertyName("test")
+ value1 = propertyValue("Hello, World1!")
+ value2 = propertyValue("Hello, World2!")
+
+ self.propertyStore3[name] = value1
+ yield self._changed(self.propertyStore3)
+ self.assertEquals(self.propertyStore1.get(name, None), value1)
+ self.assertEquals(self.propertyStore2.get(name, None), None)
+ self.assertEquals(self.propertyStore3.get(name, None), value1)
+ self.assertEquals(self.propertyStore4.get(name, None), None)
+ self.failUnless(name in self.propertyStore1)
+ self.failIf(name in self.propertyStore2)
+ self.failUnless(name in self.propertyStore3)
+ self.failIf(name in self.propertyStore4)
+
+ self.propertyStore4[name] = value2
+ yield self._changed(self.propertyStore4)
+ self.assertEquals(self.propertyStore1.get(name, None), value1)
+ self.assertEquals(self.propertyStore2.get(name, None), value2)
+ self.assertEquals(self.propertyStore3.get(name, None), value1)
+ self.assertEquals(self.propertyStore4.get(name, None), value2)
+ self.failUnless(name in self.propertyStore1)
+ self.failUnless(name in self.propertyStore2)
+ self.failUnless(name in self.propertyStore3)
+ self.failUnless(name in self.propertyStore4)
+
+ del self.propertyStore4[name]
+ yield self._changed(self.propertyStore4)
+ self.assertEquals(self.propertyStore1.get(name, None), value1)
+ self.assertEquals(self.propertyStore2.get(name, None), None)
+ self.assertEquals(self.propertyStore3.get(name, None), value1)
+ self.assertEquals(self.propertyStore4.get(name, None), None)
+ self.failUnless(name in self.propertyStore1)
+ self.failIf(name in self.propertyStore2)
+ self.failUnless(name in self.propertyStore3)
+ self.failIf(name in self.propertyStore4)
+
+ del self.propertyStore3[name]
+ yield self._changed(self.propertyStore3)
+ self.assertEquals(self.propertyStore1.get(name, None), None)
+ self.assertEquals(self.propertyStore2.get(name, None), None)
+ self.assertEquals(self.propertyStore3.get(name, None), None)
+ self.assertEquals(self.propertyStore4.get(name, None), None)
+ self.failIf(name in self.propertyStore1)
+ self.failIf(name in self.propertyStore2)
+ self.failIf(name in self.propertyStore3)
+ self.failIf(name in self.propertyStore4)
+
+
+ @inlineCallbacks
+ def test_proxyOverride(self):
+
+ name = propertyName("override")
+
+ self.propertyStore1.setSpecialProperties((), (), (name,))
+ self.propertyStore2.setSpecialProperties((), (), (name,))
+ self.propertyStore3.setSpecialProperties((), (), (name,))
+ self.propertyStore4.setSpecialProperties((), (), (name,))
+
+ value1 = propertyValue("Hello, World1!")
+ value2 = propertyValue("Hello, World2!")
+
+ self.propertyStore1[name] = value1
+ yield self._changed(self.propertyStore1)
+ self.assertEquals(self.propertyStore1.get(name, None), value1)
+ self.assertEquals(self.propertyStore2.get(name, None), None)
+ self.assertEquals(self.propertyStore3.get(name, None), value1)
+ self.assertEquals(self.propertyStore4.get(name, None), None)
+ self.failUnless(name in self.propertyStore1)
+ self.failIf(name in self.propertyStore2)
+ self.failUnless(name in self.propertyStore3)
+ self.failIf(name in self.propertyStore4)
+
+ self.propertyStore3[name] = value2
+ yield self._changed(self.propertyStore3)
+ self.assertEquals(self.propertyStore1.get(name, None), value1)
+ self.assertEquals(self.propertyStore2.get(name, None), None)
+ self.assertEquals(self.propertyStore3.get(name, None), value2)
+ self.assertEquals(self.propertyStore4.get(name, None), None)
+ self.failUnless(name in self.propertyStore1)
+ self.failIf(name in self.propertyStore2)
+ self.failUnless(name in self.propertyStore3)
+ self.failIf(name in self.propertyStore4)
+
+ del self.propertyStore3[name]
+ yield self._changed(self.propertyStore3)
+ self.assertEquals(self.propertyStore1.get(name, None), value1)
+ self.assertEquals(self.propertyStore2.get(name, None), None)
+ self.assertEquals(self.propertyStore3.get(name, None), value1)
+ self.assertEquals(self.propertyStore4.get(name, None), None)
+ self.failUnless(name in self.propertyStore1)
+ self.failIf(name in self.propertyStore2)
+ self.failUnless(name in self.propertyStore3)
+ self.failIf(name in self.propertyStore4)
+
+ del self.propertyStore1[name]
+ yield self._changed(self.propertyStore1)
+ self.assertEquals(self.propertyStore1.get(name, None), None)
+ self.assertEquals(self.propertyStore2.get(name, None), None)
+ self.assertEquals(self.propertyStore3.get(name, None), None)
+ self.assertEquals(self.propertyStore4.get(name, None), None)
+ self.failIf(name in self.propertyStore1)
+ self.failIf(name in self.propertyStore2)
+ self.failIf(name in self.propertyStore3)
+ self.failIf(name in self.propertyStore4)
+
+
+ @inlineCallbacks
+ def test_proxyOverrideShadow(self):
+
+ name = propertyName("override")
+
+ self.propertyStore1.setSpecialProperties((name,), (), (name,))
+ self.propertyStore2.setSpecialProperties((name,), (), (name,))
+ self.propertyStore3.setSpecialProperties((name,), (), (name,))
+ self.propertyStore4.setSpecialProperties((name,), (), (name,))
+
+ value1 = propertyValue("Hello, World1!")
+ value2 = propertyValue("Hello, World2!")
+ value3 = propertyValue("Hello, World3!")
+ value4 = propertyValue("Hello, World4!")
+
+ self.propertyStore1[name] = value1
+ yield self._changed(self.propertyStore1)
+ self.assertEquals(self.propertyStore1.get(name, None), value1)
+ self.assertEquals(self.propertyStore2.get(name, None), value1)
+ self.assertEquals(self.propertyStore3.get(name, None), value1)
+ self.assertEquals(self.propertyStore4.get(name, None), value1)
+ self.failUnless(name in self.propertyStore1)
+ self.failUnless(name in self.propertyStore2)
+ self.failUnless(name in self.propertyStore3)
+ self.failUnless(name in self.propertyStore4)
+
+ self.propertyStore3[name] = value3
+ yield self._changed(self.propertyStore3)
+ self.assertEquals(self.propertyStore1.get(name, None), value1)
+ self.assertEquals(self.propertyStore2.get(name, None), value1)
+ self.assertEquals(self.propertyStore3.get(name, None), value3)
+ self.assertEquals(self.propertyStore4.get(name, None), value1)
+ self.failUnless(name in self.propertyStore1)
+ self.failUnless(name in self.propertyStore2)
+ self.failUnless(name in self.propertyStore3)
+ self.failUnless(name in self.propertyStore4)
+
+ self.propertyStore4[name] = value4
+ yield self._changed(self.propertyStore4)
+ self.assertEquals(self.propertyStore1.get(name, None), value1)
+ self.assertEquals(self.propertyStore2.get(name, None), value1)
+ self.assertEquals(self.propertyStore3.get(name, None), value3)
+ self.assertEquals(self.propertyStore4.get(name, None), value4)
+ self.failUnless(name in self.propertyStore1)
+ self.failUnless(name in self.propertyStore2)
+ self.failUnless(name in self.propertyStore3)
+ self.failUnless(name in self.propertyStore4)
+
+ self.propertyStore2[name] = value2
+ yield self._changed(self.propertyStore2)
+ self.assertEquals(self.propertyStore1.get(name, None), value1)
+ self.assertEquals(self.propertyStore2.get(name, None), value2)
+ self.assertEquals(self.propertyStore3.get(name, None), value3)
+ self.assertEquals(self.propertyStore4.get(name, None), value4)
+ self.failUnless(name in self.propertyStore1)
+ self.failUnless(name in self.propertyStore2)
+ self.failUnless(name in self.propertyStore3)
+ self.failUnless(name in self.propertyStore4)
+
+ del self.propertyStore3[name]
+ yield self._changed(self.propertyStore3)
+ self.assertEquals(self.propertyStore1.get(name, None), value1)
+ self.assertEquals(self.propertyStore2.get(name, None), value2)
+ self.assertEquals(self.propertyStore3.get(name, None), value1)
+ self.assertEquals(self.propertyStore4.get(name, None), value4)
+ self.failUnless(name in self.propertyStore1)
+ self.failUnless(name in self.propertyStore2)
+ self.failUnless(name in self.propertyStore3)
+ self.failUnless(name in self.propertyStore4)
+
+ del self.propertyStore4[name]
+ yield self._changed(self.propertyStore4)
+ self.assertEquals(self.propertyStore1.get(name, None), value1)
+ self.assertEquals(self.propertyStore2.get(name, None), value2)
+ self.assertEquals(self.propertyStore3.get(name, None), value1)
+ self.assertEquals(self.propertyStore4.get(name, None), value2)
+ self.failUnless(name in self.propertyStore1)
+ self.failUnless(name in self.propertyStore2)
+ self.failUnless(name in self.propertyStore3)
+ self.failUnless(name in self.propertyStore4)
+
+ del self.propertyStore2[name]
+ yield self._changed(self.propertyStore2)
+ self.assertEquals(self.propertyStore1.get(name, None), value1)
+ self.assertEquals(self.propertyStore2.get(name, None), value1)
+ self.assertEquals(self.propertyStore3.get(name, None), value1)
+ self.assertEquals(self.propertyStore4.get(name, None), value1)
+ self.failUnless(name in self.propertyStore1)
+ self.failUnless(name in self.propertyStore2)
+ self.failUnless(name in self.propertyStore3)
+ self.failUnless(name in self.propertyStore4)
+
+ del self.propertyStore1[name]
+ yield self._changed(self.propertyStore1)
+ self.assertEquals(self.propertyStore1.get(name, None), None)
+ self.assertEquals(self.propertyStore2.get(name, None), None)
+ self.assertEquals(self.propertyStore3.get(name, None), None)
+ self.assertEquals(self.propertyStore4.get(name, None), None)
+ self.failIf(name in self.propertyStore1)
+ self.failIf(name in self.propertyStore2)
+ self.failIf(name in self.propertyStore3)
+ self.failIf(name in self.propertyStore4)
+
+
def test_iteration(self):
value = propertyValue("Hello, World!")
@@ -333,8 +609,8 @@
name = propertyName("shadow")
- self.propertyStore1.setSpecialProperties((name,), ())
- self.propertyStore2.setSpecialProperties((name,), ())
+ self.propertyStore1.setSpecialProperties((name,), (), ())
+ self.propertyStore2.setSpecialProperties((name,), (), ())
value1 = propertyValue("Hello, World1!")
Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/base/propertystore/test/test_sql.py
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/txdav/base/propertystore/test/test_sql.py 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/txdav/base/propertystore/test/test_sql.py 2014-06-11 03:50:42 UTC (rev 13630)
@@ -49,10 +49,11 @@
self.store = yield buildStore(self, self.notifierFactory)
self.addCleanup(self.maybeCommitLast)
self._txn = self.store.newTransaction()
- self.propertyStore = self.propertyStore1 = yield PropertyStore.load(
- "user01", None, self._txn, 1
- )
- self.propertyStore2 = yield PropertyStore.load("user01", "user02", self._txn, 1)
+ self.propertyStore = \
+ self.propertyStore1 = yield PropertyStore.load("user01", None, None, self._txn, 1)
+ self.propertyStore2 = yield PropertyStore.load("user01", "user02", None, self._txn, 1)
+ self.propertyStore3 = yield PropertyStore.load("user01", None, "user03", self._txn, 1)
+ self.propertyStore4 = yield PropertyStore.load("user01", "user02", "user04", self._txn, 1)
@inlineCallbacks
@@ -62,7 +63,11 @@
delattr(self, "_txn")
else:
result = None
- self.propertyStore = self.propertyStore1 = self.propertyStore2 = None
+ self.propertyStore = \
+ self.propertyStore1 = \
+ self.propertyStore2 = \
+ self.propertyStore3 = \
+ self.propertyStore4 = None
returnValue(result)
@@ -74,18 +79,31 @@
self._txn = self.store.newTransaction()
store = self.propertyStore1
- self.propertyStore = self.propertyStore1 = yield PropertyStore.load(
- "user01", None, self._txn, 1
- )
+ self.propertyStore = \
+ self.propertyStore1 = yield PropertyStore.load("user01", None, None, self._txn, 1)
self.propertyStore1._shadowableKeys = store._shadowableKeys
+ self.propertyStore1._proxyOverrideKeys = store._proxyOverrideKeys
self.propertyStore1._globalKeys = store._globalKeys
store = self.propertyStore2
- self.propertyStore2 = yield PropertyStore.load("user01", "user02", self._txn, 1)
+ self.propertyStore2 = yield PropertyStore.load("user01", "user02", None, self._txn, 1)
self.propertyStore2._shadowableKeys = store._shadowableKeys
+ self.propertyStore2._proxyOverrideKeys = store._proxyOverrideKeys
self.propertyStore2._globalKeys = store._globalKeys
+ store = self.propertyStore3
+ self.propertyStore3 = yield PropertyStore.load("user01", None, "user03", self._txn, 1)
+ self.propertyStore3._shadowableKeys = store._shadowableKeys
+ self.propertyStore3._proxyOverrideKeys = store._proxyOverrideKeys
+ self.propertyStore3._globalKeys = store._globalKeys
+ store = self.propertyStore4
+ self.propertyStore4 = yield PropertyStore.load("user01", "user02", "user04", self._txn, 1)
+ self.propertyStore4._shadowableKeys = store._shadowableKeys
+ self.propertyStore4._proxyOverrideKeys = store._proxyOverrideKeys
+ self.propertyStore4._globalKeys = store._globalKeys
+
+
@inlineCallbacks
def _abort(self, store):
if hasattr(self, "_txn"):
@@ -95,18 +113,31 @@
self._txn = self.store.newTransaction()
store = self.propertyStore1
- self.propertyStore = self.propertyStore1 = yield PropertyStore.load(
- "user01", None, self._txn, 1
- )
+ self.propertyStore = \
+ self.propertyStore1 = yield PropertyStore.load("user01", None, None, self._txn, 1)
self.propertyStore1._shadowableKeys = store._shadowableKeys
+ self.propertyStore1._proxyOverrideKeys = store._proxyOverrideKeys
self.propertyStore1._globalKeys = store._globalKeys
store = self.propertyStore2
- self.propertyStore2 = yield PropertyStore.load("user01", "user02", self._txn, 1)
+ self.propertyStore2 = yield PropertyStore.load("user01", "user02", None, self._txn, 1)
self.propertyStore2._shadowableKeys = store._shadowableKeys
+ self.propertyStore2._proxyOverrideKeys = store._proxyOverrideKeys
self.propertyStore2._globalKeys = store._globalKeys
+ store = self.propertyStore3
+ self.propertyStore3 = yield PropertyStore.load("user01", None, "user03", self._txn, 1)
+ self.propertyStore3._shadowableKeys = store._shadowableKeys
+ self.propertyStore3._proxyOverrideKeys = store._proxyOverrideKeys
+ self.propertyStore3._globalKeys = store._globalKeys
+ store = self.propertyStore4
+ self.propertyStore4 = yield PropertyStore.load("user01", "user02", "user04", self._txn, 1)
+ self.propertyStore4._shadowableKeys = store._shadowableKeys
+ self.propertyStore4._proxyOverrideKeys = store._proxyOverrideKeys
+ self.propertyStore4._globalKeys = store._globalKeys
+
+
@inlineCallbacks
def test_concurrentInsertion(self):
"""
@@ -126,7 +157,7 @@
pass
self.addCleanup(maybeAbortIt)
concurrentPropertyStore = yield PropertyStore.load(
- "user01", None, concurrentTxn, 1
+ "user01", None, None, concurrentTxn, 1
)
concurrentPropertyStore[pname] = pval1
race = []
@@ -155,8 +186,8 @@
def test_copy(self):
# Existing store
- store1_user1 = yield PropertyStore.load("user01", None, self._txn, 2)
- store1_user2 = yield PropertyStore.load("user01", "user02", self._txn, 2)
+ store1_user1 = yield PropertyStore.load("user01", None, None, self._txn, 2)
+ store1_user2 = yield PropertyStore.load("user01", "user02", None, self._txn, 2)
# Populate current store with data
props_user1 = (
@@ -178,18 +209,18 @@
self._txn = self.store.newTransaction()
# Existing store
- store1_user1 = yield PropertyStore.load("user01", None, self._txn, 2)
+ store1_user1 = yield PropertyStore.load("user01", None, None, self._txn, 2)
# New store
- store2_user1 = yield PropertyStore.load("user01", None, self._txn, 3)
+ store2_user1 = yield PropertyStore.load("user01", None, None, self._txn, 3)
# Do copy and check results
yield store2_user1.copyAllProperties(store1_user1)
self.assertEqual(store1_user1.keys(), store2_user1.keys())
- store1_user2 = yield PropertyStore.load("user01", "user02", self._txn, 2)
- store2_user2 = yield PropertyStore.load("user01", "user02", self._txn, 3)
+ store1_user2 = yield PropertyStore.load("user01", "user02", None, self._txn, 2)
+ store2_user2 = yield PropertyStore.load("user01", "user02", None, self._txn, 3)
self.assertEqual(store1_user2.keys(), store2_user2.keys())
@@ -197,7 +228,7 @@
def test_insert_delete(self):
# Existing store
- store1_user1 = yield PropertyStore.load("user01", None, self._txn, 2)
+ store1_user1 = yield PropertyStore.load("user01", None, None, self._txn, 2)
pname = propertyName("dummy1")
pvalue = propertyValue("value1-user1")
@@ -221,7 +252,7 @@
# Existing store - add a normal property
self.assertFalse("SQL.props:10/user01" in PropertyStore._cacher._memcacheProtocol._cache)
- store1_user1 = yield PropertyStore.load("user01", None, self._txn, 10)
+ store1_user1 = yield PropertyStore.load("user01", None, None, self._txn, 10)
self.assertTrue("SQL.props:10/user01" in PropertyStore._cacher._memcacheProtocol._cache)
pname1 = propertyName("dummy1")
@@ -237,7 +268,7 @@
# Existing store - add a large property
self._txn = self.store.newTransaction()
self.assertFalse("SQL.props:10/user01" in PropertyStore._cacher._memcacheProtocol._cache)
- store1_user1 = yield PropertyStore.load("user01", None, self._txn, 10)
+ store1_user1 = yield PropertyStore.load("user01", None, None, self._txn, 10)
self.assertTrue("SQL.props:10/user01" in PropertyStore._cacher._memcacheProtocol._cache)
pname2 = propertyName("dummy2")
@@ -253,7 +284,7 @@
# Try again - the cacher will fail large values
self._txn = self.store.newTransaction()
self.assertFalse("SQL.props:10/user01" in PropertyStore._cacher._memcacheProtocol._cache)
- store1_user1 = yield PropertyStore.load("user01", None, self._txn, 10)
+ store1_user1 = yield PropertyStore.load("user01", None, None, self._txn, 10)
self.assertFalse("SQL.props:10/user01" in store1_user1._cacher._memcacheProtocol._cache)
self.assertEqual(store1_user1[pname1], pvalue1)
@@ -280,7 +311,7 @@
# Existing store - add a normal property
self.assertFalse("SQL.props:10/user01" in PropertyStore._cacher._memcacheProtocol._cache)
- store1_user1 = yield PropertyStore.load("user01", None, self._txn, 10)
+ store1_user1 = yield PropertyStore.load("user01", None, None, self._txn, 10)
self.assertFalse("SQL.props:10/user01" in PropertyStore._cacher._memcacheProtocol._cache)
pname1 = propertyName("dummy1")
@@ -297,7 +328,7 @@
# Existing store - check a normal property
self.assertFalse("SQL.props:10/user01" in PropertyStore._cacher._memcacheProtocol._cache)
- store1_user1 = yield PropertyStore.load("user01", None, self._txn, 10)
+ store1_user1 = yield PropertyStore.load("user01", None, None, self._txn, 10)
self.assertFalse("SQL.props:10/user01" in PropertyStore._cacher._memcacheProtocol._cache)
self.assertEqual(store1_user1[pname1], pvalue1)
Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/base/propertystore/test/test_xattr.py
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/txdav/base/propertystore/test/test_xattr.py 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/txdav/base/propertystore/test/test_xattr.py 2014-06-11 03:50:42 UTC (rev 13630)
@@ -43,6 +43,12 @@
self.propertyStore1 = self.propertyStore
self.propertyStore2 = PropertyStore("user01", lambda : tempFile)
self.propertyStore2._setPerUserUID("user02")
+ self.propertyStore2._setProxyUID("user02")
+ self.propertyStore3 = PropertyStore("user01", lambda : tempFile)
+ self.propertyStore3._setProxyUID("user03")
+ self.propertyStore4 = PropertyStore("user01", lambda : tempFile)
+ self.propertyStore4._setPerUserUID("user02")
+ self.propertyStore4._setProxyUID("user04")
def test_init(self):
Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/file.py
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/file.py 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/file.py 2014-06-11 03:50:42 UTC (rev 13630)
@@ -319,6 +319,7 @@
PropertyName.fromElement(customxml.GETCTag),
PropertyName.fromElement(caldavxml.SupportedCalendarComponentSet),
),
+ (),
)
@@ -748,6 +749,7 @@
PropertyName.fromElement(customxml.TwistedCalendarHasPrivateCommentsProperty),
PropertyName.fromElement(customxml.ScheduleChanges),
),
+ (),
)
Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/scheduling/icaldiff.py
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/scheduling/icaldiff.py 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/scheduling/icaldiff.py 2014-06-11 03:50:42 UTC (rev 13630)
@@ -693,7 +693,7 @@
newexdates = set()
exdates = component.properties("EXDATE")
for exdate in exdates:
- newexdates.update([value.getValue().duplicate().adjustToUTC() for value in exdate.value()])
+ newexdates.update([exvalue.getValue().duplicate().adjustToUTC() for exvalue in exdate.value()])
return timeRange.getStart(), timeRange.getEnd(), newdue, newrrules, newrdates, newexdates
Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/scheduling/work.py
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/scheduling/work.py 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/scheduling/work.py 2014-06-11 03:50:42 UTC (rev 13630)
@@ -174,7 +174,6 @@
smartMerge=smart_merge
))
cls._enqueued()
- yield proposal.whenProposed()
log.debug("ScheduleOrganizerWork - enqueued for ID: {id}, UID: {uid}, organizer: {org}", id=proposal.workItem.workID, uid=uid, org=organizer)
@@ -296,7 +295,6 @@
changedRids=",".join(map(lambda x: "" if x is None else str(x), changedRids)) if changedRids else None,
))
cls._enqueued()
- yield proposal.whenProposed()
log.debug("ScheduleReplyWork - enqueued for ID: {id}, UID: {uid}, attendee: {att}", id=proposal.workItem.workID, uid=resource.uid(), att=attendee)
@@ -379,7 +377,6 @@
icalendarText=calendar.getTextWithTimezones(includeTimezones=not config.EnableTimezonesByReference),
))
cls._enqueued()
- yield proposal.whenProposed()
log.debug("ScheduleReplyCancelWork - enqueued for ID: {id}, UID: {uid}, attendee: {att}", id=proposal.workItem.workID, uid=calendar.resourceUID(), att=attendee)
@@ -486,7 +483,6 @@
notBefore=notBefore,
))
cls._enqueued()
- yield proposal.whenProposed()
log.debug("ScheduleRefreshWork - enqueued for ID: {id}, UID: {uid}, attendees: {att}", id=proposal.workItem.workID, uid=organizer_resource.uid(), att=",".join(attendeesToRefresh))
@@ -626,7 +622,6 @@
notBefore=notBefore,
))
cls._enqueued()
- yield proposal.whenProposed()
log.debug("ScheduleAutoReplyWork - enqueued for ID: {id}, UID: {uid}", id=proposal.workItem.workID, uid=resource.uid())
Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/sql.py
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/sql.py 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/sql.py 2014-06-11 03:50:42 UTC (rev 13630)
@@ -48,7 +48,7 @@
from twisted.python import hashlib
from twisted.python.failure import Failure
-from twistedcaldav import caldavxml, customxml, ical
+from twistedcaldav import customxml, ical
from twistedcaldav.config import config
from twistedcaldav.datafilters.peruserdata import PerUserDataFilter
from twistedcaldav.dateops import normalizeForIndex, datetimeMktime, \
@@ -56,6 +56,7 @@
from twistedcaldav.ical import Component, InvalidICalendarDataError, Property
from twistedcaldav.instance import InvalidOverriddenInstanceError
from twistedcaldav.memcacher import Memcacher
+from twistedcaldav.timezones import TimezoneException
from txdav.base.propertystore.base import PropertyName
from txdav.caldav.datastore.query.builder import buildExpression
@@ -80,7 +81,7 @@
InvalidDefaultCalendar, \
InvalidAttachmentOperation, DuplicatePrivateCommentsError, \
TimeRangeUpperLimit, TimeRangeLowerLimit, InvalidSplit, \
- AttachmentSizeTooLarge
+ AttachmentSizeTooLarge, UnknownTimezone
from txdav.caldav.icalendarstore import QuotaExceeded
from txdav.common.datastore.sql import CommonHome, CommonHomeChild, \
CommonObjectResource, ECALENDARTYPE
@@ -94,8 +95,9 @@
ObjectResourceNameNotAllowedError, TooManyObjectResourcesError, \
InvalidUIDError, UIDExistsError, UIDExistsElsewhereError, \
InvalidResourceMove, InvalidComponentForStoreError, \
- NoSuchObjectResourceError
+ NoSuchObjectResourceError, ConcurrentModification
from txdav.xml import element
+from txdav.xml.parser import WebDAVDocument
from txdav.idav import ChangeCategory
@@ -966,6 +968,10 @@
_supportedComponents = None
+ _shadowProperties = tuple([PropertyName.fromString(prop) for prop in config.Sharing.Calendars.CollectionProperties.Shadowable])
+ _proxyProperties = tuple([PropertyName.fromString(prop) for prop in config.Sharing.Calendars.CollectionProperties.ProxyOverride])
+ _globalProperties = tuple([PropertyName.fromString(prop) for prop in config.Sharing.Calendars.CollectionProperties.Global])
+
def __init__(self, *args, **kw):
"""
Initialize a calendar pointing at a record in a database.
@@ -1294,17 +1300,9 @@
def initPropertyStore(self, props):
# Setup peruser special properties
props.setSpecialProperties(
- # Shadowable
- (
- PropertyName.fromElement(caldavxml.CalendarDescription),
- PropertyName.fromElement(caldavxml.CalendarTimeZone),
- ),
-
- # Global
- (
- PropertyName.fromElement(customxml.GETCTag),
- PropertyName.fromElement(caldavxml.SupportedCalendarComponentSet),
- ),
+ self._shadowProperties,
+ self._globalProperties,
+ self._proxyProperties,
)
@@ -1353,9 +1351,9 @@
Sub-classes should override to expose the properties they care about.
"""
props = {}
- for elem in (element.DisplayName, caldavxml.CalendarDescription, caldavxml.CalendarTimeZone, customxml.CalendarColor,):
- if PropertyName.fromElement(elem) in self.properties():
- props[elem.sname()] = str(self.properties()[PropertyName.fromElement(elem)])
+ for ename in (PropertyName.fromElement(element.DisplayName),) + self._shadowProperties:
+ if ename in self.properties():
+ props[ename.toString()] = self.properties()[ename].toxml()
return props
@@ -1366,15 +1364,15 @@
care about.
"""
# Initialize these for all shares
- for elem in (caldavxml.CalendarDescription, caldavxml.CalendarTimeZone,):
- if PropertyName.fromElement(elem) not in self.properties() and elem.sname() in props:
- self.properties()[PropertyName.fromElement(elem)] = elem.fromString(props[elem.sname()])
+ for ename in self._shadowProperties:
+ if ename not in self.properties() and ename.toString() in props:
+ self.properties()[ename] = WebDAVDocument.fromString(props[ename]).root_element
# Only initialize these for direct shares
if self.direct():
- for elem in (element.DisplayName, customxml.CalendarColor,):
- if PropertyName.fromElement(elem) not in self.properties() and elem.sname() in props:
- self.properties()[PropertyName.fromElement(elem)] = elem.fromString(props[elem.sname()])
+ for ename in (PropertyName.fromElement(element.DisplayName),):
+ if ename not in self.properties() and ename.toString() in props:
+ self.properties()[ename] = WebDAVDocument.fromString(props[ename]).root_element
# FIXME: this is DAV-ish. Data store calendar objects don't have
@@ -1894,6 +1892,10 @@
# Basic validation
+ # Possible timezone stripping
+ if config.EnableTimezonesByReference:
+ component.stripKnownTimezones()
+
# Do validation on external requests
if internal_state == ComponentUpdateState.NORMAL:
@@ -1920,10 +1922,6 @@
# Valid attendee list size check
yield self.validAttendeeListSizeCheck(component, inserting)
- # Possible timezone stripping
- if config.EnableTimezonesByReference:
- component.stripKnownTimezones()
-
# Check location/resource organizer requirement
self.validLocationResourceOrganizer(component, inserting, internal_state)
@@ -2098,12 +2096,16 @@
try:
component.validCalendarData(validateRecurrences=self._txn._migrating)
- except InvalidICalendarDataError, e:
+ except InvalidICalendarDataError as e:
raise InvalidObjectResourceError(str(e))
try:
component.validCalendarForCalDAV(methodAllowed=self.calendar().isInbox())
- except InvalidICalendarDataError, e:
+ except InvalidICalendarDataError as e:
raise InvalidComponentForStoreError(str(e))
+ except TimezoneException as e:
+ # tzid not available
+ raise UnknownTimezone(str(e))
+
try:
if self._txn._migrating:
component.validOrganizerForScheduling(doFix=True)
@@ -2169,17 +2171,14 @@
cutype == "RESOURCE" and config.Scheduling.Options.TrackUnscheduledResourceData):
# Find current principal and update modified by details
- if self._txn._authz_uid is not None:
- authz = yield self.directoryService().recordWithUID(self._txn._authz_uid.decode("utf-8"))
- prop = Property("X-CALENDARSERVER-MODIFIED-BY", authz.canonicalCalendarUserAddress())
- prop.setParameter("CN", authz.displayName)
- for candidate in authz.calendarUserAddresses:
- if candidate.startswith("mailto:"):
- prop.setParameter("EMAIL", candidate[7:])
- break
- component.replacePropertyInAllComponents(prop)
- else:
- component.removeAllPropertiesWithName("X-CALENDARSERVER-MODIFIED-BY")
+ authz = yield self.directoryService().recordWithUID(self.calendar().viewerHome().authzuid().decode("utf-8"))
+ prop = Property("X-CALENDARSERVER-MODIFIED-BY", authz.canonicalCalendarUserAddress())
+ prop.setParameter("CN", authz.displayName)
+ for candidate in authz.calendarUserAddresses:
+ if candidate.startswith("mailto:"):
+ prop.setParameter("EMAIL", candidate[7:])
+ break
+ component.replacePropertyInAllComponents(prop)
self._componentChanged = True
@@ -2197,7 +2196,7 @@
# Only DAV:owner is able to set the property to other than PUBLIC
if internal_state == ComponentUpdateState.NORMAL:
- if (self._txn._authz_uid is None or self.calendar().viewerHome().uid() != self._txn._authz_uid) and access != Component.ACCESS_PUBLIC:
+ if (self.calendar().viewerHome().uid() != self.calendar().viewerHome().authzuid()) and access != Component.ACCESS_PUBLIC:
raise InvalidCalendarAccessError("Private event access level change not allowed")
self.accessMode = access
@@ -3916,13 +3915,16 @@
def initPropertyStore(self, props):
- # Setup peruser special properties
+ # Setup peruser special properties - these are hard-coded for now as clients are not expected
+ # to be using properties on resources - but we do use one special "live" property which we
+ # keep in the propstore.
props.setSpecialProperties(
(
),
(
PropertyName.fromElement(customxml.ScheduleChanges),
),
+ (),
)
@@ -4046,7 +4048,7 @@
in L{CalendarObject.splitAt}).
@type rid: L{DateTime}
@param olderUID: sets the iCalendar UID to be used in the new resource created during the split.
- If L{None} a UUID is generated and used.
+ If set to L{None}, a UUID is generated and used.
@type olderUID: L{str}
"""
@@ -4068,7 +4070,7 @@
newerUID = calendar.resourceUID()
if olderUID is None:
olderUID = str(uuid.uuid4())
- olderResourceName = olderUID
+ olderResourceName = "{0}.ics".format(olderUID)
else:
olderResourceName = "{0}.ics".format(olderUID.encode("base64")[:-1].rstrip("="))
@@ -4105,10 +4107,19 @@
@inlineCallbacks
def splitForAttendee(self, rid=None, olderUID=None):
"""
- Split this attendee resource as per L{split}.
+ Split this attendee resource as per L{split}. Note this is also used on any Organizer inbox items.
+ Also, for inbox items, we are not protected by the ImplicitUID lock - it is possible that the inbox
+ resource gets deleted whilst we are iterating the entire set of UIDs, so we need to handle a
+ L{ConcurrentModification} error here by ignoring it.
"""
splitter = iCalSplitter(config.Scheduling.Options.Splitting.Size, config.Scheduling.Options.Splitting.PastDays)
- ical = (yield self.component())
+ try:
+ ical = (yield self.component())
+ except ConcurrentModification:
+ # Resource was deleted between the time we looked it up and now - this is OK,
+ # We can simply ignore it as there is nothing left to split
+ returnValue(None)
+
ical_old, ical_new = splitter.split(ical, rid=rid, olderUID=olderUID)
ical_new.bumpiTIPInfo(oldcalendar=ical, doSequence=True)
ical_old.bumpiTIPInfo(oldcalendar=None, doSequence=True)
Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/test/test_implicit.py
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/test/test_implicit.py 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/test/test_implicit.py 2014-06-11 03:50:42 UTC (rev 13630)
@@ -306,18 +306,18 @@
"""
self.patch(config, "EnablePrivateEvents", True)
+ txn = self.transactionUnderTest()
+ txn._authz_uid = "user02"
calendar_collection = (yield self.calendarUnderTest(home="user01"))
calendar = Component.fromString(data1)
- txn = self.transactionUnderTest()
- txn._authz_uid = "user02"
yield self.failUnlessFailure(calendar_collection.createCalendarObjectWithName("test.ics", calendar), InvalidCalendarAccessError)
yield self.commit()
# This one should be OK
+ txn = self.transactionUnderTest()
+ txn._authz_uid = "user01"
calendar_collection = (yield self.calendarUnderTest(home="user01"))
calendar = Component.fromString(data1)
- txn = self.transactionUnderTest()
- txn._authz_uid = "user01"
yield calendar_collection.createCalendarObjectWithName("test.ics", calendar)
yield self.commit()
@@ -335,10 +335,10 @@
END:VCALENDAR
"""
+ txn = self.transactionUnderTest()
+ txn._authz_uid = "user01"
calendar_resource = (yield self.calendarObjectUnderTest(name="test.ics", home="user01",))
calendar = Component.fromString(data2)
- txn = self.transactionUnderTest()
- txn._authz_uid = "user01"
yield calendar_resource.setComponent(calendar)
yield self.commit()
@@ -516,10 +516,10 @@
END:VCALENDAR
"""
+ txn = self.transactionUnderTest()
+ txn._authz_uid = "user01"
calendar_resource = (yield self.calendarObjectUnderTest(name="test.ics", home="user01",))
calendar = Component.fromString(data2)
- txn = self.transactionUnderTest()
- txn._authz_uid = "user01"
yield calendar_resource.setComponent(calendar)
yield self.commit()
@@ -569,10 +569,10 @@
END:VCALENDAR
"""
+ txn = self.transactionUnderTest()
+ txn._authz_uid = "user01"
calendar_resource = (yield self.calendarObjectUnderTest(name="test.ics", home="user01",))
calendar = Component.fromString(data2)
- txn = self.transactionUnderTest()
- txn._authz_uid = "user01"
yield calendar_resource.setComponent(calendar)
yield self.commit()
@@ -623,10 +623,10 @@
END:VCALENDAR
"""
+ txn = self.transactionUnderTest()
+ txn._authz_uid = "user01"
calendar_resource = (yield self.calendarObjectUnderTest(name="test.ics", home="user01",))
calendar = Component.fromString(data2)
- txn = self.transactionUnderTest()
- txn._authz_uid = "user01"
yield calendar_resource.setComponent(calendar)
yield self.commit()
@@ -682,10 +682,10 @@
END:VCALENDAR
"""
+ txn = self.transactionUnderTest()
+ txn._authz_uid = "user01"
calendar_resource = (yield self.calendarObjectUnderTest(name="test.ics", home="user01",))
calendar = Component.fromString(data2)
- txn = self.transactionUnderTest()
- txn._authz_uid = "user01"
yield calendar_resource.setComponent(calendar)
yield self.commit()
@@ -789,10 +789,10 @@
END:VCALENDAR
"""
+ txn = self.transactionUnderTest()
+ txn._authz_uid = "user01"
calendar_resource = (yield self.calendarObjectUnderTest(name="test.ics", home="user01",))
calendar = Component.fromString(data2)
- txn = self.transactionUnderTest()
- txn._authz_uid = "user01"
result = (yield calendar_resource.setComponent(calendar))
yield self.commit()
self.assertTrue(result)
Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/test/test_sql.py
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/test/test_sql.py 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/test/test_sql.py 2014-06-11 03:50:42 UTC (rev 13630)
@@ -35,7 +35,7 @@
from twistedcaldav import caldavxml, ical
from twistedcaldav.caldavxml import CalendarDescription
-from twistedcaldav.config import config
+from twistedcaldav.stdconfig import config
from twistedcaldav.dateops import datetimeMktime
from twistedcaldav.ical import Component, normalize_iCalStr, diff_iCalStrs
from twistedcaldav.instance import InvalidOverriddenInstanceError
@@ -49,19 +49,21 @@
from txdav.caldav.datastore.scheduling.itip import iTIPRequestStatus
from txdav.caldav.datastore.scheduling.processing import ImplicitProcessor
from txdav.caldav.datastore.scheduling.scheduler import ScheduleResponseQueue
-from txdav.caldav.datastore.test.common import CommonTests as CalendarCommonTests, \
- test_event_text
-from txdav.caldav.datastore.test.test_file import setUpCalendarStore
-from txdav.caldav.datastore.util import _migrateCalendar, migrateHome
-from txdav.caldav.icalendarstore import ComponentUpdateState, InvalidDefaultCalendar, \
- InvalidSplit
+from txdav.caldav.datastore.sql import CalendarStoreFeatures
from txdav.common.datastore.sql import ECALENDARTYPE, CommonObjectResource, \
CommonStoreTransactionMonitor
from txdav.common.datastore.sql_tables import schema, _BIND_MODE_DIRECT, \
_BIND_STATUS_ACCEPTED, _TRANSP_OPAQUE
+from txdav.caldav.datastore.test.common import CommonTests as CalendarCommonTests, \
+ test_event_text
+from txdav.caldav.datastore.test.test_file import setUpCalendarStore
from txdav.common.datastore.test.util import populateCalendarsFrom, \
CommonCommonTests
-from txdav.common.icommondatastore import NoSuchObjectResourceError
+from txdav.caldav.datastore.util import _migrateCalendar, migrateHome
+from txdav.caldav.icalendarstore import ComponentUpdateState, InvalidDefaultCalendar, \
+ InvalidSplit, UnknownTimezone
+from txdav.common.icommondatastore import NoSuchObjectResourceError, \
+ InvalidComponentForStoreError
from txdav.idav import ChangeCategory
from txdav.xml.rfc2518 import GETContentLanguage, ResourceType
@@ -1976,7 +1978,46 @@
self.assertFalse(inbox.isUsedForFreeBusy())
+ @inlineCallbacks
+ def test_missingTimezone(self):
+ """
+ Make sure missing timezone causes an exception, whether or timezones by reference is on.
+ """
+ data = """BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+BEGIN:VEVENT
+UID:12345-67890
+DTSTART;TZID=BOGUS:20130806T000000
+DURATION:PT1H
+DTSTAMP:20051222T210507Z
+SUMMARY:1
+END:VEVENT
+END:VCALENDAR
+"""
+ self.patch(config, "EnableTimezonesByReference", False)
+
+ yield self.homeUnderTest(name="user01", create=True)
+ calendar = yield self.calendarUnderTest(name="calendar", home="user01")
+ yield self.failUnlessFailure(
+ calendar.createCalendarObjectWithName("data1.ics", Component.fromString(data)),
+ InvalidComponentForStoreError,
+ )
+ yield self.abort()
+
+ self.patch(config, "EnableTimezonesByReference", True)
+
+ yield self.homeUnderTest(name="user01", create=True)
+ calendar = yield self.calendarUnderTest(name="calendar", home="user01")
+ yield self.failUnlessFailure(
+ calendar.createCalendarObjectWithName("data1.ics", Component.fromString(data)),
+ UnknownTimezone,
+ )
+ yield self.abort()
+
+
+
class SchedulingTests(CommonCommonTests, unittest.TestCase):
"""
CalendarObject splitting tests
@@ -2166,8 +2207,8 @@
PRODID:-//Apple Inc.//Mac OS X 10.9.1//EN
BEGIN:VEVENT
UID:561F5DBB-3F38-4B3A-986F-DD05CBAF554F
-DTSTART;TZID=America/Los_Angeles:20131211T164500
-DTEND;TZID=America/Los_Angeles:20131211T174500
+DTSTART:20131211T164500Z
+DURATION:PT1H
ATTENDEE;CN=Conference Room One;CUTYPE=ROOM;PARTSTAT=ACCEPTED;ROLE=REQ-PARTICIPAN
T;SCHEDULE-STATUS=2.0:urn:x-uid:room-addr-1
ATTENDEE;CN=User 01;CUTYPE=INDIVIDUAL;EMAIL=user01 at example.com;PARTSTAT=AC
@@ -2182,9 +2223,9 @@
END:VEVENT
BEGIN:VEVENT
UID:561F5DBB-3F38-4B3A-986F-DD05CBAF554F
-RECURRENCE-ID;TZID=America/Los_Angeles:20131214T164500
-DTSTART;TZID=America/Los_Angeles:20131214T160000
-DTEND;TZID=America/Los_Angeles:20131214T170000
+RECURRENCE-ID:20131214T164500Z
+DTSTART:20131214T160000Z
+DURATION:PT1H
ATTENDEE;CN=Conference Room Two;CUTYPE=ROOM;PARTSTAT=ACCEPTED;ROLE=REQ-PARTICIPAN
T;SCHEDULE-STATUS=2.0:urn:x-uid:room-addr-2
ATTENDEE;CN=User 01;CUTYPE=INDIVIDUAL;EMAIL=user01 at example.com;PARTSTAT=AC
@@ -2239,8 +2280,8 @@
PRODID:-//Apple Inc.//Mac OS X 10.9.1//EN
BEGIN:VEVENT
UID:561F5DBB-3F38-4B3A-986F-DD05CBAF554F
-DTSTART;TZID=America/Los_Angeles:20131211T164500
-DTEND;TZID=America/Los_Angeles:20131211T174500
+DTSTART:20131211T164500Z
+DURATION:PT1H
ATTENDEE;X-APPLE-HOSTED-STATUS=EXTERNAL:urn:x-uid:user01
ATTENDEE:mailto:someone_external at example.com
CREATED:20131211T221854Z
@@ -2292,14 +2333,14 @@
PRODID:-//Apple Inc.//Mac OS X 10.9.1//EN
BEGIN:VEVENT
UID:561F5DBB-3F38-4B3A-986F-DD05CBAF554F
-DTSTART;TZID=America/Los_Angeles:20131211T164500
+DTSTART:20131211T164500Z
DURATION:PT1H
ATTENDEE:urn:x-uid:user01
CREATED:20131211T221854Z
DTSTAMP:20131211T230632Z
ORGANIZER:urn:x-uid:user01
RRULE:FREQ=DAILY;COUNT=1
-EXDATE;TZID=America/Los_Angeles:20131211T164500
+EXDATE:20131211T164500Z
SUMMARY:external
END:VEVENT
END:VCALENDAR
@@ -5334,7 +5375,7 @@
BEGIN:VEVENT
UID:12345-67890
DTSTART:%(now_back30)s
-DURATION:PT1H
+DURATION:PT2H
ATTENDEE;PARTSTAT=ACCEPTED:mailto:user01 at example.com
ATTENDEE:mailto:user02 at example.com
DTSTAMP:20051222T210507Z
@@ -5699,6 +5740,309 @@
@inlineCallbacks
+ def test_calendarObjectSplit_inbox_delete(self):
+ """
+ Test that splitting of calendar objects works when an inbox item is deleted
+ whilst split processing is happening.
+ """
+ data = """BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+BEGIN:VEVENT
+UID:12345-67890
+DTSTART:%(now_back30)s
+DURATION:PT2H
+ATTENDEE;PARTSTAT=ACCEPTED:mailto:user01 at example.com
+ATTENDEE:mailto:user02 at example.com
+DTSTAMP:20051222T210507Z
+ORGANIZER:mailto:user01 at example.com
+RRULE:FREQ=DAILY
+SUMMARY:1234567890123456789012345678901234567890
+ 1234567890123456789012345678901234567890
+ 1234567890123456789012345678901234567890
+ 1234567890123456789012345678901234567890
+END:VEVENT
+BEGIN:VEVENT
+UID:12345-67890
+RECURRENCE-ID:%(now_back25)s
+DTSTART:%(now_back25)s
+DURATION:PT1H
+ATTENDEE;PARTSTAT=ACCEPTED:mailto:user01 at example.com
+ATTENDEE:mailto:user02 at example.com
+DTSTAMP:20051222T210507Z
+ORGANIZER:mailto:user01 at example.com
+END:VEVENT
+BEGIN:VEVENT
+UID:12345-67890
+RECURRENCE-ID:%(now_back24)s
+DTSTART:%(now_back24)s
+DURATION:PT1H
+ATTENDEE;PARTSTAT=ACCEPTED:mailto:user01 at example.com
+ATTENDEE:mailto:user02 at example.com
+DTSTAMP:20051222T210507Z
+ORGANIZER:mailto:user01 at example.com
+END:VEVENT
+BEGIN:VEVENT
+UID:12345-67890
+RECURRENCE-ID:%(now_fwd10)s
+DTSTART:%(now_fwd10)s
+DURATION:PT1H
+ATTENDEE;PARTSTAT=ACCEPTED:mailto:user01 at example.com
+ATTENDEE:mailto:user02 at example.com
+DTSTAMP:20051222T210507Z
+ORGANIZER:mailto:user01 at example.com
+END:VEVENT
+END:VCALENDAR
+"""
+
+ data_future = """BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+BEGIN:VEVENT
+UID:12345-67890
+DTSTART:%(now_back14)s
+DURATION:PT2H
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:user02
+DTSTAMP:20051222T210507Z
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
+RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
+RRULE:FREQ=DAILY
+SEQUENCE:1
+SUMMARY:1234567890123456789012345678901234567890
+ 1234567890123456789012345678901234567890
+ 1234567890123456789012345678901234567890
+ 1234567890123456789012345678901234567890
+END:VEVENT
+BEGIN:VEVENT
+UID:12345-67890
+RECURRENCE-ID:%(now_fwd10)s
+DTSTART:%(now_fwd10)s
+DURATION:PT1H
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:user02
+DTSTAMP:20051222T210507Z
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
+RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
+SEQUENCE:1
+END:VEVENT
+END:VCALENDAR
+"""
+
+ data_past = """BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+BEGIN:VEVENT
+UID:%(uid)s
+DTSTART:%(now_back30)s
+DURATION:PT2H
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:user02
+DTSTAMP:20051222T210507Z
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
+RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
+RRULE:FREQ=DAILY;UNTIL=%(now_back14_1)s
+SEQUENCE:1
+SUMMARY:1234567890123456789012345678901234567890
+ 1234567890123456789012345678901234567890
+ 1234567890123456789012345678901234567890
+ 1234567890123456789012345678901234567890
+END:VEVENT
+BEGIN:VEVENT
+UID:%(uid)s
+RECURRENCE-ID:%(now_back25)s
+DTSTART:%(now_back25)s
+DURATION:PT1H
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:user02
+DTSTAMP:20051222T210507Z
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
+RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
+SEQUENCE:1
+END:VEVENT
+BEGIN:VEVENT
+UID:%(uid)s
+RECURRENCE-ID:%(now_back24)s
+DTSTART:%(now_back24)s
+DURATION:PT1H
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:user02
+DTSTAMP:20051222T210507Z
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
+RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
+SEQUENCE:1
+END:VEVENT
+END:VCALENDAR
+"""
+
+ data_future2 = """BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+BEGIN:VEVENT
+UID:12345-67890
+DTSTART:%(now_back14)s
+DURATION:PT2H
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:x-uid:user02
+DTSTAMP:20051222T210507Z
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
+RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
+RRULE:FREQ=DAILY
+SEQUENCE:1
+SUMMARY:1234567890123456789012345678901234567890
+ 1234567890123456789012345678901234567890
+ 1234567890123456789012345678901234567890
+ 1234567890123456789012345678901234567890
+END:VEVENT
+BEGIN:VEVENT
+UID:12345-67890
+RECURRENCE-ID:%(now_fwd10)s
+DTSTART:%(now_fwd10)s
+DURATION:PT1H
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:x-uid:user02
+DTSTAMP:20051222T210507Z
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
+RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
+SEQUENCE:1
+END:VEVENT
+BEGIN:X-CALENDARSERVER-PERUSER
+UID:12345-67890
+X-CALENDARSERVER-PERUSER-UID:user02
+BEGIN:X-CALENDARSERVER-PERINSTANCE
+TRANSP:TRANSPARENT
+END:X-CALENDARSERVER-PERINSTANCE
+END:X-CALENDARSERVER-PERUSER
+END:VCALENDAR
+"""
+
+ data_past2 = """BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+BEGIN:VEVENT
+UID:%(uid)s
+DTSTART:%(now_back30)s
+DURATION:PT2H
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:x-uid:user02
+DTSTAMP:20051222T210507Z
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
+RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
+RRULE:FREQ=DAILY;UNTIL=%(now_back14_1)s
+SEQUENCE:1
+SUMMARY:1234567890123456789012345678901234567890
+ 1234567890123456789012345678901234567890
+ 1234567890123456789012345678901234567890
+ 1234567890123456789012345678901234567890
+END:VEVENT
+BEGIN:VEVENT
+UID:%(uid)s
+RECURRENCE-ID:%(now_back25)s
+DTSTART:%(now_back25)s
+DURATION:PT1H
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:x-uid:user02
+DTSTAMP:20051222T210507Z
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
+RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
+SEQUENCE:1
+END:VEVENT
+BEGIN:VEVENT
+UID:%(uid)s
+RECURRENCE-ID:%(now_back24)s
+DTSTART:%(now_back24)s
+DURATION:PT1H
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:x-uid:user02
+DTSTAMP:20051222T210507Z
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
+RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
+SEQUENCE:1
+END:VEVENT
+BEGIN:X-CALENDARSERVER-PERUSER
+UID:%(uid)s
+X-CALENDARSERVER-PERUSER-UID:user02
+BEGIN:X-CALENDARSERVER-PERINSTANCE
+TRANSP:TRANSPARENT
+END:X-CALENDARSERVER-PERINSTANCE
+END:X-CALENDARSERVER-PERUSER
+END:VCALENDAR
+"""
+
+ # Create one event without active split
+ self.patch(config.Scheduling.Options.Splitting, "Enabled", False)
+ calendar = yield self.calendarUnderTest(name="calendar", home="user01")
+ component = Component.fromString(data % self.subs)
+ cobj = yield calendar.createCalendarObjectWithName("data1.ics", component)
+ self.assertFalse(hasattr(cobj, "_workItems"))
+ yield self.commit()
+
+ # Patch resource lookup code so that it deletes the inbox resource after lookup is done
+ oldLookup = CalendarStoreFeatures.calendarObjectsWithUID
+ @inlineCallbacks
+ def _lookup(csself, txn, uid):
+ results = yield oldLookup(csself, txn, uid)
+
+ # Delete inbox item in another txn
+ newtxn = self.concurrentTransaction()
+ cal = yield self.calendarUnderTest(name="inbox", home="user02")
+ cobjs = yield cal.calendarObjects()
+ yield cobjs[0].remove()
+ yield newtxn.commit()
+
+ returnValue(results)
+
+ self.patch(CalendarStoreFeatures, "calendarObjectsWithUID", _lookup)
+
+ cobj = yield self.calendarObjectUnderTest(name="data1.ics", calendar_name="calendar", home="user01")
+ yield cobj.split()
+ yield self.commit()
+
+ # Get the existing and new object data
+ cal = yield self.calendarUnderTest(name="calendar", home="user01")
+ cobjs = yield cal.calendarObjects()
+ self.assertEqual(len(cobjs), 2)
+ for cobj in cobjs:
+ self.assertTrue(cobj.isScheduleObject)
+ ical = yield cobj.component()
+ if ical.resourceUID() == "12345-67890":
+ ical_future = ical
+ else:
+ ical_past = ical
+
+ relID = ical_future.masterComponent().propertyValue("RELATED-TO")
+ newUID = ical_past.masterComponent().propertyValue("UID")
+
+ # Verify user01 data
+ title = "user01"
+ relsubs = dict(self.subs)
+ relsubs["uid"] = newUID
+ relsubs["relID"] = relID
+ self.assertEqual(normalize_iCalStr(ical_future), normalize_iCalStr(data_future) % relsubs, "Failed future: %s" % (title,))
+ self.assertEqual(normalize_iCalStr(ical_past), normalize_iCalStr(data_past) % relsubs, "Failed past: %s" % (title,))
+
+ # Get user02 data
+ cal = yield self.calendarUnderTest(name="calendar", home="user02")
+ cobjs = yield cal.calendarObjects()
+ self.assertEqual(len(cobjs), 2)
+ for cobj in cobjs:
+ ical = yield cobj.component()
+ if ical.resourceUID() == "12345-67890":
+ ical_future = ical
+ else:
+ ical_past = ical
+
+ cal = yield self.calendarUnderTest(name="inbox", home="user02")
+ cobjs = yield cal.calendarObjects()
+ self.assertEqual(len(cobjs), 0)
+
+ # Verify user02 data
+ title = "user02"
+ self.assertEqual(normalize_iCalStr(ical_future), normalize_iCalStr(data_future2) % relsubs, "Failed future: %s" % (title,))
+ self.assertEqual(normalize_iCalStr(ical_past), normalize_iCalStr(data_past2) % relsubs, "Failed past: %s" % (title,))
+
+
+ @inlineCallbacks
def _setupSplitAt(self):
"""
Test that user triggered splitting of calendar objects works.
Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/test/test_sql_sharing.py
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/test/test_sql_sharing.py 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/test/test_sql_sharing.py 2014-06-11 03:50:42 UTC (rev 13630)
@@ -23,6 +23,10 @@
populateCalendarsFrom
from txdav.common.datastore.sql_tables import _BIND_MODE_READ, \
_BIND_STATUS_INVITED, _BIND_MODE_DIRECT, _BIND_STATUS_ACCEPTED
+from txdav.base.propertystore.base import PropertyName
+from txdav.xml.base import WebDAVTextElement
+from twistedcaldav import customxml
+from txdav.xml.element import registerElement, registerElementClass
class BaseSharingTests(CommonCommonTests, TestCase):
@@ -489,7 +493,94 @@
yield self.commit()
+ @inlineCallbacks
+ def test_perUserSharedProxyCollectionProperties(self):
+ """
+ Test that sharees and proxies get their own per-user properties, with some being
+ initialized based ont he owner value.
+ """
+ @registerElement
+ @registerElementClass
+ class DummySharingProperty (WebDAVTextElement):
+ namespace = "http://calendarserver.org/ns/"
+ name = "dummy-sharing"
+ shared_name = yield self._createShare()
+
+ # Add owner properties
+ home = yield self.homeUnderTest(name="user01")
+ calendar = yield home.calendarWithName("calendar")
+
+ calendar.properties()[PropertyName.fromElement(DummySharingProperty)] = DummySharingProperty.fromString("user01")
+ calendar.properties()[PropertyName.fromElement(customxml.CalendarColor)] = customxml.CalendarColor.fromString("#000001")
+ yield self.commit()
+
+ # Check/add sharee properties
+ home = yield self.homeUnderTest(name="user02")
+ calendar = yield home.calendarWithName(shared_name)
+ self.assertTrue(PropertyName.fromElement(DummySharingProperty) not in calendar.properties())
+ self.assertTrue(PropertyName.fromElement(customxml.CalendarColor) not in calendar.properties())
+ calendar.properties()[PropertyName.fromElement(DummySharingProperty)] = DummySharingProperty.fromString("user02")
+ calendar.properties()[PropertyName.fromElement(customxml.CalendarColor)] = customxml.CalendarColor.fromString("#000002")
+ yield self.commit()
+
+ # Check/add owner proxy properties
+ txn = self.transactionUnderTest()
+ txn._authz_uid = "user03"
+ home = yield self.homeUnderTest(name="user01")
+ calendar = yield home.calendarWithName("calendar")
+ self.assertTrue(PropertyName.fromElement(DummySharingProperty) in calendar.properties())
+ self.assertEqual(str(calendar.properties()[PropertyName.fromElement(DummySharingProperty)]), "user01")
+ self.assertTrue(PropertyName.fromElement(customxml.CalendarColor) in calendar.properties())
+ self.assertEqual(str(calendar.properties()[PropertyName.fromElement(customxml.CalendarColor)]), "#000001")
+ calendar.properties()[PropertyName.fromElement(DummySharingProperty)] = DummySharingProperty.fromString("user03")
+ calendar.properties()[PropertyName.fromElement(customxml.CalendarColor)] = customxml.CalendarColor.fromString("#000003")
+ yield self.commit()
+
+ # Check/add sharee proxy properties
+ txn = self.transactionUnderTest()
+ txn._authz_uid = "user04"
+ home = yield self.homeUnderTest(name="user02")
+ calendar = yield home.calendarWithName(shared_name)
+ self.assertTrue(PropertyName.fromElement(DummySharingProperty) in calendar.properties())
+ self.assertEqual(str(calendar.properties()[PropertyName.fromElement(DummySharingProperty)]), "user02")
+ self.assertTrue(PropertyName.fromElement(customxml.CalendarColor) in calendar.properties())
+ self.assertEqual(str(calendar.properties()[PropertyName.fromElement(customxml.CalendarColor)]), "#000002")
+ calendar.properties()[PropertyName.fromElement(DummySharingProperty)] = DummySharingProperty.fromString("user04")
+ calendar.properties()[PropertyName.fromElement(customxml.CalendarColor)] = customxml.CalendarColor.fromString("#000004")
+ yield self.commit()
+
+ # Validate all properties
+ home = yield self.homeUnderTest(name="user01")
+ calendar = yield home.calendarWithName("calendar")
+ self.assertEqual(str(calendar.properties()[PropertyName.fromElement(DummySharingProperty)]), "user03")
+ self.assertEqual(str(calendar.properties()[PropertyName.fromElement(customxml.CalendarColor)]), "#000001")
+ yield self.commit()
+
+ home = yield self.homeUnderTest(name="user02")
+ calendar = yield home.calendarWithName(shared_name)
+ self.assertEqual(str(calendar.properties()[PropertyName.fromElement(DummySharingProperty)]), "user04")
+ self.assertEqual(str(calendar.properties()[PropertyName.fromElement(customxml.CalendarColor)]), "#000002")
+ yield self.commit()
+
+ txn = self.transactionUnderTest()
+ txn._authz_uid = "user03"
+ home = yield self.homeUnderTest(name="user01")
+ calendar = yield home.calendarWithName("calendar")
+ self.assertEqual(str(calendar.properties()[PropertyName.fromElement(DummySharingProperty)]), "user03")
+ self.assertEqual(str(calendar.properties()[PropertyName.fromElement(customxml.CalendarColor)]), "#000003")
+ yield self.commit()
+
+ txn = self.transactionUnderTest()
+ txn._authz_uid = "user04"
+ home = yield self.homeUnderTest(name="user02")
+ calendar = yield home.calendarWithName(shared_name)
+ self.assertEqual(str(calendar.properties()[PropertyName.fromElement(DummySharingProperty)]), "user04")
+ self.assertEqual(str(calendar.properties()[PropertyName.fromElement(customxml.CalendarColor)]), "#000004")
+ yield self.commit()
+
+
+
class SharingRevisions(BaseSharingTests):
"""
Test store-based sharing and interaction with revision table.
Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/icalendarstore.py
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/icalendarstore.py 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/icalendarstore.py 2014-06-11 03:50:42 UTC (rev 13630)
@@ -857,6 +857,13 @@
+class UnknownTimezone(CommonStoreError):
+ """
+ Unknown timezone id used.
+ """
+
+
+
#
# FIXME: These may belong elsewhere.
#
Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/carddav/datastore/file.py
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/txdav/carddav/datastore/file.py 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/txdav/carddav/datastore/file.py 2014-06-11 03:50:42 UTC (rev 13630)
@@ -139,6 +139,7 @@
(
PropertyName.fromElement(customxml.GETCTag),
),
+ (),
)
Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/carddav/datastore/query/filter.py
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/txdav/carddav/datastore/query/filter.py 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/txdav/carddav/datastore/query/filter.py 2014-06-11 03:50:42 UTC (rev 13630)
@@ -136,7 +136,7 @@
return not allof
return allof
else:
- return False
+ return True
def valid(self):
@@ -242,8 +242,8 @@
"""
allof = self.propfilter_test == "allof"
- if self.qualifier and allof != self.qualifier.match(item):
- return not allof
+ if self.qualifier and allof and not self.qualifier.match(item):
+ return False
if len(self.filters) > 0:
for filter in self.filters:
Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/carddav/datastore/sql.py
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/txdav/carddav/datastore/sql.py 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/txdav/carddav/datastore/sql.py 2014-06-11 03:50:42 UTC (rev 13630)
@@ -39,7 +39,6 @@
from twisted.internet.defer import inlineCallbacks, returnValue
from twisted.python import hashlib
-from twistedcaldav import carddavxml, customxml
from twistedcaldav.config import config
from twistedcaldav.memcacher import Memcacher
from twistedcaldav.vcard import Component as VCard, InvalidVCardDataError, Property, \
@@ -65,6 +64,7 @@
AllRetriesFailed, ObjectResourceNameAlreadyExistsError, \
SyncTokenValidException, IndexedSearchException
from txdav.xml import element
+from txdav.xml.parser import WebDAVDocument
from zope.interface.declarations import implements
@@ -87,9 +87,9 @@
_cacher = Memcacher("SQL.adbkhome", pickle=True, key_normalization=False)
- def __init__(self, transaction, ownerUID):
+ def __init__(self, transaction, ownerUID, authzUID=None):
- super(AddressBookHome, self).__init__(transaction, ownerUID)
+ super(AddressBookHome, self).__init__(transaction, ownerUID, authzUID=authzUID)
self._addressbookPropertyStoreID = None
self._addressbook = None
@@ -467,6 +467,9 @@
"UID": _objectSchema.UID,
}
+ _shadowProperties = tuple([PropertyName.fromString(prop) for prop in config.Sharing.AddressBooks.CollectionProperties.Shadowable])
+ _proxyProperties = tuple([PropertyName.fromString(prop) for prop in config.Sharing.AddressBooks.CollectionProperties.ProxyOverride])
+ _globalProperties = tuple([PropertyName.fromString(prop) for prop in config.Sharing.AddressBooks.CollectionProperties.Global])
@classmethod
@inlineCallbacks
@@ -797,6 +800,7 @@
props = yield PropertyStore.load(
self.ownerHome().uid(),
self.viewerHome().uid(),
+ None,
self._txn,
self.ownerHome()._addressbookPropertyStoreID, # not ._resourceID as in CommonHomeChild._loadPropertyStore()
notifyCallback=self.notifyPropertyChanged
@@ -807,25 +811,22 @@
def initPropertyStore(self, props):
# Setup peruser special properties
props.setSpecialProperties(
- (
- PropertyName.fromElement(carddavxml.AddressBookDescription),
- ),
- (
- PropertyName.fromElement(customxml.GETCTag),
- ),
+ self._shadowProperties,
+ self._globalProperties,
+ self._proxyProperties,
)
def getInviteCopyProperties(self):
"""
- Get a dictionary of property name/values (as strings) for properties that are shadowable and
+ Get a dictionary of property name/values (as XML strings) for properties that are shadowable and
need to be copied to a sharee's collection when an external (cross-pod) share is created.
Sub-classes should override to expose the properties they care about.
"""
props = {}
- for elem in (element.DisplayName, carddavxml.AddressBookDescription,):
- if PropertyName.fromElement(elem) in self.properties():
- props[elem.sname()] = str(self.properties()[PropertyName.fromElement(elem)])
+ for ename in (PropertyName.fromElement(element.DisplayName),) + self._shadowProperties:
+ if ename in self.properties():
+ props[ename.toString()] = self.properties()[ename].toxml()
return props
@@ -836,15 +837,15 @@
care about.
"""
# Initialize these for all shares
- for elem in (carddavxml.AddressBookDescription,):
- if PropertyName.fromElement(elem) not in self.properties() and elem.sname() in props:
- self.properties()[PropertyName.fromElement(elem)] = elem.fromString(props[elem.sname()])
+ for ename in self._shadowProperties:
+ if ename not in self.properties() and ename.toString() in props:
+ self.properties()[ename] = WebDAVDocument.fromString(props[ename]).root_element
# Only initialize these for direct shares
if self.direct():
- for elem in (element.DisplayName,):
- if PropertyName.fromElement(elem) not in self.properties() and elem.sname() in props:
- self.properties()[PropertyName.fromElement(elem)] = elem.fromString(props[elem.sname()])
+ for ename in (PropertyName.fromElement(element.DisplayName),):
+ if ename not in self.properties() and ename.toString() in props:
+ self.properties()[ename] = WebDAVDocument.fromString(props[ename]).root_element
def contentType(self):
@@ -1165,12 +1166,12 @@
if ownerHomeToDataRowMap:
# Get property stores for all these child resources (if any found)
- addressbookPropertyStoreIDs = [ownerHome._addressbookPropertyStoreID for ownerHome in ownerHomeToDataRowMap]
+ addressbookPropertyStoreIDs = [ownerHomeItem._addressbookPropertyStoreID for ownerHomeItem in ownerHomeToDataRowMap]
propertyStores = yield PropertyStore.forMultipleResourcesWithResourceIDs(
- home.uid(), home._txn, addressbookPropertyStoreIDs
+ home.uid(), None, None, home._txn, addressbookPropertyStoreIDs
)
- addressbookResourceIDs = [ownerHome.addressbook()._resourceID for ownerHome in ownerHomeToDataRowMap]
+ addressbookResourceIDs = [ownerHomeItem.addressbook()._resourceID for ownerHomeItem in ownerHomeToDataRowMap]
revisions = yield cls._revisionsForResourceIDs(addressbookResourceIDs).on(home._txn, resourceIDs=addressbookResourceIDs)
revisions = dict(revisions)
Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/common/datastore/file.py
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/txdav/common/datastore/file.py 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/txdav/common/datastore/file.py 2014-06-11 03:50:42 UTC (rev 13630)
@@ -1701,6 +1701,7 @@
(
PropertyName.fromElement(customxml.NotificationType),
),
+ (),
)
Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/common/datastore/sql.py
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/txdav/common/datastore/sql.py 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/txdav/common/datastore/sql.py 2014-06-11 03:50:42 UTC (rev 13630)
@@ -635,8 +635,7 @@
For example::
- yield (txn.enqueue(MyWorkItem, workDescription="some work to do")
- .whenProposed())
+ yield (txn.enqueue(MyWorkItem, workDescription="some work to do"))
@return: a work proposal describing various events in the work's
life-cycle.
@@ -695,7 +694,7 @@
).on(self)
- def _determineMemo(self, storeType, uid, create=False):
+ def _determineMemo(self, storeType, uid, create=False, authzUID=None):
"""
Determine the memo dictionary to use for homeWithUID.
"""
@@ -721,19 +720,27 @@
@memoizedKey("uid", _determineMemo)
- def homeWithUID(self, storeType, uid, create=False):
+ def homeWithUID(self, storeType, uid, create=False, authzUID=None):
+ """
+ We need to distinguish between various different users "looking" at a home and its
+ child resources because we have per-user properties that depend on which user is "looking".
+ By default the viewer is set to the authz_uid on the transaction, or the owner if no authz,
+ but it can be overridden using L{authzUID}. This is useful when the store needs to get to
+ other user's homes with the viewer being the owner of that home as opposed to authz_uid. That
+ often happens when manipulating shares.
+ """
if storeType not in (ECALENDARTYPE, EADDRESSBOOKTYPE):
raise RuntimeError("Unknown home type.")
- return self._homeClass[storeType].homeWithUID(self, uid, create)
+ return self._homeClass[storeType].homeWithUID(self, uid, create, authzUID)
- def calendarHomeWithUID(self, uid, create=False):
- return self.homeWithUID(ECALENDARTYPE, uid, create=create)
+ def calendarHomeWithUID(self, uid, create=False, authzUID=None):
+ return self.homeWithUID(ECALENDARTYPE, uid, create=create, authzUID=authzUID)
- def addressbookHomeWithUID(self, uid, create=False):
- return self.homeWithUID(EADDRESSBOOKTYPE, uid, create=create)
+ def addressbookHomeWithUID(self, uid, create=False, authzUID=None):
+ return self.homeWithUID(EADDRESSBOOKTYPE, uid, create=create, authzUID=authzUID)
@inlineCallbacks
@@ -741,10 +748,10 @@
"""
Load a calendar or addressbook home by its integer resource ID.
"""
- uid = (yield self._homeClass[storeType]
- .homeUIDWithResourceID(self, rid))
+ uid = (yield self._homeClass[storeType].homeUIDWithResourceID(self, rid))
if uid:
- result = (yield self.homeWithUID(storeType, uid))
+ # Always get the owner's view of the home = i.e., authzUID=uid
+ result = (yield self.homeWithUID(storeType, uid, authzUID=uid))
else:
result = None
returnValue(result)
@@ -2839,7 +2846,7 @@
@classmethod
@inlineCallbacks
- def makeClass(cls, transaction, ownerUID, no_cache=False):
+ def makeClass(cls, transaction, ownerUID, no_cache=False, authzUID=None):
"""
Build the actual home class taking into account the possibility that we might need to
switch in the external version of the class.
@@ -2851,14 +2858,20 @@
@param no_cache: should cached query be used
@type no_cache: C{bool}
"""
- home = cls(transaction, ownerUID)
+ home = cls(transaction, ownerUID, authzUID=authzUID)
actualHome = yield home.initFromStore(no_cache)
returnValue(actualHome)
- def __init__(self, transaction, ownerUID):
+ def __init__(self, transaction, ownerUID, authzUID=None):
self._txn = transaction
self._ownerUID = ownerUID
+ self._authzUID = authzUID
+ if self._authzUID is None:
+ if self._txn._authz_uid is not None:
+ self._authzUID = self._txn._authz_uid
+ else:
+ self._authzUID = self._ownerUID
self._resourceID = None
self._status = _HOME_STATUS_NORMAL
self._dataVersion = None
@@ -3053,11 +3066,11 @@
@classmethod
@inlineCallbacks
- def homeWithUID(cls, txn, uid, create=False):
+ def homeWithUID(cls, txn, uid, create=False, authzUID=None):
"""
@param uid: I'm going to assume uid is utf-8 encoded bytes
"""
- homeObject = yield cls.makeClass(txn, uid)
+ homeObject = yield cls.makeClass(txn, uid, authzUID=authzUID)
if homeObject is not None:
returnValue(homeObject)
else:
@@ -3092,7 +3105,7 @@
yield savepoint.rollback(txn)
# Retry the query - row may exist now, if not re-raise
- homeObject = yield cls.makeClass(txn, uid)
+ homeObject = yield cls.makeClass(txn, uid, authzUID=authzUID)
if homeObject:
returnValue(homeObject)
else:
@@ -3103,7 +3116,7 @@
# Note that we must not cache the owner_uid->resource_id
# mapping in _cacher when creating as we don't want that to appear
# until AFTER the commit
- home = yield cls.makeClass(txn, uid, no_cache=True)
+ home = yield cls.makeClass(txn, uid, no_cache=True, authzUID=authzUID)
yield home.createdHome()
returnValue(home)
@@ -3141,6 +3154,15 @@
return self._ownerUID
+ def authzuid(self):
+ """
+ Retrieve the unique identifier of the user accessing the data in this home.
+
+ @return: a string.
+ """
+ return self._authzUID
+
+
def external(self):
"""
Is this an external home.
@@ -3541,9 +3563,13 @@
@inlineCallbacks
def _loadPropertyStore(self):
+
+ # Use any authz uid in place of the viewer uid so delegates have their own
+ # set of properties
props = yield PropertyStore.load(
self.uid(),
self.uid(),
+ self.authzuid(),
self._txn,
self._resourceID,
notifyCallback=self.notifyChanged
@@ -4653,6 +4679,9 @@
def ownerView(self):
"""
Return the owner resource counterpart of this shared resource.
+
+ Note we have to play a trick with the property store to coerce it to match
+ the per-user properties for the owner.
"""
# Get the child of the owner home that has the same resource id as the owned one
ownerView = yield self.ownerHome().childWithID(self.id())
@@ -4663,10 +4692,13 @@
def shareeView(self, shareeUID):
"""
Return the shared resource counterpart of this owned resource for the specified sharee.
+
+ Note we have to play a trick with the property store to coerce it to match
+ the per-user properties for the sharee.
"""
# Get the child of the sharee home that has the same resource id as the owned one
- shareeHome = yield self._txn.homeWithUID(self._home._homeType, shareeUID)
+ shareeHome = yield self._txn.homeWithUID(self._home._homeType, shareeUID, authzUID=shareeUID)
shareeView = (yield shareeHome.allChildWithID(self.id())) if shareeHome is not None else None
returnValue(shareeView)
@@ -5435,7 +5467,7 @@
childResourceIDs = [dataRow[2] for dataRow in dataRows]
propertyStores = yield PropertyStore.forMultipleResourcesWithResourceIDs(
- home.uid(), home._txn, childResourceIDs
+ home.uid(), None, None, home._txn, childResourceIDs
)
# Get revisions
@@ -6217,9 +6249,12 @@
@inlineCallbacks
def _loadPropertyStore(self, props=None):
if props is None:
+ # Use any authz uid in place of the viewer uid so delegates have their own
+ # set of properties
props = yield PropertyStore.load(
self.ownerHome().uid(),
self.viewerHome().uid(),
+ self.viewerHome().authzuid(),
self._txn,
self._resourceID,
notifyCallback=self.notifyPropertyChanged
@@ -6535,6 +6570,8 @@
if parent.objectResourcesHaveProperties():
propertyStores = (yield PropertyStore.forMultipleResources(
parent._home.uid(),
+ None,
+ None,
parent._txn,
cls._objectSchema.RESOURCE_ID,
cls._objectSchema.PARENT_RESOURCE_ID,
@@ -6612,6 +6649,8 @@
if parent.objectResourcesHaveProperties():
propertyStores = (yield PropertyStore.forMultipleResourcesWithResourceIDs(
parent._home.uid(),
+ None,
+ None,
parent._txn,
tuple([row[0] for row in dataRows]),
))
@@ -6790,8 +6829,9 @@
if props is None:
if self._parentCollection.objectResourcesHaveProperties():
props = yield PropertyStore.load(
+ self._parentCollection.ownerHome().uid(),
self._parentCollection.viewerHome().uid(),
- self._parentCollection.ownerHome().uid(),
+ self._parentCollection.viewerHome().authzuid(),
self._txn,
self._resourceID,
created=created
@@ -7154,6 +7194,7 @@
self._propertyStore = yield PropertyStore.load(
self._uid,
self._uid,
+ None,
self._txn,
self._resourceID,
notifyCallback=self.notifyChanged
@@ -7493,6 +7534,8 @@
# Get property stores for all these child resources (if any found)
propertyStores = (yield PropertyStore.forMultipleResources(
parent.uid(),
+ None,
+ None,
parent._txn,
schema.NOTIFICATION.RESOURCE_ID,
schema.NOTIFICATION.NOTIFICATION_HOME_RESOURCE_ID,
Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/common/datastore/sql_external.py
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/txdav/common/datastore/sql_external.py 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/txdav/common/datastore/sql_external.py 2014-06-11 03:50:42 UTC (rev 13630)
@@ -149,6 +149,7 @@
props = yield PropertyStore.load(
self.uid(),
self.uid(),
+ None,
self._txn,
self._resourceID,
notifyCallback=self.notifyChanged
Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/common/datastore/test/accounts/accounts.xml
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/txdav/common/datastore/test/accounts/accounts.xml 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/txdav/common/datastore/test/accounts/accounts.xml 2014-06-11 03:50:42 UTC (rev 13630)
@@ -387,6 +387,12 @@
<member-uid>8B4288F6-CC82-491D-8EF9-642EF4F3E7D0</member-uid>
</record>
+ <record type="group">
+ <uid>emptygroup</uid>
+ <short-name>emptygroup</short-name>
+ <full-name>Empty Group</full-name>
+ </record>
+
<!-- Calverify test records -->
<record type="user">
Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/dps/client.py
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/txdav/dps/client.py 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/txdav/dps/client.py 2014-06-11 03:50:42 UTC (rev 13630)
@@ -39,7 +39,7 @@
RecordsMatchingTokensCommand, RecordsMatchingFieldsCommand,
MembersCommand, GroupsCommand, SetMembersCommand,
VerifyPlaintextPasswordCommand, VerifyHTTPDigestCommand,
- WikiAccessForUID
+ WikiAccessForUIDCommand, ContinuationCommand
)
from txdav.who.directory import (
CalendarDirectoryRecordMixin, CalendarDirectoryServiceMixin
@@ -127,12 +127,24 @@
def _processSingleRecord(self, result):
+ """
+ Takes a dictionary with a "fields" key whose value is a pickled
+ dictionary of a record's fields, and returns a record.
+ """
serializedFields = pickle.loads(result['fields'])
return self._dictToRecord(serializedFields)
def _processMultipleRecords(self, result):
- serializedFieldsList = pickle.loads(result['fieldsList'])
+ """
+ Takes a dictionary with a "fieldsList" key whose value is an iterable
+ of pickled dictionaries (of records' fields), and returns a list of
+ records.
+ """
+ serializedFieldsList = []
+ for fields in result["fieldsList"]:
+ fields = pickle.loads(fields)
+ serializedFieldsList.append(fields)
results = []
for serializedFields in serializedFieldsList:
record = self._dictToRecord(serializedFields)
@@ -158,6 +170,26 @@
@inlineCallbacks
+ def _sendCommand(self, command, **kwds):
+ """
+ Execute a remote AMP command, first making the connection to the peer.
+ Any kwds are passed on to the AMP command.
+
+ @param command: the AMP command to call
+ @type command: L{twisted.protocols.amp.Command}
+ """
+ ampProto = (yield self._getConnection())
+ try:
+ results = (yield ampProto.callRemote(command, **kwds))
+ except Exception, e:
+ log.error("Failed AMP command", error=e)
+ # FIXME: is there a way to hook into ConnectionLost?
+ self._connection = None
+ raise
+ returnValue(results)
+
+
+ @inlineCallbacks
def _call(self, command, postProcess, **kwds):
"""
Execute a remote AMP command, first making the connection to the peer,
@@ -172,14 +204,27 @@
L{Deferred} which fires with the post-processed results
@type postProcess: callable
"""
- ampProto = (yield self._getConnection())
- try:
- results = (yield ampProto.callRemote(command, **kwds))
- except Exception, e:
- log.error("Failed AMP command", error=e)
- # FIXME: is there a way to hook into ConnectionLost?
- self._connection = None
- raise
+ results = yield self._sendCommand(command, **kwds)
+ if results.get("continuation", None) is None:
+ # We have all the results
+ returnValue(postProcess(results))
+
+ # There are more results to fetch, so loop until the continuation
+ # keyword we get back is None
+
+ multi = [results]
+
+ while results.get("continuation", None) is not None:
+ results = yield self._sendCommand(
+ ContinuationCommand,
+ continuation=results["continuation"]
+ )
+ multi.append(results)
+
+ results = {"fieldsList": []}
+ for result in multi:
+ results["fieldsList"].extend(result["fieldsList"])
+
returnValue(postProcess(results))
@@ -356,7 +401,7 @@
def accessForRecord(self, record):
log.debug("DPS Client accessForRecord")
return self.service._call(
- WikiAccessForUID,
+ WikiAccessForUIDCommand,
self._convertAccess,
wikiUID=self.uid.encode("utf-8"),
uid=record.uid.encode("utf-8")
Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/dps/commands.py
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/txdav/dps/commands.py 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/txdav/dps/commands.py 2014-06-11 03:50:42 UTC (rev 13630)
@@ -53,7 +53,8 @@
('recordType', amp.String()),
]
response = [
- ('fieldsList', amp.String()),
+ ('fieldsList', amp.ListOf(amp.String())),
+ ('continuation', amp.String(optional=True)),
]
@@ -63,18 +64,31 @@
('emailAddress', amp.String()),
]
response = [
- ('fieldsList', amp.String()),
+ ('fieldsList', amp.ListOf(amp.String())),
+ ('continuation', amp.String(optional=True)),
]
+class ContinuationCommand(amp.Command):
+ arguments = [
+ ('continuation', amp.String(optional=True)),
+ ]
+ response = [
+ ('fieldsList', amp.ListOf(amp.String())),
+ ('continuation', amp.String(optional=True)),
+ ]
+
+
+
class RecordsMatchingTokensCommand(amp.Command):
arguments = [
('tokens', amp.ListOf(amp.String())),
('context', amp.String(optional=True)),
]
response = [
- ('fieldsList', amp.String()),
+ ('fieldsList', amp.ListOf(amp.String())),
+ ('continuation', amp.String(optional=True)),
]
@@ -86,14 +100,15 @@
('recordType', amp.String(optional=True)),
]
response = [
- ('fieldsList', amp.String()),
+ ('fieldsList', amp.ListOf(amp.String())),
+ ('continuation', amp.String(optional=True)),
]
class UpdateRecordsCommand(amp.Command):
arguments = [
- ('fieldsList', amp.String()),
+ ('fieldsList', amp.ListOf(amp.String())),
('create', amp.Boolean(optional=True)),
]
response = [
@@ -117,7 +132,8 @@
('uid', amp.String()),
]
response = [
- ('fieldsList', amp.String()),
+ ('fieldsList', amp.ListOf(amp.String())),
+ ('continuation', amp.String(optional=True)),
]
@@ -127,7 +143,8 @@
('uid', amp.String()),
]
response = [
- ('fieldsList', amp.String()),
+ ('fieldsList', amp.ListOf(amp.String())),
+ ('continuation', amp.String(optional=True)),
]
@@ -174,7 +191,7 @@
-class WikiAccessForUID(amp.Command):
+class WikiAccessForUIDCommand(amp.Command):
arguments = [
('wikiUID', amp.String()),
('uid', amp.String()),
Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/dps/json.py
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/txdav/dps/json.py 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/txdav/dps/json.py 2014-06-11 03:50:42 UTC (rev 13630)
@@ -75,6 +75,27 @@
+def matchTypeFromJSON(json):
+ return MatchType.lookupByName(json)
+
+
+
+def matchFlagsFromJSON(json):
+ if json == "{}":
+ return MatchFlags.none
+
+ if json.startswith("{") and json.endswith("}"):
+ # Composite flags: "{A,B,C,...}"
+ flags = MatchFlags.none
+ for flag in json[1:-1].split(","):
+ flags |= MatchFlags.lookupByName(flag)
+
+ return flags
+
+ return MatchFlags.lookupByName(json)
+
+
+
def matchExpressionFromJSON(service, json):
try:
jsonField = json["field"]
@@ -84,23 +105,11 @@
"JSON match expression must have {!r} key.".format(e[0])
)
- jsonMatch = json.get("match", "equals")
- jsonFlags = json.get("flags", "{}")
-
fieldName = service.fieldName.lookupByName(jsonField)
fieldValue = unicode(jsonValue)
- matchType = MatchType.lookupByName(jsonMatch)
+ matchType = matchTypeFromJSON(json.get("match", "equals"))
+ flags = matchFlagsFromJSON(json.get("flags", "{}"))
- if jsonFlags == "{}":
- flags = MatchFlags.none
- elif jsonFlags.startswith("{") and jsonFlags.endswith("}"):
- # Composite flags: "{A,B,C,...}"
- flags = MatchFlags.none
- for flag in jsonFlags[1:-1].split(","):
- flags |= MatchFlags.lookupByName(flag)
- else:
- flags = MatchFlags.lookupByName(jsonFlags)
-
return MatchExpression(
fieldName, fieldValue,
matchType=matchType, flags=flags,
Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/dps/server.py
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/txdav/dps/server.py 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/txdav/dps/server.py 2014-06-11 03:50:42 UTC (rev 13630)
@@ -15,6 +15,7 @@
##
import cPickle as pickle
+import datetime
import uuid
from twext.python.log import Logger
@@ -35,7 +36,7 @@
RecordsMatchingTokensCommand, RecordsMatchingFieldsCommand,
MembersCommand, GroupsCommand, SetMembersCommand,
VerifyPlaintextPasswordCommand, VerifyHTTPDigestCommand,
- WikiAccessForUID
+ WikiAccessForUIDCommand, ContinuationCommand
# UpdateRecordsCommand, RemoveRecordsCommand
)
from txdav.who.util import directoryFromConfig
@@ -62,7 +63,104 @@
amp.AMP.__init__(self)
self._directory = directory
+ # How to large we let an AMP response get before breaking it up
+ self._maxSize = 60000
+ # The cache of results we have not fully responded with. A dictionary
+ # whose keys are "continuation tokens" and whose values are tuples of
+ # (timestamp, list-of-records). When a response does not fit within
+ # AMP size limits, the remaining records are stored in this dictionary
+ # keyed by an opaque token we generate to return to the client so that
+ # it can ask for the remaining results later.
+ self._continuations = {}
+
+
+ def _storeContinuation(self, records):
+ """
+ Store an iterable of records and generate an opaque token we can
+ give back to the client so they can later retrieve these remaining
+ results that did not fit in the previous AMP response.
+
+ @param records: an iterable of records
+ @return: a C{str} token
+ """
+ token = str(uuid.uuid4())
+ # FIXME: I included a timestamp just in case we want to have code that
+ # looks for stale continuations to expire them.
+ self._continuations[token] = (datetime.datetime.now(), records)
+ return token
+
+
+ def _retrieveContinuation(self, token):
+ """
+ Retrieve the previously stored iterable of records associated with
+ the token, and remove the token.
+
+ @param token: a C{str} token previously returned by _storeContinuation
+ @return: an iterable of records, or None if the token does not exist
+ """
+ if token in self._continuations:
+ timestamp, records = self._continuations[token]
+ del self._continuations[token]
+ else:
+ records = None
+ return records
+
+
+ @ContinuationCommand.responder
+ def continuation(self, continuation):
+ """
+ The client calls this command in order to retrieve records that did
+ not fit into an earlier response.
+
+ @param continuation: the token returned via the "continuation" key
+ in the previous response.
+ """
+ log.debug("Continuation: {c}", c=continuation)
+ records = self._retrieveContinuation(continuation)
+ response = self._recordsToResponse(records)
+ log.debug("Responding with: {response}", response=response)
+ return response
+
+
+ def _recordsToResponse(self, records):
+ """
+ Craft an AMP response containing as many records as will fit within
+ the size limit. Remaining records are stored as a "continuation",
+ identified by a token that is returned to the client to fetch later
+ via the ContinuationCommand.
+
+ @param records: an iterable of records
+ @return: the response dictionary, with a list of pickled records
+ stored in the "fieldsList" key, and if there are leftover
+ records that did not fit, there will be a "continuation" key
+ containing the token the client must send via ContinuationCommand.
+ """
+ fieldsList = []
+ count = 0
+ if records:
+ size = 0
+ while size < self._maxSize:
+ try:
+ record = records.pop()
+ except (KeyError, IndexError):
+ # We're done.
+ # Note: because records is an iterable (list or set)
+ # we're catching both KeyError and IndexError.
+ break
+ pickled = pickle.dumps(self.recordToDict(record))
+ size = size + len(pickled)
+ fieldsList.append(pickled)
+ count += 1
+
+ response = {"fieldsList": fieldsList}
+
+ if records:
+ response["continuation"] = self._storeContinuation(records)
+
+ return response
+
+
def recordToDict(self, record):
"""
Turn a record in a dictionary of fields which can be reconstituted
@@ -140,12 +238,7 @@
records = (yield self._directory.recordsWithRecordType(
self._directory.recordType.lookupByName(recordType))
)
- fieldsList = []
- for record in records:
- fieldsList.append(self.recordToDict(record))
- response = {
- "fieldsList": pickle.dumps(fieldsList),
- }
+ response = self._recordsToResponse(records)
log.debug("Responding with: {response}", response=response)
returnValue(response)
@@ -156,16 +249,13 @@
emailAddress = emailAddress.decode("utf-8")
log.debug("RecordsWithEmailAddress: {e}", e=emailAddress)
records = (yield self._directory.recordsWithEmailAddress(emailAddress))
- fieldsList = []
- for record in records:
- fieldsList.append(self.recordToDict(record))
- response = {
- "fieldsList": pickle.dumps(fieldsList),
- }
+ response = self._recordsToResponse(records)
log.debug("Responding with: {response}", response=response)
returnValue(response)
+
+
@RecordsMatchingTokensCommand.responder
@inlineCallbacks
def recordsMatchingTokens(self, tokens, context=None):
@@ -174,16 +264,12 @@
records = yield self._directory.recordsMatchingTokens(
tokens, context=context
)
- fieldsList = []
- for record in records:
- fieldsList.append(self.recordToDict(record))
- response = {
- "fieldsList": pickle.dumps(fieldsList),
- }
+ response = self._recordsToResponse(records)
log.debug("Responding with: {response}", response=response)
returnValue(response)
+
@RecordsMatchingFieldsCommand.responder
@inlineCallbacks
def recordsMatchingFields(self, fields, operand="OR", recordType=None):
@@ -200,8 +286,18 @@
valueType = self._directory.fieldName.valueType(field)
if valueType is uuid.UUID:
searchTerm = uuid.UUID(searchTerm)
- matchFlags = MatchFlags.lookupByName(matchFlags.decode("utf-8"))
+
+ matchFlags = matchFlags.decode("utf-8")
+ if matchFlags.startswith("{") and matchFlags.endswith("}"):
+ flags = MatchFlags.none
+ for flag in matchFlags[1:-1].split(","):
+ flags |= MatchFlags.lookupByName(flag)
+ matchFlags = flags
+ else:
+ matchFlags = MatchFlags.lookupByName(matchFlags)
+
matchType = MatchType.lookupByName(matchType.decode("utf-8"))
+
newFields.append((fieldName, searchTerm, matchFlags, matchType))
operand = Operand.lookupByName(operand)
if recordType:
@@ -209,12 +305,7 @@
records = yield self._directory.recordsMatchingFields(
newFields, operand=operand, recordType=recordType
)
- fieldsList = []
- for record in records:
- fieldsList.append(self.recordToDict(record))
- response = {
- "fieldsList": pickle.dumps(fieldsList),
- }
+ response = self._recordsToResponse(records)
log.debug("Responding with: {response}", response=response)
returnValue(response)
@@ -230,13 +321,12 @@
log.error("Failed in members", error=e)
record = None
- fieldsList = []
+ records = []
if record is not None:
for member in (yield record.members()):
- fieldsList.append(self.recordToDict(member))
- response = {
- "fieldsList": pickle.dumps(fieldsList),
- }
+ records.append(member)
+
+ response = self._recordsToResponse(records)
log.debug("Responding with: {response}", response=response)
returnValue(response)
@@ -282,12 +372,10 @@
log.error("Failed in groups", error=e)
record = None
- fieldsList = []
+ records = []
for group in (yield record.groups()):
- fieldsList.append(self.recordToDict(group))
- response = {
- "fieldsList": pickle.dumps(fieldsList),
- }
+ records.append(group)
+ response = self._recordsToResponse(records)
log.debug("Responding with: {response}", response=response)
returnValue(response)
@@ -342,7 +430,7 @@
returnValue(response)
- @WikiAccessForUID.responder
+ @WikiAccessForUIDCommand.responder
@inlineCallbacks
def wikiAccessForUID(self, wikiUID, uid):
wikiUID = wikiUID.decode("utf-8")
Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/dps/test/test_client.py
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/txdav/dps/test/test_client.py 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/txdav/dps/test/test_client.py 2014-06-11 03:50:42 UTC (rev 13630)
@@ -27,11 +27,15 @@
from twisted.python.filepath import FilePath
from twisted.test.testutils import returnConnected
from twisted.trial import unittest
+from twistedcaldav.config import config
+from twistedcaldav.test.util import StoreTestCase
from txdav.dps.client import DirectoryService
from txdav.dps.server import DirectoryProxyAMPProtocol
from txdav.who.directory import CalendarDirectoryServiceMixin
-from twistedcaldav.test.util import StoreTestCase
-from twistedcaldav.config import config
+from txdav.who.groups import GroupCacher
+from txdav.who.test.support import (
+ TestRecord, CalendarInMemoryDirectoryService
+)
testMode = "xml" # "xml" or "od"
@@ -230,6 +234,28 @@
@inlineCallbacks
+ def test_recordsMatchingFields_not(self):
+ fields = (
+ (
+ u"fullNames", "anche",
+ MatchFlags.NOT | MatchFlags.caseInsensitive,
+ MatchType.contains
+ ),
+ )
+ records = (yield self.directory.recordsMatchingFields(
+ fields, operand=Operand.OR, recordType=None
+ ))
+ matchingShortNames = set()
+ for r in records:
+ for shortName in r.shortNames:
+ matchingShortNames.add(shortName)
+ self.assertTrue("sagen" in matchingShortNames)
+ self.assertTrue("dre" not in matchingShortNames)
+ self.assertTrue("wsanchez" not in matchingShortNames)
+ self.assertTrue("sanchezoffice" not in matchingShortNames)
+
+
+ @inlineCallbacks
def test_recordsFromMatchExpression(self):
expression = MatchExpression(
FieldName.uid,
@@ -244,6 +270,22 @@
@inlineCallbacks
+ def test_members(self):
+ group = yield self.directory.recordWithUID(u"__calendar-dev__")
+ members = yield group.members()
+ self.assertEquals(len(members), 5)
+
+
+ @inlineCallbacks
+ def test_groups(self):
+ # No need to use group cacher as the XML service directly supports
+ # groups()
+ record = yield self.directory.recordWithUID(u"__sagen__")
+ groups = yield record.groups()
+ self.assertEquals(len(groups), 1)
+
+
+ @inlineCallbacks
def test_verifyPlaintextPassword(self):
expectations = (
(testPassword, True), # Correct
@@ -537,6 +579,35 @@
@inlineCallbacks
+ def test_members(self):
+ group = yield self.client.recordWithUID(u"__top_group_1__")
+ members = yield group.members()
+ self.assertEquals(len(members), 3)
+
+ group = yield self.client.recordWithUID(u"emptygroup")
+ members = yield group.members()
+ self.assertEquals(len(members), 0)
+
+
+ @inlineCallbacks
+ def test_groups(self):
+
+ # A group must first be "refreshed" into the DB otherwise we won't
+ # consider it for group memberships
+ txn = self.store.newTransaction()
+ groupCacher = GroupCacher(self.directory)
+ yield groupCacher.refreshGroup(txn, u"__sub_group_1__")
+ yield txn.commit()
+
+ # record = yield self.client.recordWithUID(u"__sagen1__")
+ # FIXME: this call hangs during unit tests, but not in a real server:
+ # groups = yield record.groups()
+ # self.assertEquals(len(groups), 1)
+
+ test_groups.todo = "Figure out why this hangs"
+
+
+ @inlineCallbacks
def test_verifyPlaintextPassword(self):
expectations = (
(u"zehcnasw", True), # Correct
@@ -590,3 +661,109 @@
)
)
self.assertEquals(authenticated, answer)
+
+
+class DPSClientLargeResultsTest(unittest.TestCase):
+ """
+ Tests the client against a single directory service (as opposed to the
+ augmented, aggregated structure you get from directoryFromConfig(), which
+ is tested in the class below)
+ """
+
+ @inlineCallbacks
+ def setUp(self):
+
+ self.numUsers = 1000
+
+ # The "local" directory service
+ self.directory = DirectoryService(None)
+
+ # The "remote" directory service
+ remoteDirectory = CalendarInMemoryDirectoryService(None)
+
+ # Add users
+ records = []
+ fieldName = remoteDirectory.fieldName
+ for i in xrange(self.numUsers):
+ records.append(
+ TestRecord(
+ remoteDirectory,
+ {
+ fieldName.uid: u"foo{ctr:05d}".format(ctr=i),
+ fieldName.shortNames: (u"foo{ctr:05d}".format(ctr=i),),
+ fieldName.fullNames: (u"foo{ctr:05d}".format(ctr=i),),
+ fieldName.recordType: RecordType.user,
+ }
+ )
+ )
+
+ # Add a big group
+ records.append(
+ TestRecord(
+ remoteDirectory,
+ {
+ fieldName.uid: u"bigGroup",
+ fieldName.recordType: RecordType.group,
+ }
+ )
+ )
+
+ yield remoteDirectory.updateRecords(records, create=True)
+
+ group = yield remoteDirectory.recordWithUID(u"bigGroup")
+ members = yield remoteDirectory.recordsWithRecordType(RecordType.user)
+ yield group.setMembers(members)
+
+ # Connect the two services directly via an IOPump
+ client = AMP()
+ server = DirectoryProxyAMPProtocol(remoteDirectory)
+ pump = returnConnected(server, client)
+
+ # Replace the normal _getConnection method with one that bypasses any
+ # actual networking
+ self.patch(self.directory, "_getConnection", lambda: succeed(client))
+
+ # Wrap the normal _call method with one that flushes the IOPump
+ # afterwards
+ origCall = self.directory._call
+
+ def newCall(*args, **kwds):
+ d = origCall(*args, **kwds)
+ pump.flush()
+ return d
+
+ self.patch(self.directory, "_call", newCall)
+
+
+ @inlineCallbacks
+ def test_tooBigResults(self):
+ """
+ The AMP protocol limits values to 65,535 bytes, so the DPS server
+ breaks up the responses to fit. This test uses 1000 records to verify
+ the various methods work seamlessly in the face of large results.
+ Normally only a couple hundred records would fit in a single response.
+ """
+
+ # recordsMatchingTokens
+ records = yield self.directory.recordsMatchingTokens([u"foo"])
+ self.assertEquals(len(records), self.numUsers)
+
+ # recordsMatchingFields
+ fields = (
+ (u"fullNames", "foo", MatchFlags.caseInsensitive, MatchType.contains),
+ )
+ records = yield self.directory.recordsMatchingFields(
+ fields, operand=Operand.OR, recordType=RecordType.user
+ )
+ self.assertEquals(len(records), self.numUsers)
+
+ # recordsWithRecordType
+ records = yield self.directory.recordsWithRecordType(
+ RecordType.user
+ )
+ self.assertEquals(len(records), self.numUsers)
+
+ # members()
+ group = yield self.directory.recordWithUID(u"bigGroup")
+ members = yield group.members()
+ self.assertEquals(len(members), self.numUsers)
Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/who/augment.py
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/txdav/who/augment.py 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/txdav/who/augment.py 2014-06-11 03:50:42 UTC (rev 13630)
@@ -23,6 +23,8 @@
"AugmentedDirectoryService",
]
+import time
+
from zope.interface import implementer
from twisted.internet.defer import inlineCallbacks, returnValue
@@ -47,6 +49,47 @@
+def timed(f):
+ """
+ A decorator which keeps track of the wrapped function's call count and
+ total duration
+ """
+
+ def recordTiming(result, key, startTime):
+ """
+ Figures out how much time to add to the total time spent within the
+ method identified by key and stores that in the timings dict.
+
+ @param result: the result of the wrapped method
+ @param timings: the dictionary to store timings in
+ @type timings: C{dict}
+ @param key: the method name
+ @type key: C{str}
+ @param startTime: the start time of the call in seconds
+ @type startTime: C{float}
+ """
+ timings = AugmentedDirectoryService._timings
+ if key not in timings:
+ timings[key] = (0, 0.0)
+ count, timeSpent = timings[key]
+ count += 1
+ duration = (time.time() - startTime)
+ timeSpent += duration
+ timings[key] = (count, timeSpent)
+ return result
+
+
+ def timingWrapper(self, *args, **kwds):
+ """
+ Records the start time of the call and the method's name
+ """
+ d = f(self, *args, **kwds)
+ d.addBoth(recordTiming, f.func_name, time.time())
+ return d
+
+ return timingWrapper
+
+
@implementer(IDirectoryService, IStoreDirectoryService)
class AugmentedDirectoryService(
BaseDirectoryService, CalendarDirectoryServiceMixin
@@ -63,7 +106,9 @@
FieldName,
))
+ _timings = {}
+
def __init__(self, directory, store, augmentDB):
BaseDirectoryService.__init__(self, directory.realmName)
self._directory = directory
@@ -71,6 +116,10 @@
self._augmentDB = augmentDB
+ def stats(self):
+ return self._timings
+
+
@property
def recordType(self):
# Defer to the directory service we're augmenting
@@ -104,6 +153,7 @@
returnValue(augmented)
+ @timed
@inlineCallbacks
def recordWithUID(self, uid):
# MOVE2WHO, REMOVE THIS:
@@ -116,6 +166,7 @@
returnValue(record)
+ @timed
@inlineCallbacks
def recordWithGUID(self, guid):
record = yield self._directory.recordWithGUID(guid)
@@ -123,6 +174,7 @@
returnValue(record)
+ @timed
@inlineCallbacks
def recordsWithRecordType(self, recordType):
records = yield self._directory.recordsWithRecordType(recordType)
@@ -133,6 +185,7 @@
returnValue(augmented)
+ @timed
@inlineCallbacks
def recordWithShortName(self, recordType, shortName):
# MOVE2WHO, REMOVE THIS:
@@ -147,6 +200,7 @@
returnValue(record)
+ @timed
@inlineCallbacks
def recordsWithEmailAddress(self, emailAddress):
# MOVE2WHO, REMOVE THIS:
@@ -162,6 +216,28 @@
returnValue(augmented)
+ @timed
+ def recordWithCalendarUserAddress(self, *args, **kwds):
+ return CalendarDirectoryServiceMixin.recordWithCalendarUserAddress(
+ self, *args, **kwds
+ )
+
+
+ @timed
+ def recordsMatchingTokens(self, *args, **kwds):
+ return CalendarDirectoryServiceMixin.recordsMatchingTokens(
+ self, *args, **kwds
+ )
+
+
+ @timed
+ def recordsMatchingFields(self, *args, **kwds):
+ return CalendarDirectoryServiceMixin.recordsMatchingFields(
+ self, *args, **kwds
+ )
+
+
+ @timed
@inlineCallbacks
def updateRecords(self, records, create=False):
"""
@@ -364,6 +440,7 @@
self._baseRecord = baseRecord
+ @timed
@inlineCallbacks
def members(self):
augmented = []
@@ -375,6 +452,7 @@
returnValue(augmented)
+ @timed
@inlineCallbacks
def groups(self):
augmented = []
@@ -397,13 +475,16 @@
returnValue(augmented)
+ @timed
def verifyPlaintextPassword(self, password):
return self._baseRecord.verifyPlaintextPassword(password)
+ @timed
def verifyHTTPDigest(self, *args):
return self._baseRecord.verifyHTTPDigest(*args)
+ @timed
def accessForRecord(self, record):
return self._baseRecord.accessForRecord(record)
Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/who/directory.py
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/txdav/who/directory.py 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/txdav/who/directory.py 2014-06-11 03:50:42 UTC (rev 13630)
@@ -143,6 +143,7 @@
return recordTypes
+ @inlineCallbacks
def recordsMatchingTokens(self, tokens, context=None, limitResults=50,
timeoutSeconds=10):
fields = [
@@ -174,37 +175,45 @@
else:
expression = CompoundExpression(outer, Operand.AND)
+ results = []
+
if context is not None:
+ # We're limiting record types, so for each recordType, build a
+ # CompoundExpression that ANDs the original expression with a
+ # typeSpecific one. Collect all the results from these expressions.
recordTypes = self.recordTypesForSearchContext(context)
- log.debug("Context {c}, recordTypes {r}", c=context, r=recordTypes)
- typeSpecific = []
+ log.debug("Tokens: {t}, recordTypes {r}", t=tokens, r=recordTypes)
for recordType in recordTypes:
- typeSpecific.append(
- MatchExpression(
- self.fieldName.recordType,
- recordType,
- MatchType.equals,
- MatchFlags.none
- )
+ typeSpecific = MatchExpression(
+ self.fieldName.recordType,
+ recordType,
+ MatchType.equals,
+ MatchFlags.none
)
- if len(typeSpecific) == 1:
- typeSpecific = typeSpecific[0]
-
- else:
typeSpecific = CompoundExpression(
- typeSpecific,
- Operand.OR
+ [expression, typeSpecific],
+ Operand.AND
)
- expression = CompoundExpression(
- [expression, typeSpecific],
- Operand.AND
+ subResults = yield self.recordsFromExpression(typeSpecific)
+ log.debug(
+ "Tokens ({t}) matched {n} of {r}",
+ t=tokens, n=len(subResults), r=recordType
+ )
+ results.extend(subResults)
+
+ else:
+ # No record type limits
+ results = yield self.recordsFromExpression(expression)
+ log.debug(
+ "Tokens ({t}) matched {n} records",
+ t=tokens, n=len(results)
)
- log.debug("Expression {e}", e=expression)
+ log.debug("Tokens ({t}) matched records {r}", t=tokens, r=results)
- return self.recordsFromExpression(expression)
+ returnValue(results)
def recordsMatchingFieldsWithCUType(self, fields, operand=Operand.OR,
@@ -326,19 +335,7 @@
)
- @property
- def calendarUserAddresses(self):
- try:
- if not (
- self.hasCalendars or (
- config.GroupAttendees.Enabled and
- self.recordType == BaseRecordType.group
- )
- ):
- return frozenset()
- except AttributeError:
- pass
-
+ def _calendarAddresses(self):
cuas = set()
# urn:x-uid:
@@ -366,6 +363,22 @@
return frozenset(cuas)
+
+ @property
+ def calendarUserAddresses(self):
+ try:
+ if not (
+ self.hasCalendars or (
+ config.GroupAttendees.Enabled and
+ self.recordType == BaseRecordType.group
+ )
+ ):
+ return frozenset()
+ except AttributeError:
+ pass
+
+ return self._calendarAddresses()
+
# Mapping from directory record.recordType to RFC2445 CUTYPE values
_cuTypes = {
BaseRecordType.user: 'INDIVIDUAL',
@@ -427,7 +440,7 @@
))
- def canonicalCalendarUserAddress(self):
+ def canonicalCalendarUserAddress(self, checkCal=True):
"""
Return a CUA for this record, preferring in this order:
urn:x-uid: form
@@ -437,8 +450,13 @@
first in calendarUserAddresses list (sorted)
"""
- sortedCuas = sorted(self.calendarUserAddresses)
+ if checkCal:
+ cuas = self.calendarUserAddresses
+ else:
+ cuas = self._calendarAddresses()
+ sortedCuas = sorted(cuas)
+
for prefix in (
"urn:x-uid:",
"urn:uuid:",
@@ -450,7 +468,7 @@
return candidate
# fall back to using the first one
- return sortedCuas[0]
+ return sortedCuas[0] if sortedCuas else None # groups may not have cua
def enabledAsOrganizer(self):
Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/who/opendirectory.py
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/txdav/who/opendirectory.py 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/txdav/who/opendirectory.py 2014-06-11 03:50:42 UTC (rev 13630)
@@ -24,32 +24,14 @@
__all__ = [
"DirectoryService",
- "RecordType"
]
from twext.who.opendirectory import DirectoryService
-from twisted.python.constants import Names, NamedConstant
-
# Hoorj OMG haxx
from twext.who.opendirectory._constants import ODRecordType as _ODRecordType
from .idirectory import RecordType as _CSRecordType
_ODRecordType.location.recordType = _CSRecordType.location
_ODRecordType.resource.recordType = _CSRecordType.resource
-
-
-class RecordType(Names):
-
- user = NamedConstant()
- user.description = u"user"
-
- group = NamedConstant()
- group.description = u"group"
-
- location = NamedConstant()
- location.description = u"location"
-
- resource = NamedConstant()
- resource.description = u"resource"
Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/who/test/support.py
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/txdav/who/test/support.py 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/txdav/who/test/support.py 2014-06-11 03:50:42 UTC (rev 13630)
@@ -18,15 +18,24 @@
RecordType,
NoSuchRecordError
)
-from twext.who.index import DirectoryService as IndexDirectoryService
+from twext.who.index import (
+ DirectoryService as IndexDirectoryService,
+ DirectoryRecord as IndexedDirectoryRecord
+)
from twext.who.util import ConstantsContainer
+from twisted.internet.defer import succeed, inlineCallbacks
+from txdav.who.directory import (
+ CalendarDirectoryRecordMixin, CalendarDirectoryServiceMixin
+)
from txdav.who.idirectory import (
RecordType as CalRecordType
)
-from twisted.internet.defer import succeed, inlineCallbacks
+class TestRecord(IndexedDirectoryRecord, CalendarDirectoryRecordMixin):
+ pass
+
class InMemoryDirectoryService(IndexDirectoryService):
"""
An in-memory IDirectoryService. You must call updateRecords( ) if you want
@@ -69,3 +78,11 @@
if record.uid in uids:
recordSet.remove(record)
return succeed(None)
+
+
+
+class CalendarInMemoryDirectoryService(
+ InMemoryDirectoryService,
+ CalendarDirectoryServiceMixin
+):
+ pass
Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/who/vcard.py
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/txdav/who/vcard.py 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/txdav/who/vcard.py 2014-06-11 03:50:42 UTC (rev 13630)
@@ -323,8 +323,9 @@
# add members
# FIXME: members() is a deferred, so all of vCardFromRecord is deferred.
for memberRecord in (yield record.members()):
- if memberRecord:
- vcard.addProperty(Property("X-ADDRESSBOOKSERVER-MEMBER", memberRecord.canonicalCalendarUserAddress().encode("utf-8")))
+ cua = memberRecord.canonicalCalendarUserAddress(False)
+ if cua:
+ vcard.addProperty(Property("X-ADDRESSBOOKSERVER-MEMBER", cua.encode("utf-8")))
#===================================================================
# vCard 4.0 http://tools.ietf.org/html/rfc6350
Modified: CalendarServer/branches/users/gaya/groupsharee/txweb2/dav/method/report_expand.py
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee/txweb2/dav/method/report_expand.py 2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/txweb2/dav/method/report_expand.py 2014-06-11 03:50:42 UTC (rev 13630)
@@ -69,7 +69,7 @@
for property in expand_property.children:
namespace = property.attributes.get("namespace", dav_namespace)
- name = property.attributes.get("name", "")
+ name = property.attributes.get("name", "")
# Make sure children have no children
props_to_find = []
@@ -81,7 +81,7 @@
"expand-property REPORT only supports single level expansion"
))
child_namespace = child.attributes.get("namespace", dav_namespace)
- child_name = child.attributes.get("name", "")
+ child_name = child.attributes.get("name", "")
props_to_find.append((child_namespace, child_name))
properties[(namespace, name)] = props_to_find
@@ -161,16 +161,17 @@
)
status = statusForFailure(f, "getting property: %s" % (qname,))
- if status not in properties_by_status: properties_by_status[status] = []
+ if status not in properties_by_status:
+ properties_by_status[status] = []
properties_by_status[status].append(propertyName(qname))
# Build the overall response
propstats = [
element.PropertyStatus(
- element.PropertyContainer(*properties_by_status[status]),
- element.Status.fromResponseCode(status)
+ element.PropertyContainer(*properties_by_status[pstatus]),
+ element.Status.fromResponseCode(pstatus)
)
- for status in properties_by_status if properties_by_status[status]
+ for pstatus in properties_by_status if properties_by_status[pstatus]
]
returnValue(MultiStatusResponse((element.PropertyStatusResponse(element.HRef(request.uri), *propstats),)))
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20140610/20a1be94/attachment-0001.html>
More information about the calendarserver-changes
mailing list