diff options
author | nextcloud-command <nextcloud-command@users.noreply.github.com> | 2024-07-08 19:46:48 +0000 |
---|---|---|
committer | nextcloud-command <nextcloud-command@users.noreply.github.com> | 2024-07-08 19:46:48 +0000 |
commit | 9eb1269374a178962c403da77adab1d2baa7e1ef (patch) | |
tree | 11607d0ad0c75af1133af2db0ff30202b37cd2bd /dist/dav-settings-personal-availability.js.map | |
parent | 4c25c02fd97dccc9d0b2f8fdc6ae2f62e6c5e5cc (diff) | |
download | nextcloud-server-9eb1269374a178962c403da77adab1d2baa7e1ef.tar.gz nextcloud-server-9eb1269374a178962c403da77adab1d2baa7e1ef.zip |
chore(assets): Recompile assets
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
Diffstat (limited to 'dist/dav-settings-personal-availability.js.map')
-rw-r--r-- | dist/dav-settings-personal-availability.js.map | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/dist/dav-settings-personal-availability.js.map b/dist/dav-settings-personal-availability.js.map index dae2c057bce..3dfc12ed434 100644 --- a/dist/dav-settings-personal-availability.js.map +++ b/dist/dav-settings-personal-availability.js.map @@ -1 +1 @@ -{"version":3,"file":"dav-settings-personal-availability.js?v=8034022e79b0ab966bb3","mappings":"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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,EAAK,QACL,EAAK,SAIjB,CACI,eACA,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,oBACA,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,kBACA,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,UAIjB,CACI,iBACA,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,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,S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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-1OlNbSWJ.css?7392","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-1OlNbSWJ.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/ical.js/build/ical.js","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-1OlNbSWJ.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-1OlNbSWJ.css\";\n export default content && content.locals ? content.locals : undefined;\n","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default {\n randomUUID\n};","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nlet getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nconst byteToHex = [];\n\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\n\nexport function unsafeStringify(arr, offset = 0) {\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n return byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]];\n}\n\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\n\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n\n options = options || {};\n const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return unsafeStringify(rnds);\n}\n\nexport default v4;","import './assets/index-1OlNbSWJ.css';\nimport h from \"@nextcloud/vue/dist/Components/NcDateTimePickerNative.js\";\nimport b from \"@nextcloud/vue/dist/Components/NcButton.js\";\nimport g from \"vue-material-design-icons/Delete.vue\";\nimport v from \"vue-material-design-icons/Plus.vue\";\nimport { getFirstDay as C } from \"@nextcloud/l10n\";\nimport { getZoneString as T } from \"icalzone\";\nimport { parse as D, Component as _ } from \"ical.js\";\nimport { v4 as k } from \"uuid\";\nimport { getLoggerBuilder as P } from \"@nextcloud/logger\";\nfunction $(n, t, e, s, o, u, i, r) {\n var a = typeof n == \"function\" ? n.options : n;\n t && (a.render = t, a.staticRenderFns = e, a._compiled = !0), s && (a.functional = !0), u && (a._scopeId = \"data-v-\" + u);\n var l;\n if (i ? (l = function(c) {\n c = c || // cached call\n this.$vnode && this.$vnode.ssrContext || // stateful\n this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext, !c && typeof __VUE_SSR_CONTEXT__ < \"u\" && (c = __VUE_SSR_CONTEXT__), o && o.call(this, c), c && c._registeredComponents && c._registeredComponents.add(i);\n }, a._ssrRegister = l) : o && (l = r ? function() {\n o.call(\n this,\n (a.functional ? this.parent : this).$root.$options.shadowRoot\n );\n } : o), l)\n if (a.functional) {\n a._injectStyles = l;\n var p = a.render;\n a.render = function(S, m) {\n return l.call(m), p(S, m);\n };\n } else {\n var d = a.beforeCreate;\n a.beforeCreate = d ? [].concat(d, l) : [l];\n }\n return {\n exports: n,\n options: a\n };\n}\nconst A = {\n name: \"CalendarAvailability\",\n components: {\n NcDateTimePickerNative: h,\n NcButton: b,\n IconAdd: v,\n IconDelete: g\n },\n props: {\n slots: {\n type: Object,\n required: !0\n },\n loading: {\n type: Boolean,\n default: !1\n },\n l10nTo: {\n type: String,\n required: !0\n },\n l10nDeleteSlot: {\n type: String,\n required: !0\n },\n l10nEmptyDay: {\n type: String,\n required: !0\n },\n l10nAddSlot: {\n type: String,\n required: !0\n },\n l10nWeekDayListLabel: {\n type: String,\n default: \"Weekdays\"\n },\n l10nMonday: {\n type: String,\n required: !0\n },\n l10nTuesday: {\n type: String,\n required: !0\n },\n l10nWednesday: {\n type: String,\n required: !0\n },\n l10nThursday: {\n type: String,\n required: !0\n },\n l10nFriday: {\n type: String,\n required: !0\n },\n l10nSaturday: {\n type: String,\n required: !0\n },\n l10nSunday: {\n type: String,\n required: !0\n },\n l10nStartPickerLabel: {\n type: Function,\n default: (n) => \"Pick a start time for \".concat(n)\n },\n l10nEndPickerLabel: {\n type: Function,\n default: (n) => \"Pick a end time for \".concat(n)\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(n) {\n return n.map((t) => ({\n start: new Date(t.start * 1e3),\n end: new Date(t.end * 1e3)\n }));\n },\n slotsToInternalData() {\n const n = [\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 ], t = {\n id: \"SU\",\n displayName: this.l10nSunday,\n slots: this.timeStampSlotsToDateObjectSlots(this.slots.SU)\n };\n return C() === 1 ? [...n, t] : [t, ...n];\n },\n internalDataToSlots() {\n const n = {};\n return this.internalSlots.forEach(({ id: t, slots: e }) => {\n n[t] = e.map((s) => ({\n start: Math.round(s.start.getTime() / 1e3),\n end: Math.round(s.end.getTime() / 1e3)\n }));\n }), n;\n },\n addSlot(n) {\n const t = /* @__PURE__ */ new Date();\n t.setHours(9, 0, 0, 0);\n const e = /* @__PURE__ */ new Date();\n e.setHours(17, 0, 0, 0), n.slots.push({\n start: t,\n end: e\n }), this.onChangeSlots();\n },\n removeSlot(n, t) {\n n.slots.splice(t, 1), this.onChangeSlots();\n },\n onChangeSlots() {\n this.$emit(\"update:slots\", this.internalDataToSlots());\n }\n }\n};\nvar N = function() {\n var t = this, e = t._self._c;\n return e(\"ul\", { staticClass: \"week-day-container\", attrs: { \"aria-label\": t.l10nWeekDayListLabel } }, [t._l(t.internalSlots, function(s) {\n return [e(\"li\", { key: \"day-label-\".concat(s.id), staticClass: \"day-container\" }, [e(\"div\", { staticClass: \"label-weekday\" }, [e(\"span\", { attrs: { id: s.displayName + \"-label\" } }, [t._v(t._s(s.displayName))])]), e(\"div\", { key: \"day-slots-\".concat(s.id), staticClass: \"availability-slots\" }, [e(\"div\", { staticClass: \"availability-slot-group\" }, [t._l(s.slots, function(o, u) {\n var i, r;\n return [e(\"div\", { key: \"slot-\".concat(s.id, \"-\").concat(u), staticClass: \"availability-slot\" }, [e(\"NcDateTimePickerNative\", { staticClass: \"start-date\", attrs: { id: \"start-\".concat(s.id, \"-\").concat(u), type: \"time\", label: (i = t.l10nStartPickerLabel) == null ? void 0 : i.call(t, s.displayName), \"hide-label\": !0 }, on: { change: t.onChangeSlots }, model: { value: o.start, callback: function(a) {\n t.$set(o, \"start\", a);\n }, expression: \"slot.start\" } }), e(\"span\", { staticClass: \"to-text\" }, [t._v(\" \" + t._s(t.l10nTo) + \" \")]), e(\"NcDateTimePickerNative\", { staticClass: \"end-date\", attrs: { id: \"end-\".concat(s.id, \"-\").concat(u), type: \"time\", label: (r = t.l10nEndPickerLabel) == null ? void 0 : r.call(t, s.displayName), \"hide-label\": !0 }, on: { change: t.onChangeSlots }, model: { value: o.end, callback: function(a) {\n t.$set(o, \"end\", a);\n }, expression: \"slot.end\" } }), e(\"NcButton\", { key: \"slot-\".concat(s.id, \"-\").concat(u, \"-btn\"), staticClass: \"button\", attrs: { type: \"tertiary\", \"aria-label\": t.l10nDeleteSlot, title: t.l10nDeleteSlot }, on: { click: function(a) {\n return t.removeSlot(s, u);\n } }, scopedSlots: t._u([{ key: \"icon\", fn: function() {\n return [e(\"IconDelete\", { attrs: { size: 20 } })];\n }, proxy: !0 }], null, !0) })], 1)];\n })], 2), s.slots.length === 0 ? e(\"span\", { staticClass: \"empty-content\" }, [t._v(\" \" + t._s(t.l10nEmptyDay) + \" \")]) : t._e()]), e(\"NcButton\", { key: \"add-slot-\".concat(s.id), staticClass: \"add-another button\", attrs: { disabled: t.loading, title: t.l10nAddSlot, \"aria-label\": t.l10nAddSlot }, on: { click: function(o) {\n return t.addSlot(s);\n } }, scopedSlots: t._u([{ key: \"icon\", fn: function() {\n return [e(\"IconAdd\", { attrs: { size: 20 } })];\n }, proxy: !0 }], null, !0) })], 1)];\n })], 2);\n}, F = [], L = /* @__PURE__ */ $(\n A,\n N,\n F,\n !1,\n null,\n \"1b69eb8d\",\n null,\n null\n);\nconst U = L.exports;\n/*\n * @copyright Copyright (c) 2022 Richard Steinmetz <richard@steinmetz.cloud>\n *\n * @author Richard Steinmetz <richard@steinmetz.cloud>\n *\n * @license GNU AGPL version 3 or any later version\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 */\nconst w = P().detectUser().setApp(\"@nextcloud/calendar-availability-vue\").build();\nfunction W() {\n return {\n MO: [],\n TU: [],\n WE: [],\n TH: [],\n FR: [],\n SA: [],\n SU: []\n };\n}\nfunction H(n) {\n const t = D(n), e = new _(t), s = e.getFirstSubcomponent(\"vavailability\");\n let o;\n const u = e.getFirstSubcomponent(\"vtimezone\");\n u && (o = u.getFirstProperty(\"tzid\").getFirstValue());\n const i = s.getAllSubcomponents(\"available\"), r = W();\n return i.forEach((a) => {\n const l = a.getFirstProperty(\"dtstart\").getFirstValue().toJSDate(), p = a.getFirstProperty(\"dtend\").getFirstValue().toJSDate(), d = a.getFirstProperty(\"rrule\");\n if (d.getFirstValue().freq !== \"WEEKLY\") {\n w.warn(\"rrule not supported\", {\n rrule: d.toICALString()\n });\n return;\n }\n d.getFirstValue().getComponent(\"BYDAY\").forEach((c) => {\n r[c].push({\n start: l.getTime() / 1e3,\n end: p.getTime() / 1e3\n });\n });\n }), {\n slots: r,\n timezoneId: o\n };\n}\nfunction B(n, t) {\n const e = new ICAL.Component(\"vcalendar\");\n e.addPropertyWithValue(\"prodid\", \"Nextcloud DAV app\");\n const s = T(t);\n if (s) {\n const i = new ICAL.Component(ICAL.parse(s));\n e.addSubcomponent(i);\n } else {\n const i = new ICAL.Component(\"vtimezone\");\n i.addPropertyWithValue(\"tzid\", t), e.addSubcomponent(i);\n }\n const o = new ICAL.Component(\"vavailability\"), u = n.reduce((i, r) => {\n var d;\n const a = new Date(r.start * 1e3), l = new Date(r.end * 1e3), p = [\n a.getHours(),\n a.getMinutes(),\n l.getHours(),\n l.getMinutes()\n ].join(\"-\");\n return {\n ...i,\n [p]: [...(d = i[p]) != null ? d : [], r]\n };\n }, {});\n return Object.keys(u).map((i) => {\n const r = u[i], a = r[0].start, l = r[0].end, p = r.map((m) => m.day).filter((m, y, f) => f.indexOf(m) === y), d = new ICAL.Component(\"available\");\n return d.addPropertyWithValue(\"dtstart\", ICAL.Time.fromJSDate(new Date(a * 1e3), !1)).setParameter(\"tzid\", t), d.addPropertyWithValue(\"dtend\", ICAL.Time.fromJSDate(new Date(l * 1e3), !1)).setParameter(\"tzid\", t), d.addPropertyWithValue(\"uid\", k()), d.addPropertyWithValue(\"rrule\", {\n freq: \"WEEKLY\",\n byday: p\n }), d;\n }).map(o.addSubcomponent.bind(o)), e.addSubcomponent(o), e.toString();\n}\nexport {\n U as CalendarAvailability,\n W as getEmptySlots,\n B as slotsToVavailability,\n H as 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(response.data)\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 users 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=23e55ed8\"\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 users 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-1b69eb8d] {\n padding: 0 10px;\n position: absolute;\n}\n.availability-slots[data-v-1b69eb8d] {\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-1b69eb8d] {\n display: flex;\n flex-direction: row;\n align-items: center;\n}\n.availability-slot-group[data-v-1b69eb8d] {\n display: flex;\n flex-direction: column;\n}\n.time-zone[data-v-1b69eb8d] {\n padding: 32px 12px 12px 0;\n}\n.week-day-container[data-v-1b69eb8d] {\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 gap: 6px;\n}\n.button[data-v-1b69eb8d] {\n align-self: flex-end;\n}\n.label-weekday[data-v-1b69eb8d] {\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-1b69eb8d] {\n height: 50px;\n display: flex;\n align-items: center;\n}\n.add-another[data-v-1b69eb8d] {\n background-color: transparent;\n border: none;\n opacity: .5;\n display: inline-flex;\n padding: 0;\n margin: 0 0 3px;\n}\n.add-another[data-v-1b69eb8d]:hover {\n opacity: 1;\n}\n.to-text[data-v-1b69eb8d] {\n padding-right: 12px;\n}\n.time-zone-text[data-v-1b69eb8d] {\n padding-left: 22px;\n}\n.empty-content[data-v-1b69eb8d] {\n color: var(--color-text-lighter);\n display: inline-flex;\n align-items: center;\n}\n.start-date[data-v-1b69eb8d] {\n padding-right: 12px;\n}\n.day-container[data-v-1b69eb8d] {\n display: flex;\n max-width: 500px;\n width: 100%;\n gap: 24px;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./node_modules/@nextcloud/calendar-availability-vue/dist/assets/index-1OlNbSWJ.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,eAAe;EACf,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;EACvB,QAAQ;AACV;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,WAAW;EACX,oBAAoB;EACpB,UAAU;EACV,eAAe;AACjB;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;AACX\",\"sourcesContent\":[\".availability-day[data-v-1b69eb8d] {\\n padding: 0 10px;\\n position: absolute;\\n}\\n.availability-slots[data-v-1b69eb8d] {\\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-1b69eb8d] {\\n display: flex;\\n flex-direction: row;\\n align-items: center;\\n}\\n.availability-slot-group[data-v-1b69eb8d] {\\n display: flex;\\n flex-direction: column;\\n}\\n.time-zone[data-v-1b69eb8d] {\\n padding: 32px 12px 12px 0;\\n}\\n.week-day-container[data-v-1b69eb8d] {\\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 gap: 6px;\\n}\\n.button[data-v-1b69eb8d] {\\n align-self: flex-end;\\n}\\n.label-weekday[data-v-1b69eb8d] {\\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-1b69eb8d] {\\n height: 50px;\\n display: flex;\\n align-items: center;\\n}\\n.add-another[data-v-1b69eb8d] {\\n background-color: transparent;\\n border: none;\\n opacity: .5;\\n display: inline-flex;\\n padding: 0;\\n margin: 0 0 3px;\\n}\\n.add-another[data-v-1b69eb8d]:hover {\\n opacity: 1;\\n}\\n.to-text[data-v-1b69eb8d] {\\n padding-right: 12px;\\n}\\n.time-zone-text[data-v-1b69eb8d] {\\n padding-left: 22px;\\n}\\n.empty-content[data-v-1b69eb8d] {\\n color: var(--color-text-lighter);\\n display: inline-flex;\\n align-items: center;\\n}\\n.start-date[data-v-1b69eb8d] {\\n padding-right: 12px;\\n}\\n.day-container[data-v-1b69eb8d] {\\n display: flex;\\n max-width: 500px;\\n width: 100%;\\n gap: 24px;\\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, `.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","/* 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, 2021 */\n\n/* jshint ignore:start */\nvar ICAL;\n(function() {\n /* istanbul ignore next */\n if (typeof module === 'object') {\n // CommonJS, where exports may be different each time.\n ICAL = module.exports;\n } else if (typeof HTMLScriptElement !== 'undefined' && 'noModule' in HTMLScriptElement.prototype) {\n // Until we use ES6 exports, using <script type=\"module\"> we define ICAL on the window global.\n window.ICAL = ICAL = {};\n } else if (typeof ICAL !== 'object') {\n ICAL = {};\n }\n})();\n/* jshint ignore:end */\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, 2011-2015 */\n\n/**\n * The number of characters before iCalendar line folding should occur\n * @type {Number}\n * @default 75\n */\nICAL.foldLength = 75;\n\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 */\nICAL.newLineChar = '\\r\\n';\n\n\n/**\n * Helper functions used in various places within ical.js\n * @namespace\n */\nICAL.helpers = {\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 {ICAL.Component} vcal The top-level VCALENDAR component.\n * @return {ICAL.Component} The ICAL.Component that was passed in.\n */\n updateTimezones: function(vcal) {\n var allsubs, properties, vtimezones, reqTzid, i, tzid;\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 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 if ((tzid = properties[i].getParameter(\"tzid\"))) {\n reqTzid[tzid] = true;\n }\n }\n\n //delete any vtimezones that are not on the reqTzid list.\n for (i in vtimezones) {\n if (vtimezones.hasOwnProperty(i) && !reqTzid[i]) {\n vcal.removeSubcomponent(vtimezones[i]);\n }\n }\n\n //create any missing, but registered timezones\n for (i in reqTzid) {\n if (\n reqTzid.hasOwnProperty(i) &&\n !vtimezones[i] &&\n ICAL.TimezoneService.has(i)\n ) {\n vcal.addSubcomponent(ICAL.TimezoneService.get(i).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 */\n isStrictlyNaN: function(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 */\n strictParseInt: function(string) {\n var result = parseInt(string, 10);\n\n if (ICAL.helpers.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 */\n formatClassType: function 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 */\n unescapedIndexOf: function(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 */\n binsearchInsert: function(list, seekVal, cmpfunc) {\n if (!list.length)\n return 0;\n\n var 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 * Convenience function for debug output\n * @private\n */\n dumpn: /* istanbul ignore next */ function() {\n if (!ICAL.debug) {\n return;\n }\n\n if (typeof (console) !== 'undefined' && 'log' in console) {\n ICAL.helpers.dumpn = function consoleDumpn(input) {\n console.log(input);\n };\n } else {\n ICAL.helpers.dumpn = function geckoDumpn(input) {\n dump(input + '\\n');\n };\n }\n\n ICAL.helpers.dumpn(arguments[0]);\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 */\n clone: function(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 var arr = [];\n for (var i = 0; i < aSrc.length; i++) {\n arr.push(aDeep ? ICAL.helpers.clone(aSrc[i], true) : aSrc[i]);\n }\n return arr;\n } else {\n var obj = {};\n for (var name in aSrc) {\n // uses prototype method to allow use of Object.create(null);\n /* istanbul ignore else */\n if (Object.prototype.hasOwnProperty.call(aSrc, name)) {\n if (aDeep) {\n obj[name] = ICAL.helpers.clone(aSrc[name], true);\n } else {\n obj[name] = aSrc[name];\n }\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 */\n foldline: function foldline(aLine) {\n var result = \"\";\n var 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 var 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 < ICAL.foldLength + 1)\n pos += cp > 65535 ? 2 : 1;\n else {\n result += ICAL.newLineChar + \" \" + line.substring(0, pos);\n line = line.substring(pos);\n pos = line_length = 0;\n }\n }\n return result.substr(ICAL.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 */\n pad2: function pad(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 var 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 */\n trunc: function trunc(number) {\n return (number < 0 ? Math.ceil(number) : Math.floor(number));\n },\n\n /**\n * Poor-man's cross-browser inheritance for JavaScript. Doesn't support all\n * the features, but enough for our usage.\n *\n * @param {Function} base The base class constructor function.\n * @param {Function} child The child class constructor function.\n * @param {Object} extra Extends the prototype with extra properties\n * and methods\n */\n inherits: function(base, child, extra) {\n function F() {}\n F.prototype = base.prototype;\n child.prototype = new F();\n\n if (extra) {\n ICAL.helpers.extend(extra, child.prototype);\n }\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 */\n extend: function(source, target) {\n for (var key in source) {\n var 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};\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, 2011-2015 */\n\n/** @namespace ICAL */\n\n\n/**\n * This symbol is further described later on\n * @ignore\n */\nICAL.design = (function() {\n 'use strict';\n\n var FROM_ICAL_NEWLINE = /\\\\\\\\|\\\\;|\\\\,|\\\\[Nn]/g;\n var TO_ICAL_NEWLINE = /\\\\|;|,|\\n/g;\n var FROM_VCARD_NEWLINE = /\\\\\\\\|\\\\,|\\\\[Nn]/g;\n var TO_VCARD_NEWLINE = /\\\\|,|\\n/g;\n\n function createTextType(fromNewline, toNewline) {\n var result = {\n matches: /.*/,\n\n fromICAL: function(aValue, structuredEscape) {\n return replaceNewline(aValue, fromNewline, structuredEscape);\n },\n\n toICAL: function(aValue, structuredEscape) {\n var regEx = toNewline;\n if (structuredEscape)\n regEx = new RegExp(regEx.source + '|' + structuredEscape);\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 /* istanbul ignore next */\n default:\n return str;\n }\n });\n }\n };\n return result;\n }\n\n // default types used multiple times\n var DEFAULT_TYPE_TEXT = { defaultType: \"text\" };\n var DEFAULT_TYPE_TEXT_MULTI = { defaultType: \"text\", multiValue: \",\" };\n var DEFAULT_TYPE_TEXT_STRUCTURED = { defaultType: \"text\", structuredValue: \";\" };\n var DEFAULT_TYPE_INTEGER = { defaultType: \"integer\" };\n var DEFAULT_TYPE_DATETIME_DATE = { defaultType: \"date-time\", allowedTypes: [\"date-time\", \"date\"] };\n var DEFAULT_TYPE_DATETIME = { defaultType: \"date-time\" };\n var DEFAULT_TYPE_URI = { defaultType: \"uri\" };\n var DEFAULT_TYPE_UTCOFFSET = { defaultType: \"utc-offset\" };\n var DEFAULT_TYPE_RECUR = { defaultType: \"recur\" };\n var DEFAULT_TYPE_DATE_ANDOR_TIME = { defaultType: \"date-and-or-time\", allowedTypes: [\"date-time\", \"date\", \"text\"] };\n\n function 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 /* istanbul ignore next */\n default:\n return string;\n }\n }\n\n function 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);\n return value.replace(newline, replaceNewlineReplace);\n }\n\n var commonProperties = {\n \"categories\": DEFAULT_TYPE_TEXT_MULTI,\n \"url\": DEFAULT_TYPE_URI,\n \"version\": DEFAULT_TYPE_TEXT,\n \"uid\": DEFAULT_TYPE_TEXT\n };\n\n var 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 var parsed = parseFloat(aValue);\n if (ICAL.helpers.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 var parsed = parseInt(aValue);\n if (ICAL.helpers.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.substr(0, 3) +\n aValue.substr(4, 2);\n } else {\n // seconds\n // -050000\n return aValue.substr(0, 3) +\n aValue.substr(4, 2) +\n aValue.substr(7, 2);\n }\n },\n\n fromICAL: function(aValue) {\n if (aValue.length < 6) {\n // no seconds\n // -05:00\n return aValue.substr(0, 3) + ':' +\n aValue.substr(3, 2);\n } else {\n // seconds\n // -05:00:00\n return aValue.substr(0, 3) + ':' +\n aValue.substr(3, 2) + ':' +\n aValue.substr(5, 2);\n }\n },\n\n decorate: function(aValue) {\n return ICAL.UtcOffset.fromString(aValue);\n },\n\n undecorate: function(aValue) {\n return aValue.toString();\n }\n }\n };\n\n var icalParams = {\n // Although the syntax is DQUOTE uri DQUOTE, I don't think we should\n // enfoce 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!\n var icalValues = ICAL.helpers.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 ICAL.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 ICAL.Time.fromDateString(aValue, aProp);\n } else {\n return ICAL.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.substr(0, 4) + '-' +\n aValue.substr(4, 2) + '-' +\n aValue.substr(6, 2);\n }\n },\n\n toICAL: function(aValue) {\n // from: 2012-09-01\n // to: 20120901\n var len = aValue.length;\n\n if (len == 10) {\n return aValue.substr(0, 4) +\n aValue.substr(5, 2) +\n aValue.substr(8, 2);\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 var result = aValue.substr(0, 4) + '-' +\n aValue.substr(4, 2) + '-' +\n aValue.substr(6, 2) + 'T' +\n aValue.substr(9, 2) + ':' +\n aValue.substr(11, 2) + ':' +\n aValue.substr(13, 2);\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 var len = aValue.length;\n\n if (len == 10 && !design.strict) {\n return icalValues.date.toICAL(aValue);\n } else if (len >= 19) {\n var result = aValue.substr(0, 4) +\n aValue.substr(5, 2) +\n // grab the (DDTHH) segment\n aValue.substr(8, 5) +\n // MM\n aValue.substr(14, 2) +\n // SS\n aValue.substr(17, 2);\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 ICAL.Time.fromDateTimeString(aValue, aProp);\n } else {\n return ICAL.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 ICAL.Duration.fromString(aValue);\n },\n undecorate: function(aValue) {\n return aValue.toString();\n }\n },\n period: {\n\n fromICAL: function(string) {\n var parts = string.split('/');\n parts[0] = icalValues['date-time'].fromICAL(parts[0]);\n\n if (!ICAL.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 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 (!ICAL.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 ICAL.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 ICAL.Recur._stringToData(string, true);\n },\n\n toICAL: function(data) {\n var str = \"\";\n for (var k in data) {\n /* istanbul ignore if */\n if (!Object.prototype.hasOwnProperty.call(data, k)) {\n continue;\n }\n var val = data[k];\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 = ICAL.Recur.numericDayToIcalDay(val);\n }\n } else if (Array.isArray(val)) {\n val = val.join(\",\");\n }\n str += k.toUpperCase() + \"=\" + val + \";\";\n }\n return str.substr(0, str.length - 1);\n },\n\n decorate: function decorate(aValue) {\n return ICAL.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 var result = aValue.substr(0, 2) + ':' +\n aValue.substr(2, 2) + ':' +\n aValue.substr(4, 2);\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 var result = aValue.substr(0, 2) +\n aValue.substr(3, 2) +\n aValue.substr(6, 2);\n\n if (aValue[8] === 'Z') {\n result += 'Z';\n }\n\n return result;\n }\n }\n });\n\n var icalProperties = ICAL.helpers.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!\n var vcardValues = ICAL.helpers.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 ICAL.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.substr(0, 4) + '-' + aValue.substr(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.substr(0, 4) + aValue.substr(5);\n } else {\n return aValue;\n }\n }\n },\n\n time: {\n decorate: function(aValue) {\n return ICAL.VCardTime.fromDateAndOrTimeString(\"T\" + aValue, \"time\");\n },\n undecorate: function(aValue) {\n return aValue.toString();\n },\n fromICAL: function(aValue) {\n var splitzone = vcardValues.time._splitZone(aValue, true);\n var zone = splitzone[0], value = splitzone[1];\n\n //console.log(\"SPLIT: \",splitzone);\n\n if (value.length == 6) {\n value = value.substr(0, 2) + ':' +\n value.substr(2, 2) + ':' +\n value.substr(4, 2);\n } else if (value.length == 4 && value[0] != '-') {\n value = value.substr(0, 2) + ':' + value.substr(2, 2);\n } else if (value.length == 5) {\n value = value.substr(0, 3) + ':' + value.substr(3, 2);\n }\n\n if (zone.length == 5 && (zone[0] == '-' || zone[0] == '+')) {\n zone = zone.substr(0, 3) + ':' + zone.substr(3);\n }\n\n return value + zone;\n },\n\n toICAL: function(aValue) {\n var splitzone = vcardValues.time._splitZone(aValue);\n var zone = splitzone[0], value = splitzone[1];\n\n if (value.length == 8) {\n value = value.substr(0, 2) +\n value.substr(3, 2) +\n value.substr(6, 2);\n } else if (value.length == 5 && value[0] != '-') {\n value = value.substr(0, 2) + value.substr(3, 2);\n } else if (value.length == 6) {\n value = value.substr(0, 3) + value.substr(4, 2);\n }\n\n if (zone.length == 6 && (zone[0] == '-' || zone[0] == '+')) {\n zone = zone.substr(0, 3) + zone.substr(4);\n }\n\n return value + zone;\n },\n\n _splitZone: function(aValue, isFromIcal) {\n var lastChar = aValue.length - 1;\n var signChar = aValue.length - (isFromIcal ? 5 : 6);\n var sign = aValue[signChar];\n var zone, value;\n\n if (aValue[lastChar] == 'Z') {\n zone = aValue[lastChar];\n value = aValue.substr(0, lastChar);\n } else if (aValue.length > 6 && (sign == '-' || sign == '+')) {\n zone = aValue.substr(signChar);\n value = aValue.substr(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 ICAL.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 ICAL.VCardTime.fromDateAndOrTimeString(aValue, \"date-and-or-time\");\n },\n\n undecorate: function(aValue) {\n return aValue.toString();\n },\n\n fromICAL: function(aValue) {\n var 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 var 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 });\n\n var 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\n var vcardProperties = ICAL.helpers.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\n var vcard3Values = ICAL.helpers.extend(commonValues, {\n binary: icalValues.binary,\n date: vcardValues.date,\n \"date-time\": vcardValues[\"date-time\"],\n \"phone-number\": {\n // TODO\n /* ... */\n },\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.substr(0, 7);\n },\n\n fromICAL: function(aValue) {\n return aValue.substr(0, 7);\n },\n\n decorate: function(aValue) {\n return ICAL.UtcOffset.fromString(aValue);\n },\n\n undecorate: function(aValue) {\n return aValue.toString();\n }\n }\n });\n\n var 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\n var vcard3Properties = ICAL.helpers.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 {ICAL.design.designSet}\n */\n var icalSet = {\n value: icalValues,\n param: icalParams,\n property: icalProperties\n };\n\n /**\n * vCard 4.0 design set\n * @type {ICAL.design.designSet}\n */\n var vcardSet = {\n value: vcardValues,\n param: vcardParams,\n property: vcardProperties\n };\n\n /**\n * vCard 3.0 design set\n * @type {ICAL.design.designSet}\n */\n var vcard3Set = {\n value: vcard3Values,\n param: vcard3Params,\n property: vcard3Properties\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 * @namespace\n */\n var design = {\n /**\n * A designSet describes value, parameter and property data. It is used by\n * ther parser and stringifier in components and properties to determine they\n * should be represented.\n *\n * @typedef {Object} designSet\n * @memberOf ICAL.design\n * @property {Object} value Definitions for value types, keys are type names\n * @property {Object} param Definitions for params, keys are param names\n * @property {Object} property Defintions for properties, keys are property names\n */\n\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 {ICAL.design.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 {ICAL.design.designSet} vcard vCard VCARD\n * @property {ICAL.design.designSet} vevent iCalendar VEVENT\n * @property {ICAL.design.designSet} vtodo iCalendar VTODO\n * @property {ICAL.design.designSet} vjournal iCalendar VJOURNAL\n * @property {ICAL.design.designSet} valarm iCalendar VALARM\n * @property {ICAL.design.designSet} vtimezone iCalendar VTIMEZONE\n * @property {ICAL.design.designSet} daylight iCalendar DAYLIGHT\n * @property {ICAL.design.designSet} standard iCalendar STANDARD\n *\n * @example\n * var propertyName = 'fn';\n * var componentDesign = ICAL.design.components.vcard;\n * var 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 {ICAL.design.designSet}\n */\n icalendar: icalSet,\n\n /**\n * The design set for vCard (rfc6350/rfc7095) components.\n * @type {ICAL.design.designSet}\n */\n vcard: vcardSet,\n\n /**\n * The design set for vCard (rfc2425/rfc2426/rfc7095) components.\n * @type {ICAL.design.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 {ICAL.design.designSet} The design set for the component\n */\n getDesignSet: function(componentName) {\n var isInDesign = componentName && componentName in design.components;\n return isInDesign ? design.components[componentName] : design.defaultSet;\n }\n };\n\n return 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, 2011-2015 */\n\n\n/**\n * Contains various functions to convert jCal and jCard data back into\n * iCalendar and vCard.\n * @namespace\n */\nICAL.stringify = (function() {\n 'use strict';\n\n var LINE_ENDING = '\\r\\n';\n var DEFAULT_VALUE_TYPE = 'unknown';\n\n var design = ICAL.design;\n var helpers = ICAL.helpers;\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 */\n function stringify(jCal) {\n if (typeof jCal[0] == \"string\") {\n // This is a single component\n jCal = [jCal];\n }\n\n var i = 0;\n var len = jCal.length;\n var 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 {ICAL.design.designSet} designSet\n * The design data to use for this component\n * @return {String} The iCalendar/vCard string\n */\n stringify.component = function(component, designSet) {\n var name = component[0].toUpperCase();\n var result = 'BEGIN:' + name + LINE_ENDING;\n\n var props = component[1];\n var propIdx = 0;\n var propLen = props.length;\n\n var 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.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 var comps = component[2] || [];\n var compIdx = 0;\n var 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 {ICAL.design.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 */\n stringify.property = function(property, designSet, noFold) {\n var name = property[0].toUpperCase();\n var jsName = property[0];\n var params = property[1];\n\n var line = name;\n\n var paramName;\n for (paramName in params) {\n var value = params[paramName];\n\n /* istanbul ignore else */\n if (params.hasOwnProperty(paramName)) {\n var multiValue = (paramName in designSet.param) && designSet.param[paramName].multiValue;\n if (multiValue && Array.isArray(value)) {\n if (designSet.param[paramName].multiValueSeparateDQuote) {\n multiValue = '\"' + multiValue + '\"';\n }\n value = value.map(stringify._rfc6868Unescape);\n value = stringify.multiValue(value, multiValue, \"unknown\", null, designSet);\n } else {\n value = stringify._rfc6868Unescape(value);\n }\n\n\n line += ';' + paramName.toUpperCase();\n line += '=' + stringify.propertyValue(value);\n }\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 var valueType = property[2];\n\n if (!designSet) {\n designSet = design.defaultSet;\n }\n\n var propDetails;\n var multiValue = false;\n var structuredValue = false;\n var 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 : ICAL.helpers.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.propertyValue\n * @param {String} value Raw property value\n * @return {String} Given or escaped value when needed\n */\n stringify.propertyValue = function(value) {\n\n if ((helpers.unescapedIndexOf(value, ',') === -1) &&\n (helpers.unescapedIndexOf(value, ':') === -1) &&\n (helpers.unescapedIndexOf(value, ';') === -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 {ICAL.design.designSet} designSet\n * The design data to use for this property\n *\n * @return {String} iCalendar/vCard string for value\n */\n stringify.multiValue = function(values, delim, type, innerMulti, designSet, structuredValue) {\n var result = '';\n var len = values.length;\n var 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 */\n stringify.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 */\n stringify._rfc6868Unescape = function(val) {\n return val.replace(/[\\n^\"]/g, function(x) {\n return RFC6868_REPLACE_MAP[x];\n });\n };\n var RFC6868_REPLACE_MAP = { '\"': \"^'\", \"\\n\": \"^n\", \"^\": \"^^\" };\n\n return stringify;\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, 2011-2015 */\n\n\n/**\n * Contains various functions to parse iCalendar and vCard data.\n * @namespace\n */\nICAL.parse = (function() {\n 'use strict';\n\n var CHAR = /[^ \\t]/;\n var MULTIVALUE_DELIMITER = ',';\n var VALUE_DELIMITER = ':';\n var PARAM_DELIMITER = ';';\n var PARAM_NAME_DELIMITER = '=';\n var DEFAULT_VALUE_TYPE = 'unknown';\n var DEFAULT_PARAM_TYPE = 'text';\n\n var design = ICAL.design;\n var helpers = ICAL.helpers;\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 * @class\n */\n function ParserError(message) {\n this.message = message;\n this.name = 'ParserError';\n\n try {\n throw new Error();\n } catch (e) {\n if (e.stack) {\n var split = e.stack.split('\\n');\n split.shift();\n this.stack = split.join('\\n');\n }\n }\n }\n\n ParserError.prototype = Error.prototype;\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 * @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 */\n function parser(input) {\n var state = {};\n var root = state.component = [];\n\n state.stack = [root];\n\n parser._eachLine(input, function(err, line) {\n parser._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 {ICAL.design.designSet=} designSet\n * The design data to use for this property\n * @return {Object}\n * The jCal Object containing the property\n */\n parser.property = function(str, designSet) {\n var state = {\n component: [[], []],\n designSet: designSet || design.defaultSet\n };\n parser._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 */\n parser.component = function(str) {\n return parser(str);\n };\n\n // classes & constants\n parser.ParserError = ParserError;\n\n /**\n * The state for parsing content lines from an iCalendar/vCard string.\n *\n * @private\n * @memberof ICAL.parse\n * @typedef {Object} parserState\n * @property {ICAL.design.designSet} designSet The design set to use for parsing\n * @property {ICAL.Component[]} stack The stack of components being processed\n * @property {ICAL.Component} component The currently active component\n */\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 {ICAL.parse.parserState} The current state of the line parsing\n */\n parser._handleContentLine = function(line, state) {\n // break up the parts of the line\n var valuePos = line.indexOf(VALUE_DELIMITER);\n var paramPos = line.indexOf(PARAM_DELIMITER);\n\n var lastParamIndex;\n var lastValuePos;\n\n // name of property or begin/end\n var name;\n var value;\n // params is only overridden if paramPos !== -1.\n // we can't do params = params || {} later on\n // because it sacrifices ops.\n var 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 var parsedParams;\n if (paramPos !== -1) {\n name = line.substring(0, paramPos).toLowerCase();\n parsedParams = parser._parseParameters(line.substring(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.substring(lastParamIndex).indexOf(VALUE_DELIMITER)) !== -1) {\n value = line.substring(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.substring(0, valuePos).toLowerCase();\n value = line.substring(valuePos + 1);\n\n if (name === 'begin') {\n var 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.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 var valueType;\n var multiValue = false;\n var structuredValue = false;\n var propertyDetails;\n\n if (name in state.designSet.property) {\n propertyDetails = state.designSet.property[name];\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;\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 var result;\n if (multiValue && structuredValue) {\n value = parser._parseMultiValue(value, structuredValue, valueType, [], multiValue, state.designSet, structuredValue);\n result = [name, params, valueType, value];\n } else if (multiValue) {\n result = [name, params, valueType];\n parser._parseMultiValue(value, multiValue, valueType, result, null, state.designSet, false);\n } else if (structuredValue) {\n value = parser._parseMultiValue(value, structuredValue, valueType, [], null, state.designSet, structuredValue);\n result = [name, params, valueType, value];\n } else {\n value = parser._parseValue(value, valueType, state.designSet, false);\n result = [name, 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.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 */\n parser._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 {Numeric} 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 */\n parser._parseParameters = function(line, start, designSet) {\n var lastParam = start;\n var pos = 0;\n var delim = PARAM_NAME_DELIMITER;\n var result = {};\n var name, lcname;\n var value, valuePos = -1;\n var 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 = helpers.unescapedIndexOf(line, delim, pos + 1)) !== -1) {\n\n name = line.substr(lastParam + 1, pos - lastParam - 1);\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 = parser._rfc6868Escape('\"' + multiValue + '\"');\n }\n }\n\n var nextChar = line[pos + 1];\n if (nextChar === '\"') {\n valuePos = pos + 2;\n pos = helpers.unescapedIndexOf(line, '\"', valuePos);\n if (multiValue && pos != -1) {\n var extendedValue = true;\n while (extendedValue) {\n if (line[pos + 1] == multiValue && line[pos + 2] == '\"') {\n pos = helpers.unescapedIndexOf(line, '\"', 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.substr(valuePos, pos - valuePos);\n lastParam = helpers.unescapedIndexOf(line, PARAM_DELIMITER, pos);\n if (lastParam === -1) {\n pos = false;\n }\n } else {\n valuePos = pos + 1;\n\n // move to next \";\"\n var nextPos = helpers.unescapedIndexOf(line, PARAM_DELIMITER, valuePos);\n var propValuePos = helpers.unescapedIndexOf(line, 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.substr(valuePos, nextPos - valuePos);\n }\n\n value = parser._rfc6868Escape(value);\n if (multiValue) {\n var delimiter = mvdelim || multiValue;\n value = parser._parseMultiValue(value, delimiter, type, [], null, designSet);\n } else {\n value = parser._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 */\n parser._rfc6868Escape = function(val) {\n return val.replace(/\\^['n^]/g, function(x) {\n return RFC6868_REPLACE_MAP[x];\n });\n };\n var RFC6868_REPLACE_MAP = { \"^'\": '\"', \"^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 {ICAL.design.designSet} designSet The design data for this value\n * @return {?|Array.<?>} Either an array of results, or the first result\n */\n parser._parseMultiValue = function(buffer, delim, type, result, innerMulti, designSet, structuredValue) {\n var pos = 0;\n var lastPos = 0;\n var value;\n if (delim.length === 0) {\n return buffer;\n }\n\n // split each piece\n while ((pos = helpers.unescapedIndexOf(buffer, delim, lastPos)) !== -1) {\n value = buffer.substr(lastPos, pos - lastPos);\n if (innerMulti) {\n value = parser._parseMultiValue(value, innerMulti, type, [], null, designSet, structuredValue);\n } else {\n value = parser._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.substr(lastPos);\n if (innerMulti) {\n value = parser._parseMultiValue(value, innerMulti, type, [], null, designSet, structuredValue);\n } else {\n value = parser._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 */\n parser._eachLine = function(buffer, callback) {\n var len = buffer.length;\n var lastPos = buffer.search(CHAR);\n var pos = lastPos;\n var line;\n var firstChar;\n\n var 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.substr(\n lastPos + 1,\n pos - lastPos - (newlineOffset + 1)\n );\n } else {\n if (line)\n callback(null, line);\n // push line\n line = buffer.substr(\n lastPos,\n pos - lastPos - newlineOffset\n );\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 return parser;\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, 2011-2015 */\n\n\n/**\n * This symbol is further described later on\n * @ignore\n */\nICAL.Component = (function() {\n 'use strict';\n\n var PROPERTY_INDEX = 1;\n var COMPONENT_INDEX = 2;\n var NAME_INDEX = 0;\n\n /**\n * @classdesc\n * Wraps a jCal component, adding convenience methods to add, remove and\n * update subcomponents and properties.\n *\n * @class\n * @alias ICAL.Component\n * @param {Array|String} jCal Raw jCal component data OR name of new\n * component\n * @param {ICAL.Component} parent Parent component to associate\n */\n function Component(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\n Component.prototype = {\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 * The name of this component\n * @readonly\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 {ICAL.design.designSet}\n * @private\n */\n get _designSet() {\n var parentDesign = this.parent && this.parent._designSet;\n return parentDesign || ICAL.design.getDesignSet(this.name);\n },\n\n _hydrateComponent: function(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 var 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 _hydrateProperty: function(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 var prop = new ICAL.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 {?ICAL.Component} The found subcomponent\n */\n getFirstSubcomponent: function(name) {\n if (name) {\n var i = 0;\n var comps = this.jCal[COMPONENT_INDEX];\n var len = comps.length;\n\n for (; i < len; i++) {\n if (comps[i][NAME_INDEX] === name) {\n var 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 {ICAL.Component[]} The found sub components\n */\n getAllSubcomponents: function(name) {\n var jCalLen = this.jCal[COMPONENT_INDEX].length;\n var i = 0;\n\n if (name) {\n var comps = this.jCal[COMPONENT_INDEX];\n var 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: function(name) {\n var props = this.jCal[PROPERTY_INDEX];\n var len = props.length;\n\n var 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 {?ICAL.Property} The found property\n */\n getFirstProperty: function(name) {\n if (name) {\n var i = 0;\n var props = this.jCal[PROPERTY_INDEX];\n var len = props.length;\n\n for (; i < len; i++) {\n if (props[i][NAME_INDEX] === name) {\n var 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 {?String} The found property value.\n */\n getFirstPropertyValue: function(name) {\n var 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 {ICAL.Property[]} List of properties\n */\n getAllProperties: function(name) {\n var jCalLen = this.jCal[PROPERTY_INDEX].length;\n var i = 0;\n\n if (name) {\n var props = this.jCal[PROPERTY_INDEX];\n var 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 _removeObjectByIndex: function(jCalIndex, cache, index) {\n cache = cache || [];\n // remove cached version\n if (cache[index]) {\n var 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 _removeObject: function(jCalIndex, cache, nameOrObject) {\n var i = 0;\n var objects = this.jCal[jCalIndex];\n var len = objects.length;\n var 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 _removeAllObjects: function(jCalIndex, cache, name) {\n var cached = this[cache];\n\n // Unfortunately we have to run through all children to reset their\n // parent property.\n var objects = this.jCal[jCalIndex];\n var 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 {ICAL.Component} component The component to add\n * @return {ICAL.Component} The passed in component\n */\n addSubcomponent: function(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 var 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 {ICAL.Component|String} nameOrComp Name of component, or component\n * @return {Boolean} True when comp is removed\n */\n removeSubcomponent: function(nameOrComp) {\n var 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: function(name) {\n var 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 {ICAL.Property} property The property to add\n * @return {ICAL.Property} The passed in property\n */\n addProperty: function(property) {\n if (!(property instanceof ICAL.Property)) {\n throw new TypeError('must 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 var 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 {ICAL.Property} The created property\n */\n addPropertyWithValue: function(name, value) {\n var prop = new ICAL.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 {ICAL.Property} The created property\n */\n updatePropertyWithValue: function(name, value) {\n var 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|ICAL.Property} nameOrProp Property name or instance to remove\n * @return {Boolean} True, when deleted\n */\n removeProperty: function(nameOrProp) {\n var 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: function(name) {\n var 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: function() {\n return this.jCal;\n },\n\n /**\n * The string representation of this component.\n * @return {String}\n */\n toString: function() {\n return ICAL.stringify.component(\n this.jCal, this._designSet\n );\n }\n };\n\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 Component.fromString = function(str) {\n return new Component(ICAL.parse.component(str));\n };\n\n return Component;\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, 2011-2015 */\n\n\n/**\n * This symbol is further described later on\n * @ignore\n */\nICAL.Property = (function() {\n 'use strict';\n\n var NAME_INDEX = 0;\n var PROP_INDEX = 1;\n var TYPE_INDEX = 2;\n var VALUE_INDEX = 3;\n\n var design = ICAL.design;\n\n /**\n * @classdesc\n * Provides a layer on top of the raw jCal object for manipulating a single\n * property, with its parameters and value.\n *\n * @description\n * It is important to note that mutations done in the wrapper\n * directly mutate the jCal object used to initialize.\n *\n * Can also be used to create new properties by passing\n * the name of the property (as a String).\n *\n * @class\n * @alias ICAL.Property\n * @param {Array|String} jCal Raw jCal representation OR\n * the new name of the property\n *\n * @param {ICAL.Component=} parent Parent component\n */\n function Property(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.defaultType];\n this.jCal[TYPE_INDEX] = this.getDefaultType();\n } else {\n this.jCal = jCal;\n }\n this._updateType();\n }\n\n Property.prototype = {\n\n /**\n * The value type for this property\n * @readonly\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 * @readonly\n * @type {String}\n */\n get name() {\n return this.jCal[NAME_INDEX];\n },\n\n /**\n * The parent component for this property.\n * @type {ICAL.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 var designSetChanged = !this._parent || (p && p._designSet != this._parent._designSet);\n\n this._parent = p;\n\n if (this.type == design.defaultType && designSetChanged) {\n this.jCal[TYPE_INDEX] = this.getDefaultType();\n this._updateType();\n }\n\n return p;\n },\n\n /**\n * The design set for this property, e.g. icalendar vs vcard\n *\n * @type {ICAL.design.designSet}\n * @private\n */\n get _designSet() {\n return this.parent ? this.parent._designSet : design.defaultSet;\n },\n\n /**\n * Updates the type metadata from the current jCal type and design set.\n *\n * @private\n */\n _updateType: function() {\n var designSet = this._designSet;\n\n if (this.type in designSet.value) {\n var designType = designSet.value[this.type];\n\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: function(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: function(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: function(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: function(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: function(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: function(name) {\n var 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: function(name, value) {\n var 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: function(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: function() {\n var name = this.jCal[NAME_INDEX];\n var designSet = this._designSet;\n\n if (name in designSet.property) {\n var details = designSet.property[name];\n if ('defaultType' in details) {\n return details.defaultType;\n }\n }\n return design.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: function(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 {String} First property value\n */\n getFirstValue: function() {\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: function() {\n var 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 var i = 0;\n var 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: function() {\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: function(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 var len = values.length;\n var 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: function(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: function() {\n return this.jCal;\n },\n\n /**\n * The string representation of this component.\n * @return {String}\n */\n toICALString: function() {\n return ICAL.stringify.property(\n this.jCal, this._designSet, true\n );\n }\n };\n\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 {ICAL.design.designSet=} designSet The design data to use for this property\n * @return {ICAL.Property} The created iCalendar property\n */\n Property.fromString = function(str, designSet) {\n return new Property(ICAL.parse.property(str, designSet));\n };\n\n return Property;\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, 2011-2015 */\n\n\n/**\n * This symbol is further described later on\n * @ignore\n */\nICAL.UtcOffset = (function() {\n\n /**\n * @classdesc\n * This class represents the \"duration\" value type, with various calculation\n * and manipulation methods.\n *\n * @class\n * @alias ICAL.UtcOffset\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 function UtcOffset(aData) {\n this.fromData(aData);\n }\n\n UtcOffset.prototype = {\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 {ICAL.UtcOffset} The cloned object\n */\n clone: function() {\n return ICAL.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: function(aData) {\n if (aData) {\n for (var key in aData) {\n /* istanbul ignore else */\n if (aData.hasOwnProperty(key)) {\n this[key] = aData[key];\n }\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: function(aSeconds) {\n var secs = Math.abs(aSeconds);\n\n this.factor = aSeconds < 0 ? -1 : 1;\n this.hours = ICAL.helpers.trunc(secs / 3600);\n\n secs -= (this.hours * 3600);\n this.minutes = ICAL.helpers.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: function() {\n return this.factor * (60 * this.minutes + 3600 * this.hours);\n },\n\n /**\n * Compare this utc offset with another one.\n *\n * @param {ICAL.UtcOffset} other The other offset to compare with\n * @return {Number} -1, 0 or 1 for less/equal/greater\n */\n compare: function icaltime_compare(other) {\n var a = this.toSeconds();\n var b = other.toSeconds();\n return (a > b) - (b > a);\n },\n\n _normalize: function() {\n // Range: 97200 seconds (with 1 hour inbetween)\n var secs = this.toSeconds();\n var 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: function() {\n return ICAL.design.icalendar.value['utc-offset'].toICAL(this.toString());\n },\n\n /**\n * The string representation of this utc-offset.\n * @return {String}\n */\n toString: function toString() {\n return (this.factor == 1 ? \"+\" : \"-\") +\n ICAL.helpers.pad2(this.hours) + ':' +\n ICAL.helpers.pad2(this.minutes);\n }\n };\n\n /**\n * Creates a new {@link ICAL.UtcOffset} instance from the passed string.\n *\n * @param {String} aString The string to parse\n * @return {ICAL.Duration} The created utc-offset instance\n */\n UtcOffset.fromString = function(aString) {\n // -05:00\n var options = {};\n //TODO: support seconds per rfc5545 ?\n options.factor = (aString[0] === '+') ? 1 : -1;\n options.hours = ICAL.helpers.strictParseInt(aString.substr(1, 2));\n options.minutes = ICAL.helpers.strictParseInt(aString.substr(4, 2));\n\n return new ICAL.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 UtcOffset.fromSeconds = function(aSeconds) {\n var instance = new UtcOffset();\n instance.fromSeconds(aSeconds);\n return instance;\n };\n\n return UtcOffset;\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, 2011-2015 */\n\n\n/**\n * This symbol is further described later on\n * @ignore\n */\nICAL.Binary = (function() {\n\n /**\n * @classdesc\n * Represents the BINARY value type, which contains extra methods for\n * encoding and decoding.\n *\n * @class\n * @alias ICAL.Binary\n * @param {String} aValue The binary data for this value\n */\n function Binary(aValue) {\n this.value = aValue;\n }\n\n Binary.prototype = {\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: function 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: function setEncodedValue(aValue) {\n this.value = this._b64_encode(aValue);\n },\n\n _b64_encode: function base64_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 var b64 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\" +\n \"abcdefghijklmnopqrstuvwxyz0123456789+/=\";\n var 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 var r = data.length % 3;\n\n return (r ? enc.slice(0, r - 3) : enc) + '==='.slice(r || 3);\n\n },\n\n _b64_decode: function base64_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 var b64 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\" +\n \"abcdefghijklmnopqrstuvwxyz0123456789+/=\";\n var 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: function() {\n return this.value;\n }\n };\n\n /**\n * Creates a binary value from the given string.\n *\n * @param {String} aString The binary value string\n * @return {ICAL.Binary} The binary value instance\n */\n Binary.fromString = function(aString) {\n return new Binary(aString);\n };\n\n return Binary;\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, 2011-2015 */\n\n\n\n(function() {\n /**\n * @classdesc\n * This class represents the \"period\" value type, with various calculation\n * and manipulation methods.\n *\n * @description\n * The passed data object cannot contain both and end date and a duration.\n *\n * @class\n * @param {Object} aData An object with members of the period\n * @param {ICAL.Time=} aData.start The start of the period\n * @param {ICAL.Time=} aData.end The end of the period\n * @param {ICAL.Duration=} aData.duration The duration of the period\n */\n ICAL.Period = function icalperiod(aData) {\n this.wrappedJSObject = this;\n\n if (aData && 'start' in aData) {\n if (aData.start && !(aData.start instanceof ICAL.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 ICAL.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 ICAL.Duration)) {\n throw new TypeError('.duration must be an instance of ICAL.Duration');\n }\n this.duration = aData.duration;\n }\n };\n\n ICAL.Period.prototype = {\n\n /**\n * The start of the period\n * @type {ICAL.Time}\n */\n start: null,\n\n /**\n * The end of the period\n * @type {ICAL.Time}\n */\n end: null,\n\n /**\n * The duration of the period\n * @type {ICAL.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 {ICAL.Period} The cloned object\n */\n clone: function() {\n return ICAL.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 {ICAL.Duration} The calculated duration\n */\n getDuration: function duration() {\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 {ICAL.Time} The calculated end date\n */\n getEnd: function() {\n if (this.end) {\n return this.end;\n } else {\n var 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: function 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: function() {\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: function() {\n return this.start.toICALString() + \"/\" +\n (this.end || this.duration).toICALString();\n }\n };\n\n /**\n * Creates a new {@link ICAL.Period} instance from the passed string.\n *\n * @param {String} str The string to parse\n * @param {ICAL.Property} prop The property this period will be on\n * @return {ICAL.Period} The created period instance\n */\n ICAL.Period.fromString = function fromString(str, prop) {\n var 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 var options = {\n start: ICAL.Time.fromDateTimeString(parts[0], prop)\n };\n\n var end = parts[1];\n\n if (ICAL.Duration.isValueString(end)) {\n options.duration = ICAL.Duration.fromString(end);\n } else {\n options.end = ICAL.Time.fromDateTimeString(end, prop);\n }\n\n return new ICAL.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 {ICAL.Time=} aData.start The start of the period\n * @param {ICAL.Time=} aData.end The end of the period\n * @param {ICAL.Duration=} aData.duration The duration of the period\n * @return {ICAL.Period} The period instance\n */\n ICAL.Period.fromData = function fromData(aData) {\n return new ICAL.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 {Array<String,String>} aData The jCal data array\n * @param {ICAL.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 {ICAL.Period} The period instance\n */\n ICAL.Period.fromJSON = function(aData, aProp, aLenient) {\n function fromDateOrDateTimeString(aValue, aProp) {\n if (aLenient) {\n return ICAL.Time.fromString(aValue, aProp);\n } else {\n return ICAL.Time.fromDateTimeString(aValue, aProp);\n }\n }\n\n if (ICAL.Duration.isValueString(aData[1])) {\n return ICAL.Period.fromData({\n start: fromDateOrDateTimeString(aData[0], aProp),\n duration: ICAL.Duration.fromString(aData[1])\n });\n } else {\n return ICAL.Period.fromData({\n start: fromDateOrDateTimeString(aData[0], aProp),\n end: fromDateOrDateTimeString(aData[1], aProp)\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, 2011-2015 */\n\n\n\n(function() {\n var DURATION_LETTERS = /([PDWHMTS]{1,1})/;\n\n /**\n * @classdesc\n * This class represents the \"duration\" value type, with various calculation\n * and manipulation methods.\n *\n * @class\n * @alias ICAL.Duration\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 ICAL.Duration = function icalduration(data) {\n this.wrappedJSObject = this;\n this.fromData(data);\n };\n\n ICAL.Duration.prototype = {\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 {ICAL.Duration} The cloned object\n */\n clone: function clone() {\n return ICAL.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: function toSeconds() {\n var 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 {ICAL.Duration} Returns this instance\n */\n fromSeconds: function fromSeconds(aSeconds) {\n var secs = Math.abs(aSeconds);\n\n this.isNegative = (aSeconds < 0);\n this.days = ICAL.helpers.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 = ICAL.helpers.trunc(secs / 3600);\n secs -= this.hours * 3600;\n\n this.minutes = ICAL.helpers.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: function fromData(aData) {\n var propsToCopy = [\"weeks\", \"days\", \"hours\",\n \"minutes\", \"seconds\", \"isNegative\"];\n for (var key in propsToCopy) {\n /* istanbul ignore if */\n if (!propsToCopy.hasOwnProperty(key)) {\n continue;\n }\n var prop = propsToCopy[key];\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: function 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 {ICAL.Duration} aOther The instance to compare with\n * @return {Number} -1, 0 or 1 for less/equal/greater\n */\n compare: function compare(aOther) {\n var thisSeconds = this.toSeconds();\n var 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: function normalize() {\n this.fromSeconds(this.toSeconds());\n },\n\n /**\n * The string representation of this duration.\n * @return {String}\n */\n toString: function toString() {\n if (this.toSeconds() == 0) {\n return \"PT0S\";\n } else {\n var 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: function() {\n return this.toString();\n }\n };\n\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 {ICAL.Duration} The newly created duration instance\n */\n ICAL.Duration.fromSeconds = function icalduration_from_seconds(aSeconds) {\n return (new ICAL.Duration()).fromSeconds(aSeconds);\n };\n\n /**\n * Internal helper function to handle a chunk of a duration.\n *\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 */\n function parseDurationChunk(letter, number, object) {\n var 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 var num = parseInt(number, 10);\n if (ICAL.helpers.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 /**\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 ICAL.Duration.isValueString = function(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 {ICAL.Duration} The created duration instance\n */\n ICAL.Duration.fromString = function icalduration_from_string(aStr) {\n var pos = 0;\n var dict = Object.create(null);\n var chunks = 0;\n\n while ((pos = aStr.search(DURATION_LETTERS)) !== -1) {\n var type = aStr[pos];\n var numeric = aStr.substr(0, pos);\n aStr = aStr.substr(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 ICAL.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 {ICAL.Duration} The createad duration instance\n */\n ICAL.Duration.fromData = function icalduration_from_data(aData) {\n return new ICAL.Duration(aData);\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, 2011-2012 */\n\n\n\n(function() {\n var OPTIONS = [\"tzid\", \"location\", \"tznames\",\n \"latitude\", \"longitude\"];\n\n /**\n * @classdesc\n * Timezone representation, created by passing in a tzid and component.\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 * @class\n * @param {ICAL.Component|Object} data options for class\n * @param {String|ICAL.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 ICAL.Timezone = function icaltimezone(data) {\n this.wrappedJSObject = this;\n this.fromData(data);\n };\n\n ICAL.Timezone.prototype = {\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 {ICAL.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 {ICAL.Component|Object} aData options for class\n * @param {String|ICAL.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: function fromData(aData) {\n this.expandedUntilYear = 0;\n this.changes = [];\n\n if (aData instanceof ICAL.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 var jCal = ICAL.parse(aData.component);\n this.component = new ICAL.Component(jCal);\n } else if (aData.component instanceof ICAL.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 (var key in OPTIONS) {\n /* istanbul ignore else */\n if (OPTIONS.hasOwnProperty(key)) {\n var prop = OPTIONS[key];\n if (aData && prop in aData) {\n this[prop] = aData[prop];\n }\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 ICAL.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 {ICAL.Time} tt The time to check for\n * @return {Number} utc offset in seconds\n */\n utcOffset: function utcOffset(tt) {\n if (this == ICAL.Timezone.utcTimezone || this == ICAL.Timezone.localTimezone) {\n return 0;\n }\n\n this._ensureCoverage(tt.year);\n\n if (!this.changes.length) {\n return 0;\n }\n\n var 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 var change_num = this._findNearbyChange(tt_change);\n var change_num_to_use = -1;\n var step = 1;\n\n // TODO: replace with bin search?\n for (;;) {\n var change = ICAL.helpers.clone(this.changes[change_num], true);\n if (change.utcOffset < change.prevUtcOffset) {\n ICAL.Timezone.adjust_change(change, 0, 0, 0, change.utcOffset);\n } else {\n ICAL.Timezone.adjust_change(change, 0, 0, 0,\n change.prevUtcOffset);\n }\n\n var cmp = ICAL.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 var zone_change = this.changes[change_num_to_use];\n var utcOffset_change = zone_change.utcOffset - zone_change.prevUtcOffset;\n\n if (utcOffset_change < 0 && change_num_to_use > 0) {\n var tmp_change = ICAL.helpers.clone(zone_change, true);\n ICAL.Timezone.adjust_change(tmp_change, 0, 0, 0,\n tmp_change.prevUtcOffset);\n\n if (ICAL.Timezone._compare_change_fn(tt_change, tmp_change) < 0) {\n var prev_zone_change = this.changes[change_num_to_use - 1];\n\n var 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: function icaltimezone_find_nearby_change(change) {\n // find the closest match\n var idx = ICAL.helpers.binsearchInsert(\n this.changes,\n change,\n ICAL.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: function(aYear) {\n if (ICAL.Timezone._minimumExpansionYear == -1) {\n var today = ICAL.Time.now();\n ICAL.Timezone._minimumExpansionYear = today.year;\n }\n\n var changesEndYear = aYear;\n if (changesEndYear < ICAL.Timezone._minimumExpansionYear) {\n changesEndYear = ICAL.Timezone._minimumExpansionYear;\n }\n\n changesEndYear += ICAL.Timezone.EXTRA_COVERAGE;\n\n if (changesEndYear > ICAL.Timezone.MAX_YEAR) {\n changesEndYear = ICAL.Timezone.MAX_YEAR;\n }\n\n if (!this.changes.length || this.expandedUntilYear < aYear) {\n var subcomps = this.component.getAllSubcomponents();\n var compLen = subcomps.length;\n var compIdx = 0;\n\n for (; compIdx < compLen; compIdx++) {\n this._expandComponent(\n subcomps[compIdx], changesEndYear, this.changes\n );\n }\n\n this.changes.sort(ICAL.Timezone._compare_change_fn);\n this.expandedUntilYear = changesEndYear;\n }\n },\n\n _expandComponent: function(aComponent, aYear, changes) {\n if (!aComponent.hasProperty(\"dtstart\") ||\n !aComponent.hasProperty(\"tzoffsetto\") ||\n !aComponent.hasProperty(\"tzoffsetfrom\")) {\n return null;\n }\n\n var dtstart = aComponent.getFirstProperty(\"dtstart\").getFirstValue();\n var change;\n\n function convert_tzoffset(offset) {\n return offset.factor * (offset.hours * 3600 + offset.minutes * 60);\n }\n\n function init_changes() {\n var 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 ICAL.Timezone.adjust_change(change, 0, 0, 0,\n -change.prevUtcOffset);\n changes.push(change);\n } else {\n var props = aComponent.getAllProperties(\"rdate\");\n for (var rdatekey in props) {\n /* istanbul ignore if */\n if (!props.hasOwnProperty(rdatekey)) {\n continue;\n }\n var rdate = props[rdatekey];\n var 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 != ICAL.Timezone.utcTimezone) {\n ICAL.Timezone.adjust_change(change, 0, 0, 0,\n -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 != ICAL.Timezone.utcTimezone) {\n ICAL.Timezone.adjust_change(change, 0, 0, 0,\n -change.prevUtcOffset);\n }\n }\n\n changes.push(change);\n }\n\n var rrule = aComponent.getFirstProperty(\"rrule\");\n\n if (rrule) {\n rrule = rrule.getFirstValue();\n change = init_changes();\n\n if (rrule.until && rrule.until.zone == ICAL.Timezone.utcTimezone) {\n rrule.until.adjust(0, 0, 0, change.prevUtcOffset);\n rrule.until.zone = ICAL.Timezone.localTimezone;\n }\n\n var iterator = rrule.iterator(dtstart);\n\n var 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 ICAL.Timezone.adjust_change(change, 0, 0, 0,\n -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: function toString() {\n return (this.tznames ? this.tznames : this.tzid);\n }\n };\n\n ICAL.Timezone._compare_change_fn = function icaltimezone_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 {ICAL.Time} tt The time to convert\n * @param {ICAL.Timezone} from_zone The source zone to convert from\n * @param {ICAL.Timezone} to_zone The target zone to convert to\n * @return {ICAL.Time} The converted date/time object\n */\n ICAL.Timezone.convert_time = function icaltimezone_convert_time(tt, from_zone, to_zone) {\n if (tt.isDate ||\n from_zone.tzid == to_zone.tzid ||\n from_zone == ICAL.Timezone.localTimezone ||\n to_zone == ICAL.Timezone.localTimezone) {\n tt.zone = to_zone;\n return tt;\n }\n\n var 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 {ICAL.Component|Object} aData options for class\n * @param {String|ICAL.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 ICAL.Timezone.fromData = function icaltimezone_fromData(aData) {\n var tt = new ICAL.Timezone();\n return tt.fromData(aData);\n };\n\n /**\n * The instance describing the UTC timezone\n * @type {ICAL.Timezone}\n * @constant\n * @instance\n */\n ICAL.Timezone.utcTimezone = ICAL.Timezone.fromData({\n tzid: \"UTC\"\n });\n\n /**\n * The instance describing the local timezone\n * @type {ICAL.Timezone}\n * @constant\n * @instance\n */\n ICAL.Timezone.localTimezone = ICAL.Timezone.fromData({\n tzid: \"floating\"\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 ICAL.Timezone.adjust_change = function icaltimezone_adjust_change(change, days, hours, minutes, seconds) {\n return ICAL.Time.prototype.adjust.call(\n change,\n days,\n hours,\n minutes,\n seconds,\n change\n );\n };\n\n ICAL.Timezone._minimumExpansionYear = -1;\n ICAL.Timezone.MAX_YEAR = 2035; // TODO this is because of time_t, which we don't need. Still usefull?\n ICAL.Timezone.EXTRA_COVERAGE = 5;\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, 2011-2015 */\n\n\n/**\n * This symbol is further described later on\n * @ignore\n */\nICAL.TimezoneService = (function() {\n var zones;\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 * @namespace\n * @alias ICAL.TimezoneService\n */\n var TimezoneService = {\n get count() {\n return Object.keys(zones).length;\n },\n\n reset: function() {\n zones = Object.create(null);\n var utc = ICAL.Timezone.utcTimezone;\n\n zones.Z = utc;\n zones.UTC = utc;\n zones.GMT = utc;\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 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 {?ICAL.Timezone} The timezone, or null if not found\n */\n get: function(tzid) {\n return zones[tzid];\n },\n\n /**\n * Registers a timezone object or component.\n *\n * @param {String=} name\n * The name of the timezone. Defaults to the component's TZID if not\n * passed.\n * @param {ICAL.Component|ICAL.Timezone} zone\n * The initialized zone or vtimezone.\n */\n register: function(name, timezone) {\n if (name instanceof ICAL.Component) {\n if (name.name === 'vtimezone') {\n timezone = new ICAL.Timezone(name);\n name = timezone.tzid;\n }\n }\n\n if (timezone instanceof ICAL.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 {?ICAL.Timezone} The removed timezone, or null if not registered\n */\n remove: function(tzid) {\n return (delete zones[tzid]);\n }\n };\n\n // initialize defaults\n TimezoneService.reset();\n\n return TimezoneService;\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, 2011-2015 */\n\n\n\n(function() {\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 * @alias ICAL.Time\n * @class\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 {ICAL.Timezone} zone timezone this position occurs in\n */\n ICAL.Time = function icaltime(data, zone) {\n this.wrappedJSObject = this;\n var 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 ICAL.Time._dowCache = {};\n ICAL.Time._wnCache = {};\n\n ICAL.Time.prototype = {\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 * @readonly\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 {ICAL.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 {ICAL.Time} The cloned object\n */\n clone: function() {\n return new ICAL.Time(this._time, this.zone);\n },\n\n /**\n * Reset the time instance to epoch time\n */\n reset: function icaltime_reset() {\n this.fromData(ICAL.Time.epochTime);\n this.zone = ICAL.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 {ICAL.Timezone} timezone The timezone to set\n */\n resetTo: function icaltime_resetTo(year, month, day,\n 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 If true, the UTC values of the date will be used\n */\n fromJSDate: function icaltime_fromJSDate(aDate, useUTC) {\n if (!aDate) {\n this.reset();\n } else {\n if (useUTC) {\n this.zone = ICAL.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 = ICAL.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 {ICAL.Timezone=} aZone Timezone this position occurs in\n */\n fromData: function fromData(aData, aZone) {\n if (aData) {\n for (var key in aData) {\n /* istanbul ignore else */\n if (Object.prototype.hasOwnProperty.call(aData, key)) {\n // ical type cannot be set\n if (key === 'icaltype') continue;\n this[key] = aData[key];\n }\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 var zone = ICAL.TimezoneService.get(\n aData.timezone\n );\n\n this.zone = zone || ICAL.Timezone.localTimezone;\n }\n\n if (aData && \"zone\" in aData) {\n this.zone = aData.zone;\n }\n\n if (!this.zone) {\n this.zone = ICAL.Timezone.localTimezone;\n }\n\n this._cachedUnixTime = null;\n return this;\n },\n\n /**\n * Calculate the day of week.\n * @param {ICAL.Time.weekDay=} aWeekStart\n * The week start weekday, defaults to SUNDAY\n * @return {ICAL.Time.weekDay}\n */\n dayOfWeek: function icaltime_dayOfWeek(aWeekStart) {\n var firstDow = aWeekStart || ICAL.Time.SUNDAY;\n var dowCacheKey = (this.year << 12) + (this.month << 8) + (this.day << 3) + firstDow;\n if (dowCacheKey in ICAL.Time._dowCache) {\n return ICAL.Time._dowCache[dowCacheKey];\n }\n\n // Using Zeller's algorithm\n var q = this.day;\n var m = this.month + (this.month < 3 ? 12 : 0);\n var Y = this.year - (this.month < 3 ? 1 : 0);\n\n var h = (q + Y + ICAL.helpers.trunc(((m + 1) * 26) / 10) + ICAL.helpers.trunc(Y / 4));\n /* istanbul ignore else */\n if (true /* gregorian */) {\n h += ICAL.helpers.trunc(Y / 100) * 6 + ICAL.helpers.trunc(Y / 400);\n } else {\n h += 5;\n }\n\n // Normalize to 1 = wkst\n h = ((h + 7 - firstDow) % 7) + 1;\n ICAL.Time._dowCache[dowCacheKey] = h;\n return h;\n },\n\n /**\n * Calculate the day of year.\n * @return {Number}\n */\n dayOfYear: function dayOfYear() {\n var is_leap = (ICAL.Time.isLeapYear(this.year) ? 1 : 0);\n var diypm = ICAL.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 {ICAL.Time.weekDay=} aWeekStart\n * The week start weekday, defaults to SUNDAY\n * @return {ICAL.Time} The start of the week (cloned)\n */\n startOfWeek: function startOfWeek(aWeekStart) {\n var firstDow = aWeekStart || ICAL.Time.SUNDAY;\n var 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 {ICAL.Time.weekDay=} aWeekStart\n * The week start weekday, defaults to SUNDAY\n * @return {ICAL.Time} The end of the week (cloned)\n */\n endOfWeek: function endOfWeek(aWeekStart) {\n var firstDow = aWeekStart || ICAL.Time.SUNDAY;\n var result = this.clone();\n result.day += (7 - this.dayOfWeek() + firstDow - ICAL.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 {ICAL.Time} The start of the month (cloned)\n */\n startOfMonth: function startOfMonth() {\n var 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 {ICAL.Time} The end of the month (cloned)\n */\n endOfMonth: function endOfMonth() {\n var result = this.clone();\n result.day = ICAL.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 {ICAL.Time} The start of the year (cloned)\n */\n startOfYear: function startOfYear() {\n var 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 {ICAL.Time} The end of the year (cloned)\n */\n endOfYear: function endOfYear() {\n var 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 {ICAL.Time.weekDay=} aFirstDayOfWeek\n * The week start weekday, defaults to SUNDAY\n * @return {Number} The calculated day of year\n */\n startDoyWeek: function startDoyWeek(aFirstDayOfWeek) {\n var firstDow = aFirstDayOfWeek || ICAL.Time.SUNDAY;\n var 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: function() {\n return ICAL.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: function icaltime_nthWeekDay(aDayOfWeek, aPos) {\n var daysInMonth = ICAL.Time.daysInMonth(this.month, this.year);\n var weekday;\n var pos = aPos;\n\n var start = 0;\n\n var 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 var startDow = otherDay.dayOfWeek();\n\n // calculate the difference between current\n // day of the week and desired day of the week\n var 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 var 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 {ICAL.Time.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: function(aDayOfWeek, aPos) {\n var dow = this.dayOfWeek();\n\n if (aPos === 0 && dow === aDayOfWeek) {\n return true;\n }\n\n // get pos\n var 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 ICAL.Time.weekOneStarts\n * @param {ICAL.Time.weekDay} aWeekStart The weekday the week starts with\n * @return {Number} The ISO week number\n */\n weekNumber: function weekNumber(aWeekStart) {\n var wnCacheKey = (this.year << 12) + (this.month << 8) + (this.day << 3) + aWeekStart;\n if (wnCacheKey in ICAL.Time._wnCache) {\n return ICAL.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 var week1;\n\n var dt = this.clone();\n dt.isDate = true;\n var isoyear = this.year;\n\n if (dt.month == 12 && dt.day > 25) {\n week1 = ICAL.Time.weekOneStarts(isoyear + 1, aWeekStart);\n if (dt.compare(week1) < 0) {\n week1 = ICAL.Time.weekOneStarts(isoyear, aWeekStart);\n } else {\n isoyear++;\n }\n } else {\n week1 = ICAL.Time.weekOneStarts(isoyear, aWeekStart);\n if (dt.compare(week1) < 0) {\n week1 = ICAL.Time.weekOneStarts(--isoyear, aWeekStart);\n }\n }\n\n var daysBetween = (dt.subtractDate(week1).toSeconds() / 86400);\n var answer = ICAL.helpers.trunc(daysBetween / 7) + 1;\n ICAL.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 {ICAL.Duration} aDuration The duration to add\n */\n addDuration: function icaltime_add(aDuration) {\n var 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 var second = this.second;\n var minute = this.minute;\n var hour = this.hour;\n var 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 {ICAL.Time} aDate The date to substract\n * @return {ICAL.Duration} The difference as a duration\n */\n subtractDate: function icaltime_subtract(aDate) {\n var unixTime = this.toUnixTime() + this.utcOffset();\n var other = aDate.toUnixTime() + aDate.utcOffset();\n return ICAL.Duration.fromSeconds(unixTime - other);\n },\n\n /**\n * Subtract the date details, taking timezones into account.\n *\n * @param {ICAL.Time} aDate The date to subtract\n * @return {ICAL.Duration} The difference in duration\n */\n subtractDateTz: function icaltime_subtract_abs(aDate) {\n var unixTime = this.toUnixTime();\n var other = aDate.toUnixTime();\n return ICAL.Duration.fromSeconds(unixTime - other);\n },\n\n /**\n * Compares the ICAL.Time instance with another one.\n *\n * @param {ICAL.Duration} aOther The instance to compare with\n * @return {Number} -1, 0 or 1 for less/equal/greater\n */\n compare: function icaltime_compare(other) {\n var a = this.toUnixTime();\n var 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 {ICAL.Duration} other The instance to compare with\n * @param {ICAL.Timezone} tz The timezone to compare in\n * @return {Number} -1, 0 or 1 for less/equal/greater\n */\n compareDateOnlyTz: function icaltime_compareDateOnlyTz(other, tz) {\n function cmp(attr) {\n return ICAL.Time._cmp_attr(a, b, attr);\n }\n var a = this.convertToZone(tz);\n var b = other.convertToZone(tz);\n var rc = 0;\n\n if ((rc = cmp(\"year\")) != 0) return rc;\n if ((rc = cmp(\"month\")) != 0) return rc;\n if ((rc = cmp(\"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 {ICAL.Timezone} zone The zone to convert to\n * @return {ICAL.Time} The copy, converted to the zone\n */\n convertToZone: function convertToZone(zone) {\n var copy = this.clone();\n var zone_equals = (this.zone.tzid == zone.tzid);\n\n if (!this.isDate && !zone_equals) {\n ICAL.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: function utc_offset() {\n if (this.zone == ICAL.Timezone.localTimezone ||\n this.zone == ICAL.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: function() {\n var string = this.toString();\n\n if (string.length > 10) {\n return ICAL.design.icalendar.value['date-time'].toICAL(string);\n } else {\n return ICAL.design.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: function toString() {\n var result = this.year + '-' +\n ICAL.helpers.pad2(this.month) + '-' +\n ICAL.helpers.pad2(this.day);\n\n if (!this.isDate) {\n result += 'T' + ICAL.helpers.pad2(this.hour) + ':' +\n ICAL.helpers.pad2(this.minute) + ':' +\n ICAL.helpers.pad2(this.second);\n\n if (this.zone === ICAL.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: function toJSDate() {\n if (this.zone == ICAL.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: function icaltime_normalize() {\n var isDate = this._time.isDate;\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: function icaltime_adjust(aExtraDays, aExtraHours,\n aExtraMinutes, aExtraSeconds, aTime) {\n\n var minutesOverflow, hoursOverflow,\n daysOverflow = 0, yearsOverflow = 0;\n\n var second, minute, hour, day;\n var daysInMonth;\n\n var time = aTime || this._time;\n\n if (!time.isDate) {\n second = time.second + aExtraSeconds;\n time.second = second % 60;\n minutesOverflow = ICAL.helpers.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 = ICAL.helpers.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 = ICAL.helpers.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 = ICAL.helpers.trunc((time.month - 1) / 12);\n } else if (time.month < 1) {\n yearsOverflow = ICAL.helpers.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 = ICAL.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 += ICAL.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: function fromUnixTime(seconds) {\n this.zone = ICAL.Timezone.utcTimezone;\n var epoch = ICAL.Time.epochTime.clone();\n epoch.adjust(0, 0, 0, seconds);\n\n this.year = epoch.year;\n this.month = epoch.month;\n this.day = epoch.day;\n this.hour = epoch.hour;\n this.minute = epoch.minute;\n this.second = Math.floor(epoch.second);\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: function toUnixTime() {\n if (this._cachedUnixTime !== null) {\n return this._cachedUnixTime;\n }\n var offset = this.utcOffset();\n\n // we use the offset trick to ensure\n // that we are getting the actual UTC time\n var 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: function() {\n var copy = [\n 'year',\n 'month',\n 'day',\n 'hour',\n 'minute',\n 'second',\n 'isDate'\n ];\n\n var result = Object.create(null);\n\n var i = 0;\n var len = copy.length;\n var 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\n (function setupNormalizeAttributes() {\n // This needs to run before any instances are created!\n function defineAttr(attr) {\n Object.defineProperty(ICAL.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 return val;\n }\n });\n\n }\n\n /* istanbul ignore else */\n if (\"defineProperty\" in Object) {\n defineAttr(\"year\");\n defineAttr(\"month\");\n defineAttr(\"day\");\n defineAttr(\"hour\");\n defineAttr(\"minute\");\n defineAttr(\"second\");\n defineAttr(\"isDate\");\n }\n })();\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 ICAL.Time.daysInMonth = function icaltime_daysInMonth(month, year) {\n var _daysInMonth = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n var days = 30;\n\n if (month < 1 || month > 12) return days;\n\n days = _daysInMonth[month];\n\n if (month == 2) {\n days += ICAL.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 ICAL.Time.isLeapYear = function 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 {ICAL.Time} The created instance with the calculated date\n */\n ICAL.Time.fromDayOfYear = function icaltime_fromDayOfYear(aDayOfYear, aYear) {\n var year = aYear;\n var doy = aDayOfYear;\n var tt = new ICAL.Time();\n tt.auto_normalize = false;\n var is_leap = (ICAL.Time.isLeapYear(year) ? 1 : 0);\n\n if (doy < 1) {\n year--;\n is_leap = (ICAL.Time.isLeapYear(year) ? 1 : 0);\n doy += ICAL.Time.daysInYearPassedMonth[is_leap][12];\n return ICAL.Time.fromDayOfYear(doy, year);\n } else if (doy > ICAL.Time.daysInYearPassedMonth[is_leap][12]) {\n is_leap = (ICAL.Time.isLeapYear(year) ? 1 : 0);\n doy -= ICAL.Time.daysInYearPassedMonth[is_leap][12];\n year++;\n return ICAL.Time.fromDayOfYear(doy, year);\n }\n\n tt.year = year;\n tt.isDate = true;\n\n for (var month = 11; month >= 0; month--) {\n if (doy > ICAL.Time.daysInYearPassedMonth[is_leap][month]) {\n tt.month = month + 1;\n tt.day = doy - ICAL.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 {ICAL.Time} The date/time instance\n */\n ICAL.Time.fromStringv2 = function fromString(str) {\n return new ICAL.Time({\n year: parseInt(str.substr(0, 4), 10),\n month: parseInt(str.substr(5, 2), 10),\n day: parseInt(str.substr(8, 2), 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 {ICAL.Time} The date/time instance\n */\n ICAL.Time.fromDateString = function(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 ICAL.Time({\n year: ICAL.helpers.strictParseInt(aValue.substr(0, 4)),\n month: ICAL.helpers.strictParseInt(aValue.substr(5, 2)),\n day: ICAL.helpers.strictParseInt(aValue.substr(8, 2)),\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 {ICAL.Property=} prop The property the date belongs to\n * @return {ICAL.Time} The date/time instance\n */\n ICAL.Time.fromDateTimeString = function(aValue, prop) {\n if (aValue.length < 19) {\n throw new Error(\n 'invalid date-time value: \"' + aValue + '\"'\n );\n }\n\n var zone;\n\n if (aValue[19] && aValue[19] === 'Z') {\n zone = 'Z';\n } else if (prop) {\n zone = prop.getParameter('tzid');\n }\n\n // 2012-10-10T10:10:10(Z)?\n var time = new ICAL.Time({\n year: ICAL.helpers.strictParseInt(aValue.substr(0, 4)),\n month: ICAL.helpers.strictParseInt(aValue.substr(5, 2)),\n day: ICAL.helpers.strictParseInt(aValue.substr(8, 2)),\n hour: ICAL.helpers.strictParseInt(aValue.substr(11, 2)),\n minute: ICAL.helpers.strictParseInt(aValue.substr(14, 2)),\n second: ICAL.helpers.strictParseInt(aValue.substr(17, 2)),\n timezone: zone\n });\n\n return time;\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 {ICAL.Property=} prop The property the date belongs to\n * @return {ICAL.Time} The date/time instance\n */\n ICAL.Time.fromString = function fromString(aValue, aProperty) {\n if (aValue.length > 10) {\n return ICAL.Time.fromDateTimeString(aValue, aProperty);\n } else {\n return ICAL.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 If true, the UTC values of the date will be used\n */\n ICAL.Time.fromJSDate = function fromJSDate(aDate, useUTC) {\n var tt = new ICAL.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 {ICAL.Timezone=} aZone Timezone this position occurs in\n */\n ICAL.Time.fromData = function fromData(aData, aZone) {\n var t = new ICAL.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 {ICAL.Time}\n */\n ICAL.Time.now = function icaltime_now() {\n return ICAL.Time.fromJSDate(new Date(), false);\n };\n\n /**\n * Returns the date on which ISO week number 1 starts.\n *\n * @see ICAL.Time#weekNumber\n * @param {Number} aYear The year to search in\n * @param {ICAL.Time.weekDay=} aWeekStart The week start weekday, used for calculation.\n * @return {ICAL.Time} The date on which week number 1 starts\n */\n ICAL.Time.weekOneStarts = function weekOneStarts(aYear, aWeekStart) {\n var t = ICAL.Time.fromData({\n year: aYear,\n month: 1,\n day: 1,\n isDate: true\n });\n\n var dow = t.dayOfWeek();\n var wkst = aWeekStart || ICAL.Time.DEFAULT_WEEK_START;\n if (dow > ICAL.Time.THURSDAY) {\n t.day += 7;\n }\n if (wkst > ICAL.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 ICAL.Time.getDominicalLetter = function(yr) {\n var LTRS = \"GFEDCBA\";\n var dom = (yr + (yr / 4 | 0) + (yr / 400 | 0) - (yr / 100 | 0) - 1) % 7;\n var isLeap = ICAL.Time.isLeapYear(yr);\n if (isLeap) {\n return LTRS[(dom + 6) % 7] + LTRS[dom];\n } else {\n return LTRS[dom];\n }\n };\n\n /**\n * January 1st, 1970 as an ICAL.Time.\n * @type {ICAL.Time}\n * @constant\n * @instance\n */\n ICAL.Time.epochTime = ICAL.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 ICAL.Time._cmp_attr = function _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 ICAL.Time.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 /**\n * The weekday, 1 = SUNDAY, 7 = SATURDAY. Access via\n * ICAL.Time.MONDAY, ICAL.Time.TUESDAY, ...\n *\n * @typedef {Number} weekDay\n * @memberof ICAL.Time\n */\n\n ICAL.Time.SUNDAY = 1;\n ICAL.Time.MONDAY = 2;\n ICAL.Time.TUESDAY = 3;\n ICAL.Time.WEDNESDAY = 4;\n ICAL.Time.THURSDAY = 5;\n ICAL.Time.FRIDAY = 6;\n ICAL.Time.SATURDAY = 7;\n\n /**\n * The default weekday for the WKST part.\n * @constant\n * @default ICAL.Time.MONDAY\n */\n ICAL.Time.DEFAULT_WEEK_START = ICAL.Time.MONDAY;\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, 2015 */\n\n\n\n(function() {\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 * @alias ICAL.VCardTime\n * @class\n * @extends {ICAL.Time}\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 {ICAL.Timezone|ICAL.UtcOffset} zone The timezone to use\n * @param {String} icaltype The type for this date/time object\n */\n ICAL.VCardTime = function(data, zone, icaltype) {\n this.wrappedJSObject = this;\n var time = this._time = Object.create(null);\n\n time.year = null;\n time.month = null;\n time.day = null;\n time.hour = null;\n time.minute = null;\n time.second = null;\n\n this.icaltype = icaltype || \"date-and-or-time\";\n\n this.fromData(data, zone);\n };\n ICAL.helpers.inherits(ICAL.Time, ICAL.VCardTime, /** @lends ICAL.VCardTime */ {\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 * The timezone. This can either be floating, UTC, or an instance of\n * ICAL.UtcOffset.\n * @type {ICAL.Timezone|ICAL.UtcOFfset}\n */\n zone: null,\n\n /**\n * Returns a clone of the vcard date/time object.\n *\n * @return {ICAL.VCardTime} The cloned object\n */\n clone: function() {\n return new ICAL.VCardTime(this._time, this.zone, this.icaltype);\n },\n\n _normalize: function() {\n return this;\n },\n\n /**\n * @inheritdoc\n */\n utcOffset: function() {\n if (this.zone instanceof ICAL.UtcOffset) {\n return this.zone.toSeconds();\n } else {\n return ICAL.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: function() {\n return ICAL.design.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: function toString() {\n var p2 = ICAL.helpers.pad2;\n var y = this.year, m = this.month, d = this.day;\n var h = this.hour, mm = this.minute, s = this.second;\n\n var hasYear = y !== null, hasMonth = m !== null, hasDay = d !== null;\n var hasHour = h !== null, hasMinute = mm !== null, hasSecond = s !== null;\n\n var datepart = (hasYear ? p2(y) + (hasMonth || hasDay ? '-' : '') : (hasMonth || hasDay ? '--' : '')) +\n (hasMonth ? p2(m) : '') +\n (hasDay ? '-' + p2(d) : '');\n var timepart = (hasHour ? p2(h) : '-') + (hasHour && hasMinute ? ':' : '') +\n (hasMinute ? p2(mm) : '') + (!hasHour && !hasMinute ? '-' : '') +\n (hasMinute && hasSecond ? ':' : '') +\n (hasSecond ? p2(s) : '');\n\n var zone;\n if (this.zone === ICAL.Timezone.utcTimezone) {\n zone = 'Z';\n } else if (this.zone instanceof ICAL.UtcOffset) {\n zone = this.zone.toString();\n } else if (this.zone === ICAL.Timezone.localTimezone) {\n zone = '';\n } else if (this.zone instanceof ICAL.Timezone) {\n var offset = ICAL.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 /**\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 {ICAL.VCardTime} The date/time instance\n */\n ICAL.VCardTime.fromDateAndOrTimeString = function(aValue, aIcalType) {\n function part(v, s, e) {\n return v ? ICAL.helpers.strictParseInt(v.substr(s, e)) : null;\n }\n var parts = aValue.split('T');\n var dt = parts[0], tmz = parts[1];\n var splitzone = tmz ? ICAL.design.vcard.value.time._splitZone(tmz) : [];\n var zone = splitzone[0], tm = splitzone[1];\n\n var stoi = ICAL.helpers.strictParseInt;\n var dtlen = dt ? dt.length : 0;\n var tmlen = tm ? tm.length : 0;\n\n var hasDashDate = dt && dt[0] == '-' && dt[1] == '-';\n var hasDashTime = tm && tm[0] == '-';\n\n var 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 = ICAL.Timezone.utcTimezone;\n } else if (zone && zone[3] == ':') {\n zone = ICAL.UtcOffset.fromString(zone);\n } else {\n zone = null;\n }\n\n return new ICAL.VCardTime(o, zone, aIcalType);\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, 2011-2015 */\n\n\n\n(function() {\n var DOW_MAP = {\n SU: ICAL.Time.SUNDAY,\n MO: ICAL.Time.MONDAY,\n TU: ICAL.Time.TUESDAY,\n WE: ICAL.Time.WEDNESDAY,\n TH: ICAL.Time.THURSDAY,\n FR: ICAL.Time.FRIDAY,\n SA: ICAL.Time.SATURDAY\n };\n\n var REVERSE_DOW_MAP = {};\n for (var key in DOW_MAP) {\n /* istanbul ignore else */\n if (DOW_MAP.hasOwnProperty(key)) {\n REVERSE_DOW_MAP[DOW_MAP[key]] = key;\n }\n }\n\n var COPY_PARTS = [\"BYSECOND\", \"BYMINUTE\", \"BYHOUR\", \"BYDAY\",\n \"BYMONTHDAY\", \"BYYEARDAY\", \"BYWEEKNO\",\n \"BYMONTH\", \"BYSETPOS\"];\n\n /**\n * @classdesc\n * This class represents the \"recur\" value type, with various calculation\n * and manipulation methods.\n *\n * @class\n * @alias ICAL.Recur\n * @param {Object} data An object with members of the recurrence\n * @param {ICAL.Recur.frequencyValues=} data.freq The frequency value\n * @param {Number=} data.interval The INTERVAL value\n * @param {ICAL.Time.weekDay=} data.wkst The week start value\n * @param {ICAL.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 ICAL.Recur = function icalrecur(data) {\n this.wrappedJSObject = this;\n this.parts = {};\n\n if (data && typeof(data) === 'object') {\n this.fromData(data);\n }\n };\n\n ICAL.Recur.prototype = {\n /**\n * An object holding the BY-parts of the recurrence rule\n * @type {Object}\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 {ICAL.Time.weekDay}\n * @default ICAL.Time.MONDAY\n */\n wkst: ICAL.Time.MONDAY,\n\n /**\n * The end of the recurrence\n * @type {?ICAL.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 {ICAL.Recur.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 * var recur = comp.getFirstPropertyValue('rrule');\n * var dtstart = comp.getFirstPropertyValue('dtstart');\n * var iter = recur.iterator(dtstart);\n * for (var 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 {ICAL.Time} aStart The item's start date\n * @return {ICAL.RecurIterator} The recurrence iterator\n */\n iterator: function(aStart) {\n return new ICAL.RecurIterator({\n rule: this,\n dtstart: aStart\n });\n },\n\n /**\n * Returns a clone of the recurrence object.\n *\n * @return {ICAL.Recur} The cloned object\n */\n clone: function clone() {\n return new ICAL.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: function 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: function 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: function addPart(aType, aValue) {\n var 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: function 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: function getComponent(aType) {\n var 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 {ICAL.Time} aStartTime The start of the event series\n * @param {ICAL.Time} aRecurrenceId The date of the last occurrence\n * @return {ICAL.Time} The next occurrence after\n */\n getNextOccurrence: function getNextOccurrence(aStartTime, aRecurrenceId) {\n var iter = this.iterator(aStartTime);\n var next, cdt;\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 {ICAL.Recur.frequencyValues=} data.freq The frequency value\n * @param {Number=} data.interval The INTERVAL value\n * @param {ICAL.Time.weekDay=} data.wkst The week start value\n * @param {ICAL.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: function(data) {\n for (var key in data) {\n var 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 = ICAL.Recur.icalDayToNumericDay(this.wkst);\n }\n\n if (this.until && !(this.until instanceof ICAL.Time)) {\n this.until = ICAL.Time.fromString(this.until);\n }\n },\n\n /**\n * The jCal representation of this recurrence type.\n * @return {Object}\n */\n toJSON: function() {\n var 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 (var k in this.parts) {\n /* istanbul ignore if */\n if (!this.parts.hasOwnProperty(k)) {\n continue;\n }\n var kparts = this.parts[k];\n if (Array.isArray(kparts) && kparts.length == 1) {\n res[k.toLowerCase()] = kparts[0];\n } else {\n res[k.toLowerCase()] = ICAL.helpers.clone(this.parts[k]);\n }\n }\n\n if (this.until) {\n res.until = this.until.toString();\n }\n if ('wkst' in this && this.wkst !== ICAL.Time.DEFAULT_WEEK_START) {\n res.wkst = ICAL.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: function icalrecur_toString() {\n // TODO retain order\n var 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 (var k in this.parts) {\n /* istanbul ignore else */\n if (this.parts.hasOwnProperty(k)) {\n str += \";\" + k + \"=\" + this.parts[k];\n }\n }\n if (this.until) {\n str += ';UNTIL=' + this.until.toICALString();\n }\n if ('wkst' in this && this.wkst !== ICAL.Time.DEFAULT_WEEK_START) {\n str += ';WKST=' + ICAL.Recur.numericDayToIcalDay(this.wkst);\n }\n return str;\n }\n };\n\n function parseNumericValue(type, min, max, value) {\n var result = value;\n\n if (value[0] === '+') {\n result = value.substr(1);\n }\n\n result = ICAL.helpers.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\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 {ICAL.Time.weekDay=} aWeekStart\n * The week start weekday, defaults to SUNDAY\n * @return {Number} Numeric value of given day\n */\n ICAL.Recur.icalDayToNumericDay = function toNumericDay(string, aWeekStart) {\n //XXX: this is here so we can deal\n // with possibly invalid string values.\n var firstDow = aWeekStart || ICAL.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 {ICAL.Time.weekDay=} aWeekStart\n * The week start weekday, defaults to SUNDAY\n * @return {String} The ICAL day value, e.g SU,MO,...\n */\n ICAL.Recur.numericDayToIcalDay = function toIcalDay(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 var firstDow = aWeekStart || ICAL.Time.SUNDAY;\n var dow = (num + firstDow - ICAL.Time.SUNDAY);\n if (dow > 7) {\n dow -= 7;\n }\n return REVERSE_DOW_MAP[dow];\n };\n\n var VALID_DAY_NAMES = /^(SU|MO|TU|WE|TH|FR|SA)$/;\n var VALID_BYDAY_PART = /^([+-])?(5[0-3]|[1-4][0-9]|[1-9])?(SU|MO|TU|WE|TH|FR|SA)$/;\n\n /**\n * Possible frequency values for the FREQ part\n * (YEARLY, MONTHLY, WEEKLY, DAILY, HOURLY, MINUTELY, SECONDLY)\n *\n * @typedef {String} frequencyValues\n * @memberof ICAL.Recur\n */\n\n var ALLOWED_FREQ = ['SECONDLY', 'MINUTELY', 'HOURLY',\n 'DAILY', 'WEEKLY', 'MONTHLY', 'YEARLY'];\n\n var 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 = ICAL.helpers.strictParseInt(value);\n },\n\n INTERVAL: function(value, dict, fmtIcal) {\n dict.interval = ICAL.helpers.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 = ICAL.design.icalendar.value['date-time'].fromICAL(value);\n } else {\n dict.until = ICAL.design.icalendar.value.date.fromICAL(value);\n }\n if (!fmtIcal) {\n dict.until = ICAL.Time.fromString(dict.until);\n }\n },\n\n WKST: function(value, dict, fmtIcal) {\n if (VALID_DAY_NAMES.test(value)) {\n dict.wkst = ICAL.Recur.icalDayToNumericDay(value);\n } else {\n throw new Error('invalid WKST value \"' + value + '\"');\n }\n }\n };\n\n var partDesign = {\n BYSECOND: parseNumericValue.bind(this, 'BYSECOND', 0, 60),\n BYMINUTE: parseNumericValue.bind(this, 'BYMINUTE', 0, 59),\n BYHOUR: parseNumericValue.bind(this, '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(this, 'BYMONTHDAY', -31, 31),\n BYYEARDAY: parseNumericValue.bind(this, 'BYYEARDAY', -366, 366),\n BYWEEKNO: parseNumericValue.bind(this, 'BYWEEKNO', -53, 53),\n BYMONTH: parseNumericValue.bind(this, 'BYMONTH', 1, 12),\n BYSETPOS: parseNumericValue.bind(this, 'BYSETPOS', -366, 366)\n };\n\n\n /**\n * Creates a new {@link ICAL.Recur} instance from the passed string.\n *\n * @param {String} string The string to parse\n * @return {ICAL.Recur} The created recurrence instance\n */\n ICAL.Recur.fromString = function(string) {\n var data = ICAL.Recur._stringToData(string, false);\n return new ICAL.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 {ICAL.Recur.frequencyValues=} aData.freq The frequency value\n * @param {Number=} aData.interval The INTERVAL value\n * @param {ICAL.Time.weekDay=} aData.wkst The week start value\n * @param {ICAL.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 ICAL.Recur.fromData = function(aData) {\n return new ICAL.Recur(aData);\n };\n\n /**\n * Converts a recurrence string to a data object, suitable for the fromData\n * method.\n *\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 {ICAL.Recur} The recurrence instance\n */\n ICAL.Recur._stringToData = function(string, fmtIcal) {\n var dict = Object.create(null);\n\n // split is slower in FF but fast enough.\n // v8 however this is faster then manual split?\n var values = string.split(';');\n var len = values.length;\n\n for (var i = 0; i < len; i++) {\n var parts = values[i].split('=');\n var ucname = parts[0].toUpperCase();\n var lcname = parts[0].toLowerCase();\n var name = (fmtIcal ? lcname : ucname);\n var value = parts[1];\n\n if (ucname in partDesign) {\n var partArr = value.split(',');\n var partArrIdx = 0;\n var partArrLen = partArr.length;\n\n for (; partArrIdx < partArrLen; partArrIdx++) {\n partArr[partArrIdx] = partDesign[ucname](partArr[partArrIdx]);\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/* 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, 2011-2015 */\n\n\n/**\n * This symbol is further described later on\n * @ignore\n */\nICAL.RecurIterator = (function() {\n\n /**\n * @classdesc\n * An iterator for a single recurrence rule. This class usually doesn't have\n * to be instanciated directly, the convenience method\n * {@link ICAL.Recur#iterator} can be used.\n *\n * @description\n * The options object may contain additional members when resuming iteration from a previous run\n *\n * @description\n * The options object may contain additional members when resuming iteration\n * from a previous run.\n *\n * @class\n * @alias ICAL.RecurIterator\n * @param {Object} options The iterator options\n * @param {ICAL.Recur} options.rule The rule to iterate.\n * @param {ICAL.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 function icalrecur_iterator(options) {\n this.fromData(options);\n }\n\n icalrecur_iterator.prototype = {\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 {ICAL.Recur}\n */\n rule: null,\n\n /**\n * The start date of the event being iterated.\n * @type {ICAL.Time}\n */\n dtstart: null,\n\n /**\n * The last occurrence that was returned from the\n * {@link ICAL.RecurIterator#next} method.\n * @type {ICAL.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 {ICAL.Recur} options.rule The rule to iterate.\n * @param {ICAL.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: function(options) {\n this.rule = ICAL.helpers.formatClassType(options.rule, ICAL.Recur);\n\n if (!this.rule) {\n throw new Error('iterator requires a (ICAL.Recur) rule');\n }\n\n this.dtstart = ICAL.helpers.formatClassType(options.dtstart, ICAL.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 = ICAL.helpers.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 = ICAL.helpers.formatClassType(options.last, ICAL.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 this.init();\n }\n },\n\n /**\n * Intialize the iterator\n * @private\n */\n init: function icalrecur_iterator_init() {\n this.initialized = true;\n this.last = this.dtstart.clone();\n var 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 var bydayParts = this.ruleDayOfWeek(parts.BYDAY[0], this.rule.wkst);\n var pos = bydayParts[0];\n var dow = bydayParts[1];\n var 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 var dayName = ICAL.Recur.numericDayToIcalDay(this.dtstart.dayOfWeek());\n parts.BYDAY = [dayName];\n }\n }\n\n if (this.rule.freq == \"YEARLY\") {\n for (;;) {\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 this._nextByYearDay();\n }\n\n if (this.rule.freq == \"MONTHLY\" && this.has_by_data(\"BYDAY\")) {\n var tempLast = null;\n var initLast = this.last.clone();\n var daysInMonth = ICAL.Time.daysInMonth(this.last.month, this.last.year);\n\n // Check every weekday in BYDAY with relative dow and pos.\n for (var i in this.by_data.BYDAY) {\n /* istanbul ignore if */\n if (!this.by_data.BYDAY.hasOwnProperty(i)) {\n continue;\n }\n this.last = initLast.clone();\n var bydayParts = this.ruleDayOfWeek(this.by_data.BYDAY[i]);\n var pos = bydayParts[0];\n var dow = bydayParts[1];\n var 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 = ICAL.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\n } else if (this.has_by_data(\"BYMONTHDAY\")) {\n if (this.last.day < 0) {\n var daysInMonth = ICAL.Time.daysInMonth(this.last.month, this.last.year);\n this.last.day = daysInMonth + this.last.day + 1;\n }\n }\n\n },\n\n /**\n * Retrieve the next occurrence from the iterator.\n * @return {ICAL.Time}\n */\n next: function icalrecur_iterator_next() {\n var 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\n //XXX: right now this is just a flag and has no impact\n // we can simplify the above case to check for completed later.\n this.completed = true;\n\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\n var 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 // TODO is this valid?\n if (this.last.compare(before) == 0) {\n throw new Error(\"Same occurrence found twice, protecting \" +\n \"you from death by recursion\");\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: function next_second() {\n return this.next_generic(\"BYSECOND\", \"SECONDLY\", \"second\", \"minute\");\n },\n\n increment_second: function increment_second(inc) {\n return this.increment_generic(inc, \"second\", 60, \"minute\");\n },\n\n next_minute: function next_minute() {\n return this.next_generic(\"BYMINUTE\", \"MINUTELY\",\n \"minute\", \"hour\", \"next_second\");\n },\n\n increment_minute: function increment_minute(inc) {\n return this.increment_generic(inc, \"minute\", 60, \"hour\");\n },\n\n next_hour: function next_hour() {\n return this.next_generic(\"BYHOUR\", \"HOURLY\", \"hour\",\n \"monthday\", \"next_minute\");\n },\n\n increment_hour: function increment_hour(inc) {\n this.increment_generic(inc, \"hour\", 24, \"monthday\");\n },\n\n next_day: function next_day() {\n var has_by_day = (\"BYDAY\" in this.by_data);\n var 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: function next_week() {\n var 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 var idx = ++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 var 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: function(year, month, rules) {\n var daysInMonth = ICAL.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 var newRules = [];\n\n var ruleIdx = 0;\n var len = rules.length;\n var rule;\n\n for (; ruleIdx < len; ruleIdx++) {\n rule = rules[ruleIdx];\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: function(isInit) {\n var byMonthDay; // setup in initMonth\n var byDay = this.by_data.BYDAY;\n\n var date;\n var dateIdx = 0;\n var dateLen; // setup in initMonth\n var dayLen = byDay.length;\n\n // we are not valid by default\n var dataIsValid = 0;\n\n var daysInMonth;\n var 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 var lastDay = this.last.day;\n\n function initMonth() {\n daysInMonth = ICAL.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 var 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 var next = byMonthDay[dateIdx++];\n\n // this logic is dependant 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 (var dayIdx = 0; dayIdx < dayLen; dayIdx++) {\n var parts = this.ruleDayOfWeek(byDay[dayIdx]);\n var pos = parts[0];\n var 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: function next_month() {\n var this_freq = (this.rule.freq == \"MONTHLY\");\n var 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 var daysInMonth = ICAL.Time.daysInMonth(this.last.month, this.last.year);\n var setpos = 0;\n var setpos_total = 0;\n\n if (this.has_by_data(\"BYSETPOS\")) {\n var last_day = this.last.day;\n for (var 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 for (var 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 }\n\n var daysInMonth = ICAL.Time.daysInMonth(this.last.month, this.last.year);\n var 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\n } else {\n this.increment_month();\n var daysInMonth = ICAL.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: function next_weekday_by_week() {\n var 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 var tt = new ICAL.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 var coded_day = this.by_data.BYDAY[this.by_indices.BYDAY];\n var parts = this.ruleDayOfWeek(coded_day);\n var 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 var 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 var next = ICAL.Time.fromDayOfYear(startOfWeek + dow,\n 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: function next_year() {\n\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 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: function _nextByYearDay() {\n var doy = this.days[this.days_index];\n var 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 var next = ICAL.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 {ICAL.Time.weekDay=} aWeekStart The week start weekday\n * @return [pos, numericDow] (eg: [1, 3]) numericDow is relative to aWeekStart\n */\n ruleDayOfWeek: function ruleDayOfWeek(dow, aWeekStart) {\n var matches = dow.match(/([+-]?[0-9])?(MO|TU|WE|TH|FR|SA|SU)/);\n if (matches) {\n var pos = parseInt(matches[1] || 0, 10);\n dow = ICAL.Recur.icalDayToNumericDay(matches[2], aWeekStart);\n return [pos, dow];\n } else {\n return [0, 0];\n }\n },\n\n next_generic: function next_generic(aRuleType, aInterval, aDateAttr,\n aFollowingAttr, aPreviousIncr) {\n var has_by_rule = (aRuleType in this.by_data);\n var this_freq = (this.rule.freq == aInterval);\n var 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 var idx = this.by_indices[aRuleType];\n var 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: function increment_monthday(inc) {\n for (var i = 0; i < inc; i++) {\n var daysInMonth = ICAL.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: function 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 var years = ICAL.helpers.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\n increment_year: function increment_year(inc) {\n this.last.year += inc;\n },\n\n increment_generic: function increment_generic(inc, aDateAttr,\n aFactor, aNextIncrement) {\n this.last[aDateAttr] += inc;\n var nextunit = ICAL.helpers.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: function has_by_data(aRuleType) {\n return (aRuleType in this.rule.parts);\n },\n\n expand_year_days: function expand_year_days(aYear) {\n var t = new ICAL.Time();\n this.days = [];\n\n // We need our own copy with a few keys set\n var parts = {};\n var rules = [\"BYDAY\", \"BYWEEKNO\", \"BYMONTHDAY\", \"BYMONTH\", \"BYYEARDAY\"];\n for (var p in rules) {\n /* istanbul ignore else */\n if (rules.hasOwnProperty(p)) {\n var part = rules[p];\n if (part in this.rule.parts) {\n parts[part] = this.rule.parts[part];\n }\n }\n }\n\n if (\"BYMONTH\" in parts && \"BYWEEKNO\" in parts) {\n var valid = 1;\n var validWeeks = {};\n t.year = aYear;\n t.isDate = true;\n\n for (var monthIdx = 0; monthIdx < this.by_data.BYMONTH.length; monthIdx++) {\n var month = this.by_data.BYMONTH[monthIdx];\n t.month = month;\n t.day = 1;\n var first_week = t.weekNumber(this.rule.wkst);\n t.day = ICAL.Time.daysInMonth(month, aYear);\n var 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 (var weekIdx = 0; weekIdx < this.by_data.BYWEEKNO.length && valid; weekIdx++) {\n var 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 var partCount = Object.keys(parts).length;\n\n if (partCount == 0) {\n var 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 (var monthkey in this.by_data.BYMONTH) {\n /* istanbul ignore if */\n if (!this.by_data.BYMONTH.hasOwnProperty(monthkey)) {\n continue;\n }\n var t2 = this.dtstart.clone();\n t2.year = aYear;\n t2.month = this.by_data.BYMONTH[monthkey];\n t2.isDate = true;\n this.days.push(t2.dayOfYear());\n }\n } else if (partCount == 1 && \"BYMONTHDAY\" in parts) {\n for (var monthdaykey in this.by_data.BYMONTHDAY) {\n /* istanbul ignore if */\n if (!this.by_data.BYMONTHDAY.hasOwnProperty(monthdaykey)) {\n continue;\n }\n var t3 = this.dtstart.clone();\n var day_ = this.by_data.BYMONTHDAY[monthdaykey];\n if (day_ < 0) {\n var daysInMonth = ICAL.Time.daysInMonth(t3.month, aYear);\n day_ = day_ + daysInMonth + 1;\n }\n t3.day = day_;\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 (var monthkey in this.by_data.BYMONTH) {\n /* istanbul ignore if */\n if (!this.by_data.BYMONTH.hasOwnProperty(monthkey)) {\n continue;\n }\n var month_ = this.by_data.BYMONTH[monthkey];\n var daysInMonth = ICAL.Time.daysInMonth(month_, aYear);\n for (var monthdaykey in this.by_data.BYMONTHDAY) {\n /* istanbul ignore if */\n if (!this.by_data.BYMONTHDAY.hasOwnProperty(monthdaykey)) {\n continue;\n }\n var day_ = this.by_data.BYMONTHDAY[monthdaykey];\n if (day_ < 0) {\n day_ = day_ + daysInMonth + 1;\n }\n t.day = day_;\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) {\n // TODO unimplemented in libical\n } else if (partCount == 2 &&\n \"BYWEEKNO\" in parts &&\n \"BYMONTHDAY\" in parts) {\n // TODO unimplemented in libical\n } 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 (var monthkey in this.by_data.BYMONTH) {\n /* istanbul ignore if */\n if (!this.by_data.BYMONTH.hasOwnProperty(monthkey)) {\n continue;\n }\n var month = this.by_data.BYMONTH[monthkey];\n var daysInMonth = ICAL.Time.daysInMonth(month, aYear);\n\n t.year = aYear;\n t.month = this.by_data.BYMONTH[monthkey];\n t.day = 1;\n t.isDate = true;\n\n var first_dow = t.dayOfWeek();\n var doy_offset = t.dayOfYear() - 1;\n\n t.day = daysInMonth;\n var last_dow = t.dayOfWeek();\n\n if (this.has_by_data(\"BYSETPOS\")) {\n var set_pos_counter = 0;\n var by_month_day = [];\n for (var 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 (var 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 (var daycodedkey in this.by_data.BYDAY) {\n /* istanbul ignore if */\n if (!this.by_data.BYDAY.hasOwnProperty(daycodedkey)) {\n continue;\n }\n var coded_day = this.by_data.BYDAY[daycodedkey];\n var bydayParts = this.ruleDayOfWeek(coded_day);\n var pos = bydayParts[0];\n var dow = bydayParts[1];\n var month_day;\n\n var first_matching_day = ((dow + 7 - first_dow) % 7) + 1;\n var last_matching_day = daysInMonth - ((last_dow + 7 - dow) % 7);\n\n if (pos == 0) {\n for (var 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 var expandedDays = this.expand_by_day(aYear);\n\n for (var daykey in expandedDays) {\n /* istanbul ignore if */\n if (!expandedDays.hasOwnProperty(daykey)) {\n continue;\n }\n var day = expandedDays[daykey];\n var tt = ICAL.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 var expandedDays = this.expand_by_day(aYear);\n\n for (var daykey in expandedDays) {\n /* istanbul ignore if */\n if (!expandedDays.hasOwnProperty(daykey)) {\n continue;\n }\n var day = expandedDays[daykey];\n var tt = ICAL.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 var expandedDays = this.expand_by_day(aYear);\n\n for (var daykey in expandedDays) {\n /* istanbul ignore if */\n if (!expandedDays.hasOwnProperty(daykey)) {\n continue;\n }\n var day = expandedDays[daykey];\n var tt = ICAL.Time.fromDayOfYear(day, aYear);\n var 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) {\n // TODO unimplemted in libical\n } else if (partCount == 1 && \"BYYEARDAY\" in parts) {\n this.days = this.days.concat(this.by_data.BYYEARDAY);\n } else {\n this.days = [];\n }\n return 0;\n },\n\n expand_by_day: function expand_by_day(aYear) {\n\n var days_list = [];\n var tmp = this.last.clone();\n\n tmp.year = aYear;\n tmp.month = 1;\n tmp.day = 1;\n tmp.isDate = true;\n\n var start_dow = tmp.dayOfWeek();\n\n tmp.month = 12;\n tmp.day = 31;\n tmp.isDate = true;\n\n var end_dow = tmp.dayOfWeek();\n var end_year_day = tmp.dayOfYear();\n\n for (var daykey in this.by_data.BYDAY) {\n /* istanbul ignore if */\n if (!this.by_data.BYDAY.hasOwnProperty(daykey)) {\n continue;\n }\n var day = this.by_data.BYDAY[daykey];\n var parts = this.ruleDayOfWeek(day);\n var pos = parts[0];\n var dow = parts[1];\n\n if (pos == 0) {\n var tmp_start_doy = ((dow + 7 - start_dow) % 7) + 1;\n\n for (var doy = tmp_start_doy; doy <= end_year_day; doy += 7) {\n days_list.push(doy);\n }\n\n } else if (pos > 0) {\n var 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 var 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: function is_day_in_byday(tt) {\n for (var daykey in this.by_data.BYDAY) {\n /* istanbul ignore if */\n if (!this.by_data.BYDAY.hasOwnProperty(daykey)) {\n continue;\n }\n var day = this.by_data.BYDAY[daykey];\n var parts = this.ruleDayOfWeek(day);\n var pos = parts[0];\n var dow = parts[1];\n var 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 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: function check_set_position(aPos) {\n if (this.has_by_data('BYSETPOS')) {\n var 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: function icalrecur_sort_byday_rules(aRules) {\n for (var i = 0; i < aRules.length; i++) {\n for (var j = 0; j < i; j++) {\n var one = this.ruleDayOfWeek(aRules[j], this.rule.wkst)[1];\n var two = this.ruleDayOfWeek(aRules[i], this.rule.wkst)[1];\n\n if (one > two) {\n var tmp = aRules[i];\n aRules[i] = aRules[j];\n aRules[j] = tmp;\n }\n }\n }\n },\n\n check_contract_restriction: function check_contract_restriction(aRuleType, v) {\n var indexMapValue = icalrecur_iterator._indexMap[aRuleType];\n var ruleMapValue = icalrecur_iterator._expandMap[this.rule.freq][indexMapValue];\n var pass = false;\n\n if (aRuleType in this.by_data &&\n ruleMapValue == icalrecur_iterator.CONTRACT) {\n\n var ruleType = this.by_data[aRuleType];\n\n for (var bydatakey in ruleType) {\n /* istanbul ignore else */\n if (ruleType.hasOwnProperty(bydatakey)) {\n if (ruleType[bydatakey] == v) {\n pass = true;\n break;\n }\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: function check_contracting_rules() {\n var dow = this.last.dayOfWeek();\n var weekNo = this.last.weekNumber(this.rule.wkst);\n var 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\", ICAL.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: function setup_defaults(aRuleType, req, deftime) {\n var indexMapValue = icalrecur_iterator._indexMap[aRuleType];\n var ruleMapValue = icalrecur_iterator._expandMap[this.rule.freq][indexMapValue];\n\n if (ruleMapValue != icalrecur_iterator.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: function() {\n var 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 icalrecur_iterator._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 icalrecur_iterator._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 icalrecur_iterator.UNKNOWN = 0;\n icalrecur_iterator.CONTRACT = 1;\n icalrecur_iterator.EXPAND = 2;\n icalrecur_iterator.ILLEGAL = 3;\n\n return icalrecur_iterator;\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, 2011-2015 */\n\n\n/**\n * This symbol is further described later on\n * @ignore\n */\nICAL.RecurExpansion = (function() {\n function formatTime(item) {\n return ICAL.helpers.formatClassType(item, ICAL.Time);\n }\n\n function compareTime(a, b) {\n return a.compare(b);\n }\n\n function isRecurringComponent(comp) {\n return comp.hasProperty('rdate') ||\n comp.hasProperty('rrule') ||\n comp.hasProperty('recurrence-id');\n }\n\n /**\n * @classdesc\n * Primary class for expanding recurring rules. Can take multiple rrules,\n * rdates, exdate(s) and iterate (in order) over each next occurrence.\n *\n * Once initialized this class can also be serialized saved and continue\n * iteration from the last point.\n *\n * NOTE: it is intended that this class is to be used\n * with ICAL.Event which handles recurrence 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\n * // so it is a good idea to limit the scope\n * // of the iterations 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\n * // changed you will need to rebuild the\n * // class and start over. This only works\n * // when the component's recurrence info is the same.\n * var expand = new ICAL.RecurExpansion(JSON.parse(json));\n *\n * @description\n * The options object can be filled with the specified initial values. It can\n * also contain additional members, as a result of serializing a previous\n * expansion state, as shown in the example.\n *\n * @class\n * @alias ICAL.RecurExpansion\n * @param {Object} options\n * Recurrence expansion options\n * @param {ICAL.Time} options.dtstart\n * Start time of the event\n * @param {ICAL.Component=} options.component\n * Component for expansion, required if not resuming.\n */\n function RecurExpansion(options) {\n this.ruleDates = [];\n this.exDates = [];\n this.fromData(options);\n }\n\n RecurExpansion.prototype = {\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 {ICAL.RecurIterator[]}\n * @private\n */\n ruleIterators: null,\n\n /**\n * Array of rdate instances.\n *\n * @type {ICAL.Time[]}\n * @private\n */\n ruleDates: null,\n\n /**\n * Array of exdate instances.\n *\n * @type {ICAL.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 {ICAL.Time}\n * @private\n */\n exDate: null,\n\n /**\n * Current additional date.\n *\n * @type {ICAL.Time}\n * @private\n */\n ruleDate: null,\n\n /**\n * Start date of recurring rules.\n *\n * @type {ICAL.Time}\n */\n dtstart: null,\n\n /**\n * Last expanded time\n *\n * @type {ICAL.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 {ICAL.Time} options.dtstart\n * Start time of the event\n * @param {ICAL.Component=} options.component\n * Component for expansion, required if not resuming.\n */\n fromData: function(options) {\n var start = ICAL.helpers.formatClassType(options.dtstart, ICAL.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 = formatTime(options.last) || 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 ICAL.helpers.formatClassType(item, ICAL.RecurIterator);\n });\n\n this.ruleDateInc = options.ruleDateInc;\n this.exDateInc = options.exDateInc;\n\n if (options.ruleDates) {\n this.ruleDates = options.ruleDates.map(formatTime);\n this.ruleDate = this.ruleDates[this.ruleDateInc];\n }\n\n if (options.exDates) {\n this.exDates = options.exDates.map(formatTime);\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 {ICAL.Time}\n */\n next: function() {\n var iter;\n var ruleOfDay;\n var next;\n var compare;\n\n var maxTries = 500;\n var currentTry = 0;\n\n while (true) {\n if (currentTry++ > maxTries) {\n throw new Error(\n 'max tries have occured, rule may be impossible to forfill.'\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: function() {\n function toJSON(item) {\n return item.toJSON();\n }\n\n var 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 {ICAL.Component} component The component to search in\n * @param {String} propertyName The property name to search for\n * @return {ICAL.Time[]} The extracted dates.\n */\n _extractDates: function(component, propertyName) {\n function handleProp(prop) {\n idx = ICAL.helpers.binsearchInsert(\n result,\n prop,\n compareTime\n );\n\n // ordered insert\n result.splice(idx, 0, prop);\n }\n\n var result = [];\n var props = component.getAllProperties(propertyName);\n var len = props.length;\n var i = 0;\n var prop;\n\n var idx;\n\n for (; i < len; i++) {\n props[i].getValues().forEach(handleProp);\n }\n\n return result;\n },\n\n /**\n * Initialize the recurrence expansion.\n *\n * @private\n * @param {ICAL.Component} component The component to initialize from.\n */\n _init: function(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 (!isRecurringComponent(component)) {\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 = ICAL.helpers.binsearchInsert(\n this.ruleDates,\n this.last,\n compareTime\n );\n }\n\n this.ruleDate = this.ruleDates[this.ruleDateInc];\n }\n\n if (component.hasProperty('rrule')) {\n var rules = component.getAllProperties('rrule');\n var i = 0;\n var len = rules.length;\n\n var rule;\n var 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 = ICAL.helpers.binsearchInsert(\n this.exDates,\n this.last,\n compareTime\n );\n\n this.exDate = this.exDates[this.exDateInc];\n }\n },\n\n /**\n * Advance to the next exdate\n * @private\n */\n _nextExDay: function() {\n this.exDate = this.exDates[++this.exDateInc];\n },\n\n /**\n * Advance to the next rule date\n * @private\n */\n _nextRuleDay: function() {\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 {?ICAL.RecurIterator} Found iterator.\n */\n _nextRecurrenceIter: function() {\n var iters = this.ruleIterators;\n\n if (iters.length === 0) {\n return null;\n }\n\n var len = iters.length;\n var iter;\n var iterTime;\n var iterIdx = 0;\n var 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 return RecurExpansion;\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, 2011-2015 */\n\n\n/**\n * This symbol is further described later on\n * @ignore\n */\nICAL.Event = (function() {\n\n /**\n * @classdesc\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 * @class\n * @alias ICAL.Event\n * @param {ICAL.Component=} component The ICAL.Component to base this event on\n * @param {Object} options Options for this event\n * @param {Boolean} options.strictExceptions\n * When true, will verify exceptions are related by their UUID\n * @param {Array<ICAL.Component|ICAL.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 function Event(component, options) {\n if (!(component instanceof ICAL.Component)) {\n options = component;\n component = null;\n }\n\n if (component) {\n this.component = component;\n } else {\n this.component = new ICAL.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 Event.prototype = {\n\n THISANDFUTURE: 'THISANDFUTURE',\n\n /**\n * List of related event exceptions.\n *\n * @type {ICAL.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 {ICAL.Component|ICAL.Event} obj Component or event\n */\n relateException: function(obj) {\n if (this.isRecurrenceException()) {\n throw new Error('cannot relate exception to exceptions');\n }\n\n if (obj instanceof ICAL.Component) {\n obj = new ICAL.Event(obj);\n }\n\n if (this.strictExceptions && obj.uid !== this.uid) {\n throw new Error('attempted to relate unrelated exception');\n }\n\n var 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 var item = [\n obj.recurrenceId.toUnixTime(), id\n ];\n\n // we keep them sorted so we can find the nearest\n // value later on...\n var idx = ICAL.helpers.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: function() {\n if (!this.component.hasProperty('recurrence-id')) {\n return false;\n }\n\n var range = this.component.getFirstProperty('recurrence-id').getParameter('range');\n return range === this.THISANDFUTURE;\n },\n\n /**\n * Finds the range exception nearest to the given date.\n *\n * @param {ICAL.Time} time usually an occurrence time of an event\n * @return {?ICAL.Event} the related event/exception or null\n */\n findRangeException: function(time) {\n if (!this.rangeExceptions.length) {\n return null;\n }\n\n var utc = time.toUnixTime();\n var idx = ICAL.helpers.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 var rangeItem = this.rangeExceptions[idx];\n\n /* istanbul ignore next: sanity check only */\n if (utc < rangeItem[0]) {\n return null;\n }\n\n return rangeItem[1];\n },\n\n /**\n * This object is returned by {@link ICAL.Event#getOccurrenceDetails getOccurrenceDetails}\n *\n * @typedef {Object} occurrenceDetails\n * @memberof ICAL.Event\n * @property {ICAL.Time} recurrenceId The passed in recurrence id\n * @property {ICAL.Event} item The occurrence\n * @property {ICAL.Time} startDate The start of the occurrence\n * @property {ICAL.Time} endDate The end of the occurrence\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 {ICAL.Time} occurrence time occurrence\n * @return {ICAL.Event.occurrenceDetails} Information about the occurrence\n */\n getOccurrenceDetails: function(occurrence) {\n var id = occurrence.toString();\n var utcId = occurrence.convertToZone(ICAL.Timezone.utcTimezone).toString();\n var item;\n var 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 var rangeExceptionId = this.findRangeException(\n occurrence\n );\n var end;\n\n if (rangeExceptionId) {\n var 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 var startDiff = this._rangeExceptionCache[rangeExceptionId];\n\n if (!startDiff) {\n var original = exception.recurrenceId.clone();\n var 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 var 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 {ICAL.Time} startTime Starting point for expansion\n * @return {ICAL.RecurExpansion} Expansion object\n */\n iterator: function(startTime) {\n return new ICAL.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: function() {\n var 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: function() {\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.<ICAL.Recur.frequencyValues, Boolean>}\n * Object of recurrence flags\n */\n getRecurrenceTypes: function() {\n var rules = this.component.getAllProperties('rrule');\n var i = 0;\n var len = rules.length;\n var result = Object.create(null);\n\n for (; i < len; i++) {\n var 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 {ICAL.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 {ICAL.Time}\n */\n get endDate() {\n var endDate = this._firstProp('dtend');\n if (!endDate) {\n var 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 {ICAL.Duration}\n */\n get duration() {\n var 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 return this._setProp('location', value);\n },\n\n /**\n * The attendees in the event\n * @type {ICAL.Property[]}\n * @readonly\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 /**\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 {ICAL.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 {ICAL.Time} time The time to set\n */\n _setTime: function(propName, time) {\n var prop = this.component.getFirstProperty(propName);\n\n if (!prop) {\n prop = new ICAL.Property(propName);\n this.component.addProperty(prop);\n }\n\n // utc and local don't get a tzid\n if (\n time.zone === ICAL.Timezone.localTimezone ||\n time.zone === ICAL.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: function(name, value) {\n this.component.updatePropertyWithValue(name, value);\n },\n\n _firstProp: function(name) {\n return this.component.getFirstPropertyValue(name);\n },\n\n /**\n * The string representation of this event.\n * @return {String}\n */\n toString: function() {\n return this.component.toString();\n }\n\n };\n\n function 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 return Event;\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, 2011-2015 */\n\n\n/**\n * This symbol is further described later on\n * @ignore\n */\nICAL.ComponentParser = (function() {\n /**\n * @classdesc\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 * @class\n * @alias ICAL.ComponentParser\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 function ComponentParser(options) {\n if (typeof(options) === 'undefined') {\n options = {};\n }\n\n var key;\n for (key in options) {\n /* istanbul ignore else */\n if (options.hasOwnProperty(key)) {\n this[key] = options[key];\n }\n }\n }\n\n ComponentParser.prototype = {\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: /* istanbul 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: /* istanbul ignore next */ function(err) {},\n\n /**\n * Fired when a top level component (VTIMEZONE) is found\n *\n * @callback\n * @param {ICAL.Timezone} component Timezone object\n */\n ontimezone: /* istanbul ignore next */ function(component) {},\n\n /**\n * Fired when a top level component (VEVENT) is found.\n *\n * @callback\n * @param {ICAL.Event} component Top level component\n */\n onevent: /* istanbul 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 {ICAL.Component|String|Object} ical The component to process,\n * either in its final form, as a jCal Object, or string representation\n */\n process: function(ical) {\n //TODO: this is sync now in the future we will have a incremental parser.\n if (typeof(ical) === 'string') {\n ical = ICAL.parse(ical);\n }\n\n if (!(ical instanceof ICAL.Component)) {\n ical = new ICAL.Component(ical);\n }\n\n var components = ical.getAllSubcomponents();\n var i = 0;\n var len = components.length;\n var component;\n\n for (; i < len; i++) {\n component = components[i];\n\n switch (component.name) {\n case 'vtimezone':\n if (this.parseTimezone) {\n var tzid = component.getFirstPropertyValue('tzid');\n if (tzid) {\n this.ontimezone(new ICAL.Timezone({\n tzid: tzid,\n component: component\n }));\n }\n }\n break;\n case 'vevent':\n if (this.parseEvent) {\n this.onevent(new ICAL.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 return ComponentParser;\n}());\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=\" + {\"1110\":\"ee198291c8b389847012\",\"7422\":\"39643d0d022e5d161ff9\"}[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)\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__(7296)))\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","randomUUID","crypto","bind","getRandomValues","rnds8","Uint8Array","rng","Error","byteToHex","i","push","slice","buf","offset","rnds","random","arr","unsafeStringify","$","n","t","e","s","o","u","r","l","a","render","staticRenderFns","_compiled","functional","_scopeId","c","$vnode","ssrContext","parent","__VUE_SSR_CONTEXT__","call","_registeredComponents","add","_ssrRegister","$root","$options","shadowRoot","_injectStyles","p","S","m","d","beforeCreate","exports","U","IconAdd","IconDelete","props","slots","type","Object","required","Boolean","default","l10nTo","String","l10nDeleteSlot","l10nEmptyDay","l10nAddSlot","l10nWeekDayListLabel","l10nMonday","l10nTuesday","l10nWednesday","l10nThursday","l10nFriday","l10nSaturday","l10nSunday","l10nStartPickerLabel","Function","l10nEndPickerLabel","internalSlots","slotsToInternalData","watch","timeStampSlotsToDateObjectSlots","map","start","end","id","displayName","MO","TU","WE","TH","FR","SA","SU","internalDataToSlots","forEach","Math","round","addSlot","onChangeSlots","removeSlot","splice","$emit","_l","key","label","change","$set","title","click","scopedSlots","_u","fn","size","proxy","length","_e","disabled","w","getClient","memoize","service","remote","generateRemoteUrl","client","createClient","setHeaders","token","requesttoken","onRequestTokenUpdate","getRequestToken","NcCheckboxRadioSwitch","CalendarAvailability","NcTimezonePicker","_Intl$DateTimeFormat$","_Intl$DateTimeFormat","saving","timezone","Intl","DateTimeFormat","resolvedOptions","timeZone","automated","timeZonePickerId","substring","mounted","slotData","async","_xml$multistatus","response","customRequest","method","xml","parseXML","availability","multistatus","propstat","prop","getFirstSubcomponent","getFirstProperty","getFirstValue","getAllSubcomponents","toJSDate","freq","getComponent","warn","rrule","toICALString","timezoneId","vavailabilityToSlots","findScheduleInboxAvailability","console","info","save","vavailability","ICAL","Component","addPropertyWithValue","parse","addSubcomponent","reduce","getHours","getMinutes","join","keys","filter","y","f","indexOf","Time","fromJSDate","setParameter","byday","slotsToVavailability","flatMap","dayId","slot","debug","saveScheduleInboxAvailability","appId","configKey","configValue","enableUserStatusAutomation","disableUserStatusAutomation","dayName","NcSettingsSection","AbsenceForm","AvailabilityForm","hideAbsenceSettings","Vue","prototype","translate","extend","Availability","$mount","___CSS_LOADER_EXPORT___","module","OPTIONS","zones","TimezoneService","foldLength","newLineChar","helpers","updateTimezones","vcal","allsubs","properties","vtimezones","reqTzid","tzid","getAllProperties","getParameter","hasOwnProperty","removeSubcomponent","has","get","component","isStrictlyNaN","number","isNaN","strictParseInt","string","result","parseInt","formatClassType","unescapedIndexOf","buffer","search","pos","binsearchInsert","list","seekVal","cmpfunc","mid","cmpval","low","high","floor","dumpn","input","log","dump","clone","aSrc","aDeep","Array","isArray","obj","foldline","aLine","line","line_length","cp","codePointAt","substr","pad2","trunc","ceil","inherits","base","child","extra","F","source","target","descr","getOwnPropertyDescriptor","defineProperty","design","FROM_VCARD_NEWLINE","TO_VCARD_NEWLINE","createTextType","fromNewline","toNewline","matches","fromICAL","aValue","structuredEscape","newline","RegExp","replace","replaceNewlineReplace","replaceNewline","toICAL","regEx","str","DEFAULT_TYPE_TEXT","defaultType","DEFAULT_TYPE_TEXT_MULTI","multiValue","DEFAULT_TYPE_TEXT_STRUCTURED","structuredValue","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","values","float","parsed","parseFloat","integer","decorate","UtcOffset","fromString","undecorate","icalValues","text","uri","aString","Binary","aBinary","aProp","strict","fromDateString","len","fromDateTimeString","duration","Duration","period","parts","split","isValueString","Period","fromJSON","toJSON","recur","Recur","_stringToData","k","val","numericDayToIcalDay","toUpperCase","fromData","aRecur","time","icalProperties","detectType","vcardValues","VCardTime","fromDateAndOrTimeString","splitzone","_splitZone","zone","isFromIcal","lastChar","signChar","sign","timestamp","vcardProperties","vcard3Values","binary","vcard","vcard3Properties","nickname","photo","bday","adr","tel","email","mailer","tz","geo","role","logo","agent","org","note","prodid","rev","sound","class","icalSet","param","allowXName","allowIanaToken","valueType","multiValueSeparateDQuote","property","vcardSet","vcard3Set","defaultSet","vcard3","vevent","vtodo","vjournal","valarm","vtimezone","daylight","standard","icalendar","getDesignSet","componentName","stringify","LINE_ENDING","DEFAULT_VALUE_TYPE","jCal","designSet","propIdx","propLen","designSetName","comps","compIdx","compLen","noFold","paramName","jsName","params","_rfc6868Unescape","propertyValue","propDetails","isDefault","delim","innerMulti","x","RFC6868_REPLACE_MAP","CHAR","ParserError","stack","shift","parser","state","root","_eachLine","err","_handleContentLine","lastParamIndex","lastValuePos","parsedParams","valuePos","paramPos","toLowerCase","_parseParameters","newComponent","pop","propertyDetails","_parseMultiValue","_parseValue","lcname","mvdelim","lastParam","_rfc6868Escape","extendedValue","nextPos","propValuePos","delimiter","lastPos","firstChar","newlineOffset","trim","_hydratedPropertyCount","_hydratedComponentCount","_designSet","_hydrateComponent","index","_components","comp","_hydrateProperty","_properties","Property","jCalLen","hasProperty","getFirstPropertyValue","_removeObjectByIndex","jCalIndex","cache","_removeObject","nameOrObject","objects","cached","_removeAllObjects","idx","nameOrComp","removed","removeAllSubcomponents","addProperty","TypeError","removeProperty","setValue","updatePropertyWithValue","nameOrProp","removeAllProperties","_parent","getDefaultType","_updateType","designSetChanged","isDecorated","isMultiValue","isStructuredValue","_hydrateValue","_values","_decorate","_undecorate","_setDecoratedValue","getFirstParameter","parameters","removeParameter","details","resetType","removeAllValues","getValues","setValues","icaltype","aData","hours","minutes","factor","fromSeconds","toSeconds","_normalize","aSeconds","secs","abs","compare","other","b","instance","decodeValue","_b64_decode","setEncodedValue","_b64_encode","h1","h2","h3","h4","bits","b64","ac","enc","tmp_arr","charCodeAt","charAt","o1","o2","o3","fromCharCode","wrappedJSObject","icalclass","getDuration","subtractDate","getEnd","addDuration","aLenient","fromDateOrDateTimeString","DURATION_LETTERS","parseDurationChunk","letter","object","isNegative","num","weeks","days","seconds","propsToCopy","reset","aOther","thisSeconds","otherSeconds","normalize","aStr","dict","create","chunks","numeric","Timezone","location","tznames","latitude","longitude","expandedUntilYear","changes","utcOffset","tt","utcTimezone","localTimezone","_ensureCoverage","tt_change","hour","minute","second","change_num","_findNearbyChange","change_num_to_use","step","prevUtcOffset","adjust_change","_compare_change_fn","zone_change","tmp_change","prev_zone_change","want_daylight","is_daylight","aYear","_minimumExpansionYear","today","now","changesEndYear","EXTRA_COVERAGE","MAX_YEAR","subcomps","_expandComponent","sort","aComponent","dtstart","convert_tzoffset","init_changes","changebase","rdatekey","isDate","until","adjust","occ","iterator","next","convert_time","from_zone","to_zone","count","utc","Z","UTC","GMT","register","remove","_time","_dowCache","_wnCache","_cachedUnixTime","_pendingNormalization","epochTime","resetTo","aDate","useUTC","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getSeconds","aZone","dayOfWeek","aWeekStart","firstDow","SUNDAY","dowCacheKey","q","Y","h","dayOfYear","is_leap","isLeapYear","daysInYearPassedMonth","startOfWeek","endOfWeek","startOfMonth","endOfMonth","daysInMonth","startOfYear","endOfYear","startDoyWeek","aFirstDayOfWeek","delta","getDominicalLetter","nthWeekDay","aDayOfWeek","aPos","weekday","otherDay","isNthWeekDay","dow","weekNumber","week1","wnCacheKey","dt","isoyear","weekOneStarts","daysBetween","answer","aDuration","mult","unixTime","toUnixTime","subtractDateTz","compareDateOnlyTz","cmp","attr","_cmp_attr","convertToZone","rc","copy","zone_equals","aExtraDays","aExtraHours","aExtraMinutes","aExtraSeconds","aTime","minutesOverflow","hoursOverflow","daysOverflow","yearsOverflow","fromUnixTime","epoch","ms","defineAttr","set","fromDayOfYear","aDayOfYear","doy","auto_normalize","fromStringv2","aProperty","wkst","DEFAULT_WEEK_START","THURSDAY","yr","LTRS","dom","MONDAY","TUESDAY","WEDNESDAY","FRIDAY","SATURDAY","p2","mm","hasMonth","hasDay","hasHour","hasMinute","hasSecond","datepart","timepart","aIcalType","part","v","tmz","tm","dtlen","tmlen","hasDashDate","hasDashTime","DOW_MAP","REVERSE_DOW_MAP","parseNumericValue","min","max","undefined","interval","aStart","RecurIterator","rule","isFinite","isByCount","addComponent","aType","ucname","setComponent","aValues","getNextOccurrence","aStartTime","aRecurrenceId","iter","uckey","partDesign","optionDesign","INTERVAL","icalDayToNumericDay","res","kparts","VALID_DAY_NAMES","VALID_BYDAY_PART","ALLOWED_FREQ","FREQ","fmtIcal","COUNT","UNTIL","WKST","test","BYSECOND","BYMINUTE","BYHOUR","BYDAY","BYMONTHDAY","BYYEARDAY","BYWEEKNO","BYMONTH","BYSETPOS","partArr","partArrIdx","partArrLen","icalrecur_iterator","completed","last","occurrence_number","by_indices","initialized","by_data","days_index","init","sort_byday_rules","setup_defaults","bydayParts","ruleDayOfWeek","wkdy","expand_year_days","increment_year","_nextByYearDay","has_by_data","tempLast","initLast","dayOfMonth","increment_month","_byDayAndMonthDay","before","next_second","next_minute","next_hour","next_day","next_week","next_month","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","week_no","normalizeByMonthDayRules","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","match","aRuleType","aInterval","aDateAttr","aFollowingAttr","aPreviousIncr","has_by_rule","dta","years","aFactor","aNextIncrement","nextunit","validWeeks","monthIdx","first_week","last_week","weekIdx","weekno","partCount","t1","monthkey","t2","monthdaykey","t3","day_","month_","expand_by_day","first_dow","doy_offset","last_dow","by_month_day","spIndex","daycodedkey","month_day","first_matching_day","last_matching_day","expandedDays","daykey","days_list","tmp","start_dow","end_dow","end_year_day","first","this_dow","aRules","j","check_contract_restriction","indexMapValue","_indexMap","ruleMapValue","_expandMap","pass","CONTRACT","ruleType","bydatakey","weekNo","req","deftime","UNKNOWN","EXPAND","ILLEGAL","RecurExpansion","formatTime","item","compareTime","ruleDates","exDates","complete","ruleIterators","ruleDateInc","exDateInc","exDate","ruleDate","_init","currentTry","_nextRecurrenceIter","_nextRuleDay","_nextExDay","_extractDates","propertyName","handleProp","iters","iterTime","chosenIter","iterIdx","Event","_rangeExceptionCache","exceptions","rangeExceptions","strictExceptions","relateException","isRecurrenceException","event","compareRangeException","THISANDFUTURE","recurrenceId","modifiesFuture","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","ComponentParser","parseEvent","parseTimezone","oncomplete","onerror","ontimezone","onevent","process","ical","zones_1","renderZoneSub","defaultStart","zoneName","includeWrapper","lines","zoneData","zonesMap","getZoneLines","Map","baseCreate","baseLodash","LazyWrapper","__wrapped__","__actions__","__dir__","__filtered__","__iteratees__","__takeCount__","__views__","constructor","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","reverse","isLaziable","setData","setWrapToString","wrapFunc","isCurry","newData","createBind","createCurry","createPartial","getData","mergeData","toInteger","flatten","overRest","setToString","noop","realNames","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","INFINITY","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","g","globalThis","window","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","baseURI","href","installedChunks","installedChunkData","promise","resolve","reject","errorType","realSrc","request","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""}
\ No newline at end of file +{"version":3,"file":"dav-settings-personal-availability.js?v=ee426a6b2432210ed280","mappings":";UAAIA,ECAAC,EACAC,mJC2BG,SAASC,EAAgBC,GAC/B,MAAMC,EAAOD,EAAKE,cACZC,GAASH,EAAKI,WAAa,GAAGC,WAAWC,SAAS,EAAG,KACrDC,EAAMP,EAAKQ,UAAUH,WAAWC,SAAS,EAAG,KAClD,MAAO,GAAPG,OAAUR,EAAI,KAAAQ,OAAIN,EAAK,KAAAM,OAAIF,EAC5B,sCCXA,MAKA,GALeG,EAAAA,EAAAA,MACbC,OAAO,OACPC,aACAC,QCzBqL,ECoEvL,CACAC,KAAA,cACAC,WAAA,CACAC,SAAA,IACAC,YAAA,IACAC,WAAA,IACAC,uBAAAA,EAAAA,GAEAC,IAAAA,GACA,eAAAC,EAAA,QAAAC,EAAA,OAAAC,EAAA,QAAAC,IAAAC,EAAAA,EAAAA,GAAA,oBAEA,OACAC,SAAA,EACAH,OAAAA,QAAAA,EAAA,GACAC,QAAAA,QAAAA,EAAA,GACAH,SAAAA,EAAA,IAAAM,KAAAN,GAAA,IAAAM,KACAL,QAAAA,EAAA,IAAAK,KAAAL,GAAA,KAEA,EACAM,SAAA,CAIAC,KAAAA,GAAA,IAAAC,EAAAC,EAEA,MAAAV,EAAA,IAAAM,KAAA,QAAAG,EAAA,KAAAT,gBAAA,IAAAS,OAAA,EAAAA,EAAAE,WACAV,EAAA,IAAAK,KAAA,QAAAI,EAAA,KAAAT,eAAA,IAAAS,OAAA,EAAAA,EAAAC,WAIA,OAHAX,SAAAA,EAAAY,SAAA,SACAX,SAAAA,EAAAW,SAAA,WAEA,KAAAZ,YACA,KAAAC,WACA,KAAAC,UACA,KAAAC,SACAF,GAAAD,CACA,GAEAa,QAAA,CACAC,SAAAA,GACA,KAAAZ,OAAA,GACA,KAAAC,QAAA,GACA,KAAAH,SAAA,IAAAM,KACA,KAAAL,QAAA,IACA,EACA,cAAAc,GACA,QAAAP,MAAA,CAIA,KAAAH,SAAA,EACA,UACAW,EAAAA,EAAAC,MAAAC,EAAAA,EAAAA,IAAA,yCAAAC,QAAAC,EAAAA,EAAAA,MAAAC,MAAA,CACArB,SAAAtB,EAAA,KAAAsB,UACAC,QAAAvB,EAAA,KAAAuB,SACAC,OAAA,KAAAA,OACAC,QAAA,KAAAA,WAEAmB,EAAAA,EAAAA,IAAA,KAAAC,GAAA,uBACA,OAAAC,IACAC,EAAAA,EAAAA,IAAA,KAAAF,GAAA,+CACAG,EAAAF,MAAA,0BAAAA,SACA,SACA,KAAAnB,SAAA,CACA,CAhBA,CAiBA,EACA,kBAAAsB,GACA,KAAAtB,SAAA,EACA,UACAW,EAAAA,EAAAY,QAAAV,EAAAA,EAAAA,IAAA,yCAAAC,QAAAC,EAAAA,EAAAA,MAAAC,OACA,KAAAP,aACAQ,EAAAA,EAAAA,IAAA,KAAAC,GAAA,yBACA,OAAAC,IACAC,EAAAA,EAAAA,IAAA,KAAAF,GAAA,gDACAG,EAAAF,MAAA,2BAAAA,SACA,SACA,KAAAnB,SAAA,CACA,CACA,2ICtIIwB,EAAU,CAAC,EAEfA,EAAQC,kBAAoB,IAC5BD,EAAQE,cAAgB,IAElBF,EAAQG,OAAS,SAAc,KAAM,QAE3CH,EAAQI,OAAS,IACjBJ,EAAQK,mBAAqB,IAEhB,IAAI,IAASL,GAKJ,KAAW,IAAQM,QAAS,IAAQA,sBCP1D,SAXgB,OACd,GCTW,WAAkB,IAAIC,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAAOA,EAAG,OAAO,CAACE,YAAY,UAAUC,GAAG,CAAC,OAAS,SAASC,GAAgC,OAAxBA,EAAOC,iBAAwBP,EAAIrB,SAAS6B,MAAM,KAAMC,UAAU,IAAI,CAACP,EAAG,MAAM,CAACE,YAAY,kBAAkB,CAACF,EAAG,yBAAyB,CAACE,YAAY,yBAAyBM,MAAM,CAAC,GAAK,oBAAoB,MAAQV,EAAIb,GAAG,MAAO,aAAa,UAAW,GAAMwB,MAAM,CAACC,MAAOZ,EAAIpC,SAAUiD,SAAS,SAAUC,GAAMd,EAAIpC,SAASkD,CAAG,EAAEC,WAAW,cAAcf,EAAIgB,GAAG,KAAKd,EAAG,yBAAyB,CAACE,YAAY,yBAAyBM,MAAM,CAAC,GAAK,mBAAmB,MAAQV,EAAIb,GAAG,MAAO,wBAAwB,UAAW,GAAMwB,MAAM,CAACC,MAAOZ,EAAInC,QAASgD,SAAS,SAAUC,GAAMd,EAAInC,QAAQiD,CAAG,EAAEC,WAAW,cAAc,GAAGf,EAAIgB,GAAG,KAAKd,EAAG,cAAc,CAACQ,MAAM,CAAC,MAAQV,EAAIlC,OAAO,MAAQkC,EAAIb,GAAG,MAAO,wBAAwB,UAAW,GAAMkB,GAAG,CAAC,eAAe,SAASC,GAAQN,EAAIlC,OAAOwC,CAAM,KAAKN,EAAIgB,GAAG,KAAKd,EAAG,aAAa,CAACQ,MAAM,CAAC,MAAQV,EAAIjC,QAAQ,MAAQiC,EAAIb,GAAG,MAAO,wBAAwB,UAAW,GAAMkB,GAAG,CAAC,eAAe,SAASC,GAAQN,EAAIjC,QAAQuC,CAAM,KAAKN,EAAIgB,GAAG,KAAKd,EAAG,MAAM,CAACE,YAAY,oBAAoB,CAACF,EAAG,WAAW,CAACQ,MAAM,CAAC,SAAWV,EAAI/B,UAAY+B,EAAI5B,MAAM,KAAO,UAAU,cAAc,WAAW,CAAC4B,EAAIgB,GAAG,WAAWhB,EAAIiB,GAAGjB,EAAIb,GAAG,MAAO,SAAS,YAAYa,EAAIgB,GAAG,KAAKd,EAAG,WAAW,CAACQ,MAAM,CAAC,SAAWV,EAAI/B,UAAY+B,EAAI5B,MAAM,KAAO,SAASiC,GAAG,CAAC,MAAQL,EAAIT,eAAe,CAACS,EAAIgB,GAAG,WAAWhB,EAAIiB,GAAGjB,EAAIb,GAAG,MAAO,oBAAoB,aAAa,IAAI,EACp/C,GACsB,IDUpB,EACA,KACA,WACA,MAI8B,QEnBhC,eCWI,EAAU,CAAC,EAEf,EAAQO,kBAAoB,IAC5B,EAAQC,cAAgB,IAElB,EAAQC,OAAS,SAAc,KAAM,QAE3C,EAAQC,OAAS,IACjB,EAAQC,mBAAqB,IAEhB,IAAI,IAAS,GAKJ,KAAW,IAAQC,QAAS,IAAQA,uDC1B1D,MACA,GACEmB,WAFmC,oBAAXC,QAA0BA,OAAOD,YAAcC,OAAOD,WAAWE,KAAKD,SCGhG,IAAIE,EACJ,MAAMC,EAAQ,IAAIC,WAAW,IACd,SAASC,IAEtB,IAAKH,IAEHA,EAAoC,oBAAXF,QAA0BA,OAAOE,iBAAmBF,OAAOE,gBAAgBD,KAAKD,SAEpGE,GACH,MAAM,IAAII,MAAM,4GAIpB,OAAOJ,EAAgBC,EACzB,CCXA,MAAMI,EAAY,GAElB,IAAK,IAAIC,EAAI,EAAGA,EAAI,MAAOA,EACzBD,EAAUE,MAAMD,EAAI,KAAO/E,SAAS,IAAIiF,MAAM,ICmBhD,QAxBA,SAAYpC,EAASqC,EAAKC,GACxB,GAAI,EAAOb,aAAeY,IAAQrC,EAChC,OAAO,EAAOyB,aAIhB,MAAMc,GADNvC,EAAUA,GAAW,CAAC,GACDwC,SAAWxC,EAAQ+B,KAAOA,KAK/C,GAHAQ,EAAK,GAAe,GAAVA,EAAK,GAAY,GAC3BA,EAAK,GAAe,GAAVA,EAAK,GAAY,IAEvBF,EAAK,CACPC,EAASA,GAAU,EAEnB,IAAK,IAAIJ,EAAI,EAAGA,EAAI,KAAMA,EACxBG,EAAIC,EAASJ,GAAKK,EAAKL,GAGzB,OAAOG,CACT,CAEA,ODbK,SAAyBI,EAAKH,EAAS,GAG5C,OAAOL,EAAUQ,EAAIH,EAAS,IAAML,EAAUQ,EAAIH,EAAS,IAAML,EAAUQ,EAAIH,EAAS,IAAML,EAAUQ,EAAIH,EAAS,IAAM,IAAML,EAAUQ,EAAIH,EAAS,IAAML,EAAUQ,EAAIH,EAAS,IAAM,IAAML,EAAUQ,EAAIH,EAAS,IAAML,EAAUQ,EAAIH,EAAS,IAAM,IAAML,EAAUQ,EAAIH,EAAS,IAAML,EAAUQ,EAAIH,EAAS,IAAM,IAAML,EAAUQ,EAAIH,EAAS,KAAOL,EAAUQ,EAAIH,EAAS,KAAOL,EAAUQ,EAAIH,EAAS,KAAOL,EAAUQ,EAAIH,EAAS,KAAOL,EAAUQ,EAAIH,EAAS,KAAOL,EAAUQ,EAAIH,EAAS,IAChf,CCSSI,CAAgBH,EACzB,iBChBA,SAASI,EAAEC,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,EAAGf,EAAGgB,GAC9B,IAEIC,EAFAC,EAAgB,mBAALR,EAAkBA,EAAE5C,QAAU4C,EAG7C,GAFAC,IAAMO,EAAEC,OAASR,EAAGO,EAAEE,gBAAkBR,EAAGM,EAAEG,WAAY,GAAKR,IAAMK,EAAEI,YAAa,GAAKP,IAAMG,EAAEK,SAAW,UAAYR,GAEnHf,GAAKiB,EAAI,SAASO,KACpBA,EAAIA,GACJlD,KAAKmD,QAAUnD,KAAKmD,OAAOC,YAC3BpD,KAAKqD,QAAUrD,KAAKqD,OAAOF,QAAUnD,KAAKqD,OAAOF,OAAOC,oBAAyBE,oBAAsB,MAAQJ,EAAII,qBAAsBd,GAAKA,EAAEe,KAAKvD,KAAMkD,GAAIA,GAAKA,EAAEM,uBAAyBN,EAAEM,sBAAsBC,IAAI/B,EAC7N,EAAGkB,EAAEc,aAAef,GAAKH,IAAMG,EAAID,EAAI,WACrCF,EAAEe,KACAvD,MACC4C,EAAEI,WAAahD,KAAKqD,OAASrD,MAAM2D,MAAMC,SAASC,WAEvD,EAAIrB,GAAIG,EACN,GAAIC,EAAEI,WAAY,CAChBJ,EAAEkB,cAAgBnB,EAClB,IAAIoB,EAAInB,EAAEC,OACVD,EAAEC,OAAS,SAASmB,EAAGC,GACrB,OAAOtB,EAAEY,KAAKU,GAAIF,EAAEC,EAAGC,EACzB,CACF,KAAO,CACL,IAAIC,EAAItB,EAAEuB,aACVvB,EAAEuB,aAAeD,EAAI,GAAGnH,OAAOmH,EAAGvB,GAAK,CAACA,EAC1C,CACF,MAAO,CACLyB,QAAShC,EACT5C,QAASoD,EAEb,CA2LA,MAAMyB,EAVyBlC,EAhLrB,CACR/E,KAAM,uBACNC,WAAY,CACVI,uBAAwB,IACxBH,SAAU,IACVgH,QAAS,IACTC,WAAY,KAEdC,MAAO,CACLC,MAAO,CACLC,KAAMC,OACNC,UAAU,GAEZ5G,QAAS,CACP0G,KAAMG,QACNC,SAAS,GAEXC,OAAQ,CACNL,KAAMM,OACNJ,UAAU,GAEZK,eAAgB,CACdP,KAAMM,OACNJ,UAAU,GAEZM,aAAc,CACZR,KAAMM,OACNJ,UAAU,GAEZO,YAAa,CACXT,KAAMM,OACNJ,UAAU,GAEZQ,qBAAsB,CACpBV,KAAMM,OACNF,QAAS,YAEXO,WAAY,CACVX,KAAMM,OACNJ,UAAU,GAEZU,YAAa,CACXZ,KAAMM,OACNJ,UAAU,GAEZW,cAAe,CACbb,KAAMM,OACNJ,UAAU,GAEZY,aAAc,CACZd,KAAMM,OACNJ,UAAU,GAEZa,WAAY,CACVf,KAAMM,OACNJ,UAAU,GAEZc,aAAc,CACZhB,KAAMM,OACNJ,UAAU,GAEZe,WAAY,CACVjB,KAAMM,OACNJ,UAAU,GAEZgB,qBAAsB,CACpBlB,KAAMmB,SACNf,QAAU1C,GAAM,yBAAyBrF,OAAOqF,IAElD0D,mBAAoB,CAClBpB,KAAMmB,SACNf,QAAU1C,GAAM,uBAAuBrF,OAAOqF,KAGlD,IAAA1E,GACE,MAAO,CACLqI,cAAe/F,KAAKgG,oBAAoBhG,KAAKyE,OAEjD,EACAwB,MAAO,CACL,KAAAxB,GACEzE,KAAK+F,cAAgB/F,KAAKgG,oBAAoBhG,KAAKyE,MACrD,GAEFjG,QAAS,CACP0H,gCAAgC9D,GACvBA,EAAE+D,KAAK9D,IAAM,CAClB+D,MAAO,IAAInI,KAAe,IAAVoE,EAAE+D,OAClBC,IAAK,IAAIpI,KAAa,IAARoE,EAAEgE,SAGpB,mBAAAL,GACE,MAAM5D,EAAI,CACR,CACEkE,GAAI,KACJC,YAAavG,KAAKqF,WAClBZ,MAAOzE,KAAKkG,gCAAgClG,KAAKyE,MAAM+B,KAEzD,CACEF,GAAI,KACJC,YAAavG,KAAKsF,YAClBb,MAAOzE,KAAKkG,gCAAgClG,KAAKyE,MAAMgC,KAEzD,CACEH,GAAI,KACJC,YAAavG,KAAKuF,cAClBd,MAAOzE,KAAKkG,gCAAgClG,KAAKyE,MAAMiC,KAEzD,CACEJ,GAAI,KACJC,YAAavG,KAAKwF,aAClBf,MAAOzE,KAAKkG,gCAAgClG,KAAKyE,MAAMkC,KAEzD,CACEL,GAAI,KACJC,YAAavG,KAAKyF,WAClBhB,MAAOzE,KAAKkG,gCAAgClG,KAAKyE,MAAMmC,KAEzD,CACEN,GAAI,KACJC,YAAavG,KAAK0F,aAClBjB,MAAOzE,KAAKkG,gCAAgClG,KAAKyE,MAAMoC,MAExDxE,EAAI,CACLiE,GAAI,KACJC,YAAavG,KAAK2F,WAClBlB,MAAOzE,KAAKkG,gCAAgClG,KAAKyE,MAAMqC,KAEzD,OAAe,KAAR,UAAY,IAAI1E,EAAGC,GAAK,CAACA,KAAMD,EACxC,EACA,mBAAA2E,GACE,MAAM3E,EAAI,CAAC,EACX,OAAOpC,KAAK+F,cAAciB,SAAQ,EAAGV,GAAIjE,EAAGoC,MAAOnC,MACjDF,EAAEC,GAAKC,EAAE6D,KAAK5D,IAAM,CAClB6D,MAAOa,KAAKC,MAAM3E,EAAE6D,MAAM9H,UAAY,KACtC+H,IAAKY,KAAKC,MAAM3E,EAAE8D,IAAI/H,UAAY,QACjC,IACD8D,CACN,EACA,OAAA+E,CAAQ/E,GACN,MAAMC,EAAoB,IAAIpE,KAC9BoE,EAAE9D,SAAS,EAAG,EAAG,EAAG,GACpB,MAAM+D,EAAoB,IAAIrE,KAC9BqE,EAAE/D,SAAS,GAAI,EAAG,EAAG,GAAI6D,EAAEqC,MAAM9C,KAAK,CACpCyE,MAAO/D,EACPgE,IAAK/D,IACHtC,KAAKoH,eACX,EACA,UAAAC,CAAWjF,EAAGC,GACZD,EAAEqC,MAAM6C,OAAOjF,EAAG,GAAIrC,KAAKoH,eAC7B,EACA,aAAAA,GACEpH,KAAKuH,MAAM,eAAgBvH,KAAK+G,sBAClC,KAGI,WACN,IAAI1E,EAAIrC,KAAMsC,EAAID,EAAEnC,MAAMD,GAC1B,OAAOqC,EAAE,KAAM,CAAEnC,YAAa,qBAAsBM,MAAO,CAAE,aAAc4B,EAAE+C,uBAA0B,CAAC/C,EAAEmF,GAAGnF,EAAE0D,eAAe,SAASxD,GACrI,MAAO,CAACD,EAAE,KAAM,CAAEmF,IAAK,aAAa1K,OAAOwF,EAAE+D,IAAKnG,YAAa,iBAAmB,CAACmC,EAAE,MAAO,CAAEnC,YAAa,iBAAmB,CAACmC,EAAE,OAAQ,CAAE7B,MAAO,CAAE6F,GAAI/D,EAAEgE,YAAc,WAAc,CAAClE,EAAEtB,GAAGsB,EAAErB,GAAGuB,EAAEgE,kBAAmBjE,EAAE,MAAO,CAAEmF,IAAK,aAAa1K,OAAOwF,EAAE+D,IAAKnG,YAAa,sBAAwB,CAACmC,EAAE,MAAO,CAAEnC,YAAa,2BAA6B,CAACkC,EAAEmF,GAAGjF,EAAEkC,OAAO,SAASjC,EAAGC,GACrX,IAAIf,EAAGgB,EACP,MAAO,CAACJ,EAAE,MAAO,CAAEmF,IAAK,QAAQ1K,OAAOwF,EAAE+D,GAAI,KAAKvJ,OAAO0F,GAAItC,YAAa,qBAAuB,CAACmC,EAAE,yBAA0B,CAAEnC,YAAa,aAAcM,MAAO,CAAE6F,GAAI,SAASvJ,OAAOwF,EAAE+D,GAAI,KAAKvJ,OAAO0F,GAAIiC,KAAM,OAAQgD,MAAuC,OAA/BhG,EAAIW,EAAEuD,2BAAgC,EAASlE,EAAE6B,KAAKlB,EAAGE,EAAEgE,aAAc,cAAc,GAAMnG,GAAI,CAAEuH,OAAQtF,EAAE+E,eAAiB1G,MAAO,CAAEC,MAAO6B,EAAE4D,MAAOxF,SAAU,SAASgC,GAC5YP,EAAEuF,KAAKpF,EAAG,QAASI,EACrB,EAAG9B,WAAY,gBAAmBwB,EAAE,OAAQ,CAAEnC,YAAa,WAAa,CAACkC,EAAEtB,GAAG,IAAMsB,EAAErB,GAAGqB,EAAE0C,QAAU,OAAQzC,EAAE,yBAA0B,CAAEnC,YAAa,WAAYM,MAAO,CAAE6F,GAAI,OAAOvJ,OAAOwF,EAAE+D,GAAI,KAAKvJ,OAAO0F,GAAIiC,KAAM,OAAQgD,MAAqC,OAA7BhF,EAAIL,EAAEyD,yBAA8B,EAASpD,EAAEa,KAAKlB,EAAGE,EAAEgE,aAAc,cAAc,GAAMnG,GAAI,CAAEuH,OAAQtF,EAAE+E,eAAiB1G,MAAO,CAAEC,MAAO6B,EAAE6D,IAAKzF,SAAU,SAASgC,GAC/YP,EAAEuF,KAAKpF,EAAG,MAAOI,EACnB,EAAG9B,WAAY,cAAiBwB,EAAE,WAAY,CAAEmF,IAAK,QAAQ1K,OAAOwF,EAAE+D,GAAI,KAAKvJ,OAAO0F,EAAG,QAAStC,YAAa,SAAUM,MAAO,CAAEiE,KAAM,WAAY,aAAcrC,EAAE4C,eAAgB4C,MAAOxF,EAAE4C,gBAAkB7E,GAAI,CAAE0H,MAAO,SAASlF,GACnO,OAAOP,EAAEgF,WAAW9E,EAAGE,EACzB,GAAKsF,YAAa1F,EAAE2F,GAAG,CAAC,CAAEP,IAAK,OAAQQ,GAAI,WACzC,MAAO,CAAC3F,EAAE,aAAc,CAAE7B,MAAO,CAAEyH,KAAM,MAC3C,EAAGC,OAAO,IAAO,MAAM,MAAS,GAClC,KAAK,GAAuB,IAAnB5F,EAAEkC,MAAM2D,OAAe9F,EAAE,OAAQ,CAAEnC,YAAa,iBAAmB,CAACkC,EAAEtB,GAAG,IAAMsB,EAAErB,GAAGqB,EAAE6C,cAAgB,OAAS7C,EAAEgG,OAAQ/F,EAAE,WAAY,CAAEmF,IAAK,YAAY1K,OAAOwF,EAAE+D,IAAKnG,YAAa,qBAAsBM,MAAO,CAAE6H,SAAUjG,EAAErE,QAAS6J,MAAOxF,EAAE8C,YAAa,aAAc9C,EAAE8C,aAAe/E,GAAI,CAAE0H,MAAO,SAAStF,GAC3T,OAAOH,EAAE8E,QAAQ5E,EACnB,GAAKwF,YAAa1F,EAAE2F,GAAG,CAAC,CAAEP,IAAK,OAAQQ,GAAI,WACzC,MAAO,CAAC3F,EAAE,UAAW,CAAE7B,MAAO,CAAEyH,KAAM,MACxC,EAAGC,OAAO,IAAO,MAAM,MAAS,GAClC,KAAK,EACP,GAAO,IAIL,EACA,KACA,WACA,KACA,MAEU/D,QAqBNmE,GAAI,UAAIrL,aAAaD,OAAO,wCAAwCE,kCC5NnE,MAAMqL,SAAYC,IAASC,IAEjC,MAAMC,GAASC,EAAAA,EAAAA,IAAkB,OAAD7L,OAAQ2L,EAAO,KAAA3L,QAAIgC,EAAAA,EAAAA,MAAiBC,MAC9D6J,GAASC,EAAAA,EAAAA,IAAaH,GAGtBI,EAAcC,IACnBH,EAAOE,WAAW,CAEjB,mBAAoB,iBAEpBE,aAAcD,QAAAA,EAAS,IACtB,EAOH,OAHAE,EAAAA,EAAAA,IAAqBH,GACrBA,GAAWI,EAAAA,EAAAA,OAEJN,CAAM,4CCed,MC5D4L,GD4D5L,CACAzL,KAAA,mBACAC,WAAA,CACAC,SAAA,IACA8L,sBAAA,KACAC,qBAAA,EACAC,iBAAAA,GAAAA,GAEA5L,IAAAA,GAAA,IAAA6L,EAAAC,EAIA,OACAxL,SAAA,EACAyL,QAAA,EACAC,SALA,QAAAH,EAAA,QAAAC,EAAA,IAAAG,KAAAC,sBAAA,IAAAJ,GAAA,QAAAA,EAAAA,EAAAK,yBAAA,IAAAL,OAAA,EAAAA,EAAAM,gBAAA,IAAAP,EAAAA,EAAA,MAMA9E,ME3CQ,CACN+B,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,IFqCNiD,UAAA,SAAAhM,EAAAA,EAAAA,GAAA,gCAEA,EACAG,SAAA,CACA8L,iBAAAA,IACA,MAAAjN,QAAAkK,KAAAjF,SAAA,GAAArF,SAAA,IAAAsN,UAAA,KAGA,aAAAC,GACA,IACA,MAAAC,QExCOC,iBAA+C,IAAAC,EACrD,MAAMxB,EAASL,GAAU,aAEnB8B,QAAiBzB,EAAO0B,cAAc,QAAS,CACpDC,OAAQ,WACR9M,KAAM,0MAQD+M,QAAYC,EAAAA,EAAAA,IAASJ,EAAS5M,MAEpC,IAAK+M,EACJ,OAGD,MAAME,EAAeF,SAAgB,QAAbJ,EAAHI,EAAKG,mBAAW,IAAAP,GAAa,QAAbA,EAAhBA,EAAkBC,SAAS,UAAE,IAAAD,GAAU,QAAVA,EAA7BA,EAA+BQ,gBAAQ,IAAAR,OAAA,EAAvCA,EAAyCS,KAAK,yBACnE,OAAKH,EJ+LN,SAAWvI,GACT,MAAMC,GAAI,WAAED,GAAIE,EAAI,IAAI,YAAED,GAAIE,EAAID,EAAEyI,qBAAqB,iBACzD,IAAIvI,EACJ,MAAMC,EAAIH,EAAEyI,qBAAqB,aACjCtI,IAAMD,EAAIC,EAAEuI,iBAAiB,QAAQC,iBACrC,MAAMvJ,EAAIa,EAAE2I,oBAAoB,aAAcxI,EAfvC,CACL8D,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,IASN,OAAOpF,EAAEsF,SAASpE,IAChB,MAAMD,EAAIC,EAAEoI,iBAAiB,WAAWC,gBAAgBE,WAAYpH,EAAInB,EAAEoI,iBAAiB,SAASC,gBAAgBE,WAAYjH,EAAItB,EAAEoI,iBAAiB,SACxH,WAA3B9G,EAAE+G,gBAAgBG,KAMtBlH,EAAE+G,gBAAgBI,aAAa,SAASrE,SAAS9D,IAC/CR,EAAEQ,GAAGvB,KAAK,CACRyE,MAAOzD,EAAErE,UAAY,IACrB+H,IAAKtC,EAAEzF,UAAY,KACnB,IATFiK,EAAE+C,KAAK,sBAAuB,CAC5BC,MAAOrH,EAAEsH,gBASX,IACA,CACF/G,MAAO/B,EACP+I,WAAYjJ,EAEhB,CInNQkJ,CAAqBf,QAJ5B,CAKD,CFeAgB,GACA,GAAAxB,EAGA,CACA,YAAA1F,EAAA,WAAAgH,GAAAtB,EACA,KAAA1F,MAAAA,EACAgH,IACA,KAAA/B,SAAA+B,GAEAG,GAAAC,KAAA,2BAAApH,MAAA,KAAAgH,WACA,MATAG,GAAAC,KAAA,0BACA,KAAApH,MEzDQ,CACN+B,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GF2DN,OAAAxE,GACAsJ,GAAAzM,MAAA,uCAAAmD,IAEAlD,EAAAA,EAAAA,IAAAiD,EAAA,qCACA,SACA,KAAArE,SAAA,CACA,CACA,EACAQ,QAAA,CACA,UAAAsN,GACA,IACA,KAAArC,QAAA,QEhCOW,eAA6C3F,EAAOgH,GAC1D,MAKMM,EJuMP,SAAW3J,EAAGC,GACZ,MAAMC,EAAI,IAAI0J,EAAKC,UAAU,aAC7B3J,EAAE4J,qBAAqB,SAAU,qBACjC,MAAM3J,GAAI,QAAEF,GACZ,GAAIE,EAAG,CACL,MAAMb,EAAI,IAAIsK,EAAKC,UAAUD,EAAKG,MAAM5J,IACxCD,EAAE8J,gBAAgB1K,EACpB,KAAO,CACL,MAAMA,EAAI,IAAIsK,EAAKC,UAAU,aAC7BvK,EAAEwK,qBAAqB,OAAQ7J,GAAIC,EAAE8J,gBAAgB1K,EACvD,CACA,MAAMc,EAAI,IAAIwJ,EAAKC,UAAU,iBAAkBxJ,EAAIL,EAAEiK,QAAO,CAAC3K,EAAGgB,KAC9D,IAAIwB,EACJ,MAAMtB,EAAI,IAAI3E,KAAe,IAAVyE,EAAE0D,OAAczD,EAAI,IAAI1E,KAAa,IAARyE,EAAE2D,KAAYtC,EAAI,CAChEnB,EAAE0J,WACF1J,EAAE2J,aACF5J,EAAE2J,WACF3J,EAAE4J,cACFC,KAAK,KACP,MAAO,IACF9K,EACH,CAACqC,GAAI,IAAkB,OAAbG,EAAIxC,EAAEqC,IAAcG,EAAI,GAAIxB,GACvC,GACA,CAAC,GACJ,OAAOiC,OAAO8H,KAAKhK,GAAG0D,KAAKzE,IACzB,MAAMgB,EAAID,EAAEf,GAAIkB,EAAIF,EAAE,GAAG0D,MAAOzD,EAAID,EAAE,GAAG2D,IAAKtC,EAAIrB,EAAEyD,KAAKlC,GAAMA,EAAEpH,MAAK6P,QAAO,CAACzI,EAAG0I,EAAGC,IAAMA,EAAEC,QAAQ5I,KAAO0I,IAAIzI,EAAI,IAAI8H,EAAKC,UAAU,aACtI,OAAO/H,EAAEgI,qBAAqB,UAAWF,EAAKc,KAAKC,WAAW,IAAI9O,KAAS,IAAJ2E,IAAU,IAAKoK,aAAa,OAAQ3K,GAAI6B,EAAEgI,qBAAqB,QAASF,EAAKc,KAAKC,WAAW,IAAI9O,KAAS,IAAJ0E,IAAU,IAAKqK,aAAa,OAAQ3K,GAAI6B,EAAEgI,qBAAqB,MAAO,KAAMhI,EAAEgI,qBAAqB,QAAS,CACvRd,KAAM,SACN6B,MAAOlJ,IACLG,CAAC,IACJiC,IAAI3D,EAAE4J,gBAAgBjL,KAAKqB,IAAKF,EAAE8J,gBAAgB5J,GAAIF,EAAE3F,UAC7D,CItOuBuQ,CALV,IAAIvI,OAAO8H,KAAKhI,GAAO0I,SAAQC,GAAS3I,EAAM2I,GAAOjH,KAAIkH,IAAQ,IACzEA,EACHxQ,IAAKuQ,SAG0C3B,GAEhDpM,EAAOiO,MAAM,gCAAiC,CAC7CvB,kBAGD,MAAMlD,EAASL,GAAU,mBACnBK,EAAO0B,cAAc,QAAS,CACnCC,OAAQ,YACR9M,KAAM,uLAAFX,OAIqEgP,EAAa,mGAKxF,CFUAwB,CAAA,KAAA9I,MAAA,KAAAiF,UACA,KAAAK,gBGtFOK,iBACN,aAAazL,EAAAA,EAAMC,MAClBC,EAAAA,EAAAA,IAAe,iEAAkE,CAChF2O,MAAO,MACPC,UAAW,2BAEZ,CACCC,YAAa,OAGhB,CH6EAC,SGxEOvD,iBACN,aAAazL,EAAAA,EAAMY,QAClBV,EAAAA,EAAAA,IAAe,iEAAkE,CAChF2O,MAAO,MACPC,UAAW,2BAGd,CHmEAG,IAGA3O,EAAAA,EAAAA,IAAAoD,EAAA,4BACA,OAAAC,GACAsJ,GAAAzM,MAAA,8BAAAmD,IAEAlD,EAAAA,EAAAA,IAAAiD,EAAA,qCACA,SACA,KAAAoH,QAAA,CACA,CACA,oBIpHI,GAAU,CAAC,EAEf,GAAQhK,kBAAoB,IAC5B,GAAQC,cAAgB,IAElB,GAAQC,OAAS,SAAc,KAAM,QAE3C,GAAQC,OAAS,IACjB,GAAQC,mBAAqB,IAEhB,IAAI,KAAS,IAKJ,MAAW,KAAQC,QAAS,KAAQA,OCP1D,UAXgB,OACd,IbTW,WAAkB,IAAIC,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAAOA,EAAG,MAAM,CAACA,EAAG,MAAM,CAACE,YAAY,aAAa,CAACF,EAAG,QAAQ,CAACE,YAAY,qBAAqBM,MAAM,CAAC,IAAK,KAAA1D,OAAMgD,EAAIiK,iBAAgB,gBAAe,CAACjK,EAAIgB,GAAG,WAAWhB,EAAIiB,GAAGjB,EAAIb,GAAG,MAAO,eAAe,YAAYa,EAAIgB,GAAG,KAAKd,EAAG,OAAO,CAACE,YAAY,kBAAkB,CAACF,EAAG,mBAAmB,CAACQ,MAAM,CAAC,IAAMV,EAAIiK,kBAAkBtJ,MAAM,CAACC,MAAOZ,EAAI2J,SAAU9I,SAAS,SAAUC,GAAMd,EAAI2J,SAAS7I,CAAG,EAAEC,WAAW,eAAe,KAAKf,EAAIgB,GAAG,KAAKd,EAAG,uBAAuB,CAACQ,MAAM,CAAC,MAAQV,EAAI0E,MAAM,QAAU1E,EAAI/B,QAAQ,UAAU+B,EAAIb,GAAG,MAAO,MAAM,mBAAmBa,EAAIb,GAAG,MAAO,eAAe,iBAAiBa,EAAIb,GAAG,MAAO,wBAAwB,gBAAgBa,EAAIb,GAAG,MAAO,YAAY,2BAA2Ba,EAAIb,GAAG,MAAO,YAAY,cAAca,EAAIb,GAAG,MAAO,UAAU,eAAea,EAAIb,GAAG,MAAO,WAAW,iBAAiBa,EAAIb,GAAG,MAAO,aAAa,gBAAgBa,EAAIb,GAAG,MAAO,YAAY,cAAca,EAAIb,GAAG,MAAO,UAAU,gBAAgBa,EAAIb,GAAG,MAAO,YAAY,cAAca,EAAIb,GAAG,MAAO,UAAU,0BAA2B2O,GAAY9N,EAAIb,GAAG,MAAO,kCAAmC,CAAE2O,YAAW,wBAAyBA,GAAY9N,EAAIb,GAAG,MAAO,gCAAiC,CAAE2O,aAAYzN,GAAG,CAAC,eAAe,SAASC,GAAQN,EAAI0E,MAAMpE,CAAM,KAAKN,EAAIgB,GAAG,KAAKd,EAAG,wBAAwB,CAACQ,MAAM,CAAC,QAAUV,EAAIgK,WAAW3J,GAAG,CAAC,iBAAiB,SAASC,GAAQN,EAAIgK,UAAU1J,CAAM,IAAI,CAACN,EAAIgB,GAAG,SAAShB,EAAIiB,GAAGjB,EAAIb,GAAG,MAAO,yGAAyG,UAAUa,EAAIgB,GAAG,KAAKd,EAAG,WAAW,CAACQ,MAAM,CAAC,SAAWV,EAAI/B,SAAW+B,EAAI0J,OAAO,KAAO,WAAWrJ,GAAG,CAAC,MAAQL,EAAI+L,OAAO,CAAC/L,EAAIgB,GAAG,SAAShB,EAAIiB,GAAGjB,EAAIb,GAAG,MAAO,SAAS,WAAW,EACzwD,GACsB,IaUpB,EACA,KACA,WACA,MAI8B,QCnBwJ,GCoBxL,CACA9B,KAAA,eACAC,WAAA,CACAyQ,kBAAA,IACAC,YAAA,EACAC,iBAAAA,IAEAtQ,KAAAA,KACA,CACAuQ,qBAAAlQ,EAAAA,EAAAA,GAAA,qCCXA,IAXgB,OACd,ICRW,WAAkB,IAAIgC,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAAOA,EAAG,MAAM,CAACA,EAAG,oBAAoB,CAACQ,MAAM,CAAC,KAAOV,EAAIb,GAAG,MAAO,gBAAgB,YAAca,EAAIb,GAAG,MAAO,oHAAoH,CAACe,EAAG,qBAAqB,GAAGF,EAAIgB,GAAG,KAAOhB,EAAIkO,oBAAgLlO,EAAIsI,KAA/JpI,EAAG,oBAAoB,CAACQ,MAAM,CAAC,KAAOV,EAAIb,GAAG,MAAO,WAAW,YAAca,EAAIb,GAAG,MAAO,yCAAyC,CAACe,EAAG,gBAAgB,IAAa,EACzgB,GACsB,IDSpB,EACA,KACA,KACA,MAI8B,QEdhCiO,EAAAA,GAAIC,UAAUjP,GAAKkP,EAAAA,GAIlB,IAFYF,EAAAA,GAAIG,OAAOC,IAEvB,CAAS,CAAC,GAAIC,OAAO,qHCLlBC,QAA0B,GAA4B,KAE1DA,EAAwB7M,KAAK,CAAC8M,EAAOnI,GAAI,snDA+EtC,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,gGAAgG,MAAQ,GAAG,SAAW,usBAAusB,eAAiB,CAAC,unDAAunD,WAAa,MAEj/E,4FCnFIkI,QAA0B,GAA4B,KAE1DA,EAAwB7M,KAAK,CAAC8M,EAAOnI,GAAI,+UAAgV,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,uDAAuD,MAAQ,GAAG,SAAW,qIAAqI,eAAiB,CAAC,0VAA0V,WAAa,MAE/9B,4FCJIkI,QAA0B,GAA4B,KAE1DA,EAAwB7M,KAAK,CAAC8M,EAAOnI,GAAI,4wCAA6wC,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,4DAA4D,MAAQ,GAAG,SAAW,4eAA4e,eAAiB,CAAC,q2CAAq2C,WAAa,MAEnxG,+BCDI0F,EAklIE0C,EAohBAC,EAWAC,cA5mJF5C,EAAOyC,EAAOrK,SAmBbyK,WAAa,GASlB7C,EAAK8C,YAAc,OAOnB9C,EAAK+C,QAAU,CAUbC,gBAAiB,SAASC,GACxB,IAAIC,EAASC,EAAYC,EAAYC,EAAS3N,EAAG4N,EAEjD,IAAKL,GAAsB,cAAdA,EAAK7R,KAEhB,OAAO6R,EAQT,IAHAC,EAAUD,EAAK/D,sBACfiE,EAAa,GACbC,EAAa,CAAC,EACT1N,EAAI,EAAGA,EAAIwN,EAAQ9G,OAAQ1G,IACN,cAApBwN,EAAQxN,GAAGtE,KAEbgS,EADAE,EAAOJ,EAAQxN,GAAGsJ,iBAAiB,QAAQC,iBACxBiE,EAAQxN,GAE3ByN,EAAaA,EAAWpS,OAAOmS,EAAQxN,GAAG6N,oBAM9C,IADAF,EAAU,CAAC,EACN3N,EAAI,EAAGA,EAAIyN,EAAW/G,OAAQ1G,KAC5B4N,EAAOH,EAAWzN,GAAG8N,aAAa,WACrCH,EAAQC,IAAQ,GAKpB,IAAK5N,KAAK0N,EACJA,EAAWK,eAAe/N,KAAO2N,EAAQ3N,IAC3CuN,EAAKS,mBAAmBN,EAAW1N,IAKvC,IAAKA,KAAK2N,EAENA,EAAQI,eAAe/N,KACtB0N,EAAW1N,IACZsK,EAAK4C,gBAAgBe,IAAIjO,IAEzBuN,EAAK7C,gBAAgBJ,EAAK4C,gBAAgBgB,IAAIlO,GAAGmO,WAIrD,OAAOZ,CACT,EAQAa,cAAe,SAASC,GACtB,MAA0B,iBAAb,GAAyBC,MAAMD,EAC9C,EASAE,eAAgB,SAASC,GACvB,IAAIC,EAASC,SAASF,EAAQ,IAE9B,GAAIlE,EAAK+C,QAAQe,cAAcK,GAC7B,MAAM,IAAI3O,MACR,mCAAqC0O,EAAS,KAIlD,OAAOC,CACT,EAsBAE,gBAAiB,SAAyB3S,EAAMgH,GAC9C,QAAqB,IAAX,EAIV,OAAIhH,aAAgBgH,EACXhH,EAEF,IAAIgH,EAAKhH,EAClB,EAWA4S,iBAAkB,SAASC,EAAQC,EAAQC,GACzC,MAAgD,KAAxCA,EAAMF,EAAO1D,QAAQ2D,EAAQC,KAAc,CACjD,KAAIA,EAAM,GAAyB,OAApBF,EAAOE,EAAM,IAG1B,OAAOA,EAFPA,GAAO,CAIX,CACA,OAAQ,CACV,EAWAC,gBAAiB,SAASC,EAAMC,EAASC,GACvC,IAAKF,EAAKvI,OACR,OAAO,EAKT,IAHA,IACI0I,EAAKC,EADLC,EAAM,EAAGC,EAAON,EAAKvI,OAAS,EAG3B4I,GAAOC,GAIZ,IAFAF,EAASF,EAAQD,EAASD,EAD1BG,EAAME,EAAM/J,KAAKiK,OAAOD,EAAOD,GAAO,MAGzB,EACXC,EAAOH,EAAM,MACV,MAAIC,EAAS,GAGhB,MAFAC,EAAMF,EAAM,CAEP,CAGT,OAAIC,EAAS,EACJD,EACAC,EAAS,EACTD,EAAM,EAENA,CACX,EAMAK,MAAkC,WAC3BnF,EAAKsB,QAKRtB,EAAK+C,QAAQoC,WADU,IAAd,GAA6B,QAASvF,EAC1B,SAAsBwF,GACzCxF,EAAQyF,IAAID,EACd,EAEqB,SAAoBA,GACvCE,KAAKF,EAAQ,KACf,EAGFpF,EAAK+C,QAAQoC,MAAM3Q,UAAU,IAC/B,EAUA+Q,MAAO,SAASC,EAAMC,GACpB,GAAKD,GAAuB,iBAARA,EAEb,IAAIA,aAAgBvT,KACzB,OAAO,IAAIA,KAAKuT,EAAKlT,WAChB,GAAI,UAAWkT,EACpB,OAAOA,EAAKD,QACP,GAAIG,MAAMC,QAAQH,GAAO,CAE9B,IADA,IAAIvP,EAAM,GACDP,EAAI,EAAGA,EAAI8P,EAAKpJ,OAAQ1G,IAC/BO,EAAIN,KAAK8P,EAAQzF,EAAK+C,QAAQwC,MAAMC,EAAK9P,IAAI,GAAQ8P,EAAK9P,IAE5D,OAAOO,CACT,CACE,IAAI2P,EAAM,CAAC,EACX,IAAK,IAAIxU,KAAQoU,EAGX7M,OAAOwJ,UAAUsB,eAAelM,KAAKiO,EAAMpU,KAE3CwU,EAAIxU,GADFqU,EACUzF,EAAK+C,QAAQwC,MAAMC,EAAKpU,IAAO,GAE/BoU,EAAKpU,IAIvB,OAAOwU,CACT,CAzBE,OAAOJ,CA0BX,EAaAK,SAAU,SAAkBC,GAK1B,IAJA,IAAI3B,EAAS,GACT4B,EAAOD,GAAS,GAAIrB,EAAM,EAAGuB,EAAc,EAGxCD,EAAK3J,QAAQ,CAClB,IAAI6J,EAAKF,EAAKG,YAAYzB,GACtBwB,EAAK,MAAOD,EACIA,GAAXC,EAAK,KAAqB,EAC1BA,EAAK,MAAsB,EAChB,EAChBD,EAAchG,EAAK6C,WAAa,EAClC4B,GAAOwB,EAAK,MAAQ,EAAI,GAExB9B,GAAUnE,EAAK8C,YAAc,IAAMiD,EAAK9H,UAAU,EAAGwG,GACrDsB,EAAOA,EAAK9H,UAAUwG,GACtBA,EAAMuB,EAAc,EAExB,CACA,OAAO7B,EAAOgC,OAAOnG,EAAK8C,YAAY1G,OAAS,EACjD,EASAgK,KAAM,SAAa1U,GAWjB,OAVqB,iBAAX,IAEa,iBAAX,IACRA,EAAO0S,SAAS1S,IAElBA,EAAOsH,OAAOtH,IAGNA,EAAK0K,QAGb,KAAK,EACH,MAAO,KACT,KAAK,EACH,MAAO,IAAM1K,EACf,QACE,OAAOA,EAEb,EAQA2U,MAAO,SAAetC,GACpB,OAAQA,EAAS,EAAI9I,KAAKqL,KAAKvC,GAAU9I,KAAKiK,MAAMnB,EACtD,EAWAwC,SAAU,SAASC,EAAMC,EAAOC,GAC9B,SAASC,IAAK,CACdA,EAAExE,UAAYqE,EAAKrE,UACnBsE,EAAMtE,UAAY,IAAIwE,EAElBD,GACF1G,EAAK+C,QAAQV,OAAOqE,EAAOD,EAAMtE,UAErC,EAgBAE,OAAQ,SAASuE,EAAQC,GACvB,IAAK,IAAIpL,KAAOmL,EAAQ,CACtB,IAAIE,EAAQnO,OAAOoO,yBAAyBH,EAAQnL,GAChDqL,IAAUnO,OAAOoO,yBAAyBF,EAAQpL,IACpD9C,OAAOqO,eAAeH,EAAQpL,EAAKqL,EAEvC,CACA,OAAOD,CACT,GAcF7G,EAAKiH,OAAU,WACb,aAEA,IAEIC,EAAqB,mBACrBC,EAAmB,WAEvB,SAASC,EAAeC,EAAaC,GA6BnC,MA5Ba,CACXC,QAAS,KAETC,SAAU,SAASC,EAAQC,GACzB,OAwDN,SAAwB/S,EAAOgT,EAASD,GAEtC,OAA6B,IAAzB/S,EAAMkM,QAAQ,MACTlM,GAEL+S,IACFC,EAAU,IAAIC,OAAOD,EAAQf,OAAS,QAAUc,IAC3C/S,EAAMkT,QAAQF,EAASG,GAChC,CAhEaC,CAAeN,EAAQJ,EAAaK,EAC7C,EAEAM,OAAQ,SAASP,EAAQC,GACvB,IAAIO,EAAQX,EAGZ,OAFII,IACFO,EAAQ,IAAIL,OAAOK,EAAMrB,OAAS,IAAMc,IACnCD,EAAOI,QAAQI,GAAO,SAASC,GACpC,OAAQA,GACR,IAAK,KACH,MAAO,OACT,IAAK,IACH,MAAO,MACT,IAAK,IACH,MAAO,MACT,IAAK,KACH,MAAO,MAET,QACE,OAAOA,EAEX,GACF,EAGJ,CAGA,IAAIC,EAAoB,CAAEC,YAAa,QACnCC,EAA0B,CAAED,YAAa,OAAQE,WAAY,KAC7DC,EAA+B,CAAEH,YAAa,OAAQI,gBAAiB,KACvEC,EAAuB,CAAEL,YAAa,WACtCM,EAA6B,CAAEN,YAAa,YAAaO,aAAc,CAAC,YAAa,SACrFC,EAAwB,CAAER,YAAa,aACvCS,EAAmB,CAAET,YAAa,OAClCU,EAAyB,CAAEV,YAAa,cACxCW,EAAqB,CAAEX,YAAa,SACpCY,EAA+B,CAAEZ,YAAa,mBAAoBO,aAAc,CAAC,YAAa,OAAQ,SAE1G,SAASb,EAAsB5D,GAC7B,OAAQA,GACN,IAAK,OACH,MAAO,KACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,IACT,IAAK,MACL,IAAK,MACH,MAAO,KAET,QACE,OAAOA,EAEb,CAYA,IAAI+E,EAAmB,CACrB,WAAcZ,EACd,IAAOQ,EACP,QAAWV,EACX,IAAOA,GAGLe,EAAe,CACjB,QAAW,CACTC,OAAQ,CAAC,OAAQ,SAEjB3B,SAAU,SAASC,GACjB,MACO,SADCA,CASV,EAEAO,OAAQ,SAASP,GACf,OAAIA,EACK,OAEF,OACT,GAGF2B,MAAO,CACL7B,QAAS,kBAETC,SAAU,SAASC,GACjB,IAAI4B,EAASC,WAAW7B,GACxB,OAAIzH,EAAK+C,QAAQe,cAAcuF,GAEtB,EAEFA,CACT,EAEArB,OAAQ,SAASP,GACf,OAAOzO,OAAOyO,EAChB,GAEF8B,QAAS,CACP/B,SAAU,SAASC,GACjB,IAAI4B,EAASjF,SAASqD,GACtB,OAAIzH,EAAK+C,QAAQe,cAAcuF,GACtB,EAEFA,CACT,EAEArB,OAAQ,SAASP,GACf,OAAOzO,OAAOyO,EAChB,GAEF,aAAc,CACZO,OAAQ,SAASP,GACf,OAAIA,EAAOrL,OAAS,EAGXqL,EAAOtB,OAAO,EAAG,GACjBsB,EAAOtB,OAAO,EAAG,GAIjBsB,EAAOtB,OAAO,EAAG,GACjBsB,EAAOtB,OAAO,EAAG,GACjBsB,EAAOtB,OAAO,EAAG,EAE5B,EAEAqB,SAAU,SAASC,GACjB,OAAIA,EAAOrL,OAAS,EAGXqL,EAAOtB,OAAO,EAAG,GAAK,IACtBsB,EAAOtB,OAAO,EAAG,GAIjBsB,EAAOtB,OAAO,EAAG,GAAK,IACtBsB,EAAOtB,OAAO,EAAG,GAAK,IACtBsB,EAAOtB,OAAO,EAAG,EAE5B,EAEAqD,SAAU,SAAS/B,GACjB,OAAOzH,EAAKyJ,UAAUC,WAAWjC,EACnC,EAEAkC,WAAY,SAASlC,GACnB,OAAOA,EAAO9W,UAChB,IA8FAiZ,EAAa5J,EAAK+C,QAAQV,OAAO6G,EAAc,CACjDW,KAAMzC,EA5QgB,uBACF,cA6QpB0C,IAAK,CAGL,EAEA,OAAU,CACRN,SAAU,SAASO,GACjB,OAAO/J,EAAKgK,OAAON,WAAWK,EAChC,EAEAJ,WAAY,SAASM,GACnB,OAAOA,EAAQtZ,UACjB,GAEF,cAAe,CAEf,EACA,KAAQ,CACN6Y,SAAU,SAAS/B,EAAQyC,GACzB,OAAIjD,EAAOkD,OACFnK,EAAKc,KAAKsJ,eAAe3C,EAAQyC,GAEjClK,EAAKc,KAAK4I,WAAWjC,EAAQyC,EAExC,EAKAP,WAAY,SAASlC,GACnB,OAAOA,EAAO9W,UAChB,EAEA6W,SAAU,SAASC,GAGjB,OAAKR,EAAOkD,QAAU1C,EAAOrL,QAAU,GAE9BwN,EAAW,aAAapC,SAASC,GAEjCA,EAAOtB,OAAO,EAAG,GAAK,IACtBsB,EAAOtB,OAAO,EAAG,GAAK,IACtBsB,EAAOtB,OAAO,EAAG,EAE5B,EAEA6B,OAAQ,SAASP,GAGf,IAAI4C,EAAM5C,EAAOrL,OAEjB,OAAW,IAAPiO,EACK5C,EAAOtB,OAAO,EAAG,GACjBsB,EAAOtB,OAAO,EAAG,GACjBsB,EAAOtB,OAAO,EAAG,GACfkE,GAAO,GACTT,EAAW,aAAa5B,OAAOP,GAG/BA,CAGX,GAEF,YAAa,CACXD,SAAU,SAASC,GAGjB,GAAKR,EAAOkD,QAA2B,GAAjB1C,EAAOrL,OAGtB,CACL,IAAI+H,EAASsD,EAAOtB,OAAO,EAAG,GAAK,IACtBsB,EAAOtB,OAAO,EAAG,GAAK,IACtBsB,EAAOtB,OAAO,EAAG,GAAK,IACtBsB,EAAOtB,OAAO,EAAG,GAAK,IACtBsB,EAAOtB,OAAO,GAAI,GAAK,IACvBsB,EAAOtB,OAAO,GAAI,GAM/B,OAJIsB,EAAO,KAAsB,MAAfA,EAAO,MACvBtD,GAAU,KAGLA,CACT,CAdE,OAAOyF,EAAWtZ,KAAKkX,SAASC,EAepC,EAEAO,OAAQ,SAASP,GAGf,IAAI4C,EAAM5C,EAAOrL,OAEjB,GAAW,IAAPiO,GAAcpD,EAAOkD,OAElB,IAAIE,GAAO,GAAI,CACpB,IAAIlG,EAASsD,EAAOtB,OAAO,EAAG,GACjBsB,EAAOtB,OAAO,EAAG,GAEjBsB,EAAOtB,OAAO,EAAG,GAEjBsB,EAAOtB,OAAO,GAAI,GAElBsB,EAAOtB,OAAO,GAAI,GAK/B,OAHIsB,EAAO,KAAsB,MAAfA,EAAO,MACvBtD,GAAU,KAELA,CACT,CAEE,OAAOsD,CACT,CAlBE,OAAOmC,EAAWtZ,KAAK0X,OAAOP,EAmBlC,EAEA+B,SAAU,SAAS/B,EAAQyC,GACzB,OAAIjD,EAAOkD,OACFnK,EAAKc,KAAKwJ,mBAAmB7C,EAAQyC,GAErClK,EAAKc,KAAK4I,WAAWjC,EAAQyC,EAExC,EAEAP,WAAY,SAASlC,GACnB,OAAOA,EAAO9W,UAChB,GAEF4Z,SAAU,CACRf,SAAU,SAAS/B,GACjB,OAAOzH,EAAKwK,SAASd,WAAWjC,EAClC,EACAkC,WAAY,SAASlC,GACnB,OAAOA,EAAO9W,UAChB,GAEF8Z,OAAQ,CAENjD,SAAU,SAAStD,GACjB,IAAIwG,EAAQxG,EAAOyG,MAAM,KAOzB,OANAD,EAAM,GAAKd,EAAW,aAAapC,SAASkD,EAAM,IAE7C1K,EAAKwK,SAASI,cAAcF,EAAM,MACrCA,EAAM,GAAKd,EAAW,aAAapC,SAASkD,EAAM,KAG7CA,CACT,EAEA1C,OAAQ,SAAS0C,GAef,OAdKzD,EAAOkD,QAA6B,IAAnBO,EAAM,GAAGtO,OAG7BsO,EAAM,GAAKd,EAAW,aAAa5B,OAAO0C,EAAM,IAFhDA,EAAM,GAAKd,EAAWtZ,KAAK0X,OAAO0C,EAAM,IAKrC1K,EAAKwK,SAASI,cAAcF,EAAM,MAChCzD,EAAOkD,QAA6B,IAAnBO,EAAM,GAAGtO,OAG7BsO,EAAM,GAAKd,EAAW,aAAa5B,OAAO0C,EAAM,IAFhDA,EAAM,GAAKd,EAAWtZ,KAAK0X,OAAO0C,EAAM,KAMrCA,EAAMlK,KAAK,IACpB,EAEAgJ,SAAU,SAAS/B,EAAQyC,GACzB,OAAOlK,EAAK6K,OAAOC,SAASrD,EAAQyC,GAAQjD,EAAOkD,OACrD,EAEAR,WAAY,SAASlC,GACnB,OAAOA,EAAOsD,QAChB,GAEFC,MAAO,CACLxD,SAAU,SAAStD,GACjB,OAAOlE,EAAKiL,MAAMC,cAAchH,GAAQ,EAC1C,EAEA8D,OAAQ,SAAStW,GACf,IAAIwW,EAAM,GACV,IAAK,IAAIiD,KAAKzZ,EAEZ,GAAKiH,OAAOwJ,UAAUsB,eAAelM,KAAK7F,EAAMyZ,GAAhD,CAGA,IAAIC,EAAM1Z,EAAKyZ,GACN,SAALA,EAEAC,EADEA,EAAIhP,OAAS,GACTwN,EAAW,aAAa5B,OAAOoD,GAE/BxB,EAAWtZ,KAAK0X,OAAOoD,GAEjB,QAALD,EACU,iBAARC,IACTA,EAAMpL,EAAKiL,MAAMI,oBAAoBD,IAE9B1F,MAAMC,QAAQyF,KACvBA,EAAMA,EAAI5K,KAAK,MAEjB0H,GAAOiD,EAAEG,cAAgB,IAAMF,EAAM,GAfrC,CAiBF,OAAOlD,EAAI/B,OAAO,EAAG+B,EAAI9L,OAAS,EACpC,EAEAoN,SAAU,SAAkB/B,GAC1B,OAAOzH,EAAKiL,MAAMM,SAAS9D,EAC7B,EAEAkC,WAAY,SAAS6B,GACnB,OAAOA,EAAOT,QAChB,GAGFU,KAAM,CACJjE,SAAU,SAASC,GAGjB,GAAIA,EAAOrL,OAAS,EAElB,OAAOqL,EAIT,IAAItD,EAASsD,EAAOtB,OAAO,EAAG,GAAK,IACtBsB,EAAOtB,OAAO,EAAG,GAAK,IACtBsB,EAAOtB,OAAO,EAAG,GAM9B,MAJkB,MAAdsB,EAAO,KACTtD,GAAU,KAGLA,CACT,EAEA6D,OAAQ,SAASP,GAGf,GAAIA,EAAOrL,OAAS,EAElB,OAAOqL,EAGT,IAAItD,EAASsD,EAAOtB,OAAO,EAAG,GACjBsB,EAAOtB,OAAO,EAAG,GACjBsB,EAAOtB,OAAO,EAAG,GAM9B,MAJkB,MAAdsB,EAAO,KACTtD,GAAU,KAGLA,CACT,KAIAuH,EAAiB1L,EAAK+C,QAAQV,OAAO4G,EAAkB,CAEzD,OAAUd,EACV,OAAU,CAAEC,YAAa,OACzB,SAAY,CAAEA,YAAa,eAC3B,SAAYD,EACZ,MAASA,EACT,QAAWA,EACX,UAAaS,EACb,QAAWT,EACX,QAAWS,EACX,YAAeT,EACf,MAASO,EACT,QAAWE,EACX,QAAWF,EACX,IAAOA,EACP,SAAY,CAAEN,YAAa,YAC3B,OAAU,CACRA,YAAa,YACbO,aAAc,CAAC,YAAa,QAC5BL,WAAY,KAEd,OAAUS,EACV,SAAY,CAAEX,YAAa,SAAUE,WAAY,KACjD,IAAO,CAAEF,YAAa,QAASI,gBAAiB,KAChD,gBAAiBI,EACjB,SAAYT,EACZ,OAAUA,EACV,UAAa,CAAEC,YAAa,eAC5B,mBAAoBK,EACpB,SAAYA,EACZ,OAAUN,EACV,aAAcA,EACd,OAAUM,EACV,MAAS,CACPL,YAAa,YACbO,aAAc,CAAC,YAAa,OAAQ,UACpCL,WAAY,IACZqD,WAAY,SAASzH,GACnB,OAA6B,IAAzBA,EAAOrD,QAAQ,KACV,UAEwB,IAAzBqD,EAAOrD,QAAQ,KAAe,OAAS,WACjD,GAEF,gBAAiB6H,EACjB,UAAaL,EACb,iBAAkBE,EAClB,MAASQ,EACT,SAAYN,EACZ,OAAUN,EACV,QAAWA,EACX,OAAUA,EACV,QAAW,CAAEC,YAAa,WAAYO,aAAc,CAAC,WAAY,cACjE,aAAgBG,EAChB,WAAcA,EACd,MAASD,EACT,KAAQV,EACR,OAAUA,IAIRyD,EAAc5L,EAAK+C,QAAQV,OAAO6G,EAAc,CAClDW,KAAMzC,EAAeF,EAAoBC,GACzC2C,IAAK1C,EAAeF,EAAoBC,GAExC7W,KAAM,CACJkZ,SAAU,SAAS/B,GACjB,OAAOzH,EAAK6L,UAAUC,wBAAwBrE,EAAQ,OACxD,EACAkC,WAAY,SAASlC,GACnB,OAAOA,EAAO9W,UAChB,EACA6W,SAAU,SAASC,GACjB,OAAqB,GAAjBA,EAAOrL,OACFwN,EAAWtZ,KAAKkX,SAASC,GACV,KAAbA,EAAO,IAA8B,GAAjBA,EAAOrL,OAC7BqL,EAAOtB,OAAO,EAAG,GAAK,IAAMsB,EAAOtB,OAAO,GAE1CsB,CAEX,EACAO,OAAQ,SAASP,GACf,OAAqB,IAAjBA,EAAOrL,OACFwN,EAAWtZ,KAAK0X,OAAOP,GACR,KAAbA,EAAO,IAA8B,GAAjBA,EAAOrL,OAC7BqL,EAAOtB,OAAO,EAAG,GAAKsB,EAAOtB,OAAO,GAEpCsB,CAEX,GAGFgE,KAAM,CACJjC,SAAU,SAAS/B,GACjB,OAAOzH,EAAK6L,UAAUC,wBAAwB,IAAMrE,EAAQ,OAC9D,EACAkC,WAAY,SAASlC,GACnB,OAAOA,EAAO9W,UAChB,EACA6W,SAAU,SAASC,GACjB,IAAIsE,EAAYH,EAAYH,KAAKO,WAAWvE,GAAQ,GAChDwE,EAAOF,EAAU,GAAIpX,EAAQoX,EAAU,GAkB3C,OAdoB,GAAhBpX,EAAMyH,OACRzH,EAAQA,EAAMwR,OAAO,EAAG,GAAK,IACrBxR,EAAMwR,OAAO,EAAG,GAAK,IACrBxR,EAAMwR,OAAO,EAAG,GACC,GAAhBxR,EAAMyH,QAA2B,KAAZzH,EAAM,GACpCA,EAAQA,EAAMwR,OAAO,EAAG,GAAK,IAAMxR,EAAMwR,OAAO,EAAG,GAC1B,GAAhBxR,EAAMyH,SACfzH,EAAQA,EAAMwR,OAAO,EAAG,GAAK,IAAMxR,EAAMwR,OAAO,EAAG,IAGlC,GAAf8F,EAAK7P,QAA2B,KAAX6P,EAAK,IAAwB,KAAXA,EAAK,KAC9CA,EAAOA,EAAK9F,OAAO,EAAG,GAAK,IAAM8F,EAAK9F,OAAO,IAGxCxR,EAAQsX,CACjB,EAEAjE,OAAQ,SAASP,GACf,IAAIsE,EAAYH,EAAYH,KAAKO,WAAWvE,GACxCwE,EAAOF,EAAU,GAAIpX,EAAQoX,EAAU,GAgB3C,OAdoB,GAAhBpX,EAAMyH,OACRzH,EAAQA,EAAMwR,OAAO,EAAG,GAChBxR,EAAMwR,OAAO,EAAG,GAChBxR,EAAMwR,OAAO,EAAG,GACC,GAAhBxR,EAAMyH,QAA2B,KAAZzH,EAAM,GACpCA,EAAQA,EAAMwR,OAAO,EAAG,GAAKxR,EAAMwR,OAAO,EAAG,GACpB,GAAhBxR,EAAMyH,SACfzH,EAAQA,EAAMwR,OAAO,EAAG,GAAKxR,EAAMwR,OAAO,EAAG,IAG5B,GAAf8F,EAAK7P,QAA2B,KAAX6P,EAAK,IAAwB,KAAXA,EAAK,KAC9CA,EAAOA,EAAK9F,OAAO,EAAG,GAAK8F,EAAK9F,OAAO,IAGlCxR,EAAQsX,CACjB,EAEAD,WAAY,SAASvE,EAAQyE,GAC3B,IAGID,EAAMtX,EAHNwX,EAAW1E,EAAOrL,OAAS,EAC3BgQ,EAAW3E,EAAOrL,QAAU8P,EAAa,EAAI,GAC7CG,EAAO5E,EAAO2E,GAclB,MAXwB,KAApB3E,EAAO0E,IACTF,EAAOxE,EAAO0E,GACdxX,EAAQ8S,EAAOtB,OAAO,EAAGgG,IAChB1E,EAAOrL,OAAS,IAAc,KAARiQ,GAAuB,KAARA,IAC9CJ,EAAOxE,EAAOtB,OAAOiG,GACrBzX,EAAQ8S,EAAOtB,OAAO,EAAGiG,KAEzBH,EAAO,GACPtX,EAAQ8S,GAGH,CAACwE,EAAMtX,EAChB,GAGF,YAAa,CACX6U,SAAU,SAAS/B,GACjB,OAAOzH,EAAK6L,UAAUC,wBAAwBrE,EAAQ,YACxD,EAEAkC,WAAY,SAASlC,GACnB,OAAOA,EAAO9W,UAChB,EAEA6W,SAAU,SAASC,GACjB,OAAOmE,EAAY,oBAAoBpE,SAASC,EAClD,EAEAO,OAAQ,SAASP,GACf,OAAOmE,EAAY,oBAAoB5D,OAAOP,EAChD,GAGF,mBAAoB,CAClB+B,SAAU,SAAS/B,GACjB,OAAOzH,EAAK6L,UAAUC,wBAAwBrE,EAAQ,mBACxD,EAEAkC,WAAY,SAASlC,GACnB,OAAOA,EAAO9W,UAChB,EAEA6W,SAAU,SAASC,GACjB,IAAIiD,EAAQjD,EAAOkD,MAAM,KACzB,OAAQD,EAAM,GAAKkB,EAAYtb,KAAKkX,SAASkD,EAAM,IAAM,KACjDA,EAAM,GAAK,IAAMkB,EAAYH,KAAKjE,SAASkD,EAAM,IAAM,GACjE,EAEA1C,OAAQ,SAASP,GACf,IAAIiD,EAAQjD,EAAOkD,MAAM,KACzB,OAAOiB,EAAYtb,KAAK0X,OAAO0C,EAAM,KAC7BA,EAAM,GAAK,IAAMkB,EAAYH,KAAKzD,OAAO0C,EAAM,IAAM,GAE/D,GAEF4B,UAAW1C,EAAW,aACtB,eAAgB,CACdrC,QAAS,qBAmBTgF,EAAkBvM,EAAK+C,QAAQV,OAAO4G,EAAkB,CAC1D,IAAO,CAAEb,YAAa,OAAQI,gBAAiB,IAAKF,WAAY,KAChE,YAAeU,EACf,KAAQA,EACR,UAAaH,EACb,OAAUA,EACV,aAAgBN,EAChB,MAASJ,EACT,MAASU,EACT,GAAMV,EACN,OAAUI,EACV,IAAOM,EACP,KAAQA,EACR,IAAOA,EACP,KAAQV,EACR,KAAQ,CAAEC,YAAa,gBACvB,KAAQS,EACR,OAAUA,EACV,EAAK,CAAET,YAAa,OAAQI,gBAAiB,IAAKF,WAAY,KAC9D,SAAYD,EACZ,KAAQF,EACR,IAAO,CAAEC,YAAa,OAAQI,gBAAiB,KAC/C,MAASK,EACT,QAAWA,EACX,IAAO,CAAET,YAAa,aACtB,KAAQD,EACR,MAASU,EACT,OAAUA,EACV,IAAO,CAAET,YAAa,MAAOO,aAAc,CAAC,MAAO,SACnD,MAASR,EACT,GAAM,CAAEC,YAAa,OAAQO,aAAc,CAAC,OAAQ,aAAc,QAClE,IAAOR,IAGLqE,EAAexM,EAAK+C,QAAQV,OAAO6G,EAAc,CACnDuD,OAAQ7C,EAAW6C,OACnBnc,KAAMsb,EAAYtb,KAClB,YAAasb,EAAY,aACzB,eAAgB,CAGhB,EACA9B,IAAKF,EAAWE,IAChBD,KAAMD,EAAWC,KACjB4B,KAAM7B,EAAW6B,KACjBiB,MAAO9C,EAAWC,KAClB,aAAc,CACZ7B,OAAQ,SAASP,GACf,OAAOA,EAAOtB,OAAO,EAAG,EAC1B,EAEAqB,SAAU,SAASC,GACjB,OAAOA,EAAOtB,OAAO,EAAG,EAC1B,EAEAqD,SAAU,SAAS/B,GACjB,OAAOzH,EAAKyJ,UAAUC,WAAWjC,EACnC,EAEAkC,WAAY,SAASlC,GACnB,OAAOA,EAAO9W,UAChB,KAkBAgc,EAAmB3M,EAAK+C,QAAQV,OAAO4G,EAAkB,CAC3DhN,GAAIkM,EACJ/R,EAAG,CAAEgS,YAAa,OAAQI,gBAAiB,IAAKF,WAAY,KAC5DsE,SAAUvE,EACVwE,MAAO,CAAEzE,YAAa,SAAUO,aAAc,CAAC,SAAU,QACzDmE,KAAM,CACJ1E,YAAa,YACbO,aAAc,CAAC,YAAa,QAC5BgD,WAAY,SAASzH,GACnB,OAAiC,IAAzBA,EAAOrD,QAAQ,KAAe,OAAS,WACjD,GAGFkM,IAAK,CAAE3E,YAAa,OAAQI,gBAAiB,IAAKF,WAAY,KAC9D5M,MAAOyM,EAEP6E,IAAK,CAAE5E,YAAa,gBACpB6E,MAAO9E,EACP+E,OAAQ/E,EAERgF,GAAI,CAAE/E,YAAa,aAAcO,aAAc,CAAC,aAAc,SAC9DyE,IAAK,CAAEhF,YAAa,QAASI,gBAAiB,KAE9C3M,MAAOsM,EACPkF,KAAMlF,EACNmF,KAAM,CAAElF,YAAa,SAAUO,aAAc,CAAC,SAAU,QACxD4E,MAAO,CAAEnF,YAAa,QAASO,aAAc,CAAC,QAAS,OAAQ,QAC/D6E,IAAKjF,EAELkF,KAAMpF,EACNqF,OAAQvF,EACRwF,IAAK,CACHvF,YAAa,YACbO,aAAc,CAAC,YAAa,QAC5BgD,WAAY,SAASzH,GACnB,OAAiC,IAAzBA,EAAOrD,QAAQ,KAAe,OAAS,WACjD,GAEF,cAAesH,EACfyF,MAAO,CAAExF,YAAa,SAAUO,aAAc,CAAC,SAAU,QAEzDkF,MAAO1F,EACP1M,IAAK,CAAE2M,YAAa,SAAUO,aAAc,CAAC,SAAU,WAOrDmF,EAAU,CACZnZ,MAAOiV,EACPmE,MAhsBe,CAcf,OAAU,CACR5E,OAAQ,CAAC,aAAc,QAAS,WAAY,OAAQ,WACpD6E,YAAY,EACZC,gBAAgB,GAGlB,iBAAkB,CAChBC,UAAW,cACX5F,WAAY,IACZ6F,0BAA0B,GAE5B,eAAgB,CACdD,UAAW,cACX5F,WAAY,IACZ6F,0BAA0B,GAG5B,SAAY,CACVhF,OAAQ,CAAC,OAAQ,WAGnB,OAAU,CACRA,OAAQ,CAAC,OAAQ,OAAQ,mBAAoB,kBAC7C6E,YAAY,EACZC,gBAAgB,GAGlB,OAAU,CACRC,UAAW,cACX5F,WAAY,IACZ6F,0BAA0B,GAE5B,SAAY,CAEVhF,OAAQ,CAAC,eAAgB,WAAY,WAAY,YACxC,YAAa,YAAa,cACnC6E,YAAY,EACZC,gBAAgB,GAElB,MAAS,CACP9E,OAAQ,CAAC,kBAEX,QAAW,CACTA,OAAQ,CAAC,QAAS,QAEpB,QAAW,CACTA,OAAQ,CAAC,SAAU,QAAS,WAC5B6E,YAAY,EACZC,gBAAgB,GAElB,KAAQ,CACN9E,OAAQ,CAAC,kBAAmB,QACnB,kBAAmB,mBAC5B6E,YAAY,EACZC,gBAAgB,GAElB,KAAQ,CACN9E,OAAQ,CAAC,OAAQ,UAEnB,UAAW,CACT+E,UAAW,eAEb,KAAQ,CACN3G,QAAS,OAEX,MAAS,CAEP4B,OAAQ,CAAC,SAAU,UAAW,cAAe,OAAQ,YAC5C,WAAY,QAAS,UAAW,SAAU,QAAS,OACnD,OAAQ,MAAO,cACxB6E,YAAY,EACZC,gBAAgB,IA4mBlBG,SAAU1C,GAOR2C,EAAW,CACb1Z,MAAOiX,EACPmC,MA3JgB,CAChB,KAAQ,CACNG,UAAW,OACX5F,WAAY,KAEd,MAAS,CAEPa,OAAQ,CAAC,OAAQ,MAAO,OAAQ,OAAQ,YAAa,mBAC5C,YAAa,UAAW,UAAW,QAAS,aAC5C,gBACT6E,YAAY,EACZC,gBAAgB,IAiJlBG,SAAU7B,GAOR+B,EAAY,CACd3Z,MAAO6X,EACPuB,MArFiB,CACjB,KAAQ,CACNG,UAAW,OACX5F,WAAY,KAEd,MAAS,CAEPa,OAAQ,CAAC,OAAQ,MAAO,OAAQ,YAAa,eAAgB,OACpD,UAAW,UAAW,QAAS,aAAc,QAAS,UAC/D6E,YAAY,EACZC,gBAAgB,IA4ElBG,SAAUzB,GAUR1F,EAAS,CAgBXkD,QAAQ,EAMRoE,WAAYT,EAMZ1F,YAAa,UAuBb/W,WAAY,CACVqb,MAAO2B,EACPG,OAAQF,EACRG,OAAQX,EACRY,MAAOZ,EACPa,SAAUb,EACVc,OAAQd,EACRe,UAAWf,EACXgB,SAAUhB,EACViB,SAAUjB,GAQZkB,UAAWlB,EAMXpB,MAAO2B,EAMPG,OAAQF,EAQRW,aAAc,SAASC,GAErB,OADiBA,GAAiBA,KAAiBjI,EAAO5V,WACtC4V,EAAO5V,WAAW6d,GAAiBjI,EAAOsH,UAChE,GAGF,OAAOtH,CACT,CAl/Bc,GA8/BdjH,EAAKmP,UAAa,WAChB,aAEA,IAAIC,EAAc,OACdC,EAAqB,UAErBpI,EAASjH,EAAKiH,OACdlE,EAAU/C,EAAK+C,QAUnB,SAASoM,EAAUG,GACK,iBAAXA,EAAK,KAEdA,EAAO,CAACA,IAOV,IAJA,IAAI5Z,EAAI,EACJ2U,EAAMiF,EAAKlT,OACX+H,EAAS,GAENzO,EAAI2U,EAAK3U,IACdyO,GAAUgL,EAAUtL,UAAUyL,EAAK5Z,IAAM0Z,EAG3C,OAAOjL,CACT,CAgBAgL,EAAUtL,UAAY,SAASA,EAAW0L,GACxC,IAAIne,EAAOyS,EAAU,GAAGyH,cACpBnH,EAAS,SAAW/S,EAAOge,EAE3B5W,EAAQqL,EAAU,GAClB2L,EAAU,EACVC,EAAUjX,EAAM4D,OAEhBsT,EAAgB7L,EAAU,GAS9B,IANsB,UAAlB6L,GAA6B7L,EAAU,GAAGzH,OAAS,IACtB,YAAvByH,EAAU,GAAG,GAAG,IAA2C,QAAvBA,EAAU,GAAG,GAAG,MAC5D6L,EAAgB,UAElBH,EAAYA,GAAatI,EAAOgI,aAAaS,GAEtCF,EAAUC,EAASD,IACxBrL,GAAUgL,EAAUf,SAAS5V,EAAMgX,GAAUD,GAAaH,EAQ5D,IAJA,IAAIO,EAAQ9L,EAAU,IAAM,GACxB+L,EAAU,EACVC,EAAUF,EAAMvT,OAEbwT,EAAUC,EAASD,IACxBzL,GAAUgL,EAAUtL,UAAU8L,EAAMC,GAAUL,GAAaH,EAI7D,OADAjL,EAAU,OAAS/S,CAErB,EAcA+d,EAAUf,SAAW,SAASA,EAAUmB,EAAWO,GACjD,IAMIC,EANA3e,EAAOgd,EAAS,GAAG9C,cACnB0E,EAAS5B,EAAS,GAClB6B,EAAS7B,EAAS,GAElBrI,EAAO3U,EAGX,IAAK2e,KAAaE,EAAQ,CACxB,IAAItb,EAAQsb,EAAOF,GAGfE,EAAOxM,eAAesM,MACpBzH,EAAcyH,KAAaR,EAAUxB,OAAUwB,EAAUxB,MAAMgC,GAAWzH,aAC5D5C,MAAMC,QAAQhR,IAC1B4a,EAAUxB,MAAMgC,GAAW5B,2BAC7B7F,EAAa,IAAMA,EAAa,KAElC3T,EAAQA,EAAMwF,IAAIgV,EAAUe,kBAC5Bvb,EAAQwa,EAAU7G,WAAW3T,EAAO2T,EAAY,UAAW,KAAMiH,IAEjE5a,EAAQwa,EAAUe,iBAAiBvb,GAIrCoR,GAAQ,IAAMgK,EAAUzE,cACxBvF,GAAQ,IAAMoJ,EAAUgB,cAAcxb,GAE1C,CAEA,GAAwB,IAApByZ,EAAShS,OAEX,OAAO2J,EAAO,IAGhB,IAMIqK,EANAlC,EAAYE,EAAS,GAEpBmB,IACHA,EAAYtI,EAAOsH,YAIrB,IAAIjG,GAAa,EACbE,GAAkB,EAClB6H,GAAY,EAqDhB,OAnDIL,KAAUT,EAAUnB,UAGlB,eAFJgC,EAAcb,EAAUnB,SAAS4B,MAG/B1H,EAAa8H,EAAY9H,YAGtB,oBAAqB8H,GAAgB1K,MAAMC,QAAQyI,EAAS,MAC/D5F,EAAkB4H,EAAY5H,iBAG5B,gBAAiB4H,EACflC,IAAckC,EAAYhI,cAC5BiI,GAAY,GAGVnC,IAAcmB,IAChBgB,GAAY,IAIZnC,IAAcmB,IAChBgB,GAAY,GAMXA,IAEHtK,GAAQ,UAAYmI,EAAU5C,eAGhCvF,GAAQ,IAGNA,GADEuC,GAAcE,EACR2G,EAAU7G,WAChB8F,EAAS,GAAI5F,EAAiB0F,EAAW5F,EAAYiH,EAAW/G,GAEzDF,EACD6G,EAAU7G,WAChB8F,EAASxY,MAAM,GAAI0S,EAAY4F,EAAW,KAAMqB,GAAW,GAEpD/G,EACD2G,EAAU7G,WAChB8F,EAAS,GAAI5F,EAAiB0F,EAAW,KAAMqB,EAAW/G,GAGpD2G,EAAUxa,MAAMyZ,EAAS,GAAIF,EAAWqB,GAAW,GAGtDO,EAAS/J,EAAO/F,EAAK+C,QAAQ8C,SAASE,EAC/C,EAcAoJ,EAAUgB,cAAgB,SAASxb,GAEjC,OAA+C,IAA1CoO,EAAQuB,iBAAiB3P,EAAO,OACU,IAA1CoO,EAAQuB,iBAAiB3P,EAAO,OACU,IAA1CoO,EAAQuB,iBAAiB3P,EAAO,KAE5BA,EAGF,IAAMA,EAAQ,GACvB,EAkBAwa,EAAU7G,WAAa,SAASa,EAAQmH,EAAO5X,EAAM6X,EAAYhB,EAAW/G,GAK1E,IAJA,IAAIrE,EAAS,GACTkG,EAAMlB,EAAO/M,OACb1G,EAAI,EAEDA,EAAI2U,EAAK3U,IACV6a,GAAc7K,MAAMC,QAAQwD,EAAOzT,IACrCyO,GAAUgL,EAAU7G,WAAWa,EAAOzT,GAAI6a,EAAY7X,EAAM,KAAM6W,EAAW/G,GAE7ErE,GAAUgL,EAAUxa,MAAMwU,EAAOzT,GAAIgD,EAAM6W,EAAW/G,GAGpD9S,IAAO2U,EAAM,IACflG,GAAUmM,GAId,OAAOnM,CACT,EAYAgL,EAAUxa,MAAQ,SAASA,EAAO+D,EAAM6W,EAAW/G,GACjD,OAAI9P,KAAQ6W,EAAU5a,OAAS,WAAY4a,EAAU5a,MAAM+D,GAClD6W,EAAU5a,MAAM+D,GAAMsP,OAAOrT,EAAO6T,GAEtC7T,CACT,EASAwa,EAAUe,iBAAmB,SAAS9E,GACpC,OAAOA,EAAIvD,QAAQ,WAAW,SAAS2I,GACrC,OAAOC,EAAoBD,EAC7B,GACF,EACA,IAAIC,EAAsB,CAAE,IAAK,KAAM,KAAM,KAAM,IAAK,MAExD,OAAOtB,CACT,CA9RiB,GAySjBnP,EAAKG,MAAS,WACZ,aAEA,IAAIuQ,EAAO,SAQPzJ,EAASjH,EAAKiH,OACdlE,EAAU/C,EAAK+C,QAUnB,SAAS4N,EAAY7e,GACnBkC,KAAKlC,QAAUA,EACfkC,KAAK5C,KAAO,cAEZ,IACE,MAAM,IAAIoE,KACZ,CAAE,MAAOc,GACP,GAAIA,EAAEsa,MAAO,CACX,IAAIjG,EAAQrU,EAAEsa,MAAMjG,MAAM,MAC1BA,EAAMkG,QACN7c,KAAK4c,MAAQjG,EAAMnK,KAAK,KAC1B,CACF,CACF,CAeA,SAASsQ,EAAO1L,GACd,IAAI2L,EAAQ,CAAC,EACTC,EAAOD,EAAMlN,UAAY,GAY7B,GAVAkN,EAAMH,MAAQ,CAACI,GAEfF,EAAOG,UAAU7L,GAAO,SAAS8L,EAAKnL,GACpC+K,EAAOK,mBAAmBpL,EAAMgL,EAClC,IAMIA,EAAMH,MAAMxU,OAAS,EACvB,MAAM,IAAIuU,EACR,sDAMJ,OAFAI,EAAQ,KAEe,GAAfC,EAAK5U,OAAc4U,EAAK,GAAKA,CACvC,CApCAL,EAAYxO,UAAY3M,MAAM2M,UAiD9B2O,EAAO1C,SAAW,SAASlG,EAAKqH,GAC9B,IAAIwB,EAAQ,CACVlN,UAAW,CAAC,GAAI,IAChB0L,UAAWA,GAAatI,EAAOsH,YAGjC,OADAuC,EAAOK,mBAAmBjJ,EAAK6I,GACxBA,EAAMlN,UAAU,GAAG,EAC5B,EAWAiN,EAAOjN,UAAY,SAASqE,GAC1B,OAAO4I,EAAO5I,EAChB,EAGA4I,EAAOH,YAAcA,EAsBrBG,EAAOK,mBAAqB,SAASpL,EAAMgL,GAEzC,IAGIK,EACAC,EAGAjgB,EACAuD,EA2BA2c,EAoDApD,EAvFAqD,EAAWxL,EAAKlF,QAhIA,KAiIhB2Q,EAAWzL,EAAKlF,QAhIA,KA2IhBoP,EAAS,CAAC,EAwBd,IATmB,IAAduB,IAAiC,IAAdD,GAGlBC,EAAWD,IACbC,GAAY,IAKE,IAAdA,EAAiB,CAGnB,GAFApgB,EAAO2U,EAAK9H,UAAU,EAAGuT,GAAUC,eAEX,IADxBH,EAAeR,EAAOY,iBAAiB3L,EAAK9H,UAAUuT,GAAW,EAAGT,EAAMxB,YACzD,GACf,MAAM,IAAIoB,EAAY,0BAA4B5K,EAAO,KAI3D,GAFAkK,EAASqB,EAAa,GACtBF,EAAiBE,EAAa,GAAGlV,OAASkV,EAAa,GAAKE,GAEI,KAD3DH,EACHtL,EAAK9H,UAAUmT,GAAgBvQ,QA7Kf,MAgLhB,MAAM,IAAI8P,EAAY,+BAAiC5K,EAAO,KAF9DpR,EAAQoR,EAAK9H,UAAUmT,EAAiBC,EAAe,EAI3D,KAAO,KAAkB,IAAdE,EAgCT,MAAM,IAAIZ,EACR,uCAAyC5K,EAAO,KA5BlD,GAHA3U,EAAO2U,EAAK9H,UAAU,EAAGsT,GAAUE,cACnC9c,EAAQoR,EAAK9H,UAAUsT,EAAW,GAErB,UAATngB,EAAkB,CACpB,IAAIugB,EAAe,CAAChd,EAAM8c,cAAe,GAAI,IAW7C,OAV2B,IAAvBV,EAAMH,MAAMxU,OACd2U,EAAMlN,UAAUlO,KAAKgc,GAErBZ,EAAMlN,UAAU,GAAGlO,KAAKgc,GAE1BZ,EAAMH,MAAMjb,KAAKob,EAAMlN,WACvBkN,EAAMlN,UAAY8N,OACbZ,EAAMxB,YACTwB,EAAMxB,UAAYtI,EAAOgI,aAAa8B,EAAMlN,UAAU,KAG1D,CAAO,GAAa,QAATzS,EAET,YADA2f,EAAMlN,UAAYkN,EAAMH,MAAMgB,MAgBlC,CAGA,IAEIC,EA0CA1N,EA5CAmE,GAAa,EACbE,GAAkB,EAGlBpX,KAAQ2f,EAAMxB,UAAUnB,WAGtB,eAFJyD,EAAkBd,EAAMxB,UAAUnB,SAAShd,MAGzCkX,EAAauJ,EAAgBvJ,YAG3B,oBAAqBuJ,IACvBrJ,EAAkBqJ,EAAgBrJ,iBAGhC7T,GAAS,eAAgBkd,IAC3B3D,EAAY2D,EAAgBlG,WAAWhX,KAKtCuZ,IASDA,EARI,UAAW+B,EAQHA,EAAOtb,MAAM8c,cAPrBI,EACUA,EAAgBzJ,YA7OX,kBAuPhB6H,EAAOtb,MAWV2T,GAAcE,EAEhBrE,EAAS,CAAC/S,EAAM6e,EAAQ/B,EADxBvZ,EAAQmc,EAAOgB,iBAAiBnd,EAAO6T,EAAiB0F,EAAW,GAAI5F,EAAYyI,EAAMxB,UAAW/G,IAE3FF,GACTnE,EAAS,CAAC/S,EAAM6e,EAAQ/B,GACxB4C,EAAOgB,iBAAiBnd,EAAO2T,EAAY4F,EAAW/J,EAAQ,KAAM4M,EAAMxB,WAAW,IAGrFpL,EAFSqE,EAEA,CAACpX,EAAM6e,EAAQ/B,EADxBvZ,EAAQmc,EAAOgB,iBAAiBnd,EAAO6T,EAAiB0F,EAAW,GAAI,KAAM6C,EAAMxB,UAAW/G,IAIrF,CAACpX,EAAM6e,EAAQ/B,EADxBvZ,EAAQmc,EAAOiB,YAAYpd,EAAOuZ,EAAW6C,EAAMxB,WAAW,IAKrC,UAAvBwB,EAAMlN,UAAU,IAAgD,IAA9BkN,EAAMlN,UAAU,GAAGzH,QACtC,YAAThL,GAAgC,QAAVuD,IAC9Boc,EAAMxB,UAAYtI,EAAOgI,aAAa,WAExC8B,EAAMlN,UAAU,GAAGlO,KAAKwO,EAC1B,EAYA2M,EAAOiB,YAAc,SAASpd,EAAO+D,EAAM6W,EAAW/G,GACpD,OAAI9P,KAAQ6W,EAAU5a,OAAS,aAAc4a,EAAU5a,MAAM+D,GACpD6W,EAAU5a,MAAM+D,GAAM8O,SAAS7S,EAAO6T,GAExC7T,CACT,EAYAmc,EAAOY,iBAAmB,SAAS3L,EAAM3L,EAAOmV,GAc9C,IAbA,IAIIne,EAAM4gB,EACNrd,EACA+D,EAAM4P,EAAY2J,EANlBC,EAAY9X,EACZqK,EAAM,EAENN,EAAS,CAAC,EAEHoN,GAAY,GAQP,IAAR9M,IAC2D,KAA3DA,EAAM1B,EAAQuB,iBAAiByB,EAnUd,IAmU2BtB,EAAM,KAAY,CAGpE,GAAmB,IADnBrT,EAAO2U,EAAKI,OAAO+L,EAAY,EAAGzN,EAAMyN,EAAY,IAC3C9V,OACP,MAAM,IAAIuU,EAAY,4BAA8B5K,EAAO,KAoB7D,GAjBAkM,GAAU,EACV3J,GAAa,EAGX5P,GALFsZ,EAAS5gB,EAAKqgB,iBAIAlC,EAAUxB,OAASwB,EAAUxB,MAAMiE,GAAQ9D,UAChDqB,EAAUxB,MAAMiE,GAAQ9D,UA5UZ,OAiVjB8D,KAAUzC,EAAUxB,QACtBzF,EAAaiH,EAAUxB,MAAMiE,GAAQ1J,WACjCiH,EAAUxB,MAAMiE,GAAQ7D,2BAC1B8D,EAAUnB,EAAOqB,eAAe,IAAM7J,EAAa,OAKtC,MADFvC,EAAKtB,EAAM,GACJ,CAGpB,GAFA8M,EAAW9M,EAAM,EACjBA,EAAM1B,EAAQuB,iBAAiByB,EAAM,IAAKwL,GACtCjJ,IAAsB,GAAR7D,EAEd,IADA,IAAI2N,GAAgB,EACbA,GACDrM,EAAKtB,EAAM,IAAM6D,GAA+B,KAAjBvC,EAAKtB,EAAM,GAC5CA,EAAM1B,EAAQuB,iBAAiByB,EAAM,IAAKtB,EAAM,GAEhD2N,GAAgB,EAIxB,IAAa,IAAT3N,EACF,MAAM,IAAIkM,EACR,4CAA8C5K,EAAO,KAGzDpR,EAAQoR,EAAKI,OAAOoL,EAAU9M,EAAM8M,IAEjB,KADnBW,EAAYnP,EAAQuB,iBAAiByB,EA/WrB,IA+W4CtB,MAE1DA,GAAM,EAEV,KAAO,CACL8M,EAAW9M,EAAM,EAGjB,IAAI4N,EAAUtP,EAAQuB,iBAAiByB,EAvXvB,IAuX8CwL,GAC1De,EAAevP,EAAQuB,iBAAiByB,EAzX5B,IAyXmDwL,IAC7C,IAAlBe,GAAuBD,EAAUC,GAEnCD,EAAUC,EACV7N,GAAM,IACgB,IAAb4N,GAGPA,GADoB,IAAlBC,EACQvM,EAAK3J,OAELkW,EAEZ7N,GAAM,IAENyN,EAAYG,EACZ5N,EAAM4N,GAGR1d,EAAQoR,EAAKI,OAAOoL,EAAUc,EAAUd,EAC1C,CAGA,GADA5c,EAAQmc,EAAOqB,eAAexd,GAC1B2T,EAAY,CACd,IAAIiK,EAAYN,GAAW3J,EAC3B3T,EAAQmc,EAAOgB,iBAAiBnd,EAAO4d,EAAW7Z,EAAM,GAAI,KAAM6W,EACpE,MACE5a,EAAQmc,EAAOiB,YAAYpd,EAAO+D,EAAM6W,GAGtCjH,GAAe0J,KAAU7N,EACvBuB,MAAMC,QAAQxB,EAAO6N,IACvB7N,EAAO6N,GAAQrc,KAAKhB,GAEpBwP,EAAO6N,GAAU,CACf7N,EAAO6N,GACPrd,GAIJwP,EAAO6N,GAAUrd,CAErB,CACA,MAAO,CAACwP,EAAQxP,EAAO4c,EACzB,EAUAT,EAAOqB,eAAiB,SAAS/G,GAC/B,OAAOA,EAAIvD,QAAQ,YAAY,SAAS2I,GACtC,OAAOC,EAAoBD,EAC7B,GACF,EACA,IAAIC,EAAsB,CAAE,KAAM,IAAK,KAAM,KAAM,KAAM,KA6GzD,OA5FAK,EAAOgB,iBAAmB,SAASvN,EAAQ+L,EAAO5X,EAAMyL,EAAQoM,EAAYhB,EAAW/G,GACrF,IAEI7T,EAFA8P,EAAM,EACN+N,EAAU,EAEd,GAAqB,IAAjBlC,EAAMlU,OACR,OAAOmI,EAIT,MAAqE,KAA7DE,EAAM1B,EAAQuB,iBAAiBC,EAAQ+L,EAAOkC,KACpD7d,EAAQ4P,EAAO4B,OAAOqM,EAAS/N,EAAM+N,GAEnC7d,EADE4b,EACMO,EAAOgB,iBAAiBnd,EAAO4b,EAAY7X,EAAM,GAAI,KAAM6W,EAAW/G,GAEtEsI,EAAOiB,YAAYpd,EAAO+D,EAAM6W,EAAW/G,GAErDrE,EAAOxO,KAAKhB,GACZ6d,EAAU/N,EAAM6L,EAAMlU,OAYxB,OARAzH,EAAQ4P,EAAO4B,OAAOqM,GAEpB7d,EADE4b,EACMO,EAAOgB,iBAAiBnd,EAAO4b,EAAY7X,EAAM,GAAI,KAAM6W,EAAW/G,GAEtEsI,EAAOiB,YAAYpd,EAAO+D,EAAM6W,EAAW/G,GAErDrE,EAAOxO,KAAKhB,GAEY,GAAjBwP,EAAO/H,OAAc+H,EAAO,GAAKA,CAC1C,EAWA2M,EAAOG,UAAY,SAAS1M,EAAQ3P,GAClC,IAGImR,EACA0M,EAEAC,EANArI,EAAM9F,EAAOnI,OACboW,EAAUjO,EAAOC,OAAOkM,GACxBjM,EAAM+N,EAMV,GAIIE,GAHFjO,EAAMF,EAAO1D,QAAQ,KAAM2R,GAAW,GAE5B,GAAyB,OAApBjO,EAAOE,EAAM,GACV,EAEA,EAGN,IAARA,IACFA,EAAM4F,EACNqI,EAAgB,GAKA,OAFlBD,EAAYlO,EAAOiO,KAEoB,OAAdC,EAEvB1M,GAAQxB,EAAO4B,OACbqM,EAAU,EACV/N,EAAM+N,GAAWE,EAAgB,KAG/B3M,GACFnR,EAAS,KAAMmR,GAEjBA,EAAOxB,EAAO4B,OACZqM,EACA/N,EAAM+N,EAAUE,IAIpBF,EAAU/N,QACHA,IAAQ4F,IAGjBtE,EAAOA,EAAK4M,QAEHvW,QACPxH,EAAS,KAAMmR,EACnB,EAEO+K,CAET,CAviBa,GAkjBb9Q,EAAKC,UAAa,WAChB,aAiBA,SAASA,EAAUqP,EAAMjY,GACF,iBAAX,IAERiY,EAAO,CAACA,EAAM,GAAI,KAIpBtb,KAAKsb,KAAOA,EAEZtb,KAAKqD,OAASA,GAAU,IAC1B,CAodA,OAldA4I,EAAUkC,UAAY,CAWpByQ,uBAAwB,EAQxBC,wBAAyB,EAMzB,QAAIzhB,GACF,OAAO4C,KAAKsb,KAnDC,EAoDf,EAQA,cAAIwD,GAEF,OADmB9e,KAAKqD,QAAUrD,KAAKqD,OAAOyb,YACvB9S,EAAKiH,OAAOgI,aAAajb,KAAK5C,KACvD,EAEA2hB,kBAAmB,SAASC,GAM1B,GALKhf,KAAKif,cACRjf,KAAKif,YAAc,GACnBjf,KAAK6e,wBAA0B,GAG7B7e,KAAKif,YAAYD,GACnB,OAAOhf,KAAKif,YAAYD,GAG1B,IAAIE,EAAO,IAAIjT,EACbjM,KAAKsb,KA7EW,GA6EW0D,GAC3Bhf,MAIF,OADAA,KAAK6e,0BACG7e,KAAKif,YAAYD,GAASE,CACpC,EAEAC,iBAAkB,SAASH,GAMzB,GALKhf,KAAKof,cACRpf,KAAKof,YAAc,GACnBpf,KAAK4e,uBAAyB,GAG5B5e,KAAKof,YAAYJ,GACnB,OAAOhf,KAAKof,YAAYJ,GAG1B,IAAIlU,EAAO,IAAIkB,EAAKqT,SAClBrf,KAAKsb,KAjGU,GAiGW0D,GAC1Bhf,MAIF,OADAA,KAAK4e,yBACG5e,KAAKof,YAAYJ,GAASlU,CACpC,EAQAC,qBAAsB,SAAS3N,GAC7B,GAAIA,GAKF,IAJA,IAAIsE,EAAI,EACJia,EAAQ3b,KAAKsb,KAjHD,GAkHZjF,EAAMsF,EAAMvT,OAET1G,EAAI2U,EAAK3U,IACd,GAAIia,EAAMja,GApHD,KAoHoBtE,EAE3B,OADa4C,KAAK+e,kBAAkBrd,QAKxC,GAAI1B,KAAKsb,KA3HO,GA2HelT,OAC7B,OAAOpI,KAAK+e,kBAAkB,GAKlC,OAAO,IACT,EAQA7T,oBAAqB,SAAS9N,GAC5B,IAAIkiB,EAAUtf,KAAKsb,KA3ID,GA2IuBlT,OACrC1G,EAAI,EAER,GAAItE,EAAM,CAIR,IAHA,IAAIue,EAAQ3b,KAAKsb,KA/ID,GAgJZnL,EAAS,GAENzO,EAAI4d,EAAS5d,IACdtE,IAASue,EAAMja,GAlJV,IAmJPyO,EAAOxO,KACL3B,KAAK+e,kBAAkBrd,IAI7B,OAAOyO,CACT,CACE,IAAKnQ,KAAKif,aACLjf,KAAK6e,0BAA4BS,EACpC,KAAO5d,EAAI4d,EAAS5d,IAClB1B,KAAK+e,kBAAkBrd,GAI3B,OAAO1B,KAAKif,aAAe,EAE/B,EAQAM,YAAa,SAASniB,GAKpB,IAJA,IAAIoH,EAAQxE,KAAKsb,KA9KA,GA+KbjF,EAAM7R,EAAM4D,OAEZ1G,EAAI,EACDA,EAAI2U,EAAK3U,IAEd,GAAI8C,EAAM9C,GAlLC,KAkLkBtE,EAC3B,OAAO,EAIX,OAAO,CACT,EAQA4N,iBAAkB,SAAS5N,GACzB,GAAIA,GAKF,IAJA,IAAIsE,EAAI,EACJ8C,EAAQxE,KAAKsb,KArMF,GAsMXjF,EAAM7R,EAAM4D,OAET1G,EAAI2U,EAAK3U,IACd,GAAI8C,EAAM9C,GAvMD,KAuMoBtE,EAE3B,OADa4C,KAAKmf,iBAAiBzd,QAKvC,GAAI1B,KAAKsb,KA/MM,GA+MelT,OAC5B,OAAOpI,KAAKmf,iBAAiB,GAIjC,OAAO,IACT,EAQAK,sBAAuB,SAASpiB,GAC9B,IAAI0N,EAAO9K,KAAKgL,iBAAiB5N,GACjC,OAAI0N,EACKA,EAAKG,gBAGP,IACT,EAQAsE,iBAAkB,SAASnS,GACzB,IAAIkiB,EAAUtf,KAAKsb,KA7OF,GA6OuBlT,OACpC1G,EAAI,EAER,GAAItE,EAAM,CAIR,IAHA,IAAIoH,EAAQxE,KAAKsb,KAjPF,GAkPXnL,EAAS,GAENzO,EAAI4d,EAAS5d,IACdtE,IAASoH,EAAM9C,GAnPV,IAoPPyO,EAAOxO,KACL3B,KAAKmf,iBAAiBzd,IAI5B,OAAOyO,CACT,CACE,IAAKnQ,KAAKof,aACLpf,KAAK4e,yBAA2BU,EACnC,KAAO5d,EAAI4d,EAAS5d,IAClB1B,KAAKmf,iBAAiBzd,GAI1B,OAAO1B,KAAKof,aAAe,EAE/B,EAEAK,qBAAsB,SAASC,EAAWC,EAAOX,GAG/C,IAFAW,EAAQA,GAAS,IAEPX,GAAQ,CAChB,IAAIpN,EAAM+N,EAAMX,GACZ,WAAYpN,IACZA,EAAIvO,OAAS,KAEnB,CAEAsc,EAAMrY,OAAO0X,EAAO,GAGpBhf,KAAKsb,KAAKoE,GAAWpY,OAAO0X,EAAO,EACrC,EAEAY,cAAe,SAASF,EAAWC,EAAOE,GACxC,IAAIne,EAAI,EACJoe,EAAU9f,KAAKsb,KAAKoE,GACpBrJ,EAAMyJ,EAAQ1X,OACd2X,EAAS/f,KAAK2f,GAElB,GAA6B,iBAAnB,GACR,KAAOje,EAAI2U,EAAK3U,IACd,GAAIoe,EAAQpe,GA9RH,KA8RsBme,EAE7B,OADA7f,KAAKyf,qBAAqBC,EAAWK,EAAQre,IACtC,OAGN,GAAIqe,EACT,KAAOre,EAAI2U,EAAK3U,IACd,GAAIqe,EAAOre,IAAMqe,EAAOre,KAAOme,EAE7B,OADA7f,KAAKyf,qBAAqBC,EAAWK,EAAQre,IACtC,EAKb,OAAO,CACT,EAEAse,kBAAmB,SAASN,EAAWC,EAAOviB,GAU5C,IATA,IAAI2iB,EAAS/f,KAAK2f,GAIdG,EAAU9f,KAAKsb,KAAKoE,GACpBhe,EAAIoe,EAAQ1X,OAAS,EAIlB1G,GAAK,EAAGA,IACRtE,GAAQ0iB,EAAQpe,GA1TV,KA0T6BtE,GACtC4C,KAAKyf,qBAAqBC,EAAWK,EAAQre,EAGnD,EAQA0K,gBAAiB,SAASyD,GACnB7P,KAAKif,cACRjf,KAAKif,YAAc,GACnBjf,KAAK6e,wBAA0B,GAG7BhP,EAAUxM,QACZwM,EAAUxM,OAAOqM,mBAAmBG,GAGtC,IAAIoQ,EAAMjgB,KAAKsb,KAjVG,GAiVmB3Z,KAAKkO,EAAUyL,MAIpD,OAHAtb,KAAKif,YAAYgB,EAAM,GAAKpQ,EAC5B7P,KAAK6e,0BACLhP,EAAUxM,OAASrD,KACZ6P,CACT,EASAH,mBAAoB,SAASwQ,GAC3B,IAAIC,EAAUngB,KAAK4f,cAhWD,EAgWgC,cAAeM,GAIjE,OAHIC,GACFngB,KAAK6e,0BAEAsB,CACT,EAQAC,uBAAwB,SAAShjB,GAC/B,IAAI+iB,EAAUngB,KAAKggB,kBA9WD,EA8WoC,cAAe5iB,GAErE,OADA4C,KAAK6e,wBAA0B,EACxBsB,CACT,EAQAE,YAAa,SAASjG,GACpB,KAAMA,aAAoBpO,EAAKqT,UAC7B,MAAM,IAAIiB,UAAU,kCAGjBtgB,KAAKof,cACRpf,KAAKof,YAAc,GACnBpf,KAAK4e,uBAAyB,GAG5BxE,EAAS/W,QACX+W,EAAS/W,OAAOkd,eAAenG,GAGjC,IAAI6F,EAAMjgB,KAAKsb,KAxYE,GAwYmB3Z,KAAKyY,EAASkB,MAIlD,OAHAtb,KAAKof,YAAYa,EAAM,GAAK7F,EAC5Bpa,KAAK4e,yBACLxE,EAAS/W,OAASrD,KACXoa,CACT,EASAlO,qBAAsB,SAAS9O,EAAMuD,GACnC,IAAImK,EAAO,IAAIkB,EAAKqT,SAASjiB,GAK7B,OAJA0N,EAAK0V,SAAS7f,GAEdX,KAAKqgB,YAAYvV,GAEVA,CACT,EAWA2V,wBAAyB,SAASrjB,EAAMuD,GACtC,IAAImK,EAAO9K,KAAKgL,iBAAiB5N,GAQjC,OANI0N,EACFA,EAAK0V,SAAS7f,GAEdmK,EAAO9K,KAAKkM,qBAAqB9O,EAAMuD,GAGlCmK,CACT,EASAyV,eAAgB,SAASG,GACvB,IAAIP,EAAUngB,KAAK4f,cA5bF,EA4bgC,cAAec,GAIhE,OAHIP,GACFngB,KAAK4e,yBAEAuB,CACT,EASAQ,oBAAqB,SAASvjB,GAC5B,IAAI+iB,EAAUngB,KAAKggB,kBA3cF,EA2coC,cAAe5iB,GAEpE,OADA4C,KAAK4e,uBAAyB,EACvBuB,CACT,EAOApJ,OAAQ,WACN,OAAO/W,KAAKsb,IACd,EAMA3e,SAAU,WACR,OAAOqP,EAAKmP,UAAUtL,UACpB7P,KAAKsb,KAAMtb,KAAK8e,WAEpB,GAQF7S,EAAUyJ,WAAa,SAASxB,GAC9B,OAAO,IAAIjI,EAAUD,EAAKG,MAAM0D,UAAUqE,GAC5C,EAEOjI,CACT,CAjfiB,GA4fjBD,EAAKqT,SAAY,WACf,aAEA,IAKIpM,EAASjH,EAAKiH,OAqBlB,SAASoM,EAAS/D,EAAMjY,GACtBrD,KAAK4gB,QAAUvd,GAAU,KAEJ,iBAAX,GAERrD,KAAKsb,KAAO,CAACA,EAAM,CAAC,EAAGrI,EAAOmB,aAC9BpU,KAAKsb,KA9BQ,GA8BWtb,KAAK6gB,kBAE7B7gB,KAAKsb,KAAOA,EAEdtb,KAAK8gB,aACP,CAkXA,OAhXAzB,EAASlR,UAAY,CAOnB,QAAIzJ,GACF,OAAO1E,KAAKsb,KA7CC,EA8Cf,EAOA,QAAIle,GACF,OAAO4C,KAAKsb,KAxDC,EAyDf,EAMA,UAAIjY,GACF,OAAOrD,KAAK4gB,OACd,EAEA,UAAIvd,CAAOU,GAGT,IAAIgd,GAAoB/gB,KAAK4gB,SAAY7c,GAAKA,EAAE+a,YAAc9e,KAAK4gB,QAAQ9B,WAS3E,OAPA9e,KAAK4gB,QAAU7c,EAEX/D,KAAK0E,MAAQuO,EAAOmB,aAAe2M,IACrC/gB,KAAKsb,KAzEM,GAyEatb,KAAK6gB,iBAC7B7gB,KAAK8gB,eAGA/c,CACT,EAQA,cAAI+a,GACF,OAAO9e,KAAKqD,OAASrD,KAAKqD,OAAOyb,WAAa7L,EAAOsH,UACvD,EAOAuG,YAAa,WACX,IAAIvF,EAAYvb,KAAK8e,WAEjB9e,KAAK0E,QAAQ6W,EAAU5a,QACR4a,EAAU5a,MAAMX,KAAK0E,MAElC,aAAc6W,EAAU5a,MAAMX,KAAK0E,MACrC1E,KAAKghB,aAAc,EAEnBhhB,KAAKghB,aAAc,EAGjBhhB,KAAK5C,QAAQme,EAAUnB,WACzBpa,KAAKihB,aAAgB,eAAgB1F,EAAUnB,SAASpa,KAAK5C,MAC7D4C,KAAKkhB,kBAAqB,oBAAqB3F,EAAUnB,SAASpa,KAAK5C,OAG7E,EAUA+jB,cAAe,SAASnC,GACtB,OAAIhf,KAAKohB,SAAWphB,KAAKohB,QAAQpC,GACxBhf,KAAKohB,QAAQpC,GAIlBhf,KAAKsb,KAAKlT,QA/HA,EA+HyB4W,EAC9B,KAGLhf,KAAKghB,aACFhhB,KAAKohB,UACRphB,KAAKohB,QAAU,IAETphB,KAAKohB,QAAQpC,GAAShf,KAAKqhB,UACjCrhB,KAAKsb,KAxIK,EAwIc0D,KAGnBhf,KAAKsb,KA3IA,EA2ImB0D,EAEnC,EAUAqC,UAAW,SAAS1gB,GAClB,OAAOX,KAAK8e,WAAWne,MAAMX,KAAK0E,MAAM8Q,SAAS7U,EAAOX,KAC1D,EASAshB,YAAa,SAAS3gB,GACpB,OAAOX,KAAK8e,WAAWne,MAAMX,KAAK0E,MAAMiR,WAAWhV,EAAOX,KAC5D,EAUAuhB,mBAAoB,SAAS5gB,EAAOqe,GAC7Bhf,KAAKohB,UACRphB,KAAKohB,QAAU,IAGK,iBAAZ,GAAwB,aAAczgB,GAE9CX,KAAKsb,KArLO,EAqLY0D,GAAShf,KAAKshB,YAAY3gB,GAClDX,KAAKohB,QAAQpC,GAASre,IAGtBX,KAAKsb,KAzLO,EAyLY0D,GAASre,EACjCX,KAAKohB,QAAQpC,GAAShf,KAAKqhB,UAAU1gB,GAEzC,EAQA6O,aAAc,SAASpS,GACrB,OAAIA,KAAQ4C,KAAKsb,KAvMJ,GAwMJtb,KAAKsb,KAxMD,GAwMkBle,QAE7B,CAEJ,EAQAokB,kBAAmB,SAASpkB,GAC1B,IAAIqkB,EAAazhB,KAAKwP,aAAapS,GAEnC,OAAIsU,MAAMC,QAAQ8P,GACTA,EAAW,GAGbA,CACT,EAQAzU,aAAc,SAAS5P,EAAMuD,GAC3B,IAAIqd,EAAS5gB,EAAKqgB,cACG,iBAAV9c,GACPqd,KAAUhe,KAAK8e,WAAW/E,OAC1B,eAAgB/Z,KAAK8e,WAAW/E,MAAMiE,KACtCrd,EAAQ,CAACA,IAEbX,KAAKsb,KA3OQ,GA2OSle,GAAQuD,CAChC,EAOA+gB,gBAAiB,SAAStkB,UACjB4C,KAAKsb,KApPC,GAoPgBle,EAC/B,EAOAyjB,eAAgB,WACd,IAAIzjB,EAAO4C,KAAKsb,KA9PH,GA+PTC,EAAYvb,KAAK8e,WAErB,GAAI1hB,KAAQme,EAAUnB,SAAU,CAC9B,IAAIuH,EAAUpG,EAAUnB,SAAShd,GACjC,GAAI,gBAAiBukB,EACnB,OAAOA,EAAQvN,WAEnB,CACA,OAAOnB,EAAOmB,WAChB,EAQAwN,UAAW,SAASld,GAClB1E,KAAK6hB,kBACL7hB,KAAKsb,KAhRQ,GAgRW5W,EACxB1E,KAAK8gB,aACP,EAOA7V,cAAe,WACb,OAAOjL,KAAKmhB,cAAc,EAC5B,EASAW,UAAW,WACT,IAAIzL,EAAMrW,KAAKsb,KAAKlT,OApSN,EAsSd,GAAIiO,EAAM,EAER,MAAO,GAMT,IAHA,IAAI3U,EAAI,EACJyO,EAAS,GAENzO,EAAI2U,EAAK3U,IACdyO,EAAOzO,GAAK1B,KAAKmhB,cAAczf,GAGjC,OAAOyO,CACT,EAKA0R,gBAAiB,WACX7hB,KAAKohB,UACPphB,KAAKohB,QAAQhZ,OAAS,GAExBpI,KAAKsb,KAAKlT,OAAS,CACrB,EAQA2Z,UAAW,SAAS5M,GAClB,IAAKnV,KAAKihB,aACR,MAAM,IAAIzf,MACRxB,KAAK5C,KAAL4C,6DAKJ,IAAIqW,EAAMlB,EAAO/M,OACb1G,EAAI,EASR,GARA1B,KAAK6hB,kBAEDxL,EAAM,GACgB,iBAAflB,EAAO,IACd,aAAcA,EAAO,IACvBnV,KAAK4hB,UAAUzM,EAAO,GAAG6M,UAGvBhiB,KAAKghB,YACP,KAAOtf,EAAI2U,EAAK3U,IACd1B,KAAKuhB,mBAAmBpM,EAAOzT,GAAIA,QAGrC,KAAOA,EAAI2U,EAAK3U,IACd1B,KAAKsb,KA7VK,EA6Vc5Z,GAAKyT,EAAOzT,EAG1C,EAQA8e,SAAU,SAAS7f,GACjBX,KAAK6hB,kBACiB,iBAAZ,GAAwB,aAAclhB,GAC9CX,KAAK4hB,UAAUjhB,EAAMqhB,UAGnBhiB,KAAKghB,YACPhhB,KAAKuhB,mBAAmB5gB,EAAO,GAE/BX,KAAKsb,KAjXO,GAiXa3a,CAE7B,EAOAoW,OAAQ,WACN,OAAO/W,KAAKsb,IACd,EAMA9P,aAAc,WACZ,OAAOQ,EAAKmP,UAAUf,SACpBpa,KAAKsb,KAAMtb,KAAK8e,YAAY,EAEhC,GAUFO,EAAS3J,WAAa,SAASxB,EAAKqH,GAClC,OAAO,IAAI8D,EAASrT,EAAKG,MAAMiO,SAASlG,EAAKqH,GAC/C,EAEO8D,CACT,CA3ZgB,GAsahBrT,EAAKyJ,UAAa,WAchB,SAASA,EAAUwM,GACjBjiB,KAAKuX,SAAS0K,EAChB,CAsKA,OApKAxM,EAAUtH,UAAY,CAMpB+T,MAAO,EAMPC,QAAS,EAOTC,OAAQ,EAQRJ,SAAU,aAOVzQ,MAAO,WACL,OAAOvF,EAAKyJ,UAAU4M,YAAYriB,KAAKsiB,YACzC,EAUA/K,SAAU,SAAS0K,GACjB,GAAIA,EACF,IAAK,IAAIxa,KAAOwa,EAEVA,EAAMxS,eAAehI,KACvBzH,KAAKyH,GAAOwa,EAAMxa,IAIxBzH,KAAKuiB,YACP,EASAF,YAAa,SAASG,GACpB,IAAIC,EAAOxb,KAAKyb,IAAIF,GAOpB,OALAxiB,KAAKoiB,OAASI,EAAW,GAAK,EAAI,EAClCxiB,KAAKkiB,MAAQlW,EAAK+C,QAAQsD,MAAMoQ,EAAO,MAEvCA,GAAsB,KAAbziB,KAAKkiB,MACdliB,KAAKmiB,QAAUnW,EAAK+C,QAAQsD,MAAMoQ,EAAO,IAClCziB,IACT,EAOAsiB,UAAW,WACT,OAAOtiB,KAAKoiB,QAAU,GAAKpiB,KAAKmiB,QAAU,KAAOniB,KAAKkiB,MACxD,EAQAS,QAAS,SAA0BC,GACjC,IAAIhgB,EAAI5C,KAAKsiB,YACTO,EAAID,EAAMN,YACd,OAAQ1f,EAAIigB,IAAMA,EAAIjgB,EACxB,EAEA2f,WAAY,WAIV,IAFA,IAAIE,EAAOziB,KAAKsiB,YACZF,EAASpiB,KAAKoiB,OACXK,GAAQ,OACbA,GAAQ,MAEV,KAAOA,EAAO,OACZA,GAAQ,MAGVziB,KAAKqiB,YAAYI,GAGL,GAARA,IACFziB,KAAKoiB,OAASA,EAElB,EAMA5W,aAAc,WACZ,OAAOQ,EAAKiH,OAAO+H,UAAUra,MAAM,cAAcqT,OAAOhU,KAAKrD,WAC/D,EAMAA,SAAU,WACR,OAAuB,GAAfqD,KAAKoiB,OAAc,IAAM,KACzBpW,EAAK+C,QAAQqD,KAAKpS,KAAKkiB,OAAS,IAChClW,EAAK+C,QAAQqD,KAAKpS,KAAKmiB,QACjC,GASF1M,EAAUC,WAAa,SAASK,GAE9B,IAAIvW,EAAU,CAAC,EAMf,OAJAA,EAAQ4iB,OAAyB,MAAfrM,EAAQ,GAAc,GAAK,EAC7CvW,EAAQ0iB,MAAQlW,EAAK+C,QAAQkB,eAAe8F,EAAQ5D,OAAO,EAAG,IAC9D3S,EAAQ2iB,QAAUnW,EAAK+C,QAAQkB,eAAe8F,EAAQ5D,OAAO,EAAG,IAEzD,IAAInG,EAAKyJ,UAAUjW,EAC5B,EAQAiW,EAAU4M,YAAc,SAASG,GAC/B,IAAIM,EAAW,IAAIrN,EAEnB,OADAqN,EAAST,YAAYG,GACdM,CACT,EAEOrN,CACT,CAvLiB,GAkMjBzJ,EAAKgK,OAAU,WAWb,SAASA,EAAOvC,GACdzT,KAAKW,MAAQ8S,CACf,CA4JA,OA1JAuC,EAAO7H,UAAY,CAMjB6T,SAAU,SAOVe,YAAa,WACX,OAAO/iB,KAAKgjB,YAAYhjB,KAAKW,MAC/B,EAQAsiB,gBAAiB,SAAyBxP,GACxCzT,KAAKW,MAAQX,KAAKkjB,YAAYzP,EAChC,EAEAyP,YAAa,SAAuBxlB,GAgBlC,IAEgBylB,EAAIC,EAAIC,EAAIC,EAAIC,EAF5BC,EAAM,oEAE4B9hB,EAAI,EACxC+hB,EAAK,EACLC,EAAM,GACNC,EAAU,GAEZ,IAAKjmB,EACH,OAAOA,EAGT,GAOEylB,GAFAI,EAJK7lB,EAAKkmB,WAAWliB,MAIR,GAHRhE,EAAKkmB,WAAWliB,MAGG,EAFnBhE,EAAKkmB,WAAWliB,OAIR,GAAK,GAClB0hB,EAAKG,GAAQ,GAAK,GAClBF,EAAKE,GAAQ,EAAI,GACjBD,EAAY,GAAPC,EAGLI,EAAQF,KAAQD,EAAIK,OAAOV,GAAMK,EAAIK,OAAOT,GAAMI,EAAIK,OAAOR,GAAMG,EAAIK,OAAOP,SACvE5hB,EAAIhE,EAAK0K,QAElBsb,EAAMC,EAAQnX,KAAK,IAEnB,IAAI9J,EAAIhF,EAAK0K,OAAS,EAEtB,OAAQ1F,EAAIghB,EAAI9hB,MAAM,EAAGc,EAAI,GAAKghB,GAAO,MAAM9hB,MAAMc,GAAK,EAE5D,EAEAsgB,YAAa,SAAuBtlB,GAkBlC,IAEIomB,EAAIC,EAAIC,EAAYX,EAAIC,EAAIC,EAF5BC,EAAM,oEAE4B9hB,EAAI,EACxC+hB,EAAK,EAELE,EAAU,GAEZ,IAAKjmB,EACH,OAAOA,EAGTA,GAAQ,GAER,GAQEomB,GAFAP,EALKC,EAAI3W,QAAQnP,EAAKmmB,OAAOniB,OAKhB,GAJR8hB,EAAI3W,QAAQnP,EAAKmmB,OAAOniB,OAIL,IAHxB2hB,EAAKG,EAAI3W,QAAQnP,EAAKmmB,OAAOniB,QAGM,GAFnC4hB,EAAKE,EAAI3W,QAAQnP,EAAKmmB,OAAOniB,SAIhB,GAAK,IAClBqiB,EAAKR,GAAQ,EAAI,IACjBS,EAAY,IAAPT,EAGHI,EAAQF,KADA,IAANJ,EACcre,OAAOif,aAAaH,GACrB,IAANR,EACOte,OAAOif,aAAaH,EAAIC,GAExB/e,OAAOif,aAAaH,EAAIC,EAAIC,SAEvCtiB,EAAIhE,EAAK0K,QAIlB,OAFMub,EAAQnX,KAAK,GAGrB,EAMA7P,SAAU,WACR,OAAOqD,KAAKW,KACd,GASFqV,EAAON,WAAa,SAASK,GAC3B,OAAO,IAAIC,EAAOD,EACpB,EAEOC,CACT,CA1Kc,GAiMZhK,EAAK6K,OAAS,SAAoBoL,GAGhC,GAFAjiB,KAAKkkB,gBAAkBlkB,KAEnBiiB,GAAS,UAAWA,EAAO,CAC7B,GAAIA,EAAM7b,SAAW6b,EAAM7b,iBAAiB4F,EAAKc,MAC/C,MAAM,IAAIwT,UAAU,2CAEtBtgB,KAAKoG,MAAQ6b,EAAM7b,KACrB,CAEA,GAAI6b,GAASA,EAAM5b,KAAO4b,EAAM1L,SAC9B,MAAM,IAAI/U,MAAM,uCAGlB,GAAIygB,GAAS,QAASA,EAAO,CAC3B,GAAIA,EAAM5b,OAAS4b,EAAM5b,eAAe2F,EAAKc,MAC3C,MAAM,IAAIwT,UAAU,yCAEtBtgB,KAAKqG,IAAM4b,EAAM5b,GACnB,CAEA,GAAI4b,GAAS,aAAcA,EAAO,CAChC,GAAIA,EAAM1L,YAAc0L,EAAM1L,oBAAoBvK,EAAKwK,UACrD,MAAM,IAAI8J,UAAU,kDAEtBtgB,KAAKuW,SAAW0L,EAAM1L,QACxB,CACF,EAEAvK,EAAK6K,OAAO1I,UAAY,CAMtB/H,MAAO,KAMPC,IAAK,KAMLkQ,SAAU,KAQV4N,UAAW,aAQXnC,SAAU,SAOVzQ,MAAO,WACL,OAAOvF,EAAK6K,OAAOU,SAAS,CAC1BnR,MAAOpG,KAAKoG,MAAQpG,KAAKoG,MAAMmL,QAAU,KACzClL,IAAKrG,KAAKqG,IAAMrG,KAAKqG,IAAIkL,QAAU,KACnCgF,SAAUvW,KAAKuW,SAAWvW,KAAKuW,SAAShF,QAAU,MAEtD,EAQA6S,YAAa,WACX,OAAIpkB,KAAKuW,SACAvW,KAAKuW,SAELvW,KAAKqG,IAAIge,aAAarkB,KAAKoG,MAEtC,EAQAke,OAAQ,WACN,GAAItkB,KAAKqG,IACP,OAAOrG,KAAKqG,IAEZ,IAAIA,EAAMrG,KAAKoG,MAAMmL,QAErB,OADAlL,EAAIke,YAAYvkB,KAAKuW,UACdlQ,CAEX,EAMA1J,SAAU,WACR,OAAOqD,KAAKoG,MAAQ,KAAOpG,KAAKqG,KAAOrG,KAAKuW,SAC9C,EAMAQ,OAAQ,WACN,MAAO,CAAC/W,KAAKoG,MAAMzJ,YAAaqD,KAAKqG,KAAOrG,KAAKuW,UAAU5Z,WAC7D,EAMA6O,aAAc,WACZ,OAAOxL,KAAKoG,MAAMoF,eAAiB,KAC3BxL,KAAKqG,KAAOrG,KAAKuW,UAAU/K,cACrC,GAUFQ,EAAK6K,OAAOnB,WAAa,SAAoBxB,EAAKpJ,GAChD,IAAI4L,EAAQxC,EAAIyC,MAAM,KAEtB,GAAqB,IAAjBD,EAAMtO,OACR,MAAM,IAAI5G,MACR,0BAA4B0S,EAAM,8BAItC,IAAI1U,EAAU,CACZ4G,MAAO4F,EAAKc,KAAKwJ,mBAAmBI,EAAM,GAAI5L,IAG5CzE,EAAMqQ,EAAM,GAQhB,OANI1K,EAAKwK,SAASI,cAAcvQ,GAC9B7G,EAAQ+W,SAAWvK,EAAKwK,SAASd,WAAWrP,GAE5C7G,EAAQ6G,IAAM2F,EAAKc,KAAKwJ,mBAAmBjQ,EAAKyE,GAG3C,IAAIkB,EAAK6K,OAAOrX,EACzB,EAYAwM,EAAK6K,OAAOU,SAAW,SAAkB0K,GACvC,OAAO,IAAIjW,EAAK6K,OAAOoL,EACzB,EAYAjW,EAAK6K,OAAOC,SAAW,SAASmL,EAAO/L,EAAOsO,GAC5C,SAASC,EAAyBhR,EAAQyC,GACxC,OAAIsO,EACKxY,EAAKc,KAAK4I,WAAWjC,EAAQyC,GAE7BlK,EAAKc,KAAKwJ,mBAAmB7C,EAAQyC,EAEhD,CAEA,OAAIlK,EAAKwK,SAASI,cAAcqL,EAAM,IAC7BjW,EAAK6K,OAAOU,SAAS,CAC1BnR,MAAOqe,EAAyBxC,EAAM,GAAI/L,GAC1CK,SAAUvK,EAAKwK,SAASd,WAAWuM,EAAM,MAGpCjW,EAAK6K,OAAOU,SAAS,CAC1BnR,MAAOqe,EAAyBxC,EAAM,GAAI/L,GAC1C7P,IAAKoe,EAAyBxC,EAAM,GAAI/L,IAG9C,EASF,WACE,IAAIwO,EAAmB,mBAqPvB,SAASC,EAAmBC,EAAQ7U,EAAQ8U,GAC1C,IAAIngB,EACJ,OAAQkgB,GACN,IAAK,IAEDC,EAAOC,cADL/U,GAAqB,MAAXA,GAMd,MACF,IAAK,IACHrL,EAAO,OACP,MACF,IAAK,IACHA,EAAO,QACP,MACF,IAAK,IACHA,EAAO,QACP,MACF,IAAK,IACHA,EAAO,UACP,MACF,IAAK,IACHA,EAAO,UACP,MACF,QAEE,OAAO,EAGX,GAAIA,EAAM,CACR,IAAKqL,GAAqB,IAAXA,EACb,MAAM,IAAIvO,MACR,kDAAoDojB,EAAS,KAGjE,IAAIG,EAAM3U,SAASL,EAAQ,IAC3B,GAAI/D,EAAK+C,QAAQe,cAAciV,GAC7B,MAAM,IAAIvjB,MACR,2CAA6CuO,EAAS,aAAe6U,EAAS,KAGlFC,EAAOngB,GAAQqgB,CACjB,CAEA,OAAO,CACT,CAnRA/Y,EAAKwK,SAAW,SAAsB9Y,GACpCsC,KAAKkkB,gBAAkBlkB,KACvBA,KAAKuX,SAAS7Z,EAChB,EAEAsO,EAAKwK,SAASrI,UAAY,CAMxB6W,MAAO,EAOPC,KAAM,EAON/C,MAAO,EAOPC,QAAS,EAOT+C,QAAS,EAOTJ,YAAY,EAQZX,UAAW,eAQXnC,SAAU,WAOVzQ,MAAO,WACL,OAAOvF,EAAKwK,SAASe,SAASvX,KAChC,EAOAsiB,UAAW,WACT,IAAI4C,EAAUllB,KAAKklB,QAAU,GAAKllB,KAAKmiB,QAAU,KAAOniB,KAAKkiB,MAC/C,MAAQliB,KAAKilB,KAAO,OAAYjlB,KAAKglB,MACnD,OAAQhlB,KAAK8kB,YAAcI,EAAUA,CACvC,EAUA7C,YAAa,SAAqBG,GAChC,IAAIC,EAAOxb,KAAKyb,IAAIF,GAsBpB,OApBAxiB,KAAK8kB,WAActC,EAAW,EAC9BxiB,KAAKilB,KAAOjZ,EAAK+C,QAAQsD,MAAMoQ,EAAO,OAGlCziB,KAAKilB,KAAO,GAAK,GACnBjlB,KAAKglB,MAAQhlB,KAAKilB,KAAO,EACzBjlB,KAAKilB,KAAO,GAEZjlB,KAAKglB,MAAQ,EAGfvC,GAAuC,OAA9BziB,KAAKilB,KAAO,EAAIjlB,KAAKglB,OAE9BhlB,KAAKkiB,MAAQlW,EAAK+C,QAAQsD,MAAMoQ,EAAO,MACvCA,GAAqB,KAAbziB,KAAKkiB,MAEbliB,KAAKmiB,QAAUnW,EAAK+C,QAAQsD,MAAMoQ,EAAO,IACzCA,GAAuB,GAAfziB,KAAKmiB,QAEbniB,KAAKklB,QAAUzC,EACRziB,IACT,EAaAuX,SAAU,SAAkB0K,GAC1B,IAAIkD,EAAc,CAAC,QAAS,OAAQ,QACjB,UAAW,UAAW,cACzC,IAAK,IAAI1d,KAAO0d,EAEd,GAAKA,EAAY1V,eAAehI,GAAhC,CAGA,IAAIqD,EAAOqa,EAAY1d,GAErBzH,KAAK8K,GADHmX,GAASnX,KAAQmX,EACNA,EAAMnX,GAEN,CALf,CAQJ,EAKAsa,MAAO,WACLplB,KAAK8kB,YAAa,EAClB9kB,KAAKglB,MAAQ,EACbhlB,KAAKilB,KAAO,EACZjlB,KAAKkiB,MAAQ,EACbliB,KAAKmiB,QAAU,EACfniB,KAAKklB,QAAU,CACjB,EAQAvC,QAAS,SAAiB0C,GACxB,IAAIC,EAActlB,KAAKsiB,YACnBiD,EAAeF,EAAO/C,YAC1B,OAAQgD,EAAcC,IAAiBD,EAAcC,EACvD,EAMAC,UAAW,WACTxlB,KAAKqiB,YAAYriB,KAAKsiB,YACxB,EAMA3lB,SAAU,WACR,GAAwB,GAApBqD,KAAKsiB,YACP,MAAO,OAEP,IAAIpO,EAAM,GAYV,OAXIlU,KAAK8kB,aAAY5Q,GAAO,KAC5BA,GAAO,IACHlU,KAAKglB,QAAO9Q,GAAOlU,KAAKglB,MAAQ,KAChChlB,KAAKilB,OAAM/Q,GAAOlU,KAAKilB,KAAO,MAE9BjlB,KAAKkiB,OAASliB,KAAKmiB,SAAWniB,KAAKklB,WACrChR,GAAO,IACHlU,KAAKkiB,QAAOhO,GAAOlU,KAAKkiB,MAAQ,KAChCliB,KAAKmiB,UAASjO,GAAOlU,KAAKmiB,QAAU,KACpCniB,KAAKklB,UAAShR,GAAOlU,KAAKklB,QAAU,MAEnChR,CAEX,EAMA1I,aAAc,WACZ,OAAOxL,KAAKrD,UACd,GASFqP,EAAKwK,SAAS6L,YAAc,SAAmCG,GAC7D,OAAO,IAAKxW,EAAKwK,UAAY6L,YAAYG,EAC3C,EAiEAxW,EAAKwK,SAASI,cAAgB,SAAS1G,GACrC,MAAsB,MAAdA,EAAO,IAA4B,MAAdA,EAAO,EACtC,EAQAlE,EAAKwK,SAASd,WAAa,SAAkC+P,GAK3D,IAJA,IAAIhV,EAAM,EACNiV,EAAO/gB,OAAOghB,OAAO,MACrBC,EAAS,GAEqC,KAA1CnV,EAAMgV,EAAKjV,OAAOkU,KAA2B,CACnD,IAAIhgB,EAAO+gB,EAAKhV,GACZoV,EAAUJ,EAAKtT,OAAO,EAAG1B,GAC7BgV,EAAOA,EAAKtT,OAAO1B,EAAM,GAEzBmV,GAAUjB,EAAmBjgB,EAAMmhB,EAASH,EAC9C,CAEA,GAAIE,EAAS,EAEX,MAAM,IAAIpkB,MACR,8DAAgEikB,EAAO,KAI3E,OAAO,IAAIzZ,EAAKwK,SAASkP,EAC3B,EAcA1Z,EAAKwK,SAASe,SAAW,SAAgC0K,GACvD,OAAO,IAAIjW,EAAKwK,SAASyL,EAC3B,CACD,CA9VD,GAuWMvT,EAAU,CAAC,OAAQ,WAAY,UACpB,WAAY,aA6B3B1C,EAAK8Z,SAAW,SAAsBpoB,GACpCsC,KAAKkkB,gBAAkBlkB,KACvBA,KAAKuX,SAAS7Z,EAChB,EAEAsO,EAAK8Z,SAAS3X,UAAY,CAMxBmB,KAAM,GAMNyW,SAAU,GAMVC,QAAS,GAMTC,SAAU,EAMVC,UAAW,EAMXrW,UAAW,KASXsW,kBAAmB,EAQnBhC,UAAW,eAiBX5M,SAAU,SAAkB0K,GAI1B,GAHAjiB,KAAKmmB,kBAAoB,EACzBnmB,KAAKomB,QAAU,GAEXnE,aAAiBjW,EAAKC,UAExBjM,KAAK6P,UAAYoS,MACZ,CAEL,GAAIA,GAAS,cAAeA,EAC1B,GAA8B,iBAAnBA,EAAMpS,UAAuB,CAEtC,IAAIyL,EAAOtP,EAAKG,MAAM8V,EAAMpS,WAC5B7P,KAAK6P,UAAY,IAAI7D,EAAKC,UAAUqP,EACtC,MAAW2G,EAAMpS,qBAAqB7D,EAAKC,UAEzCjM,KAAK6P,UAAYoS,EAAMpS,UAGvB7P,KAAK6P,UAAY,KAKrB,IAAK,IAAIpI,KAAOiH,EAEd,GAAIA,EAAQe,eAAehI,GAAM,CAC/B,IAAIqD,EAAO4D,EAAQjH,GACfwa,GAASnX,KAAQmX,IACnBjiB,KAAK8K,GAAQmX,EAAMnX,GAEvB,CAEJ,CAQA,OAJI9K,KAAK6P,qBAAqB7D,EAAKC,YAAcjM,KAAKsP,OACpDtP,KAAKsP,KAAOtP,KAAK6P,UAAU2P,sBAAsB,SAG5Cxf,IACT,EAQAqmB,UAAW,SAAmBC,GAC5B,GAAItmB,MAAQgM,EAAK8Z,SAASS,aAAevmB,MAAQgM,EAAK8Z,SAASU,cAC7D,OAAO,EAKT,GAFAxmB,KAAKymB,gBAAgBH,EAAG/pB,OAEnByD,KAAKomB,QAAQhe,OAChB,OAAO,EAiBT,IAdA,IAAIse,EAAY,CACdnqB,KAAM+pB,EAAG/pB,KACTE,MAAO6pB,EAAG7pB,MACVI,IAAKypB,EAAGzpB,IACR8pB,KAAML,EAAGK,KACTC,OAAQN,EAAGM,OACXC,OAAQP,EAAGO,QAGTC,EAAa9mB,KAAK+mB,kBAAkBL,GACpCM,GAAqB,EACrBC,EAAO,IAGF,CACP,IAAItf,EAASqE,EAAK+C,QAAQwC,MAAMvR,KAAKomB,QAAQU,IAAa,GAgB1D,GAfInf,EAAO0e,UAAY1e,EAAOuf,cAC5Blb,EAAK8Z,SAASqB,cAAcxf,EAAQ,EAAG,EAAG,EAAGA,EAAO0e,WAEpDra,EAAK8Z,SAASqB,cAAcxf,EAAQ,EAAG,EAAG,EACVA,EAAOuf,eAG/Blb,EAAK8Z,SAASsB,mBAAmBV,EAAW/e,IAE3C,EACTqf,EAAoBF,EAEpBG,GAAQ,GAGG,GAATA,IAAoC,GAAtBD,EAChB,MAKF,IAFAF,GAAcG,GAEG,EACf,OAAO,EAGT,GAAIH,GAAc9mB,KAAKomB,QAAQhe,OAC7B,KAEJ,CAEA,IAAIif,EAAcrnB,KAAKomB,QAAQY,GAG/B,GAFuBK,EAAYhB,UAAYgB,EAAYH,cAEpC,GAAKF,EAAoB,EAAG,CACjD,IAAIM,EAAatb,EAAK+C,QAAQwC,MAAM8V,GAAa,GAIjD,GAHArb,EAAK8Z,SAASqB,cAAcG,EAAY,EAAG,EAAG,EACdA,EAAWJ,eAEvClb,EAAK8Z,SAASsB,mBAAmBV,EAAWY,GAAc,EAAG,CAC/D,IAAIC,EAAmBvnB,KAAKomB,QAAQY,EAAoB,GAEpDQ,GAAgB,EAEhBH,EAAYI,aAAeD,GAC3BD,EAAiBE,aAAeD,IAClCH,EAAcE,EAElB,CACF,CAGA,OAAOF,EAAYhB,SACrB,EAEAU,kBAAmB,SAAyCpf,GAE1D,IAAIsY,EAAMjU,EAAK+C,QAAQ2B,gBACrB1Q,KAAKomB,QACLze,EACAqE,EAAK8Z,SAASsB,oBAGhB,OAAInH,GAAOjgB,KAAKomB,QAAQhe,OACfpI,KAAKomB,QAAQhe,OAAS,EAGxB6X,CACT,EAEAwG,gBAAiB,SAASiB,GACxB,IAA4C,GAAxC1b,EAAK8Z,SAAS6B,sBAA6B,CAC7C,IAAIC,EAAQ5b,EAAKc,KAAK+a,MACtB7b,EAAK8Z,SAAS6B,sBAAwBC,EAAMrrB,IAC9C,CAEA,IAAIurB,EAAiBJ,EAWrB,GAVII,EAAiB9b,EAAK8Z,SAAS6B,wBACjCG,EAAiB9b,EAAK8Z,SAAS6B,wBAGjCG,GAAkB9b,EAAK8Z,SAASiC,gBAEX/b,EAAK8Z,SAASkC,WACjCF,EAAiB9b,EAAK8Z,SAASkC,WAG5BhoB,KAAKomB,QAAQhe,QAAUpI,KAAKmmB,kBAAoBuB,EAAO,CAK1D,IAJA,IAAIO,EAAWjoB,KAAK6P,UAAU3E,sBAC1B2Q,EAAUoM,EAAS7f,OACnBwT,EAAU,EAEPA,EAAUC,EAASD,IACxB5b,KAAKkoB,iBACHD,EAASrM,GAAUkM,EAAgB9nB,KAAKomB,SAI5CpmB,KAAKomB,QAAQ+B,KAAKnc,EAAK8Z,SAASsB,oBAChCpnB,KAAKmmB,kBAAoB2B,CAC3B,CACF,EAEAI,iBAAkB,SAASE,EAAYV,EAAOtB,GAC5C,IAAKgC,EAAW7I,YAAY,aACvB6I,EAAW7I,YAAY,gBACvB6I,EAAW7I,YAAY,gBAC1B,OAAO,KAGT,IACI5X,EADA0gB,EAAUD,EAAWpd,iBAAiB,WAAWC,gBAGrD,SAASqd,EAAiBxmB,GACxB,OAAOA,EAAOsgB,QAAyB,KAAftgB,EAAOogB,MAAgC,GAAjBpgB,EAAOqgB,QACvD,CAEA,SAASoG,IACP,IAAIC,EAAa,CAAC,EAUlB,OATAA,EAAWf,YAAkC,YAAnBW,EAAWhrB,KACrCorB,EAAWnC,UAAYiC,EACrBF,EAAWpd,iBAAiB,cAAcC,iBAG5Cud,EAAWtB,cAAgBoB,EACzBF,EAAWpd,iBAAiB,gBAAgBC,iBAGvCud,CACT,CAEA,GAAKJ,EAAW7I,YAAY,UAAa6I,EAAW7I,YAAY,SAYzD,CACL,IAAI/a,EAAQ4jB,EAAW7Y,iBAAiB,SACxC,IAAK,IAAIkZ,KAAYjkB,EAEnB,GAAKA,EAAMiL,eAAegZ,GAA1B,CAGA,IACIhR,EADQjT,EAAMikB,GACDxd,iBACjBtD,EAAS4gB,KAEFhsB,KAAOkb,EAAKlb,KACnBoL,EAAOlL,MAAQgb,EAAKhb,MACpBkL,EAAO9K,IAAM4a,EAAK5a,IAEd4a,EAAKiR,QACP/gB,EAAOgf,KAAO0B,EAAQ1B,KACtBhf,EAAOif,OAASyB,EAAQzB,OACxBjf,EAAOkf,OAASwB,EAAQxB,OAEpBwB,EAAQpQ,MAAQjM,EAAK8Z,SAASS,aAChCva,EAAK8Z,SAASqB,cAAcxf,EAAQ,EAAG,EAAG,GACTA,EAAOuf,iBAG1Cvf,EAAOgf,KAAOlP,EAAKkP,KACnBhf,EAAOif,OAASnP,EAAKmP,OACrBjf,EAAOkf,OAASpP,EAAKoP,OAEjBpP,EAAKQ,MAAQjM,EAAK8Z,SAASS,aAC7Bva,EAAK8Z,SAASqB,cAAcxf,EAAQ,EAAG,EAAG,GACTA,EAAOuf,gBAI5Cd,EAAQzkB,KAAKgG,EA7Bb,CAgCF,IAAI4D,EAAQ6c,EAAWpd,iBAAiB,SAExC,GAAIO,EAAO,CACTA,EAAQA,EAAMN,gBACdtD,EAAS4gB,IAELhd,EAAMod,OAASpd,EAAMod,MAAM1Q,MAAQjM,EAAK8Z,SAASS,cACnDhb,EAAMod,MAAMC,OAAO,EAAG,EAAG,EAAGjhB,EAAOuf,eACnC3b,EAAMod,MAAM1Q,KAAOjM,EAAK8Z,SAASU,eAMnC,IAHA,IAEIqC,EAFAC,EAAWvd,EAAMud,SAAST,IAGtBQ,EAAMC,EAASC,UACrBphB,EAAS4gB,MACLM,EAAItsB,KAAOmrB,IAAUmB,IAIzBlhB,EAAOpL,KAAOssB,EAAItsB,KAClBoL,EAAOlL,MAAQosB,EAAIpsB,MACnBkL,EAAO9K,IAAMgsB,EAAIhsB,IACjB8K,EAAOgf,KAAOkC,EAAIlC,KAClBhf,EAAOif,OAASiC,EAAIjC,OACpBjf,EAAOkf,OAASgC,EAAIhC,OACpBlf,EAAO+gB,OAASG,EAAIH,OAEpB1c,EAAK8Z,SAASqB,cAAcxf,EAAQ,EAAG,EAAG,GACTA,EAAOuf,eACxCd,EAAQzkB,KAAKgG,EAEjB,CACF,MAlFEA,EAAS4gB,KACFhsB,KAAO8rB,EAAQ9rB,KACtBoL,EAAOlL,MAAQ4rB,EAAQ5rB,MACvBkL,EAAO9K,IAAMwrB,EAAQxrB,IACrB8K,EAAOgf,KAAO0B,EAAQ1B,KACtBhf,EAAOif,OAASyB,EAAQzB,OACxBjf,EAAOkf,OAASwB,EAAQxB,OAExB7a,EAAK8Z,SAASqB,cAAcxf,EAAQ,EAAG,EAAG,GACTA,EAAOuf,eACxCd,EAAQzkB,KAAKgG,GA0Ef,OAAOye,CACT,EAMAzpB,SAAU,WACR,OAAQqD,KAAKgmB,QAAUhmB,KAAKgmB,QAAUhmB,KAAKsP,IAC7C,GAGFtD,EAAK8Z,SAASsB,mBAAqB,SAAwCxkB,EAAGigB,GAC5E,OAAIjgB,EAAErG,KAAOsmB,EAAEtmB,MAAc,EACpBqG,EAAErG,KAAOsmB,EAAEtmB,KAAa,EAE7BqG,EAAEnG,MAAQomB,EAAEpmB,OAAe,EACtBmG,EAAEnG,MAAQomB,EAAEpmB,MAAc,EAE/BmG,EAAE/F,IAAMgmB,EAAEhmB,KAAa,EAClB+F,EAAE/F,IAAMgmB,EAAEhmB,IAAY,EAE3B+F,EAAE+jB,KAAO9D,EAAE8D,MAAc,EACpB/jB,EAAE+jB,KAAO9D,EAAE8D,KAAa,EAE7B/jB,EAAEgkB,OAAS/D,EAAE+D,QAAgB,EACxBhkB,EAAEgkB,OAAS/D,EAAE+D,OAAe,EAEjChkB,EAAEikB,OAAShE,EAAEgE,QAAgB,EACxBjkB,EAAEikB,OAAShE,EAAEgE,OAAe,EAE9B,CACT,EAUA7a,EAAK8Z,SAASkD,aAAe,SAAmC1C,EAAI2C,EAAWC,GAC7E,GAAI5C,EAAGoC,QACHO,EAAU3Z,MAAQ4Z,EAAQ5Z,MAC1B2Z,GAAajd,EAAK8Z,SAASU,eAC3B0C,GAAWld,EAAK8Z,SAASU,cAE3B,OADAF,EAAGrO,KAAOiR,EACH5C,EAGT,IAAID,EAAY4C,EAAU5C,UAAUC,GAMpC,OALAA,EAAGsC,OAAO,EAAG,EAAG,GAAKvC,GAErBA,EAAY6C,EAAQ7C,UAAUC,GAC9BA,EAAGsC,OAAO,EAAG,EAAG,EAAGvC,GAEZ,IACT,EAiBAra,EAAK8Z,SAASvO,SAAW,SAA+B0K,GAEtD,OADS,IAAIjW,EAAK8Z,UACRvO,SAAS0K,EACrB,EAQAjW,EAAK8Z,SAASS,YAAcva,EAAK8Z,SAASvO,SAAS,CACjDjI,KAAM,QASRtD,EAAK8Z,SAASU,cAAgBxa,EAAK8Z,SAASvO,SAAS,CACnDjI,KAAM,aAYRtD,EAAK8Z,SAASqB,cAAgB,SAAoCxf,EAAQsd,EAAM/C,EAAOC,EAAS+C,GAC9F,OAAOlZ,EAAKc,KAAKqB,UAAUya,OAAOrlB,KAChCoE,EACAsd,EACA/C,EACAC,EACA+C,EACAvd,EAEJ,EAEAqE,EAAK8Z,SAAS6B,uBAAyB,EACvC3b,EAAK8Z,SAASkC,SAAW,KACzBhc,EAAK8Z,SAASiC,eAAiB,EAYjC/b,EAAK4C,kBAYCA,EAAkB,CACpB,SAAIua,GACF,OAAOxkB,OAAO8H,KAAKkC,GAAOvG,MAC5B,EAEAgd,MAAO,WACLzW,EAAQhK,OAAOghB,OAAO,MACtB,IAAIyD,EAAMpd,EAAK8Z,SAASS,YAExB5X,EAAM0a,EAAID,EACVza,EAAM2a,IAAMF,EACZza,EAAM4a,IAAMH,CACd,EAQAzZ,IAAK,SAASL,GACZ,QAASX,EAAMW,EACjB,EAQAM,IAAK,SAASN,GACZ,OAAOX,EAAMW,EACf,EAWAka,SAAU,SAASpsB,EAAMsM,GAQvB,GAPItM,aAAgB4O,EAAKC,WACL,cAAd7O,EAAKA,OAEPA,GADAsM,EAAW,IAAIsC,EAAK8Z,SAAS1oB,IACbkS,QAIhB5F,aAAoBsC,EAAK8Z,UAG3B,MAAM,IAAIxF,UAAU,oDAFpB3R,EAAMvR,GAAQsM,CAIlB,EAQA+f,OAAQ,SAASna,GACf,cAAeX,EAAMW,EACvB,IAIc8V,QAETxW,GAyCP5C,EAAKc,KAAO,SAAkBpP,EAAMua,GAClCjY,KAAKkkB,gBAAkBlkB,KACvB,IAAIyX,EAAOzX,KAAK0pB,MAAQ/kB,OAAOghB,OAAO,MAGtClO,EAAKlb,KAAO,EACZkb,EAAKhb,MAAQ,EACbgb,EAAK5a,IAAM,EACX4a,EAAKkP,KAAO,EACZlP,EAAKmP,OAAS,EACdnP,EAAKoP,OAAS,EACdpP,EAAKiR,QAAS,EAEd1oB,KAAKuX,SAAS7Z,EAAMua,EACtB,EAEAjM,EAAKc,KAAK6c,UAAY,CAAC,EACvB3d,EAAKc,KAAK8c,SAAW,CAAC,EAEtB5d,EAAKc,KAAKqB,UAAY,CAQpBgW,UAAW,WACX0F,gBAAiB,KASjB,YAAI7H,GACF,OAAOhiB,KAAK0oB,OAAS,OAAS,WAChC,EAMAzQ,KAAM,KAUN6R,uBAAuB,EAOvBvY,MAAO,WACL,OAAO,IAAIvF,EAAKc,KAAK9M,KAAK0pB,MAAO1pB,KAAKiY,KACxC,EAKAmN,MAAO,WACLplB,KAAKuX,SAASvL,EAAKc,KAAKid,WACxB/pB,KAAKiY,KAAOjM,EAAK8Z,SAASS,WAC5B,EAaAyD,QAAS,SAA0BztB,EAAME,EAAOI,EACb8pB,EAAMC,EAAQC,EAAQnd,GACvD1J,KAAKuX,SAAS,CACZhb,KAAMA,EACNE,MAAOA,EACPI,IAAKA,EACL8pB,KAAMA,EACNC,OAAQA,EACRC,OAAQA,EACR5O,KAAMvO,GAEV,EAQAqD,WAAY,SAA6Bkd,EAAOC,GAuB9C,OAtBKD,EAGCC,GACFlqB,KAAKiY,KAAOjM,EAAK8Z,SAASS,YAC1BvmB,KAAKzD,KAAO0tB,EAAME,iBAClBnqB,KAAKvD,MAAQwtB,EAAMG,cAAgB,EACnCpqB,KAAKnD,IAAMotB,EAAMI,aACjBrqB,KAAK2mB,KAAOsD,EAAMK,cAClBtqB,KAAK4mB,OAASqD,EAAMM,gBACpBvqB,KAAK6mB,OAASoD,EAAMO,kBAEpBxqB,KAAKiY,KAAOjM,EAAK8Z,SAASU,cAC1BxmB,KAAKzD,KAAO0tB,EAAMztB,cAClBwD,KAAKvD,MAAQwtB,EAAMvtB,WAAa,EAChCsD,KAAKnD,IAAMotB,EAAMntB,UACjBkD,KAAK2mB,KAAOsD,EAAM3d,WAClBtM,KAAK4mB,OAASqD,EAAM1d,aACpBvM,KAAK6mB,OAASoD,EAAMQ,cAjBtBzqB,KAAKolB,QAoBPplB,KAAK6pB,gBAAkB,KAChB7pB,IACT,EAgBAuX,SAAU,SAAkB0K,EAAOyI,GACjC,GAAIzI,EACF,IAAK,IAAIxa,KAAOwa,EAEd,GAAItd,OAAOwJ,UAAUsB,eAAelM,KAAK0e,EAAOxa,GAAM,CAEpD,GAAY,aAARA,EAAoB,SACxBzH,KAAKyH,GAAOwa,EAAMxa,EACpB,CAcJ,GAVIijB,IACF1qB,KAAKiY,KAAOyS,GAGVzI,KAAW,WAAYA,GACzBjiB,KAAK0oB,SAAW,SAAUzG,GACjBA,GAAU,WAAYA,IAC/BjiB,KAAK0oB,OAASzG,EAAMyG,QAGlBzG,GAAS,aAAcA,EAAO,CAChC,IAAIhK,EAAOjM,EAAK4C,gBAAgBgB,IAC9BqS,EAAMvY,UAGR1J,KAAKiY,KAAOA,GAAQjM,EAAK8Z,SAASU,aACpC,CAWA,OATIvE,GAAS,SAAUA,IACrBjiB,KAAKiY,KAAOgK,EAAMhK,MAGfjY,KAAKiY,OACRjY,KAAKiY,KAAOjM,EAAK8Z,SAASU,eAG5BxmB,KAAK6pB,gBAAkB,KAChB7pB,IACT,EAQA2qB,UAAW,SAA4BC,GACrC,IAAIC,EAAWD,GAAc5e,EAAKc,KAAKge,OACnCC,GAAe/qB,KAAKzD,MAAQ,KAAOyD,KAAKvD,OAAS,IAAMuD,KAAKnD,KAAO,GAAKguB,EAC5E,GAAIE,KAAe/e,EAAKc,KAAK6c,UAC3B,OAAO3d,EAAKc,KAAK6c,UAAUoB,GAI7B,IAAIC,EAAIhrB,KAAKnD,IACToH,EAAIjE,KAAKvD,OAASuD,KAAKvD,MAAQ,EAAI,GAAK,GACxCwuB,EAAIjrB,KAAKzD,MAAQyD,KAAKvD,MAAQ,EAAI,EAAI,GAEtCyuB,EAAKF,EAAIC,EAAIjf,EAAK+C,QAAQsD,MAAiB,IAATpO,EAAI,GAAW,IAAM+H,EAAK+C,QAAQsD,MAAM4Y,EAAI,GAWlF,OAFAC,IANEA,GAAmC,EAA9Blf,EAAK+C,QAAQsD,MAAM4Y,EAAI,KAAWjf,EAAK+C,QAAQsD,MAAM4Y,EAAI,MAMtD,EAAIJ,GAAY,EAAK,EAC/B7e,EAAKc,KAAK6c,UAAUoB,GAAeG,EAC5BA,CACT,EAMAC,UAAW,WACT,IAAIC,EAAWpf,EAAKc,KAAKue,WAAWrrB,KAAKzD,MAAQ,EAAI,EAErD,OADYyP,EAAKc,KAAKwe,sBACTF,GAASprB,KAAKvD,MAAQ,GAAKuD,KAAKnD,GAC/C,EAWA0uB,YAAa,SAAqBX,GAChC,IAAIC,EAAWD,GAAc5e,EAAKc,KAAKge,OACnC3a,EAASnQ,KAAKuR,QAMlB,OALApB,EAAOtT,MAASmD,KAAK2qB,YAAc,EAAIE,GAAY,EACnD1a,EAAOuY,QAAS,EAChBvY,EAAOwW,KAAO,EACdxW,EAAOyW,OAAS,EAChBzW,EAAO0W,OAAS,EACT1W,CACT,EAWAqb,UAAW,SAAmBZ,GAC5B,IAAIC,EAAWD,GAAc5e,EAAKc,KAAKge,OACnC3a,EAASnQ,KAAKuR,QAMlB,OALApB,EAAOtT,MAAQ,EAAImD,KAAK2qB,YAAcE,EAAW7e,EAAKc,KAAKge,QAAU,EACrE3a,EAAOuY,QAAS,EAChBvY,EAAOwW,KAAO,EACdxW,EAAOyW,OAAS,EAChBzW,EAAO0W,OAAS,EACT1W,CACT,EASAsb,aAAc,WACZ,IAAItb,EAASnQ,KAAKuR,QAMlB,OALApB,EAAOtT,IAAM,EACbsT,EAAOuY,QAAS,EAChBvY,EAAOwW,KAAO,EACdxW,EAAOyW,OAAS,EAChBzW,EAAO0W,OAAS,EACT1W,CACT,EASAub,WAAY,WACV,IAAIvb,EAASnQ,KAAKuR,QAMlB,OALApB,EAAOtT,IAAMmP,EAAKc,KAAK6e,YAAYxb,EAAO1T,MAAO0T,EAAO5T,MACxD4T,EAAOuY,QAAS,EAChBvY,EAAOwW,KAAO,EACdxW,EAAOyW,OAAS,EAChBzW,EAAO0W,OAAS,EACT1W,CACT,EASAyb,YAAa,WACX,IAAIzb,EAASnQ,KAAKuR,QAOlB,OANApB,EAAOtT,IAAM,EACbsT,EAAO1T,MAAQ,EACf0T,EAAOuY,QAAS,EAChBvY,EAAOwW,KAAO,EACdxW,EAAOyW,OAAS,EAChBzW,EAAO0W,OAAS,EACT1W,CACT,EASA0b,UAAW,WACT,IAAI1b,EAASnQ,KAAKuR,QAOlB,OANApB,EAAOtT,IAAM,GACbsT,EAAO1T,MAAQ,GACf0T,EAAOuY,QAAS,EAChBvY,EAAOwW,KAAO,EACdxW,EAAOyW,OAAS,EAChBzW,EAAO0W,OAAS,EACT1W,CACT,EAUA2b,aAAc,SAAsBC,GAClC,IAAIlB,EAAWkB,GAAmB/f,EAAKc,KAAKge,OACxCkB,EAAQhsB,KAAK2qB,YAAcE,EAE/B,OADImB,EAAQ,IAAGA,GAAS,GACjBhsB,KAAKmrB,YAAca,CAC5B,EASAC,mBAAoB,WAClB,OAAOjgB,EAAKc,KAAKmf,mBAAmBjsB,KAAKzD,KAC3C,EAgBA2vB,WAAY,SAA6BC,EAAYC,GACnD,IACIC,EADAV,EAAc3f,EAAKc,KAAK6e,YAAY3rB,KAAKvD,MAAOuD,KAAKzD,MAErDkU,EAAM2b,EAENhmB,EAAQ,EAERkmB,EAAWtsB,KAAKuR,QAEpB,GAAId,GAAO,EAAG,CACZ6b,EAASzvB,IAAM,EAIJ,GAAP4T,GAEFA,IAIFrK,EAAQkmB,EAASzvB,IAGjB,IAIIiF,EAASqqB,EAJEG,EAAS3B,YAUpB7oB,EAAS,IAGXA,GAAU,GAIZsE,GAAStE,EAKTsE,GAAS+lB,EAGTE,EAAUF,CACZ,MAGEG,EAASzvB,IAAM8uB,EAKflb,KAEA4b,EAJaC,EAAS3B,YAIFwB,GAEN,IACZE,GAAW,GAGbA,EAAUV,EAAcU,EAK1B,OAAOjmB,GAFPimB,EAAiB,EAAN5b,EAGb,EAWA8b,aAAc,SAASJ,EAAYC,GACjC,IAAII,EAAMxsB,KAAK2qB,YAEf,OAAa,IAATyB,GAAcI,IAAQL,GAKhBnsB,KAAKksB,WAAWC,EAAYC,KAE1BpsB,KAAKnD,GAKnB,EAgBA4vB,WAAY,SAAoB7B,GAC9B,IAOI8B,EAPAC,GAAc3sB,KAAKzD,MAAQ,KAAOyD,KAAKvD,OAAS,IAAMuD,KAAKnD,KAAO,GAAK+tB,EAC3E,GAAI+B,KAAc3gB,EAAKc,KAAK8c,SAC1B,OAAO5d,EAAKc,KAAK8c,SAAS+C,GAO5B,IAAIC,EAAK5sB,KAAKuR,QACdqb,EAAGlE,QAAS,EACZ,IAAImE,EAAU7sB,KAAKzD,KAEH,IAAZqwB,EAAGnwB,OAAemwB,EAAG/vB,IAAM,IAC7B6vB,EAAQ1gB,EAAKc,KAAKggB,cAAcD,EAAU,EAAGjC,GACzCgC,EAAGjK,QAAQ+J,GAAS,EACtBA,EAAQ1gB,EAAKc,KAAKggB,cAAcD,EAASjC,GAEzCiC,MAGFH,EAAQ1gB,EAAKc,KAAKggB,cAAcD,EAASjC,GACrCgC,EAAGjK,QAAQ+J,GAAS,IACtBA,EAAQ1gB,EAAKc,KAAKggB,gBAAgBD,EAASjC,KAI/C,IAAImC,EAAeH,EAAGvI,aAAaqI,GAAOpK,YAAc,MACpD0K,EAAShhB,EAAK+C,QAAQsD,MAAM0a,EAAc,GAAK,EAEnD,OADA/gB,EAAKc,KAAK8c,SAAS+C,GAAcK,EAC1BA,CACT,EAQAzI,YAAa,SAAsB0I,GACjC,IAAIC,EAAQD,EAAUnI,YAAc,EAAI,EAMpC+B,EAAS7mB,KAAK6mB,OACdD,EAAS5mB,KAAK4mB,OACdD,EAAO3mB,KAAK2mB,KACZ9pB,EAAMmD,KAAKnD,IAEfgqB,GAAUqG,EAAOD,EAAU/H,QAC3B0B,GAAUsG,EAAOD,EAAU9K,QAC3BwE,GAAQuG,EAAOD,EAAU/K,MACzBrlB,GAAOqwB,EAAOD,EAAUhI,KACxBpoB,GAAc,EAAPqwB,EAAWD,EAAUjI,MAE5BhlB,KAAK6mB,OAASA,EACd7mB,KAAK4mB,OAASA,EACd5mB,KAAK2mB,KAAOA,EACZ3mB,KAAKnD,IAAMA,EAEXmD,KAAK6pB,gBAAkB,IACzB,EAUAxF,aAAc,SAA2B4F,GACvC,IAAIkD,EAAWntB,KAAKotB,aAAeptB,KAAKqmB,YACpCzD,EAAQqH,EAAMmD,aAAenD,EAAM5D,YACvC,OAAOra,EAAKwK,SAAS6L,YAAY8K,EAAWvK,EAC9C,EAQAyK,eAAgB,SAA+BpD,GAC7C,IAAIkD,EAAWntB,KAAKotB,aAChBxK,EAAQqH,EAAMmD,aAClB,OAAOphB,EAAKwK,SAAS6L,YAAY8K,EAAWvK,EAC9C,EAQAD,QAAS,SAA0BC,GACjC,IAAIhgB,EAAI5C,KAAKotB,aACTvK,EAAID,EAAMwK,aAEd,OAAIxqB,EAAIigB,EAAU,EACdA,EAAIjgB,GAAW,EACZ,CACT,EASA0qB,kBAAmB,SAAoC1K,EAAOzJ,GAC5D,SAASoU,EAAIC,GACX,OAAOxhB,EAAKc,KAAK2gB,UAAU7qB,EAAGigB,EAAG2K,EACnC,CACA,IAAI5qB,EAAI5C,KAAK0tB,cAAcvU,GACvB0J,EAAID,EAAM8K,cAAcvU,GACxBwU,EAAK,EAET,OAA0B,IAArBA,EAAKJ,EAAI,UACa,IAAtBI,EAAKJ,EAAI,YACTI,EAAKJ,EAAI,QAFsBI,CAKtC,EASAD,cAAe,SAAuBzV,GACpC,IAAI2V,EAAO5tB,KAAKuR,QACZsc,EAAe7tB,KAAKiY,KAAK3I,MAAQ2I,EAAK3I,KAO1C,OALKtP,KAAK0oB,QAAWmF,GACnB7hB,EAAK8Z,SAASkD,aAAa4E,EAAM5tB,KAAKiY,KAAMA,GAG9C2V,EAAK3V,KAAOA,EACL2V,CACT,EAQAvH,UAAW,WACT,OAAIrmB,KAAKiY,MAAQjM,EAAK8Z,SAASU,eAC3BxmB,KAAKiY,MAAQjM,EAAK8Z,SAASS,YACtB,EAEAvmB,KAAKiY,KAAKoO,UAAUrmB,KAE/B,EAOAwL,aAAc,WACZ,IAAI0E,EAASlQ,KAAKrD,WAElB,OAAIuT,EAAO9H,OAAS,GACX4D,EAAKiH,OAAO+H,UAAUra,MAAM,aAAaqT,OAAO9D,GAEhDlE,EAAKiH,OAAO+H,UAAUra,MAAMrE,KAAK0X,OAAO9D,EAEnD,EAOAvT,SAAU,WACR,IAAIwT,EAASnQ,KAAKzD,KAAO,IACZyP,EAAK+C,QAAQqD,KAAKpS,KAAKvD,OAAS,IAChCuP,EAAK+C,QAAQqD,KAAKpS,KAAKnD,KAYpC,OAVKmD,KAAK0oB,SACNvY,GAAU,IAAMnE,EAAK+C,QAAQqD,KAAKpS,KAAK2mB,MAAQ,IACrC3a,EAAK+C,QAAQqD,KAAKpS,KAAK4mB,QAAU,IACjC5a,EAAK+C,QAAQqD,KAAKpS,KAAK6mB,QAE/B7mB,KAAKiY,OAASjM,EAAK8Z,SAASS,cAC9BpW,GAAU,MAIPA,CACT,EAMAhF,SAAU,WACR,OAAInL,KAAKiY,MAAQjM,EAAK8Z,SAASU,cACzBxmB,KAAK0oB,OACA,IAAIzqB,KAAK+B,KAAKzD,KAAMyD,KAAKvD,MAAQ,EAAGuD,KAAKnD,KAEzC,IAAIoB,KAAK+B,KAAKzD,KAAMyD,KAAKvD,MAAQ,EAAGuD,KAAKnD,IAChCmD,KAAK2mB,KAAM3mB,KAAK4mB,OAAQ5mB,KAAK6mB,OAAQ,GAGhD,IAAI5oB,KAAyB,IAApB+B,KAAKotB,aAEzB,EAEA7K,WAAY,WASV,OARaviB,KAAK0pB,MAAMhB,OACpB1oB,KAAK0pB,MAAMhB,SACb1oB,KAAK0pB,MAAM/C,KAAO,EAClB3mB,KAAK0pB,MAAM9C,OAAS,EACpB5mB,KAAK0pB,MAAM7C,OAAS,GAEtB7mB,KAAK4oB,OAAO,EAAG,EAAG,EAAG,GAEd5oB,IACT,EAYA4oB,OAAQ,SAAyBkF,EAAYC,EACZC,EAAeC,EAAeC,GAE7D,IAAIC,EAAiBC,EAGjBvH,EAAQD,EAAQD,EAAM9pB,EACtB8uB,EAHA0C,EAAe,EAAGC,EAAgB,EAKlC7W,EAAOyW,GAASluB,KAAK0pB,MA4CzB,GA1CKjS,EAAKiR,SACR7B,EAASpP,EAAKoP,OAASoH,EACvBxW,EAAKoP,OAASA,EAAS,GACvBsH,EAAkBniB,EAAK+C,QAAQsD,MAAMwU,EAAS,IAC1CpP,EAAKoP,OAAS,IAChBpP,EAAKoP,QAAU,GACfsH,KAGFvH,EAASnP,EAAKmP,OAASoH,EAAgBG,EACvC1W,EAAKmP,OAASA,EAAS,GACvBwH,EAAgBpiB,EAAK+C,QAAQsD,MAAMuU,EAAS,IACxCnP,EAAKmP,OAAS,IAChBnP,EAAKmP,QAAU,GACfwH,KAGFzH,EAAOlP,EAAKkP,KAAOoH,EAAcK,EAEjC3W,EAAKkP,KAAOA,EAAO,GACnB0H,EAAeriB,EAAK+C,QAAQsD,MAAMsU,EAAO,IACrClP,EAAKkP,KAAO,IACdlP,EAAKkP,MAAQ,GACb0H,MAOA5W,EAAKhb,MAAQ,GACf6xB,EAAgBtiB,EAAK+C,QAAQsD,OAAOoF,EAAKhb,MAAQ,GAAK,IAC7Cgb,EAAKhb,MAAQ,IACtB6xB,EAAgBtiB,EAAK+C,QAAQsD,MAAMoF,EAAKhb,MAAQ,IAAM,GAGxDgb,EAAKlb,MAAQ+xB,EACb7W,EAAKhb,OAAS,GAAK6xB,GAGnBzxB,EAAM4a,EAAK5a,IAAMixB,EAAaO,GAEpB,EACR,OAEMxxB,IADJ8uB,EAAc3f,EAAKc,KAAK6e,YAAYlU,EAAKhb,MAAOgb,EAAKlb,SAKrDkb,EAAKhb,QACDgb,EAAKhb,MAAQ,KACfgb,EAAKlb,OACLkb,EAAKhb,MAAQ,GAGfI,GAAO8uB,OAGT,KAAO9uB,GAAO,GACM,GAAd4a,EAAKhb,OACPgb,EAAKlb,OACLkb,EAAKhb,MAAQ,IAEbgb,EAAKhb,QAGPI,GAAOmP,EAAKc,KAAK6e,YAAYlU,EAAKhb,MAAOgb,EAAKlb,MAOlD,OAHAkb,EAAK5a,IAAMA,EAEXmD,KAAK6pB,gBAAkB,KAChB7pB,IACT,EAQAuuB,aAAc,SAAsBrJ,GAClCllB,KAAKiY,KAAOjM,EAAK8Z,SAASS,YAC1B,IAAIiI,EAAQxiB,EAAKc,KAAKid,UAAUxY,QAChCid,EAAM5F,OAAO,EAAG,EAAG,EAAG1D,GAEtBllB,KAAKzD,KAAOiyB,EAAMjyB,KAClByD,KAAKvD,MAAQ+xB,EAAM/xB,MACnBuD,KAAKnD,IAAM2xB,EAAM3xB,IACjBmD,KAAK2mB,KAAO6H,EAAM7H,KAClB3mB,KAAK4mB,OAAS4H,EAAM5H,OACpB5mB,KAAK6mB,OAAS5f,KAAKiK,MAAMsd,EAAM3H,QAE/B7mB,KAAK6pB,gBAAkB,IACzB,EAOAuD,WAAY,WACV,GAA6B,OAAzBptB,KAAK6pB,gBACP,OAAO7pB,KAAK6pB,gBAEd,IAAI/nB,EAAS9B,KAAKqmB,YAIdoI,EAAKxwB,KAAKqrB,IACZtpB,KAAKzD,KACLyD,KAAKvD,MAAQ,EACbuD,KAAKnD,IACLmD,KAAK2mB,KACL3mB,KAAK4mB,OACL5mB,KAAK6mB,OAAS/kB,GAKhB,OADA9B,KAAK6pB,gBAAkB4E,EAAK,IACrBzuB,KAAK6pB,eACd,EAgBA9S,OAAQ,WAiBN,IAhBA,IAcIjM,EAdA8iB,EAAO,CACT,OACA,QACA,MACA,OACA,SACA,SACA,UAGEzd,EAASxL,OAAOghB,OAAO,MAEvBjkB,EAAI,EACJ2U,EAAMuX,EAAKxlB,OAGR1G,EAAI2U,EAAK3U,IAEdyO,EADArF,EAAO8iB,EAAKlsB,IACG1B,KAAK8K,GAOtB,OAJI9K,KAAKiY,OACP9H,EAAOzG,SAAW1J,KAAKiY,KAAK3I,MAGvBa,CACT,GAIF,WAEE,SAASue,EAAWlB,GAClB7oB,OAAOqO,eAAehH,EAAKc,KAAKqB,UAAWqf,EAAM,CAC/C5d,IAAK,WAMH,OALI5P,KAAK8pB,wBACP9pB,KAAKuiB,aACLviB,KAAK8pB,uBAAwB,GAGxB9pB,KAAK0pB,MAAM8D,EACpB,EACAmB,IAAK,SAAqBvX,GAWxB,MAPa,WAAToW,GAAqBpW,IAAQpX,KAAK0pB,MAAMhB,QAC1C1oB,KAAK4oB,OAAO,EAAG,EAAG,EAAG,GAEvB5oB,KAAK6pB,gBAAkB,KACvB7pB,KAAK8pB,uBAAwB,EAC7B9pB,KAAK0pB,MAAM8D,GAAQpW,EAEZA,CACT,GAGJ,CAGI,mBAAoBzS,SACtB+pB,EAAW,QACXA,EAAW,SACXA,EAAW,OACXA,EAAW,QACXA,EAAW,UACXA,EAAW,UACXA,EAAW,UAEd,CAvCD,GAgDA1iB,EAAKc,KAAK6e,YAAc,SAA8BlvB,EAAOF,GAC3D,IACI0oB,EAAO,GAEX,OAAIxoB,EAAQ,GAAKA,EAAQ,KAEzBwoB,EALmB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAK/CxoB,GAEP,GAATA,IACFwoB,GAAQjZ,EAAKc,KAAKue,WAAW9uB,KALK0oB,CAStC,EAQAjZ,EAAKc,KAAKue,WAAa,SAAoB9uB,GACzC,OAAIA,GAAQ,KACDA,EAAO,GAAM,EAEZA,EAAO,GAAK,GAAOA,EAAO,KAAO,GAAQA,EAAO,KAAO,CAErE,EAUAyP,EAAKc,KAAK8hB,cAAgB,SAAgCC,EAAYnH,GACpE,IAAInrB,EAAOmrB,EACPoH,EAAMD,EACNvI,EAAK,IAAIta,EAAKc,KAClBwZ,EAAGyI,gBAAiB,EACpB,IAAI3D,EAAWpf,EAAKc,KAAKue,WAAW9uB,GAAQ,EAAI,EAEhD,GAAIuyB,EAAM,EAIR,OAHAvyB,IACA6uB,EAAWpf,EAAKc,KAAKue,WAAW9uB,GAAQ,EAAI,EAC5CuyB,GAAO9iB,EAAKc,KAAKwe,sBAAsBF,GAAS,IACzCpf,EAAKc,KAAK8hB,cAAcE,EAAKvyB,GAC/B,GAAIuyB,EAAM9iB,EAAKc,KAAKwe,sBAAsBF,GAAS,IAIxD,OAHAA,EAAWpf,EAAKc,KAAKue,WAAW9uB,GAAQ,EAAI,EAC5CuyB,GAAO9iB,EAAKc,KAAKwe,sBAAsBF,GAAS,IAChD7uB,IACOyP,EAAKc,KAAK8hB,cAAcE,EAAKvyB,GAGtC+pB,EAAG/pB,KAAOA,EACV+pB,EAAGoC,QAAS,EAEZ,IAAK,IAAIjsB,EAAQ,GAAIA,GAAS,EAAGA,IAC/B,GAAIqyB,EAAM9iB,EAAKc,KAAKwe,sBAAsBF,GAAS3uB,GAAQ,CACzD6pB,EAAG7pB,MAAQA,EAAQ,EACnB6pB,EAAGzpB,IAAMiyB,EAAM9iB,EAAKc,KAAKwe,sBAAsBF,GAAS3uB,GACxD,KACF,CAIF,OADA6pB,EAAGyI,gBAAiB,EACbzI,CACT,EASAta,EAAKc,KAAKkiB,aAAe,SAAoB9a,GAC3C,OAAO,IAAIlI,EAAKc,KAAK,CACnBvQ,KAAM6T,SAAS8D,EAAI/B,OAAO,EAAG,GAAI,IACjC1V,MAAO2T,SAAS8D,EAAI/B,OAAO,EAAG,GAAI,IAClCtV,IAAKuT,SAAS8D,EAAI/B,OAAO,EAAG,GAAI,IAChCuW,QAAQ,GAEZ,EAQA1c,EAAKc,KAAKsJ,eAAiB,SAAS3C,GAOlC,OAAO,IAAIzH,EAAKc,KAAK,CACnBvQ,KAAMyP,EAAK+C,QAAQkB,eAAewD,EAAOtB,OAAO,EAAG,IACnD1V,MAAOuP,EAAK+C,QAAQkB,eAAewD,EAAOtB,OAAO,EAAG,IACpDtV,IAAKmP,EAAK+C,QAAQkB,eAAewD,EAAOtB,OAAO,EAAG,IAClDuW,QAAQ,GAEZ,EAWA1c,EAAKc,KAAKwJ,mBAAqB,SAAS7C,EAAQ3I,GAC9C,GAAI2I,EAAOrL,OAAS,GAClB,MAAM,IAAI5G,MACR,6BAA+BiS,EAAS,KAI5C,IAAIwE,EAmBJ,OAjBIxE,EAAO,KAAsB,MAAfA,EAAO,IACvBwE,EAAO,IACEnN,IACTmN,EAAOnN,EAAK0E,aAAa,SAIhB,IAAIxD,EAAKc,KAAK,CACvBvQ,KAAMyP,EAAK+C,QAAQkB,eAAewD,EAAOtB,OAAO,EAAG,IACnD1V,MAAOuP,EAAK+C,QAAQkB,eAAewD,EAAOtB,OAAO,EAAG,IACpDtV,IAAKmP,EAAK+C,QAAQkB,eAAewD,EAAOtB,OAAO,EAAG,IAClDwU,KAAM3a,EAAK+C,QAAQkB,eAAewD,EAAOtB,OAAO,GAAI,IACpDyU,OAAQ5a,EAAK+C,QAAQkB,eAAewD,EAAOtB,OAAO,GAAI,IACtD0U,OAAQ7a,EAAK+C,QAAQkB,eAAewD,EAAOtB,OAAO,GAAI,IACtDzI,SAAUuO,GAId,EASAjM,EAAKc,KAAK4I,WAAa,SAAoBjC,EAAQwb,GACjD,OAAIxb,EAAOrL,OAAS,GACX4D,EAAKc,KAAKwJ,mBAAmB7C,EAAQwb,GAErCjjB,EAAKc,KAAKsJ,eAAe3C,EAEpC,EAQAzH,EAAKc,KAAKC,WAAa,SAAoBkd,EAAOC,GAEhD,OADS,IAAIle,EAAKc,MACRC,WAAWkd,EAAOC,EAC9B,EAgBAle,EAAKc,KAAKyK,SAAW,SAAkB0K,EAAOyI,GAE5C,OADQ,IAAI1e,EAAKc,MACRyK,SAAS0K,EAAOyI,EAC3B,EASA1e,EAAKc,KAAK+a,IAAM,WACd,OAAO7b,EAAKc,KAAKC,WAAW,IAAI9O,MAAQ,EAC1C,EAUA+N,EAAKc,KAAKggB,cAAgB,SAAuBpF,EAAOkD,GACtD,IAAIvoB,EAAI2J,EAAKc,KAAKyK,SAAS,CACzBhb,KAAMmrB,EACNjrB,MAAO,EACPI,IAAK,EACL6rB,QAAQ,IAGN8D,EAAMnqB,EAAEsoB,YACRuE,EAAOtE,GAAc5e,EAAKc,KAAKqiB,mBAUnC,OATI3C,EAAMxgB,EAAKc,KAAKsiB,WAClB/sB,EAAExF,KAAO,GAEPqyB,EAAOljB,EAAKc,KAAKsiB,WACnB/sB,EAAExF,KAAO,GAGXwF,EAAExF,KAAO2vB,EAAM0C,EAER7sB,CACT,EASA2J,EAAKc,KAAKmf,mBAAqB,SAASoD,GACtC,IAAIC,EAAO,UACPC,GAAOF,GAAMA,EAAK,EAAI,IAAMA,EAAK,IAAM,IAAMA,EAAK,IAAM,GAAK,GAAK,EAEtE,OADarjB,EAAKc,KAAKue,WAAWgE,GAEzBC,GAAMC,EAAM,GAAK,GAAKD,EAAKC,GAE3BD,EAAKC,EAEhB,EAQAvjB,EAAKc,KAAKid,UAAY/d,EAAKc,KAAKyK,SAAS,CACvChb,KAAM,KACNE,MAAO,EACPI,IAAK,EACL8pB,KAAM,EACNC,OAAQ,EACRC,OAAQ,EACR6B,QAAQ,EACRhf,SAAU,MAGZsC,EAAKc,KAAK2gB,UAAY,SAAmB7qB,EAAGigB,EAAG2K,GAC7C,OAAI5qB,EAAE4qB,GAAQ3K,EAAE2K,GAAc,EAC1B5qB,EAAE4qB,GAAQ3K,EAAE2K,IAAe,EACxB,CACT,EAWAxhB,EAAKc,KAAKwe,sBAAwB,CAChC,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACxD,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAW1Dtf,EAAKc,KAAKge,OAAS,EACnB9e,EAAKc,KAAK0iB,OAAS,EACnBxjB,EAAKc,KAAK2iB,QAAU,EACpBzjB,EAAKc,KAAK4iB,UAAY,EACtB1jB,EAAKc,KAAKsiB,SAAW,EACrBpjB,EAAKc,KAAK6iB,OAAS,EACnB3jB,EAAKc,KAAK8iB,SAAW,EAOrB5jB,EAAKc,KAAKqiB,mBAAqBnjB,EAAKc,KAAK0iB,OAmCzCxjB,EAAK6L,UAAY,SAASna,EAAMua,EAAM+J,GACpChiB,KAAKkkB,gBAAkBlkB,KACvB,IAAIyX,EAAOzX,KAAK0pB,MAAQ/kB,OAAOghB,OAAO,MAEtClO,EAAKlb,KAAO,KACZkb,EAAKhb,MAAQ,KACbgb,EAAK5a,IAAM,KACX4a,EAAKkP,KAAO,KACZlP,EAAKmP,OAAS,KACdnP,EAAKoP,OAAS,KAEd7mB,KAAKgiB,SAAWA,GAAY,mBAE5BhiB,KAAKuX,SAAS7Z,EAAMua,EACtB,EACAjM,EAAK+C,QAAQwD,SAASvG,EAAKc,KAAMd,EAAK6L,UAAwC,CAQ5EsM,UAAW,YAOXnC,SAAU,mBAOV/J,KAAM,KAON1G,MAAO,WACL,OAAO,IAAIvF,EAAK6L,UAAU7X,KAAK0pB,MAAO1pB,KAAKiY,KAAMjY,KAAKgiB,SACxD,EAEAO,WAAY,WACV,OAAOviB,IACT,EAKAqmB,UAAW,WACT,OAAIrmB,KAAKiY,gBAAgBjM,EAAKyJ,UACrBzV,KAAKiY,KAAKqK,YAEVtW,EAAKc,KAAKqB,UAAUkY,UAAU9lB,MAAMP,KAAMQ,UAErD,EAOAgL,aAAc,WACZ,OAAOQ,EAAKiH,OAAOyF,MAAM/X,MAAMX,KAAKgiB,UAAUhO,OAAOhU,KAAKrD,WAC5D,EAOAA,SAAU,WACR,IAeIsb,EAfA4X,EAAK7jB,EAAK+C,QAAQqD,KAClBzF,EAAI3M,KAAKzD,KAAM0H,EAAIjE,KAAKvD,MAAOyH,EAAIlE,KAAKnD,IACxCquB,EAAIlrB,KAAK2mB,KAAMmJ,EAAK9vB,KAAK4mB,OAAQrkB,EAAIvC,KAAK6mB,OAEpBkJ,EAAiB,OAAN9rB,EAAY+rB,EAAe,OAAN9rB,EACtD+rB,EAAgB,OAAN/E,EAAYgF,EAAmB,OAAPJ,EAAaK,EAAkB,OAAN5tB,EAE3D6tB,GAHgB,OAANzjB,EAGYkjB,EAAGljB,IAAMojB,GAAYC,EAAS,IAAM,IAAOD,GAAYC,EAAS,KAAO,KACjFD,EAAWF,EAAG5rB,GAAK,KACnB+rB,EAAS,IAAMH,EAAG3rB,GAAK,IACnCmsB,GAAYJ,EAAUJ,EAAG3E,GAAK,MAAQ+E,GAAWC,EAAY,IAAM,KACvDA,EAAYL,EAAGC,GAAM,KAAQG,GAAYC,EAAkB,GAAN,MACrDA,GAAaC,EAAY,IAAM,KAC/BA,EAAYN,EAAGttB,GAAK,IAgBpC,OAZE0V,EADEjY,KAAKiY,OAASjM,EAAK8Z,SAASS,YACvB,IACEvmB,KAAKiY,gBAAgBjM,EAAKyJ,UAC5BzV,KAAKiY,KAAKtb,WACRqD,KAAKiY,OAASjM,EAAK8Z,SAASU,cAC9B,GACExmB,KAAKiY,gBAAgBjM,EAAK8Z,SACtB9Z,EAAKyJ,UAAU4M,YAAYriB,KAAKiY,KAAKoO,UAAUrmB,OAC9CrD,WAEP,GAGDqD,KAAKgiB,UACX,IAAK,OACH,OAAOqO,EAAWpY,EACpB,IAAK,mBACL,IAAK,YACH,OAAOmY,GAAwB,MAAZC,EAAmB,GAAK,IAAMA,EAAWpY,GAC9D,IAAK,OACH,OAAOmY,EAEX,OAAO,IACT,IAUFpkB,EAAK6L,UAAUC,wBAA0B,SAASrE,EAAQ6c,GACxD,SAASC,EAAKC,EAAGjuB,EAAGD,GAClB,OAAOkuB,EAAIxkB,EAAK+C,QAAQkB,eAAeugB,EAAEre,OAAO5P,EAAGD,IAAM,IAC3D,CACA,IAAIoU,EAAQjD,EAAOkD,MAAM,KACrBiW,EAAKlW,EAAM,GAAI+Z,EAAM/Z,EAAM,GAC3BqB,EAAY0Y,EAAMzkB,EAAKiH,OAAOyF,MAAM/X,MAAM8W,KAAKO,WAAWyY,GAAO,GACjExY,EAAOF,EAAU,GAAI2Y,EAAK3Y,EAAU,GAGpC4Y,GADO3kB,EAAK+C,QAAQkB,eACZ2c,EAAKA,EAAGxkB,OAAS,GACzBwoB,EAAQF,EAAKA,EAAGtoB,OAAS,EAEzByoB,EAAcjE,GAAe,KAATA,EAAG,IAAsB,KAATA,EAAG,GACvCkE,EAAcJ,GAAe,KAATA,EAAG,GAEvBluB,EAAI,CACNjG,KAAMs0B,EAAc,KAAON,EAAK3D,EAAI,EAAG,GACvCnwB,OAAOo0B,GAAyB,GAATF,GAAuB,GAATA,EAAwC,GAATA,GAAuC,IAATA,EAAjBJ,EAAK3D,EAAI,EAAG,GAAoC,KAA9E2D,EAAK3D,EAAI,EAAG,GAC/D/vB,IAAc,GAAT8zB,EAAaJ,EAAK3D,EAAI,EAAG,GAAc,GAAT+D,GAAcE,EAAcN,EAAK3D,EAAI,EAAG,GAAc,IAAT+D,EAAcJ,EAAK3D,EAAI,EAAG,GAAK,KAE/GjG,KAAMmK,EAAc,KAAOP,EAAKG,EAAI,EAAG,GACvC9J,OAAQkK,GAAwB,GAATF,EAAaL,EAAKG,EAAI,EAAG,GAAKE,EAAQ,EAAkBL,EAAKG,EAAnBI,EAAuB,EAAiB,EAAd,GAAsB,KACjHjK,OAAiB,GAAT+J,EAAaL,EAAKG,EAAI,EAAG,GAAc,GAATE,EAAaL,EAAKG,EAAI,EAAG,GAAc,GAATE,EAAaL,EAAKG,EAAI,EAAG,GAAK,MAWpG,OAPEzY,EADU,KAARA,EACKjM,EAAK8Z,SAASS,YACZtO,GAAmB,KAAXA,EAAK,GACfjM,EAAKyJ,UAAUC,WAAWuC,GAE1B,KAGF,IAAIjM,EAAK6L,UAAUrV,EAAGyV,EAAMqY,EACrC,EASF,WACE,IAAIS,EAAU,CACZjqB,GAAIkF,EAAKc,KAAKge,OACdtkB,GAAIwF,EAAKc,KAAK0iB,OACd/oB,GAAIuF,EAAKc,KAAK2iB,QACd/oB,GAAIsF,EAAKc,KAAK4iB,UACd/oB,GAAIqF,EAAKc,KAAKsiB,SACdxoB,GAAIoF,EAAKc,KAAK6iB,OACd9oB,GAAImF,EAAKc,KAAK8iB,UAGZoB,EAAkB,CAAC,EACvB,IAAK,IAAIvpB,KAAOspB,EAEVA,EAAQthB,eAAehI,KACzBupB,EAAgBD,EAAQtpB,IAAQA,GA0UpC,SAASwpB,EAAkBvsB,EAAMwsB,EAAKC,EAAKxwB,GACzC,IAAIwP,EAASxP,EAQb,GANiB,MAAbA,EAAM,KACRwP,EAASxP,EAAMwR,OAAO,IAGxBhC,EAASnE,EAAK+C,QAAQkB,eAAeE,QAEzBihB,IAARF,GAAqBvwB,EAAQuwB,EAC/B,MAAM,IAAI1vB,MACRkD,EAAO,oBAAsB/D,EAAQ,eAAiBuwB,GAI1D,QAAYE,IAARD,GAAqBxwB,EAAQwwB,EAC/B,MAAM,IAAI3vB,MACRkD,EAAO,oBAAsB/D,EAAQ,eAAiBuwB,GAI1D,OAAO/gB,CACT,CAjUAnE,EAAKiL,MAAQ,SAAmBvZ,GAC9BsC,KAAKkkB,gBAAkBlkB,KACvBA,KAAK0W,MAAQ,CAAC,EAEVhZ,GAAyB,iBAAX,GAChBsC,KAAKuX,SAAS7Z,EAElB,EAEAsO,EAAKiL,MAAM9I,UAAY,CAKrBuI,MAAO,KAMP2a,SAAU,EAQVnC,KAAMljB,EAAKc,KAAK0iB,OAMhB7G,MAAO,KAMPQ,MAAO,KAMP/d,KAAM,KAQN+Y,UAAW,YAQXnC,SAAU,QAqBV8G,SAAU,SAASwI,GACjB,OAAO,IAAItlB,EAAKulB,cAAc,CAC5BC,KAAMxxB,KACNqoB,QAASiJ,GAEb,EAOA/f,MAAO,WACL,OAAO,IAAIvF,EAAKiL,MAAMjX,KAAK+W,SAC7B,EAOA0a,SAAU,WACR,SAAUzxB,KAAKmpB,QAASnpB,KAAK2oB,MAC/B,EAQA+I,UAAW,WACT,SAAU1xB,KAAKmpB,OAAUnpB,KAAK2oB,MAChC,EAUAgJ,aAAc,SAAiBC,EAAOne,GACpC,IAAIoe,EAASD,EAAMta,cACfua,KAAU7xB,KAAK0W,MACjB1W,KAAK0W,MAAMmb,GAAQlwB,KAAK8R,GAExBzT,KAAK0W,MAAMmb,GAAU,CAACpe,EAE1B,EAQAqe,aAAc,SAAsBF,EAAOG,GACzC/xB,KAAK0W,MAAMkb,EAAMta,eAAiBya,EAAQnwB,OAC5C,EAQAyJ,aAAc,SAAsBumB,GAClC,IAAIC,EAASD,EAAMta,cACnB,OAAQua,KAAU7xB,KAAK0W,MAAQ1W,KAAK0W,MAAMmb,GAAQjwB,QAAU,EAC9D,EAgBAowB,kBAAmB,SAA2BC,EAAYC,GACxD,IACInJ,EADAoJ,EAAOnyB,KAAK8oB,SAASmJ,GAGzB,GACElJ,EAAOoJ,EAAKpJ,aACLA,GAAQA,EAAKpG,QAAQuP,IAAkB,GAMhD,OAJInJ,GAAQmJ,EAAcja,OACxB8Q,EAAK9Q,KAAOia,EAAcja,MAGrB8Q,CACT,EAqBAxR,SAAU,SAAS7Z,GACjB,IAAK,IAAI+J,KAAO/J,EAAM,CACpB,IAAI00B,EAAQ3qB,EAAI6P,cAEZ8a,KAASC,EACP3gB,MAAMC,QAAQjU,EAAK+J,IACrBzH,KAAK0W,MAAM0b,GAAS10B,EAAK+J,GAEzBzH,KAAK0W,MAAM0b,GAAS,CAAC10B,EAAK+J,IAG5BzH,KAAKyH,GAAO/J,EAAK+J,EAErB,CAEIzH,KAAKqxB,UAAoC,iBAAjBrxB,KAAKqxB,UAC/BiB,EAAaC,SAASvyB,KAAKqxB,SAAUrxB,MAGnCA,KAAKkvB,MAA4B,iBAAblvB,KAAKkvB,OAC3BlvB,KAAKkvB,KAAOljB,EAAKiL,MAAMub,oBAAoBxyB,KAAKkvB,QAG9ClvB,KAAK2oB,OAAW3oB,KAAK2oB,iBAAiB3c,EAAKc,OAC7C9M,KAAK2oB,MAAQ3c,EAAKc,KAAK4I,WAAW1V,KAAK2oB,OAE3C,EAMA5R,OAAQ,WACN,IAAI0b,EAAM9tB,OAAOghB,OAAO,MAWxB,IAAK,IAAIxO,KAVTsb,EAAIrnB,KAAOpL,KAAKoL,KAEZpL,KAAKmpB,QACPsJ,EAAItJ,MAAQnpB,KAAKmpB,OAGfnpB,KAAKqxB,SAAW,IAClBoB,EAAIpB,SAAWrxB,KAAKqxB,UAGRrxB,KAAK0W,MAEjB,GAAK1W,KAAK0W,MAAMjH,eAAe0H,GAA/B,CAGA,IAAIub,EAAS1yB,KAAK0W,MAAMS,GACpBzF,MAAMC,QAAQ+gB,IAA4B,GAAjBA,EAAOtqB,OAClCqqB,EAAItb,EAAEsG,eAAiBiV,EAAO,GAE9BD,EAAItb,EAAEsG,eAAiBzR,EAAK+C,QAAQwC,MAAMvR,KAAK0W,MAAMS,GALvD,CAeF,OANInX,KAAK2oB,QACP8J,EAAI9J,MAAQ3oB,KAAK2oB,MAAMhsB,YAErB,SAAUqD,MAAQA,KAAKkvB,OAASljB,EAAKc,KAAKqiB,qBAC5CsD,EAAIvD,KAAOljB,EAAKiL,MAAMI,oBAAoBrX,KAAKkvB,OAE1CuD,CACT,EAMA91B,SAAU,WAER,IAAIuX,EAAM,QAAUlU,KAAKoL,KAOzB,IAAK,IAAI+L,KANLnX,KAAKmpB,QACPjV,GAAO,UAAYlU,KAAKmpB,OAEtBnpB,KAAKqxB,SAAW,IAClBnd,GAAO,aAAelU,KAAKqxB,UAEfrxB,KAAK0W,MAEb1W,KAAK0W,MAAMjH,eAAe0H,KAC5BjD,GAAO,IAAMiD,EAAI,IAAMnX,KAAK0W,MAAMS,IAStC,OANInX,KAAK2oB,QACPzU,GAAO,UAAYlU,KAAK2oB,MAAMnd,gBAE5B,SAAUxL,MAAQA,KAAKkvB,OAASljB,EAAKc,KAAKqiB,qBAC5Cjb,GAAO,SAAWlI,EAAKiL,MAAMI,oBAAoBrX,KAAKkvB,OAEjDhb,CACT,GAoCFlI,EAAKiL,MAAMub,oBAAsB,SAAsBtiB,EAAQ0a,GAG7D,IAAIC,EAAWD,GAAc5e,EAAKc,KAAKge,OACvC,OAASiG,EAAQ7gB,GAAU2a,EAAW,GAAK,EAAK,CAClD,EAUA7e,EAAKiL,MAAMI,oBAAsB,SAAmB0N,EAAK6F,GAIvD,IACI4B,EAAOzH,GADI6F,GAAc5e,EAAKc,KAAKge,QACX9e,EAAKc,KAAKge,OAItC,OAHI0B,EAAM,IACRA,GAAO,GAEFwE,EAAgBxE,EACzB,EAEA,IAAImG,EAAkB,2BAClBC,EAAmB,4DAUnBC,EAAe,CAAC,WAAY,WAAY,SACxB,QAAS,SAAU,UAAW,UAE9CP,EAAe,CACjBQ,KAAM,SAASnyB,EAAO+kB,EAAMqN,GAG1B,IAAqC,IAAjCF,EAAahmB,QAAQlM,GAGvB,MAAM,IAAIa,MACR,sBAAwBb,EAAQ,gBAChCkyB,EAAarmB,KAAK,MAAQ,KAJ5BkZ,EAAKta,KAAOzK,CAOhB,EAEAqyB,MAAO,SAASryB,EAAO+kB,EAAMqN,GAC3BrN,EAAKyD,MAAQnd,EAAK+C,QAAQkB,eAAetP,EAC3C,EAEA4xB,SAAU,SAAS5xB,EAAO+kB,EAAMqN,GAC9BrN,EAAK2L,SAAWrlB,EAAK+C,QAAQkB,eAAetP,GACxC+kB,EAAK2L,SAAW,IAGlB3L,EAAK2L,SAAW,EAEpB,EAEA4B,MAAO,SAAStyB,EAAO+kB,EAAMqN,GACvBpyB,EAAMyH,OAAS,GACjBsd,EAAKiD,MAAQ3c,EAAKiH,OAAO+H,UAAUra,MAAM,aAAa6S,SAAS7S,GAE/D+kB,EAAKiD,MAAQ3c,EAAKiH,OAAO+H,UAAUra,MAAMrE,KAAKkX,SAAS7S,GAEpDoyB,IACHrN,EAAKiD,MAAQ3c,EAAKc,KAAK4I,WAAWgQ,EAAKiD,OAE3C,EAEAuK,KAAM,SAASvyB,EAAO+kB,EAAMqN,GAC1B,IAAIJ,EAAgBQ,KAAKxyB,GAGvB,MAAM,IAAIa,MAAM,uBAAyBb,EAAQ,KAFjD+kB,EAAKwJ,KAAOljB,EAAKiL,MAAMub,oBAAoB7xB,EAI/C,GAGE0xB,EAAa,CACfe,SAAUnC,EAAkB9vB,KAAKnB,KAAM,WAAY,EAAG,IACtDqzB,SAAUpC,EAAkB9vB,KAAKnB,KAAM,WAAY,EAAG,IACtDszB,OAAQrC,EAAkB9vB,KAAKnB,KAAM,SAAU,EAAG,IAClDuzB,MAAO,SAAS5yB,GACd,GAAIiyB,EAAiBO,KAAKxyB,GACxB,OAAOA,EAEP,MAAM,IAAIa,MAAM,wBAA0Bb,EAAQ,IAEtD,EACA6yB,WAAYvC,EAAkB9vB,KAAKnB,KAAM,cAAe,GAAI,IAC5DyzB,UAAWxC,EAAkB9vB,KAAKnB,KAAM,aAAc,IAAK,KAC3D0zB,SAAUzC,EAAkB9vB,KAAKnB,KAAM,YAAa,GAAI,IACxD2zB,QAAS1C,EAAkB9vB,KAAKnB,KAAM,UAAW,EAAG,IACpD4zB,SAAU3C,EAAkB9vB,KAAKnB,KAAM,YAAa,IAAK,MAU3DgM,EAAKiL,MAAMvB,WAAa,SAASxF,GAC/B,IAAIxS,EAAOsO,EAAKiL,MAAMC,cAAchH,GAAQ,GAC5C,OAAO,IAAIlE,EAAKiL,MAAMvZ,EACxB,EAsBAsO,EAAKiL,MAAMM,SAAW,SAAS0K,GAC7B,OAAO,IAAIjW,EAAKiL,MAAMgL,EACxB,EAWAjW,EAAKiL,MAAMC,cAAgB,SAAShH,EAAQ6iB,GAQ1C,IAPA,IAAIrN,EAAO/gB,OAAOghB,OAAO,MAIrBxQ,EAASjF,EAAOyG,MAAM,KACtBN,EAAMlB,EAAO/M,OAER1G,EAAI,EAAGA,EAAI2U,EAAK3U,IAAK,CAC5B,IAAIgV,EAAQvB,EAAOzT,GAAGiV,MAAM,KACxBkb,EAASnb,EAAM,GAAGY,cAClB0G,EAAStH,EAAM,GAAG+G,cAClBrgB,EAAQ21B,EAAU/U,EAAS6T,EAC3BlxB,EAAQ+V,EAAM,GAElB,GAAImb,KAAUQ,EAAY,CAKxB,IAJA,IAAIwB,EAAUlzB,EAAMgW,MAAM,KACtBmd,EAAa,EACbC,EAAaF,EAAQzrB,OAElB0rB,EAAaC,EAAYD,IAC9BD,EAAQC,GAAczB,EAAWR,GAAQgC,EAAQC,IAEnDpO,EAAKtoB,GAA2B,GAAlBy2B,EAAQzrB,OAAcyrB,EAAQ,GAAKA,CACnD,MAAWhC,KAAUS,EACnBA,EAAaT,GAAQlxB,EAAO+kB,EAAMqN,GAGlCrN,EAAK1H,GAAUrd,CAEnB,CAEA,OAAO+kB,CACT,CACD,CAnjBD,GA8jBA1Z,EAAKulB,cAAiB,WAwBpB,SAASyC,EAAmBx0B,GAC1BQ,KAAKuX,SAAS/X,EAChB,CA82CA,OA52CAw0B,EAAmB7lB,UAAY,CAM7B8lB,WAAW,EAMXzC,KAAM,KAMNnJ,QAAS,KAOT6L,KAAM,KAMNC,kBAAmB,EAOnBC,WAAY,KAOZC,aAAa,EAObC,QAAS,KAOTrP,KAAM,KAONsP,WAAY,EAcZhd,SAAU,SAAS/X,GAGjB,GAFAQ,KAAKwxB,KAAOxlB,EAAK+C,QAAQsB,gBAAgB7Q,EAAQgyB,KAAMxlB,EAAKiL,QAEvDjX,KAAKwxB,KACR,MAAM,IAAIhwB,MAAM,yCAKlB,GAFAxB,KAAKqoB,QAAUrc,EAAK+C,QAAQsB,gBAAgB7Q,EAAQ6oB,QAASrc,EAAKc,OAE7D9M,KAAKqoB,QACR,MAAM,IAAI7mB,MAAM,2CAGdhC,EAAQ80B,QACVt0B,KAAKs0B,QAAU90B,EAAQ80B,QAEvBt0B,KAAKs0B,QAAUtoB,EAAK+C,QAAQwC,MAAMvR,KAAKwxB,KAAK9a,OAAO,GAGjDlX,EAAQ20B,oBACVn0B,KAAKm0B,kBAAoB30B,EAAQ20B,mBAEnCn0B,KAAKilB,KAAOzlB,EAAQylB,MAAQ,GACxBzlB,EAAQ00B,OACVl0B,KAAKk0B,KAAOloB,EAAK+C,QAAQsB,gBAAgB7Q,EAAQ00B,KAAMloB,EAAKc,OAG9D9M,KAAKo0B,WAAa50B,EAAQ40B,WAErBp0B,KAAKo0B,aACRp0B,KAAKo0B,WAAa,CAChB,SAAY,EACZ,SAAY,EACZ,OAAU,EACV,MAAS,EACT,QAAW,EACX,SAAY,EACZ,WAAc,IAIlBp0B,KAAKq0B,YAAc70B,EAAQ60B,cAAe,EAErCr0B,KAAKq0B,aACRr0B,KAAKw0B,MAET,EAMAA,KAAM,WACJx0B,KAAKq0B,aAAc,EACnBr0B,KAAKk0B,KAAOl0B,KAAKqoB,QAAQ9W,QACzB,IAAImF,EAAQ1W,KAAKs0B,QASjB,GAPI,UAAW5d,GAGb1W,KAAKy0B,iBAAiB/d,EAAM6c,OAI1B,cAAe7c,IACb,YAAaA,GAAS,aAAcA,GACpC,eAAgBA,GAAS,UAAWA,GACtC,MAAM,IAAIlV,MAAM,0BAKpB,GAAI,aAAckV,GAAS,eAAgBA,EACzC,MAAM,IAAIlV,MAAM,uCAKlB,GAAsB,WAAlBxB,KAAKwxB,KAAKpmB,OACT,cAAesL,GAAS,aAAcA,GACzC,MAAM,IAAIlV,MAAM,qEAKlB,GAAsB,UAAlBxB,KAAKwxB,KAAKpmB,OACT,cAAesL,GAAS,eAAgBA,GAC3C,MAAM,IAAIlV,MAAM,sEAIlB,GAAsB,UAAlBxB,KAAKwxB,KAAKpmB,MAAoB,cAAesL,EAC/C,MAAM,IAAIlV,MAAM,6CASlB,GANAxB,KAAKk0B,KAAKrN,OAAS7mB,KAAK00B,eAAe,WAAY,WAAY10B,KAAKqoB,QAAQxB,QAC5E7mB,KAAKk0B,KAAKtN,OAAS5mB,KAAK00B,eAAe,WAAY,WAAY10B,KAAKqoB,QAAQzB,QAC5E5mB,KAAKk0B,KAAKvN,KAAO3mB,KAAK00B,eAAe,SAAU,SAAU10B,KAAKqoB,QAAQ1B,MACtE3mB,KAAKk0B,KAAKr3B,IAAMmD,KAAK00B,eAAe,aAAc,QAAS10B,KAAKqoB,QAAQxrB,KACxEmD,KAAKk0B,KAAKz3B,MAAQuD,KAAK00B,eAAe,UAAW,UAAW10B,KAAKqoB,QAAQ5rB,OAEnD,UAAlBuD,KAAKwxB,KAAKpmB,KACZ,GAAI,UAAWsL,EAAO,CACpB,IACIjG,GADAkkB,EAAa30B,KAAK40B,cAAcle,EAAM6c,MAAM,GAAIvzB,KAAKwxB,KAAKtC,OACzC,GAEjB2F,GADArI,EAAMmI,EAAW,IACJ30B,KAAKk0B,KAAKvJ,UAAU3qB,KAAKwxB,KAAKtC,OAC1ClvB,KAAKk0B,KAAKvJ,UAAU3qB,KAAKwxB,KAAKtC,MAAQ1C,GAAOqI,GAAQ,GAAMA,EAAO,KAErE70B,KAAKk0B,KAAKr3B,KAAOg4B,EAErB,KAAO,CACL,IAAIhnB,EAAU7B,EAAKiL,MAAMI,oBAAoBrX,KAAKqoB,QAAQsC,aAC1DjU,EAAM6c,MAAQ,CAAC1lB,EACjB,CAGF,GAAsB,UAAlB7N,KAAKwxB,KAAKpmB,KAAkB,CAC9B,KACEpL,KAAK80B,iBAAiB90B,KAAKk0B,KAAK33B,QAC5ByD,KAAKilB,KAAK7c,OAAS,IAGvBpI,KAAK+0B,eAAe/0B,KAAKwxB,KAAKH,UAGhCrxB,KAAKg1B,gBACP,CAEA,GAAsB,WAAlBh1B,KAAKwxB,KAAKpmB,MAAqBpL,KAAKi1B,YAAY,SAAU,CAC5D,IAAIC,EAAW,KACXC,EAAWn1B,KAAKk0B,KAAK3iB,QACrBoa,EAAc3f,EAAKc,KAAK6e,YAAY3rB,KAAKk0B,KAAKz3B,MAAOuD,KAAKk0B,KAAK33B,MAGnE,IAAK,IAAImF,KAAK1B,KAAKs0B,QAAQf,MAEzB,GAAKvzB,KAAKs0B,QAAQf,MAAM9jB,eAAe/N,GAAvC,CAGA1B,KAAKk0B,KAAOiB,EAAS5jB,QAEjBd,GADAkkB,EAAa30B,KAAK40B,cAAc50B,KAAKs0B,QAAQf,MAAM7xB,KAClC,GADrB,IAAIizB,EAEAnI,EAAMmI,EAAW,GACjBS,EAAap1B,KAAKk0B,KAAKhI,WAAWM,EAAK/b,GAG3C,GAAIA,GAAO,GAAKA,IAAQ,EACtB,MAAM,IAAIjP,MAAM,kCAKlB,GAAI4zB,EAAazJ,GAAeyJ,GAAc,EAAG,CAE/C,GAAIF,GAAYA,EAASz4B,OAAS04B,EAAS14B,MACzC,SAEF,KAAO24B,EAAazJ,GAAeyJ,GAAc,GAC/Cp1B,KAAKq1B,kBACL1J,EAAc3f,EAAKc,KAAK6e,YAAY3rB,KAAKk0B,KAAKz3B,MAAOuD,KAAKk0B,KAAK33B,MAC/D64B,EAAap1B,KAAKk0B,KAAKhI,WAAWM,EAAK/b,EAE3C,CAEAzQ,KAAKk0B,KAAKr3B,IAAMu4B,IACXF,GAAYl1B,KAAKk0B,KAAKvR,QAAQuS,GAAY,KAC7CA,EAAWl1B,KAAKk0B,KAAK3iB,QA5BvB,CA0CF,GAXAvR,KAAKk0B,KAAOgB,EAAS3jB,QAOjBvR,KAAKi1B,YAAY,eACnBj1B,KAAKs1B,mBAAkB,GAGrBt1B,KAAKk0B,KAAKr3B,IAAM8uB,GAAgC,GAAjB3rB,KAAKk0B,KAAKr3B,IAC3C,MAAM,IAAI2E,MAAM,iCAGpB,MAAWxB,KAAKi1B,YAAY,eACtBj1B,KAAKk0B,KAAKr3B,IAAM,IACd8uB,EAAc3f,EAAKc,KAAK6e,YAAY3rB,KAAKk0B,KAAKz3B,MAAOuD,KAAKk0B,KAAK33B,MACnEyD,KAAKk0B,KAAKr3B,IAAM8uB,EAAc3rB,KAAKk0B,KAAKr3B,IAAM,EAIpD,EAMAksB,KAAM,WACJ,IAmBI5qB,EAnBAo3B,EAAUv1B,KAAKk0B,KAAOl0B,KAAKk0B,KAAK3iB,QAAU,KAE9C,GAAKvR,KAAKwxB,KAAKrI,OAASnpB,KAAKm0B,mBAAqBn0B,KAAKwxB,KAAKrI,OACvDnpB,KAAKwxB,KAAK7I,OAAS3oB,KAAKk0B,KAAKvR,QAAQ3iB,KAAKwxB,KAAK7I,OAAS,EAM3D,OAFA3oB,KAAKi0B,WAAY,EAEV,KAGT,GAA8B,GAA1Bj0B,KAAKm0B,mBAA0Bn0B,KAAKk0B,KAAKvR,QAAQ3iB,KAAKqoB,UAAY,EAGpE,OADAroB,KAAKm0B,oBACEn0B,KAAKk0B,KAKd,GAGE,OAFA/1B,EAAQ,EAEA6B,KAAKwxB,KAAKpmB,MAClB,IAAK,WACHpL,KAAKw1B,cACL,MACF,IAAK,WACHx1B,KAAKy1B,cACL,MACF,IAAK,SACHz1B,KAAK01B,YACL,MACF,IAAK,QACH11B,KAAK21B,WACL,MACF,IAAK,SACH31B,KAAK41B,YACL,MACF,IAAK,UACHz3B,EAAQ6B,KAAK61B,aACb,MACF,IAAK,SACH71B,KAAK81B,YACL,MAEF,QACE,OAAO,aAED91B,KAAK+1B,2BACN/1B,KAAKk0B,KAAKvR,QAAQ3iB,KAAKqoB,SAAW,IACjClqB,GAGV,GAAiC,GAA7B6B,KAAKk0B,KAAKvR,QAAQ4S,GACpB,MAAM,IAAI/zB,MAAM,uEAIlB,OAAIxB,KAAKwxB,KAAK7I,OAAS3oB,KAAKk0B,KAAKvR,QAAQ3iB,KAAKwxB,KAAK7I,OAAS,GAC1D3oB,KAAKi0B,WAAY,EACV,OAEPj0B,KAAKm0B,oBACEn0B,KAAKk0B,KAEhB,EAEAsB,YAAa,WACX,OAAOx1B,KAAKg2B,aAAa,WAAY,WAAY,SAAU,SAC7D,EAEAC,iBAAkB,SAA0BC,GAC1C,OAAOl2B,KAAKm2B,kBAAkBD,EAAK,SAAU,GAAI,SACnD,EAEAT,YAAa,WACX,OAAOz1B,KAAKg2B,aAAa,WAAY,WACZ,SAAU,OAAQ,cAC7C,EAEAI,iBAAkB,SAA0BF,GAC1C,OAAOl2B,KAAKm2B,kBAAkBD,EAAK,SAAU,GAAI,OACnD,EAEAR,UAAW,WACT,OAAO11B,KAAKg2B,aAAa,SAAU,SAAU,OACpB,WAAY,cACvC,EAEAK,eAAgB,SAAwBH,GACtCl2B,KAAKm2B,kBAAkBD,EAAK,OAAQ,GAAI,WAC1C,EAEAP,SAAU,WACqB31B,KAAKs0B,QAAlC,IACIgC,EAA+B,SAAlBt2B,KAAKwxB,KAAKpmB,KAE3B,OAAwB,GAApBpL,KAAK01B,cAILY,EACFt2B,KAAKu2B,mBAAmBv2B,KAAKwxB,KAAKH,UAElCrxB,KAAKu2B,mBAAmB,IANjB,CAUX,EAEAX,UAAW,WACT,IAAIY,EAAc,EAElB,GAAmC,GAA/Bx2B,KAAKy2B,uBACP,OAAOD,EAGT,GAAIx2B,KAAKi1B,YAAY,YAAa,GACpBj1B,KAAKo0B,WAAWV,SAExB1zB,KAAKo0B,WAAWV,UAAY1zB,KAAKs0B,QAAQZ,SAAStrB,SACpDpI,KAAKo0B,WAAWV,SAAW,EAC3B8C,EAAc,GAIhBx2B,KAAKk0B,KAAKz3B,MAAQ,EAClBuD,KAAKk0B,KAAKr3B,IAAM,EAEhB,IAAI65B,EAAU12B,KAAKs0B,QAAQZ,SAAS1zB,KAAKo0B,WAAWV,UAEpD1zB,KAAKk0B,KAAKr3B,KAAO,EAAI65B,EAEjBF,GACFx2B,KAAK+0B,eAAe,EAExB,MAEE/0B,KAAKu2B,mBAAmB,EAAIv2B,KAAKwxB,KAAKH,UAGxC,OAAOmF,CACT,EAeAG,yBAA0B,SAASp6B,EAAME,EAAOm6B,GAY9C,IAXA,IASIpF,EATA7F,EAAc3f,EAAKc,KAAK6e,YAAYlvB,EAAOF,GAK3Cs6B,EAAW,GAEXC,EAAU,EACVzgB,EAAMugB,EAAMxuB,OAGT0uB,EAAUzgB,EAAKygB,IAKpB,GAJAtF,EAAOoF,EAAME,KAIT7vB,KAAKyb,IAAI8O,GAAQ7F,GAArB,CAKA,GAAI6F,EAAO,EAGTA,EAAO7F,GAAe6F,EAAO,QACxB,GAAa,IAATA,EAET,UAI8B,IAA5BqF,EAAShqB,QAAQ2kB,IACnBqF,EAASl1B,KAAK6vB,EAdhB,CAoBF,OAAOqF,EAAS1O,MAAK,SAASvlB,EAAGigB,GAAK,OAAOjgB,EAAIigB,CAAG,GACtD,EAYAyS,kBAAmB,SAASyB,GAC1B,IAAIC,EAGA16B,EAEA26B,EAMAtL,EAVAuL,EAAQl3B,KAAKs0B,QAAQf,MAGrB4D,EAAU,EAEVC,EAASF,EAAM9uB,OAGfivB,EAAc,EAGdC,EAAOt3B,KAIPpC,EAAUoC,KAAKk0B,KAAKr3B,IAExB,SAAS06B,IAkBP,IAjBA5L,EAAc3f,EAAKc,KAAK6e,YACtB2L,EAAKpD,KAAKz3B,MAAO66B,EAAKpD,KAAK33B,MAG7By6B,EAAaM,EAAKX,yBAChBW,EAAKpD,KAAK33B,KACV+6B,EAAKpD,KAAKz3B,MACV66B,EAAKhD,QAAQd,YAGfyD,EAAUD,EAAW5uB,OAOd4uB,EAAWG,IAAYv5B,KACrBm5B,GAAUC,EAAWG,IAAYv5B,IACnCu5B,EAAUF,EAAU,GACzBE,GAEJ,CAEA,SAASK,IAGP55B,EAAU,EACV05B,EAAKjC,kBACL8B,EAAU,EACVI,GACF,CAEAA,IAGIR,IACFn5B,GAAW,GAOb,IAFA,IAAI65B,EAAgB,IAEZJ,GAAeI,GASrB,GARAA,KAMAn7B,EAAOsB,EAAU,GAEN+tB,EACT6L,QADF,CAMA,IAAIzO,EAAOiO,EAAWG,KAItB,GAAIpO,GAAQzsB,EAAZ,CAEEsB,EAAUmrB,EAUZ,IAAK,IAAI2O,EAAS,EAAGA,EAASN,EAAQM,IAAU,CAC9C,IAAIhhB,EAAQ1W,KAAK40B,cAAcsC,EAAMQ,IACjCjnB,EAAMiG,EAAM,GACZ8V,EAAM9V,EAAM,GAGhB,GADA1W,KAAKk0B,KAAKr3B,IAAMe,EACZoC,KAAKk0B,KAAK3H,aAAaC,EAAK/b,GAAM,CAKpC4mB,EAAc,EACd,KACF,CACF,CAQKA,GAAeF,IAAYF,GAC9BO,GA3BF,MAFEA,GAbF,CA+CF,GAAIC,GAAiB,EAGnB,MAAM,IAAIj2B,MAAM,4DAIlB,OAAO61B,CACT,EAEAxB,WAAY,WACO71B,KAAKwxB,KAAKpmB,KAA3B,IACIusB,EAAa,EAEjB,GAAwB,GAApB33B,KAAK01B,YACP,OAAOiC,EAGT,GAAI33B,KAAKi1B,YAAY,UAAYj1B,KAAKi1B,YAAY,cAChD0C,EAAa33B,KAAKs1B,yBACb,GAAIt1B,KAAKi1B,YAAY,SAAU,CACpC,IAAItJ,EAAc3f,EAAKc,KAAK6e,YAAY3rB,KAAKk0B,KAAKz3B,MAAOuD,KAAKk0B,KAAK33B,MAC/Dq7B,EAAS,EACTC,EAAe,EAEnB,GAAI73B,KAAKi1B,YAAY,YAAa,CAEhC,IADA,IAAI6C,EAAW93B,KAAKk0B,KAAKr3B,IAChBA,EAAM,EAAGA,GAAO8uB,EAAa9uB,IACpCmD,KAAKk0B,KAAKr3B,IAAMA,EACZmD,KAAK+3B,gBAAgB/3B,KAAKk0B,QAC5B2D,IACIh7B,GAAOi7B,GACTF,KAIN53B,KAAKk0B,KAAKr3B,IAAMi7B,CAClB,CAGA,IADAH,EAAa,EACJ96B,EAAMmD,KAAKk0B,KAAKr3B,IAAM,EAAGA,GAAO8uB,EAAa9uB,IAGpD,GAFAmD,KAAKk0B,KAAKr3B,IAAMA,EAEZmD,KAAK+3B,gBAAgB/3B,KAAKk0B,SACvBl0B,KAAKi1B,YAAY,aAClBj1B,KAAKg4B,qBAAqBJ,IAC1B53B,KAAKg4B,mBAAmBJ,EAASC,EAAe,IAAI,CAEtDF,EAAa,EACb,KACF,CAIA96B,EAAM8uB,IACR3rB,KAAKk0B,KAAKr3B,IAAM,EAChBmD,KAAKq1B,kBAEDr1B,KAAK+3B,gBAAgB/3B,KAAKk0B,MACvBl0B,KAAKi1B,YAAY,cAAej1B,KAAKg4B,mBAAmB,KAC3DL,EAAa,GAGfA,EAAa,EAGnB,MAAW33B,KAAKi1B,YAAY,eAC1Bj1B,KAAKo0B,WAAWZ,aAEZxzB,KAAKo0B,WAAWZ,YAAcxzB,KAAKs0B,QAAQd,WAAWprB,SACxDpI,KAAKo0B,WAAWZ,WAAa,EAC7BxzB,KAAKq1B,mBAGH1J,EAAc3f,EAAKc,KAAK6e,YAAY3rB,KAAKk0B,KAAKz3B,MAAOuD,KAAKk0B,KAAK33B,OAC/DM,EAAMmD,KAAKs0B,QAAQd,WAAWxzB,KAAKo0B,WAAWZ,aAExC,IACR32B,EAAM8uB,EAAc9uB,EAAM,GAGxBA,EAAM8uB,GACR3rB,KAAKk0B,KAAKr3B,IAAM,EAChB86B,EAAa33B,KAAK+3B,gBAAgB/3B,KAAKk0B,OAEvCl0B,KAAKk0B,KAAKr3B,IAAMA,IAIlBmD,KAAKq1B,kBACD1J,EAAc3f,EAAKc,KAAK6e,YAAY3rB,KAAKk0B,KAAKz3B,MAAOuD,KAAKk0B,KAAK33B,MAC/DyD,KAAKs0B,QAAQd,WAAW,GAAK7H,EAC/BgM,EAAa,EAEb33B,KAAKk0B,KAAKr3B,IAAMmD,KAAKs0B,QAAQd,WAAW,IAI5C,OAAOmE,CACT,EAEAlB,qBAAsB,WACpB,IAAID,EAAc,EAElB,GAAwB,GAApBx2B,KAAK01B,YACP,OAAOc,EAGT,IAAKx2B,KAAKi1B,YAAY,SACpB,OAAO,EAGT,OAAS,CACP,IAAI3O,EAAK,IAAIta,EAAKc,KAClB9M,KAAKo0B,WAAWb,QAEZvzB,KAAKo0B,WAAWb,OAAS5uB,OAAO8H,KAAKzM,KAAKs0B,QAAQf,OAAOnrB,SAC3DpI,KAAKo0B,WAAWb,MAAQ,EACxBiD,EAAc,GAGhB,IAAIyB,EAAYj4B,KAAKs0B,QAAQf,MAAMvzB,KAAKo0B,WAAWb,OAE/C/G,EADQxsB,KAAK40B,cAAcqD,GACf,IAEhBzL,GAAOxsB,KAAKwxB,KAAKtC,MAEP,IACR1C,GAAO,GAGTlG,EAAG/pB,KAAOyD,KAAKk0B,KAAK33B,KACpB+pB,EAAG7pB,MAAQuD,KAAKk0B,KAAKz3B,MACrB6pB,EAAGzpB,IAAMmD,KAAKk0B,KAAKr3B,IAEnB,IAAI0uB,EAAcjF,EAAGwF,aAAa9rB,KAAKwxB,KAAKtC,MAE5C,KAAI1C,EAAMjB,EAAc,IAEjBiL,EAFP,CAOA,IAAIzN,EAAO/c,EAAKc,KAAK8hB,cAAcrD,EAAciB,EACPxsB,KAAKk0B,KAAK33B,MAWpD,OAJAyD,KAAKk0B,KAAK33B,KAAOwsB,EAAKxsB,KACtByD,KAAKk0B,KAAKz3B,MAAQssB,EAAKtsB,MACvBuD,KAAKk0B,KAAKr3B,IAAMksB,EAAKlsB,IAEd25B,CAdP,CAeF,CACF,EAEAV,UAAW,WAET,GAAwB,GAApB91B,KAAK01B,YACP,OAAO,EAGT,KAAM11B,KAAKu0B,YAAcv0B,KAAKilB,KAAK7c,OAAQ,CACzCpI,KAAKu0B,WAAa,EAClB,GACEv0B,KAAK+0B,eAAe/0B,KAAKwxB,KAAKH,UAC9BrxB,KAAK80B,iBAAiB90B,KAAKk0B,KAAK33B,YACL,GAApByD,KAAKilB,KAAK7c,OACrB,CAIA,OAFApI,KAAKg1B,iBAEE,CACT,EAEAA,eAAgB,WACZ,IAAIlG,EAAM9uB,KAAKilB,KAAKjlB,KAAKu0B,YACrBh4B,EAAOyD,KAAKk0B,KAAK33B,KACjBuyB,EAAM,IAKNA,GAAO,EACPvyB,GAAQ,GAEZ,IAAIwsB,EAAO/c,EAAKc,KAAK8hB,cAAcE,EAAKvyB,GACxCyD,KAAKk0B,KAAKr3B,IAAMksB,EAAKlsB,IACrBmD,KAAKk0B,KAAKz3B,MAAQssB,EAAKtsB,KAC3B,EAOAm4B,cAAe,SAAuBpI,EAAK5B,GACzC,IAAIrX,EAAUiZ,EAAI0L,MAAM,uCACxB,OAAI3kB,EAGK,CAFGnD,SAASmD,EAAQ,IAAM,EAAG,IACpCiZ,EAAMxgB,EAAKiL,MAAMub,oBAAoBjf,EAAQ,GAAIqX,IAG1C,CAAC,EAAG,EAEf,EAEAoL,aAAc,SAAsBmC,EAAWC,EAAWC,EACtBC,EAAgBC,GAClD,IAAIC,EAAeL,KAAan4B,KAAKs0B,QACjCgC,EAAat2B,KAAKwxB,KAAKpmB,MAAQgtB,EAC/B5B,EAAc,EAElB,GAAI+B,GAA0C,GAAzBv4B,KAAKu4B,KACxB,OAAO/B,EAGT,GAAIgC,EAAa,CACfx4B,KAAKo0B,WAAW+D,KACNn4B,KAAKo0B,WAAW+D,GAA1B,IACIM,EAAMz4B,KAAKs0B,QAAQ6D,GAEnBn4B,KAAKo0B,WAAW+D,IAAcM,EAAIrwB,SACpCpI,KAAKo0B,WAAW+D,GAAa,EAC7B3B,EAAc,GAEhBx2B,KAAKk0B,KAAKmE,GAAaI,EAAIz4B,KAAKo0B,WAAW+D,GAC7C,MAAW7B,GACTt2B,KAAK,aAAeq4B,GAAWr4B,KAAKwxB,KAAKH,UAO3C,OAJImH,GAAehC,GAAeF,GAChCt2B,KAAK,aAAes4B,GAAgB,GAG/B9B,CACT,EAEAD,mBAAoB,SAA4BL,GAC9C,IAAK,IAAIx0B,EAAI,EAAGA,EAAIw0B,EAAKx0B,IAAK,CAC5B,IAAIiqB,EAAc3f,EAAKc,KAAK6e,YAAY3rB,KAAKk0B,KAAKz3B,MAAOuD,KAAKk0B,KAAK33B,MACnEyD,KAAKk0B,KAAKr3B,MAENmD,KAAKk0B,KAAKr3B,IAAM8uB,IAClB3rB,KAAKk0B,KAAKr3B,KAAO8uB,EACjB3rB,KAAKq1B,kBAET,CACF,EAEAA,gBAAiB,WAEf,GADAr1B,KAAKk0B,KAAKr3B,IAAM,EACZmD,KAAKi1B,YAAY,WACnBj1B,KAAKo0B,WAAWT,UAEZ3zB,KAAKo0B,WAAWT,SAAW3zB,KAAKs0B,QAAQX,QAAQvrB,SAClDpI,KAAKo0B,WAAWT,QAAU,EAC1B3zB,KAAK+0B,eAAe,IAGtB/0B,KAAKk0B,KAAKz3B,MAAQuD,KAAKs0B,QAAQX,QAAQ3zB,KAAKo0B,WAAWT,aAClD,CACiB,WAAlB3zB,KAAKwxB,KAAKpmB,KACZpL,KAAKk0B,KAAKz3B,OAASuD,KAAKwxB,KAAKH,SAE7BrxB,KAAKk0B,KAAKz3B,QAGZuD,KAAKk0B,KAAKz3B,QACV,IAAIi8B,EAAQ1sB,EAAK+C,QAAQsD,MAAMrS,KAAKk0B,KAAKz3B,MAAQ,IACjDuD,KAAKk0B,KAAKz3B,OAAS,GACnBuD,KAAKk0B,KAAKz3B,QAEG,GAATi8B,GACF14B,KAAK+0B,eAAe2D,EAExB,CACF,EAEA3D,eAAgB,SAAwBmB,GACtCl2B,KAAKk0B,KAAK33B,MAAQ25B,CACpB,EAEAC,kBAAmB,SAA2BD,EAAKmC,EACLM,EAASC,GACrD54B,KAAKk0B,KAAKmE,IAAcnC,EACxB,IAAI2C,EAAW7sB,EAAK+C,QAAQsD,MAAMrS,KAAKk0B,KAAKmE,GAAaM,GACzD34B,KAAKk0B,KAAKmE,IAAcM,EACR,GAAZE,GACF74B,KAAK,aAAe44B,GAAgBC,EAExC,EAEA5D,YAAa,SAAqBkD,GAChC,OAAQA,KAAan4B,KAAKwxB,KAAK9a,KACjC,EAEAoe,iBAAkB,SAA0BpN,GAC1C,IAAIrlB,EAAI,IAAI2J,EAAKc,KACjB9M,KAAKilB,KAAO,GAGZ,IAAIvO,EAAQ,CAAC,EACTkgB,EAAQ,CAAC,QAAS,WAAY,aAAc,UAAW,aAC3D,IAAK,IAAI7yB,KAAK6yB,EAEZ,GAAIA,EAAMnnB,eAAe1L,GAAI,CAC3B,IAAIwsB,EAAOqG,EAAM7yB,GACbwsB,KAAQvwB,KAAKwxB,KAAK9a,QACpBA,EAAM6Z,GAAQvwB,KAAKwxB,KAAK9a,MAAM6Z,GAElC,CAGF,GAAI,YAAa7Z,GAAS,aAAcA,EAAO,CAC7C,IAAIvY,EAAQ,EACR26B,EAAa,CAAC,EAClBz2B,EAAE9F,KAAOmrB,EACTrlB,EAAEqmB,QAAS,EAEX,IAAK,IAAIqQ,EAAW,EAAGA,EAAW/4B,KAAKs0B,QAAQX,QAAQvrB,OAAQ2wB,IAAY,CACzE,IAAIt8B,EAAQuD,KAAKs0B,QAAQX,QAAQoF,GACjC12B,EAAE5F,MAAQA,EACV4F,EAAExF,IAAM,EACR,IAAIm8B,EAAa32B,EAAEoqB,WAAWzsB,KAAKwxB,KAAKtC,MACxC7sB,EAAExF,IAAMmP,EAAKc,KAAK6e,YAAYlvB,EAAOirB,GACrC,IAAIuR,EAAY52B,EAAEoqB,WAAWzsB,KAAKwxB,KAAKtC,MACvC,IAAK6J,EAAWC,EAAYD,EAAWE,EAAWF,IAChDD,EAAWC,GAAY,CAE3B,CAEA,IAAK,IAAIG,EAAU,EAAGA,EAAUl5B,KAAKs0B,QAAQZ,SAAStrB,QAAUjK,EAAO+6B,KACjEC,EAASn5B,KAAKs0B,QAAQZ,SAASwF,IACtB,GACX/6B,GAAS26B,EAAWI,GAEpB/6B,EAAQ,EAIRA,SACKuY,EAAMid,eAENjd,EAAMgd,QAEjB,CAEA,IAAI0F,EAAYz0B,OAAO8H,KAAKiK,GAAOtO,OAEnC,GAAiB,GAAbgxB,EAAgB,CAClB,IAAIC,EAAKr5B,KAAKqoB,QAAQ9W,QACtB8nB,EAAG98B,KAAOyD,KAAKk0B,KAAK33B,KACpByD,KAAKilB,KAAKtjB,KAAK03B,EAAGlO,YACpB,MAAO,GAAiB,GAAbiO,GAAkB,YAAa1iB,GACxC,IAAK,IAAI4iB,KAAYt5B,KAAKs0B,QAAQX,QAEhC,GAAK3zB,KAAKs0B,QAAQX,QAAQlkB,eAAe6pB,GAAzC,CAGA,IAAIC,EAAKv5B,KAAKqoB,QAAQ9W,QACtBgoB,EAAGh9B,KAAOmrB,EACV6R,EAAG98B,MAAQuD,KAAKs0B,QAAQX,QAAQ2F,GAChCC,EAAG7Q,QAAS,EACZ1oB,KAAKilB,KAAKtjB,KAAK43B,EAAGpO,YALlB,OAOG,GAAiB,GAAbiO,GAAkB,eAAgB1iB,GAC3C,IAAK,IAAI8iB,KAAex5B,KAAKs0B,QAAQd,WAEnC,GAAKxzB,KAAKs0B,QAAQd,WAAW/jB,eAAe+pB,GAA5C,CAGA,IAAIC,EAAKz5B,KAAKqoB,QAAQ9W,SAClBmoB,EAAO15B,KAAKs0B,QAAQd,WAAWgG,IACxB,IAETE,EAAOA,GADH/N,EAAc3f,EAAKc,KAAK6e,YAAY8N,EAAGh9B,MAAOirB,IACtB,GAE9B+R,EAAG58B,IAAM68B,EACTD,EAAGl9B,KAAOmrB,EACV+R,EAAG/Q,QAAS,EACZ1oB,KAAKilB,KAAKtjB,KAAK83B,EAAGtO,YAVlB,OAYG,GAAiB,GAAbiO,GACA,eAAgB1iB,GAChB,YAAaA,GACtB,IAAK,IAAI4iB,KAAYt5B,KAAKs0B,QAAQX,QAEhC,GAAK3zB,KAAKs0B,QAAQX,QAAQlkB,eAAe6pB,GAAzC,CAGA,IAAIK,EAAS35B,KAAKs0B,QAAQX,QAAQ2F,GAC9B3N,EAAc3f,EAAKc,KAAK6e,YAAYgO,EAAQjS,GAChD,IAAK,IAAI8R,KAAex5B,KAAKs0B,QAAQd,WAAY,CAK/C,IAAIkG,EAHC15B,KAAKs0B,QAAQd,WAAW/jB,eAAe+pB,MAGxCE,EAAO15B,KAAKs0B,QAAQd,WAAWgG,IACxB,IACTE,EAAOA,EAAO/N,EAAc,GAE9BtpB,EAAExF,IAAM68B,EACRr3B,EAAE5F,MAAQk9B,EACVt3B,EAAE9F,KAAOmrB,EACTrlB,EAAEqmB,QAAS,EAEX1oB,KAAKilB,KAAKtjB,KAAKU,EAAE8oB,aACnB,CAlBA,OAoBG,GAAiB,GAAbiO,GAAkB,aAAc1iB,QAEpC,GAAiB,GAAb0iB,GACA,aAAc1iB,GACd,eAAgBA,QAEpB,GAAiB,GAAb0iB,GAAkB,UAAW1iB,EACtC1W,KAAKilB,KAAOjlB,KAAKilB,KAAKloB,OAAOiD,KAAK45B,cAAclS,SAC3C,GAAiB,GAAb0R,GAAkB,UAAW1iB,GAAS,YAAaA,EAAO,CACnE,IAAK,IAAI4iB,KAAYt5B,KAAKs0B,QAAQX,QAEhC,GAAK3zB,KAAKs0B,QAAQX,QAAQlkB,eAAe6pB,GAAzC,CAGI78B,EAAQuD,KAAKs0B,QAAQX,QAAQ2F,GAC7B3N,EAAc3f,EAAKc,KAAK6e,YAAYlvB,EAAOirB,GAE/CrlB,EAAE9F,KAAOmrB,EACTrlB,EAAE5F,MAAQuD,KAAKs0B,QAAQX,QAAQ2F,GAC/Bj3B,EAAExF,IAAM,EACRwF,EAAEqmB,QAAS,EAEX,IAAImR,EAAYx3B,EAAEsoB,YACdmP,EAAaz3B,EAAE8oB,YAAc,EAEjC9oB,EAAExF,IAAM8uB,EACR,IAAIoO,EAAW13B,EAAEsoB,YAEjB,GAAI3qB,KAAKi1B,YAAY,YAAa,CAGhC,IAFA,IACI+E,EAAe,GACVn9B,EAAM,EAAGA,GAAO8uB,EAAa9uB,IACpCwF,EAAExF,IAAMA,EACJmD,KAAK+3B,gBAAgB11B,IACvB23B,EAAar4B,KAAK9E,GAItB,IAAK,IAAIo9B,EAAU,EAAGA,EAAUD,EAAa5xB,OAAQ6xB,KAC/Cj6B,KAAKg4B,mBAAmBiC,EAAU,IAClCj6B,KAAKg4B,mBAAmBiC,EAAUD,EAAa5xB,UACjDpI,KAAKilB,KAAKtjB,KAAKm4B,EAAaE,EAAaC,GAG/C,MACE,IAAK,IAAIC,KAAel6B,KAAKs0B,QAAQf,MAEnC,GAAKvzB,KAAKs0B,QAAQf,MAAM9jB,eAAeyqB,GAAvC,CAGA,IAIIC,EAJAlC,EAAYj4B,KAAKs0B,QAAQf,MAAM2G,GAC/BvF,EAAa30B,KAAK40B,cAAcqD,GAChCxnB,EAAMkkB,EAAW,GACjBnI,EAAMmI,EAAW,GAGjByF,GAAuB5N,EAAM,EAAIqN,GAAa,EAAK,EACnDQ,EAAoB1O,GAAgBoO,EAAW,EAAIvN,GAAO,EAE9D,GAAW,GAAP/b,EACF,IAAS5T,EAAMu9B,EAAoBv9B,GAAO8uB,EAAa9uB,GAAO,EAC5DmD,KAAKilB,KAAKtjB,KAAKm4B,EAAaj9B,QAErB4T,EAAM,GACf0pB,EAAYC,EAAiC,GAAX3pB,EAAM,KAEvBkb,GACf3rB,KAAKilB,KAAKtjB,KAAKm4B,EAAaK,IAG9BA,EAAYE,EAAgC,GAAX5pB,EAAM,IAEvB,GACdzQ,KAAKilB,KAAKtjB,KAAKm4B,EAAaK,EAxBhC,CApCJ,CAoEFn6B,KAAKilB,KAAKkD,MAAK,SAASvlB,EAAGigB,GAAK,OAAOjgB,EAAIigB,CAAG,GAChD,MAAO,GAAiB,GAAbuW,GAAkB,UAAW1iB,GAAS,eAAgBA,EAAO,CACtE,IAAI4jB,EAAet6B,KAAK45B,cAAclS,GAEtC,IAAK,IAAI6S,KAAUD,EAEjB,GAAKA,EAAa7qB,eAAe8qB,GAAjC,CAGI19B,EAAMy9B,EAAaC,GAAvB,IACIjU,EAAKta,EAAKc,KAAK8hB,cAAc/xB,EAAK6qB,GAClC1nB,KAAKs0B,QAAQd,WAAW3mB,QAAQyZ,EAAGzpB,MAAQ,GAC7CmD,KAAKilB,KAAKtjB,KAAK9E,EAJjB,CAOJ,MAAO,GAAiB,GAAbu8B,GACA,UAAW1iB,GACX,eAAgBA,GAChB,YAAaA,EAGtB,IAAK,IAAI6jB,KAFLD,EAAet6B,KAAK45B,cAAclS,GAI/B4S,EAAa7qB,eAAe8qB,KAG7B19B,EAAMy9B,EAAaC,GACnBjU,EAAKta,EAAKc,KAAK8hB,cAAc/xB,EAAK6qB,GAElC1nB,KAAKs0B,QAAQX,QAAQ9mB,QAAQyZ,EAAG7pB,QAAU,GAC1CuD,KAAKs0B,QAAQd,WAAW3mB,QAAQyZ,EAAGzpB,MAAQ,GAC7CmD,KAAKilB,KAAKtjB,KAAK9E,SAGd,GAAiB,GAAbu8B,GAAkB,UAAW1iB,GAAS,aAAcA,GAG7D,IAAK,IAAI6jB,KAFLD,EAAet6B,KAAK45B,cAAclS,GAIpC,GAAK4S,EAAa7qB,eAAe8qB,GAAjC,CAGI19B,EAAMy9B,EAAaC,GAAvB,IAEIpB,GADA7S,EAAKta,EAAKc,KAAK8hB,cAAc/xB,EAAK6qB,IACtB+E,WAAWzsB,KAAKwxB,KAAKtC,MAEjClvB,KAAKs0B,QAAQZ,SAAS7mB,QAAQssB,IAChCn5B,KAAKilB,KAAKtjB,KAAK9E,EANjB,OASoB,GAAbu8B,GACA,UAAW1iB,GACX,aAAcA,GACd,eAAgBA,IAGzB1W,KAAKilB,KADiB,GAAbmU,GAAkB,cAAe1iB,EAC9B1W,KAAKilB,KAAKloB,OAAOiD,KAAKs0B,QAAQb,WAE9B,IAEd,OAAO,CACT,EAEAmG,cAAe,SAAuBlS,GAEpC,IAAI8S,EAAY,GACZC,EAAMz6B,KAAKk0B,KAAK3iB,QAEpBkpB,EAAIl+B,KAAOmrB,EACX+S,EAAIh+B,MAAQ,EACZg+B,EAAI59B,IAAM,EACV49B,EAAI/R,QAAS,EAEb,IAAIgS,EAAYD,EAAI9P,YAEpB8P,EAAIh+B,MAAQ,GACZg+B,EAAI59B,IAAM,GACV49B,EAAI/R,QAAS,EAEb,IAAIiS,EAAUF,EAAI9P,YACdiQ,EAAeH,EAAItP,YAEvB,IAAK,IAAIoP,KAAUv6B,KAAKs0B,QAAQf,MAE9B,GAAKvzB,KAAKs0B,QAAQf,MAAM9jB,eAAe8qB,GAAvC,CAGA,IAAI19B,EAAMmD,KAAKs0B,QAAQf,MAAMgH,GACzB7jB,EAAQ1W,KAAK40B,cAAc/3B,GAC3B4T,EAAMiG,EAAM,GACZ8V,EAAM9V,EAAM,GAEhB,GAAW,GAAPjG,EAGF,IAFA,IAESqe,GAFatC,EAAM,EAAIkO,GAAa,EAAK,EAEpB5L,GAAO8L,EAAc9L,GAAO,EACxD0L,EAAU74B,KAAKmtB,QAGZ,GAAIre,EAAM,EAAG,CAClB,IAAIoqB,EAEFA,EADErO,GAAOkO,EACDlO,EAAMkO,EAAY,EAElBlO,EAAMkO,EAAY,EAG5BF,EAAU74B,KAAKk5B,EAAoB,GAAXpqB,EAAM,GAChC,KAAO,CACL,IAAIyjB,EACJzjB,GAAOA,EAGLyjB,EADE1H,GAAOmO,EACFC,EAAeD,EAAUnO,EAEzBoO,EAAeD,EAAUnO,EAAM,EAGxCgO,EAAU74B,KAAKuyB,EAAmB,GAAXzjB,EAAM,GAC/B,CAjCA,CAmCF,OAAO+pB,CACT,EAEAzC,gBAAiB,SAAyBzR,GACxC,IAAK,IAAIiU,KAAUv6B,KAAKs0B,QAAQf,MAE9B,GAAKvzB,KAAKs0B,QAAQf,MAAM9jB,eAAe8qB,GAAvC,CAGA,IAAI19B,EAAMmD,KAAKs0B,QAAQf,MAAMgH,GACzB7jB,EAAQ1W,KAAK40B,cAAc/3B,GAC3B4T,EAAMiG,EAAM,GACZ8V,EAAM9V,EAAM,GACZokB,EAAWxU,EAAGqE,YAElB,GAAY,GAAPla,GAAY+b,GAAOsO,GACnBxU,EAAG4F,WAAWM,EAAK/b,IAAQ6V,EAAGzpB,IACjC,OAAO,CATT,CAaF,OAAO,CACT,EAUAm7B,mBAAoB,SAA4B5L,GAC9C,QAAIpsB,KAAKi1B,YAAY,cAGH,IAFNj1B,KAAKs0B,QAAQV,SAAS/mB,QAAQuf,EAK5C,EAEAqI,iBAAkB,SAAoCsG,GACpD,IAAK,IAAIr5B,EAAI,EAAGA,EAAIq5B,EAAO3yB,OAAQ1G,IACjC,IAAK,IAAIs5B,EAAI,EAAGA,EAAIt5B,EAAGs5B,IAIrB,GAHUh7B,KAAK40B,cAAcmG,EAAOC,GAAIh7B,KAAKwxB,KAAKtC,MAAM,GAC9ClvB,KAAK40B,cAAcmG,EAAOr5B,GAAI1B,KAAKwxB,KAAKtC,MAAM,GAEzC,CACb,IAAIuL,EAAMM,EAAOr5B,GACjBq5B,EAAOr5B,GAAKq5B,EAAOC,GACnBD,EAAOC,GAAKP,CACd,CAGN,EAEAQ,2BAA4B,SAAoC9C,EAAW3H,GACzE,IAAI0K,EAAgBlH,EAAmBmH,UAAUhD,GAC7CiD,EAAepH,EAAmBqH,WAAWr7B,KAAKwxB,KAAKpmB,MAAM8vB,GAC7DI,GAAO,EAEX,GAAInD,KAAan4B,KAAKs0B,SAClB8G,GAAgBpH,EAAmBuH,SAAU,CAE/C,IAAIC,EAAWx7B,KAAKs0B,QAAQ6D,GAE5B,IAAK,IAAIsD,KAAaD,EAEpB,GAAIA,EAAS/rB,eAAegsB,IACtBD,EAASC,IAAcjL,EAAG,CAC5B8K,GAAO,EACP,KACF,CAGN,MAEEA,GAAO,EAET,OAAOA,CACT,EAEAvF,wBAAyB,WACvB,IAAIvJ,EAAMxsB,KAAKk0B,KAAKvJ,YAChB+Q,EAAS17B,KAAKk0B,KAAKzH,WAAWzsB,KAAKwxB,KAAKtC,MACxCJ,EAAM9uB,KAAKk0B,KAAK/I,YAEpB,OAAQnrB,KAAKi7B,2BAA2B,WAAYj7B,KAAKk0B,KAAKrN,SACtD7mB,KAAKi7B,2BAA2B,WAAYj7B,KAAKk0B,KAAKtN,SACtD5mB,KAAKi7B,2BAA2B,SAAUj7B,KAAKk0B,KAAKvN,OACpD3mB,KAAKi7B,2BAA2B,QAASjvB,EAAKiL,MAAMI,oBAAoBmV,KACxExsB,KAAKi7B,2BAA2B,WAAYS,IAC5C17B,KAAKi7B,2BAA2B,aAAcj7B,KAAKk0B,KAAKr3B,MACxDmD,KAAKi7B,2BAA2B,UAAWj7B,KAAKk0B,KAAKz3B,QACrDuD,KAAKi7B,2BAA2B,YAAanM,EACvD,EAEA4F,eAAgB,SAAwByD,EAAWwD,EAAKC,GACtD,IAAIV,EAAgBlH,EAAmBmH,UAAUhD,GAGjD,OAFmBnE,EAAmBqH,WAAWr7B,KAAKwxB,KAAKpmB,MAAM8vB,IAE7ClH,EAAmBuH,WAC/BpD,KAAan4B,KAAKs0B,UACtBt0B,KAAKs0B,QAAQ6D,GAAa,CAACyD,IAEzB57B,KAAKwxB,KAAKpmB,MAAQuwB,GACb37B,KAAKs0B,QAAQ6D,GAAW,GAG5ByD,CACT,EAQA7kB,OAAQ,WACN,IAAI5G,EAASxL,OAAOghB,OAAO,MAW3B,OATAxV,EAAOkkB,YAAcr0B,KAAKq0B,YAC1BlkB,EAAOqhB,KAAOxxB,KAAKwxB,KAAKza,SACxB5G,EAAOkY,QAAUroB,KAAKqoB,QAAQtR,SAC9B5G,EAAOmkB,QAAUt0B,KAAKs0B,QACtBnkB,EAAO8U,KAAOjlB,KAAKilB,KACnB9U,EAAO+jB,KAAOl0B,KAAKk0B,KAAKnd,SACxB5G,EAAOikB,WAAap0B,KAAKo0B,WACzBjkB,EAAOgkB,kBAAoBn0B,KAAKm0B,kBAEzBhkB,CACT,GAGF6jB,EAAmBmH,UAAY,CAC7B,SAAY,EACZ,SAAY,EACZ,OAAU,EACV,MAAS,EACT,WAAc,EACd,UAAa,EACb,SAAY,EACZ,QAAW,EACX,SAAY,GAGdnH,EAAmBqH,WAAa,CAC9B,SAAY,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAClC,SAAY,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAClC,OAAU,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAChC,MAAS,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAC/B,OAAU,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAChC,QAAW,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACjC,OAAU,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAElCrH,EAAmB6H,QAAU,EAC7B7H,EAAmBuH,SAAW,EAC9BvH,EAAmB8H,OAAS,EAC5B9H,EAAmB+H,QAAU,EAEtB/H,CAET,CA14CqB,GAq5CrBhoB,EAAKgwB,eAAkB,WACrB,SAASC,EAAWC,GAClB,OAAOlwB,EAAK+C,QAAQsB,gBAAgB6rB,EAAMlwB,EAAKc,KACjD,CAEA,SAASqvB,EAAYv5B,EAAGigB,GACtB,OAAOjgB,EAAE+f,QAAQE,EACnB,CAgEA,SAASmZ,EAAex8B,GACtBQ,KAAKo8B,UAAY,GACjBp8B,KAAKq8B,QAAU,GACfr8B,KAAKuX,SAAS/X,EAChB,CA2ZA,OAzZAw8B,EAAe7tB,UAAY,CAKzBmuB,UAAU,EAQVC,cAAe,KAQfH,UAAW,KAQXC,QAAS,KAOTG,YAAa,EAObC,UAAW,EAQXC,OAAQ,KAQRC,SAAU,KAOVtU,QAAS,KAOT6L,KAAM,KAcN3c,SAAU,SAAS/X,GACjB,IAAI4G,EAAQ4F,EAAK+C,QAAQsB,gBAAgB7Q,EAAQ6oB,QAASrc,EAAKc,MAE/D,IAAK1G,EACH,MAAM,IAAI5E,MAAM,sCAKlB,GAHExB,KAAKqoB,QAAUjiB,EAGb5G,EAAQqQ,UACV7P,KAAK48B,MAAMp9B,EAAQqQ,eACd,CAGL,GAFA7P,KAAKk0B,KAAO+H,EAAWz8B,EAAQ00B,OAAS9tB,EAAMmL,SAEzC/R,EAAQ+8B,cACX,MAAM,IAAI/6B,MAAM,8CAGlBxB,KAAKu8B,cAAgB/8B,EAAQ+8B,cAAcp2B,KAAI,SAAS+1B,GACtD,OAAOlwB,EAAK+C,QAAQsB,gBAAgB6rB,EAAMlwB,EAAKulB,cACjD,IAEAvxB,KAAKw8B,YAAch9B,EAAQg9B,YAC3Bx8B,KAAKy8B,UAAYj9B,EAAQi9B,UAErBj9B,EAAQ48B,YACVp8B,KAAKo8B,UAAY58B,EAAQ48B,UAAUj2B,IAAI81B,GACvCj8B,KAAK28B,SAAW38B,KAAKo8B,UAAUp8B,KAAKw8B,cAGlCh9B,EAAQ68B,UACVr8B,KAAKq8B,QAAU78B,EAAQ68B,QAAQl2B,IAAI81B,GACnCj8B,KAAK08B,OAAS18B,KAAKq8B,QAAQr8B,KAAKy8B,iBAGD,IAAtBj9B,EAAgB,WACzBQ,KAAKs8B,SAAW98B,EAAQ88B,SAE5B,CACF,EAMAvT,KAAM,WASJ,IARA,IAAIoJ,EAEApJ,EACApG,EAGAka,EAAa,IAEJ,CACX,GAAIA,IAJS,IAKX,MAAM,IAAIr7B,MACR,8DAYJ,GARAunB,EAAO/oB,KAAK28B,SACZxK,EAAOnyB,KAAK88B,oBAAoB98B,KAAKk0B,OAOhCnL,IAASoJ,EAAM,CAElBnyB,KAAKs8B,UAAW,EAChB,KACF,CAkBA,KAfKvT,GAASoJ,GAAQpJ,EAAKpG,QAAQwP,EAAK+B,MAAQ,KAE9CnL,EAAOoJ,EAAK+B,KAAK3iB,QAEjB4gB,EAAKpJ,QAIH/oB,KAAK28B,WAAa5T,GACpB/oB,KAAK+8B,eAGP/8B,KAAKk0B,KAAOnL,GAGR/oB,KAAK08B,UACP/Z,EAAU3iB,KAAK08B,OAAO/Z,QAAQ3iB,KAAKk0B,OAErB,GACZl0B,KAAKg9B,aAIS,IAAZra,GAWN,OAAO3iB,KAAKk0B,KAVRl0B,KAAKg9B,YAWX,CACF,EAOAjmB,OAAQ,WACN,SAASA,EAAOmlB,GACd,OAAOA,EAAKnlB,QACd,CAEA,IAAI5G,EAASxL,OAAOghB,OAAO,MAiB3B,OAhBAxV,EAAOosB,cAAgBv8B,KAAKu8B,cAAcp2B,IAAI4Q,GAE1C/W,KAAKo8B,YACPjsB,EAAOisB,UAAYp8B,KAAKo8B,UAAUj2B,IAAI4Q,IAGpC/W,KAAKq8B,UACPlsB,EAAOksB,QAAUr8B,KAAKq8B,QAAQl2B,IAAI4Q,IAGpC5G,EAAOqsB,YAAcx8B,KAAKw8B,YAC1BrsB,EAAOssB,UAAYz8B,KAAKy8B,UACxBtsB,EAAO+jB,KAAOl0B,KAAKk0B,KAAKnd,SACxB5G,EAAOkY,QAAUroB,KAAKqoB,QAAQtR,SAC9B5G,EAAOmsB,SAAWt8B,KAAKs8B,SAEhBnsB,CACT,EAWA8sB,cAAe,SAASptB,EAAWqtB,GACjC,SAASC,EAAWryB,GAClBmV,EAAMjU,EAAK+C,QAAQ2B,gBACjBP,EACArF,EACAqxB,GAIFhsB,EAAO7I,OAAO2Y,EAAK,EAAGnV,EACxB,CAUA,IARA,IAMImV,EANA9P,EAAS,GACT3L,EAAQqL,EAAUN,iBAAiB2tB,GACnC7mB,EAAM7R,EAAM4D,OACZ1G,EAAI,EAKDA,EAAI2U,EAAK3U,IACd8C,EAAM9C,GAAGogB,YAAY9a,QAAQm2B,GAG/B,OAAOhtB,CACT,EAQAysB,MAAO,SAAS/sB,GAQd,GAPA7P,KAAKu8B,cAAgB,GAErBv8B,KAAKk0B,KAAOl0B,KAAKqoB,QAAQ9W,WAxVC2N,EA6VArP,GA5VhB0P,YAAY,UACjBL,EAAKK,YAAY,UACjBL,EAAKK,YAAY,kBA6VpB,OAFAvf,KAAK28B,SAAW38B,KAAKk0B,KAAK3iB,aAC1BvR,KAAKs8B,UAAW,GA/VtB,IAA8Bpd,EA0X1B,GAvBIrP,EAAU0P,YAAY,WACxBvf,KAAKo8B,UAAYp8B,KAAKi9B,cAAcptB,EAAW,SAM1C7P,KAAKo8B,UAAU,IACfp8B,KAAKo8B,UAAU,GAAGzZ,QAAQ3iB,KAAKqoB,SAAW,GAE7CroB,KAAKw8B,YAAc,EACnBx8B,KAAKk0B,KAAOl0B,KAAKo8B,UAAU,GAAG7qB,SAE9BvR,KAAKw8B,YAAcxwB,EAAK+C,QAAQ2B,gBAC9B1Q,KAAKo8B,UACLp8B,KAAKk0B,KACLiI,GAIJn8B,KAAK28B,SAAW38B,KAAKo8B,UAAUp8B,KAAKw8B,cAGlC3sB,EAAU0P,YAAY,SAQxB,IAPA,IAKI4S,EALAyE,EAAQ/mB,EAAUN,iBAAiB,SACnC7N,EAAI,EACJ2U,EAAMugB,EAAMxuB,OAKT1G,EAAI2U,EAAK3U,IAEdywB,EADOyE,EAAMl1B,GAAGuJ,gBACJ6d,SAAS9oB,KAAKqoB,SAC1BroB,KAAKu8B,cAAc56B,KAAKwwB,GAKxBA,EAAKpJ,OAILlZ,EAAU0P,YAAY,YACxBvf,KAAKq8B,QAAUr8B,KAAKi9B,cAAcptB,EAAW,UAE7C7P,KAAKy8B,UAAYzwB,EAAK+C,QAAQ2B,gBAC5B1Q,KAAKq8B,QACLr8B,KAAKk0B,KACLiI,GAGFn8B,KAAK08B,OAAS18B,KAAKq8B,QAAQr8B,KAAKy8B,WAEpC,EAMAO,WAAY,WACVh9B,KAAK08B,OAAS18B,KAAKq8B,UAAUr8B,KAAKy8B,UACpC,EAMAM,aAAc,WACZ/8B,KAAK28B,SAAW38B,KAAKo8B,YAAYp8B,KAAKw8B,YACxC,EASAM,oBAAqB,WACnB,IAAIM,EAAQp9B,KAAKu8B,cAEjB,GAAqB,IAAjBa,EAAMh1B,OACR,OAAO,KAUT,IAPA,IACI+pB,EACAkL,EAEAC,EAJAjnB,EAAM+mB,EAAMh1B,OAGZm1B,EAAU,EAIPA,EAAUlnB,EAAKknB,IAEpBF,GADAlL,EAAOiL,EAAMG,IACGrJ,KAKZ/B,EAAK8B,WACP5d,IACgB,IAAZknB,GACFA,IAEFH,EAAM91B,OAAOi2B,EAAS,MAKnBD,GAAcA,EAAWpJ,KAAKvR,QAAQ0a,GAAY,KAErDC,EAAanL,GAMjB,OAAOmL,CACT,GAGKtB,CACT,CAvesB,GAkftBhwB,EAAKwxB,MAAS,WAoBZ,SAASA,EAAM3tB,EAAWrQ,GAClBqQ,aAAqB7D,EAAKC,YAC9BzM,EAAUqQ,EACVA,EAAY,MAIZ7P,KAAK6P,UADHA,GAGe,IAAI7D,EAAKC,UAAU,UAGtCjM,KAAKy9B,qBAAuB94B,OAAOghB,OAAO,MAC1C3lB,KAAK09B,WAAa/4B,OAAOghB,OAAO,MAChC3lB,KAAK29B,gBAAkB,GAEnBn+B,GAAWA,EAAQo+B,mBACrB59B,KAAK49B,iBAAmBp+B,EAAQo+B,kBAG9Bp+B,GAAWA,EAAQk+B,WACrBl+B,EAAQk+B,WAAW12B,QAAQhH,KAAK69B,gBAAiB79B,MACxCA,KAAK6P,UAAUxM,SAAWrD,KAAK89B,yBACxC99B,KAAK6P,UAAUxM,OAAO6H,oBAAoB,UAAUlE,SAAQ,SAAS+2B,GAC/DA,EAAMxe,YAAY,kBACpBvf,KAAK69B,gBAAgBE,EAEzB,GAAG/9B,KAEP,CAofA,SAASg+B,EAAsBp7B,EAAGigB,GAChC,OAAIjgB,EAAE,GAAKigB,EAAE,GAAW,EACpBA,EAAE,GAAKjgB,EAAE,IAAY,EAClB,CACT,CAEA,OAxfA46B,EAAMrvB,UAAY,CAEhB8vB,cAAe,gBAOfP,WAAY,KAOZE,kBAAkB,EAYlBC,gBAAiB,SAASjsB,GACxB,GAAI5R,KAAK89B,wBACP,MAAM,IAAIt8B,MAAM,yCAOlB,GAJIoQ,aAAe5F,EAAKC,YACtB2F,EAAM,IAAI5F,EAAKwxB,MAAM5rB,IAGnB5R,KAAK49B,kBAAoBhsB,EAAI5S,MAAQgB,KAAKhB,IAC5C,MAAM,IAAIwC,MAAM,2CAGlB,IAAI8E,EAAKsL,EAAIssB,aAAavhC,WAQ1B,GAJAqD,KAAK09B,WAAWp3B,GAAMsL,EAIlBA,EAAIusB,iBAAkB,CACxB,IAAIjC,EAAO,CACTtqB,EAAIssB,aAAa9Q,aAAc9mB,GAK7B2Z,EAAMjU,EAAK+C,QAAQ2B,gBACrB1Q,KAAK29B,gBACLzB,EACA8B,GAGFh+B,KAAK29B,gBAAgBr2B,OAAO2Y,EAAK,EAAGic,EACtC,CACF,EAQAiC,eAAgB,WACd,QAAKn+B,KAAK6P,UAAU0P,YAAY,kBAIpBvf,KAAK6P,UAAU7E,iBAAiB,iBAAiBwE,aAAa,WACzDxP,KAAKi+B,aACxB,EAQAG,mBAAoB,SAAS3mB,GAC3B,IAAKzX,KAAK29B,gBAAgBv1B,OACxB,OAAO,KAGT,IAAIghB,EAAM3R,EAAK2V,aACXnN,EAAMjU,EAAK+C,QAAQ2B,gBACrB1Q,KAAK29B,gBACL,CAACvU,GACD4U,GAMF,IAHA/d,GAAO,GAGG,EACR,OAAO,KAGT,IAAIoe,EAAYr+B,KAAK29B,gBAAgB1d,GAGrC,OAAImJ,EAAMiV,EAAU,GACX,KAGFA,EAAU,EACnB,EAuBAC,qBAAsB,SAASC,GAC7B,IAEIrC,EAFA51B,EAAKi4B,EAAW5hC,WAChB6hC,EAAQD,EAAW7Q,cAAc1hB,EAAK8Z,SAASS,aAAa5pB,WAE5DwT,EAAS,CAEX+tB,aAAcK,GAGhB,GAAIj4B,KAAMtG,KAAK09B,WACbxB,EAAO/rB,EAAO+rB,KAAOl8B,KAAK09B,WAAWp3B,GACrC6J,EAAOsuB,UAAYvC,EAAKuC,UACxBtuB,EAAOuuB,QAAUxC,EAAKwC,QACtBvuB,EAAO+rB,KAAOA,OACT,GAAIsC,KAASx+B,KAAK09B,WACvBxB,EAAOl8B,KAAK09B,WAAWc,GACvBruB,EAAOsuB,UAAYvC,EAAKuC,UACxBtuB,EAAOuuB,QAAUxC,EAAKwC,QACtBvuB,EAAO+rB,KAAOA,MACT,CAKL,IAGI71B,EAHAs4B,EAAmB3+B,KAAKo+B,mBAC1BG,GAIF,GAAII,EAAkB,CACpB,IAAIC,EAAY5+B,KAAK09B,WAAWiB,GAIhCxuB,EAAO+rB,KAAO0C,EAEd,IAAIC,EAAY7+B,KAAKy9B,qBAAqBkB,GAE1C,IAAKE,EAAW,CACd,IAAIC,EAAWF,EAAUV,aAAa3sB,QAClCwtB,EAAWH,EAAUH,UAAUltB,QAGnCutB,EAAS7mB,KAAO8mB,EAAS9mB,KACzB4mB,EAAYE,EAAS1a,aAAaya,GAElC9+B,KAAKy9B,qBAAqBkB,GAAoBE,CAChD,CAEA,IAAIz4B,EAAQm4B,EAAWhtB,QACvBnL,EAAM6R,KAAO2mB,EAAUH,UAAUxmB,KACjC7R,EAAMme,YAAYsa,IAElBx4B,EAAMD,EAAMmL,SACRgT,YAAYqa,EAAUroB,UAE1BpG,EAAOsuB,UAAYr4B,EACnB+J,EAAOuuB,QAAUr4B,CACnB,MAEEA,EAAMk4B,EAAWhtB,SACbgT,YAAYvkB,KAAKuW,UAErBpG,EAAOuuB,QAAUr4B,EACjB8J,EAAOsuB,UAAYF,EACnBpuB,EAAO+rB,KAAOl8B,IAElB,CAEA,OAAOmQ,CACT,EASA2Y,SAAU,SAASkW,GACjB,OAAO,IAAIhzB,EAAKgwB,eAAe,CAC7BnsB,UAAW7P,KAAK6P,UAChBwY,QAAS2W,GAAah/B,KAAKy+B,WAE/B,EAOAQ,YAAa,WACX,IAAI/f,EAAOlf,KAAK6P,UAChB,OAAOqP,EAAKK,YAAY,UAAYL,EAAKK,YAAY,QACvD,EAQAue,sBAAuB,WACrB,OAAO99B,KAAK6P,UAAU0P,YAAY,gBACpC,EAiBA2f,mBAAoB,WAMlB,IALA,IAAItI,EAAQ52B,KAAK6P,UAAUN,iBAAiB,SACxC7N,EAAI,EACJ2U,EAAMugB,EAAMxuB,OACZ+H,EAASxL,OAAOghB,OAAO,MAEpBjkB,EAAI2U,EAAK3U,IAEdyO,EADYymB,EAAMl1B,GAAGuJ,gBACRG,OAAQ,EAGvB,OAAO+E,CACT,EAMA,OAAInR,GACF,OAAOgB,KAAKm/B,WAAW,MACzB,EAEA,OAAIngC,CAAI2B,GACNX,KAAKo/B,SAAS,MAAOz+B,EACvB,EAMA,aAAI89B,GACF,OAAOz+B,KAAKm/B,WAAW,UACzB,EAEA,aAAIV,CAAU99B,GACZX,KAAKq/B,SAAS,UAAW1+B,EAC3B,EAQA,WAAI+9B,GACF,IAAIA,EAAU1+B,KAAKm/B,WAAW,SAC9B,IAAKT,EAAS,CACV,IAAInoB,EAAWvW,KAAKm/B,WAAW,YAC/BT,EAAU1+B,KAAKy+B,UAAUltB,QACrBgF,EACAmoB,EAAQna,YAAYhO,GACbmoB,EAAQhW,SACfgW,EAAQ7hC,KAAO,EAEvB,CACA,OAAO6hC,CACT,EAEA,WAAIA,CAAQ/9B,GACNX,KAAK6P,UAAU0P,YAAY,aAC7Bvf,KAAK6P,UAAU0Q,eAAe,YAEhCvgB,KAAKq/B,SAAS,QAAS1+B,EACzB,EAQA,YAAI4V,GAEF,OADevW,KAAKm/B,WAAW,aAEtBn/B,KAAK0+B,QAAQrR,eAAertB,KAAKy+B,UAG5C,EAEA,YAAIloB,CAAS5V,GACPX,KAAK6P,UAAU0P,YAAY,UAC7Bvf,KAAK6P,UAAU0Q,eAAe,SAGhCvgB,KAAKo/B,SAAS,WAAYz+B,EAC5B,EAMA,YAAIolB,GACF,OAAO/lB,KAAKm/B,WAAW,WACzB,EAEA,YAAIpZ,CAASplB,GACX,OAAOX,KAAKo/B,SAAS,WAAYz+B,EACnC,EAOA,aAAI2+B,GAGF,OAAOt/B,KAAK6P,UAAUN,iBAAiB,WACzC,EAOA,WAAIgwB,GACF,OAAOv/B,KAAKm/B,WAAW,UACzB,EAEA,WAAII,CAAQ5+B,GACVX,KAAKo/B,SAAS,UAAWz+B,EAC3B,EAMA,eAAI6+B,GACF,OAAOx/B,KAAKm/B,WAAW,cACzB,EAEA,eAAIK,CAAY7+B,GACdX,KAAKo/B,SAAS,cAAez+B,EAC/B,EAMA,SAAI8+B,GACF,OAAOz/B,KAAKm/B,WAAW,QACzB,EAEA,SAAIM,CAAM9+B,GACRX,KAAKo/B,SAAS,QAASz+B,EACzB,EAOA,aAAI++B,GACF,OAAO1/B,KAAKm/B,WAAW,YACzB,EAEA,aAAIO,CAAU/+B,GACZX,KAAKo/B,SAAS,YAAaz+B,EAC7B,EAOA,YAAIg/B,GACF,OAAO3/B,KAAKm/B,WAAW,WACzB,EAEA,YAAIQ,CAASh/B,GACXX,KAAKo/B,SAAS,WAAYz+B,EAC5B,EAMA,gBAAIu9B,GACF,OAAOl+B,KAAKm/B,WAAW,gBACzB,EAEA,gBAAIjB,CAAav9B,GACfX,KAAKq/B,SAAS,gBAAiB1+B,EACjC,EAiBA0+B,SAAU,SAASO,EAAUnoB,GAC3B,IAAI3M,EAAO9K,KAAK6P,UAAU7E,iBAAiB40B,GAEtC90B,IACHA,EAAO,IAAIkB,EAAKqT,SAASugB,GACzB5/B,KAAK6P,UAAUwQ,YAAYvV,IAK3B2M,EAAKQ,OAASjM,EAAK8Z,SAASU,eAC5B/O,EAAKQ,OAASjM,EAAK8Z,SAASS,YAG5Bzb,EAAK4W,gBAAgB,QAErB5W,EAAKkC,aAAa,OAAQyK,EAAKQ,KAAK3I,MAGtCxE,EAAK0V,SAAS/I,EAChB,EAEA2nB,SAAU,SAAShiC,EAAMuD,GACvBX,KAAK6P,UAAU4Q,wBAAwBrjB,EAAMuD,EAC/C,EAEAw+B,WAAY,SAAS/hC,GACnB,OAAO4C,KAAK6P,UAAU2P,sBAAsBpiB,EAC9C,EAMAT,SAAU,WACR,OAAOqD,KAAK6P,UAAUlT,UACxB,GAUK6gC,CACT,CA5iBa,GAujBbxxB,EAAK6zB,gBAAmB,WAiCtB,SAASA,EAAgBrgC,GAKvB,IAAIiI,EACJ,IAAKA,UALmB,IAAd,IACRjI,EAAU,CAAC,GAIDA,EAENA,EAAQiQ,eAAehI,KACzBzH,KAAKyH,GAAOjI,EAAQiI,GAG1B,CA0GA,OAxGAo4B,EAAgB1xB,UAAY,CAO1B2xB,YAAY,EAOZC,eAAe,EASfC,WAAuC,WAAY,EAQnDC,QAAoC,SAAS/iB,GAAM,EAQnDgjB,WAAuC,SAASrwB,GAAY,EAQ5DswB,QAAoC,SAAStwB,GAAY,EAWzDuwB,QAAS,SAASC,GAEK,iBAAX,IACRA,EAAOr0B,EAAKG,MAAMk0B,IAGdA,aAAgBr0B,EAAKC,YACzBo0B,EAAO,IAAIr0B,EAAKC,UAAUo0B,IAQ5B,IALA,IAGIxwB,EAHAxS,EAAagjC,EAAKn1B,sBAClBxJ,EAAI,EACJ2U,EAAMhZ,EAAW+K,OAGd1G,EAAI2U,EAAK3U,IAGd,QAFAmO,EAAYxS,EAAWqE,IAELtE,MAChB,IAAK,YACH,GAAI4C,KAAK+/B,cAAe,CACtB,IAAIzwB,EAAOO,EAAU2P,sBAAsB,QACvClQ,GACFtP,KAAKkgC,WAAW,IAAIl0B,EAAK8Z,SAAS,CAChCxW,KAAMA,EACNO,UAAWA,IAGjB,CACA,MACF,IAAK,SACC7P,KAAK8/B,YACP9/B,KAAKmgC,QAAQ,IAAIn0B,EAAKwxB,MAAM3tB,IAE9B,MACF,QACE,SAMN7P,KAAKggC,YACP,GAGKH,CACT,CAxJuB,iCCnqSvBz7B,EAAQ,QAAuC,EAC/C,MAAMk8B,EAAU,EAAQ,OACxB,SAASC,EAAc7iC,GACnB,MAAM,EAAE0E,EAAC,EAAEwK,EAAC,EAAEvK,EAAC,EAAEK,EAAC,GAAQhF,EAC1B,MAAO,CACH,UAAU0E,IACV,gBAAgBwK,IAChB,cAAcvK,GAAKuK,IACnB,WAAWrK,GAAK+9B,EAAQE,kBACpB99B,EAAI,CAAC,cAAcA,EAAEkK,GAAK,oBAAoBlK,EAAEuB,WAAWvB,EAAEwB,KAAO,GAEhF,CA6CAE,EAAQ,GAJR,SAAuBq8B,EAAUC,GAAiB,GAC9C,MAAMC,EAhCV,SAAsBF,EAAUC,GAAiB,GAC7C,MAAME,EAAWN,EAAQO,SAASjxB,IAAI6wB,GACtC,GAAIG,EAAU,CACV,MAAM,EAAEr+B,EAAC,EAAE2B,GAAM08B,EAejB,MAdc,IACNF,EAAiB,CAAC,mBAAqB,GAC3C,QAAQD,IAER,oBACGF,EAAch+B,GACjB,kBACI2B,EAAI,CACJ,oBACGq8B,EAAcr8B,GACjB,gBACA,MACAw8B,EAAiB,CAAC,iBAAmB,GAGjD,CACJ,CAYkBI,CAAaL,EAAUC,GACrC,OAAOC,aAAqC,EAASA,EAAMn0B,KAAK,OACpE,8BCxDA7H,OAAOqO,eAAe5O,EAAS,aAAc,CAAEzD,OAAO,IACtDyD,EAAQy8B,SAAWz8B,EAAQo8B,kBAAe,EAC1Cp8B,EAAQo8B,aAAe,kBACvBp8B,EAAQy8B,SAAW,IAAIE,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,EAAK,QACL,EAAK,SAIjB,CACI,eACA,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,oBACA,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,kBACA,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,UAIjB,CACI,iBACA,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,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,S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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-1OlNbSWJ.css?7392","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-1OlNbSWJ.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/ical.js/build/ical.js","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-1OlNbSWJ.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-1OlNbSWJ.css\";\n export default content && content.locals ? content.locals : undefined;\n","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default {\n randomUUID\n};","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nlet getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nconst byteToHex = [];\n\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\n\nexport function unsafeStringify(arr, offset = 0) {\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n return byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]];\n}\n\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\n\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n\n options = options || {};\n const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return unsafeStringify(rnds);\n}\n\nexport default v4;","import './assets/index-1OlNbSWJ.css';\nimport h from \"@nextcloud/vue/dist/Components/NcDateTimePickerNative.js\";\nimport b from \"@nextcloud/vue/dist/Components/NcButton.js\";\nimport g from \"vue-material-design-icons/Delete.vue\";\nimport v from \"vue-material-design-icons/Plus.vue\";\nimport { getFirstDay as C } from \"@nextcloud/l10n\";\nimport { getZoneString as T } from \"icalzone\";\nimport { parse as D, Component as _ } from \"ical.js\";\nimport { v4 as k } from \"uuid\";\nimport { getLoggerBuilder as P } from \"@nextcloud/logger\";\nfunction $(n, t, e, s, o, u, i, r) {\n var a = typeof n == \"function\" ? n.options : n;\n t && (a.render = t, a.staticRenderFns = e, a._compiled = !0), s && (a.functional = !0), u && (a._scopeId = \"data-v-\" + u);\n var l;\n if (i ? (l = function(c) {\n c = c || // cached call\n this.$vnode && this.$vnode.ssrContext || // stateful\n this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext, !c && typeof __VUE_SSR_CONTEXT__ < \"u\" && (c = __VUE_SSR_CONTEXT__), o && o.call(this, c), c && c._registeredComponents && c._registeredComponents.add(i);\n }, a._ssrRegister = l) : o && (l = r ? function() {\n o.call(\n this,\n (a.functional ? this.parent : this).$root.$options.shadowRoot\n );\n } : o), l)\n if (a.functional) {\n a._injectStyles = l;\n var p = a.render;\n a.render = function(S, m) {\n return l.call(m), p(S, m);\n };\n } else {\n var d = a.beforeCreate;\n a.beforeCreate = d ? [].concat(d, l) : [l];\n }\n return {\n exports: n,\n options: a\n };\n}\nconst A = {\n name: \"CalendarAvailability\",\n components: {\n NcDateTimePickerNative: h,\n NcButton: b,\n IconAdd: v,\n IconDelete: g\n },\n props: {\n slots: {\n type: Object,\n required: !0\n },\n loading: {\n type: Boolean,\n default: !1\n },\n l10nTo: {\n type: String,\n required: !0\n },\n l10nDeleteSlot: {\n type: String,\n required: !0\n },\n l10nEmptyDay: {\n type: String,\n required: !0\n },\n l10nAddSlot: {\n type: String,\n required: !0\n },\n l10nWeekDayListLabel: {\n type: String,\n default: \"Weekdays\"\n },\n l10nMonday: {\n type: String,\n required: !0\n },\n l10nTuesday: {\n type: String,\n required: !0\n },\n l10nWednesday: {\n type: String,\n required: !0\n },\n l10nThursday: {\n type: String,\n required: !0\n },\n l10nFriday: {\n type: String,\n required: !0\n },\n l10nSaturday: {\n type: String,\n required: !0\n },\n l10nSunday: {\n type: String,\n required: !0\n },\n l10nStartPickerLabel: {\n type: Function,\n default: (n) => \"Pick a start time for \".concat(n)\n },\n l10nEndPickerLabel: {\n type: Function,\n default: (n) => \"Pick a end time for \".concat(n)\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(n) {\n return n.map((t) => ({\n start: new Date(t.start * 1e3),\n end: new Date(t.end * 1e3)\n }));\n },\n slotsToInternalData() {\n const n = [\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 ], t = {\n id: \"SU\",\n displayName: this.l10nSunday,\n slots: this.timeStampSlotsToDateObjectSlots(this.slots.SU)\n };\n return C() === 1 ? [...n, t] : [t, ...n];\n },\n internalDataToSlots() {\n const n = {};\n return this.internalSlots.forEach(({ id: t, slots: e }) => {\n n[t] = e.map((s) => ({\n start: Math.round(s.start.getTime() / 1e3),\n end: Math.round(s.end.getTime() / 1e3)\n }));\n }), n;\n },\n addSlot(n) {\n const t = /* @__PURE__ */ new Date();\n t.setHours(9, 0, 0, 0);\n const e = /* @__PURE__ */ new Date();\n e.setHours(17, 0, 0, 0), n.slots.push({\n start: t,\n end: e\n }), this.onChangeSlots();\n },\n removeSlot(n, t) {\n n.slots.splice(t, 1), this.onChangeSlots();\n },\n onChangeSlots() {\n this.$emit(\"update:slots\", this.internalDataToSlots());\n }\n }\n};\nvar N = function() {\n var t = this, e = t._self._c;\n return e(\"ul\", { staticClass: \"week-day-container\", attrs: { \"aria-label\": t.l10nWeekDayListLabel } }, [t._l(t.internalSlots, function(s) {\n return [e(\"li\", { key: \"day-label-\".concat(s.id), staticClass: \"day-container\" }, [e(\"div\", { staticClass: \"label-weekday\" }, [e(\"span\", { attrs: { id: s.displayName + \"-label\" } }, [t._v(t._s(s.displayName))])]), e(\"div\", { key: \"day-slots-\".concat(s.id), staticClass: \"availability-slots\" }, [e(\"div\", { staticClass: \"availability-slot-group\" }, [t._l(s.slots, function(o, u) {\n var i, r;\n return [e(\"div\", { key: \"slot-\".concat(s.id, \"-\").concat(u), staticClass: \"availability-slot\" }, [e(\"NcDateTimePickerNative\", { staticClass: \"start-date\", attrs: { id: \"start-\".concat(s.id, \"-\").concat(u), type: \"time\", label: (i = t.l10nStartPickerLabel) == null ? void 0 : i.call(t, s.displayName), \"hide-label\": !0 }, on: { change: t.onChangeSlots }, model: { value: o.start, callback: function(a) {\n t.$set(o, \"start\", a);\n }, expression: \"slot.start\" } }), e(\"span\", { staticClass: \"to-text\" }, [t._v(\" \" + t._s(t.l10nTo) + \" \")]), e(\"NcDateTimePickerNative\", { staticClass: \"end-date\", attrs: { id: \"end-\".concat(s.id, \"-\").concat(u), type: \"time\", label: (r = t.l10nEndPickerLabel) == null ? void 0 : r.call(t, s.displayName), \"hide-label\": !0 }, on: { change: t.onChangeSlots }, model: { value: o.end, callback: function(a) {\n t.$set(o, \"end\", a);\n }, expression: \"slot.end\" } }), e(\"NcButton\", { key: \"slot-\".concat(s.id, \"-\").concat(u, \"-btn\"), staticClass: \"button\", attrs: { type: \"tertiary\", \"aria-label\": t.l10nDeleteSlot, title: t.l10nDeleteSlot }, on: { click: function(a) {\n return t.removeSlot(s, u);\n } }, scopedSlots: t._u([{ key: \"icon\", fn: function() {\n return [e(\"IconDelete\", { attrs: { size: 20 } })];\n }, proxy: !0 }], null, !0) })], 1)];\n })], 2), s.slots.length === 0 ? e(\"span\", { staticClass: \"empty-content\" }, [t._v(\" \" + t._s(t.l10nEmptyDay) + \" \")]) : t._e()]), e(\"NcButton\", { key: \"add-slot-\".concat(s.id), staticClass: \"add-another button\", attrs: { disabled: t.loading, title: t.l10nAddSlot, \"aria-label\": t.l10nAddSlot }, on: { click: function(o) {\n return t.addSlot(s);\n } }, scopedSlots: t._u([{ key: \"icon\", fn: function() {\n return [e(\"IconAdd\", { attrs: { size: 20 } })];\n }, proxy: !0 }], null, !0) })], 1)];\n })], 2);\n}, F = [], L = /* @__PURE__ */ $(\n A,\n N,\n F,\n !1,\n null,\n \"1b69eb8d\",\n null,\n null\n);\nconst U = L.exports;\n/*\n * @copyright Copyright (c) 2022 Richard Steinmetz <richard@steinmetz.cloud>\n *\n * @author Richard Steinmetz <richard@steinmetz.cloud>\n *\n * @license GNU AGPL version 3 or any later version\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 */\nconst w = P().detectUser().setApp(\"@nextcloud/calendar-availability-vue\").build();\nfunction W() {\n return {\n MO: [],\n TU: [],\n WE: [],\n TH: [],\n FR: [],\n SA: [],\n SU: []\n };\n}\nfunction H(n) {\n const t = D(n), e = new _(t), s = e.getFirstSubcomponent(\"vavailability\");\n let o;\n const u = e.getFirstSubcomponent(\"vtimezone\");\n u && (o = u.getFirstProperty(\"tzid\").getFirstValue());\n const i = s.getAllSubcomponents(\"available\"), r = W();\n return i.forEach((a) => {\n const l = a.getFirstProperty(\"dtstart\").getFirstValue().toJSDate(), p = a.getFirstProperty(\"dtend\").getFirstValue().toJSDate(), d = a.getFirstProperty(\"rrule\");\n if (d.getFirstValue().freq !== \"WEEKLY\") {\n w.warn(\"rrule not supported\", {\n rrule: d.toICALString()\n });\n return;\n }\n d.getFirstValue().getComponent(\"BYDAY\").forEach((c) => {\n r[c].push({\n start: l.getTime() / 1e3,\n end: p.getTime() / 1e3\n });\n });\n }), {\n slots: r,\n timezoneId: o\n };\n}\nfunction B(n, t) {\n const e = new ICAL.Component(\"vcalendar\");\n e.addPropertyWithValue(\"prodid\", \"Nextcloud DAV app\");\n const s = T(t);\n if (s) {\n const i = new ICAL.Component(ICAL.parse(s));\n e.addSubcomponent(i);\n } else {\n const i = new ICAL.Component(\"vtimezone\");\n i.addPropertyWithValue(\"tzid\", t), e.addSubcomponent(i);\n }\n const o = new ICAL.Component(\"vavailability\"), u = n.reduce((i, r) => {\n var d;\n const a = new Date(r.start * 1e3), l = new Date(r.end * 1e3), p = [\n a.getHours(),\n a.getMinutes(),\n l.getHours(),\n l.getMinutes()\n ].join(\"-\");\n return {\n ...i,\n [p]: [...(d = i[p]) != null ? d : [], r]\n };\n }, {});\n return Object.keys(u).map((i) => {\n const r = u[i], a = r[0].start, l = r[0].end, p = r.map((m) => m.day).filter((m, y, f) => f.indexOf(m) === y), d = new ICAL.Component(\"available\");\n return d.addPropertyWithValue(\"dtstart\", ICAL.Time.fromJSDate(new Date(a * 1e3), !1)).setParameter(\"tzid\", t), d.addPropertyWithValue(\"dtend\", ICAL.Time.fromJSDate(new Date(l * 1e3), !1)).setParameter(\"tzid\", t), d.addPropertyWithValue(\"uid\", k()), d.addPropertyWithValue(\"rrule\", {\n freq: \"WEEKLY\",\n byday: p\n }), d;\n }).map(o.addSubcomponent.bind(o)), e.addSubcomponent(o), e.toString();\n}\nexport {\n U as CalendarAvailability,\n W as getEmptySlots,\n B as slotsToVavailability,\n H as 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(response.data)\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 users 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=23e55ed8\"\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 users 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-1b69eb8d] {\n padding: 0 10px;\n position: absolute;\n}\n.availability-slots[data-v-1b69eb8d] {\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-1b69eb8d] {\n display: flex;\n flex-direction: row;\n align-items: center;\n}\n.availability-slot-group[data-v-1b69eb8d] {\n display: flex;\n flex-direction: column;\n}\n.time-zone[data-v-1b69eb8d] {\n padding: 32px 12px 12px 0;\n}\n.week-day-container[data-v-1b69eb8d] {\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 gap: 6px;\n}\n.button[data-v-1b69eb8d] {\n align-self: flex-end;\n}\n.label-weekday[data-v-1b69eb8d] {\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-1b69eb8d] {\n height: 50px;\n display: flex;\n align-items: center;\n}\n.add-another[data-v-1b69eb8d] {\n background-color: transparent;\n border: none;\n opacity: .5;\n display: inline-flex;\n padding: 0;\n margin: 0 0 3px;\n}\n.add-another[data-v-1b69eb8d]:hover {\n opacity: 1;\n}\n.to-text[data-v-1b69eb8d] {\n padding-right: 12px;\n}\n.time-zone-text[data-v-1b69eb8d] {\n padding-left: 22px;\n}\n.empty-content[data-v-1b69eb8d] {\n color: var(--color-text-lighter);\n display: inline-flex;\n align-items: center;\n}\n.start-date[data-v-1b69eb8d] {\n padding-right: 12px;\n}\n.day-container[data-v-1b69eb8d] {\n display: flex;\n max-width: 500px;\n width: 100%;\n gap: 24px;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./node_modules/@nextcloud/calendar-availability-vue/dist/assets/index-1OlNbSWJ.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,eAAe;EACf,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;EACvB,QAAQ;AACV;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,WAAW;EACX,oBAAoB;EACpB,UAAU;EACV,eAAe;AACjB;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;AACX\",\"sourcesContent\":[\".availability-day[data-v-1b69eb8d] {\\n padding: 0 10px;\\n position: absolute;\\n}\\n.availability-slots[data-v-1b69eb8d] {\\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-1b69eb8d] {\\n display: flex;\\n flex-direction: row;\\n align-items: center;\\n}\\n.availability-slot-group[data-v-1b69eb8d] {\\n display: flex;\\n flex-direction: column;\\n}\\n.time-zone[data-v-1b69eb8d] {\\n padding: 32px 12px 12px 0;\\n}\\n.week-day-container[data-v-1b69eb8d] {\\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 gap: 6px;\\n}\\n.button[data-v-1b69eb8d] {\\n align-self: flex-end;\\n}\\n.label-weekday[data-v-1b69eb8d] {\\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-1b69eb8d] {\\n height: 50px;\\n display: flex;\\n align-items: center;\\n}\\n.add-another[data-v-1b69eb8d] {\\n background-color: transparent;\\n border: none;\\n opacity: .5;\\n display: inline-flex;\\n padding: 0;\\n margin: 0 0 3px;\\n}\\n.add-another[data-v-1b69eb8d]:hover {\\n opacity: 1;\\n}\\n.to-text[data-v-1b69eb8d] {\\n padding-right: 12px;\\n}\\n.time-zone-text[data-v-1b69eb8d] {\\n padding-left: 22px;\\n}\\n.empty-content[data-v-1b69eb8d] {\\n color: var(--color-text-lighter);\\n display: inline-flex;\\n align-items: center;\\n}\\n.start-date[data-v-1b69eb8d] {\\n padding-right: 12px;\\n}\\n.day-container[data-v-1b69eb8d] {\\n display: flex;\\n max-width: 500px;\\n width: 100%;\\n gap: 24px;\\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, `.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","/* 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, 2021 */\n\n/* jshint ignore:start */\nvar ICAL;\n(function() {\n /* istanbul ignore next */\n if (typeof module === 'object') {\n // CommonJS, where exports may be different each time.\n ICAL = module.exports;\n } else if (typeof HTMLScriptElement !== 'undefined' && 'noModule' in HTMLScriptElement.prototype) {\n // Until we use ES6 exports, using <script type=\"module\"> we define ICAL on the window global.\n window.ICAL = ICAL = {};\n } else if (typeof ICAL !== 'object') {\n ICAL = {};\n }\n})();\n/* jshint ignore:end */\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, 2011-2015 */\n\n/**\n * The number of characters before iCalendar line folding should occur\n * @type {Number}\n * @default 75\n */\nICAL.foldLength = 75;\n\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 */\nICAL.newLineChar = '\\r\\n';\n\n\n/**\n * Helper functions used in various places within ical.js\n * @namespace\n */\nICAL.helpers = {\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 {ICAL.Component} vcal The top-level VCALENDAR component.\n * @return {ICAL.Component} The ICAL.Component that was passed in.\n */\n updateTimezones: function(vcal) {\n var allsubs, properties, vtimezones, reqTzid, i, tzid;\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 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 if ((tzid = properties[i].getParameter(\"tzid\"))) {\n reqTzid[tzid] = true;\n }\n }\n\n //delete any vtimezones that are not on the reqTzid list.\n for (i in vtimezones) {\n if (vtimezones.hasOwnProperty(i) && !reqTzid[i]) {\n vcal.removeSubcomponent(vtimezones[i]);\n }\n }\n\n //create any missing, but registered timezones\n for (i in reqTzid) {\n if (\n reqTzid.hasOwnProperty(i) &&\n !vtimezones[i] &&\n ICAL.TimezoneService.has(i)\n ) {\n vcal.addSubcomponent(ICAL.TimezoneService.get(i).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 */\n isStrictlyNaN: function(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 */\n strictParseInt: function(string) {\n var result = parseInt(string, 10);\n\n if (ICAL.helpers.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 */\n formatClassType: function 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 */\n unescapedIndexOf: function(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 */\n binsearchInsert: function(list, seekVal, cmpfunc) {\n if (!list.length)\n return 0;\n\n var 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 * Convenience function for debug output\n * @private\n */\n dumpn: /* istanbul ignore next */ function() {\n if (!ICAL.debug) {\n return;\n }\n\n if (typeof (console) !== 'undefined' && 'log' in console) {\n ICAL.helpers.dumpn = function consoleDumpn(input) {\n console.log(input);\n };\n } else {\n ICAL.helpers.dumpn = function geckoDumpn(input) {\n dump(input + '\\n');\n };\n }\n\n ICAL.helpers.dumpn(arguments[0]);\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 */\n clone: function(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 var arr = [];\n for (var i = 0; i < aSrc.length; i++) {\n arr.push(aDeep ? ICAL.helpers.clone(aSrc[i], true) : aSrc[i]);\n }\n return arr;\n } else {\n var obj = {};\n for (var name in aSrc) {\n // uses prototype method to allow use of Object.create(null);\n /* istanbul ignore else */\n if (Object.prototype.hasOwnProperty.call(aSrc, name)) {\n if (aDeep) {\n obj[name] = ICAL.helpers.clone(aSrc[name], true);\n } else {\n obj[name] = aSrc[name];\n }\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 */\n foldline: function foldline(aLine) {\n var result = \"\";\n var 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 var 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 < ICAL.foldLength + 1)\n pos += cp > 65535 ? 2 : 1;\n else {\n result += ICAL.newLineChar + \" \" + line.substring(0, pos);\n line = line.substring(pos);\n pos = line_length = 0;\n }\n }\n return result.substr(ICAL.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 */\n pad2: function pad(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 var 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 */\n trunc: function trunc(number) {\n return (number < 0 ? Math.ceil(number) : Math.floor(number));\n },\n\n /**\n * Poor-man's cross-browser inheritance for JavaScript. Doesn't support all\n * the features, but enough for our usage.\n *\n * @param {Function} base The base class constructor function.\n * @param {Function} child The child class constructor function.\n * @param {Object} extra Extends the prototype with extra properties\n * and methods\n */\n inherits: function(base, child, extra) {\n function F() {}\n F.prototype = base.prototype;\n child.prototype = new F();\n\n if (extra) {\n ICAL.helpers.extend(extra, child.prototype);\n }\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 */\n extend: function(source, target) {\n for (var key in source) {\n var 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};\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, 2011-2015 */\n\n/** @namespace ICAL */\n\n\n/**\n * This symbol is further described later on\n * @ignore\n */\nICAL.design = (function() {\n 'use strict';\n\n var FROM_ICAL_NEWLINE = /\\\\\\\\|\\\\;|\\\\,|\\\\[Nn]/g;\n var TO_ICAL_NEWLINE = /\\\\|;|,|\\n/g;\n var FROM_VCARD_NEWLINE = /\\\\\\\\|\\\\,|\\\\[Nn]/g;\n var TO_VCARD_NEWLINE = /\\\\|,|\\n/g;\n\n function createTextType(fromNewline, toNewline) {\n var result = {\n matches: /.*/,\n\n fromICAL: function(aValue, structuredEscape) {\n return replaceNewline(aValue, fromNewline, structuredEscape);\n },\n\n toICAL: function(aValue, structuredEscape) {\n var regEx = toNewline;\n if (structuredEscape)\n regEx = new RegExp(regEx.source + '|' + structuredEscape);\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 /* istanbul ignore next */\n default:\n return str;\n }\n });\n }\n };\n return result;\n }\n\n // default types used multiple times\n var DEFAULT_TYPE_TEXT = { defaultType: \"text\" };\n var DEFAULT_TYPE_TEXT_MULTI = { defaultType: \"text\", multiValue: \",\" };\n var DEFAULT_TYPE_TEXT_STRUCTURED = { defaultType: \"text\", structuredValue: \";\" };\n var DEFAULT_TYPE_INTEGER = { defaultType: \"integer\" };\n var DEFAULT_TYPE_DATETIME_DATE = { defaultType: \"date-time\", allowedTypes: [\"date-time\", \"date\"] };\n var DEFAULT_TYPE_DATETIME = { defaultType: \"date-time\" };\n var DEFAULT_TYPE_URI = { defaultType: \"uri\" };\n var DEFAULT_TYPE_UTCOFFSET = { defaultType: \"utc-offset\" };\n var DEFAULT_TYPE_RECUR = { defaultType: \"recur\" };\n var DEFAULT_TYPE_DATE_ANDOR_TIME = { defaultType: \"date-and-or-time\", allowedTypes: [\"date-time\", \"date\", \"text\"] };\n\n function 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 /* istanbul ignore next */\n default:\n return string;\n }\n }\n\n function 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);\n return value.replace(newline, replaceNewlineReplace);\n }\n\n var commonProperties = {\n \"categories\": DEFAULT_TYPE_TEXT_MULTI,\n \"url\": DEFAULT_TYPE_URI,\n \"version\": DEFAULT_TYPE_TEXT,\n \"uid\": DEFAULT_TYPE_TEXT\n };\n\n var 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 var parsed = parseFloat(aValue);\n if (ICAL.helpers.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 var parsed = parseInt(aValue);\n if (ICAL.helpers.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.substr(0, 3) +\n aValue.substr(4, 2);\n } else {\n // seconds\n // -050000\n return aValue.substr(0, 3) +\n aValue.substr(4, 2) +\n aValue.substr(7, 2);\n }\n },\n\n fromICAL: function(aValue) {\n if (aValue.length < 6) {\n // no seconds\n // -05:00\n return aValue.substr(0, 3) + ':' +\n aValue.substr(3, 2);\n } else {\n // seconds\n // -05:00:00\n return aValue.substr(0, 3) + ':' +\n aValue.substr(3, 2) + ':' +\n aValue.substr(5, 2);\n }\n },\n\n decorate: function(aValue) {\n return ICAL.UtcOffset.fromString(aValue);\n },\n\n undecorate: function(aValue) {\n return aValue.toString();\n }\n }\n };\n\n var icalParams = {\n // Although the syntax is DQUOTE uri DQUOTE, I don't think we should\n // enfoce 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!\n var icalValues = ICAL.helpers.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 ICAL.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 ICAL.Time.fromDateString(aValue, aProp);\n } else {\n return ICAL.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.substr(0, 4) + '-' +\n aValue.substr(4, 2) + '-' +\n aValue.substr(6, 2);\n }\n },\n\n toICAL: function(aValue) {\n // from: 2012-09-01\n // to: 20120901\n var len = aValue.length;\n\n if (len == 10) {\n return aValue.substr(0, 4) +\n aValue.substr(5, 2) +\n aValue.substr(8, 2);\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 var result = aValue.substr(0, 4) + '-' +\n aValue.substr(4, 2) + '-' +\n aValue.substr(6, 2) + 'T' +\n aValue.substr(9, 2) + ':' +\n aValue.substr(11, 2) + ':' +\n aValue.substr(13, 2);\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 var len = aValue.length;\n\n if (len == 10 && !design.strict) {\n return icalValues.date.toICAL(aValue);\n } else if (len >= 19) {\n var result = aValue.substr(0, 4) +\n aValue.substr(5, 2) +\n // grab the (DDTHH) segment\n aValue.substr(8, 5) +\n // MM\n aValue.substr(14, 2) +\n // SS\n aValue.substr(17, 2);\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 ICAL.Time.fromDateTimeString(aValue, aProp);\n } else {\n return ICAL.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 ICAL.Duration.fromString(aValue);\n },\n undecorate: function(aValue) {\n return aValue.toString();\n }\n },\n period: {\n\n fromICAL: function(string) {\n var parts = string.split('/');\n parts[0] = icalValues['date-time'].fromICAL(parts[0]);\n\n if (!ICAL.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 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 (!ICAL.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 ICAL.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 ICAL.Recur._stringToData(string, true);\n },\n\n toICAL: function(data) {\n var str = \"\";\n for (var k in data) {\n /* istanbul ignore if */\n if (!Object.prototype.hasOwnProperty.call(data, k)) {\n continue;\n }\n var val = data[k];\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 = ICAL.Recur.numericDayToIcalDay(val);\n }\n } else if (Array.isArray(val)) {\n val = val.join(\",\");\n }\n str += k.toUpperCase() + \"=\" + val + \";\";\n }\n return str.substr(0, str.length - 1);\n },\n\n decorate: function decorate(aValue) {\n return ICAL.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 var result = aValue.substr(0, 2) + ':' +\n aValue.substr(2, 2) + ':' +\n aValue.substr(4, 2);\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 var result = aValue.substr(0, 2) +\n aValue.substr(3, 2) +\n aValue.substr(6, 2);\n\n if (aValue[8] === 'Z') {\n result += 'Z';\n }\n\n return result;\n }\n }\n });\n\n var icalProperties = ICAL.helpers.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!\n var vcardValues = ICAL.helpers.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 ICAL.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.substr(0, 4) + '-' + aValue.substr(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.substr(0, 4) + aValue.substr(5);\n } else {\n return aValue;\n }\n }\n },\n\n time: {\n decorate: function(aValue) {\n return ICAL.VCardTime.fromDateAndOrTimeString(\"T\" + aValue, \"time\");\n },\n undecorate: function(aValue) {\n return aValue.toString();\n },\n fromICAL: function(aValue) {\n var splitzone = vcardValues.time._splitZone(aValue, true);\n var zone = splitzone[0], value = splitzone[1];\n\n //console.log(\"SPLIT: \",splitzone);\n\n if (value.length == 6) {\n value = value.substr(0, 2) + ':' +\n value.substr(2, 2) + ':' +\n value.substr(4, 2);\n } else if (value.length == 4 && value[0] != '-') {\n value = value.substr(0, 2) + ':' + value.substr(2, 2);\n } else if (value.length == 5) {\n value = value.substr(0, 3) + ':' + value.substr(3, 2);\n }\n\n if (zone.length == 5 && (zone[0] == '-' || zone[0] == '+')) {\n zone = zone.substr(0, 3) + ':' + zone.substr(3);\n }\n\n return value + zone;\n },\n\n toICAL: function(aValue) {\n var splitzone = vcardValues.time._splitZone(aValue);\n var zone = splitzone[0], value = splitzone[1];\n\n if (value.length == 8) {\n value = value.substr(0, 2) +\n value.substr(3, 2) +\n value.substr(6, 2);\n } else if (value.length == 5 && value[0] != '-') {\n value = value.substr(0, 2) + value.substr(3, 2);\n } else if (value.length == 6) {\n value = value.substr(0, 3) + value.substr(4, 2);\n }\n\n if (zone.length == 6 && (zone[0] == '-' || zone[0] == '+')) {\n zone = zone.substr(0, 3) + zone.substr(4);\n }\n\n return value + zone;\n },\n\n _splitZone: function(aValue, isFromIcal) {\n var lastChar = aValue.length - 1;\n var signChar = aValue.length - (isFromIcal ? 5 : 6);\n var sign = aValue[signChar];\n var zone, value;\n\n if (aValue[lastChar] == 'Z') {\n zone = aValue[lastChar];\n value = aValue.substr(0, lastChar);\n } else if (aValue.length > 6 && (sign == '-' || sign == '+')) {\n zone = aValue.substr(signChar);\n value = aValue.substr(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 ICAL.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 ICAL.VCardTime.fromDateAndOrTimeString(aValue, \"date-and-or-time\");\n },\n\n undecorate: function(aValue) {\n return aValue.toString();\n },\n\n fromICAL: function(aValue) {\n var 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 var 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 });\n\n var 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\n var vcardProperties = ICAL.helpers.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\n var vcard3Values = ICAL.helpers.extend(commonValues, {\n binary: icalValues.binary,\n date: vcardValues.date,\n \"date-time\": vcardValues[\"date-time\"],\n \"phone-number\": {\n // TODO\n /* ... */\n },\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.substr(0, 7);\n },\n\n fromICAL: function(aValue) {\n return aValue.substr(0, 7);\n },\n\n decorate: function(aValue) {\n return ICAL.UtcOffset.fromString(aValue);\n },\n\n undecorate: function(aValue) {\n return aValue.toString();\n }\n }\n });\n\n var 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\n var vcard3Properties = ICAL.helpers.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 {ICAL.design.designSet}\n */\n var icalSet = {\n value: icalValues,\n param: icalParams,\n property: icalProperties\n };\n\n /**\n * vCard 4.0 design set\n * @type {ICAL.design.designSet}\n */\n var vcardSet = {\n value: vcardValues,\n param: vcardParams,\n property: vcardProperties\n };\n\n /**\n * vCard 3.0 design set\n * @type {ICAL.design.designSet}\n */\n var vcard3Set = {\n value: vcard3Values,\n param: vcard3Params,\n property: vcard3Properties\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 * @namespace\n */\n var design = {\n /**\n * A designSet describes value, parameter and property data. It is used by\n * ther parser and stringifier in components and properties to determine they\n * should be represented.\n *\n * @typedef {Object} designSet\n * @memberOf ICAL.design\n * @property {Object} value Definitions for value types, keys are type names\n * @property {Object} param Definitions for params, keys are param names\n * @property {Object} property Defintions for properties, keys are property names\n */\n\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 {ICAL.design.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 {ICAL.design.designSet} vcard vCard VCARD\n * @property {ICAL.design.designSet} vevent iCalendar VEVENT\n * @property {ICAL.design.designSet} vtodo iCalendar VTODO\n * @property {ICAL.design.designSet} vjournal iCalendar VJOURNAL\n * @property {ICAL.design.designSet} valarm iCalendar VALARM\n * @property {ICAL.design.designSet} vtimezone iCalendar VTIMEZONE\n * @property {ICAL.design.designSet} daylight iCalendar DAYLIGHT\n * @property {ICAL.design.designSet} standard iCalendar STANDARD\n *\n * @example\n * var propertyName = 'fn';\n * var componentDesign = ICAL.design.components.vcard;\n * var 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 {ICAL.design.designSet}\n */\n icalendar: icalSet,\n\n /**\n * The design set for vCard (rfc6350/rfc7095) components.\n * @type {ICAL.design.designSet}\n */\n vcard: vcardSet,\n\n /**\n * The design set for vCard (rfc2425/rfc2426/rfc7095) components.\n * @type {ICAL.design.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 {ICAL.design.designSet} The design set for the component\n */\n getDesignSet: function(componentName) {\n var isInDesign = componentName && componentName in design.components;\n return isInDesign ? design.components[componentName] : design.defaultSet;\n }\n };\n\n return 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, 2011-2015 */\n\n\n/**\n * Contains various functions to convert jCal and jCard data back into\n * iCalendar and vCard.\n * @namespace\n */\nICAL.stringify = (function() {\n 'use strict';\n\n var LINE_ENDING = '\\r\\n';\n var DEFAULT_VALUE_TYPE = 'unknown';\n\n var design = ICAL.design;\n var helpers = ICAL.helpers;\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 */\n function stringify(jCal) {\n if (typeof jCal[0] == \"string\") {\n // This is a single component\n jCal = [jCal];\n }\n\n var i = 0;\n var len = jCal.length;\n var 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 {ICAL.design.designSet} designSet\n * The design data to use for this component\n * @return {String} The iCalendar/vCard string\n */\n stringify.component = function(component, designSet) {\n var name = component[0].toUpperCase();\n var result = 'BEGIN:' + name + LINE_ENDING;\n\n var props = component[1];\n var propIdx = 0;\n var propLen = props.length;\n\n var 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.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 var comps = component[2] || [];\n var compIdx = 0;\n var 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 {ICAL.design.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 */\n stringify.property = function(property, designSet, noFold) {\n var name = property[0].toUpperCase();\n var jsName = property[0];\n var params = property[1];\n\n var line = name;\n\n var paramName;\n for (paramName in params) {\n var value = params[paramName];\n\n /* istanbul ignore else */\n if (params.hasOwnProperty(paramName)) {\n var multiValue = (paramName in designSet.param) && designSet.param[paramName].multiValue;\n if (multiValue && Array.isArray(value)) {\n if (designSet.param[paramName].multiValueSeparateDQuote) {\n multiValue = '\"' + multiValue + '\"';\n }\n value = value.map(stringify._rfc6868Unescape);\n value = stringify.multiValue(value, multiValue, \"unknown\", null, designSet);\n } else {\n value = stringify._rfc6868Unescape(value);\n }\n\n\n line += ';' + paramName.toUpperCase();\n line += '=' + stringify.propertyValue(value);\n }\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 var valueType = property[2];\n\n if (!designSet) {\n designSet = design.defaultSet;\n }\n\n var propDetails;\n var multiValue = false;\n var structuredValue = false;\n var 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 : ICAL.helpers.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.propertyValue\n * @param {String} value Raw property value\n * @return {String} Given or escaped value when needed\n */\n stringify.propertyValue = function(value) {\n\n if ((helpers.unescapedIndexOf(value, ',') === -1) &&\n (helpers.unescapedIndexOf(value, ':') === -1) &&\n (helpers.unescapedIndexOf(value, ';') === -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 {ICAL.design.designSet} designSet\n * The design data to use for this property\n *\n * @return {String} iCalendar/vCard string for value\n */\n stringify.multiValue = function(values, delim, type, innerMulti, designSet, structuredValue) {\n var result = '';\n var len = values.length;\n var 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 */\n stringify.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 */\n stringify._rfc6868Unescape = function(val) {\n return val.replace(/[\\n^\"]/g, function(x) {\n return RFC6868_REPLACE_MAP[x];\n });\n };\n var RFC6868_REPLACE_MAP = { '\"': \"^'\", \"\\n\": \"^n\", \"^\": \"^^\" };\n\n return stringify;\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, 2011-2015 */\n\n\n/**\n * Contains various functions to parse iCalendar and vCard data.\n * @namespace\n */\nICAL.parse = (function() {\n 'use strict';\n\n var CHAR = /[^ \\t]/;\n var MULTIVALUE_DELIMITER = ',';\n var VALUE_DELIMITER = ':';\n var PARAM_DELIMITER = ';';\n var PARAM_NAME_DELIMITER = '=';\n var DEFAULT_VALUE_TYPE = 'unknown';\n var DEFAULT_PARAM_TYPE = 'text';\n\n var design = ICAL.design;\n var helpers = ICAL.helpers;\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 * @class\n */\n function ParserError(message) {\n this.message = message;\n this.name = 'ParserError';\n\n try {\n throw new Error();\n } catch (e) {\n if (e.stack) {\n var split = e.stack.split('\\n');\n split.shift();\n this.stack = split.join('\\n');\n }\n }\n }\n\n ParserError.prototype = Error.prototype;\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 * @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 */\n function parser(input) {\n var state = {};\n var root = state.component = [];\n\n state.stack = [root];\n\n parser._eachLine(input, function(err, line) {\n parser._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 {ICAL.design.designSet=} designSet\n * The design data to use for this property\n * @return {Object}\n * The jCal Object containing the property\n */\n parser.property = function(str, designSet) {\n var state = {\n component: [[], []],\n designSet: designSet || design.defaultSet\n };\n parser._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 */\n parser.component = function(str) {\n return parser(str);\n };\n\n // classes & constants\n parser.ParserError = ParserError;\n\n /**\n * The state for parsing content lines from an iCalendar/vCard string.\n *\n * @private\n * @memberof ICAL.parse\n * @typedef {Object} parserState\n * @property {ICAL.design.designSet} designSet The design set to use for parsing\n * @property {ICAL.Component[]} stack The stack of components being processed\n * @property {ICAL.Component} component The currently active component\n */\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 {ICAL.parse.parserState} The current state of the line parsing\n */\n parser._handleContentLine = function(line, state) {\n // break up the parts of the line\n var valuePos = line.indexOf(VALUE_DELIMITER);\n var paramPos = line.indexOf(PARAM_DELIMITER);\n\n var lastParamIndex;\n var lastValuePos;\n\n // name of property or begin/end\n var name;\n var value;\n // params is only overridden if paramPos !== -1.\n // we can't do params = params || {} later on\n // because it sacrifices ops.\n var 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 var parsedParams;\n if (paramPos !== -1) {\n name = line.substring(0, paramPos).toLowerCase();\n parsedParams = parser._parseParameters(line.substring(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.substring(lastParamIndex).indexOf(VALUE_DELIMITER)) !== -1) {\n value = line.substring(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.substring(0, valuePos).toLowerCase();\n value = line.substring(valuePos + 1);\n\n if (name === 'begin') {\n var 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.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 var valueType;\n var multiValue = false;\n var structuredValue = false;\n var propertyDetails;\n\n if (name in state.designSet.property) {\n propertyDetails = state.designSet.property[name];\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;\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 var result;\n if (multiValue && structuredValue) {\n value = parser._parseMultiValue(value, structuredValue, valueType, [], multiValue, state.designSet, structuredValue);\n result = [name, params, valueType, value];\n } else if (multiValue) {\n result = [name, params, valueType];\n parser._parseMultiValue(value, multiValue, valueType, result, null, state.designSet, false);\n } else if (structuredValue) {\n value = parser._parseMultiValue(value, structuredValue, valueType, [], null, state.designSet, structuredValue);\n result = [name, params, valueType, value];\n } else {\n value = parser._parseValue(value, valueType, state.designSet, false);\n result = [name, 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.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 */\n parser._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 {Numeric} 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 */\n parser._parseParameters = function(line, start, designSet) {\n var lastParam = start;\n var pos = 0;\n var delim = PARAM_NAME_DELIMITER;\n var result = {};\n var name, lcname;\n var value, valuePos = -1;\n var 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 = helpers.unescapedIndexOf(line, delim, pos + 1)) !== -1) {\n\n name = line.substr(lastParam + 1, pos - lastParam - 1);\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 = parser._rfc6868Escape('\"' + multiValue + '\"');\n }\n }\n\n var nextChar = line[pos + 1];\n if (nextChar === '\"') {\n valuePos = pos + 2;\n pos = helpers.unescapedIndexOf(line, '\"', valuePos);\n if (multiValue && pos != -1) {\n var extendedValue = true;\n while (extendedValue) {\n if (line[pos + 1] == multiValue && line[pos + 2] == '\"') {\n pos = helpers.unescapedIndexOf(line, '\"', 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.substr(valuePos, pos - valuePos);\n lastParam = helpers.unescapedIndexOf(line, PARAM_DELIMITER, pos);\n if (lastParam === -1) {\n pos = false;\n }\n } else {\n valuePos = pos + 1;\n\n // move to next \";\"\n var nextPos = helpers.unescapedIndexOf(line, PARAM_DELIMITER, valuePos);\n var propValuePos = helpers.unescapedIndexOf(line, 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.substr(valuePos, nextPos - valuePos);\n }\n\n value = parser._rfc6868Escape(value);\n if (multiValue) {\n var delimiter = mvdelim || multiValue;\n value = parser._parseMultiValue(value, delimiter, type, [], null, designSet);\n } else {\n value = parser._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 */\n parser._rfc6868Escape = function(val) {\n return val.replace(/\\^['n^]/g, function(x) {\n return RFC6868_REPLACE_MAP[x];\n });\n };\n var RFC6868_REPLACE_MAP = { \"^'\": '\"', \"^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 {ICAL.design.designSet} designSet The design data for this value\n * @return {?|Array.<?>} Either an array of results, or the first result\n */\n parser._parseMultiValue = function(buffer, delim, type, result, innerMulti, designSet, structuredValue) {\n var pos = 0;\n var lastPos = 0;\n var value;\n if (delim.length === 0) {\n return buffer;\n }\n\n // split each piece\n while ((pos = helpers.unescapedIndexOf(buffer, delim, lastPos)) !== -1) {\n value = buffer.substr(lastPos, pos - lastPos);\n if (innerMulti) {\n value = parser._parseMultiValue(value, innerMulti, type, [], null, designSet, structuredValue);\n } else {\n value = parser._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.substr(lastPos);\n if (innerMulti) {\n value = parser._parseMultiValue(value, innerMulti, type, [], null, designSet, structuredValue);\n } else {\n value = parser._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 */\n parser._eachLine = function(buffer, callback) {\n var len = buffer.length;\n var lastPos = buffer.search(CHAR);\n var pos = lastPos;\n var line;\n var firstChar;\n\n var 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.substr(\n lastPos + 1,\n pos - lastPos - (newlineOffset + 1)\n );\n } else {\n if (line)\n callback(null, line);\n // push line\n line = buffer.substr(\n lastPos,\n pos - lastPos - newlineOffset\n );\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 return parser;\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, 2011-2015 */\n\n\n/**\n * This symbol is further described later on\n * @ignore\n */\nICAL.Component = (function() {\n 'use strict';\n\n var PROPERTY_INDEX = 1;\n var COMPONENT_INDEX = 2;\n var NAME_INDEX = 0;\n\n /**\n * @classdesc\n * Wraps a jCal component, adding convenience methods to add, remove and\n * update subcomponents and properties.\n *\n * @class\n * @alias ICAL.Component\n * @param {Array|String} jCal Raw jCal component data OR name of new\n * component\n * @param {ICAL.Component} parent Parent component to associate\n */\n function Component(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\n Component.prototype = {\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 * The name of this component\n * @readonly\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 {ICAL.design.designSet}\n * @private\n */\n get _designSet() {\n var parentDesign = this.parent && this.parent._designSet;\n return parentDesign || ICAL.design.getDesignSet(this.name);\n },\n\n _hydrateComponent: function(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 var 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 _hydrateProperty: function(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 var prop = new ICAL.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 {?ICAL.Component} The found subcomponent\n */\n getFirstSubcomponent: function(name) {\n if (name) {\n var i = 0;\n var comps = this.jCal[COMPONENT_INDEX];\n var len = comps.length;\n\n for (; i < len; i++) {\n if (comps[i][NAME_INDEX] === name) {\n var 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 {ICAL.Component[]} The found sub components\n */\n getAllSubcomponents: function(name) {\n var jCalLen = this.jCal[COMPONENT_INDEX].length;\n var i = 0;\n\n if (name) {\n var comps = this.jCal[COMPONENT_INDEX];\n var 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: function(name) {\n var props = this.jCal[PROPERTY_INDEX];\n var len = props.length;\n\n var 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 {?ICAL.Property} The found property\n */\n getFirstProperty: function(name) {\n if (name) {\n var i = 0;\n var props = this.jCal[PROPERTY_INDEX];\n var len = props.length;\n\n for (; i < len; i++) {\n if (props[i][NAME_INDEX] === name) {\n var 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 {?String} The found property value.\n */\n getFirstPropertyValue: function(name) {\n var 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 {ICAL.Property[]} List of properties\n */\n getAllProperties: function(name) {\n var jCalLen = this.jCal[PROPERTY_INDEX].length;\n var i = 0;\n\n if (name) {\n var props = this.jCal[PROPERTY_INDEX];\n var 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 _removeObjectByIndex: function(jCalIndex, cache, index) {\n cache = cache || [];\n // remove cached version\n if (cache[index]) {\n var 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 _removeObject: function(jCalIndex, cache, nameOrObject) {\n var i = 0;\n var objects = this.jCal[jCalIndex];\n var len = objects.length;\n var 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 _removeAllObjects: function(jCalIndex, cache, name) {\n var cached = this[cache];\n\n // Unfortunately we have to run through all children to reset their\n // parent property.\n var objects = this.jCal[jCalIndex];\n var 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 {ICAL.Component} component The component to add\n * @return {ICAL.Component} The passed in component\n */\n addSubcomponent: function(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 var 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 {ICAL.Component|String} nameOrComp Name of component, or component\n * @return {Boolean} True when comp is removed\n */\n removeSubcomponent: function(nameOrComp) {\n var 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: function(name) {\n var 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 {ICAL.Property} property The property to add\n * @return {ICAL.Property} The passed in property\n */\n addProperty: function(property) {\n if (!(property instanceof ICAL.Property)) {\n throw new TypeError('must 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 var 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 {ICAL.Property} The created property\n */\n addPropertyWithValue: function(name, value) {\n var prop = new ICAL.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 {ICAL.Property} The created property\n */\n updatePropertyWithValue: function(name, value) {\n var 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|ICAL.Property} nameOrProp Property name or instance to remove\n * @return {Boolean} True, when deleted\n */\n removeProperty: function(nameOrProp) {\n var 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: function(name) {\n var 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: function() {\n return this.jCal;\n },\n\n /**\n * The string representation of this component.\n * @return {String}\n */\n toString: function() {\n return ICAL.stringify.component(\n this.jCal, this._designSet\n );\n }\n };\n\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 Component.fromString = function(str) {\n return new Component(ICAL.parse.component(str));\n };\n\n return Component;\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, 2011-2015 */\n\n\n/**\n * This symbol is further described later on\n * @ignore\n */\nICAL.Property = (function() {\n 'use strict';\n\n var NAME_INDEX = 0;\n var PROP_INDEX = 1;\n var TYPE_INDEX = 2;\n var VALUE_INDEX = 3;\n\n var design = ICAL.design;\n\n /**\n * @classdesc\n * Provides a layer on top of the raw jCal object for manipulating a single\n * property, with its parameters and value.\n *\n * @description\n * It is important to note that mutations done in the wrapper\n * directly mutate the jCal object used to initialize.\n *\n * Can also be used to create new properties by passing\n * the name of the property (as a String).\n *\n * @class\n * @alias ICAL.Property\n * @param {Array|String} jCal Raw jCal representation OR\n * the new name of the property\n *\n * @param {ICAL.Component=} parent Parent component\n */\n function Property(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.defaultType];\n this.jCal[TYPE_INDEX] = this.getDefaultType();\n } else {\n this.jCal = jCal;\n }\n this._updateType();\n }\n\n Property.prototype = {\n\n /**\n * The value type for this property\n * @readonly\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 * @readonly\n * @type {String}\n */\n get name() {\n return this.jCal[NAME_INDEX];\n },\n\n /**\n * The parent component for this property.\n * @type {ICAL.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 var designSetChanged = !this._parent || (p && p._designSet != this._parent._designSet);\n\n this._parent = p;\n\n if (this.type == design.defaultType && designSetChanged) {\n this.jCal[TYPE_INDEX] = this.getDefaultType();\n this._updateType();\n }\n\n return p;\n },\n\n /**\n * The design set for this property, e.g. icalendar vs vcard\n *\n * @type {ICAL.design.designSet}\n * @private\n */\n get _designSet() {\n return this.parent ? this.parent._designSet : design.defaultSet;\n },\n\n /**\n * Updates the type metadata from the current jCal type and design set.\n *\n * @private\n */\n _updateType: function() {\n var designSet = this._designSet;\n\n if (this.type in designSet.value) {\n var designType = designSet.value[this.type];\n\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: function(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: function(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: function(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: function(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: function(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: function(name) {\n var 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: function(name, value) {\n var 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: function(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: function() {\n var name = this.jCal[NAME_INDEX];\n var designSet = this._designSet;\n\n if (name in designSet.property) {\n var details = designSet.property[name];\n if ('defaultType' in details) {\n return details.defaultType;\n }\n }\n return design.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: function(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 {String} First property value\n */\n getFirstValue: function() {\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: function() {\n var 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 var i = 0;\n var 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: function() {\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: function(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 var len = values.length;\n var 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: function(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: function() {\n return this.jCal;\n },\n\n /**\n * The string representation of this component.\n * @return {String}\n */\n toICALString: function() {\n return ICAL.stringify.property(\n this.jCal, this._designSet, true\n );\n }\n };\n\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 {ICAL.design.designSet=} designSet The design data to use for this property\n * @return {ICAL.Property} The created iCalendar property\n */\n Property.fromString = function(str, designSet) {\n return new Property(ICAL.parse.property(str, designSet));\n };\n\n return Property;\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, 2011-2015 */\n\n\n/**\n * This symbol is further described later on\n * @ignore\n */\nICAL.UtcOffset = (function() {\n\n /**\n * @classdesc\n * This class represents the \"duration\" value type, with various calculation\n * and manipulation methods.\n *\n * @class\n * @alias ICAL.UtcOffset\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 function UtcOffset(aData) {\n this.fromData(aData);\n }\n\n UtcOffset.prototype = {\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 {ICAL.UtcOffset} The cloned object\n */\n clone: function() {\n return ICAL.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: function(aData) {\n if (aData) {\n for (var key in aData) {\n /* istanbul ignore else */\n if (aData.hasOwnProperty(key)) {\n this[key] = aData[key];\n }\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: function(aSeconds) {\n var secs = Math.abs(aSeconds);\n\n this.factor = aSeconds < 0 ? -1 : 1;\n this.hours = ICAL.helpers.trunc(secs / 3600);\n\n secs -= (this.hours * 3600);\n this.minutes = ICAL.helpers.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: function() {\n return this.factor * (60 * this.minutes + 3600 * this.hours);\n },\n\n /**\n * Compare this utc offset with another one.\n *\n * @param {ICAL.UtcOffset} other The other offset to compare with\n * @return {Number} -1, 0 or 1 for less/equal/greater\n */\n compare: function icaltime_compare(other) {\n var a = this.toSeconds();\n var b = other.toSeconds();\n return (a > b) - (b > a);\n },\n\n _normalize: function() {\n // Range: 97200 seconds (with 1 hour inbetween)\n var secs = this.toSeconds();\n var 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: function() {\n return ICAL.design.icalendar.value['utc-offset'].toICAL(this.toString());\n },\n\n /**\n * The string representation of this utc-offset.\n * @return {String}\n */\n toString: function toString() {\n return (this.factor == 1 ? \"+\" : \"-\") +\n ICAL.helpers.pad2(this.hours) + ':' +\n ICAL.helpers.pad2(this.minutes);\n }\n };\n\n /**\n * Creates a new {@link ICAL.UtcOffset} instance from the passed string.\n *\n * @param {String} aString The string to parse\n * @return {ICAL.Duration} The created utc-offset instance\n */\n UtcOffset.fromString = function(aString) {\n // -05:00\n var options = {};\n //TODO: support seconds per rfc5545 ?\n options.factor = (aString[0] === '+') ? 1 : -1;\n options.hours = ICAL.helpers.strictParseInt(aString.substr(1, 2));\n options.minutes = ICAL.helpers.strictParseInt(aString.substr(4, 2));\n\n return new ICAL.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 UtcOffset.fromSeconds = function(aSeconds) {\n var instance = new UtcOffset();\n instance.fromSeconds(aSeconds);\n return instance;\n };\n\n return UtcOffset;\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, 2011-2015 */\n\n\n/**\n * This symbol is further described later on\n * @ignore\n */\nICAL.Binary = (function() {\n\n /**\n * @classdesc\n * Represents the BINARY value type, which contains extra methods for\n * encoding and decoding.\n *\n * @class\n * @alias ICAL.Binary\n * @param {String} aValue The binary data for this value\n */\n function Binary(aValue) {\n this.value = aValue;\n }\n\n Binary.prototype = {\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: function 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: function setEncodedValue(aValue) {\n this.value = this._b64_encode(aValue);\n },\n\n _b64_encode: function base64_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 var b64 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\" +\n \"abcdefghijklmnopqrstuvwxyz0123456789+/=\";\n var 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 var r = data.length % 3;\n\n return (r ? enc.slice(0, r - 3) : enc) + '==='.slice(r || 3);\n\n },\n\n _b64_decode: function base64_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 var b64 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\" +\n \"abcdefghijklmnopqrstuvwxyz0123456789+/=\";\n var 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: function() {\n return this.value;\n }\n };\n\n /**\n * Creates a binary value from the given string.\n *\n * @param {String} aString The binary value string\n * @return {ICAL.Binary} The binary value instance\n */\n Binary.fromString = function(aString) {\n return new Binary(aString);\n };\n\n return Binary;\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, 2011-2015 */\n\n\n\n(function() {\n /**\n * @classdesc\n * This class represents the \"period\" value type, with various calculation\n * and manipulation methods.\n *\n * @description\n * The passed data object cannot contain both and end date and a duration.\n *\n * @class\n * @param {Object} aData An object with members of the period\n * @param {ICAL.Time=} aData.start The start of the period\n * @param {ICAL.Time=} aData.end The end of the period\n * @param {ICAL.Duration=} aData.duration The duration of the period\n */\n ICAL.Period = function icalperiod(aData) {\n this.wrappedJSObject = this;\n\n if (aData && 'start' in aData) {\n if (aData.start && !(aData.start instanceof ICAL.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 ICAL.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 ICAL.Duration)) {\n throw new TypeError('.duration must be an instance of ICAL.Duration');\n }\n this.duration = aData.duration;\n }\n };\n\n ICAL.Period.prototype = {\n\n /**\n * The start of the period\n * @type {ICAL.Time}\n */\n start: null,\n\n /**\n * The end of the period\n * @type {ICAL.Time}\n */\n end: null,\n\n /**\n * The duration of the period\n * @type {ICAL.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 {ICAL.Period} The cloned object\n */\n clone: function() {\n return ICAL.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 {ICAL.Duration} The calculated duration\n */\n getDuration: function duration() {\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 {ICAL.Time} The calculated end date\n */\n getEnd: function() {\n if (this.end) {\n return this.end;\n } else {\n var 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: function 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: function() {\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: function() {\n return this.start.toICALString() + \"/\" +\n (this.end || this.duration).toICALString();\n }\n };\n\n /**\n * Creates a new {@link ICAL.Period} instance from the passed string.\n *\n * @param {String} str The string to parse\n * @param {ICAL.Property} prop The property this period will be on\n * @return {ICAL.Period} The created period instance\n */\n ICAL.Period.fromString = function fromString(str, prop) {\n var 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 var options = {\n start: ICAL.Time.fromDateTimeString(parts[0], prop)\n };\n\n var end = parts[1];\n\n if (ICAL.Duration.isValueString(end)) {\n options.duration = ICAL.Duration.fromString(end);\n } else {\n options.end = ICAL.Time.fromDateTimeString(end, prop);\n }\n\n return new ICAL.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 {ICAL.Time=} aData.start The start of the period\n * @param {ICAL.Time=} aData.end The end of the period\n * @param {ICAL.Duration=} aData.duration The duration of the period\n * @return {ICAL.Period} The period instance\n */\n ICAL.Period.fromData = function fromData(aData) {\n return new ICAL.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 {Array<String,String>} aData The jCal data array\n * @param {ICAL.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 {ICAL.Period} The period instance\n */\n ICAL.Period.fromJSON = function(aData, aProp, aLenient) {\n function fromDateOrDateTimeString(aValue, aProp) {\n if (aLenient) {\n return ICAL.Time.fromString(aValue, aProp);\n } else {\n return ICAL.Time.fromDateTimeString(aValue, aProp);\n }\n }\n\n if (ICAL.Duration.isValueString(aData[1])) {\n return ICAL.Period.fromData({\n start: fromDateOrDateTimeString(aData[0], aProp),\n duration: ICAL.Duration.fromString(aData[1])\n });\n } else {\n return ICAL.Period.fromData({\n start: fromDateOrDateTimeString(aData[0], aProp),\n end: fromDateOrDateTimeString(aData[1], aProp)\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, 2011-2015 */\n\n\n\n(function() {\n var DURATION_LETTERS = /([PDWHMTS]{1,1})/;\n\n /**\n * @classdesc\n * This class represents the \"duration\" value type, with various calculation\n * and manipulation methods.\n *\n * @class\n * @alias ICAL.Duration\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 ICAL.Duration = function icalduration(data) {\n this.wrappedJSObject = this;\n this.fromData(data);\n };\n\n ICAL.Duration.prototype = {\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 {ICAL.Duration} The cloned object\n */\n clone: function clone() {\n return ICAL.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: function toSeconds() {\n var 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 {ICAL.Duration} Returns this instance\n */\n fromSeconds: function fromSeconds(aSeconds) {\n var secs = Math.abs(aSeconds);\n\n this.isNegative = (aSeconds < 0);\n this.days = ICAL.helpers.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 = ICAL.helpers.trunc(secs / 3600);\n secs -= this.hours * 3600;\n\n this.minutes = ICAL.helpers.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: function fromData(aData) {\n var propsToCopy = [\"weeks\", \"days\", \"hours\",\n \"minutes\", \"seconds\", \"isNegative\"];\n for (var key in propsToCopy) {\n /* istanbul ignore if */\n if (!propsToCopy.hasOwnProperty(key)) {\n continue;\n }\n var prop = propsToCopy[key];\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: function 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 {ICAL.Duration} aOther The instance to compare with\n * @return {Number} -1, 0 or 1 for less/equal/greater\n */\n compare: function compare(aOther) {\n var thisSeconds = this.toSeconds();\n var 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: function normalize() {\n this.fromSeconds(this.toSeconds());\n },\n\n /**\n * The string representation of this duration.\n * @return {String}\n */\n toString: function toString() {\n if (this.toSeconds() == 0) {\n return \"PT0S\";\n } else {\n var 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: function() {\n return this.toString();\n }\n };\n\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 {ICAL.Duration} The newly created duration instance\n */\n ICAL.Duration.fromSeconds = function icalduration_from_seconds(aSeconds) {\n return (new ICAL.Duration()).fromSeconds(aSeconds);\n };\n\n /**\n * Internal helper function to handle a chunk of a duration.\n *\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 */\n function parseDurationChunk(letter, number, object) {\n var 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 var num = parseInt(number, 10);\n if (ICAL.helpers.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 /**\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 ICAL.Duration.isValueString = function(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 {ICAL.Duration} The created duration instance\n */\n ICAL.Duration.fromString = function icalduration_from_string(aStr) {\n var pos = 0;\n var dict = Object.create(null);\n var chunks = 0;\n\n while ((pos = aStr.search(DURATION_LETTERS)) !== -1) {\n var type = aStr[pos];\n var numeric = aStr.substr(0, pos);\n aStr = aStr.substr(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 ICAL.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 {ICAL.Duration} The createad duration instance\n */\n ICAL.Duration.fromData = function icalduration_from_data(aData) {\n return new ICAL.Duration(aData);\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, 2011-2012 */\n\n\n\n(function() {\n var OPTIONS = [\"tzid\", \"location\", \"tznames\",\n \"latitude\", \"longitude\"];\n\n /**\n * @classdesc\n * Timezone representation, created by passing in a tzid and component.\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 * @class\n * @param {ICAL.Component|Object} data options for class\n * @param {String|ICAL.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 ICAL.Timezone = function icaltimezone(data) {\n this.wrappedJSObject = this;\n this.fromData(data);\n };\n\n ICAL.Timezone.prototype = {\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 {ICAL.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 {ICAL.Component|Object} aData options for class\n * @param {String|ICAL.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: function fromData(aData) {\n this.expandedUntilYear = 0;\n this.changes = [];\n\n if (aData instanceof ICAL.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 var jCal = ICAL.parse(aData.component);\n this.component = new ICAL.Component(jCal);\n } else if (aData.component instanceof ICAL.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 (var key in OPTIONS) {\n /* istanbul ignore else */\n if (OPTIONS.hasOwnProperty(key)) {\n var prop = OPTIONS[key];\n if (aData && prop in aData) {\n this[prop] = aData[prop];\n }\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 ICAL.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 {ICAL.Time} tt The time to check for\n * @return {Number} utc offset in seconds\n */\n utcOffset: function utcOffset(tt) {\n if (this == ICAL.Timezone.utcTimezone || this == ICAL.Timezone.localTimezone) {\n return 0;\n }\n\n this._ensureCoverage(tt.year);\n\n if (!this.changes.length) {\n return 0;\n }\n\n var 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 var change_num = this._findNearbyChange(tt_change);\n var change_num_to_use = -1;\n var step = 1;\n\n // TODO: replace with bin search?\n for (;;) {\n var change = ICAL.helpers.clone(this.changes[change_num], true);\n if (change.utcOffset < change.prevUtcOffset) {\n ICAL.Timezone.adjust_change(change, 0, 0, 0, change.utcOffset);\n } else {\n ICAL.Timezone.adjust_change(change, 0, 0, 0,\n change.prevUtcOffset);\n }\n\n var cmp = ICAL.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 var zone_change = this.changes[change_num_to_use];\n var utcOffset_change = zone_change.utcOffset - zone_change.prevUtcOffset;\n\n if (utcOffset_change < 0 && change_num_to_use > 0) {\n var tmp_change = ICAL.helpers.clone(zone_change, true);\n ICAL.Timezone.adjust_change(tmp_change, 0, 0, 0,\n tmp_change.prevUtcOffset);\n\n if (ICAL.Timezone._compare_change_fn(tt_change, tmp_change) < 0) {\n var prev_zone_change = this.changes[change_num_to_use - 1];\n\n var 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: function icaltimezone_find_nearby_change(change) {\n // find the closest match\n var idx = ICAL.helpers.binsearchInsert(\n this.changes,\n change,\n ICAL.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: function(aYear) {\n if (ICAL.Timezone._minimumExpansionYear == -1) {\n var today = ICAL.Time.now();\n ICAL.Timezone._minimumExpansionYear = today.year;\n }\n\n var changesEndYear = aYear;\n if (changesEndYear < ICAL.Timezone._minimumExpansionYear) {\n changesEndYear = ICAL.Timezone._minimumExpansionYear;\n }\n\n changesEndYear += ICAL.Timezone.EXTRA_COVERAGE;\n\n if (changesEndYear > ICAL.Timezone.MAX_YEAR) {\n changesEndYear = ICAL.Timezone.MAX_YEAR;\n }\n\n if (!this.changes.length || this.expandedUntilYear < aYear) {\n var subcomps = this.component.getAllSubcomponents();\n var compLen = subcomps.length;\n var compIdx = 0;\n\n for (; compIdx < compLen; compIdx++) {\n this._expandComponent(\n subcomps[compIdx], changesEndYear, this.changes\n );\n }\n\n this.changes.sort(ICAL.Timezone._compare_change_fn);\n this.expandedUntilYear = changesEndYear;\n }\n },\n\n _expandComponent: function(aComponent, aYear, changes) {\n if (!aComponent.hasProperty(\"dtstart\") ||\n !aComponent.hasProperty(\"tzoffsetto\") ||\n !aComponent.hasProperty(\"tzoffsetfrom\")) {\n return null;\n }\n\n var dtstart = aComponent.getFirstProperty(\"dtstart\").getFirstValue();\n var change;\n\n function convert_tzoffset(offset) {\n return offset.factor * (offset.hours * 3600 + offset.minutes * 60);\n }\n\n function init_changes() {\n var 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 ICAL.Timezone.adjust_change(change, 0, 0, 0,\n -change.prevUtcOffset);\n changes.push(change);\n } else {\n var props = aComponent.getAllProperties(\"rdate\");\n for (var rdatekey in props) {\n /* istanbul ignore if */\n if (!props.hasOwnProperty(rdatekey)) {\n continue;\n }\n var rdate = props[rdatekey];\n var 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 != ICAL.Timezone.utcTimezone) {\n ICAL.Timezone.adjust_change(change, 0, 0, 0,\n -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 != ICAL.Timezone.utcTimezone) {\n ICAL.Timezone.adjust_change(change, 0, 0, 0,\n -change.prevUtcOffset);\n }\n }\n\n changes.push(change);\n }\n\n var rrule = aComponent.getFirstProperty(\"rrule\");\n\n if (rrule) {\n rrule = rrule.getFirstValue();\n change = init_changes();\n\n if (rrule.until && rrule.until.zone == ICAL.Timezone.utcTimezone) {\n rrule.until.adjust(0, 0, 0, change.prevUtcOffset);\n rrule.until.zone = ICAL.Timezone.localTimezone;\n }\n\n var iterator = rrule.iterator(dtstart);\n\n var 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 ICAL.Timezone.adjust_change(change, 0, 0, 0,\n -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: function toString() {\n return (this.tznames ? this.tznames : this.tzid);\n }\n };\n\n ICAL.Timezone._compare_change_fn = function icaltimezone_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 {ICAL.Time} tt The time to convert\n * @param {ICAL.Timezone} from_zone The source zone to convert from\n * @param {ICAL.Timezone} to_zone The target zone to convert to\n * @return {ICAL.Time} The converted date/time object\n */\n ICAL.Timezone.convert_time = function icaltimezone_convert_time(tt, from_zone, to_zone) {\n if (tt.isDate ||\n from_zone.tzid == to_zone.tzid ||\n from_zone == ICAL.Timezone.localTimezone ||\n to_zone == ICAL.Timezone.localTimezone) {\n tt.zone = to_zone;\n return tt;\n }\n\n var 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 {ICAL.Component|Object} aData options for class\n * @param {String|ICAL.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 ICAL.Timezone.fromData = function icaltimezone_fromData(aData) {\n var tt = new ICAL.Timezone();\n return tt.fromData(aData);\n };\n\n /**\n * The instance describing the UTC timezone\n * @type {ICAL.Timezone}\n * @constant\n * @instance\n */\n ICAL.Timezone.utcTimezone = ICAL.Timezone.fromData({\n tzid: \"UTC\"\n });\n\n /**\n * The instance describing the local timezone\n * @type {ICAL.Timezone}\n * @constant\n * @instance\n */\n ICAL.Timezone.localTimezone = ICAL.Timezone.fromData({\n tzid: \"floating\"\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 ICAL.Timezone.adjust_change = function icaltimezone_adjust_change(change, days, hours, minutes, seconds) {\n return ICAL.Time.prototype.adjust.call(\n change,\n days,\n hours,\n minutes,\n seconds,\n change\n );\n };\n\n ICAL.Timezone._minimumExpansionYear = -1;\n ICAL.Timezone.MAX_YEAR = 2035; // TODO this is because of time_t, which we don't need. Still usefull?\n ICAL.Timezone.EXTRA_COVERAGE = 5;\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, 2011-2015 */\n\n\n/**\n * This symbol is further described later on\n * @ignore\n */\nICAL.TimezoneService = (function() {\n var zones;\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 * @namespace\n * @alias ICAL.TimezoneService\n */\n var TimezoneService = {\n get count() {\n return Object.keys(zones).length;\n },\n\n reset: function() {\n zones = Object.create(null);\n var utc = ICAL.Timezone.utcTimezone;\n\n zones.Z = utc;\n zones.UTC = utc;\n zones.GMT = utc;\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 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 {?ICAL.Timezone} The timezone, or null if not found\n */\n get: function(tzid) {\n return zones[tzid];\n },\n\n /**\n * Registers a timezone object or component.\n *\n * @param {String=} name\n * The name of the timezone. Defaults to the component's TZID if not\n * passed.\n * @param {ICAL.Component|ICAL.Timezone} zone\n * The initialized zone or vtimezone.\n */\n register: function(name, timezone) {\n if (name instanceof ICAL.Component) {\n if (name.name === 'vtimezone') {\n timezone = new ICAL.Timezone(name);\n name = timezone.tzid;\n }\n }\n\n if (timezone instanceof ICAL.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 {?ICAL.Timezone} The removed timezone, or null if not registered\n */\n remove: function(tzid) {\n return (delete zones[tzid]);\n }\n };\n\n // initialize defaults\n TimezoneService.reset();\n\n return TimezoneService;\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, 2011-2015 */\n\n\n\n(function() {\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 * @alias ICAL.Time\n * @class\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 {ICAL.Timezone} zone timezone this position occurs in\n */\n ICAL.Time = function icaltime(data, zone) {\n this.wrappedJSObject = this;\n var 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 ICAL.Time._dowCache = {};\n ICAL.Time._wnCache = {};\n\n ICAL.Time.prototype = {\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 * @readonly\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 {ICAL.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 {ICAL.Time} The cloned object\n */\n clone: function() {\n return new ICAL.Time(this._time, this.zone);\n },\n\n /**\n * Reset the time instance to epoch time\n */\n reset: function icaltime_reset() {\n this.fromData(ICAL.Time.epochTime);\n this.zone = ICAL.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 {ICAL.Timezone} timezone The timezone to set\n */\n resetTo: function icaltime_resetTo(year, month, day,\n 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 If true, the UTC values of the date will be used\n */\n fromJSDate: function icaltime_fromJSDate(aDate, useUTC) {\n if (!aDate) {\n this.reset();\n } else {\n if (useUTC) {\n this.zone = ICAL.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 = ICAL.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 {ICAL.Timezone=} aZone Timezone this position occurs in\n */\n fromData: function fromData(aData, aZone) {\n if (aData) {\n for (var key in aData) {\n /* istanbul ignore else */\n if (Object.prototype.hasOwnProperty.call(aData, key)) {\n // ical type cannot be set\n if (key === 'icaltype') continue;\n this[key] = aData[key];\n }\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 var zone = ICAL.TimezoneService.get(\n aData.timezone\n );\n\n this.zone = zone || ICAL.Timezone.localTimezone;\n }\n\n if (aData && \"zone\" in aData) {\n this.zone = aData.zone;\n }\n\n if (!this.zone) {\n this.zone = ICAL.Timezone.localTimezone;\n }\n\n this._cachedUnixTime = null;\n return this;\n },\n\n /**\n * Calculate the day of week.\n * @param {ICAL.Time.weekDay=} aWeekStart\n * The week start weekday, defaults to SUNDAY\n * @return {ICAL.Time.weekDay}\n */\n dayOfWeek: function icaltime_dayOfWeek(aWeekStart) {\n var firstDow = aWeekStart || ICAL.Time.SUNDAY;\n var dowCacheKey = (this.year << 12) + (this.month << 8) + (this.day << 3) + firstDow;\n if (dowCacheKey in ICAL.Time._dowCache) {\n return ICAL.Time._dowCache[dowCacheKey];\n }\n\n // Using Zeller's algorithm\n var q = this.day;\n var m = this.month + (this.month < 3 ? 12 : 0);\n var Y = this.year - (this.month < 3 ? 1 : 0);\n\n var h = (q + Y + ICAL.helpers.trunc(((m + 1) * 26) / 10) + ICAL.helpers.trunc(Y / 4));\n /* istanbul ignore else */\n if (true /* gregorian */) {\n h += ICAL.helpers.trunc(Y / 100) * 6 + ICAL.helpers.trunc(Y / 400);\n } else {\n h += 5;\n }\n\n // Normalize to 1 = wkst\n h = ((h + 7 - firstDow) % 7) + 1;\n ICAL.Time._dowCache[dowCacheKey] = h;\n return h;\n },\n\n /**\n * Calculate the day of year.\n * @return {Number}\n */\n dayOfYear: function dayOfYear() {\n var is_leap = (ICAL.Time.isLeapYear(this.year) ? 1 : 0);\n var diypm = ICAL.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 {ICAL.Time.weekDay=} aWeekStart\n * The week start weekday, defaults to SUNDAY\n * @return {ICAL.Time} The start of the week (cloned)\n */\n startOfWeek: function startOfWeek(aWeekStart) {\n var firstDow = aWeekStart || ICAL.Time.SUNDAY;\n var 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 {ICAL.Time.weekDay=} aWeekStart\n * The week start weekday, defaults to SUNDAY\n * @return {ICAL.Time} The end of the week (cloned)\n */\n endOfWeek: function endOfWeek(aWeekStart) {\n var firstDow = aWeekStart || ICAL.Time.SUNDAY;\n var result = this.clone();\n result.day += (7 - this.dayOfWeek() + firstDow - ICAL.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 {ICAL.Time} The start of the month (cloned)\n */\n startOfMonth: function startOfMonth() {\n var 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 {ICAL.Time} The end of the month (cloned)\n */\n endOfMonth: function endOfMonth() {\n var result = this.clone();\n result.day = ICAL.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 {ICAL.Time} The start of the year (cloned)\n */\n startOfYear: function startOfYear() {\n var 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 {ICAL.Time} The end of the year (cloned)\n */\n endOfYear: function endOfYear() {\n var 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 {ICAL.Time.weekDay=} aFirstDayOfWeek\n * The week start weekday, defaults to SUNDAY\n * @return {Number} The calculated day of year\n */\n startDoyWeek: function startDoyWeek(aFirstDayOfWeek) {\n var firstDow = aFirstDayOfWeek || ICAL.Time.SUNDAY;\n var 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: function() {\n return ICAL.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: function icaltime_nthWeekDay(aDayOfWeek, aPos) {\n var daysInMonth = ICAL.Time.daysInMonth(this.month, this.year);\n var weekday;\n var pos = aPos;\n\n var start = 0;\n\n var 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 var startDow = otherDay.dayOfWeek();\n\n // calculate the difference between current\n // day of the week and desired day of the week\n var 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 var 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 {ICAL.Time.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: function(aDayOfWeek, aPos) {\n var dow = this.dayOfWeek();\n\n if (aPos === 0 && dow === aDayOfWeek) {\n return true;\n }\n\n // get pos\n var 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 ICAL.Time.weekOneStarts\n * @param {ICAL.Time.weekDay} aWeekStart The weekday the week starts with\n * @return {Number} The ISO week number\n */\n weekNumber: function weekNumber(aWeekStart) {\n var wnCacheKey = (this.year << 12) + (this.month << 8) + (this.day << 3) + aWeekStart;\n if (wnCacheKey in ICAL.Time._wnCache) {\n return ICAL.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 var week1;\n\n var dt = this.clone();\n dt.isDate = true;\n var isoyear = this.year;\n\n if (dt.month == 12 && dt.day > 25) {\n week1 = ICAL.Time.weekOneStarts(isoyear + 1, aWeekStart);\n if (dt.compare(week1) < 0) {\n week1 = ICAL.Time.weekOneStarts(isoyear, aWeekStart);\n } else {\n isoyear++;\n }\n } else {\n week1 = ICAL.Time.weekOneStarts(isoyear, aWeekStart);\n if (dt.compare(week1) < 0) {\n week1 = ICAL.Time.weekOneStarts(--isoyear, aWeekStart);\n }\n }\n\n var daysBetween = (dt.subtractDate(week1).toSeconds() / 86400);\n var answer = ICAL.helpers.trunc(daysBetween / 7) + 1;\n ICAL.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 {ICAL.Duration} aDuration The duration to add\n */\n addDuration: function icaltime_add(aDuration) {\n var 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 var second = this.second;\n var minute = this.minute;\n var hour = this.hour;\n var 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 {ICAL.Time} aDate The date to substract\n * @return {ICAL.Duration} The difference as a duration\n */\n subtractDate: function icaltime_subtract(aDate) {\n var unixTime = this.toUnixTime() + this.utcOffset();\n var other = aDate.toUnixTime() + aDate.utcOffset();\n return ICAL.Duration.fromSeconds(unixTime - other);\n },\n\n /**\n * Subtract the date details, taking timezones into account.\n *\n * @param {ICAL.Time} aDate The date to subtract\n * @return {ICAL.Duration} The difference in duration\n */\n subtractDateTz: function icaltime_subtract_abs(aDate) {\n var unixTime = this.toUnixTime();\n var other = aDate.toUnixTime();\n return ICAL.Duration.fromSeconds(unixTime - other);\n },\n\n /**\n * Compares the ICAL.Time instance with another one.\n *\n * @param {ICAL.Duration} aOther The instance to compare with\n * @return {Number} -1, 0 or 1 for less/equal/greater\n */\n compare: function icaltime_compare(other) {\n var a = this.toUnixTime();\n var 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 {ICAL.Duration} other The instance to compare with\n * @param {ICAL.Timezone} tz The timezone to compare in\n * @return {Number} -1, 0 or 1 for less/equal/greater\n */\n compareDateOnlyTz: function icaltime_compareDateOnlyTz(other, tz) {\n function cmp(attr) {\n return ICAL.Time._cmp_attr(a, b, attr);\n }\n var a = this.convertToZone(tz);\n var b = other.convertToZone(tz);\n var rc = 0;\n\n if ((rc = cmp(\"year\")) != 0) return rc;\n if ((rc = cmp(\"month\")) != 0) return rc;\n if ((rc = cmp(\"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 {ICAL.Timezone} zone The zone to convert to\n * @return {ICAL.Time} The copy, converted to the zone\n */\n convertToZone: function convertToZone(zone) {\n var copy = this.clone();\n var zone_equals = (this.zone.tzid == zone.tzid);\n\n if (!this.isDate && !zone_equals) {\n ICAL.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: function utc_offset() {\n if (this.zone == ICAL.Timezone.localTimezone ||\n this.zone == ICAL.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: function() {\n var string = this.toString();\n\n if (string.length > 10) {\n return ICAL.design.icalendar.value['date-time'].toICAL(string);\n } else {\n return ICAL.design.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: function toString() {\n var result = this.year + '-' +\n ICAL.helpers.pad2(this.month) + '-' +\n ICAL.helpers.pad2(this.day);\n\n if (!this.isDate) {\n result += 'T' + ICAL.helpers.pad2(this.hour) + ':' +\n ICAL.helpers.pad2(this.minute) + ':' +\n ICAL.helpers.pad2(this.second);\n\n if (this.zone === ICAL.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: function toJSDate() {\n if (this.zone == ICAL.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: function icaltime_normalize() {\n var isDate = this._time.isDate;\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: function icaltime_adjust(aExtraDays, aExtraHours,\n aExtraMinutes, aExtraSeconds, aTime) {\n\n var minutesOverflow, hoursOverflow,\n daysOverflow = 0, yearsOverflow = 0;\n\n var second, minute, hour, day;\n var daysInMonth;\n\n var time = aTime || this._time;\n\n if (!time.isDate) {\n second = time.second + aExtraSeconds;\n time.second = second % 60;\n minutesOverflow = ICAL.helpers.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 = ICAL.helpers.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 = ICAL.helpers.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 = ICAL.helpers.trunc((time.month - 1) / 12);\n } else if (time.month < 1) {\n yearsOverflow = ICAL.helpers.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 = ICAL.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 += ICAL.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: function fromUnixTime(seconds) {\n this.zone = ICAL.Timezone.utcTimezone;\n var epoch = ICAL.Time.epochTime.clone();\n epoch.adjust(0, 0, 0, seconds);\n\n this.year = epoch.year;\n this.month = epoch.month;\n this.day = epoch.day;\n this.hour = epoch.hour;\n this.minute = epoch.minute;\n this.second = Math.floor(epoch.second);\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: function toUnixTime() {\n if (this._cachedUnixTime !== null) {\n return this._cachedUnixTime;\n }\n var offset = this.utcOffset();\n\n // we use the offset trick to ensure\n // that we are getting the actual UTC time\n var 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: function() {\n var copy = [\n 'year',\n 'month',\n 'day',\n 'hour',\n 'minute',\n 'second',\n 'isDate'\n ];\n\n var result = Object.create(null);\n\n var i = 0;\n var len = copy.length;\n var 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\n (function setupNormalizeAttributes() {\n // This needs to run before any instances are created!\n function defineAttr(attr) {\n Object.defineProperty(ICAL.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 return val;\n }\n });\n\n }\n\n /* istanbul ignore else */\n if (\"defineProperty\" in Object) {\n defineAttr(\"year\");\n defineAttr(\"month\");\n defineAttr(\"day\");\n defineAttr(\"hour\");\n defineAttr(\"minute\");\n defineAttr(\"second\");\n defineAttr(\"isDate\");\n }\n })();\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 ICAL.Time.daysInMonth = function icaltime_daysInMonth(month, year) {\n var _daysInMonth = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n var days = 30;\n\n if (month < 1 || month > 12) return days;\n\n days = _daysInMonth[month];\n\n if (month == 2) {\n days += ICAL.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 ICAL.Time.isLeapYear = function 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 {ICAL.Time} The created instance with the calculated date\n */\n ICAL.Time.fromDayOfYear = function icaltime_fromDayOfYear(aDayOfYear, aYear) {\n var year = aYear;\n var doy = aDayOfYear;\n var tt = new ICAL.Time();\n tt.auto_normalize = false;\n var is_leap = (ICAL.Time.isLeapYear(year) ? 1 : 0);\n\n if (doy < 1) {\n year--;\n is_leap = (ICAL.Time.isLeapYear(year) ? 1 : 0);\n doy += ICAL.Time.daysInYearPassedMonth[is_leap][12];\n return ICAL.Time.fromDayOfYear(doy, year);\n } else if (doy > ICAL.Time.daysInYearPassedMonth[is_leap][12]) {\n is_leap = (ICAL.Time.isLeapYear(year) ? 1 : 0);\n doy -= ICAL.Time.daysInYearPassedMonth[is_leap][12];\n year++;\n return ICAL.Time.fromDayOfYear(doy, year);\n }\n\n tt.year = year;\n tt.isDate = true;\n\n for (var month = 11; month >= 0; month--) {\n if (doy > ICAL.Time.daysInYearPassedMonth[is_leap][month]) {\n tt.month = month + 1;\n tt.day = doy - ICAL.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 {ICAL.Time} The date/time instance\n */\n ICAL.Time.fromStringv2 = function fromString(str) {\n return new ICAL.Time({\n year: parseInt(str.substr(0, 4), 10),\n month: parseInt(str.substr(5, 2), 10),\n day: parseInt(str.substr(8, 2), 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 {ICAL.Time} The date/time instance\n */\n ICAL.Time.fromDateString = function(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 ICAL.Time({\n year: ICAL.helpers.strictParseInt(aValue.substr(0, 4)),\n month: ICAL.helpers.strictParseInt(aValue.substr(5, 2)),\n day: ICAL.helpers.strictParseInt(aValue.substr(8, 2)),\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 {ICAL.Property=} prop The property the date belongs to\n * @return {ICAL.Time} The date/time instance\n */\n ICAL.Time.fromDateTimeString = function(aValue, prop) {\n if (aValue.length < 19) {\n throw new Error(\n 'invalid date-time value: \"' + aValue + '\"'\n );\n }\n\n var zone;\n\n if (aValue[19] && aValue[19] === 'Z') {\n zone = 'Z';\n } else if (prop) {\n zone = prop.getParameter('tzid');\n }\n\n // 2012-10-10T10:10:10(Z)?\n var time = new ICAL.Time({\n year: ICAL.helpers.strictParseInt(aValue.substr(0, 4)),\n month: ICAL.helpers.strictParseInt(aValue.substr(5, 2)),\n day: ICAL.helpers.strictParseInt(aValue.substr(8, 2)),\n hour: ICAL.helpers.strictParseInt(aValue.substr(11, 2)),\n minute: ICAL.helpers.strictParseInt(aValue.substr(14, 2)),\n second: ICAL.helpers.strictParseInt(aValue.substr(17, 2)),\n timezone: zone\n });\n\n return time;\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 {ICAL.Property=} prop The property the date belongs to\n * @return {ICAL.Time} The date/time instance\n */\n ICAL.Time.fromString = function fromString(aValue, aProperty) {\n if (aValue.length > 10) {\n return ICAL.Time.fromDateTimeString(aValue, aProperty);\n } else {\n return ICAL.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 If true, the UTC values of the date will be used\n */\n ICAL.Time.fromJSDate = function fromJSDate(aDate, useUTC) {\n var tt = new ICAL.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 {ICAL.Timezone=} aZone Timezone this position occurs in\n */\n ICAL.Time.fromData = function fromData(aData, aZone) {\n var t = new ICAL.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 {ICAL.Time}\n */\n ICAL.Time.now = function icaltime_now() {\n return ICAL.Time.fromJSDate(new Date(), false);\n };\n\n /**\n * Returns the date on which ISO week number 1 starts.\n *\n * @see ICAL.Time#weekNumber\n * @param {Number} aYear The year to search in\n * @param {ICAL.Time.weekDay=} aWeekStart The week start weekday, used for calculation.\n * @return {ICAL.Time} The date on which week number 1 starts\n */\n ICAL.Time.weekOneStarts = function weekOneStarts(aYear, aWeekStart) {\n var t = ICAL.Time.fromData({\n year: aYear,\n month: 1,\n day: 1,\n isDate: true\n });\n\n var dow = t.dayOfWeek();\n var wkst = aWeekStart || ICAL.Time.DEFAULT_WEEK_START;\n if (dow > ICAL.Time.THURSDAY) {\n t.day += 7;\n }\n if (wkst > ICAL.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 ICAL.Time.getDominicalLetter = function(yr) {\n var LTRS = \"GFEDCBA\";\n var dom = (yr + (yr / 4 | 0) + (yr / 400 | 0) - (yr / 100 | 0) - 1) % 7;\n var isLeap = ICAL.Time.isLeapYear(yr);\n if (isLeap) {\n return LTRS[(dom + 6) % 7] + LTRS[dom];\n } else {\n return LTRS[dom];\n }\n };\n\n /**\n * January 1st, 1970 as an ICAL.Time.\n * @type {ICAL.Time}\n * @constant\n * @instance\n */\n ICAL.Time.epochTime = ICAL.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 ICAL.Time._cmp_attr = function _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 ICAL.Time.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 /**\n * The weekday, 1 = SUNDAY, 7 = SATURDAY. Access via\n * ICAL.Time.MONDAY, ICAL.Time.TUESDAY, ...\n *\n * @typedef {Number} weekDay\n * @memberof ICAL.Time\n */\n\n ICAL.Time.SUNDAY = 1;\n ICAL.Time.MONDAY = 2;\n ICAL.Time.TUESDAY = 3;\n ICAL.Time.WEDNESDAY = 4;\n ICAL.Time.THURSDAY = 5;\n ICAL.Time.FRIDAY = 6;\n ICAL.Time.SATURDAY = 7;\n\n /**\n * The default weekday for the WKST part.\n * @constant\n * @default ICAL.Time.MONDAY\n */\n ICAL.Time.DEFAULT_WEEK_START = ICAL.Time.MONDAY;\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, 2015 */\n\n\n\n(function() {\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 * @alias ICAL.VCardTime\n * @class\n * @extends {ICAL.Time}\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 {ICAL.Timezone|ICAL.UtcOffset} zone The timezone to use\n * @param {String} icaltype The type for this date/time object\n */\n ICAL.VCardTime = function(data, zone, icaltype) {\n this.wrappedJSObject = this;\n var time = this._time = Object.create(null);\n\n time.year = null;\n time.month = null;\n time.day = null;\n time.hour = null;\n time.minute = null;\n time.second = null;\n\n this.icaltype = icaltype || \"date-and-or-time\";\n\n this.fromData(data, zone);\n };\n ICAL.helpers.inherits(ICAL.Time, ICAL.VCardTime, /** @lends ICAL.VCardTime */ {\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 * The timezone. This can either be floating, UTC, or an instance of\n * ICAL.UtcOffset.\n * @type {ICAL.Timezone|ICAL.UtcOFfset}\n */\n zone: null,\n\n /**\n * Returns a clone of the vcard date/time object.\n *\n * @return {ICAL.VCardTime} The cloned object\n */\n clone: function() {\n return new ICAL.VCardTime(this._time, this.zone, this.icaltype);\n },\n\n _normalize: function() {\n return this;\n },\n\n /**\n * @inheritdoc\n */\n utcOffset: function() {\n if (this.zone instanceof ICAL.UtcOffset) {\n return this.zone.toSeconds();\n } else {\n return ICAL.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: function() {\n return ICAL.design.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: function toString() {\n var p2 = ICAL.helpers.pad2;\n var y = this.year, m = this.month, d = this.day;\n var h = this.hour, mm = this.minute, s = this.second;\n\n var hasYear = y !== null, hasMonth = m !== null, hasDay = d !== null;\n var hasHour = h !== null, hasMinute = mm !== null, hasSecond = s !== null;\n\n var datepart = (hasYear ? p2(y) + (hasMonth || hasDay ? '-' : '') : (hasMonth || hasDay ? '--' : '')) +\n (hasMonth ? p2(m) : '') +\n (hasDay ? '-' + p2(d) : '');\n var timepart = (hasHour ? p2(h) : '-') + (hasHour && hasMinute ? ':' : '') +\n (hasMinute ? p2(mm) : '') + (!hasHour && !hasMinute ? '-' : '') +\n (hasMinute && hasSecond ? ':' : '') +\n (hasSecond ? p2(s) : '');\n\n var zone;\n if (this.zone === ICAL.Timezone.utcTimezone) {\n zone = 'Z';\n } else if (this.zone instanceof ICAL.UtcOffset) {\n zone = this.zone.toString();\n } else if (this.zone === ICAL.Timezone.localTimezone) {\n zone = '';\n } else if (this.zone instanceof ICAL.Timezone) {\n var offset = ICAL.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 /**\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 {ICAL.VCardTime} The date/time instance\n */\n ICAL.VCardTime.fromDateAndOrTimeString = function(aValue, aIcalType) {\n function part(v, s, e) {\n return v ? ICAL.helpers.strictParseInt(v.substr(s, e)) : null;\n }\n var parts = aValue.split('T');\n var dt = parts[0], tmz = parts[1];\n var splitzone = tmz ? ICAL.design.vcard.value.time._splitZone(tmz) : [];\n var zone = splitzone[0], tm = splitzone[1];\n\n var stoi = ICAL.helpers.strictParseInt;\n var dtlen = dt ? dt.length : 0;\n var tmlen = tm ? tm.length : 0;\n\n var hasDashDate = dt && dt[0] == '-' && dt[1] == '-';\n var hasDashTime = tm && tm[0] == '-';\n\n var 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 = ICAL.Timezone.utcTimezone;\n } else if (zone && zone[3] == ':') {\n zone = ICAL.UtcOffset.fromString(zone);\n } else {\n zone = null;\n }\n\n return new ICAL.VCardTime(o, zone, aIcalType);\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, 2011-2015 */\n\n\n\n(function() {\n var DOW_MAP = {\n SU: ICAL.Time.SUNDAY,\n MO: ICAL.Time.MONDAY,\n TU: ICAL.Time.TUESDAY,\n WE: ICAL.Time.WEDNESDAY,\n TH: ICAL.Time.THURSDAY,\n FR: ICAL.Time.FRIDAY,\n SA: ICAL.Time.SATURDAY\n };\n\n var REVERSE_DOW_MAP = {};\n for (var key in DOW_MAP) {\n /* istanbul ignore else */\n if (DOW_MAP.hasOwnProperty(key)) {\n REVERSE_DOW_MAP[DOW_MAP[key]] = key;\n }\n }\n\n var COPY_PARTS = [\"BYSECOND\", \"BYMINUTE\", \"BYHOUR\", \"BYDAY\",\n \"BYMONTHDAY\", \"BYYEARDAY\", \"BYWEEKNO\",\n \"BYMONTH\", \"BYSETPOS\"];\n\n /**\n * @classdesc\n * This class represents the \"recur\" value type, with various calculation\n * and manipulation methods.\n *\n * @class\n * @alias ICAL.Recur\n * @param {Object} data An object with members of the recurrence\n * @param {ICAL.Recur.frequencyValues=} data.freq The frequency value\n * @param {Number=} data.interval The INTERVAL value\n * @param {ICAL.Time.weekDay=} data.wkst The week start value\n * @param {ICAL.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 ICAL.Recur = function icalrecur(data) {\n this.wrappedJSObject = this;\n this.parts = {};\n\n if (data && typeof(data) === 'object') {\n this.fromData(data);\n }\n };\n\n ICAL.Recur.prototype = {\n /**\n * An object holding the BY-parts of the recurrence rule\n * @type {Object}\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 {ICAL.Time.weekDay}\n * @default ICAL.Time.MONDAY\n */\n wkst: ICAL.Time.MONDAY,\n\n /**\n * The end of the recurrence\n * @type {?ICAL.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 {ICAL.Recur.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 * var recur = comp.getFirstPropertyValue('rrule');\n * var dtstart = comp.getFirstPropertyValue('dtstart');\n * var iter = recur.iterator(dtstart);\n * for (var 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 {ICAL.Time} aStart The item's start date\n * @return {ICAL.RecurIterator} The recurrence iterator\n */\n iterator: function(aStart) {\n return new ICAL.RecurIterator({\n rule: this,\n dtstart: aStart\n });\n },\n\n /**\n * Returns a clone of the recurrence object.\n *\n * @return {ICAL.Recur} The cloned object\n */\n clone: function clone() {\n return new ICAL.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: function 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: function 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: function addPart(aType, aValue) {\n var 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: function 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: function getComponent(aType) {\n var 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 {ICAL.Time} aStartTime The start of the event series\n * @param {ICAL.Time} aRecurrenceId The date of the last occurrence\n * @return {ICAL.Time} The next occurrence after\n */\n getNextOccurrence: function getNextOccurrence(aStartTime, aRecurrenceId) {\n var iter = this.iterator(aStartTime);\n var next, cdt;\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 {ICAL.Recur.frequencyValues=} data.freq The frequency value\n * @param {Number=} data.interval The INTERVAL value\n * @param {ICAL.Time.weekDay=} data.wkst The week start value\n * @param {ICAL.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: function(data) {\n for (var key in data) {\n var 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 = ICAL.Recur.icalDayToNumericDay(this.wkst);\n }\n\n if (this.until && !(this.until instanceof ICAL.Time)) {\n this.until = ICAL.Time.fromString(this.until);\n }\n },\n\n /**\n * The jCal representation of this recurrence type.\n * @return {Object}\n */\n toJSON: function() {\n var 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 (var k in this.parts) {\n /* istanbul ignore if */\n if (!this.parts.hasOwnProperty(k)) {\n continue;\n }\n var kparts = this.parts[k];\n if (Array.isArray(kparts) && kparts.length == 1) {\n res[k.toLowerCase()] = kparts[0];\n } else {\n res[k.toLowerCase()] = ICAL.helpers.clone(this.parts[k]);\n }\n }\n\n if (this.until) {\n res.until = this.until.toString();\n }\n if ('wkst' in this && this.wkst !== ICAL.Time.DEFAULT_WEEK_START) {\n res.wkst = ICAL.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: function icalrecur_toString() {\n // TODO retain order\n var 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 (var k in this.parts) {\n /* istanbul ignore else */\n if (this.parts.hasOwnProperty(k)) {\n str += \";\" + k + \"=\" + this.parts[k];\n }\n }\n if (this.until) {\n str += ';UNTIL=' + this.until.toICALString();\n }\n if ('wkst' in this && this.wkst !== ICAL.Time.DEFAULT_WEEK_START) {\n str += ';WKST=' + ICAL.Recur.numericDayToIcalDay(this.wkst);\n }\n return str;\n }\n };\n\n function parseNumericValue(type, min, max, value) {\n var result = value;\n\n if (value[0] === '+') {\n result = value.substr(1);\n }\n\n result = ICAL.helpers.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\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 {ICAL.Time.weekDay=} aWeekStart\n * The week start weekday, defaults to SUNDAY\n * @return {Number} Numeric value of given day\n */\n ICAL.Recur.icalDayToNumericDay = function toNumericDay(string, aWeekStart) {\n //XXX: this is here so we can deal\n // with possibly invalid string values.\n var firstDow = aWeekStart || ICAL.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 {ICAL.Time.weekDay=} aWeekStart\n * The week start weekday, defaults to SUNDAY\n * @return {String} The ICAL day value, e.g SU,MO,...\n */\n ICAL.Recur.numericDayToIcalDay = function toIcalDay(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 var firstDow = aWeekStart || ICAL.Time.SUNDAY;\n var dow = (num + firstDow - ICAL.Time.SUNDAY);\n if (dow > 7) {\n dow -= 7;\n }\n return REVERSE_DOW_MAP[dow];\n };\n\n var VALID_DAY_NAMES = /^(SU|MO|TU|WE|TH|FR|SA)$/;\n var VALID_BYDAY_PART = /^([+-])?(5[0-3]|[1-4][0-9]|[1-9])?(SU|MO|TU|WE|TH|FR|SA)$/;\n\n /**\n * Possible frequency values for the FREQ part\n * (YEARLY, MONTHLY, WEEKLY, DAILY, HOURLY, MINUTELY, SECONDLY)\n *\n * @typedef {String} frequencyValues\n * @memberof ICAL.Recur\n */\n\n var ALLOWED_FREQ = ['SECONDLY', 'MINUTELY', 'HOURLY',\n 'DAILY', 'WEEKLY', 'MONTHLY', 'YEARLY'];\n\n var 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 = ICAL.helpers.strictParseInt(value);\n },\n\n INTERVAL: function(value, dict, fmtIcal) {\n dict.interval = ICAL.helpers.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 = ICAL.design.icalendar.value['date-time'].fromICAL(value);\n } else {\n dict.until = ICAL.design.icalendar.value.date.fromICAL(value);\n }\n if (!fmtIcal) {\n dict.until = ICAL.Time.fromString(dict.until);\n }\n },\n\n WKST: function(value, dict, fmtIcal) {\n if (VALID_DAY_NAMES.test(value)) {\n dict.wkst = ICAL.Recur.icalDayToNumericDay(value);\n } else {\n throw new Error('invalid WKST value \"' + value + '\"');\n }\n }\n };\n\n var partDesign = {\n BYSECOND: parseNumericValue.bind(this, 'BYSECOND', 0, 60),\n BYMINUTE: parseNumericValue.bind(this, 'BYMINUTE', 0, 59),\n BYHOUR: parseNumericValue.bind(this, '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(this, 'BYMONTHDAY', -31, 31),\n BYYEARDAY: parseNumericValue.bind(this, 'BYYEARDAY', -366, 366),\n BYWEEKNO: parseNumericValue.bind(this, 'BYWEEKNO', -53, 53),\n BYMONTH: parseNumericValue.bind(this, 'BYMONTH', 1, 12),\n BYSETPOS: parseNumericValue.bind(this, 'BYSETPOS', -366, 366)\n };\n\n\n /**\n * Creates a new {@link ICAL.Recur} instance from the passed string.\n *\n * @param {String} string The string to parse\n * @return {ICAL.Recur} The created recurrence instance\n */\n ICAL.Recur.fromString = function(string) {\n var data = ICAL.Recur._stringToData(string, false);\n return new ICAL.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 {ICAL.Recur.frequencyValues=} aData.freq The frequency value\n * @param {Number=} aData.interval The INTERVAL value\n * @param {ICAL.Time.weekDay=} aData.wkst The week start value\n * @param {ICAL.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 ICAL.Recur.fromData = function(aData) {\n return new ICAL.Recur(aData);\n };\n\n /**\n * Converts a recurrence string to a data object, suitable for the fromData\n * method.\n *\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 {ICAL.Recur} The recurrence instance\n */\n ICAL.Recur._stringToData = function(string, fmtIcal) {\n var dict = Object.create(null);\n\n // split is slower in FF but fast enough.\n // v8 however this is faster then manual split?\n var values = string.split(';');\n var len = values.length;\n\n for (var i = 0; i < len; i++) {\n var parts = values[i].split('=');\n var ucname = parts[0].toUpperCase();\n var lcname = parts[0].toLowerCase();\n var name = (fmtIcal ? lcname : ucname);\n var value = parts[1];\n\n if (ucname in partDesign) {\n var partArr = value.split(',');\n var partArrIdx = 0;\n var partArrLen = partArr.length;\n\n for (; partArrIdx < partArrLen; partArrIdx++) {\n partArr[partArrIdx] = partDesign[ucname](partArr[partArrIdx]);\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/* 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, 2011-2015 */\n\n\n/**\n * This symbol is further described later on\n * @ignore\n */\nICAL.RecurIterator = (function() {\n\n /**\n * @classdesc\n * An iterator for a single recurrence rule. This class usually doesn't have\n * to be instanciated directly, the convenience method\n * {@link ICAL.Recur#iterator} can be used.\n *\n * @description\n * The options object may contain additional members when resuming iteration from a previous run\n *\n * @description\n * The options object may contain additional members when resuming iteration\n * from a previous run.\n *\n * @class\n * @alias ICAL.RecurIterator\n * @param {Object} options The iterator options\n * @param {ICAL.Recur} options.rule The rule to iterate.\n * @param {ICAL.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 function icalrecur_iterator(options) {\n this.fromData(options);\n }\n\n icalrecur_iterator.prototype = {\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 {ICAL.Recur}\n */\n rule: null,\n\n /**\n * The start date of the event being iterated.\n * @type {ICAL.Time}\n */\n dtstart: null,\n\n /**\n * The last occurrence that was returned from the\n * {@link ICAL.RecurIterator#next} method.\n * @type {ICAL.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 {ICAL.Recur} options.rule The rule to iterate.\n * @param {ICAL.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: function(options) {\n this.rule = ICAL.helpers.formatClassType(options.rule, ICAL.Recur);\n\n if (!this.rule) {\n throw new Error('iterator requires a (ICAL.Recur) rule');\n }\n\n this.dtstart = ICAL.helpers.formatClassType(options.dtstart, ICAL.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 = ICAL.helpers.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 = ICAL.helpers.formatClassType(options.last, ICAL.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 this.init();\n }\n },\n\n /**\n * Intialize the iterator\n * @private\n */\n init: function icalrecur_iterator_init() {\n this.initialized = true;\n this.last = this.dtstart.clone();\n var 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 var bydayParts = this.ruleDayOfWeek(parts.BYDAY[0], this.rule.wkst);\n var pos = bydayParts[0];\n var dow = bydayParts[1];\n var 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 var dayName = ICAL.Recur.numericDayToIcalDay(this.dtstart.dayOfWeek());\n parts.BYDAY = [dayName];\n }\n }\n\n if (this.rule.freq == \"YEARLY\") {\n for (;;) {\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 this._nextByYearDay();\n }\n\n if (this.rule.freq == \"MONTHLY\" && this.has_by_data(\"BYDAY\")) {\n var tempLast = null;\n var initLast = this.last.clone();\n var daysInMonth = ICAL.Time.daysInMonth(this.last.month, this.last.year);\n\n // Check every weekday in BYDAY with relative dow and pos.\n for (var i in this.by_data.BYDAY) {\n /* istanbul ignore if */\n if (!this.by_data.BYDAY.hasOwnProperty(i)) {\n continue;\n }\n this.last = initLast.clone();\n var bydayParts = this.ruleDayOfWeek(this.by_data.BYDAY[i]);\n var pos = bydayParts[0];\n var dow = bydayParts[1];\n var 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 = ICAL.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\n } else if (this.has_by_data(\"BYMONTHDAY\")) {\n if (this.last.day < 0) {\n var daysInMonth = ICAL.Time.daysInMonth(this.last.month, this.last.year);\n this.last.day = daysInMonth + this.last.day + 1;\n }\n }\n\n },\n\n /**\n * Retrieve the next occurrence from the iterator.\n * @return {ICAL.Time}\n */\n next: function icalrecur_iterator_next() {\n var 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\n //XXX: right now this is just a flag and has no impact\n // we can simplify the above case to check for completed later.\n this.completed = true;\n\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\n var 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 // TODO is this valid?\n if (this.last.compare(before) == 0) {\n throw new Error(\"Same occurrence found twice, protecting \" +\n \"you from death by recursion\");\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: function next_second() {\n return this.next_generic(\"BYSECOND\", \"SECONDLY\", \"second\", \"minute\");\n },\n\n increment_second: function increment_second(inc) {\n return this.increment_generic(inc, \"second\", 60, \"minute\");\n },\n\n next_minute: function next_minute() {\n return this.next_generic(\"BYMINUTE\", \"MINUTELY\",\n \"minute\", \"hour\", \"next_second\");\n },\n\n increment_minute: function increment_minute(inc) {\n return this.increment_generic(inc, \"minute\", 60, \"hour\");\n },\n\n next_hour: function next_hour() {\n return this.next_generic(\"BYHOUR\", \"HOURLY\", \"hour\",\n \"monthday\", \"next_minute\");\n },\n\n increment_hour: function increment_hour(inc) {\n this.increment_generic(inc, \"hour\", 24, \"monthday\");\n },\n\n next_day: function next_day() {\n var has_by_day = (\"BYDAY\" in this.by_data);\n var 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: function next_week() {\n var 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 var idx = ++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 var 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: function(year, month, rules) {\n var daysInMonth = ICAL.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 var newRules = [];\n\n var ruleIdx = 0;\n var len = rules.length;\n var rule;\n\n for (; ruleIdx < len; ruleIdx++) {\n rule = rules[ruleIdx];\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: function(isInit) {\n var byMonthDay; // setup in initMonth\n var byDay = this.by_data.BYDAY;\n\n var date;\n var dateIdx = 0;\n var dateLen; // setup in initMonth\n var dayLen = byDay.length;\n\n // we are not valid by default\n var dataIsValid = 0;\n\n var daysInMonth;\n var 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 var lastDay = this.last.day;\n\n function initMonth() {\n daysInMonth = ICAL.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 var 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 var next = byMonthDay[dateIdx++];\n\n // this logic is dependant 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 (var dayIdx = 0; dayIdx < dayLen; dayIdx++) {\n var parts = this.ruleDayOfWeek(byDay[dayIdx]);\n var pos = parts[0];\n var 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: function next_month() {\n var this_freq = (this.rule.freq == \"MONTHLY\");\n var 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 var daysInMonth = ICAL.Time.daysInMonth(this.last.month, this.last.year);\n var setpos = 0;\n var setpos_total = 0;\n\n if (this.has_by_data(\"BYSETPOS\")) {\n var last_day = this.last.day;\n for (var 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 for (var 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 }\n\n var daysInMonth = ICAL.Time.daysInMonth(this.last.month, this.last.year);\n var 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\n } else {\n this.increment_month();\n var daysInMonth = ICAL.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: function next_weekday_by_week() {\n var 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 var tt = new ICAL.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 var coded_day = this.by_data.BYDAY[this.by_indices.BYDAY];\n var parts = this.ruleDayOfWeek(coded_day);\n var 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 var 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 var next = ICAL.Time.fromDayOfYear(startOfWeek + dow,\n 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: function next_year() {\n\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 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: function _nextByYearDay() {\n var doy = this.days[this.days_index];\n var 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 var next = ICAL.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 {ICAL.Time.weekDay=} aWeekStart The week start weekday\n * @return [pos, numericDow] (eg: [1, 3]) numericDow is relative to aWeekStart\n */\n ruleDayOfWeek: function ruleDayOfWeek(dow, aWeekStart) {\n var matches = dow.match(/([+-]?[0-9])?(MO|TU|WE|TH|FR|SA|SU)/);\n if (matches) {\n var pos = parseInt(matches[1] || 0, 10);\n dow = ICAL.Recur.icalDayToNumericDay(matches[2], aWeekStart);\n return [pos, dow];\n } else {\n return [0, 0];\n }\n },\n\n next_generic: function next_generic(aRuleType, aInterval, aDateAttr,\n aFollowingAttr, aPreviousIncr) {\n var has_by_rule = (aRuleType in this.by_data);\n var this_freq = (this.rule.freq == aInterval);\n var 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 var idx = this.by_indices[aRuleType];\n var 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: function increment_monthday(inc) {\n for (var i = 0; i < inc; i++) {\n var daysInMonth = ICAL.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: function 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 var years = ICAL.helpers.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\n increment_year: function increment_year(inc) {\n this.last.year += inc;\n },\n\n increment_generic: function increment_generic(inc, aDateAttr,\n aFactor, aNextIncrement) {\n this.last[aDateAttr] += inc;\n var nextunit = ICAL.helpers.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: function has_by_data(aRuleType) {\n return (aRuleType in this.rule.parts);\n },\n\n expand_year_days: function expand_year_days(aYear) {\n var t = new ICAL.Time();\n this.days = [];\n\n // We need our own copy with a few keys set\n var parts = {};\n var rules = [\"BYDAY\", \"BYWEEKNO\", \"BYMONTHDAY\", \"BYMONTH\", \"BYYEARDAY\"];\n for (var p in rules) {\n /* istanbul ignore else */\n if (rules.hasOwnProperty(p)) {\n var part = rules[p];\n if (part in this.rule.parts) {\n parts[part] = this.rule.parts[part];\n }\n }\n }\n\n if (\"BYMONTH\" in parts && \"BYWEEKNO\" in parts) {\n var valid = 1;\n var validWeeks = {};\n t.year = aYear;\n t.isDate = true;\n\n for (var monthIdx = 0; monthIdx < this.by_data.BYMONTH.length; monthIdx++) {\n var month = this.by_data.BYMONTH[monthIdx];\n t.month = month;\n t.day = 1;\n var first_week = t.weekNumber(this.rule.wkst);\n t.day = ICAL.Time.daysInMonth(month, aYear);\n var 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 (var weekIdx = 0; weekIdx < this.by_data.BYWEEKNO.length && valid; weekIdx++) {\n var 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 var partCount = Object.keys(parts).length;\n\n if (partCount == 0) {\n var 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 (var monthkey in this.by_data.BYMONTH) {\n /* istanbul ignore if */\n if (!this.by_data.BYMONTH.hasOwnProperty(monthkey)) {\n continue;\n }\n var t2 = this.dtstart.clone();\n t2.year = aYear;\n t2.month = this.by_data.BYMONTH[monthkey];\n t2.isDate = true;\n this.days.push(t2.dayOfYear());\n }\n } else if (partCount == 1 && \"BYMONTHDAY\" in parts) {\n for (var monthdaykey in this.by_data.BYMONTHDAY) {\n /* istanbul ignore if */\n if (!this.by_data.BYMONTHDAY.hasOwnProperty(monthdaykey)) {\n continue;\n }\n var t3 = this.dtstart.clone();\n var day_ = this.by_data.BYMONTHDAY[monthdaykey];\n if (day_ < 0) {\n var daysInMonth = ICAL.Time.daysInMonth(t3.month, aYear);\n day_ = day_ + daysInMonth + 1;\n }\n t3.day = day_;\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 (var monthkey in this.by_data.BYMONTH) {\n /* istanbul ignore if */\n if (!this.by_data.BYMONTH.hasOwnProperty(monthkey)) {\n continue;\n }\n var month_ = this.by_data.BYMONTH[monthkey];\n var daysInMonth = ICAL.Time.daysInMonth(month_, aYear);\n for (var monthdaykey in this.by_data.BYMONTHDAY) {\n /* istanbul ignore if */\n if (!this.by_data.BYMONTHDAY.hasOwnProperty(monthdaykey)) {\n continue;\n }\n var day_ = this.by_data.BYMONTHDAY[monthdaykey];\n if (day_ < 0) {\n day_ = day_ + daysInMonth + 1;\n }\n t.day = day_;\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) {\n // TODO unimplemented in libical\n } else if (partCount == 2 &&\n \"BYWEEKNO\" in parts &&\n \"BYMONTHDAY\" in parts) {\n // TODO unimplemented in libical\n } 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 (var monthkey in this.by_data.BYMONTH) {\n /* istanbul ignore if */\n if (!this.by_data.BYMONTH.hasOwnProperty(monthkey)) {\n continue;\n }\n var month = this.by_data.BYMONTH[monthkey];\n var daysInMonth = ICAL.Time.daysInMonth(month, aYear);\n\n t.year = aYear;\n t.month = this.by_data.BYMONTH[monthkey];\n t.day = 1;\n t.isDate = true;\n\n var first_dow = t.dayOfWeek();\n var doy_offset = t.dayOfYear() - 1;\n\n t.day = daysInMonth;\n var last_dow = t.dayOfWeek();\n\n if (this.has_by_data(\"BYSETPOS\")) {\n var set_pos_counter = 0;\n var by_month_day = [];\n for (var 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 (var 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 (var daycodedkey in this.by_data.BYDAY) {\n /* istanbul ignore if */\n if (!this.by_data.BYDAY.hasOwnProperty(daycodedkey)) {\n continue;\n }\n var coded_day = this.by_data.BYDAY[daycodedkey];\n var bydayParts = this.ruleDayOfWeek(coded_day);\n var pos = bydayParts[0];\n var dow = bydayParts[1];\n var month_day;\n\n var first_matching_day = ((dow + 7 - first_dow) % 7) + 1;\n var last_matching_day = daysInMonth - ((last_dow + 7 - dow) % 7);\n\n if (pos == 0) {\n for (var 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 var expandedDays = this.expand_by_day(aYear);\n\n for (var daykey in expandedDays) {\n /* istanbul ignore if */\n if (!expandedDays.hasOwnProperty(daykey)) {\n continue;\n }\n var day = expandedDays[daykey];\n var tt = ICAL.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 var expandedDays = this.expand_by_day(aYear);\n\n for (var daykey in expandedDays) {\n /* istanbul ignore if */\n if (!expandedDays.hasOwnProperty(daykey)) {\n continue;\n }\n var day = expandedDays[daykey];\n var tt = ICAL.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 var expandedDays = this.expand_by_day(aYear);\n\n for (var daykey in expandedDays) {\n /* istanbul ignore if */\n if (!expandedDays.hasOwnProperty(daykey)) {\n continue;\n }\n var day = expandedDays[daykey];\n var tt = ICAL.Time.fromDayOfYear(day, aYear);\n var 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) {\n // TODO unimplemted in libical\n } else if (partCount == 1 && \"BYYEARDAY\" in parts) {\n this.days = this.days.concat(this.by_data.BYYEARDAY);\n } else {\n this.days = [];\n }\n return 0;\n },\n\n expand_by_day: function expand_by_day(aYear) {\n\n var days_list = [];\n var tmp = this.last.clone();\n\n tmp.year = aYear;\n tmp.month = 1;\n tmp.day = 1;\n tmp.isDate = true;\n\n var start_dow = tmp.dayOfWeek();\n\n tmp.month = 12;\n tmp.day = 31;\n tmp.isDate = true;\n\n var end_dow = tmp.dayOfWeek();\n var end_year_day = tmp.dayOfYear();\n\n for (var daykey in this.by_data.BYDAY) {\n /* istanbul ignore if */\n if (!this.by_data.BYDAY.hasOwnProperty(daykey)) {\n continue;\n }\n var day = this.by_data.BYDAY[daykey];\n var parts = this.ruleDayOfWeek(day);\n var pos = parts[0];\n var dow = parts[1];\n\n if (pos == 0) {\n var tmp_start_doy = ((dow + 7 - start_dow) % 7) + 1;\n\n for (var doy = tmp_start_doy; doy <= end_year_day; doy += 7) {\n days_list.push(doy);\n }\n\n } else if (pos > 0) {\n var 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 var 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: function is_day_in_byday(tt) {\n for (var daykey in this.by_data.BYDAY) {\n /* istanbul ignore if */\n if (!this.by_data.BYDAY.hasOwnProperty(daykey)) {\n continue;\n }\n var day = this.by_data.BYDAY[daykey];\n var parts = this.ruleDayOfWeek(day);\n var pos = parts[0];\n var dow = parts[1];\n var 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 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: function check_set_position(aPos) {\n if (this.has_by_data('BYSETPOS')) {\n var 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: function icalrecur_sort_byday_rules(aRules) {\n for (var i = 0; i < aRules.length; i++) {\n for (var j = 0; j < i; j++) {\n var one = this.ruleDayOfWeek(aRules[j], this.rule.wkst)[1];\n var two = this.ruleDayOfWeek(aRules[i], this.rule.wkst)[1];\n\n if (one > two) {\n var tmp = aRules[i];\n aRules[i] = aRules[j];\n aRules[j] = tmp;\n }\n }\n }\n },\n\n check_contract_restriction: function check_contract_restriction(aRuleType, v) {\n var indexMapValue = icalrecur_iterator._indexMap[aRuleType];\n var ruleMapValue = icalrecur_iterator._expandMap[this.rule.freq][indexMapValue];\n var pass = false;\n\n if (aRuleType in this.by_data &&\n ruleMapValue == icalrecur_iterator.CONTRACT) {\n\n var ruleType = this.by_data[aRuleType];\n\n for (var bydatakey in ruleType) {\n /* istanbul ignore else */\n if (ruleType.hasOwnProperty(bydatakey)) {\n if (ruleType[bydatakey] == v) {\n pass = true;\n break;\n }\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: function check_contracting_rules() {\n var dow = this.last.dayOfWeek();\n var weekNo = this.last.weekNumber(this.rule.wkst);\n var 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\", ICAL.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: function setup_defaults(aRuleType, req, deftime) {\n var indexMapValue = icalrecur_iterator._indexMap[aRuleType];\n var ruleMapValue = icalrecur_iterator._expandMap[this.rule.freq][indexMapValue];\n\n if (ruleMapValue != icalrecur_iterator.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: function() {\n var 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 icalrecur_iterator._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 icalrecur_iterator._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 icalrecur_iterator.UNKNOWN = 0;\n icalrecur_iterator.CONTRACT = 1;\n icalrecur_iterator.EXPAND = 2;\n icalrecur_iterator.ILLEGAL = 3;\n\n return icalrecur_iterator;\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, 2011-2015 */\n\n\n/**\n * This symbol is further described later on\n * @ignore\n */\nICAL.RecurExpansion = (function() {\n function formatTime(item) {\n return ICAL.helpers.formatClassType(item, ICAL.Time);\n }\n\n function compareTime(a, b) {\n return a.compare(b);\n }\n\n function isRecurringComponent(comp) {\n return comp.hasProperty('rdate') ||\n comp.hasProperty('rrule') ||\n comp.hasProperty('recurrence-id');\n }\n\n /**\n * @classdesc\n * Primary class for expanding recurring rules. Can take multiple rrules,\n * rdates, exdate(s) and iterate (in order) over each next occurrence.\n *\n * Once initialized this class can also be serialized saved and continue\n * iteration from the last point.\n *\n * NOTE: it is intended that this class is to be used\n * with ICAL.Event which handles recurrence 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\n * // so it is a good idea to limit the scope\n * // of the iterations 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\n * // changed you will need to rebuild the\n * // class and start over. This only works\n * // when the component's recurrence info is the same.\n * var expand = new ICAL.RecurExpansion(JSON.parse(json));\n *\n * @description\n * The options object can be filled with the specified initial values. It can\n * also contain additional members, as a result of serializing a previous\n * expansion state, as shown in the example.\n *\n * @class\n * @alias ICAL.RecurExpansion\n * @param {Object} options\n * Recurrence expansion options\n * @param {ICAL.Time} options.dtstart\n * Start time of the event\n * @param {ICAL.Component=} options.component\n * Component for expansion, required if not resuming.\n */\n function RecurExpansion(options) {\n this.ruleDates = [];\n this.exDates = [];\n this.fromData(options);\n }\n\n RecurExpansion.prototype = {\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 {ICAL.RecurIterator[]}\n * @private\n */\n ruleIterators: null,\n\n /**\n * Array of rdate instances.\n *\n * @type {ICAL.Time[]}\n * @private\n */\n ruleDates: null,\n\n /**\n * Array of exdate instances.\n *\n * @type {ICAL.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 {ICAL.Time}\n * @private\n */\n exDate: null,\n\n /**\n * Current additional date.\n *\n * @type {ICAL.Time}\n * @private\n */\n ruleDate: null,\n\n /**\n * Start date of recurring rules.\n *\n * @type {ICAL.Time}\n */\n dtstart: null,\n\n /**\n * Last expanded time\n *\n * @type {ICAL.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 {ICAL.Time} options.dtstart\n * Start time of the event\n * @param {ICAL.Component=} options.component\n * Component for expansion, required if not resuming.\n */\n fromData: function(options) {\n var start = ICAL.helpers.formatClassType(options.dtstart, ICAL.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 = formatTime(options.last) || 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 ICAL.helpers.formatClassType(item, ICAL.RecurIterator);\n });\n\n this.ruleDateInc = options.ruleDateInc;\n this.exDateInc = options.exDateInc;\n\n if (options.ruleDates) {\n this.ruleDates = options.ruleDates.map(formatTime);\n this.ruleDate = this.ruleDates[this.ruleDateInc];\n }\n\n if (options.exDates) {\n this.exDates = options.exDates.map(formatTime);\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 {ICAL.Time}\n */\n next: function() {\n var iter;\n var ruleOfDay;\n var next;\n var compare;\n\n var maxTries = 500;\n var currentTry = 0;\n\n while (true) {\n if (currentTry++ > maxTries) {\n throw new Error(\n 'max tries have occured, rule may be impossible to forfill.'\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: function() {\n function toJSON(item) {\n return item.toJSON();\n }\n\n var 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 {ICAL.Component} component The component to search in\n * @param {String} propertyName The property name to search for\n * @return {ICAL.Time[]} The extracted dates.\n */\n _extractDates: function(component, propertyName) {\n function handleProp(prop) {\n idx = ICAL.helpers.binsearchInsert(\n result,\n prop,\n compareTime\n );\n\n // ordered insert\n result.splice(idx, 0, prop);\n }\n\n var result = [];\n var props = component.getAllProperties(propertyName);\n var len = props.length;\n var i = 0;\n var prop;\n\n var idx;\n\n for (; i < len; i++) {\n props[i].getValues().forEach(handleProp);\n }\n\n return result;\n },\n\n /**\n * Initialize the recurrence expansion.\n *\n * @private\n * @param {ICAL.Component} component The component to initialize from.\n */\n _init: function(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 (!isRecurringComponent(component)) {\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 = ICAL.helpers.binsearchInsert(\n this.ruleDates,\n this.last,\n compareTime\n );\n }\n\n this.ruleDate = this.ruleDates[this.ruleDateInc];\n }\n\n if (component.hasProperty('rrule')) {\n var rules = component.getAllProperties('rrule');\n var i = 0;\n var len = rules.length;\n\n var rule;\n var 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 = ICAL.helpers.binsearchInsert(\n this.exDates,\n this.last,\n compareTime\n );\n\n this.exDate = this.exDates[this.exDateInc];\n }\n },\n\n /**\n * Advance to the next exdate\n * @private\n */\n _nextExDay: function() {\n this.exDate = this.exDates[++this.exDateInc];\n },\n\n /**\n * Advance to the next rule date\n * @private\n */\n _nextRuleDay: function() {\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 {?ICAL.RecurIterator} Found iterator.\n */\n _nextRecurrenceIter: function() {\n var iters = this.ruleIterators;\n\n if (iters.length === 0) {\n return null;\n }\n\n var len = iters.length;\n var iter;\n var iterTime;\n var iterIdx = 0;\n var 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 return RecurExpansion;\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, 2011-2015 */\n\n\n/**\n * This symbol is further described later on\n * @ignore\n */\nICAL.Event = (function() {\n\n /**\n * @classdesc\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 * @class\n * @alias ICAL.Event\n * @param {ICAL.Component=} component The ICAL.Component to base this event on\n * @param {Object} options Options for this event\n * @param {Boolean} options.strictExceptions\n * When true, will verify exceptions are related by their UUID\n * @param {Array<ICAL.Component|ICAL.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 function Event(component, options) {\n if (!(component instanceof ICAL.Component)) {\n options = component;\n component = null;\n }\n\n if (component) {\n this.component = component;\n } else {\n this.component = new ICAL.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 Event.prototype = {\n\n THISANDFUTURE: 'THISANDFUTURE',\n\n /**\n * List of related event exceptions.\n *\n * @type {ICAL.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 {ICAL.Component|ICAL.Event} obj Component or event\n */\n relateException: function(obj) {\n if (this.isRecurrenceException()) {\n throw new Error('cannot relate exception to exceptions');\n }\n\n if (obj instanceof ICAL.Component) {\n obj = new ICAL.Event(obj);\n }\n\n if (this.strictExceptions && obj.uid !== this.uid) {\n throw new Error('attempted to relate unrelated exception');\n }\n\n var 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 var item = [\n obj.recurrenceId.toUnixTime(), id\n ];\n\n // we keep them sorted so we can find the nearest\n // value later on...\n var idx = ICAL.helpers.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: function() {\n if (!this.component.hasProperty('recurrence-id')) {\n return false;\n }\n\n var range = this.component.getFirstProperty('recurrence-id').getParameter('range');\n return range === this.THISANDFUTURE;\n },\n\n /**\n * Finds the range exception nearest to the given date.\n *\n * @param {ICAL.Time} time usually an occurrence time of an event\n * @return {?ICAL.Event} the related event/exception or null\n */\n findRangeException: function(time) {\n if (!this.rangeExceptions.length) {\n return null;\n }\n\n var utc = time.toUnixTime();\n var idx = ICAL.helpers.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 var rangeItem = this.rangeExceptions[idx];\n\n /* istanbul ignore next: sanity check only */\n if (utc < rangeItem[0]) {\n return null;\n }\n\n return rangeItem[1];\n },\n\n /**\n * This object is returned by {@link ICAL.Event#getOccurrenceDetails getOccurrenceDetails}\n *\n * @typedef {Object} occurrenceDetails\n * @memberof ICAL.Event\n * @property {ICAL.Time} recurrenceId The passed in recurrence id\n * @property {ICAL.Event} item The occurrence\n * @property {ICAL.Time} startDate The start of the occurrence\n * @property {ICAL.Time} endDate The end of the occurrence\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 {ICAL.Time} occurrence time occurrence\n * @return {ICAL.Event.occurrenceDetails} Information about the occurrence\n */\n getOccurrenceDetails: function(occurrence) {\n var id = occurrence.toString();\n var utcId = occurrence.convertToZone(ICAL.Timezone.utcTimezone).toString();\n var item;\n var 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 var rangeExceptionId = this.findRangeException(\n occurrence\n );\n var end;\n\n if (rangeExceptionId) {\n var 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 var startDiff = this._rangeExceptionCache[rangeExceptionId];\n\n if (!startDiff) {\n var original = exception.recurrenceId.clone();\n var 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 var 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 {ICAL.Time} startTime Starting point for expansion\n * @return {ICAL.RecurExpansion} Expansion object\n */\n iterator: function(startTime) {\n return new ICAL.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: function() {\n var 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: function() {\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.<ICAL.Recur.frequencyValues, Boolean>}\n * Object of recurrence flags\n */\n getRecurrenceTypes: function() {\n var rules = this.component.getAllProperties('rrule');\n var i = 0;\n var len = rules.length;\n var result = Object.create(null);\n\n for (; i < len; i++) {\n var 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 {ICAL.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 {ICAL.Time}\n */\n get endDate() {\n var endDate = this._firstProp('dtend');\n if (!endDate) {\n var 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 {ICAL.Duration}\n */\n get duration() {\n var 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 return this._setProp('location', value);\n },\n\n /**\n * The attendees in the event\n * @type {ICAL.Property[]}\n * @readonly\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 /**\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 {ICAL.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 {ICAL.Time} time The time to set\n */\n _setTime: function(propName, time) {\n var prop = this.component.getFirstProperty(propName);\n\n if (!prop) {\n prop = new ICAL.Property(propName);\n this.component.addProperty(prop);\n }\n\n // utc and local don't get a tzid\n if (\n time.zone === ICAL.Timezone.localTimezone ||\n time.zone === ICAL.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: function(name, value) {\n this.component.updatePropertyWithValue(name, value);\n },\n\n _firstProp: function(name) {\n return this.component.getFirstPropertyValue(name);\n },\n\n /**\n * The string representation of this event.\n * @return {String}\n */\n toString: function() {\n return this.component.toString();\n }\n\n };\n\n function 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 return Event;\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, 2011-2015 */\n\n\n/**\n * This symbol is further described later on\n * @ignore\n */\nICAL.ComponentParser = (function() {\n /**\n * @classdesc\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 * @class\n * @alias ICAL.ComponentParser\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 function ComponentParser(options) {\n if (typeof(options) === 'undefined') {\n options = {};\n }\n\n var key;\n for (key in options) {\n /* istanbul ignore else */\n if (options.hasOwnProperty(key)) {\n this[key] = options[key];\n }\n }\n }\n\n ComponentParser.prototype = {\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: /* istanbul 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: /* istanbul ignore next */ function(err) {},\n\n /**\n * Fired when a top level component (VTIMEZONE) is found\n *\n * @callback\n * @param {ICAL.Timezone} component Timezone object\n */\n ontimezone: /* istanbul ignore next */ function(component) {},\n\n /**\n * Fired when a top level component (VEVENT) is found.\n *\n * @callback\n * @param {ICAL.Event} component Top level component\n */\n onevent: /* istanbul 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 {ICAL.Component|String|Object} ical The component to process,\n * either in its final form, as a jCal Object, or string representation\n */\n process: function(ical) {\n //TODO: this is sync now in the future we will have a incremental parser.\n if (typeof(ical) === 'string') {\n ical = ICAL.parse(ical);\n }\n\n if (!(ical instanceof ICAL.Component)) {\n ical = new ICAL.Component(ical);\n }\n\n var components = ical.getAllSubcomponents();\n var i = 0;\n var len = components.length;\n var component;\n\n for (; i < len; i++) {\n component = components[i];\n\n switch (component.name) {\n case 'vtimezone':\n if (this.parseTimezone) {\n var tzid = component.getFirstPropertyValue('tzid');\n if (tzid) {\n this.ontimezone(new ICAL.Timezone({\n tzid: tzid,\n component: component\n }));\n }\n }\n break;\n case 'vevent':\n if (this.parseEvent) {\n this.onevent(new ICAL.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 return ComponentParser;\n}());\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=\" + {\"1110\":\"ee198291c8b389847012\",\"7422\":\"482a0a2770e9dedf21f9\"}[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)\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__(7296)))\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","randomUUID","crypto","bind","getRandomValues","rnds8","Uint8Array","rng","Error","byteToHex","i","push","slice","buf","offset","rnds","random","arr","unsafeStringify","$","n","t","e","s","o","u","r","l","a","render","staticRenderFns","_compiled","functional","_scopeId","c","$vnode","ssrContext","parent","__VUE_SSR_CONTEXT__","call","_registeredComponents","add","_ssrRegister","$root","$options","shadowRoot","_injectStyles","p","S","m","d","beforeCreate","exports","U","IconAdd","IconDelete","props","slots","type","Object","required","Boolean","default","l10nTo","String","l10nDeleteSlot","l10nEmptyDay","l10nAddSlot","l10nWeekDayListLabel","l10nMonday","l10nTuesday","l10nWednesday","l10nThursday","l10nFriday","l10nSaturday","l10nSunday","l10nStartPickerLabel","Function","l10nEndPickerLabel","internalSlots","slotsToInternalData","watch","timeStampSlotsToDateObjectSlots","map","start","end","id","displayName","MO","TU","WE","TH","FR","SA","SU","internalDataToSlots","forEach","Math","round","addSlot","onChangeSlots","removeSlot","splice","$emit","_l","key","label","change","$set","title","click","scopedSlots","_u","fn","size","proxy","length","_e","disabled","w","getClient","memoize","service","remote","generateRemoteUrl","client","createClient","setHeaders","token","requesttoken","onRequestTokenUpdate","getRequestToken","NcCheckboxRadioSwitch","CalendarAvailability","NcTimezonePicker","_Intl$DateTimeFormat$","_Intl$DateTimeFormat","saving","timezone","Intl","DateTimeFormat","resolvedOptions","timeZone","automated","timeZonePickerId","substring","mounted","slotData","async","_xml$multistatus","response","customRequest","method","xml","parseXML","availability","multistatus","propstat","prop","getFirstSubcomponent","getFirstProperty","getFirstValue","getAllSubcomponents","toJSDate","freq","getComponent","warn","rrule","toICALString","timezoneId","vavailabilityToSlots","findScheduleInboxAvailability","console","info","save","vavailability","ICAL","Component","addPropertyWithValue","parse","addSubcomponent","reduce","getHours","getMinutes","join","keys","filter","y","f","indexOf","Time","fromJSDate","setParameter","byday","slotsToVavailability","flatMap","dayId","slot","debug","saveScheduleInboxAvailability","appId","configKey","configValue","enableUserStatusAutomation","disableUserStatusAutomation","dayName","NcSettingsSection","AbsenceForm","AvailabilityForm","hideAbsenceSettings","Vue","prototype","translate","extend","Availability","$mount","___CSS_LOADER_EXPORT___","module","OPTIONS","zones","TimezoneService","foldLength","newLineChar","helpers","updateTimezones","vcal","allsubs","properties","vtimezones","reqTzid","tzid","getAllProperties","getParameter","hasOwnProperty","removeSubcomponent","has","get","component","isStrictlyNaN","number","isNaN","strictParseInt","string","result","parseInt","formatClassType","unescapedIndexOf","buffer","search","pos","binsearchInsert","list","seekVal","cmpfunc","mid","cmpval","low","high","floor","dumpn","input","log","dump","clone","aSrc","aDeep","Array","isArray","obj","foldline","aLine","line","line_length","cp","codePointAt","substr","pad2","trunc","ceil","inherits","base","child","extra","F","source","target","descr","getOwnPropertyDescriptor","defineProperty","design","FROM_VCARD_NEWLINE","TO_VCARD_NEWLINE","createTextType","fromNewline","toNewline","matches","fromICAL","aValue","structuredEscape","newline","RegExp","replace","replaceNewlineReplace","replaceNewline","toICAL","regEx","str","DEFAULT_TYPE_TEXT","defaultType","DEFAULT_TYPE_TEXT_MULTI","multiValue","DEFAULT_TYPE_TEXT_STRUCTURED","structuredValue","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","values","float","parsed","parseFloat","integer","decorate","UtcOffset","fromString","undecorate","icalValues","text","uri","aString","Binary","aBinary","aProp","strict","fromDateString","len","fromDateTimeString","duration","Duration","period","parts","split","isValueString","Period","fromJSON","toJSON","recur","Recur","_stringToData","k","val","numericDayToIcalDay","toUpperCase","fromData","aRecur","time","icalProperties","detectType","vcardValues","VCardTime","fromDateAndOrTimeString","splitzone","_splitZone","zone","isFromIcal","lastChar","signChar","sign","timestamp","vcardProperties","vcard3Values","binary","vcard","vcard3Properties","nickname","photo","bday","adr","tel","email","mailer","tz","geo","role","logo","agent","org","note","prodid","rev","sound","class","icalSet","param","allowXName","allowIanaToken","valueType","multiValueSeparateDQuote","property","vcardSet","vcard3Set","defaultSet","vcard3","vevent","vtodo","vjournal","valarm","vtimezone","daylight","standard","icalendar","getDesignSet","componentName","stringify","LINE_ENDING","DEFAULT_VALUE_TYPE","jCal","designSet","propIdx","propLen","designSetName","comps","compIdx","compLen","noFold","paramName","jsName","params","_rfc6868Unescape","propertyValue","propDetails","isDefault","delim","innerMulti","x","RFC6868_REPLACE_MAP","CHAR","ParserError","stack","shift","parser","state","root","_eachLine","err","_handleContentLine","lastParamIndex","lastValuePos","parsedParams","valuePos","paramPos","toLowerCase","_parseParameters","newComponent","pop","propertyDetails","_parseMultiValue","_parseValue","lcname","mvdelim","lastParam","_rfc6868Escape","extendedValue","nextPos","propValuePos","delimiter","lastPos","firstChar","newlineOffset","trim","_hydratedPropertyCount","_hydratedComponentCount","_designSet","_hydrateComponent","index","_components","comp","_hydrateProperty","_properties","Property","jCalLen","hasProperty","getFirstPropertyValue","_removeObjectByIndex","jCalIndex","cache","_removeObject","nameOrObject","objects","cached","_removeAllObjects","idx","nameOrComp","removed","removeAllSubcomponents","addProperty","TypeError","removeProperty","setValue","updatePropertyWithValue","nameOrProp","removeAllProperties","_parent","getDefaultType","_updateType","designSetChanged","isDecorated","isMultiValue","isStructuredValue","_hydrateValue","_values","_decorate","_undecorate","_setDecoratedValue","getFirstParameter","parameters","removeParameter","details","resetType","removeAllValues","getValues","setValues","icaltype","aData","hours","minutes","factor","fromSeconds","toSeconds","_normalize","aSeconds","secs","abs","compare","other","b","instance","decodeValue","_b64_decode","setEncodedValue","_b64_encode","h1","h2","h3","h4","bits","b64","ac","enc","tmp_arr","charCodeAt","charAt","o1","o2","o3","fromCharCode","wrappedJSObject","icalclass","getDuration","subtractDate","getEnd","addDuration","aLenient","fromDateOrDateTimeString","DURATION_LETTERS","parseDurationChunk","letter","object","isNegative","num","weeks","days","seconds","propsToCopy","reset","aOther","thisSeconds","otherSeconds","normalize","aStr","dict","create","chunks","numeric","Timezone","location","tznames","latitude","longitude","expandedUntilYear","changes","utcOffset","tt","utcTimezone","localTimezone","_ensureCoverage","tt_change","hour","minute","second","change_num","_findNearbyChange","change_num_to_use","step","prevUtcOffset","adjust_change","_compare_change_fn","zone_change","tmp_change","prev_zone_change","want_daylight","is_daylight","aYear","_minimumExpansionYear","today","now","changesEndYear","EXTRA_COVERAGE","MAX_YEAR","subcomps","_expandComponent","sort","aComponent","dtstart","convert_tzoffset","init_changes","changebase","rdatekey","isDate","until","adjust","occ","iterator","next","convert_time","from_zone","to_zone","count","utc","Z","UTC","GMT","register","remove","_time","_dowCache","_wnCache","_cachedUnixTime","_pendingNormalization","epochTime","resetTo","aDate","useUTC","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getSeconds","aZone","dayOfWeek","aWeekStart","firstDow","SUNDAY","dowCacheKey","q","Y","h","dayOfYear","is_leap","isLeapYear","daysInYearPassedMonth","startOfWeek","endOfWeek","startOfMonth","endOfMonth","daysInMonth","startOfYear","endOfYear","startDoyWeek","aFirstDayOfWeek","delta","getDominicalLetter","nthWeekDay","aDayOfWeek","aPos","weekday","otherDay","isNthWeekDay","dow","weekNumber","week1","wnCacheKey","dt","isoyear","weekOneStarts","daysBetween","answer","aDuration","mult","unixTime","toUnixTime","subtractDateTz","compareDateOnlyTz","cmp","attr","_cmp_attr","convertToZone","rc","copy","zone_equals","aExtraDays","aExtraHours","aExtraMinutes","aExtraSeconds","aTime","minutesOverflow","hoursOverflow","daysOverflow","yearsOverflow","fromUnixTime","epoch","ms","defineAttr","set","fromDayOfYear","aDayOfYear","doy","auto_normalize","fromStringv2","aProperty","wkst","DEFAULT_WEEK_START","THURSDAY","yr","LTRS","dom","MONDAY","TUESDAY","WEDNESDAY","FRIDAY","SATURDAY","p2","mm","hasMonth","hasDay","hasHour","hasMinute","hasSecond","datepart","timepart","aIcalType","part","v","tmz","tm","dtlen","tmlen","hasDashDate","hasDashTime","DOW_MAP","REVERSE_DOW_MAP","parseNumericValue","min","max","undefined","interval","aStart","RecurIterator","rule","isFinite","isByCount","addComponent","aType","ucname","setComponent","aValues","getNextOccurrence","aStartTime","aRecurrenceId","iter","uckey","partDesign","optionDesign","INTERVAL","icalDayToNumericDay","res","kparts","VALID_DAY_NAMES","VALID_BYDAY_PART","ALLOWED_FREQ","FREQ","fmtIcal","COUNT","UNTIL","WKST","test","BYSECOND","BYMINUTE","BYHOUR","BYDAY","BYMONTHDAY","BYYEARDAY","BYWEEKNO","BYMONTH","BYSETPOS","partArr","partArrIdx","partArrLen","icalrecur_iterator","completed","last","occurrence_number","by_indices","initialized","by_data","days_index","init","sort_byday_rules","setup_defaults","bydayParts","ruleDayOfWeek","wkdy","expand_year_days","increment_year","_nextByYearDay","has_by_data","tempLast","initLast","dayOfMonth","increment_month","_byDayAndMonthDay","before","next_second","next_minute","next_hour","next_day","next_week","next_month","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","week_no","normalizeByMonthDayRules","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","match","aRuleType","aInterval","aDateAttr","aFollowingAttr","aPreviousIncr","has_by_rule","dta","years","aFactor","aNextIncrement","nextunit","validWeeks","monthIdx","first_week","last_week","weekIdx","weekno","partCount","t1","monthkey","t2","monthdaykey","t3","day_","month_","expand_by_day","first_dow","doy_offset","last_dow","by_month_day","spIndex","daycodedkey","month_day","first_matching_day","last_matching_day","expandedDays","daykey","days_list","tmp","start_dow","end_dow","end_year_day","first","this_dow","aRules","j","check_contract_restriction","indexMapValue","_indexMap","ruleMapValue","_expandMap","pass","CONTRACT","ruleType","bydatakey","weekNo","req","deftime","UNKNOWN","EXPAND","ILLEGAL","RecurExpansion","formatTime","item","compareTime","ruleDates","exDates","complete","ruleIterators","ruleDateInc","exDateInc","exDate","ruleDate","_init","currentTry","_nextRecurrenceIter","_nextRuleDay","_nextExDay","_extractDates","propertyName","handleProp","iters","iterTime","chosenIter","iterIdx","Event","_rangeExceptionCache","exceptions","rangeExceptions","strictExceptions","relateException","isRecurrenceException","event","compareRangeException","THISANDFUTURE","recurrenceId","modifiesFuture","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","ComponentParser","parseEvent","parseTimezone","oncomplete","onerror","ontimezone","onevent","process","ical","zones_1","renderZoneSub","defaultStart","zoneName","includeWrapper","lines","zoneData","zonesMap","getZoneLines","Map","baseCreate","baseLodash","LazyWrapper","__wrapped__","__actions__","__dir__","__filtered__","__iteratees__","__takeCount__","__views__","constructor","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","reverse","isLaziable","setData","setWrapToString","wrapFunc","isCurry","newData","createBind","createCurry","createPartial","getData","mergeData","toInteger","flatten","overRest","setToString","noop","realNames","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","INFINITY","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","g","globalThis","window","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","baseURI","href","installedChunks","installedChunkData","promise","resolve","reject","errorType","realSrc","request","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""}
\ No newline at end of file |