mirror of
https://github.com/nextcloud/server.git
synced 2025-01-30 22:37:01 +00:00
f6d34cbf71
Bumps [@nextcloud/calendar-availability-vue](https://github.com/nextcloud/calendar-availability-vue) from 2.2.2 to 2.2.6. - [Release notes](https://github.com/nextcloud/calendar-availability-vue/releases) - [Changelog](https://github.com/nextcloud/calendar-availability-vue/blob/main/CHANGELOG.md) - [Commits](https://github.com/nextcloud/calendar-availability-vue/compare/v2.2.2...v2.2.6) --- updated-dependencies: - dependency-name: "@nextcloud/calendar-availability-vue" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
1 line
No EOL
772 KiB
XML
1 line
No EOL
772 KiB
XML
{"version":3,"file":"dav-settings-personal-availability.js?v=2dd92be899809263abff","mappings":"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AaL,EAAUC,GACrC,OAAOC,aAAqC,EAASA,EAAM9+B,KAAK,OACpE,8BCxDAiB,OAAOwL,eAAeoqB,EAAS,aAAc,CAAE74B,OAAO,IACtD64B,EAAQmI,SAAWnI,EAAQ8H,kBAAe,EAC1C9H,EAAQ8H,aAAe,kBACvB9H,EAAQmI,SAAW,IAAI7P,IAAI,CACvB,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,qBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,qBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,uBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,sBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,UAIjB,CACI,cACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,cACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,UAIjB,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,UAIjB,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,qBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,iCACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,8BACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,4BACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,0BACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,6BACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,4BACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,iCACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,0BACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,6BACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,6BACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,4BACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,4BACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,UAKrB,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,yBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,uBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,wBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,uBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,UAKrB,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,qBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,UAKrB,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,uBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,uBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,sBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,sBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,qBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,qBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,qBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,+BACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,uBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,0BACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,6BACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,4BACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,wBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,4BACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,0BACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,8BACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,8BACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,qBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,sBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,wBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,qBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,qBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,sBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,qBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,qBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,8BACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,8BACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,iCACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,sBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,qBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,wBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,yBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,sBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,sBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,uBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,sBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,uBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,qBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,wBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,UAKrB,CACI,uBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,wBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,qBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,wBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,sBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,sBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,qBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,sBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,4BACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,uBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,qBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,qBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,sBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,YACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,cACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,aACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,cACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,aACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,cACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,cACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,YACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,cACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,cACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,aACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,WAIjB,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,aACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,YACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,aACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,YACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,cACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,YACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,aACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,WAIjB,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,WAIjB,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,cACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,aACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,UAIjB,CACI,cACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,cACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,YACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,YACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,aACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,cACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,aACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,qBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,cACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,cACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,QACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,QACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,aACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,aACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,cACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,cACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,WAIjB,CACI,qBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,sBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,qBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,yBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,qBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,qBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,UAKrB,CACI,qBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,UAIjB,CACI,wBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,UAKrB,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,UAKrB,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,UAIjB,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,WAIjB,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,UAKrB,CACI,qBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,UAIjB,CACI,sBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,QACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,UAKrB,CACI,sBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,UAKrB,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,UAIjB,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,UAKrB,CACI,YACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,YACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,aACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,aACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,aACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,YACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,YACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,YACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,YACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,YACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,YACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,YACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,YACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,UACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,YACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,YACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,aACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,aACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,aACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,aACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,aACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,YACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,YACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,YACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,YACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,YACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,YACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,YACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,YACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,WACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,UACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,UACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,WACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,qBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,qBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,cACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,cACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,cACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,cACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,sBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,WAIjB,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,cACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,uBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,QACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,QACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,WAKrB,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,QAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,UAKrB,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,SAGb,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,UAKrB,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,sBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,UAIjB,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,qBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,WAIjB,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,SAIjB,CACI,gBACA,CACI,EAAK,CACD,EAA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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/webpack/runtime/load script","webpack:///nextcloud/apps/dav/src/utils/date.js","webpack:///nextcloud/apps/dav/src/service/logger.js","webpack:///nextcloud/apps/dav/src/components/AbsenceForm.vue?vue&type=script&lang=js","webpack:///nextcloud/apps/dav/src/components/AbsenceForm.vue","webpack://nextcloud/./apps/dav/src/components/AbsenceForm.vue?fb7f","webpack://nextcloud/./apps/dav/src/components/AbsenceForm.vue?0782","webpack://nextcloud/./apps/dav/src/components/AbsenceForm.vue?5b67","webpack://nextcloud/./apps/dav/src/components/AvailabilityForm.vue?ba59","webpack://nextcloud/./node_modules/@nextcloud/calendar-availability-vue/dist/assets/index-UKC4AV1t.css?6b49","webpack:///nextcloud/node_modules/@nextcloud/calendar-availability-vue/node_modules/ical.js/dist/ical.js","webpack:///nextcloud/node_modules/uuid/dist/esm-browser/native.js","webpack:///nextcloud/node_modules/uuid/dist/esm-browser/rng.js","webpack:///nextcloud/node_modules/uuid/dist/esm-browser/stringify.js","webpack:///nextcloud/node_modules/uuid/dist/esm-browser/v4.js","webpack:///nextcloud/node_modules/@nextcloud/calendar-availability-vue/dist/index.mjs","webpack:///nextcloud/apps/dav/src/dav/client.js","webpack:///nextcloud/apps/dav/src/components/AvailabilityForm.vue","webpack:///nextcloud/apps/dav/src/components/AvailabilityForm.vue?vue&type=script&lang=js","webpack:///nextcloud/apps/dav/src/service/CalendarService.js","webpack:///nextcloud/apps/dav/src/service/PreferenceService.js","webpack://nextcloud/./apps/dav/src/components/AvailabilityForm.vue?23dd","webpack://nextcloud/./apps/dav/src/components/AvailabilityForm.vue?1bb2","webpack:///nextcloud/apps/dav/src/views/Availability.vue?vue&type=script&lang=js","webpack:///nextcloud/apps/dav/src/views/Availability.vue","webpack://nextcloud/./apps/dav/src/views/Availability.vue?aa5a","webpack://nextcloud/./apps/dav/src/views/Availability.vue?4eb1","webpack:///nextcloud/apps/dav/src/settings-personal-availability.js","webpack:///nextcloud/node_modules/@nextcloud/calendar-availability-vue/dist/assets/index-UKC4AV1t.css","webpack:///nextcloud/apps/dav/src/components/AbsenceForm.vue?vue&type=style&index=0&id=716172ba&prod&lang=scss&scoped=true","webpack:///nextcloud/apps/dav/src/components/AvailabilityForm.vue?vue&type=style&index=0&id=0275a141&prod&lang=scss&scoped=true","webpack:///nextcloud/node_modules/icalzone/dist/index.js","webpack:///nextcloud/node_modules/icalzone/dist/zones.js","webpack:///nextcloud/node_modules/lodash/_LazyWrapper.js","webpack:///nextcloud/node_modules/lodash/_LodashWrapper.js","webpack:///nextcloud/node_modules/lodash/_baseFlatten.js","webpack:///nextcloud/node_modules/lodash/_baseLodash.js","webpack:///nextcloud/node_modules/lodash/_baseSetData.js","webpack:///nextcloud/node_modules/lodash/_composeArgs.js","webpack:///nextcloud/node_modules/lodash/_composeArgsRight.js","webpack:///nextcloud/node_modules/lodash/_countHolders.js","webpack:///nextcloud/node_modules/lodash/_createBind.js","webpack:///nextcloud/node_modules/lodash/_createCtor.js","webpack:///nextcloud/node_modules/lodash/_createCurry.js","webpack:///nextcloud/node_modules/lodash/_createHybrid.js","webpack:///nextcloud/node_modules/lodash/_createPartial.js","webpack:///nextcloud/node_modules/lodash/_createRecurry.js","webpack:///nextcloud/node_modules/lodash/_createWrap.js","webpack:///nextcloud/node_modules/lodash/_flatRest.js","webpack:///nextcloud/node_modules/lodash/_getData.js","webpack:///nextcloud/node_modules/lodash/_getFuncName.js","webpack:///nextcloud/node_modules/lodash/_getHolder.js","webpack:///nextcloud/node_modules/lodash/_getWrapDetails.js","webpack:///nextcloud/node_modules/lodash/_insertWrapDetails.js","webpack:///nextcloud/node_modules/lodash/_isFlattenable.js","webpack:///nextcloud/node_modules/lodash/_isLaziable.js","webpack:///nextcloud/node_modules/lodash/_mergeData.js","webpack:///nextcloud/node_modules/lodash/_metaMap.js","webpack:///nextcloud/node_modules/lodash/_realNames.js","webpack:///nextcloud/node_modules/lodash/_reorder.js","webpack:///nextcloud/node_modules/lodash/_replaceHolders.js","webpack:///nextcloud/node_modules/lodash/_setData.js","webpack:///nextcloud/node_modules/lodash/_setWrapToString.js","webpack:///nextcloud/node_modules/lodash/_updateWrapDetails.js","webpack:///nextcloud/node_modules/lodash/_wrapperClone.js","webpack:///nextcloud/node_modules/lodash/ary.js","webpack:///nextcloud/node_modules/lodash/curry.js","webpack:///nextcloud/node_modules/lodash/flatten.js","webpack:///nextcloud/node_modules/lodash/fp/_baseConvert.js","webpack:///nextcloud/node_modules/lodash/fp/_mapping.js","webpack:///nextcloud/node_modules/lodash/fp/_util.js","webpack:///nextcloud/node_modules/lodash/fp/convert.js","webpack:///nextcloud/node_modules/lodash/fp/memoize.js","webpack:///nextcloud/node_modules/lodash/fp/placeholder.js","webpack:///nextcloud/node_modules/lodash/isError.js","webpack:///nextcloud/node_modules/lodash/isWeakMap.js","webpack:///nextcloud/node_modules/lodash/iteratee.js","webpack:///nextcloud/node_modules/lodash/rearg.js","webpack:///nextcloud/node_modules/lodash/toFinite.js","webpack:///nextcloud/node_modules/lodash/toInteger.js","webpack:///nextcloud/node_modules/lodash/toPath.js","webpack:///nextcloud/node_modules/lodash/wrapperLodash.js","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/ensure chunk","webpack:///nextcloud/webpack/runtime/get javascript chunk filename","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/publicPath","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/runtime/nonce","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"nextcloud:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","/**\n * @copyright Copyright (c) 2023 Richard Steinmetz <richard@steinmetz.cloud>\n *\n * @author Richard Steinmetz <richard@steinmetz.cloud>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/**\n * Format a date as 'YYYY-MM-DD'.\n *\n * @param {Date} date A date instance to format.\n * @return {string} 'YYYY-MM-DD'\n */\nexport function formatDateAsYMD(date) {\n\tconst year = date.getFullYear()\n\tconst month = (date.getMonth() + 1).toString().padStart(2, '0')\n\tconst day = date.getDate().toString().padStart(2, '0')\n\treturn `${year}-${month}-${day}`\n}\n","/*\n * @copyright 2021 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2021 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\nimport { getLoggerBuilder } from '@nextcloud/logger'\n\nconst logger = getLoggerBuilder()\n\t.setApp('dav')\n\t.detectUser()\n\t.build()\n\nexport default logger\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AbsenceForm.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AbsenceForm.vue?vue&type=script&lang=js\"","<!--\n - @copyright Copyright (c) 2023 Richard Steinmetz <richard@steinmetz.cloud>\n -\n - @author Richard Steinmetz <richard@steinmetz.cloud>\n -\n - @license AGPL-3.0-or-later\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU General Public License as published by\n - the Free Software Foundation, either version 3 of the License, or\n - (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU General Public License for more details.\n -\n - You should have received a copy of the GNU General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<form class=\"absence\" @submit.prevent=\"saveForm\">\n\t\t<div class=\"absence__dates\">\n\t\t\t<NcDateTimePickerNative id=\"absence-first-day\"\n\t\t\t\tv-model=\"firstDay\"\n\t\t\t\t:label=\"$t('dav', 'First day')\"\n\t\t\t\tclass=\"absence__dates__picker\"\n\t\t\t\t:required=\"true\" />\n\t\t\t<NcDateTimePickerNative id=\"absence-last-day\"\n\t\t\t\tv-model=\"lastDay\"\n\t\t\t\t:label=\"$t('dav', 'Last day (inclusive)')\"\n\t\t\t\tclass=\"absence__dates__picker\"\n\t\t\t\t:required=\"true\" />\n\t\t</div>\n\t\t<NcTextField :value.sync=\"status\" :label=\"$t('dav', 'Short absence status')\" :required=\"true\" />\n\t\t<NcTextArea :value.sync=\"message\" :label=\"$t('dav', 'Long absence Message')\" :required=\"true\" />\n\n\t\t<div class=\"absence__buttons\">\n\t\t\t<NcButton :disabled=\"loading || !valid\"\n\t\t\t\ttype=\"primary\"\n\t\t\t\tnative-type=\"submit\">\n\t\t\t\t{{ $t('dav', 'Save') }}\n\t\t\t</NcButton>\n\t\t\t<NcButton :disabled=\"loading || !valid\"\n\t\t\t\ttype=\"error\"\n\t\t\t\t@click=\"clearAbsence\">\n\t\t\t\t{{ $t('dav', 'Disable absence') }}\n\t\t\t</NcButton>\n\t\t</div>\n\t</form>\n</template>\n\n<script>\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton.js'\nimport NcTextField from '@nextcloud/vue/dist/Components/NcTextField.js'\nimport NcTextArea from '@nextcloud/vue/dist/Components/NcTextArea.js'\nimport NcDateTimePickerNative from '@nextcloud/vue/dist/Components/NcDateTimePickerNative.js'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport axios from '@nextcloud/axios'\nimport { formatDateAsYMD } from '../utils/date.js'\nimport { loadState } from '@nextcloud/initial-state'\nimport { showError, showSuccess } from '@nextcloud/dialogs'\n\nimport logger from '../service/logger.js'\n\nexport default {\n\tname: 'AbsenceForm',\n\tcomponents: {\n\t\tNcButton,\n\t\tNcTextField,\n\t\tNcTextArea,\n\t\tNcDateTimePickerNative,\n\t},\n\tdata() {\n\t\tconst { firstDay, lastDay, status, message } = loadState('dav', 'absence', {})\n\n\t\treturn {\n\t\t\tloading: false,\n\t\t\tstatus: status ?? '',\n\t\t\tmessage: message ?? '',\n\t\t\tfirstDay: firstDay ? new Date(firstDay) : new Date(),\n\t\t\tlastDay: lastDay ? new Date(lastDay) : null,\n\t\t}\n\t},\n\tcomputed: {\n\t\t/**\n\t\t * @return {boolean}\n\t\t */\n\t\tvalid() {\n\t\t\t// Translate the two date objects to midnight for an accurate comparison\n\t\t\tconst firstDay = new Date(this.firstDay?.getTime())\n\t\t\tconst lastDay = new Date(this.lastDay?.getTime())\n\t\t\tfirstDay?.setHours(0, 0, 0, 0)\n\t\t\tlastDay?.setHours(0, 0, 0, 0)\n\n\t\t\treturn !!this.firstDay\n\t\t\t\t&& !!this.lastDay\n\t\t\t\t&& !!this.status\n\t\t\t\t&& !!this.message\n\t\t\t\t&& lastDay >= firstDay\n\t\t},\n\t},\n\tmethods: {\n\t\tresetForm() {\n\t\t\tthis.status = ''\n\t\t\tthis.message = ''\n\t\t\tthis.firstDay = new Date()\n\t\t\tthis.lastDay = null\n\t\t},\n\t\tasync saveForm() {\n\t\t\tif (!this.valid) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.loading = true\n\t\t\ttry {\n\t\t\t\tawait axios.post(generateOcsUrl('/apps/dav/api/v1/outOfOffice/{userId}', { userId: getCurrentUser().uid }), {\n\t\t\t\t\tfirstDay: formatDateAsYMD(this.firstDay),\n\t\t\t\t\tlastDay: formatDateAsYMD(this.lastDay),\n\t\t\t\t\tstatus: this.status,\n\t\t\t\t\tmessage: this.message,\n\t\t\t\t})\n\t\t\t\tshowSuccess(this.$t('dav', 'Absence saved'))\n\t\t\t} catch (error) {\n\t\t\t\tshowError(this.$t('dav', 'Failed to save your absence settings'))\n\t\t\t\tlogger.error('Could not save absence', { error })\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\t\tasync clearAbsence() {\n\t\t\tthis.loading = true\n\t\t\ttry {\n\t\t\t\tawait axios.delete(generateOcsUrl('/apps/dav/api/v1/outOfOffice/{userId}', { userId: getCurrentUser().uid }))\n\t\t\t\tthis.resetForm()\n\t\t\t\tshowSuccess(this.$t('dav', 'Absence cleared'))\n\t\t\t} catch (error) {\n\t\t\t\tshowError(this.$t('dav', 'Failed to clear your absence settings'))\n\t\t\t\tlogger.error('Could not clear absence', { error })\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.absence {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 5px;\n\n\t&__dates {\n\t\tdisplay: flex;\n\t\tgap: 10px;\n\t\twidth: 100%;\n\n\t\t&__picker {\n\t\t\tflex: 1 auto;\n\n\t\t\t::v-deep .native-datetime-picker--input {\n\t\t\t\tmargin-bottom: 0;\n\t\t\t}\n\t\t}\n\t}\n\n\t&__buttons {\n\t\tdisplay: flex;\n\t\tgap: 5px;\n\t}\n}\n</style>\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AbsenceForm.vue?vue&type=style&index=0&id=716172ba&prod&lang=scss&scoped=true\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AbsenceForm.vue?vue&type=style&index=0&id=716172ba&prod&lang=scss&scoped=true\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AbsenceForm.vue?vue&type=template&id=716172ba&scoped=true\"\nimport script from \"./AbsenceForm.vue?vue&type=script&lang=js\"\nexport * from \"./AbsenceForm.vue?vue&type=script&lang=js\"\nimport style0 from \"./AbsenceForm.vue?vue&type=style&index=0&id=716172ba&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"716172ba\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('form',{staticClass:\"absence\",on:{\"submit\":function($event){$event.preventDefault();return _vm.saveForm.apply(null, arguments)}}},[_c('div',{staticClass:\"absence__dates\"},[_c('NcDateTimePickerNative',{staticClass:\"absence__dates__picker\",attrs:{\"id\":\"absence-first-day\",\"label\":_vm.$t('dav', 'First day'),\"required\":true},model:{value:(_vm.firstDay),callback:function ($$v) {_vm.firstDay=$$v},expression:\"firstDay\"}}),_vm._v(\" \"),_c('NcDateTimePickerNative',{staticClass:\"absence__dates__picker\",attrs:{\"id\":\"absence-last-day\",\"label\":_vm.$t('dav', 'Last day (inclusive)'),\"required\":true},model:{value:(_vm.lastDay),callback:function ($$v) {_vm.lastDay=$$v},expression:\"lastDay\"}})],1),_vm._v(\" \"),_c('NcTextField',{attrs:{\"value\":_vm.status,\"label\":_vm.$t('dav', 'Short absence status'),\"required\":true},on:{\"update:value\":function($event){_vm.status=$event}}}),_vm._v(\" \"),_c('NcTextArea',{attrs:{\"value\":_vm.message,\"label\":_vm.$t('dav', 'Long absence Message'),\"required\":true},on:{\"update:value\":function($event){_vm.message=$event}}}),_vm._v(\" \"),_c('div',{staticClass:\"absence__buttons\"},[_c('NcButton',{attrs:{\"disabled\":_vm.loading || !_vm.valid,\"type\":\"primary\",\"native-type\":\"submit\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.$t('dav', 'Save'))+\"\\n\\t\\t\")]),_vm._v(\" \"),_c('NcButton',{attrs:{\"disabled\":_vm.loading || !_vm.valid,\"type\":\"error\"},on:{\"click\":_vm.clearAbsence}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.$t('dav', 'Disable absence'))+\"\\n\\t\\t\")])],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[_c('div',{staticClass:\"time-zone\"},[_c('label',{staticClass:\"time-zone__heading\",attrs:{\"for\":`vs${_vm.timeZonePickerId}__combobox`}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.$t('dav', 'Time zone:'))+\"\\n\\t\\t\")]),_vm._v(\" \"),_c('span',{staticClass:\"time-zone-text\"},[_c('NcTimezonePicker',{attrs:{\"uid\":_vm.timeZonePickerId},model:{value:(_vm.timezone),callback:function ($$v) {_vm.timezone=$$v},expression:\"timezone\"}})],1)]),_vm._v(\" \"),_c('CalendarAvailability',{attrs:{\"slots\":_vm.slots,\"loading\":_vm.loading,\"l10n-to\":_vm.$t('dav', 'to'),\"l10n-delete-slot\":_vm.$t('dav', 'Delete slot'),\"l10n-empty-day\":_vm.$t('dav', 'No working hours set'),\"l10n-add-slot\":_vm.$t('dav', 'Add slot'),\"l10n-week-day-list-label\":_vm.$t('dav', 'Weekdays'),\"l10n-monday\":_vm.$t('dav', 'Monday'),\"l10n-tuesday\":_vm.$t('dav', 'Tuesday'),\"l10n-wednesday\":_vm.$t('dav', 'Wednesday'),\"l10n-thursday\":_vm.$t('dav', 'Thursday'),\"l10n-friday\":_vm.$t('dav', 'Friday'),\"l10n-saturday\":_vm.$t('dav', 'Saturday'),\"l10n-sunday\":_vm.$t('dav', 'Sunday'),\"l10n-start-picker-label\":(dayName) => _vm.$t('dav', 'Pick a start time for {dayName}', { dayName }),\"l10n-end-picker-label\":(dayName) => _vm.$t('dav', 'Pick a end time for {dayName}', { dayName })},on:{\"update:slots\":function($event){_vm.slots=$event}}}),_vm._v(\" \"),_c('NcCheckboxRadioSwitch',{attrs:{\"checked\":_vm.automated},on:{\"update:checked\":function($event){_vm.automated=$event}}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.$t('dav', 'Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications.'))+\"\\n\\t\")]),_vm._v(\" \"),_c('NcButton',{attrs:{\"disabled\":_vm.loading || _vm.saving,\"type\":\"primary\"},on:{\"click\":_vm.save}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.$t('dav', 'Save'))+\"\\n\\t\")])],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n import API from \"!../../../../style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../css-loader/dist/cjs.js!./index-UKC4AV1t.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../css-loader/dist/cjs.js!./index-UKC4AV1t.css\";\n export default content && content.locals ? content.locals : undefined;\n","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n * Portions Copyright (C) Philipp Kewisch */\n\n/**\n * Represents the BINARY value type, which contains extra methods for encoding and decoding.\n *\n * @memberof ICAL\n */\nclass Binary {\n /**\n * Creates a binary value from the given string.\n *\n * @param {String} aString The binary value string\n * @return {Binary} The binary value instance\n */\n static fromString(aString) {\n return new Binary(aString);\n }\n\n /**\n * Creates a new ICAL.Binary instance\n *\n * @param {String} aValue The binary data for this value\n */\n constructor(aValue) {\n this.value = aValue;\n }\n\n /**\n * The type name, to be used in the jCal object.\n * @default \"binary\"\n * @constant\n */\n icaltype = \"binary\";\n\n /**\n * Base64 decode the current value\n *\n * @return {String} The base64-decoded value\n */\n decodeValue() {\n return this._b64_decode(this.value);\n }\n\n /**\n * Encodes the passed parameter with base64 and sets the internal\n * value to the result.\n *\n * @param {String} aValue The raw binary value to encode\n */\n setEncodedValue(aValue) {\n this.value = this._b64_encode(aValue);\n }\n\n _b64_encode(data) {\n // http://kevin.vanzonneveld.net\n // + original by: Tyler Akins (http://rumkin.com)\n // + improved by: Bayron Guevara\n // + improved by: Thunder.m\n // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)\n // + bugfixed by: Pellentesque Malesuada\n // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)\n // + improved by: Rafał Kukawski (http://kukawski.pl)\n // * example 1: base64_encode('Kevin van Zonneveld');\n // * returns 1: 'S2V2aW4gdmFuIFpvbm5ldmVsZA=='\n // mozilla has this native\n // - but breaks in 2.0.0.12!\n //if (typeof this.window['atob'] == 'function') {\n // return atob(data);\n //}\n let b64 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\" +\n \"abcdefghijklmnopqrstuvwxyz0123456789+/=\";\n let o1, o2, o3, h1, h2, h3, h4, bits, i = 0,\n ac = 0,\n enc = \"\",\n tmp_arr = [];\n\n if (!data) {\n return data;\n }\n\n do { // pack three octets into four hexets\n o1 = data.charCodeAt(i++);\n o2 = data.charCodeAt(i++);\n o3 = data.charCodeAt(i++);\n\n bits = o1 << 16 | o2 << 8 | o3;\n\n h1 = bits >> 18 & 0x3f;\n h2 = bits >> 12 & 0x3f;\n h3 = bits >> 6 & 0x3f;\n h4 = bits & 0x3f;\n\n // use hexets to index into b64, and append result to encoded string\n tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);\n } while (i < data.length);\n\n enc = tmp_arr.join('');\n\n let r = data.length % 3;\n\n return (r ? enc.slice(0, r - 3) : enc) + '==='.slice(r || 3);\n\n }\n\n _b64_decode(data) {\n // http://kevin.vanzonneveld.net\n // + original by: Tyler Akins (http://rumkin.com)\n // + improved by: Thunder.m\n // + input by: Aman Gupta\n // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)\n // + bugfixed by: Onno Marsman\n // + bugfixed by: Pellentesque Malesuada\n // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)\n // + input by: Brett Zamir (http://brett-zamir.me)\n // + bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)\n // * example 1: base64_decode('S2V2aW4gdmFuIFpvbm5ldmVsZA==');\n // * returns 1: 'Kevin van Zonneveld'\n // mozilla has this native\n // - but breaks in 2.0.0.12!\n //if (typeof this.window['btoa'] == 'function') {\n // return btoa(data);\n //}\n let b64 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\" +\n \"abcdefghijklmnopqrstuvwxyz0123456789+/=\";\n let o1, o2, o3, h1, h2, h3, h4, bits, i = 0,\n ac = 0,\n dec = \"\",\n tmp_arr = [];\n\n if (!data) {\n return data;\n }\n\n data += '';\n\n do { // unpack four hexets into three octets using index points in b64\n h1 = b64.indexOf(data.charAt(i++));\n h2 = b64.indexOf(data.charAt(i++));\n h3 = b64.indexOf(data.charAt(i++));\n h4 = b64.indexOf(data.charAt(i++));\n\n bits = h1 << 18 | h2 << 12 | h3 << 6 | h4;\n\n o1 = bits >> 16 & 0xff;\n o2 = bits >> 8 & 0xff;\n o3 = bits & 0xff;\n\n if (h3 == 64) {\n tmp_arr[ac++] = String.fromCharCode(o1);\n } else if (h4 == 64) {\n tmp_arr[ac++] = String.fromCharCode(o1, o2);\n } else {\n tmp_arr[ac++] = String.fromCharCode(o1, o2, o3);\n }\n } while (i < data.length);\n\n dec = tmp_arr.join('');\n\n return dec;\n }\n\n /**\n * The string representation of this value\n * @return {String}\n */\n toString() {\n return this.value;\n }\n}\n\n/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n * Portions Copyright (C) Philipp Kewisch */\n\nconst DURATION_LETTERS = /([PDWHMTS]{1,1})/;\nconst DATA_PROPS_TO_COPY = [\"weeks\", \"days\", \"hours\", \"minutes\", \"seconds\", \"isNegative\"];\n\n/**\n * This class represents the \"duration\" value type, with various calculation\n * and manipulation methods.\n *\n * @memberof ICAL\n */\nclass Duration {\n /**\n * Returns a new ICAL.Duration instance from the passed seconds value.\n *\n * @param {Number} aSeconds The seconds to create the instance from\n * @return {Duration} The newly created duration instance\n */\n static fromSeconds(aSeconds) {\n return (new Duration()).fromSeconds(aSeconds);\n }\n\n /**\n * Checks if the given string is an iCalendar duration value.\n *\n * @param {String} value The raw ical value\n * @return {Boolean} True, if the given value is of the\n * duration ical type\n */\n static isValueString(string) {\n return (string[0] === 'P' || string[1] === 'P');\n }\n\n /**\n * Creates a new {@link ICAL.Duration} instance from the passed string.\n *\n * @param {String} aStr The string to parse\n * @return {Duration} The created duration instance\n */\n static fromString(aStr) {\n let pos = 0;\n let dict = Object.create(null);\n let chunks = 0;\n\n while ((pos = aStr.search(DURATION_LETTERS)) !== -1) {\n let type = aStr[pos];\n let numeric = aStr.slice(0, Math.max(0, pos));\n aStr = aStr.slice(pos + 1);\n\n chunks += parseDurationChunk(type, numeric, dict);\n }\n\n if (chunks < 2) {\n // There must be at least a chunk with \"P\" and some unit chunk\n throw new Error(\n 'invalid duration value: Not enough duration components in \"' + aStr + '\"'\n );\n }\n\n return new Duration(dict);\n }\n\n /**\n * Creates a new ICAL.Duration instance from the given data object.\n *\n * @param {Object} aData An object with members of the duration\n * @param {Number=} aData.weeks Duration in weeks\n * @param {Number=} aData.days Duration in days\n * @param {Number=} aData.hours Duration in hours\n * @param {Number=} aData.minutes Duration in minutes\n * @param {Number=} aData.seconds Duration in seconds\n * @param {Boolean=} aData.isNegative If true, the duration is negative\n * @return {Duration} The createad duration instance\n */\n static fromData(aData) {\n return new Duration(aData);\n }\n\n /**\n * Creates a new ICAL.Duration instance.\n *\n * @param {Object} data An object with members of the duration\n * @param {Number=} data.weeks Duration in weeks\n * @param {Number=} data.days Duration in days\n * @param {Number=} data.hours Duration in hours\n * @param {Number=} data.minutes Duration in minutes\n * @param {Number=} data.seconds Duration in seconds\n * @param {Boolean=} data.isNegative If true, the duration is negative\n */\n constructor(data) {\n this.wrappedJSObject = this;\n this.fromData(data);\n }\n\n /**\n * The weeks in this duration\n * @type {Number}\n * @default 0\n */\n weeks = 0;\n\n /**\n * The days in this duration\n * @type {Number}\n * @default 0\n */\n days = 0;\n\n /**\n * The days in this duration\n * @type {Number}\n * @default 0\n */\n hours = 0;\n\n /**\n * The minutes in this duration\n * @type {Number}\n * @default 0\n */\n minutes = 0;\n\n /**\n * The seconds in this duration\n * @type {Number}\n * @default 0\n */\n seconds = 0;\n\n /**\n * The seconds in this duration\n * @type {Boolean}\n * @default false\n */\n isNegative = false;\n\n /**\n * The class identifier.\n * @constant\n * @type {String}\n * @default \"icalduration\"\n */\n icalclass = \"icalduration\";\n\n /**\n * The type name, to be used in the jCal object.\n * @constant\n * @type {String}\n * @default \"duration\"\n */\n icaltype = \"duration\";\n\n /**\n * Returns a clone of the duration object.\n *\n * @return {Duration} The cloned object\n */\n clone() {\n return Duration.fromData(this);\n }\n\n /**\n * The duration value expressed as a number of seconds.\n *\n * @return {Number} The duration value in seconds\n */\n toSeconds() {\n let seconds = this.seconds + 60 * this.minutes + 3600 * this.hours +\n 86400 * this.days + 7 * 86400 * this.weeks;\n return (this.isNegative ? -seconds : seconds);\n }\n\n /**\n * Reads the passed seconds value into this duration object. Afterwards,\n * members like {@link ICAL.Duration#days days} and {@link ICAL.Duration#weeks weeks} will be set up\n * accordingly.\n *\n * @param {Number} aSeconds The duration value in seconds\n * @return {Duration} Returns this instance\n */\n fromSeconds(aSeconds) {\n let secs = Math.abs(aSeconds);\n\n this.isNegative = (aSeconds < 0);\n this.days = trunc(secs / 86400);\n\n // If we have a flat number of weeks, use them.\n if (this.days % 7 == 0) {\n this.weeks = this.days / 7;\n this.days = 0;\n } else {\n this.weeks = 0;\n }\n\n secs -= (this.days + 7 * this.weeks) * 86400;\n\n this.hours = trunc(secs / 3600);\n secs -= this.hours * 3600;\n\n this.minutes = trunc(secs / 60);\n secs -= this.minutes * 60;\n\n this.seconds = secs;\n return this;\n }\n\n /**\n * Sets up the current instance using members from the passed data object.\n *\n * @param {Object} aData An object with members of the duration\n * @param {Number=} aData.weeks Duration in weeks\n * @param {Number=} aData.days Duration in days\n * @param {Number=} aData.hours Duration in hours\n * @param {Number=} aData.minutes Duration in minutes\n * @param {Number=} aData.seconds Duration in seconds\n * @param {Boolean=} aData.isNegative If true, the duration is negative\n */\n fromData(aData) {\n for (let prop of DATA_PROPS_TO_COPY) {\n if (aData && prop in aData) {\n this[prop] = aData[prop];\n } else {\n this[prop] = 0;\n }\n }\n }\n\n /**\n * Resets the duration instance to the default values, i.e. PT0S\n */\n reset() {\n this.isNegative = false;\n this.weeks = 0;\n this.days = 0;\n this.hours = 0;\n this.minutes = 0;\n this.seconds = 0;\n }\n\n /**\n * Compares the duration instance with another one.\n *\n * @param {Duration} aOther The instance to compare with\n * @return {Number} -1, 0 or 1 for less/equal/greater\n */\n compare(aOther) {\n let thisSeconds = this.toSeconds();\n let otherSeconds = aOther.toSeconds();\n return (thisSeconds > otherSeconds) - (thisSeconds < otherSeconds);\n }\n\n /**\n * Normalizes the duration instance. For example, a duration with a value\n * of 61 seconds will be normalized to 1 minute and 1 second.\n */\n normalize() {\n this.fromSeconds(this.toSeconds());\n }\n\n /**\n * The string representation of this duration.\n * @return {String}\n */\n toString() {\n if (this.toSeconds() == 0) {\n return \"PT0S\";\n } else {\n let str = \"\";\n if (this.isNegative) str += \"-\";\n str += \"P\";\n if (this.weeks) str += this.weeks + \"W\";\n if (this.days) str += this.days + \"D\";\n\n if (this.hours || this.minutes || this.seconds) {\n str += \"T\";\n if (this.hours) str += this.hours + \"H\";\n if (this.minutes) str += this.minutes + \"M\";\n if (this.seconds) str += this.seconds + \"S\";\n }\n return str;\n }\n }\n\n /**\n * The iCalendar string representation of this duration.\n * @return {String}\n */\n toICALString() {\n return this.toString();\n }\n}\n\n/**\n * Internal helper function to handle a chunk of a duration.\n *\n * @private\n * @param {String} letter type of duration chunk\n * @param {String} number numeric value or -/+\n * @param {Object} dict target to assign values to\n */\nfunction parseDurationChunk(letter, number, object) {\n let type;\n switch (letter) {\n case 'P':\n if (number && number === '-') {\n object.isNegative = true;\n } else {\n object.isNegative = false;\n }\n // period\n break;\n case 'D':\n type = 'days';\n break;\n case 'W':\n type = 'weeks';\n break;\n case 'H':\n type = 'hours';\n break;\n case 'M':\n type = 'minutes';\n break;\n case 'S':\n type = 'seconds';\n break;\n default:\n // Not a valid chunk\n return 0;\n }\n\n if (type) {\n if (!number && number !== 0) {\n throw new Error(\n 'invalid duration value: Missing number before \"' + letter + '\"'\n );\n }\n let num = parseInt(number, 10);\n if (isStrictlyNaN(num)) {\n throw new Error(\n 'invalid duration value: Invalid number \"' + number + '\" before \"' + letter + '\"'\n );\n }\n object[type] = num;\n }\n\n return 1;\n}\n\n/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n * Portions Copyright (C) Philipp Kewisch */\n\n/**\n * This lets typescript resolve our custom types in the\n * generated d.ts files (jsdoc typedefs are converted to typescript types).\n * Ignore prevents the typedefs from being documented more than once.\n *\n * @ignore\n * @typedef {import(\"./types.js\").weekDay} weekDay\n * Imports the 'weekDay' type from the \"types.js\" module\n */\n\n/**\n * @classdesc\n * iCalendar Time representation (similar to JS Date object). Fully\n * independent of system (OS) timezone / time. Unlike JS Date, the month\n * January is 1, not zero.\n *\n * @example\n * var time = new ICAL.Time({\n * year: 2012,\n * month: 10,\n * day: 11\n * minute: 0,\n * second: 0,\n * isDate: false\n * });\n *\n *\n * @memberof ICAL\n*/\nclass Time {\n static _dowCache = {};\n static _wnCache = {};\n\n /**\n * Returns the days in the given month\n *\n * @param {Number} month The month to check\n * @param {Number} year The year to check\n * @return {Number} The number of days in the month\n */\n static daysInMonth(month, year) {\n let _daysInMonth = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n let days = 30;\n\n if (month < 1 || month > 12) return days;\n\n days = _daysInMonth[month];\n\n if (month == 2) {\n days += Time.isLeapYear(year);\n }\n\n return days;\n }\n\n /**\n * Checks if the year is a leap year\n *\n * @param {Number} year The year to check\n * @return {Boolean} True, if the year is a leap year\n */\n static isLeapYear(year) {\n if (year <= 1752) {\n return ((year % 4) == 0);\n } else {\n return (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0));\n }\n }\n\n /**\n * Create a new ICAL.Time from the day of year and year. The date is returned\n * in floating timezone.\n *\n * @param {Number} aDayOfYear The day of year\n * @param {Number} aYear The year to create the instance in\n * @return {Time} The created instance with the calculated date\n */\n static fromDayOfYear(aDayOfYear, aYear) {\n let year = aYear;\n let doy = aDayOfYear;\n let tt = new Time();\n tt.auto_normalize = false;\n let is_leap = (Time.isLeapYear(year) ? 1 : 0);\n\n if (doy < 1) {\n year--;\n is_leap = (Time.isLeapYear(year) ? 1 : 0);\n doy += Time.daysInYearPassedMonth[is_leap][12];\n return Time.fromDayOfYear(doy, year);\n } else if (doy > Time.daysInYearPassedMonth[is_leap][12]) {\n is_leap = (Time.isLeapYear(year) ? 1 : 0);\n doy -= Time.daysInYearPassedMonth[is_leap][12];\n year++;\n return Time.fromDayOfYear(doy, year);\n }\n\n tt.year = year;\n tt.isDate = true;\n\n for (let month = 11; month >= 0; month--) {\n if (doy > Time.daysInYearPassedMonth[is_leap][month]) {\n tt.month = month + 1;\n tt.day = doy - Time.daysInYearPassedMonth[is_leap][month];\n break;\n }\n }\n\n tt.auto_normalize = true;\n return tt;\n }\n\n /**\n * Returns a new ICAL.Time instance from a date string, e.g 2015-01-02.\n *\n * @deprecated Use {@link ICAL.Time.fromDateString} instead\n * @param {String} str The string to create from\n * @return {Time} The date/time instance\n */\n static fromStringv2(str) {\n return new Time({\n year: parseInt(str.slice(0, 4), 10),\n month: parseInt(str.slice(5, 7), 10),\n day: parseInt(str.slice(8, 10), 10),\n isDate: true\n });\n }\n\n /**\n * Returns a new ICAL.Time instance from a date string, e.g 2015-01-02.\n *\n * @param {String} aValue The string to create from\n * @return {Time} The date/time instance\n */\n static fromDateString(aValue) {\n // Dates should have no timezone.\n // Google likes to sometimes specify Z on dates\n // we specifically ignore that to avoid issues.\n\n // YYYY-MM-DD\n // 2012-10-10\n return new Time({\n year: strictParseInt(aValue.slice(0, 4)),\n month: strictParseInt(aValue.slice(5, 7)),\n day: strictParseInt(aValue.slice(8, 10)),\n isDate: true\n });\n }\n\n /**\n * Returns a new ICAL.Time instance from a date-time string, e.g\n * 2015-01-02T03:04:05. If a property is specified, the timezone is set up\n * from the property's TZID parameter.\n *\n * @param {String} aValue The string to create from\n * @param {Property=} prop The property the date belongs to\n * @return {Time} The date/time instance\n */\n static fromDateTimeString(aValue, prop) {\n if (aValue.length < 19) {\n throw new Error(\n 'invalid date-time value: \"' + aValue + '\"'\n );\n }\n\n let zone;\n let zoneId;\n\n if (aValue[19] && aValue[19] === 'Z') {\n zone = Timezone.utcTimezone;\n } else if (prop) {\n zoneId = prop.getParameter('tzid');\n\n if (prop.parent) {\n if (prop.parent.name === 'standard' || prop.parent.name === 'daylight') {\n // Per RFC 5545 3.8.2.4 and 3.8.2.2, start/end date-times within\n // these components MUST be specified in local time.\n zone = Timezone.localTimezone;\n } else if (zoneId) {\n // If the desired time zone is defined within the component tree,\n // fetch its definition and prefer that.\n zone = prop.parent.getTimeZoneByID(zoneId);\n }\n }\n }\n\n const timeData = {\n year: strictParseInt(aValue.slice(0, 4)),\n month: strictParseInt(aValue.slice(5, 7)),\n day: strictParseInt(aValue.slice(8, 10)),\n hour: strictParseInt(aValue.slice(11, 13)),\n minute: strictParseInt(aValue.slice(14, 16)),\n second: strictParseInt(aValue.slice(17, 19)),\n };\n\n // Although RFC 5545 requires that all TZIDs used within a file have a\n // corresponding time zone definition, we may not be parsing the full file\n // or we may be dealing with a non-compliant file; in either case, we can\n // check our own time zone service for the TZID in a last-ditch effort.\n if (zoneId && !zone) {\n timeData.timezone = zoneId;\n }\n\n // 2012-10-10T10:10:10(Z)?\n return new Time(timeData, zone);\n }\n\n /**\n * Returns a new ICAL.Time instance from a date or date-time string,\n *\n * @param {String} aValue The string to create from\n * @param {Property=} prop The property the date belongs to\n * @return {Time} The date/time instance\n */\n static fromString(aValue, aProperty) {\n if (aValue.length > 10) {\n return Time.fromDateTimeString(aValue, aProperty);\n } else {\n return Time.fromDateString(aValue);\n }\n }\n\n /**\n * Creates a new ICAL.Time instance from the given Javascript Date.\n *\n * @param {?Date} aDate The Javascript Date to read, or null to reset\n * @param {Boolean} [useUTC=false] If true, the UTC values of the date will be used\n */\n static fromJSDate(aDate, useUTC) {\n let tt = new Time();\n return tt.fromJSDate(aDate, useUTC);\n }\n\n /**\n * Creates a new ICAL.Time instance from the the passed data object.\n *\n * @param {Object} aData Time initialization\n * @param {Number=} aData.year The year for this date\n * @param {Number=} aData.month The month for this date\n * @param {Number=} aData.day The day for this date\n * @param {Number=} aData.hour The hour for this date\n * @param {Number=} aData.minute The minute for this date\n * @param {Number=} aData.second The second for this date\n * @param {Boolean=} aData.isDate If true, the instance represents a date\n * (as opposed to a date-time)\n * @param {Timezone=} aZone Timezone this position occurs in\n */\n static fromData = function fromData(aData, aZone) {\n let t = new Time();\n return t.fromData(aData, aZone);\n };\n\n /**\n * Creates a new ICAL.Time instance from the current moment.\n * The instance is “floating” - has no timezone relation.\n * To create an instance considering the time zone, call\n * ICAL.Time.fromJSDate(new Date(), true)\n * @return {Time}\n */\n static now() {\n return Time.fromJSDate(new Date(), false);\n }\n\n /**\n * Returns the date on which ISO week number 1 starts.\n *\n * @see Time#weekNumber\n * @param {Number} aYear The year to search in\n * @param {weekDay=} aWeekStart The week start weekday, used for calculation.\n * @return {Time} The date on which week number 1 starts\n */\n static weekOneStarts(aYear, aWeekStart) {\n let t = Time.fromData({\n year: aYear,\n month: 1,\n day: 1,\n isDate: true\n });\n\n let dow = t.dayOfWeek();\n let wkst = aWeekStart || Time.DEFAULT_WEEK_START;\n if (dow > Time.THURSDAY) {\n t.day += 7;\n }\n if (wkst > Time.THURSDAY) {\n t.day -= 7;\n }\n\n t.day -= dow - wkst;\n\n return t;\n }\n\n /**\n * Get the dominical letter for the given year. Letters range from A - G for\n * common years, and AG to GF for leap years.\n *\n * @param {Number} yr The year to retrieve the letter for\n * @return {String} The dominical letter.\n */\n static getDominicalLetter(yr) {\n let LTRS = \"GFEDCBA\";\n let dom = (yr + (yr / 4 | 0) + (yr / 400 | 0) - (yr / 100 | 0) - 1) % 7;\n let isLeap = Time.isLeapYear(yr);\n if (isLeap) {\n return LTRS[(dom + 6) % 7] + LTRS[dom];\n } else {\n return LTRS[dom];\n }\n }\n\n static #epochTime = null;\n /**\n * January 1st, 1970 as an ICAL.Time.\n * @type {Time}\n * @constant\n * @instance\n */\n static get epochTime() {\n if (!this.#epochTime) {\n this.#epochTime = Time.fromData({\n year: 1970,\n month: 1,\n day: 1,\n hour: 0,\n minute: 0,\n second: 0,\n isDate: false,\n timezone: \"Z\"\n });\n }\n return this.#epochTime;\n }\n\n static _cmp_attr(a, b, attr) {\n if (a[attr] > b[attr]) return 1;\n if (a[attr] < b[attr]) return -1;\n return 0;\n }\n\n /**\n * The days that have passed in the year after a given month. The array has\n * two members, one being an array of passed days for non-leap years, the\n * other analog for leap years.\n * @example\n * var isLeapYear = ICAL.Time.isLeapYear(year);\n * var passedDays = ICAL.Time.daysInYearPassedMonth[isLeapYear][month];\n * @type {Array.<Array.<Number>>}\n */\n static daysInYearPassedMonth = [\n [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365],\n [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366]\n ];\n\n static SUNDAY = 1;\n static MONDAY = 2;\n static TUESDAY = 3;\n static WEDNESDAY = 4;\n static THURSDAY = 5;\n static FRIDAY = 6;\n static SATURDAY = 7;\n\n /**\n * The default weekday for the WKST part.\n * @constant\n * @default ICAL.Time.MONDAY\n */\n static DEFAULT_WEEK_START = 2; // MONDAY\n\n /**\n * Creates a new ICAL.Time instance.\n *\n * @param {Object} data Time initialization\n * @param {Number=} data.year The year for this date\n * @param {Number=} data.month The month for this date\n * @param {Number=} data.day The day for this date\n * @param {Number=} data.hour The hour for this date\n * @param {Number=} data.minute The minute for this date\n * @param {Number=} data.second The second for this date\n * @param {Boolean=} data.isDate If true, the instance represents a date (as\n * opposed to a date-time)\n * @param {Timezone} zone timezone this position occurs in\n */\n constructor(data, zone) {\n this.wrappedJSObject = this;\n let time = this._time = Object.create(null);\n\n /* time defaults */\n time.year = 0;\n time.month = 1;\n time.day = 1;\n time.hour = 0;\n time.minute = 0;\n time.second = 0;\n time.isDate = false;\n\n this.fromData(data, zone);\n }\n\n /**\n * The class identifier.\n * @constant\n * @type {String}\n * @default \"icaltime\"\n */\n icalclass = \"icaltime\";\n _cachedUnixTime = null;\n\n /**\n * The type name, to be used in the jCal object. This value may change and\n * is strictly defined by the {@link ICAL.Time#isDate isDate} member.\n * @type {String}\n * @default \"date-time\"\n */\n get icaltype() {\n return this.isDate ? 'date' : 'date-time';\n }\n\n /**\n * The timezone for this time.\n * @type {Timezone}\n */\n zone = null;\n\n /**\n * Internal uses to indicate that a change has been made and the next read\n * operation must attempt to normalize the value (for example changing the\n * day to 33).\n *\n * @type {Boolean}\n * @private\n */\n _pendingNormalization = false;\n\n /**\n * Returns a clone of the time object.\n *\n * @return {Time} The cloned object\n */\n clone() {\n return new Time(this._time, this.zone);\n }\n\n /**\n * Reset the time instance to epoch time\n */\n reset() {\n this.fromData(Time.epochTime);\n this.zone = Timezone.utcTimezone;\n }\n\n /**\n * Reset the time instance to the given date/time values.\n *\n * @param {Number} year The year to set\n * @param {Number} month The month to set\n * @param {Number} day The day to set\n * @param {Number} hour The hour to set\n * @param {Number} minute The minute to set\n * @param {Number} second The second to set\n * @param {Timezone} timezone The timezone to set\n */\n resetTo(year, month, day, hour, minute, second, timezone) {\n this.fromData({\n year: year,\n month: month,\n day: day,\n hour: hour,\n minute: minute,\n second: second,\n zone: timezone\n });\n }\n\n /**\n * Set up the current instance from the Javascript date value.\n *\n * @param {?Date} aDate The Javascript Date to read, or null to reset\n * @param {Boolean} [useUTC=false] If true, the UTC values of the date will be used\n */\n fromJSDate(aDate, useUTC) {\n if (!aDate) {\n this.reset();\n } else {\n if (useUTC) {\n this.zone = Timezone.utcTimezone;\n this.year = aDate.getUTCFullYear();\n this.month = aDate.getUTCMonth() + 1;\n this.day = aDate.getUTCDate();\n this.hour = aDate.getUTCHours();\n this.minute = aDate.getUTCMinutes();\n this.second = aDate.getUTCSeconds();\n } else {\n this.zone = Timezone.localTimezone;\n this.year = aDate.getFullYear();\n this.month = aDate.getMonth() + 1;\n this.day = aDate.getDate();\n this.hour = aDate.getHours();\n this.minute = aDate.getMinutes();\n this.second = aDate.getSeconds();\n }\n }\n this._cachedUnixTime = null;\n return this;\n }\n\n /**\n * Sets up the current instance using members from the passed data object.\n *\n * @param {Object} aData Time initialization\n * @param {Number=} aData.year The year for this date\n * @param {Number=} aData.month The month for this date\n * @param {Number=} aData.day The day for this date\n * @param {Number=} aData.hour The hour for this date\n * @param {Number=} aData.minute The minute for this date\n * @param {Number=} aData.second The second for this date\n * @param {Boolean=} aData.isDate If true, the instance represents a date\n * (as opposed to a date-time)\n * @param {Timezone=} aZone Timezone this position occurs in\n */\n fromData(aData, aZone) {\n if (aData) {\n for (let [key, value] of Object.entries(aData)) {\n // ical type cannot be set\n if (key === 'icaltype') continue;\n this[key] = value;\n }\n }\n\n if (aZone) {\n this.zone = aZone;\n }\n\n if (aData && !(\"isDate\" in aData)) {\n this.isDate = !(\"hour\" in aData);\n } else if (aData && (\"isDate\" in aData)) {\n this.isDate = aData.isDate;\n }\n\n if (aData && \"timezone\" in aData) {\n let zone = TimezoneService.get(\n aData.timezone\n );\n\n this.zone = zone || Timezone.localTimezone;\n }\n\n if (aData && \"zone\" in aData) {\n this.zone = aData.zone;\n }\n\n if (!this.zone) {\n this.zone = Timezone.localTimezone;\n }\n\n this._cachedUnixTime = null;\n return this;\n }\n\n /**\n * Calculate the day of week.\n * @param {weekDay=} aWeekStart\n * The week start weekday, defaults to SUNDAY\n * @return {weekDay}\n */\n dayOfWeek(aWeekStart) {\n let firstDow = aWeekStart || Time.SUNDAY;\n let dowCacheKey = (this.year << 12) + (this.month << 8) + (this.day << 3) + firstDow;\n if (dowCacheKey in Time._dowCache) {\n return Time._dowCache[dowCacheKey];\n }\n\n // Using Zeller's algorithm\n let q = this.day;\n let m = this.month + (this.month < 3 ? 12 : 0);\n let Y = this.year - (this.month < 3 ? 1 : 0);\n\n let h = (q + Y + trunc(((m + 1) * 26) / 10) + trunc(Y / 4));\n { // eslint-disable-line no-constant-condition\n h += trunc(Y / 100) * 6 + trunc(Y / 400);\n }\n\n // Normalize to 1 = wkst\n h = ((h + 7 - firstDow) % 7) + 1;\n Time._dowCache[dowCacheKey] = h;\n return h;\n }\n\n /**\n * Calculate the day of year.\n * @return {Number}\n */\n dayOfYear() {\n let is_leap = (Time.isLeapYear(this.year) ? 1 : 0);\n let diypm = Time.daysInYearPassedMonth;\n return diypm[is_leap][this.month - 1] + this.day;\n }\n\n /**\n * Returns a copy of the current date/time, rewound to the start of the\n * week. The resulting ICAL.Time instance is of icaltype date, even if this\n * is a date-time.\n *\n * @param {weekDay=} aWeekStart\n * The week start weekday, defaults to SUNDAY\n * @return {Time} The start of the week (cloned)\n */\n startOfWeek(aWeekStart) {\n let firstDow = aWeekStart || Time.SUNDAY;\n let result = this.clone();\n result.day -= ((this.dayOfWeek() + 7 - firstDow) % 7);\n result.isDate = true;\n result.hour = 0;\n result.minute = 0;\n result.second = 0;\n return result;\n }\n\n /**\n * Returns a copy of the current date/time, shifted to the end of the week.\n * The resulting ICAL.Time instance is of icaltype date, even if this is a\n * date-time.\n *\n * @param {weekDay=} aWeekStart\n * The week start weekday, defaults to SUNDAY\n * @return {Time} The end of the week (cloned)\n */\n endOfWeek(aWeekStart) {\n let firstDow = aWeekStart || Time.SUNDAY;\n let result = this.clone();\n result.day += (7 - this.dayOfWeek() + firstDow - Time.SUNDAY) % 7;\n result.isDate = true;\n result.hour = 0;\n result.minute = 0;\n result.second = 0;\n return result;\n }\n\n /**\n * Returns a copy of the current date/time, rewound to the start of the\n * month. The resulting ICAL.Time instance is of icaltype date, even if\n * this is a date-time.\n *\n * @return {Time} The start of the month (cloned)\n */\n startOfMonth() {\n let result = this.clone();\n result.day = 1;\n result.isDate = true;\n result.hour = 0;\n result.minute = 0;\n result.second = 0;\n return result;\n }\n\n /**\n * Returns a copy of the current date/time, shifted to the end of the\n * month. The resulting ICAL.Time instance is of icaltype date, even if\n * this is a date-time.\n *\n * @return {Time} The end of the month (cloned)\n */\n endOfMonth() {\n let result = this.clone();\n result.day = Time.daysInMonth(result.month, result.year);\n result.isDate = true;\n result.hour = 0;\n result.minute = 0;\n result.second = 0;\n return result;\n }\n\n /**\n * Returns a copy of the current date/time, rewound to the start of the\n * year. The resulting ICAL.Time instance is of icaltype date, even if\n * this is a date-time.\n *\n * @return {Time} The start of the year (cloned)\n */\n startOfYear() {\n let result = this.clone();\n result.day = 1;\n result.month = 1;\n result.isDate = true;\n result.hour = 0;\n result.minute = 0;\n result.second = 0;\n return result;\n }\n\n /**\n * Returns a copy of the current date/time, shifted to the end of the\n * year. The resulting ICAL.Time instance is of icaltype date, even if\n * this is a date-time.\n *\n * @return {Time} The end of the year (cloned)\n */\n endOfYear() {\n let result = this.clone();\n result.day = 31;\n result.month = 12;\n result.isDate = true;\n result.hour = 0;\n result.minute = 0;\n result.second = 0;\n return result;\n }\n\n /**\n * First calculates the start of the week, then returns the day of year for\n * this date. If the day falls into the previous year, the day is zero or negative.\n *\n * @param {weekDay=} aFirstDayOfWeek\n * The week start weekday, defaults to SUNDAY\n * @return {Number} The calculated day of year\n */\n startDoyWeek(aFirstDayOfWeek) {\n let firstDow = aFirstDayOfWeek || Time.SUNDAY;\n let delta = this.dayOfWeek() - firstDow;\n if (delta < 0) delta += 7;\n return this.dayOfYear() - delta;\n }\n\n /**\n * Get the dominical letter for the current year. Letters range from A - G\n * for common years, and AG to GF for leap years.\n *\n * @param {Number} yr The year to retrieve the letter for\n * @return {String} The dominical letter.\n */\n getDominicalLetter() {\n return Time.getDominicalLetter(this.year);\n }\n\n /**\n * Finds the nthWeekDay relative to the current month (not day). The\n * returned value is a day relative the month that this month belongs to so\n * 1 would indicate the first of the month and 40 would indicate a day in\n * the following month.\n *\n * @param {Number} aDayOfWeek Day of the week see the day name constants\n * @param {Number} aPos Nth occurrence of a given week day values\n * of 1 and 0 both indicate the first weekday of that type. aPos may\n * be either positive or negative\n *\n * @return {Number} numeric value indicating a day relative\n * to the current month of this time object\n */\n nthWeekDay(aDayOfWeek, aPos) {\n let daysInMonth = Time.daysInMonth(this.month, this.year);\n let weekday;\n let pos = aPos;\n\n let start = 0;\n\n let otherDay = this.clone();\n\n if (pos >= 0) {\n otherDay.day = 1;\n\n // because 0 means no position has been given\n // 1 and 0 indicate the same day.\n if (pos != 0) {\n // remove the extra numeric value\n pos--;\n }\n\n // set current start offset to current day.\n start = otherDay.day;\n\n // find the current day of week\n let startDow = otherDay.dayOfWeek();\n\n // calculate the difference between current\n // day of the week and desired day of the week\n let offset = aDayOfWeek - startDow;\n\n\n // if the offset goes into the past\n // week we add 7 so it goes into the next\n // week. We only want to go forward in time here.\n if (offset < 0)\n // this is really important otherwise we would\n // end up with dates from in the past.\n offset += 7;\n\n // add offset to start so start is the same\n // day of the week as the desired day of week.\n start += offset;\n\n // because we are going to add (and multiply)\n // the numeric value of the day we subtract it\n // from the start position so not to add it twice.\n start -= aDayOfWeek;\n\n // set week day\n weekday = aDayOfWeek;\n } else {\n\n // then we set it to the last day in the current month\n otherDay.day = daysInMonth;\n\n // find the ends weekday\n let endDow = otherDay.dayOfWeek();\n\n pos++;\n\n weekday = (endDow - aDayOfWeek);\n\n if (weekday < 0) {\n weekday += 7;\n }\n\n weekday = daysInMonth - weekday;\n }\n\n weekday += pos * 7;\n\n return start + weekday;\n }\n\n /**\n * Checks if current time is the nth weekday, relative to the current\n * month. Will always return false when rule resolves outside of current\n * month.\n *\n * @param {weekDay} aDayOfWeek Day of week to check\n * @param {Number} aPos Relative position\n * @return {Boolean} True, if it is the nth weekday\n */\n isNthWeekDay(aDayOfWeek, aPos) {\n let dow = this.dayOfWeek();\n\n if (aPos === 0 && dow === aDayOfWeek) {\n return true;\n }\n\n // get pos\n let day = this.nthWeekDay(aDayOfWeek, aPos);\n\n if (day === this.day) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Calculates the ISO 8601 week number. The first week of a year is the\n * week that contains the first Thursday. The year can have 53 weeks, if\n * January 1st is a Friday.\n *\n * Note there are regions where the first week of the year is the one that\n * starts on January 1st, which may offset the week number. Also, if a\n * different week start is specified, this will also affect the week\n * number.\n *\n * @see Time.weekOneStarts\n * @param {weekDay} aWeekStart The weekday the week starts with\n * @return {Number} The ISO week number\n */\n weekNumber(aWeekStart) {\n let wnCacheKey = (this.year << 12) + (this.month << 8) + (this.day << 3) + aWeekStart;\n if (wnCacheKey in Time._wnCache) {\n return Time._wnCache[wnCacheKey];\n }\n // This function courtesty of Julian Bucknall, published under the MIT license\n // http://www.boyet.com/articles/publishedarticles/calculatingtheisoweeknumb.html\n // plus some fixes to be able to use different week starts.\n let week1;\n\n let dt = this.clone();\n dt.isDate = true;\n let isoyear = this.year;\n\n if (dt.month == 12 && dt.day > 25) {\n week1 = Time.weekOneStarts(isoyear + 1, aWeekStart);\n if (dt.compare(week1) < 0) {\n week1 = Time.weekOneStarts(isoyear, aWeekStart);\n } else {\n isoyear++;\n }\n } else {\n week1 = Time.weekOneStarts(isoyear, aWeekStart);\n if (dt.compare(week1) < 0) {\n week1 = Time.weekOneStarts(--isoyear, aWeekStart);\n }\n }\n\n let daysBetween = (dt.subtractDate(week1).toSeconds() / 86400);\n let answer = trunc(daysBetween / 7) + 1;\n Time._wnCache[wnCacheKey] = answer;\n return answer;\n }\n\n /**\n * Adds the duration to the current time. The instance is modified in\n * place.\n *\n * @param {Duration} aDuration The duration to add\n */\n addDuration(aDuration) {\n let mult = (aDuration.isNegative ? -1 : 1);\n\n // because of the duration optimizations it is much\n // more efficient to grab all the values up front\n // then set them directly (which will avoid a normalization call).\n // So we don't actually normalize until we need it.\n let second = this.second;\n let minute = this.minute;\n let hour = this.hour;\n let day = this.day;\n\n second += mult * aDuration.seconds;\n minute += mult * aDuration.minutes;\n hour += mult * aDuration.hours;\n day += mult * aDuration.days;\n day += mult * 7 * aDuration.weeks;\n\n this.second = second;\n this.minute = minute;\n this.hour = hour;\n this.day = day;\n\n this._cachedUnixTime = null;\n }\n\n /**\n * Subtract the date details (_excluding_ timezone). Useful for finding\n * the relative difference between two time objects excluding their\n * timezone differences.\n *\n * @param {Time} aDate The date to subtract\n * @return {Duration} The difference as a duration\n */\n subtractDate(aDate) {\n let unixTime = this.toUnixTime() + this.utcOffset();\n let other = aDate.toUnixTime() + aDate.utcOffset();\n return Duration.fromSeconds(unixTime - other);\n }\n\n /**\n * Subtract the date details, taking timezones into account.\n *\n * @param {Time} aDate The date to subtract\n * @return {Duration} The difference in duration\n */\n subtractDateTz(aDate) {\n let unixTime = this.toUnixTime();\n let other = aDate.toUnixTime();\n return Duration.fromSeconds(unixTime - other);\n }\n\n /**\n * Compares the ICAL.Time instance with another one.\n *\n * @param {Duration} aOther The instance to compare with\n * @return {Number} -1, 0 or 1 for less/equal/greater\n */\n compare(other) {\n let a = this.toUnixTime();\n let b = other.toUnixTime();\n\n if (a > b) return 1;\n if (b > a) return -1;\n return 0;\n }\n\n /**\n * Compares only the date part of this instance with another one.\n *\n * @param {Duration} other The instance to compare with\n * @param {Timezone} tz The timezone to compare in\n * @return {Number} -1, 0 or 1 for less/equal/greater\n */\n compareDateOnlyTz(other, tz) {\n let a = this.convertToZone(tz);\n let b = other.convertToZone(tz);\n let rc = 0;\n\n if ((rc = Time._cmp_attr(a, b, \"year\")) != 0) return rc;\n if ((rc = Time._cmp_attr(a, b, \"month\")) != 0) return rc;\n if ((rc = Time._cmp_attr(a, b, \"day\")) != 0) return rc;\n\n return rc;\n }\n\n /**\n * Convert the instance into another timezone. The returned ICAL.Time\n * instance is always a copy.\n *\n * @param {Timezone} zone The zone to convert to\n * @return {Time} The copy, converted to the zone\n */\n convertToZone(zone) {\n let copy = this.clone();\n let zone_equals = (this.zone.tzid == zone.tzid);\n\n if (!this.isDate && !zone_equals) {\n Timezone.convert_time(copy, this.zone, zone);\n }\n\n copy.zone = zone;\n return copy;\n }\n\n /**\n * Calculates the UTC offset of the current date/time in the timezone it is\n * in.\n *\n * @return {Number} UTC offset in seconds\n */\n utcOffset() {\n if (this.zone == Timezone.localTimezone ||\n this.zone == Timezone.utcTimezone) {\n return 0;\n } else {\n return this.zone.utcOffset(this);\n }\n }\n\n /**\n * Returns an RFC 5545 compliant ical representation of this object.\n *\n * @return {String} ical date/date-time\n */\n toICALString() {\n let string = this.toString();\n\n if (string.length > 10) {\n return design$1.icalendar.value['date-time'].toICAL(string);\n } else {\n return design$1.icalendar.value.date.toICAL(string);\n }\n }\n\n /**\n * The string representation of this date/time, in jCal form\n * (including : and - separators).\n * @return {String}\n */\n toString() {\n let result = this.year + '-' +\n pad2(this.month) + '-' +\n pad2(this.day);\n\n if (!this.isDate) {\n result += 'T' + pad2(this.hour) + ':' +\n pad2(this.minute) + ':' +\n pad2(this.second);\n\n if (this.zone === Timezone.utcTimezone) {\n result += 'Z';\n }\n }\n\n return result;\n }\n\n /**\n * Converts the current instance to a Javascript date\n * @return {Date}\n */\n toJSDate() {\n if (this.zone == Timezone.localTimezone) {\n if (this.isDate) {\n return new Date(this.year, this.month - 1, this.day);\n } else {\n return new Date(this.year, this.month - 1, this.day,\n this.hour, this.minute, this.second, 0);\n }\n } else {\n return new Date(this.toUnixTime() * 1000);\n }\n }\n\n _normalize() {\n if (this._time.isDate) {\n this._time.hour = 0;\n this._time.minute = 0;\n this._time.second = 0;\n }\n this.adjust(0, 0, 0, 0);\n\n return this;\n }\n\n /**\n * Adjust the date/time by the given offset\n *\n * @param {Number} aExtraDays The extra amount of days\n * @param {Number} aExtraHours The extra amount of hours\n * @param {Number} aExtraMinutes The extra amount of minutes\n * @param {Number} aExtraSeconds The extra amount of seconds\n * @param {Number=} aTime The time to adjust, defaults to the\n * current instance.\n */\n adjust(aExtraDays, aExtraHours, aExtraMinutes, aExtraSeconds, aTime) {\n\n let minutesOverflow, hoursOverflow,\n daysOverflow = 0, yearsOverflow = 0;\n\n let second, minute, hour, day;\n let daysInMonth;\n\n let time = aTime || this._time;\n\n if (!time.isDate) {\n second = time.second + aExtraSeconds;\n time.second = second % 60;\n minutesOverflow = trunc(second / 60);\n if (time.second < 0) {\n time.second += 60;\n minutesOverflow--;\n }\n\n minute = time.minute + aExtraMinutes + minutesOverflow;\n time.minute = minute % 60;\n hoursOverflow = trunc(minute / 60);\n if (time.minute < 0) {\n time.minute += 60;\n hoursOverflow--;\n }\n\n hour = time.hour + aExtraHours + hoursOverflow;\n\n time.hour = hour % 24;\n daysOverflow = trunc(hour / 24);\n if (time.hour < 0) {\n time.hour += 24;\n daysOverflow--;\n }\n }\n\n\n // Adjust month and year first, because we need to know what month the day\n // is in before adjusting it.\n if (time.month > 12) {\n yearsOverflow = trunc((time.month - 1) / 12);\n } else if (time.month < 1) {\n yearsOverflow = trunc(time.month / 12) - 1;\n }\n\n time.year += yearsOverflow;\n time.month -= 12 * yearsOverflow;\n\n // Now take care of the days (and adjust month if needed)\n day = time.day + aExtraDays + daysOverflow;\n\n if (day > 0) {\n for (;;) {\n daysInMonth = Time.daysInMonth(time.month, time.year);\n if (day <= daysInMonth) {\n break;\n }\n\n time.month++;\n if (time.month > 12) {\n time.year++;\n time.month = 1;\n }\n\n day -= daysInMonth;\n }\n } else {\n while (day <= 0) {\n if (time.month == 1) {\n time.year--;\n time.month = 12;\n } else {\n time.month--;\n }\n\n day += Time.daysInMonth(time.month, time.year);\n }\n }\n\n time.day = day;\n\n this._cachedUnixTime = null;\n return this;\n }\n\n /**\n * Sets up the current instance from unix time, the number of seconds since\n * January 1st, 1970.\n *\n * @param {Number} seconds The seconds to set up with\n */\n fromUnixTime(seconds) {\n this.zone = Timezone.utcTimezone;\n // We could use `fromJSDate` here, but this is about twice as fast.\n // We could also clone `epochTime` and use `adjust` for a more\n // ical.js-centric approach, but this is about 100 times as fast.\n let date = new Date(seconds * 1000);\n this.year = date.getUTCFullYear();\n this.month = date.getUTCMonth() + 1;\n this.day = date.getUTCDate();\n if (this._time.isDate) {\n this.hour = 0;\n this.minute = 0;\n this.second = 0;\n } else {\n this.hour = date.getUTCHours();\n this.minute = date.getUTCMinutes();\n this.second = date.getUTCSeconds();\n }\n\n this._cachedUnixTime = null;\n }\n\n /**\n * Converts the current instance to seconds since January 1st 1970.\n *\n * @return {Number} Seconds since 1970\n */\n toUnixTime() {\n if (this._cachedUnixTime !== null) {\n return this._cachedUnixTime;\n }\n let offset = this.utcOffset();\n\n // we use the offset trick to ensure\n // that we are getting the actual UTC time\n let ms = Date.UTC(\n this.year,\n this.month - 1,\n this.day,\n this.hour,\n this.minute,\n this.second - offset\n );\n\n // seconds\n this._cachedUnixTime = ms / 1000;\n return this._cachedUnixTime;\n }\n\n /**\n * Converts time to into Object which can be serialized then re-created\n * using the constructor.\n *\n * @example\n * // toJSON will automatically be called\n * var json = JSON.stringify(mytime);\n *\n * var deserialized = JSON.parse(json);\n *\n * var time = new ICAL.Time(deserialized);\n *\n * @return {Object}\n */\n toJSON() {\n let copy = [\n 'year',\n 'month',\n 'day',\n 'hour',\n 'minute',\n 'second',\n 'isDate'\n ];\n\n let result = Object.create(null);\n\n let i = 0;\n let len = copy.length;\n let prop;\n\n for (; i < len; i++) {\n prop = copy[i];\n result[prop] = this[prop];\n }\n\n if (this.zone) {\n result.timezone = this.zone.tzid;\n }\n\n return result;\n }\n}\n\n(function setupNormalizeAttributes() {\n // This needs to run before any instances are created!\n function defineAttr(attr) {\n Object.defineProperty(Time.prototype, attr, {\n get: function getTimeAttr() {\n if (this._pendingNormalization) {\n this._normalize();\n this._pendingNormalization = false;\n }\n\n return this._time[attr];\n },\n set: function setTimeAttr(val) {\n // Check if isDate will be set and if was not set to normalize date.\n // This avoids losing days when seconds, minutes and hours are zeroed\n // what normalize will do when time is a date.\n if (attr === \"isDate\" && val && !this._time.isDate) {\n this.adjust(0, 0, 0, 0);\n }\n this._cachedUnixTime = null;\n this._pendingNormalization = true;\n this._time[attr] = val;\n }\n });\n\n }\n\n defineAttr(\"year\");\n defineAttr(\"month\");\n defineAttr(\"day\");\n defineAttr(\"hour\");\n defineAttr(\"minute\");\n defineAttr(\"second\");\n defineAttr(\"isDate\");\n})();\n\n/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n * Portions Copyright (C) Philipp Kewisch */\n\n/**\n * This lets typescript resolve our custom types in the\n * generated d.ts files (jsdoc typedefs are converted to typescript types).\n * Ignore prevents the typedefs from being documented more than once.\n *\n * @ignore\n * @typedef {import(\"./types.js\").parserState} parserState\n * Imports the 'parserState' type from the \"types.js\" module\n * @typedef {import(\"./types.js\").designSet} designSet\n * Imports the 'designSet' type from the \"types.js\" module\n */\n\nconst CHAR = /[^ \\t]/;\nconst VALUE_DELIMITER = ':';\nconst PARAM_DELIMITER = ';';\nconst PARAM_NAME_DELIMITER = '=';\nconst DEFAULT_VALUE_TYPE$1 = 'unknown';\nconst DEFAULT_PARAM_TYPE = 'text';\nconst RFC6868_REPLACE_MAP$1 = { \"^'\": '\"', \"^n\": \"\\n\", \"^^\": \"^\" };\n\n/**\n * Parses iCalendar or vCard data into a raw jCal object. Consult\n * documentation on the {@tutorial layers|layers of parsing} for more\n * details.\n *\n * @function ICAL.parse\n * @memberof ICAL\n * @variation function\n * @todo Fix the API to be more clear on the return type\n * @param {String} input The string data to parse\n * @return {Object|Object[]} A single jCal object, or an array thereof\n */\nfunction parse(input) {\n let state = {};\n let root = state.component = [];\n\n state.stack = [root];\n\n parse._eachLine(input, function(err, line) {\n parse._handleContentLine(line, state);\n });\n\n\n // when there are still items on the stack\n // throw a fatal error, a component was not closed\n // correctly in that case.\n if (state.stack.length > 1) {\n throw new ParserError(\n 'invalid ical body. component began but did not end'\n );\n }\n\n state = null;\n\n return (root.length == 1 ? root[0] : root);\n}\n\n/**\n * Parse an iCalendar property value into the jCal for a single property\n *\n * @function ICAL.parse.property\n * @param {String} str\n * The iCalendar property string to parse\n * @param {designSet=} designSet\n * The design data to use for this property\n * @return {Object}\n * The jCal Object containing the property\n */\nparse.property = function(str, designSet) {\n let state = {\n component: [[], []],\n designSet: designSet || design$1.defaultSet\n };\n parse._handleContentLine(str, state);\n return state.component[1][0];\n};\n\n/**\n * Convenience method to parse a component. You can use ICAL.parse() directly\n * instead.\n *\n * @function ICAL.parse.component\n * @see ICAL.parse(function)\n * @param {String} str The iCalendar component string to parse\n * @return {Object} The jCal Object containing the component\n */\nparse.component = function(str) {\n return parse(str);\n};\n\n\n/**\n * An error that occurred during parsing.\n *\n * @param {String} message The error message\n * @memberof ICAL.parse\n * @extends {Error}\n */\nclass ParserError extends Error {\n name = this.constructor.name;\n}\n\n// classes & constants\nparse.ParserError = ParserError;\n\n\n/**\n * Handles a single line of iCalendar/vCard, updating the state.\n *\n * @private\n * @function ICAL.parse._handleContentLine\n * @param {String} line The content line to process\n * @param {parserState} state The current state of the line parsing\n */\nparse._handleContentLine = function(line, state) {\n // break up the parts of the line\n let valuePos = line.indexOf(VALUE_DELIMITER);\n let paramPos = line.indexOf(PARAM_DELIMITER);\n\n let lastParamIndex;\n let lastValuePos;\n\n // name of property or begin/end\n let name;\n let value;\n // params is only overridden if paramPos !== -1.\n // we can't do params = params || {} later on\n // because it sacrifices ops.\n let params = {};\n\n /**\n * Different property cases\n *\n *\n * 1. RRULE:FREQ=foo\n * // FREQ= is not a param but the value\n *\n * 2. ATTENDEE;ROLE=REQ-PARTICIPANT;\n * // ROLE= is a param because : has not happened yet\n */\n // when the parameter delimiter is after the\n // value delimiter then it is not a parameter.\n\n if ((paramPos !== -1 && valuePos !== -1)) {\n // when the parameter delimiter is after the\n // value delimiter then it is not a parameter.\n if (paramPos > valuePos) {\n paramPos = -1;\n }\n }\n\n let parsedParams;\n if (paramPos !== -1) {\n name = line.slice(0, Math.max(0, paramPos)).toLowerCase();\n parsedParams = parse._parseParameters(line.slice(Math.max(0, paramPos)), 0, state.designSet);\n if (parsedParams[2] == -1) {\n throw new ParserError(\"Invalid parameters in '\" + line + \"'\");\n }\n params = parsedParams[0];\n lastParamIndex = parsedParams[1].length + parsedParams[2] + paramPos;\n if ((lastValuePos =\n line.slice(Math.max(0, lastParamIndex)).indexOf(VALUE_DELIMITER)) !== -1) {\n value = line.slice(Math.max(0, lastParamIndex + lastValuePos + 1));\n } else {\n throw new ParserError(\"Missing parameter value in '\" + line + \"'\");\n }\n } else if (valuePos !== -1) {\n // without parmeters (BEGIN:VCAENDAR, CLASS:PUBLIC)\n name = line.slice(0, Math.max(0, valuePos)).toLowerCase();\n value = line.slice(Math.max(0, valuePos + 1));\n\n if (name === 'begin') {\n let newComponent = [value.toLowerCase(), [], []];\n if (state.stack.length === 1) {\n state.component.push(newComponent);\n } else {\n state.component[2].push(newComponent);\n }\n state.stack.push(state.component);\n state.component = newComponent;\n if (!state.designSet) {\n state.designSet = design$1.getDesignSet(state.component[0]);\n }\n return;\n } else if (name === 'end') {\n state.component = state.stack.pop();\n return;\n }\n // If it is not begin/end, then this is a property with an empty value,\n // which should be considered valid.\n } else {\n /**\n * Invalid line.\n * The rational to throw an error is we will\n * never be certain that the rest of the file\n * is sane and it is unlikely that we can serialize\n * the result correctly either.\n */\n throw new ParserError(\n 'invalid line (no token \";\" or \":\") \"' + line + '\"'\n );\n }\n\n let valueType;\n let multiValue = false;\n let structuredValue = false;\n let propertyDetails;\n let splitName;\n let ungroupedName;\n\n // fetch the ungrouped part of the name\n if (state.designSet.propertyGroups && name.indexOf('.') !== -1) {\n splitName = name.split('.');\n params.group = splitName[0];\n ungroupedName = splitName[1];\n } else {\n ungroupedName = name;\n }\n\n if (ungroupedName in state.designSet.property) {\n propertyDetails = state.designSet.property[ungroupedName];\n\n if ('multiValue' in propertyDetails) {\n multiValue = propertyDetails.multiValue;\n }\n\n if ('structuredValue' in propertyDetails) {\n structuredValue = propertyDetails.structuredValue;\n }\n\n if (value && 'detectType' in propertyDetails) {\n valueType = propertyDetails.detectType(value);\n }\n }\n\n // attempt to determine value\n if (!valueType) {\n if (!('value' in params)) {\n if (propertyDetails) {\n valueType = propertyDetails.defaultType;\n } else {\n valueType = DEFAULT_VALUE_TYPE$1;\n }\n } else {\n // possible to avoid this?\n valueType = params.value.toLowerCase();\n }\n }\n\n delete params.value;\n\n /**\n * Note on `var result` juggling:\n *\n * I observed that building the array in pieces has adverse\n * effects on performance, so where possible we inline the creation.\n * It is a little ugly but resulted in ~2000 additional ops/sec.\n */\n\n let result;\n if (multiValue && structuredValue) {\n value = parse._parseMultiValue(value, structuredValue, valueType, [], multiValue, state.designSet, structuredValue);\n result = [ungroupedName, params, valueType, value];\n } else if (multiValue) {\n result = [ungroupedName, params, valueType];\n parse._parseMultiValue(value, multiValue, valueType, result, null, state.designSet, false);\n } else if (structuredValue) {\n value = parse._parseMultiValue(value, structuredValue, valueType, [], null, state.designSet, structuredValue);\n result = [ungroupedName, params, valueType, value];\n } else {\n value = parse._parseValue(value, valueType, state.designSet, false);\n result = [ungroupedName, params, valueType, value];\n }\n // rfc6350 requires that in vCard 4.0 the first component is the VERSION\n // component with as value 4.0, note that 3.0 does not have this requirement.\n if (state.component[0] === 'vcard' && state.component[1].length === 0 &&\n !(name === 'version' && value === '4.0')) {\n state.designSet = design$1.getDesignSet(\"vcard3\");\n }\n state.component[1].push(result);\n};\n\n/**\n * Parse a value from the raw value into the jCard/jCal value.\n *\n * @private\n * @function ICAL.parse._parseValue\n * @param {String} value Original value\n * @param {String} type Type of value\n * @param {Object} designSet The design data to use for this value\n * @return {Object} varies on type\n */\nparse._parseValue = function(value, type, designSet, structuredValue) {\n if (type in designSet.value && 'fromICAL' in designSet.value[type]) {\n return designSet.value[type].fromICAL(value, structuredValue);\n }\n return value;\n};\n\n/**\n * Parse parameters from a string to object.\n *\n * @function ICAL.parse._parseParameters\n * @private\n * @param {String} line A single unfolded line\n * @param {Number} start Position to start looking for properties\n * @param {Object} designSet The design data to use for this property\n * @return {Object} key/value pairs\n */\nparse._parseParameters = function(line, start, designSet) {\n let lastParam = start;\n let pos = 0;\n let delim = PARAM_NAME_DELIMITER;\n let result = {};\n let name, lcname;\n let value, valuePos = -1;\n let type, multiValue, mvdelim;\n\n // find the next '=' sign\n // use lastParam and pos to find name\n // check if \" is used if so get value from \"->\"\n // then increment pos to find next ;\n\n while ((pos !== false) &&\n (pos = line.indexOf(delim, pos + 1)) !== -1) {\n\n name = line.slice(lastParam + 1, pos);\n if (name.length == 0) {\n throw new ParserError(\"Empty parameter name in '\" + line + \"'\");\n }\n lcname = name.toLowerCase();\n mvdelim = false;\n multiValue = false;\n\n if (lcname in designSet.param && designSet.param[lcname].valueType) {\n type = designSet.param[lcname].valueType;\n } else {\n type = DEFAULT_PARAM_TYPE;\n }\n\n if (lcname in designSet.param) {\n multiValue = designSet.param[lcname].multiValue;\n if (designSet.param[lcname].multiValueSeparateDQuote) {\n mvdelim = parse._rfc6868Escape('\"' + multiValue + '\"');\n }\n }\n\n let nextChar = line[pos + 1];\n if (nextChar === '\"') {\n valuePos = pos + 2;\n pos = line.indexOf('\"', valuePos);\n if (multiValue && pos != -1) {\n let extendedValue = true;\n while (extendedValue) {\n if (line[pos + 1] == multiValue && line[pos + 2] == '\"') {\n pos = line.indexOf('\"', pos + 3);\n } else {\n extendedValue = false;\n }\n }\n }\n if (pos === -1) {\n throw new ParserError(\n 'invalid line (no matching double quote) \"' + line + '\"'\n );\n }\n value = line.slice(valuePos, pos);\n lastParam = line.indexOf(PARAM_DELIMITER, pos);\n let propValuePos = line.indexOf(VALUE_DELIMITER, pos);\n // if either no next parameter or delimeter in property value, let's stop here\n if (lastParam === -1 || (propValuePos !== -1 && lastParam > propValuePos)) {\n pos = false;\n }\n } else {\n valuePos = pos + 1;\n\n // move to next \";\"\n let nextPos = line.indexOf(PARAM_DELIMITER, valuePos);\n let propValuePos = line.indexOf(VALUE_DELIMITER, valuePos);\n if (propValuePos !== -1 && nextPos > propValuePos) {\n // this is a delimiter in the property value, let's stop here\n nextPos = propValuePos;\n pos = false;\n } else if (nextPos === -1) {\n // no \";\"\n if (propValuePos === -1) {\n nextPos = line.length;\n } else {\n nextPos = propValuePos;\n }\n pos = false;\n } else {\n lastParam = nextPos;\n pos = nextPos;\n }\n\n value = line.slice(valuePos, nextPos);\n }\n\n const length_before = value.length;\n value = parse._rfc6868Escape(value);\n valuePos += length_before - value.length;\n if (multiValue) {\n let delimiter = mvdelim || multiValue;\n value = parse._parseMultiValue(value, delimiter, type, [], null, designSet);\n } else {\n value = parse._parseValue(value, type, designSet);\n }\n\n if (multiValue && (lcname in result)) {\n if (Array.isArray(result[lcname])) {\n result[lcname].push(value);\n } else {\n result[lcname] = [\n result[lcname],\n value\n ];\n }\n } else {\n result[lcname] = value;\n }\n }\n return [result, value, valuePos];\n};\n\n/**\n * Internal helper for rfc6868. Exposing this on ICAL.parse so that\n * hackers can disable the rfc6868 parsing if the really need to.\n *\n * @function ICAL.parse._rfc6868Escape\n * @param {String} val The value to escape\n * @return {String} The escaped value\n */\nparse._rfc6868Escape = function(val) {\n return val.replace(/\\^['n^]/g, function(x) {\n return RFC6868_REPLACE_MAP$1[x];\n });\n};\n\n/**\n * Parse a multi value string. This function is used either for parsing\n * actual multi-value property's values, or for handling parameter values. It\n * can be used for both multi-value properties and structured value properties.\n *\n * @private\n * @function ICAL.parse._parseMultiValue\n * @param {String} buffer The buffer containing the full value\n * @param {String} delim The multi-value delimiter\n * @param {String} type The value type to be parsed\n * @param {Array.<?>} result The array to append results to, varies on value type\n * @param {String} innerMulti The inner delimiter to split each value with\n * @param {designSet} designSet The design data for this value\n * @return {?|Array.<?>} Either an array of results, or the first result\n */\nparse._parseMultiValue = function(buffer, delim, type, result, innerMulti, designSet, structuredValue) {\n let pos = 0;\n let lastPos = 0;\n let value;\n if (delim.length === 0) {\n return buffer;\n }\n\n // split each piece\n while ((pos = unescapedIndexOf(buffer, delim, lastPos)) !== -1) {\n value = buffer.slice(lastPos, pos);\n if (innerMulti) {\n value = parse._parseMultiValue(value, innerMulti, type, [], null, designSet, structuredValue);\n } else {\n value = parse._parseValue(value, type, designSet, structuredValue);\n }\n result.push(value);\n lastPos = pos + delim.length;\n }\n\n // on the last piece take the rest of string\n value = buffer.slice(lastPos);\n if (innerMulti) {\n value = parse._parseMultiValue(value, innerMulti, type, [], null, designSet, structuredValue);\n } else {\n value = parse._parseValue(value, type, designSet, structuredValue);\n }\n result.push(value);\n\n return result.length == 1 ? result[0] : result;\n};\n\n/**\n * Process a complete buffer of iCalendar/vCard data line by line, correctly\n * unfolding content. Each line will be processed with the given callback\n *\n * @private\n * @function ICAL.parse._eachLine\n * @param {String} buffer The buffer to process\n * @param {function(?String, String)} callback The callback for each line\n */\nparse._eachLine = function(buffer, callback) {\n let len = buffer.length;\n let lastPos = buffer.search(CHAR);\n let pos = lastPos;\n let line;\n let firstChar;\n\n let newlineOffset;\n\n do {\n pos = buffer.indexOf('\\n', lastPos) + 1;\n\n if (pos > 1 && buffer[pos - 2] === '\\r') {\n newlineOffset = 2;\n } else {\n newlineOffset = 1;\n }\n\n if (pos === 0) {\n pos = len;\n newlineOffset = 0;\n }\n\n firstChar = buffer[lastPos];\n\n if (firstChar === ' ' || firstChar === '\\t') {\n // add to line\n line += buffer.slice(lastPos + 1, pos - newlineOffset);\n } else {\n if (line)\n callback(null, line);\n // push line\n line = buffer.slice(lastPos, pos - newlineOffset);\n }\n\n lastPos = pos;\n } while (pos !== len);\n\n // extra ending line\n line = line.trim();\n\n if (line.length)\n callback(null, line);\n};\n\n/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n * Portions Copyright (C) Philipp Kewisch */\n\nconst OPTIONS = [\"tzid\", \"location\", \"tznames\", \"latitude\", \"longitude\"];\n\n/**\n * Timezone representation.\n *\n * @example\n * var vcalendar;\n * var timezoneComp = vcalendar.getFirstSubcomponent('vtimezone');\n * var tzid = timezoneComp.getFirstPropertyValue('tzid');\n *\n * var timezone = new ICAL.Timezone({\n * component: timezoneComp,\n * tzid\n * });\n *\n * @memberof ICAL\n */\nclass Timezone {\n static _compare_change_fn(a, b) {\n if (a.year < b.year) return -1;\n else if (a.year > b.year) return 1;\n\n if (a.month < b.month) return -1;\n else if (a.month > b.month) return 1;\n\n if (a.day < b.day) return -1;\n else if (a.day > b.day) return 1;\n\n if (a.hour < b.hour) return -1;\n else if (a.hour > b.hour) return 1;\n\n if (a.minute < b.minute) return -1;\n else if (a.minute > b.minute) return 1;\n\n if (a.second < b.second) return -1;\n else if (a.second > b.second) return 1;\n\n return 0;\n }\n\n /**\n * Convert the date/time from one zone to the next.\n *\n * @param {Time} tt The time to convert\n * @param {Timezone} from_zone The source zone to convert from\n * @param {Timezone} to_zone The target zone to convert to\n * @return {Time} The converted date/time object\n */\n static convert_time(tt, from_zone, to_zone) {\n if (tt.isDate ||\n from_zone.tzid == to_zone.tzid ||\n from_zone == Timezone.localTimezone ||\n to_zone == Timezone.localTimezone) {\n tt.zone = to_zone;\n return tt;\n }\n\n let utcOffset = from_zone.utcOffset(tt);\n tt.adjust(0, 0, 0, - utcOffset);\n\n utcOffset = to_zone.utcOffset(tt);\n tt.adjust(0, 0, 0, utcOffset);\n\n return null;\n }\n\n /**\n * Creates a new ICAL.Timezone instance from the passed data object.\n *\n * @param {Component|Object} aData options for class\n * @param {String|Component} aData.component\n * If aData is a simple object, then this member can be set to either a\n * string containing the component data, or an already parsed\n * ICAL.Component\n * @param {String} aData.tzid The timezone identifier\n * @param {String} aData.location The timezone locationw\n * @param {String} aData.tznames An alternative string representation of the\n * timezone\n * @param {Number} aData.latitude The latitude of the timezone\n * @param {Number} aData.longitude The longitude of the timezone\n */\n static fromData(aData) {\n let tt = new Timezone();\n return tt.fromData(aData);\n }\n\n /**\n * The instance describing the UTC timezone\n * @type {Timezone}\n * @constant\n * @instance\n */\n static #utcTimezone = null;\n static get utcTimezone() {\n if (!this.#utcTimezone) {\n this.#utcTimezone = Timezone.fromData({\n tzid: \"UTC\"\n });\n }\n return this.#utcTimezone;\n }\n\n /**\n * The instance describing the local timezone\n * @type {Timezone}\n * @constant\n * @instance\n */\n static #localTimezone = null;\n static get localTimezone() {\n if (!this.#localTimezone) {\n this.#localTimezone = Timezone.fromData({\n tzid: \"floating\"\n });\n }\n return this.#localTimezone;\n }\n\n /**\n * Adjust a timezone change object.\n * @private\n * @param {Object} change The timezone change object\n * @param {Number} days The extra amount of days\n * @param {Number} hours The extra amount of hours\n * @param {Number} minutes The extra amount of minutes\n * @param {Number} seconds The extra amount of seconds\n */\n static adjust_change(change, days, hours, minutes, seconds) {\n return Time.prototype.adjust.call(\n change,\n days,\n hours,\n minutes,\n seconds,\n change\n );\n }\n\n static _minimumExpansionYear = -1;\n static EXTRA_COVERAGE = 5;\n\n /**\n * Creates a new ICAL.Timezone instance, by passing in a tzid and component.\n *\n * @param {Component|Object} data options for class\n * @param {String|Component} data.component\n * If data is a simple object, then this member can be set to either a\n * string containing the component data, or an already parsed\n * ICAL.Component\n * @param {String} data.tzid The timezone identifier\n * @param {String} data.location The timezone locationw\n * @param {String} data.tznames An alternative string representation of the\n * timezone\n * @param {Number} data.latitude The latitude of the timezone\n * @param {Number} data.longitude The longitude of the timezone\n */\n constructor(data) {\n this.wrappedJSObject = this;\n this.fromData(data);\n }\n\n\n /**\n * Timezone identifier\n * @type {String}\n */\n tzid = \"\";\n\n /**\n * Timezone location\n * @type {String}\n */\n location = \"\";\n\n /**\n * Alternative timezone name, for the string representation\n * @type {String}\n */\n tznames = \"\";\n\n /**\n * The primary latitude for the timezone.\n * @type {Number}\n */\n latitude = 0.0;\n\n /**\n * The primary longitude for the timezone.\n * @type {Number}\n */\n longitude = 0.0;\n\n /**\n * The vtimezone component for this timezone.\n * @type {Component}\n */\n component = null;\n\n /**\n * The year this timezone has been expanded to. All timezone transition\n * dates until this year are known and can be used for calculation\n *\n * @private\n * @type {Number}\n */\n expandedUntilYear = 0;\n\n /**\n * The class identifier.\n * @constant\n * @type {String}\n * @default \"icaltimezone\"\n */\n icalclass = \"icaltimezone\";\n\n /**\n * Sets up the current instance using members from the passed data object.\n *\n * @param {Component|Object} aData options for class\n * @param {String|Component} aData.component\n * If aData is a simple object, then this member can be set to either a\n * string containing the component data, or an already parsed\n * ICAL.Component\n * @param {String} aData.tzid The timezone identifier\n * @param {String} aData.location The timezone locationw\n * @param {String} aData.tznames An alternative string representation of the\n * timezone\n * @param {Number} aData.latitude The latitude of the timezone\n * @param {Number} aData.longitude The longitude of the timezone\n */\n fromData(aData) {\n this.expandedUntilYear = 0;\n this.changes = [];\n\n if (aData instanceof Component) {\n // Either a component is passed directly\n this.component = aData;\n } else {\n // Otherwise the component may be in the data object\n if (aData && \"component\" in aData) {\n if (typeof aData.component == \"string\") {\n // If a string was passed, parse it as a component\n let jCal = parse(aData.component);\n this.component = new Component(jCal);\n } else if (aData.component instanceof Component) {\n // If it was a component already, then just set it\n this.component = aData.component;\n } else {\n // Otherwise just null out the component\n this.component = null;\n }\n }\n\n // Copy remaining passed properties\n for (let prop of OPTIONS) {\n if (aData && prop in aData) {\n this[prop] = aData[prop];\n }\n }\n }\n\n // If we have a component but no TZID, attempt to get it from the\n // component's properties.\n if (this.component instanceof Component && !this.tzid) {\n this.tzid = this.component.getFirstPropertyValue('tzid');\n }\n\n return this;\n }\n\n /**\n * Finds the utcOffset the given time would occur in this timezone.\n *\n * @param {Time} tt The time to check for\n * @return {Number} utc offset in seconds\n */\n utcOffset(tt) {\n if (this == Timezone.utcTimezone || this == Timezone.localTimezone) {\n return 0;\n }\n\n this._ensureCoverage(tt.year);\n\n if (!this.changes.length) {\n return 0;\n }\n\n let tt_change = {\n year: tt.year,\n month: tt.month,\n day: tt.day,\n hour: tt.hour,\n minute: tt.minute,\n second: tt.second\n };\n\n let change_num = this._findNearbyChange(tt_change);\n let change_num_to_use = -1;\n let step = 1;\n\n // TODO: replace with bin search?\n for (;;) {\n let change = clone(this.changes[change_num], true);\n if (change.utcOffset < change.prevUtcOffset) {\n Timezone.adjust_change(change, 0, 0, 0, change.utcOffset);\n } else {\n Timezone.adjust_change(change, 0, 0, 0,\n change.prevUtcOffset);\n }\n\n let cmp = Timezone._compare_change_fn(tt_change, change);\n\n if (cmp >= 0) {\n change_num_to_use = change_num;\n } else {\n step = -1;\n }\n\n if (step == -1 && change_num_to_use != -1) {\n break;\n }\n\n change_num += step;\n\n if (change_num < 0) {\n return 0;\n }\n\n if (change_num >= this.changes.length) {\n break;\n }\n }\n\n let zone_change = this.changes[change_num_to_use];\n let utcOffset_change = zone_change.utcOffset - zone_change.prevUtcOffset;\n\n if (utcOffset_change < 0 && change_num_to_use > 0) {\n let tmp_change = clone(zone_change, true);\n Timezone.adjust_change(tmp_change, 0, 0, 0, tmp_change.prevUtcOffset);\n\n if (Timezone._compare_change_fn(tt_change, tmp_change) < 0) {\n let prev_zone_change = this.changes[change_num_to_use - 1];\n\n let want_daylight = false; // TODO\n\n if (zone_change.is_daylight != want_daylight &&\n prev_zone_change.is_daylight == want_daylight) {\n zone_change = prev_zone_change;\n }\n }\n }\n\n // TODO return is_daylight?\n return zone_change.utcOffset;\n }\n\n _findNearbyChange(change) {\n // find the closest match\n let idx = binsearchInsert(\n this.changes,\n change,\n Timezone._compare_change_fn\n );\n\n if (idx >= this.changes.length) {\n return this.changes.length - 1;\n }\n\n return idx;\n }\n\n _ensureCoverage(aYear) {\n if (Timezone._minimumExpansionYear == -1) {\n let today = Time.now();\n Timezone._minimumExpansionYear = today.year;\n }\n\n let changesEndYear = aYear;\n if (changesEndYear < Timezone._minimumExpansionYear) {\n changesEndYear = Timezone._minimumExpansionYear;\n }\n\n changesEndYear += Timezone.EXTRA_COVERAGE;\n\n if (!this.changes.length || this.expandedUntilYear < aYear) {\n let subcomps = this.component.getAllSubcomponents();\n let compLen = subcomps.length;\n let compIdx = 0;\n\n for (; compIdx < compLen; compIdx++) {\n this._expandComponent(\n subcomps[compIdx], changesEndYear, this.changes\n );\n }\n\n this.changes.sort(Timezone._compare_change_fn);\n this.expandedUntilYear = changesEndYear;\n }\n }\n\n _expandComponent(aComponent, aYear, changes) {\n if (!aComponent.hasProperty(\"dtstart\") ||\n !aComponent.hasProperty(\"tzoffsetto\") ||\n !aComponent.hasProperty(\"tzoffsetfrom\")) {\n return null;\n }\n\n let dtstart = aComponent.getFirstProperty(\"dtstart\").getFirstValue();\n let change;\n\n function convert_tzoffset(offset) {\n return offset.factor * (offset.hours * 3600 + offset.minutes * 60);\n }\n\n function init_changes() {\n let changebase = {};\n changebase.is_daylight = (aComponent.name == \"daylight\");\n changebase.utcOffset = convert_tzoffset(\n aComponent.getFirstProperty(\"tzoffsetto\").getFirstValue()\n );\n\n changebase.prevUtcOffset = convert_tzoffset(\n aComponent.getFirstProperty(\"tzoffsetfrom\").getFirstValue()\n );\n\n return changebase;\n }\n\n if (!aComponent.hasProperty(\"rrule\") && !aComponent.hasProperty(\"rdate\")) {\n change = init_changes();\n change.year = dtstart.year;\n change.month = dtstart.month;\n change.day = dtstart.day;\n change.hour = dtstart.hour;\n change.minute = dtstart.minute;\n change.second = dtstart.second;\n\n Timezone.adjust_change(change, 0, 0, 0, -change.prevUtcOffset);\n changes.push(change);\n } else {\n let props = aComponent.getAllProperties(\"rdate\");\n for (let rdate of props) {\n let time = rdate.getFirstValue();\n change = init_changes();\n\n change.year = time.year;\n change.month = time.month;\n change.day = time.day;\n\n if (time.isDate) {\n change.hour = dtstart.hour;\n change.minute = dtstart.minute;\n change.second = dtstart.second;\n\n if (dtstart.zone != Timezone.utcTimezone) {\n Timezone.adjust_change(change, 0, 0, 0, -change.prevUtcOffset);\n }\n } else {\n change.hour = time.hour;\n change.minute = time.minute;\n change.second = time.second;\n\n if (time.zone != Timezone.utcTimezone) {\n Timezone.adjust_change(change, 0, 0, 0, -change.prevUtcOffset);\n }\n }\n\n changes.push(change);\n }\n\n let rrule = aComponent.getFirstProperty(\"rrule\");\n\n if (rrule) {\n rrule = rrule.getFirstValue();\n change = init_changes();\n\n if (rrule.until && rrule.until.zone == Timezone.utcTimezone) {\n rrule.until.adjust(0, 0, 0, change.prevUtcOffset);\n rrule.until.zone = Timezone.localTimezone;\n }\n\n let iterator = rrule.iterator(dtstart);\n\n let occ;\n while ((occ = iterator.next())) {\n change = init_changes();\n if (occ.year > aYear || !occ) {\n break;\n }\n\n change.year = occ.year;\n change.month = occ.month;\n change.day = occ.day;\n change.hour = occ.hour;\n change.minute = occ.minute;\n change.second = occ.second;\n change.isDate = occ.isDate;\n\n Timezone.adjust_change(change, 0, 0, 0, -change.prevUtcOffset);\n changes.push(change);\n }\n }\n }\n\n return changes;\n }\n\n /**\n * The string representation of this timezone.\n * @return {String}\n */\n toString() {\n return (this.tznames ? this.tznames : this.tzid);\n }\n}\n\n/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n * Portions Copyright (C) Philipp Kewisch */\n\nlet zones = null;\n\n/**\n * @classdesc\n * Singleton class to contain timezones. Right now it is all manual registry in\n * the future we may use this class to download timezone information or handle\n * loading pre-expanded timezones.\n *\n * @exports module:ICAL.TimezoneService\n * @memberof ICAL\n */\nconst TimezoneService = {\n get count() {\n if (zones === null) {\n return 0;\n }\n\n return Object.keys(zones).length;\n },\n\n reset: function() {\n zones = Object.create(null);\n let utc = Timezone.utcTimezone;\n\n zones.Z = utc;\n zones.UTC = utc;\n zones.GMT = utc;\n },\n _hard_reset: function() {\n zones = null;\n },\n\n /**\n * Checks if timezone id has been registered.\n *\n * @param {String} tzid Timezone identifier (e.g. America/Los_Angeles)\n * @return {Boolean} False, when not present\n */\n has: function(tzid) {\n if (zones === null) {\n return false;\n }\n\n return !!zones[tzid];\n },\n\n /**\n * Returns a timezone by its tzid if present.\n *\n * @param {String} tzid Timezone identifier (e.g. America/Los_Angeles)\n * @return {Timezone | undefined} The timezone, or undefined if not found\n */\n get: function(tzid) {\n if (zones === null) {\n this.reset();\n }\n\n return zones[tzid];\n },\n\n /**\n * Registers a timezone object or component.\n *\n * @param {Component|Timezone} timezone\n * The initialized zone or vtimezone.\n *\n * @param {String=} name\n * The name of the timezone. Defaults to the component's TZID if not\n * passed.\n */\n register: function(timezone, name) {\n if (zones === null) {\n this.reset();\n }\n\n // This avoids a breaking change by the change of argument order\n // TODO remove in v3\n if (typeof timezone === \"string\" && name instanceof Timezone) {\n [timezone, name] = [name, timezone];\n }\n\n if (!name) {\n if (timezone instanceof Timezone) {\n name = timezone.tzid;\n } else {\n if (timezone.name === 'vtimezone') {\n timezone = new Timezone(timezone);\n name = timezone.tzid;\n }\n }\n }\n\n if (!name) {\n throw new TypeError(\"Neither a timezone nor a name was passed\");\n }\n\n if (timezone instanceof Timezone) {\n zones[name] = timezone;\n } else {\n throw new TypeError('timezone must be ICAL.Timezone or ICAL.Component');\n }\n },\n\n /**\n * Removes a timezone by its tzid from the list.\n *\n * @param {String} tzid Timezone identifier (e.g. America/Los_Angeles)\n * @return {?Timezone} The removed timezone, or null if not registered\n */\n remove: function(tzid) {\n if (zones === null) {\n return null;\n }\n\n return (delete zones[tzid]);\n }\n};\n\n/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n * Portions Copyright (C) Philipp Kewisch */\n\n/**\n * Helper functions used in various places within ical.js\n * @module ICAL.helpers\n */\n\n/**\n * Compiles a list of all referenced TZIDs in all subcomponents and\n * removes any extra VTIMEZONE subcomponents. In addition, if any TZIDs\n * are referenced by a component, but a VTIMEZONE does not exist,\n * an attempt will be made to generate a VTIMEZONE using ICAL.TimezoneService.\n *\n * @param {Component} vcal The top-level VCALENDAR component.\n * @return {Component} The ICAL.Component that was passed in.\n */\nfunction updateTimezones(vcal) {\n let allsubs, properties, vtimezones, reqTzid, i;\n\n if (!vcal || vcal.name !== \"vcalendar\") {\n //not a top-level vcalendar component\n return vcal;\n }\n\n //Store vtimezone subcomponents in an object reference by tzid.\n //Store properties from everything else in another array\n allsubs = vcal.getAllSubcomponents();\n properties = [];\n vtimezones = {};\n for (i = 0; i < allsubs.length; i++) {\n if (allsubs[i].name === \"vtimezone\") {\n let tzid = allsubs[i].getFirstProperty(\"tzid\").getFirstValue();\n vtimezones[tzid] = allsubs[i];\n } else {\n properties = properties.concat(allsubs[i].getAllProperties());\n }\n }\n\n //create an object with one entry for each required tz\n reqTzid = {};\n for (i = 0; i < properties.length; i++) {\n let tzid = properties[i].getParameter(\"tzid\");\n if (tzid) {\n reqTzid[tzid] = true;\n }\n }\n\n //delete any vtimezones that are not on the reqTzid list.\n for (let [tzid, comp] of Object.entries(vtimezones)) {\n if (!reqTzid[tzid]) {\n vcal.removeSubcomponent(comp);\n }\n }\n\n //create any missing, but registered timezones\n for (let tzid of Object.keys(reqTzid)) {\n if (!vtimezones[tzid] && TimezoneService.has(tzid)) {\n vcal.addSubcomponent(TimezoneService.get(tzid).component);\n }\n }\n\n return vcal;\n}\n\n/**\n * Checks if the given type is of the number type and also NaN.\n *\n * @param {Number} number The number to check\n * @return {Boolean} True, if the number is strictly NaN\n */\nfunction isStrictlyNaN(number) {\n return typeof(number) === 'number' && isNaN(number);\n}\n\n/**\n * Parses a string value that is expected to be an integer, when the valid is\n * not an integer throws a decoration error.\n *\n * @param {String} string Raw string input\n * @return {Number} Parsed integer\n */\nfunction strictParseInt(string) {\n let result = parseInt(string, 10);\n\n if (isStrictlyNaN(result)) {\n throw new Error(\n 'Could not extract integer from \"' + string + '\"'\n );\n }\n\n return result;\n}\n\n/**\n * Creates or returns a class instance of a given type with the initialization\n * data if the data is not already an instance of the given type.\n *\n * @example\n * var time = new ICAL.Time(...);\n * var result = ICAL.helpers.formatClassType(time, ICAL.Time);\n *\n * (result instanceof ICAL.Time)\n * // => true\n *\n * result = ICAL.helpers.formatClassType({}, ICAL.Time);\n * (result isntanceof ICAL.Time)\n * // => true\n *\n *\n * @param {Object} data object initialization data\n * @param {Object} type object type (like ICAL.Time)\n * @return {?} An instance of the found type.\n */\nfunction formatClassType(data, type) {\n if (typeof(data) === 'undefined') {\n return undefined;\n }\n\n if (data instanceof type) {\n return data;\n }\n return new type(data);\n}\n\n/**\n * Identical to indexOf but will only match values when they are not preceded\n * by a backslash character.\n *\n * @param {String} buffer String to search\n * @param {String} search Value to look for\n * @param {Number} pos Start position\n * @return {Number} The position, or -1 if not found\n */\nfunction unescapedIndexOf(buffer, search, pos) {\n while ((pos = buffer.indexOf(search, pos)) !== -1) {\n if (pos > 0 && buffer[pos - 1] === '\\\\') {\n pos += 1;\n } else {\n return pos;\n }\n }\n return -1;\n}\n\n/**\n * Find the index for insertion using binary search.\n *\n * @param {Array} list The list to search\n * @param {?} seekVal The value to insert\n * @param {function(?,?)} cmpfunc The comparison func, that can\n * compare two seekVals\n * @return {Number} The insert position\n */\nfunction binsearchInsert(list, seekVal, cmpfunc) {\n if (!list.length)\n return 0;\n\n let low = 0, high = list.length - 1,\n mid, cmpval;\n\n while (low <= high) {\n mid = low + Math.floor((high - low) / 2);\n cmpval = cmpfunc(seekVal, list[mid]);\n\n if (cmpval < 0)\n high = mid - 1;\n else if (cmpval > 0)\n low = mid + 1;\n else\n break;\n }\n\n if (cmpval < 0)\n return mid; // insertion is displacing, so use mid outright.\n else if (cmpval > 0)\n return mid + 1;\n else\n return mid;\n}\n\n/**\n * Clone the passed object or primitive. By default a shallow clone will be\n * executed.\n *\n * @param {*} aSrc The thing to clone\n * @param {Boolean=} aDeep If true, a deep clone will be performed\n * @return {*} The copy of the thing\n */\nfunction clone(aSrc, aDeep) {\n if (!aSrc || typeof aSrc != \"object\") {\n return aSrc;\n } else if (aSrc instanceof Date) {\n return new Date(aSrc.getTime());\n } else if (\"clone\" in aSrc) {\n return aSrc.clone();\n } else if (Array.isArray(aSrc)) {\n let arr = [];\n for (let i = 0; i < aSrc.length; i++) {\n arr.push(aDeep ? clone(aSrc[i], true) : aSrc[i]);\n }\n return arr;\n } else {\n let obj = {};\n for (let [name, value] of Object.entries(aSrc)) {\n if (aDeep) {\n obj[name] = clone(value, true);\n } else {\n obj[name] = value;\n }\n }\n return obj;\n }\n}\n\n/**\n * Performs iCalendar line folding. A line ending character is inserted and\n * the next line begins with a whitespace.\n *\n * @example\n * SUMMARY:This line will be fold\n * ed right in the middle of a word.\n *\n * @param {String} aLine The line to fold\n * @return {String} The folded line\n */\nfunction foldline(aLine) {\n let result = \"\";\n let line = aLine || \"\", pos = 0, line_length = 0;\n //pos counts position in line for the UTF-16 presentation\n //line_length counts the bytes for the UTF-8 presentation\n while (line.length) {\n let cp = line.codePointAt(pos);\n if (cp < 128) ++line_length;\n else if (cp < 2048) line_length += 2;//needs 2 UTF-8 bytes\n else if (cp < 65536) line_length += 3;\n else line_length += 4; //cp is less than 1114112\n if (line_length < ICALmodule.foldLength + 1)\n pos += cp > 65535 ? 2 : 1;\n else {\n result += ICALmodule.newLineChar + \" \" + line.slice(0, Math.max(0, pos));\n line = line.slice(Math.max(0, pos));\n pos = line_length = 0;\n }\n }\n return result.slice(ICALmodule.newLineChar.length + 1);\n}\n\n/**\n * Pads the given string or number with zeros so it will have at least two\n * characters.\n *\n * @param {String|Number} data The string or number to pad\n * @return {String} The number padded as a string\n */\nfunction pad2(data) {\n if (typeof(data) !== 'string') {\n // handle fractions.\n if (typeof(data) === 'number') {\n data = parseInt(data);\n }\n data = String(data);\n }\n\n let len = data.length;\n\n switch (len) {\n case 0:\n return '00';\n case 1:\n return '0' + data;\n default:\n return data;\n }\n}\n\n/**\n * Truncates the given number, correctly handling negative numbers.\n *\n * @param {Number} number The number to truncate\n * @return {Number} The truncated number\n */\nfunction trunc(number) {\n return (number < 0 ? Math.ceil(number) : Math.floor(number));\n}\n\n/**\n * Poor-man's cross-browser object extension. Doesn't support all the\n * features, but enough for our usage. Note that the target's properties are\n * not overwritten with the source properties.\n *\n * @example\n * var child = ICAL.helpers.extend(parent, {\n * \"bar\": 123\n * });\n *\n * @param {Object} source The object to extend\n * @param {Object} target The object to extend with\n * @return {Object} Returns the target.\n */\nfunction extend(source, target) {\n for (let key in source) {\n let descr = Object.getOwnPropertyDescriptor(source, key);\n if (descr && !Object.getOwnPropertyDescriptor(target, key)) {\n Object.defineProperty(target, key, descr);\n }\n }\n return target;\n}\n\nvar helpers = /*#__PURE__*/Object.freeze({\n __proto__: null,\n updateTimezones: updateTimezones,\n isStrictlyNaN: isStrictlyNaN,\n strictParseInt: strictParseInt,\n formatClassType: formatClassType,\n unescapedIndexOf: unescapedIndexOf,\n binsearchInsert: binsearchInsert,\n clone: clone,\n foldline: foldline,\n pad2: pad2,\n trunc: trunc,\n extend: extend\n});\n\n/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n * Portions Copyright (C) Philipp Kewisch */\n\n/**\n * This class represents the \"utc-offset\" value type, with various calculation and manipulation\n * methods.\n *\n * @memberof ICAL\n */\nclass UtcOffset {\n /**\n * Creates a new {@link ICAL.UtcOffset} instance from the passed string.\n *\n * @param {String} aString The string to parse\n * @return {Duration} The created utc-offset instance\n */\n static fromString(aString) {\n // -05:00\n let options = {};\n //TODO: support seconds per rfc5545 ?\n options.factor = (aString[0] === '+') ? 1 : -1;\n options.hours = strictParseInt(aString.slice(1, 3));\n options.minutes = strictParseInt(aString.slice(4, 6));\n\n return new UtcOffset(options);\n }\n\n /**\n * Creates a new {@link ICAL.UtcOffset} instance from the passed seconds\n * value.\n *\n * @param {Number} aSeconds The number of seconds to convert\n */\n static fromSeconds(aSeconds) {\n let instance = new UtcOffset();\n instance.fromSeconds(aSeconds);\n return instance;\n }\n\n /**\n * Creates a new ICAL.UtcOffset instance.\n *\n * @param {Object} aData An object with members of the utc offset\n * @param {Number=} aData.hours The hours for the utc offset\n * @param {Number=} aData.minutes The minutes in the utc offset\n * @param {Number=} aData.factor The factor for the utc-offset, either -1 or 1\n */\n constructor(aData) {\n this.fromData(aData);\n }\n\n /**\n * The hours in the utc-offset\n * @type {Number}\n */\n hours = 0;\n\n /**\n * The minutes in the utc-offset\n * @type {Number}\n */\n minutes = 0;\n\n /**\n * The sign of the utc offset, 1 for positive offset, -1 for negative\n * offsets.\n * @type {Number}\n */\n factor = 1;\n\n /**\n * The type name, to be used in the jCal object.\n * @constant\n * @type {String}\n * @default \"utc-offset\"\n */\n icaltype = \"utc-offset\";\n\n /**\n * Returns a clone of the utc offset object.\n *\n * @return {UtcOffset} The cloned object\n */\n clone() {\n return UtcOffset.fromSeconds(this.toSeconds());\n }\n\n /**\n * Sets up the current instance using members from the passed data object.\n *\n * @param {Object} aData An object with members of the utc offset\n * @param {Number=} aData.hours The hours for the utc offset\n * @param {Number=} aData.minutes The minutes in the utc offset\n * @param {Number=} aData.factor The factor for the utc-offset, either -1 or 1\n */\n fromData(aData) {\n if (aData) {\n for (let [key, value] of Object.entries(aData)) {\n this[key] = value;\n }\n }\n this._normalize();\n }\n\n /**\n * Sets up the current instance from the given seconds value. The seconds\n * value is truncated to the minute. Offsets are wrapped when the world\n * ends, the hour after UTC+14:00 is UTC-12:00.\n *\n * @param {Number} aSeconds The seconds to convert into an offset\n */\n fromSeconds(aSeconds) {\n let secs = Math.abs(aSeconds);\n\n this.factor = aSeconds < 0 ? -1 : 1;\n this.hours = trunc(secs / 3600);\n\n secs -= (this.hours * 3600);\n this.minutes = trunc(secs / 60);\n return this;\n }\n\n /**\n * Convert the current offset to a value in seconds\n *\n * @return {Number} The offset in seconds\n */\n toSeconds() {\n return this.factor * (60 * this.minutes + 3600 * this.hours);\n }\n\n /**\n * Compare this utc offset with another one.\n *\n * @param {UtcOffset} other The other offset to compare with\n * @return {Number} -1, 0 or 1 for less/equal/greater\n */\n compare(other) {\n let a = this.toSeconds();\n let b = other.toSeconds();\n return (a > b) - (b > a);\n }\n\n _normalize() {\n // Range: 97200 seconds (with 1 hour inbetween)\n let secs = this.toSeconds();\n let factor = this.factor;\n while (secs < -43200) { // = UTC-12:00\n secs += 97200;\n }\n while (secs > 50400) { // = UTC+14:00\n secs -= 97200;\n }\n\n this.fromSeconds(secs);\n\n // Avoid changing the factor when on zero seconds\n if (secs == 0) {\n this.factor = factor;\n }\n }\n\n /**\n * The iCalendar string representation of this utc-offset.\n * @return {String}\n */\n toICALString() {\n return design$1.icalendar.value['utc-offset'].toICAL(this.toString());\n }\n\n /**\n * The string representation of this utc-offset.\n * @return {String}\n */\n toString() {\n return (this.factor == 1 ? \"+\" : \"-\") + pad2(this.hours) + ':' + pad2(this.minutes);\n }\n}\n\n/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n * Portions Copyright (C) Philipp Kewisch */\n\n/**\n * Describes a vCard time, which has slight differences to the ICAL.Time.\n * Properties can be null if not specified, for example for dates with\n * reduced accuracy or truncation.\n *\n * Note that currently not all methods are correctly re-implemented for\n * VCardTime. For example, comparison will have undefined results when some\n * members are null.\n *\n * Also, normalization is not yet implemented for this class!\n *\n * @memberof ICAL\n * @extends {ICAL.Time}\n */\nclass VCardTime extends Time {\n /**\n * Returns a new ICAL.VCardTime instance from a date and/or time string.\n *\n * @param {String} aValue The string to create from\n * @param {String} aIcalType The type for this instance, e.g. date-and-or-time\n * @return {VCardTime} The date/time instance\n */\n static fromDateAndOrTimeString(aValue, aIcalType) {\n function part(v, s, e) {\n return v ? strictParseInt(v.slice(s, s + e)) : null;\n }\n let parts = aValue.split('T');\n let dt = parts[0], tmz = parts[1];\n let splitzone = tmz ? design$1.vcard.value.time._splitZone(tmz) : [];\n let zone = splitzone[0], tm = splitzone[1];\n\n let dtlen = dt ? dt.length : 0;\n let tmlen = tm ? tm.length : 0;\n\n let hasDashDate = dt && dt[0] == '-' && dt[1] == '-';\n let hasDashTime = tm && tm[0] == '-';\n\n let o = {\n year: hasDashDate ? null : part(dt, 0, 4),\n month: hasDashDate && (dtlen == 4 || dtlen == 7) ? part(dt, 2, 2) : dtlen == 7 ? part(dt, 5, 2) : dtlen == 10 ? part(dt, 5, 2) : null,\n day: dtlen == 5 ? part(dt, 3, 2) : dtlen == 7 && hasDashDate ? part(dt, 5, 2) : dtlen == 10 ? part(dt, 8, 2) : null,\n\n hour: hasDashTime ? null : part(tm, 0, 2),\n minute: hasDashTime && tmlen == 3 ? part(tm, 1, 2) : tmlen > 4 ? hasDashTime ? part(tm, 1, 2) : part(tm, 3, 2) : null,\n second: tmlen == 4 ? part(tm, 2, 2) : tmlen == 6 ? part(tm, 4, 2) : tmlen == 8 ? part(tm, 6, 2) : null\n };\n\n if (zone == 'Z') {\n zone = Timezone.utcTimezone;\n } else if (zone && zone[3] == ':') {\n zone = UtcOffset.fromString(zone);\n } else {\n zone = null;\n }\n\n return new VCardTime(o, zone, aIcalType);\n }\n\n\n /**\n * Creates a new ICAL.VCardTime instance.\n *\n * @param {Object} data The data for the time instance\n * @param {Number=} data.year The year for this date\n * @param {Number=} data.month The month for this date\n * @param {Number=} data.day The day for this date\n * @param {Number=} data.hour The hour for this date\n * @param {Number=} data.minute The minute for this date\n * @param {Number=} data.second The second for this date\n * @param {Timezone|UtcOffset} zone The timezone to use\n * @param {String} icaltype The type for this date/time object\n */\n constructor(data, zone, icaltype) {\n super(data, zone);\n this.icaltype = icaltype || \"date-and-or-time\";\n }\n\n /**\n * The class identifier.\n * @constant\n * @type {String}\n * @default \"vcardtime\"\n */\n icalclass = \"vcardtime\";\n\n /**\n * The type name, to be used in the jCal object.\n * @type {String}\n * @default \"date-and-or-time\"\n */\n icaltype = \"date-and-or-time\";\n\n /**\n * Returns a clone of the vcard date/time object.\n *\n * @return {VCardTime} The cloned object\n */\n clone() {\n return new VCardTime(this._time, this.zone, this.icaltype);\n }\n\n _normalize() {\n return this;\n }\n\n /**\n * @inheritdoc\n */\n utcOffset() {\n if (this.zone instanceof UtcOffset) {\n return this.zone.toSeconds();\n } else {\n return Time.prototype.utcOffset.apply(this, arguments);\n }\n }\n\n /**\n * Returns an RFC 6350 compliant representation of this object.\n *\n * @return {String} vcard date/time string\n */\n toICALString() {\n return design$1.vcard.value[this.icaltype].toICAL(this.toString());\n }\n\n /**\n * The string representation of this date/time, in jCard form\n * (including : and - separators).\n * @return {String}\n */\n toString() {\n let y = this.year, m = this.month, d = this.day;\n let h = this.hour, mm = this.minute, s = this.second;\n\n let hasYear = y !== null, hasMonth = m !== null, hasDay = d !== null;\n let hasHour = h !== null, hasMinute = mm !== null, hasSecond = s !== null;\n\n let datepart = (hasYear ? pad2(y) + (hasMonth || hasDay ? '-' : '') : (hasMonth || hasDay ? '--' : '')) +\n (hasMonth ? pad2(m) : '') +\n (hasDay ? '-' + pad2(d) : '');\n let timepart = (hasHour ? pad2(h) : '-') + (hasHour && hasMinute ? ':' : '') +\n (hasMinute ? pad2(mm) : '') + (!hasHour && !hasMinute ? '-' : '') +\n (hasMinute && hasSecond ? ':' : '') +\n (hasSecond ? pad2(s) : '');\n\n let zone;\n if (this.zone === Timezone.utcTimezone) {\n zone = 'Z';\n } else if (this.zone instanceof UtcOffset) {\n zone = this.zone.toString();\n } else if (this.zone === Timezone.localTimezone) {\n zone = '';\n } else if (this.zone instanceof Timezone) {\n let offset = UtcOffset.fromSeconds(this.zone.utcOffset(this));\n zone = offset.toString();\n } else {\n zone = '';\n }\n\n switch (this.icaltype) {\n case \"time\":\n return timepart + zone;\n case \"date-and-or-time\":\n case \"date-time\":\n return datepart + (timepart == '--' ? '' : 'T' + timepart + zone);\n case \"date\":\n return datepart;\n }\n return null;\n }\n}\n\n/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n * Portions Copyright (C) Philipp Kewisch */\n\n/**\n * This lets typescript resolve our custom types in the\n * generated d.ts files (jsdoc typedefs are converted to typescript types).\n * Ignore prevents the typedefs from being documented more than once.\n *\n * @ignore\n * @typedef {import(\"./types.js\").weekDay} weekDay\n * Imports the 'weekDay' type from the \"types.js\" module\n */\n\n/**\n * An iterator for a single recurrence rule. This class usually doesn't have to be instanciated\n * directly, the convenience method {@link ICAL.Recur#iterator} can be used.\n *\n * @memberof ICAL\n */\nclass RecurIterator {\n static _indexMap = {\n \"BYSECOND\": 0,\n \"BYMINUTE\": 1,\n \"BYHOUR\": 2,\n \"BYDAY\": 3,\n \"BYMONTHDAY\": 4,\n \"BYYEARDAY\": 5,\n \"BYWEEKNO\": 6,\n \"BYMONTH\": 7,\n \"BYSETPOS\": 8\n };\n\n static _expandMap = {\n \"SECONDLY\": [1, 1, 1, 1, 1, 1, 1, 1],\n \"MINUTELY\": [2, 1, 1, 1, 1, 1, 1, 1],\n \"HOURLY\": [2, 2, 1, 1, 1, 1, 1, 1],\n \"DAILY\": [2, 2, 2, 1, 1, 1, 1, 1],\n \"WEEKLY\": [2, 2, 2, 2, 3, 3, 1, 1],\n \"MONTHLY\": [2, 2, 2, 2, 2, 3, 3, 1],\n \"YEARLY\": [2, 2, 2, 2, 2, 2, 2, 2]\n };\n\n static UNKNOWN = 0;\n static CONTRACT = 1;\n static EXPAND = 2;\n static ILLEGAL = 3;\n\n /**\n * Creates a new ICAL.RecurIterator instance. The options object may contain additional members\n * when resuming iteration from a previous run.\n *\n * @param {Object} options The iterator options\n * @param {Recur} options.rule The rule to iterate.\n * @param {Time} options.dtstart The start date of the event.\n * @param {Boolean=} options.initialized When true, assume that options are\n * from a previously constructed iterator. Initialization will not be\n * repeated.\n */\n constructor(options) {\n this.fromData(options);\n }\n\n /**\n * True when iteration is finished.\n * @type {Boolean}\n */\n completed = false;\n\n /**\n * The rule that is being iterated\n * @type {Recur}\n */\n rule = null;\n\n /**\n * The start date of the event being iterated.\n * @type {Time}\n */\n dtstart = null;\n\n /**\n * The last occurrence that was returned from the\n * {@link RecurIterator#next} method.\n * @type {Time}\n */\n last = null;\n\n /**\n * The sequence number from the occurrence\n * @type {Number}\n */\n occurrence_number = 0;\n\n /**\n * The indices used for the {@link ICAL.RecurIterator#by_data} object.\n * @type {Object}\n * @private\n */\n by_indices = null;\n\n /**\n * If true, the iterator has already been initialized\n * @type {Boolean}\n * @private\n */\n initialized = false;\n\n /**\n * The initializd by-data.\n * @type {Object}\n * @private\n */\n by_data = null;\n\n /**\n * The expanded yeardays\n * @type {Array}\n * @private\n */\n days = null;\n\n /**\n * The index in the {@link ICAL.RecurIterator#days} array.\n * @type {Number}\n * @private\n */\n days_index = 0;\n\n /**\n * Initialize the recurrence iterator from the passed data object. This\n * method is usually not called directly, you can initialize the iterator\n * through the constructor.\n *\n * @param {Object} options The iterator options\n * @param {Recur} options.rule The rule to iterate.\n * @param {Time} options.dtstart The start date of the event.\n * @param {Boolean=} options.initialized When true, assume that options are\n * from a previously constructed iterator. Initialization will not be\n * repeated.\n */\n fromData(options) {\n this.rule = formatClassType(options.rule, Recur);\n\n if (!this.rule) {\n throw new Error('iterator requires a (ICAL.Recur) rule');\n }\n\n this.dtstart = formatClassType(options.dtstart, Time);\n\n if (!this.dtstart) {\n throw new Error('iterator requires a (ICAL.Time) dtstart');\n }\n\n if (options.by_data) {\n this.by_data = options.by_data;\n } else {\n this.by_data = clone(this.rule.parts, true);\n }\n\n if (options.occurrence_number)\n this.occurrence_number = options.occurrence_number;\n\n this.days = options.days || [];\n if (options.last) {\n this.last = formatClassType(options.last, Time);\n }\n\n this.by_indices = options.by_indices;\n\n if (!this.by_indices) {\n this.by_indices = {\n \"BYSECOND\": 0,\n \"BYMINUTE\": 0,\n \"BYHOUR\": 0,\n \"BYDAY\": 0,\n \"BYMONTH\": 0,\n \"BYWEEKNO\": 0,\n \"BYMONTHDAY\": 0\n };\n }\n\n this.initialized = options.initialized || false;\n\n if (!this.initialized) {\n try {\n this.init();\n } catch (e) {\n if (e instanceof InvalidRecurrenceRuleError) {\n // Init may error if there are no possible recurrence instances from\n // the rule, but we don't want to bubble this error up. Instead, we\n // create an empty iterator.\n this.completed = true;\n } else {\n // Propagate other errors to consumers.\n throw e;\n }\n }\n }\n }\n\n /**\n * Initialize the iterator\n * @private\n */\n init() {\n this.initialized = true;\n this.last = this.dtstart.clone();\n let parts = this.by_data;\n\n if (\"BYDAY\" in parts) {\n // libical does this earlier when the rule is loaded, but we postpone to\n // now so we can preserve the original order.\n this.sort_byday_rules(parts.BYDAY);\n }\n\n // If the BYYEARDAY appares, no other date rule part may appear\n if (\"BYYEARDAY\" in parts) {\n if (\"BYMONTH\" in parts || \"BYWEEKNO\" in parts ||\n \"BYMONTHDAY\" in parts || \"BYDAY\" in parts) {\n throw new Error(\"Invalid BYYEARDAY rule\");\n }\n }\n\n // BYWEEKNO and BYMONTHDAY rule parts may not both appear\n if (\"BYWEEKNO\" in parts && \"BYMONTHDAY\" in parts) {\n throw new Error(\"BYWEEKNO does not fit to BYMONTHDAY\");\n }\n\n // For MONTHLY recurrences (FREQ=MONTHLY) neither BYYEARDAY nor\n // BYWEEKNO may appear.\n if (this.rule.freq == \"MONTHLY\" &&\n (\"BYYEARDAY\" in parts || \"BYWEEKNO\" in parts)) {\n throw new Error(\"For MONTHLY recurrences neither BYYEARDAY nor BYWEEKNO may appear\");\n }\n\n // For WEEKLY recurrences (FREQ=WEEKLY) neither BYMONTHDAY nor\n // BYYEARDAY may appear.\n if (this.rule.freq == \"WEEKLY\" &&\n (\"BYYEARDAY\" in parts || \"BYMONTHDAY\" in parts)) {\n throw new Error(\"For WEEKLY recurrences neither BYMONTHDAY nor BYYEARDAY may appear\");\n }\n\n // BYYEARDAY may only appear in YEARLY rules\n if (this.rule.freq != \"YEARLY\" && \"BYYEARDAY\" in parts) {\n throw new Error(\"BYYEARDAY may only appear in YEARLY rules\");\n }\n\n this.last.second = this.setup_defaults(\"BYSECOND\", \"SECONDLY\", this.dtstart.second);\n this.last.minute = this.setup_defaults(\"BYMINUTE\", \"MINUTELY\", this.dtstart.minute);\n this.last.hour = this.setup_defaults(\"BYHOUR\", \"HOURLY\", this.dtstart.hour);\n this.last.day = this.setup_defaults(\"BYMONTHDAY\", \"DAILY\", this.dtstart.day);\n this.last.month = this.setup_defaults(\"BYMONTH\", \"MONTHLY\", this.dtstart.month);\n\n if (this.rule.freq == \"WEEKLY\") {\n if (\"BYDAY\" in parts) {\n let [, dow] = this.ruleDayOfWeek(parts.BYDAY[0], this.rule.wkst);\n let wkdy = dow - this.last.dayOfWeek(this.rule.wkst);\n if ((this.last.dayOfWeek(this.rule.wkst) < dow && wkdy >= 0) || wkdy < 0) {\n // Initial time is after first day of BYDAY data\n this.last.day += wkdy;\n }\n } else {\n let dayName = Recur.numericDayToIcalDay(this.dtstart.dayOfWeek());\n parts.BYDAY = [dayName];\n }\n }\n\n if (this.rule.freq == \"YEARLY\") {\n // Some yearly recurrence rules may be specific enough to not actually\n // occur on a yearly basis, e.g. the 29th day of February or the fifth\n // Monday of a given month. The standard isn't clear on the intended\n // behavior in these cases, but `libical` at least will iterate until it\n // finds a matching year.\n // CAREFUL: Some rules may specify an occurrence that can never happen,\n // e.g. the first Monday of April so long as it falls on the 15th\n // through the 21st. Detecting these is non-trivial, so ensure that we\n // stop iterating at some point.\n const untilYear = this.rule.until ? this.rule.until.year : 20000;\n while (this.last.year <= untilYear) {\n this.expand_year_days(this.last.year);\n if (this.days.length > 0) {\n break;\n }\n this.increment_year(this.rule.interval);\n }\n\n if (this.days.length == 0) {\n throw new InvalidRecurrenceRuleError();\n }\n\n this._nextByYearDay();\n }\n\n if (this.rule.freq == \"MONTHLY\") {\n if (this.has_by_data(\"BYDAY\")) {\n let tempLast = null;\n let initLast = this.last.clone();\n let daysInMonth = Time.daysInMonth(this.last.month, this.last.year);\n\n // Check every weekday in BYDAY with relative dow and pos.\n for (let bydow of this.by_data.BYDAY) {\n this.last = initLast.clone();\n let [pos, dow] = this.ruleDayOfWeek(bydow);\n let dayOfMonth = this.last.nthWeekDay(dow, pos);\n\n // If |pos| >= 6, the byday is invalid for a monthly rule.\n if (pos >= 6 || pos <= -6) {\n throw new Error(\"Malformed values in BYDAY part\");\n }\n\n // If a Byday with pos=+/-5 is not in the current month it\n // must be searched in the next months.\n if (dayOfMonth > daysInMonth || dayOfMonth <= 0) {\n // Skip if we have already found a \"last\" in this month.\n if (tempLast && tempLast.month == initLast.month) {\n continue;\n }\n while (dayOfMonth > daysInMonth || dayOfMonth <= 0) {\n this.increment_month();\n daysInMonth = Time.daysInMonth(this.last.month, this.last.year);\n dayOfMonth = this.last.nthWeekDay(dow, pos);\n }\n }\n\n this.last.day = dayOfMonth;\n if (!tempLast || this.last.compare(tempLast) < 0) {\n tempLast = this.last.clone();\n }\n }\n this.last = tempLast.clone();\n\n //XXX: This feels like a hack, but we need to initialize\n // the BYMONTHDAY case correctly and byDayAndMonthDay handles\n // this case. It accepts a special flag which will avoid incrementing\n // the initial value without the flag days that match the start time\n // would be missed.\n if (this.has_by_data('BYMONTHDAY')) {\n this._byDayAndMonthDay(true);\n }\n\n if (this.last.day > daysInMonth || this.last.day == 0) {\n throw new Error(\"Malformed values in BYDAY part\");\n }\n } else if (this.has_by_data(\"BYMONTHDAY\")) {\n // Change the day value so that normalisation won't change the month.\n this.last.day = 1;\n\n // Get a sorted list of days in the starting month that match the rule.\n let normalized = this.normalizeByMonthDayRules(\n this.last.year,\n this.last.month,\n this.rule.parts.BYMONTHDAY\n ).filter(d => d >= this.last.day);\n\n if (normalized.length) {\n // There's at least one valid day, use it.\n this.last.day = normalized[0];\n this.by_data.BYMONTHDAY = normalized;\n } else {\n // There's no occurrence in this month, find the next valid month.\n // The longest possible sequence of skipped months is February-April-June,\n // so we might need to call next_month up to three times.\n if (!this.next_month() && !this.next_month() && !this.next_month()) {\n throw new Error(\"No possible occurrences\");\n }\n }\n }\n }\n }\n\n /**\n * Retrieve the next occurrence from the iterator.\n * @return {Time}\n */\n next(again = false) {\n let before = (this.last ? this.last.clone() : null);\n\n if ((this.rule.count && this.occurrence_number >= this.rule.count) ||\n (this.rule.until && this.last.compare(this.rule.until) > 0)) {\n this.completed = true;\n }\n\n if (this.completed) {\n return null;\n }\n\n if (this.occurrence_number == 0 && this.last.compare(this.dtstart) >= 0) {\n // First of all, give the instance that was initialized\n this.occurrence_number++;\n return this.last;\n }\n\n let valid;\n do {\n valid = 1;\n\n switch (this.rule.freq) {\n case \"SECONDLY\":\n this.next_second();\n break;\n case \"MINUTELY\":\n this.next_minute();\n break;\n case \"HOURLY\":\n this.next_hour();\n break;\n case \"DAILY\":\n this.next_day();\n break;\n case \"WEEKLY\":\n this.next_week();\n break;\n case \"MONTHLY\":\n valid = this.next_month();\n break;\n case \"YEARLY\":\n this.next_year();\n break;\n\n default:\n return null;\n }\n } while (!this.check_contracting_rules() ||\n this.last.compare(this.dtstart) < 0 ||\n !valid);\n\n if (this.last.compare(before) == 0) {\n if (again) {\n throw new Error(\"Same occurrence found twice, protecting you from death by recursion\");\n }\n this.next(true);\n }\n\n if (this.rule.until && this.last.compare(this.rule.until) > 0) {\n this.completed = true;\n return null;\n } else {\n this.occurrence_number++;\n return this.last;\n }\n }\n\n next_second() {\n return this.next_generic(\"BYSECOND\", \"SECONDLY\", \"second\", \"minute\");\n }\n\n increment_second(inc) {\n return this.increment_generic(inc, \"second\", 60, \"minute\");\n }\n\n next_minute() {\n return this.next_generic(\"BYMINUTE\", \"MINUTELY\",\n \"minute\", \"hour\", \"next_second\");\n }\n\n increment_minute(inc) {\n return this.increment_generic(inc, \"minute\", 60, \"hour\");\n }\n\n next_hour() {\n return this.next_generic(\"BYHOUR\", \"HOURLY\", \"hour\",\n \"monthday\", \"next_minute\");\n }\n\n increment_hour(inc) {\n this.increment_generic(inc, \"hour\", 24, \"monthday\");\n }\n\n next_day() {\n let this_freq = (this.rule.freq == \"DAILY\");\n\n if (this.next_hour() == 0) {\n return 0;\n }\n\n if (this_freq) {\n this.increment_monthday(this.rule.interval);\n } else {\n this.increment_monthday(1);\n }\n\n return 0;\n }\n\n next_week() {\n let end_of_data = 0;\n\n if (this.next_weekday_by_week() == 0) {\n return end_of_data;\n }\n\n if (this.has_by_data(\"BYWEEKNO\")) {\n this.by_indices.BYWEEKNO++;\n\n if (this.by_indices.BYWEEKNO == this.by_data.BYWEEKNO.length) {\n this.by_indices.BYWEEKNO = 0;\n end_of_data = 1;\n }\n\n // HACK should be first month of the year\n this.last.month = 1;\n this.last.day = 1;\n\n let week_no = this.by_data.BYWEEKNO[this.by_indices.BYWEEKNO];\n\n this.last.day += 7 * week_no;\n\n if (end_of_data) {\n this.increment_year(1);\n }\n } else {\n // Jump to the next week\n this.increment_monthday(7 * this.rule.interval);\n }\n\n return end_of_data;\n }\n\n /**\n * Normalize each by day rule for a given year/month.\n * Takes into account ordering and negative rules\n *\n * @private\n * @param {Number} year Current year.\n * @param {Number} month Current month.\n * @param {Array} rules Array of rules.\n *\n * @return {Array} sorted and normalized rules.\n * Negative rules will be expanded to their\n * correct positive values for easier processing.\n */\n normalizeByMonthDayRules(year, month, rules) {\n let daysInMonth = Time.daysInMonth(month, year);\n\n // XXX: This is probably bad for performance to allocate\n // a new array for each month we scan, if possible\n // we should try to optimize this...\n let newRules = [];\n\n let ruleIdx = 0;\n let len = rules.length;\n let rule;\n\n for (; ruleIdx < len; ruleIdx++) {\n rule = parseInt(rules[ruleIdx], 10);\n if (isNaN(rule)) {\n throw new Error('Invalid BYMONTHDAY value');\n }\n\n // if this rule falls outside of given\n // month discard it.\n if (Math.abs(rule) > daysInMonth) {\n continue;\n }\n\n // negative case\n if (rule < 0) {\n // we add (not subtract it is a negative number)\n // one from the rule because 1 === last day of month\n rule = daysInMonth + (rule + 1);\n } else if (rule === 0) {\n // skip zero: it is invalid.\n continue;\n }\n\n // only add unique items...\n if (newRules.indexOf(rule) === -1) {\n newRules.push(rule);\n }\n\n }\n\n // unique and sort\n return newRules.sort(function(a, b) { return a - b; });\n }\n\n /**\n * NOTES:\n * We are given a list of dates in the month (BYMONTHDAY) (23, etc..)\n * Also we are given a list of days (BYDAY) (MO, 2SU, etc..) when\n * both conditions match a given date (this.last.day) iteration stops.\n *\n * @private\n * @param {Boolean=} isInit When given true will not increment the\n * current day (this.last).\n */\n _byDayAndMonthDay(isInit) {\n let byMonthDay; // setup in initMonth\n let byDay = this.by_data.BYDAY;\n\n let date;\n let dateIdx = 0;\n let dateLen; // setup in initMonth\n let dayLen = byDay.length;\n\n // we are not valid by default\n let dataIsValid = 0;\n\n let daysInMonth;\n let self = this;\n // we need a copy of this, because a DateTime gets normalized\n // automatically if the day is out of range. At some points we\n // set the last day to 0 to start counting.\n let lastDay = this.last.day;\n\n function initMonth() {\n daysInMonth = Time.daysInMonth(\n self.last.month, self.last.year\n );\n\n byMonthDay = self.normalizeByMonthDayRules(\n self.last.year,\n self.last.month,\n self.by_data.BYMONTHDAY\n );\n\n dateLen = byMonthDay.length;\n\n // For the case of more than one occurrence in one month\n // we have to be sure to start searching after the last\n // found date or at the last BYMONTHDAY, unless we are\n // initializing the iterator because in this case we have\n // to consider the last found date too.\n while (byMonthDay[dateIdx] <= lastDay &&\n !(isInit && byMonthDay[dateIdx] == lastDay) &&\n dateIdx < dateLen - 1) {\n dateIdx++;\n }\n }\n\n function nextMonth() {\n // since the day is incremented at the start\n // of the loop below, we need to start at 0\n lastDay = 0;\n self.increment_month();\n dateIdx = 0;\n initMonth();\n }\n\n initMonth();\n\n // should come after initMonth\n if (isInit) {\n lastDay -= 1;\n }\n\n // Use a counter to avoid an infinite loop with malformed rules.\n // Stop checking after 4 years so we consider also a leap year.\n let monthsCounter = 48;\n\n while (!dataIsValid && monthsCounter) {\n monthsCounter--;\n // increment the current date. This is really\n // important otherwise we may fall into the infinite\n // loop trap. The initial date takes care of the case\n // where the current date is the date we are looking\n // for.\n date = lastDay + 1;\n\n if (date > daysInMonth) {\n nextMonth();\n continue;\n }\n\n // find next date\n let next = byMonthDay[dateIdx++];\n\n // this logic is dependent on the BYMONTHDAYS\n // being in order (which is done by #normalizeByMonthDayRules)\n if (next >= date) {\n // if the next month day is in the future jump to it.\n lastDay = next;\n } else {\n // in this case the 'next' monthday has past\n // we must move to the month.\n nextMonth();\n continue;\n }\n\n // Now we can loop through the day rules to see\n // if one matches the current month date.\n for (let dayIdx = 0; dayIdx < dayLen; dayIdx++) {\n let parts = this.ruleDayOfWeek(byDay[dayIdx]);\n let pos = parts[0];\n let dow = parts[1];\n\n this.last.day = lastDay;\n if (this.last.isNthWeekDay(dow, pos)) {\n // when we find the valid one we can mark\n // the conditions as met and break the loop.\n // (Because we have this condition above\n // it will also break the parent loop).\n dataIsValid = 1;\n break;\n }\n }\n\n // It is completely possible that the combination\n // cannot be matched in the current month.\n // When we reach the end of possible combinations\n // in the current month we iterate to the next one.\n // since dateIdx is incremented right after getting\n // \"next\", we don't need dateLen -1 here.\n if (!dataIsValid && dateIdx === dateLen) {\n nextMonth();\n continue;\n }\n }\n\n if (monthsCounter <= 0) {\n // Checked 4 years without finding a Byday that matches\n // a Bymonthday. Maybe the rule is not correct.\n throw new Error(\"Malformed values in BYDAY combined with BYMONTHDAY parts\");\n }\n\n\n return dataIsValid;\n }\n\n next_month() {\n let data_valid = 1;\n\n if (this.next_hour() == 0) {\n return data_valid;\n }\n\n if (this.has_by_data(\"BYDAY\") && this.has_by_data(\"BYMONTHDAY\")) {\n data_valid = this._byDayAndMonthDay();\n } else if (this.has_by_data(\"BYDAY\")) {\n let daysInMonth = Time.daysInMonth(this.last.month, this.last.year);\n let setpos = 0;\n let setpos_total = 0;\n\n if (this.has_by_data(\"BYSETPOS\")) {\n let last_day = this.last.day;\n for (let day = 1; day <= daysInMonth; day++) {\n this.last.day = day;\n if (this.is_day_in_byday(this.last)) {\n setpos_total++;\n if (day <= last_day) {\n setpos++;\n }\n }\n }\n this.last.day = last_day;\n }\n\n data_valid = 0;\n let day;\n for (day = this.last.day + 1; day <= daysInMonth; day++) {\n this.last.day = day;\n\n if (this.is_day_in_byday(this.last)) {\n if (!this.has_by_data(\"BYSETPOS\") ||\n this.check_set_position(++setpos) ||\n this.check_set_position(setpos - setpos_total - 1)) {\n\n data_valid = 1;\n break;\n }\n }\n }\n\n if (day > daysInMonth) {\n this.last.day = 1;\n this.increment_month();\n\n if (this.is_day_in_byday(this.last)) {\n if (!this.has_by_data(\"BYSETPOS\") || this.check_set_position(1)) {\n data_valid = 1;\n }\n } else {\n data_valid = 0;\n }\n }\n } else if (this.has_by_data(\"BYMONTHDAY\")) {\n this.by_indices.BYMONTHDAY++;\n\n if (this.by_indices.BYMONTHDAY >= this.by_data.BYMONTHDAY.length) {\n this.by_indices.BYMONTHDAY = 0;\n this.increment_month();\n if (this.by_indices.BYMONTHDAY >= this.by_data.BYMONTHDAY.length) {\n return 0;\n }\n }\n\n let daysInMonth = Time.daysInMonth(this.last.month, this.last.year);\n let day = this.by_data.BYMONTHDAY[this.by_indices.BYMONTHDAY];\n\n if (day < 0) {\n day = daysInMonth + day + 1;\n }\n\n if (day > daysInMonth) {\n this.last.day = 1;\n data_valid = this.is_day_in_byday(this.last);\n } else {\n this.last.day = day;\n }\n } else {\n this.increment_month();\n let daysInMonth = Time.daysInMonth(this.last.month, this.last.year);\n if (this.by_data.BYMONTHDAY[0] > daysInMonth) {\n data_valid = 0;\n } else {\n this.last.day = this.by_data.BYMONTHDAY[0];\n }\n }\n\n return data_valid;\n }\n\n next_weekday_by_week() {\n let end_of_data = 0;\n\n if (this.next_hour() == 0) {\n return end_of_data;\n }\n\n if (!this.has_by_data(\"BYDAY\")) {\n return 1;\n }\n\n for (;;) {\n let tt = new Time();\n this.by_indices.BYDAY++;\n\n if (this.by_indices.BYDAY == Object.keys(this.by_data.BYDAY).length) {\n this.by_indices.BYDAY = 0;\n end_of_data = 1;\n }\n\n let coded_day = this.by_data.BYDAY[this.by_indices.BYDAY];\n let parts = this.ruleDayOfWeek(coded_day);\n let dow = parts[1];\n\n dow -= this.rule.wkst;\n\n if (dow < 0) {\n dow += 7;\n }\n\n tt.year = this.last.year;\n tt.month = this.last.month;\n tt.day = this.last.day;\n\n let startOfWeek = tt.startDoyWeek(this.rule.wkst);\n\n if (dow + startOfWeek < 1) {\n // The selected date is in the previous year\n if (!end_of_data) {\n continue;\n }\n }\n\n let next = Time.fromDayOfYear(startOfWeek + dow, this.last.year);\n\n /**\n * The normalization horrors below are due to\n * the fact that when the year/month/day changes\n * it can effect the other operations that come after.\n */\n this.last.year = next.year;\n this.last.month = next.month;\n this.last.day = next.day;\n\n return end_of_data;\n }\n }\n\n next_year() {\n if (this.next_hour() == 0) {\n return 0;\n }\n\n if (++this.days_index == this.days.length) {\n this.days_index = 0;\n do {\n this.increment_year(this.rule.interval);\n if (this.has_by_data(\"BYMONTHDAY\")) {\n this.by_data.BYMONTHDAY = this.normalizeByMonthDayRules(\n this.last.year,\n this.last.month,\n this.rule.parts.BYMONTHDAY\n );\n }\n this.expand_year_days(this.last.year);\n } while (this.days.length == 0);\n }\n\n this._nextByYearDay();\n\n return 1;\n }\n\n _nextByYearDay() {\n let doy = this.days[this.days_index];\n let year = this.last.year;\n if (doy < 1) {\n // Time.fromDayOfYear(doy, year) indexes relative to the\n // start of the given year. That is different from the\n // semantics of BYYEARDAY where negative indexes are an\n // offset from the end of the given year.\n doy += 1;\n year += 1;\n }\n let next = Time.fromDayOfYear(doy, year);\n this.last.day = next.day;\n this.last.month = next.month;\n }\n\n /**\n * @param dow (eg: '1TU', '-1MO')\n * @param {weekDay=} aWeekStart The week start weekday\n * @return [pos, numericDow] (eg: [1, 3]) numericDow is relative to aWeekStart\n */\n ruleDayOfWeek(dow, aWeekStart) {\n let matches = dow.match(/([+-]?[0-9])?(MO|TU|WE|TH|FR|SA|SU)/);\n if (matches) {\n let pos = parseInt(matches[1] || 0, 10);\n dow = Recur.icalDayToNumericDay(matches[2], aWeekStart);\n return [pos, dow];\n } else {\n return [0, 0];\n }\n }\n\n next_generic(aRuleType, aInterval, aDateAttr, aFollowingAttr, aPreviousIncr) {\n let has_by_rule = (aRuleType in this.by_data);\n let this_freq = (this.rule.freq == aInterval);\n let end_of_data = 0;\n\n if (aPreviousIncr && this[aPreviousIncr]() == 0) {\n return end_of_data;\n }\n\n if (has_by_rule) {\n this.by_indices[aRuleType]++;\n let dta = this.by_data[aRuleType];\n\n if (this.by_indices[aRuleType] == dta.length) {\n this.by_indices[aRuleType] = 0;\n end_of_data = 1;\n }\n this.last[aDateAttr] = dta[this.by_indices[aRuleType]];\n } else if (this_freq) {\n this[\"increment_\" + aDateAttr](this.rule.interval);\n }\n\n if (has_by_rule && end_of_data && this_freq) {\n this[\"increment_\" + aFollowingAttr](1);\n }\n\n return end_of_data;\n }\n\n increment_monthday(inc) {\n for (let i = 0; i < inc; i++) {\n let daysInMonth = Time.daysInMonth(this.last.month, this.last.year);\n this.last.day++;\n\n if (this.last.day > daysInMonth) {\n this.last.day -= daysInMonth;\n this.increment_month();\n }\n }\n }\n\n increment_month() {\n this.last.day = 1;\n if (this.has_by_data(\"BYMONTH\")) {\n this.by_indices.BYMONTH++;\n\n if (this.by_indices.BYMONTH == this.by_data.BYMONTH.length) {\n this.by_indices.BYMONTH = 0;\n this.increment_year(1);\n }\n\n this.last.month = this.by_data.BYMONTH[this.by_indices.BYMONTH];\n } else {\n if (this.rule.freq == \"MONTHLY\") {\n this.last.month += this.rule.interval;\n } else {\n this.last.month++;\n }\n\n this.last.month--;\n let years = trunc(this.last.month / 12);\n this.last.month %= 12;\n this.last.month++;\n\n if (years != 0) {\n this.increment_year(years);\n }\n }\n\n if (this.has_by_data(\"BYMONTHDAY\")) {\n this.by_data.BYMONTHDAY = this.normalizeByMonthDayRules(\n this.last.year,\n this.last.month,\n this.rule.parts.BYMONTHDAY\n );\n }\n }\n\n increment_year(inc) {\n // Don't jump into the next month if this.last is Feb 29.\n this.last.day = 1;\n this.last.year += inc;\n }\n\n increment_generic(inc, aDateAttr, aFactor, aNextIncrement) {\n this.last[aDateAttr] += inc;\n let nextunit = trunc(this.last[aDateAttr] / aFactor);\n this.last[aDateAttr] %= aFactor;\n if (nextunit != 0) {\n this[\"increment_\" + aNextIncrement](nextunit);\n }\n }\n\n has_by_data(aRuleType) {\n return (aRuleType in this.rule.parts);\n }\n\n expand_year_days(aYear) {\n let t = new Time();\n this.days = [];\n\n // We need our own copy with a few keys set\n let parts = {};\n let rules = [\"BYDAY\", \"BYWEEKNO\", \"BYMONTHDAY\", \"BYMONTH\", \"BYYEARDAY\"];\n for (let part of rules) {\n if (part in this.rule.parts) {\n parts[part] = this.rule.parts[part];\n }\n }\n\n if (\"BYMONTH\" in parts && \"BYWEEKNO\" in parts) {\n let valid = 1;\n let validWeeks = {};\n t.year = aYear;\n t.isDate = true;\n\n for (let monthIdx = 0; monthIdx < this.by_data.BYMONTH.length; monthIdx++) {\n let month = this.by_data.BYMONTH[monthIdx];\n t.month = month;\n t.day = 1;\n let first_week = t.weekNumber(this.rule.wkst);\n t.day = Time.daysInMonth(month, aYear);\n let last_week = t.weekNumber(this.rule.wkst);\n for (monthIdx = first_week; monthIdx < last_week; monthIdx++) {\n validWeeks[monthIdx] = 1;\n }\n }\n\n for (let weekIdx = 0; weekIdx < this.by_data.BYWEEKNO.length && valid; weekIdx++) {\n let weekno = this.by_data.BYWEEKNO[weekIdx];\n if (weekno < 52) {\n valid &= validWeeks[weekIdx];\n } else {\n valid = 0;\n }\n }\n\n if (valid) {\n delete parts.BYMONTH;\n } else {\n delete parts.BYWEEKNO;\n }\n }\n\n let partCount = Object.keys(parts).length;\n\n if (partCount == 0) {\n let t1 = this.dtstart.clone();\n t1.year = this.last.year;\n this.days.push(t1.dayOfYear());\n } else if (partCount == 1 && \"BYMONTH\" in parts) {\n for (let month of this.by_data.BYMONTH) {\n let t2 = this.dtstart.clone();\n t2.year = aYear;\n t2.month = month;\n t2.isDate = true;\n this.days.push(t2.dayOfYear());\n }\n } else if (partCount == 1 && \"BYMONTHDAY\" in parts) {\n for (let monthday of this.by_data.BYMONTHDAY) {\n let t3 = this.dtstart.clone();\n if (monthday < 0) {\n let daysInMonth = Time.daysInMonth(t3.month, aYear);\n monthday = monthday + daysInMonth + 1;\n }\n t3.day = monthday;\n t3.year = aYear;\n t3.isDate = true;\n this.days.push(t3.dayOfYear());\n }\n } else if (partCount == 2 &&\n \"BYMONTHDAY\" in parts &&\n \"BYMONTH\" in parts) {\n for (let month of this.by_data.BYMONTH) {\n let daysInMonth = Time.daysInMonth(month, aYear);\n for (let monthday of this.by_data.BYMONTHDAY) {\n if (monthday < 0) {\n monthday = monthday + daysInMonth + 1;\n }\n t.day = monthday;\n t.month = month;\n t.year = aYear;\n t.isDate = true;\n\n this.days.push(t.dayOfYear());\n }\n }\n } else if (partCount == 1 && \"BYWEEKNO\" in parts) ; else if (partCount == 2 &&\n \"BYWEEKNO\" in parts &&\n \"BYMONTHDAY\" in parts) ; else if (partCount == 1 && \"BYDAY\" in parts) {\n this.days = this.days.concat(this.expand_by_day(aYear));\n } else if (partCount == 2 && \"BYDAY\" in parts && \"BYMONTH\" in parts) {\n for (let month of this.by_data.BYMONTH) {\n let daysInMonth = Time.daysInMonth(month, aYear);\n\n t.year = aYear;\n t.month = month;\n t.day = 1;\n t.isDate = true;\n\n let first_dow = t.dayOfWeek();\n let doy_offset = t.dayOfYear() - 1;\n\n t.day = daysInMonth;\n let last_dow = t.dayOfWeek();\n\n if (this.has_by_data(\"BYSETPOS\")) {\n let by_month_day = [];\n for (let day = 1; day <= daysInMonth; day++) {\n t.day = day;\n if (this.is_day_in_byday(t)) {\n by_month_day.push(day);\n }\n }\n\n for (let spIndex = 0; spIndex < by_month_day.length; spIndex++) {\n if (this.check_set_position(spIndex + 1) ||\n this.check_set_position(spIndex - by_month_day.length)) {\n this.days.push(doy_offset + by_month_day[spIndex]);\n }\n }\n } else {\n for (let coded_day of this.by_data.BYDAY) {\n let bydayParts = this.ruleDayOfWeek(coded_day);\n let pos = bydayParts[0];\n let dow = bydayParts[1];\n let month_day;\n\n let first_matching_day = ((dow + 7 - first_dow) % 7) + 1;\n let last_matching_day = daysInMonth - ((last_dow + 7 - dow) % 7);\n\n if (pos == 0) {\n for (let day = first_matching_day; day <= daysInMonth; day += 7) {\n this.days.push(doy_offset + day);\n }\n } else if (pos > 0) {\n month_day = first_matching_day + (pos - 1) * 7;\n\n if (month_day <= daysInMonth) {\n this.days.push(doy_offset + month_day);\n }\n } else {\n month_day = last_matching_day + (pos + 1) * 7;\n\n if (month_day > 0) {\n this.days.push(doy_offset + month_day);\n }\n }\n }\n }\n }\n // Return dates in order of occurrence (1,2,3,...) instead\n // of by groups of weekdays (1,8,15,...,2,9,16,...).\n this.days.sort(function(a, b) { return a - b; }); // Comparator function allows to sort numbers.\n } else if (partCount == 2 && \"BYDAY\" in parts && \"BYMONTHDAY\" in parts) {\n let expandedDays = this.expand_by_day(aYear);\n\n for (let day of expandedDays) {\n let tt = Time.fromDayOfYear(day, aYear);\n if (this.by_data.BYMONTHDAY.indexOf(tt.day) >= 0) {\n this.days.push(day);\n }\n }\n } else if (partCount == 3 &&\n \"BYDAY\" in parts &&\n \"BYMONTHDAY\" in parts &&\n \"BYMONTH\" in parts) {\n let expandedDays = this.expand_by_day(aYear);\n\n for (let day of expandedDays) {\n let tt = Time.fromDayOfYear(day, aYear);\n\n if (this.by_data.BYMONTH.indexOf(tt.month) >= 0 &&\n this.by_data.BYMONTHDAY.indexOf(tt.day) >= 0) {\n this.days.push(day);\n }\n }\n } else if (partCount == 2 && \"BYDAY\" in parts && \"BYWEEKNO\" in parts) {\n let expandedDays = this.expand_by_day(aYear);\n\n for (let day of expandedDays) {\n let tt = Time.fromDayOfYear(day, aYear);\n let weekno = tt.weekNumber(this.rule.wkst);\n\n if (this.by_data.BYWEEKNO.indexOf(weekno)) {\n this.days.push(day);\n }\n }\n } else if (partCount == 3 &&\n \"BYDAY\" in parts &&\n \"BYWEEKNO\" in parts &&\n \"BYMONTHDAY\" in parts) ; else if (partCount == 1 && \"BYYEARDAY\" in parts) {\n this.days = this.days.concat(this.by_data.BYYEARDAY);\n } else {\n this.days = [];\n }\n\n let daysInYear = Time.isLeapYear(aYear) ? 366 : 365;\n this.days.sort((a, b) => {\n if (a < 0) a += daysInYear + 1;\n if (b < 0) b += daysInYear + 1;\n return a - b;\n });\n\n return 0;\n }\n\n expand_by_day(aYear) {\n\n let days_list = [];\n let tmp = this.last.clone();\n\n tmp.year = aYear;\n tmp.month = 1;\n tmp.day = 1;\n tmp.isDate = true;\n\n let start_dow = tmp.dayOfWeek();\n\n tmp.month = 12;\n tmp.day = 31;\n tmp.isDate = true;\n\n let end_dow = tmp.dayOfWeek();\n let end_year_day = tmp.dayOfYear();\n\n for (let day of this.by_data.BYDAY) {\n let parts = this.ruleDayOfWeek(day);\n let pos = parts[0];\n let dow = parts[1];\n\n if (pos == 0) {\n let tmp_start_doy = ((dow + 7 - start_dow) % 7) + 1;\n\n for (let doy = tmp_start_doy; doy <= end_year_day; doy += 7) {\n days_list.push(doy);\n }\n\n } else if (pos > 0) {\n let first;\n if (dow >= start_dow) {\n first = dow - start_dow + 1;\n } else {\n first = dow - start_dow + 8;\n }\n\n days_list.push(first + (pos - 1) * 7);\n } else {\n let last;\n pos = -pos;\n\n if (dow <= end_dow) {\n last = end_year_day - end_dow + dow;\n } else {\n last = end_year_day - end_dow + dow - 7;\n }\n\n days_list.push(last - (pos - 1) * 7);\n }\n }\n return days_list;\n }\n\n is_day_in_byday(tt) {\n if (this.by_data.BYDAY) {\n for (let day of this.by_data.BYDAY) {\n let parts = this.ruleDayOfWeek(day);\n let pos = parts[0];\n let dow = parts[1];\n let this_dow = tt.dayOfWeek();\n\n if ((pos == 0 && dow == this_dow) ||\n (tt.nthWeekDay(dow, pos) == tt.day)) {\n return 1;\n }\n }\n }\n\n return 0;\n }\n\n /**\n * Checks if given value is in BYSETPOS.\n *\n * @private\n * @param {Numeric} aPos position to check for.\n * @return {Boolean} false unless BYSETPOS rules exist\n * and the given value is present in rules.\n */\n check_set_position(aPos) {\n if (this.has_by_data('BYSETPOS')) {\n let idx = this.by_data.BYSETPOS.indexOf(aPos);\n // negative numbers are not false-y\n return idx !== -1;\n }\n return false;\n }\n\n sort_byday_rules(aRules) {\n for (let i = 0; i < aRules.length; i++) {\n for (let j = 0; j < i; j++) {\n let one = this.ruleDayOfWeek(aRules[j], this.rule.wkst)[1];\n let two = this.ruleDayOfWeek(aRules[i], this.rule.wkst)[1];\n\n if (one > two) {\n let tmp = aRules[i];\n aRules[i] = aRules[j];\n aRules[j] = tmp;\n }\n }\n }\n }\n\n check_contract_restriction(aRuleType, v) {\n let indexMapValue = RecurIterator._indexMap[aRuleType];\n let ruleMapValue = RecurIterator._expandMap[this.rule.freq][indexMapValue];\n let pass = false;\n\n if (aRuleType in this.by_data &&\n ruleMapValue == RecurIterator.CONTRACT) {\n\n let ruleType = this.by_data[aRuleType];\n\n for (let bydata of ruleType) {\n if (bydata == v) {\n pass = true;\n break;\n }\n }\n } else {\n // Not a contracting byrule or has no data, test passes\n pass = true;\n }\n return pass;\n }\n\n check_contracting_rules() {\n let dow = this.last.dayOfWeek();\n let weekNo = this.last.weekNumber(this.rule.wkst);\n let doy = this.last.dayOfYear();\n\n return (this.check_contract_restriction(\"BYSECOND\", this.last.second) &&\n this.check_contract_restriction(\"BYMINUTE\", this.last.minute) &&\n this.check_contract_restriction(\"BYHOUR\", this.last.hour) &&\n this.check_contract_restriction(\"BYDAY\", Recur.numericDayToIcalDay(dow)) &&\n this.check_contract_restriction(\"BYWEEKNO\", weekNo) &&\n this.check_contract_restriction(\"BYMONTHDAY\", this.last.day) &&\n this.check_contract_restriction(\"BYMONTH\", this.last.month) &&\n this.check_contract_restriction(\"BYYEARDAY\", doy));\n }\n\n setup_defaults(aRuleType, req, deftime) {\n let indexMapValue = RecurIterator._indexMap[aRuleType];\n let ruleMapValue = RecurIterator._expandMap[this.rule.freq][indexMapValue];\n\n if (ruleMapValue != RecurIterator.CONTRACT) {\n if (!(aRuleType in this.by_data)) {\n this.by_data[aRuleType] = [deftime];\n }\n if (this.rule.freq != req) {\n return this.by_data[aRuleType][0];\n }\n }\n return deftime;\n }\n\n /**\n * Convert iterator into a serialize-able object. Will preserve current\n * iteration sequence to ensure the seamless continuation of the recurrence\n * rule.\n * @return {Object}\n */\n toJSON() {\n let result = Object.create(null);\n\n result.initialized = this.initialized;\n result.rule = this.rule.toJSON();\n result.dtstart = this.dtstart.toJSON();\n result.by_data = this.by_data;\n result.days = this.days;\n result.last = this.last.toJSON();\n result.by_indices = this.by_indices;\n result.occurrence_number = this.occurrence_number;\n\n return result;\n }\n}\n\n/**\n * An error indicating that a recurrence rule is invalid and produces no\n * occurrences.\n *\n * @extends {Error}\n * @class\n */\nclass InvalidRecurrenceRuleError extends Error {\n constructor() {\n super(\"Recurrence rule has no valid occurrences\");\n }\n}\n\n/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n * Portions Copyright (C) Philipp Kewisch */\n\n/**\n * This lets typescript resolve our custom types in the\n * generated d.ts files (jsdoc typedefs are converted to typescript types).\n * Ignore prevents the typedefs from being documented more than once.\n *\n * @ignore\n * @typedef {import(\"./types.js\").weekDay} weekDay\n * Imports the 'weekDay' type from the \"types.js\" module\n * @typedef {import(\"./types.js\").frequencyValues} frequencyValues\n * Imports the 'frequencyValues' type from the \"types.js\" module\n */\n\nconst VALID_DAY_NAMES = /^(SU|MO|TU|WE|TH|FR|SA)$/;\nconst VALID_BYDAY_PART = /^([+-])?(5[0-3]|[1-4][0-9]|[1-9])?(SU|MO|TU|WE|TH|FR|SA)$/;\nconst DOW_MAP = {\n SU: Time.SUNDAY,\n MO: Time.MONDAY,\n TU: Time.TUESDAY,\n WE: Time.WEDNESDAY,\n TH: Time.THURSDAY,\n FR: Time.FRIDAY,\n SA: Time.SATURDAY\n};\n\nconst REVERSE_DOW_MAP = Object.fromEntries(Object.entries(DOW_MAP).map(entry => entry.reverse()));\n\nconst ALLOWED_FREQ = ['SECONDLY', 'MINUTELY', 'HOURLY',\n 'DAILY', 'WEEKLY', 'MONTHLY', 'YEARLY'];\n\n/**\n * This class represents the \"recur\" value type, used for example by RRULE. It provides methods to\n * calculate occurrences among others.\n *\n * @memberof ICAL\n */\nclass Recur {\n /**\n * Creates a new {@link ICAL.Recur} instance from the passed string.\n *\n * @param {String} string The string to parse\n * @return {Recur} The created recurrence instance\n */\n static fromString(string) {\n let data = this._stringToData(string, false);\n return new Recur(data);\n }\n\n /**\n * Creates a new {@link ICAL.Recur} instance using members from the passed\n * data object.\n *\n * @param {Object} aData An object with members of the recurrence\n * @param {frequencyValues=} aData.freq The frequency value\n * @param {Number=} aData.interval The INTERVAL value\n * @param {weekDay=} aData.wkst The week start value\n * @param {Time=} aData.until The end of the recurrence set\n * @param {Number=} aData.count The number of occurrences\n * @param {Array.<Number>=} aData.bysecond The seconds for the BYSECOND part\n * @param {Array.<Number>=} aData.byminute The minutes for the BYMINUTE part\n * @param {Array.<Number>=} aData.byhour The hours for the BYHOUR part\n * @param {Array.<String>=} aData.byday The BYDAY values\n * @param {Array.<Number>=} aData.bymonthday The days for the BYMONTHDAY part\n * @param {Array.<Number>=} aData.byyearday The days for the BYYEARDAY part\n * @param {Array.<Number>=} aData.byweekno The weeks for the BYWEEKNO part\n * @param {Array.<Number>=} aData.bymonth The month for the BYMONTH part\n * @param {Array.<Number>=} aData.bysetpos The positionals for the BYSETPOS part\n */\n static fromData(aData) {\n return new Recur(aData);\n }\n\n /**\n * Converts a recurrence string to a data object, suitable for the fromData\n * method.\n *\n * @private\n * @param {String} string The string to parse\n * @param {Boolean} fmtIcal If true, the string is considered to be an\n * iCalendar string\n * @return {Recur} The recurrence instance\n */\n static _stringToData(string, fmtIcal) {\n let dict = Object.create(null);\n\n // split is slower in FF but fast enough.\n // v8 however this is faster then manual split?\n let values = string.split(';');\n let len = values.length;\n\n for (let i = 0; i < len; i++) {\n let parts = values[i].split('=');\n let ucname = parts[0].toUpperCase();\n let lcname = parts[0].toLowerCase();\n let name = (fmtIcal ? lcname : ucname);\n let value = parts[1];\n\n if (ucname in partDesign) {\n let partArr = value.split(',');\n let partSet = new Set();\n\n for (let part of partArr) {\n partSet.add(partDesign[ucname](part));\n }\n partArr = [...partSet];\n\n dict[name] = (partArr.length == 1 ? partArr[0] : partArr);\n } else if (ucname in optionDesign) {\n optionDesign[ucname](value, dict, fmtIcal);\n } else {\n // Don't swallow unknown values. Just set them as they are.\n dict[lcname] = value;\n }\n }\n\n return dict;\n }\n\n /**\n * Convert an ical representation of a day (SU, MO, etc..)\n * into a numeric value of that day.\n *\n * @param {String} string The iCalendar day name\n * @param {weekDay=} aWeekStart\n * The week start weekday, defaults to SUNDAY\n * @return {Number} Numeric value of given day\n */\n static icalDayToNumericDay(string, aWeekStart) {\n //XXX: this is here so we can deal\n // with possibly invalid string values.\n let firstDow = aWeekStart || Time.SUNDAY;\n return ((DOW_MAP[string] - firstDow + 7) % 7) + 1;\n }\n\n /**\n * Convert a numeric day value into its ical representation (SU, MO, etc..)\n *\n * @param {Number} num Numeric value of given day\n * @param {weekDay=} aWeekStart\n * The week start weekday, defaults to SUNDAY\n * @return {String} The ICAL day value, e.g SU,MO,...\n */\n static numericDayToIcalDay(num, aWeekStart) {\n //XXX: this is here so we can deal with possibly invalid number values.\n // Also, this allows consistent mapping between day numbers and day\n // names for external users.\n let firstDow = aWeekStart || Time.SUNDAY;\n let dow = (num + firstDow - Time.SUNDAY);\n if (dow > 7) {\n dow -= 7;\n }\n return REVERSE_DOW_MAP[dow];\n }\n\n /**\n * Create a new instance of the Recur class.\n *\n * @param {Object} data An object with members of the recurrence\n * @param {frequencyValues=} data.freq The frequency value\n * @param {Number=} data.interval The INTERVAL value\n * @param {weekDay=} data.wkst The week start value\n * @param {Time=} data.until The end of the recurrence set\n * @param {Number=} data.count The number of occurrences\n * @param {Array.<Number>=} data.bysecond The seconds for the BYSECOND part\n * @param {Array.<Number>=} data.byminute The minutes for the BYMINUTE part\n * @param {Array.<Number>=} data.byhour The hours for the BYHOUR part\n * @param {Array.<String>=} data.byday The BYDAY values\n * @param {Array.<Number>=} data.bymonthday The days for the BYMONTHDAY part\n * @param {Array.<Number>=} data.byyearday The days for the BYYEARDAY part\n * @param {Array.<Number>=} data.byweekno The weeks for the BYWEEKNO part\n * @param {Array.<Number>=} data.bymonth The month for the BYMONTH part\n * @param {Array.<Number>=} data.bysetpos The positionals for the BYSETPOS part\n */\n constructor(data) {\n this.wrappedJSObject = this;\n this.parts = {};\n\n if (data && typeof(data) === 'object') {\n this.fromData(data);\n }\n }\n\n /**\n * An object holding the BY-parts of the recurrence rule\n * @memberof ICAL.Recur\n * @typedef {Object} byParts\n * @property {Array.<Number>=} BYSECOND The seconds for the BYSECOND part\n * @property {Array.<Number>=} BYMINUTE The minutes for the BYMINUTE part\n * @property {Array.<Number>=} BYHOUR The hours for the BYHOUR part\n * @property {Array.<String>=} BYDAY The BYDAY values\n * @property {Array.<Number>=} BYMONTHDAY The days for the BYMONTHDAY part\n * @property {Array.<Number>=} BYYEARDAY The days for the BYYEARDAY part\n * @property {Array.<Number>=} BYWEEKNO The weeks for the BYWEEKNO part\n * @property {Array.<Number>=} BYMONTH The month for the BYMONTH part\n * @property {Array.<Number>=} BYSETPOS The positionals for the BYSETPOS part\n */\n\n /**\n * An object holding the BY-parts of the recurrence rule\n * @type {byParts}\n */\n parts = null;\n\n /**\n * The interval value for the recurrence rule.\n * @type {Number}\n */\n interval = 1;\n\n /**\n * The week start day\n *\n * @type {weekDay}\n * @default ICAL.Time.MONDAY\n */\n wkst = Time.MONDAY;\n\n /**\n * The end of the recurrence\n * @type {?Time}\n */\n until = null;\n\n /**\n * The maximum number of occurrences\n * @type {?Number}\n */\n count = null;\n\n /**\n * The frequency value.\n * @type {frequencyValues}\n */\n freq = null;\n\n /**\n * The class identifier.\n * @constant\n * @type {String}\n * @default \"icalrecur\"\n */\n icalclass = \"icalrecur\";\n\n /**\n * The type name, to be used in the jCal object.\n * @constant\n * @type {String}\n * @default \"recur\"\n */\n icaltype = \"recur\";\n\n /**\n * Create a new iterator for this recurrence rule. The passed start date\n * must be the start date of the event, not the start of the range to\n * search in.\n *\n * @example\n * let recur = comp.getFirstPropertyValue('rrule');\n * let dtstart = comp.getFirstPropertyValue('dtstart');\n * let iter = recur.iterator(dtstart);\n * for (let next = iter.next(); next; next = iter.next()) {\n * if (next.compare(rangeStart) < 0) {\n * continue;\n * }\n * console.log(next.toString());\n * }\n *\n * @param {Time} aStart The item's start date\n * @return {RecurIterator} The recurrence iterator\n */\n iterator(aStart) {\n return new RecurIterator({\n rule: this,\n dtstart: aStart\n });\n }\n\n /**\n * Returns a clone of the recurrence object.\n *\n * @return {Recur} The cloned object\n */\n clone() {\n return new Recur(this.toJSON());\n }\n\n /**\n * Checks if the current rule is finite, i.e. has a count or until part.\n *\n * @return {Boolean} True, if the rule is finite\n */\n isFinite() {\n return !!(this.count || this.until);\n }\n\n /**\n * Checks if the current rule has a count part, and not limited by an until\n * part.\n *\n * @return {Boolean} True, if the rule is by count\n */\n isByCount() {\n return !!(this.count && !this.until);\n }\n\n /**\n * Adds a component (part) to the recurrence rule. This is not a component\n * in the sense of {@link ICAL.Component}, but a part of the recurrence\n * rule, i.e. BYMONTH.\n *\n * @param {String} aType The name of the component part\n * @param {Array|String} aValue The component value\n */\n addComponent(aType, aValue) {\n let ucname = aType.toUpperCase();\n if (ucname in this.parts) {\n this.parts[ucname].push(aValue);\n } else {\n this.parts[ucname] = [aValue];\n }\n }\n\n /**\n * Sets the component value for the given by-part.\n *\n * @param {String} aType The component part name\n * @param {Array} aValues The component values\n */\n setComponent(aType, aValues) {\n this.parts[aType.toUpperCase()] = aValues.slice();\n }\n\n /**\n * Gets (a copy) of the requested component value.\n *\n * @param {String} aType The component part name\n * @return {Array} The component part value\n */\n getComponent(aType) {\n let ucname = aType.toUpperCase();\n return (ucname in this.parts ? this.parts[ucname].slice() : []);\n }\n\n /**\n * Retrieves the next occurrence after the given recurrence id. See the\n * guide on {@tutorial terminology} for more details.\n *\n * NOTE: Currently, this method iterates all occurrences from the start\n * date. It should not be called in a loop for performance reasons. If you\n * would like to get more than one occurrence, you can iterate the\n * occurrences manually, see the example on the\n * {@link ICAL.Recur#iterator iterator} method.\n *\n * @param {Time} aStartTime The start of the event series\n * @param {Time} aRecurrenceId The date of the last occurrence\n * @return {Time} The next occurrence after\n */\n getNextOccurrence(aStartTime, aRecurrenceId) {\n let iter = this.iterator(aStartTime);\n let next;\n\n do {\n next = iter.next();\n } while (next && next.compare(aRecurrenceId) <= 0);\n\n if (next && aRecurrenceId.zone) {\n next.zone = aRecurrenceId.zone;\n }\n\n return next;\n }\n\n /**\n * Sets up the current instance using members from the passed data object.\n *\n * @param {Object} data An object with members of the recurrence\n * @param {frequencyValues=} data.freq The frequency value\n * @param {Number=} data.interval The INTERVAL value\n * @param {weekDay=} data.wkst The week start value\n * @param {Time=} data.until The end of the recurrence set\n * @param {Number=} data.count The number of occurrences\n * @param {Array.<Number>=} data.bysecond The seconds for the BYSECOND part\n * @param {Array.<Number>=} data.byminute The minutes for the BYMINUTE part\n * @param {Array.<Number>=} data.byhour The hours for the BYHOUR part\n * @param {Array.<String>=} data.byday The BYDAY values\n * @param {Array.<Number>=} data.bymonthday The days for the BYMONTHDAY part\n * @param {Array.<Number>=} data.byyearday The days for the BYYEARDAY part\n * @param {Array.<Number>=} data.byweekno The weeks for the BYWEEKNO part\n * @param {Array.<Number>=} data.bymonth The month for the BYMONTH part\n * @param {Array.<Number>=} data.bysetpos The positionals for the BYSETPOS part\n */\n fromData(data) {\n for (let key in data) {\n let uckey = key.toUpperCase();\n\n if (uckey in partDesign) {\n if (Array.isArray(data[key])) {\n this.parts[uckey] = data[key];\n } else {\n this.parts[uckey] = [data[key]];\n }\n } else {\n this[key] = data[key];\n }\n }\n\n if (this.interval && typeof this.interval != \"number\") {\n optionDesign.INTERVAL(this.interval, this);\n }\n\n if (this.wkst && typeof this.wkst != \"number\") {\n this.wkst = Recur.icalDayToNumericDay(this.wkst);\n }\n\n if (this.until && !(this.until instanceof Time)) {\n this.until = Time.fromString(this.until);\n }\n }\n\n /**\n * The jCal representation of this recurrence type.\n * @return {Object}\n */\n toJSON() {\n let res = Object.create(null);\n res.freq = this.freq;\n\n if (this.count) {\n res.count = this.count;\n }\n\n if (this.interval > 1) {\n res.interval = this.interval;\n }\n\n for (let [k, kparts] of Object.entries(this.parts)) {\n if (Array.isArray(kparts) && kparts.length == 1) {\n res[k.toLowerCase()] = kparts[0];\n } else {\n res[k.toLowerCase()] = clone(kparts);\n }\n }\n\n if (this.until) {\n res.until = this.until.toString();\n }\n if ('wkst' in this && this.wkst !== Time.DEFAULT_WEEK_START) {\n res.wkst = Recur.numericDayToIcalDay(this.wkst);\n }\n return res;\n }\n\n /**\n * The string representation of this recurrence rule.\n * @return {String}\n */\n toString() {\n // TODO retain order\n let str = \"FREQ=\" + this.freq;\n if (this.count) {\n str += \";COUNT=\" + this.count;\n }\n if (this.interval > 1) {\n str += \";INTERVAL=\" + this.interval;\n }\n for (let [k, v] of Object.entries(this.parts)) {\n str += \";\" + k + \"=\" + v;\n }\n if (this.until) {\n str += ';UNTIL=' + this.until.toICALString();\n }\n if ('wkst' in this && this.wkst !== Time.DEFAULT_WEEK_START) {\n str += ';WKST=' + Recur.numericDayToIcalDay(this.wkst);\n }\n return str;\n }\n}\n\nfunction parseNumericValue(type, min, max, value) {\n let result = value;\n\n if (value[0] === '+') {\n result = value.slice(1);\n }\n\n result = strictParseInt(result);\n\n if (min !== undefined && value < min) {\n throw new Error(\n type + ': invalid value \"' + value + '\" must be > ' + min\n );\n }\n\n if (max !== undefined && value > max) {\n throw new Error(\n type + ': invalid value \"' + value + '\" must be < ' + min\n );\n }\n\n return result;\n}\n\nconst optionDesign = {\n FREQ: function(value, dict, fmtIcal) {\n // yes this is actually equal or faster then regex.\n // upside here is we can enumerate the valid values.\n if (ALLOWED_FREQ.indexOf(value) !== -1) {\n dict.freq = value;\n } else {\n throw new Error(\n 'invalid frequency \"' + value + '\" expected: \"' +\n ALLOWED_FREQ.join(', ') + '\"'\n );\n }\n },\n\n COUNT: function(value, dict, fmtIcal) {\n dict.count = strictParseInt(value);\n },\n\n INTERVAL: function(value, dict, fmtIcal) {\n dict.interval = strictParseInt(value);\n if (dict.interval < 1) {\n // 0 or negative values are not allowed, some engines seem to generate\n // it though. Assume 1 instead.\n dict.interval = 1;\n }\n },\n\n UNTIL: function(value, dict, fmtIcal) {\n if (value.length > 10) {\n dict.until = design$1.icalendar.value['date-time'].fromICAL(value);\n } else {\n dict.until = design$1.icalendar.value.date.fromICAL(value);\n }\n if (!fmtIcal) {\n dict.until = Time.fromString(dict.until);\n }\n },\n\n WKST: function(value, dict, fmtIcal) {\n if (VALID_DAY_NAMES.test(value)) {\n dict.wkst = Recur.icalDayToNumericDay(value);\n } else {\n throw new Error('invalid WKST value \"' + value + '\"');\n }\n }\n};\n\nconst partDesign = {\n BYSECOND: parseNumericValue.bind(undefined, 'BYSECOND', 0, 60),\n BYMINUTE: parseNumericValue.bind(undefined, 'BYMINUTE', 0, 59),\n BYHOUR: parseNumericValue.bind(undefined, 'BYHOUR', 0, 23),\n BYDAY: function(value) {\n if (VALID_BYDAY_PART.test(value)) {\n return value;\n } else {\n throw new Error('invalid BYDAY value \"' + value + '\"');\n }\n },\n BYMONTHDAY: parseNumericValue.bind(undefined, 'BYMONTHDAY', -31, 31),\n BYYEARDAY: parseNumericValue.bind(undefined, 'BYYEARDAY', -366, 366),\n BYWEEKNO: parseNumericValue.bind(undefined, 'BYWEEKNO', -53, 53),\n BYMONTH: parseNumericValue.bind(undefined, 'BYMONTH', 1, 12),\n BYSETPOS: parseNumericValue.bind(undefined, 'BYSETPOS', -366, 366)\n};\n\n/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n * Portions Copyright (C) Philipp Kewisch */\n\n/**\n * This lets typescript resolve our custom types in the\n * generated d.ts files (jsdoc typedefs are converted to typescript types).\n * Ignore prevents the typedefs from being documented more than once.\n * @ignore\n * @typedef {import(\"./types.js\").jCalComponent} jCalComponent\n * Imports the 'occurrenceDetails' type from the \"types.js\" module\n */\n\n/**\n * This class represents the \"period\" value type, with various calculation and manipulation methods.\n *\n * @memberof ICAL\n */\nclass Period {\n /**\n * Creates a new {@link ICAL.Period} instance from the passed string.\n *\n * @param {String} str The string to parse\n * @param {Property} prop The property this period will be on\n * @return {Period} The created period instance\n */\n static fromString(str, prop) {\n let parts = str.split('/');\n\n if (parts.length !== 2) {\n throw new Error(\n 'Invalid string value: \"' + str + '\" must contain a \"/\" char.'\n );\n }\n\n let options = {\n start: Time.fromDateTimeString(parts[0], prop)\n };\n\n let end = parts[1];\n\n if (Duration.isValueString(end)) {\n options.duration = Duration.fromString(end);\n } else {\n options.end = Time.fromDateTimeString(end, prop);\n }\n\n return new Period(options);\n }\n\n /**\n * Creates a new {@link ICAL.Period} instance from the given data object.\n * The passed data object cannot contain both and end date and a duration.\n *\n * @param {Object} aData An object with members of the period\n * @param {Time=} aData.start The start of the period\n * @param {Time=} aData.end The end of the period\n * @param {Duration=} aData.duration The duration of the period\n * @return {Period} The period instance\n */\n static fromData(aData) {\n return new Period(aData);\n }\n\n /**\n * Returns a new period instance from the given jCal data array. The first\n * member is always the start date string, the second member is either a\n * duration or end date string.\n *\n * @param {jCalComponent} aData The jCal data array\n * @param {Property} aProp The property this jCal data is on\n * @param {Boolean} aLenient If true, data value can be both date and date-time\n * @return {Period} The period instance\n */\n static fromJSON(aData, aProp, aLenient) {\n function fromDateOrDateTimeString(aValue, dateProp) {\n if (aLenient) {\n return Time.fromString(aValue, dateProp);\n } else {\n return Time.fromDateTimeString(aValue, dateProp);\n }\n }\n\n if (Duration.isValueString(aData[1])) {\n return Period.fromData({\n start: fromDateOrDateTimeString(aData[0], aProp),\n duration: Duration.fromString(aData[1])\n });\n } else {\n return Period.fromData({\n start: fromDateOrDateTimeString(aData[0], aProp),\n end: fromDateOrDateTimeString(aData[1], aProp)\n });\n }\n }\n\n /**\n * Creates a new ICAL.Period instance. The passed data object cannot contain both and end date and\n * a duration.\n *\n * @param {Object} aData An object with members of the period\n * @param {Time=} aData.start The start of the period\n * @param {Time=} aData.end The end of the period\n * @param {Duration=} aData.duration The duration of the period\n */\n constructor(aData) {\n this.wrappedJSObject = this;\n\n if (aData && 'start' in aData) {\n if (aData.start && !(aData.start instanceof Time)) {\n throw new TypeError('.start must be an instance of ICAL.Time');\n }\n this.start = aData.start;\n }\n\n if (aData && aData.end && aData.duration) {\n throw new Error('cannot accept both end and duration');\n }\n\n if (aData && 'end' in aData) {\n if (aData.end && !(aData.end instanceof Time)) {\n throw new TypeError('.end must be an instance of ICAL.Time');\n }\n this.end = aData.end;\n }\n\n if (aData && 'duration' in aData) {\n if (aData.duration && !(aData.duration instanceof Duration)) {\n throw new TypeError('.duration must be an instance of ICAL.Duration');\n }\n this.duration = aData.duration;\n }\n }\n\n\n /**\n * The start of the period\n * @type {Time}\n */\n start = null;\n\n /**\n * The end of the period\n * @type {Time}\n */\n end = null;\n\n /**\n * The duration of the period\n * @type {Duration}\n */\n duration = null;\n\n /**\n * The class identifier.\n * @constant\n * @type {String}\n * @default \"icalperiod\"\n */\n icalclass = \"icalperiod\";\n\n /**\n * The type name, to be used in the jCal object.\n * @constant\n * @type {String}\n * @default \"period\"\n */\n icaltype = \"period\";\n\n /**\n * Returns a clone of the duration object.\n *\n * @return {Period} The cloned object\n */\n clone() {\n return Period.fromData({\n start: this.start ? this.start.clone() : null,\n end: this.end ? this.end.clone() : null,\n duration: this.duration ? this.duration.clone() : null\n });\n }\n\n /**\n * Calculates the duration of the period, either directly or by subtracting\n * start from end date.\n *\n * @return {Duration} The calculated duration\n */\n getDuration() {\n if (this.duration) {\n return this.duration;\n } else {\n return this.end.subtractDate(this.start);\n }\n }\n\n /**\n * Calculates the end date of the period, either directly or by adding\n * duration to start date.\n *\n * @return {Time} The calculated end date\n */\n getEnd() {\n if (this.end) {\n return this.end;\n } else {\n let end = this.start.clone();\n end.addDuration(this.duration);\n return end;\n }\n }\n\n /**\n * The string representation of this period.\n * @return {String}\n */\n toString() {\n return this.start + \"/\" + (this.end || this.duration);\n }\n\n /**\n * The jCal representation of this period type.\n * @return {Object}\n */\n toJSON() {\n return [this.start.toString(), (this.end || this.duration).toString()];\n }\n\n /**\n * The iCalendar string representation of this period.\n * @return {String}\n */\n toICALString() {\n return this.start.toICALString() + \"/\" +\n (this.end || this.duration).toICALString();\n }\n}\n\n/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n * Portions Copyright (C) Philipp Kewisch */\n\n/**\n * This lets typescript resolve our custom types in the\n * generated d.ts files (jsdoc typedefs are converted to typescript types).\n * Ignore prevents the typedefs from being documented more than once.\n * @ignore\n * @typedef {import(\"./types.js\").designSet} designSet\n * Imports the 'designSet' type from the \"types.js\" module\n */\n\n/** @module ICAL.design */\n\nconst FROM_ICAL_NEWLINE = /\\\\\\\\|\\\\;|\\\\,|\\\\[Nn]/g;\nconst TO_ICAL_NEWLINE = /\\\\|;|,|\\n/g;\nconst FROM_VCARD_NEWLINE = /\\\\\\\\|\\\\,|\\\\[Nn]/g;\nconst TO_VCARD_NEWLINE = /\\\\|,|\\n/g;\n\nfunction createTextType(fromNewline, toNewline) {\n let result = {\n matches: /.*/,\n\n fromICAL: function(aValue, structuredEscape) {\n return replaceNewline(aValue, fromNewline, structuredEscape);\n },\n\n toICAL: function(aValue, structuredEscape) {\n let regEx = toNewline;\n if (structuredEscape)\n regEx = new RegExp(regEx.source + '|' + structuredEscape, regEx.flags);\n return aValue.replace(regEx, function(str) {\n switch (str) {\n case \"\\\\\":\n return \"\\\\\\\\\";\n case \";\":\n return \"\\\\;\";\n case \",\":\n return \"\\\\,\";\n case \"\\n\":\n return \"\\\\n\";\n /* c8 ignore next 2 */\n default:\n return str;\n }\n });\n }\n };\n return result;\n}\n\n// default types used multiple times\nconst DEFAULT_TYPE_TEXT = { defaultType: \"text\" };\nconst DEFAULT_TYPE_TEXT_MULTI = { defaultType: \"text\", multiValue: \",\" };\nconst DEFAULT_TYPE_TEXT_STRUCTURED = { defaultType: \"text\", structuredValue: \";\" };\nconst DEFAULT_TYPE_INTEGER = { defaultType: \"integer\" };\nconst DEFAULT_TYPE_DATETIME_DATE = { defaultType: \"date-time\", allowedTypes: [\"date-time\", \"date\"] };\nconst DEFAULT_TYPE_DATETIME = { defaultType: \"date-time\" };\nconst DEFAULT_TYPE_URI = { defaultType: \"uri\" };\nconst DEFAULT_TYPE_UTCOFFSET = { defaultType: \"utc-offset\" };\nconst DEFAULT_TYPE_RECUR = { defaultType: \"recur\" };\nconst DEFAULT_TYPE_DATE_ANDOR_TIME = { defaultType: \"date-and-or-time\", allowedTypes: [\"date-time\", \"date\", \"text\"] };\n\nfunction replaceNewlineReplace(string) {\n switch (string) {\n case \"\\\\\\\\\":\n return \"\\\\\";\n case \"\\\\;\":\n return \";\";\n case \"\\\\,\":\n return \",\";\n case \"\\\\n\":\n case \"\\\\N\":\n return \"\\n\";\n /* c8 ignore next 2 */\n default:\n return string;\n }\n}\n\nfunction replaceNewline(value, newline, structuredEscape) {\n // avoid regex when possible.\n if (value.indexOf('\\\\') === -1) {\n return value;\n }\n if (structuredEscape)\n newline = new RegExp(newline.source + '|\\\\\\\\' + structuredEscape, newline.flags);\n return value.replace(newline, replaceNewlineReplace);\n}\n\nlet commonProperties = {\n \"categories\": DEFAULT_TYPE_TEXT_MULTI,\n \"url\": DEFAULT_TYPE_URI,\n \"version\": DEFAULT_TYPE_TEXT,\n \"uid\": DEFAULT_TYPE_TEXT\n};\n\nlet commonValues = {\n \"boolean\": {\n values: [\"TRUE\", \"FALSE\"],\n\n fromICAL: function(aValue) {\n switch (aValue) {\n case 'TRUE':\n return true;\n case 'FALSE':\n return false;\n default:\n //TODO: parser warning\n return false;\n }\n },\n\n toICAL: function(aValue) {\n if (aValue) {\n return 'TRUE';\n }\n return 'FALSE';\n }\n\n },\n float: {\n matches: /^[+-]?\\d+\\.\\d+$/,\n\n fromICAL: function(aValue) {\n let parsed = parseFloat(aValue);\n if (isStrictlyNaN(parsed)) {\n // TODO: parser warning\n return 0.0;\n }\n return parsed;\n },\n\n toICAL: function(aValue) {\n return String(aValue);\n }\n },\n integer: {\n fromICAL: function(aValue) {\n let parsed = parseInt(aValue);\n if (isStrictlyNaN(parsed)) {\n return 0;\n }\n return parsed;\n },\n\n toICAL: function(aValue) {\n return String(aValue);\n }\n },\n \"utc-offset\": {\n toICAL: function(aValue) {\n if (aValue.length < 7) {\n // no seconds\n // -0500\n return aValue.slice(0, 3) +\n aValue.slice(4, 6);\n } else {\n // seconds\n // -050000\n return aValue.slice(0, 3) +\n aValue.slice(4, 6) +\n aValue.slice(7, 9);\n }\n },\n\n fromICAL: function(aValue) {\n if (aValue.length < 6) {\n // no seconds\n // -05:00\n return aValue.slice(0, 3) + ':' +\n aValue.slice(3, 5);\n } else {\n // seconds\n // -05:00:00\n return aValue.slice(0, 3) + ':' +\n aValue.slice(3, 5) + ':' +\n aValue.slice(5, 7);\n }\n },\n\n decorate: function(aValue) {\n return UtcOffset.fromString(aValue);\n },\n\n undecorate: function(aValue) {\n return aValue.toString();\n }\n }\n};\n\nlet icalParams = {\n // Although the syntax is DQUOTE uri DQUOTE, I don't think we should\n // enforce anything aside from it being a valid content line.\n //\n // At least some params require - if multi values are used - DQUOTEs\n // for each of its values - e.g. delegated-from=\"uri1\",\"uri2\"\n // To indicate this, I introduced the new k/v pair\n // multiValueSeparateDQuote: true\n //\n // \"ALTREP\": { ... },\n\n // CN just wants a param-value\n // \"CN\": { ... }\n\n \"cutype\": {\n values: [\"INDIVIDUAL\", \"GROUP\", \"RESOURCE\", \"ROOM\", \"UNKNOWN\"],\n allowXName: true,\n allowIanaToken: true\n },\n\n \"delegated-from\": {\n valueType: \"cal-address\",\n multiValue: \",\",\n multiValueSeparateDQuote: true\n },\n \"delegated-to\": {\n valueType: \"cal-address\",\n multiValue: \",\",\n multiValueSeparateDQuote: true\n },\n // \"DIR\": { ... }, // See ALTREP\n \"encoding\": {\n values: [\"8BIT\", \"BASE64\"]\n },\n // \"FMTTYPE\": { ... }, // See ALTREP\n \"fbtype\": {\n values: [\"FREE\", \"BUSY\", \"BUSY-UNAVAILABLE\", \"BUSY-TENTATIVE\"],\n allowXName: true,\n allowIanaToken: true\n },\n // \"LANGUAGE\": { ... }, // See ALTREP\n \"member\": {\n valueType: \"cal-address\",\n multiValue: \",\",\n multiValueSeparateDQuote: true\n },\n \"partstat\": {\n // TODO These values are actually different per-component\n values: [\"NEEDS-ACTION\", \"ACCEPTED\", \"DECLINED\", \"TENTATIVE\",\n \"DELEGATED\", \"COMPLETED\", \"IN-PROCESS\"],\n allowXName: true,\n allowIanaToken: true\n },\n \"range\": {\n values: [\"THISANDFUTURE\"]\n },\n \"related\": {\n values: [\"START\", \"END\"]\n },\n \"reltype\": {\n values: [\"PARENT\", \"CHILD\", \"SIBLING\"],\n allowXName: true,\n allowIanaToken: true\n },\n \"role\": {\n values: [\"REQ-PARTICIPANT\", \"CHAIR\",\n \"OPT-PARTICIPANT\", \"NON-PARTICIPANT\"],\n allowXName: true,\n allowIanaToken: true\n },\n \"rsvp\": {\n values: [\"TRUE\", \"FALSE\"]\n },\n \"sent-by\": {\n valueType: \"cal-address\"\n },\n \"tzid\": {\n matches: /^\\//\n },\n \"value\": {\n // since the value here is a 'type' lowercase is used.\n values: [\"binary\", \"boolean\", \"cal-address\", \"date\", \"date-time\",\n \"duration\", \"float\", \"integer\", \"period\", \"recur\", \"text\",\n \"time\", \"uri\", \"utc-offset\"],\n allowXName: true,\n allowIanaToken: true\n }\n};\n\n// When adding a value here, be sure to add it to the parameter types!\nconst icalValues = extend(commonValues, {\n text: createTextType(FROM_ICAL_NEWLINE, TO_ICAL_NEWLINE),\n\n uri: {\n // TODO\n /* ... */\n },\n\n \"binary\": {\n decorate: function(aString) {\n return Binary.fromString(aString);\n },\n\n undecorate: function(aBinary) {\n return aBinary.toString();\n }\n },\n \"cal-address\": {\n // needs to be an uri\n },\n \"date\": {\n decorate: function(aValue, aProp) {\n if (design.strict) {\n return Time.fromDateString(aValue, aProp);\n } else {\n return Time.fromString(aValue, aProp);\n }\n },\n\n /**\n * undecorates a time object.\n */\n undecorate: function(aValue) {\n return aValue.toString();\n },\n\n fromICAL: function(aValue) {\n // from: 20120901\n // to: 2012-09-01\n if (!design.strict && aValue.length >= 15) {\n // This is probably a date-time, e.g. 20120901T130000Z\n return icalValues[\"date-time\"].fromICAL(aValue);\n } else {\n return aValue.slice(0, 4) + '-' +\n aValue.slice(4, 6) + '-' +\n aValue.slice(6, 8);\n }\n },\n\n toICAL: function(aValue) {\n // from: 2012-09-01\n // to: 20120901\n let len = aValue.length;\n\n if (len == 10) {\n return aValue.slice(0, 4) +\n aValue.slice(5, 7) +\n aValue.slice(8, 10);\n } else if (len >= 19) {\n return icalValues[\"date-time\"].toICAL(aValue);\n } else {\n //TODO: serialize warning?\n return aValue;\n }\n\n }\n },\n \"date-time\": {\n fromICAL: function(aValue) {\n // from: 20120901T130000\n // to: 2012-09-01T13:00:00\n if (!design.strict && aValue.length == 8) {\n // This is probably a date, e.g. 20120901\n return icalValues.date.fromICAL(aValue);\n } else {\n let result = aValue.slice(0, 4) + '-' +\n aValue.slice(4, 6) + '-' +\n aValue.slice(6, 8) + 'T' +\n aValue.slice(9, 11) + ':' +\n aValue.slice(11, 13) + ':' +\n aValue.slice(13, 15);\n\n if (aValue[15] && aValue[15] === 'Z') {\n result += 'Z';\n }\n\n return result;\n }\n },\n\n toICAL: function(aValue) {\n // from: 2012-09-01T13:00:00\n // to: 20120901T130000\n let len = aValue.length;\n\n if (len == 10 && !design.strict) {\n return icalValues.date.toICAL(aValue);\n } else if (len >= 19) {\n let result = aValue.slice(0, 4) +\n aValue.slice(5, 7) +\n // grab the (DDTHH) segment\n aValue.slice(8, 13) +\n // MM\n aValue.slice(14, 16) +\n // SS\n aValue.slice(17, 19);\n\n if (aValue[19] && aValue[19] === 'Z') {\n result += 'Z';\n }\n return result;\n } else {\n // TODO: error\n return aValue;\n }\n },\n\n decorate: function(aValue, aProp) {\n if (design.strict) {\n return Time.fromDateTimeString(aValue, aProp);\n } else {\n return Time.fromString(aValue, aProp);\n }\n },\n\n undecorate: function(aValue) {\n return aValue.toString();\n }\n },\n duration: {\n decorate: function(aValue) {\n return Duration.fromString(aValue);\n },\n undecorate: function(aValue) {\n return aValue.toString();\n }\n },\n period: {\n fromICAL: function(string) {\n let parts = string.split('/');\n parts[0] = icalValues['date-time'].fromICAL(parts[0]);\n\n if (!Duration.isValueString(parts[1])) {\n parts[1] = icalValues['date-time'].fromICAL(parts[1]);\n }\n\n return parts;\n },\n\n toICAL: function(parts) {\n parts = parts.slice();\n if (!design.strict && parts[0].length == 10) {\n parts[0] = icalValues.date.toICAL(parts[0]);\n } else {\n parts[0] = icalValues['date-time'].toICAL(parts[0]);\n }\n\n if (!Duration.isValueString(parts[1])) {\n if (!design.strict && parts[1].length == 10) {\n parts[1] = icalValues.date.toICAL(parts[1]);\n } else {\n parts[1] = icalValues['date-time'].toICAL(parts[1]);\n }\n }\n\n return parts.join(\"/\");\n },\n\n decorate: function(aValue, aProp) {\n return Period.fromJSON(aValue, aProp, !design.strict);\n },\n\n undecorate: function(aValue) {\n return aValue.toJSON();\n }\n },\n recur: {\n fromICAL: function(string) {\n return Recur._stringToData(string, true);\n },\n\n toICAL: function(data) {\n let str = \"\";\n for (let [k, val] of Object.entries(data)) {\n if (k == \"until\") {\n if (val.length > 10) {\n val = icalValues['date-time'].toICAL(val);\n } else {\n val = icalValues.date.toICAL(val);\n }\n } else if (k == \"wkst\") {\n if (typeof val === 'number') {\n val = Recur.numericDayToIcalDay(val);\n }\n } else if (Array.isArray(val)) {\n val = val.join(\",\");\n }\n str += k.toUpperCase() + \"=\" + val + \";\";\n }\n return str.slice(0, Math.max(0, str.length - 1));\n },\n\n decorate: function decorate(aValue) {\n return Recur.fromData(aValue);\n },\n\n undecorate: function(aRecur) {\n return aRecur.toJSON();\n }\n },\n\n time: {\n fromICAL: function(aValue) {\n // from: MMHHSS(Z)?\n // to: HH:MM:SS(Z)?\n if (aValue.length < 6) {\n // TODO: parser exception?\n return aValue;\n }\n\n // HH::MM::SSZ?\n let result = aValue.slice(0, 2) + ':' +\n aValue.slice(2, 4) + ':' +\n aValue.slice(4, 6);\n\n if (aValue[6] === 'Z') {\n result += 'Z';\n }\n\n return result;\n },\n\n toICAL: function(aValue) {\n // from: HH:MM:SS(Z)?\n // to: MMHHSS(Z)?\n if (aValue.length < 8) {\n //TODO: error\n return aValue;\n }\n\n let result = aValue.slice(0, 2) +\n aValue.slice(3, 5) +\n aValue.slice(6, 8);\n\n if (aValue[8] === 'Z') {\n result += 'Z';\n }\n\n return result;\n }\n }\n});\n\nlet icalProperties = extend(commonProperties, {\n\n \"action\": DEFAULT_TYPE_TEXT,\n \"attach\": { defaultType: \"uri\" },\n \"attendee\": { defaultType: \"cal-address\" },\n \"calscale\": DEFAULT_TYPE_TEXT,\n \"class\": DEFAULT_TYPE_TEXT,\n \"comment\": DEFAULT_TYPE_TEXT,\n \"completed\": DEFAULT_TYPE_DATETIME,\n \"contact\": DEFAULT_TYPE_TEXT,\n \"created\": DEFAULT_TYPE_DATETIME,\n \"description\": DEFAULT_TYPE_TEXT,\n \"dtend\": DEFAULT_TYPE_DATETIME_DATE,\n \"dtstamp\": DEFAULT_TYPE_DATETIME,\n \"dtstart\": DEFAULT_TYPE_DATETIME_DATE,\n \"due\": DEFAULT_TYPE_DATETIME_DATE,\n \"duration\": { defaultType: \"duration\" },\n \"exdate\": {\n defaultType: \"date-time\",\n allowedTypes: [\"date-time\", \"date\"],\n multiValue: ','\n },\n \"exrule\": DEFAULT_TYPE_RECUR,\n \"freebusy\": { defaultType: \"period\", multiValue: \",\" },\n \"geo\": { defaultType: \"float\", structuredValue: \";\" },\n \"last-modified\": DEFAULT_TYPE_DATETIME,\n \"location\": DEFAULT_TYPE_TEXT,\n \"method\": DEFAULT_TYPE_TEXT,\n \"organizer\": { defaultType: \"cal-address\" },\n \"percent-complete\": DEFAULT_TYPE_INTEGER,\n \"priority\": DEFAULT_TYPE_INTEGER,\n \"prodid\": DEFAULT_TYPE_TEXT,\n \"related-to\": DEFAULT_TYPE_TEXT,\n \"repeat\": DEFAULT_TYPE_INTEGER,\n \"rdate\": {\n defaultType: \"date-time\",\n allowedTypes: [\"date-time\", \"date\", \"period\"],\n multiValue: ',',\n detectType: function(string) {\n if (string.indexOf('/') !== -1) {\n return 'period';\n }\n return (string.indexOf('T') === -1) ? 'date' : 'date-time';\n }\n },\n \"recurrence-id\": DEFAULT_TYPE_DATETIME_DATE,\n \"resources\": DEFAULT_TYPE_TEXT_MULTI,\n \"request-status\": DEFAULT_TYPE_TEXT_STRUCTURED,\n \"rrule\": DEFAULT_TYPE_RECUR,\n \"sequence\": DEFAULT_TYPE_INTEGER,\n \"status\": DEFAULT_TYPE_TEXT,\n \"summary\": DEFAULT_TYPE_TEXT,\n \"transp\": DEFAULT_TYPE_TEXT,\n \"trigger\": { defaultType: \"duration\", allowedTypes: [\"duration\", \"date-time\"] },\n \"tzoffsetfrom\": DEFAULT_TYPE_UTCOFFSET,\n \"tzoffsetto\": DEFAULT_TYPE_UTCOFFSET,\n \"tzurl\": DEFAULT_TYPE_URI,\n \"tzid\": DEFAULT_TYPE_TEXT,\n \"tzname\": DEFAULT_TYPE_TEXT\n});\n\n// When adding a value here, be sure to add it to the parameter types!\nconst vcardValues = extend(commonValues, {\n text: createTextType(FROM_VCARD_NEWLINE, TO_VCARD_NEWLINE),\n uri: createTextType(FROM_VCARD_NEWLINE, TO_VCARD_NEWLINE),\n\n date: {\n decorate: function(aValue) {\n return VCardTime.fromDateAndOrTimeString(aValue, \"date\");\n },\n undecorate: function(aValue) {\n return aValue.toString();\n },\n fromICAL: function(aValue) {\n if (aValue.length == 8) {\n return icalValues.date.fromICAL(aValue);\n } else if (aValue[0] == '-' && aValue.length == 6) {\n return aValue.slice(0, 4) + '-' + aValue.slice(4);\n } else {\n return aValue;\n }\n },\n toICAL: function(aValue) {\n if (aValue.length == 10) {\n return icalValues.date.toICAL(aValue);\n } else if (aValue[0] == '-' && aValue.length == 7) {\n return aValue.slice(0, 4) + aValue.slice(5);\n } else {\n return aValue;\n }\n }\n },\n\n time: {\n decorate: function(aValue) {\n return VCardTime.fromDateAndOrTimeString(\"T\" + aValue, \"time\");\n },\n undecorate: function(aValue) {\n return aValue.toString();\n },\n fromICAL: function(aValue) {\n let splitzone = vcardValues.time._splitZone(aValue, true);\n let zone = splitzone[0], value = splitzone[1];\n\n //console.log(\"SPLIT: \",splitzone);\n\n if (value.length == 6) {\n value = value.slice(0, 2) + ':' +\n value.slice(2, 4) + ':' +\n value.slice(4, 6);\n } else if (value.length == 4 && value[0] != '-') {\n value = value.slice(0, 2) + ':' + value.slice(2, 4);\n } else if (value.length == 5) {\n value = value.slice(0, 3) + ':' + value.slice(3, 5);\n }\n\n if (zone.length == 5 && (zone[0] == '-' || zone[0] == '+')) {\n zone = zone.slice(0, 3) + ':' + zone.slice(3);\n }\n\n return value + zone;\n },\n\n toICAL: function(aValue) {\n let splitzone = vcardValues.time._splitZone(aValue);\n let zone = splitzone[0], value = splitzone[1];\n\n if (value.length == 8) {\n value = value.slice(0, 2) +\n value.slice(3, 5) +\n value.slice(6, 8);\n } else if (value.length == 5 && value[0] != '-') {\n value = value.slice(0, 2) + value.slice(3, 5);\n } else if (value.length == 6) {\n value = value.slice(0, 3) + value.slice(4, 6);\n }\n\n if (zone.length == 6 && (zone[0] == '-' || zone[0] == '+')) {\n zone = zone.slice(0, 3) + zone.slice(4);\n }\n\n return value + zone;\n },\n\n _splitZone: function(aValue, isFromIcal) {\n let lastChar = aValue.length - 1;\n let signChar = aValue.length - (isFromIcal ? 5 : 6);\n let sign = aValue[signChar];\n let zone, value;\n\n if (aValue[lastChar] == 'Z') {\n zone = aValue[lastChar];\n value = aValue.slice(0, Math.max(0, lastChar));\n } else if (aValue.length > 6 && (sign == '-' || sign == '+')) {\n zone = aValue.slice(signChar);\n value = aValue.slice(0, Math.max(0, signChar));\n } else {\n zone = \"\";\n value = aValue;\n }\n\n return [zone, value];\n }\n },\n\n \"date-time\": {\n decorate: function(aValue) {\n return VCardTime.fromDateAndOrTimeString(aValue, \"date-time\");\n },\n\n undecorate: function(aValue) {\n return aValue.toString();\n },\n\n fromICAL: function(aValue) {\n return vcardValues['date-and-or-time'].fromICAL(aValue);\n },\n\n toICAL: function(aValue) {\n return vcardValues['date-and-or-time'].toICAL(aValue);\n }\n },\n\n \"date-and-or-time\": {\n decorate: function(aValue) {\n return VCardTime.fromDateAndOrTimeString(aValue, \"date-and-or-time\");\n },\n\n undecorate: function(aValue) {\n return aValue.toString();\n },\n\n fromICAL: function(aValue) {\n let parts = aValue.split('T');\n return (parts[0] ? vcardValues.date.fromICAL(parts[0]) : '') +\n (parts[1] ? 'T' + vcardValues.time.fromICAL(parts[1]) : '');\n },\n\n toICAL: function(aValue) {\n let parts = aValue.split('T');\n return vcardValues.date.toICAL(parts[0]) +\n (parts[1] ? 'T' + vcardValues.time.toICAL(parts[1]) : '');\n\n }\n },\n timestamp: icalValues['date-time'],\n \"language-tag\": {\n matches: /^[a-zA-Z0-9-]+$/ // Could go with a more strict regex here\n },\n \"phone-number\": {\n fromICAL: function(aValue) {\n return Array.from(aValue).filter(function(c) {\n return c === '\\\\' ? undefined : c;\n }).join('');\n },\n toICAL: function(aValue) {\n return Array.from(aValue).map(function(c) {\n return c === ',' || c === \";\" ? '\\\\' + c : c;\n }).join('');\n }\n }\n});\n\nlet vcardParams = {\n \"type\": {\n valueType: \"text\",\n multiValue: \",\"\n },\n \"value\": {\n // since the value here is a 'type' lowercase is used.\n values: [\"text\", \"uri\", \"date\", \"time\", \"date-time\", \"date-and-or-time\",\n \"timestamp\", \"boolean\", \"integer\", \"float\", \"utc-offset\",\n \"language-tag\"],\n allowXName: true,\n allowIanaToken: true\n }\n};\n\nlet vcardProperties = extend(commonProperties, {\n \"adr\": { defaultType: \"text\", structuredValue: \";\", multiValue: \",\" },\n \"anniversary\": DEFAULT_TYPE_DATE_ANDOR_TIME,\n \"bday\": DEFAULT_TYPE_DATE_ANDOR_TIME,\n \"caladruri\": DEFAULT_TYPE_URI,\n \"caluri\": DEFAULT_TYPE_URI,\n \"clientpidmap\": DEFAULT_TYPE_TEXT_STRUCTURED,\n \"email\": DEFAULT_TYPE_TEXT,\n \"fburl\": DEFAULT_TYPE_URI,\n \"fn\": DEFAULT_TYPE_TEXT,\n \"gender\": DEFAULT_TYPE_TEXT_STRUCTURED,\n \"geo\": DEFAULT_TYPE_URI,\n \"impp\": DEFAULT_TYPE_URI,\n \"key\": DEFAULT_TYPE_URI,\n \"kind\": DEFAULT_TYPE_TEXT,\n \"lang\": { defaultType: \"language-tag\" },\n \"logo\": DEFAULT_TYPE_URI,\n \"member\": DEFAULT_TYPE_URI,\n \"n\": { defaultType: \"text\", structuredValue: \";\", multiValue: \",\" },\n \"nickname\": DEFAULT_TYPE_TEXT_MULTI,\n \"note\": DEFAULT_TYPE_TEXT,\n \"org\": { defaultType: \"text\", structuredValue: \";\" },\n \"photo\": DEFAULT_TYPE_URI,\n \"related\": DEFAULT_TYPE_URI,\n \"rev\": { defaultType: \"timestamp\" },\n \"role\": DEFAULT_TYPE_TEXT,\n \"sound\": DEFAULT_TYPE_URI,\n \"source\": DEFAULT_TYPE_URI,\n \"tel\": { defaultType: \"uri\", allowedTypes: [\"uri\", \"text\"] },\n \"title\": DEFAULT_TYPE_TEXT,\n \"tz\": { defaultType: \"text\", allowedTypes: [\"text\", \"utc-offset\", \"uri\"] },\n \"xml\": DEFAULT_TYPE_TEXT\n});\n\nlet vcard3Values = extend(commonValues, {\n binary: icalValues.binary,\n date: vcardValues.date,\n \"date-time\": vcardValues[\"date-time\"],\n \"phone-number\": vcardValues[\"phone-number\"],\n uri: icalValues.uri,\n text: icalValues.text,\n time: icalValues.time,\n vcard: icalValues.text,\n \"utc-offset\": {\n toICAL: function(aValue) {\n return aValue.slice(0, 7);\n },\n\n fromICAL: function(aValue) {\n return aValue.slice(0, 7);\n },\n\n decorate: function(aValue) {\n return UtcOffset.fromString(aValue);\n },\n\n undecorate: function(aValue) {\n return aValue.toString();\n }\n }\n});\n\nlet vcard3Params = {\n \"type\": {\n valueType: \"text\",\n multiValue: \",\"\n },\n \"value\": {\n // since the value here is a 'type' lowercase is used.\n values: [\"text\", \"uri\", \"date\", \"date-time\", \"phone-number\", \"time\",\n \"boolean\", \"integer\", \"float\", \"utc-offset\", \"vcard\", \"binary\"],\n allowXName: true,\n allowIanaToken: true\n }\n};\n\nlet vcard3Properties = extend(commonProperties, {\n fn: DEFAULT_TYPE_TEXT,\n n: { defaultType: \"text\", structuredValue: \";\", multiValue: \",\" },\n nickname: DEFAULT_TYPE_TEXT_MULTI,\n photo: { defaultType: \"binary\", allowedTypes: [\"binary\", \"uri\"] },\n bday: {\n defaultType: \"date-time\",\n allowedTypes: [\"date-time\", \"date\"],\n detectType: function(string) {\n return (string.indexOf('T') === -1) ? 'date' : 'date-time';\n }\n },\n\n adr: { defaultType: \"text\", structuredValue: \";\", multiValue: \",\" },\n label: DEFAULT_TYPE_TEXT,\n\n tel: { defaultType: \"phone-number\" },\n email: DEFAULT_TYPE_TEXT,\n mailer: DEFAULT_TYPE_TEXT,\n\n tz: { defaultType: \"utc-offset\", allowedTypes: [\"utc-offset\", \"text\"] },\n geo: { defaultType: \"float\", structuredValue: \";\" },\n\n title: DEFAULT_TYPE_TEXT,\n role: DEFAULT_TYPE_TEXT,\n logo: { defaultType: \"binary\", allowedTypes: [\"binary\", \"uri\"] },\n agent: { defaultType: \"vcard\", allowedTypes: [\"vcard\", \"text\", \"uri\"] },\n org: DEFAULT_TYPE_TEXT_STRUCTURED,\n\n note: DEFAULT_TYPE_TEXT_MULTI,\n prodid: DEFAULT_TYPE_TEXT,\n rev: {\n defaultType: \"date-time\",\n allowedTypes: [\"date-time\", \"date\"],\n detectType: function(string) {\n return (string.indexOf('T') === -1) ? 'date' : 'date-time';\n }\n },\n \"sort-string\": DEFAULT_TYPE_TEXT,\n sound: { defaultType: \"binary\", allowedTypes: [\"binary\", \"uri\"] },\n\n class: DEFAULT_TYPE_TEXT,\n key: { defaultType: \"binary\", allowedTypes: [\"binary\", \"text\"] }\n});\n\n/**\n * iCalendar design set\n * @type {designSet}\n */\nlet icalSet = {\n value: icalValues,\n param: icalParams,\n property: icalProperties,\n propertyGroups: false\n};\n\n/**\n * vCard 4.0 design set\n * @type {designSet}\n */\nlet vcardSet = {\n value: vcardValues,\n param: vcardParams,\n property: vcardProperties,\n propertyGroups: true\n};\n\n/**\n * vCard 3.0 design set\n * @type {designSet}\n */\nlet vcard3Set = {\n value: vcard3Values,\n param: vcard3Params,\n property: vcard3Properties,\n propertyGroups: true\n};\n\n/**\n * The design data, used by the parser to determine types for properties and\n * other metadata needed to produce correct jCard/jCal data.\n *\n * @alias ICAL.design\n * @exports module:ICAL.design\n */\nconst design = {\n /**\n * Can be set to false to make the parser more lenient.\n */\n strict: true,\n\n /**\n * The default set for new properties and components if none is specified.\n * @type {designSet}\n */\n defaultSet: icalSet,\n\n /**\n * The default type for unknown properties\n * @type {String}\n */\n defaultType: 'unknown',\n\n /**\n * Holds the design set for known top-level components\n *\n * @type {Object}\n * @property {designSet} vcard vCard VCARD\n * @property {designSet} vevent iCalendar VEVENT\n * @property {designSet} vtodo iCalendar VTODO\n * @property {designSet} vjournal iCalendar VJOURNAL\n * @property {designSet} valarm iCalendar VALARM\n * @property {designSet} vtimezone iCalendar VTIMEZONE\n * @property {designSet} daylight iCalendar DAYLIGHT\n * @property {designSet} standard iCalendar STANDARD\n *\n * @example\n * let propertyName = 'fn';\n * let componentDesign = ICAL.design.components.vcard;\n * let propertyDetails = componentDesign.property[propertyName];\n * if (propertyDetails.defaultType == 'text') {\n * // Yep, sure is...\n * }\n */\n components: {\n vcard: vcardSet,\n vcard3: vcard3Set,\n vevent: icalSet,\n vtodo: icalSet,\n vjournal: icalSet,\n valarm: icalSet,\n vtimezone: icalSet,\n daylight: icalSet,\n standard: icalSet\n },\n\n\n /**\n * The design set for iCalendar (rfc5545/rfc7265) components.\n * @type {designSet}\n */\n icalendar: icalSet,\n\n /**\n * The design set for vCard (rfc6350/rfc7095) components.\n * @type {designSet}\n */\n vcard: vcardSet,\n\n /**\n * The design set for vCard (rfc2425/rfc2426/rfc7095) components.\n * @type {designSet}\n */\n vcard3: vcard3Set,\n\n /**\n * Gets the design set for the given component name.\n *\n * @param {String} componentName The name of the component\n * @return {designSet} The design set for the component\n */\n getDesignSet: function(componentName) {\n let isInDesign = componentName && componentName in design.components;\n return isInDesign ? design.components[componentName] : design.defaultSet;\n }\n};\nvar design$1 = design;\n\n/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n * Portions Copyright (C) Philipp Kewisch */\n\n/**\n * This lets typescript resolve our custom types in the\n * generated d.ts files (jsdoc typedefs are converted to typescript types).\n * Ignore prevents the typedefs from being documented more than once.\n *\n * @ignore\n * @typedef {import(\"./types.js\").designSet} designSet\n * Imports the 'designSet' type from the \"types.js\" module\n */\n\nconst LINE_ENDING = '\\r\\n';\nconst DEFAULT_VALUE_TYPE = 'unknown';\nconst RFC6868_REPLACE_MAP = { '\"': \"^'\", \"\\n\": \"^n\", \"^\": \"^^\" };\n\n/**\n * Convert a full jCal/jCard array into a iCalendar/vCard string.\n *\n * @function ICAL.stringify\n * @variation function\n * @param {Array} jCal The jCal/jCard document\n * @return {String} The stringified iCalendar/vCard document\n */\nfunction stringify(jCal) {\n if (typeof jCal[0] == \"string\") {\n // This is a single component\n jCal = [jCal];\n }\n\n let i = 0;\n let len = jCal.length;\n let result = '';\n\n for (; i < len; i++) {\n result += stringify.component(jCal[i]) + LINE_ENDING;\n }\n\n return result;\n}\n\n/**\n * Converts an jCal component array into a ICAL string.\n * Recursive will resolve sub-components.\n *\n * Exact component/property order is not saved all\n * properties will come before subcomponents.\n *\n * @function ICAL.stringify.component\n * @param {Array} component\n * jCal/jCard fragment of a component\n * @param {designSet} designSet\n * The design data to use for this component\n * @return {String} The iCalendar/vCard string\n */\nstringify.component = function(component, designSet) {\n let name = component[0].toUpperCase();\n let result = 'BEGIN:' + name + LINE_ENDING;\n\n let props = component[1];\n let propIdx = 0;\n let propLen = props.length;\n\n let designSetName = component[0];\n // rfc6350 requires that in vCard 4.0 the first component is the VERSION\n // component with as value 4.0, note that 3.0 does not have this requirement.\n if (designSetName === 'vcard' && component[1].length > 0 &&\n !(component[1][0][0] === \"version\" && component[1][0][3] === \"4.0\")) {\n designSetName = \"vcard3\";\n }\n designSet = designSet || design$1.getDesignSet(designSetName);\n\n for (; propIdx < propLen; propIdx++) {\n result += stringify.property(props[propIdx], designSet) + LINE_ENDING;\n }\n\n // Ignore subcomponents if none exist, e.g. in vCard.\n let comps = component[2] || [];\n let compIdx = 0;\n let compLen = comps.length;\n\n for (; compIdx < compLen; compIdx++) {\n result += stringify.component(comps[compIdx], designSet) + LINE_ENDING;\n }\n\n result += 'END:' + name;\n return result;\n};\n\n/**\n * Converts a single jCal/jCard property to a iCalendar/vCard string.\n *\n * @function ICAL.stringify.property\n * @param {Array} property\n * jCal/jCard property array\n * @param {designSet} designSet\n * The design data to use for this property\n * @param {Boolean} noFold\n * If true, the line is not folded\n * @return {String} The iCalendar/vCard string\n */\nstringify.property = function(property, designSet, noFold) {\n let name = property[0].toUpperCase();\n let jsName = property[0];\n let params = property[1];\n\n if (!designSet) {\n designSet = design$1.defaultSet;\n }\n\n let groupName = params.group;\n let line;\n if (designSet.propertyGroups && groupName) {\n line = groupName.toUpperCase() + \".\" + name;\n } else {\n line = name;\n }\n\n for (let [paramName, value] of Object.entries(params)) {\n if (designSet.propertyGroups && paramName == 'group') {\n continue;\n }\n\n let paramDesign = designSet.param[paramName];\n let multiValue = paramDesign && paramDesign.multiValue;\n if (multiValue && Array.isArray(value)) {\n value = value.map(function(val) {\n val = stringify._rfc6868Unescape(val);\n val = stringify.paramPropertyValue(val, paramDesign.multiValueSeparateDQuote);\n return val;\n });\n value = stringify.multiValue(value, multiValue, \"unknown\", null, designSet);\n } else {\n value = stringify._rfc6868Unescape(value);\n value = stringify.paramPropertyValue(value);\n }\n\n line += ';' + paramName.toUpperCase() + '=' + value;\n }\n\n if (property.length === 3) {\n // If there are no values, we must assume a blank value\n return line + ':';\n }\n\n let valueType = property[2];\n\n let propDetails;\n let multiValue = false;\n let structuredValue = false;\n let isDefault = false;\n\n if (jsName in designSet.property) {\n propDetails = designSet.property[jsName];\n\n if ('multiValue' in propDetails) {\n multiValue = propDetails.multiValue;\n }\n\n if (('structuredValue' in propDetails) && Array.isArray(property[3])) {\n structuredValue = propDetails.structuredValue;\n }\n\n if ('defaultType' in propDetails) {\n if (valueType === propDetails.defaultType) {\n isDefault = true;\n }\n } else {\n if (valueType === DEFAULT_VALUE_TYPE) {\n isDefault = true;\n }\n }\n } else {\n if (valueType === DEFAULT_VALUE_TYPE) {\n isDefault = true;\n }\n }\n\n // push the VALUE property if type is not the default\n // for the current property.\n if (!isDefault) {\n // value will never contain ;/:/, so we don't escape it here.\n line += ';VALUE=' + valueType.toUpperCase();\n }\n\n line += ':';\n\n if (multiValue && structuredValue) {\n line += stringify.multiValue(\n property[3], structuredValue, valueType, multiValue, designSet, structuredValue\n );\n } else if (multiValue) {\n line += stringify.multiValue(\n property.slice(3), multiValue, valueType, null, designSet, false\n );\n } else if (structuredValue) {\n line += stringify.multiValue(\n property[3], structuredValue, valueType, null, designSet, structuredValue\n );\n } else {\n line += stringify.value(property[3], valueType, designSet, false);\n }\n\n return noFold ? line : foldline(line);\n};\n\n/**\n * Handles escaping of property values that may contain:\n *\n * COLON (:), SEMICOLON (;), or COMMA (,)\n *\n * If any of the above are present the result is wrapped\n * in double quotes.\n *\n * @function ICAL.stringify.paramPropertyValue\n * @param {String} value Raw property value\n * @param {boolean} force If value should be escaped even when unnecessary\n * @return {String} Given or escaped value when needed\n */\nstringify.paramPropertyValue = function(value, force) {\n if (!force &&\n (value.indexOf(',') === -1) &&\n (value.indexOf(':') === -1) &&\n (value.indexOf(';') === -1)) {\n\n return value;\n }\n\n return '\"' + value + '\"';\n};\n\n/**\n * Converts an array of ical values into a single\n * string based on a type and a delimiter value (like \",\").\n *\n * @function ICAL.stringify.multiValue\n * @param {Array} values List of values to convert\n * @param {String} delim Used to join the values (\",\", \";\", \":\")\n * @param {String} type Lowecase ical value type\n * (like boolean, date-time, etc..)\n * @param {?String} innerMulti If set, each value will again be processed\n * Used for structured values\n * @param {designSet} designSet\n * The design data to use for this property\n *\n * @return {String} iCalendar/vCard string for value\n */\nstringify.multiValue = function(values, delim, type, innerMulti, designSet, structuredValue) {\n let result = '';\n let len = values.length;\n let i = 0;\n\n for (; i < len; i++) {\n if (innerMulti && Array.isArray(values[i])) {\n result += stringify.multiValue(values[i], innerMulti, type, null, designSet, structuredValue);\n } else {\n result += stringify.value(values[i], type, designSet, structuredValue);\n }\n\n if (i !== (len - 1)) {\n result += delim;\n }\n }\n\n return result;\n};\n\n/**\n * Processes a single ical value runs the associated \"toICAL\" method from the\n * design value type if available to convert the value.\n *\n * @function ICAL.stringify.value\n * @param {String|Number} value A formatted value\n * @param {String} type Lowercase iCalendar/vCard value type\n * (like boolean, date-time, etc..)\n * @return {String} iCalendar/vCard value for single value\n */\nstringify.value = function(value, type, designSet, structuredValue) {\n if (type in designSet.value && 'toICAL' in designSet.value[type]) {\n return designSet.value[type].toICAL(value, structuredValue);\n }\n return value;\n};\n\n/**\n * Internal helper for rfc6868. Exposing this on ICAL.stringify so that\n * hackers can disable the rfc6868 parsing if the really need to.\n *\n * @param {String} val The value to unescape\n * @return {String} The escaped value\n */\nstringify._rfc6868Unescape = function(val) {\n return val.replace(/[\\n^\"]/g, function(x) {\n return RFC6868_REPLACE_MAP[x];\n });\n};\n\n/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n * Portions Copyright (C) Philipp Kewisch */\n\nconst NAME_INDEX$1 = 0;\nconst PROP_INDEX = 1;\nconst TYPE_INDEX = 2;\nconst VALUE_INDEX = 3;\n\n/**\n * This lets typescript resolve our custom types in the\n * generated d.ts files (jsdoc typedefs are converted to typescript types).\n * Ignore prevents the typedefs from being documented more than once.\n * @ignore\n * @typedef {import(\"./types.js\").designSet} designSet\n * Imports the 'designSet' type from the \"types.js\" module\n * @typedef {import(\"./types.js\").Geo} Geo\n * Imports the 'Geo' type from the \"types.js\" module\n */\n\n/**\n * Provides a layer on top of the raw jCal object for manipulating a single property, with its\n * parameters and value.\n *\n * @memberof ICAL\n */\nclass Property {\n /**\n * Create an {@link ICAL.Property} by parsing the passed iCalendar string.\n *\n * @param {String} str The iCalendar string to parse\n * @param {designSet=} designSet The design data to use for this property\n * @return {Property} The created iCalendar property\n */\n static fromString(str, designSet) {\n return new Property(parse.property(str, designSet));\n }\n\n /**\n * Creates a new ICAL.Property instance.\n *\n * It is important to note that mutations done in the wrapper directly mutate the jCal object used\n * to initialize.\n *\n * Can also be used to create new properties by passing the name of the property (as a String).\n *\n * @param {Array|String} jCal Raw jCal representation OR the new name of the property\n * @param {Component=} parent Parent component\n */\n constructor(jCal, parent) {\n this._parent = parent || null;\n\n if (typeof(jCal) === 'string') {\n // We are creating the property by name and need to detect the type\n this.jCal = [jCal, {}, design$1.defaultType];\n this.jCal[TYPE_INDEX] = this.getDefaultType();\n } else {\n this.jCal = jCal;\n }\n this._updateType();\n }\n\n /**\n * The value type for this property\n * @type {String}\n */\n get type() {\n return this.jCal[TYPE_INDEX];\n }\n\n /**\n * The name of this property, in lowercase.\n * @type {String}\n */\n get name() {\n return this.jCal[NAME_INDEX$1];\n }\n\n /**\n * The parent component for this property.\n * @type {Component}\n */\n get parent() {\n return this._parent;\n }\n\n set parent(p) {\n // Before setting the parent, check if the design set has changed. If it\n // has, we later need to update the type if it was unknown before.\n let designSetChanged = !this._parent || (p && p._designSet != this._parent._designSet);\n\n this._parent = p;\n\n if (this.type == design$1.defaultType && designSetChanged) {\n this.jCal[TYPE_INDEX] = this.getDefaultType();\n this._updateType();\n }\n }\n\n /**\n * The design set for this property, e.g. icalendar vs vcard\n *\n * @type {designSet}\n * @private\n */\n get _designSet() {\n return this.parent ? this.parent._designSet : design$1.defaultSet;\n }\n\n /**\n * Updates the type metadata from the current jCal type and design set.\n *\n * @private\n */\n _updateType() {\n let designSet = this._designSet;\n\n if (this.type in designSet.value) {\n if ('decorate' in designSet.value[this.type]) {\n this.isDecorated = true;\n } else {\n this.isDecorated = false;\n }\n\n if (this.name in designSet.property) {\n this.isMultiValue = ('multiValue' in designSet.property[this.name]);\n this.isStructuredValue = ('structuredValue' in designSet.property[this.name]);\n }\n }\n }\n\n /**\n * Hydrate a single value. The act of hydrating means turning the raw jCal\n * value into a potentially wrapped object, for example {@link ICAL.Time}.\n *\n * @private\n * @param {Number} index The index of the value to hydrate\n * @return {?Object} The decorated value.\n */\n _hydrateValue(index) {\n if (this._values && this._values[index]) {\n return this._values[index];\n }\n\n // for the case where there is no value.\n if (this.jCal.length <= (VALUE_INDEX + index)) {\n return null;\n }\n\n if (this.isDecorated) {\n if (!this._values) {\n this._values = [];\n }\n return (this._values[index] = this._decorate(\n this.jCal[VALUE_INDEX + index]\n ));\n } else {\n return this.jCal[VALUE_INDEX + index];\n }\n }\n\n /**\n * Decorate a single value, returning its wrapped object. This is used by\n * the hydrate function to actually wrap the value.\n *\n * @private\n * @param {?} value The value to decorate\n * @return {Object} The decorated value\n */\n _decorate(value) {\n return this._designSet.value[this.type].decorate(value, this);\n }\n\n /**\n * Undecorate a single value, returning its raw jCal data.\n *\n * @private\n * @param {Object} value The value to undecorate\n * @return {?} The undecorated value\n */\n _undecorate(value) {\n return this._designSet.value[this.type].undecorate(value, this);\n }\n\n /**\n * Sets the value at the given index while also hydrating it. The passed\n * value can either be a decorated or undecorated value.\n *\n * @private\n * @param {?} value The value to set\n * @param {Number} index The index to set it at\n */\n _setDecoratedValue(value, index) {\n if (!this._values) {\n this._values = [];\n }\n\n if (typeof(value) === 'object' && 'icaltype' in value) {\n // decorated value\n this.jCal[VALUE_INDEX + index] = this._undecorate(value);\n this._values[index] = value;\n } else {\n // undecorated value\n this.jCal[VALUE_INDEX + index] = value;\n this._values[index] = this._decorate(value);\n }\n }\n\n /**\n * Gets a parameter on the property.\n *\n * @param {String} name Parameter name (lowercase)\n * @return {Array|String} Parameter value\n */\n getParameter(name) {\n if (name in this.jCal[PROP_INDEX]) {\n return this.jCal[PROP_INDEX][name];\n } else {\n return undefined;\n }\n }\n\n /**\n * Gets first parameter on the property.\n *\n * @param {String} name Parameter name (lowercase)\n * @return {String} Parameter value\n */\n getFirstParameter(name) {\n let parameters = this.getParameter(name);\n\n if (Array.isArray(parameters)) {\n return parameters[0];\n }\n\n return parameters;\n }\n\n /**\n * Sets a parameter on the property.\n *\n * @param {String} name The parameter name\n * @param {Array|String} value The parameter value\n */\n setParameter(name, value) {\n let lcname = name.toLowerCase();\n if (typeof value === \"string\" &&\n lcname in this._designSet.param &&\n 'multiValue' in this._designSet.param[lcname]) {\n value = [value];\n }\n this.jCal[PROP_INDEX][name] = value;\n }\n\n /**\n * Removes a parameter\n *\n * @param {String} name The parameter name\n */\n removeParameter(name) {\n delete this.jCal[PROP_INDEX][name];\n }\n\n /**\n * Get the default type based on this property's name.\n *\n * @return {String} The default type for this property\n */\n getDefaultType() {\n let name = this.jCal[NAME_INDEX$1];\n let designSet = this._designSet;\n\n if (name in designSet.property) {\n let details = designSet.property[name];\n if ('defaultType' in details) {\n return details.defaultType;\n }\n }\n return design$1.defaultType;\n }\n\n /**\n * Sets type of property and clears out any existing values of the current\n * type.\n *\n * @param {String} type New iCAL type (see design.*.values)\n */\n resetType(type) {\n this.removeAllValues();\n this.jCal[TYPE_INDEX] = type;\n this._updateType();\n }\n\n /**\n * Finds the first property value.\n *\n * @return {Binary | Duration | Period |\n * Recur | Time | UtcOffset | Geo | string | null} First property value\n */\n getFirstValue() {\n return this._hydrateValue(0);\n }\n\n /**\n * Gets all values on the property.\n *\n * NOTE: this creates an array during each call.\n *\n * @return {Array} List of values\n */\n getValues() {\n let len = this.jCal.length - VALUE_INDEX;\n\n if (len < 1) {\n // it is possible for a property to have no value.\n return [];\n }\n\n let i = 0;\n let result = [];\n\n for (; i < len; i++) {\n result[i] = this._hydrateValue(i);\n }\n\n return result;\n }\n\n /**\n * Removes all values from this property\n */\n removeAllValues() {\n if (this._values) {\n this._values.length = 0;\n }\n this.jCal.length = 3;\n }\n\n /**\n * Sets the values of the property. Will overwrite the existing values.\n * This can only be used for multi-value properties.\n *\n * @param {Array} values An array of values\n */\n setValues(values) {\n if (!this.isMultiValue) {\n throw new Error(\n this.name + ': does not not support mulitValue.\\n' +\n 'override isMultiValue'\n );\n }\n\n let len = values.length;\n let i = 0;\n this.removeAllValues();\n\n if (len > 0 &&\n typeof(values[0]) === 'object' &&\n 'icaltype' in values[0]) {\n this.resetType(values[0].icaltype);\n }\n\n if (this.isDecorated) {\n for (; i < len; i++) {\n this._setDecoratedValue(values[i], i);\n }\n } else {\n for (; i < len; i++) {\n this.jCal[VALUE_INDEX + i] = values[i];\n }\n }\n }\n\n /**\n * Sets the current value of the property. If this is a multi-value\n * property, all other values will be removed.\n *\n * @param {String|Object} value New property value.\n */\n setValue(value) {\n this.removeAllValues();\n if (typeof(value) === 'object' && 'icaltype' in value) {\n this.resetType(value.icaltype);\n }\n\n if (this.isDecorated) {\n this._setDecoratedValue(value, 0);\n } else {\n this.jCal[VALUE_INDEX] = value;\n }\n }\n\n /**\n * Returns the Object representation of this component. The returned object\n * is a live jCal object and should be cloned if modified.\n * @return {Object}\n */\n toJSON() {\n return this.jCal;\n }\n\n /**\n * The string representation of this component.\n * @return {String}\n */\n toICALString() {\n return stringify.property(\n this.jCal, this._designSet, true\n );\n }\n}\n\n/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n * Portions Copyright (C) Philipp Kewisch */\n\n/**\n * This lets typescript resolve our custom types in the\n * generated d.ts files (jsdoc typedefs are converted to typescript types).\n * Ignore prevents the typedefs from being documented more than once.\n * @ignore\n * @typedef {import(\"./types.js\").designSet} designSet\n * Imports the 'designSet' type from the \"types.js\" module\n * @typedef {import(\"./types.js\").Geo} Geo\n * Imports the 'Geo' type from the \"types.js\" module\n */\n\nconst NAME_INDEX = 0;\nconst PROPERTY_INDEX = 1;\nconst COMPONENT_INDEX = 2;\n\n/**\n * Wraps a jCal component, adding convenience methods to add, remove and update subcomponents and\n * properties.\n *\n * @memberof ICAL\n */\nclass Component {\n /**\n * Create an {@link ICAL.Component} by parsing the passed iCalendar string.\n *\n * @param {String} str The iCalendar string to parse\n */\n static fromString(str) {\n return new Component(parse.component(str));\n }\n\n /**\n * Creates a new Component instance.\n *\n * @param {Array|String} jCal Raw jCal component data OR name of new\n * component\n * @param {Component=} parent Parent component to associate\n */\n constructor(jCal, parent) {\n if (typeof(jCal) === 'string') {\n // jCal spec (name, properties, components)\n jCal = [jCal, [], []];\n }\n\n // mostly for legacy reasons.\n this.jCal = jCal;\n\n this.parent = parent || null;\n\n if (!this.parent && this.name === 'vcalendar') {\n this._timezoneCache = new Map();\n }\n }\n\n /**\n * Hydrated properties are inserted into the _properties array at the same\n * position as in the jCal array, so it is possible that the array contains\n * undefined values for unhydrdated properties. To avoid iterating the\n * array when checking if all properties have been hydrated, we save the\n * count here.\n *\n * @type {Number}\n * @private\n */\n _hydratedPropertyCount = 0;\n\n /**\n * The same count as for _hydratedPropertyCount, but for subcomponents\n *\n * @type {Number}\n * @private\n */\n _hydratedComponentCount = 0;\n\n /**\n * A cache of hydrated time zone objects which may be used by consumers, keyed\n * by time zone ID.\n *\n * @type {Map}\n * @private\n */\n _timezoneCache = null;\n\n /**\n * @private\n */\n _components = null;\n\n /**\n * @private\n */\n _properties = null;\n\n /**\n * The name of this component\n *\n * @type {String}\n */\n get name() {\n return this.jCal[NAME_INDEX];\n }\n\n /**\n * The design set for this component, e.g. icalendar vs vcard\n *\n * @type {designSet}\n * @private\n */\n get _designSet() {\n let parentDesign = this.parent && this.parent._designSet;\n return parentDesign || design$1.getDesignSet(this.name);\n }\n\n /**\n * @private\n */\n _hydrateComponent(index) {\n if (!this._components) {\n this._components = [];\n this._hydratedComponentCount = 0;\n }\n\n if (this._components[index]) {\n return this._components[index];\n }\n\n let comp = new Component(\n this.jCal[COMPONENT_INDEX][index],\n this\n );\n\n this._hydratedComponentCount++;\n return (this._components[index] = comp);\n }\n\n /**\n * @private\n */\n _hydrateProperty(index) {\n if (!this._properties) {\n this._properties = [];\n this._hydratedPropertyCount = 0;\n }\n\n if (this._properties[index]) {\n return this._properties[index];\n }\n\n let prop = new Property(\n this.jCal[PROPERTY_INDEX][index],\n this\n );\n\n this._hydratedPropertyCount++;\n return (this._properties[index] = prop);\n }\n\n /**\n * Finds first sub component, optionally filtered by name.\n *\n * @param {String=} name Optional name to filter by\n * @return {?Component} The found subcomponent\n */\n getFirstSubcomponent(name) {\n if (name) {\n let i = 0;\n let comps = this.jCal[COMPONENT_INDEX];\n let len = comps.length;\n\n for (; i < len; i++) {\n if (comps[i][NAME_INDEX] === name) {\n let result = this._hydrateComponent(i);\n return result;\n }\n }\n } else {\n if (this.jCal[COMPONENT_INDEX].length) {\n return this._hydrateComponent(0);\n }\n }\n\n // ensure we return a value (strict mode)\n return null;\n }\n\n /**\n * Finds all sub components, optionally filtering by name.\n *\n * @param {String=} name Optional name to filter by\n * @return {Component[]} The found sub components\n */\n getAllSubcomponents(name) {\n let jCalLen = this.jCal[COMPONENT_INDEX].length;\n let i = 0;\n\n if (name) {\n let comps = this.jCal[COMPONENT_INDEX];\n let result = [];\n\n for (; i < jCalLen; i++) {\n if (name === comps[i][NAME_INDEX]) {\n result.push(\n this._hydrateComponent(i)\n );\n }\n }\n return result;\n } else {\n if (!this._components ||\n (this._hydratedComponentCount !== jCalLen)) {\n for (; i < jCalLen; i++) {\n this._hydrateComponent(i);\n }\n }\n\n return this._components || [];\n }\n }\n\n /**\n * Returns true when a named property exists.\n *\n * @param {String} name The property name\n * @return {Boolean} True, when property is found\n */\n hasProperty(name) {\n let props = this.jCal[PROPERTY_INDEX];\n let len = props.length;\n\n let i = 0;\n for (; i < len; i++) {\n // 0 is property name\n if (props[i][NAME_INDEX] === name) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Finds the first property, optionally with the given name.\n *\n * @param {String=} name Lowercase property name\n * @return {?Property} The found property\n */\n getFirstProperty(name) {\n if (name) {\n let i = 0;\n let props = this.jCal[PROPERTY_INDEX];\n let len = props.length;\n\n for (; i < len; i++) {\n if (props[i][NAME_INDEX] === name) {\n let result = this._hydrateProperty(i);\n return result;\n }\n }\n } else {\n if (this.jCal[PROPERTY_INDEX].length) {\n return this._hydrateProperty(0);\n }\n }\n\n return null;\n }\n\n /**\n * Returns first property's value, if available.\n *\n * @param {String=} name Lowercase property name\n * @return {Binary | Duration | Period |\n * Recur | Time | UtcOffset | Geo | string | null} The found property value.\n */\n getFirstPropertyValue(name) {\n let prop = this.getFirstProperty(name);\n if (prop) {\n return prop.getFirstValue();\n }\n\n return null;\n }\n\n /**\n * Get all properties in the component, optionally filtered by name.\n *\n * @param {String=} name Lowercase property name\n * @return {Property[]} List of properties\n */\n getAllProperties(name) {\n let jCalLen = this.jCal[PROPERTY_INDEX].length;\n let i = 0;\n\n if (name) {\n let props = this.jCal[PROPERTY_INDEX];\n let result = [];\n\n for (; i < jCalLen; i++) {\n if (name === props[i][NAME_INDEX]) {\n result.push(\n this._hydrateProperty(i)\n );\n }\n }\n return result;\n } else {\n if (!this._properties ||\n (this._hydratedPropertyCount !== jCalLen)) {\n for (; i < jCalLen; i++) {\n this._hydrateProperty(i);\n }\n }\n\n return this._properties || [];\n }\n }\n\n /**\n * @private\n */\n _removeObjectByIndex(jCalIndex, cache, index) {\n cache = cache || [];\n // remove cached version\n if (cache[index]) {\n let obj = cache[index];\n if (\"parent\" in obj) {\n obj.parent = null;\n }\n }\n\n cache.splice(index, 1);\n\n // remove it from the jCal\n this.jCal[jCalIndex].splice(index, 1);\n }\n\n /**\n * @private\n */\n _removeObject(jCalIndex, cache, nameOrObject) {\n let i = 0;\n let objects = this.jCal[jCalIndex];\n let len = objects.length;\n let cached = this[cache];\n\n if (typeof(nameOrObject) === 'string') {\n for (; i < len; i++) {\n if (objects[i][NAME_INDEX] === nameOrObject) {\n this._removeObjectByIndex(jCalIndex, cached, i);\n return true;\n }\n }\n } else if (cached) {\n for (; i < len; i++) {\n if (cached[i] && cached[i] === nameOrObject) {\n this._removeObjectByIndex(jCalIndex, cached, i);\n return true;\n }\n }\n }\n\n return false;\n }\n\n /**\n * @private\n */\n _removeAllObjects(jCalIndex, cache, name) {\n let cached = this[cache];\n\n // Unfortunately we have to run through all children to reset their\n // parent property.\n let objects = this.jCal[jCalIndex];\n let i = objects.length - 1;\n\n // descending search required because splice\n // is used and will effect the indices.\n for (; i >= 0; i--) {\n if (!name || objects[i][NAME_INDEX] === name) {\n this._removeObjectByIndex(jCalIndex, cached, i);\n }\n }\n }\n\n /**\n * Adds a single sub component.\n *\n * @param {Component} component The component to add\n * @return {Component} The passed in component\n */\n addSubcomponent(component) {\n if (!this._components) {\n this._components = [];\n this._hydratedComponentCount = 0;\n }\n\n if (component.parent) {\n component.parent.removeSubcomponent(component);\n }\n\n let idx = this.jCal[COMPONENT_INDEX].push(component.jCal);\n this._components[idx - 1] = component;\n this._hydratedComponentCount++;\n component.parent = this;\n return component;\n }\n\n /**\n * Removes a single component by name or the instance of a specific\n * component.\n *\n * @param {Component|String} nameOrComp Name of component, or component\n * @return {Boolean} True when comp is removed\n */\n removeSubcomponent(nameOrComp) {\n let removed = this._removeObject(COMPONENT_INDEX, '_components', nameOrComp);\n if (removed) {\n this._hydratedComponentCount--;\n }\n return removed;\n }\n\n /**\n * Removes all components or (if given) all components by a particular\n * name.\n *\n * @param {String=} name Lowercase component name\n */\n removeAllSubcomponents(name) {\n let removed = this._removeAllObjects(COMPONENT_INDEX, '_components', name);\n this._hydratedComponentCount = 0;\n return removed;\n }\n\n /**\n * Adds an {@link ICAL.Property} to the component.\n *\n * @param {Property} property The property to add\n * @return {Property} The passed in property\n */\n addProperty(property) {\n if (!(property instanceof Property)) {\n throw new TypeError('must be instance of ICAL.Property');\n }\n\n if (!this._properties) {\n this._properties = [];\n this._hydratedPropertyCount = 0;\n }\n\n if (property.parent) {\n property.parent.removeProperty(property);\n }\n\n let idx = this.jCal[PROPERTY_INDEX].push(property.jCal);\n this._properties[idx - 1] = property;\n this._hydratedPropertyCount++;\n property.parent = this;\n return property;\n }\n\n /**\n * Helper method to add a property with a value to the component.\n *\n * @param {String} name Property name to add\n * @param {String|Number|Object} value Property value\n * @return {Property} The created property\n */\n addPropertyWithValue(name, value) {\n let prop = new Property(name);\n prop.setValue(value);\n\n this.addProperty(prop);\n\n return prop;\n }\n\n /**\n * Helper method that will update or create a property of the given name\n * and sets its value. If multiple properties with the given name exist,\n * only the first is updated.\n *\n * @param {String} name Property name to update\n * @param {String|Number|Object} value Property value\n * @return {Property} The created property\n */\n updatePropertyWithValue(name, value) {\n let prop = this.getFirstProperty(name);\n\n if (prop) {\n prop.setValue(value);\n } else {\n prop = this.addPropertyWithValue(name, value);\n }\n\n return prop;\n }\n\n /**\n * Removes a single property by name or the instance of the specific\n * property.\n *\n * @param {String|Property} nameOrProp Property name or instance to remove\n * @return {Boolean} True, when deleted\n */\n removeProperty(nameOrProp) {\n let removed = this._removeObject(PROPERTY_INDEX, '_properties', nameOrProp);\n if (removed) {\n this._hydratedPropertyCount--;\n }\n return removed;\n }\n\n /**\n * Removes all properties associated with this component, optionally\n * filtered by name.\n *\n * @param {String=} name Lowercase property name\n * @return {Boolean} True, when deleted\n */\n removeAllProperties(name) {\n let removed = this._removeAllObjects(PROPERTY_INDEX, '_properties', name);\n this._hydratedPropertyCount = 0;\n return removed;\n }\n\n /**\n * Returns the Object representation of this component. The returned object\n * is a live jCal object and should be cloned if modified.\n * @return {Object}\n */\n toJSON() {\n return this.jCal;\n }\n\n /**\n * The string representation of this component.\n * @return {String}\n */\n toString() {\n return stringify.component(\n this.jCal, this._designSet\n );\n }\n\n /**\n * Retrieve a time zone definition from the component tree, if any is present.\n * If the tree contains no time zone definitions or the TZID cannot be\n * matched, returns null.\n *\n * @param {String} tzid The ID of the time zone to retrieve\n * @return {Timezone} The time zone corresponding to the ID, or null\n */\n getTimeZoneByID(tzid) {\n // VTIMEZONE components can only appear as a child of the VCALENDAR\n // component; walk the tree if we're not the root.\n if (this.parent) {\n return this.parent.getTimeZoneByID(tzid);\n }\n\n // If there is no time zone cache, we are probably parsing an incomplete\n // file and will have no time zone definitions.\n if (!this._timezoneCache) {\n return null;\n }\n\n if (this._timezoneCache.has(tzid)) {\n return this._timezoneCache.get(tzid);\n }\n\n // If the time zone is not already cached, hydrate it from the\n // subcomponents.\n const zones = this.getAllSubcomponents('vtimezone');\n for (const zone of zones) {\n if (zone.getFirstProperty('tzid').getFirstValue() === tzid) {\n const hydratedZone = new Timezone({\n component: zone,\n tzid: tzid,\n });\n\n this._timezoneCache.set(tzid, hydratedZone);\n\n return hydratedZone;\n }\n }\n\n // Per the standard, we should always have a time zone defined in a file\n // for any referenced TZID, but don't blow up if the file is invalid.\n return null;\n }\n}\n\n/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n * Portions Copyright (C) Philipp Kewisch */\n\n/**\n * Primary class for expanding recurring rules. Can take multiple rrules, rdates, exdate(s) and\n * iterate (in order) over each next occurrence.\n *\n * Once initialized this class can also be serialized saved and continue iteration from the last\n * point.\n *\n * NOTE: it is intended that this class is to be used with {@link ICAL.Event} which handles recurrence\n * exceptions.\n *\n * @example\n * // assuming event is a parsed ical component\n * var event;\n *\n * var expand = new ICAL.RecurExpansion({\n * component: event,\n * dtstart: event.getFirstPropertyValue('dtstart')\n * });\n *\n * // remember there are infinite rules so it is a good idea to limit the scope of the iterations\n * // then resume later on.\n *\n * // next is always an ICAL.Time or null\n * var next;\n *\n * while (someCondition && (next = expand.next())) {\n * // do something with next\n * }\n *\n * // save instance for later\n * var json = JSON.stringify(expand);\n *\n * //...\n *\n * // NOTE: if the component's properties have changed you will need to rebuild the class and start\n * // over. This only works when the component's recurrence info is the same.\n * var expand = new ICAL.RecurExpansion(JSON.parse(json));\n *\n * @memberof ICAL\n */\nclass RecurExpansion {\n /**\n * Creates a new ICAL.RecurExpansion instance.\n *\n * The options object can be filled with the specified initial values. It can also contain\n * additional members, as a result of serializing a previous expansion state, as shown in the\n * example.\n *\n * @param {Object} options\n * Recurrence expansion options\n * @param {Time} options.dtstart\n * Start time of the event\n * @param {Component=} options.component\n * Component for expansion, required if not resuming.\n */\n constructor(options) {\n this.ruleDates = [];\n this.exDates = [];\n this.fromData(options);\n }\n\n /**\n * True when iteration is fully completed.\n * @type {Boolean}\n */\n complete = false;\n\n /**\n * Array of rrule iterators.\n *\n * @type {RecurIterator[]}\n * @private\n */\n ruleIterators = null;\n\n /**\n * Array of rdate instances.\n *\n * @type {Time[]}\n * @private\n */\n ruleDates = null;\n\n /**\n * Array of exdate instances.\n *\n * @type {Time[]}\n * @private\n */\n exDates = null;\n\n /**\n * Current position in ruleDates array.\n * @type {Number}\n * @private\n */\n ruleDateInc = 0;\n\n /**\n * Current position in exDates array\n * @type {Number}\n * @private\n */\n exDateInc = 0;\n\n /**\n * Current negative date.\n *\n * @type {Time}\n * @private\n */\n exDate = null;\n\n /**\n * Current additional date.\n *\n * @type {Time}\n * @private\n */\n ruleDate = null;\n\n /**\n * Start date of recurring rules.\n *\n * @type {Time}\n */\n dtstart = null;\n\n /**\n * Last expanded time\n *\n * @type {Time}\n */\n last = null;\n\n /**\n * Initialize the recurrence expansion from the data object. The options\n * object may also contain additional members, see the\n * {@link ICAL.RecurExpansion constructor} for more details.\n *\n * @param {Object} options\n * Recurrence expansion options\n * @param {Time} options.dtstart\n * Start time of the event\n * @param {Component=} options.component\n * Component for expansion, required if not resuming.\n */\n fromData(options) {\n let start = formatClassType(options.dtstart, Time);\n\n if (!start) {\n throw new Error('.dtstart (ICAL.Time) must be given');\n } else {\n this.dtstart = start;\n }\n\n if (options.component) {\n this._init(options.component);\n } else {\n this.last = formatClassType(options.last, Time) || start.clone();\n\n if (!options.ruleIterators) {\n throw new Error('.ruleIterators or .component must be given');\n }\n\n this.ruleIterators = options.ruleIterators.map(function(item) {\n return formatClassType(item, RecurIterator);\n });\n\n this.ruleDateInc = options.ruleDateInc;\n this.exDateInc = options.exDateInc;\n\n if (options.ruleDates) {\n this.ruleDates = options.ruleDates.map(item => formatClassType(item, Time));\n this.ruleDate = this.ruleDates[this.ruleDateInc];\n }\n\n if (options.exDates) {\n this.exDates = options.exDates.map(item => formatClassType(item, Time));\n this.exDate = this.exDates[this.exDateInc];\n }\n\n if (typeof(options.complete) !== 'undefined') {\n this.complete = options.complete;\n }\n }\n }\n\n /**\n * Retrieve the next occurrence in the series.\n * @return {Time}\n */\n next() {\n let iter;\n let next;\n let compare;\n\n let maxTries = 500;\n let currentTry = 0;\n\n while (true) {\n if (currentTry++ > maxTries) {\n throw new Error(\n 'max tries have occurred, rule may be impossible to fulfill.'\n );\n }\n\n next = this.ruleDate;\n iter = this._nextRecurrenceIter(this.last);\n\n // no more matches\n // because we increment the rule day or rule\n // _after_ we choose a value this should be\n // the only spot where we need to worry about the\n // end of events.\n if (!next && !iter) {\n // there are no more iterators or rdates\n this.complete = true;\n break;\n }\n\n // no next rule day or recurrence rule is first.\n if (!next || (iter && next.compare(iter.last) > 0)) {\n // must be cloned, recur will reuse the time element.\n next = iter.last.clone();\n // move to next so we can continue\n iter.next();\n }\n\n // if the ruleDate is still next increment it.\n if (this.ruleDate === next) {\n this._nextRuleDay();\n }\n\n this.last = next;\n\n // check the negative rules\n if (this.exDate) {\n compare = this.exDate.compare(this.last);\n\n if (compare < 0) {\n this._nextExDay();\n }\n\n // if the current rule is excluded skip it.\n if (compare === 0) {\n this._nextExDay();\n continue;\n }\n }\n\n //XXX: The spec states that after we resolve the final\n // list of dates we execute exdate this seems somewhat counter\n // intuitive to what I have seen most servers do so for now\n // I exclude based on the original date not the one that may\n // have been modified by the exception.\n return this.last;\n }\n }\n\n /**\n * Converts object into a serialize-able format. This format can be passed\n * back into the expansion to resume iteration.\n * @return {Object}\n */\n toJSON() {\n function toJSON(item) {\n return item.toJSON();\n }\n\n let result = Object.create(null);\n result.ruleIterators = this.ruleIterators.map(toJSON);\n\n if (this.ruleDates) {\n result.ruleDates = this.ruleDates.map(toJSON);\n }\n\n if (this.exDates) {\n result.exDates = this.exDates.map(toJSON);\n }\n\n result.ruleDateInc = this.ruleDateInc;\n result.exDateInc = this.exDateInc;\n result.last = this.last.toJSON();\n result.dtstart = this.dtstart.toJSON();\n result.complete = this.complete;\n\n return result;\n }\n\n /**\n * Extract all dates from the properties in the given component. The\n * properties will be filtered by the property name.\n *\n * @private\n * @param {Component} component The component to search in\n * @param {String} propertyName The property name to search for\n * @return {Time[]} The extracted dates.\n */\n _extractDates(component, propertyName) {\n let result = [];\n let props = component.getAllProperties(propertyName);\n\n for (let i = 0, len = props.length; i < len; i++) {\n for (let prop of props[i].getValues()) {\n let idx = binsearchInsert(\n result,\n prop,\n (a, b) => a.compare(b)\n );\n\n // ordered insert\n result.splice(idx, 0, prop);\n }\n }\n\n return result;\n }\n\n /**\n * Initialize the recurrence expansion.\n *\n * @private\n * @param {Component} component The component to initialize from.\n */\n _init(component) {\n this.ruleIterators = [];\n\n this.last = this.dtstart.clone();\n\n // to provide api consistency non-recurring\n // events can also use the iterator though it will\n // only return a single time.\n if (!component.hasProperty('rdate') &&\n !component.hasProperty('rrule') &&\n !component.hasProperty('recurrence-id')) {\n this.ruleDate = this.last.clone();\n this.complete = true;\n return;\n }\n\n if (component.hasProperty('rdate')) {\n this.ruleDates = this._extractDates(component, 'rdate');\n\n // special hack for cases where first rdate is prior\n // to the start date. We only check for the first rdate.\n // This is mostly for google's crazy recurring date logic\n // (contacts birthdays).\n if ((this.ruleDates[0]) &&\n (this.ruleDates[0].compare(this.dtstart) < 0)) {\n\n this.ruleDateInc = 0;\n this.last = this.ruleDates[0].clone();\n } else {\n this.ruleDateInc = binsearchInsert(\n this.ruleDates,\n this.last,\n (a, b) => a.compare(b)\n );\n }\n\n this.ruleDate = this.ruleDates[this.ruleDateInc];\n }\n\n if (component.hasProperty('rrule')) {\n let rules = component.getAllProperties('rrule');\n let i = 0;\n let len = rules.length;\n\n let rule;\n let iter;\n\n for (; i < len; i++) {\n rule = rules[i].getFirstValue();\n iter = rule.iterator(this.dtstart);\n this.ruleIterators.push(iter);\n\n // increment to the next occurrence so future\n // calls to next return times beyond the initial iteration.\n // XXX: I find this suspicious might be a bug?\n iter.next();\n }\n }\n\n if (component.hasProperty('exdate')) {\n this.exDates = this._extractDates(component, 'exdate');\n // if we have a .last day we increment the index to beyond it.\n this.exDateInc = binsearchInsert(\n this.exDates,\n this.last,\n (a, b) => a.compare(b)\n );\n\n this.exDate = this.exDates[this.exDateInc];\n }\n }\n\n /**\n * Advance to the next exdate\n * @private\n */\n _nextExDay() {\n this.exDate = this.exDates[++this.exDateInc];\n }\n\n /**\n * Advance to the next rule date\n * @private\n */\n _nextRuleDay() {\n this.ruleDate = this.ruleDates[++this.ruleDateInc];\n }\n\n /**\n * Find and return the recurrence rule with the most recent event and\n * return it.\n *\n * @private\n * @return {?RecurIterator} Found iterator.\n */\n _nextRecurrenceIter() {\n let iters = this.ruleIterators;\n\n if (iters.length === 0) {\n return null;\n }\n\n let len = iters.length;\n let iter;\n let iterTime;\n let iterIdx = 0;\n let chosenIter;\n\n // loop through each iterator\n for (; iterIdx < len; iterIdx++) {\n iter = iters[iterIdx];\n iterTime = iter.last;\n\n // if iteration is complete\n // then we must exclude it from\n // the search and remove it.\n if (iter.completed) {\n len--;\n if (iterIdx !== 0) {\n iterIdx--;\n }\n iters.splice(iterIdx, 1);\n continue;\n }\n\n // find the most recent possible choice\n if (!chosenIter || chosenIter.last.compare(iterTime) > 0) {\n // that iterator is saved\n chosenIter = iter;\n }\n }\n\n // the chosen iterator is returned but not mutated\n // this iterator contains the most recent event.\n return chosenIter;\n }\n}\n\n/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n * Portions Copyright (C) Philipp Kewisch */\n\n/**\n * This lets typescript resolve our custom types in the\n * generated d.ts files (jsdoc typedefs are converted to typescript types).\n * Ignore prevents the typedefs from being documented more than once.\n * @ignore\n * @typedef {import(\"./types.js\").frequencyValues} frequencyValues\n * Imports the 'frequencyValues' type from the \"types.js\" module\n * @typedef {import(\"./types.js\").occurrenceDetails} occurrenceDetails\n * Imports the 'occurrenceDetails' type from the \"types.js\" module\n */\n\n/**\n * ICAL.js is organized into multiple layers. The bottom layer is a raw jCal\n * object, followed by the component/property layer. The highest level is the\n * event representation, which this class is part of. See the\n * {@tutorial layers} guide for more details.\n *\n * @memberof ICAL\n */\nclass Event {\n /**\n * Creates a new ICAL.Event instance.\n *\n * @param {Component=} component The ICAL.Component to base this event on\n * @param {Object} [options] Options for this event\n * @param {Boolean=} options.strictExceptions When true, will verify exceptions are related by\n * their UUID\n * @param {Array<Component|Event>=} options.exceptions\n * Exceptions to this event, either as components or events. If not\n * specified exceptions will automatically be set in relation of\n * component's parent\n */\n constructor(component, options) {\n if (!(component instanceof Component)) {\n options = component;\n component = null;\n }\n\n if (component) {\n this.component = component;\n } else {\n this.component = new Component('vevent');\n }\n\n this._rangeExceptionCache = Object.create(null);\n this.exceptions = Object.create(null);\n this.rangeExceptions = [];\n\n if (options && options.strictExceptions) {\n this.strictExceptions = options.strictExceptions;\n }\n\n if (options && options.exceptions) {\n options.exceptions.forEach(this.relateException, this);\n } else if (this.component.parent && !this.isRecurrenceException()) {\n this.component.parent.getAllSubcomponents('vevent').forEach(function(event) {\n if (event.hasProperty('recurrence-id')) {\n this.relateException(event);\n }\n }, this);\n }\n }\n\n\n static THISANDFUTURE = 'THISANDFUTURE';\n\n /**\n * List of related event exceptions.\n *\n * @type {Event[]}\n */\n exceptions = null;\n\n /**\n * When true, will verify exceptions are related by their UUID.\n *\n * @type {Boolean}\n */\n strictExceptions = false;\n\n /**\n * Relates a given event exception to this object. If the given component\n * does not share the UID of this event it cannot be related and will throw\n * an exception.\n *\n * If this component is an exception it cannot have other exceptions\n * related to it.\n *\n * @param {Component|Event} obj Component or event\n */\n relateException(obj) {\n if (this.isRecurrenceException()) {\n throw new Error('cannot relate exception to exceptions');\n }\n\n if (obj instanceof Component) {\n obj = new Event(obj);\n }\n\n if (this.strictExceptions && obj.uid !== this.uid) {\n throw new Error('attempted to relate unrelated exception');\n }\n\n let id = obj.recurrenceId.toString();\n\n // we don't sort or manage exceptions directly\n // here the recurrence expander handles that.\n this.exceptions[id] = obj;\n\n // index RANGE=THISANDFUTURE exceptions so we can\n // look them up later in getOccurrenceDetails.\n if (obj.modifiesFuture()) {\n let item = [\n obj.recurrenceId.toUnixTime(), id\n ];\n\n // we keep them sorted so we can find the nearest\n // value later on...\n let idx = binsearchInsert(\n this.rangeExceptions,\n item,\n compareRangeException\n );\n\n this.rangeExceptions.splice(idx, 0, item);\n }\n }\n\n /**\n * Checks if this record is an exception and has the RANGE=THISANDFUTURE\n * value.\n *\n * @return {Boolean} True, when exception is within range\n */\n modifiesFuture() {\n if (!this.component.hasProperty('recurrence-id')) {\n return false;\n }\n\n let range = this.component.getFirstProperty('recurrence-id').getParameter('range');\n return range === Event.THISANDFUTURE;\n }\n\n /**\n * Finds the range exception nearest to the given date.\n *\n * @param {Time} time usually an occurrence time of an event\n * @return {?Event} the related event/exception or null\n */\n findRangeException(time) {\n if (!this.rangeExceptions.length) {\n return null;\n }\n\n let utc = time.toUnixTime();\n let idx = binsearchInsert(\n this.rangeExceptions,\n [utc],\n compareRangeException\n );\n\n idx -= 1;\n\n // occurs before\n if (idx < 0) {\n return null;\n }\n\n let rangeItem = this.rangeExceptions[idx];\n\n /* c8 ignore next 4 */\n if (utc < rangeItem[0]) {\n // sanity check only\n return null;\n }\n\n return rangeItem[1];\n }\n\n /**\n * Returns the occurrence details based on its start time. If the\n * occurrence has an exception will return the details for that exception.\n *\n * NOTE: this method is intend to be used in conjunction\n * with the {@link ICAL.Event#iterator iterator} method.\n *\n * @param {Time} occurrence time occurrence\n * @return {occurrenceDetails} Information about the occurrence\n */\n getOccurrenceDetails(occurrence) {\n let id = occurrence.toString();\n let utcId = occurrence.convertToZone(Timezone.utcTimezone).toString();\n let item;\n let result = {\n //XXX: Clone?\n recurrenceId: occurrence\n };\n\n if (id in this.exceptions) {\n item = result.item = this.exceptions[id];\n result.startDate = item.startDate;\n result.endDate = item.endDate;\n result.item = item;\n } else if (utcId in this.exceptions) {\n item = this.exceptions[utcId];\n result.startDate = item.startDate;\n result.endDate = item.endDate;\n result.item = item;\n } else {\n // range exceptions (RANGE=THISANDFUTURE) have a\n // lower priority then direct exceptions but\n // must be accounted for first. Their item is\n // always the first exception with the range prop.\n let rangeExceptionId = this.findRangeException(\n occurrence\n );\n let end;\n\n if (rangeExceptionId) {\n let exception = this.exceptions[rangeExceptionId];\n\n // range exception must modify standard time\n // by the difference (if any) in start/end times.\n result.item = exception;\n\n let startDiff = this._rangeExceptionCache[rangeExceptionId];\n\n if (!startDiff) {\n let original = exception.recurrenceId.clone();\n let newStart = exception.startDate.clone();\n\n // zones must be same otherwise subtract may be incorrect.\n original.zone = newStart.zone;\n startDiff = newStart.subtractDate(original);\n\n this._rangeExceptionCache[rangeExceptionId] = startDiff;\n }\n\n let start = occurrence.clone();\n start.zone = exception.startDate.zone;\n start.addDuration(startDiff);\n\n end = start.clone();\n end.addDuration(exception.duration);\n\n result.startDate = start;\n result.endDate = end;\n } else {\n // no range exception standard expansion\n end = occurrence.clone();\n end.addDuration(this.duration);\n\n result.endDate = end;\n result.startDate = occurrence;\n result.item = this;\n }\n }\n\n return result;\n }\n\n /**\n * Builds a recur expansion instance for a specific point in time (defaults\n * to startDate).\n *\n * @param {Time=} startTime Starting point for expansion\n * @return {RecurExpansion} Expansion object\n */\n iterator(startTime) {\n return new RecurExpansion({\n component: this.component,\n dtstart: startTime || this.startDate\n });\n }\n\n /**\n * Checks if the event is recurring\n *\n * @return {Boolean} True, if event is recurring\n */\n isRecurring() {\n let comp = this.component;\n return comp.hasProperty('rrule') || comp.hasProperty('rdate');\n }\n\n /**\n * Checks if the event describes a recurrence exception. See\n * {@tutorial terminology} for details.\n *\n * @return {Boolean} True, if the event describes a recurrence exception\n */\n isRecurrenceException() {\n return this.component.hasProperty('recurrence-id');\n }\n\n /**\n * Returns the types of recurrences this event may have.\n *\n * Returned as an object with the following possible keys:\n *\n * - YEARLY\n * - MONTHLY\n * - WEEKLY\n * - DAILY\n * - MINUTELY\n * - SECONDLY\n *\n * @return {Object.<frequencyValues, Boolean>}\n * Object of recurrence flags\n */\n getRecurrenceTypes() {\n let rules = this.component.getAllProperties('rrule');\n let i = 0;\n let len = rules.length;\n let result = Object.create(null);\n\n for (; i < len; i++) {\n let value = rules[i].getFirstValue();\n result[value.freq] = true;\n }\n\n return result;\n }\n\n /**\n * The uid of this event\n * @type {String}\n */\n get uid() {\n return this._firstProp('uid');\n }\n\n set uid(value) {\n this._setProp('uid', value);\n }\n\n /**\n * The start date\n * @type {Time}\n */\n get startDate() {\n return this._firstProp('dtstart');\n }\n\n set startDate(value) {\n this._setTime('dtstart', value);\n }\n\n /**\n * The end date. This can be the result directly from the property, or the\n * end date calculated from start date and duration. Setting the property\n * will remove any duration properties.\n * @type {Time}\n */\n get endDate() {\n let endDate = this._firstProp('dtend');\n if (!endDate) {\n let duration = this._firstProp('duration');\n endDate = this.startDate.clone();\n if (duration) {\n endDate.addDuration(duration);\n } else if (endDate.isDate) {\n endDate.day += 1;\n }\n }\n return endDate;\n }\n\n set endDate(value) {\n if (this.component.hasProperty('duration')) {\n this.component.removeProperty('duration');\n }\n this._setTime('dtend', value);\n }\n\n /**\n * The duration. This can be the result directly from the property, or the\n * duration calculated from start date and end date. Setting the property\n * will remove any `dtend` properties.\n * @type {Duration}\n */\n get duration() {\n let duration = this._firstProp('duration');\n if (!duration) {\n return this.endDate.subtractDateTz(this.startDate);\n }\n return duration;\n }\n\n set duration(value) {\n if (this.component.hasProperty('dtend')) {\n this.component.removeProperty('dtend');\n }\n\n this._setProp('duration', value);\n }\n\n /**\n * The location of the event.\n * @type {String}\n */\n get location() {\n return this._firstProp('location');\n }\n\n set location(value) {\n this._setProp('location', value);\n }\n\n /**\n * The attendees in the event\n * @type {Property[]}\n */\n get attendees() {\n //XXX: This is way lame we should have a better\n // data structure for this later.\n return this.component.getAllProperties('attendee');\n }\n\n /**\n * The event summary\n * @type {String}\n */\n get summary() {\n return this._firstProp('summary');\n }\n\n set summary(value) {\n this._setProp('summary', value);\n }\n\n /**\n * The event description.\n * @type {String}\n */\n get description() {\n return this._firstProp('description');\n }\n\n set description(value) {\n this._setProp('description', value);\n }\n\n /**\n * The event color from [rfc7986](https://datatracker.ietf.org/doc/html/rfc7986)\n * @type {String}\n */\n get color() {\n return this._firstProp('color');\n }\n\n set color(value) {\n this._setProp('color', value);\n }\n\n /**\n * The organizer value as an uri. In most cases this is a mailto: uri, but\n * it can also be something else, like urn:uuid:...\n * @type {String}\n */\n get organizer() {\n return this._firstProp('organizer');\n }\n\n set organizer(value) {\n this._setProp('organizer', value);\n }\n\n /**\n * The sequence value for this event. Used for scheduling\n * see {@tutorial terminology}.\n * @type {Number}\n */\n get sequence() {\n return this._firstProp('sequence');\n }\n\n set sequence(value) {\n this._setProp('sequence', value);\n }\n\n /**\n * The recurrence id for this event. See {@tutorial terminology} for details.\n * @type {Time}\n */\n get recurrenceId() {\n return this._firstProp('recurrence-id');\n }\n\n set recurrenceId(value) {\n this._setTime('recurrence-id', value);\n }\n\n /**\n * Set/update a time property's value.\n * This will also update the TZID of the property.\n *\n * TODO: this method handles the case where we are switching\n * from a known timezone to an implied timezone (one without TZID).\n * This does _not_ handle the case of moving between a known\n * (by TimezoneService) timezone to an unknown timezone...\n *\n * We will not add/remove/update the VTIMEZONE subcomponents\n * leading to invalid ICAL data...\n * @private\n * @param {String} propName The property name\n * @param {Time} time The time to set\n */\n _setTime(propName, time) {\n let prop = this.component.getFirstProperty(propName);\n\n if (!prop) {\n prop = new Property(propName);\n this.component.addProperty(prop);\n }\n\n // utc and local don't get a tzid\n if (\n time.zone === Timezone.localTimezone ||\n time.zone === Timezone.utcTimezone\n ) {\n // remove the tzid\n prop.removeParameter('tzid');\n } else {\n prop.setParameter('tzid', time.zone.tzid);\n }\n\n prop.setValue(time);\n }\n\n _setProp(name, value) {\n this.component.updatePropertyWithValue(name, value);\n }\n\n _firstProp(name) {\n return this.component.getFirstPropertyValue(name);\n }\n\n /**\n * The string representation of this event.\n * @return {String}\n */\n toString() {\n return this.component.toString();\n }\n}\n\nfunction compareRangeException(a, b) {\n if (a[0] > b[0]) return 1;\n if (b[0] > a[0]) return -1;\n return 0;\n}\n\n/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n * Portions Copyright (C) Philipp Kewisch */\n\n/**\n * The ComponentParser is used to process a String or jCal Object,\n * firing callbacks for various found components, as well as completion.\n *\n * @example\n * var options = {\n * // when false no events will be emitted for type\n * parseEvent: true,\n * parseTimezone: true\n * };\n *\n * var parser = new ICAL.ComponentParser(options);\n *\n * parser.onevent(eventComponent) {\n * //...\n * }\n *\n * // ontimezone, etc...\n *\n * parser.oncomplete = function() {\n *\n * };\n *\n * parser.process(stringOrComponent);\n *\n * @memberof ICAL\n */\nclass ComponentParser {\n /**\n * Creates a new ICAL.ComponentParser instance.\n *\n * @param {Object=} options Component parser options\n * @param {Boolean} options.parseEvent Whether events should be parsed\n * @param {Boolean} options.parseTimezeone Whether timezones should be parsed\n */\n constructor(options) {\n if (typeof(options) === 'undefined') {\n options = {};\n }\n\n for (let [key, value] of Object.entries(options)) {\n this[key] = value;\n }\n }\n\n /**\n * When true, parse events\n *\n * @type {Boolean}\n */\n parseEvent = true;\n\n /**\n * When true, parse timezones\n *\n * @type {Boolean}\n */\n parseTimezone = true;\n\n\n /* SAX like events here for reference */\n\n /**\n * Fired when parsing is complete\n * @callback\n */\n oncomplete = /* c8 ignore next */ function() {};\n\n /**\n * Fired if an error occurs during parsing.\n *\n * @callback\n * @param {Error} err details of error\n */\n onerror = /* c8 ignore next */ function(err) {};\n\n /**\n * Fired when a top level component (VTIMEZONE) is found\n *\n * @callback\n * @param {Timezone} component Timezone object\n */\n ontimezone = /* c8 ignore next */ function(component) {};\n\n /**\n * Fired when a top level component (VEVENT) is found.\n *\n * @callback\n * @param {Event} component Top level component\n */\n onevent = /* c8 ignore next */ function(component) {};\n\n /**\n * Process a string or parse ical object. This function itself will return\n * nothing but will start the parsing process.\n *\n * Events must be registered prior to calling this method.\n *\n * @param {Component|String|Object} ical The component to process,\n * either in its final form, as a jCal Object, or string representation\n */\n process(ical) {\n //TODO: this is sync now in the future we will have a incremental parser.\n if (typeof(ical) === 'string') {\n ical = parse(ical);\n }\n\n if (!(ical instanceof Component)) {\n ical = new Component(ical);\n }\n\n let components = ical.getAllSubcomponents();\n let i = 0;\n let len = components.length;\n let component;\n\n for (; i < len; i++) {\n component = components[i];\n\n switch (component.name) {\n case 'vtimezone':\n if (this.parseTimezone) {\n let tzid = component.getFirstPropertyValue('tzid');\n if (tzid) {\n this.ontimezone(new Timezone({\n tzid: tzid,\n component: component\n }));\n }\n }\n break;\n case 'vevent':\n if (this.parseEvent) {\n this.onevent(new Event(component));\n }\n break;\n default:\n continue;\n }\n }\n\n //XXX: ideally we should do a \"nextTick\" here\n // so in all cases this is actually async.\n this.oncomplete();\n }\n}\n\n/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n * Portions Copyright (C) Philipp Kewisch */\n\n/**\n * The main ICAL module. Provides access to everything else.\n *\n * @alias ICAL\n * @namespace ICAL\n * @property {ICAL.design} design\n * @property {ICAL.helpers} helpers\n */\nvar ICALmodule = {\n /**\n * The number of characters before iCalendar line folding should occur\n * @type {Number}\n * @default 75\n */\n foldLength: 75,\n\n debug: false,\n\n /**\n * The character(s) to be used for a newline. The default value is provided by\n * rfc5545.\n * @type {String}\n * @default \"\\r\\n\"\n */\n newLineChar: '\\r\\n',\n\n Binary,\n Component,\n ComponentParser,\n Duration,\n Event,\n Period,\n Property,\n Recur,\n RecurExpansion,\n RecurIterator,\n Time,\n Timezone,\n TimezoneService,\n UtcOffset,\n VCardTime,\n\n parse,\n stringify,\n\n design: design$1,\n helpers\n};\n\nexport { ICALmodule as default };\n","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default { randomUUID };\n","let getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n if (!getRandomValues) {\n if (typeof crypto === 'undefined' || !crypto.getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n getRandomValues = crypto.getRandomValues.bind(crypto);\n }\n return getRandomValues(rnds8);\n}\n","import validate from './validate.js';\nconst byteToHex = [];\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nexport function unsafeStringify(arr, offset = 0) {\n return (byteToHex[arr[offset + 0]] +\n byteToHex[arr[offset + 1]] +\n byteToHex[arr[offset + 2]] +\n byteToHex[arr[offset + 3]] +\n '-' +\n byteToHex[arr[offset + 4]] +\n byteToHex[arr[offset + 5]] +\n '-' +\n byteToHex[arr[offset + 6]] +\n byteToHex[arr[offset + 7]] +\n '-' +\n byteToHex[arr[offset + 8]] +\n byteToHex[arr[offset + 9]] +\n '-' +\n byteToHex[arr[offset + 10]] +\n byteToHex[arr[offset + 11]] +\n byteToHex[arr[offset + 12]] +\n byteToHex[arr[offset + 13]] +\n byteToHex[arr[offset + 14]] +\n byteToHex[arr[offset + 15]]).toLowerCase();\n}\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset);\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n return uuid;\n}\nexport default stringify;\n","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n options = options || {};\n const rnds = options.random ?? options.rng?.() ?? rng();\n if (rnds.length < 16) {\n throw new Error('Random bytes length must be >= 16');\n }\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n if (buf) {\n offset = offset || 0;\n if (offset < 0 || offset + 16 > buf.length) {\n throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n }\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n return buf;\n }\n return unsafeStringify(rnds);\n}\nexport default v4;\n","import './assets/index-UKC4AV1t.css';\nimport NcDateTimePickerNative from \"@nextcloud/vue/dist/Components/NcDateTimePickerNative.js\";\nimport NcButton from \"@nextcloud/vue/dist/Components/NcButton.js\";\nimport IconDelete from \"vue-material-design-icons/Delete.vue\";\nimport IconAdd from \"vue-material-design-icons/Plus.vue\";\nimport { getFirstDay } from \"@nextcloud/l10n\";\nimport { getZoneString } from \"icalzone\";\nimport ICAL from \"ical.js\";\nimport { v4 } from \"uuid\";\nimport { getLoggerBuilder } from \"@nextcloud/logger\";\nfunction normalizeComponent(scriptExports, render2, staticRenderFns, functionalTemplate, injectStyles, scopeId, moduleIdentifier, shadowMode) {\n var options = typeof scriptExports === \"function\" ? scriptExports.options : scriptExports;\n if (render2) {\n options.render = render2;\n options.staticRenderFns = staticRenderFns;\n options._compiled = true;\n }\n {\n options._scopeId = \"data-v-\" + scopeId;\n }\n return {\n exports: scriptExports,\n options\n };\n}\nconst _sfc_main = {\n name: \"CalendarAvailability\",\n components: {\n NcDateTimePickerNative,\n NcButton,\n IconAdd,\n IconDelete\n },\n props: {\n slots: {\n type: Object,\n required: true\n },\n loading: {\n type: Boolean,\n default: false\n },\n l10nTo: {\n type: String,\n required: true\n },\n l10nDeleteSlot: {\n type: String,\n required: true\n },\n l10nEmptyDay: {\n type: String,\n required: true\n },\n l10nAddSlot: {\n type: String,\n required: true\n },\n l10nWeekDayListLabel: {\n type: String,\n default: \"Weekdays\"\n },\n l10nMonday: {\n type: String,\n required: true\n },\n l10nTuesday: {\n type: String,\n required: true\n },\n l10nWednesday: {\n type: String,\n required: true\n },\n l10nThursday: {\n type: String,\n required: true\n },\n l10nFriday: {\n type: String,\n required: true\n },\n l10nSaturday: {\n type: String,\n required: true\n },\n l10nSunday: {\n type: String,\n required: true\n },\n l10nStartPickerLabel: {\n type: Function,\n default: (dayName) => \"Pick a start time for \".concat(dayName)\n },\n l10nEndPickerLabel: {\n type: Function,\n default: (dayName) => \"Pick a end time for \".concat(dayName)\n }\n },\n data() {\n return {\n internalSlots: this.slotsToInternalData(this.slots)\n };\n },\n watch: {\n slots() {\n this.internalSlots = this.slotsToInternalData(this.slots);\n }\n },\n methods: {\n timeStampSlotsToDateObjectSlots(slots) {\n return slots.map((slot) => ({\n start: new Date(slot.start * 1e3),\n end: new Date(slot.end * 1e3)\n }));\n },\n slotsToInternalData() {\n const moToSa = [\n {\n id: \"MO\",\n displayName: this.l10nMonday,\n slots: this.timeStampSlotsToDateObjectSlots(this.slots.MO)\n },\n {\n id: \"TU\",\n displayName: this.l10nTuesday,\n slots: this.timeStampSlotsToDateObjectSlots(this.slots.TU)\n },\n {\n id: \"WE\",\n displayName: this.l10nWednesday,\n slots: this.timeStampSlotsToDateObjectSlots(this.slots.WE)\n },\n {\n id: \"TH\",\n displayName: this.l10nThursday,\n slots: this.timeStampSlotsToDateObjectSlots(this.slots.TH)\n },\n {\n id: \"FR\",\n displayName: this.l10nFriday,\n slots: this.timeStampSlotsToDateObjectSlots(this.slots.FR)\n },\n {\n id: \"SA\",\n displayName: this.l10nSaturday,\n slots: this.timeStampSlotsToDateObjectSlots(this.slots.SA)\n }\n ];\n const sunday = {\n id: \"SU\",\n displayName: this.l10nSunday,\n slots: this.timeStampSlotsToDateObjectSlots(this.slots.SU)\n };\n return getFirstDay() === 1 ? [...moToSa, sunday] : [sunday, ...moToSa];\n },\n internalDataToSlots() {\n const converted = {};\n this.internalSlots.forEach(({ id, slots }) => {\n converted[id] = slots.map((slot) => ({\n start: Math.round(slot.start.getTime() / 1e3),\n end: Math.round(slot.end.getTime() / 1e3)\n }));\n });\n return converted;\n },\n addSlot(day) {\n const start = /* @__PURE__ */ new Date();\n start.setHours(9, 0, 0, 0);\n const end = /* @__PURE__ */ new Date();\n end.setHours(17, 0, 0, 0);\n day.slots.push({\n start,\n end\n });\n this.onChangeSlots();\n },\n removeSlot(day, idx) {\n day.slots.splice(idx, 1);\n this.onChangeSlots();\n },\n onChangeSlots() {\n this.$emit(\"update:slots\", this.internalDataToSlots());\n }\n }\n};\nvar _sfc_render = function render() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"ul\", { staticClass: \"week-day-container\", attrs: { \"aria-label\": _vm.l10nWeekDayListLabel } }, [_vm._l(_vm.internalSlots, function(day) {\n return [_c(\"li\", { key: \"day-label-\".concat(day.id), staticClass: \"day-container\" }, [_c(\"div\", { staticClass: \"label-weekday\" }, [_c(\"span\", { attrs: { \"id\": day.displayName + \"-label\" } }, [_vm._v(_vm._s(day.displayName))])]), _c(\"div\", { key: \"day-slots-\".concat(day.id), staticClass: \"availability-slots\" }, [_c(\"div\", { staticClass: \"availability-slot-group\" }, [_vm._l(day.slots, function(slot, idx) {\n var _a, _b;\n return [_c(\"div\", { key: \"slot-\".concat(day.id, \"-\").concat(idx), staticClass: \"availability-slot\" }, [_c(\"NcDateTimePickerNative\", { staticClass: \"start-date\", attrs: { \"id\": \"start-\".concat(day.id, \"-\").concat(idx), \"type\": \"time\", \"label\": (_a = _vm.l10nStartPickerLabel) == null ? void 0 : _a.call(_vm, day.displayName), \"hide-label\": true }, on: { \"change\": _vm.onChangeSlots }, model: { value: slot.start, callback: function($$v) {\n _vm.$set(slot, \"start\", $$v);\n }, expression: \"slot.start\" } }), _c(\"span\", { staticClass: \"to-text\" }, [_vm._v(\" \" + _vm._s(_vm.l10nTo) + \" \")]), _c(\"NcDateTimePickerNative\", { staticClass: \"end-date\", attrs: { \"id\": \"end-\".concat(day.id, \"-\").concat(idx), \"type\": \"time\", \"label\": (_b = _vm.l10nEndPickerLabel) == null ? void 0 : _b.call(_vm, day.displayName), \"hide-label\": true }, on: { \"change\": _vm.onChangeSlots }, model: { value: slot.end, callback: function($$v) {\n _vm.$set(slot, \"end\", $$v);\n }, expression: \"slot.end\" } }), _c(\"NcButton\", { key: \"slot-\".concat(day.id, \"-\").concat(idx, \"-btn\"), staticClass: \"button\", attrs: { \"type\": \"tertiary\", \"aria-label\": _vm.l10nDeleteSlot, \"title\": _vm.l10nDeleteSlot }, on: { \"click\": function($event) {\n return _vm.removeSlot(day, idx);\n } }, scopedSlots: _vm._u([{ key: \"icon\", fn: function() {\n return [_c(\"IconDelete\", { attrs: { \"size\": 20 } })];\n }, proxy: true }], null, true) })], 1)];\n })], 2), day.slots.length === 0 ? _c(\"span\", { staticClass: \"empty-content\" }, [_vm._v(\" \" + _vm._s(_vm.l10nEmptyDay) + \" \")]) : _vm._e()]), _c(\"NcButton\", { key: \"add-slot-\".concat(day.id), staticClass: \"add-another button\", attrs: { \"disabled\": _vm.loading, \"title\": _vm.l10nAddSlot, \"aria-label\": _vm.l10nAddSlot }, on: { \"click\": function($event) {\n return _vm.addSlot(day);\n } }, scopedSlots: _vm._u([{ key: \"icon\", fn: function() {\n return [_c(\"IconAdd\", { attrs: { \"size\": 20 } })];\n }, proxy: true }], null, true) })], 1)];\n })], 2);\n};\nvar _sfc_staticRenderFns = [];\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n _sfc_main,\n _sfc_render,\n _sfc_staticRenderFns,\n false,\n null,\n \"c15ebf8b\"\n);\nconst CalendarAvailability = __component__.exports;\nconst logger = getLoggerBuilder().detectUser().setApp(\"@nextcloud/calendar-availability-vue\").build();\nfunction getEmptySlots() {\n return {\n MO: [],\n TU: [],\n WE: [],\n TH: [],\n FR: [],\n SA: [],\n SU: []\n };\n}\nfunction vavailabilityToSlots(vavailability) {\n const parsedIcal = ICAL.parse(vavailability);\n const vcalendarComp = new ICAL.Component(parsedIcal);\n const vavailabilityComp = vcalendarComp.getFirstSubcomponent(\"vavailability\");\n let timezoneId;\n const timezoneComp = vcalendarComp.getFirstSubcomponent(\"vtimezone\");\n if (timezoneComp) {\n timezoneId = timezoneComp.getFirstProperty(\"tzid\").getFirstValue();\n }\n const availableComps = vavailabilityComp.getAllSubcomponents(\"available\");\n const slots = getEmptySlots();\n availableComps.forEach((availableComp) => {\n const startIcalDate = availableComp.getFirstProperty(\"dtstart\").getFirstValue();\n const endIcalDate = availableComp.getFirstProperty(\"dtend\").getFirstValue();\n const rrule = availableComp.getFirstProperty(\"rrule\");\n const start = /* @__PURE__ */ new Date();\n start.setHours(startIcalDate.hour, startIcalDate.minute, 0, 0);\n const end = /* @__PURE__ */ new Date();\n end.setHours(endIcalDate.hour, endIcalDate.minute, 0, 0);\n if (rrule.getFirstValue().freq !== \"WEEKLY\") {\n logger.warn(\"rrule not supported\", {\n rrule: rrule.toICALString()\n });\n return;\n }\n rrule.getFirstValue().getComponent(\"BYDAY\").forEach((day) => {\n slots[day].push({\n start: start.getTime() / 1e3,\n end: end.getTime() / 1e3\n });\n });\n });\n return {\n slots,\n timezoneId\n };\n}\nfunction slotsToVavailability(slots, timezoneId) {\n const vcalendarComp = new ICAL.Component(\"vcalendar\");\n vcalendarComp.addPropertyWithValue(\"prodid\", \"Nextcloud DAV app\");\n const predefinedTimezoneIcal = getZoneString(timezoneId);\n if (predefinedTimezoneIcal) {\n const timezoneComp = new ICAL.Component(ICAL.parse(predefinedTimezoneIcal));\n vcalendarComp.addSubcomponent(timezoneComp);\n } else {\n const timezoneComp = new ICAL.Component(\"vtimezone\");\n timezoneComp.addPropertyWithValue(\"tzid\", timezoneId);\n vcalendarComp.addSubcomponent(timezoneComp);\n }\n const vavailabilityComp = new ICAL.Component(\"vavailability\");\n const deduplicated = slots.reduce((acc, slot) => {\n var _a;\n const start = new Date(slot.start * 1e3);\n const end = new Date(slot.end * 1e3);\n const key = [\n start.getHours(),\n start.getMinutes(),\n end.getHours(),\n end.getMinutes()\n ].join(\"-\");\n return {\n ...acc,\n [key]: [...(_a = acc[key]) != null ? _a : [], slot]\n };\n }, {});\n Object.keys(deduplicated).map((key) => {\n const slots2 = deduplicated[key];\n const start = slots2[0].start;\n const end = slots2[0].end;\n const days = slots2.map((slot) => slot.day).filter((day, index, self) => self.indexOf(day) === index);\n const availableComp = new ICAL.Component(\"available\");\n const startTimeProp = availableComp.addPropertyWithValue(\"dtstart\", ICAL.Time.fromJSDate(new Date(start * 1e3), false));\n startTimeProp.setParameter(\"tzid\", timezoneId);\n const endTimeProp = availableComp.addPropertyWithValue(\"dtend\", ICAL.Time.fromJSDate(new Date(end * 1e3), false));\n endTimeProp.setParameter(\"tzid\", timezoneId);\n availableComp.addPropertyWithValue(\"uid\", v4());\n availableComp.addPropertyWithValue(\"rrule\", {\n freq: \"WEEKLY\",\n byday: days\n });\n return availableComp;\n }).map(vavailabilityComp.addSubcomponent.bind(vavailabilityComp));\n vcalendarComp.addSubcomponent(vavailabilityComp);\n return vcalendarComp.toString();\n}\nexport {\n CalendarAvailability,\n getEmptySlots,\n slotsToVavailability,\n vavailabilityToSlots\n};\n","/**\n * @copyright 2021 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2021 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { createClient } from 'webdav'\nimport memoize from 'lodash/fp/memoize.js'\nimport { generateRemoteUrl } from '@nextcloud/router'\nimport { getCurrentUser, getRequestToken, onRequestTokenUpdate } from '@nextcloud/auth'\n\nexport const getClient = memoize((service) => {\n\t// init webdav client\n\tconst remote = generateRemoteUrl(`dav/${service}/${getCurrentUser().uid}`)\n\tconst client = createClient(remote)\n\n\t// set CSRF token header\n\tconst setHeaders = (token) => {\n\t\tclient.setHeaders({\n\t\t\t// Add this so the server knows it is an request from the browser\n\t\t\t'X-Requested-With': 'XMLHttpRequest',\n\t\t\t// Inject user auth\n\t\t\trequesttoken: token ?? '',\n\t\t})\n\t}\n\n\t// refresh headers when request token changes\n\tonRequestTokenUpdate(setHeaders)\n\tsetHeaders(getRequestToken())\n\n\treturn client;\n})\n","<template>\n\t<div>\n\t\t<div class=\"time-zone\">\n\t\t\t<label :for=\"`vs${timeZonePickerId}__combobox`\" class=\"time-zone__heading\">\n\t\t\t\t{{ $t('dav', 'Time zone:') }}\n\t\t\t</label>\n\t\t\t<span class=\"time-zone-text\">\n\t\t\t\t<NcTimezonePicker v-model=\"timezone\" :uid=\"timeZonePickerId\" />\n\t\t\t</span>\n\t\t</div>\n\n\t\t<CalendarAvailability :slots.sync=\"slots\"\n\t\t\t:loading=\"loading\"\n\t\t\t:l10n-to=\"$t('dav', 'to')\"\n\t\t\t:l10n-delete-slot=\"$t('dav', 'Delete slot')\"\n\t\t\t:l10n-empty-day=\"$t('dav', 'No working hours set')\"\n\t\t\t:l10n-add-slot=\"$t('dav', 'Add slot')\"\n\t\t\t:l10n-week-day-list-label=\"$t('dav', 'Weekdays')\"\n\t\t\t:l10n-monday=\"$t('dav', 'Monday')\"\n\t\t\t:l10n-tuesday=\"$t('dav', 'Tuesday')\"\n\t\t\t:l10n-wednesday=\"$t('dav', 'Wednesday')\"\n\t\t\t:l10n-thursday=\"$t('dav', 'Thursday')\"\n\t\t\t:l10n-friday=\"$t('dav', 'Friday')\"\n\t\t\t:l10n-saturday=\"$t('dav', 'Saturday')\"\n\t\t\t:l10n-sunday=\"$t('dav', 'Sunday')\"\n\t\t\t:l10n-start-picker-label=\"(dayName) => $t('dav', 'Pick a start time for {dayName}', { dayName })\"\n\t\t\t:l10n-end-picker-label=\"(dayName) => $t('dav', 'Pick a end time for {dayName}', { dayName })\" />\n\n\t\t<NcCheckboxRadioSwitch :checked.sync=\"automated\">\n\t\t\t{{ $t('dav', 'Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications.') }}\n\t\t</NcCheckboxRadioSwitch>\n\n\t\t<NcButton :disabled=\"loading || saving\"\n\t\t\ttype=\"primary\"\n\t\t\t@click=\"save\">\n\t\t\t{{ $t('dav', 'Save') }}\n\t\t</NcButton>\n\t</div>\n</template>\n\n<script>\nimport { CalendarAvailability } from '@nextcloud/calendar-availability-vue'\nimport { loadState } from '@nextcloud/initial-state'\nimport {\n\tshowError,\n\tshowSuccess,\n} from '@nextcloud/dialogs'\nimport {\n\tfindScheduleInboxAvailability,\n\tgetEmptySlots,\n\tsaveScheduleInboxAvailability,\n} from '../service/CalendarService.js'\nimport {\n\tenableUserStatusAutomation,\n\tdisableUserStatusAutomation,\n} from '../service/PreferenceService.js'\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton.js'\nimport NcCheckboxRadioSwitch from '@nextcloud/vue/dist/Components/NcCheckboxRadioSwitch.js'\nimport NcTimezonePicker from '@nextcloud/vue/dist/Components/NcTimezonePicker.js'\n\nexport default {\n\tname: 'AvailabilityForm',\n\tcomponents: {\n\t\tNcButton,\n\t\tNcCheckboxRadioSwitch,\n\t\tCalendarAvailability,\n\t\tNcTimezonePicker,\n\t},\n\tdata() {\n\t\t// Try to determine the current timezone, and fall back to UTC otherwise\n\t\tconst defaultTimezoneId = (new Intl.DateTimeFormat())?.resolvedOptions()?.timeZone ?? 'UTC'\n\n\t\treturn {\n\t\t\tloading: true,\n\t\t\tsaving: false,\n\t\t\ttimezone: defaultTimezoneId,\n\t\t\tslots: getEmptySlots(),\n\t\t\tautomated: loadState('dav', 'user_status_automation') === 'yes',\n\t\t}\n\t},\n\tcomputed: {\n\t\ttimeZonePickerId() {\n\t\t\treturn `tz-${(Math.random() + 1).toString(36).substring(7)}`\n\t\t},\n\t},\n\tasync mounted() {\n\t\ttry {\n\t\t\tconst slotData = await findScheduleInboxAvailability()\n\t\t\tif (!slotData) {\n\t\t\t\tconsole.info('no availability is set')\n\t\t\t\tthis.slots = getEmptySlots()\n\t\t\t} else {\n\t\t\t\tconst { slots, timezoneId } = slotData\n\t\t\t\tthis.slots = slots\n\t\t\t\tif (timezoneId) {\n\t\t\t\t\tthis.timezone = timezoneId\n\t\t\t\t}\n\t\t\t\tconsole.info('availability loaded', this.slots, this.timezoneId)\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.error('could not load existing availability', e)\n\n\t\t\tshowError(t('dav', 'Failed to load availability'))\n\t\t} finally {\n\t\t\tthis.loading = false\n\t\t}\n\t},\n\tmethods: {\n\t\tasync save() {\n\t\t\ttry {\n\t\t\t\tthis.saving = true\n\n\t\t\t\tawait saveScheduleInboxAvailability(this.slots, this.timezone)\n\t\t\t\tif (this.automated) {\n\t\t\t\t\tawait enableUserStatusAutomation()\n\t\t\t\t} else {\n\t\t\t\t\tawait disableUserStatusAutomation()\n\t\t\t\t}\n\n\t\t\t\tshowSuccess(t('dav', 'Saved availability'))\n\t\t\t} catch (e) {\n\t\t\t\tconsole.error('could not save availability', e)\n\n\t\t\t\tshowError(t('dav', 'Failed to save availability'))\n\t\t\t} finally {\n\t\t\t\tthis.saving = false\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n:deep(.availability-day) {\n\tpadding: 0 10px 0 10px;\n\tposition: absolute;\n}\n:deep(.availability-slots) {\n\tdisplay: flex;\n\twhite-space: normal;\n}\n:deep(.availability-slot) {\n\tdisplay: flex;\n\tflex-direction: row;\n\talign-items: center;\n\tflex-wrap: wrap;\n}\n:deep(.availability-slot-group) {\n\tdisplay: flex;\n\tflex-direction: column;\n}\n:deep(.mx-input-wrapper) {\n\twidth: 85px;\n}\n:deep(.mx-datepicker) {\n\twidth: 97px;\n}\n:deep(.multiselect) {\n\tborder: 1px solid var(--color-border-dark);\n\twidth: 120px;\n}\n.time-zone {\n\tpadding: 32px 12px 12px 0;\n display: flex;\n flex-wrap: wrap;\n\n\t&__heading {\n\t\tmargin-right: calc(var(--default-grid-baseline) * 2);\n\t\tline-height: var(--default-clickable-area);\n\t\tfont-weight: bold;\n\t}\n}\n.grid-table {\n\tdisplay: grid;\n\tmargin-bottom: 32px;\n\tgrid-column-gap: 24px;\n\tgrid-row-gap: 6px;\n\tgrid-template-columns: min-content auto min-content;\n\tmax-width: 500px;\n}\n.button {\n\talign-self: flex-end;\n}\n:deep(.label-weekday) {\n\tposition: relative;\n\tdisplay: inline-flex;\n\tpadding-top: 4px;\n\talign-self: center;\n}\n\n:deep(.delete-slot) {\n\tpadding-bottom: unset;\n}\n\n:deep(.add-another) {\n\talign-self: center;\n}\n\n.to-text {\n\tpadding-right: 12px;\n}\n\n.empty-content {\n\tcolor: var(--color-text-lighter);\n\tmargin-top: 4px;\n\talign-self: center;\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AvailabilityForm.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AvailabilityForm.vue?vue&type=script&lang=js\"","/**\n * @copyright 2021 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2021 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\nimport { getClient } from '../dav/client.js'\nimport logger from './logger.js'\nimport { parseXML } from 'webdav'\n\nimport {\n\tslotsToVavailability,\n\tvavailabilityToSlots,\n} from '@nextcloud/calendar-availability-vue'\n\n/**\n *\n */\nexport function getEmptySlots() {\n\treturn {\n\t\tMO: [],\n\t\tTU: [],\n\t\tWE: [],\n\t\tTH: [],\n\t\tFR: [],\n\t\tSA: [],\n\t\tSU: [],\n\t}\n}\n\n/**\n *\n */\nexport async function findScheduleInboxAvailability() {\n\tconst client = getClient('calendars')\n\n\tconst response = await client.customRequest('inbox', {\n\t\tmethod: 'PROPFIND',\n\t\tdata: `<?xml version=\"1.0\"?>\n\t\t\t<x0:propfind xmlns:x0=\"DAV:\">\n\t\t\t <x0:prop>\n\t\t\t\t<x1:calendar-availability xmlns:x1=\"urn:ietf:params:xml:ns:caldav\"/>\n\t\t\t </x0:prop>\n\t\t\t</x0:propfind>`,\n\t})\n\n\tconst xml = await parseXML(await response.text())\n\n\tif (!xml) {\n\t\treturn undefined\n\t}\n\n\tconst availability = xml?.multistatus?.response[0]?.propstat?.prop['calendar-availability']\n\tif (!availability) {\n\t\treturn undefined\n\t}\n\n\treturn vavailabilityToSlots(availability)\n}\n\n/**\n * @param {any} slots -\n * @param {any} timezoneId -\n */\nexport async function saveScheduleInboxAvailability(slots, timezoneId) {\n\tconst all = [...Object.keys(slots).flatMap(dayId => slots[dayId].map(slot => ({\n\t\t...slot,\n\t\tday: dayId,\n\t})))]\n\n\tconst vavailability = slotsToVavailability(all, timezoneId)\n\n\tlogger.debug('New availability ical created', {\n\t\tvavailability,\n\t})\n\n\tconst client = getClient('calendars')\n\tawait client.customRequest('inbox', {\n\t\tmethod: 'PROPPATCH',\n\t\tdata: `<?xml version=\"1.0\"?>\n\t\t\t<x0:propertyupdate xmlns:x0=\"DAV:\">\n\t\t\t <x0:set>\n\t\t\t\t<x0:prop>\n\t\t\t\t <x1:calendar-availability xmlns:x1=\"urn:ietf:params:xml:ns:caldav\">${vavailability}</x1:calendar-availability>\n\t\t\t\t</x0:prop>\n\t\t\t </x0:set>\n\t\t\t</x0:propertyupdate>`,\n\t})\n}\n","/**\n * @copyright 2022 Joas Schilling <coding@schilljs.com>\n *\n * @author Joas Schilling <coding@schilljs.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport axios from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\n\n/**\n * Enable user status automation based on availability\n */\nexport async function enableUserStatusAutomation() {\n\treturn await axios.post(\n\t\tgenerateOcsUrl('/apps/provisioning_api/api/v1/config/users/{appId}/{configKey}', {\n\t\t\tappId: 'dav',\n\t\t\tconfigKey: 'user_status_automation',\n\t\t}),\n\t\t{\n\t\t\tconfigValue: 'yes',\n\t\t}\n\t)\n}\n\n/**\n * Disable user status automation based on availability\n */\nexport async function disableUserStatusAutomation() {\n\treturn await axios.delete(\n\t\tgenerateOcsUrl('/apps/provisioning_api/api/v1/config/users/{appId}/{configKey}', {\n\t\t\tappId: 'dav',\n\t\t\tconfigKey: 'user_status_automation',\n\t\t})\n\t)\n}\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AvailabilityForm.vue?vue&type=style&index=0&id=0275a141&prod&lang=scss&scoped=true\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AvailabilityForm.vue?vue&type=style&index=0&id=0275a141&prod&lang=scss&scoped=true\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AvailabilityForm.vue?vue&type=template&id=0275a141&scoped=true\"\nimport script from \"./AvailabilityForm.vue?vue&type=script&lang=js\"\nexport * from \"./AvailabilityForm.vue?vue&type=script&lang=js\"\nimport style0 from \"./AvailabilityForm.vue?vue&type=style&index=0&id=0275a141&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0275a141\",\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Availability.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Availability.vue?vue&type=script&lang=js\"","<template>\n\t<div>\n\t\t<NcSettingsSection :name=\"$t('dav', 'Availability')\"\n\t\t\t:description=\"$t('dav', 'If you configure your working hours, other people will see when you are out of office when they book a meeting.')\">\n\t\t\t<AvailabilityForm />\n\t\t</NcSettingsSection>\n\t\t<NcSettingsSection v-if=\"!hideAbsenceSettings\"\n\t\t\t:name=\"$t('dav', 'Absence')\"\n\t\t\t:description=\"$t('dav', 'Configure your next absence period.')\">\n\t\t\t<AbsenceForm />\n\t\t</NcSettingsSection>\n\t</div>\n</template>\n\n<script>\nimport NcSettingsSection from '@nextcloud/vue/dist/Components/NcSettingsSection.js'\nimport AbsenceForm from '../components/AbsenceForm.vue'\nimport AvailabilityForm from '../components/AvailabilityForm.vue'\nimport { loadState } from '@nextcloud/initial-state'\n\nexport default {\n\tname: 'Availability',\n\tcomponents: {\n\t\tNcSettingsSection,\n\t\tAbsenceForm,\n\t\tAvailabilityForm,\n\t},\n\tdata() {\n\t\treturn {\n\t\t\thideAbsenceSettings: loadState('dav', 'hide_absence_settings', true),\n\t\t}\n\t},\n}\n</script>\n","import { render, staticRenderFns } from \"./Availability.vue?vue&type=template&id=4fb66109\"\nimport script from \"./Availability.vue?vue&type=script&lang=js\"\nexport * from \"./Availability.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[_c('NcSettingsSection',{attrs:{\"name\":_vm.$t('dav', 'Availability'),\"description\":_vm.$t('dav', 'If you configure your working hours, other people will see when you are out of office when they book a meeting.')}},[_c('AvailabilityForm')],1),_vm._v(\" \"),(!_vm.hideAbsenceSettings)?_c('NcSettingsSection',{attrs:{\"name\":_vm.$t('dav', 'Absence'),\"description\":_vm.$t('dav', 'Configure your next absence period.')}},[_c('AbsenceForm')],1):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import Vue from 'vue'\nimport { translate } from '@nextcloud/l10n'\nimport Availability from './views/Availability.vue'\n\nVue.prototype.$t = translate\n\nconst View = Vue.extend(Availability);\n\n(new View({})).$mount('#settings-personal-availability')\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.availability-day[data-v-c15ebf8b] {\n padding: 0 10px 0 10px;\n position: absolute;\n}\n.availability-slots[data-v-c15ebf8b] {\n max-width: 332px;\n width: 100%;\n display: flex;\n justify-content: flex-start;\n white-space: nowrap;\n}\n.availability-slot[data-v-c15ebf8b] {\n display: flex;\n flex-direction: row;\n align-items: center;\n}\n.availability-slot-group[data-v-c15ebf8b] {\n display: flex;\n flex-direction: column;\n}\n.time-zone[data-v-c15ebf8b] {\n padding: 32px 12px 12px 0;\n}\n.week-day-container[data-v-c15ebf8b] {\n box-sizing: border-box;\n margin-bottom: 32px;\n max-width: 500px;\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n}\n.button[data-v-c15ebf8b] {\n align-self: flex-end;\n}\n.label-weekday[data-v-c15ebf8b] {\n position: relative;\n display: flex;\n align-items: flex-start;\n min-width: 77px;\n width: 77px;\n}\n.label-weekday > span[data-v-c15ebf8b] {\n height: 50px;\n display: flex;\n align-items: center;\n}\n.add-another[data-v-c15ebf8b] {\n background-color: transparent;\n border: none;\n opacity: 0.5;\n display: inline-flex;\n padding: 0;\n margin: 0;\n margin-bottom: 3px;\n}\n.add-another[data-v-c15ebf8b]:hover {\n opacity: 1;\n}\n.to-text[data-v-c15ebf8b] {\n padding-right: 12px;\n}\n.time-zone-text[data-v-c15ebf8b] {\n padding-left: 22px;\n}\n.empty-content[data-v-c15ebf8b] {\n color: var(--color-text-lighter);\n display: inline-flex;\n align-items: center;\n}\n.start-date[data-v-c15ebf8b] {\n padding-right: 12px;\n}\n.day-container[data-v-c15ebf8b] {\n display: flex;\n max-width: 500px;\n width: 100%;\n gap: 24px;\n border-top: 1px solid var(--color-border);\n padding-top: calc(3 * var(--default-grid-baseline));\n margin-top: calc(2 * var(--default-grid-baseline));\n align-items: center;\n}\n.day-container > button[data-v-c15ebf8b] {\n align-self: center;\n}`, \"\",{\"version\":3,\"sources\":[\"webpack://./node_modules/@nextcloud/calendar-availability-vue/dist/assets/index-UKC4AV1t.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,sBAAsB;EACtB,kBAAkB;AACpB;AACA;EACE,gBAAgB;EAChB,WAAW;EACX,aAAa;EACb,2BAA2B;EAC3B,mBAAmB;AACrB;AACA;EACE,aAAa;EACb,mBAAmB;EACnB,mBAAmB;AACrB;AACA;EACE,aAAa;EACb,sBAAsB;AACxB;AACA;EACE,yBAAyB;AAC3B;AACA;EACE,sBAAsB;EACtB,mBAAmB;EACnB,gBAAgB;EAChB,WAAW;EACX,aAAa;EACb,sBAAsB;EACtB,uBAAuB;AACzB;AACA;EACE,oBAAoB;AACtB;AACA;EACE,kBAAkB;EAClB,aAAa;EACb,uBAAuB;EACvB,eAAe;EACf,WAAW;AACb;AACA;EACE,YAAY;EACZ,aAAa;EACb,mBAAmB;AACrB;AACA;EACE,6BAA6B;EAC7B,YAAY;EACZ,YAAY;EACZ,oBAAoB;EACpB,UAAU;EACV,SAAS;EACT,kBAAkB;AACpB;AACA;EACE,UAAU;AACZ;AACA;EACE,mBAAmB;AACrB;AACA;EACE,kBAAkB;AACpB;AACA;EACE,gCAAgC;EAChC,oBAAoB;EACpB,mBAAmB;AACrB;AACA;EACE,mBAAmB;AACrB;AACA;EACE,aAAa;EACb,gBAAgB;EAChB,WAAW;EACX,SAAS;EACT,yCAAyC;EACzC,mDAAmD;EACnD,kDAAkD;EAClD,mBAAmB;AACrB;AACA;EACE,kBAAkB;AACpB\",\"sourcesContent\":[\".availability-day[data-v-c15ebf8b] {\\n padding: 0 10px 0 10px;\\n position: absolute;\\n}\\n.availability-slots[data-v-c15ebf8b] {\\n max-width: 332px;\\n width: 100%;\\n display: flex;\\n justify-content: flex-start;\\n white-space: nowrap;\\n}\\n.availability-slot[data-v-c15ebf8b] {\\n display: flex;\\n flex-direction: row;\\n align-items: center;\\n}\\n.availability-slot-group[data-v-c15ebf8b] {\\n display: flex;\\n flex-direction: column;\\n}\\n.time-zone[data-v-c15ebf8b] {\\n padding: 32px 12px 12px 0;\\n}\\n.week-day-container[data-v-c15ebf8b] {\\n box-sizing: border-box;\\n margin-bottom: 32px;\\n max-width: 500px;\\n width: 100%;\\n display: flex;\\n flex-direction: column;\\n align-items: flex-start;\\n}\\n.button[data-v-c15ebf8b] {\\n align-self: flex-end;\\n}\\n.label-weekday[data-v-c15ebf8b] {\\n position: relative;\\n display: flex;\\n align-items: flex-start;\\n min-width: 77px;\\n width: 77px;\\n}\\n.label-weekday > span[data-v-c15ebf8b] {\\n height: 50px;\\n display: flex;\\n align-items: center;\\n}\\n.add-another[data-v-c15ebf8b] {\\n background-color: transparent;\\n border: none;\\n opacity: 0.5;\\n display: inline-flex;\\n padding: 0;\\n margin: 0;\\n margin-bottom: 3px;\\n}\\n.add-another[data-v-c15ebf8b]:hover {\\n opacity: 1;\\n}\\n.to-text[data-v-c15ebf8b] {\\n padding-right: 12px;\\n}\\n.time-zone-text[data-v-c15ebf8b] {\\n padding-left: 22px;\\n}\\n.empty-content[data-v-c15ebf8b] {\\n color: var(--color-text-lighter);\\n display: inline-flex;\\n align-items: center;\\n}\\n.start-date[data-v-c15ebf8b] {\\n padding-right: 12px;\\n}\\n.day-container[data-v-c15ebf8b] {\\n display: flex;\\n max-width: 500px;\\n width: 100%;\\n gap: 24px;\\n border-top: 1px solid var(--color-border);\\n padding-top: calc(3 * var(--default-grid-baseline));\\n margin-top: calc(2 * var(--default-grid-baseline));\\n align-items: center;\\n}\\n.day-container > button[data-v-c15ebf8b] {\\n align-self: center;\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.absence[data-v-716172ba]{display:flex;flex-direction:column;gap:5px}.absence__dates[data-v-716172ba]{display:flex;gap:10px;width:100%}.absence__dates__picker[data-v-716172ba]{flex:1 auto}.absence__dates__picker[data-v-716172ba] .native-datetime-picker--input{margin-bottom:0}.absence__buttons[data-v-716172ba]{display:flex;gap:5px}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/dav/src/components/AbsenceForm.vue\"],\"names\":[],\"mappings\":\"AACA,0BACC,YAAA,CACA,qBAAA,CACA,OAAA,CAEA,iCACC,YAAA,CACA,QAAA,CACA,UAAA,CAEA,yCACC,WAAA,CAEA,wEACC,eAAA,CAKH,mCACC,YAAA,CACA,OAAA\",\"sourcesContent\":[\"\\n.absence {\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\tgap: 5px;\\n\\n\\t&__dates {\\n\\t\\tdisplay: flex;\\n\\t\\tgap: 10px;\\n\\t\\twidth: 100%;\\n\\n\\t\\t&__picker {\\n\\t\\t\\tflex: 1 auto;\\n\\n\\t\\t\\t::v-deep .native-datetime-picker--input {\\n\\t\\t\\t\\tmargin-bottom: 0;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\t&__buttons {\\n\\t\\tdisplay: flex;\\n\\t\\tgap: 5px;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `[data-v-0275a141] .availability-day{padding:0 10px 0 10px;position:absolute}[data-v-0275a141] .availability-slots{display:flex;white-space:normal}[data-v-0275a141] .availability-slot{display:flex;flex-direction:row;align-items:center;flex-wrap:wrap}[data-v-0275a141] .availability-slot-group{display:flex;flex-direction:column}[data-v-0275a141] .mx-input-wrapper{width:85px}[data-v-0275a141] .mx-datepicker{width:97px}[data-v-0275a141] .multiselect{border:1px solid var(--color-border-dark);width:120px}.time-zone[data-v-0275a141]{padding:32px 12px 12px 0;display:flex;flex-wrap:wrap}.time-zone__heading[data-v-0275a141]{margin-right:calc(var(--default-grid-baseline)*2);line-height:var(--default-clickable-area);font-weight:bold}.grid-table[data-v-0275a141]{display:grid;margin-bottom:32px;grid-column-gap:24px;grid-row-gap:6px;grid-template-columns:min-content auto min-content;max-width:500px}.button[data-v-0275a141]{align-self:flex-end}[data-v-0275a141] .label-weekday{position:relative;display:inline-flex;padding-top:4px;align-self:center}[data-v-0275a141] .delete-slot{padding-bottom:unset}[data-v-0275a141] .add-another{align-self:center}.to-text[data-v-0275a141]{padding-right:12px}.empty-content[data-v-0275a141]{color:var(--color-text-lighter);margin-top:4px;align-self:center}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/dav/src/components/AvailabilityForm.vue\"],\"names\":[],\"mappings\":\"AACA,oCACC,qBAAA,CACA,iBAAA,CAED,sCACC,YAAA,CACA,kBAAA,CAED,qCACC,YAAA,CACA,kBAAA,CACA,kBAAA,CACA,cAAA,CAED,2CACC,YAAA,CACA,qBAAA,CAED,oCACC,UAAA,CAED,iCACC,UAAA,CAED,+BACC,yCAAA,CACA,WAAA,CAED,4BACC,wBAAA,CACG,YAAA,CACA,cAAA,CAEH,qCACC,iDAAA,CACA,yCAAA,CACA,gBAAA,CAGF,6BACC,YAAA,CACA,kBAAA,CACA,oBAAA,CACA,gBAAA,CACA,kDAAA,CACA,eAAA,CAED,yBACC,mBAAA,CAED,iCACC,iBAAA,CACA,mBAAA,CACA,eAAA,CACA,iBAAA,CAGD,+BACC,oBAAA,CAGD,+BACC,iBAAA,CAGD,0BACC,kBAAA,CAGD,gCACC,+BAAA,CACA,cAAA,CACA,iBAAA\",\"sourcesContent\":[\"\\n:deep(.availability-day) {\\n\\tpadding: 0 10px 0 10px;\\n\\tposition: absolute;\\n}\\n:deep(.availability-slots) {\\n\\tdisplay: flex;\\n\\twhite-space: normal;\\n}\\n:deep(.availability-slot) {\\n\\tdisplay: flex;\\n\\tflex-direction: row;\\n\\talign-items: center;\\n\\tflex-wrap: wrap;\\n}\\n:deep(.availability-slot-group) {\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n}\\n:deep(.mx-input-wrapper) {\\n\\twidth: 85px;\\n}\\n:deep(.mx-datepicker) {\\n\\twidth: 97px;\\n}\\n:deep(.multiselect) {\\n\\tborder: 1px solid var(--color-border-dark);\\n\\twidth: 120px;\\n}\\n.time-zone {\\n\\tpadding: 32px 12px 12px 0;\\n display: flex;\\n flex-wrap: wrap;\\n\\n\\t&__heading {\\n\\t\\tmargin-right: calc(var(--default-grid-baseline) * 2);\\n\\t\\tline-height: var(--default-clickable-area);\\n\\t\\tfont-weight: bold;\\n\\t}\\n}\\n.grid-table {\\n\\tdisplay: grid;\\n\\tmargin-bottom: 32px;\\n\\tgrid-column-gap: 24px;\\n\\tgrid-row-gap: 6px;\\n\\tgrid-template-columns: min-content auto min-content;\\n\\tmax-width: 500px;\\n}\\n.button {\\n\\talign-self: flex-end;\\n}\\n:deep(.label-weekday) {\\n\\tposition: relative;\\n\\tdisplay: inline-flex;\\n\\tpadding-top: 4px;\\n\\talign-self: center;\\n}\\n\\n:deep(.delete-slot) {\\n\\tpadding-bottom: unset;\\n}\\n\\n:deep(.add-another) {\\n\\talign-self: center;\\n}\\n\\n.to-text {\\n\\tpadding-right: 12px;\\n}\\n\\n.empty-content {\\n\\tcolor: var(--color-text-lighter);\\n\\tmargin-top: 4px;\\n\\talign-self: center;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getZoneString = exports.getZoneLines = void 0;\nconst zones_1 = require(\"./zones\"); // This module must be generated with `yarn run build-zones`.\nfunction renderZoneSub(data) {\n const { n, f, t, r, s } = data;\n return [\n `TZNAME:${n}`,\n `TZOFFSETFROM:${f}`,\n `TZOFFSETTO:${t || f}`,\n `DTSTART:${s || zones_1.defaultStart}`,\n ...(r ? [`RRULE:FREQ=${r.f || 'YEARLY'};BYMONTH=${r.m};BYDAY=${r.d}`] : []),\n ];\n}\n/**\n * Tries to resolve a given time zone to iCalendar time zone component\n * (`VTIMEZONE`) as string array (usually for further processing).\n * @param zoneName Time zone name (e.g. `America/Los_Angeles`)\n * @param includeWrapper Set to `false` to avoid including lines for\n * `BEGIN:VTIMEZONE` and `END:VTIMEZONE`.\n * @returns Lines of the iCalendar time zone component (`VTIMEZONE`), each line\n * individually as an array of strings.\n */\nfunction getZoneLines(zoneName, includeWrapper = true) {\n const zoneData = zones_1.zonesMap.get(zoneName);\n if (zoneData) {\n const { s, d } = zoneData;\n const lines = [\n ...(includeWrapper ? ['BEGIN:VTIMEZONE'] : []),\n `TZID:${zoneName}`,\n // `X-LIC-LOCATION:${zoneName}`, // Who uses this?\n 'BEGIN:STANDARD',\n ...renderZoneSub(s),\n 'END:STANDARD',\n ...(d ? [\n 'BEGIN:DAYLIGHT',\n ...renderZoneSub(d),\n 'END:DAYLIGHT',\n ] : []),\n ...(includeWrapper ? ['END:VTIMEZONE'] : []),\n ];\n return lines;\n }\n}\nexports.getZoneLines = getZoneLines;\n/**\n * Tries to resolve a given time zone to iCalendar time zone component\n * (`VTIMEZONE`) as string.\n * @param zoneName Time zone name (e.g. `America/Los_Angeles`)\n * @param includeWrapper Set to `false` to avoid including lines for\n * `BEGIN:VTIMEZONE` and `END:VTIMEZONE`.\n * @returns The iCalendar time zone component (`VTIMEZONE`) as string\n * with `\\r\\n` line breaks.\n */\nfunction getZoneString(zoneName, includeWrapper = true) {\n const lines = getZoneLines(zoneName, includeWrapper);\n return lines === null || lines === void 0 ? void 0 : lines.join('\\r\\n');\n}\nexports.getZoneString = getZoneString;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.zonesMap = exports.defaultStart = void 0;\nexports.defaultStart = \"19700101T000000\";\nexports.zonesMap = new Map([\n [\n \"Africa/Abidjan\",\n {\n \"s\": {\n \"f\": \"+0000\",\n \"n\": \"GMT\"\n }\n }\n ],\n [\n \"Africa/Accra\",\n {\n \"s\": {\n \"f\": \"+0000\",\n \"n\": \"GMT\"\n }\n }\n ],\n [\n \"Africa/Addis_Ababa\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"n\": \"EAT\"\n }\n }\n ],\n [\n \"Africa/Algiers\",\n {\n \"s\": {\n \"f\": \"+0100\",\n \"n\": \"CET\"\n }\n }\n ],\n [\n \"Africa/Asmara\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"n\": \"EAT\"\n }\n }\n ],\n [\n \"Africa/Bamako\",\n {\n \"s\": {\n \"f\": \"+0000\",\n \"n\": \"GMT\"\n }\n }\n ],\n [\n \"Africa/Bangui\",\n {\n \"s\": {\n \"f\": \"+0100\",\n \"n\": \"WAT\"\n }\n }\n ],\n [\n \"Africa/Banjul\",\n {\n \"s\": {\n \"f\": \"+0000\",\n \"n\": \"GMT\"\n }\n }\n ],\n [\n \"Africa/Bissau\",\n {\n \"s\": {\n \"f\": \"+0000\",\n \"n\": \"GMT\"\n }\n }\n ],\n [\n \"Africa/Blantyre\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"n\": \"CAT\"\n }\n }\n ],\n [\n \"Africa/Brazzaville\",\n {\n \"s\": {\n \"f\": \"+0100\",\n \"n\": \"WAT\"\n }\n }\n ],\n [\n \"Africa/Bujumbura\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"n\": \"CAT\"\n }\n }\n ],\n [\n \"Africa/Cairo\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"n\": \"EET\"\n }\n }\n ],\n [\n \"Africa/Casablanca\",\n {\n \"s\": {\n \"f\": \"+0100\",\n \"n\": \"+01\"\n }\n }\n ],\n [\n \"Africa/Ceuta\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Africa/Conakry\",\n {\n \"s\": {\n \"f\": \"+0000\",\n \"n\": \"GMT\"\n }\n }\n ],\n [\n \"Africa/Dakar\",\n {\n \"s\": {\n \"f\": \"+0000\",\n \"n\": \"GMT\"\n }\n }\n ],\n [\n \"Africa/Dar_es_Salaam\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"n\": \"EAT\"\n }\n }\n ],\n [\n \"Africa/Djibouti\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"n\": \"EAT\"\n }\n }\n ],\n [\n \"Africa/Douala\",\n {\n \"s\": {\n \"f\": \"+0100\",\n \"n\": \"WAT\"\n }\n }\n ],\n [\n \"Africa/El_Aaiun\",\n {\n \"s\": {\n \"f\": \"+0100\",\n \"n\": \"+01\"\n }\n }\n ],\n [\n \"Africa/Freetown\",\n {\n \"s\": {\n \"f\": \"+0000\",\n \"n\": \"GMT\"\n }\n }\n ],\n [\n \"Africa/Gaborone\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"n\": \"CAT\"\n }\n }\n ],\n [\n \"Africa/Harare\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"n\": \"CAT\"\n }\n }\n ],\n [\n \"Africa/Johannesburg\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"n\": \"SAST\"\n }\n }\n ],\n [\n \"Africa/Juba\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"n\": \"EAT\"\n }\n }\n ],\n [\n \"Africa/Kampala\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"n\": \"EAT\"\n }\n }\n ],\n [\n \"Africa/Khartoum\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"n\": \"CAT\"\n }\n }\n ],\n [\n \"Africa/Kigali\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"n\": \"CAT\"\n }\n }\n ],\n [\n \"Africa/Kinshasa\",\n {\n \"s\": {\n \"f\": \"+0100\",\n \"n\": \"WAT\"\n }\n }\n ],\n [\n \"Africa/Lagos\",\n {\n \"s\": {\n \"f\": \"+0100\",\n \"n\": \"WAT\"\n }\n }\n ],\n [\n \"Africa/Libreville\",\n {\n \"s\": {\n \"f\": \"+0100\",\n \"n\": \"WAT\"\n }\n }\n ],\n [\n \"Africa/Lome\",\n {\n \"s\": {\n \"f\": \"+0000\",\n \"n\": \"GMT\"\n }\n }\n ],\n [\n \"Africa/Luanda\",\n {\n \"s\": {\n \"f\": \"+0100\",\n \"n\": \"WAT\"\n }\n }\n ],\n [\n \"Africa/Lubumbashi\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"n\": \"CAT\"\n }\n }\n ],\n [\n \"Africa/Lusaka\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"n\": \"CAT\"\n }\n }\n ],\n [\n \"Africa/Malabo\",\n {\n \"s\": {\n \"f\": \"+0100\",\n \"n\": \"WAT\"\n }\n }\n ],\n [\n \"Africa/Maputo\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"n\": \"CAT\"\n }\n }\n ],\n [\n \"Africa/Maseru\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"n\": \"SAST\"\n }\n }\n ],\n [\n \"Africa/Mbabane\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"n\": \"SAST\"\n }\n }\n ],\n [\n \"Africa/Mogadishu\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"n\": \"EAT\"\n }\n }\n ],\n [\n \"Africa/Monrovia\",\n {\n \"s\": {\n \"f\": \"+0000\",\n \"n\": \"GMT\"\n }\n }\n ],\n [\n \"Africa/Nairobi\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"n\": \"EAT\"\n }\n }\n ],\n [\n \"Africa/Ndjamena\",\n {\n \"s\": {\n \"f\": \"+0100\",\n \"n\": \"WAT\"\n }\n }\n ],\n [\n \"Africa/Niamey\",\n {\n \"s\": {\n \"f\": \"+0100\",\n \"n\": \"WAT\"\n }\n }\n ],\n [\n \"Africa/Nouakchott\",\n {\n \"s\": {\n \"f\": \"+0000\",\n \"n\": \"GMT\"\n }\n }\n ],\n [\n \"Africa/Ouagadougou\",\n {\n \"s\": {\n \"f\": \"+0000\",\n \"n\": \"GMT\"\n }\n }\n ],\n [\n \"Africa/Porto-Novo\",\n {\n \"s\": {\n \"f\": \"+0100\",\n \"n\": \"WAT\"\n }\n }\n ],\n [\n \"Africa/Sao_Tome\",\n {\n \"s\": {\n \"f\": \"+0100\",\n \"n\": \"WAT\"\n }\n }\n ],\n [\n \"Africa/Tripoli\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"n\": \"EET\"\n }\n }\n ],\n [\n \"Africa/Tunis\",\n {\n \"s\": {\n \"f\": \"+0100\",\n \"n\": \"CET\"\n }\n }\n ],\n [\n \"Africa/Windhoek\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"n\": \"CAT\"\n }\n }\n ],\n [\n \"America/Adak\",\n {\n \"s\": {\n \"f\": \"-0900\",\n \"t\": \"-1000\",\n \"n\": \"HST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-1000\",\n \"t\": \"-0900\",\n \"n\": \"HDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Anchorage\",\n {\n \"s\": {\n \"f\": \"-0800\",\n \"t\": \"-0900\",\n \"n\": \"AKST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0900\",\n \"t\": \"-0800\",\n \"n\": \"AKDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Anguilla\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"AST\"\n }\n }\n ],\n [\n \"America/Antigua\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"AST\"\n }\n }\n ],\n [\n \"America/Araguaina\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"n\": \"-03\"\n }\n }\n ],\n [\n \"America/Argentina/Buenos_Aires\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"n\": \"-03\"\n }\n }\n ],\n [\n \"America/Argentina/Catamarca\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"n\": \"-03\"\n }\n }\n ],\n [\n \"America/Argentina/Cordoba\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"n\": \"-03\"\n }\n }\n ],\n [\n \"America/Argentina/Jujuy\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"n\": \"-03\"\n }\n }\n ],\n [\n \"America/Argentina/La_Rioja\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"n\": \"-03\"\n }\n }\n ],\n [\n \"America/Argentina/Mendoza\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"n\": \"-03\"\n }\n }\n ],\n [\n \"America/Argentina/Rio_Gallegos\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"n\": \"-03\"\n }\n }\n ],\n [\n \"America/Argentina/Salta\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"n\": \"-03\"\n }\n }\n ],\n [\n \"America/Argentina/San_Juan\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"n\": \"-03\"\n }\n }\n ],\n [\n \"America/Argentina/San_Luis\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"n\": \"-03\"\n }\n }\n ],\n [\n \"America/Argentina/Tucuman\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"n\": \"-03\"\n }\n }\n ],\n [\n \"America/Argentina/Ushuaia\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"n\": \"-03\"\n }\n }\n ],\n [\n \"America/Aruba\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"AST\"\n }\n }\n ],\n [\n \"America/Asuncion\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"t\": \"-0400\",\n \"n\": \"-04\",\n \"s\": \"19700322T000000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"4SU\"\n }\n },\n \"d\": {\n \"f\": \"-0400\",\n \"t\": \"-0300\",\n \"n\": \"-03\",\n \"s\": \"19701004T000000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"1SU\"\n }\n }\n }\n ],\n [\n \"America/Atikokan\",\n {\n \"s\": {\n \"f\": \"-0500\",\n \"n\": \"EST\"\n }\n }\n ],\n [\n \"America/Bahia_Banderas\",\n {\n \"s\": {\n \"f\": \"-0500\",\n \"t\": \"-0600\",\n \"n\": \"CST\",\n \"s\": \"19701025T020000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0600\",\n \"t\": \"-0500\",\n \"n\": \"CDT\",\n \"s\": \"19700405T020000\",\n \"r\": {\n \"m\": 4,\n \"d\": \"1SU\"\n }\n }\n }\n ],\n [\n \"America/Bahia\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"n\": \"-03\"\n }\n }\n ],\n [\n \"America/Barbados\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"AST\"\n }\n }\n ],\n [\n \"America/Belem\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"n\": \"-03\"\n }\n }\n ],\n [\n \"America/Belize\",\n {\n \"s\": {\n \"f\": \"-0600\",\n \"n\": \"CST\"\n }\n }\n ],\n [\n \"America/Blanc-Sablon\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"AST\"\n }\n }\n ],\n [\n \"America/Boa_Vista\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"-04\"\n }\n }\n ],\n [\n \"America/Bogota\",\n {\n \"s\": {\n \"f\": \"-0500\",\n \"n\": \"-05\"\n }\n }\n ],\n [\n \"America/Boise\",\n {\n \"s\": {\n \"f\": \"-0600\",\n \"t\": \"-0700\",\n \"n\": \"MST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0700\",\n \"t\": \"-0600\",\n \"n\": \"MDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Cambridge_Bay\",\n {\n \"s\": {\n \"f\": \"-0600\",\n \"t\": \"-0700\",\n \"n\": \"MST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0700\",\n \"t\": \"-0600\",\n \"n\": \"MDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Campo_Grande\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"-04\",\n \"s\": \"19700215T000000\",\n \"r\": {\n \"m\": 2,\n \"d\": \"3SU\"\n }\n },\n \"d\": {\n \"f\": \"-0400\",\n \"t\": \"-0300\",\n \"n\": \"-03\",\n \"s\": \"19701101T000000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n }\n }\n ],\n [\n \"America/Cancun\",\n {\n \"s\": {\n \"f\": \"-0500\",\n \"n\": \"EST\"\n }\n }\n ],\n [\n \"America/Caracas\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"-04\"\n }\n }\n ],\n [\n \"America/Cayenne\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"n\": \"-03\"\n }\n }\n ],\n [\n \"America/Cayman\",\n {\n \"s\": {\n \"f\": \"-0500\",\n \"n\": \"EST\"\n }\n }\n ],\n [\n \"America/Chicago\",\n {\n \"s\": {\n \"f\": \"-0500\",\n \"t\": \"-0600\",\n \"n\": \"CST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0600\",\n \"t\": \"-0500\",\n \"n\": \"CDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Chihuahua\",\n {\n \"s\": {\n \"f\": \"-0600\",\n \"t\": \"-0700\",\n \"n\": \"MST\",\n \"s\": \"19701025T020000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0700\",\n \"t\": \"-0600\",\n \"n\": \"MDT\",\n \"s\": \"19700405T020000\",\n \"r\": {\n \"m\": 4,\n \"d\": \"1SU\"\n }\n }\n }\n ],\n [\n \"America/Costa_Rica\",\n {\n \"s\": {\n \"f\": \"-0600\",\n \"n\": \"CST\"\n }\n }\n ],\n [\n \"America/Creston\",\n {\n \"s\": {\n \"f\": \"-0700\",\n \"n\": \"MST\"\n }\n }\n ],\n [\n \"America/Cuiaba\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"-04\",\n \"s\": \"19700215T000000\",\n \"r\": {\n \"m\": 2,\n \"d\": \"3SU\"\n }\n },\n \"d\": {\n \"f\": \"-0400\",\n \"t\": \"-0300\",\n \"n\": \"-03\",\n \"s\": \"19701101T000000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n }\n }\n ],\n [\n \"America/Curacao\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"AST\"\n }\n }\n ],\n [\n \"America/Danmarkshavn\",\n {\n \"s\": {\n \"f\": \"+0000\",\n \"n\": \"GMT\"\n }\n }\n ],\n [\n \"America/Dawson_Creek\",\n {\n \"s\": {\n \"f\": \"-0700\",\n \"n\": \"MST\"\n }\n }\n ],\n [\n \"America/Dawson\",\n {\n \"s\": {\n \"f\": \"-0700\",\n \"t\": \"-0800\",\n \"n\": \"PST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0800\",\n \"t\": \"-0700\",\n \"n\": \"PDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Denver\",\n {\n \"s\": {\n \"f\": \"-0600\",\n \"t\": \"-0700\",\n \"n\": \"MST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0700\",\n \"t\": \"-0600\",\n \"n\": \"MDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Detroit\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"t\": \"-0500\",\n \"n\": \"EST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0500\",\n \"t\": \"-0400\",\n \"n\": \"EDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Dominica\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"AST\"\n }\n }\n ],\n [\n \"America/Edmonton\",\n {\n \"s\": {\n \"f\": \"-0600\",\n \"t\": \"-0700\",\n \"n\": \"MST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0700\",\n \"t\": \"-0600\",\n \"n\": \"MDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Eirunepe\",\n {\n \"s\": {\n \"f\": \"-0500\",\n \"n\": \"-05\"\n }\n }\n ],\n [\n \"America/El_Salvador\",\n {\n \"s\": {\n \"f\": \"-0600\",\n \"n\": \"CST\"\n }\n }\n ],\n [\n \"America/Fort_Nelson\",\n {\n \"s\": {\n \"f\": \"-0700\",\n \"n\": \"MST\"\n }\n }\n ],\n [\n \"America/Fortaleza\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"n\": \"-03\"\n }\n }\n ],\n [\n \"America/Glace_Bay\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"t\": \"-0400\",\n \"n\": \"AST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0400\",\n \"t\": \"-0300\",\n \"n\": \"ADT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Godthab\",\n {\n \"s\": {\n \"f\": \"-0200\",\n \"t\": \"-0300\",\n \"n\": \"-03\",\n \"s\": \"19701024T230000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SA\"\n }\n },\n \"d\": {\n \"f\": \"-0300\",\n \"t\": \"-0200\",\n \"n\": \"-02\",\n \"s\": \"19700328T220000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SA\"\n }\n }\n }\n ],\n [\n \"America/Goose_Bay\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"t\": \"-0400\",\n \"n\": \"AST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0400\",\n \"t\": \"-0300\",\n \"n\": \"ADT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Grand_Turk\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"t\": \"-0500\",\n \"n\": \"EST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0500\",\n \"t\": \"-0400\",\n \"n\": \"EDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Grenada\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"AST\"\n }\n }\n ],\n [\n \"America/Guadeloupe\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"AST\"\n }\n }\n ],\n [\n \"America/Guatemala\",\n {\n \"s\": {\n \"f\": \"-0600\",\n \"n\": \"CST\"\n }\n }\n ],\n [\n \"America/Guayaquil\",\n {\n \"s\": {\n \"f\": \"-0500\",\n \"n\": \"-05\"\n }\n }\n ],\n [\n \"America/Guyana\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"-04\"\n }\n }\n ],\n [\n \"America/Halifax\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"t\": \"-0400\",\n \"n\": \"AST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0400\",\n \"t\": \"-0300\",\n \"n\": \"ADT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Havana\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"t\": \"-0500\",\n \"n\": \"CST\",\n \"s\": \"19701101T010000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0500\",\n \"t\": \"-0400\",\n \"n\": \"CDT\",\n \"s\": \"19700308T000000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Hermosillo\",\n {\n \"s\": {\n \"f\": \"-0700\",\n \"n\": \"MST\"\n }\n }\n ],\n [\n \"America/Indiana/Indianapolis\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"t\": \"-0500\",\n \"n\": \"EST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0500\",\n \"t\": \"-0400\",\n \"n\": \"EDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Indiana/Knox\",\n {\n \"s\": {\n \"f\": \"-0500\",\n \"t\": \"-0600\",\n \"n\": \"CST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0600\",\n \"t\": \"-0500\",\n \"n\": \"CDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Indiana/Marengo\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"t\": \"-0500\",\n \"n\": \"EST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0500\",\n \"t\": \"-0400\",\n \"n\": \"EDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Indiana/Petersburg\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"t\": \"-0500\",\n \"n\": \"EST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0500\",\n \"t\": \"-0400\",\n \"n\": \"EDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Indiana/Tell_City\",\n {\n \"s\": {\n \"f\": \"-0500\",\n \"t\": \"-0600\",\n \"n\": \"CST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0600\",\n \"t\": \"-0500\",\n \"n\": \"CDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Indiana/Vevay\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"t\": \"-0500\",\n \"n\": \"EST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0500\",\n \"t\": \"-0400\",\n \"n\": \"EDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Indiana/Vincennes\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"t\": \"-0500\",\n \"n\": \"EST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0500\",\n \"t\": \"-0400\",\n \"n\": \"EDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Indiana/Winamac\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"t\": \"-0500\",\n \"n\": \"EST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0500\",\n \"t\": \"-0400\",\n \"n\": \"EDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Inuvik\",\n {\n \"s\": {\n \"f\": \"-0600\",\n \"t\": \"-0700\",\n \"n\": \"MST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0700\",\n \"t\": \"-0600\",\n \"n\": \"MDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Iqaluit\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"t\": \"-0500\",\n \"n\": \"EST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0500\",\n \"t\": \"-0400\",\n \"n\": \"EDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Jamaica\",\n {\n \"s\": {\n \"f\": \"-0500\",\n \"n\": \"EST\"\n }\n }\n ],\n [\n \"America/Juneau\",\n {\n \"s\": {\n \"f\": \"-0800\",\n \"t\": \"-0900\",\n \"n\": \"AKST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0900\",\n \"t\": \"-0800\",\n \"n\": \"AKDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Kentucky/Louisville\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"t\": \"-0500\",\n \"n\": \"EST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0500\",\n \"t\": \"-0400\",\n \"n\": \"EDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Kentucky/Monticello\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"t\": \"-0500\",\n \"n\": \"EST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0500\",\n \"t\": \"-0400\",\n \"n\": \"EDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Kralendijk\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"AST\"\n }\n }\n ],\n [\n \"America/La_Paz\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"-04\"\n }\n }\n ],\n [\n \"America/Lima\",\n {\n \"s\": {\n \"f\": \"-0500\",\n \"n\": \"-05\"\n }\n }\n ],\n [\n \"America/Los_Angeles\",\n {\n \"s\": {\n \"f\": \"-0700\",\n \"t\": \"-0800\",\n \"n\": \"PST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0800\",\n \"t\": \"-0700\",\n \"n\": \"PDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Lower_Princes\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"AST\"\n }\n }\n ],\n [\n \"America/Maceio\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"n\": \"-03\"\n }\n }\n ],\n [\n \"America/Managua\",\n {\n \"s\": {\n \"f\": \"-0600\",\n \"n\": \"CST\"\n }\n }\n ],\n [\n \"America/Manaus\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"-04\"\n }\n }\n ],\n [\n \"America/Marigot\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"AST\"\n }\n }\n ],\n [\n \"America/Martinique\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"AST\"\n }\n }\n ],\n [\n \"America/Matamoros\",\n {\n \"s\": {\n \"f\": \"-0500\",\n \"t\": \"-0600\",\n \"n\": \"CST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0600\",\n \"t\": \"-0500\",\n \"n\": \"CDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Mazatlan\",\n {\n \"s\": {\n \"f\": \"-0600\",\n \"t\": \"-0700\",\n \"n\": \"MST\",\n \"s\": \"19701025T020000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0700\",\n \"t\": \"-0600\",\n \"n\": \"MDT\",\n \"s\": \"19700405T020000\",\n \"r\": {\n \"m\": 4,\n \"d\": \"1SU\"\n }\n }\n }\n ],\n [\n \"America/Menominee\",\n {\n \"s\": {\n \"f\": \"-0500\",\n \"t\": \"-0600\",\n \"n\": \"CST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0600\",\n \"t\": \"-0500\",\n \"n\": \"CDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Merida\",\n {\n \"s\": {\n \"f\": \"-0500\",\n \"t\": \"-0600\",\n \"n\": \"CST\",\n \"s\": \"19701025T020000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0600\",\n \"t\": \"-0500\",\n \"n\": \"CDT\",\n \"s\": \"19700405T020000\",\n \"r\": {\n \"m\": 4,\n \"d\": \"1SU\"\n }\n }\n }\n ],\n [\n \"America/Metlakatla\",\n {\n \"s\": {\n \"f\": \"-0800\",\n \"t\": \"-0900\",\n \"n\": \"AKST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0900\",\n \"t\": \"-0800\",\n \"n\": \"AKDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Mexico_City\",\n {\n \"s\": {\n \"f\": \"-0500\",\n \"t\": \"-0600\",\n \"n\": \"CST\",\n \"s\": \"19701025T020000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0600\",\n \"t\": \"-0500\",\n \"n\": \"CDT\",\n \"s\": \"19700405T020000\",\n \"r\": {\n \"m\": 4,\n \"d\": \"1SU\"\n }\n }\n }\n ],\n [\n \"America/Miquelon\",\n {\n \"s\": {\n \"f\": \"-0200\",\n \"t\": \"-0300\",\n \"n\": \"-03\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0300\",\n \"t\": \"-0200\",\n \"n\": \"-02\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Moncton\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"t\": \"-0400\",\n \"n\": \"AST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0400\",\n \"t\": \"-0300\",\n \"n\": \"ADT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Monterrey\",\n {\n \"s\": {\n \"f\": \"-0500\",\n \"t\": \"-0600\",\n \"n\": \"CST\",\n \"s\": \"19701025T020000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0600\",\n \"t\": \"-0500\",\n \"n\": \"CDT\",\n \"s\": \"19700405T020000\",\n \"r\": {\n \"m\": 4,\n \"d\": \"1SU\"\n }\n }\n }\n ],\n [\n \"America/Montevideo\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"n\": \"-03\"\n }\n }\n ],\n [\n \"America/Montserrat\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"AST\"\n }\n }\n ],\n [\n \"America/Nassau\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"t\": \"-0500\",\n \"n\": \"EST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0500\",\n \"t\": \"-0400\",\n \"n\": \"EDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/New_York\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"t\": \"-0500\",\n \"n\": \"EST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0500\",\n \"t\": \"-0400\",\n \"n\": \"EDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Nipigon\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"t\": \"-0500\",\n \"n\": \"EST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0500\",\n \"t\": \"-0400\",\n \"n\": \"EDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Nome\",\n {\n \"s\": {\n \"f\": \"-0800\",\n \"t\": \"-0900\",\n \"n\": \"AKST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0900\",\n \"t\": \"-0800\",\n \"n\": \"AKDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Noronha\",\n {\n \"s\": {\n \"f\": \"-0200\",\n \"n\": \"-02\"\n }\n }\n ],\n [\n \"America/North_Dakota/Beulah\",\n {\n \"s\": {\n \"f\": \"-0500\",\n \"t\": \"-0600\",\n \"n\": \"CST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0600\",\n \"t\": \"-0500\",\n \"n\": \"CDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/North_Dakota/Center\",\n {\n \"s\": {\n \"f\": \"-0500\",\n \"t\": \"-0600\",\n \"n\": \"CST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0600\",\n \"t\": \"-0500\",\n \"n\": \"CDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/North_Dakota/New_Salem\",\n {\n \"s\": {\n \"f\": \"-0500\",\n \"t\": \"-0600\",\n \"n\": \"CST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0600\",\n \"t\": \"-0500\",\n \"n\": \"CDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Ojinaga\",\n {\n \"s\": {\n \"f\": \"-0600\",\n \"t\": \"-0700\",\n \"n\": \"MST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0700\",\n \"t\": \"-0600\",\n \"n\": \"MDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Panama\",\n {\n \"s\": {\n \"f\": \"-0500\",\n \"n\": \"EST\"\n }\n }\n ],\n [\n \"America/Pangnirtung\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"t\": \"-0500\",\n \"n\": \"EST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0500\",\n \"t\": \"-0400\",\n \"n\": \"EDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Paramaribo\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"n\": \"-03\"\n }\n }\n ],\n [\n \"America/Phoenix\",\n {\n \"s\": {\n \"f\": \"-0700\",\n \"n\": \"MST\"\n }\n }\n ],\n [\n \"America/Port_of_Spain\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"AST\"\n }\n }\n ],\n [\n \"America/Port-au-Prince\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"t\": \"-0500\",\n \"n\": \"EST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0500\",\n \"t\": \"-0400\",\n \"n\": \"EDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Porto_Velho\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"-04\"\n }\n }\n ],\n [\n \"America/Puerto_Rico\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"AST\"\n }\n }\n ],\n [\n \"America/Punta_Arenas\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"n\": \"-03\"\n }\n }\n ],\n [\n \"America/Rainy_River\",\n {\n \"s\": {\n \"f\": \"-0500\",\n \"t\": \"-0600\",\n \"n\": \"CST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0600\",\n \"t\": \"-0500\",\n \"n\": \"CDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Rankin_Inlet\",\n {\n \"s\": {\n \"f\": \"-0500\",\n \"t\": \"-0600\",\n \"n\": \"CST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0600\",\n \"t\": \"-0500\",\n \"n\": \"CDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Recife\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"n\": \"-03\"\n }\n }\n ],\n [\n \"America/Regina\",\n {\n \"s\": {\n \"f\": \"-0600\",\n \"n\": \"CST\"\n }\n }\n ],\n [\n \"America/Resolute\",\n {\n \"s\": {\n \"f\": \"-0500\",\n \"t\": \"-0600\",\n \"n\": \"CST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0600\",\n \"t\": \"-0500\",\n \"n\": \"CDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Rio_Branco\",\n {\n \"s\": {\n \"f\": \"-0500\",\n \"n\": \"-05\"\n }\n }\n ],\n [\n \"America/Santarem\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"n\": \"-03\"\n }\n }\n ],\n [\n \"America/Santiago\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"t\": \"-0400\",\n \"n\": \"-04\",\n \"s\": \"19700405T000000\",\n \"r\": {\n \"m\": 4,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0400\",\n \"t\": \"-0300\",\n \"n\": \"-03\",\n \"s\": \"19700906T000000\",\n \"r\": {\n \"m\": 9,\n \"d\": \"1SU\"\n }\n }\n }\n ],\n [\n \"America/Santo_Domingo\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"AST\"\n }\n }\n ],\n [\n \"America/Sao_Paulo\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"n\": \"-03\",\n \"s\": \"19700215T000000\",\n \"r\": {\n \"m\": 2,\n \"d\": \"3SU\"\n }\n },\n \"d\": {\n \"f\": \"-0300\",\n \"t\": \"-0200\",\n \"n\": \"-02\",\n \"s\": \"19701101T000000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n }\n }\n ],\n [\n \"America/Scoresbysund\",\n {\n \"s\": {\n \"f\": \"+0000\",\n \"t\": \"-0100\",\n \"n\": \"-01\",\n \"s\": \"19701025T010000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0100\",\n \"t\": \"+0000\",\n \"n\": \"+00\",\n \"s\": \"19700329T000000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"America/Sitka\",\n {\n \"s\": {\n \"f\": \"-0800\",\n \"t\": \"-0900\",\n \"n\": \"AKST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0900\",\n \"t\": \"-0800\",\n \"n\": \"AKDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/St_Barthelemy\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"AST\"\n }\n }\n ],\n [\n \"America/St_Johns\",\n {\n \"s\": {\n \"f\": \"-0230\",\n \"t\": \"-0330\",\n \"n\": \"NST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0330\",\n \"t\": \"-0230\",\n \"n\": \"NDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/St_Kitts\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"AST\"\n }\n }\n ],\n [\n \"America/St_Lucia\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"AST\"\n }\n }\n ],\n [\n \"America/St_Thomas\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"AST\"\n }\n }\n ],\n [\n \"America/St_Vincent\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"AST\"\n }\n }\n ],\n [\n \"America/Swift_Current\",\n {\n \"s\": {\n \"f\": \"-0600\",\n \"n\": \"CST\"\n }\n }\n ],\n [\n \"America/Tegucigalpa\",\n {\n \"s\": {\n \"f\": \"-0600\",\n \"n\": \"CST\"\n }\n }\n ],\n [\n \"America/Thule\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"t\": \"-0400\",\n \"n\": \"AST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0400\",\n \"t\": \"-0300\",\n \"n\": \"ADT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Thunder_Bay\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"t\": \"-0500\",\n \"n\": \"EST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0500\",\n \"t\": \"-0400\",\n \"n\": \"EDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Tijuana\",\n {\n \"s\": {\n \"f\": \"-0700\",\n \"t\": \"-0800\",\n \"n\": \"PST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0800\",\n \"t\": \"-0700\",\n \"n\": \"PDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Toronto\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"t\": \"-0500\",\n \"n\": \"EST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0500\",\n \"t\": \"-0400\",\n \"n\": \"EDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Tortola\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"AST\"\n }\n }\n ],\n [\n \"America/Vancouver\",\n {\n \"s\": {\n \"f\": \"-0700\",\n \"t\": \"-0800\",\n \"n\": \"PST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0800\",\n \"t\": \"-0700\",\n \"n\": \"PDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Whitehorse\",\n {\n \"s\": {\n \"f\": \"-0700\",\n \"t\": \"-0800\",\n \"n\": \"PST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0800\",\n \"t\": \"-0700\",\n \"n\": \"PDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Winnipeg\",\n {\n \"s\": {\n \"f\": \"-0500\",\n \"t\": \"-0600\",\n \"n\": \"CST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0600\",\n \"t\": \"-0500\",\n \"n\": \"CDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Yakutat\",\n {\n \"s\": {\n \"f\": \"-0800\",\n \"t\": \"-0900\",\n \"n\": \"AKST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0900\",\n \"t\": \"-0800\",\n \"n\": \"AKDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Yellowknife\",\n {\n \"s\": {\n \"f\": \"-0600\",\n \"t\": \"-0700\",\n \"n\": \"MST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0700\",\n \"t\": \"-0600\",\n \"n\": \"MDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"Antarctica/Casey\",\n {\n \"s\": {\n \"f\": \"+0800\",\n \"n\": \"+08\"\n }\n }\n ],\n [\n \"Antarctica/Davis\",\n {\n \"s\": {\n \"f\": \"+0700\",\n \"n\": \"+07\"\n }\n }\n ],\n [\n \"Antarctica/DumontDUrville\",\n {\n \"s\": {\n \"f\": \"+1000\",\n \"n\": \"+10\"\n }\n }\n ],\n [\n \"Antarctica/Macquarie\",\n {\n \"s\": {\n \"f\": \"+1100\",\n \"n\": \"+11\"\n }\n }\n ],\n [\n \"Antarctica/Mawson\",\n {\n \"s\": {\n \"f\": \"+0500\",\n \"n\": \"+05\"\n }\n }\n ],\n [\n \"Antarctica/McMurdo\",\n {\n \"s\": {\n \"f\": \"+1300\",\n \"t\": \"+1200\",\n \"n\": \"NZST\",\n \"s\": \"19700405T030000\",\n \"r\": {\n \"m\": 4,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"+1200\",\n \"t\": \"+1300\",\n \"n\": \"NZDT\",\n \"s\": \"19700927T020000\",\n \"r\": {\n \"m\": 9,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Antarctica/Palmer\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"n\": \"-03\"\n }\n }\n ],\n [\n \"Antarctica/Rothera\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"n\": \"-03\"\n }\n }\n ],\n [\n \"Antarctica/Syowa\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"n\": \"+03\"\n }\n }\n ],\n [\n \"Antarctica/Troll\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0000\",\n \"n\": \"+00\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0000\",\n \"t\": \"+0200\",\n \"n\": \"+02\",\n \"s\": \"19700329T010000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Antarctica/Vostok\",\n {\n \"s\": {\n \"f\": \"+0600\",\n \"n\": \"+06\"\n }\n }\n ],\n [\n \"Arctic/Longyearbyen\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Asia/Aden\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"n\": \"+03\"\n }\n }\n ],\n [\n \"Asia/Almaty\",\n {\n \"s\": {\n \"f\": \"+0600\",\n \"n\": \"+06\"\n }\n }\n ],\n [\n \"Asia/Amman\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"t\": \"+0200\",\n \"n\": \"EET\",\n \"s\": \"19701030T010000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1FR\"\n }\n },\n \"d\": {\n \"f\": \"+0200\",\n \"t\": \"+0300\",\n \"n\": \"EEST\",\n \"s\": \"19700326T235959\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1TH\"\n }\n }\n }\n ],\n [\n \"Asia/Anadyr\",\n {\n \"s\": {\n \"f\": \"+1200\",\n \"n\": \"+12\"\n }\n }\n ],\n [\n \"Asia/Aqtau\",\n {\n \"s\": {\n \"f\": \"+0500\",\n \"n\": \"+05\"\n }\n }\n ],\n [\n \"Asia/Aqtobe\",\n {\n \"s\": {\n \"f\": \"+0500\",\n \"n\": \"+05\"\n }\n }\n ],\n [\n \"Asia/Ashgabat\",\n {\n \"s\": {\n \"f\": \"+0500\",\n \"n\": \"+05\"\n }\n }\n ],\n [\n \"Asia/Atyrau\",\n {\n \"s\": {\n \"f\": \"+0500\",\n \"n\": \"+05\"\n }\n }\n ],\n [\n \"Asia/Baghdad\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"n\": \"+03\"\n }\n }\n ],\n [\n \"Asia/Bahrain\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"n\": \"+03\"\n }\n }\n ],\n [\n \"Asia/Baku\",\n {\n \"s\": {\n \"f\": \"+0400\",\n \"n\": \"+04\"\n }\n }\n ],\n [\n \"Asia/Bangkok\",\n {\n \"s\": {\n \"f\": \"+0700\",\n \"n\": \"+07\"\n }\n }\n ],\n [\n \"Asia/Barnaul\",\n {\n \"s\": {\n \"f\": \"+0700\",\n \"n\": \"+07\"\n }\n }\n ],\n [\n \"Asia/Beirut\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"t\": \"+0200\",\n \"n\": \"EET\",\n \"s\": \"19701025T000000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0200\",\n \"t\": \"+0300\",\n \"n\": \"EEST\",\n \"s\": \"19700329T000000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Asia/Bishkek\",\n {\n \"s\": {\n \"f\": \"+0600\",\n \"n\": \"+06\"\n }\n }\n ],\n [\n \"Asia/Brunei\",\n {\n \"s\": {\n \"f\": \"+0800\",\n \"n\": \"+08\"\n }\n }\n ],\n [\n \"Asia/Chita\",\n {\n \"s\": {\n \"f\": \"+0900\",\n \"n\": \"+09\"\n }\n }\n ],\n [\n \"Asia/Choibalsan\",\n {\n \"s\": {\n \"f\": \"+0800\",\n \"n\": \"+08\"\n }\n }\n ],\n [\n \"Asia/Colombo\",\n {\n \"s\": {\n \"f\": \"+0530\",\n \"n\": \"+0530\"\n }\n }\n ],\n [\n \"Asia/Damascus\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"t\": \"+0200\",\n \"n\": \"EET\",\n \"s\": \"19701030T000000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1FR\"\n }\n },\n \"d\": {\n \"f\": \"+0200\",\n \"t\": \"+0300\",\n \"n\": \"EEST\",\n \"s\": \"19700327T000000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1FR\"\n }\n }\n }\n ],\n [\n \"Asia/Dhaka\",\n {\n \"s\": {\n \"f\": \"+0600\",\n \"n\": \"+06\"\n }\n }\n ],\n [\n \"Asia/Dili\",\n {\n \"s\": {\n \"f\": \"+0900\",\n \"n\": \"+09\"\n }\n }\n ],\n [\n \"Asia/Dubai\",\n {\n \"s\": {\n \"f\": \"+0400\",\n \"n\": \"+04\"\n }\n }\n ],\n [\n \"Asia/Dushanbe\",\n {\n \"s\": {\n \"f\": \"+0500\",\n \"n\": \"+05\"\n }\n }\n ],\n [\n \"Asia/Famagusta\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"t\": \"+0200\",\n \"n\": \"EET\",\n \"s\": \"19701025T040000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0200\",\n \"t\": \"+0300\",\n \"n\": \"EEST\",\n \"s\": \"19700329T030000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Asia/Gaza\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"t\": \"+0200\",\n \"n\": \"EET\",\n \"s\": \"19701031T010000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SA\"\n }\n },\n \"d\": {\n \"f\": \"+0200\",\n \"t\": \"+0300\",\n \"n\": \"EEST\",\n \"s\": \"19700328T010000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"4SA\"\n }\n }\n }\n ],\n [\n \"Asia/Hebron\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"t\": \"+0200\",\n \"n\": \"EET\",\n \"s\": \"19701031T010000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SA\"\n }\n },\n \"d\": {\n \"f\": \"+0200\",\n \"t\": \"+0300\",\n \"n\": \"EEST\",\n \"s\": \"19700328T010000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"4SA\"\n }\n }\n }\n ],\n [\n \"Asia/Ho_Chi_Minh\",\n {\n \"s\": {\n \"f\": \"+0700\",\n \"n\": \"+07\"\n }\n }\n ],\n [\n \"Asia/Hong_Kong\",\n {\n \"s\": {\n \"f\": \"+0800\",\n \"n\": \"HKT\"\n }\n }\n ],\n [\n \"Asia/Hovd\",\n {\n \"s\": {\n \"f\": \"+0700\",\n \"n\": \"+07\"\n }\n }\n ],\n [\n \"Asia/Irkutsk\",\n {\n \"s\": {\n \"f\": \"+0800\",\n \"n\": \"+08\"\n }\n }\n ],\n [\n \"Asia/Istanbul\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"n\": \"+03\"\n }\n }\n ],\n [\n \"Asia/Jakarta\",\n {\n \"s\": {\n \"f\": \"+0700\",\n \"n\": \"WIB\"\n }\n }\n ],\n [\n \"Asia/Jayapura\",\n {\n \"s\": {\n \"f\": \"+0900\",\n \"n\": \"WIT\"\n }\n }\n ],\n [\n \"Asia/Jerusalem\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"t\": \"+0200\",\n \"n\": \"IST\",\n \"s\": \"19701025T020000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0200\",\n \"t\": \"+0300\",\n \"n\": \"IDT\",\n \"s\": \"19700327T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1FR\"\n }\n }\n }\n ],\n [\n \"Asia/Kabul\",\n {\n \"s\": {\n \"f\": \"+0430\",\n \"n\": \"+0430\"\n }\n }\n ],\n [\n \"Asia/Kamchatka\",\n {\n \"s\": {\n \"f\": \"+1200\",\n \"n\": \"+12\"\n }\n }\n ],\n [\n \"Asia/Karachi\",\n {\n \"s\": {\n \"f\": \"+0500\",\n \"n\": \"PKT\"\n }\n }\n ],\n [\n \"Asia/Kathmandu\",\n {\n \"s\": {\n \"f\": \"+0545\",\n \"n\": \"+0545\"\n }\n }\n ],\n [\n \"Asia/Khandyga\",\n {\n \"s\": {\n \"f\": \"+0900\",\n \"n\": \"+09\"\n }\n }\n ],\n [\n \"Asia/Kolkata\",\n {\n \"s\": {\n \"f\": \"+0530\",\n \"n\": \"IST\"\n }\n }\n ],\n [\n \"Asia/Krasnoyarsk\",\n {\n \"s\": {\n \"f\": \"+0700\",\n \"n\": \"+07\"\n }\n }\n ],\n [\n \"Asia/Kuala_Lumpur\",\n {\n \"s\": {\n \"f\": \"+0800\",\n \"n\": \"+08\"\n }\n }\n ],\n [\n \"Asia/Kuching\",\n {\n \"s\": {\n \"f\": \"+0800\",\n \"n\": \"+08\"\n }\n }\n ],\n [\n \"Asia/Kuwait\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"n\": \"+03\"\n }\n }\n ],\n [\n \"Asia/Macau\",\n {\n \"s\": {\n \"f\": \"+0800\",\n \"n\": \"CST\"\n }\n }\n ],\n [\n \"Asia/Magadan\",\n {\n \"s\": {\n \"f\": \"+1100\",\n \"n\": \"+11\"\n }\n }\n ],\n [\n \"Asia/Makassar\",\n {\n \"s\": {\n \"f\": \"+0800\",\n \"n\": \"WITA\"\n }\n }\n ],\n [\n \"Asia/Manila\",\n {\n \"s\": {\n \"f\": \"+0800\",\n \"n\": \"PST\"\n }\n }\n ],\n [\n \"Asia/Muscat\",\n {\n \"s\": {\n \"f\": \"+0400\",\n \"n\": \"+04\"\n }\n }\n ],\n [\n \"Asia/Nicosia\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"t\": \"+0200\",\n \"n\": \"EET\",\n \"s\": \"19701025T040000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0200\",\n \"t\": \"+0300\",\n \"n\": \"EEST\",\n \"s\": \"19700329T030000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Asia/Novokuznetsk\",\n {\n \"s\": {\n \"f\": \"+0700\",\n \"n\": \"+07\"\n }\n }\n ],\n [\n \"Asia/Novosibirsk\",\n {\n \"s\": {\n \"f\": \"+0700\",\n \"n\": \"+07\"\n }\n }\n ],\n [\n \"Asia/Omsk\",\n {\n \"s\": {\n \"f\": \"+0600\",\n \"n\": \"+06\"\n }\n }\n ],\n [\n \"Asia/Oral\",\n {\n \"s\": {\n \"f\": \"+0500\",\n \"n\": \"+05\"\n }\n }\n ],\n [\n \"Asia/Phnom_Penh\",\n {\n \"s\": {\n \"f\": \"+0700\",\n \"n\": \"+07\"\n }\n }\n ],\n [\n \"Asia/Pontianak\",\n {\n \"s\": {\n \"f\": \"+0700\",\n \"n\": \"WIB\"\n }\n }\n ],\n [\n \"Asia/Pyongyang\",\n {\n \"s\": {\n \"f\": \"+0900\",\n \"n\": \"KST\"\n }\n }\n ],\n [\n \"Asia/Qatar\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"n\": \"+03\"\n }\n }\n ],\n [\n \"Asia/Qyzylorda\",\n {\n \"s\": {\n \"f\": \"+0600\",\n \"n\": \"+06\"\n }\n }\n ],\n [\n \"Asia/Riyadh\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"n\": \"+03\"\n }\n }\n ],\n [\n \"Asia/Sakhalin\",\n {\n \"s\": {\n \"f\": \"+1100\",\n \"n\": \"+11\"\n }\n }\n ],\n [\n \"Asia/Samarkand\",\n {\n \"s\": {\n \"f\": \"+0500\",\n \"n\": \"+05\"\n }\n }\n ],\n [\n \"Asia/Seoul\",\n {\n \"s\": {\n \"f\": \"+0900\",\n \"n\": \"KST\"\n }\n }\n ],\n [\n \"Asia/Shanghai\",\n {\n \"s\": {\n \"f\": \"+0800\",\n \"n\": \"CST\"\n }\n }\n ],\n [\n \"Asia/Singapore\",\n {\n \"s\": {\n \"f\": \"+0800\",\n \"n\": \"+08\"\n }\n }\n ],\n [\n \"Asia/Srednekolymsk\",\n {\n \"s\": {\n \"f\": \"+1100\",\n \"n\": \"+11\"\n }\n }\n ],\n [\n \"Asia/Taipei\",\n {\n \"s\": {\n \"f\": \"+0800\",\n \"n\": \"CST\"\n }\n }\n ],\n [\n \"Asia/Tashkent\",\n {\n \"s\": {\n \"f\": \"+0500\",\n \"n\": \"+05\"\n }\n }\n ],\n [\n \"Asia/Tbilisi\",\n {\n \"s\": {\n \"f\": \"+0400\",\n \"n\": \"+04\"\n }\n }\n ],\n [\n \"Asia/Tehran\",\n {\n \"s\": {\n \"f\": \"+0430\",\n \"t\": \"+0330\",\n \"n\": \"+0330\",\n \"s\": \"19700921T000000\",\n \"r\": {\n \"m\": 9,\n \"d\": \"3SU\"\n }\n },\n \"d\": {\n \"f\": \"+0330\",\n \"t\": \"+0430\",\n \"n\": \"+0430\",\n \"s\": \"19700321T000000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"3SU\"\n }\n }\n }\n ],\n [\n \"Asia/Thimphu\",\n {\n \"s\": {\n \"f\": \"+0600\",\n \"n\": \"+06\"\n }\n }\n ],\n [\n \"Asia/Tokyo\",\n {\n \"s\": {\n \"f\": \"+0900\",\n \"n\": \"JST\"\n }\n }\n ],\n [\n \"Asia/Tomsk\",\n {\n \"s\": {\n \"f\": \"+0700\",\n \"n\": \"+07\"\n }\n }\n ],\n [\n \"Asia/Ulaanbaatar\",\n {\n \"s\": {\n \"f\": \"+0800\",\n \"n\": \"+08\"\n }\n }\n ],\n [\n \"Asia/Urumqi\",\n {\n \"s\": {\n \"f\": \"+0600\",\n \"n\": \"+06\"\n }\n }\n ],\n [\n \"Asia/Ust-Nera\",\n {\n \"s\": {\n \"f\": \"+1000\",\n \"n\": \"+10\"\n }\n }\n ],\n [\n \"Asia/Vientiane\",\n {\n \"s\": {\n \"f\": \"+0700\",\n \"n\": \"+07\"\n }\n }\n ],\n [\n \"Asia/Vladivostok\",\n {\n \"s\": {\n \"f\": \"+1000\",\n \"n\": \"+10\"\n }\n }\n ],\n [\n \"Asia/Yakutsk\",\n {\n \"s\": {\n \"f\": \"+0900\",\n \"n\": \"+09\"\n }\n }\n ],\n [\n \"Asia/Yangon\",\n {\n \"s\": {\n \"f\": \"+0630\",\n \"n\": \"+0630\"\n }\n }\n ],\n [\n \"Asia/Yekaterinburg\",\n {\n \"s\": {\n \"f\": \"+0500\",\n \"n\": \"+05\"\n }\n }\n ],\n [\n \"Asia/Yerevan\",\n {\n \"s\": {\n \"f\": \"+0400\",\n \"n\": \"+04\"\n }\n }\n ],\n [\n \"Atlantic/Azores\",\n {\n \"s\": {\n \"f\": \"+0000\",\n \"t\": \"-0100\",\n \"n\": \"-01\",\n \"s\": \"19701025T010000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0100\",\n \"t\": \"+0000\",\n \"n\": \"+00\",\n \"s\": \"19700329T000000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Atlantic/Bermuda\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"t\": \"-0400\",\n \"n\": \"AST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0400\",\n \"t\": \"-0300\",\n \"n\": \"ADT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"Atlantic/Canary\",\n {\n \"s\": {\n \"f\": \"+0100\",\n \"t\": \"+0000\",\n \"n\": \"WET\",\n \"s\": \"19701025T020000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0000\",\n \"t\": \"+0100\",\n \"n\": \"WEST\",\n \"s\": \"19700329T010000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Atlantic/Cape_Verde\",\n {\n \"s\": {\n \"f\": \"-0100\",\n \"n\": \"-01\"\n }\n }\n ],\n [\n \"Atlantic/Faroe\",\n {\n \"s\": {\n \"f\": \"+0100\",\n \"t\": \"+0000\",\n \"n\": \"WET\",\n \"s\": \"19701025T020000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0000\",\n \"t\": \"+0100\",\n \"n\": \"WEST\",\n \"s\": \"19700329T010000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Atlantic/Madeira\",\n {\n \"s\": {\n \"f\": \"+0100\",\n \"t\": \"+0000\",\n \"n\": \"WET\",\n \"s\": \"19701025T020000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0000\",\n \"t\": \"+0100\",\n \"n\": \"WEST\",\n \"s\": \"19700329T010000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Atlantic/Reykjavik\",\n {\n \"s\": {\n \"f\": \"+0000\",\n \"n\": \"GMT\"\n }\n }\n ],\n [\n \"Atlantic/South_Georgia\",\n {\n \"s\": {\n \"f\": \"-0200\",\n \"n\": \"-02\"\n }\n }\n ],\n [\n \"Atlantic/St_Helena\",\n {\n \"s\": {\n \"f\": \"+0000\",\n \"n\": \"GMT\"\n }\n }\n ],\n [\n \"Atlantic/Stanley\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"n\": \"-03\"\n }\n }\n ],\n [\n \"Australia/Adelaide\",\n {\n \"s\": {\n \"f\": \"+1030\",\n \"t\": \"+0930\",\n \"n\": \"ACST\",\n \"s\": \"19700405T030000\",\n \"r\": {\n \"m\": 4,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0930\",\n \"t\": \"+1030\",\n \"n\": \"ACDT\",\n \"s\": \"19701004T020000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"1SU\"\n }\n }\n }\n ],\n [\n \"Australia/Brisbane\",\n {\n \"s\": {\n \"f\": \"+1000\",\n \"n\": \"AEST\"\n }\n }\n ],\n [\n \"Australia/Broken_Hill\",\n {\n \"s\": {\n \"f\": \"+1030\",\n \"t\": \"+0930\",\n \"n\": \"ACST\",\n \"s\": \"19700405T030000\",\n \"r\": {\n \"m\": 4,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0930\",\n \"t\": \"+1030\",\n \"n\": \"ACDT\",\n \"s\": \"19701004T020000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"1SU\"\n }\n }\n }\n ],\n [\n \"Australia/Currie\",\n {\n \"s\": {\n \"f\": \"+1100\",\n \"t\": \"+1000\",\n \"n\": \"AEST\",\n \"s\": \"19700405T030000\",\n \"r\": {\n \"m\": 4,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"+1000\",\n \"t\": \"+1100\",\n \"n\": \"AEDT\",\n \"s\": \"19701004T020000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"1SU\"\n }\n }\n }\n ],\n [\n \"Australia/Darwin\",\n {\n \"s\": {\n \"f\": \"+0930\",\n \"n\": \"ACST\"\n }\n }\n ],\n [\n \"Australia/Eucla\",\n {\n \"s\": {\n \"f\": \"+0845\",\n \"n\": \"+0845\"\n }\n }\n ],\n [\n \"Australia/Hobart\",\n {\n \"s\": {\n \"f\": \"+1100\",\n \"t\": \"+1000\",\n \"n\": \"AEST\",\n \"s\": \"19700405T030000\",\n \"r\": {\n \"m\": 4,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"+1000\",\n \"t\": \"+1100\",\n \"n\": \"AEDT\",\n \"s\": \"19701004T020000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"1SU\"\n }\n }\n }\n ],\n [\n \"Australia/Lindeman\",\n {\n \"s\": {\n \"f\": \"+1000\",\n \"n\": \"AEST\"\n }\n }\n ],\n [\n \"Australia/Lord_Howe\",\n {\n \"s\": {\n \"f\": \"+1100\",\n \"t\": \"+1030\",\n \"n\": \"+1030\",\n \"s\": \"19700405T020000\",\n \"r\": {\n \"m\": 4,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"+1030\",\n \"t\": \"+1100\",\n \"n\": \"+11\",\n \"s\": \"19701004T020000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"1SU\"\n }\n }\n }\n ],\n [\n \"Australia/Melbourne\",\n {\n \"s\": {\n \"f\": \"+1100\",\n \"t\": \"+1000\",\n \"n\": \"AEST\",\n \"s\": \"19700405T030000\",\n \"r\": {\n \"m\": 4,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"+1000\",\n \"t\": \"+1100\",\n \"n\": \"AEDT\",\n \"s\": \"19701004T020000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"1SU\"\n }\n }\n }\n ],\n [\n \"Australia/Perth\",\n {\n \"s\": {\n \"f\": \"+0800\",\n \"n\": \"AWST\"\n }\n }\n ],\n [\n \"Australia/Sydney\",\n {\n \"s\": {\n \"f\": \"+1100\",\n \"t\": \"+1000\",\n \"n\": \"AEST\",\n \"s\": \"19700405T030000\",\n \"r\": {\n \"m\": 4,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"+1000\",\n \"t\": \"+1100\",\n \"n\": \"AEDT\",\n \"s\": \"19701004T020000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"1SU\"\n }\n }\n }\n ],\n [\n \"Etc/GMT-0\",\n {\n \"s\": {\n \"f\": \"+0000\",\n \"n\": \"GMT\"\n }\n }\n ],\n [\n \"Etc/GMT-1\",\n {\n \"s\": {\n \"f\": \"-0100\",\n \"n\": \"-01\"\n }\n }\n ],\n [\n \"Etc/GMT-10\",\n {\n \"s\": {\n \"f\": \"-1000\",\n \"n\": \"-10\"\n }\n }\n ],\n [\n \"Etc/GMT-11\",\n {\n \"s\": {\n \"f\": \"-1100\",\n \"n\": \"-11\"\n }\n }\n ],\n [\n \"Etc/GMT-12\",\n {\n \"s\": {\n \"f\": \"-1200\",\n \"n\": \"-12\"\n }\n }\n ],\n [\n \"Etc/GMT-2\",\n {\n \"s\": {\n \"f\": \"-0200\",\n \"n\": \"-02\"\n }\n }\n ],\n [\n \"Etc/GMT-3\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"n\": \"-03\"\n }\n }\n ],\n [\n \"Etc/GMT-4\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"-04\"\n }\n }\n ],\n [\n \"Etc/GMT-5\",\n {\n \"s\": {\n \"f\": \"-0500\",\n \"n\": \"-05\"\n }\n }\n ],\n [\n \"Etc/GMT-6\",\n {\n \"s\": {\n \"f\": \"-0600\",\n \"n\": \"-06\"\n }\n }\n ],\n [\n \"Etc/GMT-7\",\n {\n \"s\": {\n \"f\": \"-0700\",\n \"n\": \"-07\"\n }\n }\n ],\n [\n \"Etc/GMT-8\",\n {\n \"s\": {\n \"f\": \"-0800\",\n \"n\": \"-08\"\n }\n }\n ],\n [\n \"Etc/GMT-9\",\n {\n \"s\": {\n \"f\": \"-0900\",\n \"n\": \"-09\"\n }\n }\n ],\n [\n \"Etc/GMT\",\n {\n \"s\": {\n \"f\": \"+0000\",\n \"n\": \"GMT\"\n }\n }\n ],\n [\n \"Etc/GMT+0\",\n {\n \"s\": {\n \"f\": \"+0000\",\n \"n\": \"GMT\"\n }\n }\n ],\n [\n \"Etc/GMT+1\",\n {\n \"s\": {\n \"f\": \"+0100\",\n \"n\": \"+01\"\n }\n }\n ],\n [\n \"Etc/GMT+10\",\n {\n \"s\": {\n \"f\": \"+1000\",\n \"n\": \"+10\"\n }\n }\n ],\n [\n \"Etc/GMT+11\",\n {\n \"s\": {\n \"f\": \"+1100\",\n \"n\": \"+11\"\n }\n }\n ],\n [\n \"Etc/GMT+12\",\n {\n \"s\": {\n \"f\": \"+1200\",\n \"n\": \"+12\"\n }\n }\n ],\n [\n \"Etc/GMT+13\",\n {\n \"s\": {\n \"f\": \"+1300\",\n \"n\": \"+13\"\n }\n }\n ],\n [\n \"Etc/GMT+14\",\n {\n \"s\": {\n \"f\": \"+1400\",\n \"n\": \"+14\"\n }\n }\n ],\n [\n \"Etc/GMT+2\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"n\": \"+02\"\n }\n }\n ],\n [\n \"Etc/GMT+3\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"n\": \"+03\"\n }\n }\n ],\n [\n \"Etc/GMT+4\",\n {\n \"s\": {\n \"f\": \"+0400\",\n \"n\": \"+04\"\n }\n }\n ],\n [\n \"Etc/GMT+5\",\n {\n \"s\": {\n \"f\": \"+0500\",\n \"n\": \"+05\"\n }\n }\n ],\n [\n \"Etc/GMT+6\",\n {\n \"s\": {\n \"f\": \"+0600\",\n \"n\": \"+06\"\n }\n }\n ],\n [\n \"Etc/GMT+7\",\n {\n \"s\": {\n \"f\": \"+0700\",\n \"n\": \"+07\"\n }\n }\n ],\n [\n \"Etc/GMT+8\",\n {\n \"s\": {\n \"f\": \"+0800\",\n \"n\": \"+08\"\n }\n }\n ],\n [\n \"Etc/GMT+9\",\n {\n \"s\": {\n \"f\": \"+0900\",\n \"n\": \"+09\"\n }\n }\n ],\n [\n \"Etc/GMT0\",\n {\n \"s\": {\n \"f\": \"+0000\",\n \"n\": \"GMT\"\n }\n }\n ],\n [\n \"Etc/Greenwich\",\n {\n \"s\": {\n \"f\": \"+0000\",\n \"n\": \"GMT\"\n }\n }\n ],\n [\n \"Etc/UCT\",\n {\n \"s\": {\n \"f\": \"+0000\",\n \"n\": \"UCT\"\n }\n }\n ],\n [\n \"Etc/Universal\",\n {\n \"s\": {\n \"f\": \"+0000\",\n \"n\": \"UTC\"\n }\n }\n ],\n [\n \"Etc/UTC\",\n {\n \"s\": {\n \"f\": \"+0000\",\n \"n\": \"UTC\"\n }\n }\n ],\n [\n \"Etc/Zulu\",\n {\n \"s\": {\n \"f\": \"+0000\",\n \"n\": \"UTC\"\n }\n }\n ],\n [\n \"Europe/Amsterdam\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Andorra\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Astrakhan\",\n {\n \"s\": {\n \"f\": \"+0400\",\n \"n\": \"+04\"\n }\n }\n ],\n [\n \"Europe/Athens\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"t\": \"+0200\",\n \"n\": \"EET\",\n \"s\": \"19701025T040000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0200\",\n \"t\": \"+0300\",\n \"n\": \"EEST\",\n \"s\": \"19700329T030000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Belgrade\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Berlin\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Bratislava\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Brussels\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Bucharest\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"t\": \"+0200\",\n \"n\": \"EET\",\n \"s\": \"19701025T040000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0200\",\n \"t\": \"+0300\",\n \"n\": \"EEST\",\n \"s\": \"19700329T030000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Budapest\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Busingen\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Chisinau\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"t\": \"+0200\",\n \"n\": \"EET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0200\",\n \"t\": \"+0300\",\n \"n\": \"EEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Copenhagen\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Dublin\",\n {\n \"s\": {\n \"f\": \"+0100\",\n \"t\": \"+0000\",\n \"n\": \"GMT\",\n \"s\": \"19701025T020000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0000\",\n \"t\": \"+0100\",\n \"n\": \"IST\",\n \"s\": \"19700329T010000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Gibraltar\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Guernsey\",\n {\n \"s\": {\n \"f\": \"+0100\",\n \"t\": \"+0000\",\n \"n\": \"GMT\",\n \"s\": \"19701025T020000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0000\",\n \"t\": \"+0100\",\n \"n\": \"BST\",\n \"s\": \"19700329T010000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Helsinki\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"t\": \"+0200\",\n \"n\": \"EET\",\n \"s\": \"19701025T040000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0200\",\n \"t\": \"+0300\",\n \"n\": \"EEST\",\n \"s\": \"19700329T030000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Isle_of_Man\",\n {\n \"s\": {\n \"f\": \"+0100\",\n \"t\": \"+0000\",\n \"n\": \"GMT\",\n \"s\": \"19701025T020000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0000\",\n \"t\": \"+0100\",\n \"n\": \"BST\",\n \"s\": \"19700329T010000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Istanbul\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"n\": \"+03\"\n }\n }\n ],\n [\n \"Europe/Jersey\",\n {\n \"s\": {\n \"f\": \"+0100\",\n \"t\": \"+0000\",\n \"n\": \"GMT\",\n \"s\": \"19701025T020000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0000\",\n \"t\": \"+0100\",\n \"n\": \"BST\",\n \"s\": \"19700329T010000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Kaliningrad\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"n\": \"EET\"\n }\n }\n ],\n [\n \"Europe/Kiev\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"t\": \"+0200\",\n \"n\": \"EET\",\n \"s\": \"19701025T040000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0200\",\n \"t\": \"+0300\",\n \"n\": \"EEST\",\n \"s\": \"19700329T030000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Kirov\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"n\": \"+03\"\n }\n }\n ],\n [\n \"Europe/Lisbon\",\n {\n \"s\": {\n \"f\": \"+0100\",\n \"t\": \"+0000\",\n \"n\": \"WET\",\n \"s\": \"19701025T020000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0000\",\n \"t\": \"+0100\",\n \"n\": \"WEST\",\n \"s\": \"19700329T010000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Ljubljana\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/London\",\n {\n \"s\": {\n \"f\": \"+0100\",\n \"t\": \"+0000\",\n \"n\": \"GMT\",\n \"s\": \"19701025T020000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0000\",\n \"t\": \"+0100\",\n \"n\": \"BST\",\n \"s\": \"19700329T010000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Luxembourg\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Madrid\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Malta\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Mariehamn\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"t\": \"+0200\",\n \"n\": \"EET\",\n \"s\": \"19701025T040000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0200\",\n \"t\": \"+0300\",\n \"n\": \"EEST\",\n \"s\": \"19700329T030000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Minsk\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"n\": \"+03\"\n }\n }\n ],\n [\n \"Europe/Monaco\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Moscow\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"n\": \"MSK\"\n }\n }\n ],\n [\n \"Europe/Nicosia\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"t\": \"+0200\",\n \"n\": \"EET\",\n \"s\": \"19701025T040000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0200\",\n \"t\": \"+0300\",\n \"n\": \"EEST\",\n \"s\": \"19700329T030000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Oslo\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Paris\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Podgorica\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Prague\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Riga\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"t\": \"+0200\",\n \"n\": \"EET\",\n \"s\": \"19701025T040000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0200\",\n \"t\": \"+0300\",\n \"n\": \"EEST\",\n \"s\": \"19700329T030000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Rome\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Samara\",\n {\n \"s\": {\n \"f\": \"+0400\",\n \"n\": \"+04\"\n }\n }\n ],\n [\n \"Europe/San_Marino\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Sarajevo\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Saratov\",\n {\n \"s\": {\n \"f\": \"+0400\",\n \"n\": \"+04\"\n }\n }\n ],\n [\n \"Europe/Simferopol\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"n\": \"MSK\"\n }\n }\n ],\n [\n \"Europe/Skopje\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Sofia\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"t\": \"+0200\",\n \"n\": \"EET\",\n \"s\": \"19701025T040000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0200\",\n \"t\": \"+0300\",\n \"n\": \"EEST\",\n \"s\": \"19700329T030000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Stockholm\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Tallinn\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"t\": \"+0200\",\n \"n\": \"EET\",\n \"s\": \"19701025T040000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0200\",\n \"t\": \"+0300\",\n \"n\": \"EEST\",\n \"s\": \"19700329T030000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Tirane\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Ulyanovsk\",\n {\n \"s\": {\n \"f\": \"+0400\",\n \"n\": \"+04\"\n }\n }\n ],\n [\n \"Europe/Uzhgorod\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"t\": \"+0200\",\n \"n\": \"EET\",\n \"s\": \"19701025T040000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0200\",\n \"t\": \"+0300\",\n \"n\": \"EEST\",\n \"s\": \"19700329T030000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Vaduz\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Vatican\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Vienna\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Vilnius\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"t\": \"+0200\",\n \"n\": \"EET\",\n \"s\": \"19701025T040000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0200\",\n \"t\": \"+0300\",\n \"n\": \"EEST\",\n \"s\": \"19700329T030000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Volgograd\",\n {\n \"s\": {\n \"f\": \"+0400\",\n \"n\": \"+04\"\n }\n }\n ],\n [\n \"Europe/Warsaw\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Zagreb\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Zaporozhye\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"t\": \"+0200\",\n \"n\": \"EET\",\n \"s\": \"19701025T040000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0200\",\n \"t\": \"+0300\",\n \"n\": \"EEST\",\n \"s\": \"19700329T030000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Zurich\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Indian/Antananarivo\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"n\": \"EAT\"\n }\n }\n ],\n [\n \"Indian/Chagos\",\n {\n \"s\": {\n \"f\": \"+0600\",\n \"n\": \"+06\"\n }\n }\n ],\n [\n \"Indian/Christmas\",\n {\n \"s\": {\n \"f\": \"+0700\",\n \"n\": \"+07\"\n }\n }\n ],\n [\n \"Indian/Cocos\",\n {\n \"s\": {\n \"f\": \"+0630\",\n \"n\": \"+0630\"\n }\n }\n ],\n [\n \"Indian/Comoro\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"n\": \"EAT\"\n }\n }\n ],\n [\n \"Indian/Kerguelen\",\n {\n \"s\": {\n \"f\": \"+0500\",\n \"n\": \"+05\"\n }\n }\n ],\n [\n \"Indian/Mahe\",\n {\n \"s\": {\n \"f\": \"+0400\",\n \"n\": \"+04\"\n }\n }\n ],\n [\n \"Indian/Maldives\",\n {\n \"s\": {\n \"f\": \"+0500\",\n \"n\": \"+05\"\n }\n }\n ],\n [\n \"Indian/Mauritius\",\n {\n \"s\": {\n \"f\": \"+0400\",\n \"n\": \"+04\"\n }\n }\n ],\n [\n \"Indian/Mayotte\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"n\": \"EAT\"\n }\n }\n ],\n [\n \"Indian/Reunion\",\n {\n \"s\": {\n \"f\": \"+0400\",\n \"n\": \"+04\"\n }\n }\n ],\n [\n \"Pacific/Apia\",\n {\n \"s\": {\n \"f\": \"+1400\",\n \"t\": \"+1300\",\n \"n\": \"+13\",\n \"s\": \"19700405T040000\",\n \"r\": {\n \"m\": 4,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"+1300\",\n \"t\": \"+1400\",\n \"n\": \"+14\",\n \"s\": \"19700927T030000\",\n \"r\": {\n \"m\": 9,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Pacific/Auckland\",\n {\n \"s\": {\n \"f\": \"+1300\",\n \"t\": \"+1200\",\n \"n\": \"NZST\",\n \"s\": \"19700405T030000\",\n \"r\": {\n \"m\": 4,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"+1200\",\n \"t\": \"+1300\",\n \"n\": \"NZDT\",\n \"s\": \"19700927T020000\",\n \"r\": {\n \"m\": 9,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Pacific/Bougainville\",\n {\n \"s\": {\n \"f\": \"+1100\",\n \"n\": \"+11\"\n }\n }\n ],\n [\n \"Pacific/Chatham\",\n {\n \"s\": {\n \"f\": \"+1345\",\n \"t\": \"+1245\",\n \"n\": \"+1245\",\n \"s\": \"19700405T034500\",\n \"r\": {\n \"m\": 4,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"+1245\",\n \"t\": \"+1345\",\n \"n\": \"+1345\",\n \"s\": \"19700927T024500\",\n \"r\": {\n \"m\": 9,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Pacific/Chuuk\",\n {\n \"s\": {\n \"f\": \"+1000\",\n \"n\": \"+10\"\n }\n }\n ],\n [\n \"Pacific/Easter\",\n {\n \"s\": {\n \"f\": \"-0500\",\n \"t\": \"-0600\",\n \"n\": \"-06\",\n \"s\": \"19700404T220000\",\n \"r\": {\n \"m\": 4,\n \"d\": \"1SA\"\n }\n },\n \"d\": {\n \"f\": \"-0600\",\n \"t\": \"-0500\",\n \"n\": \"-05\",\n \"s\": \"19700905T220000\",\n \"r\": {\n \"m\": 9,\n \"d\": \"1SA\"\n }\n }\n }\n ],\n [\n \"Pacific/Efate\",\n {\n \"s\": {\n \"f\": \"+1100\",\n \"n\": \"+11\"\n }\n }\n ],\n [\n \"Pacific/Enderbury\",\n {\n \"s\": {\n \"f\": \"+1300\",\n \"n\": \"+13\"\n }\n }\n ],\n [\n \"Pacific/Fakaofo\",\n {\n \"s\": {\n \"f\": \"+1300\",\n \"n\": \"+13\"\n }\n }\n ],\n [\n \"Pacific/Fiji\",\n {\n \"s\": {\n \"f\": \"+1300\",\n \"t\": \"+1200\",\n \"n\": \"+12\",\n \"s\": \"19700118T030000\",\n \"r\": {\n \"m\": 1,\n \"d\": \"-2SU\"\n }\n },\n \"d\": {\n \"f\": \"+1200\",\n \"t\": \"+1300\",\n \"n\": \"+13\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n }\n }\n ],\n [\n \"Pacific/Funafuti\",\n {\n \"s\": {\n \"f\": \"+1200\",\n \"n\": \"+12\"\n }\n }\n ],\n [\n \"Pacific/Galapagos\",\n {\n \"s\": {\n \"f\": \"-0600\",\n \"n\": \"-06\"\n }\n }\n ],\n [\n \"Pacific/Gambier\",\n {\n \"s\": {\n \"f\": \"-0900\",\n \"n\": \"-09\"\n }\n }\n ],\n [\n \"Pacific/Guadalcanal\",\n {\n \"s\": {\n \"f\": \"+1100\",\n \"n\": \"+11\"\n }\n }\n ],\n [\n \"Pacific/Guam\",\n {\n \"s\": {\n \"f\": \"+1000\",\n \"n\": \"ChST\"\n }\n }\n ],\n [\n \"Pacific/Honolulu\",\n {\n \"s\": {\n \"f\": \"-1000\",\n \"n\": \"HST\"\n }\n }\n ],\n [\n \"Pacific/Kiritimati\",\n {\n \"s\": {\n \"f\": \"+1400\",\n \"n\": \"+14\"\n }\n }\n ],\n [\n \"Pacific/Kosrae\",\n {\n \"s\": {\n \"f\": \"+1100\",\n \"n\": \"+11\"\n }\n }\n ],\n [\n \"Pacific/Kwajalein\",\n {\n \"s\": {\n \"f\": \"+1200\",\n \"n\": \"+12\"\n }\n }\n ],\n [\n \"Pacific/Majuro\",\n {\n \"s\": {\n \"f\": \"+1200\",\n \"n\": \"+12\"\n }\n }\n ],\n [\n \"Pacific/Marquesas\",\n {\n \"s\": {\n \"f\": \"-0930\",\n \"n\": \"-0930\"\n }\n }\n ],\n [\n \"Pacific/Midway\",\n {\n \"s\": {\n \"f\": \"-1100\",\n \"n\": \"SST\"\n }\n }\n ],\n [\n \"Pacific/Nauru\",\n {\n \"s\": {\n \"f\": \"+1200\",\n \"n\": \"+12\"\n }\n }\n ],\n [\n \"Pacific/Niue\",\n {\n \"s\": {\n \"f\": \"-1100\",\n \"n\": \"-11\"\n }\n }\n ],\n [\n \"Pacific/Norfolk\",\n {\n \"s\": {\n \"f\": \"+1100\",\n \"n\": \"+11\"\n }\n }\n ],\n [\n \"Pacific/Noumea\",\n {\n \"s\": {\n \"f\": \"+1100\",\n \"n\": \"+11\"\n }\n }\n ],\n [\n \"Pacific/Pago_Pago\",\n {\n \"s\": {\n \"f\": \"-1100\",\n \"n\": \"SST\"\n }\n }\n ],\n [\n \"Pacific/Palau\",\n {\n \"s\": {\n \"f\": \"+0900\",\n \"n\": \"+09\"\n }\n }\n ],\n [\n \"Pacific/Pitcairn\",\n {\n \"s\": {\n \"f\": \"-0800\",\n \"n\": \"-08\"\n }\n }\n ],\n [\n \"Pacific/Pohnpei\",\n {\n \"s\": {\n \"f\": \"+1100\",\n \"n\": \"+11\"\n }\n }\n ],\n [\n \"Pacific/Port_Moresby\",\n {\n \"s\": {\n \"f\": \"+1000\",\n \"n\": \"+10\"\n }\n }\n ],\n [\n \"Pacific/Rarotonga\",\n {\n \"s\": {\n \"f\": \"-1000\",\n \"n\": \"-10\"\n }\n }\n ],\n [\n \"Pacific/Saipan\",\n {\n \"s\": {\n \"f\": \"+1000\",\n \"n\": \"ChST\"\n }\n }\n ],\n [\n \"Pacific/Tahiti\",\n {\n \"s\": {\n \"f\": \"-1000\",\n \"n\": \"-10\"\n }\n }\n ],\n [\n \"Pacific/Tarawa\",\n {\n \"s\": {\n \"f\": \"+1200\",\n \"n\": \"+12\"\n }\n }\n ],\n [\n \"Pacific/Tongatapu\",\n {\n \"s\": {\n \"f\": \"+1300\",\n \"n\": \"+13\"\n }\n }\n ],\n [\n \"Pacific/Wake\",\n {\n \"s\": {\n \"f\": \"+1200\",\n \"n\": \"+12\"\n }\n }\n ],\n [\n \"Pacific/Wallis\",\n {\n \"s\": {\n \"f\": \"+1200\",\n \"n\": \"+12\"\n }\n }\n ]\n]);\n","var baseCreate = require('./_baseCreate'),\n baseLodash = require('./_baseLodash');\n\n/** Used as references for the maximum length and index of an array. */\nvar MAX_ARRAY_LENGTH = 4294967295;\n\n/**\n * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n *\n * @private\n * @constructor\n * @param {*} value The value to wrap.\n */\nfunction LazyWrapper(value) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__dir__ = 1;\n this.__filtered__ = false;\n this.__iteratees__ = [];\n this.__takeCount__ = MAX_ARRAY_LENGTH;\n this.__views__ = [];\n}\n\n// Ensure `LazyWrapper` is an instance of `baseLodash`.\nLazyWrapper.prototype = baseCreate(baseLodash.prototype);\nLazyWrapper.prototype.constructor = LazyWrapper;\n\nmodule.exports = LazyWrapper;\n","var baseCreate = require('./_baseCreate'),\n baseLodash = require('./_baseLodash');\n\n/**\n * The base constructor for creating `lodash` wrapper objects.\n *\n * @private\n * @param {*} value The value to wrap.\n * @param {boolean} [chainAll] Enable explicit method chain sequences.\n */\nfunction LodashWrapper(value, chainAll) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__chain__ = !!chainAll;\n this.__index__ = 0;\n this.__values__ = undefined;\n}\n\nLodashWrapper.prototype = baseCreate(baseLodash.prototype);\nLodashWrapper.prototype.constructor = LodashWrapper;\n\nmodule.exports = LodashWrapper;\n","var arrayPush = require('./_arrayPush'),\n isFlattenable = require('./_isFlattenable');\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n}\n\nmodule.exports = baseFlatten;\n","/**\n * The function whose prototype chain sequence wrappers inherit from.\n *\n * @private\n */\nfunction baseLodash() {\n // No operation performed.\n}\n\nmodule.exports = baseLodash;\n","var identity = require('./identity'),\n metaMap = require('./_metaMap');\n\n/**\n * The base implementation of `setData` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\nvar baseSetData = !metaMap ? identity : function(func, data) {\n metaMap.set(func, data);\n return func;\n};\n\nmodule.exports = baseSetData;\n","/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * Creates an array that is the composition of partially applied arguments,\n * placeholders, and provided arguments into a single array of arguments.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to prepend to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\nfunction composeArgs(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersLength = holders.length,\n leftIndex = -1,\n leftLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(leftLength + rangeLength),\n isUncurried = !isCurried;\n\n while (++leftIndex < leftLength) {\n result[leftIndex] = partials[leftIndex];\n }\n while (++argsIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[holders[argsIndex]] = args[argsIndex];\n }\n }\n while (rangeLength--) {\n result[leftIndex++] = args[argsIndex++];\n }\n return result;\n}\n\nmodule.exports = composeArgs;\n","/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * This function is like `composeArgs` except that the arguments composition\n * is tailored for `_.partialRight`.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to append to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\nfunction composeArgsRight(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersIndex = -1,\n holdersLength = holders.length,\n rightIndex = -1,\n rightLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(rangeLength + rightLength),\n isUncurried = !isCurried;\n\n while (++argsIndex < rangeLength) {\n result[argsIndex] = args[argsIndex];\n }\n var offset = argsIndex;\n while (++rightIndex < rightLength) {\n result[offset + rightIndex] = partials[rightIndex];\n }\n while (++holdersIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[offset + holders[holdersIndex]] = args[argsIndex++];\n }\n }\n return result;\n}\n\nmodule.exports = composeArgsRight;\n","/**\n * Gets the number of `placeholder` occurrences in `array`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} placeholder The placeholder to search for.\n * @returns {number} Returns the placeholder count.\n */\nfunction countHolders(array, placeholder) {\n var length = array.length,\n result = 0;\n\n while (length--) {\n if (array[length] === placeholder) {\n ++result;\n }\n }\n return result;\n}\n\nmodule.exports = countHolders;\n","var createCtor = require('./_createCtor'),\n root = require('./_root');\n\n/** Used to compose bitmasks for function metadata. */\nvar WRAP_BIND_FLAG = 1;\n\n/**\n * Creates a function that wraps `func` to invoke it with the optional `this`\n * binding of `thisArg`.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\nfunction createBind(func, bitmask, thisArg) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return fn.apply(isBind ? thisArg : this, arguments);\n }\n return wrapper;\n}\n\nmodule.exports = createBind;\n","var baseCreate = require('./_baseCreate'),\n isObject = require('./isObject');\n\n/**\n * Creates a function that produces an instance of `Ctor` regardless of\n * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n *\n * @private\n * @param {Function} Ctor The constructor to wrap.\n * @returns {Function} Returns the new wrapped function.\n */\nfunction createCtor(Ctor) {\n return function() {\n // Use a `switch` statement to work with class constructors. See\n // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n // for more details.\n var args = arguments;\n switch (args.length) {\n case 0: return new Ctor;\n case 1: return new Ctor(args[0]);\n case 2: return new Ctor(args[0], args[1]);\n case 3: return new Ctor(args[0], args[1], args[2]);\n case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n }\n var thisBinding = baseCreate(Ctor.prototype),\n result = Ctor.apply(thisBinding, args);\n\n // Mimic the constructor's `return` behavior.\n // See https://es5.github.io/#x13.2.2 for more details.\n return isObject(result) ? result : thisBinding;\n };\n}\n\nmodule.exports = createCtor;\n","var apply = require('./_apply'),\n createCtor = require('./_createCtor'),\n createHybrid = require('./_createHybrid'),\n createRecurry = require('./_createRecurry'),\n getHolder = require('./_getHolder'),\n replaceHolders = require('./_replaceHolders'),\n root = require('./_root');\n\n/**\n * Creates a function that wraps `func` to enable currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {number} arity The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\nfunction createCurry(func, bitmask, arity) {\n var Ctor = createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length,\n placeholder = getHolder(wrapper);\n\n while (index--) {\n args[index] = arguments[index];\n }\n var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\n ? []\n : replaceHolders(args, placeholder);\n\n length -= holders.length;\n if (length < arity) {\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, undefined,\n args, holders, undefined, undefined, arity - length);\n }\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return apply(fn, this, args);\n }\n return wrapper;\n}\n\nmodule.exports = createCurry;\n","var composeArgs = require('./_composeArgs'),\n composeArgsRight = require('./_composeArgsRight'),\n countHolders = require('./_countHolders'),\n createCtor = require('./_createCtor'),\n createRecurry = require('./_createRecurry'),\n getHolder = require('./_getHolder'),\n reorder = require('./_reorder'),\n replaceHolders = require('./_replaceHolders'),\n root = require('./_root');\n\n/** Used to compose bitmasks for function metadata. */\nvar WRAP_BIND_FLAG = 1,\n WRAP_BIND_KEY_FLAG = 2,\n WRAP_CURRY_FLAG = 8,\n WRAP_CURRY_RIGHT_FLAG = 16,\n WRAP_ARY_FLAG = 128,\n WRAP_FLIP_FLAG = 512;\n\n/**\n * Creates a function that wraps `func` to invoke it with optional `this`\n * binding of `thisArg`, partial application, and currying.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [partialsRight] The arguments to append to those provided\n * to the new function.\n * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\nfunction createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n var isAry = bitmask & WRAP_ARY_FLAG,\n isBind = bitmask & WRAP_BIND_FLAG,\n isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n isFlip = bitmask & WRAP_FLIP_FLAG,\n Ctor = isBindKey ? undefined : createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length;\n\n while (index--) {\n args[index] = arguments[index];\n }\n if (isCurried) {\n var placeholder = getHolder(wrapper),\n holdersCount = countHolders(args, placeholder);\n }\n if (partials) {\n args = composeArgs(args, partials, holders, isCurried);\n }\n if (partialsRight) {\n args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n }\n length -= holdersCount;\n if (isCurried && length < arity) {\n var newHolders = replaceHolders(args, placeholder);\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, thisArg,\n args, newHolders, argPos, ary, arity - length\n );\n }\n var thisBinding = isBind ? thisArg : this,\n fn = isBindKey ? thisBinding[func] : func;\n\n length = args.length;\n if (argPos) {\n args = reorder(args, argPos);\n } else if (isFlip && length > 1) {\n args.reverse();\n }\n if (isAry && ary < length) {\n args.length = ary;\n }\n if (this && this !== root && this instanceof wrapper) {\n fn = Ctor || createCtor(fn);\n }\n return fn.apply(thisBinding, args);\n }\n return wrapper;\n}\n\nmodule.exports = createHybrid;\n","var apply = require('./_apply'),\n createCtor = require('./_createCtor'),\n root = require('./_root');\n\n/** Used to compose bitmasks for function metadata. */\nvar WRAP_BIND_FLAG = 1;\n\n/**\n * Creates a function that wraps `func` to invoke it with the `this` binding\n * of `thisArg` and `partials` prepended to the arguments it receives.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} partials The arguments to prepend to those provided to\n * the new function.\n * @returns {Function} Returns the new wrapped function.\n */\nfunction createPartial(func, bitmask, thisArg, partials) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var argsIndex = -1,\n argsLength = arguments.length,\n leftIndex = -1,\n leftLength = partials.length,\n args = Array(leftLength + argsLength),\n fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n\n while (++leftIndex < leftLength) {\n args[leftIndex] = partials[leftIndex];\n }\n while (argsLength--) {\n args[leftIndex++] = arguments[++argsIndex];\n }\n return apply(fn, isBind ? thisArg : this, args);\n }\n return wrapper;\n}\n\nmodule.exports = createPartial;\n","var isLaziable = require('./_isLaziable'),\n setData = require('./_setData'),\n setWrapToString = require('./_setWrapToString');\n\n/** Used to compose bitmasks for function metadata. */\nvar WRAP_BIND_FLAG = 1,\n WRAP_BIND_KEY_FLAG = 2,\n WRAP_CURRY_BOUND_FLAG = 4,\n WRAP_CURRY_FLAG = 8,\n WRAP_PARTIAL_FLAG = 32,\n WRAP_PARTIAL_RIGHT_FLAG = 64;\n\n/**\n * Creates a function that wraps `func` to continue currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {Function} wrapFunc The function to create the `func` wrapper.\n * @param {*} placeholder The placeholder value.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\nfunction createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n var isCurry = bitmask & WRAP_CURRY_FLAG,\n newHolders = isCurry ? holders : undefined,\n newHoldersRight = isCurry ? undefined : holders,\n newPartials = isCurry ? partials : undefined,\n newPartialsRight = isCurry ? undefined : partials;\n\n bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);\n bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n\n if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n }\n var newData = [\n func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\n newHoldersRight, argPos, ary, arity\n ];\n\n var result = wrapFunc.apply(undefined, newData);\n if (isLaziable(func)) {\n setData(result, newData);\n }\n result.placeholder = placeholder;\n return setWrapToString(result, func, bitmask);\n}\n\nmodule.exports = createRecurry;\n","var baseSetData = require('./_baseSetData'),\n createBind = require('./_createBind'),\n createCurry = require('./_createCurry'),\n createHybrid = require('./_createHybrid'),\n createPartial = require('./_createPartial'),\n getData = require('./_getData'),\n mergeData = require('./_mergeData'),\n setData = require('./_setData'),\n setWrapToString = require('./_setWrapToString'),\n toInteger = require('./toInteger');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used to compose bitmasks for function metadata. */\nvar WRAP_BIND_FLAG = 1,\n WRAP_BIND_KEY_FLAG = 2,\n WRAP_CURRY_FLAG = 8,\n WRAP_CURRY_RIGHT_FLAG = 16,\n WRAP_PARTIAL_FLAG = 32,\n WRAP_PARTIAL_RIGHT_FLAG = 64;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * Creates a function that either curries or invokes `func` with optional\n * `this` binding and partially applied arguments.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags.\n * 1 - `_.bind`\n * 2 - `_.bindKey`\n * 4 - `_.curry` or `_.curryRight` of a bound function\n * 8 - `_.curry`\n * 16 - `_.curryRight`\n * 32 - `_.partial`\n * 64 - `_.partialRight`\n * 128 - `_.rearg`\n * 256 - `_.ary`\n * 512 - `_.flip`\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to be partially applied.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\nfunction createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\n if (!isBindKey && typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var length = partials ? partials.length : 0;\n if (!length) {\n bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\n partials = holders = undefined;\n }\n ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n arity = arity === undefined ? arity : toInteger(arity);\n length -= holders ? holders.length : 0;\n\n if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\n var partialsRight = partials,\n holdersRight = holders;\n\n partials = holders = undefined;\n }\n var data = isBindKey ? undefined : getData(func);\n\n var newData = [\n func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n argPos, ary, arity\n ];\n\n if (data) {\n mergeData(newData, data);\n }\n func = newData[0];\n bitmask = newData[1];\n thisArg = newData[2];\n partials = newData[3];\n holders = newData[4];\n arity = newData[9] = newData[9] === undefined\n ? (isBindKey ? 0 : func.length)\n : nativeMax(newData[9] - length, 0);\n\n if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n }\n if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n var result = createBind(func, bitmask, thisArg);\n } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n result = createCurry(func, bitmask, arity);\n } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n result = createPartial(func, bitmask, thisArg, partials);\n } else {\n result = createHybrid.apply(undefined, newData);\n }\n var setter = data ? baseSetData : setData;\n return setWrapToString(setter(result, newData), func, bitmask);\n}\n\nmodule.exports = createWrap;\n","var flatten = require('./flatten'),\n overRest = require('./_overRest'),\n setToString = require('./_setToString');\n\n/**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\nfunction flatRest(func) {\n return setToString(overRest(func, undefined, flatten), func + '');\n}\n\nmodule.exports = flatRest;\n","var metaMap = require('./_metaMap'),\n noop = require('./noop');\n\n/**\n * Gets metadata for `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {*} Returns the metadata for `func`.\n */\nvar getData = !metaMap ? noop : function(func) {\n return metaMap.get(func);\n};\n\nmodule.exports = getData;\n","var realNames = require('./_realNames');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the name of `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {string} Returns the function name.\n */\nfunction getFuncName(func) {\n var result = (func.name + ''),\n array = realNames[result],\n length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n while (length--) {\n var data = array[length],\n otherFunc = data.func;\n if (otherFunc == null || otherFunc == func) {\n return data.name;\n }\n }\n return result;\n}\n\nmodule.exports = getFuncName;\n","/**\n * Gets the argument placeholder value for `func`.\n *\n * @private\n * @param {Function} func The function to inspect.\n * @returns {*} Returns the placeholder value.\n */\nfunction getHolder(func) {\n var object = func;\n return object.placeholder;\n}\n\nmodule.exports = getHolder;\n","/** Used to match wrap detail comments. */\nvar reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n reSplitDetails = /,? & /;\n\n/**\n * Extracts wrapper details from the `source` body comment.\n *\n * @private\n * @param {string} source The source to inspect.\n * @returns {Array} Returns the wrapper details.\n */\nfunction getWrapDetails(source) {\n var match = source.match(reWrapDetails);\n return match ? match[1].split(reSplitDetails) : [];\n}\n\nmodule.exports = getWrapDetails;\n","/** Used to match wrap detail comments. */\nvar reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/;\n\n/**\n * Inserts wrapper `details` in a comment at the top of the `source` body.\n *\n * @private\n * @param {string} source The source to modify.\n * @returns {Array} details The details to insert.\n * @returns {string} Returns the modified source.\n */\nfunction insertWrapDetails(source, details) {\n var length = details.length;\n if (!length) {\n return source;\n }\n var lastIndex = length - 1;\n details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n details = details.join(length > 2 ? ', ' : ' ');\n return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n}\n\nmodule.exports = insertWrapDetails;\n","var Symbol = require('./_Symbol'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray');\n\n/** Built-in value references. */\nvar spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\nmodule.exports = isFlattenable;\n","var LazyWrapper = require('./_LazyWrapper'),\n getData = require('./_getData'),\n getFuncName = require('./_getFuncName'),\n lodash = require('./wrapperLodash');\n\n/**\n * Checks if `func` has a lazy counterpart.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n * else `false`.\n */\nfunction isLaziable(func) {\n var funcName = getFuncName(func),\n other = lodash[funcName];\n\n if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n return false;\n }\n if (func === other) {\n return true;\n }\n var data = getData(other);\n return !!data && func === data[0];\n}\n\nmodule.exports = isLaziable;\n","var composeArgs = require('./_composeArgs'),\n composeArgsRight = require('./_composeArgsRight'),\n replaceHolders = require('./_replaceHolders');\n\n/** Used as the internal argument placeholder. */\nvar PLACEHOLDER = '__lodash_placeholder__';\n\n/** Used to compose bitmasks for function metadata. */\nvar WRAP_BIND_FLAG = 1,\n WRAP_BIND_KEY_FLAG = 2,\n WRAP_CURRY_BOUND_FLAG = 4,\n WRAP_CURRY_FLAG = 8,\n WRAP_ARY_FLAG = 128,\n WRAP_REARG_FLAG = 256;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMin = Math.min;\n\n/**\n * Merges the function metadata of `source` into `data`.\n *\n * Merging metadata reduces the number of wrappers used to invoke a function.\n * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n * may be applied regardless of execution order. Methods like `_.ary` and\n * `_.rearg` modify function arguments, making the order in which they are\n * executed important, preventing the merging of metadata. However, we make\n * an exception for a safe combined case where curried functions have `_.ary`\n * and or `_.rearg` applied.\n *\n * @private\n * @param {Array} data The destination metadata.\n * @param {Array} source The source metadata.\n * @returns {Array} Returns `data`.\n */\nfunction mergeData(data, source) {\n var bitmask = data[1],\n srcBitmask = source[1],\n newBitmask = bitmask | srcBitmask,\n isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n\n var isCombo =\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\n ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\n\n // Exit early if metadata can't be merged.\n if (!(isCommon || isCombo)) {\n return data;\n }\n // Use source `thisArg` if available.\n if (srcBitmask & WRAP_BIND_FLAG) {\n data[2] = source[2];\n // Set when currying a bound function.\n newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n }\n // Compose partial arguments.\n var value = source[3];\n if (value) {\n var partials = data[3];\n data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n }\n // Compose partial right arguments.\n value = source[5];\n if (value) {\n partials = data[5];\n data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n }\n // Use source `argPos` if available.\n value = source[7];\n if (value) {\n data[7] = value;\n }\n // Use source `ary` if it's smaller.\n if (srcBitmask & WRAP_ARY_FLAG) {\n data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n }\n // Use source `arity` if one is not provided.\n if (data[9] == null) {\n data[9] = source[9];\n }\n // Use source `func` and merge bitmasks.\n data[0] = source[0];\n data[1] = newBitmask;\n\n return data;\n}\n\nmodule.exports = mergeData;\n","var WeakMap = require('./_WeakMap');\n\n/** Used to store function metadata. */\nvar metaMap = WeakMap && new WeakMap;\n\nmodule.exports = metaMap;\n","/** Used to lookup unminified function names. */\nvar realNames = {};\n\nmodule.exports = realNames;\n","var copyArray = require('./_copyArray'),\n isIndex = require('./_isIndex');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMin = Math.min;\n\n/**\n * Reorder `array` according to the specified indexes where the element at\n * the first index is assigned as the first element, the element at\n * the second index is assigned as the second element, and so on.\n *\n * @private\n * @param {Array} array The array to reorder.\n * @param {Array} indexes The arranged array indexes.\n * @returns {Array} Returns `array`.\n */\nfunction reorder(array, indexes) {\n var arrLength = array.length,\n length = nativeMin(indexes.length, arrLength),\n oldArray = copyArray(array);\n\n while (length--) {\n var index = indexes[length];\n array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n }\n return array;\n}\n\nmodule.exports = reorder;\n","/** Used as the internal argument placeholder. */\nvar PLACEHOLDER = '__lodash_placeholder__';\n\n/**\n * Replaces all `placeholder` elements in `array` with an internal placeholder\n * and returns an array of their indexes.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {*} placeholder The placeholder to replace.\n * @returns {Array} Returns the new array of placeholder indexes.\n */\nfunction replaceHolders(array, placeholder) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value === placeholder || value === PLACEHOLDER) {\n array[index] = PLACEHOLDER;\n result[resIndex++] = index;\n }\n }\n return result;\n}\n\nmodule.exports = replaceHolders;\n","var baseSetData = require('./_baseSetData'),\n shortOut = require('./_shortOut');\n\n/**\n * Sets metadata for `func`.\n *\n * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n * period of time, it will trip its breaker and transition to an identity\n * function to avoid garbage collection pauses in V8. See\n * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n * for more details.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\nvar setData = shortOut(baseSetData);\n\nmodule.exports = setData;\n","var getWrapDetails = require('./_getWrapDetails'),\n insertWrapDetails = require('./_insertWrapDetails'),\n setToString = require('./_setToString'),\n updateWrapDetails = require('./_updateWrapDetails');\n\n/**\n * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n * with wrapper details in a comment at the top of the source body.\n *\n * @private\n * @param {Function} wrapper The function to modify.\n * @param {Function} reference The reference function.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Function} Returns `wrapper`.\n */\nfunction setWrapToString(wrapper, reference, bitmask) {\n var source = (reference + '');\n return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n}\n\nmodule.exports = setWrapToString;\n","var arrayEach = require('./_arrayEach'),\n arrayIncludes = require('./_arrayIncludes');\n\n/** Used to compose bitmasks for function metadata. */\nvar WRAP_BIND_FLAG = 1,\n WRAP_BIND_KEY_FLAG = 2,\n WRAP_CURRY_FLAG = 8,\n WRAP_CURRY_RIGHT_FLAG = 16,\n WRAP_PARTIAL_FLAG = 32,\n WRAP_PARTIAL_RIGHT_FLAG = 64,\n WRAP_ARY_FLAG = 128,\n WRAP_REARG_FLAG = 256,\n WRAP_FLIP_FLAG = 512;\n\n/** Used to associate wrap methods with their bit flags. */\nvar wrapFlags = [\n ['ary', WRAP_ARY_FLAG],\n ['bind', WRAP_BIND_FLAG],\n ['bindKey', WRAP_BIND_KEY_FLAG],\n ['curry', WRAP_CURRY_FLAG],\n ['curryRight', WRAP_CURRY_RIGHT_FLAG],\n ['flip', WRAP_FLIP_FLAG],\n ['partial', WRAP_PARTIAL_FLAG],\n ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],\n ['rearg', WRAP_REARG_FLAG]\n];\n\n/**\n * Updates wrapper `details` based on `bitmask` flags.\n *\n * @private\n * @returns {Array} details The details to modify.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Array} Returns `details`.\n */\nfunction updateWrapDetails(details, bitmask) {\n arrayEach(wrapFlags, function(pair) {\n var value = '_.' + pair[0];\n if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\n details.push(value);\n }\n });\n return details.sort();\n}\n\nmodule.exports = updateWrapDetails;\n","var LazyWrapper = require('./_LazyWrapper'),\n LodashWrapper = require('./_LodashWrapper'),\n copyArray = require('./_copyArray');\n\n/**\n * Creates a clone of `wrapper`.\n *\n * @private\n * @param {Object} wrapper The wrapper to clone.\n * @returns {Object} Returns the cloned wrapper.\n */\nfunction wrapperClone(wrapper) {\n if (wrapper instanceof LazyWrapper) {\n return wrapper.clone();\n }\n var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n result.__actions__ = copyArray(wrapper.__actions__);\n result.__index__ = wrapper.__index__;\n result.__values__ = wrapper.__values__;\n return result;\n}\n\nmodule.exports = wrapperClone;\n","var createWrap = require('./_createWrap');\n\n/** Used to compose bitmasks for function metadata. */\nvar WRAP_ARY_FLAG = 128;\n\n/**\n * Creates a function that invokes `func`, with up to `n` arguments,\n * ignoring any additional arguments.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @param {number} [n=func.length] The arity cap.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n * // => [6, 8, 10]\n */\nfunction ary(func, n, guard) {\n n = guard ? undefined : n;\n n = (func && n == null) ? func.length : n;\n return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\n}\n\nmodule.exports = ary;\n","var createWrap = require('./_createWrap');\n\n/** Used to compose bitmasks for function metadata. */\nvar WRAP_CURRY_FLAG = 8;\n\n/**\n * Creates a function that accepts arguments of `func` and either invokes\n * `func` returning its result, if at least `arity` number of arguments have\n * been provided, or returns a function that accepts the remaining `func`\n * arguments, and so on. The arity of `func` may be specified if `func.length`\n * is not sufficient.\n *\n * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curry(abc);\n *\n * curried(1)(2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(1)(_, 3)(2);\n * // => [1, 2, 3]\n */\nfunction curry(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curry.placeholder;\n return result;\n}\n\n// Assign default placeholders.\ncurry.placeholder = {};\n\nmodule.exports = curry;\n","var baseFlatten = require('./_baseFlatten');\n\n/**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\nfunction flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n}\n\nmodule.exports = flatten;\n","var mapping = require('./_mapping'),\n fallbackHolder = require('./placeholder');\n\n/** Built-in value reference. */\nvar push = Array.prototype.push;\n\n/**\n * Creates a function, with an arity of `n`, that invokes `func` with the\n * arguments it receives.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} n The arity of the new function.\n * @returns {Function} Returns the new function.\n */\nfunction baseArity(func, n) {\n return n == 2\n ? function(a, b) { return func.apply(undefined, arguments); }\n : function(a) { return func.apply(undefined, arguments); };\n}\n\n/**\n * Creates a function that invokes `func`, with up to `n` arguments, ignoring\n * any additional arguments.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @param {number} n The arity cap.\n * @returns {Function} Returns the new function.\n */\nfunction baseAry(func, n) {\n return n == 2\n ? function(a, b) { return func(a, b); }\n : function(a) { return func(a); };\n}\n\n/**\n * Creates a clone of `array`.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the cloned array.\n */\nfunction cloneArray(array) {\n var length = array ? array.length : 0,\n result = Array(length);\n\n while (length--) {\n result[length] = array[length];\n }\n return result;\n}\n\n/**\n * Creates a function that clones a given object using the assignment `func`.\n *\n * @private\n * @param {Function} func The assignment function.\n * @returns {Function} Returns the new cloner function.\n */\nfunction createCloner(func) {\n return function(object) {\n return func({}, object);\n };\n}\n\n/**\n * A specialized version of `_.spread` which flattens the spread array into\n * the arguments of the invoked `func`.\n *\n * @private\n * @param {Function} func The function to spread arguments over.\n * @param {number} start The start position of the spread.\n * @returns {Function} Returns the new function.\n */\nfunction flatSpread(func, start) {\n return function() {\n var length = arguments.length,\n lastIndex = length - 1,\n args = Array(length);\n\n while (length--) {\n args[length] = arguments[length];\n }\n var array = args[start],\n otherArgs = args.slice(0, start);\n\n if (array) {\n push.apply(otherArgs, array);\n }\n if (start != lastIndex) {\n push.apply(otherArgs, args.slice(start + 1));\n }\n return func.apply(this, otherArgs);\n };\n}\n\n/**\n * Creates a function that wraps `func` and uses `cloner` to clone the first\n * argument it receives.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} cloner The function to clone arguments.\n * @returns {Function} Returns the new immutable function.\n */\nfunction wrapImmutable(func, cloner) {\n return function() {\n var length = arguments.length;\n if (!length) {\n return;\n }\n var args = Array(length);\n while (length--) {\n args[length] = arguments[length];\n }\n var result = args[0] = cloner.apply(undefined, args);\n func.apply(undefined, args);\n return result;\n };\n}\n\n/**\n * The base implementation of `convert` which accepts a `util` object of methods\n * required to perform conversions.\n *\n * @param {Object} util The util object.\n * @param {string} name The name of the function to convert.\n * @param {Function} func The function to convert.\n * @param {Object} [options] The options object.\n * @param {boolean} [options.cap=true] Specify capping iteratee arguments.\n * @param {boolean} [options.curry=true] Specify currying.\n * @param {boolean} [options.fixed=true] Specify fixed arity.\n * @param {boolean} [options.immutable=true] Specify immutable operations.\n * @param {boolean} [options.rearg=true] Specify rearranging arguments.\n * @returns {Function|Object} Returns the converted function or object.\n */\nfunction baseConvert(util, name, func, options) {\n var isLib = typeof name == 'function',\n isObj = name === Object(name);\n\n if (isObj) {\n options = func;\n func = name;\n name = undefined;\n }\n if (func == null) {\n throw new TypeError;\n }\n options || (options = {});\n\n var config = {\n 'cap': 'cap' in options ? options.cap : true,\n 'curry': 'curry' in options ? options.curry : true,\n 'fixed': 'fixed' in options ? options.fixed : true,\n 'immutable': 'immutable' in options ? options.immutable : true,\n 'rearg': 'rearg' in options ? options.rearg : true\n };\n\n var defaultHolder = isLib ? func : fallbackHolder,\n forceCurry = ('curry' in options) && options.curry,\n forceFixed = ('fixed' in options) && options.fixed,\n forceRearg = ('rearg' in options) && options.rearg,\n pristine = isLib ? func.runInContext() : undefined;\n\n var helpers = isLib ? func : {\n 'ary': util.ary,\n 'assign': util.assign,\n 'clone': util.clone,\n 'curry': util.curry,\n 'forEach': util.forEach,\n 'isArray': util.isArray,\n 'isError': util.isError,\n 'isFunction': util.isFunction,\n 'isWeakMap': util.isWeakMap,\n 'iteratee': util.iteratee,\n 'keys': util.keys,\n 'rearg': util.rearg,\n 'toInteger': util.toInteger,\n 'toPath': util.toPath\n };\n\n var ary = helpers.ary,\n assign = helpers.assign,\n clone = helpers.clone,\n curry = helpers.curry,\n each = helpers.forEach,\n isArray = helpers.isArray,\n isError = helpers.isError,\n isFunction = helpers.isFunction,\n isWeakMap = helpers.isWeakMap,\n keys = helpers.keys,\n rearg = helpers.rearg,\n toInteger = helpers.toInteger,\n toPath = helpers.toPath;\n\n var aryMethodKeys = keys(mapping.aryMethod);\n\n var wrappers = {\n 'castArray': function(castArray) {\n return function() {\n var value = arguments[0];\n return isArray(value)\n ? castArray(cloneArray(value))\n : castArray.apply(undefined, arguments);\n };\n },\n 'iteratee': function(iteratee) {\n return function() {\n var func = arguments[0],\n arity = arguments[1],\n result = iteratee(func, arity),\n length = result.length;\n\n if (config.cap && typeof arity == 'number') {\n arity = arity > 2 ? (arity - 2) : 1;\n return (length && length <= arity) ? result : baseAry(result, arity);\n }\n return result;\n };\n },\n 'mixin': function(mixin) {\n return function(source) {\n var func = this;\n if (!isFunction(func)) {\n return mixin(func, Object(source));\n }\n var pairs = [];\n each(keys(source), function(key) {\n if (isFunction(source[key])) {\n pairs.push([key, func.prototype[key]]);\n }\n });\n\n mixin(func, Object(source));\n\n each(pairs, function(pair) {\n var value = pair[1];\n if (isFunction(value)) {\n func.prototype[pair[0]] = value;\n } else {\n delete func.prototype[pair[0]];\n }\n });\n return func;\n };\n },\n 'nthArg': function(nthArg) {\n return function(n) {\n var arity = n < 0 ? 1 : (toInteger(n) + 1);\n return curry(nthArg(n), arity);\n };\n },\n 'rearg': function(rearg) {\n return function(func, indexes) {\n var arity = indexes ? indexes.length : 0;\n return curry(rearg(func, indexes), arity);\n };\n },\n 'runInContext': function(runInContext) {\n return function(context) {\n return baseConvert(util, runInContext(context), options);\n };\n }\n };\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * Casts `func` to a function with an arity capped iteratee if needed.\n *\n * @private\n * @param {string} name The name of the function to inspect.\n * @param {Function} func The function to inspect.\n * @returns {Function} Returns the cast function.\n */\n function castCap(name, func) {\n if (config.cap) {\n var indexes = mapping.iterateeRearg[name];\n if (indexes) {\n return iterateeRearg(func, indexes);\n }\n var n = !isLib && mapping.iterateeAry[name];\n if (n) {\n return iterateeAry(func, n);\n }\n }\n return func;\n }\n\n /**\n * Casts `func` to a curried function if needed.\n *\n * @private\n * @param {string} name The name of the function to inspect.\n * @param {Function} func The function to inspect.\n * @param {number} n The arity of `func`.\n * @returns {Function} Returns the cast function.\n */\n function castCurry(name, func, n) {\n return (forceCurry || (config.curry && n > 1))\n ? curry(func, n)\n : func;\n }\n\n /**\n * Casts `func` to a fixed arity function if needed.\n *\n * @private\n * @param {string} name The name of the function to inspect.\n * @param {Function} func The function to inspect.\n * @param {number} n The arity cap.\n * @returns {Function} Returns the cast function.\n */\n function castFixed(name, func, n) {\n if (config.fixed && (forceFixed || !mapping.skipFixed[name])) {\n var data = mapping.methodSpread[name],\n start = data && data.start;\n\n return start === undefined ? ary(func, n) : flatSpread(func, start);\n }\n return func;\n }\n\n /**\n * Casts `func` to an rearged function if needed.\n *\n * @private\n * @param {string} name The name of the function to inspect.\n * @param {Function} func The function to inspect.\n * @param {number} n The arity of `func`.\n * @returns {Function} Returns the cast function.\n */\n function castRearg(name, func, n) {\n return (config.rearg && n > 1 && (forceRearg || !mapping.skipRearg[name]))\n ? rearg(func, mapping.methodRearg[name] || mapping.aryRearg[n])\n : func;\n }\n\n /**\n * Creates a clone of `object` by `path`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {Array|string} path The path to clone by.\n * @returns {Object} Returns the cloned object.\n */\n function cloneByPath(object, path) {\n path = toPath(path);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n result = clone(Object(object)),\n nested = result;\n\n while (nested != null && ++index < length) {\n var key = path[index],\n value = nested[key];\n\n if (value != null &&\n !(isFunction(value) || isError(value) || isWeakMap(value))) {\n nested[key] = clone(index == lastIndex ? value : Object(value));\n }\n nested = nested[key];\n }\n return result;\n }\n\n /**\n * Converts `lodash` to an immutable auto-curried iteratee-first data-last\n * version with conversion `options` applied.\n *\n * @param {Object} [options] The options object. See `baseConvert` for more details.\n * @returns {Function} Returns the converted `lodash`.\n */\n function convertLib(options) {\n return _.runInContext.convert(options)(undefined);\n }\n\n /**\n * Create a converter function for `func` of `name`.\n *\n * @param {string} name The name of the function to convert.\n * @param {Function} func The function to convert.\n * @returns {Function} Returns the new converter function.\n */\n function createConverter(name, func) {\n var realName = mapping.aliasToReal[name] || name,\n methodName = mapping.remap[realName] || realName,\n oldOptions = options;\n\n return function(options) {\n var newUtil = isLib ? pristine : helpers,\n newFunc = isLib ? pristine[methodName] : func,\n newOptions = assign(assign({}, oldOptions), options);\n\n return baseConvert(newUtil, realName, newFunc, newOptions);\n };\n }\n\n /**\n * Creates a function that wraps `func` to invoke its iteratee, with up to `n`\n * arguments, ignoring any additional arguments.\n *\n * @private\n * @param {Function} func The function to cap iteratee arguments for.\n * @param {number} n The arity cap.\n * @returns {Function} Returns the new function.\n */\n function iterateeAry(func, n) {\n return overArg(func, function(func) {\n return typeof func == 'function' ? baseAry(func, n) : func;\n });\n }\n\n /**\n * Creates a function that wraps `func` to invoke its iteratee with arguments\n * arranged according to the specified `indexes` where the argument value at\n * the first index is provided as the first argument, the argument value at\n * the second index is provided as the second argument, and so on.\n *\n * @private\n * @param {Function} func The function to rearrange iteratee arguments for.\n * @param {number[]} indexes The arranged argument indexes.\n * @returns {Function} Returns the new function.\n */\n function iterateeRearg(func, indexes) {\n return overArg(func, function(func) {\n var n = indexes.length;\n return baseArity(rearg(baseAry(func, n), indexes), n);\n });\n }\n\n /**\n * Creates a function that invokes `func` with its first argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\n function overArg(func, transform) {\n return function() {\n var length = arguments.length;\n if (!length) {\n return func();\n }\n var args = Array(length);\n while (length--) {\n args[length] = arguments[length];\n }\n var index = config.rearg ? 0 : (length - 1);\n args[index] = transform(args[index]);\n return func.apply(undefined, args);\n };\n }\n\n /**\n * Creates a function that wraps `func` and applys the conversions\n * rules by `name`.\n *\n * @private\n * @param {string} name The name of the function to wrap.\n * @param {Function} func The function to wrap.\n * @returns {Function} Returns the converted function.\n */\n function wrap(name, func, placeholder) {\n var result,\n realName = mapping.aliasToReal[name] || name,\n wrapped = func,\n wrapper = wrappers[realName];\n\n if (wrapper) {\n wrapped = wrapper(func);\n }\n else if (config.immutable) {\n if (mapping.mutate.array[realName]) {\n wrapped = wrapImmutable(func, cloneArray);\n }\n else if (mapping.mutate.object[realName]) {\n wrapped = wrapImmutable(func, createCloner(func));\n }\n else if (mapping.mutate.set[realName]) {\n wrapped = wrapImmutable(func, cloneByPath);\n }\n }\n each(aryMethodKeys, function(aryKey) {\n each(mapping.aryMethod[aryKey], function(otherName) {\n if (realName == otherName) {\n var data = mapping.methodSpread[realName],\n afterRearg = data && data.afterRearg;\n\n result = afterRearg\n ? castFixed(realName, castRearg(realName, wrapped, aryKey), aryKey)\n : castRearg(realName, castFixed(realName, wrapped, aryKey), aryKey);\n\n result = castCap(realName, result);\n result = castCurry(realName, result, aryKey);\n return false;\n }\n });\n return !result;\n });\n\n result || (result = wrapped);\n if (result == func) {\n result = forceCurry ? curry(result, 1) : function() {\n return func.apply(this, arguments);\n };\n }\n result.convert = createConverter(realName, func);\n result.placeholder = func.placeholder = placeholder;\n\n return result;\n }\n\n /*--------------------------------------------------------------------------*/\n\n if (!isObj) {\n return wrap(name, func, defaultHolder);\n }\n var _ = func;\n\n // Convert methods by ary cap.\n var pairs = [];\n each(aryMethodKeys, function(aryKey) {\n each(mapping.aryMethod[aryKey], function(key) {\n var func = _[mapping.remap[key] || key];\n if (func) {\n pairs.push([key, wrap(key, func, _)]);\n }\n });\n });\n\n // Convert remaining methods.\n each(keys(_), function(key) {\n var func = _[key];\n if (typeof func == 'function') {\n var length = pairs.length;\n while (length--) {\n if (pairs[length][0] == key) {\n return;\n }\n }\n func.convert = createConverter(key, func);\n pairs.push([key, func]);\n }\n });\n\n // Assign to `_` leaving `_.prototype` unchanged to allow chaining.\n each(pairs, function(pair) {\n _[pair[0]] = pair[1];\n });\n\n _.convert = convertLib;\n _.placeholder = _;\n\n // Assign aliases.\n each(keys(_), function(key) {\n each(mapping.realToAlias[key] || [], function(alias) {\n _[alias] = _[key];\n });\n });\n\n return _;\n}\n\nmodule.exports = baseConvert;\n","/** Used to map aliases to their real names. */\nexports.aliasToReal = {\n\n // Lodash aliases.\n 'each': 'forEach',\n 'eachRight': 'forEachRight',\n 'entries': 'toPairs',\n 'entriesIn': 'toPairsIn',\n 'extend': 'assignIn',\n 'extendAll': 'assignInAll',\n 'extendAllWith': 'assignInAllWith',\n 'extendWith': 'assignInWith',\n 'first': 'head',\n\n // Methods that are curried variants of others.\n 'conforms': 'conformsTo',\n 'matches': 'isMatch',\n 'property': 'get',\n\n // Ramda aliases.\n '__': 'placeholder',\n 'F': 'stubFalse',\n 'T': 'stubTrue',\n 'all': 'every',\n 'allPass': 'overEvery',\n 'always': 'constant',\n 'any': 'some',\n 'anyPass': 'overSome',\n 'apply': 'spread',\n 'assoc': 'set',\n 'assocPath': 'set',\n 'complement': 'negate',\n 'compose': 'flowRight',\n 'contains': 'includes',\n 'dissoc': 'unset',\n 'dissocPath': 'unset',\n 'dropLast': 'dropRight',\n 'dropLastWhile': 'dropRightWhile',\n 'equals': 'isEqual',\n 'identical': 'eq',\n 'indexBy': 'keyBy',\n 'init': 'initial',\n 'invertObj': 'invert',\n 'juxt': 'over',\n 'omitAll': 'omit',\n 'nAry': 'ary',\n 'path': 'get',\n 'pathEq': 'matchesProperty',\n 'pathOr': 'getOr',\n 'paths': 'at',\n 'pickAll': 'pick',\n 'pipe': 'flow',\n 'pluck': 'map',\n 'prop': 'get',\n 'propEq': 'matchesProperty',\n 'propOr': 'getOr',\n 'props': 'at',\n 'symmetricDifference': 'xor',\n 'symmetricDifferenceBy': 'xorBy',\n 'symmetricDifferenceWith': 'xorWith',\n 'takeLast': 'takeRight',\n 'takeLastWhile': 'takeRightWhile',\n 'unapply': 'rest',\n 'unnest': 'flatten',\n 'useWith': 'overArgs',\n 'where': 'conformsTo',\n 'whereEq': 'isMatch',\n 'zipObj': 'zipObject'\n};\n\n/** Used to map ary to method names. */\nexports.aryMethod = {\n '1': [\n 'assignAll', 'assignInAll', 'attempt', 'castArray', 'ceil', 'create',\n 'curry', 'curryRight', 'defaultsAll', 'defaultsDeepAll', 'floor', 'flow',\n 'flowRight', 'fromPairs', 'invert', 'iteratee', 'memoize', 'method', 'mergeAll',\n 'methodOf', 'mixin', 'nthArg', 'over', 'overEvery', 'overSome','rest', 'reverse',\n 'round', 'runInContext', 'spread', 'template', 'trim', 'trimEnd', 'trimStart',\n 'uniqueId', 'words', 'zipAll'\n ],\n '2': [\n 'add', 'after', 'ary', 'assign', 'assignAllWith', 'assignIn', 'assignInAllWith',\n 'at', 'before', 'bind', 'bindAll', 'bindKey', 'chunk', 'cloneDeepWith',\n 'cloneWith', 'concat', 'conformsTo', 'countBy', 'curryN', 'curryRightN',\n 'debounce', 'defaults', 'defaultsDeep', 'defaultTo', 'delay', 'difference',\n 'divide', 'drop', 'dropRight', 'dropRightWhile', 'dropWhile', 'endsWith', 'eq',\n 'every', 'filter', 'find', 'findIndex', 'findKey', 'findLast', 'findLastIndex',\n 'findLastKey', 'flatMap', 'flatMapDeep', 'flattenDepth', 'forEach',\n 'forEachRight', 'forIn', 'forInRight', 'forOwn', 'forOwnRight', 'get',\n 'groupBy', 'gt', 'gte', 'has', 'hasIn', 'includes', 'indexOf', 'intersection',\n 'invertBy', 'invoke', 'invokeMap', 'isEqual', 'isMatch', 'join', 'keyBy',\n 'lastIndexOf', 'lt', 'lte', 'map', 'mapKeys', 'mapValues', 'matchesProperty',\n 'maxBy', 'meanBy', 'merge', 'mergeAllWith', 'minBy', 'multiply', 'nth', 'omit',\n 'omitBy', 'overArgs', 'pad', 'padEnd', 'padStart', 'parseInt', 'partial',\n 'partialRight', 'partition', 'pick', 'pickBy', 'propertyOf', 'pull', 'pullAll',\n 'pullAt', 'random', 'range', 'rangeRight', 'rearg', 'reject', 'remove',\n 'repeat', 'restFrom', 'result', 'sampleSize', 'some', 'sortBy', 'sortedIndex',\n 'sortedIndexOf', 'sortedLastIndex', 'sortedLastIndexOf', 'sortedUniqBy',\n 'split', 'spreadFrom', 'startsWith', 'subtract', 'sumBy', 'take', 'takeRight',\n 'takeRightWhile', 'takeWhile', 'tap', 'throttle', 'thru', 'times', 'trimChars',\n 'trimCharsEnd', 'trimCharsStart', 'truncate', 'union', 'uniqBy', 'uniqWith',\n 'unset', 'unzipWith', 'without', 'wrap', 'xor', 'zip', 'zipObject',\n 'zipObjectDeep'\n ],\n '3': [\n 'assignInWith', 'assignWith', 'clamp', 'differenceBy', 'differenceWith',\n 'findFrom', 'findIndexFrom', 'findLastFrom', 'findLastIndexFrom', 'getOr',\n 'includesFrom', 'indexOfFrom', 'inRange', 'intersectionBy', 'intersectionWith',\n 'invokeArgs', 'invokeArgsMap', 'isEqualWith', 'isMatchWith', 'flatMapDepth',\n 'lastIndexOfFrom', 'mergeWith', 'orderBy', 'padChars', 'padCharsEnd',\n 'padCharsStart', 'pullAllBy', 'pullAllWith', 'rangeStep', 'rangeStepRight',\n 'reduce', 'reduceRight', 'replace', 'set', 'slice', 'sortedIndexBy',\n 'sortedLastIndexBy', 'transform', 'unionBy', 'unionWith', 'update', 'xorBy',\n 'xorWith', 'zipWith'\n ],\n '4': [\n 'fill', 'setWith', 'updateWith'\n ]\n};\n\n/** Used to map ary to rearg configs. */\nexports.aryRearg = {\n '2': [1, 0],\n '3': [2, 0, 1],\n '4': [3, 2, 0, 1]\n};\n\n/** Used to map method names to their iteratee ary. */\nexports.iterateeAry = {\n 'dropRightWhile': 1,\n 'dropWhile': 1,\n 'every': 1,\n 'filter': 1,\n 'find': 1,\n 'findFrom': 1,\n 'findIndex': 1,\n 'findIndexFrom': 1,\n 'findKey': 1,\n 'findLast': 1,\n 'findLastFrom': 1,\n 'findLastIndex': 1,\n 'findLastIndexFrom': 1,\n 'findLastKey': 1,\n 'flatMap': 1,\n 'flatMapDeep': 1,\n 'flatMapDepth': 1,\n 'forEach': 1,\n 'forEachRight': 1,\n 'forIn': 1,\n 'forInRight': 1,\n 'forOwn': 1,\n 'forOwnRight': 1,\n 'map': 1,\n 'mapKeys': 1,\n 'mapValues': 1,\n 'partition': 1,\n 'reduce': 2,\n 'reduceRight': 2,\n 'reject': 1,\n 'remove': 1,\n 'some': 1,\n 'takeRightWhile': 1,\n 'takeWhile': 1,\n 'times': 1,\n 'transform': 2\n};\n\n/** Used to map method names to iteratee rearg configs. */\nexports.iterateeRearg = {\n 'mapKeys': [1],\n 'reduceRight': [1, 0]\n};\n\n/** Used to map method names to rearg configs. */\nexports.methodRearg = {\n 'assignInAllWith': [1, 0],\n 'assignInWith': [1, 2, 0],\n 'assignAllWith': [1, 0],\n 'assignWith': [1, 2, 0],\n 'differenceBy': [1, 2, 0],\n 'differenceWith': [1, 2, 0],\n 'getOr': [2, 1, 0],\n 'intersectionBy': [1, 2, 0],\n 'intersectionWith': [1, 2, 0],\n 'isEqualWith': [1, 2, 0],\n 'isMatchWith': [2, 1, 0],\n 'mergeAllWith': [1, 0],\n 'mergeWith': [1, 2, 0],\n 'padChars': [2, 1, 0],\n 'padCharsEnd': [2, 1, 0],\n 'padCharsStart': [2, 1, 0],\n 'pullAllBy': [2, 1, 0],\n 'pullAllWith': [2, 1, 0],\n 'rangeStep': [1, 2, 0],\n 'rangeStepRight': [1, 2, 0],\n 'setWith': [3, 1, 2, 0],\n 'sortedIndexBy': [2, 1, 0],\n 'sortedLastIndexBy': [2, 1, 0],\n 'unionBy': [1, 2, 0],\n 'unionWith': [1, 2, 0],\n 'updateWith': [3, 1, 2, 0],\n 'xorBy': [1, 2, 0],\n 'xorWith': [1, 2, 0],\n 'zipWith': [1, 2, 0]\n};\n\n/** Used to map method names to spread configs. */\nexports.methodSpread = {\n 'assignAll': { 'start': 0 },\n 'assignAllWith': { 'start': 0 },\n 'assignInAll': { 'start': 0 },\n 'assignInAllWith': { 'start': 0 },\n 'defaultsAll': { 'start': 0 },\n 'defaultsDeepAll': { 'start': 0 },\n 'invokeArgs': { 'start': 2 },\n 'invokeArgsMap': { 'start': 2 },\n 'mergeAll': { 'start': 0 },\n 'mergeAllWith': { 'start': 0 },\n 'partial': { 'start': 1 },\n 'partialRight': { 'start': 1 },\n 'without': { 'start': 1 },\n 'zipAll': { 'start': 0 }\n};\n\n/** Used to identify methods which mutate arrays or objects. */\nexports.mutate = {\n 'array': {\n 'fill': true,\n 'pull': true,\n 'pullAll': true,\n 'pullAllBy': true,\n 'pullAllWith': true,\n 'pullAt': true,\n 'remove': true,\n 'reverse': true\n },\n 'object': {\n 'assign': true,\n 'assignAll': true,\n 'assignAllWith': true,\n 'assignIn': true,\n 'assignInAll': true,\n 'assignInAllWith': true,\n 'assignInWith': true,\n 'assignWith': true,\n 'defaults': true,\n 'defaultsAll': true,\n 'defaultsDeep': true,\n 'defaultsDeepAll': true,\n 'merge': true,\n 'mergeAll': true,\n 'mergeAllWith': true,\n 'mergeWith': true,\n },\n 'set': {\n 'set': true,\n 'setWith': true,\n 'unset': true,\n 'update': true,\n 'updateWith': true\n }\n};\n\n/** Used to map real names to their aliases. */\nexports.realToAlias = (function() {\n var hasOwnProperty = Object.prototype.hasOwnProperty,\n object = exports.aliasToReal,\n result = {};\n\n for (var key in object) {\n var value = object[key];\n if (hasOwnProperty.call(result, value)) {\n result[value].push(key);\n } else {\n result[value] = [key];\n }\n }\n return result;\n}());\n\n/** Used to map method names to other names. */\nexports.remap = {\n 'assignAll': 'assign',\n 'assignAllWith': 'assignWith',\n 'assignInAll': 'assignIn',\n 'assignInAllWith': 'assignInWith',\n 'curryN': 'curry',\n 'curryRightN': 'curryRight',\n 'defaultsAll': 'defaults',\n 'defaultsDeepAll': 'defaultsDeep',\n 'findFrom': 'find',\n 'findIndexFrom': 'findIndex',\n 'findLastFrom': 'findLast',\n 'findLastIndexFrom': 'findLastIndex',\n 'getOr': 'get',\n 'includesFrom': 'includes',\n 'indexOfFrom': 'indexOf',\n 'invokeArgs': 'invoke',\n 'invokeArgsMap': 'invokeMap',\n 'lastIndexOfFrom': 'lastIndexOf',\n 'mergeAll': 'merge',\n 'mergeAllWith': 'mergeWith',\n 'padChars': 'pad',\n 'padCharsEnd': 'padEnd',\n 'padCharsStart': 'padStart',\n 'propertyOf': 'get',\n 'rangeStep': 'range',\n 'rangeStepRight': 'rangeRight',\n 'restFrom': 'rest',\n 'spreadFrom': 'spread',\n 'trimChars': 'trim',\n 'trimCharsEnd': 'trimEnd',\n 'trimCharsStart': 'trimStart',\n 'zipAll': 'zip'\n};\n\n/** Used to track methods that skip fixing their arity. */\nexports.skipFixed = {\n 'castArray': true,\n 'flow': true,\n 'flowRight': true,\n 'iteratee': true,\n 'mixin': true,\n 'rearg': true,\n 'runInContext': true\n};\n\n/** Used to track methods that skip rearranging arguments. */\nexports.skipRearg = {\n 'add': true,\n 'assign': true,\n 'assignIn': true,\n 'bind': true,\n 'bindKey': true,\n 'concat': true,\n 'difference': true,\n 'divide': true,\n 'eq': true,\n 'gt': true,\n 'gte': true,\n 'isEqual': true,\n 'lt': true,\n 'lte': true,\n 'matchesProperty': true,\n 'merge': true,\n 'multiply': true,\n 'overArgs': true,\n 'partial': true,\n 'partialRight': true,\n 'propertyOf': true,\n 'random': true,\n 'range': true,\n 'rangeRight': true,\n 'subtract': true,\n 'zip': true,\n 'zipObject': true,\n 'zipObjectDeep': true\n};\n","module.exports = {\n 'ary': require('../ary'),\n 'assign': require('../_baseAssign'),\n 'clone': require('../clone'),\n 'curry': require('../curry'),\n 'forEach': require('../_arrayEach'),\n 'isArray': require('../isArray'),\n 'isError': require('../isError'),\n 'isFunction': require('../isFunction'),\n 'isWeakMap': require('../isWeakMap'),\n 'iteratee': require('../iteratee'),\n 'keys': require('../_baseKeys'),\n 'rearg': require('../rearg'),\n 'toInteger': require('../toInteger'),\n 'toPath': require('../toPath')\n};\n","var baseConvert = require('./_baseConvert'),\n util = require('./_util');\n\n/**\n * Converts `func` of `name` to an immutable auto-curried iteratee-first data-last\n * version with conversion `options` applied. If `name` is an object its methods\n * will be converted.\n *\n * @param {string} name The name of the function to wrap.\n * @param {Function} [func] The function to wrap.\n * @param {Object} [options] The options object. See `baseConvert` for more details.\n * @returns {Function|Object} Returns the converted function or object.\n */\nfunction convert(name, func, options) {\n return baseConvert(util, name, func, options);\n}\n\nmodule.exports = convert;\n","var convert = require('./convert'),\n func = convert('memoize', require('../memoize'));\n\nfunc.placeholder = require('./placeholder');\nmodule.exports = func;\n","/**\n * The default argument placeholder value for methods.\n *\n * @type {Object}\n */\nmodule.exports = {};\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike'),\n isPlainObject = require('./isPlainObject');\n\n/** `Object#toString` result references. */\nvar domExcTag = '[object DOMException]',\n errorTag = '[object Error]';\n\n/**\n * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n * `SyntaxError`, `TypeError`, or `URIError` object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n * @example\n *\n * _.isError(new Error);\n * // => true\n *\n * _.isError(Error);\n * // => false\n */\nfunction isError(value) {\n if (!isObjectLike(value)) {\n return false;\n }\n var tag = baseGetTag(value);\n return tag == errorTag || tag == domExcTag ||\n (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));\n}\n\nmodule.exports = isError;\n","var getTag = require('./_getTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar weakMapTag = '[object WeakMap]';\n\n/**\n * Checks if `value` is classified as a `WeakMap` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.\n * @example\n *\n * _.isWeakMap(new WeakMap);\n * // => true\n *\n * _.isWeakMap(new Map);\n * // => false\n */\nfunction isWeakMap(value) {\n return isObjectLike(value) && getTag(value) == weakMapTag;\n}\n\nmodule.exports = isWeakMap;\n","var baseClone = require('./_baseClone'),\n baseIteratee = require('./_baseIteratee');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1;\n\n/**\n * Creates a function that invokes `func` with the arguments of the created\n * function. If `func` is a property name, the created function returns the\n * property value for a given element. If `func` is an array or object, the\n * created function returns `true` for elements that contain the equivalent\n * source properties, otherwise it returns `false`.\n *\n * @static\n * @since 4.0.0\n * @memberOf _\n * @category Util\n * @param {*} [func=_.identity] The value to convert to a callback.\n * @returns {Function} Returns the callback.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));\n * // => [{ 'user': 'barney', 'age': 36, 'active': true }]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, _.iteratee(['user', 'fred']));\n * // => [{ 'user': 'fred', 'age': 40 }]\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, _.iteratee('user'));\n * // => ['barney', 'fred']\n *\n * // Create custom iteratee shorthands.\n * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {\n * return !_.isRegExp(func) ? iteratee(func) : function(string) {\n * return func.test(string);\n * };\n * });\n *\n * _.filter(['abc', 'def'], /ef/);\n * // => ['def']\n */\nfunction iteratee(func) {\n return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));\n}\n\nmodule.exports = iteratee;\n","var createWrap = require('./_createWrap'),\n flatRest = require('./_flatRest');\n\n/** Used to compose bitmasks for function metadata. */\nvar WRAP_REARG_FLAG = 256;\n\n/**\n * Creates a function that invokes `func` with arguments arranged according\n * to the specified `indexes` where the argument value at the first index is\n * provided as the first argument, the argument value at the second index is\n * provided as the second argument, and so on.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to rearrange arguments for.\n * @param {...(number|number[])} indexes The arranged argument indexes.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var rearged = _.rearg(function(a, b, c) {\n * return [a, b, c];\n * }, [2, 0, 1]);\n *\n * rearged('b', 'c', 'a')\n * // => ['a', 'b', 'c']\n */\nvar rearg = flatRest(function(func, indexes) {\n return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);\n});\n\nmodule.exports = rearg;\n","var toNumber = require('./toNumber');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_INTEGER = 1.7976931348623157e+308;\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n}\n\nmodule.exports = toFinite;\n","var toFinite = require('./toFinite');\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\nmodule.exports = toInteger;\n","var arrayMap = require('./_arrayMap'),\n copyArray = require('./_copyArray'),\n isArray = require('./isArray'),\n isSymbol = require('./isSymbol'),\n stringToPath = require('./_stringToPath'),\n toKey = require('./_toKey'),\n toString = require('./toString');\n\n/**\n * Converts `value` to a property path array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {*} value The value to convert.\n * @returns {Array} Returns the new property path array.\n * @example\n *\n * _.toPath('a.b.c');\n * // => ['a', 'b', 'c']\n *\n * _.toPath('a[0].b.c');\n * // => ['a', '0', 'b', 'c']\n */\nfunction toPath(value) {\n if (isArray(value)) {\n return arrayMap(value, toKey);\n }\n return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));\n}\n\nmodule.exports = toPath;\n","var LazyWrapper = require('./_LazyWrapper'),\n LodashWrapper = require('./_LodashWrapper'),\n baseLodash = require('./_baseLodash'),\n isArray = require('./isArray'),\n isObjectLike = require('./isObjectLike'),\n wrapperClone = require('./_wrapperClone');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates a `lodash` object which wraps `value` to enable implicit method\n * chain sequences. Methods that operate on and return arrays, collections,\n * and functions can be chained together. Methods that retrieve a single value\n * or may return a primitive value will automatically end the chain sequence\n * and return the unwrapped value. Otherwise, the value must be unwrapped\n * with `_#value`.\n *\n * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n * enabled using `_.chain`.\n *\n * The execution of chained methods is lazy, that is, it's deferred until\n * `_#value` is implicitly or explicitly called.\n *\n * Lazy evaluation allows several methods to support shortcut fusion.\n * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n * the creation of intermediate arrays and can greatly reduce the number of\n * iteratee executions. Sections of a chain sequence qualify for shortcut\n * fusion if the section is applied to an array and iteratees accept only\n * one argument. The heuristic for whether a section qualifies for shortcut\n * fusion is subject to change.\n *\n * Chaining is supported in custom builds as long as the `_#value` method is\n * directly or indirectly included in the build.\n *\n * In addition to lodash methods, wrappers have `Array` and `String` methods.\n *\n * The wrapper `Array` methods are:\n * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n *\n * The wrapper `String` methods are:\n * `replace` and `split`\n *\n * The wrapper methods that support shortcut fusion are:\n * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n *\n * The chainable wrapper methods are:\n * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n * `zipObject`, `zipObjectDeep`, and `zipWith`\n *\n * The wrapper methods that are **not** chainable by default are:\n * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n * `upperFirst`, `value`, and `words`\n *\n * @name _\n * @constructor\n * @category Seq\n * @param {*} value The value to wrap in a `lodash` instance.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2, 3]);\n *\n * // Returns an unwrapped value.\n * wrapped.reduce(_.add);\n * // => 6\n *\n * // Returns a wrapped value.\n * var squares = wrapped.map(square);\n *\n * _.isArray(squares);\n * // => false\n *\n * _.isArray(squares.value());\n * // => true\n */\nfunction lodash(value) {\n if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n if (value instanceof LodashWrapper) {\n return value;\n }\n if (hasOwnProperty.call(value, '__wrapped__')) {\n return wrapperClone(value);\n }\n }\n return new LodashWrapper(value);\n}\n\n// Ensure wrappers are instances of `baseLodash`.\nlodash.prototype = baseLodash.prototype;\nlodash.prototype.constructor = lodash;\n\nmodule.exports = lodash;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + chunkId + \"-\" + chunkId + \".js?v=\" + {\"1902\":\"33a254c37fdb49c04b97\",\"8066\":\"f1f0a3884f0b92377e6a\"}[chunkId] + \"\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 3705;","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT')\n\t\tscriptUrl = document.currentScript.src;\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) {\n\t\t\tvar i = scripts.length - 1;\n\t\t\twhile (i > -1 && (!scriptUrl || !/^http(s?):/.test(scriptUrl))) scriptUrl = scripts[i--].src;\n\t\t}\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t3705: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [4208], () => (__webpack_require__(33199)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","inProgress","dataWebpackPrefix","formatDateAsYMD","date","year","getFullYear","month","getMonth","toString","padStart","day","getDate","concat","getLoggerBuilder","setApp","detectUser","build","name","components","NcButton","NcTextField","NcTextArea","NcDateTimePickerNative","data","firstDay","lastDay","status","message","loadState","loading","Date","computed","valid","_this$firstDay","_this$lastDay","getTime","setHours","methods","resetForm","saveForm","axios","post","generateOcsUrl","userId","getCurrentUser","uid","showSuccess","$t","error","showError","logger","clearAbsence","delete","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","locals","_vm","this","_c","_self","staticClass","on","$event","preventDefault","apply","arguments","attrs","model","value","callback","$$v","expression","_v","_s","Binary","fromString","aString","constructor","aValue","icaltype","decodeValue","_b64_decode","setEncodedValue","_b64_encode","o1","o2","o3","h1","h2","h3","h4","bits","b64","i","ac","enc","tmp_arr","charCodeAt","charAt","length","join","r","slice","dec","indexOf","String","fromCharCode","DURATION_LETTERS","DATA_PROPS_TO_COPY","Duration","fromSeconds","aSeconds","isValueString","string","aStr","pos","dict","Object","create","chunks","search","type","numeric","Math","max","parseDurationChunk","Error","fromData","aData","wrappedJSObject","weeks","days","hours","minutes","seconds","isNegative","icalclass","clone","toSeconds","secs","abs","trunc","prop","reset","compare","aOther","thisSeconds","otherSeconds","normalize","str","toICALString","letter","number","object","num","parseInt","isStrictlyNaN","Time","static","daysInMonth","isLeapYear","fromDayOfYear","aDayOfYear","aYear","doy","tt","auto_normalize","is_leap","daysInYearPassedMonth","isDate","fromStringv2","fromDateString","strictParseInt","fromDateTimeString","zone","zoneId","Timezone","utcTimezone","getParameter","parent","localTimezone","getTimeZoneByID","timeData","hour","minute","second","timezone","aProperty","fromJSDate","aDate","useUTC","aZone","now","weekOneStarts","aWeekStart","t","dow","dayOfWeek","wkst","DEFAULT_WEEK_START","THURSDAY","getDominicalLetter","yr","LTRS","dom","epochTime","_cmp_attr","a","b","attr","time","_time","_cachedUnixTime","_pendingNormalization","resetTo","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getHours","getMinutes","getSeconds","key","entries","TimezoneService","get","firstDow","SUNDAY","dowCacheKey","_dowCache","q","m","Y","h","dayOfYear","startOfWeek","result","endOfWeek","startOfMonth","endOfMonth","startOfYear","endOfYear","startDoyWeek","aFirstDayOfWeek","delta","nthWeekDay","aDayOfWeek","aPos","weekday","start","otherDay","offset","isNthWeekDay","weekNumber","week1","wnCacheKey","_wnCache","dt","isoyear","answer","subtractDate","addDuration","aDuration","mult","unixTime","toUnixTime","utcOffset","other","subtractDateTz","compareDateOnlyTz","tz","convertToZone","rc","copy","zone_equals","tzid","convert_time","design$1","icalendar","toICAL","pad2","toJSDate","_normalize","adjust","aExtraDays","aExtraHours","aExtraMinutes","aExtraSeconds","aTime","minutesOverflow","hoursOverflow","daysOverflow","yearsOverflow","fromUnixTime","ms","UTC","toJSON","len","defineAttr","defineProperty","prototype","set","val","CHAR","VALUE_DELIMITER","RFC6868_REPLACE_MAP$1","parse","input","state","root","component","stack","_eachLine","err","line","_handleContentLine","ParserError","property","designSet","defaultSet","lastParamIndex","lastValuePos","parsedParams","valueType","valuePos","paramPos","params","toLowerCase","_parseParameters","newComponent","push","getDesignSet","pop","propertyDetails","splitName","ungroupedName","multiValue","structuredValue","propertyGroups","split","group","detectType","defaultType","_parseMultiValue","_parseValue","fromICAL","lcname","mvdelim","lastParam","param","multiValueSeparateDQuote","_rfc6868Escape","extendedValue","propValuePos","nextPos","length_before","delimiter","Array","isArray","replace","x","buffer","delim","innerMulti","lastPos","unescapedIndexOf","firstChar","newlineOffset","trim","OPTIONS","_compare_change_fn","from_zone","to_zone","adjust_change","change","call","location","tznames","latitude","longitude","expandedUntilYear","changes","Component","jCal","getFirstPropertyValue","_ensureCoverage","tt_change","change_num","_findNearbyChange","change_num_to_use","step","prevUtcOffset","zone_change","tmp_change","prev_zone_change","want_daylight","is_daylight","idx","binsearchInsert","_minimumExpansionYear","today","changesEndYear","EXTRA_COVERAGE","subcomps","getAllSubcomponents","compLen","compIdx","_expandComponent","sort","aComponent","hasProperty","dtstart","getFirstProperty","getFirstValue","convert_tzoffset","factor","init_changes","changebase","props","getAllProperties","rdate","rrule","until","occ","iterator","next","zones","count","keys","utc","Z","GMT","_hard_reset","has","register","TypeError","remove","isNaN","formatClassType","list","seekVal","cmpfunc","mid","cmpval","low","high","floor","aSrc","aDeep","arr","obj","foldline","aLine","line_length","cp","codePointAt","ICALmodule","foldLength","newLineChar","ceil","extend","source","target","descr","getOwnPropertyDescriptor","helpers","freeze","__proto__","updateTimezones","vcal","allsubs","properties","vtimezones","reqTzid","comp","removeSubcomponent","addSubcomponent","UtcOffset","instance","VCardTime","fromDateAndOrTimeString","aIcalType","part","v","s","e","parts","tmz","splitzone","vcard","_splitZone","tm","dtlen","tmlen","hasDashDate","hasDashTime","o","super","y","d","mm","hasMonth","hasDay","hasHour","hasMinute","hasSecond","datepart","timepart","RecurIterator","completed","rule","last","occurrence_number","by_indices","initialized","by_data","days_index","Recur","init","InvalidRecurrenceRuleError","sort_byday_rules","BYDAY","freq","setup_defaults","ruleDayOfWeek","wkdy","dayName","numericDayToIcalDay","untilYear","expand_year_days","increment_year","interval","_nextByYearDay","has_by_data","tempLast","initLast","bydow","dayOfMonth","increment_month","_byDayAndMonthDay","normalized","normalizeByMonthDayRules","BYMONTHDAY","filter","next_month","again","before","next_second","next_minute","next_hour","next_day","next_week","next_year","check_contracting_rules","next_generic","increment_second","inc","increment_generic","increment_minute","increment_hour","this_freq","increment_monthday","end_of_data","next_weekday_by_week","BYWEEKNO","week_no","rules","newRules","ruleIdx","isInit","byMonthDay","dateLen","byDay","dateIdx","dayLen","dataIsValid","self","initMonth","nextMonth","monthsCounter","dayIdx","data_valid","setpos","setpos_total","last_day","is_day_in_byday","check_set_position","coded_day","matches","match","icalDayToNumericDay","aRuleType","aInterval","aDateAttr","aFollowingAttr","aPreviousIncr","has_by_rule","dta","BYMONTH","years","aFactor","aNextIncrement","nextunit","validWeeks","monthIdx","first_week","last_week","weekIdx","partCount","t1","t2","monthday","t3","expand_by_day","first_dow","doy_offset","last_dow","by_month_day","spIndex","month_day","bydayParts","first_matching_day","last_matching_day","expandedDays","weekno","BYYEARDAY","daysInYear","days_list","tmp","start_dow","end_dow","end_year_day","first","this_dow","BYSETPOS","aRules","j","check_contract_restriction","indexMapValue","_indexMap","ruleMapValue","_expandMap","pass","CONTRACT","ruleType","bydata","weekNo","req","deftime","VALID_DAY_NAMES","VALID_BYDAY_PART","DOW_MAP","SU","MO","MONDAY","TU","TUESDAY","WE","WEDNESDAY","TH","FR","FRIDAY","SA","SATURDAY","REVERSE_DOW_MAP","fromEntries","map","entry","reverse","ALLOWED_FREQ","_stringToData","fmtIcal","values","ucname","toUpperCase","partDesign","partArr","partSet","Set","add","optionDesign","aStart","isFinite","isByCount","addComponent","aType","setComponent","aValues","getComponent","getNextOccurrence","aStartTime","aRecurrenceId","iter","uckey","INTERVAL","res","k","kparts","parseNumericValue","min","undefined","FREQ","COUNT","UNTIL","WKST","test","BYSECOND","bind","BYMINUTE","BYHOUR","Period","end","duration","fromJSON","aProp","aLenient","fromDateOrDateTimeString","dateProp","getDuration","getEnd","FROM_VCARD_NEWLINE","TO_VCARD_NEWLINE","createTextType","fromNewline","toNewline","structuredEscape","newline","RegExp","flags","replaceNewlineReplace","replaceNewline","regEx","DEFAULT_TYPE_TEXT","DEFAULT_TYPE_TEXT_MULTI","DEFAULT_TYPE_TEXT_STRUCTURED","DEFAULT_TYPE_INTEGER","DEFAULT_TYPE_DATETIME_DATE","allowedTypes","DEFAULT_TYPE_DATETIME","DEFAULT_TYPE_URI","DEFAULT_TYPE_UTCOFFSET","DEFAULT_TYPE_RECUR","DEFAULT_TYPE_DATE_ANDOR_TIME","commonProperties","commonValues","float","parsed","parseFloat","integer","decorate","undecorate","icalValues","text","uri","aBinary","design","strict","period","recur","aRecur","icalProperties","vcardValues","isFromIcal","lastChar","signChar","sign","timestamp","from","c","vcardProperties","vcard3Values","binary","vcard3Properties","fn","n","nickname","photo","bday","adr","label","tel","email","mailer","geo","title","role","logo","agent","org","note","prodid","rev","sound","class","icalSet","allowXName","allowIanaToken","vcardSet","vcard3Set","vcard3","vevent","vtodo","vjournal","valarm","vtimezone","daylight","standard","componentName","LINE_ENDING","DEFAULT_VALUE_TYPE","RFC6868_REPLACE_MAP","stringify","propIdx","propLen","designSetName","comps","noFold","jsName","groupName","paramName","paramDesign","_rfc6868Unescape","paramPropertyValue","propDetails","isDefault","force","Property","_parent","getDefaultType","_updateType","p","designSetChanged","_designSet","isDecorated","isMultiValue","isStructuredValue","_hydrateValue","index","_values","_decorate","_undecorate","_setDecoratedValue","getFirstParameter","parameters","setParameter","removeParameter","details","resetType","removeAllValues","getValues","setValues","setValue","_timezoneCache","Map","_hydratedPropertyCount","_hydratedComponentCount","_components","_properties","_hydrateComponent","_hydrateProperty","getFirstSubcomponent","jCalLen","_removeObjectByIndex","jCalIndex","cache","splice","_removeObject","nameOrObject","objects","cached","_removeAllObjects","nameOrComp","removed","removeAllSubcomponents","addProperty","removeProperty","addPropertyWithValue","updatePropertyWithValue","nameOrProp","removeAllProperties","hydratedZone","RecurExpansion","ruleDates","exDates","complete","ruleIterators","ruleDateInc","exDateInc","exDate","ruleDate","_init","item","currentTry","_nextRecurrenceIter","_nextRuleDay","_nextExDay","_extractDates","propertyName","iters","iterTime","chosenIter","iterIdx","Event","_rangeExceptionCache","exceptions","rangeExceptions","strictExceptions","forEach","relateException","isRecurrenceException","event","id","recurrenceId","modifiesFuture","compareRangeException","THISANDFUTURE","findRangeException","rangeItem","getOccurrenceDetails","occurrence","utcId","startDate","endDate","rangeExceptionId","exception","startDiff","original","newStart","startTime","isRecurring","getRecurrenceTypes","_firstProp","_setProp","_setTime","attendees","summary","description","color","organizer","sequence","propName","debug","ComponentParser","parseEvent","parseTimezone","oncomplete","onerror","ontimezone","onevent","process","ical","randomUUID","crypto","getRandomValues","rnds8","Uint8Array","byteToHex","buf","rnds","random","rng","RangeError","unsafeStringify","normalizeComponent","scriptExports","render2","staticRenderFns","functionalTemplate","injectStyles","scopeId","moduleIdentifier","shadowMode","render","_compiled","_scopeId","exports","CalendarAvailability","IconAdd","IconDelete","slots","required","Boolean","default","l10nTo","l10nDeleteSlot","l10nEmptyDay","l10nAddSlot","l10nWeekDayListLabel","l10nMonday","l10nTuesday","l10nWednesday","l10nThursday","l10nFriday","l10nSaturday","l10nSunday","l10nStartPickerLabel","Function","l10nEndPickerLabel","internalSlots","slotsToInternalData","watch","timeStampSlotsToDateObjectSlots","slot","moToSa","displayName","sunday","internalDataToSlots","converted","round","addSlot","onChangeSlots","removeSlot","$emit","_l","_a","_b","$set","scopedSlots","_u","proxy","_e","getClient","memoize","service","remote","generateRemoteUrl","client","createClient","setHeaders","token","requesttoken","onRequestTokenUpdate","getRequestToken","NcCheckboxRadioSwitch","NcTimezonePicker","_Intl$DateTimeFormat$","_Intl$DateTimeFormat","saving","Intl","DateTimeFormat","resolvedOptions","timeZone","automated","timeZonePickerId","substring","mounted","slotData","async","_xml$multistatus","response","customRequest","method","xml","parseXML","availability","multistatus","propstat","vavailability","parsedIcal","vcalendarComp","vavailabilityComp","timezoneId","timezoneComp","availableComps","availableComp","startIcalDate","endIcalDate","warn","vavailabilityToSlots","findScheduleInboxAvailability","console","info","save","predefinedTimezoneIcal","deduplicated","reduce","acc","slots2","byday","slotsToVavailability","flatMap","dayId","saveScheduleInboxAvailability","appId","configKey","configValue","enableUserStatusAutomation","disableUserStatusAutomation","NcSettingsSection","AbsenceForm","AvailabilityForm","hideAbsenceSettings","Vue","translate","Availability","$mount","___CSS_LOADER_EXPORT___","module","zones_1","renderZoneSub","f","defaultStart","zoneName","includeWrapper","lines","zoneData","zonesMap","getZoneLines","baseCreate","baseLodash","LazyWrapper","__wrapped__","__actions__","__dir__","__filtered__","__iteratees__","__takeCount__","__views__","LodashWrapper","chainAll","__chain__","__index__","__values__","arrayPush","isFlattenable","baseFlatten","array","depth","predicate","isStrict","identity","metaMap","baseSetData","func","nativeMax","args","partials","holders","isCurried","argsIndex","argsLength","holdersLength","leftIndex","leftLength","rangeLength","isUncurried","holdersIndex","rightIndex","rightLength","placeholder","createCtor","bitmask","thisArg","isBind","Ctor","wrapper","isObject","thisBinding","createHybrid","createRecurry","getHolder","replaceHolders","arity","composeArgs","composeArgsRight","countHolders","reorder","partialsRight","holdersRight","argPos","ary","isAry","isBindKey","isFlip","holdersCount","newHolders","isLaziable","setData","setWrapToString","wrapFunc","isCurry","newData","createBind","createCurry","createPartial","getData","mergeData","toInteger","flatten","overRest","setToString","noop","realNames","hasOwnProperty","otherFunc","reWrapDetails","reSplitDetails","reWrapComment","lastIndex","Symbol","isArguments","spreadableSymbol","isConcatSpreadable","getFuncName","lodash","funcName","PLACEHOLDER","nativeMin","srcBitmask","newBitmask","isCommon","isCombo","WeakMap","copyArray","isIndex","indexes","arrLength","oldArray","resIndex","shortOut","getWrapDetails","insertWrapDetails","updateWrapDetails","reference","arrayEach","arrayIncludes","wrapFlags","pair","createWrap","guard","curry","mapping","fallbackHolder","baseAry","cloneArray","wrapImmutable","cloner","baseConvert","util","isLib","isObj","config","cap","fixed","immutable","rearg","defaultHolder","forceCurry","forceFixed","forceRearg","pristine","runInContext","assign","isError","isFunction","isWeakMap","iteratee","toPath","each","aryMethodKeys","aryMethod","wrappers","castArray","mixin","pairs","nthArg","context","castFixed","skipFixed","methodSpread","otherArgs","flatSpread","castRearg","skipRearg","methodRearg","aryRearg","cloneByPath","path","nested","createConverter","realName","aliasToReal","methodName","remap","oldOptions","newUtil","newFunc","newOptions","overArg","transform","wrap","wrapped","mutate","createCloner","aryKey","otherName","afterRearg","castCurry","iterateeRearg","baseArity","iterateeAry","castCap","convert","_","realToAlias","alias","baseGetTag","isObjectLike","isPlainObject","tag","getTag","baseClone","baseIteratee","flatRest","toNumber","toFinite","remainder","arrayMap","isSymbol","stringToPath","toKey","wrapperClone","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","loaded","__webpack_modules__","O","chunkIds","priority","notFulfilled","Infinity","fulfilled","every","getter","__esModule","definition","enumerable","chunkId","Promise","all","promises","u","g","globalThis","window","l","url","done","script","needAttach","scripts","document","getElementsByTagName","getAttribute","createElement","charset","timeout","nc","setAttribute","src","onScriptComplete","prev","onload","clearTimeout","doneFns","parentNode","removeChild","setTimeout","head","appendChild","toStringTag","nmd","paths","children","scriptUrl","importScripts","currentScript","tagName","baseURI","href","installedChunks","installedChunkData","promise","resolve","reject","errorType","realSrc","request","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""} |