<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[13630] CalendarServer/branches/users/gaya/groupsharee</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.calendarserver.org//changeset/13630">13630</a></dd>
<dt>Author</dt> <dd>gaya@apple.com</dd>
<dt>Date</dt> <dd>2014-06-10 20:50:42 -0700 (Tue, 10 Jun 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>merge from trunk to <a href="http://trac.calendarserver.org//changeset/13629">r13629</a></pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#CalendarServerbranchesusersgayagroupshareebinpyflakes">CalendarServer/branches/users/gaya/groupsharee/bin/pyflakes</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareebinpython">CalendarServer/branches/users/gaya/groupsharee/bin/python</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareebinsim">CalendarServer/branches/users/gaya/groupsharee/bin/sim</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareebintest">CalendarServer/branches/users/gaya/groupsharee/bin/test</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareebintrial">CalendarServer/branches/users/gaya/groupsharee/bin/trial</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareebintwistd">CalendarServer/branches/users/gaya/groupsharee/bin/twistd</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareecalendarserverdashboard_servicepy">CalendarServer/branches/users/gaya/groupsharee/calendarserver/dashboard_service.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareecalendarserverprovisionrootpy">CalendarServer/branches/users/gaya/groupsharee/calendarserver/provision/root.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareecalendarservertapcaldavpy">CalendarServer/branches/users/gaya/groupsharee/calendarserver/tap/caldav.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareecalendarservertaptesttest_caldavpy">CalendarServer/branches/users/gaya/groupsharee/calendarserver/tap/test/test_caldav.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareecalendarservertoolscalverifypy">CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/calverify.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareecalendarservertoolscmdlinepy">CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/cmdline.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareecalendarservertoolsdashboardpy">CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/dashboard.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareecalendarservertoolsgatewaypy">CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/gateway.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareecalendarservertoolsmanagetimezonespy">CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/managetimezones.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareecalendarservertoolsmigrate_verifypy">CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/migrate_verify.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareecalendarservertoolsresourcespy">CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/resources.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareecalendarservertoolstesttest_gatewaypy">CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/test/test_gateway.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareecalendarservertoolstesttest_principalspy">CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/test/test_principals.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareeconfauthgenerate_test_accountspy">CalendarServer/branches/users/gaya/groupsharee/conf/auth/generate_test_accounts.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareeconfcaldavdappleplist">CalendarServer/branches/users/gaya/groupsharee/conf/caldavd-apple.plist</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareecontribtoolsmonitoranalysispy">CalendarServer/branches/users/gaya/groupsharee/contrib/tools/monitoranalysis.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareerequirementsdevtxt">CalendarServer/branches/users/gaya/groupsharee/requirements-dev.txt</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareerequirementsstabletxt">CalendarServer/branches/users/gaya/groupsharee/requirements-stable.txt</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareesupport_cache_deps">CalendarServer/branches/users/gaya/groupsharee/support/_cache_deps</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavdirectoryutilpy">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/directory/util.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavdirectorybackedaddressbookpy">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/directorybackedaddressbook.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavicalpy">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/ical.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavmemcacheclientpy">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/memcacheclient.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavresourcepy">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/resource.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavscheduling_storecaldavresourcepy">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/scheduling_store/caldav/resource.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavsharingpy">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/sharing.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavstdconfigpy">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/stdconfig.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavstorebridgepy">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/storebridge.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavtesttest_icalendarpy">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/test/test_icalendar.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavtesttest_resourcepy">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/test/test_resource.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavtimezonestdservicepy">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/timezonestdservice.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavupgradepy">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/upgrade.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfolinkstxt">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/links.txt</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfotimezonesxml">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/timezones.xml</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetxdavbasepropertystorebasepy">CalendarServer/branches/users/gaya/groupsharee/txdav/base/propertystore/base.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetxdavbasepropertystoresqlpy">CalendarServer/branches/users/gaya/groupsharee/txdav/base/propertystore/sql.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetxdavbasepropertystoretestbasepy">CalendarServer/branches/users/gaya/groupsharee/txdav/base/propertystore/test/base.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetxdavbasepropertystoretesttest_sqlpy">CalendarServer/branches/users/gaya/groupsharee/txdav/base/propertystore/test/test_sql.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetxdavbasepropertystoretesttest_xattrpy">CalendarServer/branches/users/gaya/groupsharee/txdav/base/propertystore/test/test_xattr.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetxdavcaldavdatastorefilepy">CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/file.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetxdavcaldavdatastoreschedulingicaldiffpy">CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/scheduling/icaldiff.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetxdavcaldavdatastoreschedulingworkpy">CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/scheduling/work.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetxdavcaldavdatastoresqlpy">CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/sql.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetxdavcaldavdatastoretesttest_implicitpy">CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/test/test_implicit.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetxdavcaldavdatastoretesttest_sqlpy">CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/test/test_sql.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetxdavcaldavdatastoretesttest_sql_sharingpy">CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/test/test_sql_sharing.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetxdavcaldavicalendarstorepy">CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/icalendarstore.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetxdavcarddavdatastorefilepy">CalendarServer/branches/users/gaya/groupsharee/txdav/carddav/datastore/file.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetxdavcarddavdatastorequeryfilterpy">CalendarServer/branches/users/gaya/groupsharee/txdav/carddav/datastore/query/filter.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetxdavcarddavdatastoresqlpy">CalendarServer/branches/users/gaya/groupsharee/txdav/carddav/datastore/sql.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetxdavcommondatastorefilepy">CalendarServer/branches/users/gaya/groupsharee/txdav/common/datastore/file.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetxdavcommondatastoresqlpy">CalendarServer/branches/users/gaya/groupsharee/txdav/common/datastore/sql.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetxdavcommondatastoresql_externalpy">CalendarServer/branches/users/gaya/groupsharee/txdav/common/datastore/sql_external.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetxdavcommondatastoretestaccountsaccountsxml">CalendarServer/branches/users/gaya/groupsharee/txdav/common/datastore/test/accounts/accounts.xml</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetxdavdpsclientpy">CalendarServer/branches/users/gaya/groupsharee/txdav/dps/client.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetxdavdpscommandspy">CalendarServer/branches/users/gaya/groupsharee/txdav/dps/commands.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetxdavdpsjsonpy">CalendarServer/branches/users/gaya/groupsharee/txdav/dps/json.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetxdavdpsserverpy">CalendarServer/branches/users/gaya/groupsharee/txdav/dps/server.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetxdavdpstesttest_clientpy">CalendarServer/branches/users/gaya/groupsharee/txdav/dps/test/test_client.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetxdavwhoaugmentpy">CalendarServer/branches/users/gaya/groupsharee/txdav/who/augment.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetxdavwhodirectorypy">CalendarServer/branches/users/gaya/groupsharee/txdav/who/directory.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetxdavwhoopendirectorypy">CalendarServer/branches/users/gaya/groupsharee/txdav/who/opendirectory.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetxdavwhotestsupportpy">CalendarServer/branches/users/gaya/groupsharee/txdav/who/test/support.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetxdavwhovcardpy">CalendarServer/branches/users/gaya/groupsharee/txdav/who/vcard.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetxweb2davmethodreport_expandpy">CalendarServer/branches/users/gaya/groupsharee/txweb2/dav/method/report_expand.py</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li>CalendarServer/branches/users/gaya/groupsharee/contrib/od/</li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoAUSCentralStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/AUS Central Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoAUSEasternStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/AUS Eastern Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoAfghanistanStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Afghanistan Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoAlaskanStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Alaskan Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoArabStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Arab Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoArabianStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Arabian Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoArabicStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Arabic Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoArgentinaStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Argentina Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoAtlanticStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Atlantic Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoAzerbaijanStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Azerbaijan Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoAzoresStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Azores Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoBahiaStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Bahia Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoBangladeshStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Bangladesh Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoCanadaCentralStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Canada Central Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoCapeVerdeStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Cape Verde Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoCaucasusStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Caucasus Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoCenAustraliaStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Cen. Australia Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoCentralAmericaStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central America Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoCentralAsiaStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central Asia Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoCentralBrazilianStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central Brazilian Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoCentralEuropeStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central Europe Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoCentralEuropeanStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central European Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoCentralPacificStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central Pacific Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoCentralStandardTimeMexicoics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central Standard Time (Mexico).ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoCentralStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoChinaStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/China Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoDatelineStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Dateline Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoEAfricaStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/E. Africa Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoEAustraliaStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/E. Australia Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoESouthAmericaStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/E. South America Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoEasternStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Eastern Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoEgyptStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Egypt Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoEkaterinburgStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Ekaterinburg Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoFLEStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/FLE Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoFijiStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Fiji Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoGMTStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/GMT Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoGTBStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/GTB Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoGeorgianStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Georgian Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoGreenlandStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Greenland Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoGreenwichStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Greenwich Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoHawaiianStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Hawaiian Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoIndiaStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/India Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoIranStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Iran Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoIsraelStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Israel Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoJordanStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Jordan Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoKaliningradStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Kaliningrad Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoKoreaStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Korea Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoLibyaStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Libya Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoMagadanStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Magadan Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoMauritiusStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Mauritius Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoMiddleEastStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Middle East Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoMontevideoStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Montevideo Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoMoroccoStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Morocco Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoMountainStandardTimeMexicoics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Mountain Standard Time (Mexico).ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoMountainStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Mountain Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoMyanmarStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Myanmar Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoNCentralAsiaStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/N. Central Asia Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoNamibiaStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Namibia Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoNepalStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Nepal Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoNewZealandStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/New Zealand Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoNewfoundlandStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Newfoundland Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoNorthAsiaEastStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/North Asia East Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoNorthAsiaStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/North Asia Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoPacificSAStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Pacific SA Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoPacificStandardTimeMexicoics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Pacific Standard Time (Mexico).ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoPacificStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Pacific Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoPakistanStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Pakistan Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoParaguayStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Paraguay Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoRomanceStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Romance Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoRussianStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Russian Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoSAEasternStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/SA Eastern Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoSAPacificStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/SA Pacific Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoSAWesternStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/SA Western Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoSEAsiaStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/SE Asia Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoSamoaStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Samoa Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoSingaporeStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Singapore Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoSouthAfricaStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/South Africa Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoSriLankaStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Sri Lanka Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoSyriaStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Syria Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoTaipeiStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Taipei Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoTasmaniaStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Tasmania Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoTokyoStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Tokyo Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoTongaStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Tonga Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoTurkeyStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Turkey Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoUSEasternStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/US Eastern Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoUSMountainStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/US Mountain Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoUTC12ics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/UTC+12.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoUTC02ics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/UTC-02.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoUTC11ics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/UTC-11.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoUlaanbaatarStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Ulaanbaatar Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoVenezuelaStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Venezuela Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoVladivostokStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Vladivostok Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoWAustraliaStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/W. Australia Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoWCentralAfricaStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/W. Central Africa Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoWEuropeStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/W. Europe Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoWestAsiaStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/West Asia Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoWestPacificStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/West Pacific Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoYakutskStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Yakutsk Standard Time.ics</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="CalendarServerbranchesusersgayagroupshareebinpyflakes"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/bin/pyflakes (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -24,7 +24,8 @@
</span><span class="cx"> 
</span><span class="cx"> . &quot;${wd}/bin/_build.sh&quot;;
</span><span class="cx"> 
</span><del>-init_build &gt; /dev/null;
</del><ins>+do_setup=&quot;false&quot;;
+develop &gt; /dev/null;
</ins><span class="cx"> 
</span><span class="cx"> if [ $# -eq 0 ]; then
</span><span class="cx">   set - calendarserver contrib twisted twistedcaldav txdav txweb2;
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareebinpython"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/bin/python (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -25,7 +25,6 @@
</span><span class="cx"> . &quot;${wd}/bin/_build.sh&quot;;
</span><span class="cx"> 
</span><span class="cx"> do_setup=&quot;false&quot;;
</span><del>-
</del><span class="cx"> develop &gt; /dev/null;
</span><span class="cx"> 
</span><span class="cx"> exec &quot;${python}&quot; &quot;$@&quot;;
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareebinsim"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/bin/sim (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -24,7 +24,6 @@
</span><span class="cx"> 
</span><span class="cx"> . &quot;${wd}/bin/_build.sh&quot;;
</span><span class="cx"> 
</span><del>-init_build &gt; /dev/null;
</del><span class="cx"> do_setup=&quot;false&quot;;
</span><span class="cx"> develop &gt; /dev/null;
</span><span class="cx"> 
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareebintest"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/bin/test (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -96,8 +96,7 @@
</span><span class="cx"> # Dependencies
</span><span class="cx"> #
</span><span class="cx"> 
</span><del>-c_dependencies &gt;&gt; &quot;${dev_home}/setup.log&quot;;
-py_dependencies &gt;&gt; &quot;${dev_home}/setup.log&quot;;
</del><ins>+develop &gt; /dev/null &quot;${dev_home}/setup.log&quot;;
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareebintrial"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/bin/trial (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -24,7 +24,6 @@
</span><span class="cx"> 
</span><span class="cx"> . &quot;${wd}/bin/_build.sh&quot;;
</span><span class="cx"> 
</span><del>-init_build &gt; /dev/null;
</del><span class="cx"> do_setup=&quot;false&quot;;
</span><span class="cx"> develop &gt; /dev/null;
</span><span class="cx"> 
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareebintwistd"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/bin/twistd (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -24,7 +24,8 @@
</span><span class="cx"> 
</span><span class="cx"> . &quot;${wd}/bin/_build.sh&quot;;
</span><span class="cx"> 
</span><del>-init_build &gt; /dev/null;
</del><ins>+do_setup=&quot;false&quot;;
+develop &gt; /dev/null;
</ins><span class="cx"> 
</span><span class="cx"> exec &quot;${python}&quot; \
</span><span class="cx">   -c &quot;\
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareecalendarserverdashboard_servicepy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/calendarserver/dashboard_service.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -28,6 +28,7 @@
</span><span class="cx"> a server admin or developer would like to keep an eye on.
</span><span class="cx"> &quot;&quot;&quot;
</span><span class="cx"> 
</span><ins>+
</ins><span class="cx"> class DashboardProtocol (LineReceiver):
</span><span class="cx">     &quot;&quot;&quot;
</span><span class="cx">     A protocol that receives a line containing a JSON object representing a request,
</span><span class="lines">@@ -153,7 +154,21 @@
</span><span class="cx">         return succeed({&quot;workers&quot;: loads, &quot;level&quot;: level})
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+    def data_directory(self):
+        &quot;&quot;&quot;
+        Return a summary of directory service calls.
</ins><span class="cx"> 
</span><ins>+        @return: the JSON result.
+        @rtype: L{str}
+        &quot;&quot;&quot;
+        directory = self.factory.store.directoryService()
+        if hasattr(directory, &quot;stats&quot;):
+            return succeed(directory.stats())
+        else:
+            return succeed({})
+
+
+
</ins><span class="cx"> class DashboardServer(Factory):
</span><span class="cx"> 
</span><span class="cx">     protocol = DashboardProtocol
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareecalendarserverprovisionrootpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/calendarserver/provision/root.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -364,12 +364,7 @@
</span><span class="cx">                             .format(agent)
</span><span class="cx">                         ))
</span><span class="cx"> 
</span><del>-        if (
-            config.EnableResponseCache and
-            request.method == &quot;PROPFIND&quot; and
-            not getattr(request, &quot;notInCache&quot;, False) and
-            len(segments) &gt; 1
-        ):
</del><ins>+        if not hasattr(request, &quot;authzUser&quot;):
</ins><span class="cx">             try:
</span><span class="cx">                 authnUser, authzUser = yield self.authenticate(request)
</span><span class="cx">                 request.authnUser = authnUser
</span><span class="lines">@@ -381,6 +376,13 @@
</span><span class="cx">                 )
</span><span class="cx">                 raise HTTPError(response)
</span><span class="cx"> 
</span><ins>+        if (
+            config.EnableResponseCache and
+            request.method == &quot;PROPFIND&quot; and
+            not getattr(request, &quot;notInCache&quot;, False) and
+            len(segments) &gt; 1
+        ):
+
</ins><span class="cx">             try:
</span><span class="cx">                 if not getattr(request, &quot;checkingCache&quot;, False):
</span><span class="cx">                     request.checkingCache = True
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareecalendarservertapcaldavpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/calendarserver/tap/caldav.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -38,6 +38,8 @@
</span><span class="cx"> 
</span><span class="cx"> from zope.interface import implements
</span><span class="cx"> 
</span><ins>+from twistedcaldav.stdconfig import config
+
</ins><span class="cx"> from twisted.python.log import FileLogObserver, ILogObserver
</span><span class="cx"> from twisted.python.logfile import LogFile
</span><span class="cx"> from twisted.python.usage import Options, UsageError
</span><span class="lines">@@ -70,6 +72,7 @@
</span><span class="cx"> from twext.enterprise.jobqueue import WorkerFactory as QueueWorkerFactory
</span><span class="cx"> from twext.application.service import ReExecService
</span><span class="cx"> from txdav.who.groups import GroupCacherPollingWork
</span><ins>+from calendarserver.tools.purge import PrincipalPurgePollingWork
</ins><span class="cx"> 
</span><span class="cx"> from txweb2.channel.http import (
</span><span class="cx">     LimitingHTTPFactory, SSLRedirectRequest, HTTPChannel
</span><span class="lines">@@ -96,7 +99,7 @@
</span><span class="cx"> from txdav.who.groups import GroupCacher
</span><span class="cx"> 
</span><span class="cx"> from twistedcaldav import memcachepool
</span><del>-from twistedcaldav.config import config, ConfigurationError
</del><ins>+from twistedcaldav.config import ConfigurationError
</ins><span class="cx"> from twistedcaldav.localization import processLocalizationFiles
</span><span class="cx"> from twistedcaldav.stdconfig import DEFAULT_CONFIG, DEFAULT_CONFIG_FILE
</span><span class="cx"> from twistedcaldav.upgrade import (
</span><span class="lines">@@ -566,7 +569,7 @@
</span><span class="cx">     &quot;&quot;&quot;
</span><span class="cx">     log = Logger()
</span><span class="cx"> 
</span><del>-    def __init__(self, store, doImip, doGroupCaching):
</del><ins>+    def __init__(self, store, doImip, doGroupCaching, doPrincipalPurging):
</ins><span class="cx">         &quot;&quot;&quot;
</span><span class="cx">         @param store: the Store to use for enqueuing work
</span><span class="cx">         @param doImip: whether to schedule imip polling
</span><span class="lines">@@ -577,6 +580,7 @@
</span><span class="cx">         self.store = store
</span><span class="cx">         self.doImip = doImip
</span><span class="cx">         self.doGroupCaching = doGroupCaching
</span><ins>+        self.doPrincipalPurging = doPrincipalPurging
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     @inlineCallbacks
</span><span class="lines">@@ -595,6 +599,11 @@
</span><span class="cx">                 self.store,
</span><span class="cx">                 int(config.LogID) if config.LogID else 5
</span><span class="cx">             )
</span><ins>+        if self.doPrincipalPurging:
+            yield PrincipalPurgePollingWork.initialSchedule(
+                self.store,
+                int(config.LogID) if config.LogID else 5
+            )
</ins><span class="cx">         yield FindMinValidRevisionWork.initialSchedule(
</span><span class="cx">             self.store,
</span><span class="cx">             int(config.LogID) if config.LogID else 5
</span><span class="lines">@@ -604,15 +613,8 @@
</span><span class="cx">             int(config.LogID) if config.LogID else 5
</span><span class="cx">         )
</span><span class="cx"> 
</span><del>-        # 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
-        # )
</del><span class="cx"> 
</span><span class="cx"> 
</span><del>-
</del><span class="cx"> class PreProcessingService(Service):
</span><span class="cx">     &quot;&quot;&quot;
</span><span class="cx">     A Service responsible for running any work that needs to be finished prior
</span><span class="lines">@@ -1098,7 +1100,8 @@
</span><span class="cx">         WorkSchedulingService(
</span><span class="cx">             store,
</span><span class="cx">             config.Scheduling.iMIP.Enabled,
</span><del>-            (config.GroupCaching.Enabled and config.GroupCaching.EnableUpdater)
</del><ins>+            (config.GroupCaching.Enabled and config.GroupCaching.EnableUpdater),
+            config.AutomaticPurging.Enabled
</ins><span class="cx">         ).setServiceParent(service)
</span><span class="cx"> 
</span><span class="cx">         # For calendarserver.tap.test
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareecalendarservertaptesttest_caldavpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/calendarserver/tap/test/test_caldav.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -1284,8 +1284,8 @@
</span><span class="cx">         deferred = Deferred()
</span><span class="cx">         proc = reactor.spawnProcess(
</span><span class="cx">             CapturingProcessProtocol(deferred, None),
</span><del>-            twistd,
-            [twistd, reactorArg, '-n', '-y', tacFilePath],
</del><ins>+            sys.executable,
+            [sys.executable, twistd, reactorArg, '-n', '-y', tacFilePath],
</ins><span class="cx">             env=os.environ
</span><span class="cx">         )
</span><span class="cx">         reactor.callLater(3, proc.signalProcess, &quot;HUP&quot;)
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareecalendarservertoolscalverifypy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/calverify.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -44,7 +44,7 @@
</span><span class="cx"> import sys
</span><span class="cx"> import time
</span><span class="cx"> import traceback
</span><del>-import uuid
</del><ins>+from uuid import uuid4
</ins><span class="cx"> 
</span><span class="cx"> from calendarserver.tools import tables
</span><span class="cx"> from calendarserver.tools.cmdline import utilityMain, WorkerService
</span><span class="lines">@@ -1851,7 +1851,7 @@
</span><span class="cx">                 _ignore_homeID, calendarID = yield self.getAllResourceInfoForResourceID(attresid)
</span><span class="cx">                 calendar = yield home.childWithID(calendarID)
</span><span class="cx">                 calendarObj = yield calendar.objectResourceWithID(attresid)
</span><del>-                calendarObj.scheduleTag = str(uuid.uuid4())
</del><ins>+                calendarObj.scheduleTag = str(uuid4())
</ins><span class="cx">                 yield calendarObj._setComponentInternal(attendee_calendar, internal_state=ComponentUpdateState.RAW)
</span><span class="cx">                 self.results.setdefault(&quot;Fix change event&quot;, set()).add((home.name(), calendar.name(), attendee_calendar.resourceUID(),))
</span><span class="cx"> 
</span><span class="lines">@@ -1862,7 +1862,7 @@
</span><span class="cx">                 defaultCalendar = (yield self.defaultCalendarForAttendee(home))
</span><span class="cx">                 if defaultCalendar is None:
</span><span class="cx">                     raise ValueError(&quot;Cannot find suitable default calendar&quot;)
</span><del>-                new_name = str(uuid.uuid4()) + &quot;.ics&quot;
</del><ins>+                new_name = str(uuid4()) + &quot;.ics&quot;
</ins><span class="cx">                 calendarObj = (yield defaultCalendar._createCalendarObjectWithNameInternal(new_name, attendee_calendar, internal_state=ComponentUpdateState.RAW, options=self.metadata))
</span><span class="cx">                 self.results.setdefault(&quot;Fix add event&quot;, set()).add((home.name(), defaultCalendar.name(), attendee_calendar.resourceUID(),))
</span><span class="cx"> 
</span><span class="lines">@@ -1879,7 +1879,7 @@
</span><span class="cx">             details[&quot;title&quot;] = instance.component.propertyValue(&quot;SUMMARY&quot;)
</span><span class="cx"> 
</span><span class="cx">             # Write new itip message to attendee inbox
</span><del>-            yield inbox.createCalendarObjectWithName(str(uuid.uuid4()) + &quot;.ics&quot;, itipmsg, options=self.metadata_inbox)
</del><ins>+            yield inbox.createCalendarObjectWithName(str(uuid4()) + &quot;.ics&quot;, itipmsg, options=self.metadata_inbox)
</ins><span class="cx">             self.results.setdefault(&quot;Fix add inbox&quot;, set()).add((home.name(), itipmsg.resourceUID(),))
</span><span class="cx"> 
</span><span class="cx">             yield self.txn.commit()
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareecalendarservertoolscmdlinepy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/cmdline.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -18,7 +18,6 @@
</span><span class="cx"> Shared main-point between utilities.
</span><span class="cx"> &quot;&quot;&quot;
</span><span class="cx"> 
</span><del>-from calendarserver.tap.caldav import CalDAVServiceMaker, CalDAVOptions
</del><span class="cx"> from calendarserver.tap.util import checkDirectories
</span><span class="cx"> from calendarserver.tools.util import loadConfig, autoDisableMemcached
</span><span class="cx"> 
</span><span class="lines">@@ -36,7 +35,10 @@
</span><span class="cx"> # TODO: direct unit tests for these functions.
</span><span class="cx"> 
</span><span class="cx"> 
</span><del>-def utilityMain(configFileName, serviceClass, reactor=None, serviceMaker=CalDAVServiceMaker, patchConfig=None, onShutdown=None, verbose=False):
</del><ins>+def utilityMain(
+    configFileName, serviceClass, reactor=None, serviceMaker=None,
+    patchConfig=None, onShutdown=None, verbose=False
+):
</ins><span class="cx">     &quot;&quot;&quot;
</span><span class="cx">     Shared main-point for utilities.
</span><span class="cx"> 
</span><span class="lines">@@ -68,6 +70,10 @@
</span><span class="cx">         will be imported and used.
</span><span class="cx">     &quot;&quot;&quot;
</span><span class="cx"> 
</span><ins>+    from calendarserver.tap.caldav import CalDAVServiceMaker, CalDAVOptions
+    if serviceMaker is None:
+        serviceMaker = CalDAVServiceMaker
+
</ins><span class="cx">     # We want to validate that the actual service is always an instance of WorkerService, so wrap the
</span><span class="cx">     # service maker callback inside a function that does that check
</span><span class="cx">     def _makeValidService(store):
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareecalendarservertoolsdashboardpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/dashboard.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -201,7 +201,7 @@
</span><span class="cx">                     self.windows
</span><span class="cx">                 ):
</span><span class="cx">                     window.update()
</span><del>-        except Exception as e: #@UnusedVariable
</del><ins>+        except Exception:
</ins><span class="cx">             #print(str(e))
</span><span class="cx">             pass
</span><span class="cx">         if not self.usesCurses:
</span><span class="lines">@@ -738,10 +738,12 @@
</span><span class="cx"> 
</span><span class="cx">         s = &quot; {:&lt;12}{:&gt;8}{:&gt;16}&quot;.format(
</span><span class="cx">             &quot;Total:&quot;,
</span><del>-            sum([
-                record[&quot;unacknowledged&quot;] + record[&quot;acknowledged&quot;]
-                for record in records
-            ]),
</del><ins>+            sum(
+                [
+                    record[&quot;unacknowledged&quot;] + record[&quot;acknowledged&quot;]
+                    for record in records
+                ]
+            ),
</ins><span class="cx">             sum([record[&quot;total&quot;] for record in records]),
</span><span class="cx">         )
</span><span class="cx">         if self.usesCurses:
</span><span class="lines">@@ -919,11 +921,103 @@
</span><span class="cx">         self.lastResult = records
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+class DirectoryStatsWindow(BaseWindow):
+    &quot;&quot;&quot;
+    Displays the status of the server's directory service calls
+    &quot;&quot;&quot;
+
+    help = &quot;display directory service stats&quot;
+    clientItem = &quot;directory&quot;
+    FORMAT_WIDTH = 89
+
+
+    def makeWindow(self, top=0, left=0):
+        nlines = len(defaultIfNone(self.readItem(&quot;directory&quot;), {}))
+        self.rowCount = nlines
+        self._createWindow(
+            &quot;Directory Service&quot;, 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 + &quot; {} ({})&quot;.format(len(records), self.iter,))
+
+        x = 1
+        y = 1
+        s1 = &quot; {:&lt;40}{:&gt;15}{:&gt;15}{:&gt;15} &quot;.format(
+            &quot;Method&quot;, &quot;Calls&quot;, &quot;Total&quot;, &quot;Average&quot;
+        )
+        s2 = &quot; {:&lt;40}{:&gt;15}{:&gt;15}{:&gt;15} &quot;.format(
+            &quot;&quot;, &quot;&quot;, &quot;(sec)&quot;, &quot;(sec)&quot;
+        )
+        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 = &quot; {:&lt;40}{:&gt;15d}{:&gt;15.1f}{:&gt;15.5f} &quot;.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 = &quot; {:&lt;40}{:&gt;15d}{:&gt;15.1f}{:&gt;15.5f} &quot;.format(
+            &quot;Total:&quot;,
+            overallCount,
+            overallTimeSpent,
+            safeDivision(overallTimeSpent, overallCount, 1.0)
+        )
+        if self.usesCurses:
+            self.window.hline(y, x, &quot;-&quot;, self.FORMAT_WIDTH - 2)
+            y += 1
+            self.window.addstr(y, x, s)
+        else:
+            print(s)
+        y += 1
+
+        if self.usesCurses:
+            self.window.refresh()
+
+
+
</ins><span class="cx"> Dashboard.registerWindow(SystemWindow, &quot;s&quot;)
</span><span class="cx"> Dashboard.registerWindow(RequestStatsWindow, &quot;r&quot;)
</span><span class="cx"> Dashboard.registerWindow(JobsWindow, &quot;j&quot;)
</span><span class="cx"> Dashboard.registerWindow(AssignmentsWindow, &quot;w&quot;)
</span><span class="cx"> Dashboard.registerWindow(HTTPSlotsWindow, &quot;c&quot;)
</span><ins>+Dashboard.registerWindow(DirectoryStatsWindow, &quot;d&quot;)
</ins><span class="cx"> Dashboard.registerWindow(HelpWindow, &quot;h&quot;)
</span><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareecalendarservertoolsgatewaypy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/gateway.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -25,11 +25,18 @@
</span><span class="cx"> import xml
</span><span class="cx"> 
</span><span class="cx"> from calendarserver.tools.cmdline import utilityMain
</span><del>-from calendarserver.tools.config import WRITABLE_CONFIG_KEYS, setKeyPath, getKeyPath, flattenDictionary, WritableConfig
</del><ins>+from calendarserver.tools.config import (
+    WRITABLE_CONFIG_KEYS, setKeyPath, getKeyPath, flattenDictionary,
+    WritableConfig
+)
</ins><span class="cx"> from calendarserver.tools.principals import (
</span><span class="cx">     getProxies, setProxies
</span><span class="cx"> )
</span><del>-from calendarserver.tools.purge import WorkerService, PurgeOldEventsService, DEFAULT_BATCH_SIZE, DEFAULT_RETAIN_DAYS
</del><ins>+from calendarserver.tools.purge import (
+    WorkerService, PurgeOldEventsService,
+    DEFAULT_BATCH_SIZE, DEFAULT_RETAIN_DAYS,
+    PrincipalPurgeWork
+)
</ins><span class="cx"> from calendarserver.tools.util import (
</span><span class="cx">     recordForPrincipalID, autoDisableMemcached
</span><span class="cx"> )
</span><span class="lines">@@ -412,14 +419,26 @@
</span><span class="cx">         self.respondWithRecordsOfTypes(self.dir, command, [typeName])
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+    @inlineCallbacks
</ins><span class="cx">     def command_deleteLocation(self, command):
</span><del>-        return self._delete(&quot;locations&quot;, command)
</del><ins>+        txn = self.store.newTransaction()
+        uid = command['GeneratedUID']
+        yield txn.enqueue(PrincipalPurgeWork, uid=uid)
+        yield txn.commit()
</ins><span class="cx"> 
</span><ins>+        yield self._delete(&quot;locations&quot;, command)
</ins><span class="cx"> 
</span><ins>+
+    @inlineCallbacks
</ins><span class="cx">     def command_deleteResource(self, command):
</span><del>-        return self._delete(&quot;resources&quot;, command)
</del><ins>+        txn = self.store.newTransaction()
+        uid = command['GeneratedUID']
+        yield txn.enqueue(PrincipalPurgeWork, uid=uid)
+        yield txn.commit()
</ins><span class="cx"> 
</span><ins>+        yield self._delete(&quot;resources&quot;, command)
</ins><span class="cx"> 
</span><ins>+
</ins><span class="cx">     def command_deleteAddress(self, command):
</span><span class="cx">         return self._delete(&quot;addresses&quot;, command)
</span><span class="cx"> 
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareecalendarservertoolsmanagetimezonespy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/managetimezones.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -105,7 +105,16 @@
</span><span class="cx">     for file in zonefiles:
</span><span class="cx">         parser.parse(os.path.join(zonedir, file))
</span><span class="cx"> 
</span><del>-    parser.generateZoneinfoFiles(os.path.join(rootdir, &quot;zoneinfo&quot;), startYear, endYear, filterzones=())
</del><ins>+    # Check for windows aliases
+    print(&quot;Downloading latest data from unicode.org&quot;)
+    path = &quot;http://unicode.org/repos/cldr/tags/latest/common/supplemental/windowsZones.xml&quot;
+    data = urllib.urlretrieve(path)
+    wpath = data[0]
+
+    # Generate the iCalendar data
+    print(&quot;Generating iCalendar data&quot;)
+    parser.generateZoneinfoFiles(os.path.join(rootdir, &quot;zoneinfo&quot;), startYear, endYear, windowsAliases=wpath, filterzones=())
+
</ins><span class="cx">     print(&quot;Copy new zoneinfo to destination: %s&quot; % (tzpath,))
</span><span class="cx">     z = FilePath(os.path.join(rootdir, &quot;zoneinfo&quot;))
</span><span class="cx">     tz = FilePath(tzpath)
</span><span class="lines">@@ -251,7 +260,8 @@
</span><span class="cx"> Description:
</span><span class="cx">     This utility will create, update, or list an XML timezone database
</span><span class="cx">     summary file, or refresh iCalendar timezone from IANA (Olson). It can
</span><del>-    also be used to update the server's own zoneinfo database from IANA.
</del><ins>+    also be used to update the server's own zoneinfo database from IANA. It
+    also creates aliases for the unicode.org windowsZones.
</ins><span class="cx"> 
</span><span class="cx"> &quot;&quot;&quot;)
</span><span class="cx"> 
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareecalendarservertoolsmigrate_verifypy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/migrate_verify.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -193,7 +193,7 @@
</span><span class="cx">                 self.badPaths.append(line)
</span><span class="cx"> 
</span><span class="cx">         # Remove any invalid GUIDs that actuall were valid
</span><del>-        invalidGUIDs = [guid for guid in invalidGUIDs if guid not in self.pathsByGUID]
</del><ins>+        invalidGUIDs = [pguid for pguid in invalidGUIDs if pguid not in self.pathsByGUID]
</ins><span class="cx"> 
</span><span class="cx">         self.output.write(&quot;\nTotal lines read: %d\n&quot; % (total,))
</span><span class="cx">         self.output.write(&quot;Total guids: valid: %d  invalid: %d  overall: %d\n&quot; % (
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareecalendarservertoolsresourcespy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/resources.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -31,7 +31,7 @@
</span><span class="cx"> from twisted.internet.defer import inlineCallbacks, returnValue
</span><span class="cx"> from txdav.who.directory import CalendarDirectoryRecordMixin
</span><span class="cx"> from twext.who.directory import DirectoryRecord as BaseDirectoryRecord
</span><del>-from txdav.who.opendirectory import RecordType
</del><ins>+from txdav.who.idirectory import RecordType
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> log = Logger()
</span><span class="lines">@@ -42,7 +42,7 @@
</span><span class="cx">     @inlineCallbacks
</span><span class="cx">     def doWork(self):
</span><span class="cx">         try:
</span><del>-            from twext.who.opendirectory import (
</del><ins>+            from txdav.who.opendirectory import (
</ins><span class="cx">                 DirectoryService as OpenDirectoryService
</span><span class="cx">             )
</span><span class="cx">         except ImportError:
</span><span class="lines">@@ -115,8 +115,8 @@
</span><span class="cx">     destRecords = []
</span><span class="cx"> 
</span><span class="cx">     for recordType in (
</span><del>-        sourceService.recordType.resource,
-        sourceService.recordType.location,
</del><ins>+        RecordType.resource,
+        RecordType.location,
</ins><span class="cx">     ):
</span><span class="cx">         records = yield sourceService.recordsWithRecordType(recordType)
</span><span class="cx">         for sourceRecord in records:
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareecalendarservertoolstesttest_gatewaypy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/test/test_gateway.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -20,12 +20,12 @@
</span><span class="cx"> import plistlib
</span><span class="cx"> import xml
</span><span class="cx"> 
</span><ins>+from twistedcaldav.stdconfig import config
</ins><span class="cx"> from twext.python.filepath import CachingFilePath as FilePath
</span><span class="cx"> from twisted.internet import reactor
</span><span class="cx"> from twisted.internet.defer import inlineCallbacks, Deferred, returnValue
</span><span class="cx"> from twisted.trial.unittest import TestCase
</span><span class="cx"> from twistedcaldav import memcacher
</span><del>-from twistedcaldav.config import config
</del><span class="cx"> from twistedcaldav.memcacheclient import ClientFactory
</span><span class="cx"> from twistedcaldav.test.util import CapturingProcessProtocol
</span><span class="cx"> from txdav.common.datastore.test.util import (
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareecalendarservertoolstesttest_principalspy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/test/test_principals.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -16,6 +16,7 @@
</span><span class="cx"> 
</span><span class="cx"> import os
</span><span class="cx"> 
</span><ins>+from twistedcaldav.stdconfig import config
</ins><span class="cx"> from calendarserver.tools.principals import (
</span><span class="cx">     parseCreationArgs, matchStrings,
</span><span class="cx">     recordForPrincipalID, getProxies, setProxies
</span><span class="lines">@@ -23,7 +24,6 @@
</span><span class="cx"> from twext.python.filepath import CachingFilePath as FilePath
</span><span class="cx"> from twisted.internet import reactor
</span><span class="cx"> from twisted.internet.defer import inlineCallbacks, Deferred, returnValue
</span><del>-from twistedcaldav.config import config
</del><span class="cx"> from twistedcaldav.test.util import (
</span><span class="cx">     TestCase, StoreTestCase, CapturingProcessProtocol, ErrorOutput
</span><span class="cx"> )
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareeconfauthgenerate_test_accountspy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/conf/auth/generate_test_accounts.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -220,7 +220,7 @@
</span><span class="cx">   &lt;short-name&gt;il1&lt;/short-name&gt;
</span><span class="cx">   &lt;full-name&gt;IL1&lt;/full-name&gt;
</span><span class="cx">   &lt;street-address&gt;1 Infinite Loop, Cupertino, CA 95014&lt;/street-address&gt;
</span><del>-  &lt;geographic-location&gt;37.331741,-122.030333&lt;/geographic-location&gt;
</del><ins>+  &lt;geographic-location&gt;geo:37.331741,-122.030333&lt;/geographic-location&gt;
</ins><span class="cx"> &lt;/record&gt;
</span><span class="cx"> &lt;record type=&quot;location&quot;&gt;
</span><span class="cx">   &lt;uid&gt;fantastic&lt;/uid&gt;
</span><span class="lines">@@ -233,7 +233,7 @@
</span><span class="cx">   &lt;short-name&gt;il2&lt;/short-name&gt;
</span><span class="cx">   &lt;full-name&gt;IL2&lt;/full-name&gt;
</span><span class="cx">   &lt;street-address&gt;2 Infinite Loop, Cupertino, CA 95014&lt;/street-address&gt;
</span><del>-  &lt;geographic-location&gt;37.332633,-122.030502&lt;/geographic-location&gt;
</del><ins>+  &lt;geographic-location&gt;geo:37.332633,-122.030502&lt;/geographic-location&gt;
</ins><span class="cx"> &lt;/record&gt;
</span><span class="cx"> &lt;record type=&quot;location&quot;&gt;
</span><span class="cx">   &lt;uid&gt;delegatedroom&lt;/uid&gt;
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareeconfcaldavdappleplist"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/conf/caldavd-apple.plist (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -528,19 +528,29 @@
</span><span class="cx">     &lt;!-- Directory searching --&gt;
</span><span class="cx">     &lt;key&gt;DirectoryAddressBook&lt;/key&gt;
</span><span class="cx">     &lt;dict&gt;
</span><del>-        &lt;key&gt;Enabled&lt;/key&gt;
-        &lt;true/&gt;
-        &lt;key&gt;params&lt;/key&gt;
-        &lt;dict&gt;
-            &lt;key&gt;queryUserRecords&lt;/key&gt;
-            &lt;false/&gt;
-            &lt;key&gt;queryPeopleRecords&lt;/key&gt;
-            &lt;false/&gt;
-        &lt;/dict&gt;
</del><ins>+            &lt;key&gt;Enabled&lt;/key&gt;
+            &lt;true/&gt;
+      &lt;key&gt;params&lt;/key&gt;
+      &lt;dict&gt;
+        &lt;key&gt;queryUserRecords&lt;/key&gt;
+        &lt;false/&gt;
+        &lt;key&gt;queryPeopleRecords&lt;/key&gt;
+        &lt;false/&gt;
+      &lt;/dict&gt;
</ins><span class="cx">     &lt;/dict&gt;
</span><ins>+
</ins><span class="cx">     &lt;key&gt;EnableSearchAddressBook&lt;/key&gt;
</span><span class="cx">     &lt;false/&gt;
</span><span class="cx"> 
</span><ins>+
+    &lt;!-- Automatic purging of data for principals no longer in the directory
+      --&gt;
+    &lt;key&gt;AutomaticPurging&lt;/key&gt;
+    &lt;dict&gt;
+      &lt;key&gt;Enabled&lt;/key&gt;
+      &lt;true/&gt;
+    &lt;/dict&gt;
+
</ins><span class="cx">     &lt;key&gt;Includes&lt;/key&gt;
</span><span class="cx">     &lt;array&gt;
</span><span class="cx">         &lt;string&gt;/Library/Preferences/com.apple.servermgr_calendar.plist&lt;/string&gt;
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareecontribtoolsmonitoranalysispy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/contrib/tools/monitoranalysis.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -106,7 +106,7 @@
</span><span class="cx">     y2 = []
</span><span class="cx">     x3 = []
</span><span class="cx">     y3 = []
</span><del>-    for datetime, reqs, resp, lq, _ignore_cpu in data:
</del><ins>+    for _ignore_dt, reqs, resp, lq, _ignore_cpu in data:
</ins><span class="cx">         if lq == 0:
</span><span class="cx">             x1.append(reqs)
</span><span class="cx">             y1.append(resp)
</span><span class="lines">@@ -134,7 +134,7 @@
</span><span class="cx"> 
</span><span class="cx">     x = [[], [], [], []]
</span><span class="cx">     y = [[], [], [], []]
</span><del>-    for datetime, reqs, resp, _ignore_lq, cpu in data:
</del><ins>+    for _ignore_dt, reqs, resp, _ignore_lq, cpu in data:
</ins><span class="cx">         if cpu &gt; 75:
</span><span class="cx">             x[0].append(reqs)
</span><span class="cx">             y[0].append(resp)
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareerequirementsdevtxt"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/requirements-dev.txt (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -7,4 +7,4 @@
</span><span class="cx"> mockldap
</span><span class="cx"> q
</span><span class="cx"> --editable svn+http://svn.calendarserver.org/repository/calendarserver/CalDAVClientLibrary/trunk@13420#egg=CalDAVClientLibrary
</span><del>---editable svn+http://svn.calendarserver.org/repository/calendarserver/CalDAVTester/trunk@13547#egg=CalDAVTester
</del><ins>+--editable svn+http://svn.calendarserver.org/repository/calendarserver/CalDAVTester/trunk@13624#egg=CalDAVTester
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareerequirementsstabletxt"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/requirements-stable.txt (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -5,9 +5,9 @@
</span><span class="cx"> # For CalendarServer development, don't try to get these projects from PyPI; use svn.
</span><span class="cx"> 
</span><span class="cx"> -e .
</span><del>--e svn+http://svn.calendarserver.org/repository/calendarserver/twext/trunk@13580#egg=twextpy
</del><ins>+-e svn+http://svn.calendarserver.org/repository/calendarserver/twext/trunk@13610#egg=twextpy
</ins><span class="cx"> -e svn+http://svn.calendarserver.org/repository/calendarserver/PyKerberos/trunk@13420#egg=kerberos
</span><del>--e svn+http://svn.calendarserver.org/repository/calendarserver/PyCalendar/trunk@13576#egg=pycalendar
</del><ins>+-e svn+http://svn.calendarserver.org/repository/calendarserver/PyCalendar/trunk@13621#egg=pycalendar
</ins><span class="cx"> 
</span><span class="cx"> # Specify specific versions of our dependencies so that we're all testing the same config.
</span><span class="cx"> 
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareesupport_cache_deps"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/support/_cache_deps (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -76,7 +76,7 @@
</span><span class="cx"> rev=&quot;$(grep egg=CalDAVTester &quot;${wd}/requirements-dev.txt&quot; | sed 's|^.*svn+[^@#]*@\([0-9]*\).*$|\1|')&quot;;
</span><span class="cx"> 
</span><span class="cx"> svn export -r &quot;${rev}&quot; &quot;${url}@${rev}&quot; &quot;${wd}/CalDAVTester&quot;;
</span><del>-tar -C &quot;${wd}&quot; -cvzf &quot;${wd}/CalDAVTester.tgz&quot; CalDAVTester; 
</del><ins>+tar -C &quot;${wd}&quot; -cvzf &quot;${wd}/CalDAVTester.tgz&quot; CalDAVTester;
</ins><span class="cx"> rm -r CalDAVTester;
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="lines">@@ -85,7 +85,7 @@
</span><span class="cx"> # Remove .exe files from arvhives
</span><span class="cx"> #
</span><span class="cx"> 
</span><del>-for archive in $(find &quot;${wd}/.develop&quot; -type f -name '*.tgz'); do
</del><ins>+for archive in $(find &quot;${wd}/.develop&quot; -type f -name '*.tgz' -or -name '*.tar.gz'); do
</ins><span class="cx">   if tar -tvzf &quot;${archive}&quot; &quot;*.exe&quot; &gt; /dev/null 2&gt;&amp;1; then
</span><span class="cx">     ruler &quot;Removing binaries from ${archive}&quot;;
</span><span class="cx">     tmp=&quot;$(mktemp -t ccsXXXXX)&quot;;
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavdirectoryutilpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/directory/util.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -92,7 +92,11 @@
</span><span class="cx">     &quot;&quot;&quot;
</span><span class="cx">     transaction = getattr(request, TRANSACTION_KEY, None)
</span><span class="cx">     if transaction is None:
</span><del>-        transaction = newStore.newTransaction(repr(request))
</del><ins>+        if hasattr(request, &quot;authzUser&quot;) 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)
</ins><span class="cx">         def abortIfUncommitted(request, response):
</span><span class="cx">             try:
</span><span class="cx">                 # TODO: missing 'yield' here.  For formal correctness as per
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavdirectorybackedaddressbookpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/directorybackedaddressbook.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -182,48 +182,72 @@
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         propNames, expression = expressionFromABFilter(
</span><del>-            addressBookFilter, vcardPropToRecordFieldMap, vCardConstantProperties
</del><ins>+            addressBookFilter, vcardPropToRecordFieldMap, vCardConstantProperties,
</ins><span class="cx">         )
</span><span class="cx"> 
</span><span class="cx">         if expression:
</span><del>-            if defaultKind and &quot;KIND&quot; not in propNames:
-                defaultRecordExpression = MatchExpression(
-                    FieldName.recordType,
-                    vCardKindToRecordTypeMap[defaultKind],
-                    MatchType.equals
-                )
-                if expression is True:
-                    expression = defaultRecordExpression
-                else:
-                    expression = CompoundExpression(
-                        (expression, defaultRecordExpression,),
-                        Operand.AND
</del><ins>+
+            queryRecordType = None
+            if &quot;KIND&quot; 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,
</ins><span class="cx">                     )
</span><del>-            elif expression is True: # True means all records
-                allowedRecordTypes = set(self.directory.recordTypes()) &amp; set(recordTypeToVCardKindMap.keys())
-                expression = CompoundExpression(
-                    [
-                        MatchExpression(FieldName.recordType, recordType, MatchType.equals)
-                            for recordType in allowedRecordTypes
-                    ], Operand.OR
-                )
</del><span class="cx"> 
</span><ins>+                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
+
</ins><span class="cx">             maxRecords = int(maxResults * 1.2)
</span><span class="cx"> 
</span><span class="cx">             # keep trying query till we get results based on filter.  Especially when doing &quot;all results&quot; query
</span><span class="cx">             while True:
</span><ins>+                queryLimited = False
</ins><span class="cx"> 
</span><span class="cx">                 log.debug(&quot;doAddressBookDirectoryQuery: expression={expression!r}, propNames={propNames}&quot;, expression=expression, propNames=propNames)
</span><span class="cx"> 
</span><del>-                records = yield self.directory.recordsFromExpression(expression)
-                log.debug(&quot;doAddressBookDirectoryQuery: #records={n}, records={records!r}&quot;, n=len(records), records=records)
-                queryLimited = False
</del><ins>+                allRecords = set()
+                if fields:
+                    records = yield self.directory.recordsMatchingFields(fields, operand, queryRecordType)
+                    log.debug(&quot;doAddressBookDirectoryQuery: recordsMatchingFields({f}, {o}): #records={n}, records={records!r}&quot;,
+                              f=fields, o=operand, n=len(records), records=records)
+                    allRecords = set(records)
+                else:
+                    recordTypes = set([queryRecordType]) if queryRecordType else set(self.directory.recordTypes()) &amp; set(recordTypeToVCardKindMap.keys())
+                    for recordType in recordTypes:
+                        records = yield self.directory.recordsWithRecordType(recordType)
+                        log.debug(&quot;doAddressBookDirectoryQuery: #records={n}, records={records!r}&quot;, n=len(records), records=records)
+                        allRecords |= set(records)
</ins><span class="cx"> 
</span><del>-                vCardsResults = [(yield ABDirectoryQueryResult(self).generate(record)) for record in records]
</del><ins>+                vCardsResults = [(yield ABDirectoryQueryResult(self).generate(record)) for record in allRecords]
</ins><span class="cx"> 
</span><span class="cx">                 filteredResults = set()
</span><span class="cx">                 for vCardResult in vCardsResults:
</span><span class="cx">                     if addressBookFilter.match(vCardResult.vCard()):
</span><ins>+                        log.debug(&quot;doAddressBookDirectoryQuery: vCard did match filter:\n{vcard}&quot;, vcard=vCardResult.vCard())
</ins><span class="cx">                         filteredResults.add(vCardResult)
</span><span class="cx">                     else:
</span><span class="cx">                         log.debug(&quot;doAddressBookDirectoryQuery: vCard did not match filter:\n{vcard}&quot;, vcard=vCardResult.vCard())
</span><span class="lines">@@ -266,9 +290,9 @@
</span><span class="cx">     propertyNames = []
</span><span class="cx">     if addressBookQuery.qname() == (&quot;DAV:&quot;, &quot;prop&quot;):
</span><span class="cx"> 
</span><del>-        for property in addressBookQuery.children:
-            if isinstance(property, carddavxml.AddressData):
-                for addressProperty in property.children:
</del><ins>+        for prop in addressBookQuery.children:
+            if isinstance(prop, carddavxml.AddressData):
+                for addressProperty in prop.children:
</ins><span class="cx">                     if isinstance(addressProperty, carddavxml.Property):
</span><span class="cx">                         propertyNames.append(addressProperty.attributes[&quot;name&quot;])
</span><span class="cx"> 
</span><span class="lines">@@ -360,7 +384,7 @@
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">             def definedExpression(defined, allOf):
</span><del>-                if constant or propFilter.filter_name in (&quot;N&quot; , &quot;FN&quot;, &quot;UID&quot;, &quot;SOURCE&quot;, &quot;KIND&quot;,):
</del><ins>+                if constant or propFilter.filter_name in (&quot;N&quot; , &quot;FN&quot;, &quot;UID&quot;, &quot;KIND&quot;,):
</ins><span class="cx">                     return defined  # all records have this property so no records do not have it
</span><span class="cx">                 else:
</span><span class="cx">                     # FIXME: The startsWith expression below, which works with LDAP and OD. is not currently supported
</span><span class="lines">@@ -386,11 +410,11 @@
</span><span class="cx">                 params = vCardPropToParamMap.get(propFilter.filter_name.upper())
</span><span class="cx">                 defined = params and paramFilterElement.filter_name.upper() in params
</span><span class="cx"> 
</span><del>-                #defined test
</del><ins>+                # defined test
</ins><span class="cx">                 if defined != paramFilterElement.defined:
</span><span class="cx">                     return False
</span><span class="cx"> 
</span><del>-                #parameter value text match
</del><ins>+                # parameter value text match
</ins><span class="cx">                 if defined and paramFilterElement.filters:
</span><span class="cx">                     paramValues = params[paramFilterElement.filter_name.upper()]
</span><span class="cx">                     if paramValues and paramFilterElement.filters[0].text.upper() not in paramValues:
</span><span class="lines">@@ -401,10 +425,10 @@
</span><span class="cx"> 
</span><span class="cx">             def textMatchElementExpression(propFilterAllOf, textMatchElement):
</span><span class="cx"> 
</span><del>-                # pre process text match strings for ds query
</del><ins>+                # preprocess text match strings for ds query
</ins><span class="cx">                 def getMatchStrings(propFilter, matchString):
</span><span class="cx"> 
</span><del>-                    if propFilter.filter_name in (&quot;REV&quot; , &quot;BDAY&quot;,):
</del><ins>+                    if propFilter.filter_name in (&quot;REV&quot;, &quot;BDAY&quot;,):
</ins><span class="cx">                         rawString = matchString
</span><span class="cx">                         matchString = &quot;&quot;
</span><span class="cx">                         for c in rawString:
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavicalpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/ical.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -1063,11 +1063,16 @@
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="cx">         result = set()
</span><span class="cx"> 
</span><del>-        for property in self.properties():
-            tzid = property.parameterValue(&quot;TZID&quot;)
-            if tzid is not None:
-                result.add(tzid)
-                break
</del><ins>+        if self.name() == &quot;VCALENDAR&quot;:
+            for component in self.subcomponents():
+                if component.name() != &quot;VTIMEZONE&quot;:
+                    result.update(component.timezoneIDs())
+        else:
+            for property in self.properties():
+                tzid = property.parameterValue(&quot;TZID&quot;)
+                if tzid is not None:
+                    result.add(tzid)
+                    break
</ins><span class="cx"> 
</span><span class="cx">         return result
</span><span class="cx"> 
</span><span class="lines">@@ -2032,6 +2037,12 @@
</span><span class="cx">                     &quot;Timezone {0} is not referenced by any non-timezone component&quot;.format(timezone,)
</span><span class="cx">                 )
</span><span class="cx"> 
</span><ins>+        # 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)
+
</ins><span class="cx">         # Control character check - only HTAB, CR, LF allowed for characters in the range 0x00-0x1F
</span><span class="cx">         s = str(self)
</span><span class="cx">         if len(s.translate(None, &quot;\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&quot;)) != len(s):
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavmemcacheclientpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/memcacheclient.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -1417,7 +1417,6 @@
</span><span class="cx">             print(&quot;FAIL&quot;, end=&quot;&quot;)
</span><span class="cx">         else:
</span><span class="cx">             print(&quot;OK&quot;, end=&quot;&quot;)
</span><del>-        import pickle
</del><span class="cx">         s = pickle.loads('V\\u4f1a\np0\n.')
</span><span class="cx">         try:
</span><span class="cx">             x = mc.set((s*SERVER_MAX_KEY_LENGTH).encode('utf-8'), 1)
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavresourcepy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/resource.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -858,7 +858,7 @@
</span><span class="cx">         Return the DAV:owner property value (MUST be a DAV:href or None).
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="cx"> 
</span><del>-        if hasattr(self, &quot;_newStoreObject&quot;):
</del><ins>+        if getattr(self, &quot;_newStoreObject&quot;, None) is not None:
</ins><span class="cx">             if not hasattr(self._newStoreObject, &quot;ownerHome&quot;):
</span><span class="cx">                 home = self._newStoreObject.parentCollection().ownerHome()
</span><span class="cx">             else:
</span><span class="lines">@@ -2635,11 +2635,16 @@
</span><span class="cx">         if config.EnableProxyPrincipals:
</span><span class="cx">             # Server may be read only
</span><span class="cx">             if config.EnableReadOnlyServer:
</span><del>-                rw_proxy_privs = (
</del><ins>+                ro_proxy_privs = rw_proxy_privs = (
</ins><span class="cx">                     element.Privilege(element.Read()),
</span><span class="cx">                     element.Privilege(element.ReadCurrentUserPrivilegeSet()),
</span><span class="cx">                 )
</span><span class="cx">             else:
</span><ins>+                ro_proxy_privs = (
+                    element.Privilege(element.Read()),
+                    element.Privilege(element.ReadCurrentUserPrivilegeSet()),
+                    element.Privilege(element.WriteProperties()),
+                )
</ins><span class="cx">                 rw_proxy_privs = (
</span><span class="cx">                     element.Privilege(element.Read()),
</span><span class="cx">                     element.Privilege(element.ReadCurrentUserPrivilegeSet()),
</span><span class="lines">@@ -2650,10 +2655,7 @@
</span><span class="cx">                 # DAV:read/DAV:read-current-user-privilege-set access for this principal's calendar-proxy-read users.
</span><span class="cx">                 element.ACE(
</span><span class="cx">                     element.Principal(element.HRef(joinURL(myPrincipal.principalURL(), &quot;calendar-proxy-read/&quot;))),
</span><del>-                    element.Grant(
-                        element.Privilege(element.Read()),
-                        element.Privilege(element.ReadCurrentUserPrivilegeSet()),
-                    ),
</del><ins>+                    element.Grant(*ro_proxy_privs),
</ins><span class="cx">                     element.Protected(),
</span><span class="cx">                     TwistedACLInheritable(),
</span><span class="cx">                 ),
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavscheduling_storecaldavresourcepy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/scheduling_store/caldav/resource.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -419,17 +419,6 @@
</span><span class="cx">         originator = (yield self.loadOriginatorFromRequestDetails(request))
</span><span class="cx">         recipients = self.loadRecipientsFromCalendarData(calendar)
</span><span class="cx"> 
</span><del>-        # 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
-
</del><span class="cx">         # Log extended item
</span><span class="cx">         if not hasattr(request, &quot;extendedLogItems&quot;):
</span><span class="cx">             request.extendedLogItems = {}
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavsharingpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/sharing.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -383,6 +383,7 @@
</span><span class="cx">                     element.Grant(
</span><span class="cx">                         element.Privilege(element.Read()),
</span><span class="cx">                         element.Privilege(element.ReadCurrentUserPrivilegeSet()),
</span><ins>+                        element.Privilege(element.WriteProperties()),
</ins><span class="cx">                     ),
</span><span class="cx">                     element.Protected(),
</span><span class="cx">                     TwistedACLInheritable(),
</span><span class="lines">@@ -557,6 +558,13 @@
</span><span class="cx"> 
</span><span class="cx">     @inlineCallbacks
</span><span class="cx">     def _xmlHandleInvite(self, request, docroot):
</span><ins>+        # Sharing must be enabled for this collection
+        if not self.canBeShared():
+            raise HTTPError(ErrorResponse(
+                responsecode.FORBIDDEN,
+                (customxml.calendarserver_namespace, &quot;valid-request&quot;),
+                &quot;Sharing not supported on this resource&quot;,
+            ))
</ins><span class="cx">         yield self.authorize(request, (element.Read(), element.Write()))
</span><span class="cx">         result = (yield self._handleInvite(request, docroot))
</span><span class="cx">         returnValue(result)
</span><span class="lines">@@ -702,6 +710,13 @@
</span><span class="cx"> 
</span><span class="cx">     @inlineCallbacks
</span><span class="cx">     def _xmlHandleInviteReply(self, request, docroot):
</span><ins>+        # Sharing must be enabled for this collection
+        if not self.canShare():
+            raise HTTPError(ErrorResponse(
+                responsecode.FORBIDDEN,
+                (customxml.calendarserver_namespace, &quot;valid-request&quot;),
+                &quot;Sharing not supported on this resource&quot;,
+            ))
</ins><span class="cx">         yield self.authorize(request, (element.Read(), element.Write()))
</span><span class="cx">         result = (yield self._handleInviteReply(request, docroot))
</span><span class="cx">         returnValue(result)
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavstdconfigpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/stdconfig.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -280,9 +280,9 @@
</span><span class="cx"> 
</span><span class="cx">     &quot;UseDatabase&quot;: True, # True: database; False: files
</span><span class="cx"> 
</span><del>-    &quot;TransactionTimeoutSeconds&quot;: 0, # Timeout transactions that take longer than
</del><ins>+    &quot;TransactionTimeoutSeconds&quot;: 300, # Timeout transactions that take longer than
</ins><span class="cx">                               # the specified number of seconds. Zero means
</span><del>-                              # no timeouts
</del><ins>+                              # no timeouts. 5 minute default.
</ins><span class="cx"> 
</span><span class="cx">     &quot;DBType&quot;: &quot;&quot;, # 2 possible values: empty, meaning 'spawn postgres
</span><span class="cx">                            # yourself', or 'postgres', meaning 'connect to a
</span><span class="lines">@@ -606,9 +606,31 @@
</span><span class="cx">             &quot;IgnorePerUserProperties&quot; : [
</span><span class="cx">                 &quot;X-APPLE-STRUCTURED-LOCATION&quot;,
</span><span class="cx">             ],
</span><ins>+            &quot;CollectionProperties&quot;: {
+                &quot;Shadowable&quot;: [
+                    &quot;{urn:ietf:params:xml:ns:caldav}calendar-description&quot;,
+                ],
+                &quot;ProxyOverride&quot;: [
+                    &quot;{urn:ietf:params:xml:ns:caldav}calendar-description&quot;,
+                    &quot;{com.apple.ical:}calendarcolor&quot;,
+                    &quot;{http://apple.com/ns/ical/}calendar-color&quot;,
+                    &quot;{http://apple.com/ns/ical/}calendar-order&quot;,
+                ],
+                &quot;Global&quot;: [
+                ],
+            },
</ins><span class="cx">         },
</span><span class="cx">         &quot;AddressBooks&quot; : {
</span><span class="cx">             &quot;Enabled&quot;         : False, # Address Books on/off switch
</span><ins>+            &quot;CollectionProperties&quot;: {
+                &quot;Shadowable&quot;: [
+                    &quot;{urn:ietf:params:xml:ns:carddav}addressbook-description&quot;,
+                ],
+                &quot;ProxyOverride&quot;: [
+                ],
+                &quot;Global&quot;: [
+                ],
+            },
</ins><span class="cx">         },
</span><span class="cx">     },
</span><span class="cx"> 
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavstorebridgepy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/storebridge.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -60,7 +60,7 @@
</span><span class="cx">     InvalidPerUserDataMerge,
</span><span class="cx">     AttendeeAllowedError, ResourceDeletedError, InvalidAttachmentOperation,
</span><span class="cx">     ShareeAllowedError, DuplicatePrivateCommentsError, InvalidSplit
</span><del>-, AttachmentSizeTooLarge)
</del><ins>+, AttachmentSizeTooLarge, UnknownTimezone)
</ins><span class="cx"> from txdav.carddav.iaddressbookstore import (
</span><span class="cx">     KindChangeNotAllowedError, GroupWithUnsharedAddressNotAllowedError
</span><span class="cx"> )
</span><span class="lines">@@ -1318,6 +1318,10 @@
</span><span class="cx">         returnValue(result)
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+    def canBeShared(self):
+        return config.Sharing.Enabled and config.Sharing.Calendars.Enabled
+
+
</ins><span class="cx">     @inlineCallbacks
</span><span class="cx">     def storeResourceData(self, newchild, component, returnChangedData=False):
</span><span class="cx"> 
</span><span class="lines">@@ -1684,37 +1688,38 @@
</span><span class="cx">             proxyprivs.remove(davxml.Privilege(davxml.ReadACL()))
</span><span class="cx"> 
</span><span class="cx">             principal = yield self.principalForUID(invite.shareeUID)
</span><del>-            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:
</del><ins>+            if principal is not None:
</ins><span class="cx">                 aces += (
</span><del>-                    # DAV:read/DAV:read-current-user-privilege-set access for this principal's calendar-proxy-read users.
</del><ins>+                    # Inheritable specific access for the resource's associated principal.
</ins><span class="cx">                     davxml.ACE(
</span><del>-                        davxml.Principal(davxml.HRef(joinURL(principal.principalURL(), &quot;calendar-proxy-read/&quot;))),
-                        davxml.Grant(
-                            davxml.Privilege(davxml.Read()),
-                            davxml.Privilege(davxml.ReadCurrentUserPrivilegeSet()),
-                        ),
</del><ins>+                        davxml.Principal(davxml.HRef(principal.principalURL())),
+                        davxml.Grant(*userprivs),
</ins><span class="cx">                         davxml.Protected(),
</span><span class="cx">                         TwistedACLInheritable(),
</span><span class="cx">                     ),
</span><del>-                    # 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(), &quot;calendar-proxy-write/&quot;))),
-                        davxml.Grant(*proxyprivs),
-                        davxml.Protected(),
-                        TwistedACLInheritable(),
-                    ),
</del><span class="cx">                 )
</span><span class="cx"> 
</span><ins>+                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(), &quot;calendar-proxy-read/&quot;))),
+                            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(), &quot;calendar-proxy-write/&quot;))),
+                            davxml.Grant(*proxyprivs),
+                            davxml.Protected(),
+                            TwistedACLInheritable(),
+                        ),
+                    )
+
</ins><span class="cx">         returnValue(aces)
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="lines">@@ -2729,6 +2734,7 @@
</span><span class="cx">         ShareeAllowedError: (_CommonObjectResource._storeExceptionError, (calendarserver_namespace, &quot;sharee-privilege-needed&quot;,),),
</span><span class="cx">         DuplicatePrivateCommentsError: (_CommonObjectResource._storeExceptionError, (calendarserver_namespace, &quot;no-duplicate-private-comments&quot;,),),
</span><span class="cx">         LockTimeout: (_CommonObjectResource._storeExceptionUnavailable, &quot;Lock timed out.&quot;,),
</span><ins>+        UnknownTimezone: (_CommonObjectResource._storeExceptionError, (caldav_namespace, &quot;valid-timezone&quot;),),
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     StoreMoveExceptionsErrors = {
</span><span class="lines">@@ -2823,6 +2829,10 @@
</span><span class="cx">         returnValue(response)
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+    def canBeShared(self):
+        return False
+
+
</ins><span class="cx">     @inlineCallbacks
</span><span class="cx">     def http_PUT(self, request):
</span><span class="cx"> 
</span><span class="lines">@@ -2873,17 +2883,6 @@
</span><span class="cx">                     &quot;Can't parse calendar data: %s&quot; % (str(e),)
</span><span class="cx">                 ))
</span><span class="cx"> 
</span><del>-            # 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
-
</del><span class="cx">             try:
</span><span class="cx">                 response = (yield self.storeComponent(component, smart_merge=schedule_tag_match))
</span><span class="cx">             except ResourceDeletedError:
</span><span class="lines">@@ -3296,6 +3295,10 @@
</span><span class="cx">         return carddavxml.AddressData
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+    def canBeShared(self):
+        return config.Sharing.Enabled and config.Sharing.AddressBooks.Enabled
+
+
</ins><span class="cx">     @inlineCallbacks
</span><span class="cx">     def storeResourceData(self, newchild, component, returnChangedData=False):
</span><span class="cx"> 
</span><span class="lines">@@ -3566,6 +3569,10 @@
</span><span class="cx">         returnValue(response)
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+    def canBeShared(self):
+        return config.Sharing.Enabled and config.Sharing.AddressBooks.Enabled
+
+
</ins><span class="cx">     @inlineCallbacks
</span><span class="cx">     def http_PUT(self, request):
</span><span class="cx"> 
</span><span class="lines">@@ -3606,17 +3613,6 @@
</span><span class="cx">                     &quot;Could not parse vCard&quot;,
</span><span class="cx">                 ))
</span><span class="cx"> 
</span><del>-            # 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
-
</del><span class="cx">             try:
</span><span class="cx">                 response = (yield self.storeComponent(component))
</span><span class="cx">             except ResourceDeletedError:
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavtesttest_icalendarpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/test/test_icalendar.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -21,16 +21,17 @@
</span><span class="cx"> from twisted.trial.unittest import SkipTest
</span><span class="cx"> from twisted.internet.defer import inlineCallbacks, succeed
</span><span class="cx"> 
</span><ins>+from twistedcaldav.dateops import normalizeForExpand
</ins><span class="cx"> from twistedcaldav.ical import Component, Property, InvalidICalendarDataError, \
</span><span class="cx">     normalizeCUAddress, normalize_iCalStr
</span><ins>+from twistedcaldav.ical import iCalendarProductID
</ins><span class="cx"> from twistedcaldav.instance import InvalidOverriddenInstanceError
</span><span class="cx"> import twistedcaldav.test.util
</span><ins>+from twistedcaldav.timezones import TimezoneException
</ins><span class="cx"> 
</span><span class="cx"> from pycalendar.datetime import DateTime
</span><span class="cx"> from pycalendar.timezone import Timezone
</span><del>-from twistedcaldav.ical import iCalendarProductID
</del><span class="cx"> from pycalendar.duration import Duration
</span><del>-from twistedcaldav.dateops import normalizeForExpand
</del><span class="cx"> from pycalendar.value import Value
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="lines">@@ -654,9 +655,27 @@
</span><span class="cx">             self.assertEqual(end, DateTime(2004, 11, 27))
</span><span class="cx">             break
</span><span class="cx"> 
</span><del>-    # test_component_timerange.todo = &quot;recurrence expansion should give us no end date here&quot;
</del><span class="cx"> 
</span><ins>+    def test_component_timezone_validate(self):
+        &quot;&quot;&quot;
+        CalDAV resource validation.
+        &quot;&quot;&quot;
+        data = &quot;&quot;&quot;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
+&quot;&quot;&quot;
+        calendar = Component.fromString(data)
+        self.failUnlessRaises(TimezoneException, calendar.validCalendarForCalDAV, False)
</ins><span class="cx"> 
</span><ins>+
</ins><span class="cx">     def test_parse_date(self):
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="cx">         parse_date()
</span><span class="lines">@@ -5235,8 +5254,8 @@
</span><span class="cx"> 
</span><span class="cx">         for title, calendar, tests in data:
</span><span class="cx">             ical = Component.fromString(calendar)
</span><del>-            rids = set([rid for rid, result in tests])
-            expected_results = set([rid for rid, result in tests if result == True])
</del><ins>+            rids = set([trid for trid, _ignore_tresult in tests])
+            expected_results = set([trid for trid, tresult in tests if tresult == True])
</ins><span class="cx">             actual_results = ical.validInstances(rids)
</span><span class="cx">             self.assertEqual(actual_results, expected_results, &quot;Failed comparison: %s %s&quot; % (title, actual_results,))
</span><span class="cx"> 
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavtesttest_resourcepy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/test/test_resource.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -160,6 +160,26 @@
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     @inlineCallbacks
</span><ins>+    def test_isOwnerYes_noStoreObject(self):
+        &quot;&quot;&quot;
+        L{CalDAVResource.isOwner} returns C{True} for authenticated requests
+        with a principal that matches the resource's owner.
+        &quot;&quot;&quot;
+        site = None
+        request = SimpleRequest(site, &quot;GET&quot;, &quot;/not/a/real/url/&quot;)
+        request.authzUser = request.authnUser = StubPrincipal(&quot;/yes-i-am-the-owner/&quot;)
+        parent = CalDAVResource()
+        parent.owner = lambda igreq: HRef(&quot;/yes-i-am-the-owner/&quot;)
+        rsrc = CalDAVResource()
+        rsrc._newStoreObject = None
+
+        request._rememberResource(parent, &quot;/not/a/real/&quot;)
+        request._rememberResource(rsrc, &quot;/not/a/real/url/&quot;)
+
+        self.assertEquals((yield rsrc.isOwner(request)), True)
+
+
+    @inlineCallbacks
</ins><span class="cx">     def test_isOwnerAdmin(self):
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="cx">         L{CalDAVResource.isOwner} returns C{True} for authenticated requests
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavtimezonestdservicepy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/timezonestdservice.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -663,7 +663,7 @@
</span><span class="cx"> 
</span><span class="cx">         try:
</span><span class="cx">             for alias in aliases.splitlines():
</span><del>-                alias_from, alias_to = alias.split()
</del><ins>+                alias_from, alias_to = alias.split(&quot;\t&quot;)
</ins><span class="cx">                 tzinfo = self.timezones.get(alias_to)
</span><span class="cx">                 if tzinfo:
</span><span class="cx">                     if alias_from != alias_to:
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavupgradepy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/upgrade.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -775,7 +775,7 @@
</span><span class="cx"> 
</span><span class="cx">     if didUpdate:
</span><span class="cx">         property = caldavxml.CalendarFreeBusySet(
</span><del>-            *[element.HRef(href) for href in fbset]
</del><ins>+            *[element.HRef(fbhref) for fbhref in fbset]
</ins><span class="cx">         )
</span><span class="cx">         value = compress(property.toxml())
</span><span class="cx">         returnValue(value)
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoAUSCentralStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoAUSCentralStandardTimeics"></a>
<div class="copfile"><h4>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) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,48 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoAUSEasternStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoAUSEasternStandardTimeics"></a>
<div class="copfile"><h4>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) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,124 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoAfghanistanStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoAfghanistanStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Afghanistan Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Afghanistan Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,23 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoAlaskanStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoAlaskanStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Alaskan Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Alaskan Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,137 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoArabStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoArabStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Arab Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Arab Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,16 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoArabianStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoArabianStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Arabian Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Arabian Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,16 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoArabicStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoArabicStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Arabic Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Arabic Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,73 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoArgentinaStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoArgentinaStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Argentina Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Argentina Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,143 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoAtlanticStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoAtlanticStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Atlantic Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Atlantic Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,221 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoAzerbaijanStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoAzerbaijanStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Azerbaijan Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Azerbaijan Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,116 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoAzoresStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoAzoresStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Azores Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Azores Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,266 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoBahiaStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoBahiaStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Bahia Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Bahia Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,136 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoBangladeshStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoBangladeshStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Bangladesh Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Bangladesh Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,72 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoCanadaCentralStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoCanadaCentralStandardTimeics"></a>
<div class="copfile"><h4>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) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,100 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoCapeVerdeStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoCapeVerdeStandardTimeics"></a>
<div class="copfile"><h4>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) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,37 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoCaucasusStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoCaucasusStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Caucasus Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Caucasus Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,117 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoCenAustraliaStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoCenAustraliaStandardTimeics"></a>
<div class="copfile"><h4>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) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,112 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoCentralAmericaStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoCentralAmericaStandardTimeics"></a>
<div class="copfile"><h4>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) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,36 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoCentralAsiaStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoCentralAsiaStandardTimeics"></a>
<div class="copfile"><h4>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) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,101 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoCentralBrazilianStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoCentralBrazilianStandardTimeics"></a>
<div class="copfile"><h4>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) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,183 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoCentralEuropeStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoCentralEuropeStandardTimeics"></a>
<div class="copfile"><h4>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) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,118 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoCentralEuropeanStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoCentralEuropeanStandardTimeics"></a>
<div class="copfile"><h4>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) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,190 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoCentralPacificStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoCentralPacificStandardTimeics"></a>
<div class="copfile"><h4>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) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,16 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoCentralStandardTimeMexicoicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoCentralStandardTimeMexicoics"></a>
<div class="copfile"><h4>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) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,96 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoCentralStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoCentralStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Central Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,177 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoChinaStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoChinaStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/China Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/China Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,54 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoDatelineStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoDatelineStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Dateline Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Dateline Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,16 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoEAfricaStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoEAfricaStandardTimeics"></a>
<div class="copfile"><h4>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) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,37 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoEAustraliaStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoEAustraliaStandardTimeics"></a>
<div class="copfile"><h4>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) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,64 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoESouthAmericaStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoESouthAmericaStandardTimeics"></a>
<div class="copfile"><h4>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) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,176 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoEasternStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoEasternStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Eastern Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Eastern Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,148 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoEgyptStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoEgyptStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Egypt Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Egypt Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,148 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoEkaterinburgStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoEkaterinburgStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Ekaterinburg Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Ekaterinburg Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,114 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoFLEStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoFLEStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/FLE Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/FLE Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,143 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoFijiStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoFijiStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Fiji Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Fiji Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,66 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoGMTStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoGMTStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/GMT Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/GMT Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,291 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoGTBStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoGTBStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/GTB Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/GTB Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,121 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoGeorgianStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoGeorgianStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Georgian Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Georgian Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,152 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoGreenlandStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoGreenlandStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Greenland Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Greenland Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,45 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoGreenwichStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoGreenwichStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Greenwich Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Greenwich Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,89 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoHawaiianStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoHawaiianStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Hawaiian Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Hawaiian Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,39 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoIndiaStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoIndiaStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/India Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/India Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,38 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoIranStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoIranStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Iran Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Iran Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,187 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoIsraelStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoIsraelStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Israel Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Israel Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,164 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoJordanStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoJordanStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Jordan Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Jordan Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,137 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoKaliningradStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoKaliningradStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Kaliningrad Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Kaliningrad Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,156 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoKoreaStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoKoreaStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Korea Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Korea Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,68 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoLibyaStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoLibyaStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Libya Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Libya Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,92 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoMagadanStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoMagadanStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Magadan Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Magadan Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,108 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoMauritiusStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoMauritiusStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Mauritius Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Mauritius Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,32 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoMiddleEastStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoMiddleEastStandardTimeics"></a>
<div class="copfile"><h4>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) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,112 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoMontevideoStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoMontevideoStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Montevideo Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Montevideo Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,196 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoMoroccoStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoMoroccoStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Morocco Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Morocco Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,116 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoMountainStandardTimeMexicoicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoMountainStandardTimeMexicoics"></a>
<div class="copfile"><h4>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) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,98 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoMountainStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoMountainStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Mountain Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Mountain Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,134 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoMyanmarStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoMyanmarStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Myanmar Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Myanmar Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,37 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoNCentralAsiaStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoNCentralAsiaStandardTimeics"></a>
<div class="copfile"><h4>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) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,116 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoNamibiaStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoNamibiaStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Namibia Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Namibia Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,65 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoNepalStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoNepalStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Nepal Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Nepal Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,23 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoNewZealandStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoNewZealandStandardTimeics"></a>
<div class="copfile"><h4>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) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,122 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoNewfoundlandStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoNewfoundlandStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Newfoundland Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Newfoundland Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,210 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoNorthAsiaEastStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoNorthAsiaEastStandardTimeics"></a>
<div class="copfile"><h4>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) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,115 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoNorthAsiaStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoNorthAsiaStandardTimeics"></a>
<div class="copfile"><h4>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) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,108 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoPacificSAStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoPacificSAStandardTimeics"></a>
<div class="copfile"><h4>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) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,211 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoPacificStandardTimeMexicoicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoPacificStandardTimeMexicoics"></a>
<div class="copfile"><h4>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) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,139 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoPacificStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoPacificStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Pacific Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Pacific Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,132 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoPakistanStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoPakistanStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Pakistan Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Pakistan Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,62 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoParaguayStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoParaguayStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Paraguay Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Paraguay Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,162 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoRomanceStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoRomanceStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Romance Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Romance Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,169 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoRussianStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoRussianStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Russian Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Russian Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,175 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoSAEasternStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoSAEasternStandardTimeics"></a>
<div class="copfile"><h4>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) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,23 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoSAPacificStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoSAPacificStandardTimeics"></a>
<div class="copfile"><h4>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) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,37 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoSAWesternStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoSAWesternStandardTimeics"></a>
<div class="copfile"><h4>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) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,30 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoSEAsiaStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoSEAsiaStandardTimeics"></a>
<div class="copfile"><h4>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) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,23 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoSamoaStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoSamoaStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Samoa Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Samoa Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,59 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoSingaporeStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoSingaporeStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Singapore Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Singapore Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,72 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoSouthAfricaStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoSouthAfricaStandardTimeics"></a>
<div class="copfile"><h4>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) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,37 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoSriLankaStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoSriLankaStandardTimeics"></a>
<div class="copfile"><h4>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) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,65 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoSyriaStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoSyriaStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Syria Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Syria Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,171 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoTaipeiStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoTaipeiStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Taipei Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Taipei Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,87 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoTasmaniaStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoTasmaniaStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Tasmania Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Tasmania Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,146 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoTokyoStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoTokyoStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Tokyo Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Tokyo Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,52 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoTongaStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoTongaStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Tonga Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Tonga Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,58 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoTurkeyStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoTurkeyStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Turkey Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Turkey Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,280 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoUSEasternStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoUSEasternStandardTimeics"></a>
<div class="copfile"><h4>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) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,142 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoUSMountainStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoUSMountainStandardTimeics"></a>
<div class="copfile"><h4>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) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,68 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoUTC12icsfromrev13629CalendarServertrunktwistedcaldavzoneinfoUTC12ics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/UTC+12.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/UTC+12.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,16 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoUTC02icsfromrev13629CalendarServertrunktwistedcaldavzoneinfoUTC02ics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/UTC-02.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/UTC-02.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,16 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoUTC11icsfromrev13629CalendarServertrunktwistedcaldavzoneinfoUTC11ics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/UTC-11.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/UTC-11.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,16 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoUlaanbaatarStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoUlaanbaatarStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Ulaanbaatar Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Ulaanbaatar Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,72 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoVenezuelaStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoVenezuelaStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Venezuela Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Venezuela Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,37 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoVladivostokStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoVladivostokStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Vladivostok Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Vladivostok Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,108 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoWAustraliaStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoWAustraliaStandardTimeics"></a>
<div class="copfile"><h4>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) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,62 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoWCentralAfricaStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoWCentralAfricaStandardTimeics"></a>
<div class="copfile"><h4>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) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,16 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoWEuropeStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoWEuropeStandardTimeics"></a>
<div class="copfile"><h4>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) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,115 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoWestAsiaStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoWestAsiaStandardTimeics"></a>
<div class="copfile"><h4>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) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,79 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoWestPacificStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoWestPacificStandardTimeics"></a>
<div class="copfile"><h4>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) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,23 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoYakutskStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoYakutskStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Yakutsk Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Yakutsk Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,108 @@
</span><ins>+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
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfolinkstxt"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/links.txt (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -1,154 +1,252 @@
</span><del>-America/Virgin        America/Port_of_Spain
</del><ins>+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
</ins><span class="cx"> America/Buenos_Aires        America/Argentina/Buenos_Aires
</span><del>-Hongkong        Asia/Hong_Kong
-Etc/GMT+0        Etc/GMT
-Asia/Calcutta        Asia/Kolkata
-Australia/South        Australia/Adelaide
-America/Atka        America/Adak
</del><ins>+America/Catamarca        America/Argentina/Catamarca
</ins><span class="cx"> America/Coral_Harbour        America/Atikokan
</span><del>-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
</del><ins>+America/Cordoba        America/Argentina/Cordoba
+America/Dominica        America/Port_of_Spain
+America/Ensenada        America/Tijuana
+America/Fort_Wayne        America/Indiana/Indianapolis
</ins><span class="cx"> America/Grenada        America/Port_of_Spain
</span><del>-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
</del><ins>+America/Guadeloupe        America/Port_of_Spain
</ins><span class="cx"> America/Indianapolis        America/Indiana/Indianapolis
</span><del>-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
</del><span class="cx"> America/Jujuy        America/Argentina/Jujuy
</span><del>-America/Cordoba        America/Argentina/Cordoba
-Europe/Skopje        Europe/Belgrade
</del><ins>+America/Knox_IN        America/Indiana/Knox
</ins><span class="cx"> America/Kralendijk        America/Curacao
</span><del>-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
</del><span class="cx"> America/Louisville        America/Kentucky/Louisville
</span><ins>+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
</ins><span class="cx"> America/St_Barthelemy        America/Port_of_Spain
</span><ins>+America/St_Kitts        America/Port_of_Spain
+America/St_Lucia        America/Port_of_Spain
</ins><span class="cx"> America/St_Thomas        America/Port_of_Spain
</span><del>-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
</del><ins>+America/St_Vincent        America/Port_of_Spain
+America/Tortola        America/Port_of_Spain
+America/Virgin        America/Port_of_Spain
</ins><span class="cx"> Antarctica/McMurdo        Pacific/Auckland
</span><del>-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
</del><ins>+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
</ins><span class="cx"> Asia/Katmandu        Asia/Kathmandu
</span><del>-Etc/GMT0        Etc/GMT
-Pacific/Ponape        Pacific/Pohnpei
-Japan        Asia/Tokyo
</del><ins>+Asia/Macao        Asia/Macau
+Asia/Saigon        Asia/Ho_Chi_Minh
+Asia/Tel_Aviv        Asia/Jerusalem
+Asia/Thimbu        Asia/Thimphu
+Asia/Ujung_Pandang        Asia/Makassar
</ins><span class="cx"> Asia/Ulan_Bator        Asia/Ulaanbaatar
</span><del>-Kwajalein        Pacific/Kwajalein
</del><ins>+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
</ins><span class="cx"> Australia/Yancowinna        Australia/Broken_Hill
</span><del>-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
</del><ins>+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
</ins><span class="cx"> Canada/East-Saskatchewan        America/Regina
</span><ins>+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
</ins><span class="cx"> Chile/Continental        America/Santiago
</span><del>-Asia/Tel_Aviv        Asia/Jerusalem
-Mexico/General        America/Mexico_City
-Asia/Istanbul        Europe/Istanbul
</del><ins>+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
</ins><span class="cx"> Europe/Isle_of_Man        Europe/London
</span><ins>+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
</ins><span class="cx"> GMT0        Etc/GMT
</span><del>-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
</del><ins>+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
</ins><span class="cx"> NZ        Pacific/Auckland
</span><del>-Asia/Ashkhabad        Asia/Ashgabat
-America/Knox_IN        America/Indiana/Knox
-America/Catamarca        America/Argentina/Catamarca
-Zulu        Etc/UTC
-GMT+0        Etc/GMT
</del><ins>+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
</ins><span class="cx"> Poland        Europe/Warsaw
</span><del>-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
</del><ins>+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
</ins><span class="cx"> Singapore        Asia/Singapore
</span><del>-Europe/Ljubljana        Europe/Belgrade
</del><ins>+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
</ins><span class="cx"> US/Alaska        America/Anchorage
</span><del>-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
</del><ins>+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
</ins><span class="cx"> UTC        Etc/UTC
</span><del>-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
</del><ins>+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
</ins><span class="cx"> W-SU        Europe/Moscow
</span><del>-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
</del><span class="cx">\ No newline at end of file
</span><ins>+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
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfotimezonesxml"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/timezones.xml (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -2,8 +2,23 @@
</span><span class="cx"> &lt;!DOCTYPE timezones SYSTEM &quot;timezones.dtd&quot;&gt;
</span><span class="cx"> 
</span><span class="cx"> &lt;timezones&gt;
</span><del>-  &lt;dtstamp&gt;2014-05-30T18:27:48Z&lt;/dtstamp&gt;
</del><ins>+  &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
</ins><span class="cx">   &lt;timezone&gt;
</span><ins>+    &lt;tzid&gt;AUS Central Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;942e93fd3bdd2d06bf96febe3bca4c11&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
+    &lt;tzid&gt;AUS Eastern Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;72b814a9cd04f2198b25d71f6099d0a1&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
+    &lt;tzid&gt;Afghanistan Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;411ffffe0c178625aa3f7f53c40f1319&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
</ins><span class="cx">     &lt;tzid&gt;Africa/Abidjan&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;md5&gt;dc9468decb9742f08bafcd6d65a50f32&lt;/md5&gt;
</span><span class="lines">@@ -74,11 +89,13 @@
</span><span class="cx">     &lt;tzid&gt;Africa/Cairo&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2014-05-30T18:27:48Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;alias&gt;Egypt&lt;/alias&gt;
</span><ins>+    &lt;alias&gt;Egypt Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;42e3629db1f2e76ad81f9e078823ac99&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;Africa/Casablanca&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2014-05-30T18:27:48Z&lt;/dtstamp&gt;
</span><ins>+    &lt;alias&gt;Morocco Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;751312234a74ed078fc6ec8611615b11&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -134,6 +151,7 @@
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;Africa/Johannesburg&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><ins>+    &lt;alias&gt;South Africa Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;a39046b0f33a7af0af58c951b8766453&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -165,6 +183,7 @@
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;Africa/Lagos&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><ins>+    &lt;alias&gt;W. Central Africa Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;c22edde6ebc4dc407706841c17665286&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -225,6 +244,7 @@
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;Africa/Nairobi&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><ins>+    &lt;alias&gt;E. Africa Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;0f834f9942a32756fcf3ecb8bcfd6459&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -266,6 +286,7 @@
</span><span class="cx">     &lt;tzid&gt;Africa/Tripoli&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2013-11-15T16:10:31Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;alias&gt;Libya&lt;/alias&gt;
</span><ins>+    &lt;alias&gt;Libya Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;6e8040bfd898654905bfd0a49c64e365&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -276,9 +297,15 @@
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;Africa/Windhoek&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><ins>+    &lt;alias&gt;Namibia Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;f289f3354d98138b5946f174a4f6048c&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><ins>+    &lt;tzid&gt;Alaskan Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;14f9eaaf054aa32faa7b75c0e08c067b&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
</ins><span class="cx">     &lt;tzid&gt;America/Adak&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;alias&gt;America/Atka&lt;/alias&gt;
</span><span class="lines">@@ -289,6 +316,7 @@
</span><span class="cx">     &lt;tzid&gt;America/Anchorage&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;alias&gt;US/Alaska&lt;/alias&gt;
</span><ins>+    &lt;alias&gt;Alaskan Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;de9f2f0cfb6cf0265a48f3edf1dbfc8d&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -386,6 +414,7 @@
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;America/Asuncion&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2013-05-08T18:04:04Z&lt;/dtstamp&gt;
</span><ins>+    &lt;alias&gt;Paraguay Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;b6d9cc532c073706f4b628e9558ff341&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -402,6 +431,7 @@
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;America/Bahia&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2013-01-14T15:32:16Z&lt;/dtstamp&gt;
</span><ins>+    &lt;alias&gt;Bahia Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;2d34d74119af2d61ac357e112a064897&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -437,6 +467,7 @@
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;America/Bogota&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2013-05-08T18:04:04Z&lt;/dtstamp&gt;
</span><ins>+    &lt;alias&gt;SA Pacific Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;cca1c4cc5d1c3bf8c4253a8cd5456c09&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -447,6 +478,7 @@
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;America/Buenos_Aires&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><ins>+    &lt;alias&gt;Argentina Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;8814f42968145e742683596ed2951683&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -467,6 +499,7 @@
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;America/Caracas&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><ins>+    &lt;alias&gt;Venezuela Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;6a4df646dbe97d59022ea0aad3da0e48&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -477,6 +510,7 @@
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;America/Cayenne&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><ins>+    &lt;alias&gt;SA Eastern Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;298d74a0126387086229e0e55f0d4ef3&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -488,11 +522,13 @@
</span><span class="cx">     &lt;tzid&gt;America/Chicago&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;alias&gt;US/Central&lt;/alias&gt;
</span><ins>+    &lt;alias&gt;Central Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;afaa6e4df36635addbf6aafbf639a99d&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;America/Chihuahua&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><ins>+    &lt;alias&gt;Mountain Standard Time (Mexico)&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;43622e982e100ca20b06991c4f938b50&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -518,6 +554,7 @@
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;America/Cuiaba&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2014-05-30T18:27:48Z&lt;/dtstamp&gt;
</span><ins>+    &lt;alias&gt;Central Brazilian Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;239010d1e747a2638bdd58b161aaba7b&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -549,6 +586,7 @@
</span><span class="cx">     &lt;alias&gt;US/Mountain&lt;/alias&gt;
</span><span class="cx">     &lt;alias&gt;America/Shiprock&lt;/alias&gt;
</span><span class="cx">     &lt;alias&gt;Navajo&lt;/alias&gt;
</span><ins>+    &lt;alias&gt;Mountain Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;436e14808b14901d516be96a6cb63709&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -601,6 +639,7 @@
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;America/Godthab&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><ins>+    &lt;alias&gt;Greenland Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;b164983aee94fca41a9c8cc6c84425ee&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -626,6 +665,7 @@
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;America/Guatemala&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><ins>+    &lt;alias&gt;Central America Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;3f5dcae7aa6bebf3c51fad853b57f91e&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -642,6 +682,7 @@
</span><span class="cx">     &lt;tzid&gt;America/Halifax&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2012-05-18T14:15:25Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;alias&gt;Canada/Atlantic&lt;/alias&gt;
</span><ins>+    &lt;alias&gt;Atlantic Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;2bb95748970884a8c3a7503062c06f79&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -703,6 +744,7 @@
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;America/Indianapolis&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><ins>+    &lt;alias&gt;US Eastern Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;6e96ffc0ee1b866a61e213a74d73b92b&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -755,6 +797,7 @@
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;America/La_Paz&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><ins>+    &lt;alias&gt;SA Western Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;098e905a3dc2d7342fd4a966448557c8&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -766,6 +809,7 @@
</span><span class="cx">     &lt;tzid&gt;America/Los_Angeles&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;alias&gt;US/Pacific&lt;/alias&gt;
</span><ins>+    &lt;alias&gt;Pacific Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;fca9e0d643cee547beae8212c0b53443&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -839,6 +883,7 @@
</span><span class="cx">     &lt;tzid&gt;America/Mexico_City&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;alias&gt;Mexico/General&lt;/alias&gt;
</span><ins>+    &lt;alias&gt;Central Standard Time (Mexico)&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;2bf2d4a670f01d28901866cc57a13b62&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -859,6 +904,7 @@
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;America/Montevideo&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2012-05-18T16:58:42Z&lt;/dtstamp&gt;
</span><ins>+    &lt;alias&gt;Montevideo Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;c1279037560f5ffebea4f8ae500b751f&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -880,6 +926,7 @@
</span><span class="cx">     &lt;tzid&gt;America/New_York&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;alias&gt;US/Eastern&lt;/alias&gt;
</span><ins>+    &lt;alias&gt;Eastern Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;7f02ecc0b9c5f6a0145794886fb1e411&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -937,6 +984,7 @@
</span><span class="cx">     &lt;tzid&gt;America/Phoenix&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;alias&gt;US/Arizona&lt;/alias&gt;
</span><ins>+    &lt;alias&gt;US Mountain Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;36f6704008b6a5150fe6b7895c131c91&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -997,6 +1045,7 @@
</span><span class="cx">     &lt;dtstamp&gt;2012-05-18T14:15:25Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;alias&gt;Canada/Saskatchewan&lt;/alias&gt;
</span><span class="cx">     &lt;alias&gt;Canada/East-Saskatchewan&lt;/alias&gt;
</span><ins>+    &lt;alias&gt;Canada Central Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;2a81ea7d4cf13d375b6d23864f4e395e&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -1019,6 +1068,7 @@
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;America/Santa_Isabel&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><ins>+    &lt;alias&gt;Pacific Standard Time (Mexico)&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;258b10f97d147ad0fb9c3815fadf9b40&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -1030,6 +1080,7 @@
</span><span class="cx">     &lt;tzid&gt;America/Santiago&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2013-05-08T18:04:04Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;alias&gt;Chile/Continental&lt;/alias&gt;
</span><ins>+    &lt;alias&gt;Pacific SA Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;fadb4e11ac55c3afaf6a735bb521ccfd&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -1041,6 +1092,7 @@
</span><span class="cx">     &lt;tzid&gt;America/Sao_Paulo&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2014-05-30T18:27:48Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;alias&gt;Brazil/East&lt;/alias&gt;
</span><ins>+    &lt;alias&gt;E. South America Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;b1c3e7faf0b0f6ceef559e3eb0aac261&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -1067,6 +1119,7 @@
</span><span class="cx">     &lt;tzid&gt;America/St_Johns&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2012-05-18T14:15:25Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;alias&gt;Canada/Newfoundland&lt;/alias&gt;
</span><ins>+    &lt;alias&gt;Newfoundland Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;08674807ec2a8e109a5a989f222ad373&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -1221,11 +1274,31 @@
</span><span class="cx">     &lt;md5&gt;986ca28dcc682891b0833e0b1b2352d7&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><ins>+    &lt;tzid&gt;Arab Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;af8262cea313e34b65ea6e9838b24677&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
+    &lt;tzid&gt;Arabian Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;813e9895a1797faa0d534b08246a440f&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
+    &lt;tzid&gt;Arabic Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;59bcbee64e678d36f5fcea326b28a24f&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
</ins><span class="cx">     &lt;tzid&gt;Arctic/Longyearbyen&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;md5&gt;40145ed84de3f926275f1c2b5d68df7b&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><ins>+    &lt;tzid&gt;Argentina Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;0c874bfea84dbfa02afe5d6ff96e3ac6&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
</ins><span class="cx">     &lt;tzid&gt;Asia/Aden&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2013-05-08T18:04:04Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;md5&gt;0e3e302489cb9c9d747466337c84aa32&lt;/md5&gt;
</span><span class="lines">@@ -1233,11 +1306,13 @@
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;Asia/Almaty&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><ins>+    &lt;alias&gt;Central Asia Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;2d28e8027a12d6bb578500fba1212a3d&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;Asia/Amman&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2014-05-30T18:27:48Z&lt;/dtstamp&gt;
</span><ins>+    &lt;alias&gt;Jordan Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;ba1a51f6f6b372cfcde53600efe2834f&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -1269,6 +1344,7 @@
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;Asia/Baghdad&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><ins>+    &lt;alias&gt;Arabic Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;6b989fb5fc7f59e9b039e33d632361eb&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -1279,16 +1355,19 @@
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;Asia/Baku&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><ins>+    &lt;alias&gt;Azerbaijan Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;89b1b87654cad2c27815ac8d7d5a82bb&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;Asia/Bangkok&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><ins>+    &lt;alias&gt;SE Asia Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;0ee6b61e4db09003f6f98d6d285a7f5d&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;Asia/Beirut&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><ins>+    &lt;alias&gt;Middle East Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;ec07a7c21ed6e237900981ba9c627313&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -1304,6 +1383,7 @@
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;Asia/Calcutta&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><ins>+    &lt;alias&gt;India Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;43bbd7aad1dd165dc2343be99e5edffe&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -1325,6 +1405,7 @@
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;Asia/Colombo&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><ins>+    &lt;alias&gt;Sri Lanka Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;db90d93971d1fcf94b3958ccab478003&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -1335,12 +1416,14 @@
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;Asia/Damascus&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2012-05-18T14:15:25Z&lt;/dtstamp&gt;
</span><ins>+    &lt;alias&gt;Syria Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;725cbf5cace73dba24d4b6a0a91859bd&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;Asia/Dhaka&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;alias&gt;Asia/Dacca&lt;/alias&gt;
</span><ins>+    &lt;alias&gt;Bangladesh Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;88035bd99ca7de5590cd00d7fdf3a8c4&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -1351,6 +1434,7 @@
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;Asia/Dubai&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><ins>+    &lt;alias&gt;Arabian Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;e762e58c96d3726bbaf84bb914949d8e&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -1393,6 +1477,7 @@
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;Asia/Irkutsk&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><ins>+    &lt;alias&gt;North Asia East Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;29acf8ac702a7d7841a3356c3962ff88&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -1415,11 +1500,13 @@
</span><span class="cx">     &lt;dtstamp&gt;2014-05-30T18:27:48Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;alias&gt;Asia/Tel_Aviv&lt;/alias&gt;
</span><span class="cx">     &lt;alias&gt;Israel&lt;/alias&gt;
</span><ins>+    &lt;alias&gt;Israel Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;85a1cb333e19eb4b92038d6b056b6ef3&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;Asia/Kabul&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><ins>+    &lt;alias&gt;Afghanistan Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;aed7a26e32e4c36ee37c5c82d54a362d&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -1430,6 +1517,7 @@
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;Asia/Karachi&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><ins>+    &lt;alias&gt;Pakistan Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;a643fc5fed6a7cc9160a7d54da4c6e60&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -1446,6 +1534,7 @@
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;Asia/Katmandu&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><ins>+    &lt;alias&gt;Nepal Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;dfcdb151e17499a38c4fa456c6d603f6&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -1462,6 +1551,7 @@
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;Asia/Krasnoyarsk&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><ins>+    &lt;alias&gt;North Asia Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;3e4dbf51d4e4d8988d4d52bc8e3932ed&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -1493,6 +1583,7 @@
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;Asia/Magadan&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><ins>+    &lt;alias&gt;Magadan Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;feb4df3f54948a62c9260a8ff0d8560c&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -1525,6 +1616,7 @@
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;Asia/Novosibirsk&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><ins>+    &lt;alias&gt;N. Central Asia Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;b8e017738a63324214d6586cbf078d62&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -1565,11 +1657,13 @@
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;Asia/Rangoon&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2013-05-08T18:04:04Z&lt;/dtstamp&gt;
</span><ins>+    &lt;alias&gt;Myanmar Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;c0defadd7d4bfd7e533488677fba8b1e&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;Asia/Riyadh&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><ins>+    &lt;alias&gt;Arab Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;6d11d7edcfa78b32acf9a17169ce728c&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -1591,40 +1685,47 @@
</span><span class="cx">     &lt;tzid&gt;Asia/Seoul&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;alias&gt;ROK&lt;/alias&gt;
</span><ins>+    &lt;alias&gt;Korea Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;ddab80bd6902fd85f4a75a99fe066c50&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;Asia/Shanghai&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2013-05-08T18:04:04Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;alias&gt;PRC&lt;/alias&gt;
</span><ins>+    &lt;alias&gt;China Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;b96ef8cf7c74c16e15f25c292c9a9ae8&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;Asia/Singapore&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;alias&gt;Singapore&lt;/alias&gt;
</span><ins>+    &lt;alias&gt;Singapore Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;f2f8be51082b2ede9114b3c78a24c608&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;Asia/Taipei&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;alias&gt;ROC&lt;/alias&gt;
</span><ins>+    &lt;alias&gt;Taipei Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;392c0daab0b369c725eaef960e59cb77&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;Asia/Tashkent&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><ins>+    &lt;alias&gt;West Asia Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;ed56064ae96e061f96e38e1414ff1e40&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;Asia/Tbilisi&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><ins>+    &lt;alias&gt;Georgian Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;a473849976251aac174309b4c54cc7b8&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;Asia/Tehran&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2013-01-14T15:32:16Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;alias&gt;Iran&lt;/alias&gt;
</span><ins>+    &lt;alias&gt;Iran Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;d21c79149c3ad3b5721cd6e05bdf65cd&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -1647,6 +1748,7 @@
</span><span class="cx">     &lt;tzid&gt;Asia/Tokyo&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;alias&gt;Japan&lt;/alias&gt;
</span><ins>+    &lt;alias&gt;Tokyo Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;596917b840456dcac60971ed275e06f9&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -1658,6 +1760,7 @@
</span><span class="cx">     &lt;tzid&gt;Asia/Ulaanbaatar&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;alias&gt;Asia/Ulan_Bator&lt;/alias&gt;
</span><ins>+    &lt;alias&gt;Ulaanbaatar Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;5aadca75f29da32a0ff78e3775363d06&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -1683,26 +1786,36 @@
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;Asia/Vladivostok&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><ins>+    &lt;alias&gt;Vladivostok Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;2f8cf1b4ef5274cf8e117d0a8a591c44&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;Asia/Yakutsk&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><ins>+    &lt;alias&gt;Yakutsk Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;c8446d91924f4f5f899e821604f6e2dd&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;Asia/Yekaterinburg&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><ins>+    &lt;alias&gt;Ekaterinburg Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;ceb73b7be048c14a0ee0ecc9a91d3652&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;Asia/Yerevan&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2012-05-18T14:15:25Z&lt;/dtstamp&gt;
</span><ins>+    &lt;alias&gt;Caucasus Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;fbf2743ed30170109021b5d447184721&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><ins>+    &lt;tzid&gt;Atlantic Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;21e4f77ac658a58c99a25f2d6ea2991b&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
</ins><span class="cx">     &lt;tzid&gt;Atlantic/Azores&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2012-05-18T16:58:42Z&lt;/dtstamp&gt;
</span><ins>+    &lt;alias&gt;Azores Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;353f9c84fde46bd2cf7069a30c4276ce&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -1718,6 +1831,7 @@
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;Atlantic/Cape_Verde&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><ins>+    &lt;alias&gt;Cape Verde Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;486c6cca3174d50e3d3454c5f1f73480&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -1745,6 +1859,7 @@
</span><span class="cx">     &lt;tzid&gt;Atlantic/Reykjavik&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;alias&gt;Iceland&lt;/alias&gt;
</span><ins>+    &lt;alias&gt;Greenwich Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;992200e91e57b5dc3b4c1387c8b97466&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -1771,12 +1886,14 @@
</span><span class="cx">     &lt;tzid&gt;Australia/Adelaide&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;alias&gt;Australia/South&lt;/alias&gt;
</span><ins>+    &lt;alias&gt;Cen. Australia Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;ca7281d2d6822a955147c350b7b1cb71&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;Australia/Brisbane&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;alias&gt;Australia/Queensland&lt;/alias&gt;
</span><ins>+    &lt;alias&gt;E. Australia Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;a35c97646a88eec10ad3a6e6b567e508&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -1799,6 +1916,7 @@
</span><span class="cx">     &lt;tzid&gt;Australia/Darwin&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;alias&gt;Australia/North&lt;/alias&gt;
</span><ins>+    &lt;alias&gt;AUS Central Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;73bbf21cb68354d5fab3393f9e0cc467&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -1810,6 +1928,7 @@
</span><span class="cx">     &lt;tzid&gt;Australia/Hobart&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;alias&gt;Australia/Tasmania&lt;/alias&gt;
</span><ins>+    &lt;alias&gt;Tasmania Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;3f93782299131bc5e257f74b156c7bff&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -1848,6 +1967,7 @@
</span><span class="cx">     &lt;tzid&gt;Australia/Perth&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;alias&gt;Australia/West&lt;/alias&gt;
</span><ins>+    &lt;alias&gt;W. Australia Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;a9da90a8b6373ae57da42a972cfa5e67&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -1866,6 +1986,7 @@
</span><span class="cx">     &lt;alias&gt;Australia/Canberra&lt;/alias&gt;
</span><span class="cx">     &lt;alias&gt;Australia/ACT&lt;/alias&gt;
</span><span class="cx">     &lt;alias&gt;Australia/NSW&lt;/alias&gt;
</span><ins>+    &lt;alias&gt;AUS Eastern Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;bcdd3fd1c6c326bdef770905bedab9d1&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -1889,6 +2010,26 @@
</span><span class="cx">     &lt;md5&gt;da6459a041f1b5580ffb691930c7c6ce&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><ins>+    &lt;tzid&gt;Azerbaijan Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;bed1a98e3a47a721aee9a617f2d58a98&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
+    &lt;tzid&gt;Azores Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;8748bb405c66b4799bd3a5e8f0bdd0b4&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
+    &lt;tzid&gt;Bahia Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;d513507bb66cd7ecd78d48cc9021a075&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
+    &lt;tzid&gt;Bangladesh Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;12c3bc6450cd1158e2860dcd740d4791&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
</ins><span class="cx">     &lt;tzid&gt;Brazil/Acre&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2013-11-15T16:10:31Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;md5&gt;ad33124888f5c5dd9bed9317ef0bb953&lt;/md5&gt;
</span><span class="lines">@@ -1919,6 +2060,11 @@
</span><span class="cx">     &lt;md5&gt;2ac180eb45fdda3460f26cee12a017e9&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><ins>+    &lt;tzid&gt;Canada Central Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;6898e7f21111cf8bb23ea38120b46ae7&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
</ins><span class="cx">     &lt;tzid&gt;Canada/Atlantic&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2012-05-18T14:15:25Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;md5&gt;2cbf7a81ab5bae956eedd4b27df8d8b4&lt;/md5&gt;
</span><span class="lines">@@ -1964,6 +2110,61 @@
</span><span class="cx">     &lt;md5&gt;ee6648283e8bedb3fdb8c57b9f434a26&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><ins>+    &lt;tzid&gt;Cape Verde Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;b93b13bdd5fcf4b16cac38dc0d11feae&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
+    &lt;tzid&gt;Caucasus Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;36da51fb3b37186dabad22e92102019b&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
+    &lt;tzid&gt;Cen. Australia Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;54a9e6a2ce0acf942122fa53bf92079d&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
+    &lt;tzid&gt;Central America Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;869c3ada45ef0ed879d524817f0483fc&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
+    &lt;tzid&gt;Central Asia Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;4cb4c8ea99752e73ff168d6d1577d7f4&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
+    &lt;tzid&gt;Central Brazilian Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;1ce1fe25c75d08d220d462659a7ccb76&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
+    &lt;tzid&gt;Central Europe Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;a6253b4f08c997ace48d666a75dd609d&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
+    &lt;tzid&gt;Central European Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;0189d1130feba42091b5682423bb7231&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
+    &lt;tzid&gt;Central Pacific Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;994bfa6127b6275d9bd385a62f9e83e9&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
+    &lt;tzid&gt;Central Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;6ce7b2318b0e77e848bcfc995d1e75fa&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
+    &lt;tzid&gt;Central Standard Time (Mexico)&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;4007bb3b1f3ca2d493d3d5a98808f16c&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
</ins><span class="cx">     &lt;tzid&gt;Chile/Continental&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2013-05-08T18:04:04Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;md5&gt;f317f76740e5c68894538a81fda87ad1&lt;/md5&gt;
</span><span class="lines">@@ -1974,11 +2175,36 @@
</span><span class="cx">     &lt;md5&gt;4b487f9ea07858d8d2e944204ed611cb&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><ins>+    &lt;tzid&gt;China Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;2bb98ef96d017132ecf3facafbb35165&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
</ins><span class="cx">     &lt;tzid&gt;Cuba&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2014-05-30T18:27:48Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;md5&gt;b4c7f04f9f4e20441be3042580cab3a8&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><ins>+    &lt;tzid&gt;Dateline Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;879e35596cccdfa2788c0b36ead18877&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
+    &lt;tzid&gt;E. Africa Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;7f7652996d0f8bc04f30419bb017f2f9&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
+    &lt;tzid&gt;E. Australia Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;9e6975e3e2d7aa07fde3d48ee8ab76bb&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
+    &lt;tzid&gt;E. South America Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;56ebc3ee8c6ea0cae6e9f6d2890adb3b&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
</ins><span class="cx">     &lt;tzid&gt;EET&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;md5&gt;4313a5a54018d63bbe5556966813bd9e&lt;/md5&gt;
</span><span class="lines">@@ -1994,16 +2220,31 @@
</span><span class="cx">     &lt;md5&gt;a9e719d7f0be1abb2846120179599a2c&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><ins>+    &lt;tzid&gt;Eastern Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;13ff590689dc4c786ee53edfe9ee1b17&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
</ins><span class="cx">     &lt;tzid&gt;Egypt&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2014-05-30T18:27:48Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;md5&gt;e5bdfeba2637858848136c41d6dd6592&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><ins>+    &lt;tzid&gt;Egypt Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;a03e4c51b498c0942fe9c94e6c99942c&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
</ins><span class="cx">     &lt;tzid&gt;Eire&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;md5&gt;f8c85e542a416cd7fd792f21241475bb&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><ins>+    &lt;tzid&gt;Ekaterinburg Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;3a2fd3183b2fb59554aa605e8d246c34&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
</ins><span class="cx">     &lt;tzid&gt;Etc/GMT&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;alias&gt;Etc/GMT+0&lt;/alias&gt;
</span><span class="lines">@@ -2035,16 +2276,19 @@
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;Etc/GMT+11&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><ins>+    &lt;alias&gt;UTC-11&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;e9f05290e38fd9ed728763e4b9e5439d&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;Etc/GMT+12&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><ins>+    &lt;alias&gt;Dateline Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;aba6f221c1ac0cb8d72aea5956a7ef5d&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;Etc/GMT+2&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><ins>+    &lt;alias&gt;UTC-02&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;a9135520a98c2e3d61629c16e58e6017&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -2105,6 +2349,7 @@
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;Etc/GMT-12&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><ins>+    &lt;alias&gt;UTC+12&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;24e457e75e5a2ca8b4d5699a3b16a0c1&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -2226,6 +2471,7 @@
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;Europe/Berlin&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><ins>+    &lt;alias&gt;W. Europe Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;7eff1fef65c43f08d542edcfa1d67180&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -2241,11 +2487,13 @@
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;Europe/Bucharest&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><ins>+    &lt;alias&gt;GTB Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;06f5949f16196a72a928d48015af4da9&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;Europe/Budapest&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><ins>+    &lt;alias&gt;Central Europe Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;5d9410ec171c22f3cb6af853666832b8&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -2296,6 +2544,7 @@
</span><span class="cx">     &lt;dtstamp&gt;2014-05-30T18:27:48Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;alias&gt;Turkey&lt;/alias&gt;
</span><span class="cx">     &lt;alias&gt;Asia/Istanbul&lt;/alias&gt;
</span><ins>+    &lt;alias&gt;Turkey Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;a8c5d66450ef94c0c1829b8ef0f3b08b&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -2306,11 +2555,13 @@
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;Europe/Kaliningrad&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><ins>+    &lt;alias&gt;Kaliningrad Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;4c60c5a58f54e04b1e78ca79090900b5&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;Europe/Kiev&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2014-05-30T18:27:48Z&lt;/dtstamp&gt;
</span><ins>+    &lt;alias&gt;FLE Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;e8d3adb6ed0d6d1c5350086a9d0803c4&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -2333,6 +2584,7 @@
</span><span class="cx">     &lt;alias&gt;Europe/Isle_of_Man&lt;/alias&gt;
</span><span class="cx">     &lt;alias&gt;GB-Eire&lt;/alias&gt;
</span><span class="cx">     &lt;alias&gt;Europe/Belfast&lt;/alias&gt;
</span><ins>+    &lt;alias&gt;GMT Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;d9c25d5b2eb02260bc94730e235938b9&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -2369,6 +2621,7 @@
</span><span class="cx">     &lt;tzid&gt;Europe/Moscow&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;alias&gt;W-SU&lt;/alias&gt;
</span><ins>+    &lt;alias&gt;Russian Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;163c9f35321ad3b6d79c5e13d3de4a66&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -2386,6 +2639,7 @@
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;Europe/Paris&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2012-05-18T16:58:42Z&lt;/dtstamp&gt;
</span><ins>+    &lt;alias&gt;Romance Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;8dcfe790e26460e4850d07f032bee5a6&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -2495,6 +2749,7 @@
</span><span class="cx">     &lt;tzid&gt;Europe/Warsaw&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;alias&gt;Poland&lt;/alias&gt;
</span><ins>+    &lt;alias&gt;Central European Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;9011dff96ae67331fefb285befee32c7&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -2515,6 +2770,16 @@
</span><span class="cx">     &lt;md5&gt;f4cfe31d995ca98d545a03ef60ebbbee&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><ins>+    &lt;tzid&gt;FLE Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;0ae1b4885ddb55aaa7bbb81318506844&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
+    &lt;tzid&gt;Fiji Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;f53a5ec8b50fc4a04b2fbf1ea0e7e577&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
</ins><span class="cx">     &lt;tzid&gt;GB&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;md5&gt;cf499d3386c1547d82ada718d426302a&lt;/md5&gt;
</span><span class="lines">@@ -2530,6 +2795,11 @@
</span><span class="cx">     &lt;md5&gt;7e1ee359c14980b307a35b4ea42e2ddf&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><ins>+    &lt;tzid&gt;GMT Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;a16951b9d79ec5d513253c4be09e8ad8&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
</ins><span class="cx">     &lt;tzid&gt;GMT+0&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;md5&gt;ce675f57f78b3a1e213c8ad399205020&lt;/md5&gt;
</span><span class="lines">@@ -2545,16 +2815,41 @@
</span><span class="cx">     &lt;md5&gt;b02b3430b23d30714a470ed456a9f19a&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><ins>+    &lt;tzid&gt;GTB Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;dfc95bb97b0cc61f39029dec1d7b3725&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
+    &lt;tzid&gt;Georgian Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;ce12e3a54f497a428ac320f8e44ebe1b&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
+    &lt;tzid&gt;Greenland Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;78c939588bf5314a272590a40857bd9c&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
</ins><span class="cx">     &lt;tzid&gt;Greenwich&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;md5&gt;47885ad66487af94b749e903f8fcc942&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><ins>+    &lt;tzid&gt;Greenwich Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;b04584eca67568cea6f7ad15fd69433a&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
</ins><span class="cx">     &lt;tzid&gt;HST&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;md5&gt;406972d8f460561b5ed0cc9635075cec&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><ins>+    &lt;tzid&gt;Hawaiian Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;78e49db8edd7865e4fbd4437d91b954d&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
</ins><span class="cx">     &lt;tzid&gt;Hongkong&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2013-05-08T18:04:04Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;md5&gt;1166b6a5bb7094a4036ed80d6228cfc2&lt;/md5&gt;
</span><span class="lines">@@ -2565,6 +2860,11 @@
</span><span class="cx">     &lt;md5&gt;1f3e3f1d74ac62c6309335ba7def679e&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><ins>+    &lt;tzid&gt;India Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;5bc101a49c9390078abf4fde42bf543d&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
</ins><span class="cx">     &lt;tzid&gt;Indian/Antananarivo&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;md5&gt;54b8cf688972faef6254eda042d0b759&lt;/md5&gt;
</span><span class="lines">@@ -2607,6 +2907,7 @@
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;Indian/Mauritius&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><ins>+    &lt;alias&gt;Mauritius Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;1ef668c409d1c581977fd40fc7505481&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -2625,11 +2926,21 @@
</span><span class="cx">     &lt;md5&gt;844f28e11094bef30381a7ebe5d0c7c6&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><ins>+    &lt;tzid&gt;Iran Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;06d7f0cd5e0d1a8c440d1b89cd9a45ed&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
</ins><span class="cx">     &lt;tzid&gt;Israel&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2014-05-30T18:27:48Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;md5&gt;332718eee8f091b1b00870c8e44bfa46&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><ins>+    &lt;tzid&gt;Israel Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;e1773817be9273336abcf0858a7c6f7d&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
</ins><span class="cx">     &lt;tzid&gt;Jamaica&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2013-10-01T01:19:11Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;md5&gt;b5f083a6081a40b4525e7c8e2da9e963&lt;/md5&gt;
</span><span class="lines">@@ -2640,6 +2951,21 @@
</span><span class="cx">     &lt;md5&gt;ff59375f1fd8af619f193e904888c448&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><ins>+    &lt;tzid&gt;Jordan Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;239404fd4117c3070ea02c6cdcab0ed7&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
+    &lt;tzid&gt;Kaliningrad Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;e06d0cefda50969894397c8c2bdb132f&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
+    &lt;tzid&gt;Korea Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;756dd3b6d51cc197eb8c2a08fb88aa30&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
</ins><span class="cx">     &lt;tzid&gt;Kwajalein&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;md5&gt;18865d3f0f1a93f2b96d77d8b63b86be&lt;/md5&gt;
</span><span class="lines">@@ -2650,6 +2976,11 @@
</span><span class="cx">     &lt;md5&gt;e6ac54ea0ab33dd6fd125a71fc34cf46&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><ins>+    &lt;tzid&gt;Libya Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;354c1f845ab7ad751b6124e9a1619d6b&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
</ins><span class="cx">     &lt;tzid&gt;MET&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;md5&gt;3176603f9d378e550950e8139ee1bfef&lt;/md5&gt;
</span><span class="lines">@@ -2665,6 +2996,16 @@
</span><span class="cx">     &lt;md5&gt;d43bd95c6a43197ff72e084d1bebb875&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><ins>+    &lt;tzid&gt;Magadan Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;0399e537a95ae84af318fe49135304ec&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
+    &lt;tzid&gt;Mauritius Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;f87744abf69766482ade5da23e0ef240&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
</ins><span class="cx">     &lt;tzid&gt;Mexico/BajaNorte&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;md5&gt;7ccf81b88f1e609f28623b2d917dbbde&lt;/md5&gt;
</span><span class="lines">@@ -2680,6 +3021,41 @@
</span><span class="cx">     &lt;md5&gt;3b33093afd8c0a554948130f54cc23f4&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><ins>+    &lt;tzid&gt;Middle East Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;4e652b5c7f318678a5be15ae9fb14752&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
+    &lt;tzid&gt;Montevideo Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;4dc81b0fa971a57c57b710ca18b20bc9&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
+    &lt;tzid&gt;Morocco Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;e268fdccf45f90b9a0bb372521040c80&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
+    &lt;tzid&gt;Mountain Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;e0a262ac5ef311d51fca018b4e0ad456&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
+    &lt;tzid&gt;Mountain Standard Time (Mexico)&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;228bd4c26ec332e0ac8f521b22cbe0cd&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
+    &lt;tzid&gt;Myanmar Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;6b52c184b0ad0bf74a6792259d52aa62&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
+    &lt;tzid&gt;N. Central Asia Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;d77a6f9abab36065495b31edd8e77c80&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
</ins><span class="cx">     &lt;tzid&gt;NZ&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;md5&gt;6f3e44f4f50b3e2e6e8fa002734e37a2&lt;/md5&gt;
</span><span class="lines">@@ -2690,11 +3066,41 @@
</span><span class="cx">     &lt;md5&gt;b7ab01dcc64ed6b0877b41a48a5f5bf1&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><ins>+    &lt;tzid&gt;Namibia Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;29cc2769ce1179e449dc6cf6a957c7f5&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
</ins><span class="cx">     &lt;tzid&gt;Navajo&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;md5&gt;46c72b3a055bd29862b55ac4bf1a62ed&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><ins>+    &lt;tzid&gt;Nepal Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;947e08ee93b35119c551186fd4a19f9f&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
+    &lt;tzid&gt;New Zealand Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;9fced4d15fca067f5454d72929088c5d&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
+    &lt;tzid&gt;Newfoundland Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;48508a15a031b973a444b91a551cd28a&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
+    &lt;tzid&gt;North Asia East Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;095f1c445394d82adec64602d537a986&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
+    &lt;tzid&gt;North Asia Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;6fedb564e771afc51b219f2bae5da796&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
</ins><span class="cx">     &lt;tzid&gt;PRC&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2013-05-08T18:04:04Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;md5&gt;4b00f46a2c83f3e58d09f75fbb92e2ba&lt;/md5&gt;
</span><span class="lines">@@ -2705,8 +3111,24 @@
</span><span class="cx">     &lt;md5&gt;b519fb841c7d3f389a584fdfa7372b93&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><ins>+    &lt;tzid&gt;Pacific SA Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;b26c2e5cd71738f09e98ede5982fab5e&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
+    &lt;tzid&gt;Pacific Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;6ffa7272875d070d46bc8ec057225665&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
+    &lt;tzid&gt;Pacific Standard Time (Mexico)&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;48e275bef2a5475110835bdf3a7dbb49&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
</ins><span class="cx">     &lt;tzid&gt;Pacific/Apia&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2013-01-14T15:32:16Z&lt;/dtstamp&gt;
</span><ins>+    &lt;alias&gt;Samoa Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;c7fe6c219fb68825f1e065008bc06040&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -2715,6 +3137,7 @@
</span><span class="cx">     &lt;alias&gt;NZ&lt;/alias&gt;
</span><span class="cx">     &lt;alias&gt;Antarctica/McMurdo&lt;/alias&gt;
</span><span class="cx">     &lt;alias&gt;Antarctica/South_Pole&lt;/alias&gt;
</span><ins>+    &lt;alias&gt;New Zealand Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;31b52d15573225aff7940c24fbe45343&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -2754,6 +3177,7 @@
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;Pacific/Fiji&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2014-05-30T18:27:48Z&lt;/dtstamp&gt;
</span><ins>+    &lt;alias&gt;Fiji Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;78ca7c42aa407761c6804f0502976b83&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -2774,6 +3198,7 @@
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;Pacific/Guadalcanal&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><ins>+    &lt;alias&gt;Central Pacific Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;ac17a77c46959df23f3d6d8f21ebf380&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -2786,6 +3211,7 @@
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;alias&gt;US/Hawaii&lt;/alias&gt;
</span><span class="cx">     &lt;alias&gt;Pacific/Johnston&lt;/alias&gt;
</span><ins>+    &lt;alias&gt;Hawaiian Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;be013195b929c48b73f0234a5226a763&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -2875,6 +3301,7 @@
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;Pacific/Port_Moresby&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><ins>+    &lt;alias&gt;West Pacific Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;042a04dfc570e2936ad064894529f41c&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -2905,6 +3332,7 @@
</span><span class="cx">   &lt;timezone&gt;
</span><span class="cx">     &lt;tzid&gt;Pacific/Tongatapu&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><ins>+    &lt;alias&gt;Tonga Standard Time&lt;/alias&gt;
</ins><span class="cx">     &lt;md5&gt;2124717920b350ba81643915b321d139&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><span class="lines">@@ -2928,6 +3356,16 @@
</span><span class="cx">     &lt;md5&gt;721ea1e811f10f00a44b2079ceece1f3&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><ins>+    &lt;tzid&gt;Pakistan Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;c8aceae74e764aceec483640afa45b86&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
+    &lt;tzid&gt;Paraguay Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;5de6fc55052ef5ac431356c060afc502&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
</ins><span class="cx">     &lt;tzid&gt;Poland&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;md5&gt;95a5dc1d445e1abc4a5f3626f4552800&lt;/md5&gt;
</span><span class="lines">@@ -2948,21 +3386,111 @@
</span><span class="cx">     &lt;md5&gt;b4ce7399fc454c07647554d069239558&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><ins>+    &lt;tzid&gt;Romance Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;f33b41c3b27c39b58a01d7e2bd15e891&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
+    &lt;tzid&gt;Russian Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;1651f23851e6f44162396c133a095d26&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
+    &lt;tzid&gt;SA Eastern Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;06f22d20ab3fe7b1c0c6ae309fe0b3cb&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
+    &lt;tzid&gt;SA Pacific Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;f8ed98409c9324eb2a5efb24b41f57ae&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
+    &lt;tzid&gt;SA Western Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;80dca707facf8efaaa36be9f9c89089d&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
+    &lt;tzid&gt;SE Asia Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;ad83f90b23aefd9d9dd450deac72ee2f&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
+    &lt;tzid&gt;Samoa Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;d14f124106dc5c45bc686eb62128e7e5&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
</ins><span class="cx">     &lt;tzid&gt;Singapore&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;md5&gt;94dcb7e58cfd771fa8ec1bd1ea6a5248&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><ins>+    &lt;tzid&gt;Singapore Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;94f8f3515c361ea9775ffcb6e9854e2f&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
+    &lt;tzid&gt;South Africa Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;6e229a8322a1b763928c28cfde3c6183&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
+    &lt;tzid&gt;Sri Lanka Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;105896be19d4cfc5866b9e7077491497&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
+    &lt;tzid&gt;Syria Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;42aceb769ea063799fde4f5c5c548a6e&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
+    &lt;tzid&gt;Taipei Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;ae23a32cf494ea76c848a68a7ae972f7&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
+    &lt;tzid&gt;Tasmania Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;656d5bff4d0c2340ae30a5e764538d68&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
+    &lt;tzid&gt;Tokyo Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;af0a29619e7caacdb24f136d4d9a9f57&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
+    &lt;tzid&gt;Tonga Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;396a4beadbdc3d50bcf6b07fd778c101&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
</ins><span class="cx">     &lt;tzid&gt;Turkey&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2014-05-30T18:27:48Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;md5&gt;ea45d8a59e773676fec8d3bd1b31441d&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><ins>+    &lt;tzid&gt;Turkey Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;0d84294523585a0799fe0c12d4a36872&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
</ins><span class="cx">     &lt;tzid&gt;UCT&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;md5&gt;77ab109760c523113f36441e0a218999&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><ins>+    &lt;tzid&gt;US Eastern Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;4708533536c230ec7eb92548b0e64bdd&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
+    &lt;tzid&gt;US Mountain Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;e3a68a8c3599e79bd333ad4fdd3c96fe&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
</ins><span class="cx">     &lt;tzid&gt;US/Alaska&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;md5&gt;0079a04f2e0aafab32b4d4230d97cfde&lt;/md5&gt;
</span><span class="lines">@@ -3028,21 +3556,81 @@
</span><span class="cx">     &lt;md5&gt;3b4bdbd492aa1796c10f37c1969dbd4b&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><ins>+    &lt;tzid&gt;UTC+12&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;5317101733f870b217196d4bdb5b67ff&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
+    &lt;tzid&gt;UTC-02&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;25ba389e4ccb8cf0dd6f129c7ff7f8c4&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
+    &lt;tzid&gt;UTC-11&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;fdc341a444c22d3308bd2a649ae0112c&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
+    &lt;tzid&gt;Ulaanbaatar Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;73b0a30b79c8034dafdba553910fe0e0&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
</ins><span class="cx">     &lt;tzid&gt;Universal&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;md5&gt;50bcbcc5d95d03946dd65a7d53877ac7&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><ins>+    &lt;tzid&gt;Venezuela Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;afd03b559b8bad714fe294bcb2cc1c9e&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
+    &lt;tzid&gt;Vladivostok Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;53e23ab867c6a9b4e87eefef6668ed7a&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
</ins><span class="cx">     &lt;tzid&gt;W-SU&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;md5&gt;3fdc23a1e84d1e77026ef5134217ffa3&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><ins>+    &lt;tzid&gt;W. Australia Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;adfbe5b5fd570ef3eefd7340a5e729cf&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
+    &lt;tzid&gt;W. Central Africa Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;2aad10d3015d5019dcada3b6cf6493f4&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
+    &lt;tzid&gt;W. Europe Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;8a85b21b39e21ab7d59f836b27b31d39&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
</ins><span class="cx">     &lt;tzid&gt;WET&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;md5&gt;f7d652d5d227809a7c9a9d75fea34c08&lt;/md5&gt;
</span><span class="cx">   &lt;/timezone&gt;
</span><span class="cx">   &lt;timezone&gt;
</span><ins>+    &lt;tzid&gt;West Asia Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;3484ac60b5568e639e5683a32bc6cdcf&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
+    &lt;tzid&gt;West Pacific Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;f403c7129fb48cee288e856571f2ffd8&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
+    &lt;tzid&gt;Yakutsk Standard Time&lt;/tzid&gt;
+    &lt;dtstamp&gt;2014-06-09T19:47:04Z&lt;/dtstamp&gt;
+    &lt;md5&gt;81e4af08c31bf752ca8b0f4ea3937518&lt;/md5&gt;
+  &lt;/timezone&gt;
+  &lt;timezone&gt;
</ins><span class="cx">     &lt;tzid&gt;Zulu&lt;/tzid&gt;
</span><span class="cx">     &lt;dtstamp&gt;2011-10-05T11:50:21Z&lt;/dtstamp&gt;
</span><span class="cx">     &lt;md5&gt;fa5e48a172aaa63cbd2193b233b2d9a4&lt;/md5&gt;
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetxdavbasepropertystorebasepy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/base/propertystore/base.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -26,6 +26,7 @@
</span><span class="cx"> from twext.python.log import Logger
</span><span class="cx"> from txdav.xml import element as davxml
</span><span class="cx"> from txdav.xml.base import encodeXMLName
</span><ins>+from txdav.xml.element import lookupElement
</ins><span class="cx"> from txweb2.dav.resource import TwistedGETContentMD5, \
</span><span class="cx">     TwistedQuotaRootProperty
</span><span class="cx"> 
</span><span class="lines">@@ -98,7 +99,11 @@
</span><span class="cx">         return encodeXMLName(self.namespace, self.name)
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+    def toElement(self):
+        return lookupElement((self.namespace, self.name,))
</ins><span class="cx"> 
</span><ins>+
+
</ins><span class="cx"> class AbstractPropertyStore(DictMixin, object):
</span><span class="cx">     &quot;&quot;&quot;
</span><span class="cx">     Base property store.
</span><span class="lines">@@ -108,6 +113,7 @@
</span><span class="cx">     implements(IPropertyStore)
</span><span class="cx"> 
</span><span class="cx">     _defaultShadowableKeys = frozenset()
</span><ins>+    _defaultProxyOverrideKeys = frozenset()
</ins><span class="cx">     _defaultGlobalKeys = frozenset((
</span><span class="cx">         PropertyName.fromElement(davxml.ACL),
</span><span class="cx">         PropertyName.fromElement(davxml.ResourceID),
</span><span class="lines">@@ -117,7 +123,7 @@
</span><span class="cx">         PropertyName.fromElement(TwistedQuotaRootProperty),
</span><span class="cx">     ))
</span><span class="cx"> 
</span><del>-    def __init__(self, defaultUser, shareeUser=None):
</del><ins>+    def __init__(self, defaultUser, shareeUser=None, proxyUser=None):
</ins><span class="cx">         &quot;&quot;&quot;
</span><span class="cx">         Instantiate the property store for a user. The default is the default user
</span><span class="cx">         (owner) property to read in the case of global or shadowable properties.
</span><span class="lines">@@ -128,12 +134,17 @@
</span><span class="cx"> 
</span><span class="cx">         @param shareeUser: the per user uid or None if the same as defaultUser
</span><span class="cx">         @type shareeUser: C{str}
</span><ins>+
+        @param proxyUser: the proxy uid or None if no proxy
+        @type proxyUser: C{str}
</ins><span class="cx">         &quot;&quot;&quot;
</span><span class="cx"> 
</span><span class="cx">         assert(defaultUser is not None or shareeUser is not None)
</span><span class="cx">         self._defaultUser = shareeUser if defaultUser is None else defaultUser
</span><span class="cx">         self._perUser = defaultUser if shareeUser is None else shareeUser
</span><ins>+        self._proxyUser = self._perUser if proxyUser is None else proxyUser
</ins><span class="cx">         self._shadowableKeys = set(AbstractPropertyStore._defaultShadowableKeys)
</span><ins>+        self._proxyOverrideKeys = set(AbstractPropertyStore._defaultProxyOverrideKeys)
</ins><span class="cx">         self._globalKeys = set(AbstractPropertyStore._defaultGlobalKeys)
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="lines">@@ -149,8 +160,13 @@
</span><span class="cx">         self._perUser = uid
</span><span class="cx"> 
</span><span class="cx"> 
</span><del>-    def setSpecialProperties(self, shadowableKeys, globalKeys):
</del><ins>+    def _setProxyUID(self, uid):
+        self._proxyUser = uid
+
+
+    def setSpecialProperties(self, shadowableKeys, globalKeys, proxyOverrideKeys):
</ins><span class="cx">         self._shadowableKeys.update(shadowableKeys)
</span><ins>+        self._proxyOverrideKeys.update(proxyOverrideKeys)
</ins><span class="cx">         self._globalKeys.update(globalKeys)
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="lines">@@ -191,6 +207,13 @@
</span><span class="cx">     #
</span><span class="cx"> 
</span><span class="cx">     def __getitem__(self, key):
</span><ins>+        # 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
+
</ins><span class="cx">         # Handle per-user behavior
</span><span class="cx">         if self.isShadowableProperty(key):
</span><span class="cx">             try:
</span><span class="lines">@@ -208,11 +231,23 @@
</span><span class="cx">         # Handle per-user behavior
</span><span class="cx">         if self.isGlobalProperty(key):
</span><span class="cx">             return self._setitem_uid(key, value, self._defaultUser)
</span><ins>+        # Handle proxy behavior
+        elif self._proxyUser != self._perUser and self.isProxyOverrideProperty(key):
+            return self._setitem_uid(key, value, self._proxyUser)
+        # Remainder is per user
</ins><span class="cx">         else:
</span><span class="cx">             return self._setitem_uid(key, value, self._perUser)
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     def __delitem__(self, key):
</span><ins>+        # 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
+
</ins><span class="cx">         # Handle per-user behavior
</span><span class="cx">         if self.isShadowableProperty(key):
</span><span class="cx">             try:
</span><span class="lines">@@ -245,11 +280,14 @@
</span><span class="cx">             self[key] = other[key]
</span><span class="cx"> 
</span><span class="cx"> 
</span><del>-    # Per-user property handling
</del><span class="cx">     def isShadowableProperty(self, key):
</span><span class="cx">         return key in self._shadowableKeys
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+    def isProxyOverrideProperty(self, key):
+        return key in self._proxyOverrideKeys
+
+
</ins><span class="cx">     def isGlobalProperty(self, key):
</span><span class="cx">         return key in self._globalKeys
</span><span class="cx"> 
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetxdavbasepropertystoresqlpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/base/propertystore/sql.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -117,17 +117,19 @@
</span><span class="cx">         yield _cache_user_props(self._defaultUser)
</span><span class="cx">         if self._perUser != self._defaultUser:
</span><span class="cx">             yield _cache_user_props(self._perUser)
</span><ins>+        if self._proxyUser != self._perUser:
+            yield _cache_user_props(self._proxyUser)
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     @classmethod
</span><span class="cx">     @inlineCallbacks
</span><del>-    def load(cls, defaultuser, shareUser, txn, resourceID, created=False, notifyCallback=None):
</del><ins>+    def load(cls, defaultuser, shareUser, proxyUser, txn, resourceID, created=False, notifyCallback=None):
</ins><span class="cx">         &quot;&quot;&quot;
</span><span class="cx">         @param notifyCallback: a callable used to trigger notifications when the
</span><span class="cx">             property store changes.
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="cx">         self = cls.__new__(cls)
</span><del>-        super(PropertyStore, self).__init__(defaultuser, shareUser)
</del><ins>+        super(PropertyStore, self).__init__(defaultuser, shareUser, proxyUser)
</ins><span class="cx">         self._txn = txn
</span><span class="cx">         self._resourceID = resourceID
</span><span class="cx">         if not self._txn.store().queryCachingEnabled():
</span><span class="lines">@@ -141,7 +143,7 @@
</span><span class="cx"> 
</span><span class="cx">     @classmethod
</span><span class="cx">     @inlineCallbacks
</span><del>-    def forMultipleResources(cls, defaultUser, txn,
</del><ins>+    def forMultipleResources(cls, defaultUser, shareeUser, proxyUser, txn,
</ins><span class="cx">                              childColumn, parentColumn, parentID):
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="cx">         Load all property stores for all objects in a collection.  This is used
</span><span class="lines">@@ -179,13 +181,13 @@
</span><span class="cx">             Where=parentColumn == parentID
</span><span class="cx">         )
</span><span class="cx">         rows = yield query.on(txn)
</span><del>-        stores = cls._createMultipleStores(defaultUser, txn, rows)
</del><ins>+        stores = cls._createMultipleStores(defaultUser, shareeUser, proxyUser, txn, rows)
</ins><span class="cx">         returnValue(stores)
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     @classmethod
</span><span class="cx">     @inlineCallbacks
</span><del>-    def forMultipleResourcesWithResourceIDs(cls, defaultUser, txn, resourceIDs):
</del><ins>+    def forMultipleResourcesWithResourceIDs(cls, defaultUser, shareeUser, proxyUser, txn, resourceIDs):
</ins><span class="cx">         &quot;&quot;&quot;
</span><span class="cx">         Load all property stores for all specified resources.  This is used
</span><span class="cx">         to optimize Depth:1 operations on that collection, by loading all
</span><span class="lines">@@ -214,13 +216,13 @@
</span><span class="cx">             Where=prop.RESOURCE_ID.In(Parameter(&quot;resourceIDs&quot;, len(resourceIDs)))
</span><span class="cx">         )
</span><span class="cx">         rows = yield query.on(txn, resourceIDs=resourceIDs)
</span><del>-        stores = cls._createMultipleStores(defaultUser, txn, rows)
</del><ins>+        stores = cls._createMultipleStores(defaultUser, shareeUser, proxyUser, txn, rows)
</ins><span class="cx"> 
</span><span class="cx">         # Make sure we have a store for each resourceID even if no properties exist
</span><span class="cx">         for resourceID in resourceIDs:
</span><span class="cx">             if resourceID not in stores:
</span><span class="cx">                 store = cls.__new__(cls)
</span><del>-                super(PropertyStore, store).__init__(defaultUser)
</del><ins>+                super(PropertyStore, store).__init__(defaultUser, shareeUser, proxyUser)
</ins><span class="cx">                 store._txn = txn
</span><span class="cx">                 store._resourceID = resourceID
</span><span class="cx">                 store._cached = {}
</span><span class="lines">@@ -230,7 +232,7 @@
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     @classmethod
</span><del>-    def _createMultipleStores(cls, defaultUser, txn, rows):
</del><ins>+    def _createMultipleStores(cls, defaultUser, shareeUser, proxyUser, txn, rows):
</ins><span class="cx">         &quot;&quot;&quot;
</span><span class="cx">         Create a set of stores for the set of rows passed in.
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="lines">@@ -245,7 +247,7 @@
</span><span class="cx">             if resource_id:
</span><span class="cx">                 if resource_id not in createdStores:
</span><span class="cx">                     store = cls.__new__(cls)
</span><del>-                    super(PropertyStore, store).__init__(defaultUser)
</del><ins>+                    super(PropertyStore, store).__init__(defaultUser, shareeUser, proxyUser)
</ins><span class="cx">                     store._txn = txn
</span><span class="cx">                     store._resourceID = resource_id
</span><span class="cx">                     store._cached = {}
</span><span class="lines">@@ -253,7 +255,7 @@
</span><span class="cx">                 createdStores[resource_id]._cached[(name, view_uid)] = value
</span><span class="cx">             elif object_resource_id:
</span><span class="cx">                 store = cls.__new__(cls)
</span><del>-                super(PropertyStore, store).__init__(defaultUser)
</del><ins>+                super(PropertyStore, store).__init__(defaultUser, shareeUser, proxyUser)
</ins><span class="cx">                 store._txn = txn
</span><span class="cx">                 store._resourceID = object_resource_id
</span><span class="cx">                 store._cached = {}
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetxdavbasepropertystoretestbasepy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/base/propertystore/test/base.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -140,29 +140,45 @@
</span><span class="cx">         yield self._changed(self.propertyStore1)
</span><span class="cx">         self.assertEquals(self.propertyStore1.get(name, None), value1)
</span><span class="cx">         self.assertEquals(self.propertyStore2.get(name, None), None)
</span><ins>+        self.assertEquals(self.propertyStore3.get(name, None), value1)
+        self.assertEquals(self.propertyStore4.get(name, None), None)
</ins><span class="cx">         self.failUnless(name in self.propertyStore1)
</span><span class="cx">         self.failIf(name in self.propertyStore2)
</span><ins>+        self.failUnless(name in self.propertyStore3)
+        self.failIf(name in self.propertyStore4)
</ins><span class="cx"> 
</span><span class="cx">         self.propertyStore2[name] = value2
</span><span class="cx">         yield self._changed(self.propertyStore2)
</span><span class="cx">         self.assertEquals(self.propertyStore1.get(name, None), value1)
</span><span class="cx">         self.assertEquals(self.propertyStore2.get(name, None), value2)
</span><ins>+        self.assertEquals(self.propertyStore3.get(name, None), value1)
+        self.assertEquals(self.propertyStore4.get(name, None), value2)
</ins><span class="cx">         self.failUnless(name in self.propertyStore1)
</span><span class="cx">         self.failUnless(name in self.propertyStore2)
</span><ins>+        self.failUnless(name in self.propertyStore3)
+        self.failUnless(name in self.propertyStore4)
</ins><span class="cx"> 
</span><span class="cx">         del self.propertyStore2[name]
</span><span class="cx">         yield self._changed(self.propertyStore2)
</span><span class="cx">         self.assertEquals(self.propertyStore1.get(name, None), value1)
</span><span class="cx">         self.assertEquals(self.propertyStore2.get(name, None), None)
</span><ins>+        self.assertEquals(self.propertyStore3.get(name, None), value1)
+        self.assertEquals(self.propertyStore4.get(name, None), None)
</ins><span class="cx">         self.failUnless(name in self.propertyStore1)
</span><span class="cx">         self.failIf(name in self.propertyStore2)
</span><ins>+        self.failUnless(name in self.propertyStore3)
+        self.failIf(name in self.propertyStore4)
</ins><span class="cx"> 
</span><span class="cx">         del self.propertyStore1[name]
</span><span class="cx">         yield self._changed(self.propertyStore1)
</span><span class="cx">         self.assertEquals(self.propertyStore1.get(name, None), None)
</span><span class="cx">         self.assertEquals(self.propertyStore2.get(name, None), None)
</span><ins>+        self.assertEquals(self.propertyStore3.get(name, None), None)
+        self.assertEquals(self.propertyStore4.get(name, None), None)
</ins><span class="cx">         self.failIf(name in self.propertyStore1)
</span><span class="cx">         self.failIf(name in self.propertyStore2)
</span><ins>+        self.failIf(name in self.propertyStore3)
+        self.failIf(name in self.propertyStore4)
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     @inlineCallbacks
</span><span class="lines">@@ -170,8 +186,10 @@
</span><span class="cx"> 
</span><span class="cx">         name = propertyName(&quot;shadow&quot;)
</span><span class="cx"> 
</span><del>-        self.propertyStore1.setSpecialProperties((name,), ())
-        self.propertyStore2.setSpecialProperties((name,), ())
</del><ins>+        self.propertyStore1.setSpecialProperties((name,), (), ())
+        self.propertyStore2.setSpecialProperties((name,), (), ())
+        self.propertyStore3.setSpecialProperties((name,), (), ())
+        self.propertyStore4.setSpecialProperties((name,), (), ())
</ins><span class="cx"> 
</span><span class="cx">         value1 = propertyValue(&quot;Hello, World1!&quot;)
</span><span class="cx">         value2 = propertyValue(&quot;Hello, World2!&quot;)
</span><span class="lines">@@ -180,29 +198,45 @@
</span><span class="cx">         yield self._changed(self.propertyStore1)
</span><span class="cx">         self.assertEquals(self.propertyStore1.get(name, None), value1)
</span><span class="cx">         self.assertEquals(self.propertyStore2.get(name, None), value1)
</span><ins>+        self.assertEquals(self.propertyStore3.get(name, None), value1)
+        self.assertEquals(self.propertyStore4.get(name, None), value1)
</ins><span class="cx">         self.failUnless(name in self.propertyStore1)
</span><span class="cx">         self.failUnless(name in self.propertyStore2)
</span><ins>+        self.failUnless(name in self.propertyStore3)
+        self.failUnless(name in self.propertyStore4)
</ins><span class="cx"> 
</span><span class="cx">         self.propertyStore2[name] = value2
</span><span class="cx">         yield self._changed(self.propertyStore2)
</span><span class="cx">         self.assertEquals(self.propertyStore1.get(name, None), value1)
</span><span class="cx">         self.assertEquals(self.propertyStore2.get(name, None), value2)
</span><ins>+        self.assertEquals(self.propertyStore3.get(name, None), value1)
+        self.assertEquals(self.propertyStore4.get(name, None), value2)
</ins><span class="cx">         self.failUnless(name in self.propertyStore1)
</span><span class="cx">         self.failUnless(name in self.propertyStore2)
</span><ins>+        self.failUnless(name in self.propertyStore3)
+        self.failUnless(name in self.propertyStore4)
</ins><span class="cx"> 
</span><span class="cx">         del self.propertyStore2[name]
</span><span class="cx">         yield self._changed(self.propertyStore2)
</span><span class="cx">         self.assertEquals(self.propertyStore1.get(name, None), value1)
</span><span class="cx">         self.assertEquals(self.propertyStore2.get(name, None), value1)
</span><ins>+        self.assertEquals(self.propertyStore3.get(name, None), value1)
+        self.assertEquals(self.propertyStore4.get(name, None), value1)
</ins><span class="cx">         self.failUnless(name in self.propertyStore1)
</span><span class="cx">         self.failUnless(name in self.propertyStore2)
</span><ins>+        self.failUnless(name in self.propertyStore3)
+        self.failUnless(name in self.propertyStore4)
</ins><span class="cx"> 
</span><span class="cx">         del self.propertyStore1[name]
</span><span class="cx">         yield self._changed(self.propertyStore1)
</span><span class="cx">         self.assertEquals(self.propertyStore1.get(name, None), None)
</span><span class="cx">         self.assertEquals(self.propertyStore2.get(name, None), None)
</span><ins>+        self.assertEquals(self.propertyStore3.get(name, None), None)
+        self.assertEquals(self.propertyStore4.get(name, None), None)
</ins><span class="cx">         self.failIf(name in self.propertyStore1)
</span><span class="cx">         self.failIf(name in self.propertyStore2)
</span><ins>+        self.failIf(name in self.propertyStore3)
+        self.failIf(name in self.propertyStore4)
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     @inlineCallbacks
</span><span class="lines">@@ -213,8 +247,10 @@
</span><span class="cx"> 
</span><span class="cx">         name = propertyName(&quot;shadow&quot;)
</span><span class="cx"> 
</span><del>-        self.propertyStore1.setSpecialProperties((name,), ())
-        self.propertyStore2.setSpecialProperties((name,), ())
</del><ins>+        self.propertyStore1.setSpecialProperties((name,), (), ())
+        self.propertyStore2.setSpecialProperties((name,), (), ())
+        self.propertyStore3.setSpecialProperties((name,), (), ())
+        self.propertyStore4.setSpecialProperties((name,), (), ())
</ins><span class="cx"> 
</span><span class="cx">         value1 = propertyValue(&quot;Hello, World1!&quot;)
</span><span class="cx"> 
</span><span class="lines">@@ -222,22 +258,34 @@
</span><span class="cx">         yield self._changed(self.propertyStore1)
</span><span class="cx">         self.assertEquals(self.propertyStore1.get(name, None), value1)
</span><span class="cx">         self.assertEquals(self.propertyStore2.get(name, None), value1)
</span><ins>+        self.assertEquals(self.propertyStore3.get(name, None), value1)
+        self.assertEquals(self.propertyStore4.get(name, None), value1)
</ins><span class="cx">         self.failUnless(name in self.propertyStore1)
</span><span class="cx">         self.failUnless(name in self.propertyStore2)
</span><ins>+        self.failUnless(name in self.propertyStore3)
+        self.failUnless(name in self.propertyStore4)
</ins><span class="cx"> 
</span><span class="cx">         del self.propertyStore2[name]
</span><span class="cx">         yield self._changed(self.propertyStore2)
</span><span class="cx">         self.assertEquals(self.propertyStore1.get(name, None), value1)
</span><span class="cx">         self.assertEquals(self.propertyStore2.get(name, None), value1)
</span><ins>+        self.assertEquals(self.propertyStore3.get(name, None), value1)
+        self.assertEquals(self.propertyStore4.get(name, None), value1)
</ins><span class="cx">         self.failUnless(name in self.propertyStore1)
</span><span class="cx">         self.failUnless(name in self.propertyStore2)
</span><ins>+        self.failUnless(name in self.propertyStore3)
+        self.failUnless(name in self.propertyStore4)
</ins><span class="cx"> 
</span><span class="cx">         del self.propertyStore1[name]
</span><span class="cx">         yield self._changed(self.propertyStore1)
</span><span class="cx">         self.assertEquals(self.propertyStore1.get(name, None), None)
</span><span class="cx">         self.assertEquals(self.propertyStore2.get(name, None), None)
</span><ins>+        self.assertEquals(self.propertyStore3.get(name, None), None)
+        self.assertEquals(self.propertyStore4.get(name, None), None)
</ins><span class="cx">         self.failIf(name in self.propertyStore1)
</span><span class="cx">         self.failIf(name in self.propertyStore2)
</span><ins>+        self.failIf(name in self.propertyStore3)
+        self.failIf(name in self.propertyStore4)
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     @inlineCallbacks
</span><span class="lines">@@ -245,8 +293,10 @@
</span><span class="cx"> 
</span><span class="cx">         name = propertyName(&quot;global&quot;)
</span><span class="cx"> 
</span><del>-        self.propertyStore1.setSpecialProperties((), (name,))
-        self.propertyStore2.setSpecialProperties((), (name,))
</del><ins>+        self.propertyStore1.setSpecialProperties((), (name,), ())
+        self.propertyStore2.setSpecialProperties((), (name,), ())
+        self.propertyStore3.setSpecialProperties((), (name,), ())
+        self.propertyStore4.setSpecialProperties((), (name,), ())
</ins><span class="cx"> 
</span><span class="cx">         value1 = propertyValue(&quot;Hello, World1!&quot;)
</span><span class="cx">         value2 = propertyValue(&quot;Hello, World2!&quot;)
</span><span class="lines">@@ -255,24 +305,250 @@
</span><span class="cx">         yield self._changed(self.propertyStore1)
</span><span class="cx">         self.assertEquals(self.propertyStore1.get(name, None), value1)
</span><span class="cx">         self.assertEquals(self.propertyStore2.get(name, None), value1)
</span><ins>+        self.assertEquals(self.propertyStore3.get(name, None), value1)
+        self.assertEquals(self.propertyStore4.get(name, None), value1)
</ins><span class="cx">         self.failUnless(name in self.propertyStore1)
</span><span class="cx">         self.failUnless(name in self.propertyStore2)
</span><ins>+        self.failUnless(name in self.propertyStore3)
+        self.failUnless(name in self.propertyStore4)
</ins><span class="cx"> 
</span><span class="cx">         self.propertyStore2[name] = value2
</span><span class="cx">         yield self._changed(self.propertyStore2)
</span><span class="cx">         self.assertEquals(self.propertyStore1.get(name, None), value2)
</span><span class="cx">         self.assertEquals(self.propertyStore2.get(name, None), value2)
</span><ins>+        self.assertEquals(self.propertyStore3.get(name, None), value2)
+        self.assertEquals(self.propertyStore4.get(name, None), value2)
</ins><span class="cx">         self.failUnless(name in self.propertyStore1)
</span><span class="cx">         self.failUnless(name in self.propertyStore2)
</span><ins>+        self.failUnless(name in self.propertyStore3)
+        self.failUnless(name in self.propertyStore4)
</ins><span class="cx"> 
</span><span class="cx">         del self.propertyStore2[name]
</span><span class="cx">         yield self._changed(self.propertyStore2)
</span><span class="cx">         self.assertEquals(self.propertyStore1.get(name, None), None)
</span><span class="cx">         self.assertEquals(self.propertyStore2.get(name, None), None)
</span><ins>+        self.assertEquals(self.propertyStore3.get(name, None), None)
+        self.assertEquals(self.propertyStore4.get(name, None), None)
</ins><span class="cx">         self.failIf(name in self.propertyStore1)
</span><span class="cx">         self.failIf(name in self.propertyStore2)
</span><ins>+        self.failIf(name in self.propertyStore3)
+        self.failIf(name in self.propertyStore4)
</ins><span class="cx"> 
</span><span class="cx"> 
</span><ins>+    @inlineCallbacks
+    def test_proxy(self):
+
+        name = propertyName(&quot;test&quot;)
+        value1 = propertyValue(&quot;Hello, World1!&quot;)
+        value2 = propertyValue(&quot;Hello, World2!&quot;)
+
+        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(&quot;override&quot;)
+
+        self.propertyStore1.setSpecialProperties((), (), (name,))
+        self.propertyStore2.setSpecialProperties((), (), (name,))
+        self.propertyStore3.setSpecialProperties((), (), (name,))
+        self.propertyStore4.setSpecialProperties((), (), (name,))
+
+        value1 = propertyValue(&quot;Hello, World1!&quot;)
+        value2 = propertyValue(&quot;Hello, World2!&quot;)
+
+        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(&quot;override&quot;)
+
+        self.propertyStore1.setSpecialProperties((name,), (), (name,))
+        self.propertyStore2.setSpecialProperties((name,), (), (name,))
+        self.propertyStore3.setSpecialProperties((name,), (), (name,))
+        self.propertyStore4.setSpecialProperties((name,), (), (name,))
+
+        value1 = propertyValue(&quot;Hello, World1!&quot;)
+        value2 = propertyValue(&quot;Hello, World2!&quot;)
+        value3 = propertyValue(&quot;Hello, World3!&quot;)
+        value4 = propertyValue(&quot;Hello, World4!&quot;)
+
+        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)
+
+
</ins><span class="cx">     def test_iteration(self):
</span><span class="cx"> 
</span><span class="cx">         value = propertyValue(&quot;Hello, World!&quot;)
</span><span class="lines">@@ -333,8 +609,8 @@
</span><span class="cx"> 
</span><span class="cx">         name = propertyName(&quot;shadow&quot;)
</span><span class="cx"> 
</span><del>-        self.propertyStore1.setSpecialProperties((name,), ())
-        self.propertyStore2.setSpecialProperties((name,), ())
</del><ins>+        self.propertyStore1.setSpecialProperties((name,), (), ())
+        self.propertyStore2.setSpecialProperties((name,), (), ())
</ins><span class="cx"> 
</span><span class="cx">         value1 = propertyValue(&quot;Hello, World1!&quot;)
</span><span class="cx"> 
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetxdavbasepropertystoretesttest_sqlpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/base/propertystore/test/test_sql.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -49,10 +49,11 @@
</span><span class="cx">         self.store = yield buildStore(self, self.notifierFactory)
</span><span class="cx">         self.addCleanup(self.maybeCommitLast)
</span><span class="cx">         self._txn = self.store.newTransaction()
</span><del>-        self.propertyStore = self.propertyStore1 = yield PropertyStore.load(
-            &quot;user01&quot;, None, self._txn, 1
-        )
-        self.propertyStore2 = yield PropertyStore.load(&quot;user01&quot;, &quot;user02&quot;, self._txn, 1)
</del><ins>+        self.propertyStore = \
+        self.propertyStore1 = yield PropertyStore.load(&quot;user01&quot;, None, None, self._txn, 1)
+        self.propertyStore2 = yield PropertyStore.load(&quot;user01&quot;, &quot;user02&quot;, None, self._txn, 1)
+        self.propertyStore3 = yield PropertyStore.load(&quot;user01&quot;, None, &quot;user03&quot;, self._txn, 1)
+        self.propertyStore4 = yield PropertyStore.load(&quot;user01&quot;, &quot;user02&quot;, &quot;user04&quot;, self._txn, 1)
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     @inlineCallbacks
</span><span class="lines">@@ -62,7 +63,11 @@
</span><span class="cx">             delattr(self, &quot;_txn&quot;)
</span><span class="cx">         else:
</span><span class="cx">             result = None
</span><del>-        self.propertyStore = self.propertyStore1 = self.propertyStore2 = None
</del><ins>+        self.propertyStore = \
+        self.propertyStore1 = \
+        self.propertyStore2 = \
+        self.propertyStore3 = \
+        self.propertyStore4 = None
</ins><span class="cx">         returnValue(result)
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="lines">@@ -74,18 +79,31 @@
</span><span class="cx">         self._txn = self.store.newTransaction()
</span><span class="cx"> 
</span><span class="cx">         store = self.propertyStore1
</span><del>-        self.propertyStore = self.propertyStore1 = yield PropertyStore.load(
-            &quot;user01&quot;, None, self._txn, 1
-        )
</del><ins>+        self.propertyStore = \
+        self.propertyStore1 = yield PropertyStore.load(&quot;user01&quot;, None, None, self._txn, 1)
</ins><span class="cx">         self.propertyStore1._shadowableKeys = store._shadowableKeys
</span><ins>+        self.propertyStore1._proxyOverrideKeys = store._proxyOverrideKeys
</ins><span class="cx">         self.propertyStore1._globalKeys = store._globalKeys
</span><span class="cx"> 
</span><span class="cx">         store = self.propertyStore2
</span><del>-        self.propertyStore2 = yield PropertyStore.load(&quot;user01&quot;, &quot;user02&quot;, self._txn, 1)
</del><ins>+        self.propertyStore2 = yield PropertyStore.load(&quot;user01&quot;, &quot;user02&quot;, None, self._txn, 1)
</ins><span class="cx">         self.propertyStore2._shadowableKeys = store._shadowableKeys
</span><ins>+        self.propertyStore2._proxyOverrideKeys = store._proxyOverrideKeys
</ins><span class="cx">         self.propertyStore2._globalKeys = store._globalKeys
</span><span class="cx"> 
</span><ins>+        store = self.propertyStore3
+        self.propertyStore3 = yield PropertyStore.load(&quot;user01&quot;, None, &quot;user03&quot;, self._txn, 1)
+        self.propertyStore3._shadowableKeys = store._shadowableKeys
+        self.propertyStore3._proxyOverrideKeys = store._proxyOverrideKeys
+        self.propertyStore3._globalKeys = store._globalKeys
</ins><span class="cx"> 
</span><ins>+        store = self.propertyStore4
+        self.propertyStore4 = yield PropertyStore.load(&quot;user01&quot;, &quot;user02&quot;, &quot;user04&quot;, self._txn, 1)
+        self.propertyStore4._shadowableKeys = store._shadowableKeys
+        self.propertyStore4._proxyOverrideKeys = store._proxyOverrideKeys
+        self.propertyStore4._globalKeys = store._globalKeys
+
+
</ins><span class="cx">     @inlineCallbacks
</span><span class="cx">     def _abort(self, store):
</span><span class="cx">         if hasattr(self, &quot;_txn&quot;):
</span><span class="lines">@@ -95,18 +113,31 @@
</span><span class="cx">         self._txn = self.store.newTransaction()
</span><span class="cx"> 
</span><span class="cx">         store = self.propertyStore1
</span><del>-        self.propertyStore = self.propertyStore1 = yield PropertyStore.load(
-            &quot;user01&quot;, None, self._txn, 1
-        )
</del><ins>+        self.propertyStore = \
+        self.propertyStore1 = yield PropertyStore.load(&quot;user01&quot;, None, None, self._txn, 1)
</ins><span class="cx">         self.propertyStore1._shadowableKeys = store._shadowableKeys
</span><ins>+        self.propertyStore1._proxyOverrideKeys = store._proxyOverrideKeys
</ins><span class="cx">         self.propertyStore1._globalKeys = store._globalKeys
</span><span class="cx"> 
</span><span class="cx">         store = self.propertyStore2
</span><del>-        self.propertyStore2 = yield PropertyStore.load(&quot;user01&quot;, &quot;user02&quot;, self._txn, 1)
</del><ins>+        self.propertyStore2 = yield PropertyStore.load(&quot;user01&quot;, &quot;user02&quot;, None, self._txn, 1)
</ins><span class="cx">         self.propertyStore2._shadowableKeys = store._shadowableKeys
</span><ins>+        self.propertyStore2._proxyOverrideKeys = store._proxyOverrideKeys
</ins><span class="cx">         self.propertyStore2._globalKeys = store._globalKeys
</span><span class="cx"> 
</span><ins>+        store = self.propertyStore3
+        self.propertyStore3 = yield PropertyStore.load(&quot;user01&quot;, None, &quot;user03&quot;, self._txn, 1)
+        self.propertyStore3._shadowableKeys = store._shadowableKeys
+        self.propertyStore3._proxyOverrideKeys = store._proxyOverrideKeys
+        self.propertyStore3._globalKeys = store._globalKeys
</ins><span class="cx"> 
</span><ins>+        store = self.propertyStore4
+        self.propertyStore4 = yield PropertyStore.load(&quot;user01&quot;, &quot;user02&quot;, &quot;user04&quot;, self._txn, 1)
+        self.propertyStore4._shadowableKeys = store._shadowableKeys
+        self.propertyStore4._proxyOverrideKeys = store._proxyOverrideKeys
+        self.propertyStore4._globalKeys = store._globalKeys
+
+
</ins><span class="cx">     @inlineCallbacks
</span><span class="cx">     def test_concurrentInsertion(self):
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="lines">@@ -126,7 +157,7 @@
</span><span class="cx">                 pass
</span><span class="cx">         self.addCleanup(maybeAbortIt)
</span><span class="cx">         concurrentPropertyStore = yield PropertyStore.load(
</span><del>-            &quot;user01&quot;, None, concurrentTxn, 1
</del><ins>+            &quot;user01&quot;, None, None, concurrentTxn, 1
</ins><span class="cx">         )
</span><span class="cx">         concurrentPropertyStore[pname] = pval1
</span><span class="cx">         race = []
</span><span class="lines">@@ -155,8 +186,8 @@
</span><span class="cx">     def test_copy(self):
</span><span class="cx"> 
</span><span class="cx">         # Existing store
</span><del>-        store1_user1 = yield PropertyStore.load(&quot;user01&quot;, None, self._txn, 2)
-        store1_user2 = yield PropertyStore.load(&quot;user01&quot;, &quot;user02&quot;, self._txn, 2)
</del><ins>+        store1_user1 = yield PropertyStore.load(&quot;user01&quot;, None, None, self._txn, 2)
+        store1_user2 = yield PropertyStore.load(&quot;user01&quot;, &quot;user02&quot;, None, self._txn, 2)
</ins><span class="cx"> 
</span><span class="cx">         # Populate current store with data
</span><span class="cx">         props_user1 = (
</span><span class="lines">@@ -178,18 +209,18 @@
</span><span class="cx">         self._txn = self.store.newTransaction()
</span><span class="cx"> 
</span><span class="cx">         # Existing store
</span><del>-        store1_user1 = yield PropertyStore.load(&quot;user01&quot;, None, self._txn, 2)
</del><ins>+        store1_user1 = yield PropertyStore.load(&quot;user01&quot;, None, None, self._txn, 2)
</ins><span class="cx"> 
</span><span class="cx">         # New store
</span><del>-        store2_user1 = yield PropertyStore.load(&quot;user01&quot;, None, self._txn, 3)
</del><ins>+        store2_user1 = yield PropertyStore.load(&quot;user01&quot;, None, None, self._txn, 3)
</ins><span class="cx"> 
</span><span class="cx">         # Do copy and check results
</span><span class="cx">         yield store2_user1.copyAllProperties(store1_user1)
</span><span class="cx"> 
</span><span class="cx">         self.assertEqual(store1_user1.keys(), store2_user1.keys())
</span><span class="cx"> 
</span><del>-        store1_user2 = yield PropertyStore.load(&quot;user01&quot;, &quot;user02&quot;, self._txn, 2)
-        store2_user2 = yield PropertyStore.load(&quot;user01&quot;, &quot;user02&quot;, self._txn, 3)
</del><ins>+        store1_user2 = yield PropertyStore.load(&quot;user01&quot;, &quot;user02&quot;, None, self._txn, 2)
+        store2_user2 = yield PropertyStore.load(&quot;user01&quot;, &quot;user02&quot;, None, self._txn, 3)
</ins><span class="cx">         self.assertEqual(store1_user2.keys(), store2_user2.keys())
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="lines">@@ -197,7 +228,7 @@
</span><span class="cx">     def test_insert_delete(self):
</span><span class="cx"> 
</span><span class="cx">         # Existing store
</span><del>-        store1_user1 = yield PropertyStore.load(&quot;user01&quot;, None, self._txn, 2)
</del><ins>+        store1_user1 = yield PropertyStore.load(&quot;user01&quot;, None, None, self._txn, 2)
</ins><span class="cx"> 
</span><span class="cx">         pname = propertyName(&quot;dummy1&quot;)
</span><span class="cx">         pvalue = propertyValue(&quot;value1-user1&quot;)
</span><span class="lines">@@ -221,7 +252,7 @@
</span><span class="cx"> 
</span><span class="cx">         # Existing store - add a normal property
</span><span class="cx">         self.assertFalse(&quot;SQL.props:10/user01&quot; in PropertyStore._cacher._memcacheProtocol._cache)
</span><del>-        store1_user1 = yield PropertyStore.load(&quot;user01&quot;, None, self._txn, 10)
</del><ins>+        store1_user1 = yield PropertyStore.load(&quot;user01&quot;, None, None, self._txn, 10)
</ins><span class="cx">         self.assertTrue(&quot;SQL.props:10/user01&quot; in PropertyStore._cacher._memcacheProtocol._cache)
</span><span class="cx"> 
</span><span class="cx">         pname1 = propertyName(&quot;dummy1&quot;)
</span><span class="lines">@@ -237,7 +268,7 @@
</span><span class="cx">         # Existing store - add a large property
</span><span class="cx">         self._txn = self.store.newTransaction()
</span><span class="cx">         self.assertFalse(&quot;SQL.props:10/user01&quot; in PropertyStore._cacher._memcacheProtocol._cache)
</span><del>-        store1_user1 = yield PropertyStore.load(&quot;user01&quot;, None, self._txn, 10)
</del><ins>+        store1_user1 = yield PropertyStore.load(&quot;user01&quot;, None, None, self._txn, 10)
</ins><span class="cx">         self.assertTrue(&quot;SQL.props:10/user01&quot; in PropertyStore._cacher._memcacheProtocol._cache)
</span><span class="cx"> 
</span><span class="cx">         pname2 = propertyName(&quot;dummy2&quot;)
</span><span class="lines">@@ -253,7 +284,7 @@
</span><span class="cx">         # Try again - the cacher will fail large values
</span><span class="cx">         self._txn = self.store.newTransaction()
</span><span class="cx">         self.assertFalse(&quot;SQL.props:10/user01&quot; in PropertyStore._cacher._memcacheProtocol._cache)
</span><del>-        store1_user1 = yield PropertyStore.load(&quot;user01&quot;, None, self._txn, 10)
</del><ins>+        store1_user1 = yield PropertyStore.load(&quot;user01&quot;, None, None, self._txn, 10)
</ins><span class="cx">         self.assertFalse(&quot;SQL.props:10/user01&quot; in store1_user1._cacher._memcacheProtocol._cache)
</span><span class="cx"> 
</span><span class="cx">         self.assertEqual(store1_user1[pname1], pvalue1)
</span><span class="lines">@@ -280,7 +311,7 @@
</span><span class="cx"> 
</span><span class="cx">         # Existing store - add a normal property
</span><span class="cx">         self.assertFalse(&quot;SQL.props:10/user01&quot; in PropertyStore._cacher._memcacheProtocol._cache)
</span><del>-        store1_user1 = yield PropertyStore.load(&quot;user01&quot;, None, self._txn, 10)
</del><ins>+        store1_user1 = yield PropertyStore.load(&quot;user01&quot;, None, None, self._txn, 10)
</ins><span class="cx">         self.assertFalse(&quot;SQL.props:10/user01&quot; in PropertyStore._cacher._memcacheProtocol._cache)
</span><span class="cx"> 
</span><span class="cx">         pname1 = propertyName(&quot;dummy1&quot;)
</span><span class="lines">@@ -297,7 +328,7 @@
</span><span class="cx"> 
</span><span class="cx">         # Existing store - check a normal property
</span><span class="cx">         self.assertFalse(&quot;SQL.props:10/user01&quot; in PropertyStore._cacher._memcacheProtocol._cache)
</span><del>-        store1_user1 = yield PropertyStore.load(&quot;user01&quot;, None, self._txn, 10)
</del><ins>+        store1_user1 = yield PropertyStore.load(&quot;user01&quot;, None, None, self._txn, 10)
</ins><span class="cx">         self.assertFalse(&quot;SQL.props:10/user01&quot; in PropertyStore._cacher._memcacheProtocol._cache)
</span><span class="cx">         self.assertEqual(store1_user1[pname1], pvalue1)
</span><span class="cx"> 
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetxdavbasepropertystoretesttest_xattrpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/base/propertystore/test/test_xattr.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -43,6 +43,12 @@
</span><span class="cx">         self.propertyStore1 = self.propertyStore
</span><span class="cx">         self.propertyStore2 = PropertyStore(&quot;user01&quot;, lambda : tempFile)
</span><span class="cx">         self.propertyStore2._setPerUserUID(&quot;user02&quot;)
</span><ins>+        self.propertyStore2._setProxyUID(&quot;user02&quot;)
+        self.propertyStore3 = PropertyStore(&quot;user01&quot;, lambda : tempFile)
+        self.propertyStore3._setProxyUID(&quot;user03&quot;)
+        self.propertyStore4 = PropertyStore(&quot;user01&quot;, lambda : tempFile)
+        self.propertyStore4._setPerUserUID(&quot;user02&quot;)
+        self.propertyStore4._setProxyUID(&quot;user04&quot;)
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     def test_init(self):
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetxdavcaldavdatastorefilepy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/file.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -319,6 +319,7 @@
</span><span class="cx">                 PropertyName.fromElement(customxml.GETCTag),
</span><span class="cx">                 PropertyName.fromElement(caldavxml.SupportedCalendarComponentSet),
</span><span class="cx">             ),
</span><ins>+            (),
</ins><span class="cx">         )
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="lines">@@ -748,6 +749,7 @@
</span><span class="cx">                 PropertyName.fromElement(customxml.TwistedCalendarHasPrivateCommentsProperty),
</span><span class="cx">                 PropertyName.fromElement(customxml.ScheduleChanges),
</span><span class="cx">             ),
</span><ins>+            (),
</ins><span class="cx">         )
</span><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetxdavcaldavdatastoreschedulingicaldiffpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/scheduling/icaldiff.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -693,7 +693,7 @@
</span><span class="cx">         newexdates = set()
</span><span class="cx">         exdates = component.properties(&quot;EXDATE&quot;)
</span><span class="cx">         for exdate in exdates:
</span><del>-            newexdates.update([value.getValue().duplicate().adjustToUTC() for value in exdate.value()])
</del><ins>+            newexdates.update([exvalue.getValue().duplicate().adjustToUTC() for exvalue in exdate.value()])
</ins><span class="cx"> 
</span><span class="cx">         return timeRange.getStart(), timeRange.getEnd(), newdue, newrrules, newrdates, newexdates
</span><span class="cx"> 
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetxdavcaldavdatastoreschedulingworkpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/scheduling/work.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -174,7 +174,6 @@
</span><span class="cx">             smartMerge=smart_merge
</span><span class="cx">         ))
</span><span class="cx">         cls._enqueued()
</span><del>-        yield proposal.whenProposed()
</del><span class="cx">         log.debug(&quot;ScheduleOrganizerWork - enqueued for ID: {id}, UID: {uid}, organizer: {org}&quot;, id=proposal.workItem.workID, uid=uid, org=organizer)
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="lines">@@ -296,7 +295,6 @@
</span><span class="cx">             changedRids=&quot;,&quot;.join(map(lambda x: &quot;&quot; if x is None else str(x), changedRids)) if changedRids else None,
</span><span class="cx">         ))
</span><span class="cx">         cls._enqueued()
</span><del>-        yield proposal.whenProposed()
</del><span class="cx">         log.debug(&quot;ScheduleReplyWork - enqueued for ID: {id}, UID: {uid}, attendee: {att}&quot;, id=proposal.workItem.workID, uid=resource.uid(), att=attendee)
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="lines">@@ -379,7 +377,6 @@
</span><span class="cx">             icalendarText=calendar.getTextWithTimezones(includeTimezones=not config.EnableTimezonesByReference),
</span><span class="cx">         ))
</span><span class="cx">         cls._enqueued()
</span><del>-        yield proposal.whenProposed()
</del><span class="cx">         log.debug(&quot;ScheduleReplyCancelWork - enqueued for ID: {id}, UID: {uid}, attendee: {att}&quot;, id=proposal.workItem.workID, uid=calendar.resourceUID(), att=attendee)
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="lines">@@ -486,7 +483,6 @@
</span><span class="cx">             notBefore=notBefore,
</span><span class="cx">         ))
</span><span class="cx">         cls._enqueued()
</span><del>-        yield proposal.whenProposed()
</del><span class="cx">         log.debug(&quot;ScheduleRefreshWork - enqueued for ID: {id}, UID: {uid}, attendees: {att}&quot;, id=proposal.workItem.workID, uid=organizer_resource.uid(), att=&quot;,&quot;.join(attendeesToRefresh))
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="lines">@@ -626,7 +622,6 @@
</span><span class="cx">             notBefore=notBefore,
</span><span class="cx">         ))
</span><span class="cx">         cls._enqueued()
</span><del>-        yield proposal.whenProposed()
</del><span class="cx">         log.debug(&quot;ScheduleAutoReplyWork - enqueued for ID: {id}, UID: {uid}&quot;, id=proposal.workItem.workID, uid=resource.uid())
</span><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetxdavcaldavdatastoresqlpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/sql.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -48,7 +48,7 @@
</span><span class="cx"> from twisted.python import hashlib
</span><span class="cx"> from twisted.python.failure import Failure
</span><span class="cx"> 
</span><del>-from twistedcaldav import caldavxml, customxml, ical
</del><ins>+from twistedcaldav import customxml, ical
</ins><span class="cx"> from twistedcaldav.config import config
</span><span class="cx"> from twistedcaldav.datafilters.peruserdata import PerUserDataFilter
</span><span class="cx"> from twistedcaldav.dateops import normalizeForIndex, datetimeMktime, \
</span><span class="lines">@@ -56,6 +56,7 @@
</span><span class="cx"> from twistedcaldav.ical import Component, InvalidICalendarDataError, Property
</span><span class="cx"> from twistedcaldav.instance import InvalidOverriddenInstanceError
</span><span class="cx"> from twistedcaldav.memcacher import Memcacher
</span><ins>+from twistedcaldav.timezones import TimezoneException
</ins><span class="cx"> 
</span><span class="cx"> from txdav.base.propertystore.base import PropertyName
</span><span class="cx"> from txdav.caldav.datastore.query.builder import buildExpression
</span><span class="lines">@@ -80,7 +81,7 @@
</span><span class="cx">     InvalidDefaultCalendar, \
</span><span class="cx">     InvalidAttachmentOperation, DuplicatePrivateCommentsError, \
</span><span class="cx">     TimeRangeUpperLimit, TimeRangeLowerLimit, InvalidSplit, \
</span><del>-    AttachmentSizeTooLarge
</del><ins>+    AttachmentSizeTooLarge, UnknownTimezone
</ins><span class="cx"> from txdav.caldav.icalendarstore import QuotaExceeded
</span><span class="cx"> from txdav.common.datastore.sql import CommonHome, CommonHomeChild, \
</span><span class="cx">     CommonObjectResource, ECALENDARTYPE
</span><span class="lines">@@ -94,8 +95,9 @@
</span><span class="cx">     ObjectResourceNameNotAllowedError, TooManyObjectResourcesError, \
</span><span class="cx">     InvalidUIDError, UIDExistsError, UIDExistsElsewhereError, \
</span><span class="cx">     InvalidResourceMove, InvalidComponentForStoreError, \
</span><del>-    NoSuchObjectResourceError
</del><ins>+    NoSuchObjectResourceError, ConcurrentModification
</ins><span class="cx"> from txdav.xml import element
</span><ins>+from txdav.xml.parser import WebDAVDocument
</ins><span class="cx"> 
</span><span class="cx"> from txdav.idav import ChangeCategory
</span><span class="cx"> 
</span><span class="lines">@@ -966,6 +968,10 @@
</span><span class="cx"> 
</span><span class="cx">     _supportedComponents = None
</span><span class="cx"> 
</span><ins>+    _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])
+
</ins><span class="cx">     def __init__(self, *args, **kw):
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="cx">         Initialize a calendar pointing at a record in a database.
</span><span class="lines">@@ -1294,17 +1300,9 @@
</span><span class="cx">     def initPropertyStore(self, props):
</span><span class="cx">         # Setup peruser special properties
</span><span class="cx">         props.setSpecialProperties(
</span><del>-            # Shadowable
-            (
-                PropertyName.fromElement(caldavxml.CalendarDescription),
-                PropertyName.fromElement(caldavxml.CalendarTimeZone),
-            ),
-
-            # Global
-            (
-                PropertyName.fromElement(customxml.GETCTag),
-                PropertyName.fromElement(caldavxml.SupportedCalendarComponentSet),
-            ),
</del><ins>+            self._shadowProperties,
+            self._globalProperties,
+            self._proxyProperties,
</ins><span class="cx">         )
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="lines">@@ -1353,9 +1351,9 @@
</span><span class="cx">         Sub-classes should override to expose the properties they care about.
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="cx">         props = {}
</span><del>-        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)])
</del><ins>+        for ename in (PropertyName.fromElement(element.DisplayName),) + self._shadowProperties:
+            if ename in self.properties():
+                props[ename.toString()] = self.properties()[ename].toxml()
</ins><span class="cx">         return props
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="lines">@@ -1366,15 +1364,15 @@
</span><span class="cx">         care about.
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="cx">         # Initialize these for all shares
</span><del>-        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()])
</del><ins>+        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
</ins><span class="cx"> 
</span><span class="cx">         # Only initialize these for direct shares
</span><span class="cx">         if self.direct():
</span><del>-            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()])
</del><ins>+            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
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     # FIXME: this is DAV-ish.  Data store calendar objects don't have
</span><span class="lines">@@ -1894,6 +1892,10 @@
</span><span class="cx"> 
</span><span class="cx">         # Basic validation
</span><span class="cx"> 
</span><ins>+        # Possible timezone stripping
+        if config.EnableTimezonesByReference:
+            component.stripKnownTimezones()
+
</ins><span class="cx">         # Do validation on external requests
</span><span class="cx">         if internal_state == ComponentUpdateState.NORMAL:
</span><span class="cx"> 
</span><span class="lines">@@ -1920,10 +1922,6 @@
</span><span class="cx">             # Valid attendee list size check
</span><span class="cx">             yield self.validAttendeeListSizeCheck(component, inserting)
</span><span class="cx"> 
</span><del>-        # Possible timezone stripping
-        if config.EnableTimezonesByReference:
-            component.stripKnownTimezones()
-
</del><span class="cx">         # Check location/resource organizer requirement
</span><span class="cx">         self.validLocationResourceOrganizer(component, inserting, internal_state)
</span><span class="cx"> 
</span><span class="lines">@@ -2098,12 +2096,16 @@
</span><span class="cx"> 
</span><span class="cx">         try:
</span><span class="cx">             component.validCalendarData(validateRecurrences=self._txn._migrating)
</span><del>-        except InvalidICalendarDataError, e:
</del><ins>+        except InvalidICalendarDataError as e:
</ins><span class="cx">             raise InvalidObjectResourceError(str(e))
</span><span class="cx">         try:
</span><span class="cx">             component.validCalendarForCalDAV(methodAllowed=self.calendar().isInbox())
</span><del>-        except InvalidICalendarDataError, e:
</del><ins>+        except InvalidICalendarDataError as e:
</ins><span class="cx">             raise InvalidComponentForStoreError(str(e))
</span><ins>+        except TimezoneException as e:
+            # tzid not available
+            raise UnknownTimezone(str(e))
+
</ins><span class="cx">         try:
</span><span class="cx">             if self._txn._migrating:
</span><span class="cx">                 component.validOrganizerForScheduling(doFix=True)
</span><span class="lines">@@ -2169,17 +2171,14 @@
</span><span class="cx">                 cutype == &quot;RESOURCE&quot; and config.Scheduling.Options.TrackUnscheduledResourceData):
</span><span class="cx"> 
</span><span class="cx">                 # Find current principal and update modified by details
</span><del>-                if self._txn._authz_uid is not None:
-                    authz = yield self.directoryService().recordWithUID(self._txn._authz_uid.decode(&quot;utf-8&quot;))
-                    prop = Property(&quot;X-CALENDARSERVER-MODIFIED-BY&quot;, authz.canonicalCalendarUserAddress())
-                    prop.setParameter(&quot;CN&quot;, authz.displayName)
-                    for candidate in authz.calendarUserAddresses:
-                        if candidate.startswith(&quot;mailto:&quot;):
-                            prop.setParameter(&quot;EMAIL&quot;, candidate[7:])
-                            break
-                    component.replacePropertyInAllComponents(prop)
-                else:
-                    component.removeAllPropertiesWithName(&quot;X-CALENDARSERVER-MODIFIED-BY&quot;)
</del><ins>+                authz = yield self.directoryService().recordWithUID(self.calendar().viewerHome().authzuid().decode(&quot;utf-8&quot;))
+                prop = Property(&quot;X-CALENDARSERVER-MODIFIED-BY&quot;, authz.canonicalCalendarUserAddress())
+                prop.setParameter(&quot;CN&quot;, authz.displayName)
+                for candidate in authz.calendarUserAddresses:
+                    if candidate.startswith(&quot;mailto:&quot;):
+                        prop.setParameter(&quot;EMAIL&quot;, candidate[7:])
+                        break
+                component.replacePropertyInAllComponents(prop)
</ins><span class="cx">                 self._componentChanged = True
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="lines">@@ -2197,7 +2196,7 @@
</span><span class="cx"> 
</span><span class="cx">             # Only DAV:owner is able to set the property to other than PUBLIC
</span><span class="cx">             if internal_state == ComponentUpdateState.NORMAL:
</span><del>-                if (self._txn._authz_uid is None or self.calendar().viewerHome().uid() != self._txn._authz_uid) and access != Component.ACCESS_PUBLIC:
</del><ins>+                if (self.calendar().viewerHome().uid() != self.calendar().viewerHome().authzuid()) and access != Component.ACCESS_PUBLIC:
</ins><span class="cx">                     raise InvalidCalendarAccessError(&quot;Private event access level change not allowed&quot;)
</span><span class="cx"> 
</span><span class="cx">             self.accessMode = access
</span><span class="lines">@@ -3916,13 +3915,16 @@
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     def initPropertyStore(self, props):
</span><del>-        # Setup peruser special properties
</del><ins>+        # 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 &quot;live&quot; property which we
+        # keep in the propstore.
</ins><span class="cx">         props.setSpecialProperties(
</span><span class="cx">             (
</span><span class="cx">             ),
</span><span class="cx">             (
</span><span class="cx">                 PropertyName.fromElement(customxml.ScheduleChanges),
</span><span class="cx">             ),
</span><ins>+            (),
</ins><span class="cx">         )
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="lines">@@ -4046,7 +4048,7 @@
</span><span class="cx">             in L{CalendarObject.splitAt}).
</span><span class="cx">         @type rid: L{DateTime}
</span><span class="cx">         @param olderUID: sets the iCalendar UID to be used in the new resource created during the split.
</span><del>-            If L{None} a UUID is generated and used.
</del><ins>+            If set to L{None}, a UUID is generated and used.
</ins><span class="cx">         @type olderUID: L{str}
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="cx"> 
</span><span class="lines">@@ -4068,7 +4070,7 @@
</span><span class="cx">         newerUID = calendar.resourceUID()
</span><span class="cx">         if olderUID is None:
</span><span class="cx">             olderUID = str(uuid.uuid4())
</span><del>-            olderResourceName = olderUID
</del><ins>+            olderResourceName = &quot;{0}.ics&quot;.format(olderUID)
</ins><span class="cx">         else:
</span><span class="cx">             olderResourceName = &quot;{0}.ics&quot;.format(olderUID.encode(&quot;base64&quot;)[:-1].rstrip(&quot;=&quot;))
</span><span class="cx"> 
</span><span class="lines">@@ -4105,10 +4107,19 @@
</span><span class="cx">     @inlineCallbacks
</span><span class="cx">     def splitForAttendee(self, rid=None, olderUID=None):
</span><span class="cx">         &quot;&quot;&quot;
</span><del>-        Split this attendee resource as per L{split}.
</del><ins>+        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.
</ins><span class="cx">         &quot;&quot;&quot;
</span><span class="cx">         splitter = iCalSplitter(config.Scheduling.Options.Splitting.Size, config.Scheduling.Options.Splitting.PastDays)
</span><del>-        ical = (yield self.component())
</del><ins>+        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)
+
</ins><span class="cx">         ical_old, ical_new = splitter.split(ical, rid=rid, olderUID=olderUID)
</span><span class="cx">         ical_new.bumpiTIPInfo(oldcalendar=ical, doSequence=True)
</span><span class="cx">         ical_old.bumpiTIPInfo(oldcalendar=None, doSequence=True)
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetxdavcaldavdatastoretesttest_implicitpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/test/test_implicit.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -306,18 +306,18 @@
</span><span class="cx"> &quot;&quot;&quot;
</span><span class="cx"> 
</span><span class="cx">         self.patch(config, &quot;EnablePrivateEvents&quot;, True)
</span><ins>+        txn = self.transactionUnderTest()
+        txn._authz_uid = &quot;user02&quot;
</ins><span class="cx">         calendar_collection = (yield self.calendarUnderTest(home=&quot;user01&quot;))
</span><span class="cx">         calendar = Component.fromString(data1)
</span><del>-        txn = self.transactionUnderTest()
-        txn._authz_uid = &quot;user02&quot;
</del><span class="cx">         yield self.failUnlessFailure(calendar_collection.createCalendarObjectWithName(&quot;test.ics&quot;, calendar), InvalidCalendarAccessError)
</span><span class="cx">         yield self.commit()
</span><span class="cx"> 
</span><span class="cx">         # This one should be OK
</span><ins>+        txn = self.transactionUnderTest()
+        txn._authz_uid = &quot;user01&quot;
</ins><span class="cx">         calendar_collection = (yield self.calendarUnderTest(home=&quot;user01&quot;))
</span><span class="cx">         calendar = Component.fromString(data1)
</span><del>-        txn = self.transactionUnderTest()
-        txn._authz_uid = &quot;user01&quot;
</del><span class="cx">         yield calendar_collection.createCalendarObjectWithName(&quot;test.ics&quot;, calendar)
</span><span class="cx">         yield self.commit()
</span><span class="cx"> 
</span><span class="lines">@@ -335,10 +335,10 @@
</span><span class="cx"> END:VCALENDAR
</span><span class="cx"> &quot;&quot;&quot;
</span><span class="cx"> 
</span><ins>+        txn = self.transactionUnderTest()
+        txn._authz_uid = &quot;user01&quot;
</ins><span class="cx">         calendar_resource = (yield self.calendarObjectUnderTest(name=&quot;test.ics&quot;, home=&quot;user01&quot;,))
</span><span class="cx">         calendar = Component.fromString(data2)
</span><del>-        txn = self.transactionUnderTest()
-        txn._authz_uid = &quot;user01&quot;
</del><span class="cx">         yield calendar_resource.setComponent(calendar)
</span><span class="cx">         yield self.commit()
</span><span class="cx"> 
</span><span class="lines">@@ -516,10 +516,10 @@
</span><span class="cx"> END:VCALENDAR
</span><span class="cx"> &quot;&quot;&quot;
</span><span class="cx"> 
</span><ins>+        txn = self.transactionUnderTest()
+        txn._authz_uid = &quot;user01&quot;
</ins><span class="cx">         calendar_resource = (yield self.calendarObjectUnderTest(name=&quot;test.ics&quot;, home=&quot;user01&quot;,))
</span><span class="cx">         calendar = Component.fromString(data2)
</span><del>-        txn = self.transactionUnderTest()
-        txn._authz_uid = &quot;user01&quot;
</del><span class="cx">         yield calendar_resource.setComponent(calendar)
</span><span class="cx">         yield self.commit()
</span><span class="cx"> 
</span><span class="lines">@@ -569,10 +569,10 @@
</span><span class="cx"> END:VCALENDAR
</span><span class="cx"> &quot;&quot;&quot;
</span><span class="cx"> 
</span><ins>+        txn = self.transactionUnderTest()
+        txn._authz_uid = &quot;user01&quot;
</ins><span class="cx">         calendar_resource = (yield self.calendarObjectUnderTest(name=&quot;test.ics&quot;, home=&quot;user01&quot;,))
</span><span class="cx">         calendar = Component.fromString(data2)
</span><del>-        txn = self.transactionUnderTest()
-        txn._authz_uid = &quot;user01&quot;
</del><span class="cx">         yield calendar_resource.setComponent(calendar)
</span><span class="cx">         yield self.commit()
</span><span class="cx"> 
</span><span class="lines">@@ -623,10 +623,10 @@
</span><span class="cx"> END:VCALENDAR
</span><span class="cx"> &quot;&quot;&quot;
</span><span class="cx"> 
</span><ins>+        txn = self.transactionUnderTest()
+        txn._authz_uid = &quot;user01&quot;
</ins><span class="cx">         calendar_resource = (yield self.calendarObjectUnderTest(name=&quot;test.ics&quot;, home=&quot;user01&quot;,))
</span><span class="cx">         calendar = Component.fromString(data2)
</span><del>-        txn = self.transactionUnderTest()
-        txn._authz_uid = &quot;user01&quot;
</del><span class="cx">         yield calendar_resource.setComponent(calendar)
</span><span class="cx">         yield self.commit()
</span><span class="cx"> 
</span><span class="lines">@@ -682,10 +682,10 @@
</span><span class="cx"> END:VCALENDAR
</span><span class="cx"> &quot;&quot;&quot;
</span><span class="cx"> 
</span><ins>+        txn = self.transactionUnderTest()
+        txn._authz_uid = &quot;user01&quot;
</ins><span class="cx">         calendar_resource = (yield self.calendarObjectUnderTest(name=&quot;test.ics&quot;, home=&quot;user01&quot;,))
</span><span class="cx">         calendar = Component.fromString(data2)
</span><del>-        txn = self.transactionUnderTest()
-        txn._authz_uid = &quot;user01&quot;
</del><span class="cx">         yield calendar_resource.setComponent(calendar)
</span><span class="cx">         yield self.commit()
</span><span class="cx"> 
</span><span class="lines">@@ -789,10 +789,10 @@
</span><span class="cx"> END:VCALENDAR
</span><span class="cx"> &quot;&quot;&quot;
</span><span class="cx"> 
</span><ins>+        txn = self.transactionUnderTest()
+        txn._authz_uid = &quot;user01&quot;
</ins><span class="cx">         calendar_resource = (yield self.calendarObjectUnderTest(name=&quot;test.ics&quot;, home=&quot;user01&quot;,))
</span><span class="cx">         calendar = Component.fromString(data2)
</span><del>-        txn = self.transactionUnderTest()
-        txn._authz_uid = &quot;user01&quot;
</del><span class="cx">         result = (yield calendar_resource.setComponent(calendar))
</span><span class="cx">         yield self.commit()
</span><span class="cx">         self.assertTrue(result)
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetxdavcaldavdatastoretesttest_sqlpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/test/test_sql.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -35,7 +35,7 @@
</span><span class="cx"> 
</span><span class="cx"> from twistedcaldav import caldavxml, ical
</span><span class="cx"> from twistedcaldav.caldavxml import CalendarDescription
</span><del>-from twistedcaldav.config import config
</del><ins>+from twistedcaldav.stdconfig import config
</ins><span class="cx"> from twistedcaldav.dateops import datetimeMktime
</span><span class="cx"> from twistedcaldav.ical import Component, normalize_iCalStr, diff_iCalStrs
</span><span class="cx"> from twistedcaldav.instance import InvalidOverriddenInstanceError
</span><span class="lines">@@ -49,19 +49,21 @@
</span><span class="cx"> from txdav.caldav.datastore.scheduling.itip import iTIPRequestStatus
</span><span class="cx"> from txdav.caldav.datastore.scheduling.processing import ImplicitProcessor
</span><span class="cx"> from txdav.caldav.datastore.scheduling.scheduler import ScheduleResponseQueue
</span><del>-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
</del><ins>+from txdav.caldav.datastore.sql import CalendarStoreFeatures
</ins><span class="cx"> from txdav.common.datastore.sql import ECALENDARTYPE, CommonObjectResource, \
</span><span class="cx">     CommonStoreTransactionMonitor
</span><span class="cx"> from txdav.common.datastore.sql_tables import schema, _BIND_MODE_DIRECT, \
</span><span class="cx">     _BIND_STATUS_ACCEPTED, _TRANSP_OPAQUE
</span><ins>+from txdav.caldav.datastore.test.common import CommonTests as CalendarCommonTests, \
+    test_event_text
+from txdav.caldav.datastore.test.test_file import setUpCalendarStore
</ins><span class="cx"> from txdav.common.datastore.test.util import populateCalendarsFrom, \
</span><span class="cx">     CommonCommonTests
</span><del>-from txdav.common.icommondatastore import NoSuchObjectResourceError
</del><ins>+from txdav.caldav.datastore.util import _migrateCalendar, migrateHome
+from txdav.caldav.icalendarstore import ComponentUpdateState, InvalidDefaultCalendar, \
+    InvalidSplit, UnknownTimezone
+from txdav.common.icommondatastore import NoSuchObjectResourceError, \
+    InvalidComponentForStoreError
</ins><span class="cx"> from txdav.idav import ChangeCategory
</span><span class="cx"> from txdav.xml.rfc2518 import GETContentLanguage, ResourceType
</span><span class="cx"> 
</span><span class="lines">@@ -1976,7 +1978,46 @@
</span><span class="cx">         self.assertFalse(inbox.isUsedForFreeBusy())
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+    @inlineCallbacks
+    def test_missingTimezone(self):
+        &quot;&quot;&quot;
+        Make sure missing timezone causes an exception, whether or timezones by reference is on.
+        &quot;&quot;&quot;
+        data = &quot;&quot;&quot;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
+&quot;&quot;&quot;
</ins><span class="cx"> 
</span><ins>+        self.patch(config, &quot;EnableTimezonesByReference&quot;, False)
+
+        yield self.homeUnderTest(name=&quot;user01&quot;, create=True)
+        calendar = yield self.calendarUnderTest(name=&quot;calendar&quot;, home=&quot;user01&quot;)
+        yield self.failUnlessFailure(
+            calendar.createCalendarObjectWithName(&quot;data1.ics&quot;, Component.fromString(data)),
+            InvalidComponentForStoreError,
+        )
+        yield self.abort()
+
+        self.patch(config, &quot;EnableTimezonesByReference&quot;, True)
+
+        yield self.homeUnderTest(name=&quot;user01&quot;, create=True)
+        calendar = yield self.calendarUnderTest(name=&quot;calendar&quot;, home=&quot;user01&quot;)
+        yield self.failUnlessFailure(
+            calendar.createCalendarObjectWithName(&quot;data1.ics&quot;, Component.fromString(data)),
+            UnknownTimezone,
+        )
+        yield self.abort()
+
+
+
</ins><span class="cx"> class SchedulingTests(CommonCommonTests, unittest.TestCase):
</span><span class="cx">     &quot;&quot;&quot;
</span><span class="cx">     CalendarObject splitting tests
</span><span class="lines">@@ -2166,8 +2207,8 @@
</span><span class="cx"> PRODID:-//Apple Inc.//Mac OS X 10.9.1//EN
</span><span class="cx"> BEGIN:VEVENT
</span><span class="cx"> UID:561F5DBB-3F38-4B3A-986F-DD05CBAF554F
</span><del>-DTSTART;TZID=America/Los_Angeles:20131211T164500
-DTEND;TZID=America/Los_Angeles:20131211T174500
</del><ins>+DTSTART:20131211T164500Z
+DURATION:PT1H
</ins><span class="cx"> ATTENDEE;CN=Conference Room One;CUTYPE=ROOM;PARTSTAT=ACCEPTED;ROLE=REQ-PARTICIPAN
</span><span class="cx">  T;SCHEDULE-STATUS=2.0:urn:x-uid:room-addr-1
</span><span class="cx"> ATTENDEE;CN=User 01;CUTYPE=INDIVIDUAL;EMAIL=user01@example.com;PARTSTAT=AC
</span><span class="lines">@@ -2182,9 +2223,9 @@
</span><span class="cx"> END:VEVENT
</span><span class="cx"> BEGIN:VEVENT
</span><span class="cx"> UID:561F5DBB-3F38-4B3A-986F-DD05CBAF554F
</span><del>-RECURRENCE-ID;TZID=America/Los_Angeles:20131214T164500
-DTSTART;TZID=America/Los_Angeles:20131214T160000
-DTEND;TZID=America/Los_Angeles:20131214T170000
</del><ins>+RECURRENCE-ID:20131214T164500Z
+DTSTART:20131214T160000Z
+DURATION:PT1H
</ins><span class="cx"> ATTENDEE;CN=Conference Room Two;CUTYPE=ROOM;PARTSTAT=ACCEPTED;ROLE=REQ-PARTICIPAN
</span><span class="cx">  T;SCHEDULE-STATUS=2.0:urn:x-uid:room-addr-2
</span><span class="cx"> ATTENDEE;CN=User 01;CUTYPE=INDIVIDUAL;EMAIL=user01@example.com;PARTSTAT=AC
</span><span class="lines">@@ -2239,8 +2280,8 @@
</span><span class="cx"> PRODID:-//Apple Inc.//Mac OS X 10.9.1//EN
</span><span class="cx"> BEGIN:VEVENT
</span><span class="cx"> UID:561F5DBB-3F38-4B3A-986F-DD05CBAF554F
</span><del>-DTSTART;TZID=America/Los_Angeles:20131211T164500
-DTEND;TZID=America/Los_Angeles:20131211T174500
</del><ins>+DTSTART:20131211T164500Z
+DURATION:PT1H
</ins><span class="cx"> ATTENDEE;X-APPLE-HOSTED-STATUS=EXTERNAL:urn:x-uid:user01
</span><span class="cx"> ATTENDEE:mailto:someone_external@example.com
</span><span class="cx"> CREATED:20131211T221854Z
</span><span class="lines">@@ -2292,14 +2333,14 @@
</span><span class="cx"> PRODID:-//Apple Inc.//Mac OS X 10.9.1//EN
</span><span class="cx"> BEGIN:VEVENT
</span><span class="cx"> UID:561F5DBB-3F38-4B3A-986F-DD05CBAF554F
</span><del>-DTSTART;TZID=America/Los_Angeles:20131211T164500
</del><ins>+DTSTART:20131211T164500Z
</ins><span class="cx"> DURATION:PT1H
</span><span class="cx"> ATTENDEE:urn:x-uid:user01
</span><span class="cx"> CREATED:20131211T221854Z
</span><span class="cx"> DTSTAMP:20131211T230632Z
</span><span class="cx"> ORGANIZER:urn:x-uid:user01
</span><span class="cx"> RRULE:FREQ=DAILY;COUNT=1
</span><del>-EXDATE;TZID=America/Los_Angeles:20131211T164500
</del><ins>+EXDATE:20131211T164500Z
</ins><span class="cx"> SUMMARY:external
</span><span class="cx"> END:VEVENT
</span><span class="cx"> END:VCALENDAR
</span><span class="lines">@@ -5334,7 +5375,7 @@
</span><span class="cx"> BEGIN:VEVENT
</span><span class="cx"> UID:12345-67890
</span><span class="cx"> DTSTART:%(now_back30)s
</span><del>-DURATION:PT1H
</del><ins>+DURATION:PT2H
</ins><span class="cx"> ATTENDEE;PARTSTAT=ACCEPTED:mailto:user01@example.com
</span><span class="cx"> ATTENDEE:mailto:user02@example.com
</span><span class="cx"> DTSTAMP:20051222T210507Z
</span><span class="lines">@@ -5699,6 +5740,309 @@
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     @inlineCallbacks
</span><ins>+    def test_calendarObjectSplit_inbox_delete(self):
+        &quot;&quot;&quot;
+        Test that splitting of calendar objects works when an inbox item is deleted
+        whilst split processing is happening.
+        &quot;&quot;&quot;
+        data = &quot;&quot;&quot;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@example.com
+ATTENDEE:mailto:user02@example.com
+DTSTAMP:20051222T210507Z
+ORGANIZER:mailto:user01@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@example.com
+ATTENDEE:mailto:user02@example.com
+DTSTAMP:20051222T210507Z
+ORGANIZER:mailto:user01@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@example.com
+ATTENDEE:mailto:user02@example.com
+DTSTAMP:20051222T210507Z
+ORGANIZER:mailto:user01@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@example.com
+ATTENDEE:mailto:user02@example.com
+DTSTAMP:20051222T210507Z
+ORGANIZER:mailto:user01@example.com
+END:VEVENT
+END:VCALENDAR
+&quot;&quot;&quot;
+
+        data_future = &quot;&quot;&quot;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@example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02@example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:user02
+DTSTAMP:20051222T210507Z
+ORGANIZER;CN=User 01;EMAIL=user01@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@example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02@example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:user02
+DTSTAMP:20051222T210507Z
+ORGANIZER;CN=User 01;EMAIL=user01@example.com:urn:x-uid:user01
+RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
+SEQUENCE:1
+END:VEVENT
+END:VCALENDAR
+&quot;&quot;&quot;
+
+        data_past = &quot;&quot;&quot;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@example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02@example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:user02
+DTSTAMP:20051222T210507Z
+ORGANIZER;CN=User 01;EMAIL=user01@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@example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02@example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:user02
+DTSTAMP:20051222T210507Z
+ORGANIZER;CN=User 01;EMAIL=user01@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@example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02@example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:user02
+DTSTAMP:20051222T210507Z
+ORGANIZER;CN=User 01;EMAIL=user01@example.com:urn:x-uid:user01
+RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
+SEQUENCE:1
+END:VEVENT
+END:VCALENDAR
+&quot;&quot;&quot;
+
+        data_future2 = &quot;&quot;&quot;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@example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02@example.com;RSVP=TRUE:urn:x-uid:user02
+DTSTAMP:20051222T210507Z
+ORGANIZER;CN=User 01;EMAIL=user01@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@example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02@example.com;RSVP=TRUE:urn:x-uid:user02
+DTSTAMP:20051222T210507Z
+ORGANIZER;CN=User 01;EMAIL=user01@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
+&quot;&quot;&quot;
+
+        data_past2 = &quot;&quot;&quot;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@example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02@example.com;RSVP=TRUE:urn:x-uid:user02
+DTSTAMP:20051222T210507Z
+ORGANIZER;CN=User 01;EMAIL=user01@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@example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02@example.com;RSVP=TRUE:urn:x-uid:user02
+DTSTAMP:20051222T210507Z
+ORGANIZER;CN=User 01;EMAIL=user01@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@example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02@example.com;RSVP=TRUE:urn:x-uid:user02
+DTSTAMP:20051222T210507Z
+ORGANIZER;CN=User 01;EMAIL=user01@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
+&quot;&quot;&quot;
+
+        # Create one event without active split
+        self.patch(config.Scheduling.Options.Splitting, &quot;Enabled&quot;, False)
+        calendar = yield self.calendarUnderTest(name=&quot;calendar&quot;, home=&quot;user01&quot;)
+        component = Component.fromString(data % self.subs)
+        cobj = yield calendar.createCalendarObjectWithName(&quot;data1.ics&quot;, component)
+        self.assertFalse(hasattr(cobj, &quot;_workItems&quot;))
+        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=&quot;inbox&quot;, home=&quot;user02&quot;)
+            cobjs = yield cal.calendarObjects()
+            yield cobjs[0].remove()
+            yield newtxn.commit()
+
+            returnValue(results)
+
+        self.patch(CalendarStoreFeatures, &quot;calendarObjectsWithUID&quot;, _lookup)
+
+        cobj = yield self.calendarObjectUnderTest(name=&quot;data1.ics&quot;, calendar_name=&quot;calendar&quot;, home=&quot;user01&quot;)
+        yield cobj.split()
+        yield self.commit()
+
+        # Get the existing and new object data
+        cal = yield self.calendarUnderTest(name=&quot;calendar&quot;, home=&quot;user01&quot;)
+        cobjs = yield cal.calendarObjects()
+        self.assertEqual(len(cobjs), 2)
+        for cobj in cobjs:
+            self.assertTrue(cobj.isScheduleObject)
+            ical = yield cobj.component()
+            if ical.resourceUID() == &quot;12345-67890&quot;:
+                ical_future = ical
+            else:
+                ical_past = ical
+
+        relID = ical_future.masterComponent().propertyValue(&quot;RELATED-TO&quot;)
+        newUID = ical_past.masterComponent().propertyValue(&quot;UID&quot;)
+
+        # Verify user01 data
+        title = &quot;user01&quot;
+        relsubs = dict(self.subs)
+        relsubs[&quot;uid&quot;] = newUID
+        relsubs[&quot;relID&quot;] = relID
+        self.assertEqual(normalize_iCalStr(ical_future), normalize_iCalStr(data_future) % relsubs, &quot;Failed future: %s&quot; % (title,))
+        self.assertEqual(normalize_iCalStr(ical_past), normalize_iCalStr(data_past) % relsubs, &quot;Failed past: %s&quot; % (title,))
+
+        # Get user02 data
+        cal = yield self.calendarUnderTest(name=&quot;calendar&quot;, home=&quot;user02&quot;)
+        cobjs = yield cal.calendarObjects()
+        self.assertEqual(len(cobjs), 2)
+        for cobj in cobjs:
+            ical = yield cobj.component()
+            if ical.resourceUID() == &quot;12345-67890&quot;:
+                ical_future = ical
+            else:
+                ical_past = ical
+
+        cal = yield self.calendarUnderTest(name=&quot;inbox&quot;, home=&quot;user02&quot;)
+        cobjs = yield cal.calendarObjects()
+        self.assertEqual(len(cobjs), 0)
+
+        # Verify user02 data
+        title = &quot;user02&quot;
+        self.assertEqual(normalize_iCalStr(ical_future), normalize_iCalStr(data_future2) % relsubs, &quot;Failed future: %s&quot; % (title,))
+        self.assertEqual(normalize_iCalStr(ical_past), normalize_iCalStr(data_past2) % relsubs, &quot;Failed past: %s&quot; % (title,))
+
+
+    @inlineCallbacks
</ins><span class="cx">     def _setupSplitAt(self):
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="cx">         Test that user triggered splitting of calendar objects works.
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetxdavcaldavdatastoretesttest_sql_sharingpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/test/test_sql_sharing.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -23,6 +23,10 @@
</span><span class="cx">     populateCalendarsFrom
</span><span class="cx"> from txdav.common.datastore.sql_tables import _BIND_MODE_READ, \
</span><span class="cx">     _BIND_STATUS_INVITED, _BIND_MODE_DIRECT, _BIND_STATUS_ACCEPTED
</span><ins>+from txdav.base.propertystore.base import PropertyName
+from txdav.xml.base import WebDAVTextElement
+from twistedcaldav import customxml
+from txdav.xml.element import registerElement, registerElementClass
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> class BaseSharingTests(CommonCommonTests, TestCase):
</span><span class="lines">@@ -489,7 +493,94 @@
</span><span class="cx">         yield self.commit()
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+    @inlineCallbacks
+    def test_perUserSharedProxyCollectionProperties(self):
+        &quot;&quot;&quot;
+        Test that sharees and proxies get their own per-user properties, with some being
+        initialized based ont he owner value.
+        &quot;&quot;&quot;
+        @registerElement
+        @registerElementClass
+        class DummySharingProperty (WebDAVTextElement):
+            namespace = &quot;http://calendarserver.org/ns/&quot;
+            name = &quot;dummy-sharing&quot;
</ins><span class="cx"> 
</span><ins>+        shared_name = yield self._createShare()
+
+        # Add owner properties
+        home = yield self.homeUnderTest(name=&quot;user01&quot;)
+        calendar = yield home.calendarWithName(&quot;calendar&quot;)
+
+        calendar.properties()[PropertyName.fromElement(DummySharingProperty)] = DummySharingProperty.fromString(&quot;user01&quot;)
+        calendar.properties()[PropertyName.fromElement(customxml.CalendarColor)] = customxml.CalendarColor.fromString(&quot;#000001&quot;)
+        yield self.commit()
+
+        # Check/add sharee properties
+        home = yield self.homeUnderTest(name=&quot;user02&quot;)
+        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(&quot;user02&quot;)
+        calendar.properties()[PropertyName.fromElement(customxml.CalendarColor)] = customxml.CalendarColor.fromString(&quot;#000002&quot;)
+        yield self.commit()
+
+        # Check/add owner proxy properties
+        txn = self.transactionUnderTest()
+        txn._authz_uid = &quot;user03&quot;
+        home = yield self.homeUnderTest(name=&quot;user01&quot;)
+        calendar = yield home.calendarWithName(&quot;calendar&quot;)
+        self.assertTrue(PropertyName.fromElement(DummySharingProperty) in calendar.properties())
+        self.assertEqual(str(calendar.properties()[PropertyName.fromElement(DummySharingProperty)]), &quot;user01&quot;)
+        self.assertTrue(PropertyName.fromElement(customxml.CalendarColor) in calendar.properties())
+        self.assertEqual(str(calendar.properties()[PropertyName.fromElement(customxml.CalendarColor)]), &quot;#000001&quot;)
+        calendar.properties()[PropertyName.fromElement(DummySharingProperty)] = DummySharingProperty.fromString(&quot;user03&quot;)
+        calendar.properties()[PropertyName.fromElement(customxml.CalendarColor)] = customxml.CalendarColor.fromString(&quot;#000003&quot;)
+        yield self.commit()
+
+        # Check/add sharee proxy properties
+        txn = self.transactionUnderTest()
+        txn._authz_uid = &quot;user04&quot;
+        home = yield self.homeUnderTest(name=&quot;user02&quot;)
+        calendar = yield home.calendarWithName(shared_name)
+        self.assertTrue(PropertyName.fromElement(DummySharingProperty) in calendar.properties())
+        self.assertEqual(str(calendar.properties()[PropertyName.fromElement(DummySharingProperty)]), &quot;user02&quot;)
+        self.assertTrue(PropertyName.fromElement(customxml.CalendarColor) in calendar.properties())
+        self.assertEqual(str(calendar.properties()[PropertyName.fromElement(customxml.CalendarColor)]), &quot;#000002&quot;)
+        calendar.properties()[PropertyName.fromElement(DummySharingProperty)] = DummySharingProperty.fromString(&quot;user04&quot;)
+        calendar.properties()[PropertyName.fromElement(customxml.CalendarColor)] = customxml.CalendarColor.fromString(&quot;#000004&quot;)
+        yield self.commit()
+
+        # Validate all properties
+        home = yield self.homeUnderTest(name=&quot;user01&quot;)
+        calendar = yield home.calendarWithName(&quot;calendar&quot;)
+        self.assertEqual(str(calendar.properties()[PropertyName.fromElement(DummySharingProperty)]), &quot;user03&quot;)
+        self.assertEqual(str(calendar.properties()[PropertyName.fromElement(customxml.CalendarColor)]), &quot;#000001&quot;)
+        yield self.commit()
+
+        home = yield self.homeUnderTest(name=&quot;user02&quot;)
+        calendar = yield home.calendarWithName(shared_name)
+        self.assertEqual(str(calendar.properties()[PropertyName.fromElement(DummySharingProperty)]), &quot;user04&quot;)
+        self.assertEqual(str(calendar.properties()[PropertyName.fromElement(customxml.CalendarColor)]), &quot;#000002&quot;)
+        yield self.commit()
+
+        txn = self.transactionUnderTest()
+        txn._authz_uid = &quot;user03&quot;
+        home = yield self.homeUnderTest(name=&quot;user01&quot;)
+        calendar = yield home.calendarWithName(&quot;calendar&quot;)
+        self.assertEqual(str(calendar.properties()[PropertyName.fromElement(DummySharingProperty)]), &quot;user03&quot;)
+        self.assertEqual(str(calendar.properties()[PropertyName.fromElement(customxml.CalendarColor)]), &quot;#000003&quot;)
+        yield self.commit()
+
+        txn = self.transactionUnderTest()
+        txn._authz_uid = &quot;user04&quot;
+        home = yield self.homeUnderTest(name=&quot;user02&quot;)
+        calendar = yield home.calendarWithName(shared_name)
+        self.assertEqual(str(calendar.properties()[PropertyName.fromElement(DummySharingProperty)]), &quot;user04&quot;)
+        self.assertEqual(str(calendar.properties()[PropertyName.fromElement(customxml.CalendarColor)]), &quot;#000004&quot;)
+        yield self.commit()
+
+
+
</ins><span class="cx"> class SharingRevisions(BaseSharingTests):
</span><span class="cx">     &quot;&quot;&quot;
</span><span class="cx">     Test store-based sharing and interaction with revision table.
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetxdavcaldavicalendarstorepy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/icalendarstore.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -857,6 +857,13 @@
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+class UnknownTimezone(CommonStoreError):
+    &quot;&quot;&quot;
+    Unknown timezone id used.
+    &quot;&quot;&quot;
+
+
+
</ins><span class="cx"> #
</span><span class="cx"> # FIXME: These may belong elsewhere.
</span><span class="cx"> #
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetxdavcarddavdatastorefilepy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/carddav/datastore/file.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -139,6 +139,7 @@
</span><span class="cx">             (
</span><span class="cx">                 PropertyName.fromElement(customxml.GETCTag),
</span><span class="cx">             ),
</span><ins>+            (),
</ins><span class="cx">         )
</span><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetxdavcarddavdatastorequeryfilterpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/carddav/datastore/query/filter.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -136,7 +136,7 @@
</span><span class="cx">                     return not allof
</span><span class="cx">             return allof
</span><span class="cx">         else:
</span><del>-            return False
</del><ins>+            return True
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     def valid(self):
</span><span class="lines">@@ -242,8 +242,8 @@
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="cx"> 
</span><span class="cx">         allof = self.propfilter_test == &quot;allof&quot;
</span><del>-        if self.qualifier and allof != self.qualifier.match(item):
-            return not allof
</del><ins>+        if self.qualifier and allof and not self.qualifier.match(item):
+            return False
</ins><span class="cx"> 
</span><span class="cx">         if len(self.filters) &gt; 0:
</span><span class="cx">             for filter in self.filters:
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetxdavcarddavdatastoresqlpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/carddav/datastore/sql.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -39,7 +39,6 @@
</span><span class="cx"> from twisted.internet.defer import inlineCallbacks, returnValue
</span><span class="cx"> from twisted.python import hashlib
</span><span class="cx"> 
</span><del>-from twistedcaldav import carddavxml, customxml
</del><span class="cx"> from twistedcaldav.config import config
</span><span class="cx"> from twistedcaldav.memcacher import Memcacher
</span><span class="cx"> from twistedcaldav.vcard import Component as VCard, InvalidVCardDataError, Property, \
</span><span class="lines">@@ -65,6 +64,7 @@
</span><span class="cx">     AllRetriesFailed, ObjectResourceNameAlreadyExistsError, \
</span><span class="cx">     SyncTokenValidException, IndexedSearchException
</span><span class="cx"> from txdav.xml import element
</span><ins>+from txdav.xml.parser import WebDAVDocument
</ins><span class="cx"> 
</span><span class="cx"> from zope.interface.declarations import implements
</span><span class="cx"> 
</span><span class="lines">@@ -87,9 +87,9 @@
</span><span class="cx">     _cacher = Memcacher(&quot;SQL.adbkhome&quot;, pickle=True, key_normalization=False)
</span><span class="cx"> 
</span><span class="cx"> 
</span><del>-    def __init__(self, transaction, ownerUID):
</del><ins>+    def __init__(self, transaction, ownerUID, authzUID=None):
</ins><span class="cx"> 
</span><del>-        super(AddressBookHome, self).__init__(transaction, ownerUID)
</del><ins>+        super(AddressBookHome, self).__init__(transaction, ownerUID, authzUID=authzUID)
</ins><span class="cx">         self._addressbookPropertyStoreID = None
</span><span class="cx">         self._addressbook = None
</span><span class="cx"> 
</span><span class="lines">@@ -467,6 +467,9 @@
</span><span class="cx">         &quot;UID&quot;: _objectSchema.UID,
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    _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])
</ins><span class="cx"> 
</span><span class="cx">     @classmethod
</span><span class="cx">     @inlineCallbacks
</span><span class="lines">@@ -797,6 +800,7 @@
</span><span class="cx">             props = yield PropertyStore.load(
</span><span class="cx">                 self.ownerHome().uid(),
</span><span class="cx">                 self.viewerHome().uid(),
</span><ins>+                None,
</ins><span class="cx">                 self._txn,
</span><span class="cx">                 self.ownerHome()._addressbookPropertyStoreID,  # not ._resourceID as in CommonHomeChild._loadPropertyStore()
</span><span class="cx">                 notifyCallback=self.notifyPropertyChanged
</span><span class="lines">@@ -807,25 +811,22 @@
</span><span class="cx">     def initPropertyStore(self, props):
</span><span class="cx">         # Setup peruser special properties
</span><span class="cx">         props.setSpecialProperties(
</span><del>-            (
-                PropertyName.fromElement(carddavxml.AddressBookDescription),
-            ),
-            (
-                PropertyName.fromElement(customxml.GETCTag),
-            ),
</del><ins>+            self._shadowProperties,
+            self._globalProperties,
+            self._proxyProperties,
</ins><span class="cx">         )
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     def getInviteCopyProperties(self):
</span><span class="cx">         &quot;&quot;&quot;
</span><del>-        Get a dictionary of property name/values (as strings) for properties that are shadowable and
</del><ins>+        Get a dictionary of property name/values (as XML strings) for properties that are shadowable and
</ins><span class="cx">         need to be copied to a sharee's collection when an external (cross-pod) share is created.
</span><span class="cx">         Sub-classes should override to expose the properties they care about.
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="cx">         props = {}
</span><del>-        for elem in (element.DisplayName, carddavxml.AddressBookDescription,):
-            if PropertyName.fromElement(elem) in self.properties():
-                props[elem.sname()] = str(self.properties()[PropertyName.fromElement(elem)])
</del><ins>+        for ename in (PropertyName.fromElement(element.DisplayName),) + self._shadowProperties:
+            if ename in self.properties():
+                props[ename.toString()] = self.properties()[ename].toxml()
</ins><span class="cx">         return props
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="lines">@@ -836,15 +837,15 @@
</span><span class="cx">         care about.
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="cx">         # Initialize these for all shares
</span><del>-        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()])
</del><ins>+        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
</ins><span class="cx"> 
</span><span class="cx">         # Only initialize these for direct shares
</span><span class="cx">         if self.direct():
</span><del>-            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()])
</del><ins>+            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
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     def contentType(self):
</span><span class="lines">@@ -1165,12 +1166,12 @@
</span><span class="cx"> 
</span><span class="cx">         if ownerHomeToDataRowMap:
</span><span class="cx">             # Get property stores for all these child resources (if any found)
</span><del>-            addressbookPropertyStoreIDs = [ownerHome._addressbookPropertyStoreID for ownerHome in ownerHomeToDataRowMap]
</del><ins>+            addressbookPropertyStoreIDs = [ownerHomeItem._addressbookPropertyStoreID for ownerHomeItem in ownerHomeToDataRowMap]
</ins><span class="cx">             propertyStores = yield PropertyStore.forMultipleResourcesWithResourceIDs(
</span><del>-                home.uid(), home._txn, addressbookPropertyStoreIDs
</del><ins>+                home.uid(), None, None, home._txn, addressbookPropertyStoreIDs
</ins><span class="cx">             )
</span><span class="cx"> 
</span><del>-            addressbookResourceIDs = [ownerHome.addressbook()._resourceID for ownerHome in ownerHomeToDataRowMap]
</del><ins>+            addressbookResourceIDs = [ownerHomeItem.addressbook()._resourceID for ownerHomeItem in ownerHomeToDataRowMap]
</ins><span class="cx">             revisions = yield cls._revisionsForResourceIDs(addressbookResourceIDs).on(home._txn, resourceIDs=addressbookResourceIDs)
</span><span class="cx">             revisions = dict(revisions)
</span><span class="cx"> 
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetxdavcommondatastorefilepy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/common/datastore/file.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -1701,6 +1701,7 @@
</span><span class="cx">             (
</span><span class="cx">                 PropertyName.fromElement(customxml.NotificationType),
</span><span class="cx">             ),
</span><ins>+            (),
</ins><span class="cx">         )
</span><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetxdavcommondatastoresqlpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/common/datastore/sql.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -635,8 +635,7 @@
</span><span class="cx"> 
</span><span class="cx">         For example::
</span><span class="cx"> 
</span><del>-            yield (txn.enqueue(MyWorkItem, workDescription=&quot;some work to do&quot;)
-                   .whenProposed())
</del><ins>+            yield (txn.enqueue(MyWorkItem, workDescription=&quot;some work to do&quot;))
</ins><span class="cx"> 
</span><span class="cx">         @return: a work proposal describing various events in the work's
</span><span class="cx">             life-cycle.
</span><span class="lines">@@ -695,7 +694,7 @@
</span><span class="cx">         ).on(self)
</span><span class="cx"> 
</span><span class="cx"> 
</span><del>-    def _determineMemo(self, storeType, uid, create=False):
</del><ins>+    def _determineMemo(self, storeType, uid, create=False, authzUID=None):
</ins><span class="cx">         &quot;&quot;&quot;
</span><span class="cx">         Determine the memo dictionary to use for homeWithUID.
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="lines">@@ -721,19 +720,27 @@
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     @memoizedKey(&quot;uid&quot;, _determineMemo)
</span><del>-    def homeWithUID(self, storeType, uid, create=False):
</del><ins>+    def homeWithUID(self, storeType, uid, create=False, authzUID=None):
+        &quot;&quot;&quot;
+        We need to distinguish between various different users &quot;looking&quot; at a home and its
+        child resources because we have per-user properties that depend on which user is &quot;looking&quot;.
+        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.
+        &quot;&quot;&quot;
</ins><span class="cx">         if storeType not in (ECALENDARTYPE, EADDRESSBOOKTYPE):
</span><span class="cx">             raise RuntimeError(&quot;Unknown home type.&quot;)
</span><span class="cx"> 
</span><del>-        return self._homeClass[storeType].homeWithUID(self, uid, create)
</del><ins>+        return self._homeClass[storeType].homeWithUID(self, uid, create, authzUID)
</ins><span class="cx"> 
</span><span class="cx"> 
</span><del>-    def calendarHomeWithUID(self, uid, create=False):
-        return self.homeWithUID(ECALENDARTYPE, uid, create=create)
</del><ins>+    def calendarHomeWithUID(self, uid, create=False, authzUID=None):
+        return self.homeWithUID(ECALENDARTYPE, uid, create=create, authzUID=authzUID)
</ins><span class="cx"> 
</span><span class="cx"> 
</span><del>-    def addressbookHomeWithUID(self, uid, create=False):
-        return self.homeWithUID(EADDRESSBOOKTYPE, uid, create=create)
</del><ins>+    def addressbookHomeWithUID(self, uid, create=False, authzUID=None):
+        return self.homeWithUID(EADDRESSBOOKTYPE, uid, create=create, authzUID=authzUID)
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     @inlineCallbacks
</span><span class="lines">@@ -741,10 +748,10 @@
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="cx">         Load a calendar or addressbook home by its integer resource ID.
</span><span class="cx">         &quot;&quot;&quot;
</span><del>-        uid = (yield self._homeClass[storeType]
-               .homeUIDWithResourceID(self, rid))
</del><ins>+        uid = (yield self._homeClass[storeType].homeUIDWithResourceID(self, rid))
</ins><span class="cx">         if uid:
</span><del>-            result = (yield self.homeWithUID(storeType, uid))
</del><ins>+            # Always get the owner's view of the home = i.e., authzUID=uid
+            result = (yield self.homeWithUID(storeType, uid, authzUID=uid))
</ins><span class="cx">         else:
</span><span class="cx">             result = None
</span><span class="cx">         returnValue(result)
</span><span class="lines">@@ -2839,7 +2846,7 @@
</span><span class="cx"> 
</span><span class="cx">     @classmethod
</span><span class="cx">     @inlineCallbacks
</span><del>-    def makeClass(cls, transaction, ownerUID, no_cache=False):
</del><ins>+    def makeClass(cls, transaction, ownerUID, no_cache=False, authzUID=None):
</ins><span class="cx">         &quot;&quot;&quot;
</span><span class="cx">         Build the actual home class taking into account the possibility that we might need to
</span><span class="cx">         switch in the external version of the class.
</span><span class="lines">@@ -2851,14 +2858,20 @@
</span><span class="cx">         @param no_cache: should cached query be used
</span><span class="cx">         @type no_cache: C{bool}
</span><span class="cx">         &quot;&quot;&quot;
</span><del>-        home = cls(transaction, ownerUID)
</del><ins>+        home = cls(transaction, ownerUID, authzUID=authzUID)
</ins><span class="cx">         actualHome = yield home.initFromStore(no_cache)
</span><span class="cx">         returnValue(actualHome)
</span><span class="cx"> 
</span><span class="cx"> 
</span><del>-    def __init__(self, transaction, ownerUID):
</del><ins>+    def __init__(self, transaction, ownerUID, authzUID=None):
</ins><span class="cx">         self._txn = transaction
</span><span class="cx">         self._ownerUID = ownerUID
</span><ins>+        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
</ins><span class="cx">         self._resourceID = None
</span><span class="cx">         self._status = _HOME_STATUS_NORMAL
</span><span class="cx">         self._dataVersion = None
</span><span class="lines">@@ -3053,11 +3066,11 @@
</span><span class="cx"> 
</span><span class="cx">     @classmethod
</span><span class="cx">     @inlineCallbacks
</span><del>-    def homeWithUID(cls, txn, uid, create=False):
</del><ins>+    def homeWithUID(cls, txn, uid, create=False, authzUID=None):
</ins><span class="cx">         &quot;&quot;&quot;
</span><span class="cx">         @param uid: I'm going to assume uid is utf-8 encoded bytes
</span><span class="cx">         &quot;&quot;&quot;
</span><del>-        homeObject = yield cls.makeClass(txn, uid)
</del><ins>+        homeObject = yield cls.makeClass(txn, uid, authzUID=authzUID)
</ins><span class="cx">         if homeObject is not None:
</span><span class="cx">             returnValue(homeObject)
</span><span class="cx">         else:
</span><span class="lines">@@ -3092,7 +3105,7 @@
</span><span class="cx">                 yield savepoint.rollback(txn)
</span><span class="cx"> 
</span><span class="cx">                 # Retry the query - row may exist now, if not re-raise
</span><del>-                homeObject = yield cls.makeClass(txn, uid)
</del><ins>+                homeObject = yield cls.makeClass(txn, uid, authzUID=authzUID)
</ins><span class="cx">                 if homeObject:
</span><span class="cx">                     returnValue(homeObject)
</span><span class="cx">                 else:
</span><span class="lines">@@ -3103,7 +3116,7 @@
</span><span class="cx">                 # Note that we must not cache the owner_uid-&gt;resource_id
</span><span class="cx">                 # mapping in _cacher when creating as we don't want that to appear
</span><span class="cx">                 # until AFTER the commit
</span><del>-                home = yield cls.makeClass(txn, uid, no_cache=True)
</del><ins>+                home = yield cls.makeClass(txn, uid, no_cache=True, authzUID=authzUID)
</ins><span class="cx">                 yield home.createdHome()
</span><span class="cx">                 returnValue(home)
</span><span class="cx"> 
</span><span class="lines">@@ -3141,6 +3154,15 @@
</span><span class="cx">         return self._ownerUID
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+    def authzuid(self):
+        &quot;&quot;&quot;
+        Retrieve the unique identifier of the user accessing the data in this home.
+
+        @return: a string.
+        &quot;&quot;&quot;
+        return self._authzUID
+
+
</ins><span class="cx">     def external(self):
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="cx">         Is this an external home.
</span><span class="lines">@@ -3541,9 +3563,13 @@
</span><span class="cx"> 
</span><span class="cx">     @inlineCallbacks
</span><span class="cx">     def _loadPropertyStore(self):
</span><ins>+
+        # Use any authz uid in place of the viewer uid so delegates have their own
+        # set of properties
</ins><span class="cx">         props = yield PropertyStore.load(
</span><span class="cx">             self.uid(),
</span><span class="cx">             self.uid(),
</span><ins>+            self.authzuid(),
</ins><span class="cx">             self._txn,
</span><span class="cx">             self._resourceID,
</span><span class="cx">             notifyCallback=self.notifyChanged
</span><span class="lines">@@ -4653,6 +4679,9 @@
</span><span class="cx">     def ownerView(self):
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="cx">         Return the owner resource counterpart of this shared resource.
</span><ins>+
+        Note we have to play a trick with the property store to coerce it to match
+        the per-user properties for the owner.
</ins><span class="cx">         &quot;&quot;&quot;
</span><span class="cx">         # Get the child of the owner home that has the same resource id as the owned one
</span><span class="cx">         ownerView = yield self.ownerHome().childWithID(self.id())
</span><span class="lines">@@ -4663,10 +4692,13 @@
</span><span class="cx">     def shareeView(self, shareeUID):
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="cx">         Return the shared resource counterpart of this owned resource for the specified sharee.
</span><ins>+
+        Note we have to play a trick with the property store to coerce it to match
+        the per-user properties for the sharee.
</ins><span class="cx">         &quot;&quot;&quot;
</span><span class="cx"> 
</span><span class="cx">         # Get the child of the sharee home that has the same resource id as the owned one
</span><del>-        shareeHome = yield self._txn.homeWithUID(self._home._homeType, shareeUID)
</del><ins>+        shareeHome = yield self._txn.homeWithUID(self._home._homeType, shareeUID, authzUID=shareeUID)
</ins><span class="cx">         shareeView = (yield shareeHome.allChildWithID(self.id())) if shareeHome is not None else None
</span><span class="cx">         returnValue(shareeView)
</span><span class="cx"> 
</span><span class="lines">@@ -5435,7 +5467,7 @@
</span><span class="cx">             childResourceIDs = [dataRow[2] for dataRow in dataRows]
</span><span class="cx"> 
</span><span class="cx">             propertyStores = yield PropertyStore.forMultipleResourcesWithResourceIDs(
</span><del>-                home.uid(), home._txn, childResourceIDs
</del><ins>+                home.uid(), None, None, home._txn, childResourceIDs
</ins><span class="cx">             )
</span><span class="cx"> 
</span><span class="cx">             # Get revisions
</span><span class="lines">@@ -6217,9 +6249,12 @@
</span><span class="cx">     @inlineCallbacks
</span><span class="cx">     def _loadPropertyStore(self, props=None):
</span><span class="cx">         if props is None:
</span><ins>+            # Use any authz uid in place of the viewer uid so delegates have their own
+            # set of properties
</ins><span class="cx">             props = yield PropertyStore.load(
</span><span class="cx">                 self.ownerHome().uid(),
</span><span class="cx">                 self.viewerHome().uid(),
</span><ins>+                self.viewerHome().authzuid(),
</ins><span class="cx">                 self._txn,
</span><span class="cx">                 self._resourceID,
</span><span class="cx">                 notifyCallback=self.notifyPropertyChanged
</span><span class="lines">@@ -6535,6 +6570,8 @@
</span><span class="cx">             if parent.objectResourcesHaveProperties():
</span><span class="cx">                 propertyStores = (yield PropertyStore.forMultipleResources(
</span><span class="cx">                     parent._home.uid(),
</span><ins>+                    None,
+                    None,
</ins><span class="cx">                     parent._txn,
</span><span class="cx">                     cls._objectSchema.RESOURCE_ID,
</span><span class="cx">                     cls._objectSchema.PARENT_RESOURCE_ID,
</span><span class="lines">@@ -6612,6 +6649,8 @@
</span><span class="cx">             if parent.objectResourcesHaveProperties():
</span><span class="cx">                 propertyStores = (yield PropertyStore.forMultipleResourcesWithResourceIDs(
</span><span class="cx">                     parent._home.uid(),
</span><ins>+                    None,
+                    None,
</ins><span class="cx">                     parent._txn,
</span><span class="cx">                     tuple([row[0] for row in dataRows]),
</span><span class="cx">                 ))
</span><span class="lines">@@ -6790,8 +6829,9 @@
</span><span class="cx">         if props is None:
</span><span class="cx">             if self._parentCollection.objectResourcesHaveProperties():
</span><span class="cx">                 props = yield PropertyStore.load(
</span><ins>+                    self._parentCollection.ownerHome().uid(),
</ins><span class="cx">                     self._parentCollection.viewerHome().uid(),
</span><del>-                    self._parentCollection.ownerHome().uid(),
</del><ins>+                    self._parentCollection.viewerHome().authzuid(),
</ins><span class="cx">                     self._txn,
</span><span class="cx">                     self._resourceID,
</span><span class="cx">                     created=created
</span><span class="lines">@@ -7154,6 +7194,7 @@
</span><span class="cx">         self._propertyStore = yield PropertyStore.load(
</span><span class="cx">             self._uid,
</span><span class="cx">             self._uid,
</span><ins>+            None,
</ins><span class="cx">             self._txn,
</span><span class="cx">             self._resourceID,
</span><span class="cx">             notifyCallback=self.notifyChanged
</span><span class="lines">@@ -7493,6 +7534,8 @@
</span><span class="cx">             # Get property stores for all these child resources (if any found)
</span><span class="cx">             propertyStores = (yield PropertyStore.forMultipleResources(
</span><span class="cx">                 parent.uid(),
</span><ins>+                None,
+                None,
</ins><span class="cx">                 parent._txn,
</span><span class="cx">                 schema.NOTIFICATION.RESOURCE_ID,
</span><span class="cx">                 schema.NOTIFICATION.NOTIFICATION_HOME_RESOURCE_ID,
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetxdavcommondatastoresql_externalpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/common/datastore/sql_external.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -149,6 +149,7 @@
</span><span class="cx">         props = yield PropertyStore.load(
</span><span class="cx">             self.uid(),
</span><span class="cx">             self.uid(),
</span><ins>+            None,
</ins><span class="cx">             self._txn,
</span><span class="cx">             self._resourceID,
</span><span class="cx">             notifyCallback=self.notifyChanged
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetxdavcommondatastoretestaccountsaccountsxml"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/common/datastore/test/accounts/accounts.xml (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -387,6 +387,12 @@
</span><span class="cx">       &lt;member-uid&gt;8B4288F6-CC82-491D-8EF9-642EF4F3E7D0&lt;/member-uid&gt;
</span><span class="cx">   &lt;/record&gt;
</span><span class="cx"> 
</span><ins>+  &lt;record type=&quot;group&quot;&gt;
+    &lt;uid&gt;emptygroup&lt;/uid&gt;
+    &lt;short-name&gt;emptygroup&lt;/short-name&gt;
+    &lt;full-name&gt;Empty Group&lt;/full-name&gt;
+  &lt;/record&gt;
+
</ins><span class="cx">   &lt;!-- Calverify test records --&gt;
</span><span class="cx"> 
</span><span class="cx">   &lt;record type=&quot;user&quot;&gt;
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetxdavdpsclientpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/dps/client.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -39,7 +39,7 @@
</span><span class="cx">     RecordsMatchingTokensCommand, RecordsMatchingFieldsCommand,
</span><span class="cx">     MembersCommand, GroupsCommand, SetMembersCommand,
</span><span class="cx">     VerifyPlaintextPasswordCommand, VerifyHTTPDigestCommand,
</span><del>-    WikiAccessForUID
</del><ins>+    WikiAccessForUIDCommand, ContinuationCommand
</ins><span class="cx"> )
</span><span class="cx"> from txdav.who.directory import (
</span><span class="cx">     CalendarDirectoryRecordMixin, CalendarDirectoryServiceMixin
</span><span class="lines">@@ -127,12 +127,24 @@
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     def _processSingleRecord(self, result):
</span><ins>+        &quot;&quot;&quot;
+        Takes a dictionary with a &quot;fields&quot; key whose value is a pickled
+        dictionary of a record's fields, and returns a record.
+        &quot;&quot;&quot;
</ins><span class="cx">         serializedFields = pickle.loads(result['fields'])
</span><span class="cx">         return self._dictToRecord(serializedFields)
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     def _processMultipleRecords(self, result):
</span><del>-        serializedFieldsList = pickle.loads(result['fieldsList'])
</del><ins>+        &quot;&quot;&quot;
+        Takes a dictionary with a &quot;fieldsList&quot; key whose value is an iterable
+        of pickled dictionaries (of records' fields), and returns a list of
+        records.
+        &quot;&quot;&quot;
+        serializedFieldsList = []
+        for fields in result[&quot;fieldsList&quot;]:
+            fields = pickle.loads(fields)
+            serializedFieldsList.append(fields)
</ins><span class="cx">         results = []
</span><span class="cx">         for serializedFields in serializedFieldsList:
</span><span class="cx">             record = self._dictToRecord(serializedFields)
</span><span class="lines">@@ -158,6 +170,26 @@
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     @inlineCallbacks
</span><ins>+    def _sendCommand(self, command, **kwds):
+        &quot;&quot;&quot;
+        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}
+        &quot;&quot;&quot;
+        ampProto = (yield self._getConnection())
+        try:
+            results = (yield ampProto.callRemote(command, **kwds))
+        except Exception, e:
+            log.error(&quot;Failed AMP command&quot;, error=e)
+            #  FIXME: is there a way to hook into ConnectionLost?
+            self._connection = None
+            raise
+        returnValue(results)
+
+
+    @inlineCallbacks
</ins><span class="cx">     def _call(self, command, postProcess, **kwds):
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="cx">         Execute a remote AMP command, first making the connection to the peer,
</span><span class="lines">@@ -172,14 +204,27 @@
</span><span class="cx">             L{Deferred} which fires with the post-processed results
</span><span class="cx">         @type postProcess: callable
</span><span class="cx">         &quot;&quot;&quot;
</span><del>-        ampProto = (yield self._getConnection())
-        try:
-            results = (yield ampProto.callRemote(command, **kwds))
-        except Exception, e:
-            log.error(&quot;Failed AMP command&quot;, error=e)
-            #  FIXME: is there a way to hook into ConnectionLost?
-            self._connection = None
-            raise
</del><ins>+        results = yield self._sendCommand(command, **kwds)
+        if results.get(&quot;continuation&quot;, 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(&quot;continuation&quot;, None) is not None:
+            results = yield self._sendCommand(
+                ContinuationCommand,
+                continuation=results[&quot;continuation&quot;]
+            )
+            multi.append(results)
+
+        results = {&quot;fieldsList&quot;: []}
+        for result in multi:
+            results[&quot;fieldsList&quot;].extend(result[&quot;fieldsList&quot;])
+
</ins><span class="cx">         returnValue(postProcess(results))
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="lines">@@ -356,7 +401,7 @@
</span><span class="cx">     def accessForRecord(self, record):
</span><span class="cx">         log.debug(&quot;DPS Client accessForRecord&quot;)
</span><span class="cx">         return self.service._call(
</span><del>-            WikiAccessForUID,
</del><ins>+            WikiAccessForUIDCommand,
</ins><span class="cx">             self._convertAccess,
</span><span class="cx">             wikiUID=self.uid.encode(&quot;utf-8&quot;),
</span><span class="cx">             uid=record.uid.encode(&quot;utf-8&quot;)
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetxdavdpscommandspy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/dps/commands.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -53,7 +53,8 @@
</span><span class="cx">         ('recordType', amp.String()),
</span><span class="cx">     ]
</span><span class="cx">     response = [
</span><del>-        ('fieldsList', amp.String()),
</del><ins>+        ('fieldsList', amp.ListOf(amp.String())),
+        ('continuation', amp.String(optional=True)),
</ins><span class="cx">     ]
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="lines">@@ -63,18 +64,31 @@
</span><span class="cx">         ('emailAddress', amp.String()),
</span><span class="cx">     ]
</span><span class="cx">     response = [
</span><del>-        ('fieldsList', amp.String()),
</del><ins>+        ('fieldsList', amp.ListOf(amp.String())),
+        ('continuation', amp.String(optional=True)),
</ins><span class="cx">     ]
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+class ContinuationCommand(amp.Command):
+    arguments = [
+        ('continuation', amp.String(optional=True)),
+    ]
+    response = [
+        ('fieldsList', amp.ListOf(amp.String())),
+        ('continuation', amp.String(optional=True)),
+    ]
+
+
+
</ins><span class="cx"> class RecordsMatchingTokensCommand(amp.Command):
</span><span class="cx">     arguments = [
</span><span class="cx">         ('tokens', amp.ListOf(amp.String())),
</span><span class="cx">         ('context', amp.String(optional=True)),
</span><span class="cx">     ]
</span><span class="cx">     response = [
</span><del>-        ('fieldsList', amp.String()),
</del><ins>+        ('fieldsList', amp.ListOf(amp.String())),
+        ('continuation', amp.String(optional=True)),
</ins><span class="cx">     ]
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="lines">@@ -86,14 +100,15 @@
</span><span class="cx">         ('recordType', amp.String(optional=True)),
</span><span class="cx">     ]
</span><span class="cx">     response = [
</span><del>-        ('fieldsList', amp.String()),
</del><ins>+        ('fieldsList', amp.ListOf(amp.String())),
+        ('continuation', amp.String(optional=True)),
</ins><span class="cx">     ]
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> class UpdateRecordsCommand(amp.Command):
</span><span class="cx">     arguments = [
</span><del>-        ('fieldsList', amp.String()),
</del><ins>+        ('fieldsList', amp.ListOf(amp.String())),
</ins><span class="cx">         ('create', amp.Boolean(optional=True)),
</span><span class="cx">     ]
</span><span class="cx">     response = [
</span><span class="lines">@@ -117,7 +132,8 @@
</span><span class="cx">         ('uid', amp.String()),
</span><span class="cx">     ]
</span><span class="cx">     response = [
</span><del>-        ('fieldsList', amp.String()),
</del><ins>+        ('fieldsList', amp.ListOf(amp.String())),
+        ('continuation', amp.String(optional=True)),
</ins><span class="cx">     ]
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="lines">@@ -127,7 +143,8 @@
</span><span class="cx">         ('uid', amp.String()),
</span><span class="cx">     ]
</span><span class="cx">     response = [
</span><del>-        ('fieldsList', amp.String()),
</del><ins>+        ('fieldsList', amp.ListOf(amp.String())),
+        ('continuation', amp.String(optional=True)),
</ins><span class="cx">     ]
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="lines">@@ -174,7 +191,7 @@
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> 
</span><del>-class WikiAccessForUID(amp.Command):
</del><ins>+class WikiAccessForUIDCommand(amp.Command):
</ins><span class="cx">     arguments = [
</span><span class="cx">         ('wikiUID', amp.String()),
</span><span class="cx">         ('uid', amp.String()),
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetxdavdpsjsonpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/dps/json.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -75,6 +75,27 @@
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+def matchTypeFromJSON(json):
+    return MatchType.lookupByName(json)
+
+
+
+def matchFlagsFromJSON(json):
+    if json == &quot;{}&quot;:
+        return MatchFlags.none
+
+    if json.startswith(&quot;{&quot;) and json.endswith(&quot;}&quot;):
+        # Composite flags: &quot;{A,B,C,...}&quot;
+        flags = MatchFlags.none
+        for flag in json[1:-1].split(&quot;,&quot;):
+            flags |= MatchFlags.lookupByName(flag)
+
+        return flags
+
+    return MatchFlags.lookupByName(json)
+
+
+
</ins><span class="cx"> def matchExpressionFromJSON(service, json):
</span><span class="cx">     try:
</span><span class="cx">         jsonField = json[&quot;field&quot;]
</span><span class="lines">@@ -84,23 +105,11 @@
</span><span class="cx">             &quot;JSON match expression must have {!r} key.&quot;.format(e[0])
</span><span class="cx">         )
</span><span class="cx"> 
</span><del>-    jsonMatch = json.get(&quot;match&quot;, &quot;equals&quot;)
-    jsonFlags = json.get(&quot;flags&quot;, &quot;{}&quot;)
-
</del><span class="cx">     fieldName = service.fieldName.lookupByName(jsonField)
</span><span class="cx">     fieldValue = unicode(jsonValue)
</span><del>-    matchType = MatchType.lookupByName(jsonMatch)
</del><ins>+    matchType = matchTypeFromJSON(json.get(&quot;match&quot;, &quot;equals&quot;))
+    flags = matchFlagsFromJSON(json.get(&quot;flags&quot;, &quot;{}&quot;))
</ins><span class="cx"> 
</span><del>-    if jsonFlags == &quot;{}&quot;:
-        flags = MatchFlags.none
-    elif jsonFlags.startswith(&quot;{&quot;) and jsonFlags.endswith(&quot;}&quot;):
-        # Composite flags: &quot;{A,B,C,...}&quot;
-        flags = MatchFlags.none
-        for flag in jsonFlags[1:-1].split(&quot;,&quot;):
-            flags |= MatchFlags.lookupByName(flag)
-    else:
-        flags = MatchFlags.lookupByName(jsonFlags)
-
</del><span class="cx">     return MatchExpression(
</span><span class="cx">         fieldName, fieldValue,
</span><span class="cx">         matchType=matchType, flags=flags,
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetxdavdpsserverpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/dps/server.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -15,6 +15,7 @@
</span><span class="cx"> ##
</span><span class="cx"> 
</span><span class="cx"> import cPickle as pickle
</span><ins>+import datetime
</ins><span class="cx"> import uuid
</span><span class="cx"> 
</span><span class="cx"> from twext.python.log import Logger
</span><span class="lines">@@ -35,7 +36,7 @@
</span><span class="cx">     RecordsMatchingTokensCommand, RecordsMatchingFieldsCommand,
</span><span class="cx">     MembersCommand, GroupsCommand, SetMembersCommand,
</span><span class="cx">     VerifyPlaintextPasswordCommand, VerifyHTTPDigestCommand,
</span><del>-    WikiAccessForUID
</del><ins>+    WikiAccessForUIDCommand, ContinuationCommand
</ins><span class="cx">     # UpdateRecordsCommand, RemoveRecordsCommand
</span><span class="cx"> )
</span><span class="cx"> from txdav.who.util import directoryFromConfig
</span><span class="lines">@@ -62,7 +63,104 @@
</span><span class="cx">         amp.AMP.__init__(self)
</span><span class="cx">         self._directory = directory
</span><span class="cx"> 
</span><ins>+        # How to large we let an AMP response get before breaking it up
+        self._maxSize = 60000
</ins><span class="cx"> 
</span><ins>+        # The cache of results we have not fully responded with.  A dictionary
+        # whose keys are &quot;continuation tokens&quot; 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):
+        &quot;&quot;&quot;
+        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
+        &quot;&quot;&quot;
+        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):
+        &quot;&quot;&quot;
+        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
+        &quot;&quot;&quot;
+        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):
+        &quot;&quot;&quot;
+        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 &quot;continuation&quot; key
+            in the previous response.
+        &quot;&quot;&quot;
+        log.debug(&quot;Continuation: {c}&quot;, c=continuation)
+        records = self._retrieveContinuation(continuation)
+        response = self._recordsToResponse(records)
+        log.debug(&quot;Responding with: {response}&quot;, response=response)
+        return response
+
+
+    def _recordsToResponse(self, records):
+        &quot;&quot;&quot;
+        Craft an AMP response containing as many records as will fit within
+        the size limit.  Remaining records are stored as a &quot;continuation&quot;,
+        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 &quot;fieldsList&quot; key, and if there are leftover
+            records that did not fit, there will be a &quot;continuation&quot; key
+            containing the token the client must send via ContinuationCommand.
+        &quot;&quot;&quot;
+        fieldsList = []
+        count = 0
+        if records:
+            size = 0
+            while size &lt; 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 = {&quot;fieldsList&quot;: fieldsList}
+
+        if records:
+            response[&quot;continuation&quot;] = self._storeContinuation(records)
+
+        return response
+
+
</ins><span class="cx">     def recordToDict(self, record):
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="cx">         Turn a record in a dictionary of fields which can be reconstituted
</span><span class="lines">@@ -140,12 +238,7 @@
</span><span class="cx">         records = (yield self._directory.recordsWithRecordType(
</span><span class="cx">             self._directory.recordType.lookupByName(recordType))
</span><span class="cx">         )
</span><del>-        fieldsList = []
-        for record in records:
-            fieldsList.append(self.recordToDict(record))
-        response = {
-            &quot;fieldsList&quot;: pickle.dumps(fieldsList),
-        }
</del><ins>+        response = self._recordsToResponse(records)
</ins><span class="cx">         log.debug(&quot;Responding with: {response}&quot;, response=response)
</span><span class="cx">         returnValue(response)
</span><span class="cx"> 
</span><span class="lines">@@ -156,16 +249,13 @@
</span><span class="cx">         emailAddress = emailAddress.decode(&quot;utf-8&quot;)
</span><span class="cx">         log.debug(&quot;RecordsWithEmailAddress: {e}&quot;, e=emailAddress)
</span><span class="cx">         records = (yield self._directory.recordsWithEmailAddress(emailAddress))
</span><del>-        fieldsList = []
-        for record in records:
-            fieldsList.append(self.recordToDict(record))
-        response = {
-            &quot;fieldsList&quot;: pickle.dumps(fieldsList),
-        }
</del><ins>+        response = self._recordsToResponse(records)
</ins><span class="cx">         log.debug(&quot;Responding with: {response}&quot;, response=response)
</span><span class="cx">         returnValue(response)
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+
+
</ins><span class="cx">     @RecordsMatchingTokensCommand.responder
</span><span class="cx">     @inlineCallbacks
</span><span class="cx">     def recordsMatchingTokens(self, tokens, context=None):
</span><span class="lines">@@ -174,16 +264,12 @@
</span><span class="cx">         records = yield self._directory.recordsMatchingTokens(
</span><span class="cx">             tokens, context=context
</span><span class="cx">         )
</span><del>-        fieldsList = []
-        for record in records:
-            fieldsList.append(self.recordToDict(record))
-        response = {
-            &quot;fieldsList&quot;: pickle.dumps(fieldsList),
-        }
</del><ins>+        response = self._recordsToResponse(records)
</ins><span class="cx">         log.debug(&quot;Responding with: {response}&quot;, response=response)
</span><span class="cx">         returnValue(response)
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+
</ins><span class="cx">     @RecordsMatchingFieldsCommand.responder
</span><span class="cx">     @inlineCallbacks
</span><span class="cx">     def recordsMatchingFields(self, fields, operand=&quot;OR&quot;, recordType=None):
</span><span class="lines">@@ -200,8 +286,18 @@
</span><span class="cx">                 valueType = self._directory.fieldName.valueType(field)
</span><span class="cx">                 if valueType is uuid.UUID:
</span><span class="cx">                     searchTerm = uuid.UUID(searchTerm)
</span><del>-            matchFlags = MatchFlags.lookupByName(matchFlags.decode(&quot;utf-8&quot;))
</del><ins>+
+            matchFlags = matchFlags.decode(&quot;utf-8&quot;)
+            if matchFlags.startswith(&quot;{&quot;) and matchFlags.endswith(&quot;}&quot;):
+                flags = MatchFlags.none
+                for flag in matchFlags[1:-1].split(&quot;,&quot;):
+                    flags |= MatchFlags.lookupByName(flag)
+                matchFlags = flags
+            else:
+                matchFlags = MatchFlags.lookupByName(matchFlags)
+
</ins><span class="cx">             matchType = MatchType.lookupByName(matchType.decode(&quot;utf-8&quot;))
</span><ins>+
</ins><span class="cx">             newFields.append((fieldName, searchTerm, matchFlags, matchType))
</span><span class="cx">         operand = Operand.lookupByName(operand)
</span><span class="cx">         if recordType:
</span><span class="lines">@@ -209,12 +305,7 @@
</span><span class="cx">         records = yield self._directory.recordsMatchingFields(
</span><span class="cx">             newFields, operand=operand, recordType=recordType
</span><span class="cx">         )
</span><del>-        fieldsList = []
-        for record in records:
-            fieldsList.append(self.recordToDict(record))
-        response = {
-            &quot;fieldsList&quot;: pickle.dumps(fieldsList),
-        }
</del><ins>+        response = self._recordsToResponse(records)
</ins><span class="cx">         log.debug(&quot;Responding with: {response}&quot;, response=response)
</span><span class="cx">         returnValue(response)
</span><span class="cx"> 
</span><span class="lines">@@ -230,13 +321,12 @@
</span><span class="cx">             log.error(&quot;Failed in members&quot;, error=e)
</span><span class="cx">             record = None
</span><span class="cx"> 
</span><del>-        fieldsList = []
</del><ins>+        records = []
</ins><span class="cx">         if record is not None:
</span><span class="cx">             for member in (yield record.members()):
</span><del>-                fieldsList.append(self.recordToDict(member))
-        response = {
-            &quot;fieldsList&quot;: pickle.dumps(fieldsList),
-        }
</del><ins>+                records.append(member)
+
+        response = self._recordsToResponse(records)
</ins><span class="cx">         log.debug(&quot;Responding with: {response}&quot;, response=response)
</span><span class="cx">         returnValue(response)
</span><span class="cx"> 
</span><span class="lines">@@ -282,12 +372,10 @@
</span><span class="cx">             log.error(&quot;Failed in groups&quot;, error=e)
</span><span class="cx">             record = None
</span><span class="cx"> 
</span><del>-        fieldsList = []
</del><ins>+        records = []
</ins><span class="cx">         for group in (yield record.groups()):
</span><del>-            fieldsList.append(self.recordToDict(group))
-        response = {
-            &quot;fieldsList&quot;: pickle.dumps(fieldsList),
-        }
</del><ins>+            records.append(group)
+        response = self._recordsToResponse(records)
</ins><span class="cx">         log.debug(&quot;Responding with: {response}&quot;, response=response)
</span><span class="cx">         returnValue(response)
</span><span class="cx"> 
</span><span class="lines">@@ -342,7 +430,7 @@
</span><span class="cx">         returnValue(response)
</span><span class="cx"> 
</span><span class="cx"> 
</span><del>-    @WikiAccessForUID.responder
</del><ins>+    @WikiAccessForUIDCommand.responder
</ins><span class="cx">     @inlineCallbacks
</span><span class="cx">     def wikiAccessForUID(self, wikiUID, uid):
</span><span class="cx">         wikiUID = wikiUID.decode(&quot;utf-8&quot;)
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetxdavdpstesttest_clientpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/dps/test/test_client.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -27,11 +27,15 @@
</span><span class="cx"> from twisted.python.filepath import FilePath
</span><span class="cx"> from twisted.test.testutils import returnConnected
</span><span class="cx"> from twisted.trial import unittest
</span><ins>+from twistedcaldav.config import config
+from twistedcaldav.test.util import StoreTestCase
</ins><span class="cx"> from txdav.dps.client import DirectoryService
</span><span class="cx"> from txdav.dps.server import DirectoryProxyAMPProtocol
</span><span class="cx"> from txdav.who.directory import CalendarDirectoryServiceMixin
</span><del>-from twistedcaldav.test.util import StoreTestCase
-from twistedcaldav.config import config
</del><ins>+from txdav.who.groups import GroupCacher
+from txdav.who.test.support import (
+    TestRecord, CalendarInMemoryDirectoryService
+)
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> testMode = &quot;xml&quot;  # &quot;xml&quot; or &quot;od&quot;
</span><span class="lines">@@ -230,6 +234,28 @@
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     @inlineCallbacks
</span><ins>+    def test_recordsMatchingFields_not(self):
+        fields = (
+            (
+                u&quot;fullNames&quot;, &quot;anche&quot;,
+                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(&quot;sagen&quot; in matchingShortNames)
+        self.assertTrue(&quot;dre&quot; not in matchingShortNames)
+        self.assertTrue(&quot;wsanchez&quot; not in matchingShortNames)
+        self.assertTrue(&quot;sanchezoffice&quot; not in matchingShortNames)
+
+
+    @inlineCallbacks
</ins><span class="cx">     def test_recordsFromMatchExpression(self):
</span><span class="cx">         expression = MatchExpression(
</span><span class="cx">             FieldName.uid,
</span><span class="lines">@@ -244,6 +270,22 @@
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     @inlineCallbacks
</span><ins>+    def test_members(self):
+        group = yield self.directory.recordWithUID(u&quot;__calendar-dev__&quot;)
+        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&quot;__sagen__&quot;)
+        groups = yield record.groups()
+        self.assertEquals(len(groups), 1)
+
+
+    @inlineCallbacks
</ins><span class="cx">     def test_verifyPlaintextPassword(self):
</span><span class="cx">         expectations = (
</span><span class="cx">             (testPassword, True),  # Correct
</span><span class="lines">@@ -537,6 +579,35 @@
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     @inlineCallbacks
</span><ins>+    def test_members(self):
+        group = yield self.client.recordWithUID(u&quot;__top_group_1__&quot;)
+        members = yield group.members()
+        self.assertEquals(len(members), 3)
+
+        group = yield self.client.recordWithUID(u&quot;emptygroup&quot;)
+        members = yield group.members()
+        self.assertEquals(len(members), 0)
+
+
+    @inlineCallbacks
+    def test_groups(self):
+
+        # A group must first be &quot;refreshed&quot; 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&quot;__sub_group_1__&quot;)
+        yield txn.commit()
+
+        # record = yield self.client.recordWithUID(u&quot;__sagen1__&quot;)
+        # 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 = &quot;Figure out why this hangs&quot;
+
+
+    @inlineCallbacks
</ins><span class="cx">     def test_verifyPlaintextPassword(self):
</span><span class="cx">         expectations = (
</span><span class="cx">             (u&quot;zehcnasw&quot;, True),  # Correct
</span><span class="lines">@@ -590,3 +661,109 @@
</span><span class="cx">                     )
</span><span class="cx">                 )
</span><span class="cx">                 self.assertEquals(authenticated, answer)
</span><ins>+
+
+class DPSClientLargeResultsTest(unittest.TestCase):
+    &quot;&quot;&quot;
+    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)
+    &quot;&quot;&quot;
+
+    @inlineCallbacks
+    def setUp(self):
+
+        self.numUsers = 1000
+
+        # The &quot;local&quot; directory service
+        self.directory = DirectoryService(None)
+
+        # The &quot;remote&quot; directory service
+        remoteDirectory = CalendarInMemoryDirectoryService(None)
+
+        # Add users
+        records = []
+        fieldName = remoteDirectory.fieldName
+        for i in xrange(self.numUsers):
+            records.append(
+                TestRecord(
+                    remoteDirectory,
+                    {
+                        fieldName.uid: u&quot;foo{ctr:05d}&quot;.format(ctr=i),
+                        fieldName.shortNames: (u&quot;foo{ctr:05d}&quot;.format(ctr=i),),
+                        fieldName.fullNames: (u&quot;foo{ctr:05d}&quot;.format(ctr=i),),
+                        fieldName.recordType: RecordType.user,
+                    }
+                )
+            )
+
+        # Add a big group
+        records.append(
+            TestRecord(
+                remoteDirectory,
+                {
+                    fieldName.uid: u&quot;bigGroup&quot;,
+                    fieldName.recordType: RecordType.group,
+                }
+            )
+        )
+
+        yield remoteDirectory.updateRecords(records, create=True)
+
+        group = yield remoteDirectory.recordWithUID(u&quot;bigGroup&quot;)
+        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, &quot;_getConnection&quot;, 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, &quot;_call&quot;, newCall)
+
+
+    @inlineCallbacks
+    def test_tooBigResults(self):
+        &quot;&quot;&quot;
+        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.
+        &quot;&quot;&quot;
+
+        # recordsMatchingTokens
+        records = yield self.directory.recordsMatchingTokens([u&quot;foo&quot;])
+        self.assertEquals(len(records), self.numUsers)
+
+        # recordsMatchingFields
+        fields = (
+            (u&quot;fullNames&quot;, &quot;foo&quot;, 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&quot;bigGroup&quot;)
+        members = yield group.members()
+        self.assertEquals(len(members), self.numUsers)
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetxdavwhoaugmentpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/who/augment.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -23,6 +23,8 @@
</span><span class="cx">     &quot;AugmentedDirectoryService&quot;,
</span><span class="cx"> ]
</span><span class="cx"> 
</span><ins>+import time
+
</ins><span class="cx"> from zope.interface import implementer
</span><span class="cx"> 
</span><span class="cx"> from twisted.internet.defer import inlineCallbacks, returnValue
</span><span class="lines">@@ -47,6 +49,47 @@
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+def timed(f):
+    &quot;&quot;&quot;
+    A decorator which keeps track of the wrapped function's call count and
+    total duration
+    &quot;&quot;&quot;
+
+    def recordTiming(result, key, startTime):
+        &quot;&quot;&quot;
+        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}
+        &quot;&quot;&quot;
+        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):
+        &quot;&quot;&quot;
+        Records the start time of the call and the method's name
+        &quot;&quot;&quot;
+        d = f(self, *args, **kwds)
+        d.addBoth(recordTiming, f.func_name, time.time())
+        return d
+
+    return timingWrapper
+
+
</ins><span class="cx"> @implementer(IDirectoryService, IStoreDirectoryService)
</span><span class="cx"> class AugmentedDirectoryService(
</span><span class="cx">     BaseDirectoryService, CalendarDirectoryServiceMixin
</span><span class="lines">@@ -63,7 +106,9 @@
</span><span class="cx">         FieldName,
</span><span class="cx">     ))
</span><span class="cx"> 
</span><ins>+    _timings = {}
</ins><span class="cx"> 
</span><ins>+
</ins><span class="cx">     def __init__(self, directory, store, augmentDB):
</span><span class="cx">         BaseDirectoryService.__init__(self, directory.realmName)
</span><span class="cx">         self._directory = directory
</span><span class="lines">@@ -71,6 +116,10 @@
</span><span class="cx">         self._augmentDB = augmentDB
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+    def stats(self):
+        return self._timings
+
+
</ins><span class="cx">     @property
</span><span class="cx">     def recordType(self):
</span><span class="cx">         # Defer to the directory service we're augmenting
</span><span class="lines">@@ -104,6 +153,7 @@
</span><span class="cx">         returnValue(augmented)
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+    @timed
</ins><span class="cx">     @inlineCallbacks
</span><span class="cx">     def recordWithUID(self, uid):
</span><span class="cx">         # MOVE2WHO, REMOVE THIS:
</span><span class="lines">@@ -116,6 +166,7 @@
</span><span class="cx">         returnValue(record)
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+    @timed
</ins><span class="cx">     @inlineCallbacks
</span><span class="cx">     def recordWithGUID(self, guid):
</span><span class="cx">         record = yield self._directory.recordWithGUID(guid)
</span><span class="lines">@@ -123,6 +174,7 @@
</span><span class="cx">         returnValue(record)
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+    @timed
</ins><span class="cx">     @inlineCallbacks
</span><span class="cx">     def recordsWithRecordType(self, recordType):
</span><span class="cx">         records = yield self._directory.recordsWithRecordType(recordType)
</span><span class="lines">@@ -133,6 +185,7 @@
</span><span class="cx">         returnValue(augmented)
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+    @timed
</ins><span class="cx">     @inlineCallbacks
</span><span class="cx">     def recordWithShortName(self, recordType, shortName):
</span><span class="cx">         # MOVE2WHO, REMOVE THIS:
</span><span class="lines">@@ -147,6 +200,7 @@
</span><span class="cx">         returnValue(record)
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+    @timed
</ins><span class="cx">     @inlineCallbacks
</span><span class="cx">     def recordsWithEmailAddress(self, emailAddress):
</span><span class="cx">         # MOVE2WHO, REMOVE THIS:
</span><span class="lines">@@ -162,6 +216,28 @@
</span><span class="cx">         returnValue(augmented)
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+    @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
</ins><span class="cx">     @inlineCallbacks
</span><span class="cx">     def updateRecords(self, records, create=False):
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="lines">@@ -364,6 +440,7 @@
</span><span class="cx">         self._baseRecord = baseRecord
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+    @timed
</ins><span class="cx">     @inlineCallbacks
</span><span class="cx">     def members(self):
</span><span class="cx">         augmented = []
</span><span class="lines">@@ -375,6 +452,7 @@
</span><span class="cx">         returnValue(augmented)
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+    @timed
</ins><span class="cx">     @inlineCallbacks
</span><span class="cx">     def groups(self):
</span><span class="cx">         augmented = []
</span><span class="lines">@@ -397,13 +475,16 @@
</span><span class="cx">         returnValue(augmented)
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+    @timed
</ins><span class="cx">     def verifyPlaintextPassword(self, password):
</span><span class="cx">         return self._baseRecord.verifyPlaintextPassword(password)
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+    @timed
</ins><span class="cx">     def verifyHTTPDigest(self, *args):
</span><span class="cx">         return self._baseRecord.verifyHTTPDigest(*args)
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+    @timed
</ins><span class="cx">     def accessForRecord(self, record):
</span><span class="cx">         return self._baseRecord.accessForRecord(record)
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetxdavwhodirectorypy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/who/directory.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -143,6 +143,7 @@
</span><span class="cx">         return recordTypes
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+    @inlineCallbacks
</ins><span class="cx">     def recordsMatchingTokens(self, tokens, context=None, limitResults=50,
</span><span class="cx">                               timeoutSeconds=10):
</span><span class="cx">         fields = [
</span><span class="lines">@@ -174,37 +175,45 @@
</span><span class="cx">         else:
</span><span class="cx">             expression = CompoundExpression(outer, Operand.AND)
</span><span class="cx"> 
</span><ins>+        results = []
+
</ins><span class="cx">         if context is not None:
</span><ins>+            # 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.
</ins><span class="cx">             recordTypes = self.recordTypesForSearchContext(context)
</span><del>-            log.debug(&quot;Context {c}, recordTypes {r}&quot;, c=context, r=recordTypes)
-            typeSpecific = []
</del><ins>+            log.debug(&quot;Tokens: {t}, recordTypes {r}&quot;, t=tokens, r=recordTypes)
</ins><span class="cx">             for recordType in recordTypes:
</span><del>-                typeSpecific.append(
-                    MatchExpression(
-                        self.fieldName.recordType,
-                        recordType,
-                        MatchType.equals,
-                        MatchFlags.none
-                    )
</del><ins>+                typeSpecific = MatchExpression(
+                    self.fieldName.recordType,
+                    recordType,
+                    MatchType.equals,
+                    MatchFlags.none
</ins><span class="cx">                 )
</span><span class="cx"> 
</span><del>-            if len(typeSpecific) == 1:
-                typeSpecific = typeSpecific[0]
-
-            else:
</del><span class="cx">                 typeSpecific = CompoundExpression(
</span><del>-                    typeSpecific,
-                    Operand.OR
</del><ins>+                    [expression, typeSpecific],
+                    Operand.AND
</ins><span class="cx">                 )
</span><span class="cx"> 
</span><del>-            expression = CompoundExpression(
-                [expression, typeSpecific],
-                Operand.AND
</del><ins>+                subResults = yield self.recordsFromExpression(typeSpecific)
+                log.debug(
+                    &quot;Tokens ({t}) matched {n} of {r}&quot;,
+                    t=tokens, n=len(subResults), r=recordType
+                )
+                results.extend(subResults)
+
+        else:
+            # No record type limits
+            results = yield self.recordsFromExpression(expression)
+            log.debug(
+                &quot;Tokens ({t}) matched {n} records&quot;,
+                t=tokens, n=len(results)
</ins><span class="cx">             )
</span><span class="cx"> 
</span><del>-        log.debug(&quot;Expression {e}&quot;, e=expression)
</del><ins>+        log.debug(&quot;Tokens ({t}) matched records {r}&quot;, t=tokens, r=results)
</ins><span class="cx"> 
</span><del>-        return self.recordsFromExpression(expression)
</del><ins>+        returnValue(results)
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     def recordsMatchingFieldsWithCUType(self, fields, operand=Operand.OR,
</span><span class="lines">@@ -326,19 +335,7 @@
</span><span class="cx">             )
</span><span class="cx"> 
</span><span class="cx"> 
</span><del>-    @property
-    def calendarUserAddresses(self):
-        try:
-            if not (
-                self.hasCalendars or (
-                    config.GroupAttendees.Enabled and
-                    self.recordType == BaseRecordType.group
-                )
-            ):
-                return frozenset()
-        except AttributeError:
-            pass
-
</del><ins>+    def _calendarAddresses(self):
</ins><span class="cx">         cuas = set()
</span><span class="cx"> 
</span><span class="cx">         # urn:x-uid:
</span><span class="lines">@@ -366,6 +363,22 @@
</span><span class="cx"> 
</span><span class="cx">         return frozenset(cuas)
</span><span class="cx"> 
</span><ins>+
+    @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()
+
</ins><span class="cx">     # Mapping from directory record.recordType to RFC2445 CUTYPE values
</span><span class="cx">     _cuTypes = {
</span><span class="cx">         BaseRecordType.user: 'INDIVIDUAL',
</span><span class="lines">@@ -427,7 +440,7 @@
</span><span class="cx">         ))
</span><span class="cx"> 
</span><span class="cx"> 
</span><del>-    def canonicalCalendarUserAddress(self):
</del><ins>+    def canonicalCalendarUserAddress(self, checkCal=True):
</ins><span class="cx">         &quot;&quot;&quot;
</span><span class="cx">             Return a CUA for this record, preferring in this order:
</span><span class="cx">             urn:x-uid: form
</span><span class="lines">@@ -437,8 +450,13 @@
</span><span class="cx">             first in calendarUserAddresses list (sorted)
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="cx"> 
</span><del>-        sortedCuas = sorted(self.calendarUserAddresses)
</del><ins>+        if checkCal:
+            cuas = self.calendarUserAddresses
+        else:
+            cuas = self._calendarAddresses()
</ins><span class="cx"> 
</span><ins>+        sortedCuas = sorted(cuas)
+
</ins><span class="cx">         for prefix in (
</span><span class="cx">             &quot;urn:x-uid:&quot;,
</span><span class="cx">             &quot;urn:uuid:&quot;,
</span><span class="lines">@@ -450,7 +468,7 @@
</span><span class="cx">                     return candidate
</span><span class="cx"> 
</span><span class="cx">         # fall back to using the first one
</span><del>-        return sortedCuas[0]
</del><ins>+        return sortedCuas[0] if sortedCuas else None  # groups may not have cua
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     def enabledAsOrganizer(self):
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetxdavwhoopendirectorypy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/who/opendirectory.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -24,32 +24,14 @@
</span><span class="cx"> 
</span><span class="cx"> __all__ = [
</span><span class="cx">     &quot;DirectoryService&quot;,
</span><del>-    &quot;RecordType&quot;
</del><span class="cx"> ]
</span><span class="cx"> 
</span><span class="cx"> from twext.who.opendirectory import DirectoryService
</span><del>-from twisted.python.constants import Names, NamedConstant
</del><span class="cx"> 
</span><span class="cx"> 
</span><del>-
</del><span class="cx"> # Hoorj OMG haxx
</span><span class="cx"> from twext.who.opendirectory._constants import ODRecordType as _ODRecordType
</span><span class="cx"> from .idirectory import RecordType as _CSRecordType
</span><span class="cx"> 
</span><span class="cx"> _ODRecordType.location.recordType = _CSRecordType.location
</span><span class="cx"> _ODRecordType.resource.recordType = _CSRecordType.resource
</span><del>-
-
-class RecordType(Names):
-
-    user = NamedConstant()
-    user.description = u&quot;user&quot;
-
-    group = NamedConstant()
-    group.description = u&quot;group&quot;
-
-    location = NamedConstant()
-    location.description = u&quot;location&quot;
-
-    resource = NamedConstant()
-    resource.description = u&quot;resource&quot;
</del></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetxdavwhotestsupportpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/who/test/support.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -18,15 +18,24 @@
</span><span class="cx">     RecordType,
</span><span class="cx">     NoSuchRecordError
</span><span class="cx"> )
</span><del>-from twext.who.index import DirectoryService as IndexDirectoryService
</del><ins>+from twext.who.index import (
+    DirectoryService as IndexDirectoryService,
+    DirectoryRecord as IndexedDirectoryRecord
+)
</ins><span class="cx"> from twext.who.util import ConstantsContainer
</span><ins>+from twisted.internet.defer import succeed, inlineCallbacks
+from txdav.who.directory import (
+    CalendarDirectoryRecordMixin, CalendarDirectoryServiceMixin
+)
</ins><span class="cx"> from txdav.who.idirectory import (
</span><span class="cx">     RecordType as CalRecordType
</span><span class="cx"> )
</span><del>-from twisted.internet.defer import succeed, inlineCallbacks
</del><span class="cx"> 
</span><span class="cx"> 
</span><ins>+class TestRecord(IndexedDirectoryRecord, CalendarDirectoryRecordMixin):
+    pass
</ins><span class="cx"> 
</span><ins>+
</ins><span class="cx"> class InMemoryDirectoryService(IndexDirectoryService):
</span><span class="cx">     &quot;&quot;&quot;
</span><span class="cx">     An in-memory IDirectoryService.  You must call updateRecords( ) if you want
</span><span class="lines">@@ -69,3 +78,11 @@
</span><span class="cx">                     if record.uid in uids:
</span><span class="cx">                         recordSet.remove(record)
</span><span class="cx">         return succeed(None)
</span><ins>+
+
+
+class CalendarInMemoryDirectoryService(
+    InMemoryDirectoryService,
+    CalendarDirectoryServiceMixin
+):
+    pass
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetxdavwhovcardpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/who/vcard.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -323,8 +323,9 @@
</span><span class="cx">     # add members
</span><span class="cx">     # FIXME:  members() is a deferred, so all of vCardFromRecord is deferred.
</span><span class="cx">     for memberRecord in (yield record.members()):
</span><del>-        if memberRecord:
-            vcard.addProperty(Property(&quot;X-ADDRESSBOOKSERVER-MEMBER&quot;, memberRecord.canonicalCalendarUserAddress().encode(&quot;utf-8&quot;)))
</del><ins>+        cua = memberRecord.canonicalCalendarUserAddress(False)
+        if cua:
+            vcard.addProperty(Property(&quot;X-ADDRESSBOOKSERVER-MEMBER&quot;, cua.encode(&quot;utf-8&quot;)))
</ins><span class="cx"> 
</span><span class="cx">     #===================================================================
</span><span class="cx">     # vCard 4.0  http://tools.ietf.org/html/rfc6350
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetxweb2davmethodreport_expandpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/txweb2/dav/method/report_expand.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -69,7 +69,7 @@
</span><span class="cx"> 
</span><span class="cx">     for property in expand_property.children:
</span><span class="cx">         namespace = property.attributes.get(&quot;namespace&quot;, dav_namespace)
</span><del>-        name      = property.attributes.get(&quot;name&quot;, &quot;&quot;)
</del><ins>+        name = property.attributes.get(&quot;name&quot;, &quot;&quot;)
</ins><span class="cx"> 
</span><span class="cx">         # Make sure children have no children
</span><span class="cx">         props_to_find = []
</span><span class="lines">@@ -81,7 +81,7 @@
</span><span class="cx">                     &quot;expand-property REPORT only supports single level expansion&quot;
</span><span class="cx">                 ))
</span><span class="cx">             child_namespace = child.attributes.get(&quot;namespace&quot;, dav_namespace)
</span><del>-            child_name      = child.attributes.get(&quot;name&quot;, &quot;&quot;)
</del><ins>+            child_name = child.attributes.get(&quot;name&quot;, &quot;&quot;)
</ins><span class="cx">             props_to_find.append((child_namespace, child_name))
</span><span class="cx"> 
</span><span class="cx">         properties[(namespace, name)] = props_to_find
</span><span class="lines">@@ -161,16 +161,17 @@
</span><span class="cx">             )
</span><span class="cx"> 
</span><span class="cx">             status = statusForFailure(f, &quot;getting property: %s&quot; % (qname,))
</span><del>-            if status not in properties_by_status: properties_by_status[status] = []
</del><ins>+            if status not in properties_by_status:
+                properties_by_status[status] = []
</ins><span class="cx">             properties_by_status[status].append(propertyName(qname))
</span><span class="cx"> 
</span><span class="cx">     # Build the overall response
</span><span class="cx">     propstats = [
</span><span class="cx">         element.PropertyStatus(
</span><del>-            element.PropertyContainer(*properties_by_status[status]),
-            element.Status.fromResponseCode(status)
</del><ins>+            element.PropertyContainer(*properties_by_status[pstatus]),
+            element.Status.fromResponseCode(pstatus)
</ins><span class="cx">         )
</span><del>-        for status in properties_by_status if properties_by_status[status]
</del><ins>+        for pstatus in properties_by_status if properties_by_status[pstatus]
</ins><span class="cx">     ]
</span><span class="cx"> 
</span><span class="cx">     returnValue(MultiStatusResponse((element.PropertyStatusResponse(element.HRef(request.uri), *propstats),)))
</span></span></pre>
</div>
</div>

</body>
</html>